altimate-code 0.5.2 → 0.5.4

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 (101) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/bin/altimate +6 -0
  3. package/bin/altimate-code +6 -0
  4. package/dbt-tools/bin/altimate-dbt +2 -0
  5. package/dbt-tools/dist/altimate_python_packages/altimate_packages/altimate/__init__.py +0 -0
  6. package/dbt-tools/dist/altimate_python_packages/altimate_packages/altimate/fetch_schema.py +35 -0
  7. package/dbt-tools/dist/altimate_python_packages/altimate_packages/altimate/utils.py +353 -0
  8. package/dbt-tools/dist/altimate_python_packages/altimate_packages/altimate/validate_sql.py +114 -0
  9. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/__init__.py +178 -0
  10. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/__main__.py +96 -0
  11. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/_typing.py +17 -0
  12. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/__init__.py +3 -0
  13. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/__init__.py +18 -0
  14. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/_typing.py +18 -0
  15. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/column.py +332 -0
  16. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/dataframe.py +866 -0
  17. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/functions.py +1267 -0
  18. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/group.py +59 -0
  19. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/normalize.py +78 -0
  20. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/operations.py +53 -0
  21. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/readwriter.py +108 -0
  22. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/session.py +190 -0
  23. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/transforms.py +9 -0
  24. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/types.py +212 -0
  25. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/util.py +32 -0
  26. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/window.py +134 -0
  27. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/__init__.py +118 -0
  28. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/athena.py +166 -0
  29. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/bigquery.py +1331 -0
  30. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/clickhouse.py +1393 -0
  31. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/databricks.py +131 -0
  32. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/dialect.py +1915 -0
  33. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/doris.py +561 -0
  34. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/drill.py +157 -0
  35. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/druid.py +20 -0
  36. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/duckdb.py +1159 -0
  37. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/dune.py +16 -0
  38. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/hive.py +787 -0
  39. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/materialize.py +94 -0
  40. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/mysql.py +1324 -0
  41. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/oracle.py +378 -0
  42. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/postgres.py +778 -0
  43. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/presto.py +788 -0
  44. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/prql.py +203 -0
  45. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/redshift.py +448 -0
  46. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/risingwave.py +78 -0
  47. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/snowflake.py +1464 -0
  48. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/spark.py +202 -0
  49. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/spark2.py +349 -0
  50. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/sqlite.py +320 -0
  51. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/starrocks.py +343 -0
  52. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/tableau.py +61 -0
  53. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/teradata.py +356 -0
  54. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/trino.py +115 -0
  55. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/tsql.py +1403 -0
  56. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/diff.py +456 -0
  57. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/errors.py +93 -0
  58. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/__init__.py +95 -0
  59. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/context.py +101 -0
  60. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/env.py +246 -0
  61. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/python.py +460 -0
  62. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/table.py +155 -0
  63. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/expressions.py +8870 -0
  64. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/generator.py +4993 -0
  65. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/helper.py +582 -0
  66. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/jsonpath.py +227 -0
  67. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/lineage.py +423 -0
  68. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/__init__.py +11 -0
  69. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/annotate_types.py +589 -0
  70. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/canonicalize.py +222 -0
  71. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/eliminate_ctes.py +43 -0
  72. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/eliminate_joins.py +181 -0
  73. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/eliminate_subqueries.py +189 -0
  74. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/isolate_table_selects.py +50 -0
  75. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/merge_subqueries.py +415 -0
  76. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/normalize.py +200 -0
  77. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/normalize_identifiers.py +64 -0
  78. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/optimize_joins.py +91 -0
  79. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/optimizer.py +94 -0
  80. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/pushdown_predicates.py +222 -0
  81. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/pushdown_projections.py +172 -0
  82. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/qualify.py +104 -0
  83. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/qualify_columns.py +1024 -0
  84. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/qualify_tables.py +155 -0
  85. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/scope.py +904 -0
  86. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/simplify.py +1587 -0
  87. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/unnest_subqueries.py +302 -0
  88. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/parser.py +8501 -0
  89. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/planner.py +463 -0
  90. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/schema.py +588 -0
  91. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/serde.py +68 -0
  92. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/time.py +687 -0
  93. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/tokens.py +1520 -0
  94. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/transforms.py +1020 -0
  95. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/trie.py +81 -0
  96. package/dbt-tools/dist/altimate_python_packages/dbt_core_integration.py +825 -0
  97. package/dbt-tools/dist/altimate_python_packages/dbt_utils.py +157 -0
  98. package/dbt-tools/dist/index.js +23859 -0
  99. package/package.json +14 -18
  100. package/postinstall.mjs +42 -0
  101. package/skills/altimate-setup/SKILL.md +31 -0
