|
11 | 11 | import java.sql.ResultSet; |
12 | 12 | import java.sql.SQLException; |
13 | 13 | import java.sql.Types; |
| 14 | +import java.util.ArrayList; |
14 | 15 | import java.util.List; |
| 16 | +import java.util.regex.Matcher; |
| 17 | +import java.util.regex.Pattern; |
15 | 18 |
|
16 | 19 | import static org.assertj.core.api.Assertions.assertThat; |
17 | 20 |
|
@@ -120,6 +123,21 @@ void getTablesWithEmptyTableNamePatternMatchesEverything() throws SQLException { |
120 | 123 | assertThat(connection.lastSql).contains("TABLE_NAME LIKE '%'"); |
121 | 124 | } |
122 | 125 |
|
| 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 | + |
123 | 141 | @Test |
124 | 142 | void getColumnsReportsDeclaredTypesSizesNullabilityAndAutoIncrement() throws SQLException { |
125 | 143 | LibsqlDatabaseMetaData metadata = new LibsqlDatabaseMetaData(new StmtResultConnection(columnMetadataRows())); |
@@ -223,6 +241,24 @@ public StmtResult executeStatement(Stmt stmt) { |
223 | 241 | } |
224 | 242 | } |
225 | 243 |
|
| 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 | + |
226 | 262 | private static final class RecordingConnection extends LibsqlConnection { |
227 | 263 | private final StmtResult result; |
228 | 264 | private String lastSql; |
|
0 commit comments