Skip to content

Commit 81572c7

Browse files
Add support for Upsert via Room API, remove custom exception classes
Removed the following exception classes for better integration with Room: net.zetetic.database.SQLException net.zetetic.database.sqlcipher.SQLiteAbortException net.zetetic.database.sqlcipher.SQLiteAccessPermException net.zetetic.database.sqlcipher.SQLiteBindOrColumnIndexOutOfRangeException net.zetetic.database.sqlcipher.SQLiteBlobTooBigException net.zetetic.database.sqlcipher.SQLiteCantOpenDatabaseException net.zetetic.database.sqlcipher.SQLiteConstraintException net.zetetic.database.sqlcipher.SQLiteDatabaseCorruptException net.zetetic.database.sqlcipher.SQLiteDatabaseLockedException net.zetetic.database.sqlcipher.SQLiteDatatypeMismatchException net.zetetic.database.sqlcipher.SQLiteDiskIOException net.zetetic.database.sqlcipher.SQLiteDoneException net.zetetic.database.sqlcipher.SQLiteException net.zetetic.database.sqlcipher.SQLiteFullException net.zetetic.database.sqlcipher.SQLiteMisuseException net.zetetic.database.sqlcipher.SQLiteOutOfMemoryException net.zetetic.database.sqlcipher.SQLiteReadOnlyDatabaseException net.zetetic.database.sqlcipher.SQLiteTableLockedException
1 parent cda3dc5 commit 81572c7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+139
-640
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ Add a local reference to the local library and dependency:
1919

2020
```
2121
implementation files('libs/sqlcipher-android-4.5.2-release.aar')
22-
implementation 'androidx.sqlite:sqlite:2.1.0'
22+
implementation 'androidx.sqlite:sqlite:2.2.0'
2323
```
2424

2525
or source a Community edition build from Maven Central:
2626

2727
```
2828
implementation 'net.zetetic:sqlcipher-android:4.5.2@aar'
29-
implementation 'androidx.sqlite:sqlite:2.1.0'
29+
implementation 'androidx.sqlite:sqlite:2.2.0'
3030
```
3131

