@@ -1708,10 +1708,10 @@ public void readSchemaWithAttachedDatabases() throws SQLException {
1708
1708
ResultSetMetaData rsMeta = rs .getMetaData ();
1709
1709
assertThat (rsMeta .getColumnCount ()).isEqualTo (2 );
1710
1710
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" );
1714
1711
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" );
1715
1715
}
1716
1716
1717
1717
@ Test
@@ -1767,23 +1767,66 @@ public void getTablesForAttachedDatabase() throws SQLException {
1767
1767
1768
1768
@ Test
1769
1769
public void testDynamicDatabaseAttachment () throws IOException , SQLException {
1770
- ResultSet schemas = meta .getSchemas ();
1771
- schemas .close ();
1770
+ ResultSet schemas ;
1772
1771
File thirdDB = Files .createTempFile ("db3" , ".sqlite" ).toFile ();
1773
1772
stat .executeUpdate ("attach database \" " + thirdDB .toURI ().toURL () + "\" as db3;" );
1774
1773
try {
1775
1774
schemas = meta .getSchemas ();
1776
1775
boolean schemaFound = false ;
1777
1776
while (schemas .next ()) {
1778
1777
schemaFound = "db3" .equals (schemas .getString ("TABLE_SCHEM" ));
1778
+ if (schemaFound ) {
1779
+ break ;
1780
+ }
1779
1781
}
1780
1782
assertThat (schemaFound ).isTrue ();
1783
+
1781
1784
} finally {
1782
1785
stat .executeUpdate ("detach database db3;" );
1783
1786
thirdDB .deleteOnExit ();
1784
1787
}
1785
1788
}
1786
1789
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
+
1787
1830
@ Test
1788
1831
public void getColumnsForAttachedDatabaseTables () throws SQLException {
1789
1832
ResultSet rs = meta .getColumns (null , "db2" , "test2" , "id" );
@@ -1797,6 +1840,7 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
1797
1840
assertThat (rs .getInt ("DECIMAL_DIGITS" )).isEqualTo (0 );
1798
1841
assertThat (rs .getString ("IS_AUTOINCREMENT" )).isEqualTo ("NO" );
1799
1842
assertThat (rs .next ()).isFalse ();
1843
+ rs .close ();
1800
1844
1801
1845
rs = meta .getColumns (null , "db2" , "test2" , "fn" );
1802
1846
assertThat (rs .next ()).isTrue ();
@@ -1808,6 +1852,7 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
1808
1852
assertThat (rs .getInt ("DECIMAL_DIGITS" )).isEqualTo (10 );
1809
1853
assertThat (rs .getString ("IS_AUTOINCREMENT" )).isEqualTo ("NO" );
1810
1854
assertThat (rs .next ()).isFalse ();
1855
+ rs .close ();
1811
1856
1812
1857
rs = meta .getColumns (null , "db2" , "test2" , "sn" );
1813
1858
assertThat (rs .next ()).isTrue ();
@@ -1817,6 +1862,7 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
1817
1862
assertThat (rs .getInt ("DECIMAL_DIGITS" )).isEqualTo (10 );
1818
1863
assertThat (rs .getString ("COLUMN_DEF" )).isNull ();
1819
1864
assertThat (rs .next ()).isFalse ();
1865
+ rs .close ();
1820
1866
1821
1867
rs = meta .getColumns (null , "db2" , "test2" , "intvalue" );
1822
1868
assertThat (rs .next ()).isTrue ();
@@ -1827,6 +1873,7 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
1827
1873
assertThat (rs .getInt ("DECIMAL_DIGITS" )).isEqualTo (0 );
1828
1874
assertThat (rs .getString ("COLUMN_DEF" )).isNull ();
1829
1875
assertThat (rs .next ()).isFalse ();
1876
+ rs .close ();
1830
1877
1831
1878
rs = meta .getColumns (null , "db2" , "test2" , "realvalue" );
1832
1879
assertThat (rs .next ()).isTrue ();
@@ -1837,6 +1884,7 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
1837
1884
assertThat (rs .getInt ("DECIMAL_DIGITS" )).isEqualTo (3 );
1838
1885
assertThat (rs .getString ("COLUMN_DEF" )).isNull ();
1839
1886
assertThat (rs .next ()).isFalse ();
1887
+ rs .close ();
1840
1888
1841
1889
rs = meta .getColumns (null , "db2" , "test2" , "%" );
1842
1890
assertThat (rs .next ()).isTrue ();
@@ -1850,13 +1898,15 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
1850
1898
assertThat (rs .next ()).isTrue ();
1851
1899
assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("realvalue" );
1852
1900
assertThat (rs .next ()).isFalse ();
1901
+ rs .close ();
1853
1902
1854
1903
rs = meta .getColumns (null , "db2" , "test2" , "%n" );
1855
1904
assertThat (rs .next ()).isTrue ();
1856
1905
assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("fn" );
1857
1906
assertThat (rs .next ()).isTrue ();
1858
1907
assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("sn" );
1859
1908
assertThat (rs .next ()).isFalse ();
1909
+ rs .close ();
1860
1910
1861
1911
rs = meta .getColumns (null , "db2" , "test%" , "%" );
1862
1912
// TABLE "test2"
@@ -1892,6 +1942,8 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
1892
1942
assertThat (rs .getString ("TABLE_NAME" )).isEqualTo ("testView2" );
1893
1943
assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("realvalue" );
1894
1944
assertThat (rs .next ()).isFalse ();
1945
+ rs .close ();
1946
+
1895
1947
1896
1948
rs = meta .getColumns (null , "db2" , "%" , "%" );
1897
1949
// TABLE "test2"
@@ -1919,10 +1971,73 @@ public void getColumnsForAttachedDatabaseTables() throws SQLException {
1919
1971
assertThat (rs .next ()).isTrue ();
1920
1972
assertThat (rs .getString ("COLUMN_NAME" )).isEqualTo ("realvalue" );
1921
1973
assertThat (rs .next ()).isFalse ();
1974
+ rs .close ();
1922
1975
1923
1976
rs = meta .getColumns (null , "db2" , "doesnotexist" , "%" );
1924
1977
assertThat (rs .next ()).isFalse ();
1925
1978
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 ();
1926
2041
}
1927
2042
1928
2043
@ Test
0 commit comments