Add API 31 sources Test: None Change-Id: Ie45894f7a232b2a15e2439b2527ca1813f334cc5
diff --git a/android/database/TableHelper.java b/android/database/TableHelper.java new file mode 100644 index 0000000..48f3781 --- /dev/null +++ b/android/database/TableHelper.java
@@ -0,0 +1,223 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.database; + +import java.util.Date; +import java.util.UUID; + +/** + * Helper class for creating and querying data from a database in performance tests. + * + * Subclasses can define different table/query formats. + */ +public abstract class TableHelper { + + public interface CursorReader { + void read(); + } + + public abstract String createSql(); + public abstract String insertSql(); + public abstract Object[] createItem(int id); + public abstract String readSql(); + public abstract CursorReader createReader(Cursor cursor); + + /** + * 1 column, single integer + */ + public static TableHelper INT_1 = new TableHelper() { + @Override + public String createSql() { + return "CREATE TABLE `Int1` (" + + "`a` INTEGER," + + " PRIMARY KEY(`a`))"; + } + + @Override + public String insertSql() { + return "INSERT INTO `Int1`(`a`)" + + " VALUES (?)"; + } + + @Override + public Object[] createItem(int id) { + return new Object[] { + id, + }; + } + + @Override + public String readSql() { + return "SELECT * from Int1"; + } + + @Override + public CursorReader createReader(final Cursor cursor) { + final int cursorIndexOfA = cursor.getColumnIndexOrThrow("a"); + return () -> { + cursor.getInt(cursorIndexOfA); + }; + } + }; + /** + * 10 columns of integers + */ + public static TableHelper INT_10 = new TableHelper() { + @Override + public String createSql() { + return "CREATE TABLE `Int10` (" + + "`a` INTEGER," + + " `b` INTEGER," + + " `c` INTEGER," + + " `d` INTEGER," + + " `e` INTEGER," + + " `f` INTEGER," + + " `g` INTEGER," + + " `h` INTEGER," + + " `i` INTEGER," + + " `j` INTEGER," + + " PRIMARY KEY(`a`))"; + } + + @Override + public String insertSql() { + return "INSERT INTO `Int10`(`a`,`b`,`c`,`d`,`e`,`f`,`g`,`h`,`i`,`j`)" + + " VALUES (?,?,?,?,?,?,?,?,?,?)"; + } + + @Override + public Object[] createItem(int id) { + return new Object[] { + id, + id + 1, + id + 2, + id + 3, + id + 4, + id + 5, + id + 6, + id + 7, + id + 8, + id + 9, + }; + } + + @Override + public String readSql() { + return "SELECT * from Int10"; + } + + @Override + public CursorReader createReader(final Cursor cursor) { + final int cursorIndexOfA = cursor.getColumnIndexOrThrow("a"); + final int cursorIndexOfB = cursor.getColumnIndexOrThrow("b"); + final int cursorIndexOfC = cursor.getColumnIndexOrThrow("c"); + final int cursorIndexOfD = cursor.getColumnIndexOrThrow("d"); + final int cursorIndexOfE = cursor.getColumnIndexOrThrow("e"); + final int cursorIndexOfF = cursor.getColumnIndexOrThrow("f"); + final int cursorIndexOfG = cursor.getColumnIndexOrThrow("g"); + final int cursorIndexOfH = cursor.getColumnIndexOrThrow("h"); + final int cursorIndexOfI = cursor.getColumnIndexOrThrow("i"); + final int cursorIndexOfJ = cursor.getColumnIndexOrThrow("j"); + return () -> { + cursor.getInt(cursorIndexOfA); + cursor.getInt(cursorIndexOfB); + cursor.getInt(cursorIndexOfC); + cursor.getInt(cursorIndexOfD); + cursor.getInt(cursorIndexOfE); + cursor.getInt(cursorIndexOfF); + cursor.getInt(cursorIndexOfG); + cursor.getInt(cursorIndexOfH); + cursor.getInt(cursorIndexOfI); + cursor.getInt(cursorIndexOfJ); + }; + } + }; + + /** + * Mock up of 'user' table with various ints/strings + */ + public static TableHelper USER = new TableHelper() { + @Override + public String createSql() { + return "CREATE TABLE `User` (" + + "`mId` INTEGER," + + " `mName` TEXT," + + " `mLastName` TEXT," + + " `mAge` INTEGER," + + " `mAdmin` INTEGER," + + " `mWeight` DOUBLE," + + " `mBirthday` INTEGER," + + " `mMoreText` TEXT," + + " PRIMARY KEY(`mId`))"; + } + + @Override + public String insertSql() { + return "INSERT INTO `User`(`mId`,`mName`,`mLastName`,`mAge`," + + "`mAdmin`,`mWeight`,`mBirthday`,`mMoreText`) VALUES (?,?,?,?,?,?,?,?)"; + } + + @Override + public Object[] createItem(int id) { + return new Object[] { + id, + UUID.randomUUID().toString(), + UUID.randomUUID().toString(), + (int) (10 + Math.random() * 50), + 0, + (float)0, + new Date().getTime(), + UUID.randomUUID().toString(), + }; + } + + @Override + public String readSql() { + return "SELECT * from User"; + } + + @Override + public CursorReader createReader(final Cursor cursor) { + final int cursorIndexOfMId = cursor.getColumnIndexOrThrow("mId"); + final int cursorIndexOfMName = cursor.getColumnIndexOrThrow("mName"); + final int cursorIndexOfMLastName = cursor.getColumnIndexOrThrow("mLastName"); + final int cursorIndexOfMAge = cursor.getColumnIndexOrThrow("mAge"); + final int cursorIndexOfMAdmin = cursor.getColumnIndexOrThrow("mAdmin"); + final int cursorIndexOfMWeight = cursor.getColumnIndexOrThrow("mWeight"); + final int cursorIndexOfMBirthday = cursor.getColumnIndexOrThrow("mBirthday"); + final int cursorIndexOfMMoreTextField = cursor.getColumnIndexOrThrow("mMoreText"); + return () -> { + cursor.getInt(cursorIndexOfMId); + cursor.getString(cursorIndexOfMName); + cursor.getString(cursorIndexOfMLastName); + cursor.getInt(cursorIndexOfMAge); + cursor.getInt(cursorIndexOfMAdmin); + cursor.getFloat(cursorIndexOfMWeight); + if (!cursor.isNull(cursorIndexOfMBirthday)) { + cursor.getLong(cursorIndexOfMBirthday); + } + cursor.getString(cursorIndexOfMMoreTextField); + }; + } + }; + + public static TableHelper[] TABLE_HELPERS = new TableHelper[] { + INT_1, + INT_10, + USER, + }; +}