Changeset: addb345e4fa8 for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=addb345e4fa8 Modified Files: tests/JDBC_API_Tester.java Branch: default Log Message:
Changed test 'getIndexInfo(null, sys, table_types, false, false)' to resolve difference (9 instead of 10) reported on testweb for default branch. Also implemented some more tests. diffs (truncated from 417 to 300 lines): diff --git a/tests/JDBC_API_Tester.java b/tests/JDBC_API_Tester.java --- a/tests/JDBC_API_Tester.java +++ b/tests/JDBC_API_Tester.java @@ -8,6 +8,8 @@ import java.sql.*; import java.util.*; +import java.io.StringReader; +import java.nio.charset.Charset; /** * class to test JDBC Driver API methods and behavior of MonetDB server. @@ -49,8 +51,8 @@ final public class JDBC_API_Tester { jt.Test_PSgeneratedkeys(); jt.Test_PSgetObject(); jt.Test_PSlargebatchval(); - jt.Test_PSlargeresponse(); - jt.Test_PSmanycon(); + jt.Test_PSlargeresponse(con_URL); + jt.Test_PSmanycon(con_URL); jt.Test_PSmetadata(); jt.Test_PSsomeamount(); jt.Test_PSsqldata(); @@ -643,74 +645,74 @@ final public class JDBC_API_Tester { // inspect the catalog by use of dbmd functions compareResultSet(dbmd.getCatalogs(), "getCatalogs()", "Resultset with 1 columns\n" + - "TABLE_CAT \n"); + "TABLE_CAT\n"); compareResultSet(dbmd.getSchemas(null, "sys"), "getSchemas(null, sys)", "Resultset with 2 columns\n" + - "TABLE_SCHEM TABLE_CATALOG \n" + - "sys null \n"); + "TABLE_SCHEM TABLE_CATALOG\n" + + "sys null\n"); compareResultSet(dbmd.getTables(null, "tmp", null, null), "getTables(null, tmp, null, null)", // schema tmp has 6 tables "Resultset with 10 columns\n" + - "TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS TYPE_CAT TYPE_SCHEM TYPE_NAME SELF_REFERENCING_COL_NAME REF_GENERATION \n" + - "null tmp _columns SYSTEM TABLE null null null null null null \n" + - "null tmp _tables SYSTEM TABLE null null null null null null \n" + - "null tmp idxs SYSTEM TABLE null null null null null null \n" + - "null tmp keys SYSTEM TABLE null null null null null null \n" + - "null tmp objects SYSTEM TABLE null null null null null null \n" + - "null tmp triggers SYSTEM TABLE null null null null null null \n"); + "TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS TYPE_CAT TYPE_SCHEM TYPE_NAME SELF_REFERENCING_COL_NAME REF_GENERATION\n" + + "null tmp _columns SYSTEM TABLE null null null null null null\n" + + "null tmp _tables SYSTEM TABLE null null null null null null\n" + + "null tmp idxs SYSTEM TABLE null null null null null null\n" + + "null tmp keys SYSTEM TABLE null null null null null null\n" + + "null tmp objects SYSTEM TABLE null null null null null null\n" + + "null tmp triggers SYSTEM TABLE null null null null null null\n"); compareResultSet(dbmd.getTables(null, "sys", "schemas", null), "getTables(null, sys, schemas, null)", "Resultset with 10 columns\n" + - "TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS TYPE_CAT TYPE_SCHEM TYPE_NAME SELF_REFERENCING_COL_NAME REF_GENERATION \n" + - "null sys schemas SYSTEM TABLE null null null null null null \n"); + "TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS TYPE_CAT TYPE_SCHEM TYPE_NAME SELF_REFERENCING_COL_NAME REF_GENERATION\n" + + "null sys schemas SYSTEM TABLE null null null null null null\n"); compareResultSet(dbmd.getColumns(null, "sys", "table_types", null), "getColumns(null, sys, table_types, null)", "Resultset with 24 columns\n" + - "TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS NUM_PREC_RADIX NULLABLE REMARKS COLUMN_DEF SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION IS_NULLABLE SCOPE_CATALOG SCOPE_SCHEMA SCOPE_TABLE SOURCE_DATA_TYPE IS_AUTOINCREMENT IS_GENERATEDCOLUMN \n" + - "null sys table_types table_type_id 5 smallint 16 0 0 2 0 null null 0 0 null 1 NO null null null null NO NO \n" + - "null sys table_types table_type_name 12 varchar 25 0 0 0 0 null null 0 0 25 2 NO null null null null NO NO \n"); + "TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS NUM_PREC_RADIX NULLABLE REMARKS COLUMN_DEF SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION IS_NULLABLE SCOPE_CATALOG SCOPE_SCHEMA SCOPE_TABLE SOURCE_DATA_TYPE IS_AUTOINCREMENT IS_GENERATEDCOLUMN\n" + + "null sys table_types table_type_id 5 smallint 16 0 0 2 0 null null 0 0 null 1 NO null null null null NO NO\n" + + "null sys table_types table_type_name 12 varchar 25 0 0 0 0 null null 0 0 25 2 NO null null null null NO NO\n"); compareResultSet(dbmd.getPrimaryKeys(null, "sys", "table_types"), "getPrimaryKeys(null, sys, table_types)", "Resultset with 6 columns\n" + - "TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME KEY_SEQ PK_NAME \n" + - "null sys table_types table_type_id 1 table_types_table_type_id_pkey \n"); + "TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME KEY_SEQ PK_NAME\n" + + "null sys table_types table_type_id 1 table_types_table_type_id_pkey\n"); compareResultSet(dbmd.getCrossReference(null, "sys", "tables", null, "sys", "table_types"), "getCrossReference(null, sys, tables, null, sys, table_types)", "Resultset with 14 columns\n" + - "PKTABLE_CAT PKTABLE_SCHEM PKTABLE_NAME PKCOLUMN_NAME FKTABLE_CAT FKTABLE_SCHEM FKTABLE_NAME FKCOLUMN_NAME KEY_SEQ UPDATE_RULE DELETE_RULE FK_NAME PK_NAME DEFERRABILITY \n"); + "PKTABLE_CAT PKTABLE_SCHEM PKTABLE_NAME PKCOLUMN_NAME FKTABLE_CAT FKTABLE_SCHEM FKTABLE_NAME FKCOLUMN_NAME KEY_SEQ UPDATE_RULE DELETE_RULE FK_NAME PK_NAME DEFERRABILITY\n"); compareResultSet(dbmd.getImportedKeys(null, "sys", "table_types"), "getImportedKeys(null, sys, table_types)", "Resultset with 14 columns\n" + - "PKTABLE_CAT PKTABLE_SCHEM PKTABLE_NAME PKCOLUMN_NAME FKTABLE_CAT FKTABLE_SCHEM FKTABLE_NAME FKCOLUMN_NAME KEY_SEQ UPDATE_RULE DELETE_RULE FK_NAME PK_NAME DEFERRABILITY \n"); + "PKTABLE_CAT PKTABLE_SCHEM PKTABLE_NAME PKCOLUMN_NAME FKTABLE_CAT FKTABLE_SCHEM FKTABLE_NAME FKCOLUMN_NAME KEY_SEQ UPDATE_RULE DELETE_RULE FK_NAME PK_NAME DEFERRABILITY\n"); - compareResultSet(dbmd.getIndexInfo(null, "sys", "table_types", false, false), "getIndexInfo(null, sys, table_types, false, false)", + compareResultSet(dbmd.getIndexInfo(null, "sys", "key_types", false, false), "getIndexInfo(null, sys, key_types, false, false)", "Resultset with 13 columns\n" + - "TABLE_CAT TABLE_SCHEM TABLE_NAME NON_UNIQUE INDEX_QUALIFIER INDEX_NAME TYPE ORDINAL_POSITION COLUMN_NAME ASC_OR_DESC CARDINALITY PAGES FILTER_CONDITION \n" + - "null sys table_types false null table_types_table_type_id_pkey 2 1 table_type_id null 10 0 null \n" + - "null sys table_types false null table_types_table_type_name_unique 2 1 table_type_name null 10 0 null \n"); + "TABLE_CAT TABLE_SCHEM TABLE_NAME NON_UNIQUE INDEX_QUALIFIER INDEX_NAME TYPE ORDINAL_POSITION COLUMN_NAME ASC_OR_DESC CARDINALITY PAGES FILTER_CONDITION\n" + + "null sys key_types false null key_types_key_type_id_pkey 2 1 key_type_id null 3 0 null\n" + + "null sys key_types false null key_types_key_type_name_unique 2 1 key_type_name null 3 0 null\n"); compareResultSet(dbmd.getTablePrivileges(null, "sys", "table_types"), "getTablePrivileges(null, sys, table_types)", "Resultset with 7 columns\n" + - "TABLE_CAT TABLE_SCHEM TABLE_NAME GRANTOR GRANTEE PRIVILEGE IS_GRANTABLE \n" + - "null sys table_types monetdb public SELECT NO \n"); + "TABLE_CAT TABLE_SCHEM TABLE_NAME GRANTOR GRANTEE PRIVILEGE IS_GRANTABLE\n" + + "null sys table_types monetdb public SELECT NO\n"); compareResultSet(dbmd.getColumnPrivileges(null, "sys", "table_types", null), "getColumnPrivileges(null, sys, table_types, null)", "Resultset with 8 columns\n" + - "TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME GRANTOR GRANTEE PRIVILEGE IS_GRANTABLE \n"); + "TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME GRANTOR GRANTEE PRIVILEGE IS_GRANTABLE\n"); compareResultSet(dbmd.getUDTs(null, "sys", null, null), "getUDTs(null, sys, null, null)", "Resultset with 7 columns\n" + - "TYPE_CAT TYPE_SCHEM TYPE_NAME CLASS_NAME DATA_TYPE REMARKS BASE_TYPE \n" + - "null sys inet org.monetdb.jdbc.types.INET 2000 inet null \n" + - "null sys json java.lang.String 2000 json null \n" + - "null sys url org.monetdb.jdbc.types.URL 2000 url null \n" + - "null sys uuid java.lang.String 2000 uuid null \n"); + "TYPE_CAT TYPE_SCHEM TYPE_NAME CLASS_NAME DATA_TYPE REMARKS BASE_TYPE\n" + + "null sys inet org.monetdb.jdbc.types.INET 2000 inet null\n" + + "null sys json java.lang.String 2000 json null\n" + + "null sys url org.monetdb.jdbc.types.URL 2000 url null\n" + + "null sys uuid java.lang.String 2000 uuid null\n"); int[] UDTtypes = { Types.STRUCT, Types.DISTINCT }; compareResultSet(dbmd.getUDTs(null, "sys", null, UDTtypes), "getUDTs(null, sys, null, UDTtypes", "Resultset with 7 columns\n" + - "TYPE_CAT TYPE_SCHEM TYPE_NAME CLASS_NAME DATA_TYPE REMARKS BASE_TYPE \n"); + "TYPE_CAT TYPE_SCHEM TYPE_NAME CLASS_NAME DATA_TYPE REMARKS BASE_TYPE\n"); sb.setLength(0); // clear the output log buffer } catch (SQLException e) { @@ -727,12 +729,16 @@ final public class JDBC_API_Tester { int columnCount = rsmd.getColumnCount(); sb.append("Resultset with ").append(columnCount).append(" columns").append("\n"); for (int col = 1; col <= columnCount; col++) { - sb.append(rsmd.getColumnName(col) + "\t"); + if (col > 1) + sb.append("\t"); + sb.append(rsmd.getColumnName(col)); } sb.append("\n"); while (rs.next()) { for (int col = 1; col <= columnCount; col++) { - sb.append(rs.getString(col) + "\t"); + if (col > 1) + sb.append("\t"); + sb.append(rs.getString(col)); } sb.append("\n"); } @@ -753,6 +759,7 @@ final public class JDBC_API_Tester { sb.append("Statement fetch size before set: " + stmt.getFetchSize()).append("\n"); sb.append("ResultSet fetch size before set: " + rs.getFetchSize()).append("\n"); + stmt.setFetchSize(40); rs.setFetchSize(16384); sb.append("Statement fetch size after set: " + stmt.getFetchSize()).append("\n"); @@ -767,7 +774,7 @@ final public class JDBC_API_Tester { compareExpectedOutput("Test_FetchSize", "Statement fetch size before set: 0\n" + "ResultSet fetch size before set: 250\n" + - "Statement fetch size after set: 0\n" + + "Statement fetch size after set: 40\n" + "ResultSet fetch size after set: 16384\n"); } @@ -924,7 +931,10 @@ final public class JDBC_API_Tester { closeStmtResSet(pstmt, rs); try { + sb.append("4. Rollback changes..."); con.rollback(); + sb.append(" passed").append("\n"); + // restore default setting con.setAutoCommit(true); } catch (SQLException e) { @@ -941,52 +951,205 @@ final public class JDBC_API_Tester { " Retrieved row data: ti=1 si=1 i=1 bi=1\n" + " Retrieved row data: ti=127 si=12700 i=1270000 bi=127000000\n" + "3b. closing ResultSet... passed\n" + - "3c. closing PreparedStatement... passed\n"); + "3c. closing PreparedStatement... passed\n" + + "4. Rollback changes... passed\n"); } private void Test_PSlargebatchval() { sb.setLength(0); // clear the output log buffer + byte[] errorBytes = new byte[] { (byte) 0xe2, (byte) 0x80, (byte) 0xa7 }; + String errorStr = new String(errorBytes, Charset.forName("UTF-8")); + StringBuilder repeatedErrorStr = new StringBuilder(); + for (int i = 0; i < 8170;i++) { + repeatedErrorStr.append(errorStr); + } + String largeStr = repeatedErrorStr.toString(); + Statement stmt = null; + PreparedStatement pstmt = null; + ResultSet rs = null; try { + // >> true: auto commit should be on + sb.append("0. true\t" + con.getAutoCommit()).append("\n"); + stmt = con.createStatement(); + sb.append("1. creating test table..."); + stmt.execute("CREATE TABLE Test_PSlargebatchval (c INT, a CLOB, b DOUBLE)"); + sb.append("success").append("\n"); + + sb.append("2. prepare insert..."); + pstmt = con.prepareStatement("INSERT INTO Test_PSlargebatchval VALUES (?,?,?)"); + sb.append("success").append("\n"); + + pstmt.setLong(1, 1L); + pstmt.setString(2, largeStr); + pstmt.setDouble(3, 1.0); + pstmt.addBatch(); + pstmt.executeBatch(); + sb.append("3. inserted 1 large string").append("\n"); + + /* test issue reported at https://www.monetdb.org/bugzilla/show_bug.cgi?id=3470 */ + pstmt.setLong(1, -2L); + pstmt.setClob(2, new StringReader(largeStr)); + pstmt.setDouble(3, -2.0); + pstmt.addBatch(); + pstmt.executeBatch(); + sb.append("4. inserted 1 large clob via StringReader() object").append("\n"); + + Clob myClob = con.createClob(); + myClob.setString(1L, largeStr); + + pstmt.setLong(1, 123456789L); + pstmt.setClob(2, myClob); + pstmt.setDouble(3, 12345678901.98765); + pstmt.addBatch(); + pstmt.executeBatch(); + sb.append("5. inserted 1 large clob via createClob() object").append("\n"); + + pstmt.close(); + + sb.append("6. select count(*)... "); + rs = stmt.executeQuery("SELECT COUNT(*) FROM Test_PSlargebatchval"); + if (rs.next()) + sb.append(rs.getInt(1) + " rows inserted.").append("\n"); + rs.close(); + + sb.append("7. drop table..."); + stmt.execute("DROP TABLE Test_PSlargebatchval"); + sb.append("success").append("\n"); + stmt.close(); + } catch (SQLException e) { + sb.append("FAILED: ").append(e.getMessage()).append("\n"); + while ((e = e.getNextException()) != null) + sb.append("FAILED: ").append(e.getMessage()).append("\n"); + } + closeStmtResSet(stmt, rs); + closeStmtResSet(pstmt, null); + + compareExpectedOutput("Test_PSlargebatchval", + "0. true true\n" + + "1. creating test table...success\n" + + "2. prepare insert...success\n" + + "3. inserted 1 large string\n" + + "4. inserted 1 large clob via StringReader() object\n" + + "5. inserted 1 large clob via createClob() object\n" + + "6. select count(*)... 3 rows inserted.\n" + + "7. drop table...success\n"); + } + + private void Test_PSlargeresponse(String conURL) { + sb.setLength(0); // clear the output log buffer + + PreparedStatement pstmt = null; + try { + sb.append("1. DatabaseMetadata environment retrieval... "); + + // retrieve this to simulate a bug report + DatabaseMetaData dbmd = con.getMetaData(); + if (conURL.startsWith(dbmd.getURL())) + sb.append("oke"); + else + sb.append("not oke " + dbmd.getURL()); + sb.append("\n"); + + pstmt = con.prepareStatement("select * from columns"); + sb.append("2. empty call..."); + // should succeed (no arguments given) + pstmt.execute(); + sb.append(" passed").append("\n"); + } catch (SQLException e) { + sb.append("FAILED: ").append(e.getMessage()).append("\n"); + } + closeStmtResSet(pstmt, null); + + compareExpectedOutput("Test_PSlargeresponse", + "1. DatabaseMetadata environment retrieval... oke\n" + + "2. empty call... passed\n"); + } + + private void Test_PSmanycon(String arg0) { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list