Skip to content

Commit

Permalink
fix(jdbc): DatabaseMetaData.getTables() shows all types if no type is…
Browse files Browse the repository at this point in the history
… provided

relates to #786
  • Loading branch information
gotson committed Sep 21, 2022
1 parent da570ba commit c8e86ae
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 16 deletions.
31 changes: 15 additions & 16 deletions src/main/java/org/sqlite/jdbc3/JDBC3DatabaseMetaData.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import org.sqlite.SQLiteConnection;
import org.sqlite.core.CoreStatement;
import org.sqlite.jdbc3.JDBC3DatabaseMetaData.ImportedKeyFinder.ForeignKey;
Expand Down Expand Up @@ -1721,24 +1722,22 @@ public synchronized ResultSet getTables(
sql.append(" WHERE").append("\n");
sql.append(" NAME LIKE 'sqlite\\_%' ESCAPE '\\'").append("\n");
sql.append(" )").append("\n");
sql.append(" WHERE TABLE_NAME LIKE '")
.append(tblNamePattern)
.append("' ESCAPE '")
.append(getSearchStringEscape())
.append("'")
.append(" AND TABLE_TYPE IN (");

if (types == null || types.length == 0) {
sql.append("'TABLE','VIEW'");
} else {
sql.append("'").append(types[0].toUpperCase()).append("'");

for (int i = 1; i < types.length; i++) {
sql.append(",'").append(types[i].toUpperCase()).append("'");
}
sql.append(" WHERE TABLE_NAME LIKE '");
sql.append(tblNamePattern);
sql.append("' ESCAPE '");
sql.append(getSearchStringEscape());
sql.append("'");

if (types != null && types.length != 0) {
sql.append(" AND TABLE_TYPE IN (");
sql.append(
Arrays.stream(types)
.map((t) -> "'" + t.toUpperCase() + "'")
.collect(Collectors.joining(",")));
sql.append(")");
}

sql.append(") ORDER BY TABLE_TYPE, TABLE_NAME;");
sql.append(" ORDER BY TABLE_TYPE, TABLE_NAME;");

return ((CoreStatement) conn.createStatement()).executeQuery(sql.toString(), true);
}
Expand Down
14 changes: 14 additions & 0 deletions src/test/java/org/sqlite/DBMetaDataTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,16 @@ public void getTables() throws SQLException {
stat.getGeneratedKeys().close();
stat.close();

assertThat(rs.next()).isTrue();
assertThat(rs.getString("TABLE_NAME")).isEqualTo("sqlite_schema");
assertThat(rs.getString("TABLE_TYPE")).isEqualTo("SYSTEM TABLE");
assertThat(rs.next()).isTrue();
assertThat(rs.getString("TABLE_NAME")).isEqualTo("test"); // 3
assertThat(rs.getString("TABLE_TYPE")).isEqualTo("TABLE"); // 4
assertThat(rs.next()).isTrue();
assertThat(rs.getString("TABLE_NAME")).isEqualTo("testView");
assertThat(rs.getString("TABLE_TYPE")).isEqualTo("VIEW");
assertThat(rs.next()).isFalse();
rs.close();

rs = meta.getTables(null, null, "bob", null);
Expand All @@ -82,6 +86,12 @@ public void getTables() throws SQLException {
assertThat(rs.getString("TABLE_NAME")).isEqualTo("testView");
assertThat(rs.next()).isFalse();
rs.close();

rs = meta.getTables(null, null, null, new String[] {"system table"});
assertThat(rs.next()).isTrue();
assertThat(rs.getString("TABLE_NAME")).isEqualTo("sqlite_schema");
assertThat(rs.next()).isFalse();
rs.close();
}

@Test
Expand Down Expand Up @@ -940,6 +950,10 @@ public void columnOrderOfgetTables() throws SQLException {
assertThat(rsTables.getString("TABLE_NAME")).isEqualTo("TABLE3");
assertThat(rsTables.getString("TABLE_TYPE")).isEqualTo("GLOBAL TEMPORARY");

assertThat(rsTables.next()).isTrue();
assertThat(rsTables.getString("TABLE_NAME")).isEqualTo("sqlite_schema");
assertThat(rsTables.getString("TABLE_TYPE")).isEqualTo("SYSTEM TABLE");

assertThat(rsTables.next()).isTrue();
assertThat(rsTables.getString("TABLE_NAME")).isEqualTo("sqlite_sequence");
assertThat(rsTables.getString("TABLE_TYPE")).isEqualTo("SYSTEM TABLE");
Expand Down

0 comments on commit c8e86ae

Please sign in to comment.