changeset 699:0ff364f569a1

Adjust Test_DBCmetadata() to exclude creating, retrieving and dropping indices on temporary tables for MonetDB servers before Jan2022 (11.45). This allows the JDBC_API_Tester test to be re-activated in the nightly tests on older branches such as Jul2021.
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 01 Dec 2022 12:37:21 +0100 (2022-12-01)
parents 6beecac8aa1b
children 940e266eeccd
files tests/JDBC_API_Tester.java
diffstat 1 files changed, 26 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/tests/JDBC_API_Tester.java
+++ b/tests/JDBC_API_Tester.java
@@ -1006,6 +1006,10 @@ final public class JDBC_API_Tester {
 			sb.append("Failed to createStatement: ").append(e.getMessage()).append("\n");
 		}
 
+		/* servers before Jan2022 (11.45) have a problem (server crash and db corruption)
+		   with indexes created on temp tables, so conditionally execute those commands and tests */
+		boolean testCreateDropIndexOnTmpTables = !(dbmsMajorVersion == 11 && dbmsMinorVersion <= 43);
+
 		String action = "Create";
 		handleExecuteDDL(stmt, action, "schema", "jdbctst", "CREATE SCHEMA jdbctst; SET SCHEMA jdbctst;");
 
@@ -1046,16 +1050,18 @@ final public class JDBC_API_Tester {
 		objtype = "index";
 		handleExecuteDDL(stmt, action, objtype, "pk_uc_i",
 			"CREATE INDEX pk_uc_i ON jdbctst.pk_uc (id1, name1);");
-		handleExecuteDDL(stmt, action, objtype, "tmp_pk_uc_i",
-			"CREATE INDEX tmp_pk_uc_i ON tmp.tmp_pk_uc (id1, name1);");
-		handleExecuteDDL(stmt, action, objtype, "glbl_pk_uc_i",
-			"CREATE INDEX glbl_pk_uc_i ON tmp.glbl_pk_uc (id1, name1);");
 		handleExecuteDDL(stmt, action, objtype, "nopk_twoucs_i",
 			"CREATE INDEX nopk_twoucs_i ON jdbctst.nopk_twoucs (id2, name2);");
-		handleExecuteDDL(stmt, action, objtype, "tmp_nopk_twoucs_i",
-			"CREATE INDEX tmp_nopk_twoucs_i ON tmp.tmp_nopk_twoucs (id2, name2);");
-		handleExecuteDDL(stmt, action, objtype, "glbl_nopk_twoucs_i",
-			"CREATE INDEX glbl_nopk_twoucs_i ON tmp.glbl_nopk_twoucs (id2, name2);");
+		if (testCreateDropIndexOnTmpTables) {
+			handleExecuteDDL(stmt, action, objtype, "tmp_pk_uc_i",
+				"CREATE INDEX tmp_pk_uc_i ON tmp.tmp_pk_uc (id1, name1);");
+			handleExecuteDDL(stmt, action, objtype, "glbl_pk_uc_i",
+				"CREATE INDEX glbl_pk_uc_i ON tmp.glbl_pk_uc (id1, name1);");
+			handleExecuteDDL(stmt, action, objtype, "tmp_nopk_twoucs_i",
+				"CREATE INDEX tmp_nopk_twoucs_i ON tmp.tmp_nopk_twoucs (id2, name2);");
+			handleExecuteDDL(stmt, action, objtype, "glbl_nopk_twoucs_i",
+				"CREATE INDEX glbl_nopk_twoucs_i ON tmp.glbl_nopk_twoucs (id2, name2);");
+		}
 
 		// grant privileges to populate catalog. Used for testing getTablePrivileges() and getColumnPrivileges()
 		action = "grant";
@@ -1203,6 +1209,7 @@ final public class JDBC_API_Tester {
 			"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");
 
+			if (testCreateDropIndexOnTmpTables) {
 			compareResultSet(dbmd.getIndexInfo(null, "tmp", "tmp_pk_uc", false, false), "getIndexInfo(null, tmp, tmp_pk_uc, 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" +
@@ -1211,7 +1218,9 @@ final public class JDBC_API_Tester {
 			"null	tmp	tmp_pk_uc	false	null	tmp_pk_uc_name1_unique	2	1	name1	null	0	0	null\n" +
 			"null	tmp	tmp_pk_uc	true	null	tmp_pk_uc_i	2	1	id1	null	0	0	null\n" +
 			"null	tmp	tmp_pk_uc	true	null	tmp_pk_uc_i	2	2	name1	null	0	0	null\n");
-
+			}
+
+			if (testCreateDropIndexOnTmpTables) {
 			compareResultSet(dbmd.getIndexInfo(null, "tmp", "glbl_pk_uc", false, false), "getIndexInfo(null, tmp, glbl_pk_uc, 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" +
@@ -1220,6 +1229,7 @@ final public class JDBC_API_Tester {
 			"null	tmp	glbl_pk_uc	false	null	glbl_pk_uc_name1_unique	2	1	name1	null	0	0	null\n" +
 			"null	tmp	glbl_pk_uc	true	null	glbl_pk_uc_i	2	1	id1	null	0	0	null\n" +
 			"null	tmp	glbl_pk_uc	true	null	glbl_pk_uc_i	2	2	name1	null	0	0	null\n");
+			}
 
 			compareResultSet(dbmd.getBestRowIdentifier(null, "sys", "function_languages", DatabaseMetaData.bestRowTransaction, true),
 						"getBestRowIdentifier(null, sys, function_languages, DatabaseMetaData.bestRowTransaction, true)",
@@ -1345,11 +1355,13 @@ final public class JDBC_API_Tester {
 		action = "Drop";
 		objtype = "index";
 		handleExecuteDDL(stmt, action, objtype, "jdbctst.pk_uc_i", "DROP INDEX jdbctst.pk_uc_i;");
-		handleExecuteDDL(stmt, action, objtype, "tmp.tmp_pk_uc_i;", "DROP INDEX tmp.tmp_pk_uc_i;");
-		handleExecuteDDL(stmt, action, objtype, "tmp.glbl_pk_uc_i", "DROP INDEX tmp.glbl_pk_uc_i;");
 		handleExecuteDDL(stmt, action, objtype, "jdbctst.nopk_twoucs_i", "DROP INDEX jdbctst.nopk_twoucs_i;");
-		handleExecuteDDL(stmt, action, objtype, "tmp.tmp_nopk_twoucs_i", "DROP INDEX tmp.tmp_nopk_twoucs_i;");
-		handleExecuteDDL(stmt, action, objtype, "tmp.glbl_nopk_twoucs_i", "DROP INDEX tmp.glbl_nopk_twoucs_i;");
+		if (testCreateDropIndexOnTmpTables) {
+			handleExecuteDDL(stmt, action, objtype, "tmp.tmp_pk_uc_i;", "DROP INDEX tmp.tmp_pk_uc_i;");
+			handleExecuteDDL(stmt, action, objtype, "tmp.glbl_pk_uc_i", "DROP INDEX tmp.glbl_pk_uc_i;");
+			handleExecuteDDL(stmt, action, objtype, "tmp.tmp_nopk_twoucs_i", "DROP INDEX tmp.tmp_nopk_twoucs_i;");
+			handleExecuteDDL(stmt, action, objtype, "tmp.glbl_nopk_twoucs_i", "DROP INDEX tmp.glbl_nopk_twoucs_i;");
+		}
 		objtype = "table";
 		handleExecuteDDL(stmt, action, objtype, "jdbctst.pk_uc", "DROP TABLE jdbctst.pk_uc;");
 		handleExecuteDDL(stmt, action, objtype, "tmp.tmp_pk_uc", "DROP TABLE tmp.tmp_pk_uc;");
@@ -1385,7 +1397,7 @@ final public class JDBC_API_Tester {
 
 		closeStmtResSet(stmt, null);
 
-		compareExpectedOutput("Test_Dmetadata", "");
+		compareExpectedOutput("Test_DBCmetadata", "");
 	}
 
 	private void Test_EmptySql() {