sql-dialect-master 1.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. backend/__init__.py +1 -0
  2. backend/api/__init__.py +1 -0
  3. backend/api/main.py +732 -0
  4. backend/api/middleware.py +274 -0
  5. backend/api/rate_limit_store.py +105 -0
  6. backend/api/readiness.py +178 -0
  7. backend/core/__init__.py +57 -0
  8. backend/core/cache.py +261 -0
  9. backend/core/column_hint_validation.py +22 -0
  10. backend/core/config.py +546 -0
  11. backend/core/constants.py +84 -0
  12. backend/core/exceptions.py +124 -0
  13. backend/core/function_call_scanner.py +64 -0
  14. backend/core/function_semantics.py +148 -0
  15. backend/core/functions_db.json +601 -0
  16. backend/core/functions_lookup.py +332 -0
  17. backend/core/metadata.py +71 -0
  18. backend/core/nl2sql.py +85 -0
  19. backend/core/nl2sql_components/__init__.py +72 -0
  20. backend/core/nl2sql_components/aggregations.py +35 -0
  21. backend/core/nl2sql_components/boolean_conditions.py +279 -0
  22. backend/core/nl2sql_components/core_extract.py +106 -0
  23. backend/core/nl2sql_components/evidence.py +122 -0
  24. backend/core/nl2sql_components/mappings.py +185 -0
  25. backend/core/nl2sql_components/relations.py +180 -0
  26. backend/core/nl2sql_components/templates.py +130 -0
  27. backend/core/nl2sql_components/tokenizer.py +187 -0
  28. backend/core/nl2sql_legacy.py +22 -0
  29. backend/core/nl2sql_pipeline/__init__.py +13 -0
  30. backend/core/nl2sql_pipeline/aggregations.py +26 -0
  31. backend/core/nl2sql_pipeline/clause_extract.py +97 -0
  32. backend/core/nl2sql_pipeline/dialect.py +139 -0
  33. backend/core/nl2sql_pipeline/intent.py +85 -0
  34. backend/core/nl2sql_pipeline/ir.py +70 -0
  35. backend/core/nl2sql_pipeline/models.py +30 -0
  36. backend/core/nl2sql_pipeline/orchestrator.py +576 -0
  37. backend/core/nl2sql_pipeline/predicates.py +182 -0
  38. backend/core/nl2sql_pipeline/renderer.py +248 -0
  39. backend/core/nl2sql_pipeline/resolution.py +69 -0
  40. backend/core/nl2sql_pipeline/suggestions.py +30 -0
  41. backend/core/nl2sql_pipeline/templates.py +371 -0
  42. backend/core/nl2sql_pipeline/validation.py +28 -0
  43. backend/core/p1_sql_scanner.py +196 -0
  44. backend/core/p2_data_validation.py +72 -0
  45. backend/core/parser.py +280 -0
  46. backend/core/post_processor.py +129 -0
  47. backend/core/rules.py +808 -0
  48. backend/core/semantic_diff.py +385 -0
  49. backend/core/transpiler.py +791 -0
  50. backend/core/type_mapping.json +593 -0
  51. backend/core/type_mapping.py +765 -0
  52. backend/utils/__init__.py +2 -0
  53. backend/utils/validators.py +407 -0
  54. frontend/__init__.py +10 -0
  55. frontend/app_context_v2.py +201 -0
  56. frontend/core/__init__.py +33 -0
  57. frontend/core/design_tokens.py +127 -0
  58. frontend/core/escaping.py +13 -0
  59. frontend/core/navigation.py +135 -0
  60. frontend/core/state.py +612 -0
  61. frontend/core/styles.py +523 -0
  62. frontend/core/themes.py +69 -0
  63. frontend/core/viewmodels.py +499 -0
  64. frontend/pages/__init__.py +0 -0
  65. frontend/pages/convert.py +283 -0
  66. frontend/pages/diff.py +157 -0
  67. frontend/pages/functions.py +100 -0
  68. frontend/pages/history.py +144 -0
  69. frontend/pages/lineage.py +168 -0
  70. frontend/pages/nl2sql.py +305 -0
  71. frontend/pages/query_analysis.py +120 -0
  72. frontend/pages/runtime.py +66 -0
  73. frontend/pages/settings.py +60 -0
  74. frontend/pages/templates.py +67 -0
  75. frontend/pages/types.py +110 -0
  76. frontend/templates_v2.py +53 -0
  77. frontend/ui/__init__.py +0 -0
  78. frontend/ui/command_palette.py +153 -0
  79. frontend/ui/diff.py +275 -0
  80. frontend/ui/editor.py +102 -0
  81. frontend/ui/status.py +255 -0
  82. sql_dialect_master-1.1.1.dist-info/METADATA +360 -0
  83. sql_dialect_master-1.1.1.dist-info/RECORD +86 -0
  84. sql_dialect_master-1.1.1.dist-info/WHEEL +5 -0
  85. sql_dialect_master-1.1.1.dist-info/licenses/LICENSE +21 -0
  86. sql_dialect_master-1.1.1.dist-info/top_level.txt +2 -0
