blob: 48f37814786d6f620e5edeaf15ae7ef22e7977cc [file] [log] [blame]
/*
* Copyright (C) 2017 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 java.util.Date;
import java.util.UUID;
/**
* Helper class for creating and querying data from a database in performance tests.
*
* Subclasses can define different table/query formats.
*/
public abstract class TableHelper {
public interface CursorReader {
void read();
}
public abstract String createSql();
public abstract String insertSql();
public abstract Object[] createItem(int id);
public abstract String readSql();
public abstract CursorReader createReader(Cursor cursor);
/**
* 1 column, single integer
*/
public static TableHelper INT_1 = new TableHelper() {
@Override
public String createSql() {
return "CREATE TABLE `Int1` ("
+ "`a` INTEGER,"
+ " PRIMARY KEY(`a`))";
}
@Override
public String insertSql() {
return "INSERT INTO `Int1`(`a`)"
+ " VALUES (?)";
}
@Override
public Object[] createItem(int id) {
return new Object[] {
id,
};
}
@Override
public String readSql() {
return "SELECT * from Int1";
}
@Override
public CursorReader createReader(final Cursor cursor) {
final int cursorIndexOfA = cursor.getColumnIndexOrThrow("a");
return () -> {
cursor.getInt(cursorIndexOfA);
};
}
};
/**
* 10 columns of integers
*/
public static TableHelper INT_10 = new TableHelper() {
@Override
public String createSql() {
return "CREATE TABLE `Int10` ("
+ "`a` INTEGER,"
+ " `b` INTEGER,"
+ " `c` INTEGER,"
+ " `d` INTEGER,"
+ " `e` INTEGER,"
+ " `f` INTEGER,"
+ " `g` INTEGER,"
+ " `h` INTEGER,"
+ " `i` INTEGER,"
+ " `j` INTEGER,"
+ " PRIMARY KEY(`a`))";
}
@Override
public String insertSql() {
return "INSERT INTO `Int10`(`a`,`b`,`c`,`d`,`e`,`f`,`g`,`h`,`i`,`j`)"
+ " VALUES (?,?,?,?,?,?,?,?,?,?)";
}
@Override
public Object[] createItem(int id) {
return new Object[] {
id,
id + 1,
id + 2,
id + 3,
id + 4,
id + 5,
id + 6,
id + 7,
id + 8,
id + 9,
};
}
@Override
public String readSql() {
return "SELECT * from Int10";
}
@Override
public CursorReader createReader(final Cursor cursor) {
final int cursorIndexOfA = cursor.getColumnIndexOrThrow("a");
final int cursorIndexOfB = cursor.getColumnIndexOrThrow("b");
final int cursorIndexOfC = cursor.getColumnIndexOrThrow("c");
final int cursorIndexOfD = cursor.getColumnIndexOrThrow("d");
final int cursorIndexOfE = cursor.getColumnIndexOrThrow("e");
final int cursorIndexOfF = cursor.getColumnIndexOrThrow("f");
final int cursorIndexOfG = cursor.getColumnIndexOrThrow("g");
final int cursorIndexOfH = cursor.getColumnIndexOrThrow("h");
final int cursorIndexOfI = cursor.getColumnIndexOrThrow("i");
final int cursorIndexOfJ = cursor.getColumnIndexOrThrow("j");
return () -> {
cursor.getInt(cursorIndexOfA);
cursor.getInt(cursorIndexOfB);
cursor.getInt(cursorIndexOfC);
cursor.getInt(cursorIndexOfD);
cursor.getInt(cursorIndexOfE);
cursor.getInt(cursorIndexOfF);
cursor.getInt(cursorIndexOfG);
cursor.getInt(cursorIndexOfH);
cursor.getInt(cursorIndexOfI);
cursor.getInt(cursorIndexOfJ);
};
}
};
/**
* Mock up of 'user' table with various ints/strings
*/
public static TableHelper USER = new TableHelper() {
@Override
public String createSql() {
return "CREATE TABLE `User` ("
+ "`mId` INTEGER,"
+ " `mName` TEXT,"
+ " `mLastName` TEXT,"
+ " `mAge` INTEGER,"
+ " `mAdmin` INTEGER,"
+ " `mWeight` DOUBLE,"
+ " `mBirthday` INTEGER,"
+ " `mMoreText` TEXT,"
+ " PRIMARY KEY(`mId`))";
}
@Override
public String insertSql() {
return "INSERT INTO `User`(`mId`,`mName`,`mLastName`,`mAge`,"
+ "`mAdmin`,`mWeight`,`mBirthday`,`mMoreText`) VALUES (?,?,?,?,?,?,?,?)";
}
@Override
public Object[] createItem(int id) {
return new Object[] {
id,
UUID.randomUUID().toString(),
UUID.randomUUID().toString(),
(int) (10 + Math.random() * 50),
0,
(float)0,
new Date().getTime(),
UUID.randomUUID().toString(),
};
}
@Override
public String readSql() {
return "SELECT * from User";
}
@Override
public CursorReader createReader(final Cursor cursor) {
final int cursorIndexOfMId = cursor.getColumnIndexOrThrow("mId");
final int cursorIndexOfMName = cursor.getColumnIndexOrThrow("mName");
final int cursorIndexOfMLastName = cursor.getColumnIndexOrThrow("mLastName");
final int cursorIndexOfMAge = cursor.getColumnIndexOrThrow("mAge");
final int cursorIndexOfMAdmin = cursor.getColumnIndexOrThrow("mAdmin");
final int cursorIndexOfMWeight = cursor.getColumnIndexOrThrow("mWeight");
final int cursorIndexOfMBirthday = cursor.getColumnIndexOrThrow("mBirthday");
final int cursorIndexOfMMoreTextField = cursor.getColumnIndexOrThrow("mMoreText");
return () -> {
cursor.getInt(cursorIndexOfMId);
cursor.getString(cursorIndexOfMName);
cursor.getString(cursorIndexOfMLastName);
cursor.getInt(cursorIndexOfMAge);
cursor.getInt(cursorIndexOfMAdmin);
cursor.getFloat(cursorIndexOfMWeight);
if (!cursor.isNull(cursorIndexOfMBirthday)) {
cursor.getLong(cursorIndexOfMBirthday);
}
cursor.getString(cursorIndexOfMMoreTextField);
};
}
};
public static TableHelper[] TABLE_HELPERS = new TableHelper[] {
INT_1,
INT_10,
USER,
};
}