Skip to content

Commit 1313587

Browse files
committed
update tests
1 parent b0eab66 commit 1313587

File tree

2 files changed

+126
-9
lines changed

2 files changed

+126
-9
lines changed

src/main/java/org/sqlite/jdbc3/JDBC3DatabaseMetaData.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,7 @@ public ResultSet getColumns(String c, String s, String tblNamePattern, String co
924924
if (i != schemasNames.size() - 1) {
925925
sql.append(" UNION ALL ");
926926
} else {
927-
sql.append("\n) order by TABLE_SCHEM, TABLE_NAME, ORDINAL_POSITION;");
927+
sql.append("\n) order by TABLE_NAME, TABLE_SCHEM, ORDINAL_POSITION;");
928928
}
929929
}
930930
if (schemasNames.size() == 0) {
@@ -1228,7 +1228,8 @@ public ResultSet getSchemas() throws SQLException {
12281228
if (getSchemas == null) {
12291229
getSchemas =
12301230
conn.prepareStatement(
1231-
"select name as TABLE_SCHEM, null as TABLE_CATALOG from pragma_database_list;");
1231+
"select name as TABLE_SCHEM, null as TABLE_CATALOG from pragma_database_list order by "
1232+
+ "TABLE_SCHEM;");
12321233
}
12331234

12341235
return getSchemas.executeQuery();
@@ -1244,7 +1245,8 @@ public ResultSet getSchemas(String catalog, String schemaPattern) throws SQLExce
12441245
}
12451246
Statement stat = conn.createStatement();
12461247
String sql = "select name as TABLE_SCHEM, null as TABLE_CATALOG from pragma_database_list\n"
1247-
+ "where TABLE_SCHEM like '" + schemaPattern + "' escape '" + getSearchStringEscape() + "';";
1248+
+ "where TABLE_SCHEM like '" + schemaPattern + "' escape '" + getSearchStringEscape() + "' order by "
1249+
+ "TABLE_SCHEM;";
12481250
return stat.executeQuery(sql);
12491251
}
12501252

@@ -1527,7 +1529,7 @@ public ResultSet getImportedKeys(String catalog, String schema, String table)
15271529
throws SQLException {
15281530
ResultSet rs;
15291531
Statement stat = conn.createStatement();
1530-
StringBuilder sql = new StringBuilder(700);
1532+
StringBuilder sql = new StringBuilder(1024);
15311533
ResultSet schemas = getSchemas(null, escapeWildcards(schema));
15321534
List<String> schemasNames = getSchemasNames(schemas);
15331535
for (int i = 0; i < schemasNames.size(); i++) {

src/test/java/org/sqlite/DBMetaDataTest.java

+120-5
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)