diff --git a/app/build.gradle b/app/build.gradle index c41486c..da05184 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'realm-android' android { compileSdkVersion 22 - buildToolsVersion "23.0.3" + buildToolsVersion "25.0.2" defaultConfig { applicationId "com.raizlabs.android.databasecomparison" @@ -36,4 +36,5 @@ dependencies { compile 'com.github.PhilJay:MPAndroidChart:v2.1.0' compile 'de.greenrobot:eventbus:2.4.0' + compile 'cn.ieclipse.aorm:aorm-core:1.1.5' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 39e99f5..8c5110a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,6 +20,10 @@ + + diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/MainActivity.java b/app/src/main/java/com/raizlabs/android/databasecomparison/MainActivity.java index 1144e2e..5dced84 100644 --- a/app/src/main/java/com/raizlabs/android/databasecomparison/MainActivity.java +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/MainActivity.java @@ -16,6 +16,7 @@ import com.github.mikephil.charting.data.BarDataSet; import com.github.mikephil.charting.data.BarEntry; import com.raizlabs.android.databasecomparison.activeandroid.AATester; +import com.raizlabs.android.databasecomparison.aorm.AormTester; import com.raizlabs.android.databasecomparison.dbflow.DBFlowTester; import com.raizlabs.android.databasecomparison.events.LogTestDataEvent; import com.raizlabs.android.databasecomparison.events.TrialCompletedEvent; @@ -193,6 +194,7 @@ private void resetChart() { chartEntrySets.put(OrmLiteTester.FRAMEWORK_NAME, new ArrayList()); chartEntrySets.put(OllieTester.FRAMEWORK_NAME, new ArrayList()); chartEntrySets.put(RealmTester.FRAMEWORK_NAME, new ArrayList()); + chartEntrySets.put(AormTester.FRAMEWORK_NAME, new ArrayList()); //chartEntrySets.put(SugarTester.FRAMEWORK_NAME, new ArrayList()); //chartEntrySets.put(AATester.FRAMEWORK_NAME, new ArrayList()); //chartEntrySets.put(SprinklesTester.FRAMEWORK_NAME, new ArrayList()); @@ -216,6 +218,8 @@ private int getFrameworkColor(String framework) { return Color.rgb(0x64, 0xB5, 0XF6); // blue case RealmTester.FRAMEWORK_NAME: return Color.rgb(0xAE, 0xD5, 0X81); // light green + case AormTester.FRAMEWORK_NAME: + return Color.rgb(0xCC, 0xCC, 0xCC); //gray default: return Color.WHITE; } @@ -247,6 +251,7 @@ public void run() { DBFlowTester.testAddressItems(applicationContext); OllieTester.testAddressItems(applicationContext); RealmTester.testAddressItems(applicationContext); + AormTester.testAddressItems(applicationContext); //SprinklesTester.testAddressItems(applicationContext); //AATester.testAddressItems(applicationContext); //SugarTester.testAddressItems(applicationContext); @@ -273,6 +278,7 @@ public void run() { DBFlowTester.testAddressBooks(applicationContext); OllieTester.testAddressBooks(applicationContext); RealmTester.testAddressBooks(applicationContext); + AormTester.testAddressBooks(applicationContext); //SprinklesTester.testAddressBooks(applicationContext); //AATester.testAddressBooks(applicationContext); //SugarTester.testAddressBooks(applicationContext); diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/AddressBook.java b/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/AddressBook.java new file mode 100644 index 0000000..04d908d --- /dev/null +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/AddressBook.java @@ -0,0 +1,91 @@ +package com.raizlabs.android.databasecomparison.aorm; + +import com.raizlabs.android.databasecomparison.interfaces.IAddressBook; + +import java.sql.SQLException; +import java.util.Collection; + +import cn.ieclipse.aorm.Session; +import cn.ieclipse.aorm.annotation.Column; +import cn.ieclipse.aorm.annotation.Table; + +/** + * Description + * + * @author Jamling + */ + +@Table(name = "addressbook") +public class AddressBook implements IAddressBook { + + @Column(name = "id", id = true) + private long id; + @Column(name = "name") + private String name; + @Column(name = "author") + private String author; + + private Collection addresses; + + private Collection contacts; + + @Override + public void saveAll() { + + } + + public long getId() { + return id; + } + + @Override + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + @Override + public void setName(String name) { + this.name = name; + } + + public String getAuthor() { + return author; + } + + @Override + public void setAuthor(String author) { + this.author = author; + } + + @Override + public Collection getAddresses() { + return addresses; + } + + @Override + public void setAddresses(Collection addresses) { + this.addresses = addresses; + } + + @Override + public Collection getContacts() { + return contacts; + } + + @Override + public void setContacts(Collection contacts) { + this.contacts = contacts; + } + + public void insertAddressItem(Session session) throws SQLException{ + session.batchInsert(getAddresses()); + } + + public void insertContact(Session session) throws SQLException{ + session.batchInsert(getContacts()); + } +} diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/AddressItem.java b/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/AddressItem.java new file mode 100644 index 0000000..095e683 --- /dev/null +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/AddressItem.java @@ -0,0 +1,102 @@ +package com.raizlabs.android.databasecomparison.aorm; + +import com.raizlabs.android.databasecomparison.interfaces.IAddressItem; + +import cn.ieclipse.aorm.annotation.Column; +import cn.ieclipse.aorm.annotation.Table; + +/** + * Description + * + * @author Jamling + */ + +@Table(name = "addressitem") +public class AddressItem implements IAddressItem { + + @Column(name = "id", id = true) + long id; + + @Column(name = "name") + String name; + + @Column(name = "address") + String address; + + @Column(name = "city") + String city; + + @Column(name = "state") + String state; + + @Column(name = "phone") + long phone; + + @Column(name = "aid", type = "Integer") + long addressBookId; + + @Override + public void saveAll() { + + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + @Override + public void setName(String name) { + this.name = name; + } + + public String getAddress() { + return address; + } + + @Override + public void setAddress(String address) { + this.address = address; + } + + public String getCity() { + return city; + } + + @Override + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + @Override + public void setState(String state) { + this.state = state; + } + + public long getPhone() { + return phone; + } + + @Override + public void setPhone(long phone) { + this.phone = phone; + } + + @Override + public void setAddressBook(AddressBook addressBook) { + if (addressBook != null) { + this.addressBookId = addressBook.getId(); + } + } +} diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/AormTestContentProvider.java b/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/AormTestContentProvider.java new file mode 100644 index 0000000..0b81232 --- /dev/null +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/AormTestContentProvider.java @@ -0,0 +1,77 @@ +package com.raizlabs.android.databasecomparison.aorm; + +import android.content.ContentProvider; +import android.content.ContentValues; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.net.Uri; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import cn.ieclipse.aorm.Aorm; +import cn.ieclipse.aorm.Session; + +/** + * Description + * + * @author Jamling + */ + +public class AormTestContentProvider extends ContentProvider { + private static Session session; + private SQLiteOpenHelper mOpenHelper; + + public static Session getSession() { + return session; + } + + @Override + public boolean onCreate() { + mOpenHelper = new SQLiteOpenHelper(this.getContext(), "aorm.db", null, 1) { + public void onCreate(SQLiteDatabase db) { + Aorm.createTable(db, AddressBook.class); + Aorm.createTable(db, AddressItem.class); + Aorm.createTable(db, Contact.class); + } + + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + Aorm.updateTable(db, AddressBook.class); + Aorm.updateTable(db, AddressItem.class); + Aorm.updateTable(db, Contact.class); + } + }; + session = new Session(mOpenHelper, getContext().getContentResolver()); + return true; + } + + @Nullable + @Override + public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, + @Nullable String[] selectionArgs, @Nullable String sortOrder) { + return null; + } + + @Nullable + @Override + public String getType(@NonNull Uri uri) { + return null; + } + + @Nullable + @Override + public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) { + return null; + } + + @Override + public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) { + return 0; + } + + @Override + public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, + @Nullable String[] selectionArgs) { + return 0; + } +} diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/AormTester.java b/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/AormTester.java new file mode 100644 index 0000000..6649d50 --- /dev/null +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/AormTester.java @@ -0,0 +1,101 @@ +package com.raizlabs.android.databasecomparison.aorm; + +import android.content.Context; + +import com.raizlabs.android.databasecomparison.Generator; +import com.raizlabs.android.databasecomparison.Loader; +import com.raizlabs.android.databasecomparison.MainActivity; +import com.raizlabs.android.databasecomparison.events.LogTestDataEvent; + +import java.sql.SQLException; +import java.util.Collection; + +import cn.ieclipse.aorm.Aorm; +import cn.ieclipse.aorm.Criteria; +import cn.ieclipse.aorm.Restrictions; +import cn.ieclipse.aorm.Session; +import de.greenrobot.event.EventBus; + +/** + * Description + * + * @author Jamling + */ + +public class AormTester { + public static final String FRAMEWORK_NAME = "Aorm"; + + public static void testAddressBooks(Context context) { + Session session = AormTestContentProvider.getSession(); + try { + session.deleteAll(AddressBook.class); + session.deleteAll(AddressItem.class); + session.deleteAll(Contact.class); + } catch (Exception e) { + Aorm.logi(e.getMessage()); + } + + Collection addressBooks = Generator.createAddressBooks(AddressBook.class, Contact.class, + AddressItem.class, MainActivity.ADDRESS_BOOK_COUNT); + long startTime = System.currentTimeMillis(); + + try { + session.beginTransaction(); + session.batchInsert(addressBooks); + for (AddressBook addressBook : addressBooks) { + addressBook.insertAddressItem(session); + addressBook.insertContact(session); + } + session.endTransaction(); + EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.SAVE_TIME)); + + startTime = System.currentTimeMillis(); + addressBooks = session.list(AddressBook.class); + for (AddressBook addressBook : addressBooks) { + Criteria criteria = Criteria.create(Contact.class).add(Restrictions.eq("addressbook", addressBook + .getId())); + addressBook.setContacts(session.list(criteria)); + criteria = Criteria.create(AddressItem.class).add(Restrictions.eq("addressbook", addressBook + .getId())); + addressBook.setAddresses(session.list(criteria)); + } + + Loader.loadAllInnerData(addressBooks); + EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.LOAD_TIME)); + + // clean out DB for next run + session.deleteAll(AddressBook.class); + session.deleteAll(AddressItem.class); + session.deleteAll(Contact.class); + } catch (Exception e) { + Aorm.logi(e.getMessage()); + } + } + + public static void testAddressItems(Context context) { + + Session session = AormTestContentProvider.getSession(); + + session.deleteAll(AddressItem.class); + + Collection simpleAddressItems = Generator.getAddresses(AddressItem.class, MainActivity.LOOP_COUNT); + long startTime = System.currentTimeMillis(); + + try { + session.batchInsert(simpleAddressItems); + for (AddressItem simpleAddressItem : simpleAddressItems) { + //session.insertNative(simpleAddressItem); + } + } catch (SQLException e){ + Aorm.logi(e.getMessage()); + } + EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.SAVE_TIME)); + + startTime = System.currentTimeMillis(); + simpleAddressItems = session.list(AddressItem.class); + EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.LOAD_TIME)); + + // clean out DB for next run + session.deleteAll(AddressItem.class); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/Contact.java b/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/Contact.java new file mode 100644 index 0000000..7d45cc7 --- /dev/null +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/aorm/Contact.java @@ -0,0 +1,69 @@ +package com.raizlabs.android.databasecomparison.aorm; + +import com.raizlabs.android.databasecomparison.interfaces.IContact; + +import cn.ieclipse.aorm.Criteria; +import cn.ieclipse.aorm.Restrictions; +import cn.ieclipse.aorm.annotation.Column; +import cn.ieclipse.aorm.annotation.Table; + +/** + * Description + * + * @author Jamling + */ + +@Table(name = "contact") +public class Contact implements IContact { + + @Column(name = "name") + private String name; + + @Column(name = "email") + private String email; + + @Column(name = "aid") + private long addressBookId; + + private AddressBook addressBook; + + @Override + public String getName() { + return name; + } + + @Override + public void setName(String name) { + this.name = name; + } + + @Override + public String getEmail() { + return email; + } + + @Override + public void setEmail(String email) { + this.email = email; + } + + public AddressBook getAddressBookField() { + if (addressBook == null) { + addressBook = (AddressBook) AormTestContentProvider.getSession().get( + Criteria.create(AddressBook.class).add(Restrictions.eq("id", addressBookId))); + } + return addressBook; + } + + @Override + public void setAddressBook(AddressBook addressBook) { + if (addressBook != null) { + this.addressBookId = addressBook.getId(); + } + } + + @Override + public void saveAll() { + + } +} diff --git a/images/complextrial.png b/images/complextrial.png index afd7516..8366999 100644 Binary files a/images/complextrial.png and b/images/complextrial.png differ diff --git a/images/simpletrial.png b/images/simpletrial.png index be14922..c3cd78d 100644 Binary files a/images/simpletrial.png and b/images/simpletrial.png differ