blob: 68ce5e1585e73c03f99db47af341c5df779342ec [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 com.android.unit_tests;
import junit.framework.Assert;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.provider.Contacts;
import android.provider.Contacts.People;
import android.test.PerformanceTestCase;
import android.test.TestCase;
import java.io.File;
import java.util.Random;
/**
* Database Performance Tests
*
*/
public class DatabasePerformanceTests {
public static String[] children() {
return new String[] {
ContactReadingTest1.class.getName(),
Perf1Test.class.getName(),
Perf2Test.class.getName(),
Perf3Test.class.getName(),
Perf4Test.class.getName(),
Perf5Test.class.getName(),
Perf6Test.class.getName(),
Perf7Test.class.getName(),
Perf8Test.class.getName(),
Perf9Test.class.getName(),
Perf10Test.class.getName(),
Perf11Test.class.getName(),
Perf12Test.class.getName(),
Perf13Test.class.getName(),
Perf14Test.class.getName(),
Perf15Test.class.getName(),
Perf16Test.class.getName(),
Perf17Test.class.getName(),
Perf18Test.class.getName(),
Perf19Test.class.getName(),
Perf20Test.class.getName(),
Perf21Test.class.getName(),
Perf22Test.class.getName(),
Perf23Test.class.getName(),
Perf24Test.class.getName(),
Perf25Test.class.getName(),
Perf26Test.class.getName(),
Perf27Test.class.getName(),
Perf28Test.class.getName(),
Perf29Test.class.getName(),
Perf30Test.class.getName(),
Perf31Test.class.getName(),
};
}
public static abstract class PerformanceBase implements TestCase,
PerformanceTestCase {
protected static final int CURRENT_DATABASE_VERSION = 42;
protected SQLiteDatabase mDatabase;
protected File mDatabaseFile;
protected Context mContext;
public void setUp(Context c) {
mContext = c;
mDatabaseFile = new File("/tmp", "perf_database_test.db");
if (mDatabaseFile.exists()) {
mDatabaseFile.delete();
}
mDatabase = SQLiteDatabase.openOrCreateDatabase(mDatabaseFile.getPath(), null);
Assert.assertTrue(mDatabase != null);
mDatabase.setVersion(CURRENT_DATABASE_VERSION);
}
public void tearDown() {
mDatabase.close();
mDatabaseFile.delete();
}
public boolean isPerformanceOnly() {
return true;
}
// These test can only be run once.
public int startPerformance(Intermediates intermediates) {
return 0;
}
public void run() {
}
public 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;
}
}
/**
* Test reading all contact data.
*/
public static class ContactReadingTest1 implements TestCase, PerformanceTestCase {
private static final String[] PEOPLE_PROJECTION = new String[] {
Contacts.People._ID, // 0
Contacts.People.PRIMARY_PHONE_ID, // 1
Contacts.People.TYPE, // 2
Contacts.People.NUMBER, // 3
Contacts.People.LABEL, // 4
Contacts.People.NAME, // 5
Contacts.People.PRESENCE_STATUS, // 6
};
private Cursor mCursor;
public void setUp(Context c) {
mCursor = c.getContentResolver().query(People.CONTENT_URI, PEOPLE_PROJECTION, null,
null, People.DEFAULT_SORT_ORDER);
}
public void tearDown() {
mCursor.close();
}
public boolean isPerformanceOnly() {
return true;
}
public int startPerformance(Intermediates intermediates) {
// This test can only be run once.
return 0;
}
public void run() {
while (mCursor.moveToNext()) {
// Read out all of the data
mCursor.getLong(0);
mCursor.getLong(1);
mCursor.getLong(2);
mCursor.getString(3);
mCursor.getString(4);
mCursor.getString(5);
mCursor.getLong(6);
}
}
}
/**
* Test 1000 inserts
*/
public static class Perf1Test extends PerformanceBase {
private static final int SIZE = 1000;
private String[] statements = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
statements[i] =
"INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')";
}
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.execSQL(statements[i]);
}
}
}
/**
* Test 1000 inserts into and indexed table
*/
public static class Perf2Test extends PerformanceBase {
private static final int SIZE = 1000;
private String[] statements = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
statements[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)");
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.execSQL(statements[i]);
}
}
}
/**
* 100 SELECTs without an index
*/
public static class Perf3Test extends PerformanceBase {
private static final int SIZE = 100;
private static final String[] COLUMNS = {"count(*)", "avg(b)"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
where[i] = "b >= " + lower + " AND b < " + upper;
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase
.query("t1", COLUMNS, where[i], null, null, null, null);
}
}
}
/**
* 100 SELECTs on a string comparison
*/
public static class Perf4Test extends PerformanceBase {
private static final int SIZE = 100;
private static final String[] COLUMNS = {"count(*)", "avg(b)"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
where[i] = "c LIKE '" + numberName(i) + "'";
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase
.query("t1", COLUMNS, where[i], null, null, null, null);
}
}
}
/**
* 100 SELECTs with an index
*/
public static class Perf5Test extends PerformanceBase {
private static final int SIZE = 100;
private static final String[] COLUMNS = {"count(*)", "avg(b)"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
where[i] = "b >= " + lower + " AND b < " + upper;
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase
.query("t1", COLUMNS, where[i], null, null, null, null);
}
}
}
/**
* INNER JOIN without an index
*/
public static class Perf6Test extends PerformanceBase {
private static final int SIZE = 100;
private static final String[] COLUMNS = {"t1.a"};
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
@Override
public void run() {
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 Perf7Test extends PerformanceBase {
private static final int SIZE = 100;
private static final String[] COLUMNS = {"t1.a"};
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
@Override
public void run() {
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 Perf8Test extends PerformanceBase {
private static final int SIZE = 100;
private static final String[] COLUMNS = {"t1.a"};
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
@Override
public void run() {
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 Perf9Test extends PerformanceBase {
private static final int SIZE = 100;
private static final String[] COLUMNS = {"t1.a"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t2 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
where[i] =
"t1.b IN (SELECT t2.b FROM t2 WHERE t2.b >= " + lower
+ " AND t2.b < " + upper + ")";
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase
.query("t1", COLUMNS, where[i], null, null, null, null);
}
}
}
/**
* 100 SELECTs on string comparison with Index
*/
public static class Perf10Test extends PerformanceBase {
private static final int SIZE = 100;
private static final String[] COLUMNS = {"count(*)", "avg(b)"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
where[i] = "c LIKE '" + numberName(i) + "'";
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase
.query("t1", COLUMNS, where[i], null, null, null, null);
}
}
}
/**
* 100 SELECTs on integer
*/
public static class Perf11Test extends PerformanceBase {
private static final int SIZE = 100;
private static final String[] COLUMNS = {"b"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.query("t1", COLUMNS, null, null, null, null, null);
}
}
}
/**
* 100 SELECTs on String
*/
public static class Perf12Test extends PerformanceBase {
private static final int SIZE = 100;
private static final String[] COLUMNS = {"c"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.query("t1", COLUMNS, null, null, null, null, null);
}
}
}
/**
* 100 SELECTs on integer with index
*/
public static class Perf13Test extends PerformanceBase {
private static final int SIZE = 100;
private static final String[] COLUMNS = {"b"};
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.query("t1", COLUMNS, null, null, null, null, null);
}
}
}
/**
* 100 SELECTs on String with index
*/
public static class Perf14Test extends PerformanceBase {
private static final int SIZE = 100;
private static final String[] COLUMNS = {"c"};
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.query("t1", COLUMNS, null, null, null, null, null);
}
}
}
/**
* 100 SELECTs on String with starts with
*/
public static class Perf15Test extends PerformanceBase {
private static final int SIZE = 100;
private static final String[] COLUMNS = {"c"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
where[i] = "c LIKE '" + numberName(r).substring(0, 1) + "*'";
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase
.query("t1", COLUMNS, where[i], null, null, null, null);
}
}
}
/**
* 1000 Deletes on an indexed table
*/
public static class Perf16Test extends PerformanceBase {
private static final int SIZE = 1000;
private static final String[] COLUMNS = {"c"};
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.delete("t1", null, null);
}
}
}
/**
* 1000 Deletes
*/
public static class Perf17Test extends PerformanceBase {
private static final int SIZE = 1000;
private static final String[] COLUMNS = {"c"};
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.delete("t1", null, null);
}
}
}
/**
* 1000 DELETE's without an index with where clause
*/
public static class Perf18Test extends PerformanceBase {
private static final int SIZE = 1000;
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
where[i] = "b >= " + lower + " AND b < " + upper;
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.delete("t1", where[i], null);
}
}
}
/**
* 1000 DELETE's with an index with where clause
*/
public static class Perf19Test extends PerformanceBase {
private static final int SIZE = 1000;
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
where[i] = "b >= " + lower + " AND b < " + upper;
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.delete("t1", where[i], null);
}
}
}
/**
* 1000 update's with an index with where clause
*/
public static class Perf20Test extends PerformanceBase {
private static final int SIZE = 1000;
private String[] where = new String[SIZE];
ContentValues[] mValues = new ContentValues[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
where[i] = "b >= " + lower + " AND b < " + upper;
ContentValues b = new ContentValues(1);
b.put("b", upper);
mValues[i] = b;
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.update("t1", mValues[i], where[i], null);
}
}
}
/**
* 1000 update's without an index with where clause
*/
public static class Perf21Test extends PerformanceBase {
private static final int SIZE = 1000;
private String[] where = new String[SIZE];
ContentValues[] mValues = new ContentValues[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100))");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t1 VALUES(" + i + "," + r + ",'"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int lower = i * 100;
int upper = (i + 10) * 100;
where[i] = "b >= " + lower + " AND b < " + upper;
ContentValues b = new ContentValues(1);
b.put("b", upper);
mValues[i] = b;
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.update("t1", mValues[i], where[i], null);
}
}
}
/**
* 10000 inserts for an integer
*/
public static class Perf22Test extends PerformanceBase {
private static final int SIZE = 10000;
ContentValues[] mValues = new ContentValues[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER)");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
ContentValues b = new ContentValues(1);
b.put("a", r);
mValues[i] = b;
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.insert("t1", null, mValues[i]);
}
}
}
/**
* 10000 inserts for an integer -indexed table
*/
public static class Perf23Test extends PerformanceBase {
private static final int SIZE = 10000;
ContentValues[] mValues = new ContentValues[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a INTEGER)");
mDatabase.execSQL("CREATE INDEX i1a ON t1(a)");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
ContentValues b = new ContentValues(1);
b.put("a", r);
mValues[i] = b;
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.insert("t1", null, mValues[i]);
}
}
}
/**
* 10000 inserts for a String
*/
public static class Perf24Test extends PerformanceBase {
private static final int SIZE = 10000;
ContentValues[] mValues = new ContentValues[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a VARCHAR(100))");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
ContentValues b = new ContentValues(1);
b.put("a", numberName(r));
mValues[i] = b;
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.insert("t1", null, mValues[i]);
}
}
}
/**
* 10000 inserts for a String - indexed table
*/
public static class Perf25Test extends PerformanceBase {
private static final int SIZE = 10000;
ContentValues[] mValues = new ContentValues[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t1(a VARCHAR(100))");
mDatabase.execSQL("CREATE INDEX i1a ON t1(a)");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
ContentValues b = new ContentValues(1);
b.put("a", numberName(r));
mValues[i] = b;
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.insert("t1", null, mValues[i]);
}
}
}
/**
* 10000 selects for a String -starts with
*/
public static class Perf26Test extends PerformanceBase {
private static final int SIZE = 10000;
private static final String[] COLUMNS = {"t3.a"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t3(a VARCHAR(100))");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t3 VALUES('"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
where[i] = "a LIKE '" + numberName(r).substring(0, 1) + "*'";
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.query("t3", COLUMNS, where[i], null, null, null, null);
}
}
}
/**
* 10000 selects for a String - indexed table -starts with
*/
public static class Perf27Test extends PerformanceBase {
private static final int SIZE = 10000;
private static final String[] COLUMNS = {"t3.a"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t3 VALUES('"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
where[i] = "a LIKE '" + numberName(r).substring(0, 1) + "*'";
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.query("t3", COLUMNS, where[i], null, null, null, null);
}
}
}
/**
* 10000 selects for an integer -
*/
public static class Perf28Test extends PerformanceBase {
private static final int SIZE = 10000;
private static final String[] COLUMNS = {"t4.a"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t4(a INTEGER)");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t4 VALUES(" + r + ")");
int lower = i * 100;
int upper = (i + 10) * 100;
where[i] = "a >= " + lower + " AND a < " + upper;
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.query("t4", COLUMNS, where[i], null, null, null, null);
}
}
}
/**
* 10000 selects for an integer -indexed table
*/
public static class Perf29Test extends PerformanceBase {
private static final int SIZE = 10000;
private static final String[] COLUMNS = {"t4.a"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t4(a INTEGER)");
mDatabase.execSQL("CREATE INDEX i4a ON t4(a)");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t4 VALUES(" + r + ")");
int lower = i * 100;
int upper = (i + 10) * 100;
where[i] = "a >= " + lower + " AND a < " + upper;
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.query("t4", COLUMNS, where[i], null, null, null, null);
}
}
}
/**
* 10000 selects for a String - contains 'e'
*/
public static class Perf30Test extends PerformanceBase {
private static final int SIZE = 10000;
private static final String[] COLUMNS = {"t3.a"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
Random random = new Random(42);
mDatabase
.execSQL("CREATE TABLE t3(a VARCHAR(100))");
for (int i = 0; i < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t3 VALUES('"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
where[i] = "a LIKE '*e*'";
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.query("t3", COLUMNS, where[i], null, null, null, null);
}
}
}
/**
* 10000 selects for a String - contains 'e'-indexed table
*/
public static class Perf31Test extends PerformanceBase {
private static final int SIZE = 10000;
private static final String[] COLUMNS = {"t3.a"};
private String[] where = new String[SIZE];
@Override
public void setUp(Context c) {
super.setUp(c);
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 < SIZE; i++) {
int r = random.nextInt(100000);
mDatabase.execSQL("INSERT INTO t3 VALUES('"
+ numberName(r) + "')");
}
for (int i = 0; i < SIZE; i++) {
where[i] = "a LIKE '*e*'";
}
}
@Override
public void run() {
for (int i = 0; i < SIZE; i++) {
mDatabase.query("t3", COLUMNS, where[i], null, null, null, null);
}
}
}
public static final String[] ONES =
{"zero", "one", "two", "three", "four", "five", "six", "seven",
"eight", "nine", "ten", "eleven", "twelve", "thirteen",
"fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
"nineteen"};
public static final String[] TENS =
{"", "ten", "twenty", "thirty", "forty", "fifty", "sixty",
"seventy", "eighty", "ninety"};
}