sqlglot.generators.starrocks
1from __future__ import annotations 2 3 4from sqlglot import exp, transforms 5from sqlglot.dialects.dialect import ( 6 approx_count_distinct_sql, 7 arrow_json_extract_sql, 8 rename_func, 9 weekstart_unit_to_str, 10 inline_array_sql, 11 property_sql, 12 var_map_sql, 13) 14from sqlglot.generators.mysql import MySQLGenerator 15 16 17def _eliminate_between_in_delete(expression: exp.Expr) -> exp.Expr: 18 """ 19 StarRocks doesn't support BETWEEN in DELETE statements, so we convert 20 BETWEEN expressions to explicit comparisons. 21 22 https://docs.starrocks.io/docs/sql-reference/sql-statements/table_bucket_part_index/DELETE/#parameters 23 24 Example: 25 >>> from sqlglot import parse_one 26 >>> expr = parse_one("DELETE FROM t WHERE x BETWEEN 1 AND 10") 27 >>> print(_eliminate_between_in_delete(expr).sql(dialect="starrocks")) 28 DELETE FROM t WHERE x >= 1 AND x <= 10 29 """ 30 if where := expression.args.get("where"): 31 for between in where.find_all(exp.Between): 32 between.replace( 33 exp.and_( 34 exp.GTE(this=between.this.copy(), expression=between.args["low"]), 35 exp.LTE(this=between.this.copy(), expression=between.args["high"]), 36 copy=False, 37 ) 38 ) 39 return expression 40 41 42# https://docs.starrocks.io/docs/sql-reference/sql-functions/spatial-functions/st_distance_sphere/ 43def st_distance_sphere(self, expression: exp.StDistance) -> str: 44 point1 = expression.this 45 point2 = expression.expression 46 47 point1_x = self.func("ST_X", point1) 48 point1_y = self.func("ST_Y", point1) 49 point2_x = self.func("ST_X", point2) 50 point2_y = self.func("ST_Y", point2) 51 52 return self.func("ST_Distance_Sphere", point1_x, point1_y, point2_x, point2_y) 53 54 55class StarRocksGenerator(MySQLGenerator): 56 EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE = False 57 JSON_TYPE_REQUIRED_FOR_EXTRACTION = False 58 VARCHAR_REQUIRES_SIZE = False 59 PARSE_JSON_NAME: str | None = "PARSE_JSON" 60 WITH_PROPERTIES_PREFIX = "PROPERTIES" 61 UPDATE_STATEMENT_SUPPORTS_FROM = True 62 INSERT_OVERWRITE = " OVERWRITE" 63 64 # StarRocks doesn't support "IS TRUE/FALSE" syntax. 65 IS_BOOL_ALLOWED = False 66 # StarRocks doesn't support renaming a table with a database. 67 RENAME_TABLE_WITH_DB = False 68 69 CAST_MAPPING = {} 70 71 TYPE_MAPPING = { 72 **MySQLGenerator.TYPE_MAPPING, 73 exp.DType.INT128: "LARGEINT", 74 exp.DType.TEXT: "STRING", 75 exp.DType.TIMESTAMP: "DATETIME", 76 exp.DType.TIMESTAMPTZ: "DATETIME", 77 } 78 79 SQL_SECURITY_VIEW_LOCATION = exp.Properties.Location.POST_SCHEMA 80 81 PROPERTIES_LOCATION = { 82 **MySQLGenerator.PROPERTIES_LOCATION, 83 exp.PrimaryKey: exp.Properties.Location.POST_SCHEMA, 84 exp.UniqueKeyProperty: exp.Properties.Location.POST_SCHEMA, 85 exp.RollupProperty: exp.Properties.Location.POST_SCHEMA, 86 exp.PartitionedByProperty: exp.Properties.Location.POST_SCHEMA, 87 } 88 89 TRANSFORMS = { 90 # StarRocks uses the native TRIM(str, chars)/LTRIM/RTRIM function form, not 91 # MySQL's TRIM(chars FROM str) syntax, so it falls back to the base generator. 92 **{ 93 k: v for k, v in MySQLGenerator.TRANSFORMS.items() if k not in (exp.DateTrunc, exp.Trim) 94 }, 95 exp.ArgMax: rename_func("MAX_BY"), 96 exp.ArgMin: rename_func("MIN_BY"), 97 exp.Array: inline_array_sql, 98 exp.ArrayAgg: rename_func("ARRAY_AGG"), 99 # a <@ b (ArrayContainedBy) is equivalent to ARRAY_CONTAINS_ALL(b, a) 100 exp.ArrayContainedBy: lambda self, e: self.func("ARRAY_CONTAINS_ALL", e.expression, e.this), 101 exp.ArrayContainsAll: rename_func("ARRAY_CONTAINS_ALL"), 102 exp.ArrayFilter: rename_func("ARRAY_FILTER"), 103 exp.ArrayToString: rename_func("ARRAY_JOIN"), 104 exp.ApproxDistinct: approx_count_distinct_sql, 105 exp.CurrentVersion: lambda *_: "CURRENT_VERSION()", 106 exp.DateDiff: lambda self, e: self.func( 107 "DATE_DIFF", weekstart_unit_to_str(self, e), e.this, e.expression 108 ), 109 exp.Delete: transforms.preprocess([_eliminate_between_in_delete]), 110 exp.Flatten: rename_func("ARRAY_FLATTEN"), 111 exp.JSONExtractScalar: arrow_json_extract_sql, 112 exp.JSONExtract: arrow_json_extract_sql, 113 # Both MAP forms (two-array MAP([keys], [values]) and variadic MAP(k1, v1, ...)) 114 # generate StarRocks' variadic MAP(k1, v1, k2, v2, ...) constructor 115 exp.Map: lambda self, e: var_map_sql(self, e, "MAP"), 116 exp.Property: property_sql, 117 exp.RegexpLike: rename_func("REGEXP"), 118 # Inherited from MySQL, minus operations StarRocks supports natively 119 # (QUALIFY, FULL OUTER JOIN, SEMI/ANTI JOIN) 120 exp.Select: transforms.preprocess( 121 [ 122 transforms.eliminate_distinct_on, 123 transforms.unnest_generate_date_array_using_recursive_cte, 124 ] 125 ), 126 exp.SchemaCommentProperty: lambda self, e: self.naked_property(e), 127 exp.SqlSecurityProperty: lambda self, e: f"SECURITY {self.sql(e.this)}", 128 exp.StDistance: st_distance_sphere, 129 exp.StrToUnix: lambda self, e: self.func("UNIX_TIMESTAMP", e.this, self.format_time(e)), 130 exp.TimestampTrunc: lambda self, e: self.func( 131 "DATE_TRUNC", weekstart_unit_to_str(self, e), e.this 132 ), 133 exp.TimeStrToDate: rename_func("TO_DATE"), 134 exp.UnixToStr: lambda self, e: self.func("FROM_UNIXTIME", e.this, self.format_time(e)), 135 exp.UnixToTime: rename_func("FROM_UNIXTIME"), 136 exp.VarMap: lambda self, e: var_map_sql(self, e, "MAP"), 137 } 138 139 # https://docs.starrocks.io/docs/sql-reference/sql-statements/keywords/#reserved-keywords 140 RESERVED_KEYWORDS = { 141 "add", 142 "all", 143 "alter", 144 "analyze", 145 "and", 146 "array", 147 "as", 148 "asc", 149 "between", 150 "bigint", 151 "bitmap", 152 "both", 153 "by", 154 "case", 155 "char", 156 "character", 157 "check", 158 "collate", 159 "column", 160 "compaction", 161 "convert", 162 "create", 163 "cross", 164 "cube", 165 "current_date", 166 "current_role", 167 "current_time", 168 "current_timestamp", 169 "current_user", 170 "database", 171 "databases", 172 "decimal", 173 "decimalv2", 174 "decimal32", 175 "decimal64", 176 "decimal128", 177 "default", 178 "deferred", 179 "delete", 180 "dense_rank", 181 "desc", 182 "describe", 183 "distinct", 184 "double", 185 "drop", 186 "dual", 187 "else", 188 "except", 189 "exists", 190 "explain", 191 "false", 192 "first_value", 193 "float", 194 "for", 195 "force", 196 "from", 197 "full", 198 "function", 199 "grant", 200 "group", 201 "grouping", 202 "grouping_id", 203 "groups", 204 "having", 205 "hll", 206 "host", 207 "if", 208 "ignore", 209 "immediate", 210 "in", 211 "index", 212 "infile", 213 "inner", 214 "insert", 215 "int", 216 "integer", 217 "intersect", 218 "into", 219 "is", 220 "join", 221 "json", 222 "key", 223 "keys", 224 "kill", 225 "lag", 226 "largeint", 227 "last_value", 228 "lateral", 229 "lead", 230 "left", 231 "like", 232 "limit", 233 "load", 234 "localtime", 235 "localtimestamp", 236 "maxvalue", 237 "minus", 238 "mod", 239 "not", 240 "ntile", 241 "null", 242 "on", 243 "or", 244 "order", 245 "outer", 246 "outfile", 247 "over", 248 "partition", 249 "percentile", 250 "primary", 251 "procedure", 252 "qualify", 253 "range", 254 "rank", 255 "read", 256 "regexp", 257 "release", 258 "rename", 259 "replace", 260 "revoke", 261 "right", 262 "rlike", 263 "row", 264 "row_number", 265 "rows", 266 "schema", 267 "schemas", 268 "select", 269 "set", 270 "set_var", 271 "show", 272 "smallint", 273 "system", 274 "table", 275 "terminated", 276 "text", 277 "then", 278 "tinyint", 279 "to", 280 "true", 281 "union", 282 "unique", 283 "unsigned", 284 "update", 285 "use", 286 "using", 287 "values", 288 "varchar", 289 "when", 290 "where", 291 "with", 292 } 293 294 def create_sql(self, expression: exp.Create) -> str: 295 # Starrocks' primary key is defined outside of the schema, so we need to move it there 296 schema = expression.this 297 if isinstance(schema, exp.Schema): 298 primary_key = schema.find(exp.PrimaryKey) 299 300 if primary_key: 301 props = expression.args.get("properties") 302 303 if not props: 304 props = exp.Properties(expressions=[]) 305 expression.set("properties", props) 306 307 # Verify if the first one is an engine property. Is true then insert it after the engine, 308 # otherwise insert it at the beginning 309 engine = props.find(exp.EngineProperty) 310 engine_index = (engine.index or 0) if engine else -1 311 props.set("expressions", primary_key.pop(), engine_index + 1, overwrite=False) 312 313 return super().create_sql(expression) 314 315 def partitionedbyproperty_sql(self, expression: exp.PartitionedByProperty) -> str: 316 this = expression.this 317 if isinstance(this, exp.Schema): 318 # For MVs, StarRocks needs outer parentheses. 319 create = expression.find_ancestor(exp.Create) 320 321 sql = self.expressions(this, flat=True) 322 if (create and create.kind == "VIEW") or all( 323 isinstance(col, (exp.Column, exp.Identifier)) for col in this.expressions 324 ): 325 sql = f"({sql})" 326 327 return f"PARTITION BY {sql}" 328 329 return f"PARTITION BY {self.sql(this)}" 330 331 def clusterproperty_sql(self, expression: exp.ClusterProperty) -> str: 332 """Generate StarRocks ORDER BY clause for clustering.""" 333 if expression.this: 334 self.unsupported(f"Unsupported CLUSTER BY {self.sql(expression, 'this')}") 335 return "" 336 expressions = self.expressions(expression, flat=True) 337 return f"ORDER BY ({expressions})" 338 339 def refreshtriggerproperty_sql(self, expression: exp.RefreshTriggerProperty) -> str: 340 """Generate StarRocks REFRESH clause for materialized views. 341 There is a little difference of the syntax between StarRocks and Doris. 342 """ 343 method = self.sql(expression, "method") 344 method = f" {method}" if method else "" 345 kind = self.sql(expression, "kind") 346 kind = f" {kind}" if kind else "" 347 starts = self.sql(expression, "starts") 348 starts = f" START ({starts})" if starts else "" 349 every = self.sql(expression, "every") 350 unit = self.sql(expression, "unit") 351 every = f" EVERY (INTERVAL {every} {unit})" if every and unit else "" 352 353 return f"REFRESH{method}{kind}{starts}{every}"
44def st_distance_sphere(self, expression: exp.StDistance) -> str: 45 point1 = expression.this 46 point2 = expression.expression 47 48 point1_x = self.func("ST_X", point1) 49 point1_y = self.func("ST_Y", point1) 50 point2_x = self.func("ST_X", point2) 51 point2_y = self.func("ST_Y", point2) 52 53 return self.func("ST_Distance_Sphere", point1_x, point1_y, point2_x, point2_y)
56class StarRocksGenerator(MySQLGenerator): 57 EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE = False 58 JSON_TYPE_REQUIRED_FOR_EXTRACTION = False 59 VARCHAR_REQUIRES_SIZE = False 60 PARSE_JSON_NAME: str | None = "PARSE_JSON" 61 WITH_PROPERTIES_PREFIX = "PROPERTIES" 62 UPDATE_STATEMENT_SUPPORTS_FROM = True 63 INSERT_OVERWRITE = " OVERWRITE" 64 65 # StarRocks doesn't support "IS TRUE/FALSE" syntax. 66 IS_BOOL_ALLOWED = False 67 # StarRocks doesn't support renaming a table with a database. 68 RENAME_TABLE_WITH_DB = False 69 70 CAST_MAPPING = {} 71 72 TYPE_MAPPING = { 73 **MySQLGenerator.TYPE_MAPPING, 74 exp.DType.INT128: "LARGEINT", 75 exp.DType.TEXT: "STRING", 76 exp.DType.TIMESTAMP: "DATETIME", 77 exp.DType.TIMESTAMPTZ: "DATETIME", 78 } 79 80 SQL_SECURITY_VIEW_LOCATION = exp.Properties.Location.POST_SCHEMA 81 82 PROPERTIES_LOCATION = { 83 **MySQLGenerator.PROPERTIES_LOCATION, 84 exp.PrimaryKey: exp.Properties.Location.POST_SCHEMA, 85 exp.UniqueKeyProperty: exp.Properties.Location.POST_SCHEMA, 86 exp.RollupProperty: exp.Properties.Location.POST_SCHEMA, 87 exp.PartitionedByProperty: exp.Properties.Location.POST_SCHEMA, 88 } 89 90 TRANSFORMS = { 91 # StarRocks uses the native TRIM(str, chars)/LTRIM/RTRIM function form, not 92 # MySQL's TRIM(chars FROM str) syntax, so it falls back to the base generator. 93 **{ 94 k: v for k, v in MySQLGenerator.TRANSFORMS.items() if k not in (exp.DateTrunc, exp.Trim) 95 }, 96 exp.ArgMax: rename_func("MAX_BY"), 97 exp.ArgMin: rename_func("MIN_BY"), 98 exp.Array: inline_array_sql, 99 exp.ArrayAgg: rename_func("ARRAY_AGG"), 100 # a <@ b (ArrayContainedBy) is equivalent to ARRAY_CONTAINS_ALL(b, a) 101 exp.ArrayContainedBy: lambda self, e: self.func("ARRAY_CONTAINS_ALL", e.expression, e.this), 102 exp.ArrayContainsAll: rename_func("ARRAY_CONTAINS_ALL"), 103 exp.ArrayFilter: rename_func("ARRAY_FILTER"), 104 exp.ArrayToString: rename_func("ARRAY_JOIN"), 105 exp.ApproxDistinct: approx_count_distinct_sql, 106 exp.CurrentVersion: lambda *_: "CURRENT_VERSION()", 107 exp.DateDiff: lambda self, e: self.func( 108 "DATE_DIFF", weekstart_unit_to_str(self, e), e.this, e.expression 109 ), 110 exp.Delete: transforms.preprocess([_eliminate_between_in_delete]), 111 exp.Flatten: rename_func("ARRAY_FLATTEN"), 112 exp.JSONExtractScalar: arrow_json_extract_sql, 113 exp.JSONExtract: arrow_json_extract_sql, 114 # Both MAP forms (two-array MAP([keys], [values]) and variadic MAP(k1, v1, ...)) 115 # generate StarRocks' variadic MAP(k1, v1, k2, v2, ...) constructor 116 exp.Map: lambda self, e: var_map_sql(self, e, "MAP"), 117 exp.Property: property_sql, 118 exp.RegexpLike: rename_func("REGEXP"), 119 # Inherited from MySQL, minus operations StarRocks supports natively 120 # (QUALIFY, FULL OUTER JOIN, SEMI/ANTI JOIN) 121 exp.Select: transforms.preprocess( 122 [ 123 transforms.eliminate_distinct_on, 124 transforms.unnest_generate_date_array_using_recursive_cte, 125 ] 126 ), 127 exp.SchemaCommentProperty: lambda self, e: self.naked_property(e), 128 exp.SqlSecurityProperty: lambda self, e: f"SECURITY {self.sql(e.this)}", 129 exp.StDistance: st_distance_sphere, 130 exp.StrToUnix: lambda self, e: self.func("UNIX_TIMESTAMP", e.this, self.format_time(e)), 131 exp.TimestampTrunc: lambda self, e: self.func( 132 "DATE_TRUNC", weekstart_unit_to_str(self, e), e.this 133 ), 134 exp.TimeStrToDate: rename_func("TO_DATE"), 135 exp.UnixToStr: lambda self, e: self.func("FROM_UNIXTIME", e.this, self.format_time(e)), 136 exp.UnixToTime: rename_func("FROM_UNIXTIME"), 137 exp.VarMap: lambda self, e: var_map_sql(self, e, "MAP"), 138 } 139 140 # https://docs.starrocks.io/docs/sql-reference/sql-statements/keywords/#reserved-keywords 141 RESERVED_KEYWORDS = { 142 "add", 143 "all", 144 "alter", 145 "analyze", 146 "and", 147 "array", 148 "as", 149 "asc", 150 "between", 151 "bigint", 152 "bitmap", 153 "both", 154 "by", 155 "case", 156 "char", 157 "character", 158 "check", 159 "collate", 160 "column", 161 "compaction", 162 "convert", 163 "create", 164 "cross", 165 "cube", 166 "current_date", 167 "current_role", 168 "current_time", 169 "current_timestamp", 170 "current_user", 171 "database", 172 "databases", 173 "decimal", 174 "decimalv2", 175 "decimal32", 176 "decimal64", 177 "decimal128", 178 "default", 179 "deferred", 180 "delete", 181 "dense_rank", 182 "desc", 183 "describe", 184 "distinct", 185 "double", 186 "drop", 187 "dual", 188 "else", 189 "except", 190 "exists", 191 "explain", 192 "false", 193 "first_value", 194 "float", 195 "for", 196 "force", 197 "from", 198 "full", 199 "function", 200 "grant", 201 "group", 202 "grouping", 203 "grouping_id", 204 "groups", 205 "having", 206 "hll", 207 "host", 208 "if", 209 "ignore", 210 "immediate", 211 "in", 212 "index", 213 "infile", 214 "inner", 215 "insert", 216 "int", 217 "integer", 218 "intersect", 219 "into", 220 "is", 221 "join", 222 "json", 223 "key", 224 "keys", 225 "kill", 226 "lag", 227 "largeint", 228 "last_value", 229 "lateral", 230 "lead", 231 "left", 232 "like", 233 "limit", 234 "load", 235 "localtime", 236 "localtimestamp", 237 "maxvalue", 238 "minus", 239 "mod", 240 "not", 241 "ntile", 242 "null", 243 "on", 244 "or", 245 "order", 246 "outer", 247 "outfile", 248 "over", 249 "partition", 250 "percentile", 251 "primary", 252 "procedure", 253 "qualify", 254 "range", 255 "rank", 256 "read", 257 "regexp", 258 "release", 259 "rename", 260 "replace", 261 "revoke", 262 "right", 263 "rlike", 264 "row", 265 "row_number", 266 "rows", 267 "schema", 268 "schemas", 269 "select", 270 "set", 271 "set_var", 272 "show", 273 "smallint", 274 "system", 275 "table", 276 "terminated", 277 "text", 278 "then", 279 "tinyint", 280 "to", 281 "true", 282 "union", 283 "unique", 284 "unsigned", 285 "update", 286 "use", 287 "using", 288 "values", 289 "varchar", 290 "when", 291 "where", 292 "with", 293 } 294 295 def create_sql(self, expression: exp.Create) -> str: 296 # Starrocks' primary key is defined outside of the schema, so we need to move it there 297 schema = expression.this 298 if isinstance(schema, exp.Schema): 299 primary_key = schema.find(exp.PrimaryKey) 300 301 if primary_key: 302 props = expression.args.get("properties") 303 304 if not props: 305 props = exp.Properties(expressions=[]) 306 expression.set("properties", props) 307 308 # Verify if the first one is an engine property. Is true then insert it after the engine, 309 # otherwise insert it at the beginning 310 engine = props.find(exp.EngineProperty) 311 engine_index = (engine.index or 0) if engine else -1 312 props.set("expressions", primary_key.pop(), engine_index + 1, overwrite=False) 313 314 return super().create_sql(expression) 315 316 def partitionedbyproperty_sql(self, expression: exp.PartitionedByProperty) -> str: 317 this = expression.this 318 if isinstance(this, exp.Schema): 319 # For MVs, StarRocks needs outer parentheses. 320 create = expression.find_ancestor(exp.Create) 321 322 sql = self.expressions(this, flat=True) 323 if (create and create.kind == "VIEW") or all( 324 isinstance(col, (exp.Column, exp.Identifier)) for col in this.expressions 325 ): 326 sql = f"({sql})" 327 328 return f"PARTITION BY {sql}" 329 330 return f"PARTITION BY {self.sql(this)}" 331 332 def clusterproperty_sql(self, expression: exp.ClusterProperty) -> str: 333 """Generate StarRocks ORDER BY clause for clustering.""" 334 if expression.this: 335 self.unsupported(f"Unsupported CLUSTER BY {self.sql(expression, 'this')}") 336 return "" 337 expressions = self.expressions(expression, flat=True) 338 return f"ORDER BY ({expressions})" 339 340 def refreshtriggerproperty_sql(self, expression: exp.RefreshTriggerProperty) -> str: 341 """Generate StarRocks REFRESH clause for materialized views. 342 There is a little difference of the syntax between StarRocks and Doris. 343 """ 344 method = self.sql(expression, "method") 345 method = f" {method}" if method else "" 346 kind = self.sql(expression, "kind") 347 kind = f" {kind}" if kind else "" 348 starts = self.sql(expression, "starts") 349 starts = f" START ({starts})" if starts else "" 350 every = self.sql(expression, "every") 351 unit = self.sql(expression, "unit") 352 every = f" EVERY (INTERVAL {every} {unit})" if every and unit else "" 353 354 return f"REFRESH{method}{kind}{starts}{every}"
Generator converts a given syntax tree to the corresponding SQL string.
Arguments:
- pretty: Whether to format the produced SQL string. Default: False.
- identify: Determines when an identifier should be quoted. Possible values are: False (default): Never quote, except in cases where it's mandatory by the dialect. True: Always quote except for specials cases. 'safe': Only quote identifiers that are case insensitive.
- normalize: Whether to normalize identifiers to lowercase. Default: False.
- pad: The pad size in a formatted string. For example, this affects the indentation of a projection in a query, relative to its nesting level. Default: 2.
- indent: The indentation size in a formatted string. For example, this affects the
indentation of subqueries and filters under a
WHEREclause. Default: 2. - normalize_functions: How to normalize function names. Possible values are: "upper" or True (default): Convert names to uppercase. "lower": Convert names to lowercase. False: Disables function name normalization.
- unsupported_level: Determines the generator's behavior when it encounters unsupported expressions. Default ErrorLevel.WARN.
- max_unsupported: Maximum number of unsupported messages to include in a raised UnsupportedError. This is only relevant if unsupported_level is ErrorLevel.RAISE. Default: 3
- leading_comma: Whether the comma is leading or trailing in select expressions. This is only relevant when generating in pretty mode. Default: False
- max_text_width: The max number of characters in a segment before creating new lines in pretty mode. The default is on the smaller end because the length only represents a segment and not the true line length. Default: 80
- comments: Whether to preserve comments in the output SQL code. Default: True
TYPE_MAPPING =
{<DType.NCHAR: 'NCHAR'>: 'CHAR', <DType.NVARCHAR: 'NVARCHAR'>: 'VARCHAR', <DType.INET: 'INET'>: 'INET', <DType.ROWVERSION: 'ROWVERSION'>: 'VARBINARY', <DType.UBIGINT: 'UBIGINT'>: 'BIGINT', <DType.UINT: 'UINT'>: 'INT', <DType.UMEDIUMINT: 'UMEDIUMINT'>: 'MEDIUMINT', <DType.USMALLINT: 'USMALLINT'>: 'SMALLINT', <DType.UTINYINT: 'UTINYINT'>: 'TINYINT', <DType.UDECIMAL: 'UDECIMAL'>: 'DECIMAL', <DType.UDOUBLE: 'UDOUBLE'>: 'DOUBLE', <DType.DATETIME2: 'DATETIME2'>: 'DATETIME', <DType.SMALLDATETIME: 'SMALLDATETIME'>: 'DATETIME', <DType.TIMESTAMP: 'TIMESTAMP'>: 'DATETIME', <DType.TIMESTAMPNTZ: 'TIMESTAMPNTZ'>: 'DATETIME', <DType.TIMESTAMPTZ: 'TIMESTAMPTZ'>: 'DATETIME', <DType.TIMESTAMPLTZ: 'TIMESTAMPLTZ'>: 'TIMESTAMP', <DType.INT128: 'INT128'>: 'LARGEINT', <DType.TEXT: 'TEXT'>: 'STRING'}
PROPERTIES_LOCATION =
{<class 'sqlglot.expressions.properties.AllowedValuesProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.AlgorithmProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.ApiProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.ApplicationProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.AutoIncrementProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.AutoRefreshProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.BackupProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.BlockCompressionProperty'>: <PropertiesLocation.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.properties.CalledOnNullInputProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.CatalogProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.CharacterSetProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.ChecksumProperty'>: <PropertiesLocation.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.properties.CollateProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.ComputeProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.CopyGrantsProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.query.Cluster'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.ClusteredByProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.ClusterProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.DistributedByProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.DuplicateKeyProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.DataBlocksizeProperty'>: <PropertiesLocation.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.properties.DatabaseProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.DataDeletionProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.DefinerProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.DictRange'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.DictProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.DynamicProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.DistKeyProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.DistStyleProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.EmptyProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.EncodeProperty'>: <PropertiesLocation.POST_EXPRESSION: 'POST_EXPRESSION'>, <class 'sqlglot.expressions.properties.EngineProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.EnviromentProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.HandlerProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.ParameterStyleProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.ExecuteAsProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.ExternalProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.FallbackProperty'>: <PropertiesLocation.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.properties.FileFormatProperty'>: <PropertiesLocation.POST_WITH: 'POST_WITH'>, <class 'sqlglot.expressions.properties.FreespaceProperty'>: <PropertiesLocation.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.properties.GlobalProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.HeapProperty'>: <PropertiesLocation.POST_WITH: 'POST_WITH'>, <class 'sqlglot.expressions.properties.HybridProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.InheritsProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.IcebergProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.IncludeProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.InputModelProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.IsolatedLoadingProperty'>: <PropertiesLocation.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.properties.JournalProperty'>: <PropertiesLocation.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.properties.LanguageProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.LikeProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.LocationProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.LockProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.LockingProperty'>: <PropertiesLocation.POST_ALIAS: 'POST_ALIAS'>, <class 'sqlglot.expressions.properties.LogProperty'>: <PropertiesLocation.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.properties.MaskingProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.MaterializedProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.MergeBlockRatioProperty'>: <PropertiesLocation.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.properties.ModuleProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.NetworkProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.NoPrimaryIndexProperty'>: <PropertiesLocation.POST_EXPRESSION: 'POST_EXPRESSION'>, <class 'sqlglot.expressions.properties.OnProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.OnCommitProperty'>: <PropertiesLocation.POST_EXPRESSION: 'POST_EXPRESSION'>, <class 'sqlglot.expressions.query.Order'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.OutputModelProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.PartitionedByProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.PartitionedOfProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.constraints.PrimaryKey'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.Property'>: <PropertiesLocation.POST_WITH: 'POST_WITH'>, <class 'sqlglot.expressions.properties.RefreshTriggerProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.RemoteWithConnectionModelProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.ReturnsProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.RollupProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.RowAccessProperty'>: <PropertiesLocation.UNSUPPORTED: 'UNSUPPORTED'>, <class 'sqlglot.expressions.properties.RowFormatProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.RowFormatDelimitedProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.RowFormatSerdeProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.SampleProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.SchemaCommentProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.SecureProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.SecurityIntegrationProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.SerdeProperties'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.ddl.Set'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.SettingsProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.SetProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.SetConfigProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.SharingProperty'>: <PropertiesLocation.POST_EXPRESSION: 'POST_EXPRESSION'>, <class 'sqlglot.expressions.ddl.SequenceProperties'>: <PropertiesLocation.POST_EXPRESSION: 'POST_EXPRESSION'>, <class 'sqlglot.expressions.ddl.TriggerProperties'>: <PropertiesLocation.POST_EXPRESSION: 'POST_EXPRESSION'>, <class 'sqlglot.expressions.properties.SortKeyProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.SqlReadWriteProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.SqlSecurityProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.StabilityProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.StorageHandlerProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.StreamingTableProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.StrictProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.Tags'>: <PropertiesLocation.POST_WITH: 'POST_WITH'>, <class 'sqlglot.expressions.properties.TemporaryProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.ToTableProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.TransientProperty'>: <PropertiesLocation.UNSUPPORTED: 'UNSUPPORTED'>, <class 'sqlglot.expressions.properties.TransformModelProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.ddl.MergeTreeTTL'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.UnloggedProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.UsingProperty'>: <PropertiesLocation.POST_EXPRESSION: 'POST_EXPRESSION'>, <class 'sqlglot.expressions.properties.UsingTemplateProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.ViewAttributeProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.VirtualProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.VolatileProperty'>: <PropertiesLocation.UNSUPPORTED: 'UNSUPPORTED'>, <class 'sqlglot.expressions.properties.WithDataProperty'>: <PropertiesLocation.POST_EXPRESSION: 'POST_EXPRESSION'>, <class 'sqlglot.expressions.properties.WithJournalTableProperty'>: <PropertiesLocation.POST_NAME: 'POST_NAME'>, <class 'sqlglot.expressions.properties.WithProcedureOptions'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.WithSchemaBindingProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.WithSystemVersioningProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.ForceProperty'>: <PropertiesLocation.POST_CREATE: 'POST_CREATE'>, <class 'sqlglot.expressions.properties.PartitionByRangeProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.PartitionByListProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>, <class 'sqlglot.expressions.properties.UniqueKeyProperty'>: <PropertiesLocation.POST_SCHEMA: 'POST_SCHEMA'>}
TRANSFORMS =
{<class 'sqlglot.expressions.query.JSONPathFilter'>: <function <lambda>>, <class 'sqlglot.expressions.query.JSONPathKey'>: <function <lambda>>, <class 'sqlglot.expressions.query.JSONPathRecursive'>: <function <lambda>>, <class 'sqlglot.expressions.query.JSONPathRoot'>: <function <lambda>>, <class 'sqlglot.expressions.query.JSONPathScript'>: <function <lambda>>, <class 'sqlglot.expressions.query.JSONPathSelector'>: <function <lambda>>, <class 'sqlglot.expressions.query.JSONPathSlice'>: <function <lambda>>, <class 'sqlglot.expressions.query.JSONPathSubscript'>: <function <lambda>>, <class 'sqlglot.expressions.query.JSONPathUnion'>: <function <lambda>>, <class 'sqlglot.expressions.query.JSONPathWildcard'>: <function <lambda>>, <class 'sqlglot.expressions.core.Adjacent'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.AllowedValuesProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.query.AnalyzeColumns'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.query.AnalyzeWith'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.array.ArrayContainedBy'>: <function StarRocksGenerator.<lambda>>, <class 'sqlglot.expressions.array.ArrayContainsAll'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.array.ArrayOverlaps'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.AssumeColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.AutoRefreshProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.BackupProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.CaseSpecificColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.CalledOnNullInputProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.math.Ceil'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.CharacterSetColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.CharacterSetProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.ClusteredColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.CollateColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.CommentColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.functions.ConnectByRoot'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.string.ConvertToCharset'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.CopyGrantsProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.CredentialsProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.functions.CurrentCatalog'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.functions.SessionUser'>: <function MySQLGenerator.<lambda>>, <class 'sqlglot.expressions.constraints.DateFormatColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.DefaultColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.ApiProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.ApplicationProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.CatalogProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.ComputeProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.DatabaseProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.DynamicProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.EmptyProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.EncodeColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.query.EndStatement'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.EnviromentProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.HandlerProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.ParameterStyleProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.EphemeralColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.ExcludeColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.ExecuteAsProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.query.Except'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.ExternalProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.math.Floor'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.query.Get'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.GlobalProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.HeapProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.HybridProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.IcebergProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.InheritsProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.InlineLengthColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.InputModelProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.query.Intersect'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.datatypes.IntervalSpan'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.functions.Int64'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.json.JSONBContainsAnyTopKeys'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.json.JSONBContainsAllTopKeys'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.json.JSONBDeleteAtPath'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.json.JSONBPathExists'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.json.JSONObject'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.json.JSONObjectAgg'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.LanguageProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.LocationProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.LogProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.MaskingProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.MaterializedProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.functions.NetFunc'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.NetworkProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.NonClusteredColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.NoPrimaryIndexProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.NotForReplicationColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.OnCommitProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.OnProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.OnUpdateColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.core.Operator'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.OutputModelProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.core.ExtendsLeft'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.core.ExtendsRight'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.PathColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.PartitionedByBucket'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.PartitionByTruncate'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.core.PivotAny'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.array.PositionalColumn'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.ProjectionPolicyColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.InvisibleColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.ZeroFillColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.query.Put'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.RemoteWithConnectionModelProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.ReturnsProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.RowAccessProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.core.SafeFunc'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.SampleProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.SecureProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.SecurityIntegrationProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.SetConfigProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.SetProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.SettingsProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.SharingProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.SqlReadWriteProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.SqlSecurityProperty'>: <function StarRocksGenerator.<lambda>>, <class 'sqlglot.expressions.properties.StabilityProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.query.Stream'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.StreamingTableProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.StrictProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.ddl.SwapTable'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.query.TableColumn'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.Tags'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.TemporaryProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.TitleColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.array.ToMap'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.ToTableProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.TransformModelProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.TransientProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.VirtualProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.ddl.TriggerExecute'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.query.Union'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.UnloggedProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.UsingTemplateProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.query.UsingData'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.UppercaseColumnConstraint'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.temporal.UtcDate'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.temporal.UtcTime'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.temporal.UtcTimestamp'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.query.Variadic'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.array.VarMap'>: <function StarRocksGenerator.<lambda>>, <class 'sqlglot.expressions.properties.ViewAttributeProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.VolatileProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.WithJournalTableProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.WithProcedureOptions'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.WithSchemaBindingProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.constraints.WithOperator'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.properties.ForceProperty'>: <function Generator.<lambda>>, <class 'sqlglot.expressions.aggregate.ArrayAgg'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.math.BitwiseAndAgg'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.math.BitwiseOrAgg'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.math.BitwiseXorAgg'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.math.BitwiseCount'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.string.Chr'>: <function MySQLGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.CurrentDate'>: <function no_paren_current_date_sql>, <class 'sqlglot.expressions.functions.CurrentVersion'>: <function StarRocksGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.DateDiff'>: <function StarRocksGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.DateAdd'>: <function remove_ts_or_ds_to_date.<locals>.func>, <class 'sqlglot.expressions.temporal.DateStrToDate'>: <function datestrtodate_sql>, <class 'sqlglot.expressions.temporal.DateSub'>: <function remove_ts_or_ds_to_date.<locals>.func>, <class 'sqlglot.expressions.temporal.Day'>: <function remove_ts_or_ds_to_date.<locals>.func>, <class 'sqlglot.expressions.temporal.DayOfMonth'>: <function remove_ts_or_ds_to_date.<locals>.func>, <class 'sqlglot.expressions.temporal.DayOfWeek'>: <function remove_ts_or_ds_to_date.<locals>.func>, <class 'sqlglot.expressions.temporal.DayOfYear'>: <function remove_ts_or_ds_to_date.<locals>.func>, <class 'sqlglot.expressions.aggregate.GroupConcat'>: <function MySQLGenerator.<lambda>>, <class 'sqlglot.expressions.core.ILike'>: <function no_ilike_sql>, <class 'sqlglot.expressions.json.JSONExtractScalar'>: <function arrow_json_extract_sql>, <class 'sqlglot.expressions.string.Length'>: <function length_or_char_length_sql>, <class 'sqlglot.expressions.aggregate.LogicalOr'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.aggregate.LogicalAnd'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.aggregate.Max'>: <function max_or_greatest>, <class 'sqlglot.expressions.aggregate.Min'>: <function min_or_least>, <class 'sqlglot.expressions.temporal.Month'>: <function remove_ts_or_ds_to_date.<locals>.func>, <class 'sqlglot.expressions.core.NullSafeEQ'>: <function MySQLGenerator.<lambda>>, <class 'sqlglot.expressions.core.NullSafeNEQ'>: <function MySQLGenerator.<lambda>>, <class 'sqlglot.expressions.string.NumberToStr'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.query.Pivot'>: <function no_pivot_sql>, <class 'sqlglot.expressions.query.Select'>: <function preprocess.<locals>._to_sql>, <class 'sqlglot.expressions.string.StrPosition'>: <function MySQLGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.StrToDate'>: <function _str_to_date_sql>, <class 'sqlglot.expressions.temporal.StrToTime'>: <function _str_to_date_sql>, <class 'sqlglot.expressions.string.Stuff'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.query.TableSample'>: <function no_tablesample_sql>, <class 'sqlglot.expressions.temporal.TimeFromParts'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.temporal.TimestampAdd'>: <function date_add_interval_sql.<locals>.func>, <class 'sqlglot.expressions.temporal.TimestampDiff'>: <function MySQLGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.TimestampSub'>: <function date_add_interval_sql.<locals>.func>, <class 'sqlglot.expressions.temporal.TimeStrToUnix'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.temporal.TimeStrToTime'>: <function MySQLGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.TimeToStr'>: <function remove_ts_or_ds_to_date.<locals>.func>, <class 'sqlglot.expressions.math.Trunc'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.functions.TryCast'>: <function no_trycast_sql>, <class 'sqlglot.expressions.temporal.TsOrDsAdd'>: <function date_add_sql.<locals>.func>, <class 'sqlglot.expressions.temporal.TsOrDsDiff'>: <function MySQLGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.TsOrDsToDate'>: <function _ts_or_ds_to_date_sql>, <class 'sqlglot.expressions.string.Unicode'>: <function MySQLGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.UnixToTime'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.temporal.Week'>: <function remove_ts_or_ds_to_date.<locals>.func>, <class 'sqlglot.expressions.temporal.WeekOfYear'>: <function remove_ts_or_ds_to_date.<locals>.func>, <class 'sqlglot.expressions.temporal.Year'>: <function remove_ts_or_ds_to_date.<locals>.func>, <class 'sqlglot.expressions.aggregate.ArgMax'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.aggregate.ArgMin'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.array.Array'>: <function inline_array_sql>, <class 'sqlglot.expressions.array.ArrayFilter'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.array.ArrayToString'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.core.ApproxDistinct'>: <function approx_count_distinct_sql>, <class 'sqlglot.expressions.dml.Delete'>: <function preprocess.<locals>._to_sql>, <class 'sqlglot.expressions.array.Flatten'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.json.JSONExtract'>: <function arrow_json_extract_sql>, <class 'sqlglot.expressions.array.Map'>: <function StarRocksGenerator.<lambda>>, <class 'sqlglot.expressions.properties.Property'>: <function property_sql>, <class 'sqlglot.expressions.core.RegexpLike'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.properties.SchemaCommentProperty'>: <function StarRocksGenerator.<lambda>>, <class 'sqlglot.expressions.array.StDistance'>: <function st_distance_sphere>, <class 'sqlglot.expressions.temporal.StrToUnix'>: <function StarRocksGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.TimestampTrunc'>: <function StarRocksGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.TimeStrToDate'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.temporal.UnixToStr'>: <function StarRocksGenerator.<lambda>>}
RESERVED_KEYWORDS =
{'from', 'and', 'unique', 'between', 'last_value', 'drop', 'false', 'procedure', 'alter', 'not', 'first_value', 'lead', 'localtime', 'qualify', 'char', 'bigint', 'text', 'if', 'add', 'join', 'rank', 'system', 'values', 'partition', 'primary', 'analyze', 'int', 'all', 'cube', 'grant', 'current_user', 'schema', 'except', 'databases', 'by', 'decimal128', 'terminated', 'lag', 'range', 'having', 'grouping', 'ntile', 'database', 'desc', 'integer', 'rlike', 'check', 'grouping_id', 'convert', 'read', 'on', 'json', 'localtimestamp', 'when', 'array', 'distinct', 'ignore', 'full', 'immediate', 'schemas', 'release', 'collate', 'explain', 'into', 'largeint', 'outfile', 'using', 'load', 'varchar', 'asc', 'force', 'decimal32', 'group', 'unsigned', 'column', 'host', 'revoke', 'set_var', 'maxvalue', 'for', 'left', 'row', 'in', 'float', 'rows', 'kill', 'outer', 'both', 'regexp', 'compaction', 'exists', 'describe', 'create', 'limit', 'cross', 'show', 'where', 'decimalv2', 'set', 'default', 'insert', 'minus', 'bitmap', 'dense_rank', 'double', 'update', 'union', 'replace', 'true', 'index', 'inner', 'current_date', 'dual', 'smallint', 'delete', 'rename', 'else', 'order', 'tinyint', 'use', 'right', 'as', 'decimal', 'decimal64', 'deferred', 'over', 'current_timestamp', 'null', 'key', 'function', 'to', 'is', 'character', 'intersect', 'lateral', 'hll', 'current_time', 'table', 'infile', 'case', 'with', 'like', 'mod', 'then', 'row_number', 'percentile', 'or', 'groups', 'select', 'keys', 'current_role'}
295 def create_sql(self, expression: exp.Create) -> str: 296 # Starrocks' primary key is defined outside of the schema, so we need to move it there 297 schema = expression.this 298 if isinstance(schema, exp.Schema): 299 primary_key = schema.find(exp.PrimaryKey) 300 301 if primary_key: 302 props = expression.args.get("properties") 303 304 if not props: 305 props = exp.Properties(expressions=[]) 306 expression.set("properties", props) 307 308 # Verify if the first one is an engine property. Is true then insert it after the engine, 309 # otherwise insert it at the beginning 310 engine = props.find(exp.EngineProperty) 311 engine_index = (engine.index or 0) if engine else -1 312 props.set("expressions", primary_key.pop(), engine_index + 1, overwrite=False) 313 314 return super().create_sql(expression)
def
partitionedbyproperty_sql( self, expression: sqlglot.expressions.properties.PartitionedByProperty) -> str:
316 def partitionedbyproperty_sql(self, expression: exp.PartitionedByProperty) -> str: 317 this = expression.this 318 if isinstance(this, exp.Schema): 319 # For MVs, StarRocks needs outer parentheses. 320 create = expression.find_ancestor(exp.Create) 321 322 sql = self.expressions(this, flat=True) 323 if (create and create.kind == "VIEW") or all( 324 isinstance(col, (exp.Column, exp.Identifier)) for col in this.expressions 325 ): 326 sql = f"({sql})" 327 328 return f"PARTITION BY {sql}" 329 330 return f"PARTITION BY {self.sql(this)}"
332 def clusterproperty_sql(self, expression: exp.ClusterProperty) -> str: 333 """Generate StarRocks ORDER BY clause for clustering.""" 334 if expression.this: 335 self.unsupported(f"Unsupported CLUSTER BY {self.sql(expression, 'this')}") 336 return "" 337 expressions = self.expressions(expression, flat=True) 338 return f"ORDER BY ({expressions})"
Generate StarRocks ORDER BY clause for clustering.
def
refreshtriggerproperty_sql( self, expression: sqlglot.expressions.properties.RefreshTriggerProperty) -> str:
340 def refreshtriggerproperty_sql(self, expression: exp.RefreshTriggerProperty) -> str: 341 """Generate StarRocks REFRESH clause for materialized views. 342 There is a little difference of the syntax between StarRocks and Doris. 343 """ 344 method = self.sql(expression, "method") 345 method = f" {method}" if method else "" 346 kind = self.sql(expression, "kind") 347 kind = f" {kind}" if kind else "" 348 starts = self.sql(expression, "starts") 349 starts = f" START ({starts})" if starts else "" 350 every = self.sql(expression, "every") 351 unit = self.sql(expression, "unit") 352 every = f" EVERY (INTERVAL {every} {unit})" if every and unit else "" 353 354 return f"REFRESH{method}{kind}{starts}{every}"
Generate StarRocks REFRESH clause for materialized views. There is a little difference of the syntax between StarRocks and Doris.
Inherited Members
- sqlglot.generator.Generator
- Generator
- WINDOW_FUNCS_WITH_NULL_ORDERING
- IGNORE_NULLS_IN_FUNC
- IGNORE_NULLS_BEFORE_ORDER
- CREATE_FUNCTION_RETURN_AS
- MATCHED_BY_SOURCE
- SUPPORTS_MERGE_WHERE
- SINGLE_STRING_INTERVAL
- AUTO_REFRESH_BARE_INTERVALS
- GROUPINGS_SEP
- INDEX_ON
- INOUT_SEPARATOR
- DIRECTED_JOINS
- QUERY_HINTS
- LIMIT_IS_TOP
- RETURNING_END
- EXTRACT_ALLOWS_QUOTES
- TZ_TO_WITH_TIME_ZONE
- ALTER_TABLE_INCLUDE_COLUMN_KEYWORD
- UNNEST_WITH_ORDINALITY
- SEMI_ANTI_JOIN_WITH_SIDE
- COMPUTED_COLUMN_WITH_TYPE
- SUPPORTS_TABLE_COPY
- TABLESAMPLE_REQUIRES_PARENS
- TABLESAMPLE_SIZE_IS_ROWS
- TABLESAMPLE_KEYWORDS
- TABLESAMPLE_WITH_METHOD
- TABLESAMPLE_SEED_KEYWORD
- HISTORICAL_DATA_POST_ALIAS
- COLLATE_IS_FUNC
- DATA_TYPE_SPECIFIERS_ALLOWED
- ENSURE_BOOLS
- CTE_RECURSIVE_KEYWORD_REQUIRED
- SUPPORTS_SINGLE_ARG_CONCAT
- SUPPORTS_TABLE_ALIAS_COLUMNS
- SUPPORTS_NAMED_CTE_COLUMNS
- UNPIVOT_ALIASES_ARE_IDENTIFIERS
- PIVOT_ALIAS_WITH_AS
- SUPPORTS_SELECT_INTO
- SUPPORTS_UNLOGGED_TABLES
- SUPPORTS_CREATE_TABLE_LIKE
- LIKE_PROPERTY_INSIDE_SCHEMA
- MULTI_ARG_DISTINCT
- JSON_PATH_SINGLE_QUOTE_ESCAPE
- JSON_PATH_KEY_QUOTED_FORCES_BRACKETS
- SUPPORTED_JSON_PATH_PARTS
- CAN_IMPLEMENT_ARRAY_ANY
- SUPPORTS_WINDOW_EXCLUDE
- SET_OP_MODIFIERS
- COPY_PARAMS_ARE_WRAPPED
- COPY_PARAMS_EQ_REQUIRED
- COPY_HAS_INTO_KEYWORD
- UNICODE_SUBSTITUTE
- STAR_EXCEPT
- HEX_FUNC
- QUOTE_JSON_PATH
- SUPPORTS_EXPLODING_PROJECTIONS
- ARRAY_CONCAT_IS_VAR_LEN
- SUPPORTS_CONVERT_TIMEZONE
- SUPPORTS_UNIX_SECONDS
- ALTER_SET_WRAPPED
- NORMALIZE_EXTRACT_DATE_PARTS
- ARRAY_SIZE_NAME
- ALTER_SET_TYPE
- ARRAY_SIZE_DIM_REQUIRED
- SUPPORTS_BETWEEN_FLAGS
- SUPPORTS_LIKE_QUANTIFIERS
- MATCH_AGAINST_TABLE_PREFIX
- SET_ASSIGNMENT_REQUIRES_VARIABLE_KEYWORD
- DECLARE_DEFAULT_ASSIGNMENT
- STAR_EXCLUDE_REQUIRES_DERIVED_TABLE
- SUPPORTS_DROP_ALTER_ICEBERG_PROPERTY
- UNSUPPORTED_TYPES
- TYPE_PARAM_SETTINGS
- TIME_PART_SINGULARS
- TOKEN_MAPPING
- STRUCT_DELIMITER
- PARAMETER_TOKEN
- NAMED_PLACEHOLDER_TOKEN
- EXPRESSION_PRECEDES_PROPERTIES_CREATABLES
- WITH_SEPARATED_COMMENTS
- EXCLUDE_COMMENTS
- UNWRAPPED_INTERVAL_VALUES
- PARAMETERIZABLE_TEXT_TYPES
- EXPRESSIONS_WITHOUT_NESTED_CTES
- RESPECT_IGNORE_NULLS_UNSUPPORTED_EXPRESSIONS
- SAFE_JSON_PATH_KEY_RE
- SENTINEL_LINE_BREAK
- pretty
- identify
- normalize
- pad
- unsupported_level
- max_unsupported
- leading_comma
- max_text_width
- comments
- dialect
- normalize_functions
- unsupported_messages
- generate
- preprocess
- unsupported
- sep
- seg
- sanitize_comment
- maybe_comment
- wrap
- no_identify
- normalize_func
- indent
- sql
- uncache_sql
- cache_sql
- characterset_sql
- column_parts
- column_sql
- pseudocolumn_sql
- columnposition_sql
- columndef_sql
- columnconstraint_sql
- autoincrementcolumnconstraint_sql
- compresscolumnconstraint_sql
- generatedasidentitycolumnconstraint_sql
- generatedasrowcolumnconstraint_sql
- periodforsystemtimeconstraint_sql
- notnullcolumnconstraint_sql
- primarykeycolumnconstraint_sql
- uniquecolumnconstraint_sql
- inoutcolumnconstraint_sql
- createable_sql
- sequenceproperties_sql
- triggerproperties_sql
- triggerreferencing_sql
- triggerevent_sql
- clone_sql
- describe_sql
- heredoc_sql
- prepend_ctes
- with_sql
- cte_sql
- tablealias_sql
- bitstring_sql
- hexstring_sql
- bytestring_sql
- unicodestring_sql
- rawstring_sql
- datatypeparam_sql
- datatype_param_bound_limiter
- directory_sql
- delete_sql
- drop_sql
- set_operation
- set_operations
- fetch_sql
- limitoptions_sql
- filter_sql
- hint_sql
- indexparameters_sql
- index_sql
- dynamicidentifier_sql
- identifier_sql
- hex_sql
- lowerhex_sql
- inputoutputformat_sql
- national_sql
- properties_sql
- root_properties
- properties
- with_properties
- property_name
- property_sql
- uuidproperty_sql
- likeproperty_sql
- fallbackproperty_sql
- journalproperty_sql
- freespaceproperty_sql
- checksumproperty_sql
- mergeblockratioproperty_sql
- moduleproperty_sql
- datablocksizeproperty_sql
- blockcompressionproperty_sql
- isolatedloadingproperty_sql
- partitionboundspec_sql
- partitionedofproperty_sql
- lockingproperty_sql
- withdataproperty_sql
- withsystemversioningproperty_sql
- insert_sql
- introducer_sql
- kill_sql
- pseudotype_sql
- objectidentifier_sql
- onconflict_sql
- returning_sql
- rowformatdelimitedproperty_sql
- withtablehint_sql
- indextablehint_sql
- historicaldata_sql
- table_parts
- table_sql
- tablefromrows_sql
- tablesample_sql
- pivot_sql
- version_sql
- tuple_sql
- update_sql
- values_sql
- var_sql
- into_sql
- from_sql
- groupingsets_sql
- rollup_sql
- rollupindex_sql
- rollupproperty_sql
- cube_sql
- group_sql
- having_sql
- connect_sql
- prior_sql
- join_sql
- lambda_sql
- lateral_op
- lateral_sql
- limit_sql
- offset_sql
- setitem_sql
- set_sql
- queryband_sql
- pragma_sql
- lock_sql
- literal_sql
- escape_str
- loaddata_sql
- null_sql
- boolean_sql
- booland_sql
- boolor_sql
- order_sql
- withfill_sql
- cluster_sql
- distribute_sql
- sort_sql
- ordered_sql
- matchrecognizemeasure_sql
- matchrecognize_sql
- query_modifiers
- options_modifier
- forclause_sql
- queryoption_sql
- offset_limit_modifiers
- after_limit_modifiers
- select_sql
- schema_sql
- schema_columns_sql
- star_sql
- parameter_sql
- sessionparameter_sql
- placeholder_sql
- subquery_sql
- qualify_sql
- unnest_sql
- prewhere_sql
- where_sql
- window_sql
- partition_by_sql
- windowspec_sql
- withingroup_sql
- between_sql
- bracket_offset_expressions
- bracket_sql
- all_sql
- any_sql
- exists_sql
- case_sql
- constraint_sql
- nextvaluefor_sql
- trim_sql
- convert_concat_args
- concat_sql
- concatws_sql
- check_sql
- foreignkey_sql
- primarykey_sql
- timeserieskey_sql
- if_sql
- matchagainst_sql
- jsonkeyvalue_sql
- jsonpath_sql
- json_path_part
- formatjson_sql
- formatphrase_sql
- jsonarray_sql
- jsonarrayagg_sql
- jsoncolumndef_sql
- jsonschema_sql
- jsontable_sql
- openjsoncolumndef_sql
- openjson_sql
- in_sql
- in_unnest_op
- interval_sql
- return_sql
- reference_sql
- anonymous_sql
- paren_sql
- neg_sql
- not_sql
- alias_sql
- pivotalias_sql
- aliases_sql
- atindex_sql
- fromtimezone_sql
- fromiso8601date_sql
- fromiso8601timestamp_sql
- fromiso8601timestampnanos_sql
- add_sql
- and_sql
- or_sql
- xor_sql
- connector_sql
- bitwiseand_sql
- bitwiseleftshift_sql
- bitwisenot_sql
- bitwiseor_sql
- bitwiserightshift_sql
- bitwisexor_sql
- strtotime_sql
- strtodate_sql
- parsedatetime_sql
- currentdate_sql
- collate_sql
- command_sql
- comment_sql
- mergetreettlaction_sql
- mergetreettl_sql
- transaction_sql
- commit_sql
- rollback_sql
- modifycolumn_sql
- alterindex_sql
- alterdiststyle_sql
- altersortkey_sql
- renamecolumn_sql
- alterset_sql
- alter_sql
- altersession_sql
- add_column_sql
- droppartition_sql
- dropprimarykey_sql
- addconstraint_sql
- addpartition_sql
- distinct_sql
- respectnulls_sql
- havingmax_sql
- intdiv_sql
- div_sql
- safedivide_sql
- overlaps_sql
- distance_sql
- distancend_sql
- dot_sql
- eq_sql
- propertyeq_sql
- escape_sql
- glob_sql
- gt_sql
- gte_sql
- is_sql
- like_sql
- ilike_sql
- match_sql
- similarto_sql
- lt_sql
- lte_sql
- mod_sql
- mul_sql
- neq_sql
- nullsafeeq_sql
- nullsafeneq_sql
- sub_sql
- trycast_sql
- jsoncast_sql
- try_sql
- log_sql
- use_sql
- binary
- ceil_floor
- function_fallback_sql
- func
- format_args
- too_wide
- format_time
- expressions
- op_expressions
- naked_property
- tag_sql
- token_sql
- userdefinedfunction_sql
- macrooverloads_sql
- macrooverload_sql
- joinhint_sql
- kwarg_sql
- when_sql
- whens_sql
- merge_sql
- tochar_sql
- tonumber_sql
- dictproperty_sql
- dictrange_sql
- dictsubproperty_sql
- duplicatekeyproperty_sql
- uniquekeyproperty_sql
- distributedbyproperty_sql
- oncluster_sql
- clusteredbyproperty_sql
- anyvalue_sql
- querytransform_sql
- indexconstraintoption_sql
- checkcolumnconstraint_sql
- indexcolumnconstraint_sql
- nvl2_sql
- comprehension_sql
- columnprefix_sql
- opclass_sql
- predict_sql
- generateembedding_sql
- generatetext_sql
- generatetable_sql
- generatebool_sql
- generateint_sql
- generatedouble_sql
- mltranslate_sql
- mlforecast_sql
- aiforecast_sql
- featuresattime_sql
- vectorsearch_sql
- forin_sql
- refresh_sql
- toarray_sql
- tsordstotime_sql
- tsordstotimestamp_sql
- tsordstodatetime_sql
- tsordstodate_sql
- unixdate_sql
- lastday_sql
- dateadd_sql
- arrayany_sql
- struct_sql
- truncatetable_sql
- convert_sql
- copyparameter_sql
- credentials_sql
- copy_sql
- semicolon_sql
- datadeletionproperty_sql
- maskingpolicycolumnconstraint_sql
- gapfill_sql
- scope_resolution
- scoperesolution_sql
- parsejson_sql
- rand_sql
- changes_sql
- pad_sql
- summarize_sql
- explodinggenerateseries_sql
- json_sql
- jsonvalue_sql
- skipjsoncolumn_sql
- conditionalinsert_sql
- multitableinserts_sql
- oncondition_sql
- jsonextractquote_sql
- jsonexists_sql
- arrayagg_sql
- slice_sql
- apply_sql
- grant_sql
- revoke_sql
- grantprivilege_sql
- grantprincipal_sql
- columns_sql
- overlay_sql
- todouble_sql
- string_sql
- median_sql
- overflowtruncatebehavior_sql
- unixseconds_sql
- arraysize_sql
- attach_sql
- detach_sql
- attachoption_sql
- watermarkcolumnconstraint_sql
- encodeproperty_sql
- includeproperty_sql
- xmlelement_sql
- xmlkeyvalueoption_sql
- partitionbyrangepropertydynamic_sql
- unpivotcolumns_sql
- analyzesample_sql
- analyzestatistics_sql
- analyzehistogram_sql
- analyzedelete_sql
- analyzelistchainedrows_sql
- analyzevalidate_sql
- analyze_sql
- xmltable_sql
- xmlnamespace_sql
- export_sql
- declare_sql
- declareitem_sql
- recursivewithsearch_sql
- parameterizedagg_sql
- anonymousaggfunc_sql
- combinedaggfunc_sql
- combinedparameterizedagg_sql
- install_sql
- get_put_sql
- translatecharacters_sql
- decodecase_sql
- semanticview_sql
- getextract_sql
- datefromunixdate_sql
- space_sql
- buildproperty_sql
- modelattribute_sql
- directorystage_sql
- uuid_sql
- initcap_sql
- localtime_sql
- localtimestamp_sql
- weekstart_name
- weekstart_sql
- chr_sql
- block_sql
- functionspecification_sql
- storedprocedure_sql
- ifblock_sql
- whileblock_sql
- execute_sql
- executesql_sql
- altermodifysqlsecurity_sql
- usingproperty_sql
- renameindex_sql
- sqlglot.generators.mysql.MySQLGenerator
- SELECT_KINDS
- TRY_SUPPORTED
- SUPPORTS_UESCAPE
- SUPPORTS_DECODE_CASE
- SUPPORTS_MODIFY_COLUMN
- SUPPORTS_CHANGE_COLUMN
- AFTER_HAVING_MODIFIER_TRANSFORMS
- INTERVAL_ALLOWS_PLURAL_FORM
- LOCKING_READS_SUPPORTED
- NULL_ORDERING_SUPPORTED
- JOIN_HINTS
- TABLE_HINTS
- DUPLICATE_KEY_UPDATE_WITH_SET
- QUERY_HINT_SEP
- VALUES_AS_TABLE
- NVL2_SUPPORTED
- LAST_DAY_SUPPORTS_DATE_PART
- JSON_PATH_BRACKETED_KEY_SUPPORTED
- JSON_KEY_VALUE_PAIR_SEP
- SUPPORTS_TO_NUMBER
- PAD_FILL_PATTERN_IS_REQUIRED
- WRAP_DERIVED_VALUES
- SUPPORTS_MEDIAN
- UNSIGNED_TYPE_MAPPING
- TIMESTAMP_TYPE_MAPPING
- LIMIT_FETCH
- LIMIT_ONLY_LITERALS
- CHAR_CAST_MAPPING
- SIGNED_CAST_MAPPING
- TIMESTAMP_FUNC_TYPES
- makeinterval_sql
- locate_properties
- computedcolumnconstraint_sql
- array_sql
- arraycontainsall_sql
- arraycontainedby_sql
- dpipe_sql
- extract_sql
- datatype_sql
- jsonarraycontains_sql
- cast_sql
- show_sql
- alterrename_sql
- altercolumn_sql
- timestamptrunc_sql
- converttimezone_sql
- attimezone_sql
- isascii_sql
- ignorenulls_sql
- currentschema_sql
- partition_sql
- partitionbyrangeproperty_sql
- partitionbylistproperty_sql
- partitionlist_sql
- partitionrange_sql