use of org.h2.command.dml.Call in project h2database by h2database.
the class TestMvccMultiThreaded method testConcurrentSelectForUpdate.
private void testConcurrentSelectForUpdate() throws Exception {
deleteDb(getTestName());
Connection conn = getConnection(getTestName() + ";MULTI_THREADED=TRUE");
Statement stat = conn.createStatement();
stat.execute("create table test(id int not null primary key, updated int not null)");
stat.execute("insert into test(id, updated) values(1, 100)");
ArrayList<Task> tasks = new ArrayList<>();
int count = 3;
for (int i = 0; i < count; i++) {
Task task = new Task() {
@Override
public void call() throws Exception {
Connection conn = getConnection(getTestName());
Statement stat = conn.createStatement();
try {
while (!stop) {
try {
stat.execute("select * from test where id=1 for update");
} catch (SQLException e) {
int errorCode = e.getErrorCode();
assertTrue(e.getMessage(), errorCode == ErrorCode.DEADLOCK_1 || errorCode == ErrorCode.LOCK_TIMEOUT_1);
}
}
} finally {
conn.close();
}
}
}.execute();
tasks.add(task);
}
for (int i = 0; i < 10; i++) {
Thread.sleep(100);
ResultSet rs = stat.executeQuery("select * from test");
assertTrue(rs.next());
}
for (Task t : tasks) {
t.get();
}
conn.close();
deleteDb(getTestName());
}
use of org.h2.command.dml.Call in project h2database by h2database.
the class TestMvcc2 method testConcurrentUpdate.
private void testConcurrentUpdate() throws Exception {
Connection conn = getConnection();
final Connection conn2 = getConnection();
Statement stat = conn.createStatement();
final Statement stat2 = conn2.createStatement();
stat2.execute("set lock_timeout 1000");
stat.execute("create table test(id int primary key, name varchar)");
stat.execute("insert into test values(0, 'Hello')");
conn.setAutoCommit(false);
Task t = new Task() {
@Override
public void call() throws SQLException {
stat2.execute("update test set name = 'Hallo'");
}
};
stat.execute("update test set name = 'Hi'");
t.execute();
Thread.sleep(500);
conn.commit();
t.get();
ResultSet rs;
rs = stat.executeQuery("select name from test");
rs.next();
assertEquals("Hallo", rs.getString(1));
stat.execute("drop table test");
conn2.close();
conn.close();
}
use of org.h2.command.dml.Call in project h2database by h2database.
the class TestMvcc2 method testConcurrentInsert.
private void testConcurrentInsert() throws Exception {
Connection conn = getConnection();
final Connection conn2 = getConnection();
Statement stat = conn.createStatement();
final Statement stat2 = conn2.createStatement();
stat2.execute("set lock_timeout 1000");
stat.execute("create table test(id int primary key, name varchar)");
conn.setAutoCommit(false);
final AtomicBoolean committed = new AtomicBoolean(false);
Task t = new Task() {
@Override
public void call() throws SQLException {
try {
// System.out.println("insert2 hallo");
stat2.execute("insert into test values(0, 'Hallo')");
// System.out.println("insert2 hallo done");
} catch (SQLException e) {
// System.out.println("insert2 hallo e " + e);
if (!committed.get()) {
throw e;
}
}
}
};
// System.out.println("insert hello");
stat.execute("insert into test values(0, 'Hello')");
t.execute();
Thread.sleep(500);
// System.out.println("insert hello commit");
committed.set(true);
conn.commit();
t.get();
ResultSet rs;
rs = stat.executeQuery("select name from test");
rs.next();
assertEquals("Hello", rs.getString(1));
stat.execute("drop table test");
conn2.close();
conn.close();
}
use of org.h2.command.dml.Call in project h2database by h2database.
the class TestWeb method testWebApp.
private void testWebApp() throws Exception {
Server server = new Server();
server.setOut(new PrintStream(new ByteArrayOutputStream()));
server.runTool("-web", "-webPort", "8182", "-properties", "null", "-tcp", "-tcpPort", "9101");
try {
String url = "http://localhost:8182";
WebClient client;
String result;
client = new WebClient();
result = client.get(url);
client.readSessionId(result);
client.get(url, "login.jsp");
client.get(url, "adminSave.do");
result = client.get(url, "index.do?language=de");
result = client.get(url, "login.jsp");
assertContains(result, "Einstellung");
result = client.get(url, "index.do?language=en");
result = client.get(url, "login.jsp");
assertTrue(result.indexOf("Einstellung") < 0);
result = client.get(url, "test.do?driver=abc" + "&url=jdbc:abc:mem: " + getTestName() + "&user=sa&password=sa&name=_test_");
assertContains(result, "Exception");
result = client.get(url, "test.do?driver=org.h2.Driver" + "&url=jdbc:h2:mem:" + getTestName() + "&user=sa&password=sa&name=_test_");
assertTrue(result.indexOf("Exception") < 0);
result = client.get(url, "login.do?driver=org.h2.Driver" + "&url=jdbc:h2:mem:" + getTestName() + "&user=sa&password=sa&name=_test_");
result = client.get(url, "header.jsp");
result = client.get(url, "query.do?sql=" + "create table test(id int primary key, name varchar);" + "insert into test values(1, 'Hello')");
result = client.get(url, "query.do?sql=create sequence test_sequence");
result = client.get(url, "query.do?sql=create schema test_schema");
result = client.get(url, "query.do?sql=" + "create view test_view as select * from test");
result = client.get(url, "tables.do");
result = client.get(url, "query.jsp");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "Hello");
result = client.get(url, "query.do?sql=select * from test");
result = client.get(url, "query.do?sql=@META select * from test");
assertContains(result, "typeName");
result = client.get(url, "query.do?sql=delete from test");
result = client.get(url, "query.do?sql=@LOOP 1000 " + "insert into test values(?, 'Hello ' || ?/*RND*/)");
assertContains(result, "1000 * (Prepared)");
result = client.get(url, "query.do?sql=select * from test");
result = client.get(url, "query.do?sql=@list select * from test");
assertContains(result, "Row #");
result = client.get(url, "query.do?sql=@parameter_meta " + "select * from test where id = ?");
assertContains(result, "INTEGER");
result = client.get(url, "query.do?sql=@edit select * from test");
assertContains(result, "editResult.do");
result = client.get(url, "query.do?sql=" + StringUtils.urlEncode("select space(100001) a, 1 b"));
assertContains(result, "...");
result = client.get(url, "query.do?sql=" + StringUtils.urlEncode("call '<&>'"));
assertContains(result, "<&>");
result = client.get(url, "query.do?sql=@HISTORY");
result = client.get(url, "getHistory.do?id=4");
assertContains(result, "select * from test");
result = client.get(url, "query.do?sql=delete from test");
// op 1 (row -1: insert, otherwise update): ok,
// 2: delete 3: cancel,
result = client.get(url, "editResult.do?sql=@edit " + "select * from test&op=1&row=-1&r-1c1=1&r-1c2=Hello");
assertContains(result, "1");
assertContains(result, "Hello");
result = client.get(url, "editResult.do?sql=@edit " + "select * from test&op=1&row=1&r1c1=1&r1c2=Hallo");
assertContains(result, "1");
assertContains(result, "Hallo");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "1");
assertContains(result, "Hallo");
result = client.get(url, "editResult.do?sql=@edit " + "select * from test&op=2&row=1");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "no rows");
// autoComplete
result = client.get(url, "autoCompleteList.do?query=select 'abc");
assertContains(StringUtils.urlDecode(result), "'");
result = client.get(url, "autoCompleteList.do?query=select 'abc''");
assertContains(StringUtils.urlDecode(result), "'");
result = client.get(url, "autoCompleteList.do?query=select 'abc' ");
assertContains(StringUtils.urlDecode(result), "||");
result = client.get(url, "autoCompleteList.do?query=select 'abc' |");
assertContains(StringUtils.urlDecode(result), "|");
result = client.get(url, "autoCompleteList.do?query=select 'abc' || ");
assertContains(StringUtils.urlDecode(result), "'");
result = client.get(url, "autoCompleteList.do?query=call timestamp '2");
assertContains(result, "20");
result = client.get(url, "autoCompleteList.do?query=call time '1");
assertContains(StringUtils.urlDecode(result), "12:00:00");
result = client.get(url, "autoCompleteList.do?query=" + "call timestamp '2001-01-01 12:00:00.");
assertContains(result, "nanoseconds");
result = client.get(url, "autoCompleteList.do?query=" + "call timestamp '2001-01-01 12:00:00.00");
assertContains(result, "nanoseconds");
result = client.get(url, "autoCompleteList.do?query=" + "call $$ hello world");
assertContains(StringUtils.urlDecode(result), "$$");
result = client.get(url, "autoCompleteList.do?query=alter index ");
assertContains(StringUtils.urlDecode(result), "character");
result = client.get(url, "autoCompleteList.do?query=alter index idx");
assertContains(StringUtils.urlDecode(result), "character");
result = client.get(url, "autoCompleteList.do?query=alter index \"IDX_");
assertContains(StringUtils.urlDecode(result), "\"");
result = client.get(url, "autoCompleteList.do?query=alter index \"IDX_\"\"");
assertContains(StringUtils.urlDecode(result), "\"");
result = client.get(url, "autoCompleteList.do?query=help ");
assertContains(result, "anything");
result = client.get(url, "autoCompleteList.do?query=help select");
assertContains(result, "anything");
result = client.get(url, "autoCompleteList.do?query=call ");
assertContains(result, "0x");
result = client.get(url, "autoCompleteList.do?query=call 0");
assertContains(result, ".");
result = client.get(url, "autoCompleteList.do?query=se");
assertContains(result, "select");
assertContains(result, "set");
result = client.get(url, "tables.do");
assertContains(result, "TEST");
result = client.get(url, "autoCompleteList.do?query=" + "select * from ");
assertContains(result, "test");
result = client.get(url, "autoCompleteList.do?query=" + "select * from test t where t.");
assertContains(result, "id");
result = client.get(url, "autoCompleteList.do?query=" + "select id x from test te where t");
assertContains(result, "te");
result = client.get(url, "autoCompleteList.do?query=" + "select * from test where name = '");
assertContains(StringUtils.urlDecode(result), "'");
result = client.get(url, "autoCompleteList.do?query=" + "select * from information_schema.columns where columns.");
assertContains(result, "column_name");
result = client.get(url, "query.do?sql=delete from test");
// special commands
result = client.get(url, "query.do?sql=@autocommit_true");
assertContains(result, "Auto commit is now ON");
result = client.get(url, "query.do?sql=@autocommit_false");
assertContains(result, "Auto commit is now OFF");
result = client.get(url, "query.do?sql=@cancel");
assertContains(result, "There is currently no running statement");
result = client.get(url, "query.do?sql=@generated insert into test(id) values(test_sequence.nextval)");
assertContains(result, "<tr><th>ID</th></tr><tr><td>1</td></tr>");
result = client.get(url, "query.do?sql=@maxrows 2000");
assertContains(result, "Max rowcount is set");
result = client.get(url, "query.do?sql=@password_hash user password");
assertContains(result, "501cf5c163c184c26e62e76d25d441979f8f25dfd7a683484995b4a43a112fdf");
result = client.get(url, "query.do?sql=@sleep 1");
assertContains(result, "Ok");
result = client.get(url, "query.do?sql=@catalogs");
assertContains(result, "PUBLIC");
result = client.get(url, "query.do?sql=@column_privileges null null null TEST null");
assertContains(result, "PRIVILEGE");
result = client.get(url, "query.do?sql=@cross_references null null null TEST");
assertContains(result, "PKTABLE_NAME");
result = client.get(url, "query.do?sql=@exported_keys null null null TEST");
assertContains(result, "PKTABLE_NAME");
result = client.get(url, "query.do?sql=@imported_keys null null null TEST");
assertContains(result, "PKTABLE_NAME");
result = client.get(url, "query.do?sql=@primary_keys null null null TEST");
assertContains(result, "PK_NAME");
result = client.get(url, "query.do?sql=@procedures null null null");
assertContains(result, "PROCEDURE_NAME");
result = client.get(url, "query.do?sql=@procedure_columns");
assertContains(result, "PROCEDURE_NAME");
result = client.get(url, "query.do?sql=@schemas");
assertContains(result, "PUBLIC");
result = client.get(url, "query.do?sql=@table_privileges");
assertContains(result, "PRIVILEGE");
result = client.get(url, "query.do?sql=@table_types");
assertContains(result, "SYSTEM TABLE");
result = client.get(url, "query.do?sql=@type_info");
assertContains(result, "CLOB");
result = client.get(url, "query.do?sql=@version_columns");
assertContains(result, "PSEUDO_COLUMN");
result = client.get(url, "query.do?sql=@attributes");
assertContains(result, "Feature not supported: "attributes"");
result = client.get(url, "query.do?sql=@super_tables");
assertContains(result, "SUPERTABLE_NAME");
result = client.get(url, "query.do?sql=@super_types");
assertContains(result, "Feature not supported: "superTypes"");
result = client.get(url, "query.do?sql=@prof_start");
assertContains(result, "Ok");
result = client.get(url, "query.do?sql=@prof_stop");
assertContains(result, "Top Stack Trace(s)");
result = client.get(url, "query.do?sql=@best_row_identifier null null TEST");
assertContains(result, "SCOPE");
assertContains(result, "COLUMN_NAME");
assertContains(result, "ID");
result = client.get(url, "query.do?sql=@udts");
assertContains(result, "CLASS_NAME");
result = client.get(url, "query.do?sql=@udts null null null 1,2,3");
assertContains(result, "CLASS_NAME");
result = client.get(url, "query.do?sql=@LOOP 10 " + "@STATEMENT insert into test values(?, 'Hello')");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "8");
result = client.get(url, "query.do?sql=@EDIT select * from test");
assertContains(result, "editRow");
result = client.get(url, "query.do?sql=@AUTOCOMMIT TRUE");
result = client.get(url, "query.do?sql=@AUTOCOMMIT FALSE");
result = client.get(url, "query.do?sql=@TRANSACTION_ISOLATION");
result = client.get(url, "query.do?sql=@SET MAXROWS 1");
result = client.get(url, "query.do?sql=select * from test order by id");
result = client.get(url, "query.do?sql=@SET MAXROWS 1000");
result = client.get(url, "query.do?sql=@TABLES");
assertContains(result, "TEST");
result = client.get(url, "query.do?sql=@COLUMNS null null TEST");
assertContains(result, "ID");
result = client.get(url, "query.do?sql=@INDEX_INFO null null TEST");
assertContains(result, "PRIMARY");
result = client.get(url, "query.do?sql=@CATALOG");
assertContains(result, "PUBLIC");
result = client.get(url, "query.do?sql=@MEMORY");
assertContains(result, "Used");
result = client.get(url, "query.do?sql=@INFO");
assertContains(result, "getCatalog");
result = client.get(url, "logout.do");
result = client.get(url, "login.do?driver=org.h2.Driver&" + "url=jdbc:h2:mem:" + getTestName() + "&user=sa&password=sa&name=_test_");
result = client.get(url, "logout.do");
result = client.get(url, "settingRemove.do?name=_test_");
client.get(url, "admin.do");
} finally {
server.shutdown();
}
}
use of org.h2.command.dml.Call in project h2database by h2database.
the class TestTriggersConstraints method testViewTrigger.
private void testViewTrigger() throws SQLException {
Connection conn;
Statement stat;
conn = getConnection("trigger");
stat = conn.createStatement();
stat.execute("drop table if exists test");
stat.execute("create table test(id int)");
stat.execute("create view test_view as select * from test");
stat.execute("create trigger test_view_insert " + "instead of insert on test_view for each row call \"" + TestView.class.getName() + "\"");
stat.execute("create trigger test_view_delete " + "instead of delete on test_view for each row call \"" + TestView.class.getName() + "\"");
if (!config.memory) {
conn.close();
conn = getConnection("trigger");
stat = conn.createStatement();
}
int count = stat.executeUpdate("insert into test_view values(1)");
assertEquals(1, count);
ResultSet rs;
rs = stat.executeQuery("select * from test");
assertTrue(rs.next());
assertFalse(rs.next());
count = stat.executeUpdate("delete from test_view");
assertEquals(1, count);
stat.execute("drop view test_view");
stat.execute("drop table test");
conn.close();
}
Aggregations