2020import java .util .Map ;
2121import java .util .Properties ;
2222import org .junit .jupiter .api .*;
23+ import org .junit .jupiter .api .condition .DisabledInNativeImage ;
24+ import org .junit .jupiter .params .ParameterizedTest ;
25+ import org .junit .jupiter .params .provider .ValueSource ;
2326
2427/** These tests are designed to stress Statements on memory databases. */
2528public class DBMetaDataTest {
@@ -417,7 +420,21 @@ public void getColumns() throws SQLException {
417420 assertThat (rs .next ()).isFalse ();
418421
419422 rs = meta .getColumns (null , null , "%" , "%" );
420- // SYSTEM TABLE "sqlite_schema"
423+
424+ // SYSTEM TABLE "sqlite_schema" for main
425+ assertThat (rs .next ()).isTrue ();
426+ assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("sqlite_schema" );
427+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("type" );
428+ assertThat (rs .next ()).isTrue ();
429+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("name" );
430+ assertThat (rs .next ()).isTrue ();
431+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("tbl_name" );
432+ assertThat (rs .next ()).isTrue ();
433+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("rootpage" );
434+ assertThat (rs .next ()).isTrue ();
435+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("sql" );
436+
437+ // SYSTEM TABLE "sqlite_schema" for temp
421438 assertThat (rs .next ()).isTrue ();
422439 assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("sqlite_schema" );
423440 assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("type" );
@@ -429,6 +446,7 @@ public void getColumns() throws SQLException {
429446 assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("rootpage" );
430447 assertThat (rs .next ()).isTrue ();
431448 assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("sql" );
449+
432450 // TABLE "test"
433451 assertThat (rs .next ()).isTrue ();
434452 assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("test" );
@@ -2041,8 +2059,19 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
20412059 assertThat (rs .next ()).isFalse ();
20422060 rs .close ();
20432061
2044-
20452062 rs = meta .getColumns (null , "db2" , "%" , "%" );
2063+ assertThat (rs .next ()).isTrue ();
2064+ assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("sqlite_schema" );
2065+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("type" );
2066+ assertThat (rs .next ()).isTrue ();
2067+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("name" );
2068+ assertThat (rs .next ()).isTrue ();
2069+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("tbl_name" );
2070+ assertThat (rs .next ()).isTrue ();
2071+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("rootpage" );
2072+ assertThat (rs .next ()).isTrue ();
2073+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("sql" );
2074+
20462075 // TABLE "test2"
20472076 assertThat (rs .next ()).isTrue ();
20482077 assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("test2" );
@@ -2077,14 +2106,18 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
20772106
20782107
20792108 rs = meta .getColumns (null , null , "%" , "%" );
2080- assertReadsAllColumns (rs );
2109+ assertReadsAllColumns (rs , 3 );
20812110 rs = meta .getColumns (null , "%" , "%" , "%" );
2082- assertReadsAllColumns (rs );
2111+ assertReadsAllColumns (rs , 3 );
20832112 rs = meta .getColumns (null , "\\ %" , "%" , "%" );
20842113 assertThat (rs .next ()).isFalse ();
20852114 }
20862115
2087- private void assertReadsAllColumns (ResultSet rs ) throws SQLException {
2116+ private void assertReadsAllColumns (ResultSet rs , int schemasNumber ) throws SQLException {
2117+ for (int i = 0 ; i < schemasNumber ; i ++) {
2118+ // When full pattern used we acquire system table for each individual schema
2119+ assertSystemSchema (rs );
2120+ }
20882121 // TABLE "test"
20892122 assertThat (rs .next ()).isTrue ();
20902123 assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("test" );
@@ -2097,6 +2130,8 @@ private void assertReadsAllColumns(ResultSet rs) throws SQLException {
20972130 assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("intvalue" );
20982131 assertThat (rs .next ()).isTrue ();
20992132 assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("realvalue" );
2133+ assertThat (rs .next ()).isTrue ();
2134+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("charvalue" );
21002135 // TABLE "test2"
21012136 assertThat (rs .next ()).isTrue ();
21022137 assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("test2" );
@@ -2121,6 +2156,8 @@ private void assertReadsAllColumns(ResultSet rs) throws SQLException {
21212156 assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("intvalue" );
21222157 assertThat (rs .next ()).isTrue ();
21232158 assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("realvalue" );
2159+ assertThat (rs .next ()).isTrue ();
2160+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("charvalue" );
21242161 // VIEW "testView2"
21252162 assertThat (rs .next ()).isTrue ();
21262163 assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("testView2" );
@@ -2241,4 +2278,18 @@ public void exit() throws SQLException {
22412278 testDB .deleteOnExit ();
22422279 }
22432280 }
2281+
2282+ private void assertSystemSchema (ResultSet rs ) throws SQLException {
2283+ assertThat (rs .next ()).isTrue ();
2284+ assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("sqlite_schema" );
2285+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("type" );
2286+ assertThat (rs .next ()).isTrue ();
2287+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("name" );
2288+ assertThat (rs .next ()).isTrue ();
2289+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("tbl_name" );
2290+ assertThat (rs .next ()).isTrue ();
2291+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("rootpage" );
2292+ assertThat (rs .next ()).isTrue ();
2293+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("sql" );
2294+ }
22442295}
0 commit comments