Skip to content

Commit 52ab8d3

Browse files
committed
[CONJ-1108] Database metadata listing TEMPORARY tables/sequences
1 parent 057b2e9 commit 52ab8d3

File tree

3 files changed

+67
-5
lines changed

3 files changed

+67
-5
lines changed

src/main/java/org/mariadb/jdbc/DatabaseMetaData.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -722,7 +722,7 @@ public ResultSet getTables(
722722
StringBuilder sb =
723723
new StringBuilder(
724724
"SELECT TABLE_SCHEMA TABLE_CAT, NULL TABLE_SCHEM, TABLE_NAME, IF(TABLE_TYPE='BASE"
725-
+ " TABLE' or TABLE_TYPE='SYSTEM VERSIONED', 'TABLE', TABLE_TYPE) as TABLE_TYPE,"
725+
+ " TABLE' or TABLE_TYPE='SYSTEM VERSIONED', 'TABLE', IF(TABLE_TYPE='TEMPORARY', 'LOCAL TEMPORARY', TABLE_TYPE)) as TABLE_TYPE,"
726726
+ " TABLE_COMMENT REMARKS, NULL TYPE_CAT, NULL TYPE_SCHEM, NULL TYPE_NAME, NULL"
727727
+ " SELF_REFERENCING_COL_NAME, NULL REF_GENERATION FROM"
728728
+ " INFORMATION_SCHEMA.TABLES");
@@ -744,8 +744,17 @@ public ResultSet getTables(
744744
mustAddType = false;
745745
continue;
746746
}
747-
String type = "TABLE".equals(s) ? "'BASE TABLE','SYSTEM VERSIONED'" : escapeQuote(s);
748-
sqlType.append(type);
747+
switch (s) {
748+
case "TABLE":
749+
sqlType.append("'BASE TABLE','SYSTEM VERSIONED'");
750+
break;
751+
case "LOCAL TEMPORARY":
752+
sqlType.append("'TEMPORARY'");
753+
break;
754+
default:
755+
sqlType.append(escapeQuote(s));
756+
break;
757+
}
749758
}
750759
sqlType.append(")");
751760
if (mustAddType) sb.append(sqlType);
@@ -2382,8 +2391,10 @@ public ResultSet getCatalogs() throws SQLException {
23822391

23832392
public ResultSet getTableTypes() throws SQLException {
23842393
return executeQuery(
2385-
"SELECT 'TABLE' TABLE_TYPE UNION SELECT 'SYSTEM VIEW' TABLE_TYPE UNION SELECT 'VIEW'"
2386-
+ " TABLE_TYPE");
2394+
"SELECT 'TABLE' TABLE_TYPE " +
2395+
"UNION SELECT 'SYSTEM VIEW' TABLE_TYPE " +
2396+
"UNION SELECT 'VIEW' TABLE_TYPE " +
2397+
"UNION SELECT 'LOCAL TEMPORARY' TABLE_TYPE");
23872398
}
23882399

23892400
/**

src/test/java/org/mariadb/jdbc/integration/DatabaseMetadataTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2717,4 +2717,47 @@ public void foreignKeyTest() throws SQLException {
27172717
}
27182718
}
27192719
}
2720+
2721+
2722+
@Test
2723+
public void testTemporaryTables() throws SQLException {
2724+
Assumptions.assumeTrue(isMariaDBServer() && minVersion(11,2,0));
2725+
Assumptions.assumeTrue(
2726+
!"mariadb-es".equals(System.getenv("srv"))
2727+
&& !"mariadb-es-test".equals(System.getenv("srv")));
2728+
2729+
java.sql.Statement stmt = sharedConn.createStatement();
2730+
stmt.execute("create temporary table testTemporaryTables (b int)");
2731+
try (Connection con = createCon()) {
2732+
java.sql.Statement ss = con.createStatement();
2733+
ResultSet rr = ss.executeQuery("select table_schema, table_name, table_type, temporary " +
2734+
"from information_schema.tables " +
2735+
"where TABLE_NAME = 'testTemporaryTables'");
2736+
assertFalse(rr.next());
2737+
}
2738+
DatabaseMetaData dbmd = sharedConn.getMetaData();
2739+
2740+
ResultSet rs = dbmd.getTables(null, null, "testTemporary%", null);
2741+
assertTrue(rs.next());
2742+
assertEquals("testtemporarytables",rs.getString("TABLE_NAME").toLowerCase());
2743+
assertEquals("LOCAL TEMPORARY", rs.getString("TABLE_TYPE"));
2744+
assertFalse(rs.next());
2745+
2746+
rs = dbmd.getTables(null, null, "testTemporary%", new String[]{"LOCAL TEMPORARY"});
2747+
assertTrue(rs.next());
2748+
assertEquals("testtemporarytables",rs.getString("TABLE_NAME").toLowerCase());
2749+
assertEquals("LOCAL TEMPORARY", rs.getString("TABLE_TYPE"));
2750+
assertFalse(rs.next());
2751+
2752+
2753+
rs = dbmd.getTables(null, null, "testTemporary%", new String[]{"TEMPORARY"});
2754+
assertTrue(rs.next());
2755+
assertEquals("testtemporarytables",rs.getString("TABLE_NAME").toLowerCase());
2756+
assertEquals("LOCAL TEMPORARY", rs.getString("TABLE_TYPE"));
2757+
assertFalse(rs.next());
2758+
2759+
rs = dbmd.getTables(null, null, "testTemporary%", new String[]{"TABLE"});
2760+
assertFalse(rs.next());
2761+
}
2762+
27202763
}

src/test/java/org/mariadb/jdbc/integration/resultset/ResultSetMetadataTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,5 +244,13 @@ public void databaseResultsetMeta() throws SQLException {
244244
ResultSetMetaData rsMeta = rs.getMetaData();
245245
assertEquals("TABLE_TYPE", rsMeta.getColumnName(1));
246246
assertEquals("", rsMeta.getTableName(1));
247+
assertEquals("TABLE", rs.getString(1));
248+
assertTrue(rs.next());
249+
assertEquals("SYSTEM VIEW", rs.getString(1));
250+
assertTrue(rs.next());
251+
assertEquals("VIEW", rs.getString(1));
252+
assertTrue(rs.next());
253+
assertEquals("LOCAL TEMPORARY", rs.getString(1));
254+
assertFalse(rs.next());
247255
}
248256
}

0 commit comments

Comments
 (0)