IBM Db2 Data Dictionary & SQL Catalog¶
from sqlspec.data_dictionary import get_data_dictionary_loader, get_dialect_config
config = get_dialect_config("db2")
Introspects IBM Db2 SYSCAT views (SYSCAT.TABLES, SYSCAT.COLUMNS, SYSCAT.INDEXES, SYSCAT.REFERENCES, SYSCAT.TABCONST, SYSCAT.VIEWS, SYSCAT.ROUTINES, SYSCAT.TRIGGERS, SYSCAT.SEQUENCES, SYSCAT.DATATYPES). See the IBM Db2 Guide and Data Dictionary Guide for usage examples.
Dialect Configuration¶
| Setting | Value |
|---|---|
| Dialect Name | db2 |
| Default Schema | None |
| Version Pattern | (?:v|V)?(\d+)\.(\d+)(?:\.(\d+))? |
| DDL Strategy | AST synthesis + SYSCAT catalog text definitions |
Catalog .sql Files |
9 files (16 named queries) |
Capabilities & Type Mappings¶
| Capability | Status / Minimum Version | Logical Type | Target Physical Type |
|---|---|---|---|
supports_for_update |
True |
bigint |
BIGINT |
supports_in_memory |
False |
blob |
BLOB |
supports_on_conflict |
False |
boolean |
BOOLEAN |
supports_prepared_statements |
True |
decimal |
DECIMAL(31, 10) |
supports_returning |
False |
float |
DOUBLE |
supports_schemas |
True |
integer |
INTEGER |
supports_sequences |
True |
json |
CLOB |
supports_skip_locked |
True |
text |
CLOB |
supports_transactions |
True |
timestamp |
TIMESTAMP |
supports_update_from |
False |
uuid |
VARCHAR(36) |
supports_cte |
>= 8.1.0 |
varchar |
VARCHAR(255) |
supports_generated_columns |
>= 8.1.0 |
- | - |
supports_window_functions |
>= 8.1.0 |
- | - |
Adapter Data Dictionary Classes¶
Db2SyncDataDictionary
¶
Bases: SyncDataDictionaryBase
IBM Db2 sync data dictionary for metadata reflection.
Initialize Db2 sync data dictionary.
Methods:
| Name | Description |
|---|---|
get_metadata_capabilities |
Get Db2 data-dictionary capability profile. |
get_version |
Get Db2 database version information. |
get_feature_flag |
Check whether Db2 supports a feature. |
get_optimal_type |
Get optimal Db2 type for a category. |
list_available_features |
List available feature flags for this dialect. |
get_tables |
Get tables sorted by dependency order with catalog fallback. |
get_columns |
Get columns for a table or schema from SYSCAT.COLUMNS. |
get_indexes |
Get indexes for a table or schema from SYSCAT.INDEXES and SYSCAT.INDEXCOLUSE. |
get_foreign_keys |
Get foreign keys from SYSCAT.REFERENCES and SYSCAT.KEYCOLUSE. |
get_constraints |
Get Db2 constraint metadata. |
get_views |
Get Db2 view metadata. |
get_objects |
Get tables, views, aliases, sequences and routines from the Db2 catalog. |
get_schemas |
Get Db2 schema metadata. |
Attributes:
| Name | Type | Description |
|---|---|---|
dialect |
str
|
|
get_metadata_capabilities
¶
get_metadata_capabilities(
driver: Db2SyncDriver, domains: Sequence[str] | None = None
) -> MetadataCapabilityProfile
Get Db2 data-dictionary capability profile.
get_version
¶
get_version(driver: Db2SyncDriver) -> Db2VersionInfo | None
Get Db2 database version information.
The instance service level is parsed once per driver and cached. Query errors propagate as mapped driver errors.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
driver
|
Db2SyncDriver
|
Db2 driver. |
required |
Returns:
| Type | Description |
|---|---|
Db2VersionInfo | None
|
The parsed version, or |
get_feature_flag
¶
get_feature_flag(driver: Db2SyncDriver, feature: str) -> bool
Check whether Db2 supports a feature.
get_optimal_type
¶
get_optimal_type(driver: Db2SyncDriver, type_category: str) -> str
Get optimal Db2 type for a category.
list_available_features
¶
List available feature flags for this dialect.
get_tables
¶
get_tables(
driver: Db2SyncDriver, schema: str | None = None
) -> list[TableMetadata]
Get tables sorted by dependency order with catalog fallback.
get_columns
¶
get_columns(
driver: Db2SyncDriver, table: str | None = None, schema: str | None = None
) -> list[ColumnMetadata]
Get columns for a table or schema from SYSCAT.COLUMNS.
get_indexes
¶
get_indexes(
driver: Db2SyncDriver, table: str | None = None, schema: str | None = None
) -> list[IndexMetadata]
Get indexes for a table or schema from SYSCAT.INDEXES and SYSCAT.INDEXCOLUSE.
get_foreign_keys
¶
get_foreign_keys(
driver: Db2SyncDriver, table: str | None = None, schema: str | None = None
) -> list[ForeignKeyMetadata]
Get foreign keys from SYSCAT.REFERENCES and SYSCAT.KEYCOLUSE.
get_constraints
¶
get_constraints(
driver: Db2SyncDriver, table: str | None = None, schema: str | None = None
) -> MetadataResult
Get Db2 constraint metadata.
get_views
¶
get_views(driver: Db2SyncDriver, schema: str | None = None) -> MetadataResult
Get Db2 view metadata.
get_objects
¶
get_objects(driver: Db2SyncDriver, schema: str | None = None) -> MetadataResult
Get tables, views, aliases, sequences and routines from the Db2 catalog.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
driver
|
Db2SyncDriver
|
Db2 driver. |
required |
schema
|
str | None
|
Schema to list; defaults to the session's |
None
|
Returns:
| Type | Description |
|---|---|
MetadataResult
|
Objects-domain metadata result. |
Db2AsyncDataDictionary
¶
Bases: AsyncDataDictionaryBase
IBM Db2 async data dictionary for metadata reflection.
Initialize Db2 async data dictionary.
Methods:
| Name | Description |
|---|---|
get_metadata_capabilities |
Get Db2 data-dictionary capability profile. |
get_version |
Get Db2 database version information. |
get_feature_flag |
Check whether Db2 supports a feature. |
get_optimal_type |
Get optimal Db2 type for a category. |
list_available_features |
List available feature flags for this dialect. |
get_tables |
Get tables sorted by dependency order with catalog fallback. |
get_columns |
Get columns for a table or schema from SYSCAT.COLUMNS. |
get_indexes |
Get indexes for a table or schema from SYSCAT.INDEXES and SYSCAT.INDEXCOLUSE. |
get_foreign_keys |
Get foreign keys from SYSCAT.REFERENCES and SYSCAT.KEYCOLUSE. |
get_constraints |
Get Db2 constraint metadata. |
get_views |
Get Db2 view metadata. |
get_objects |
Get tables, views, aliases, sequences and routines from the Db2 catalog. |
get_schemas |
Get Db2 schema metadata. |
Attributes:
| Name | Type | Description |
|---|---|---|
dialect |
str
|
|
get_metadata_capabilities
async
¶
get_metadata_capabilities(
driver: Db2AsyncDriver, domains: Sequence[str] | None = None
) -> MetadataCapabilityProfile
Get Db2 data-dictionary capability profile.
get_version
async
¶
get_version(driver: Db2AsyncDriver) -> Db2VersionInfo | None
Get Db2 database version information.
The instance service level is parsed once per driver and cached. Query errors propagate as mapped driver errors.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
driver
|
Db2AsyncDriver
|
Async Db2 driver. |
required |
Returns:
| Type | Description |
|---|---|
Db2VersionInfo | None
|
The parsed version, or |
get_feature_flag
async
¶
get_feature_flag(driver: Db2AsyncDriver, feature: str) -> bool
Check whether Db2 supports a feature.
get_optimal_type
async
¶
get_optimal_type(driver: Db2AsyncDriver, type_category: str) -> str
Get optimal Db2 type for a category.
list_available_features
¶
List available feature flags for this dialect.
get_tables
async
¶
get_tables(
driver: Db2AsyncDriver, schema: str | None = None
) -> list[TableMetadata]
Get tables sorted by dependency order with catalog fallback.
get_columns
async
¶
get_columns(
driver: Db2AsyncDriver, table: str | None = None, schema: str | None = None
) -> list[ColumnMetadata]
Get columns for a table or schema from SYSCAT.COLUMNS.
get_indexes
async
¶
get_indexes(
driver: Db2AsyncDriver, table: str | None = None, schema: str | None = None
) -> list[IndexMetadata]
Get indexes for a table or schema from SYSCAT.INDEXES and SYSCAT.INDEXCOLUSE.
get_foreign_keys
async
¶
get_foreign_keys(
driver: Db2AsyncDriver, table: str | None = None, schema: str | None = None
) -> list[ForeignKeyMetadata]
Get foreign keys from SYSCAT.REFERENCES and SYSCAT.KEYCOLUSE.
get_constraints
async
¶
get_constraints(
driver: Db2AsyncDriver, table: str | None = None, schema: str | None = None
) -> MetadataResult
Get Db2 constraint metadata.
get_views
async
¶
get_views(driver: Db2AsyncDriver, schema: str | None = None) -> MetadataResult
Get Db2 view metadata.
get_objects
async
¶
get_objects(
driver: Db2AsyncDriver, schema: str | None = None
) -> MetadataResult
Get tables, views, aliases, sequences and routines from the Db2 catalog.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
driver
|
Db2AsyncDriver
|
Async Db2 driver. |
required |
schema
|
str | None
|
Schema to list; defaults to the session's |
None
|
Returns:
| Type | Description |
|---|---|
MetadataResult
|
Objects-domain metadata result. |
Catalog SQL Queries¶
The db2 dialect pack defines 16 named queries across 9 domain .sql files loaded via DataDictionaryLoader (sqlspec/data_dictionary/dialects/db2/):
| Domain Pack | Named Queries | Bind Parameters |
|---|---|---|
columns.sql |
by_schema, by_table |
:schema_name, :table_name |
constraints.sql |
by_schema, by_table |
:schema_name, :table_name |
foreign_keys.sql |
by_schema, by_table |
:schema_name, :table_name |
indexes.sql |
by_schema, by_table |
:schema_name, :table_name |
objects.sql |
by_schema |
:object_name, :schema_name |
schemas.sql |
by_schema, current |
:schema_name |
tables.sql |
by_schema, all_by_schema, names_by_schema |
:schema_name, :table_name |
version.sql |
current |
none |
views.sql |
by_schema |
:schema_name, :view_name |
columns.sql (2 named queries)
-- name: by_schema
-- dialect: db2
WITH unique_single_cols AS (
SELECT DISTINCT
RTRIM(TABSCHEMA) AS TABSCHEMA,
RTRIM(TABNAME) AS TABNAME,
RTRIM(SUBSTR(COLNAMES, 2)) AS COLNAME
FROM SYSCAT.INDEXES
WHERE UNIQUERULE IN ('U', 'P')
AND COLCOUNT = 1
AND TABSCHEMA NOT LIKE 'SYS%'
AND TABSCHEMA NOT LIKE 'NULLID%'
AND TABSCHEMA NOT LIKE 'SQLJ%'
AND TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
AND (CAST(:table_name AS VARCHAR(128)) IS NULL OR TABNAME = :table_name)
)
SELECT
RTRIM(c.TABSCHEMA) AS schema_name,
RTRIM(c.TABNAME) AS table_name,
RTRIM(c.COLNAME) AS column_name,
RTRIM(c.TYPENAME) AS data_type,
CASE c.NULLS WHEN 'Y' THEN 1 ELSE 0 END AS is_nullable,
c.DEFAULT AS column_default,
c.COLNO + 1 AS ordinal_position,
c.LENGTH AS max_length,
c.SCALE AS numeric_scale,
CASE WHEN c.KEYSEQ IS NOT NULL AND c.KEYSEQ > 0 THEN 1 ELSE 0 END AS is_primary,
CASE WHEN u.COLNAME IS NOT NULL THEN 1 ELSE 0 END AS is_unique,
CASE
WHEN c.IDENTITY = 'Y' AND c.GENERATED = 'A' THEN 'ALWAYS'
WHEN c.IDENTITY = 'Y' AND c.GENERATED = 'D' THEN 'BY DEFAULT'
WHEN c.IDENTITY = 'Y' THEN 'BY DEFAULT'
ELSE NULL
END AS identity_generation,
CASE WHEN c.IDENTITY = 'Y' THEN 1 ELSE 0 END AS is_identity,
CASE WHEN c.GENERATED IN ('A', 'D') AND COALESCE(c.IDENTITY, 'N') <> 'Y' THEN 1 ELSE 0 END AS is_generated,
c.REMARKS AS column_comment
FROM SYSCAT.COLUMNS c
JOIN SYSCAT.TABLES t ON c.TABSCHEMA = t.TABSCHEMA AND c.TABNAME = t.TABNAME
LEFT JOIN unique_single_cols u
ON u.TABSCHEMA = RTRIM(c.TABSCHEMA)
AND u.TABNAME = RTRIM(c.TABNAME)
AND u.COLNAME = RTRIM(c.COLNAME)
WHERE c.TABSCHEMA NOT LIKE 'SYS%'
AND c.TABSCHEMA NOT LIKE 'NULLID%'
AND c.TABSCHEMA NOT LIKE 'SQLJ%'
AND c.TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
AND (CAST(:table_name AS VARCHAR(128)) IS NULL OR c.TABNAME = :table_name)
ORDER BY c.TABSCHEMA, c.TABNAME, c.COLNO;
-- name: by_table
-- dialect: db2
WITH unique_single_cols AS (
SELECT DISTINCT
RTRIM(TABSCHEMA) AS TABSCHEMA,
RTRIM(TABNAME) AS TABNAME,
RTRIM(SUBSTR(COLNAMES, 2)) AS COLNAME
FROM SYSCAT.INDEXES
WHERE UNIQUERULE IN ('U', 'P')
AND COLCOUNT = 1
AND TABSCHEMA NOT LIKE 'SYS%'
AND TABSCHEMA NOT LIKE 'NULLID%'
AND TABSCHEMA NOT LIKE 'SQLJ%'
AND TABNAME = :table_name
AND TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
)
SELECT
RTRIM(c.TABSCHEMA) AS schema_name,
RTRIM(c.TABNAME) AS table_name,
RTRIM(c.COLNAME) AS column_name,
RTRIM(c.TYPENAME) AS data_type,
CASE c.NULLS WHEN 'Y' THEN 1 ELSE 0 END AS is_nullable,
c.DEFAULT AS column_default,
c.COLNO + 1 AS ordinal_position,
c.LENGTH AS max_length,
c.SCALE AS numeric_scale,
CASE WHEN c.KEYSEQ IS NOT NULL AND c.KEYSEQ > 0 THEN 1 ELSE 0 END AS is_primary,
CASE WHEN u.COLNAME IS NOT NULL THEN 1 ELSE 0 END AS is_unique,
CASE
WHEN c.IDENTITY = 'Y' AND c.GENERATED = 'A' THEN 'ALWAYS'
WHEN c.IDENTITY = 'Y' AND c.GENERATED = 'D' THEN 'BY DEFAULT'
WHEN c.IDENTITY = 'Y' THEN 'BY DEFAULT'
ELSE NULL
END AS identity_generation,
CASE WHEN c.IDENTITY = 'Y' THEN 1 ELSE 0 END AS is_identity,
CASE WHEN c.GENERATED IN ('A', 'D') AND COALESCE(c.IDENTITY, 'N') <> 'Y' THEN 1 ELSE 0 END AS is_generated,
c.REMARKS AS column_comment
FROM SYSCAT.COLUMNS c
LEFT JOIN unique_single_cols u
ON u.TABSCHEMA = RTRIM(c.TABSCHEMA)
AND u.TABNAME = RTRIM(c.TABNAME)
AND u.COLNAME = RTRIM(c.COLNAME)
WHERE c.TABSCHEMA NOT LIKE 'SYS%'
AND c.TABSCHEMA NOT LIKE 'NULLID%'
AND c.TABSCHEMA NOT LIKE 'SQLJ%'
AND c.TABNAME = :table_name
AND c.TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
ORDER BY c.COLNO;
constraints.sql (2 named queries)
-- name: by_schema
-- dialect: db2
SELECT
RTRIM(tc.TABSCHEMA) AS schema_name,
RTRIM(tc.TABNAME) AS table_name,
RTRIM(tc.CONSTNAME) AS constraint_name,
CASE tc.TYPE
WHEN 'P' THEN 'PRIMARY KEY'
WHEN 'U' THEN 'UNIQUE'
WHEN 'F' THEN 'FOREIGN KEY'
WHEN 'K' THEN 'CHECK'
ELSE tc.TYPE
END AS constraint_type,
RTRIM(ck.TEXT) AS check_clause,
tc.ENFORCED AS is_enforced
FROM SYSCAT.TABCONST tc
LEFT JOIN SYSCAT.CHECKS ck
ON tc.TABSCHEMA = ck.TABSCHEMA AND tc.TABNAME = ck.TABNAME AND tc.CONSTNAME = ck.CONSTNAME
WHERE tc.TABSCHEMA NOT LIKE 'SYS%'
AND tc.TABSCHEMA NOT LIKE 'NULLID%'
AND tc.TABSCHEMA NOT LIKE 'SQLJ%'
AND tc.TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
AND (CAST(:table_name AS VARCHAR(128)) IS NULL OR tc.TABNAME = :table_name)
ORDER BY tc.TABSCHEMA, tc.TABNAME, tc.CONSTNAME;
-- name: by_table
-- dialect: db2
SELECT
RTRIM(tc.TABSCHEMA) AS schema_name,
RTRIM(tc.TABNAME) AS table_name,
RTRIM(tc.CONSTNAME) AS constraint_name,
CASE tc.TYPE
WHEN 'P' THEN 'PRIMARY KEY'
WHEN 'U' THEN 'UNIQUE'
WHEN 'F' THEN 'FOREIGN KEY'
WHEN 'K' THEN 'CHECK'
ELSE tc.TYPE
END AS constraint_type,
RTRIM(ck.TEXT) AS check_clause,
tc.ENFORCED AS is_enforced
FROM SYSCAT.TABCONST tc
LEFT JOIN SYSCAT.CHECKS ck
ON tc.TABSCHEMA = ck.TABSCHEMA AND tc.TABNAME = ck.TABNAME AND tc.CONSTNAME = ck.CONSTNAME
WHERE tc.TABSCHEMA NOT LIKE 'SYS%'
AND tc.TABSCHEMA NOT LIKE 'NULLID%'
AND tc.TABSCHEMA NOT LIKE 'SQLJ%'
AND tc.TABNAME = :table_name
AND tc.TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
ORDER BY tc.CONSTNAME;
foreign_keys.sql (2 named queries)
-- name: by_schema
-- dialect: db2
SELECT
RTRIM(r.TABSCHEMA) AS schema_name,
RTRIM(r.TABNAME) AS table_name,
RTRIM(r.CONSTNAME) AS constraint_name,
RTRIM(k.COLNAME) AS column_name,
RTRIM(r.REFTABSCHEMA) AS referenced_schema,
RTRIM(r.REFTABNAME) AS referenced_table,
RTRIM(refk.COLNAME) AS referenced_column
FROM SYSCAT.REFERENCES r
JOIN SYSCAT.KEYCOLUSE k
ON r.TABSCHEMA = k.TABSCHEMA AND r.CONSTNAME = k.CONSTNAME
JOIN SYSCAT.KEYCOLUSE refk
ON r.REFTABSCHEMA = refk.TABSCHEMA AND r.REFKEYNAME = refk.CONSTNAME AND k.COLSEQ = refk.COLSEQ
WHERE r.TABSCHEMA NOT LIKE 'SYS%'
AND r.TABSCHEMA NOT LIKE 'NULLID%'
AND r.TABSCHEMA NOT LIKE 'SQLJ%'
AND r.TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
AND (CAST(:table_name AS VARCHAR(128)) IS NULL OR r.TABNAME = :table_name)
ORDER BY r.TABSCHEMA, r.TABNAME, r.CONSTNAME, k.COLSEQ;
-- name: by_table
-- dialect: db2
SELECT
RTRIM(r.TABSCHEMA) AS schema_name,
RTRIM(r.TABNAME) AS table_name,
RTRIM(r.CONSTNAME) AS constraint_name,
RTRIM(k.COLNAME) AS column_name,
RTRIM(r.REFTABSCHEMA) AS referenced_schema,
RTRIM(r.REFTABNAME) AS referenced_table,
RTRIM(refk.COLNAME) AS referenced_column
FROM SYSCAT.REFERENCES r
JOIN SYSCAT.KEYCOLUSE k
ON r.TABSCHEMA = k.TABSCHEMA AND r.CONSTNAME = k.CONSTNAME
JOIN SYSCAT.KEYCOLUSE refk
ON r.REFTABSCHEMA = refk.TABSCHEMA AND r.REFKEYNAME = refk.CONSTNAME AND k.COLSEQ = refk.COLSEQ
WHERE r.TABSCHEMA NOT LIKE 'SYS%'
AND r.TABSCHEMA NOT LIKE 'NULLID%'
AND r.TABSCHEMA NOT LIKE 'SQLJ%'
AND r.TABNAME = :table_name
AND r.TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
ORDER BY r.CONSTNAME, k.COLSEQ;
indexes.sql (2 named queries)
-- name: by_schema
-- dialect: db2
SELECT
RTRIM(i.TABSCHEMA) AS schema_name,
RTRIM(i.TABNAME) AS table_name,
RTRIM(i.INDNAME) AS index_name,
RTRIM(c.COLNAME) AS column_name,
c.COLSEQ AS column_position,
CASE i.UNIQUERULE WHEN 'D' THEN 0 ELSE 1 END AS is_unique,
CASE i.UNIQUERULE WHEN 'P' THEN 1 ELSE 0 END AS is_primary
FROM SYSCAT.INDEXES i
JOIN SYSCAT.INDEXCOLUSE c
ON i.INDSCHEMA = c.INDSCHEMA AND i.INDNAME = c.INDNAME
WHERE i.TABSCHEMA NOT LIKE 'SYS%'
AND i.TABSCHEMA NOT LIKE 'NULLID%'
AND i.TABSCHEMA NOT LIKE 'SQLJ%'
AND i.TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
AND (CAST(:table_name AS VARCHAR(128)) IS NULL OR i.TABNAME = :table_name)
ORDER BY i.TABSCHEMA, i.TABNAME, i.INDNAME, c.COLSEQ;
-- name: by_table
-- dialect: db2
SELECT
RTRIM(i.TABSCHEMA) AS schema_name,
RTRIM(i.TABNAME) AS table_name,
RTRIM(i.INDNAME) AS index_name,
RTRIM(c.COLNAME) AS column_name,
c.COLSEQ AS column_position,
CASE i.UNIQUERULE WHEN 'D' THEN 0 ELSE 1 END AS is_unique,
CASE i.UNIQUERULE WHEN 'P' THEN 1 ELSE 0 END AS is_primary
FROM SYSCAT.INDEXES i
JOIN SYSCAT.INDEXCOLUSE c
ON i.INDSCHEMA = c.INDSCHEMA AND i.INDNAME = c.INDNAME
WHERE i.TABSCHEMA NOT LIKE 'SYS%'
AND i.TABSCHEMA NOT LIKE 'NULLID%'
AND i.TABSCHEMA NOT LIKE 'SQLJ%'
AND i.TABNAME = :table_name
AND i.TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
ORDER BY i.INDNAME, c.COLSEQ;
objects.sql (1 named queries)
-- name: by_schema
-- dialect: db2
SELECT schema_name, object_name, object_type, created, remarks
FROM (
SELECT
RTRIM(t.TABSCHEMA) AS schema_name,
RTRIM(t.TABNAME) AS object_name,
CASE t.TYPE
WHEN 'T' THEN 'TABLE'
WHEN 'V' THEN 'VIEW'
WHEN 'A' THEN 'ALIAS'
WHEN 'S' THEN 'MATERIALIZED QUERY TABLE'
WHEN 'N' THEN 'NICKNAME'
WHEN 'G' THEN 'CREATED TEMPORARY TABLE'
ELSE t.TYPE
END AS object_type,
t.CREATE_TIME AS created,
t.REMARKS AS remarks
FROM SYSCAT.TABLES t
WHERE t.TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
AND (CAST(:object_name AS VARCHAR(128)) IS NULL OR t.TABNAME = :object_name)
UNION ALL
SELECT
RTRIM(s.SEQSCHEMA) AS schema_name,
RTRIM(s.SEQNAME) AS object_name,
'SEQUENCE' AS object_type,
s.CREATE_TIME AS created,
s.REMARKS AS remarks
FROM SYSCAT.SEQUENCES s
WHERE s.SEQTYPE = 'S'
AND s.SEQSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
AND (CAST(:object_name AS VARCHAR(128)) IS NULL OR s.SEQNAME = :object_name)
UNION ALL
SELECT
RTRIM(r.ROUTINESCHEMA) AS schema_name,
RTRIM(r.ROUTINENAME) AS object_name,
CASE r.ROUTINETYPE
WHEN 'F' THEN 'FUNCTION'
WHEN 'P' THEN 'PROCEDURE'
WHEN 'M' THEN 'METHOD'
ELSE r.ROUTINETYPE
END AS object_type,
r.CREATE_TIME AS created,
r.REMARKS AS remarks
FROM SYSCAT.ROUTINES r
WHERE r.ROUTINESCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
AND (CAST(:object_name AS VARCHAR(128)) IS NULL OR r.ROUTINENAME = :object_name)
) objects
ORDER BY schema_name, object_type, object_name;
schemas.sql (2 named queries)
-- name: by_schema
-- dialect: db2
SELECT
RTRIM(s.SCHEMANAME) AS schema_name,
RTRIM(s.OWNER) AS owner_name,
s.CREATE_TIME AS create_time,
s.REMARKS AS comment
FROM SYSCAT.SCHEMATA s
WHERE s.SCHEMANAME NOT LIKE 'SYS%'
AND s.SCHEMANAME NOT LIKE 'NULLID%'
AND s.SCHEMANAME NOT LIKE 'SQLJ%'
AND (:schema_name IS NULL OR s.SCHEMANAME = :schema_name)
ORDER BY s.SCHEMANAME;
-- name: current
-- dialect: db2
VALUES CURRENT SCHEMA;
tables.sql (3 named queries)
-- name: by_schema
-- dialect: db2
WITH dependency_tree (schema_name, table_name, level, path) AS (
SELECT
RTRIM(t.TABSCHEMA) AS schema_name,
RTRIM(t.TABNAME) AS table_name,
0 AS level,
VARCHAR('/' || RTRIM(t.TABSCHEMA) || '.' || RTRIM(t.TABNAME) || '/', 2000) AS path
FROM SYSCAT.TABLES t
WHERE t.TYPE = 'T'
AND t.TABSCHEMA NOT LIKE 'SYS%'
AND t.TABSCHEMA NOT LIKE 'NULLID%'
AND t.TABSCHEMA NOT LIKE 'SQLJ%'
AND t.TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
AND (CAST(:table_name AS VARCHAR(128)) IS NULL OR t.TABNAME = :table_name)
AND NOT EXISTS (
SELECT 1
FROM SYSCAT.REFERENCES r
WHERE r.TABSCHEMA = t.TABSCHEMA
AND r.TABNAME = t.TABNAME
AND (r.REFTABSCHEMA <> t.TABSCHEMA OR r.REFTABNAME <> t.TABNAME)
)
UNION ALL
SELECT
RTRIM(child.TABSCHEMA) AS schema_name,
RTRIM(child.TABNAME) AS table_name,
dt.level + 1 AS level,
VARCHAR(dt.path || RTRIM(child.TABSCHEMA) || '.' || RTRIM(child.TABNAME) || '/', 2000) AS path
FROM SYSCAT.REFERENCES r, SYSCAT.TABLES child, dependency_tree dt
WHERE r.TABSCHEMA = child.TABSCHEMA
AND r.TABNAME = child.TABNAME
AND r.REFTABSCHEMA = dt.schema_name
AND r.REFTABNAME = dt.table_name
AND (r.REFTABSCHEMA <> child.TABSCHEMA OR r.REFTABNAME <> child.TABNAME)
AND child.TYPE = 'T'
AND child.TABSCHEMA NOT LIKE 'SYS%'
AND child.TABSCHEMA NOT LIKE 'NULLID%'
AND child.TABSCHEMA NOT LIKE 'SQLJ%'
AND child.TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
AND (CAST(:table_name AS VARCHAR(128)) IS NULL OR child.TABNAME = :table_name)
AND LOCATE('/' || RTRIM(child.TABSCHEMA) || '.' || RTRIM(child.TABNAME) || '/', dt.path) = 0
)
SELECT
dt.schema_name,
dt.table_name,
'BASE TABLE' AS table_type,
MAX(dt.level) AS dependency_level,
MAX(dt.level) AS level
FROM dependency_tree dt
GROUP BY dt.schema_name, dt.table_name
ORDER BY dependency_level, dt.schema_name, dt.table_name;
-- name: all_by_schema
-- dialect: db2
SELECT
RTRIM(t.TABSCHEMA) AS schema_name,
RTRIM(t.TABNAME) AS table_name,
CASE t.TYPE
WHEN 'T' THEN 'BASE TABLE'
WHEN 'V' THEN 'VIEW'
WHEN 'A' THEN 'ALIAS'
WHEN 'N' THEN 'NICKNAME'
ELSE 'TABLE'
END AS table_type,
0 AS dependency_level,
0 AS level,
t.CARD AS estimated_row_count,
t.REMARKS AS table_comment
FROM SYSCAT.TABLES t
WHERE t.TABSCHEMA NOT LIKE 'SYS%'
AND t.TABSCHEMA NOT LIKE 'NULLID%'
AND t.TABSCHEMA NOT LIKE 'SQLJ%'
AND t.TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
AND (CAST(:table_name AS VARCHAR(128)) IS NULL OR t.TABNAME = :table_name)
ORDER BY t.TABSCHEMA, t.TABNAME;
-- name: names_by_schema
-- dialect: db2
SELECT
RTRIM(t.TABNAME) AS table_name
FROM SYSCAT.TABLES t
WHERE t.TYPE = 'T'
AND t.TABSCHEMA NOT LIKE 'SYS%'
AND t.TABSCHEMA NOT LIKE 'NULLID%'
AND t.TABSCHEMA NOT LIKE 'SQLJ%'
AND t.TABSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
ORDER BY t.TABNAME;
version.sql (1 named queries)
views.sql (1 named queries)
-- name: by_schema
-- dialect: db2
SELECT
RTRIM(v.VIEWSCHEMA) AS schema_name,
RTRIM(v.VIEWNAME) AS view_name,
v.TEXT AS definition,
CASE v.READONLY WHEN 'Y' THEN 1 ELSE 0 END AS is_read_only,
CASE v.VALID WHEN 'Y' THEN 1 ELSE 0 END AS is_valid
FROM SYSCAT.VIEWS v
WHERE v.VIEWSCHEMA NOT LIKE 'SYS%'
AND v.VIEWSCHEMA NOT LIKE 'NULLID%'
AND v.VIEWSCHEMA NOT LIKE 'SQLJ%'
AND v.VIEWSCHEMA = COALESCE(CAST(:schema_name AS VARCHAR(128)), CURRENT SCHEMA)
AND (CAST(:view_name AS VARCHAR(128)) IS NULL OR v.VIEWNAME = :view_name)
ORDER BY v.VIEWSCHEMA, v.VIEWNAME;