blob: f8d8e5e21d477896497bf9dcec06259040bcb087 [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
2 * Copyright (C) 2007 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
Brett Chabot0dc59e72010-04-01 18:21:38 -070017package android.database;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080018
19import android.content.ContentValues;
20import android.database.sqlite.SQLiteDatabase;
21import android.test.PerformanceTestCase;
Fyodor Kupolovb5f38042017-05-23 12:01:07 -070022import android.util.Log;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080023
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080024import junit.framework.TestCase;
25
26import java.io.File;
27import java.util.Random;
28
29/**
30 * Database Performance Tests
31 *
32 */
33
34public class NewDatabasePerformanceTests {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -070035 private static final String TAG = "NewDatabasePerformanceTests";
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080036
Jeff Brown3f11f302012-01-12 14:21:54 -080037 // Edit this to change the test run times. The original is 100.
Fyodor Kupolovb5f38042017-05-23 12:01:07 -070038 private static final int SIZE_MULTIPLIER = 100;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080039
Jeff Brown3f11f302012-01-12 14:21:54 -080040 public static class PerformanceBase extends TestCase
41 implements PerformanceTestCase {
42 protected static final int CURRENT_DATABASE_VERSION = 42;
43 protected SQLiteDatabase mDatabase;
44 protected File mDatabaseFile;
Fyodor Kupolovb5f38042017-05-23 12:01:07 -070045 private long mSetupFinishedTime;
Jeff Brown3f11f302012-01-12 14:21:54 -080046
47 public void setUp() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -070048 long setupStarted = System.currentTimeMillis();
Jeff Brown3f11f302012-01-12 14:21:54 -080049 mDatabaseFile = new File("/sdcard", "perf_database_test.db");
50 if (mDatabaseFile.exists()) {
51 mDatabaseFile.delete();
52 }
53 mDatabase =
54 SQLiteDatabase.openOrCreateDatabase(mDatabaseFile.getPath(),
55 null);
56 assertTrue(mDatabase != null);
57 mDatabase.setVersion(CURRENT_DATABASE_VERSION);
Fyodor Kupolovb5f38042017-05-23 12:01:07 -070058 mSetupFinishedTime = System.currentTimeMillis();
59 Log.i(TAG, "Setup for " + getClass().getSimpleName() + " took "
60 + (mSetupFinishedTime - setupStarted) + " ms");
Jeff Brown3f11f302012-01-12 14:21:54 -080061 }
62
63 public void tearDown() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -070064 long duration = System.currentTimeMillis() - mSetupFinishedTime;
65 Log.i(TAG, "Test " + getClass().getSimpleName() + " took " + duration + " ms");
Jeff Brown3f11f302012-01-12 14:21:54 -080066 mDatabase.close();
67 mDatabaseFile.delete();
68 }
69
70 public boolean isPerformanceOnly() {
71 return true;
72 }
73
74 // These tests can only be run once.
75 public int startPerformance(Intermediates intermediates) {
76 return 0;
77 }
78
79 public String numberName(int number) {
80 String result = "";
81
82 if (number >= 1000) {
83 result += numberName((number / 1000)) + " thousand";
84 number = (number % 1000);
85
86 if (number > 0) result += " ";
87 }
88
89 if (number >= 100) {
90 result += ONES[(number / 100)] + " hundred";
91 number = (number % 100);
92
93 if (number > 0) result += " ";
94 }
95
96 if (number >= 20) {
97 result += TENS[(number / 10)];
98 number = (number % 10);
99
100 if (number > 0) result += " ";
101 }
102
103 if (number > 0) {
104 result += ONES[number];
105 }
106
107 return result;
108 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800109 }
110
Jeff Brown3f11f302012-01-12 14:21:54 -0800111 /**
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700112 * Test 100 inserts.
Jeff Brown3f11f302012-01-12 14:21:54 -0800113 */
114
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700115 public static class Insert100 extends PerformanceBase {
116 private static final int SIZE = SIZE_MULTIPLIER;
Jeff Brown3f11f302012-01-12 14:21:54 -0800117
118 private String[] statements = new String[SIZE];
119
120 @Override
121 public void setUp() {
122 super.setUp();
123 Random random = new Random(42);
124
125 for (int i = 0; i < SIZE; i++) {
126 int r = random.nextInt(100000);
127 statements[i] =
128 "INSERT INTO t1 VALUES(" + i + "," + r + ",'"
129 + numberName(r) + "')";
130 }
131
132 mDatabase
133 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
134 }
135
136 public void testRun() {
137 for (int i = 0; i < SIZE; i++) {
138 mDatabase.execSQL(statements[i]);
139 }
140 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800141 }
142
Jeff Brown3f11f302012-01-12 14:21:54 -0800143 /**
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700144 * Test 100 inserts into an indexed table.
Jeff Brown3f11f302012-01-12 14:21:54 -0800145 */
146
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700147 public static class InsertIndexed100 extends PerformanceBase {
148 private static final int SIZE = SIZE_MULTIPLIER;
Jeff Brown3f11f302012-01-12 14:21:54 -0800149
150 private String[] statements = new String[SIZE];
151
152 @Override
153 public void setUp() {
154 super.setUp();
155 Random random = new Random(42);
156
157 for (int i = 0; i < SIZE; i++) {
158 int r = random.nextInt(100000);
159 statements[i] =
160 "INSERT INTO t1 VALUES(" + i + "," + r + ",'"
161 + numberName(r) + "')";
162 }
163
164 mDatabase
165 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
166 mDatabase.execSQL("CREATE INDEX i1c ON t1(c)");
167 }
168
169 public void testRun() {
170 for (int i = 0; i < SIZE; i++) {
171 mDatabase.execSQL(statements[i]);
172 }
173 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800174 }
175
Jeff Brown3f11f302012-01-12 14:21:54 -0800176 /**
177 * 100 SELECTs without an index
178 */
179
180 public static class Select100 extends PerformanceBase {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700181 private static final int SIZE = SIZE_MULTIPLIER;
182 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800183 private static final String[] COLUMNS = {"count(*)", "avg(b)"};
184
185 private String[] where = new String[SIZE];
186
187 @Override
188 public void setUp() {
189 super.setUp();
190 Random random = new Random(42);
191
192 mDatabase
193 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
194
195 for (int i = 0; i < SIZE; i++) {
196 int r = random.nextInt(100000);
197 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
198 + numberName(r) + "')");
199 }
200
201 for (int i = 0; i < SIZE; i++) {
202 int lower = i * 100;
203 int upper = (i + 10) * 100;
204 where[i] = "b >= " + lower + " AND b < " + upper;
205 }
206 }
207
208 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700209 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
210 for (int i = 0; i < SIZE; i++) {
211 mDatabase
212 .query("t1", COLUMNS, where[i], null, null, null, null);
213 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800214 }
215 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800216 }
217
Jeff Brown3f11f302012-01-12 14:21:54 -0800218 /**
219 * 100 SELECTs on a string comparison
220 */
Jeff Brown3f11f302012-01-12 14:21:54 -0800221 public static class SelectStringComparison100 extends PerformanceBase {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700222 private static final int SIZE = SIZE_MULTIPLIER;
223 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800224 private static final String[] COLUMNS = {"count(*)", "avg(b)"};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800225
Jeff Brown3f11f302012-01-12 14:21:54 -0800226 private String[] where = new String[SIZE];
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800227
Jeff Brown3f11f302012-01-12 14:21:54 -0800228 @Override
229 public void setUp() {
230 super.setUp();
231 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800232
Jeff Brown3f11f302012-01-12 14:21:54 -0800233 mDatabase
234 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800235
Jeff Brown3f11f302012-01-12 14:21:54 -0800236 for (int i = 0; i < SIZE; i++) {
237 int r = random.nextInt(100000);
238 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
239 + numberName(r) + "')");
240 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800241
Jeff Brown3f11f302012-01-12 14:21:54 -0800242 for (int i = 0; i < SIZE; i++) {
243 where[i] = "c LIKE '" + numberName(i) + "'";
244 }
245 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800246
Jeff Brown3f11f302012-01-12 14:21:54 -0800247 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700248 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
249 for (int i = 0; i < SIZE; i++) {
250 mDatabase
251 .query("t1", COLUMNS, where[i], null, null, null, null);
252 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800253 }
254 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800255 }
256
Jeff Brown3f11f302012-01-12 14:21:54 -0800257 /**
258 * 100 SELECTs with an index
259 */
Jeff Brown3f11f302012-01-12 14:21:54 -0800260 public static class SelectIndex100 extends PerformanceBase {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700261 private static final int SIZE = SIZE_MULTIPLIER;
262 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800263 private static final String[] COLUMNS = {"count(*)", "avg(b)"};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800264
Jeff Brown3f11f302012-01-12 14:21:54 -0800265 private String[] where = new String[SIZE];
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800266
Jeff Brown3f11f302012-01-12 14:21:54 -0800267 @Override
268 public void setUp() {
269 super.setUp();
270 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800271
Jeff Brown3f11f302012-01-12 14:21:54 -0800272 mDatabase
273 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
274 mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800275
Jeff Brown3f11f302012-01-12 14:21:54 -0800276 for (int i = 0; i < SIZE; i++) {
277 int r = random.nextInt(100000);
278 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
279 + numberName(r) + "')");
280 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800281
Jeff Brown3f11f302012-01-12 14:21:54 -0800282 for (int i = 0; i < SIZE; i++) {
283 int lower = i * 100;
284 int upper = (i + 10) * 100;
285 where[i] = "b >= " + lower + " AND b < " + upper;
286 }
287 }
288
289 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700290 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
291 for (int i = 0; i < SIZE; i++) {
292 mDatabase
293 .query("t1", COLUMNS, where[i], null, null, null, null);
294 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800295 }
296 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800297 }
298
Jeff Brown3f11f302012-01-12 14:21:54 -0800299 /**
300 * INNER JOIN without an index
301 */
Jeff Brown3f11f302012-01-12 14:21:54 -0800302 public static class InnerJoin100 extends PerformanceBase {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700303 private static final int SIZE = SIZE_MULTIPLIER;
304 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800305 private static final String[] COLUMNS = {"t1.a"};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800306
Jeff Brown3f11f302012-01-12 14:21:54 -0800307 @Override
308 public void setUp() {
309 super.setUp();
310 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800311
Jeff Brown3f11f302012-01-12 14:21:54 -0800312 mDatabase
313 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
314 mDatabase
315 .execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800316
Jeff Brown3f11f302012-01-12 14:21:54 -0800317 for (int i = 0; i < SIZE; i++) {
318 int r = random.nextInt(100000);
319 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
320 + numberName(r) + "')");
321 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800322
Jeff Brown3f11f302012-01-12 14:21:54 -0800323 for (int i = 0; i < SIZE; i++) {
324 int r = random.nextInt(100000);
325 mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
326 + numberName(r) + "')");
327 }
328 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800329
Jeff Brown3f11f302012-01-12 14:21:54 -0800330 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700331 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
332 mDatabase.query("t1 INNER JOIN t2 ON t1.b = t2.b", COLUMNS, null,
333 null, null, null, null);
334 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800335 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800336 }
337
Jeff Brown3f11f302012-01-12 14:21:54 -0800338 /**
339 * INNER JOIN without an index on one side
340 */
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800341
Jeff Brown3f11f302012-01-12 14:21:54 -0800342 public static class InnerJoinOneSide100 extends PerformanceBase {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700343 private static final int SIZE = SIZE_MULTIPLIER;
344 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800345 private static final String[] COLUMNS = {"t1.a"};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800346
Jeff Brown3f11f302012-01-12 14:21:54 -0800347 @Override
348 public void setUp() {
349 super.setUp();
350 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800351
Jeff Brown3f11f302012-01-12 14:21:54 -0800352 mDatabase
353 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
354 mDatabase
355 .execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800356
Jeff Brown3f11f302012-01-12 14:21:54 -0800357 mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800358
Jeff Brown3f11f302012-01-12 14:21:54 -0800359 for (int i = 0; i < SIZE; i++) {
360 int r = random.nextInt(100000);
361 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
362 + numberName(r) + "')");
363 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800364
Jeff Brown3f11f302012-01-12 14:21:54 -0800365 for (int i = 0; i < SIZE; i++) {
366 int r = random.nextInt(100000);
367 mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
368 + numberName(r) + "')");
369 }
370 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800371
Jeff Brown3f11f302012-01-12 14:21:54 -0800372 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700373 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
374 mDatabase.query("t1 INNER JOIN t2 ON t1.b = t2.b", COLUMNS, null,
375 null, null, null, null);
376 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800377 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800378 }
379
Jeff Brown3f11f302012-01-12 14:21:54 -0800380 /**
381 * INNER JOIN without an index on one side
382 */
Jeff Brown3f11f302012-01-12 14:21:54 -0800383 public static class InnerJoinNoIndex100 extends PerformanceBase {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700384 private static final int SIZE = SIZE_MULTIPLIER;
385 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800386 private static final String[] COLUMNS = {"t1.a"};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800387
Jeff Brown3f11f302012-01-12 14:21:54 -0800388 @Override
389 public void setUp() {
390 super.setUp();
391 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800392
Jeff Brown3f11f302012-01-12 14:21:54 -0800393 mDatabase
394 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
395 mDatabase
396 .execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800397
Jeff Brown3f11f302012-01-12 14:21:54 -0800398 mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800399
Jeff Brown3f11f302012-01-12 14:21:54 -0800400 for (int i = 0; i < SIZE; i++) {
401 int r = random.nextInt(100000);
402 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
403 + numberName(r) + "')");
404 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800405
Jeff Brown3f11f302012-01-12 14:21:54 -0800406 for (int i = 0; i < SIZE; i++) {
407 int r = random.nextInt(100000);
408 mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
409 + numberName(r) + "')");
410 }
411 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800412
Jeff Brown3f11f302012-01-12 14:21:54 -0800413 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700414 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
415 mDatabase.query("t1 INNER JOIN t2 ON t1.c = t2.c", COLUMNS, null,
416 null, null, null, null);
417 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800418 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800419 }
420
Jeff Brown3f11f302012-01-12 14:21:54 -0800421 /**
422 * 100 SELECTs with subqueries. Subquery is using an index
423 */
Jeff Brown3f11f302012-01-12 14:21:54 -0800424 public static class SelectSubQIndex100 extends PerformanceBase {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700425 private static final int SIZE = SIZE_MULTIPLIER;
426 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800427 private static final String[] COLUMNS = {"t1.a"};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800428
Jeff Brown3f11f302012-01-12 14:21:54 -0800429 private String[] where = new String[SIZE];
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800430
Jeff Brown3f11f302012-01-12 14:21:54 -0800431 @Override
432 public void setUp() {
433 super.setUp();
434 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800435
Jeff Brown3f11f302012-01-12 14:21:54 -0800436 mDatabase
437 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
438 mDatabase
439 .execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800440
Jeff Brown3f11f302012-01-12 14:21:54 -0800441 mDatabase.execSQL("CREATE INDEX i2b ON t2(b)");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800442
Jeff Brown3f11f302012-01-12 14:21:54 -0800443 for (int i = 0; i < SIZE; i++) {
444 int r = random.nextInt(100000);
445 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
446 + numberName(r) + "')");
447 }
448
449 for (int i = 0; i < SIZE; i++) {
450 int r = random.nextInt(100000);
451 mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
452 + numberName(r) + "')");
453 }
454
455 for (int i = 0; i < SIZE; i++) {
456 int lower = i * 100;
457 int upper = (i + 10) * 100;
458 where[i] =
459 "t1.b IN (SELECT t2.b FROM t2 WHERE t2.b >= " + lower
460 + " AND t2.b < " + upper + ")";
461 }
462 }
463
464 public void testRun() {
465 for (int i = 0; i < SIZE; i++) {
466 mDatabase
467 .query("t1", COLUMNS, where[i], null, null, null, null);
468 }
469 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800470 }
471
Jeff Brown3f11f302012-01-12 14:21:54 -0800472 /**
473 * 100 SELECTs on string comparison with Index
474 */
Jeff Brown3f11f302012-01-12 14:21:54 -0800475 public static class SelectIndexStringComparison100 extends PerformanceBase {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700476 private static final int SIZE = SIZE_MULTIPLIER;
477 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800478 private static final String[] COLUMNS = {"count(*)", "avg(b)"};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800479
Jeff Brown3f11f302012-01-12 14:21:54 -0800480 private String[] where = new String[SIZE];
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800481
Jeff Brown3f11f302012-01-12 14:21:54 -0800482 @Override
483 public void setUp() {
484 super.setUp();
485 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800486
Jeff Brown3f11f302012-01-12 14:21:54 -0800487 mDatabase
488 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
489 mDatabase.execSQL("CREATE INDEX i3c ON t1(c)");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800490
Jeff Brown3f11f302012-01-12 14:21:54 -0800491 for (int i = 0; i < SIZE; i++) {
492 int r = random.nextInt(100000);
493 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
494 + numberName(r) + "')");
495 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800496
Jeff Brown3f11f302012-01-12 14:21:54 -0800497 for (int i = 0; i < SIZE; i++) {
498 where[i] = "c LIKE '" + numberName(i) + "'";
499 }
500 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800501
Jeff Brown3f11f302012-01-12 14:21:54 -0800502 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700503 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
504 for (int i = 0; i < SIZE; i++) {
505 mDatabase
506 .query("t1", COLUMNS, where[i], null, null, null, null);
507 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800508 }
509 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800510 }
511
Jeff Brown3f11f302012-01-12 14:21:54 -0800512 /**
513 * 100 SELECTs on integer
514 */
Jeff Brown3f11f302012-01-12 14:21:54 -0800515 public static class SelectInteger100 extends PerformanceBase {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700516 private static final int SIZE = SIZE_MULTIPLIER;
517 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800518 private static final String[] COLUMNS = {"b"};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800519
Jeff Brown3f11f302012-01-12 14:21:54 -0800520 @Override
521 public void setUp() {
522 super.setUp();
523 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800524
Jeff Brown3f11f302012-01-12 14:21:54 -0800525 mDatabase
526 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800527
Jeff Brown3f11f302012-01-12 14:21:54 -0800528 for (int i = 0; i < SIZE; i++) {
529 int r = random.nextInt(100000);
530 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
531 + numberName(r) + "')");
532 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800533
Jeff Brown3f11f302012-01-12 14:21:54 -0800534 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800535
Jeff Brown3f11f302012-01-12 14:21:54 -0800536 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700537 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
538 for (int i = 0; i < SIZE; i++) {
539 mDatabase.query("t1", COLUMNS, null, null, null, null, null);
540 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800541 }
542 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800543 }
544
Jeff Brown3f11f302012-01-12 14:21:54 -0800545 /**
546 * 100 SELECTs on String
547 */
Jeff Brown3f11f302012-01-12 14:21:54 -0800548 public static class SelectString100 extends PerformanceBase {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700549 private static final int SIZE = SIZE_MULTIPLIER;
550 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800551 private static final String[] COLUMNS = {"c"};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800552
Jeff Brown3f11f302012-01-12 14:21:54 -0800553 @Override
554 public void setUp() {
555 super.setUp();
556 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800557
Jeff Brown3f11f302012-01-12 14:21:54 -0800558 mDatabase
559 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800560
Jeff Brown3f11f302012-01-12 14:21:54 -0800561 for (int i = 0; i < SIZE; i++) {
562 int r = random.nextInt(100000);
563 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
564 + numberName(r) + "')");
565 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800566 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800567
Jeff Brown3f11f302012-01-12 14:21:54 -0800568 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700569 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
570 for (int i = 0; i < SIZE; i++) {
571 mDatabase.query("t1", COLUMNS, null, null, null, null, null);
572 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800573 }
574 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800575 }
576
Jeff Brown3f11f302012-01-12 14:21:54 -0800577 /**
578 * 100 SELECTs on integer with index
579 */
Jeff Brown3f11f302012-01-12 14:21:54 -0800580 public static class SelectIntegerIndex100 extends PerformanceBase {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700581 private static final int SIZE = SIZE_MULTIPLIER;
582 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800583 private static final String[] COLUMNS = {"b"};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800584
Jeff Brown3f11f302012-01-12 14:21:54 -0800585 @Override
586 public void setUp() {
587 super.setUp();
588 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800589
Jeff Brown3f11f302012-01-12 14:21:54 -0800590 mDatabase
591 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
592 mDatabase.execSQL("CREATE INDEX i1b on t1(b)");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800593
Jeff Brown3f11f302012-01-12 14:21:54 -0800594 for (int i = 0; i < SIZE; i++) {
595 int r = random.nextInt(100000);
596 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
597 + numberName(r) + "')");
598 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800599
Jeff Brown3f11f302012-01-12 14:21:54 -0800600 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800601
Jeff Brown3f11f302012-01-12 14:21:54 -0800602 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700603 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
604 for (int i = 0; i < SIZE; i++) {
605 mDatabase.query("t1", COLUMNS, null, null, null, null, null);
606 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800607 }
608 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800609 }
610
Jeff Brown3f11f302012-01-12 14:21:54 -0800611 /**
612 * 100 SELECTs on String with index
613 */
Jeff Brown3f11f302012-01-12 14:21:54 -0800614 public static class SelectIndexString100 extends PerformanceBase {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700615 private static final int SIZE = SIZE_MULTIPLIER;
616 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800617 private static final String[] COLUMNS = {"c"};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800618
Jeff Brown3f11f302012-01-12 14:21:54 -0800619 @Override
620 public void setUp() {
621 super.setUp();
622 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800623
Jeff Brown3f11f302012-01-12 14:21:54 -0800624 mDatabase
625 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
626 mDatabase.execSQL("CREATE INDEX i1c ON t1(c)");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800627
Jeff Brown3f11f302012-01-12 14:21:54 -0800628 for (int i = 0; i < SIZE; i++) {
629 int r = random.nextInt(100000);
630 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
631 + numberName(r) + "')");
632 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800633 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800634
Jeff Brown3f11f302012-01-12 14:21:54 -0800635 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700636 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
637 for (int i = 0; i < SIZE; i++) {
638 mDatabase.query("t1", COLUMNS, null, null, null, null, null);
639 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800640 }
641 }
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700642
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800643 }
644
Jeff Brown3f11f302012-01-12 14:21:54 -0800645 /**
646 * 100 SELECTs on String with starts with
647 */
Jeff Brown3f11f302012-01-12 14:21:54 -0800648 public static class SelectStringStartsWith100 extends PerformanceBase {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700649 private static final int SIZE = SIZE_MULTIPLIER;
650 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800651 private static final String[] COLUMNS = {"c"};
652 private String[] where = new String[SIZE];
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800653
Jeff Brown3f11f302012-01-12 14:21:54 -0800654 @Override
655 public void setUp() {
656 super.setUp();
657 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800658
Jeff Brown3f11f302012-01-12 14:21:54 -0800659 mDatabase
660 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
661 mDatabase.execSQL("CREATE INDEX i1c ON t1(c)");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800662
Jeff Brown3f11f302012-01-12 14:21:54 -0800663 for (int i = 0; i < SIZE; i++) {
664 int r = random.nextInt(100000);
665 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
666 + numberName(r) + "')");
667 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800668
Jeff Brown3f11f302012-01-12 14:21:54 -0800669 for (int i = 0; i < SIZE; i++) {
670 int r = random.nextInt(100000);
671 where[i] = "c LIKE '" + numberName(r).substring(0, 1) + "*'";
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800672
Jeff Brown3f11f302012-01-12 14:21:54 -0800673 }
674
675 }
676
677 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700678 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
679 for (int i = 0; i < SIZE; i++) {
680 mDatabase
681 .query("t1", COLUMNS, where[i], null, null, null, null);
682 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800683 }
684 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800685 }
686
Jeff Brown3f11f302012-01-12 14:21:54 -0800687 /**
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700688 * 100 Deletes on an indexed table
Jeff Brown3f11f302012-01-12 14:21:54 -0800689 */
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700690 public static class DeleteIndexed100 extends PerformanceBase {
691 private static final int SIZE = SIZE_MULTIPLIER;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800692
Jeff Brown3f11f302012-01-12 14:21:54 -0800693 @Override
694 public void setUp() {
695 super.setUp();
696 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800697
Jeff Brown3f11f302012-01-12 14:21:54 -0800698 mDatabase
699 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
700 mDatabase.execSQL("CREATE INDEX i3c ON t1(c)");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800701
Jeff Brown3f11f302012-01-12 14:21:54 -0800702 for (int i = 0; i < SIZE; i++) {
703 int r = random.nextInt(100000);
704 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
705 + numberName(r) + "')");
706 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800707
Jeff Brown3f11f302012-01-12 14:21:54 -0800708 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800709
Jeff Brown3f11f302012-01-12 14:21:54 -0800710 public void testRun() {
711 for (int i = 0; i < SIZE; i++) {
712 mDatabase.delete("t1", null, null);
713 }
714 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800715 }
716
Jeff Brown3f11f302012-01-12 14:21:54 -0800717 /**
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700718 * 100 Deletes
Jeff Brown3f11f302012-01-12 14:21:54 -0800719 */
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700720 public static class Delete100 extends PerformanceBase {
721 private static final int SIZE = SIZE_MULTIPLIER;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800722
Jeff Brown3f11f302012-01-12 14:21:54 -0800723 @Override
724 public void setUp() {
725 super.setUp();
726 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800727
Jeff Brown3f11f302012-01-12 14:21:54 -0800728 mDatabase
729 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800730
Jeff Brown3f11f302012-01-12 14:21:54 -0800731 for (int i = 0; i < SIZE; i++) {
732 int r = random.nextInt(100000);
733 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
734 + numberName(r) + "')");
735 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800736
Jeff Brown3f11f302012-01-12 14:21:54 -0800737 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800738
Jeff Brown3f11f302012-01-12 14:21:54 -0800739 public void testRun() {
740 for (int i = 0; i < SIZE; i++) {
741 mDatabase.delete("t1", null, null);
742 }
743 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800744 }
745
Jeff Brown3f11f302012-01-12 14:21:54 -0800746 /**
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700747 * 100 DELETE's without an index with where clause
Jeff Brown3f11f302012-01-12 14:21:54 -0800748 */
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700749 public static class DeleteWhere100 extends PerformanceBase {
750 private static final int SIZE = SIZE_MULTIPLIER;
Jeff Brown3f11f302012-01-12 14:21:54 -0800751 private String[] where = new String[SIZE];
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800752
Jeff Brown3f11f302012-01-12 14:21:54 -0800753 @Override
754 public void setUp() {
755 super.setUp();
756 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800757
Jeff Brown3f11f302012-01-12 14:21:54 -0800758 mDatabase
759 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800760
Jeff Brown3f11f302012-01-12 14:21:54 -0800761 for (int i = 0; i < SIZE; i++) {
762 int r = random.nextInt(100000);
763 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
764 + numberName(r) + "')");
765 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800766
Jeff Brown3f11f302012-01-12 14:21:54 -0800767 for (int i = 0; i < SIZE; i++) {
768 int lower = i * 100;
769 int upper = (i + 10) * 100;
770 where[i] = "b >= " + lower + " AND b < " + upper;
771 }
772 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800773
Jeff Brown3f11f302012-01-12 14:21:54 -0800774 public void testRun() {
775 for (int i = 0; i < SIZE; i++) {
776 mDatabase.delete("t1", where[i], null);
777 }
778 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800779 }
780
Jeff Brown3f11f302012-01-12 14:21:54 -0800781 /**
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700782 * 100 DELETE's with an index with where clause
Jeff Brown3f11f302012-01-12 14:21:54 -0800783 */
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700784 public static class DeleteIndexWhere100 extends PerformanceBase {
785 private static final int SIZE = SIZE_MULTIPLIER;
Jeff Brown3f11f302012-01-12 14:21:54 -0800786 private String[] where = new String[SIZE];
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800787
Jeff Brown3f11f302012-01-12 14:21:54 -0800788 @Override
789 public void setUp() {
790 super.setUp();
791 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800792
Jeff Brown3f11f302012-01-12 14:21:54 -0800793 mDatabase
794 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
795 mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800796
Jeff Brown3f11f302012-01-12 14:21:54 -0800797 for (int i = 0; i < SIZE; i++) {
798 int r = random.nextInt(100000);
799 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
800 + numberName(r) + "')");
801 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800802
Jeff Brown3f11f302012-01-12 14:21:54 -0800803 for (int i = 0; i < SIZE; i++) {
804 int lower = i * 100;
805 int upper = (i + 10) * 100;
806 where[i] = "b >= " + lower + " AND b < " + upper;
807 }
808 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800809
Jeff Brown3f11f302012-01-12 14:21:54 -0800810 public void testRun() {
811 for (int i = 0; i < SIZE; i++) {
812 mDatabase.delete("t1", where[i], null);
813 }
814 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800815 }
816
Jeff Brown3f11f302012-01-12 14:21:54 -0800817 /**
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700818 * 100 update's with an index with where clause
Jeff Brown3f11f302012-01-12 14:21:54 -0800819 */
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700820 public static class UpdateIndexWhere100 extends PerformanceBase {
821 private static final int SIZE = SIZE_MULTIPLIER;
Jeff Brown3f11f302012-01-12 14:21:54 -0800822 private String[] where = new String[SIZE];
823 ContentValues[] mValues = new ContentValues[SIZE];
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800824
Jeff Brown3f11f302012-01-12 14:21:54 -0800825 @Override
826 public void setUp() {
827 super.setUp();
828 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800829
Jeff Brown3f11f302012-01-12 14:21:54 -0800830 mDatabase
831 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
832 mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800833
Jeff Brown3f11f302012-01-12 14:21:54 -0800834 for (int i = 0; i < SIZE; i++) {
835 int r = random.nextInt(100000);
836 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
837 + numberName(r) + "')");
838 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800839
Jeff Brown3f11f302012-01-12 14:21:54 -0800840 for (int i = 0; i < SIZE; i++) {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800841
Jeff Brown3f11f302012-01-12 14:21:54 -0800842 int lower = i * 100;
843 int upper = (i + 10) * 100;
844 where[i] = "b >= " + lower + " AND b < " + upper;
845 ContentValues b = new ContentValues(1);
846 b.put("b", upper);
847 mValues[i] = b;
848
849 }
850 }
851
852 public void testRun() {
853 for (int i = 0; i < SIZE; i++) {
854 mDatabase.update("t1", mValues[i], where[i], null);
855 }
856 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800857 }
858
Jeff Brown3f11f302012-01-12 14:21:54 -0800859 /**
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700860 * 100 update's without an index with where clause
Jeff Brown3f11f302012-01-12 14:21:54 -0800861 */
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700862 public static class UpdateWhere100 extends PerformanceBase {
863 private static final int SIZE = SIZE_MULTIPLIER;
Jeff Brown3f11f302012-01-12 14:21:54 -0800864 private String[] where = new String[SIZE];
865 ContentValues[] mValues = new ContentValues[SIZE];
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800866
Jeff Brown3f11f302012-01-12 14:21:54 -0800867 @Override
868 public void setUp() {
869 super.setUp();
870 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800871
Jeff Brown3f11f302012-01-12 14:21:54 -0800872 mDatabase
873 .execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800874
Jeff Brown3f11f302012-01-12 14:21:54 -0800875 for (int i = 0; i < SIZE; i++) {
876 int r = random.nextInt(100000);
877 mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
878 + numberName(r) + "')");
879 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800880
Jeff Brown3f11f302012-01-12 14:21:54 -0800881 for (int i = 0; i < SIZE; i++) {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800882
Jeff Brown3f11f302012-01-12 14:21:54 -0800883 int lower = i * 100;
884 int upper = (i + 10) * 100;
885 where[i] = "b >= " + lower + " AND b < " + upper;
886 ContentValues b = new ContentValues(1);
887 b.put("b", upper);
888 mValues[i] = b;
889 }
890 }
891
892 public void testRun() {
893 for (int i = 0; i < SIZE; i++) {
894 mDatabase.update("t1", mValues[i], where[i], null);
895 }
896 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800897 }
898
Jeff Brown3f11f302012-01-12 14:21:54 -0800899 /**
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700900 * 100 selects for a String - contains 'e'
Jeff Brown3f11f302012-01-12 14:21:54 -0800901 */
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700902 public static class SelectStringContains100 extends PerformanceBase {
903 private static final int SIZE = SIZE_MULTIPLIER;
904 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800905 private static final String[] COLUMNS = {"t3.a"};
906 private String[] where = new String[SIZE];
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800907
Jeff Brown3f11f302012-01-12 14:21:54 -0800908 @Override
909 public void setUp() {
910 super.setUp();
911 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800912
Jeff Brown3f11f302012-01-12 14:21:54 -0800913 mDatabase
914 .execSQL("CREATE TABLE t3(a VARCHAR(100))");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800915
Jeff Brown3f11f302012-01-12 14:21:54 -0800916 for (int i = 0; i < SIZE; i++) {
917 int r = random.nextInt(100000);
918 mDatabase.execSQL("INSERT INTO t3 VALUES('"
919 + numberName(r) + "')");
920 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800921
Jeff Brown3f11f302012-01-12 14:21:54 -0800922 for (int i = 0; i < SIZE; i++) {
923 where[i] = "a LIKE '*e*'";
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800924
Jeff Brown3f11f302012-01-12 14:21:54 -0800925 }
926 }
927
928 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700929 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
930 for (int i = 0; i < SIZE; i++) {
931 mDatabase.query("t3", COLUMNS, where[i], null, null, null, null);
932 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800933 }
934 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800935 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800936
Jeff Brown3f11f302012-01-12 14:21:54 -0800937 /**
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700938 * 100 selects for a String - contains 'e'-indexed table
Jeff Brown3f11f302012-01-12 14:21:54 -0800939 */
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700940 public static class SelectStringIndexedContains100 extends PerformanceBase {
941 private static final int SIZE = SIZE_MULTIPLIER;
942 private static final int REPEAT_COUNT = 10;
Jeff Brown3f11f302012-01-12 14:21:54 -0800943 private static final String[] COLUMNS = {"t3.a"};
944 private String[] where = new String[SIZE];
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800945
Jeff Brown3f11f302012-01-12 14:21:54 -0800946 @Override
947 public void setUp() {
948 super.setUp();
949 Random random = new Random(42);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800950
Jeff Brown3f11f302012-01-12 14:21:54 -0800951 mDatabase
952 .execSQL("CREATE TABLE t3(a VARCHAR(100))");
953 mDatabase.execSQL("CREATE INDEX i3a ON t3(a)");
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800954
Jeff Brown3f11f302012-01-12 14:21:54 -0800955 for (int i = 0; i < SIZE; i++) {
956 int r = random.nextInt(100000);
957 mDatabase.execSQL("INSERT INTO t3 VALUES('"
958 + numberName(r) + "')");
959 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800960
Jeff Brown3f11f302012-01-12 14:21:54 -0800961 for (int i = 0; i < SIZE; i++) {
962 where[i] = "a LIKE '*e*'";
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800963
Jeff Brown3f11f302012-01-12 14:21:54 -0800964 }
965 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800966
Jeff Brown3f11f302012-01-12 14:21:54 -0800967 public void testRun() {
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700968 for (int iter = 0; iter < REPEAT_COUNT; iter++) {
969 for (int i = 0; i < SIZE; i++) {
970 mDatabase.query("t3", COLUMNS, where[i], null, null, null, null);
971 }
Jeff Brown3f11f302012-01-12 14:21:54 -0800972 }
973 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800974 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800975
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700976 static final String[] ONES =
Jeff Brown3f11f302012-01-12 14:21:54 -0800977 {"zero", "one", "two", "three", "four", "five", "six", "seven",
978 "eight", "nine", "ten", "eleven", "twelve", "thirteen",
979 "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
980 "nineteen"};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800981
Fyodor Kupolovb5f38042017-05-23 12:01:07 -0700982 static final String[] TENS =
Jeff Brown3f11f302012-01-12 14:21:54 -0800983 {"", "ten", "twenty", "thirty", "forty", "fifty", "sixty",
984 "seventy", "eighty", "ninety"};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800985}