deleteDb("test");
}
private void testPgClient() throws SQLException {
Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5535/test", "sa", "sa");
Statement stat = conn.createStatement();
assertThrows(SQLException.class, stat).
execute("select ***");
stat.execute("create user test password 'test'");
stat.execute("create table test(id int primary key, name varchar)");
stat.execute("create index idx_test_name on test(name, id)");
stat.execute("grant all on test to test");
conn.close();
conn = DriverManager.getConnection("jdbc:postgresql://localhost:5535/test", "test", "test");
stat = conn.createStatement();
ResultSet rs;
stat.execute("prepare test(int, int) as select ?1*?2");
rs = stat.executeQuery("execute test(3, 2)");
rs.next();
assertEquals(6, rs.getInt(1));
stat.execute("deallocate test");
PreparedStatement prep = conn.prepareStatement("insert into test values(?, ?)");
ParameterMetaData meta = prep.getParameterMetaData();
assertEquals(2, meta.getParameterCount());
prep.setInt(1, 1);
prep.setString(2, "Hello");
prep.execute();
rs = stat.executeQuery("select * from test");
rs.next();
ResultSetMetaData rsMeta = rs.getMetaData();
assertEquals(Types.INTEGER, rsMeta.getColumnType(1));
assertEquals(Types.VARCHAR, rsMeta.getColumnType(2));
prep.close();
assertEquals(1, rs.getInt(1));
assertEquals("Hello", rs.getString(2));
assertFalse(rs.next());
prep = conn.prepareStatement("select * from test where id = ? and name = ?");
prep.setInt(1, 1);
prep.setString(2, "Hello");
rs = prep.executeQuery();
rs.next();
assertEquals(1, rs.getInt(1));
assertEquals("Hello", rs.getString(2));
assertFalse(rs.next());
rs.close();
DatabaseMetaData dbMeta = conn.getMetaData();
rs = dbMeta.getTables(null, null, "TEST", null);
rs.next();
assertEquals("TEST", rs.getString("TABLE_NAME"));
assertFalse(rs.next());
rs = dbMeta.getColumns(null, null, "TEST", null);
rs.next();
assertEquals("ID", rs.getString("COLUMN_NAME"));
rs.next();
assertEquals("NAME", rs.getString("COLUMN_NAME"));
assertFalse(rs.next());
rs = dbMeta.getIndexInfo(null, null, "TEST", false, false);
// index info is currently disabled
// rs.next();
// assertEquals("TEST", rs.getString("TABLE_NAME"));
// rs.next();
// assertEquals("TEST", rs.getString("TABLE_NAME"));
assertFalse(rs.next());
rs = stat.executeQuery("select version(), pg_postmaster_start_time(), current_schema()");
rs.next();
String s = rs.getString(1);
assertTrue(s.indexOf("H2") >= 0);
assertTrue(s.indexOf("PostgreSQL") >= 0);
s = rs.getString(2);
s = rs.getString(3);
assertEquals(s, "PUBLIC");
assertFalse(rs.next());
conn.setAutoCommit(false);
stat.execute("delete from test");
conn.rollback();
stat.execute("update test set name = 'Hallo'");
conn.commit();
rs = stat.executeQuery("select * from test order by id");
rs.next();
assertEquals(1, rs.getInt(1));
assertEquals("Hallo", rs.getString(2));
assertFalse(rs.next());
rs = stat.executeQuery("select id, name, pg_get_userbyid(id) from information_schema.users order by id");
rs.next();
assertEquals(rs.getString(2), rs.getString(3));
assertFalse(rs.next());
rs.close();
rs = stat.executeQuery("select currTid2('x', 1)");
rs.next();
assertEquals(1, rs.getInt(1));
rs = stat.executeQuery("select has_table_privilege('TEST', 'READ')");
rs.next();
assertTrue(rs.getBoolean(1));
rs = stat.executeQuery("select has_database_privilege(1, 'READ')");
rs.next();
assertTrue(rs.getBoolean(1));
rs = stat.executeQuery("select pg_get_userbyid(-1)");
rs.next();
assertEquals(null, rs.getString(1));
rs = stat.executeQuery("select pg_encoding_to_char(0)");
rs.next();
assertEquals("SQL_ASCII", rs.getString(1));
rs = stat.executeQuery("select pg_encoding_to_char(6)");
rs.next();
assertEquals("UTF8", rs.getString(1));
rs = stat.executeQuery("select pg_encoding_to_char(8)");
rs.next();
assertEquals("LATIN1", rs.getString(1));
rs = stat.executeQuery("select pg_encoding_to_char(20)");
rs.next();
assertEquals("UTF8", rs.getString(1));
rs = stat.executeQuery("select pg_encoding_to_char(40)");
rs.next();
assertEquals("", rs.getString(1));
rs = stat.executeQuery("select pg_get_oid('\"WRONG\"')");
rs.next();
assertEquals(0, rs.getInt(1));
rs = stat.executeQuery("select pg_get_oid('TEST')");
rs.next();
assertTrue(rs.getInt(1) > 0);
rs = stat.executeQuery("select pg_get_indexdef(0, 0, false)");
rs.next();
assertEquals("", rs.getString(1));
rs = stat.executeQuery("select id from information_schema.indexes where index_name='IDX_TEST_NAME'");
rs.next();
int indexId = rs.getInt(1);
rs = stat.executeQuery("select pg_get_indexdef("+indexId+", 0, false)");
rs.next();
assertEquals("CREATE INDEX PUBLIC.IDX_TEST_NAME ON PUBLIC.TEST(NAME, ID)", rs.getString(1));
rs = stat.executeQuery("select pg_get_indexdef("+indexId+", null, false)");
rs.next();
assertEquals("CREATE INDEX PUBLIC.IDX_TEST_NAME ON PUBLIC.TEST(NAME, ID)", rs.getString(1));
rs = stat.executeQuery("select pg_get_indexdef("+indexId+", 1, false)");
rs.next();
assertEquals("NAME", rs.getString(1));
rs = stat.executeQuery("select pg_get_indexdef("+indexId+", 2, false)");
rs.next();
assertEquals("ID", rs.getString(1));
conn.close();
}