Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0519f12c authored by Lee Shombert's avatar Lee Shombert
Browse files

Add SQLiteRawStatement unit test cases

Coverage added for SQLiteRawStatement APIs.  The bugs covered by this
CL map to APIs as follows.

Coverage added for SQLiteRawStatement APIs.  The bugs covered by this
CL map to APIs as follows.

  323464599   bindLong(int, long)
  323464598   bindLong(int, long)
  323464428   getColumnLong(int)
  323464248   getColumnType(int)
  323463953   getColumnLong(int)
  323463884   getColumnType(int)

Test: atest
 * FrameworksCoreTests:android.database.sqlite

Bug: 323464599
Bug: 323464598
Bug: 323464428
Bug: 323464248
Bug: 323463953
Bug: 323463884
Change-Id: Ie002cfdea3399e61484ed0d2bdc2c2e8b1c163f2
parent ca4a84d4
Loading
Loading
Loading
Loading
+42 −14
Original line number Diff line number Diff line
@@ -104,7 +104,9 @@ public class SQLiteRawStatementTest {
    private void createComplexDatabase() {
        mDatabase.beginTransaction();
        try {
            mDatabase.execSQL("CREATE TABLE t1 (i int, d double, t text);");
            // Column "l" is used to test the long variants.  The underlying sqlite type is int,
            // which is the same as a java long.
            mDatabase.execSQL("CREATE TABLE t1 (i int, d double, t text, l int);");
            mDatabase.setTransactionSuccessful();
        } finally {
            mDatabase.endTransaction();
@@ -115,7 +117,7 @@ public class SQLiteRawStatementTest {
     * A three-value insert for the complex database.
     */
    private String createComplexInsert() {
        return "INSERT INTO t1 (i, d, t) VALUES (?1, ?2, ?3)";
        return "INSERT INTO t1 (i, d, t, l) VALUES (?1, ?2, ?3, ?4)";
    }

    /**
@@ -209,22 +211,25 @@ public class SQLiteRawStatementTest {
        mDatabase.beginTransaction();
        try {
            try (SQLiteRawStatement s = mDatabase.createRawStatement(createComplexInsert())) {
                for (int i = 0; i < 9; i++) {
                    int vi = i * 3;
                    double vd = i * 2.5;
                    String vt = String.format("text%02dvalue", i);
                for (int row = 0; row < 9; row++) {
                    int vi = row * 3;
                    double vd = row * 2.5;
                    String vt = String.format("text%02dvalue", row);
                    long vl = Long.MAX_VALUE - row;
                    s.bindInt(1, vi);
                    s.bindDouble(2, vd);
                    s.bindText(3, vt);
                    s.bindLong(4, vl);
                    boolean r = s.step();
                    // No row is returned by this query.
                    assertFalse(r);
                    s.reset();
                }
                // The last row has a null double and a null text.
                // The last row has a null double, null text, and null long.
                s.bindInt(1, 20);
                s.bindNull(2);
                s.bindNull(3);
                s.bindNull(4);
                assertFalse(s.step());
                s.reset();
            }
@@ -248,19 +253,31 @@ public class SQLiteRawStatementTest {
            mDatabase.endTransaction();
        }

        // Verify that the element created with i == 3 is correct.
        // Verify that the element created with row == 3 is correct.
        mDatabase.beginTransactionReadOnly();
        try {
            final String query = "SELECT i, d, t FROM t1 WHERE t = 'text03value'";
            final String query = "SELECT i, d, t, l FROM t1 WHERE t = 'text03value'";
            try (SQLiteRawStatement s = mDatabase.createRawStatement(query)) {
                assertTrue(s.step());
                assertEquals(3, s.getResultColumnCount());
                assertEquals(4, s.getResultColumnCount());
                int vi = s.getColumnInt(0);
                double vd = s.getColumnDouble(1);
                String vt = s.getColumnText(2);
                assertEquals(3 * 3, vi);
                assertEquals(2.5 * 3, vd, 0.1);
                long vl = s.getColumnLong(3);
                // The query extracted the third generated row.
                final int row = 3;
                assertEquals(3 * row, vi);
                assertEquals(2.5 * row, vd, 0.1);
                assertEquals("text03value", vt);
                assertEquals(Long.MAX_VALUE - row, vl);

                // Verify the column types.  Remember that sqlite integers are the same as Java
                // long, so the integer and long columns have type INTEGER.
                assertEquals(SQLiteRawStatement.SQLITE_DATA_TYPE_INTEGER, s.getColumnType(0));
                assertEquals(SQLiteRawStatement.SQLITE_DATA_TYPE_FLOAT, s.getColumnType(1));
                assertEquals(SQLiteRawStatement.SQLITE_DATA_TYPE_TEXT, s.getColumnType(2));
                assertEquals(SQLiteRawStatement.SQLITE_DATA_TYPE_INTEGER, s.getColumnType(3));

                // No more rows.
                assertFalse(s.step());
            }
@@ -268,15 +285,24 @@ public class SQLiteRawStatementTest {
            mDatabase.endTransaction();
        }

        // Verify that null columns are returned properly.
        mDatabase.beginTransactionReadOnly();
        try {
            final String query = "SELECT i, d, t FROM t1 WHERE i == 20";
            final String query = "SELECT i, d, t, l FROM t1 WHERE i == 20";
            try (SQLiteRawStatement s = mDatabase.createRawStatement(query)) {
                assertTrue(s.step());
                assertEquals(3, s.getResultColumnCount());
                assertEquals(4, s.getResultColumnCount());
                assertEquals(20, s.getColumnInt(0));
                assertEquals(0.0, s.getColumnDouble(1), 0.01);
                assertEquals(null, s.getColumnText(2));
                assertEquals(0, s.getColumnLong(3));

                // Verify the column types.
                assertEquals(SQLiteRawStatement.SQLITE_DATA_TYPE_INTEGER, s.getColumnType(0));
                assertEquals(SQLiteRawStatement.SQLITE_DATA_TYPE_NULL, s.getColumnType(1));
                assertEquals(SQLiteRawStatement.SQLITE_DATA_TYPE_NULL, s.getColumnType(2));
                assertEquals(SQLiteRawStatement.SQLITE_DATA_TYPE_NULL, s.getColumnType(3));

                // No more rows.
                assertFalse(s.step());
            }
@@ -495,6 +521,8 @@ public class SQLiteRawStatementTest {
                // Fetch the entire reference array.
                s.bindInt(1, 1);
                assertTrue(s.step());
                assertEquals(SQLiteRawStatement.SQLITE_DATA_TYPE_BLOB, s.getColumnType(0));

                byte[] a = s.getColumnBlob(0);
                assertTrue(Arrays.equals(src, a));
                s.reset();