blob: bcd90600b48ad95ac42842d0006ce3f82ead28e0 [file] [log] [blame]
/*
* Copyright (C) 2007 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 android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.test.PerformanceTestCase;
import android.util.Log;
import junit.framework.TestCase;
import java.io.File;
import java.util.Random;
/**
* Database Performance Tests
*
*/
public class NewDatabasePerformanceTests {
private static final String TAG = "NewDatabasePerformanceTests";
private static final int DATASET_SIZE = 100; // Size of dataset to use for testing
private static final int FAST_OP_MULTIPLIER = 25;
private static final int FAST_OP_COUNT = FAST_OP_MULTIPLIER * DATASET_SIZE;
public static class PerformanceBase extends TestCase
implements PerformanceTestCase {
protected static final int CURRENT_DATABASE_VERSION = 42;
protected SQLiteDatabase mDatabase;
protected File mDatabaseFile;
private long mSetupFinishedTime;
public void setUp() {
long setupStarted = System.currentTimeMillis();
mDatabaseFile = new File("/sdcard", "perf_database_test.db");
if (mDatabaseFile.exists()) {
mDatabaseFile.delete();
}
mDatabase = SQLiteDatabase.openOrCreateDatabase(mDatabaseFile.getPath(), null);
assertTrue(mDatabase != null);
mDatabase.setVersion(CURRENT_DATABASE_VERSION);
mDatabase.beginTransactionNonExclusive();
prepareForTest();
mDatabase.setTransactionSuccessful();
mDatabase.endTransaction();
mSetupFinishedTime = System.currentTimeMillis();
Log.i(TAG, "Setup for " + getClass().getSimpleName() + " took "
+ (mSetupFinishedTime - setupStarted) + " ms");
}
protected void prepareForTest() {
}
public void tearDown() {
long duration = System.currentTimeMillis() - mSetupFinishedTime;
Log.i(TAG, "Test " + getClass().getSimpleName() + " took " + duration + " ms");
mDatabase.close();
mDatabaseFile.delete();
}
public boolean isPerformanceOnly() {
return true;
}
// These tests can only be run once.
public int startPerformance(Intermediates intermediates) {
return 0;
}
String numberName(int number) {
String result = "";
if (number >= 1000) {
result += numberName((number / 1000)) + " thousand";
number = (number % 1000);
if (number > 0) result += " ";
}
if (number >= 100) {
result += ONES[(number / 100)] + " hundred";
number = (number % 100);
if (number > 0) result += " ";
}
if (number >= 20) {
result += TENS[(number / 10)];
number = (number % 10);
if (number > 0) result += " ";
}
if (number > 0) {
result += ONES[number];
}
return result;
}
void checkCursor(Cursor c) {
c.getColumnCount();
c.close();
}
}
/**
* Test CREATE SIZE tables with 1 row.
*/
public static class CreateTable100 extends PerformanceBase {
public void testRun() {
for (int i = 0; i < DATASET_SIZE; i++) {
String t = "t" + i;
mDatabase.execSQL("CREATE TABLE " + t + "(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("INSERT INTO " + t + " VALUES(" + i + "," + i + ",'"
+ numberName(i) + "')");
}
}
}
/**
* Test 100 inserts.
*/
public static class Insert100 extends PerformanceBase {
private String[] mStatements = new String[DATASET_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mStatements[i] =
"INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')";
}
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
}
public void testRun() {
for (int i = 0; i < DATASET_SIZE; i++) {
mDatabase.execSQL(mStatements[i]);
}
}
}
/**
* Test 100 inserts into an indexed table.
*/
public static class InsertIndexed100 extends PerformanceBase {
private String[] mStatements = new String[DATASET_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mStatements[i] = "INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')";
}
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i1c ON t1(c)");
}
public void testRun() {
for (int i = 0; i < DATASET_SIZE; i++) {
mDatabase.execSQL(mStatements[i]);
}
}
}
/**
* 100 SELECTs without an index
*/
public static class Select100 extends PerformanceBase {
private static final String[] COLUMNS = {"count(*)", "avg(b)"};
private String[] mWhere = new String[DATASET_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
mWhere[i] = "b >= " + lower + " AND b < " + upper;
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
checkCursor(mDatabase
.query("t1", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null));
}
}
}
/**
* 100 SELECTs on a string comparison
*/
public static class SelectStringComparison100 extends PerformanceBase {
private static final String[] COLUMNS = {"count(*)", "avg(b)"};
private String[] mWhere = new String[DATASET_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
mWhere[i] = "c LIKE '" + numberName(i) + "'";
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
checkCursor(mDatabase
.query("t1", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null));
}
}
}
/**
* 100 SELECTs with an index
*/
public static class SelectIndex100 extends PerformanceBase {
private static final int TABLE_SIZE = 100;
private static final String[] COLUMNS = {"count(*)", "avg(b)"};
private String[] mWhere = new String[TABLE_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
for (int i = 0; i < TABLE_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < TABLE_SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
mWhere[i] = "b >= " + lower + " AND b < " + upper;
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
checkCursor(mDatabase
.query("t1", COLUMNS, mWhere[i % TABLE_SIZE], null, null, null, null));
}
}
}
/**
* INNER JOIN without an index
*/
public static class InnerJoin100 extends PerformanceBase {
private static final String[] COLUMNS = {"t1.a"};
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
checkCursor(mDatabase.query("t1 INNER JOIN t2 ON t1.b = t2.b", COLUMNS, null,
null, null, null, null));
}
}
}
/**
* INNER JOIN without an index on one side
*/
public static class InnerJoinOneSide100 extends PerformanceBase {
private static final String[] COLUMNS = {"t1.a"};
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
checkCursor(mDatabase.query("t1 INNER JOIN t2 ON t1.b = t2.b", COLUMNS, null,
null, null, null, null));
}
}
}
/**
* INNER JOIN without an index on one side
*/
public static class InnerJoinNoIndex100 extends PerformanceBase {
private static final String[] COLUMNS = {"t1.a"};
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
checkCursor(mDatabase
.query("t1 INNER JOIN t2 ON t1.c = t2.c", COLUMNS, null, null, null, null,
null));
}
}
}
/**
* 100 SELECTs with subqueries. Subquery is using an index
*/
public static class SelectSubQIndex100 extends PerformanceBase {
private static final String[] COLUMNS = {"t1.a"};
private String[] mWhere = new String[DATASET_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i2b ON t2(b)");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
mWhere[i] =
"t1.b IN (SELECT t2.b FROM t2 WHERE t2.b >= " + lower
+ " AND t2.b < " + upper + ")";
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
checkCursor(mDatabase
.query("t1", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null));
}
}
}
/**
* 100 SELECTs on string comparison with Index
*/
public static class SelectIndexStringComparison100 extends PerformanceBase {
private static final String[] COLUMNS = {"count(*)", "avg(b)"};
private String[] mWhere = new String[DATASET_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i3c ON t1(c)");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
mWhere[i] = "c LIKE '" + numberName(i) + "'";
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
checkCursor(mDatabase
.query("t1", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null));
}
}
}
/**
* 100 SELECTs on integer
*/
public static class SelectInteger100 extends PerformanceBase {
private static final String[] COLUMNS = {"b"};
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
checkCursor(mDatabase.query("t1", COLUMNS, null, null, null, null, null));
}
}
}
/**
* 100 SELECTs on String
*/
public static class SelectString100 extends PerformanceBase {
private static final String[] COLUMNS = {"c"};
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
mDatabase.query("t1", COLUMNS, null, null, null, null, null);
}
}
}
/**
* 100 SELECTs on integer with index
*/
public static class SelectIntegerIndex100 extends PerformanceBase {
private static final String[] COLUMNS = {"b"};
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i1b on t1(b)");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
mDatabase.query("t1", COLUMNS, null, null, null, null, null);
}
}
}
/**
* 100 SELECTs on String with index
*/
public static class SelectIndexString100 extends PerformanceBase {
private static final String[] COLUMNS = {"c"};
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i1c ON t1(c)");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
checkCursor(mDatabase.query("t1", COLUMNS, null, null, null, null, null));
}
}
}
/**
* 100 SELECTs on String with starts with
*/
public static class SelectStringStartsWith100 extends PerformanceBase {
private static final String[] COLUMNS = {"c"};
private String[] mWhere = new String[DATASET_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i1c ON t1(c)");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mWhere[i] = "c LIKE '" + numberName(r).substring(0, 1) + "*'";
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
mDatabase.query("t1", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null);
}
}
}
/**
* 100 Deletes on an indexed table
*/
public static class DeleteIndexed100 extends PerformanceBase {
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i3c ON t1(c)");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
public void testRun() {
for (int i = 0; i < DATASET_SIZE; i++) {
mDatabase.delete("t1", null, null);
}
}
}
/**
* 100 Deletes
*/
public static class Delete100 extends PerformanceBase {
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
public void testRun() {
for (int i = 0; i < DATASET_SIZE; i++) {
mDatabase.delete("t1", null, null);
}
}
}
/**
* 100 DELETE's without an index with where clause
*/
public static class DeleteWhere100 extends PerformanceBase {
private String[] mWhere = new String[DATASET_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
mWhere[i] = "b >= " + lower + " AND b < " + upper;
}
}
public void testRun() {
for (int i = 0; i < DATASET_SIZE; i++) {
mDatabase.delete("t1", mWhere[i], null);
}
}
}
/**
* 100 DELETE's with an index with where clause
*/
public static class DeleteIndexWhere100 extends PerformanceBase {
private String[] mWhere = new String[DATASET_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
mWhere[i] = "b >= " + lower + " AND b < " + upper;
}
}
public void testRun() {
for (int i = 0; i < DATASET_SIZE; i++) {
mDatabase.delete("t1", mWhere[i], null);
}
}
}
/**
* 100 update's with an index with where clause
*/
public static class UpdateIndexWhere100 extends PerformanceBase {
private String[] mWhere = new String[DATASET_SIZE];
ContentValues[] mValues = new ContentValues[DATASET_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i1b ON t1(b)");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
mWhere[i] = "b >= " + lower + " AND b < " + upper;
ContentValues b = new ContentValues(1);
b.put("b", upper);
mValues[i] = b;
}
}
public void testRun() {
for (int i = 0; i < DATASET_SIZE; i++) {
mDatabase.update("t1", mValues[i], mWhere[i], null);
}
}
}
/**
* 100 update's without an index with where clause
*/
public static class UpdateWhere100 extends PerformanceBase {
private String[] mWhere = new String[DATASET_SIZE];
ContentValues[] mValues = new ContentValues[DATASET_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
mWhere[i] = "b >= " + lower + " AND b < " + upper;
ContentValues b = new ContentValues(1);
b.put("b", upper);
mValues[i] = b;
}
}
public void testRun() {
for (int i = 0; i < DATASET_SIZE; i++) {
mDatabase.update("t1", mValues[i], mWhere[i], null);
}
}
}
/**
* 100 selects for a String - contains 'e'
*/
public static class SelectStringContains100 extends PerformanceBase {
private static final String[] COLUMNS = {"t3.a"};
private String[] mWhere = new String[DATASET_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t3(a VARCHAR(100))");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t3 VALUES('"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
mWhere[i] = "a LIKE '*e*'";
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
checkCursor(mDatabase
.query("t3", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null));
}
}
}
/**
* 100 selects for a String - contains 'e'-indexed table
*/
public static class SelectStringIndexedContains100 extends PerformanceBase {
private static final String[] COLUMNS = {"t3.a"};
private String[] mWhere = new String[DATASET_SIZE];
@Override
protected void prepareForTest() {
Random random = new Random(42);
mDatabase.execSQL("CREATE TABLE t3(a VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i3a ON t3(a)");
for (int i = 0; i < DATASET_SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t3 VALUES('"
+ numberName(r) + "')");
}
for (int i = 0; i < DATASET_SIZE; i++) {
mWhere[i] = "a LIKE '*e*'";
}
}
public void testRun() {
for (int i = 0; i < FAST_OP_COUNT; i++) {
checkCursor(mDatabase
.query("t3", COLUMNS, mWhere[i % DATASET_SIZE], null, null, null, null));
}
}
}
static final String[] ONES =
{"zero", "one", "two", "three", "four", "five", "six", "seven",
"eight", "nine", "ten", "eleven", "twelve", "thirteen",
"fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
"nineteen"};
static final String[] TENS =
{"", "ten", "twenty", "thirty", "forty", "fifty", "sixty",
"seventy", "eighty", "ninety"};
}