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]

Reply via email to