@@ -0,0 +1,157 @@
1
+ from __future__ import annotations
2
+
3
+
4
+ from sqlglot import exp, generator, parser, tokens, transforms
5
+ from sqlglot.dialects.dialect import (
6
+ Dialect,
7
+ datestrtodate_sql,
8
+ build_formatted_time,
9
+ no_trycast_sql,
10
+ rename_func,
11
+ strposition_sql,
12
+ timestrtotime_sql,
13
+ )
14
+ from sqlglot.dialects.mysql import date_add_sql
15
+ from sqlglot.transforms import preprocess, move_schema_columns_to_partitioned_by
16
+ from sqlglot.generator import unsupported_args
17
+
18
+
19
+ def _str_to_date(self: Drill.Generator, expression: exp.StrToDate) -> str:
20
+ this = self.sql(expression, "this")
21
+ time_format = self.format_time(expression)
22
+ if time_format == Drill.DATE_FORMAT:
23
+ return self.sql(exp.cast(this, exp.DataType.Type.DATE))
24
+ return self.func("TO_DATE", this, time_format)
25
+
26
+
27
+ class Drill(Dialect):
28
+ NORMALIZE_FUNCTIONS: bool | str = False
29
+ PRESERVE_ORIGINAL_NAMES = True
30
+ NULL_ORDERING = "nulls_are_last"
31
+ DATE_FORMAT = "'yyyy-MM-dd'"
32
+ DATEINT_FORMAT = "'yyyyMMdd'"
33
+ TIME_FORMAT = "'yyyy-MM-dd HH:mm:ss'"
34
+ SUPPORTS_USER_DEFINED_TYPES = False
35
+ SUPPORTS_SEMI_ANTI_JOIN = False
36
+ TYPED_DIVISION = True
37
+ CONCAT_COALESCE = True
38
+
39
+ TIME_MAPPING = {
40
+ "y": "%Y",
41
+ "Y": "%Y",
42
+ "YYYY": "%Y",
43
+ "yyyy": "%Y",
44
+ "YY": "%y",
45
+ "yy": "%y",
46
+ "MMMM": "%B",
47
+ "MMM": "%b",
48
+ "MM": "%m",
49
+ "M": "%-m",
50
+ "dd": "%d",
51
+ "d": "%-d",
52
+ "HH": "%H",
53
+ "H": "%-H",
54
+ "hh": "%I",
55
+ "h": "%-I",
56
+ "mm": "%M",
57
+ "m": "%-M",
58
+ "ss": "%S",
59
+ "s": "%-S",
60
+ "SSSSSS": "%f",
61
+ "a": "%p",
62
+ "DD": "%j",
63
+ "D": "%-j",
64
+ "E": "%a",
65
+ "EE": "%a",
66
+ "EEE": "%a",
67
+ "EEEE": "%A",
68
+ "''T''": "T",
69
+ }
70
+
71
+ class Tokenizer(tokens.Tokenizer):
72
+ IDENTIFIERS = ["`"]
73
+ STRING_ESCAPES = ["\\"]
74
+
75
+ KEYWORDS = tokens.Tokenizer.KEYWORDS.copy()
76
+ KEYWORDS.pop("/*+")
77
+
78
+ class Parser(parser.Parser):
79
+ STRICT_CAST = False
80
+
81
+ FUNCTIONS = {
82
+ **parser.Parser.FUNCTIONS,
83
+ "REPEATED_COUNT": exp.ArraySize.from_arg_list,
84
+ "TO_TIMESTAMP": exp.TimeStrToTime.from_arg_list,
85
+ "TO_CHAR": build_formatted_time(exp.TimeToStr, "drill"),
86
+ "LEVENSHTEIN_DISTANCE": exp.Levenshtein.from_arg_list,
87
+ }
88
+
89
+ LOG_DEFAULTS_TO_LN = True
90
+
91
+ class Generator(generator.Generator):
92
+ JOIN_HINTS = False
93
+ TABLE_HINTS = False
94
+ QUERY_HINTS = False
95
+ NVL2_SUPPORTED = False
96
+ LAST_DAY_SUPPORTS_DATE_PART = False
97
+ SUPPORTS_CREATE_TABLE_LIKE = False
98
+ ARRAY_SIZE_NAME = "REPEATED_COUNT"
99
+
100
+ TYPE_MAPPING = {
101
+ **generator.Generator.TYPE_MAPPING,
102
+ exp.DataType.Type.INT: "INTEGER",
103
+ exp.DataType.Type.SMALLINT: "INTEGER",
104
+ exp.DataType.Type.TINYINT: "INTEGER",
105
+ exp.DataType.Type.BINARY: "VARBINARY",
106
+ exp.DataType.Type.TEXT: "VARCHAR",
107
+ exp.DataType.Type.NCHAR: "VARCHAR",
108
+ exp.DataType.Type.TIMESTAMPLTZ: "TIMESTAMP",
109
+ exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP",
110
+ exp.DataType.Type.DATETIME: "TIMESTAMP",
111
+ }
112
+
113
+ PROPERTIES_LOCATION = {
114
+ **generator.Generator.PROPERTIES_LOCATION,
115
+ exp.PartitionedByProperty: exp.Properties.Location.POST_SCHEMA,
116
+ exp.VolatileProperty: exp.Properties.Location.UNSUPPORTED,
117
+ }
118
+
119
+ TRANSFORMS = {
120
+ **generator.Generator.TRANSFORMS,
121
+ exp.CurrentTimestamp: lambda *_: "CURRENT_TIMESTAMP",
122
+ exp.ArrayContains: rename_func("REPEATED_CONTAINS"),
123
+ exp.Create: preprocess([move_schema_columns_to_partitioned_by]),
124
+ exp.DateAdd: date_add_sql("ADD"),
125
+ exp.DateStrToDate: datestrtodate_sql,
126
+ exp.DateSub: date_add_sql("SUB"),
127
+ exp.DateToDi: lambda self,
128
+ e: f"CAST(TO_DATE({self.sql(e, 'this')}, {Drill.DATEINT_FORMAT}) AS INT)",
129
+ exp.DiToDate: lambda self,
130
+ e: f"TO_DATE(CAST({self.sql(e, 'this')} AS VARCHAR), {Drill.DATEINT_FORMAT})",
131
+ exp.If: lambda self,
132
+ e: f"`IF`({self.format_args(e.this, e.args.get('true'), e.args.get('false'))})",
133
+ exp.ILike: lambda self, e: self.binary(e, "`ILIKE`"),
134
+ exp.Levenshtein: unsupported_args("ins_cost", "del_cost", "sub_cost", "max_dist")(
135
+ rename_func("LEVENSHTEIN_DISTANCE")
136
+ ),
137
+ exp.PartitionedByProperty: lambda self, e: f"PARTITION BY {self.sql(e, 'this')}",
138
+ exp.RegexpLike: rename_func("REGEXP_MATCHES"),
139
+ exp.StrToDate: _str_to_date,
140
+ exp.Pow: rename_func("POW"),
141
+ exp.Select: transforms.preprocess(
142
+ [transforms.eliminate_distinct_on, transforms.eliminate_semi_and_anti_joins]
143
+ ),
144
+ exp.StrPosition: strposition_sql,
145
+ exp.StrToTime: lambda self, e: self.func("TO_TIMESTAMP", e.this, self.format_time(e)),
146
+ exp.TimeStrToDate: lambda self, e: self.sql(exp.cast(e.this, exp.DataType.Type.DATE)),
147
+ exp.TimeStrToTime: timestrtotime_sql,
148
+ exp.TimeStrToUnix: rename_func("UNIX_TIMESTAMP"),
149
+ exp.TimeToStr: lambda self, e: self.func("TO_CHAR", e.this, self.format_time(e)),
150
+ exp.TimeToUnix: rename_func("UNIX_TIMESTAMP"),
151
+ exp.ToChar: lambda self, e: self.function_fallback_sql(e),
152
+ exp.TryCast: no_trycast_sql,
153
+ exp.TsOrDsAdd: lambda self,
154
+ e: f"DATE_ADD(CAST({self.sql(e, 'this')} AS DATE), {self.sql(exp.Interval(this=e.expression, unit=exp.var('DAY')))})",
155
+ exp.TsOrDiToDi: lambda self,
156
+ e: f"CAST(SUBSTR(REPLACE(CAST({self.sql(e, 'this')} AS VARCHAR), '-', ''), 1, 8) AS INT)",
157
+ }
@@ -0,0 +1,20 @@
1
+ from sqlglot import exp, generator
2
+ from sqlglot.dialects.dialect import rename_func, Dialect
3
+
4
+
5
+ class Druid(Dialect):
6
+ class Generator(generator.Generator):
7
+ # https://druid.apache.org/docs/latest/querying/sql-data-types/
8
+ TYPE_MAPPING = {
9
+ **generator.Generator.TYPE_MAPPING,
10
+ exp.DataType.Type.NCHAR: "STRING",
11
+ exp.DataType.Type.NVARCHAR: "STRING",
12
+ exp.DataType.Type.TEXT: "STRING",
13
+ exp.DataType.Type.UUID: "STRING",
14
+ }
15
+
16
+ TRANSFORMS = {
17
+ **generator.Generator.TRANSFORMS,
18
+ exp.CurrentTimestamp: lambda *_: "CURRENT_TIMESTAMP",
19
+ exp.Mod: rename_func("MOD"),
20
+ }