@@ -1708,10 +1708,10 @@ public void readSchemaWithAttachedDatabases() throws SQLException {
17081708 ResultSetMetaData rsMeta = rs .getMetaData ();
17091709 assertThat (rsMeta .getColumnCount ()).isEqualTo (2 );
17101710 assertThat (rsMeta .getColumnName (1 )).isEqualTo ("TABLE_SCHEM" );
1711- assertThat (rs .getString ("TABLE_SCHEM" )).isEqualTo ("main" );
1712- assertThat (rs .next ()).isTrue ();
1713- assertThat (rs .getString ("TABLE_SCHEM" )).isEqualTo ("db2" );
17141711 assertThat (rsMeta .getColumnName (2 )).isEqualTo ("TABLE_CATALOG" );
1712+ assertThat (rs .getString ("TABLE_SCHEM" )).isEqualTo ("db2" );
1713+ assertThat (rs .next ()).isTrue ();
1714+ assertThat (rs .getString ("TABLE_SCHEM" )).isEqualTo ("main" );
17151715 }
17161716
17171717 @ Test
@@ -1767,23 +1767,66 @@ public void getTablesForAttachedDatabase() throws SQLException {
17671767
17681768 @ Test
17691769 public void testDynamicDatabaseAttachment () throws IOException , SQLException {
1770- ResultSet schemas = meta .getSchemas ();
1771- schemas .close ();
1770+ ResultSet schemas ;
17721771 File thirdDB = Files .createTempFile ("db3" , ".sqlite" ).toFile ();
17731772 stat .executeUpdate ("attach database \" " + thirdDB .toURI ().toURL () + "\" as db3;" );
17741773 try {
17751774 schemas = meta .getSchemas ();
17761775 boolean schemaFound = false ;
17771776 while (schemas .next ()) {
17781777 schemaFound = "db3" .equals (schemas .getString ("TABLE_SCHEM" ));
1778+ if (schemaFound ) {
1779+ break ;
1780+ }
17791781 }
17801782 assertThat (schemaFound ).isTrue ();
1783+
17811784 } finally {
17821785 stat .executeUpdate ("detach database db3;" );
17831786 thirdDB .deleteOnExit ();
17841787 }
17851788 }
17861789
1790+ @ Test
1791+ public void testGetSchemasForAttachedDatabases () throws SQLException , IOException {
1792+ ResultSet rs ;
1793+ rs = meta .getSchemas (null , "db2" );
1794+ assertThat (rs ).isNotNull ();
1795+ assertThat (rs .next ()).isTrue ();
1796+ assertThat (rs .getString ("TABLE_SCHEM" )).isEqualTo ("db2" );
1797+ assertThat (rs .getString ("TABLE_CATALOG" )).isNull ();
1798+ rs .close ();
1799+ File thirdDB = Files .createTempFile ("db3" , ".sqlite" ).toFile ();
1800+ thirdDB .deleteOnExit ();
1801+ stat .executeUpdate ("attach database \" " + thirdDB .toURI ().toURL () + "\" as db3;" );
1802+ try {
1803+ rs = meta .getSchemas (null , "db_" );
1804+ assertThat (rs .next ()).isTrue ();
1805+ assertThat (rs .getString ("TABLE_SCHEM" )).isEqualTo ("db2" );
1806+ assertThat (rs .getString ("TABLE_CATALOG" )).isNull ();
1807+ assertThat (rs .next ()).isTrue ();
1808+ assertThat (rs .getString ("TABLE_SCHEM" )).isEqualTo ("db3" );
1809+ assertThat (rs .getString ("TABLE_CATALOG" )).isNull ();
1810+ rs .close ();
1811+ rs = meta .getSchemas (null , "%" );
1812+ assertThat (rs .next ()).isTrue ();
1813+ assertThat (rs .getString ("TABLE_SCHEM" )).isEqualTo ("db2" );
1814+ assertThat (rs .getString ("TABLE_CATALOG" )).isNull ();
1815+ assertThat (rs .next ()).isTrue ();
1816+ assertThat (rs .getString ("TABLE_SCHEM" )).isEqualTo ("db3" );
1817+ assertThat (rs .getString ("TABLE_CATALOG" )).isNull ();
1818+ assertThat (rs .next ()).isTrue ();
1819+ assertThat (rs .getString ("TABLE_SCHEM" )).isEqualTo ("main" );
1820+ assertThat (rs .getString ("TABLE_CATALOG" )).isNull ();
1821+ rs .close ();
1822+ rs = meta .getSchemas (null , "\\ %" );
1823+ assertThat (rs .next ()).isFalse ();
1824+
1825+ } finally {
1826+ stat .executeUpdate ("detach database db3;" );
1827+ }
1828+ }
1829+
17871830 @ Test
17881831 public void getColumnsForAttachedDatabaseTables () throws SQLException {
17891832 ResultSet rs = meta .getColumns (null , "db2" , "test2" , "id" );
@@ -1797,6 +1840,7 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
17971840 assertThat (rs .getInt ("DECIMAL_DIGITS" )).isEqualTo (0 );
17981841 assertThat (rs .getString ("IS_AUTOINCREMENT" )).isEqualTo ("NO" );
17991842 assertThat (rs .next ()).isFalse ();
1843+ rs .close ();
18001844
18011845 rs = meta .getColumns (null , "db2" , "test2" , "fn" );
18021846 assertThat (rs .next ()).isTrue ();
@@ -1808,6 +1852,7 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
18081852 assertThat (rs .getInt ("DECIMAL_DIGITS" )).isEqualTo (10 );
18091853 assertThat (rs .getString ("IS_AUTOINCREMENT" )).isEqualTo ("NO" );
18101854 assertThat (rs .next ()).isFalse ();
1855+ rs .close ();
18111856
18121857 rs = meta .getColumns (null , "db2" , "test2" , "sn" );
18131858 assertThat (rs .next ()).isTrue ();
@@ -1817,6 +1862,7 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
18171862 assertThat (rs .getInt ("DECIMAL_DIGITS" )).isEqualTo (10 );
18181863 assertThat (rs .getString ("COLUMN_DEF" )).isNull ();
18191864 assertThat (rs .next ()).isFalse ();
1865+ rs .close ();
18201866
18211867 rs = meta .getColumns (null , "db2" , "test2" , "intvalue" );
18221868 assertThat (rs .next ()).isTrue ();
@@ -1827,6 +1873,7 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
18271873 assertThat (rs .getInt ("DECIMAL_DIGITS" )).isEqualTo (0 );
18281874 assertThat (rs .getString ("COLUMN_DEF" )).isNull ();
18291875 assertThat (rs .next ()).isFalse ();
1876+ rs .close ();
18301877
18311878 rs = meta .getColumns (null , "db2" , "test2" , "realvalue" );
18321879 assertThat (rs .next ()).isTrue ();
@@ -1837,6 +1884,7 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
18371884 assertThat (rs .getInt ("DECIMAL_DIGITS" )).isEqualTo (3 );
18381885 assertThat (rs .getString ("COLUMN_DEF" )).isNull ();
18391886 assertThat (rs .next ()).isFalse ();
1887+ rs .close ();
18401888
18411889 rs = meta .getColumns (null , "db2" , "test2" , "%" );
18421890 assertThat (rs .next ()).isTrue ();
@@ -1850,13 +1898,15 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
18501898 assertThat (rs .next ()).isTrue ();
18511899 assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("realvalue" );
18521900 assertThat (rs .next ()).isFalse ();
1901+ rs .close ();
18531902
18541903 rs = meta .getColumns (null , "db2" , "test2" , "%n" );
18551904 assertThat (rs .next ()).isTrue ();
18561905 assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("fn" );
18571906 assertThat (rs .next ()).isTrue ();
18581907 assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("sn" );
18591908 assertThat (rs .next ()).isFalse ();
1909+ rs .close ();
18601910
18611911 rs = meta .getColumns (null , "db2" , "test%" , "%" );
18621912 // TABLE "test2"
@@ -1892,6 +1942,8 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
18921942 assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("testView2" );
18931943 assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("realvalue" );
18941944 assertThat (rs .next ()).isFalse ();
1945+ rs .close ();
1946+
18951947
18961948 rs = meta .getColumns (null , "db2" , "%" , "%" );
18971949 // TABLE "test2"
@@ -1919,10 +1971,73 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
19191971 assertThat (rs .next ()).isTrue ();
19201972 assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("realvalue" );
19211973 assertThat (rs .next ()).isFalse ();
1974+ rs .close ();
19221975
19231976 rs = meta .getColumns (null , "db2" , "doesnotexist" , "%" );
19241977 assertThat (rs .next ()).isFalse ();
19251978 assertThat (rs .getMetaData ().getColumnCount ()).isEqualTo (24 );
1979+ rs .close ();
1980+
1981+
1982+ rs = meta .getColumns (null , null , "%" , "%" );
1983+ assertReadsAllColumns (rs );
1984+ rs = meta .getColumns (null , "%" , "%" , "%" );
1985+ assertReadsAllColumns (rs );
1986+ rs = meta .getColumns (null , "\\ %" , "%" , "%" );
1987+ assertThat (rs .next ()).isFalse ();
1988+ }
1989+
1990+ private void assertReadsAllColumns (ResultSet rs ) throws SQLException {
1991+ // TABLE "test"
1992+ assertThat (rs .next ()).isTrue ();
1993+ assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("test" );
1994+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("id" );
1995+ assertThat (rs .next ()).isTrue ();
1996+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("fn" );
1997+ assertThat (rs .next ()).isTrue ();
1998+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("sn" );
1999+ assertThat (rs .next ()).isTrue ();
2000+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("intvalue" );
2001+ assertThat (rs .next ()).isTrue ();
2002+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("realvalue" );
2003+ // TABLE "test2"
2004+ assertThat (rs .next ()).isTrue ();
2005+ assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("test2" );
2006+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("id" );
2007+ assertThat (rs .next ()).isTrue ();
2008+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("fn" );
2009+ assertThat (rs .next ()).isTrue ();
2010+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("sn" );
2011+ assertThat (rs .next ()).isTrue ();
2012+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("intvalue" );
2013+ assertThat (rs .next ()).isTrue ();
2014+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("realvalue" );
2015+ // VIEW "testView"
2016+ assertThat (rs .next ()).isTrue ();
2017+ assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("testView" );
2018+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("id" );
2019+ assertThat (rs .next ()).isTrue ();
2020+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("fn" );
2021+ assertThat (rs .next ()).isTrue ();
2022+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("sn" );
2023+ assertThat (rs .next ()).isTrue ();
2024+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("intvalue" );
2025+ assertThat (rs .next ()).isTrue ();
2026+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("realvalue" );
2027+ // VIEW "testView2"
2028+ assertThat (rs .next ()).isTrue ();
2029+ assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("testView2" );
2030+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("id" );
2031+ assertThat (rs .next ()).isTrue ();
2032+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("fn" );
2033+ assertThat (rs .next ()).isTrue ();
2034+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("sn" );
2035+ assertThat (rs .next ()).isTrue ();
2036+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("intvalue" );
2037+ assertThat (rs .next ()).isTrue ();
2038+ assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("realvalue" );
2039+ assertThat (rs .next ()).isFalse ();
2040+ rs .close ();
19262041 }
19272042
19282043 @ Test
0 commit comments