blob: 48f37814786d6f620e5edeaf15ae7ef22e7977cc [file] [log] [blame]
Rahul Ravikumar05336002019-10-14 15:04:32 -07001/*
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
17package android.database;
18
19import java.util.Date;
20import 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 */
27public 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}