[jOOQ/jOOQ#16289] Fetch comments using jOOQ-meta query
The meta data isn't available from the JDBC driver yet, see: https://github.com/duckdb/duckdb/issues/10655
This commit is contained in:
parent
9c49ad7169
commit
95a039952e
@ -42,7 +42,6 @@ import static java.util.Arrays.asList;
|
||||
import static java.util.stream.Collectors.toList;
|
||||
import static org.jooq.Records.mapping;
|
||||
import static org.jooq.SQLDialect.DUCKDB;
|
||||
// ...
|
||||
import static org.jooq.impl.DSL.field;
|
||||
import static org.jooq.impl.DSL.inline;
|
||||
import static org.jooq.impl.DSL.row;
|
||||
@ -52,13 +51,13 @@ import static org.jooq.impl.SQLDataType.BOOLEAN;
|
||||
import static org.jooq.impl.SQLDataType.INTEGER;
|
||||
import static org.jooq.impl.SQLDataType.NUMERIC;
|
||||
import static org.jooq.impl.SQLDataType.VARCHAR;
|
||||
import static org.jooq.meta.duckdb.system.main.Tables.DUCKDB_COLUMNS;
|
||||
import static org.jooq.meta.duckdb.system.main.Tables.DUCKDB_CONSTRAINTS;
|
||||
import static org.jooq.meta.duckdb.system.main.Tables.DUCKDB_DATABASES;
|
||||
import static org.jooq.meta.duckdb.system.main.Tables.DUCKDB_SCHEMAS;
|
||||
import static org.jooq.meta.duckdb.system.main.Tables.DUCKDB_TABLES;
|
||||
import static org.jooq.meta.duckdb.system.main.Tables.DUCKDB_TYPES;
|
||||
import static org.jooq.meta.duckdb.system.main.Tables.DUCKDB_VIEWS;
|
||||
// ...
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.SQLException;
|
||||
@ -74,9 +73,8 @@ import org.jooq.Record5;
|
||||
import org.jooq.Record6;
|
||||
import org.jooq.ResultQuery;
|
||||
import org.jooq.SQLDialect;
|
||||
import org.jooq.Table;
|
||||
import org.jooq.TableOptions.TableType;
|
||||
// ...
|
||||
// ...
|
||||
import org.jooq.impl.DSL;
|
||||
import org.jooq.meta.AbstractDatabase;
|
||||
import org.jooq.meta.ArrayDefinition;
|
||||
@ -235,7 +233,41 @@ public class DuckDBDatabase extends AbstractDatabase implements ResultQueryDatab
|
||||
|
||||
@Override
|
||||
public ResultQuery<Record5<String, String, String, String, String>> comments(List<String> schemas) {
|
||||
return null;
|
||||
Table<?> t =
|
||||
select(
|
||||
DUCKDB_TABLES.DATABASE_NAME,
|
||||
DUCKDB_TABLES.SCHEMA_NAME,
|
||||
DUCKDB_TABLES.TABLE_NAME,
|
||||
inline(null, VARCHAR).as(DUCKDB_COLUMNS.COLUMN_NAME),
|
||||
DUCKDB_TABLES.COMMENT)
|
||||
.from("{0}()", DUCKDB_TABLES)
|
||||
.unionAll(
|
||||
select(
|
||||
DUCKDB_VIEWS.DATABASE_NAME,
|
||||
DUCKDB_VIEWS.SCHEMA_NAME,
|
||||
DUCKDB_VIEWS.VIEW_NAME,
|
||||
inline(null, VARCHAR).as(DUCKDB_COLUMNS.COLUMN_NAME),
|
||||
DUCKDB_VIEWS.COMMENT)
|
||||
.from("{0}()", DUCKDB_VIEWS))
|
||||
.unionAll(
|
||||
select(
|
||||
DUCKDB_COLUMNS.DATABASE_NAME,
|
||||
DUCKDB_COLUMNS.SCHEMA_NAME,
|
||||
DUCKDB_COLUMNS.TABLE_NAME,
|
||||
DUCKDB_COLUMNS.COLUMN_NAME,
|
||||
DUCKDB_COLUMNS.COMMENT)
|
||||
.from("{0}()", DUCKDB_COLUMNS))
|
||||
.asTable(DUCKDB_TABLES);
|
||||
|
||||
return create()
|
||||
.select(
|
||||
t.field(DUCKDB_TABLES.DATABASE_NAME),
|
||||
t.field(DUCKDB_TABLES.SCHEMA_NAME),
|
||||
t.field(DUCKDB_TABLES.TABLE_NAME),
|
||||
t.field(DUCKDB_COLUMNS.COLUMN_NAME),
|
||||
t.field(DUCKDB_TABLES.COMMENT))
|
||||
.from(t)
|
||||
.where(t.field(DUCKDB_TABLES.SCHEMA_NAME).in(schemas));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -346,6 +346,7 @@ final class MetaSQL {
|
||||
|
||||
|
||||
|
||||
M_COMMENTS.put(DUCKDB, "select duckdb_tables.database_name, duckdb_tables.schema_name, duckdb_tables.table_name, duckdb_tables.column_name, duckdb_tables.comment from (select duckdb_tables.database_name, duckdb_tables.schema_name, duckdb_tables.table_name, null column_name, duckdb_tables.comment from duckdb_tables() union all select duckdb_views.database_name, duckdb_views.schema_name, duckdb_views.view_name, null column_name, duckdb_views.comment from duckdb_views() union all select duckdb_columns.database_name, duckdb_columns.schema_name, duckdb_columns.table_name, duckdb_columns.column_name, duckdb_columns.comment from duckdb_columns()) duckdb_tables where duckdb_tables.schema_name in (cast(? as varchar))");
|
||||
M_COMMENTS.put(FIREBIRD, "select c.catalog, c.schema, c.RDB$RELATION_NAME, c.RDB$FIELD_NAME, c.RDB$DESCRIPTION from (select null catalog, null schema, trim(RDB$RELATIONS.RDB$RELATION_NAME) RDB$RELATION_NAME, null RDB$FIELD_NAME, trim(RDB$RELATIONS.RDB$DESCRIPTION) RDB$DESCRIPTION from RDB$RELATIONS where RDB$RELATIONS.RDB$DESCRIPTION is not null union all select null, null, RDB$RELATION_FIELDS.RDB$RELATION_NAME, RDB$RELATION_FIELDS.RDB$FIELD_NAME, RDB$RELATION_FIELDS.RDB$DESCRIPTION from RDB$RELATION_FIELDS where RDB$RELATION_FIELDS.RDB$DESCRIPTION is not null) c order by 1, 2, 3");
|
||||
M_COMMENTS.put(H2, "select c.TABLE_CATALOG, c.TABLE_SCHEMA, c.TABLE_NAME, c.COLUMN_NAME, c.REMARKS from (select INFORMATION_SCHEMA.TABLES.TABLE_CATALOG, INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA, INFORMATION_SCHEMA.TABLES.TABLE_NAME, null COLUMN_NAME, INFORMATION_SCHEMA.TABLES.REMARKS from INFORMATION_SCHEMA.TABLES where INFORMATION_SCHEMA.TABLES.REMARKS is not null union all select INFORMATION_SCHEMA.COLUMNS.TABLE_CATALOG, INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA, INFORMATION_SCHEMA.COLUMNS.TABLE_NAME, INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME, INFORMATION_SCHEMA.COLUMNS.REMARKS from INFORMATION_SCHEMA.COLUMNS where INFORMATION_SCHEMA.COLUMNS.REMARKS is not null) c where c.TABLE_SCHEMA in (cast(? as varchar)) order by 1, 2, 3, 4");
|
||||
M_COMMENTS.put(HSQLDB, "select c.TABLE_CAT, c.TABLE_SCHEM, c.TABLE_NAME, c.COLUMN_NAME, c.REMARKS from (select INFORMATION_SCHEMA.SYSTEM_TABLES.TABLE_CAT, INFORMATION_SCHEMA.SYSTEM_TABLES.TABLE_SCHEM, INFORMATION_SCHEMA.SYSTEM_TABLES.TABLE_NAME, null as COLUMN_NAME, INFORMATION_SCHEMA.SYSTEM_TABLES.REMARKS from INFORMATION_SCHEMA.SYSTEM_TABLES where INFORMATION_SCHEMA.SYSTEM_TABLES.REMARKS is not null union all select INFORMATION_SCHEMA.COLUMNS.TABLE_CATALOG, INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA, INFORMATION_SCHEMA.COLUMNS.TABLE_NAME, INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME, INFORMATION_SCHEMA.SYSTEM_COLUMNS.REMARKS from INFORMATION_SCHEMA.COLUMNS join INFORMATION_SCHEMA.SYSTEM_COLUMNS on (INFORMATION_SCHEMA.COLUMNS.TABLE_CATALOG = INFORMATION_SCHEMA.SYSTEM_COLUMNS.TABLE_CAT and INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA = INFORMATION_SCHEMA.SYSTEM_COLUMNS.TABLE_SCHEM and INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = INFORMATION_SCHEMA.SYSTEM_COLUMNS.TABLE_NAME and INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME = INFORMATION_SCHEMA.SYSTEM_COLUMNS.COLUMN_NAME) where INFORMATION_SCHEMA.SYSTEM_COLUMNS.REMARKS is not null) as c where c.TABLE_SCHEM in (cast(? as varchar(128))) order by 1, 2, 3, 4");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user