/*
* Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0,
* and the EPL 1.0 (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.test.db;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.TimeUnit;
import org.h2.test.TestBase;
/**
* Various small performance tests.
*/
public class TestSpeed extends TestBase {
/**
* Run just this test.
*
* @param a ignored
*/
public static void main(String... a) throws Exception {
TestBase.createCaller().init().test();
}
@Override
public void test() throws SQLException {
deleteDb("speed");
Connection conn;
conn = getConnection("speed");
Statement stat = conn.createStatement();
stat.execute("DROP TABLE IF EXISTS TEST");
stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255))");
int len = getSize(1, 10000);
for (int i = 0; i < len; i++) {
stat.execute("SELECT ID, NAME FROM TEST ORDER BY ID");
}
// drop table if exists test;
// CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));
// @LOOP 100000 INSERT INTO TEST VALUES(?, 'Hello');
// @LOOP 100000 SELECT * FROM TEST WHERE ID = ?;
// stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME
// VARCHAR(255))");
// for(int i=0; i<1000; i++) {
// stat.execute("INSERT INTO TEST VALUES("+i+", 'Hello')");
// }
// stat.execute("CREATE TABLE TEST_A(ID INT PRIMARY KEY, NAME
// VARCHAR(255))");
// stat.execute("INSERT INTO TEST_A VALUES(0, 'Hello')");
long time = System.nanoTime();
// for(int i=1; i<8000; i*=2) {
// stat.execute("INSERT INTO TEST_A SELECT ID+"+i+", NAME FROM TEST_A");
//
// // stat.execute("INSERT INTO TEST_A VALUES("+i+", 'Hello')");
// }
// for(int i=0; i<4; i++) {
// ResultSet rs = stat.executeQuery("SELECT * FROM TEST_A");
// while(rs.next()) {
// rs.getInt(1);
// rs.getString(2);
// }
// }
//
// stat.execute("CREATE TABLE TEST_B(ID INT PRIMARY KEY, NAME
// VARCHAR(255))");
// for(int i=0; i<80000; i++) {
// stat.execute("INSERT INTO TEST_B VALUES("+i+", 'Hello')");
// }
// conn.close();
// System.exit(0);
// int testParser;
// java -Xrunhprof:cpu=samples,depth=8 -cp . org.h2.test.TestAll
//
// stat.execute("CREATE TABLE TEST(ID INT)");
// stat.execute("INSERT INTO TEST VALUES(1)");
// ResultSet rs = stat.executeQuery("SELECT ID OTHER_ID FROM TEST");
// rs.next();
// rs.getString("ID");
// stat.execute("DROP TABLE TEST");
// long time = System.nanoTime();
stat.execute("DROP TABLE IF EXISTS TEST");
stat.execute("CREATE CACHED TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255))");
PreparedStatement prep = conn.prepareStatement(
"INSERT INTO TEST VALUES(?, ?)");
int max = getSize(1, 10000);
for (int i = 0; i < max; i++) {
prep.setInt(1, i);
prep.setString(2,
"abchelloasdfaldsjflajdflajdslfoajlskdfkjasdf" +
"abcfasdfadsfadfsalksdjflasjflajsdlkfjaksdjflkskd" + i);
prep.execute();
}
// System.exit(0);
// System.out.println("END "+Value.cacheHit+" "+Value.cacheMiss);
time = System.nanoTime() - time;
trace(TimeUnit.NANOSECONDS.toMillis(time) + " insert");
// if(true) return;
// if(config.log) {
// System.gc();
// System.gc();
// log("mem="+(Runtime.getRuntime().totalMemory() -
// Runtime.getRuntime().freeMemory())/1024);
// }
// conn.close();
time = System.nanoTime();
prep = conn.prepareStatement("UPDATE TEST " +
"SET NAME='Another data row which is long' WHERE ID=?");
for (int i = 0; i < max; i++) {
prep.setInt(1, i);
prep.execute();
// System.out.println("updated "+i);
// stat.execute("UPDATE TEST SET NAME='Another data row which is
// long' WHERE ID="+i);
// ResultSet rs = stat.executeQuery("SELECT * FROM TEST WHERE
// ID="+i);
// if(!rs.next()) {
// throw new AssertionError("hey! i="+i);
// }
// if(rs.next()) {
// throw new AssertionError("hey! i="+i);
// }
}
// for(int i=0; i<max; i++) {
// stat.execute("DELETE FROM TEST WHERE ID="+i);
// ResultSet rs = stat.executeQuery("SELECT * FROM TEST WHERE ID="+i);
// if(rs.next()) {
// throw new AssertionError("hey!");
// }
// }
time = System.nanoTime() - time;
trace(TimeUnit.NANOSECONDS.toMillis(time) + " update");
time = System.nanoTime();
conn.close();
time = System.nanoTime() - time;
trace(TimeUnit.NANOSECONDS.toMillis(time) + " close");
deleteDb("speed");
}
}