Skip to content

Commit

Permalink
fix(jdbc): DatabaseMetaData#getColumns should also retrieve columns f…
Browse files Browse the repository at this point in the history
…rom SYSTEM TABLE types
  • Loading branch information
gotson committed Jan 26, 2023
1 parent e68bc05 commit 473f528
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
3 changes: 1 addition & 2 deletions src/main/java/org/sqlite/jdbc3/JDBC3DatabaseMetaData.java
Original file line number Diff line number Diff line change
Expand Up @@ -937,8 +937,7 @@ public ResultSet getColumns(String c, String s, String tblNamePattern, String co
ResultSet rs = null;
try {
// Get all tables implied by the input
final String[] types = new String[] {"TABLE", "VIEW"};
rs = getTables(c, s, tblNamePattern, types);
rs = getTables(c, s, tblNamePattern, null);
while (rs.next()) {
String tableName = rs.getString(3);

Expand Down
26 changes: 26 additions & 0 deletions src/test/java/org/sqlite/DBMetaDataTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,18 @@ public void getColumns() throws SQLException {
assertThat(rs.next()).isFalse();

rs = meta.getColumns(null, null, "%", "%");
// SYSTEM TABLE "sqlite_schema"
assertThat(rs.next()).isTrue();
assertThat(rs.getString("TABLE_NAME")).isEqualTo("sqlite_schema");
assertThat(rs.getString("COLUMN_NAME")).isEqualTo("type");
assertThat(rs.next()).isTrue();
assertThat(rs.getString("COLUMN_NAME")).isEqualTo("name");
assertThat(rs.next()).isTrue();
assertThat(rs.getString("COLUMN_NAME")).isEqualTo("tbl_name");
assertThat(rs.next()).isTrue();
assertThat(rs.getString("COLUMN_NAME")).isEqualTo("rootpage");
assertThat(rs.next()).isTrue();
assertThat(rs.getString("COLUMN_NAME")).isEqualTo("sql");
// TABLE "test"
assertThat(rs.next()).isTrue();
assertThat(rs.getString("TABLE_NAME")).isEqualTo("test");
Expand Down Expand Up @@ -402,6 +414,20 @@ public void getColumns() throws SQLException {
rs = meta.getColumns(null, null, "doesnotexist", "%");
assertThat(rs.next()).isFalse();
assertThat(rs.getMetaData().getColumnCount()).isEqualTo(24);

rs = meta.getColumns(null, null, "sqlite_schema", "%");
// SYSTEM TABLE "sqlite_schema"
assertThat(rs.next()).isTrue();
assertThat(rs.getString("TABLE_NAME")).isEqualTo("sqlite_schema");
assertThat(rs.getString("COLUMN_NAME")).isEqualTo("type");
assertThat(rs.next()).isTrue();
assertThat(rs.getString("COLUMN_NAME")).isEqualTo("name");
assertThat(rs.next()).isTrue();
assertThat(rs.getString("COLUMN_NAME")).isEqualTo("tbl_name");
assertThat(rs.next()).isTrue();
assertThat(rs.getString("COLUMN_NAME")).isEqualTo("rootpage");
assertThat(rs.next()).isTrue();
assertThat(rs.getString("COLUMN_NAME")).isEqualTo("sql");
}

@Test
Expand Down

0 comments on commit 473f528

Please sign in to comment.