Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,11 @@ public ResultSet getPrimaryKeys(String catalog, String schema, String table) thr

@Override
public ResultSet getTableTypes() throws SQLException {
return executeMetadataQuery("SELECT 'TABLE' AS TABLE_TYPE UNION SELECT 'VIEW' AS TABLE_TYPE");
return executeMetadataQuery(
"SELECT 'TABLE' AS TABLE_TYPE "
+ "UNION SELECT 'VIEW' AS TABLE_TYPE "
+ "UNION SELECT 'SYSTEM TABLE' AS TABLE_TYPE "
+ "UNION SELECT 'GLOBAL TEMPORARY' AS TABLE_TYPE");
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

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

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

@Test
void getTableTypesReturnsEveryXerialTableType() throws SQLException {
LibsqlDatabaseMetaData metadata = new LibsqlDatabaseMetaData(new TableTypesConnection());

List<String> tableTypes = new ArrayList<>();
try (ResultSet resultSet = metadata.getTableTypes()) {
while (resultSet.next()) {
tableTypes.add(resultSet.getString("TABLE_TYPE"));
}
}

assertThat(tableTypes)
.containsExactlyInAnyOrder("TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY");
}

@Test
void getColumnsReportsDeclaredTypesSizesNullabilityAndAutoIncrement() throws SQLException {
LibsqlDatabaseMetaData metadata = new LibsqlDatabaseMetaData(new StmtResultConnection(columnMetadataRows()));
Expand Down Expand Up @@ -223,6 +241,24 @@ public StmtResult executeStatement(Stmt stmt) {
}
}

private static final class TableTypesConnection extends LibsqlConnection {
private static final Pattern TYPE_ROW = Pattern.compile("SELECT '([^']*)' AS TABLE_TYPE");

private TableTypesConnection() {
super(null, null);
}

@Override
public StmtResult executeStatement(Stmt stmt) {
List<Row> rows = new ArrayList<>();
Matcher matcher = TYPE_ROW.matcher(stmt.sql());
while (matcher.find()) {
rows.add(new Row(List.of(Value.of(matcher.group(1)))));
}
return new StmtResult(List.of(new Col("TABLE_TYPE", "TEXT")), rows, 0, null);
}
}

private static final class RecordingConnection extends LibsqlConnection {
private final StmtResult result;
private String lastSql;
Expand Down
Loading