3232
```

sqlcipher/src/androidTest/java/net/zetetic/database/database_cts/DatabaseUtilsTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@
2020
import android.content.ContentValues;
2121
import android.content.Context;
2222
import android.database.Cursor;
23+
import android.database.sqlite.SQLiteDoneException;
24+
import android.database.sqlite.SQLiteException;
2325
import android.os.ParcelFileDescriptor;
2426
import android.test.AndroidTestCase;
2527
import android.test.MoreAsserts;
2628

2729
import net.zetetic.database.DatabaseUtils;
2830
import net.zetetic.database.DatabaseUtils.InsertHelper;
2931
import net.zetetic.database.sqlcipher.SQLiteDatabase;
30-
import net.zetetic.database.sqlcipher.SQLiteDoneException;
31-
import net.zetetic.database.sqlcipher.SQLiteException;
3232
import net.zetetic.database.sqlcipher.SQLiteStatement;
3333

3434
import java.io.ByteArrayOutputStream;

sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_cts/DatabaseStatementTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@
1717
package net.zetetic.database.sqlcipher_cts;
1818

1919
import android.database.Cursor;
20+
import android.database.sqlite.SQLiteConstraintException;
21+
import android.database.sqlite.SQLiteDoneException;
2022
import android.test.AndroidTestCase;
2123
import android.test.PerformanceTestCase;
2224
import android.test.suitebuilder.annotation.MediumTest;
2325

24-
import net.zetetic.database.sqlcipher.SQLiteConstraintException;
2526
import net.zetetic.database.sqlcipher.SQLiteDatabase;
26-
import net.zetetic.database.sqlcipher.SQLiteDoneException;
2727
import net.zetetic.database.sqlcipher.SQLiteStatement;
2828

2929
import java.io.File;
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package net.zetetic.database.sqlcipher_cts;
2+
3+
import static org.hamcrest.CoreMatchers.is;
4+
import static org.hamcrest.MatcherAssert.assertThat;
5+
6+
import android.content.Context;
7+
8+
import androidx.room.Dao;
9+
import androidx.room.Database;
10+
import androidx.room.Entity;
11+
import androidx.room.PrimaryKey;
12+
import androidx.room.Query;
13+
import androidx.room.Room;
14+
import androidx.room.RoomDatabase;
15+
import androidx.room.Upsert;
16+
import androidx.test.core.app.ApplicationProvider;
17+
import androidx.test.ext.junit.runners.AndroidJUnit4;
18+
19+
import net.zetetic.database.sqlcipher.SupportOpenHelperFactory;
20+
21+
import org.junit.Before;
22+
import org.junit.Test;
23+
import org.junit.runner.RunWith;
24+
25+
import java.io.File;
26+
import java.nio.charset.StandardCharsets;
27+
28+
@RunWith(AndroidJUnit4.class)
29+
public class RoomUpsertTest {
30+
private UserDatabase database;
31+
private UserDao userDao;
32+
33+
@Before
34+
public void before(){
35+
Context context = ApplicationProvider.getApplicationContext();
36+
File databaseFile = context.getDatabasePath("upsert.db");
37+
if(databaseFile.exists()){
38+
databaseFile.delete();
39+
}
40+
System.loadLibrary("sqlcipher");
41+
final byte[] passphrase = "user".getBytes(StandardCharsets.UTF_8);
42+
SupportOpenHelperFactory factory = new SupportOpenHelperFactory(passphrase);
43+
database = Room.databaseBuilder(context, UserDatabase.class, databaseFile.getName())
44+
.openHelperFactory(factory).build();
45+
userDao = database.userDao();
46+
}
47+
48+
@Test
49+
public void shouldAllowUpsertBehavior(){
50+
User user = new User();
51+
user.name = "Foo Bar";
52+
user.age = 41;
53+
user.id = userDao.upsert(user);
54+
user.age = 42;
55+
userDao.upsert(user);
56+
User[] searchUser = userDao.findById(user.id);
57+
assertThat(searchUser[0].age , is(42));
58+
}
59+
60+
@Entity
61+
public static class User {
62+
@PrimaryKey(autoGenerate = true) long id;
63+
String name;
64+
int age;
65+
}
66+
67+
@Dao
68+
public static abstract class UserDao {
69+
@Upsert
70+
abstract long upsert(User user);
71+
@Query("SELECT * FROM user WHERE id=:id")
72+
abstract User[] findById(long id);
73+
}
74+
75+
@Database(entities = {User.class}, version = 1)
76+
public static abstract class UserDatabase extends RoomDatabase {
77+
abstract UserDao userDao();
78+
}
79+
80+
}

sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_cts/SQLCipherDatabaseTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,14 @@
88

99
import android.content.ContentValues;
1010
import android.database.Cursor;
11+
import android.database.sqlite.SQLiteDatabaseCorruptException;
12+
import android.database.sqlite.SQLiteException;
1113

1214
import net.zetetic.database.sqlcipher.SQLiteCursor;
1315
import net.zetetic.database.sqlcipher.SQLiteDatabase;
1416
import net.zetetic.database.sqlcipher.SQLiteDatabaseConfiguration;
15-
import net.zetetic.database.sqlcipher.SQLiteDatabaseCorruptException;
16-
import net.zetetic.database.sqlcipher.SQLiteException;
1717
import net.zetetic.database.sqlcipher.SQLiteStatement;
1818

19-
import org.hamcrest.core.Is;
2019
import org.junit.Test;
2120

2221
import java.io.File;

sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_cts/SQLiteAbortExceptionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package net.zetetic.database.sqlcipher_cts;
1818

19-
import net.zetetic.database.sqlcipher.SQLiteAbortException;
19+
import android.database.sqlite.SQLiteAbortException;
2020
import android.test.AndroidTestCase;
2121

2222
public class SQLiteAbortExceptionTest extends AndroidTestCase {

sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_cts/SQLiteConstraintExceptionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package net.zetetic.database.sqlcipher_cts;
1818

19-
import net.zetetic.database.sqlcipher.SQLiteConstraintException;
19+
import android.database.sqlite.SQLiteConstraintException;
2020
import android.test.AndroidTestCase;
2121

2222
public class SQLiteConstraintExceptionTest extends AndroidTestCase {

sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_cts/SQLiteDatabaseTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@
1818

1919
import android.content.ContentValues;
2020
import android.database.Cursor;
21+
import android.database.SQLException;
2122
import android.test.AndroidTestCase;
2223
import android.test.suitebuilder.annotation.LargeTest;
2324

2425
import net.zetetic.database.DatabaseUtils;
25-
import net.zetetic.database.SQLException;
2626
import net.zetetic.database.sqlcipher.SQLiteCursor;
2727
import net.zetetic.database.sqlcipher.SQLiteCursorDriver;
2828
import net.zetetic.database.sqlcipher.SQLiteDatabase;

sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_cts/SQLiteDiskIOExceptionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package net.zetetic.database.sqlcipher_cts;
1818

19-
import net.zetetic.database.sqlcipher.SQLiteDiskIOException;
19+
import android.database.sqlite.SQLiteDiskIOException;
2020
import android.test.AndroidTestCase;
2121

2222
public class SQLiteDiskIOExceptionTest extends AndroidTestCase {

sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher_cts/SQLiteDoneExceptionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package net.zetetic.database.sqlcipher_cts;
1818

19-
import net.zetetic.database.sqlcipher.SQLiteDoneException;
19+
import android.database.sqlite.SQLiteDoneException;
2020
import android.test.AndroidTestCase;
2121

2222
public class SQLiteDoneExceptionTest extends AndroidTestCase {

0 commit comments

Comments
 (0)