Skip to content

Commit a34dfd8

Browse files
committed
fix(jdbc): return all xerial table types
1 parent 42eb56c commit a34dfd8

2 files changed

Lines changed: 41 additions & 1 deletion

File tree

‎libsql-jdbc/src/main/java/com/github/magnusp/libsql/jdbc/LibsqlDatabaseMetaData.java‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,11 @@ public ResultSet getPrimaryKeys(String catalog, String schema, String table) thr
486486

487487
@Override
488488
public ResultSet getTableTypes() throws SQLException {
489-
return executeMetadataQuery("SELECT 'TABLE' AS TABLE_TYPE UNION SELECT 'VIEW' AS TABLE_TYPE");
489+
return executeMetadataQuery(
490+
"SELECT 'TABLE' AS TABLE_TYPE "
491+
+ "UNION SELECT 'VIEW' AS TABLE_TYPE "
492+
+ "UNION SELECT 'SYSTEM TABLE' AS TABLE_TYPE "
493+
+ "UNION SELECT 'GLOBAL TEMPORARY' AS TABLE_TYPE");
490494
}
491495

492496
@Override

‎libsql-jdbc/src/test/java/com/github/magnusp/libsql/jdbc/LibsqlDatabaseMetaDataTest.java‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
import java.sql.ResultSet;
1212
import java.sql.SQLException;
1313
import java.sql.Types;
14+
import java.util.ArrayList;
1415
import java.util.List;
16+
import java.util.regex.Matcher;
17+
import java.util.regex.Pattern;
1518

1619
import static org.assertj.core.api.Assertions.assertThat;
1720

@@ -120,6 +123,21 @@ void getTablesWithEmptyTableNamePatternMatchesEverything() throws SQLException {
120123
assertThat(connection.lastSql).contains("TABLE_NAME LIKE '%'");
121124
}
122125

126+
@Test
127+
void getTableTypesReturnsEveryXerialTableType() throws SQLException {
128+
LibsqlDatabaseMetaData metadata = new LibsqlDatabaseMetaData(new TableTypesConnection());
129+
130+
List<String> tableTypes = new ArrayList<>();
131+
try (ResultSet resultSet = metadata.getTableTypes()) {
132+
while (resultSet.next()) {
133+
tableTypes.add(resultSet.getString("TABLE_TYPE"));
134+
}
135+
}
136+
137+
assertThat(tableTypes)
138+
.containsExactlyInAnyOrder("TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY");
139+
}
140+
123141
@Test
124142
void getColumnsReportsDeclaredTypesSizesNullabilityAndAutoIncrement() throws SQLException {
125143
LibsqlDatabaseMetaData metadata = new LibsqlDatabaseMetaData(new StmtResultConnection(columnMetadataRows()));
@@ -223,6 +241,24 @@ public StmtResult executeStatement(Stmt stmt) {
223241
}
224242
}
225243

244+
private static final class TableTypesConnection extends LibsqlConnection {
245+
private static final Pattern TYPE_ROW = Pattern.compile("SELECT '([^']*)' AS TABLE_TYPE");
246+
247+
private TableTypesConnection() {
248+
super(null, null);
249+
}
250+
251+
@Override
252+
public StmtResult executeStatement(Stmt stmt) {
253+
List<Row> rows = new ArrayList<>();
254+
Matcher matcher = TYPE_ROW.matcher(stmt.sql());
255+
while (matcher.find()) {
256+
rows.add(new Row(List.of(Value.of(matcher.group(1)))));
257+
}
258+
return new StmtResult(List.of(new Col("TABLE_TYPE", "TEXT")), rows, 0, null);
259+
}
260+
}
261+
226262
private static final class RecordingConnection extends LibsqlConnection {
227263
private final StmtResult result;
228264
private String lastSql;

0 commit comments

Comments
 (0)