Visitar URL original
Merge branch 'ZoeyJones-fix-getcolumntype-sqlite-data-constants' · sqlcipher/sqlcipher-android@96e35d1 · GitHub
Skip to content

Commit 96e35d1

Browse files
Merge branch 'ZoeyJones-fix-getcolumntype-sqlite-data-constants'
2 parents 55e1bc3 + 24a5757 commit 96e35d1

3 files changed

Lines changed: 45 additions & 1 deletion

File tree

‎sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher/driver/SQLCipherConnectionTests.kt‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package net.zetetic.database.sqlcipher.driver
22

33
import android.content.Context
4+
import androidx.sqlite.SQLITE_DATA_BLOB
5+
import androidx.sqlite.SQLITE_DATA_FLOAT
6+
import androidx.sqlite.SQLITE_DATA_INTEGER
7+
import androidx.sqlite.SQLITE_DATA_NULL
8+
import androidx.sqlite.SQLITE_DATA_TEXT
49
import androidx.sqlite.SQLiteConnection
510
import androidx.sqlite.execSQL
611
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -156,6 +161,18 @@ class SQLCipherConnectionTests {
156161
}
157162
}
158163

164+
@Test
165+
fun shouldReportColumnTypesUsingSqliteDataConstants() {
166+
connection.prepare("SELECT NULL, 1, 1.5, 'text', x'00'").use { statement ->
167+
assertTrue(statement.step())
168+
assertEquals(SQLITE_DATA_NULL, statement.getColumnType(0))
169+
assertEquals(SQLITE_DATA_INTEGER, statement.getColumnType(1))
170+
assertEquals(SQLITE_DATA_FLOAT, statement.getColumnType(2))
171+
assertEquals(SQLITE_DATA_TEXT, statement.getColumnType(3))
172+
assertEquals(SQLITE_DATA_BLOB, statement.getColumnType(4))
173+
}
174+
}
175+
159176
@Test
160177
fun shouldRoundTripDataThroughStandardStatement() {
161178
connection.prepare("INSERT INTO t (id, v) VALUES (?, ?)").use { statement ->

‎sqlcipher/src/androidTest/java/net/zetetic/database/sqlcipher/driver/SupportAPIRoomTest.kt‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,15 @@ class SupportAPIRoomTest {
176176
assertThat(db.getSupportWrapper().isWriteAheadLoggingEnabled, `is`(true))
177177
}
178178

179+
@Test
180+
fun shouldReadNullColumnThroughSupportWrapperCursor() {
181+
db.getSupportWrapper().query("SELECT NULL AS empty_value, 'x' AS present_value").use { cursor ->
182+
assertThat(cursor.moveToFirst(), `is`(true))
183+
assertThat(cursor.isNull(0), `is`(true))
184+
assertThat(cursor.getString(1), `is`("x"))
185+
}
186+
}
187+
179188
@Database(entities = [User::class], version = 1, exportSchema = false)
180189
abstract class AppDatabase : RoomDatabase() {
181190
abstract fun userDao(): UserDao

‎sqlcipher/src/main/java/net/zetetic/database/sqlcipher/driver/SQLCipherStatement.java‎

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.database.Cursor;
44

55
import androidx.annotation.NonNull;
6+
import androidx.sqlite.SQLite;
67
import androidx.sqlite.SQLiteStatement;
78
import android.database.SQLException;
89

@@ -115,7 +116,24 @@ public String getColumnName(
115116
@Override
116117
public int getColumnType(
117118
int index) {
118-
return requireCursor().getType(index);
119+
return toSqliteDataType(requireCursor().getType(index));
120+
}
121+
122+
private static int toSqliteDataType(int cursorFieldType) {
123+
switch (cursorFieldType) {
124+
case Cursor.FIELD_TYPE_NULL:
125+
return SQLite.SQLITE_DATA_NULL;
126+
case Cursor.FIELD_TYPE_INTEGER:
127+
return SQLite.SQLITE_DATA_INTEGER;
128+
case Cursor.FIELD_TYPE_FLOAT:
129+
return SQLite.SQLITE_DATA_FLOAT;
130+
case Cursor.FIELD_TYPE_STRING:
131+
return SQLite.SQLITE_DATA_TEXT;
132+
case Cursor.FIELD_TYPE_BLOB:
133+
return SQLite.SQLITE_DATA_BLOB;
134+
default:
135+
throw new SQLException("unknown cursor field type " + cursorFieldType);
136+
}
119137
}
120138

121139
@Override

0 commit comments

Comments
 (0)