Changeset: 0024455cd1b8 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/0024455cd1b8
Modified Files:
src/test/java/JDBC_API_Tester.java
src/test/java/org/monetdb/jdbc/ApiTests.java
Branch: default
Log Message:
Convert Bug_Connect_as_voc_getMetaData_Failure_Bug_6388() ->
ApiTests#testBugConnectAsVOCgetMetaDataFailure6388()
diffs (260 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
@@ -2112,157 +2112,6 @@ public final class JDBC_API_Tester exten
"passed :)\n" +
"Cleanup TABLE t1504657\n");
}
-
- @Test // CHANGED
- public void Bug_Connect_as_voc_getMetaData_Failure_Bug_6388() {
- sb.setLength(0); // clear the output log buffer
-
- Statement stmt1 = null;
- // create user, schema and alter schema default schema
- try {
- sb.append("1. CREATE USER voc\n");
- stmt1 = con.createStatement();
- stmt1.executeUpdate("CREATE USER \"voc\" WITH PASSWORD
'voc' NAME 'VOC Explorer' SCHEMA \"sys\"");
- sb.append("2. CREATE SCHEMA voc\n");
- stmt1.executeUpdate("CREATE SCHEMA \"voc\"
AUTHORIZATION \"voc\"");
- sb.append("3. ALTER USER voc\n");
- stmt1.executeUpdate("ALTER USER \"voc\" SET SCHEMA
\"voc\"");
- sb.append("creation succeeded :)\n");
- } catch (SQLException e) {
- sb.append("FAILED creating user and schema voc.
").append(e.getMessage()).append("\n");
- }
-
- Connection con2 = null;
- ResultSet rs2 = null;
- try {
- sb.append("4.1. connect as user: voc\n");
- con2 =
DriverManager.getConnection(jdbcUrl.replace("=monetdb", "=voc"));
- sb.append("connected :)\n");
-
- DatabaseMetaData dbmd = con2.getMetaData();
-
- sb.append("4.2. getUserName()\n");
- sb.append("UserName =
").append(dbmd.getUserName()).append("\n");
-
- sb.append("4.3. getMaxConnections()\n");
- sb.append("MaxConnections =
").append(dbmd.getMaxConnections()).append("\n");
-
- sb.append("4.4. getDatabaseProductVersion()\n");
- String dbmsVersion = dbmd.getDatabaseProductVersion();
// should be 11.35.1 or higher
- boolean postNov2019 = ("11.35.1".compareTo(dbmsVersion)
<= 0);
- sb.append("DatabaseProductVersion =
").append((postNov2019 ? "11.35.+" : dbmsVersion)).append("\n");
-
- sb.append("4.5. getDatabaseMajorVersion()\n");
- int dbmsMajorVersion = dbmd.getDatabaseMajorVersion();
// should qq or be 35 or higher
- if (dbmsMajorVersion != 11 && dbmsMajorVersion < 56) {
- sb.append("DatabaseMajorVersion =
").append(dbmd.getDatabaseMajorVersion()).append("\n");
- }
-
- sb.append("4.6. getDatabaseMinorVersion()\n");
- int dbmsMinorVersion = dbmd.getDatabaseMinorVersion();
- if (dbmsMajorVersion == 11 && dbmsMinorVersion < 35) {
- sb.append("DatabaseMinorVersion =
").append(dbmsMinorVersion).append("\n");
- }
-
- sb.append("4.7. getTables(null, 'tmp', null, null)\n");
- rs2 = dbmd.getTables(null, "tmp", null, null);
- if (rs2 != null) {
- sb.append("List Tables in schema tmp:\n");
- while (rs2.next()) {
-
sb.append(rs2.getString(3)).append("\n");
- }
- rs2.close();
- }
- sb.append("completed listing Tables in schema tmp\n");
-
- sb.append("4.8. getTableTypes()\n");
- rs2 = dbmd.getTableTypes();
- if (rs2 != null) {
- sb.append("List TableTypes:\n");
- while (rs2.next()) {
- String tt = rs2.getString(1);
- // the STREAM TABLE type is REMOVED in
post Oct2020 releases, so filter it out for a stable output on all releases
- // the UNLOGGED TABLE type is ADDED in
post Jan2022 releases, so filter it out for a stable output on all releases
- // the LOCAL TEMPORARY VIEW type is
ADDED in 11.53.4 (Mar2025-SP1) releases, filter it out for a stable output on
all releases
- if (! ("STREAM TABLE".equals(tt) ||
"UNLOGGED TABLE".equals(tt) || "LOCAL TEMPORARY VIEW".equals(tt)) )
- sb.append(tt).append("\n");
- }
- rs2.close();
- }
- sb.append("completed listing TableTypes\n");
-
- sb.append("voc meta data Test completed
successfully\n");
- } catch (SQLException e) {
- sb.append("FAILED fetching MonetDatabaseMetaData.
").append(e.getMessage()).append("\n");
- } finally {
- try {
- con2.close();
- } catch (SQLException e) {
- sb.append("FAILED to close voc connection.
").append(e.getMessage()).append("\n");
- }
- }
-
- // cleanup: drop user, schema and alter schema default schema
in reverse order
- try {
- sb.append("Cleanup created objects\n");
- sb.append("5. ALTER USER voc\n");
- stmt1.executeUpdate("ALTER USER \"voc\" SET SCHEMA
\"sys\"");
- sb.append("6. DROP SCHEMA voc\n");
- stmt1.executeUpdate("DROP SCHEMA \"voc\"");
- sb.append("7. DROP USER voc\n");
- stmt1.executeUpdate("DROP USER \"voc\"");
- sb.append("cleanup succeeded :)\n");
- } catch (SQLException e) {
- sb.append("FAILED dropping user and schema voc.
").append(e.getMessage()).append("\n");
- }
-
- closeConx(con2);
- closeStmtResSet(stmt1, null);
-
-
compareExpectedOutput("Bug_Connect_as_voc_getMetaData_Failure_Bug_6388",
- "1. CREATE USER voc\n" +
- "2. CREATE SCHEMA voc\n" +
- "3. ALTER USER voc\n" +
- "creation succeeded :)\n" +
- "4.1. connect as user: voc\n" +
- "connected :)\n" +
- "4.2. getUserName()\n" +
- "UserName = voc\n" +
- "4.3. getMaxConnections()\n" +
- "MaxConnections = 64\n" +
- "4.4. getDatabaseProductVersion()\n" +
- "DatabaseProductVersion = 11.35.+\n" +
- "4.5. getDatabaseMajorVersion()\n" +
- "4.6. getDatabaseMinorVersion()\n" +
- "4.7. getTables(null, 'tmp', null, null)\n" +
- "List Tables in schema tmp:\n" +
- "_columns\n" +
- "_tables\n" +
- (isPostDec2025 ? "dependencies\n" : "") +
- "idxs\n" +
- "keys\n" +
- "objects\n" +
- "triggers\n" +
- "completed listing Tables in schema tmp\n" +
- "4.8. getTableTypes()\n" +
- "List TableTypes:\n" +
- "GLOBAL TEMPORARY TABLE\n" +
- "LOCAL TEMPORARY TABLE\n" +
- "MERGE TABLE\n" +
- "REMOTE TABLE\n" +
- "REPLICA TABLE\n" +
- "SYSTEM TABLE\n" +
- "SYSTEM VIEW\n" +
- "TABLE\n" +
- "VIEW\n" +
- "completed listing TableTypes\n" +
- "voc meta data Test completed successfully\n" +
- "Cleanup created objects\n" +
- "5. ALTER USER voc\n" +
- "6. DROP SCHEMA voc\n" +
- "7. DROP USER voc\n" +
- "cleanup succeeded :)\n");
- }
@Test
public void BugDatabaseMetaData_Bug_3356() {
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
@@ -16,6 +16,7 @@ import java.math.BigInteger;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Properties;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.jupiter.api.Assertions.*;
@@ -117,16 +118,20 @@ public class ApiTests {
return concatenateColumn(this.conn, sep, query);
}
- private String concatenateColumn(Connection c, String sep, String
query) throws SQLException {
+ private static String concatenateColumn(Connection c, String sep,
String query) throws SQLException {
+ try (Statement s = c.createStatement(); ResultSet rs =
s.executeQuery(query)) {
+ return concatenateColumn(sep, 1, rs);
+ }
+ }
+
+ private static String concatenateColumn(String sep, int colnr,
ResultSet rs) throws SQLException {
StringBuilder builder = new StringBuilder();
boolean first = true;
- try (Statement s = c.createStatement(); ResultSet rs =
s.executeQuery(query)) {
- while (rs.next()) {
- if (!first)
- builder.append(sep);
- first = false;
- builder.append(rs.getString(1));
- }
+ while (rs.next()) {
+ if (!first)
+ builder.append(sep);
+ first = false;
+ builder.append(rs.getString(colnr));
}
return builder.toString();
}
@@ -1833,4 +1838,58 @@ public class ApiTests {
assertEquals("1client1 3client1 4client2",
concatenateColumn(conn1, " ", "SELECT id || who FROM tconc_seq ORDER BY id"));
}
}
+
+ @Test
+ public void testBugConnectAsVOCgetMetaDataFailure6388() throws
SQLException {
+ try {
+ assertTrue(conn.getAutoCommit()); // cleanupVOC is
going to cause errors
+
+ cleanupVOC();
+
+ stmt.execute("CREATE USER voc WITH PASSWORD 'voc' NAME
'VOC Explorer' SCHEMA sys");
+ stmt.execute("CREATE SCHEMA voc AUTHORIZATION voc");
+ stmt.execute("ALTER USER voc SET SCHEMA voc");
+
+ // Modify connection to log in as 'voc'
+ Properties props =
conn.unwrap(MonetConnection.class).getConnectionProperties();
+ props.setProperty("user", "voc");
+ props.setProperty("password", "voc");
+
+ try (Connection voconn =
DriverManager.getConnection("jdbc:monetdb:", props)) {
+ DatabaseMetaData dbmd = voconn.getMetaData();
+
+ assertEquals("voc", dbmd.getUserName());
+
+ int maxConnections = dbmd.getMaxConnections();
+ assertTrue(0 < maxConnections,
"getMaxConnections yielded " + maxConnections);
+
+ assertNotEquals("",
dbmd.getDatabaseProductVersion());
+ int major = dbmd.getDatabaseMajorVersion();
+ assertTrue( major == 11 || major >= 56,
"database major version = " + major);
+ int minor = dbmd.getDatabaseMinorVersion();
+ assertTrue(minor >= 0, "database minor version
= " + minor);
+
+ try (ResultSet rs = dbmd.getTables(null, "tmp",
null, null)) {
+ String tmpTableNames =
concatenateColumn(" ", 3, rs);
+ assertContains("_columns _tables",
tmpTableNames);
+ }
+
+ try (ResultSet rs = dbmd.getTableTypes()) {
+ String tableTypes = "," +
concatenateColumn(",", 1, rs) + ",";
+ assertContains(",TABLE,", tableTypes);
+ assertContains(",VIEW,", tableTypes);
+ assertContains(",MERGE TABLE,",
tableTypes);
+ }
+ }
+ } finally {
+ cleanupVOC();
+ }
+ }
+
+ private void cleanupVOC() {
+ ignoreFailures("ALTER USER voc SET SCHEMA sys");
+ ignoreFailures("DROP SCHEMA voc");
+ ignoreFailures("DROP USER voc");
+ }
+
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]