@@ -0,0 +1,593 @@
1
+ {
2
+ "dialects": [
3
+ "hive",
4
+ "mysql",
5
+ "oracle",
6
+ "tsql",
7
+ "postgres",
8
+ "spark",
9
+ "trino",
10
+ "snowflake",
11
+ "redshift",
12
+ "clickhouse",
13
+ "duckdb",
14
+ "databricks"
15
+ ],
16
+ "mappings": {
17
+ "STRING": {
18
+ "hive": "STRING",
19
+ "mysql": "LONGTEXT",
20
+ "oracle": "CLOB",
21
+ "tsql": "NVARCHAR(MAX)",
22
+ "postgres": "TEXT",
23
+ "spark": "STRING",
24
+ "trino": "VARCHAR",
25
+ "snowflake": "VARCHAR",
26
+ "redshift": "VARCHAR(65535)",
27
+ "clickhouse": "String",
28
+ "duckdb": "VARCHAR",
29
+ "databricks": "STRING"
30
+ },
31
+ "VARCHAR": {
32
+ "hive": "VARCHAR(n)",
33
+ "mysql": "VARCHAR(n)",
34
+ "oracle": "VARCHAR2(n)",
35
+ "tsql": "NVARCHAR(n)",
36
+ "postgres": "VARCHAR(n)",
37
+ "spark": "VARCHAR(n)",
38
+ "trino": "VARCHAR(n)",
39
+ "snowflake": "VARCHAR(n)",
40
+ "redshift": "VARCHAR(n)",
41
+ "clickhouse": "String",
42
+ "duckdb": "VARCHAR(n)",
43
+ "databricks": "VARCHAR(n)"
44
+ },
45
+ "CHAR": {
46
+ "hive": "CHAR(n)",
47
+ "mysql": "CHAR(n)",
48
+ "oracle": "CHAR(n)",
49
+ "tsql": "CHAR(n)",
50
+ "postgres": "CHAR(n)",
51
+ "spark": "CHAR(n)",
52
+ "trino": "CHAR(n)",
53
+ "snowflake": "CHAR(n)",
54
+ "redshift": "CHAR(n)",
55
+ "clickhouse": "FixedString(n)",
56
+ "duckdb": "CHAR(n)",
57
+ "databricks": "CHAR(n)"
58
+ },
59
+ "BIGINT": {
60
+ "hive": "BIGINT",
61
+ "mysql": "BIGINT",
62
+ "oracle": "NUMBER(19)",
63
+ "tsql": "BIGINT",
64
+ "postgres": "BIGINT",
65
+ "spark": "BIGINT",
66
+ "trino": "BIGINT",
67
+ "snowflake": "NUMBER(38,0)",
68
+ "redshift": "BIGINT",
69
+ "clickhouse": "Int64",
70
+ "duckdb": "BIGINT",
71
+ "databricks": "BIGINT"
72
+ },
73
+ "INT": {
74
+ "hive": "INT",
75
+ "mysql": "INT",
76
+ "oracle": "NUMBER(10)",
77
+ "tsql": "INT",
78
+ "postgres": "INTEGER",
79
+ "spark": "INT",
80
+ "trino": "INTEGER",
81
+ "snowflake": "NUMBER(10,0)",
82
+ "redshift": "INTEGER",
83
+ "clickhouse": "Int32",
84
+ "duckdb": "INTEGER",
85
+ "databricks": "INT"
86
+ },
87
+ "SMALLINT": {
88
+ "hive": "SMALLINT",
89
+ "mysql": "SMALLINT",
90
+ "oracle": "NUMBER(5)",
91
+ "tsql": "SMALLINT",
92
+ "postgres": "SMALLINT",
93
+ "spark": "SMALLINT",
94
+ "trino": "SMALLINT",
95
+ "snowflake": "NUMBER(5,0)",
96
+ "redshift": "SMALLINT",
97
+ "clickhouse": "Int16",
98
+ "duckdb": "SMALLINT",
99
+ "databricks": "SMALLINT"
100
+ },
101
+ "TINYINT": {
102
+ "hive": "TINYINT",
103
+ "mysql": "TINYINT",
104
+ "oracle": "NUMBER(3)",
105
+ "tsql": "TINYINT",
106
+ "postgres": "SMALLINT",
107
+ "spark": "TINYINT",
108
+ "trino": "TINYINT",
109
+ "snowflake": "NUMBER(3,0)",
110
+ "redshift": "SMALLINT",
111
+ "clickhouse": "Int8",
112
+ "duckdb": "TINYINT",
113
+ "databricks": "TINYINT"
114
+ },
115
+ "DOUBLE": {
116
+ "hive": "DOUBLE",
117
+ "mysql": "DOUBLE",
118
+ "oracle": "BINARY_DOUBLE",
119
+ "tsql": "FLOAT",
120
+ "postgres": "DOUBLE PRECISION",
121
+ "spark": "DOUBLE",
122
+ "trino": "DOUBLE",
123
+ "snowflake": "DOUBLE",
124
+ "redshift": "DOUBLE PRECISION",
125
+ "clickhouse": "Float64",
126
+ "duckdb": "DOUBLE",
127
+ "databricks": "DOUBLE"
128
+ },
129
+ "FLOAT": {
130
+ "hive": "FLOAT",
131
+ "mysql": "FLOAT",
132
+ "oracle": "BINARY_FLOAT",
133
+ "tsql": "REAL",
134
+ "postgres": "REAL",
135
+ "spark": "FLOAT",
136
+ "trino": "REAL",
137
+ "snowflake": "FLOAT",
138
+ "redshift": "REAL",
139
+ "clickhouse": "Float32",
140
+ "duckdb": "FLOAT",
141
+ "databricks": "FLOAT"
142
+ },
143
+ "DECIMAL": {
144
+ "hive": "DECIMAL(p,s)",
145
+ "mysql": "DECIMAL(p,s)",
146
+ "oracle": "NUMBER(p,s)",
147
+ "tsql": "DECIMAL(p,s)",
148
+ "postgres": "NUMERIC(p,s)",
149
+ "spark": "DECIMAL(p,s)",
150
+ "trino": "DECIMAL(p,s)",
151
+ "snowflake": "NUMBER(p,s)",
152
+ "redshift": "DECIMAL(p,s)",
153
+ "clickhouse": "Decimal(p,s)",
154
+ "duckdb": "DECIMAL(p,s)",
155
+ "databricks": "DECIMAL(p,s)"
156
+ },
157
+ "BOOLEAN": {
158
+ "hive": "BOOLEAN",
159
+ "mysql": "TINYINT(1)",
160
+ "oracle": "NUMBER(1)",
161
+ "tsql": "BIT",
162
+ "postgres": "BOOLEAN",
163
+ "spark": "BOOLEAN",
164
+ "trino": "BOOLEAN",
165
+ "snowflake": "BOOLEAN",
166
+ "redshift": "BOOLEAN",
167
+ "clickhouse": "Bool",
168
+ "duckdb": "BOOLEAN",
169
+ "databricks": "BOOLEAN"
170
+ },
171
+ "DATE": {
172
+ "hive": "DATE",
173
+ "mysql": "DATE",
174
+ "oracle": "DATE",
175
+ "tsql": "DATE",
176
+ "postgres": "DATE",
177
+ "spark": "DATE",
178
+ "trino": "DATE",
179
+ "snowflake": "DATE",
180
+ "redshift": "DATE",
181
+ "clickhouse": "Date",
182
+ "duckdb": "DATE",
183
+ "databricks": "DATE"
184
+ },
185
+ "TIMESTAMP": {
186
+ "hive": "TIMESTAMP",
187
+ "mysql": "DATETIME(6)",
188
+ "oracle": "TIMESTAMP(9)",
189
+ "tsql": "DATETIME2(7)",
190
+ "postgres": "TIMESTAMP",
191
+ "spark": "TIMESTAMP",
192
+ "trino": "TIMESTAMP",
193
+ "snowflake": "TIMESTAMP_NTZ",
194
+ "redshift": "TIMESTAMP",
195
+ "clickhouse": "DateTime64(6)",
196
+ "duckdb": "TIMESTAMP",
197
+ "databricks": "TIMESTAMP"
198
+ },
199
+ "TIMESTAMP_TZ": {
200
+ "hive": "TIMESTAMP",
201
+ "mysql": "TIMESTAMP(6)",
202
+ "oracle": "TIMESTAMP(9) WITH TIME ZONE",
203
+ "tsql": "DATETIMEOFFSET",
204
+ "postgres": "TIMESTAMPTZ",
205
+ "spark": "TIMESTAMP",
206
+ "trino": "TIMESTAMP WITH TIME ZONE",
207
+ "snowflake": "TIMESTAMP_TZ",
208
+ "redshift": "TIMESTAMPTZ",
209
+ "clickhouse": "DateTime64(6)",
210
+ "duckdb": "TIMESTAMPTZ",
211
+ "databricks": "TIMESTAMP"
212
+ },
213
+ "ARRAY": {
214
+ "hive": "ARRAY<T>",
215
+ "mysql": "JSON",
216
+ "oracle": "JSON",
217
+ "tsql": "NVARCHAR(MAX)",
218
+ "postgres": "T[]",
219
+ "spark": "ARRAY<T>",
220
+ "trino": "ARRAY(T)",
221
+ "snowflake": "ARRAY",
222
+ "redshift": "SUPER",
223
+ "clickhouse": "Array(T)",
224
+ "duckdb": "LIST",
225
+ "databricks": "ARRAY<T>",
226
+ "notes": "Complex type - databases without native array support use JSON serialization"
227
+ },
228
+ "MAP": {
229
+ "hive": "MAP<K,V>",
230
+ "mysql": "JSON",
231
+ "oracle": "JSON",
232
+ "tsql": "NVARCHAR(MAX)",
233
+ "postgres": "JSONB",
234
+ "spark": "MAP<K,V>",
235
+ "trino": "MAP(K,V)",
236
+ "snowflake": "OBJECT",
237
+ "redshift": "SUPER",
238
+ "clickhouse": "Map(K,V)",
239
+ "duckdb": "MAP",
240
+ "databricks": "MAP<K,V>",
241
+ "notes": "Complex type - use JSON/JSONB for databases without native map support"
242
+ },
243
+ "STRUCT": {
244
+ "hive": "STRUCT<...>",
245
+ "mysql": "JSON",
246
+ "oracle": "JSON",
247
+ "tsql": "NVARCHAR(MAX)",
248
+ "postgres": "JSONB",
249
+ "spark": "STRUCT<...>",
250
+ "trino": "ROW(...)",
251
+ "snowflake": "OBJECT",
252
+ "redshift": "SUPER",
253
+ "clickhouse": "Tuple(...)",
254
+ "duckdb": "STRUCT",
255
+ "databricks": "STRUCT<...>",
256
+ "notes": "Complex type - use JSON for databases without native struct support"
257
+ },
258
+ "BINARY": {
259
+ "hive": "BINARY",
260
+ "mysql": "BLOB",
261
+ "oracle": "BLOB",
262
+ "tsql": "VARBINARY(MAX)",
263
+ "postgres": "BYTEA",
264
+ "spark": "BINARY",
265
+ "trino": "VARBINARY",
266
+ "snowflake": "BINARY",
267
+ "redshift": "VARBYTE",
268
+ "clickhouse": "String",
269
+ "duckdb": "BLOB",
270
+ "databricks": "BINARY"
271
+ },
272
+ "TIME": {
273
+ "hive": "STRING",
274
+ "mysql": "TIME",
275
+ "oracle": "INTERVAL DAY TO SECOND",
276
+ "tsql": "TIME",
277
+ "postgres": "TIME",
278
+ "spark": "STRING",
279
+ "trino": "TIME",
280
+ "snowflake": "TIME",
281
+ "redshift": "TIME",
282
+ "clickhouse": "String",
283
+ "duckdb": "TIME",
284
+ "databricks": "STRING",
285
+ "notes": "Hive/Spark lack native TIME type - use STRING with HH:MM:SS format"
286
+ },
287
+ "INTERVAL": {
288
+ "hive": "STRING",
289
+ "mysql": "VARCHAR(50)",
290
+ "oracle": "INTERVAL YEAR TO MONTH",
291
+ "tsql": "VARCHAR(50)",
292
+ "postgres": "INTERVAL",
293
+ "spark": "INTERVAL",
294
+ "trino": "INTERVAL",
295
+ "snowflake": "VARCHAR(50)",
296
+ "redshift": "VARCHAR(50)",
297
+ "clickhouse": "String",
298
+ "duckdb": "INTERVAL",
299
+ "databricks": "INTERVAL",
300
+ "notes": "Native INTERVAL support varies - PostgreSQL/Spark have full support"
301
+ },
302
+ "UUID": {
303
+ "hive": "STRING",
304
+ "mysql": "CHAR(36)",
305
+ "oracle": "RAW(16)",
306
+ "tsql": "UNIQUEIDENTIFIER",
307
+ "postgres": "UUID",
308
+ "spark": "STRING",
309
+ "trino": "UUID",
310
+ "snowflake": "VARCHAR(36)",
311
+ "redshift": "CHAR(36)",
312
+ "clickhouse": "UUID",
313
+ "duckdb": "UUID",
314
+ "databricks": "STRING",
315
+ "notes": "Native UUID support in PostgreSQL, SQL Server, ClickHouse, DuckDB"
316
+ },
317
+ "JSON": {
318
+ "hive": "STRING",
319
+ "mysql": "JSON",
320
+ "oracle": "JSON",
321
+ "tsql": "NVARCHAR(MAX)",
322
+ "postgres": "JSON",
323
+ "spark": "STRING",
324
+ "trino": "JSON",
325
+ "snowflake": "VARIANT",
326
+ "redshift": "SUPER",
327
+ "clickhouse": "String",
328
+ "duckdb": "JSON",
329
+ "databricks": "STRING",
330
+ "notes": "Native JSON support varies - use STRING for Hive/Spark"
331
+ },
332
+ "JSONB": {
333
+ "hive": "STRING",
334
+ "mysql": "JSON",
335
+ "oracle": "JSON",
336
+ "tsql": "NVARCHAR(MAX)",
337
+ "postgres": "JSONB",
338
+ "spark": "STRING",
339
+ "trino": "JSON",
340
+ "snowflake": "VARIANT",
341
+ "redshift": "SUPER",
342
+ "clickhouse": "String",
343
+ "duckdb": "JSON",
344
+ "databricks": "STRING",
345
+ "notes": "JSONB is PostgreSQL-specific binary JSON with indexing support"
346
+ },
347
+ "XML": {
348
+ "hive": "STRING",
349
+ "mysql": "LONGTEXT",
350
+ "oracle": "XMLTYPE",
351
+ "tsql": "XML",
352
+ "postgres": "XML",
353
+ "spark": "STRING",
354
+ "trino": "VARCHAR",
355
+ "snowflake": "VARCHAR",
356
+ "redshift": "VARCHAR(65535)",
357
+ "clickhouse": "String",
358
+ "duckdb": "VARCHAR",
359
+ "databricks": "STRING",
360
+ "notes": "Native XML support in Oracle, SQL Server, PostgreSQL"
361
+ },
362
+ "INET": {
363
+ "hive": "STRING",
364
+ "mysql": "VARCHAR(45)",
365
+ "oracle": "VARCHAR2(45)",
366
+ "tsql": "VARCHAR(45)",
367
+ "postgres": "INET",
368
+ "spark": "STRING",
369
+ "trino": "IPADDRESS",
370
+ "snowflake": "VARCHAR(45)",
371
+ "redshift": "VARCHAR(45)",
372
+ "clickhouse": "IPv4/IPv6",
373
+ "duckdb": "INET",
374
+ "databricks": "STRING",
375
+ "notes": "Native IP address type in PostgreSQL, ClickHouse, DuckDB"
376
+ },
377
+ "GEOMETRY": {
378
+ "hive": "STRING",
379
+ "mysql": "GEOMETRY",
380
+ "oracle": "SDO_GEOMETRY",
381
+ "tsql": "GEOMETRY",
382
+ "postgres": "GEOMETRY",
383
+ "spark": "STRING",
384
+ "trino": "VARCHAR",
385
+ "snowflake": "GEOGRAPHY",
386
+ "redshift": "GEOMETRY",
387
+ "clickhouse": "String",
388
+ "duckdb": "GEOMETRY",
389
+ "databricks": "STRING",
390
+ "notes": "Spatial data type - requires PostGIS for PostgreSQL"
391
+ },
392
+ "GEOGRAPHY": {
393
+ "hive": "STRING",
394
+ "mysql": "GEOMETRY",
395
+ "oracle": "SDO_GEOMETRY",
396
+ "tsql": "GEOGRAPHY",
397
+ "postgres": "GEOGRAPHY",
398
+ "spark": "STRING",
399
+ "trino": "VARCHAR",
400
+ "snowflake": "GEOGRAPHY",
401
+ "redshift": "GEOGRAPHY",
402
+ "clickhouse": "String",
403
+ "duckdb": "GEOMETRY",
404
+ "databricks": "STRING",
405
+ "notes": "Geographic data type for earth coordinates"
406
+ },
407
+ "MONEY": {
408
+ "hive": "DECIMAL(19,4)",
409
+ "mysql": "DECIMAL(19,4)",
410
+ "oracle": "NUMBER(19,4)",
411
+ "tsql": "MONEY",
412
+ "postgres": "MONEY",
413
+ "spark": "DECIMAL(19,4)",
414
+ "trino": "DECIMAL(19,4)",
415
+ "snowflake": "NUMBER(19,4)",
416
+ "redshift": "DECIMAL(19,4)",
417
+ "clickhouse": "Decimal64(4)",
418
+ "duckdb": "DECIMAL(19,4)",
419
+ "databricks": "DECIMAL(19,4)",
420
+ "notes": "Native MONEY type in SQL Server and PostgreSQL only"
421
+ },
422
+ "SERIAL": {
423
+ "hive": "BIGINT",
424
+ "mysql": "BIGINT AUTO_INCREMENT",
425
+ "oracle": "NUMBER GENERATED ALWAYS AS IDENTITY",
426
+ "tsql": "BIGINT IDENTITY",
427
+ "postgres": "SERIAL",
428
+ "spark": "BIGINT",
429
+ "trino": "BIGINT",
430
+ "snowflake": "NUMBER AUTOINCREMENT",
431
+ "redshift": "BIGINT IDENTITY",
432
+ "clickhouse": "Int64",
433
+ "duckdb": "INTEGER",
434
+ "databricks": "BIGINT",
435
+ "notes": "Auto-increment column - syntax varies significantly"
436
+ },
437
+ "TEXT": {
438
+ "hive": "STRING",
439
+ "mysql": "TEXT",
440
+ "oracle": "CLOB",
441
+ "tsql": "NVARCHAR(MAX)",
442
+ "postgres": "TEXT",
443
+ "spark": "STRING",
444
+ "trino": "VARCHAR",
445
+ "snowflake": "VARCHAR",
446
+ "redshift": "VARCHAR(65535)",
447
+ "clickhouse": "String",
448
+ "duckdb": "VARCHAR",
449
+ "databricks": "STRING"
450
+ },
451
+ "MEDIUMTEXT": {
452
+ "hive": "STRING",
453
+ "mysql": "MEDIUMTEXT",
454
+ "oracle": "CLOB",
455
+ "tsql": "NVARCHAR(MAX)",
456
+ "postgres": "TEXT",
457
+ "spark": "STRING",
458
+ "trino": "VARCHAR",
459
+ "snowflake": "VARCHAR",
460
+ "redshift": "VARCHAR(65535)",
461
+ "clickhouse": "String",
462
+ "duckdb": "VARCHAR",
463
+ "databricks": "STRING",
464
+ "notes": "MySQL-specific - max 16MB"
465
+ },
466
+ "LONGTEXT": {
467
+ "hive": "STRING",
468
+ "mysql": "LONGTEXT",
469
+ "oracle": "CLOB",
470
+ "tsql": "NVARCHAR(MAX)",
471
+ "postgres": "TEXT",
472
+ "spark": "STRING",
473
+ "trino": "VARCHAR",
474
+ "snowflake": "VARCHAR",
475
+ "redshift": "VARCHAR(65535)",
476
+ "clickhouse": "String",
477
+ "duckdb": "VARCHAR",
478
+ "databricks": "STRING",
479
+ "notes": "MySQL-specific - max 4GB"
480
+ },
481
+ "ENUM": {
482
+ "hive": "STRING",
483
+ "mysql": "ENUM(...)",
484
+ "oracle": "VARCHAR2(50) CHECK(...)",
485
+ "tsql": "VARCHAR(50) CHECK(...)",
486
+ "postgres": "VARCHAR(50)",
487
+ "spark": "STRING",
488
+ "trino": "VARCHAR",
489
+ "snowflake": "VARCHAR(50)",
490
+ "redshift": "VARCHAR(50)",
491
+ "clickhouse": "Enum8/Enum16",
492
+ "duckdb": "ENUM",
493
+ "databricks": "STRING",
494
+ "notes": "Native ENUM in MySQL, ClickHouse, DuckDB - use CHECK constraint elsewhere"
495
+ },
496
+ "SET": {
497
+ "hive": "ARRAY<STRING>",
498
+ "mysql": "SET(...)",
499
+ "oracle": "VARCHAR2(255)",
500
+ "tsql": "VARCHAR(255)",
501
+ "postgres": "VARCHAR(255)",
502
+ "spark": "ARRAY<STRING>",
503
+ "trino": "ARRAY(VARCHAR)",
504
+ "snowflake": "ARRAY",
505
+ "redshift": "VARCHAR(255)",
506
+ "clickhouse": "Array(String)",
507
+ "duckdb": "VARCHAR(255)",
508
+ "databricks": "ARRAY<STRING>",
509
+ "notes": "MySQL-specific SET type - use ARRAY or VARCHAR elsewhere"
510
+ },
511
+ "BIT": {
512
+ "hive": "BOOLEAN",
513
+ "mysql": "BIT(n)",
514
+ "oracle": "RAW(n)",
515
+ "tsql": "BIT",
516
+ "postgres": "BIT(n)",
517
+ "spark": "BINARY",
518
+ "trino": "VARBINARY",
519
+ "snowflake": "BINARY",
520
+ "redshift": "BOOLEAN",
521
+ "clickhouse": "UInt8",
522
+ "duckdb": "BIT",
523
+ "databricks": "BINARY",
524
+ "notes": "Bit string type - varies significantly across databases"
525
+ },
526
+ "YEAR": {
527
+ "hive": "INT",
528
+ "mysql": "YEAR",
529
+ "oracle": "NUMBER(4)",
530
+ "tsql": "SMALLINT",
531
+ "postgres": "SMALLINT",
532
+ "spark": "INT",
533
+ "trino": "SMALLINT",
534
+ "snowflake": "NUMBER(4)",
535
+ "redshift": "SMALLINT",
536
+ "clickhouse": "UInt16",
537
+ "duckdb": "SMALLINT",
538
+ "databricks": "INT",
539
+ "notes": "MySQL-specific YEAR type - use SMALLINT/INT elsewhere"
540
+ },
541
+ "DATETIME": {
542
+ "hive": "TIMESTAMP",
543
+ "mysql": "DATETIME",
544
+ "oracle": "TIMESTAMP(6)",
545
+ "tsql": "DATETIME2",
546
+ "postgres": "TIMESTAMP",
547
+ "spark": "TIMESTAMP",
548
+ "trino": "TIMESTAMP",
549
+ "snowflake": "TIMESTAMP_NTZ",
550
+ "redshift": "TIMESTAMP",
551
+ "clickhouse": "DateTime",
552
+ "duckdb": "TIMESTAMP",
553
+ "databricks": "TIMESTAMP",
554
+ "notes": "MySQL DATETIME maps to TIMESTAMP in most dialects; precision varies"
555
+ },
556
+ "NVARCHAR": {
557
+ "hive": "VARCHAR(n)",
558
+ "mysql": "VARCHAR(n)",
559
+ "oracle": "VARCHAR2(n)",
560
+ "tsql": "NVARCHAR(n)",
561
+ "postgres": "VARCHAR(n)",
562
+ "spark": "VARCHAR(n)",
563
+ "trino": "VARCHAR(n)",
564
+ "snowflake": "VARCHAR(n)",
565
+ "redshift": "VARCHAR(n)",
566
+ "clickhouse": "String",
567
+ "duckdb": "VARCHAR(n)",
568
+ "databricks": "VARCHAR(n)"
569
+ },
570
+ "NCHAR": {
571
+ "hive": "CHAR(n)",
572
+ "mysql": "CHAR(n)",
573
+ "oracle": "CHAR(n)",
574
+ "tsql": "NCHAR(n)",
575
+ "postgres": "CHAR(n)",
576
+ "spark": "CHAR(n)",
577
+ "trino": "CHAR(n)",
578
+ "snowflake": "CHAR(n)",
579
+ "redshift": "CHAR(n)",
580
+ "clickhouse": "FixedString(n)",
581
+ "duckdb": "CHAR(n)",
582
+ "databricks": "CHAR(n)"
583
+ }
584
+ },
585
+ "precision_warnings": {
586
+ "DECIMAL": "Precision varies: Oracle NUMBER up to 38 digits, MySQL DECIMAL max 65 digits, SQL Server max 38 digits",
587
+ "TIMESTAMP": "Precision varies: Oracle 9 fractional digits, SQL Server 7 digits, MySQL/PostgreSQL 6 digits",
588
+ "VARCHAR": "Max length varies: MySQL 65535, Oracle 4000 (32767 with MAX_STRING_SIZE=EXTENDED), SQL Server 8000 (NVARCHAR 4000)",
589
+ "BIGINT": "Range: -9223372036854775808 to 9223372036854775807. Oracle NUMBER(19) may have slight differences at boundaries",
590
+ "NVARCHAR": "Max length varies: MySQL 65535, Oracle 4000 (32767 with MAX_STRING_SIZE=EXTENDED), SQL Server 8000 (NVARCHAR 4000)",
591
+ "NCHAR": "Max length varies across dialects"
592
+ }
593
+ }