11from databricks .sql .backend .sea .utils .result_column import ResultColumn
2- from databricks .sql .backend .sea .utils .metadata_transformations import (
3- transform_table_type ,
4- transform_is_nullable ,
5- transform_nullable_to_int ,
6- transform_remarks_default ,
7- transform_numeric_default_zero ,
8- transform_ordinal_position_offset ,
9- calculate_data_type ,
10- calculate_buffer_length ,
11- always_null ,
12- always_null_int ,
13- always_null_smallint ,
14- identity ,
15- )
162
173
184class MetadataColumnMappings :
195"""Column mappings for metadata queries following JDBC specification."""
206
217# Common columns used across multiple metadata queries
228# FIX 1: Catalog columns - swap the mappings
23- CATALOG_COLUMN = ResultColumn (
24- "TABLE_CAT" ,"catalogName" ,"string" ,transform_value = identity
25- )
26- CATALOG_COLUMN_FOR_GET_CATALOGS = ResultColumn (
27- "TABLE_CAT" ,"catalog" ,"string" ,transform_value = identity
28- )
9+ CATALOG_COLUMN = ResultColumn ("TABLE_CAT" ,"catalogName" ,"string" )
10+ CATALOG_COLUMN_FOR_GET_CATALOGS = ResultColumn ("TABLE_CAT" ,"catalog" ,"string" )
2911# Remove CATALOG_COLUMN_FOR_TABLES - will use CATALOG_COLUMN instead
3012
31- SCHEMA_COLUMN = ResultColumn (
32- "TABLE_SCHEM" ,"namespace" ,"string" ,transform_value = identity
33- )
34- SCHEMA_COLUMN_FOR_GET_SCHEMA = ResultColumn (
35- "TABLE_SCHEM" ,"databaseName" ,"string" ,transform_value = identity
36- )
37- TABLE_NAME_COLUMN = ResultColumn (
38- "TABLE_NAME" ,"tableName" ,"string" ,transform_value = identity
39- )
40- TABLE_TYPE_COLUMN = ResultColumn (
41- "TABLE_TYPE" ,"tableType" ,"string" ,transform_value = transform_table_type
42- )
43- REMARKS_COLUMN = ResultColumn (
44- "REMARKS" ,"remarks" ,"string" ,transform_value = transform_remarks_default
45- )
13+ SCHEMA_COLUMN = ResultColumn ("TABLE_SCHEM" ,"namespace" ,"string" )
14+ SCHEMA_COLUMN_FOR_GET_SCHEMA = ResultColumn ("TABLE_SCHEM" ,"databaseName" ,"string" )
15+ TABLE_NAME_COLUMN = ResultColumn ("TABLE_NAME" ,"tableName" ,"string" )
16+ TABLE_TYPE_COLUMN = ResultColumn ("TABLE_TYPE" ,"tableType" ,"string" )
17+ REMARKS_COLUMN = ResultColumn ("REMARKS" ,"remarks" ,"string" )
4618
4719# Columns specific to getColumns()
48- COLUMN_NAME_COLUMN = ResultColumn (
49- "COLUMN_NAME" ,"col_name" ,"string" ,transform_value = identity
50- )
20+ COLUMN_NAME_COLUMN = ResultColumn ("COLUMN_NAME" ,"col_name" ,"string" )
5121DATA_TYPE_COLUMN = ResultColumn (
52- "DATA_TYPE" ,None ,"int" , transform_value = calculate_data_type
22+ "DATA_TYPE" ,None ,"int"
5323 )# Calculated from columnType
54- TYPE_NAME_COLUMN = ResultColumn (
55- "TYPE_NAME" ,"columnType" ,"string" ,transform_value = identity
56- )
24+ TYPE_NAME_COLUMN = ResultColumn ("TYPE_NAME" ,"columnType" ,"string" )
5725
5826# FIX 5: SEA actually provides these columns
59- COLUMN_SIZE_COLUMN = ResultColumn (
60- "COLUMN_SIZE" ,"columnSize" ,"int" ,transform_value = identity
61- )
27+ COLUMN_SIZE_COLUMN = ResultColumn ("COLUMN_SIZE" ,"columnSize" ,"int" )
6228DECIMAL_DIGITS_COLUMN = ResultColumn (
6329"DECIMAL_DIGITS" ,
6430"decimalDigits" ,
6531"int" ,
66- transform_value = transform_numeric_default_zero ,
67- )
68- NUM_PREC_RADIX_COLUMN = ResultColumn (
69- "NUM_PREC_RADIX" ,"radix" ,"int" ,transform_value = transform_numeric_default_zero
7032 )
33+ NUM_PREC_RADIX_COLUMN = ResultColumn ("NUM_PREC_RADIX" ,"radix" ,"int" )
7134ORDINAL_POSITION_COLUMN = ResultColumn (
7235"ORDINAL_POSITION" ,
7336"ordinalPosition" ,
7437"int" ,
75- transform_value = transform_ordinal_position_offset ,
7638 )
7739
7840NULLABLE_COLUMN = ResultColumn (
79- "NULLABLE" ,None ,"int" , transform_value = transform_nullable_to_int
41+ "NULLABLE" ,None ,"int"
8042 )# Calculated from isNullable
8143COLUMN_DEF_COLUMN = ResultColumn (
82- "COLUMN_DEF" ,"columnType" ,"string" , transform_value = identity
44+ "COLUMN_DEF" ,"columnType" ,"string"
8345 )# Note: duplicate mapping
84- SQL_DATA_TYPE_COLUMN = ResultColumn (
85- "SQL_DATA_TYPE" ,None ,"int" ,transform_value = always_null_int
86- )
87- SQL_DATETIME_SUB_COLUMN = ResultColumn (
88- "SQL_DATETIME_SUB" ,None ,"int" ,transform_value = always_null_int
89- )
90- CHAR_OCTET_LENGTH_COLUMN = ResultColumn (
91- "CHAR_OCTET_LENGTH" ,None ,"int" ,transform_value = always_null_int
92- )
93- IS_NULLABLE_COLUMN = ResultColumn (
94- "IS_NULLABLE" ,"isNullable" ,"string" ,transform_value = transform_is_nullable
95- )
46+ SQL_DATA_TYPE_COLUMN = ResultColumn ("SQL_DATA_TYPE" ,None ,"int" )
47+ SQL_DATETIME_SUB_COLUMN = ResultColumn ("SQL_DATETIME_SUB" ,None ,"int" )
48+ CHAR_OCTET_LENGTH_COLUMN = ResultColumn ("CHAR_OCTET_LENGTH" ,None ,"int" )
49+ IS_NULLABLE_COLUMN = ResultColumn ("IS_NULLABLE" ,"isNullable" ,"string" )
9650
9751# Columns for getTables() that don't exist in SEA
98- TYPE_CAT_COLUMN = ResultColumn (
99- "TYPE_CAT" ,None ,"string" ,transform_value = always_null
100- )
101- TYPE_SCHEM_COLUMN = ResultColumn (
102- "TYPE_SCHEM" ,None ,"string" ,transform_value = always_null
103- )
104- TYPE_NAME_COLUMN = ResultColumn (
105- "TYPE_NAME" ,None ,"string" ,transform_value = always_null
106- )
52+ TYPE_CAT_COLUMN = ResultColumn ("TYPE_CAT" ,None ,"string" )
53+ TYPE_SCHEM_COLUMN = ResultColumn ("TYPE_SCHEM" ,None ,"string" )
54+ TYPE_NAME_COLUMN = ResultColumn ("TYPE_NAME" ,None ,"string" )
10755SELF_REFERENCING_COL_NAME_COLUMN = ResultColumn (
108- "SELF_REFERENCING_COL_NAME" ,None ,"string" ,transform_value = always_null
109- )
110- REF_GENERATION_COLUMN = ResultColumn (
111- "REF_GENERATION" ,None ,"string" ,transform_value = always_null
56+ "SELF_REFERENCING_COL_NAME" ,None ,"string"
11257 )
58+ REF_GENERATION_COLUMN = ResultColumn ("REF_GENERATION" ,None ,"string" )
11359
11460# FIX 8: Scope columns (always null per JDBC)
115- SCOPE_CATALOG_COLUMN = ResultColumn (
116- "SCOPE_CATALOG" ,None ,"string" ,transform_value = always_null
117- )
118- SCOPE_SCHEMA_COLUMN = ResultColumn (
119- "SCOPE_SCHEMA" ,None ,"string" ,transform_value = always_null
120- )
121- SCOPE_TABLE_COLUMN = ResultColumn (
122- "SCOPE_TABLE" ,None ,"string" ,transform_value = always_null
123- )
124- SOURCE_DATA_TYPE_COLUMN = ResultColumn (
125- "SOURCE_DATA_TYPE" ,None ,"smallint" ,transform_value = always_null_smallint
126- )
61+ SCOPE_CATALOG_COLUMN = ResultColumn ("SCOPE_CATALOG" ,None ,"string" )
62+ SCOPE_SCHEMA_COLUMN = ResultColumn ("SCOPE_SCHEMA" ,None ,"string" )
63+ SCOPE_TABLE_COLUMN = ResultColumn ("SCOPE_TABLE" ,None ,"string" )
64+ SOURCE_DATA_TYPE_COLUMN = ResultColumn ("SOURCE_DATA_TYPE" ,None ,"smallint" )
12765
12866# FIX 9 & 10: Auto increment and generated columns
12967IS_AUTO_INCREMENT_COLUMN = ResultColumn (
130- "IS_AUTOINCREMENT" ,"isAutoIncrement" ,"string" , transform_value = identity
68+ "IS_AUTOINCREMENT" ,"isAutoIncrement" ,"string"
13169 )# No underscore!
13270IS_GENERATED_COLUMN = ResultColumn (
133- "IS_GENERATEDCOLUMN" ,"isGenerated" ,"string" , transform_value = identity
71+ "IS_GENERATEDCOLUMN" ,"isGenerated" ,"string"
13472 )# SEA provides this
13573
13674# FIX 11: Buffer length column
13775BUFFER_LENGTH_COLUMN = ResultColumn (
138- "BUFFER_LENGTH" ,None ,"int" , transform_value = always_null_int
76+ "BUFFER_LENGTH" ,None ,"int"
13977 )# Always null per JDBC
14078
14179# Column lists for each metadata operation
@@ -144,7 +82,7 @@ class MetadataColumnMappings:
14482SCHEMA_COLUMNS = [
14583SCHEMA_COLUMN_FOR_GET_SCHEMA ,
14684ResultColumn (
147- "TABLE_CATALOG" ,None ,"string" , transform_value = always_null
85+ "TABLE_CATALOG" ,None ,"string"
14886 ),# Will need special population logic
14987 ]
15088