Rahul Ravikumar | 0533600 | 2019-10-14 15:04:32 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2017 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
| 17 | package android.database; |
| 18 | |
| 19 | import java.util.Date; |
| 20 | import java.util.UUID; |
| 21 | |
| 22 | /** |
| 23 | * Helper class for creating and querying data from a database in performance tests. |
| 24 | * |
| 25 | * Subclasses can define different table/query formats. |
| 26 | */ |
| 27 | public abstract class TableHelper { |
| 28 | |
| 29 | public interface CursorReader { |
| 30 | void read(); |
| 31 | } |
| 32 | |
| 33 | public abstract String createSql(); |
| 34 | public abstract String insertSql(); |
| 35 | public abstract Object[] createItem(int id); |
| 36 | public abstract String readSql(); |
| 37 | public abstract CursorReader createReader(Cursor cursor); |
| 38 | |
| 39 | /** |
| 40 | * 1 column, single integer |
| 41 | */ |
| 42 | public static TableHelper INT_1 = new TableHelper() { |
| 43 | @Override |
| 44 | public String createSql() { |
| 45 | return "CREATE TABLE `Int1` (" |
| 46 | + "`a` INTEGER," |
| 47 | + " PRIMARY KEY(`a`))"; |
| 48 | } |
| 49 | |
| 50 | @Override |
| 51 | public String insertSql() { |
| 52 | return "INSERT INTO `Int1`(`a`)" |
| 53 | + " VALUES (?)"; |
| 54 | } |
| 55 | |
| 56 | @Override |
| 57 | public Object[] createItem(int id) { |
| 58 | return new Object[] { |
| 59 | id, |
| 60 | }; |
| 61 | } |
| 62 | |
| 63 | @Override |
| 64 | public String readSql() { |
| 65 | return "SELECT * from Int1"; |
| 66 | } |
| 67 | |
| 68 | @Override |
| 69 | public CursorReader createReader(final Cursor cursor) { |
| 70 | final int cursorIndexOfA = cursor.getColumnIndexOrThrow("a"); |
| 71 | return () -> { |
| 72 | cursor.getInt(cursorIndexOfA); |
| 73 | }; |
| 74 | } |
| 75 | }; |
| 76 | /** |
| 77 | * 10 columns of integers |
| 78 | */ |
| 79 | public static TableHelper INT_10 = new TableHelper() { |
| 80 | @Override |
| 81 | public String createSql() { |
| 82 | return "CREATE TABLE `Int10` (" |
| 83 | + "`a` INTEGER," |
| 84 | + " `b` INTEGER," |
| 85 | + " `c` INTEGER," |
| 86 | + " `d` INTEGER," |
| 87 | + " `e` INTEGER," |
| 88 | + " `f` INTEGER," |
| 89 | + " `g` INTEGER," |
| 90 | + " `h` INTEGER," |
| 91 | + " `i` INTEGER," |
| 92 | + " `j` INTEGER," |
| 93 | + " PRIMARY KEY(`a`))"; |
| 94 | } |
| 95 | |
| 96 | @Override |
| 97 | public String insertSql() { |
| 98 | return "INSERT INTO `Int10`(`a`,`b`,`c`,`d`,`e`,`f`,`g`,`h`,`i`,`j`)" |
| 99 | + " VALUES (?,?,?,?,?,?,?,?,?,?)"; |
| 100 | } |
| 101 | |
| 102 | @Override |
| 103 | public Object[] createItem(int id) { |
| 104 | return new Object[] { |
| 105 | id, |
| 106 | id + 1, |
| 107 | id + 2, |
| 108 | id + 3, |
| 109 | id + 4, |
| 110 | id + 5, |
| 111 | id + 6, |
| 112 | id + 7, |
| 113 | id + 8, |
| 114 | id + 9, |
| 115 | }; |
| 116 | } |
| 117 | |
| 118 | @Override |
| 119 | public String readSql() { |
| 120 | return "SELECT * from Int10"; |
| 121 | } |
| 122 | |
| 123 | @Override |
| 124 | public CursorReader createReader(final Cursor cursor) { |
| 125 | final int cursorIndexOfA = cursor.getColumnIndexOrThrow("a"); |
| 126 | final int cursorIndexOfB = cursor.getColumnIndexOrThrow("b"); |
| 127 | final int cursorIndexOfC = cursor.getColumnIndexOrThrow("c"); |
| 128 | final int cursorIndexOfD = cursor.getColumnIndexOrThrow("d"); |
| 129 | final int cursorIndexOfE = cursor.getColumnIndexOrThrow("e"); |
| 130 | final int cursorIndexOfF = cursor.getColumnIndexOrThrow("f"); |
| 131 | final int cursorIndexOfG = cursor.getColumnIndexOrThrow("g"); |
| 132 | final int cursorIndexOfH = cursor.getColumnIndexOrThrow("h"); |
| 133 | final int cursorIndexOfI = cursor.getColumnIndexOrThrow("i"); |
| 134 | final int cursorIndexOfJ = cursor.getColumnIndexOrThrow("j"); |
| 135 | return () -> { |
| 136 | cursor.getInt(cursorIndexOfA); |
| 137 | cursor.getInt(cursorIndexOfB); |
| 138 | cursor.getInt(cursorIndexOfC); |
| 139 | cursor.getInt(cursorIndexOfD); |
| 140 | cursor.getInt(cursorIndexOfE); |
| 141 | cursor.getInt(cursorIndexOfF); |
| 142 | cursor.getInt(cursorIndexOfG); |
| 143 | cursor.getInt(cursorIndexOfH); |
| 144 | cursor.getInt(cursorIndexOfI); |
| 145 | cursor.getInt(cursorIndexOfJ); |
| 146 | }; |
| 147 | } |
| 148 | }; |
| 149 | |
| 150 | /** |
| 151 | * Mock up of 'user' table with various ints/strings |
| 152 | */ |
| 153 | public static TableHelper USER = new TableHelper() { |
| 154 | @Override |
| 155 | public String createSql() { |
| 156 | return "CREATE TABLE `User` (" |
| 157 | + "`mId` INTEGER," |
| 158 | + " `mName` TEXT," |
| 159 | + " `mLastName` TEXT," |
| 160 | + " `mAge` INTEGER," |
| 161 | + " `mAdmin` INTEGER," |
| 162 | + " `mWeight` DOUBLE," |
| 163 | + " `mBirthday` INTEGER," |
| 164 | + " `mMoreText` TEXT," |
| 165 | + " PRIMARY KEY(`mId`))"; |
| 166 | } |
| 167 | |
| 168 | @Override |
| 169 | public String insertSql() { |
| 170 | return "INSERT INTO `User`(`mId`,`mName`,`mLastName`,`mAge`," |
| 171 | + "`mAdmin`,`mWeight`,`mBirthday`,`mMoreText`) VALUES (?,?,?,?,?,?,?,?)"; |
| 172 | } |
| 173 | |
| 174 | @Override |
| 175 | public Object[] createItem(int id) { |
| 176 | return new Object[] { |
| 177 | id, |
| 178 | UUID.randomUUID().toString(), |
| 179 | UUID.randomUUID().toString(), |
| 180 | (int) (10 + Math.random() * 50), |
| 181 | 0, |
| 182 | (float)0, |
| 183 | new Date().getTime(), |
| 184 | UUID.randomUUID().toString(), |
| 185 | }; |
| 186 | } |
| 187 | |
| 188 | @Override |
| 189 | public String readSql() { |
| 190 | return "SELECT * from User"; |
| 191 | } |
| 192 | |
| 193 | @Override |
| 194 | public CursorReader createReader(final Cursor cursor) { |
| 195 | final int cursorIndexOfMId = cursor.getColumnIndexOrThrow("mId"); |
| 196 | final int cursorIndexOfMName = cursor.getColumnIndexOrThrow("mName"); |
| 197 | final int cursorIndexOfMLastName = cursor.getColumnIndexOrThrow("mLastName"); |
| 198 | final int cursorIndexOfMAge = cursor.getColumnIndexOrThrow("mAge"); |
| 199 | final int cursorIndexOfMAdmin = cursor.getColumnIndexOrThrow("mAdmin"); |
| 200 | final int cursorIndexOfMWeight = cursor.getColumnIndexOrThrow("mWeight"); |
| 201 | final int cursorIndexOfMBirthday = cursor.getColumnIndexOrThrow("mBirthday"); |
| 202 | final int cursorIndexOfMMoreTextField = cursor.getColumnIndexOrThrow("mMoreText"); |
| 203 | return () -> { |
| 204 | cursor.getInt(cursorIndexOfMId); |
| 205 | cursor.getString(cursorIndexOfMName); |
| 206 | cursor.getString(cursorIndexOfMLastName); |
| 207 | cursor.getInt(cursorIndexOfMAge); |
| 208 | cursor.getInt(cursorIndexOfMAdmin); |
| 209 | cursor.getFloat(cursorIndexOfMWeight); |
| 210 | if (!cursor.isNull(cursorIndexOfMBirthday)) { |
| 211 | cursor.getLong(cursorIndexOfMBirthday); |
| 212 | } |
| 213 | cursor.getString(cursorIndexOfMMoreTextField); |
| 214 | }; |
| 215 | } |
| 216 | }; |
| 217 | |
| 218 | public static TableHelper[] TABLE_HELPERS = new TableHelper[] { |
| 219 | INT_1, |
| 220 | INT_10, |
| 221 | USER, |
| 222 | }; |
| 223 | } |