Changeset: cdf7f1661a07 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/cdf7f1661a07
Modified Files:
src/test/java/JDBC_API_Tester.java
src/test/java/org/monetdb/jdbc/ApiTests.java
Branch: default
Log Message:
Convert Test_PSmetadata() -> ApiTests#testPreparedStatementMetadata()
diffs (truncated from 422 to 300 lines):
diff --git a/src/test/java/JDBC_API_Tester.java
b/src/test/java/JDBC_API_Tester.java
--- a/src/test/java/JDBC_API_Tester.java
+++ b/src/test/java/JDBC_API_Tester.java
@@ -1053,223 +1053,6 @@ public final class JDBC_API_Tester exten
"2. empty call... passed\n");
}
- @Test // CHANGED supportsNestedTypes
- public void Test_PSmetadata() {
- sb.setLength(0); // clear the output log buffer
-
- Statement stmt = null;
- try {
- con.setAutoCommit(false);
- // >> false: auto commit was just switched off
- sb.append("0.
false\t").append(con.getAutoCommit()).append("\n");
-
- stmt = con.createStatement();
- int updates = 0;
- updates = stmt.executeUpdate("CREATE TABLE
table_Test_PSmetadata ( myint int, mydouble double, mybool boolean, myvarchar
varchar(15), myclob clob )");
- if (updates != 0)
- sb.append("1. Expected 0 got
").append(updates).append(" instead\n");
-
- // all NULLs
- updates = stmt.executeUpdate("INSERT INTO
table_Test_PSmetadata VALUES (NULL, NULL, NULL, NULL,
NULL)");
- if (updates != 1)
- sb.append("2a. Expected 1 got
").append(updates).append(" instead\n");
-
- // all filled in
- updates = stmt.executeUpdate("INSERT INTO
table_Test_PSmetadata VALUES (2 , 3.0, true, 'A
string', 'bla bla bla')");
- if (updates != 1)
- sb.append("2b. Expected 1 got
").append(updates).append(" instead\n");
- } catch (SQLException e) {
- sb.append("FAILED:
").append(e.getMessage()).append("\n");
- }
- closeStmtResSet(stmt, null);
-
- PreparedStatement pstmt = null;
- try {
- pstmt = con.prepareStatement("SELECT CASE WHEN myint IS
NULL THEN 0 ELSE 1 END AS intnull, * FROM table_Test_PSmetadata WHERE myint =
?");
- sb.append(pstmt.toString()); // test showing
prepared statement
-
- // testing and showing result set meta data
- ResultSetMetaData rsmd = pstmt.getMetaData();
- sb.append("rsmd.
").append(rsmd.getColumnCount()).append(" columns:\n");
- for (int col = 1; col <= rsmd.getColumnCount(); col++) {
- sb.append("RCol ").append(col).append("\n");
- sb.append(" classname
").append(rsmd.getColumnClassName(col)).append("\n");
- sb.append(" displaysize
").append(rsmd.getColumnDisplaySize(col)).append("\n");
- sb.append(" label
").append(rsmd.getColumnLabel(col)).append("\n");
- sb.append(" name
").append(rsmd.getColumnName(col)).append("\n");
- sb.append(" type
").append(rsmd.getColumnType(col)).append("\n");
- sb.append(" typename
").append(rsmd.getColumnTypeName(col)).append("\n");
- sb.append(" precision
").append(rsmd.getPrecision(col)).append("\n");
- sb.append(" scale
").append(rsmd.getScale(col)).append("\n");
- sb.append(" catalogname
").append(rsmd.getCatalogName(col)).append("\n");
- sb.append(" schemaname
").append(rsmd.getSchemaName(col)).append("\n");
- sb.append(" tablename
").append(rsmd.getTableName(col)).append("\n");
- sb.append(" autoincrement
").append(rsmd.isAutoIncrement(col)).append("\n");
- sb.append(" casesensitive
").append(rsmd.isCaseSensitive(col)).append("\n");
- sb.append(" currency
").append(rsmd.isCurrency(col)).append("\n");
- sb.append(" defwritable
").append(rsmd.isDefinitelyWritable(col)).append("\n");
- sb.append(" nullable
").append(rsmd.isNullable(col)).append("\n");
- sb.append(" readonly
").append(rsmd.isReadOnly(col)).append("\n");
- sb.append(" searchable
").append(rsmd.isSearchable(col)).append("\n");
- sb.append(" signed
").append(rsmd.isSigned(col)).append("\n");
- sb.append(" writable
").append(rsmd.isWritable(col)).append("\n");
- }
-
- showParams(pstmt);
-
- con.rollback();
- con.setAutoCommit(true);
- // >> true: auto commit was just switched on
- sb.append("0.
true\t").append(con.getAutoCommit()).append("\n");
- } catch (SQLException e) {
- sb.append("FAILED:
").append(e.getMessage()).append("\n");
- }
- closeStmtResSet(pstmt, null);
-
- compareExpectedOutput("Test_PSmetadata",
- "0. false\tfalse\n" +
- "Prepared SQL: SELECT CASE WHEN myint IS NULL THEN 0
ELSE 1 END AS intnull, * FROM table_Test_PSmetadata WHERE myint = ?\n" +
- " parameter 1 int, set value: <null>\n" +
- "rsmd. 6 columns:\n" +
- "RCol 1\n" +
- " classname java.lang.Short\n" +
- " displaysize 3\n" +
- " label intnull\n" +
- " name intnull\n" +
- " type -6\n" +
- " typename tinyint\n" +
- " precision 3\n" +
- " scale 0\n" +
- " catalogname null\n" +
- " schemaname \n" +
- " tablename \n" +
- " autoincrement false\n" +
- " casesensitive false\n" +
- " currency false\n" +
- " defwritable false\n" +
- " nullable 2\n" +
- " readonly true\n" +
- " searchable true\n" +
- " signed true\n" +
- " writable false\n" +
- "RCol 2\n" +
- " classname java.lang.Integer\n" +
- " displaysize 10\n" +
- " label myint\n" +
- " name myint\n" +
- " type 4\n" +
- " typename int\n" +
- " precision 10\n" +
- " scale 0\n" +
- " catalogname null\n" +
- " schemaname " + (supportsNestedTypes ? "sys\n" :
"\n") +
- " tablename table_test_psmetadata\n" +
- " autoincrement false\n" +
- " casesensitive false\n" +
- " currency false\n" +
- " defwritable false\n" +
- " nullable " + (supportsNestedTypes ? "1\n" :
"2\n") +
- " readonly true\n" +
- " searchable true\n" +
- " signed true\n" +
- " writable false\n" +
- "RCol 3\n" +
- " classname java.lang.Double\n" +
- " displaysize 15\n" +
- " label mydouble\n" +
- " name mydouble\n" +
- " type 8\n" +
- " typename double\n" +
- " precision 15\n" +
- " scale 0\n" +
- " catalogname null\n" +
- " schemaname " + (supportsNestedTypes ? "sys\n" :
"\n") +
- " tablename table_test_psmetadata\n" +
- " autoincrement false\n" +
- " casesensitive false\n" +
- " currency false\n" +
- " defwritable false\n" +
- " nullable " + (supportsNestedTypes ? "1\n" :
"2\n") +
- " readonly true\n" +
- " searchable true\n" +
- " signed true\n" +
- " writable false\n" +
- "RCol 4\n" +
- " classname java.lang.Boolean\n" +
- " displaysize 5\n" +
- " label mybool\n" +
- " name mybool\n" +
- " type 16\n" +
- " typename boolean\n" +
- " precision 1\n" +
- " scale 0\n" +
- " catalogname null\n" +
- " schemaname " + (supportsNestedTypes ? "sys\n" :
"\n") +
- " tablename table_test_psmetadata\n" +
- " autoincrement false\n" +
- " casesensitive false\n" +
- " currency false\n" +
- " defwritable false\n" +
- " nullable " + (supportsNestedTypes ? "1\n" :
"2\n") +
- " readonly true\n" +
- " searchable true\n" +
- " signed false\n" +
- " writable false\n" +
- "RCol 5\n" +
- " classname java.lang.String\n" +
- " displaysize 15\n" +
- " label myvarchar\n" +
- " name myvarchar\n" +
- " type 12\n" +
- " typename varchar\n" +
- " precision 15\n" +
- " scale 0\n" +
- " catalogname null\n" +
- " schemaname " + (supportsNestedTypes ? "sys\n" :
"\n") +
- " tablename table_test_psmetadata\n" +
- " autoincrement false\n" +
- " casesensitive true\n" +
- " currency false\n" +
- " defwritable false\n" +
- " nullable " + (supportsNestedTypes ? "1\n" :
"2\n") +
- " readonly true\n" +
- " searchable true\n" +
- " signed false\n" +
- " writable false\n" +
- "RCol 6\n" +
- " classname java.lang.String\n" +
- " displaysize 0\n" +
- " label myclob\n" +
- " name myclob\n" +
- " type 12\n" +
- " typename " + (isPostDec2023 ? "varchar" :
"clob") + "\n" +
- " precision 0\n" +
- " scale 0\n" +
- " catalogname null\n" +
- " schemaname " + (supportsNestedTypes ? "sys\n" :
"\n") +
- " tablename table_test_psmetadata\n" +
- " autoincrement false\n" +
- " casesensitive true\n" +
- " currency false\n" +
- " defwritable false\n" +
- " nullable " + (supportsNestedTypes ? "1\n" :
"2\n") +
- " readonly true\n" +
- " searchable true\n" +
- " signed false\n" +
- " writable false\n" +
- "pmd. 1 parameters:\n" +
- "Param 1\n" +
- " nullable 2 (UNKNOWN)\n" +
- " signed true\n" +
- " precision 10\n" +
- " scale 0\n" +
- " type 4\n" +
- " typename int\n" +
- " classname java.lang.Integer\n" +
- " mode 1 (IN)\n" +
- "0. true\ttrue\n");
- }
-
@Test
public void Test_PSsetBytes() {
sb.setLength(0); // clear the output log buffer
diff --git a/src/test/java/org/monetdb/jdbc/ApiTests.java
b/src/test/java/org/monetdb/jdbc/ApiTests.java
--- a/src/test/java/org/monetdb/jdbc/ApiTests.java
+++ b/src/test/java/org/monetdb/jdbc/ApiTests.java
@@ -836,4 +836,191 @@ public class ApiTests {
}
}
+ @Test
+ public void testPreparedStatementMetadata() throws SQLException {
+ // Results depend on MonetDB version
+ boolean supportsNestedTypes = false;
+ String checkNested =
+ "SELECT c.name\n" +
+ "FROM sys.columns c, sys.tables t, sys.schemas
s\n" +
+ "WHERE c.name = 'multiset' AND t.name =
'_columns' AND s.name = 'sys'\n" +
+ "AND c.table_id = t.id AND t.schema_id =
s.id\n";
+ try (ResultSet rs = stmt.executeQuery(checkNested)) {
+ supportsNestedTypes = rs.next();
+ }
+
+ // note the uppercase letters in the table name.
+ // on retrieval they will be all lowercase.
+ stmt.executeUpdate("DROP TABLE IF EXISTS
table_Test_PSmetadata");
+ stmt.executeUpdate("CREATE TABLE table_Test_PSmetadata ( myint
int, mydouble double, mybool boolean, myvarchar varchar(15), myclob clob )");
+ stmt.executeUpdate("INSERT INTO table_Test_PSmetadata VALUES
(NULL, NULL, NULL, NULL, NULL)");
+ stmt.executeUpdate("INSERT INTO table_Test_PSmetadata VALUES (2
, 3.0, true, 'A string', 'bla bla bla')");
+
+ String query = "SELECT CASE WHEN myint IS NULL THEN 0 ELSE 1
END AS intnull, * FROM table_Test_PSmetadata WHERE myint = ?";
+ try (PreparedStatement ps = conn.prepareStatement(query)) {
+ ResultSetMetaData md = ps.getMetaData();
+
+ assertEquals("java.lang.Short",
md.getColumnClassName(1));
+ assertEquals("java.lang.Integer",
md.getColumnClassName(2));
+ assertEquals("java.lang.Double",
md.getColumnClassName(3));
+ assertEquals("java.lang.Boolean",
md.getColumnClassName(4));
+ assertEquals("java.lang.String",
md.getColumnClassName(5));
+ assertEquals("java.lang.String",
md.getColumnClassName(6));
+
+ assertEquals(3, md.getColumnDisplaySize(1));
+ assertEquals(10, md.getColumnDisplaySize(2));
+ assertEquals(15, md.getColumnDisplaySize(3));
+ assertEquals(5, md.getColumnDisplaySize(4));
+ assertEquals(15, md.getColumnDisplaySize(5));
+ assertEquals(0, md.getColumnDisplaySize(6));
+
+ assertEquals("intnull", md.getColumnLabel(1));
+ assertEquals("myint", md.getColumnLabel(2));
+ assertEquals("mydouble", md.getColumnLabel(3));
+ assertEquals("mybool", md.getColumnLabel(4));
+ assertEquals("myvarchar", md.getColumnLabel(5));
+ assertEquals("myclob", md.getColumnLabel(6));
+
+ assertEquals("intnull", md.getColumnName(1));
+ assertEquals("myint", md.getColumnName(2));
+ assertEquals("mydouble", md.getColumnName(3));
+ assertEquals("mybool", md.getColumnName(4));
+ assertEquals("myvarchar", md.getColumnName(5));
+ assertEquals("myclob", md.getColumnName(6));
+
+ assertEquals(-6, md.getColumnType(1));
+ assertEquals(4, md.getColumnType(2));
+ assertEquals(8, md.getColumnType(3));
+ assertEquals(16, md.getColumnType(4));
+ assertEquals(12, md.getColumnType(5));
+ assertEquals(12, md.getColumnType(6));
+
+ assertEquals("tinyint", md.getColumnTypeName(1));
+ assertEquals("int", md.getColumnTypeName(2));
+ assertEquals("double", md.getColumnTypeName(3));
+ assertEquals("boolean", md.getColumnTypeName(4));
+ assertEquals("varchar", md.getColumnTypeName(5));
+ if (monetVersion.serverReturnsNewMetadata())
+ assertEquals("varchar",
md.getColumnTypeName(6));
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]