sqlglot.generators.doris
1from __future__ import annotations 2 3import typing as t 4 5from sqlglot import exp 6from sqlglot.dialects.dialect import ( 7 approx_count_distinct_sql, 8 property_sql, 9 rename_func, 10 time_format, 11 weekstart_unit_to_str, 12) 13from sqlglot.generators.mysql import MySQLGenerator 14 15 16def _lag_lead_sql(self, expression: exp.Lag | exp.Lead) -> str: 17 return self.func( 18 "LAG" if isinstance(expression, exp.Lag) else "LEAD", 19 expression.this, 20 expression.args.get("offset") or exp.Literal.number(1), 21 expression.args.get("default") or exp.null(), 22 ) 23 24 25class DorisGenerator(MySQLGenerator): 26 LAST_DAY_SUPPORTS_DATE_PART = False 27 SUPPORTS_ALTER_COLUMN_NULLABILITY = False 28 VARCHAR_REQUIRES_SIZE = False 29 WITH_PROPERTIES_PREFIX = "PROPERTIES" 30 RENAME_TABLE_WITH_DB = False 31 UPDATE_STATEMENT_SUPPORTS_FROM = True 32 33 TYPE_MAPPING = { 34 **MySQLGenerator.TYPE_MAPPING, 35 exp.DType.TEXT: "STRING", 36 exp.DType.TIMESTAMP: "DATETIME", 37 exp.DType.TIMESTAMPTZ: "DATETIME", 38 } 39 40 PROPERTIES_LOCATION = { 41 **MySQLGenerator.PROPERTIES_LOCATION, 42 exp.UniqueKeyProperty: exp.Properties.Location.POST_SCHEMA, 43 exp.PartitionedByProperty: exp.Properties.Location.POST_SCHEMA, 44 exp.BuildProperty: exp.Properties.Location.POST_SCHEMA, 45 } 46 47 CAST_MAPPING: t.ClassVar[dict[exp.DType, str]] = {} 48 TIMESTAMP_FUNC_TYPES: t.ClassVar[set[exp.DType]] = set() 49 50 TRANSFORMS = { 51 **MySQLGenerator.TRANSFORMS, 52 exp.AddMonths: rename_func("MONTHS_ADD"), 53 exp.ApproxDistinct: approx_count_distinct_sql, 54 exp.ArgMax: rename_func("MAX_BY"), 55 exp.ArgMin: rename_func("MIN_BY"), 56 exp.ArrayAgg: rename_func("COLLECT_LIST"), 57 exp.ArrayToString: rename_func("ARRAY_JOIN"), 58 exp.ArrayUniqueAgg: rename_func("COLLECT_SET"), 59 exp.CurrentDate: lambda self, _: self.func("CURRENT_DATE"), 60 exp.CurrentTimestamp: lambda self, _: self.func("NOW"), 61 exp.DateTrunc: lambda self, e: self.func( 62 "DATE_TRUNC", e.this, weekstart_unit_to_str(self, e) 63 ), 64 exp.EuclideanDistance: rename_func("L2_DISTANCE"), 65 exp.GroupConcat: lambda self, e: self.func( 66 "GROUP_CONCAT", e.this, e.args.get("separator") or exp.Literal.string(",") 67 ), 68 exp.JSONExtractScalar: lambda self, e: self.func("JSON_EXTRACT", e.this, e.expression), 69 exp.Lag: _lag_lead_sql, 70 exp.Lead: _lag_lead_sql, 71 exp.Map: rename_func("ARRAY_MAP"), 72 exp.Property: property_sql, 73 exp.RegexpLike: rename_func("REGEXP"), 74 exp.RegexpSplit: rename_func("SPLIT_BY_STRING"), 75 exp.SchemaCommentProperty: lambda self, e: self.naked_property(e), 76 exp.Split: rename_func("SPLIT_BY_STRING"), 77 exp.StringToArray: rename_func("SPLIT_BY_STRING"), 78 exp.StrToUnix: lambda self, e: self.func("UNIX_TIMESTAMP", e.this, self.format_time(e)), 79 exp.TimeStrToDate: rename_func("TO_DATE"), 80 exp.TsOrDsAdd: lambda self, e: self.func("DATE_ADD", e.this, e.expression), 81 exp.TsOrDsToDate: lambda self, e: self.func("TO_DATE", e.this), 82 exp.TimeToUnix: rename_func("UNIX_TIMESTAMP"), 83 exp.TimestampTrunc: lambda self, e: self.func( 84 "DATE_TRUNC", e.this, weekstart_unit_to_str(self, e) 85 ), 86 exp.UnixToStr: lambda self, e: self.func( 87 "FROM_UNIXTIME", e.this, time_format("doris")(self, e) 88 ), 89 exp.UnixToTime: rename_func("FROM_UNIXTIME"), 90 } 91 92 # https://github.com/apache/doris/blob/e4f41dbf1ec03f5937fdeba2ee1454a20254015b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4#L93 93 RESERVED_KEYWORDS = { 94 "account_lock", 95 "account_unlock", 96 "add", 97 "adddate", 98 "admin", 99 "after", 100 "agg_state", 101 "aggregate", 102 "alias", 103 "all", 104 "alter", 105 "analyze", 106 "analyzed", 107 "analyzer", 108 "and", 109 "anti", 110 "append", 111 "array", 112 "array_range", 113 "as", 114 "asc", 115 "asof", 116 "at", 117 "authors", 118 "auto", 119 "auto_increment", 120 "backend", 121 "backends", 122 "backup", 123 "begin", 124 "belong", 125 "between", 126 "bigint", 127 "bin", 128 "binary", 129 "binlog", 130 "bitand", 131 "bitmap", 132 "bitmap_union", 133 "bitor", 134 "bitxor", 135 "blob", 136 "boolean", 137 "both", 138 "brief", 139 "broker", 140 "buckets", 141 "build", 142 "builtin", 143 "bulk", 144 "by", 145 "cached", 146 "call", 147 "cancel", 148 "case", 149 "cast", 150 "catalog", 151 "catalogs", 152 "chain", 153 "char", 154 "char_filter", 155 "character", 156 "charset", 157 "check", 158 "clean", 159 "cluster", 160 "clusters", 161 "collate", 162 "collation", 163 "collect", 164 "column", 165 "columns", 166 "comment", 167 "commit", 168 "committed", 169 "compact", 170 "complete", 171 "config", 172 "connection", 173 "connection_id", 174 "consistent", 175 "constraint", 176 "constraints", 177 "convert", 178 "copy", 179 "count", 180 "create", 181 "creation", 182 "cron", 183 "cross", 184 "cube", 185 "current", 186 "current_catalog", 187 "current_date", 188 "current_time", 189 "current_timestamp", 190 "current_user", 191 "data", 192 "database", 193 "databases", 194 "date", 195 "date_add", 196 "date_ceil", 197 "date_diff", 198 "date_floor", 199 "date_sub", 200 "dateadd", 201 "datediff", 202 "datetime", 203 "datetimev2", 204 "datev2", 205 "datetimev1", 206 "datev1", 207 "day", 208 "days_add", 209 "days_sub", 210 "decimal", 211 "decimalv2", 212 "decimalv3", 213 "decommission", 214 "default", 215 "deferred", 216 "delete", 217 "demand", 218 "desc", 219 "describe", 220 "diagnose", 221 "disk", 222 "distinct", 223 "distinctpc", 224 "distinctpcsa", 225 "distributed", 226 "distribution", 227 "div", 228 "do", 229 "doris_internal_table_id", 230 "double", 231 "drop", 232 "dropp", 233 "dual", 234 "dump", 235 "duplicate", 236 "dynamic", 237 "else", 238 "enable", 239 "encryptkey", 240 "encryptkeys", 241 "end", 242 "ends", 243 "engine", 244 "engines", 245 "enter", 246 "errors", 247 "events", 248 "every", 249 "except", 250 "exclude", 251 "execute", 252 "exists", 253 "expired", 254 "explain", 255 "export", 256 "extended", 257 "external", 258 "extract", 259 "failed_login_attempts", 260 "false", 261 "fast", 262 "feature", 263 "fields", 264 "file", 265 "filter", 266 "first", 267 "float", 268 "follower", 269 "following", 270 "for", 271 "foreign", 272 "force", 273 "format", 274 "free", 275 "from", 276 "frontend", 277 "frontends", 278 "full", 279 "function", 280 "functions", 281 "generic", 282 "global", 283 "grant", 284 "grants", 285 "graph", 286 "group", 287 "grouping", 288 "groups", 289 "hash", 290 "having", 291 "hdfs", 292 "help", 293 "histogram", 294 "hll", 295 "hll_union", 296 "hostname", 297 "hour", 298 "hub", 299 "identified", 300 "if", 301 "ignore", 302 "immediate", 303 "in", 304 "incremental", 305 "index", 306 "indexes", 307 "infile", 308 "inner", 309 "insert", 310 "install", 311 "int", 312 "integer", 313 "intermediate", 314 "intersect", 315 "interval", 316 "into", 317 "inverted", 318 "ipv4", 319 "ipv6", 320 "is", 321 "is_not_null_pred", 322 "is_null_pred", 323 "isnull", 324 "isolation", 325 "job", 326 "jobs", 327 "join", 328 "json", 329 "jsonb", 330 "key", 331 "keys", 332 "kill", 333 "label", 334 "largeint", 335 "last", 336 "lateral", 337 "layout", 338 "ldap", 339 "ldap_admin_password", 340 "leading", 341 "left", 342 "less", 343 "level", 344 "like", 345 "limit", 346 "lines", 347 "link", 348 "list", 349 "load", 350 "local", 351 "localtime", 352 "localtimestamp", 353 "location", 354 "lock", 355 "logical", 356 "low_priority", 357 "manual", 358 "map", 359 "match", 360 "match_all", 361 "match_any", 362 "match_condition", 363 "match_phrase", 364 "match_phrase_edge", 365 "match_phrase_prefix", 366 "match_regexp", 367 "materialized", 368 "max", 369 "maxvalue", 370 "memo", 371 "merge", 372 "migrate", 373 "migrations", 374 "min", 375 "minus", 376 "minute", 377 "modify", 378 "month", 379 "mtmv", 380 "name", 381 "names", 382 "natural", 383 "negative", 384 "never", 385 "next", 386 "ngram_bf", 387 "no", 388 "no_use_mv", 389 "non_nullable", 390 "not", 391 "null", 392 "nulls", 393 "observer", 394 "of", 395 "offset", 396 "on", 397 "only", 398 "open", 399 "optimized", 400 "or", 401 "order", 402 "outer", 403 "outfile", 404 "over", 405 "overwrite", 406 "parameter", 407 "parsed", 408 "partition", 409 "partitions", 410 "password", 411 "password_expire", 412 "password_history", 413 "password_lock_time", 414 "password_reuse", 415 "path", 416 "pause", 417 "percent", 418 "period", 419 "permissive", 420 "physical", 421 "plan", 422 "play", 423 "process", 424 "plugin", 425 "plugins", 426 "policy", 427 "preceding", 428 "prepare", 429 "primary", 430 "proc", 431 "procedure", 432 "processlist", 433 "profile", 434 "properties", 435 "property", 436 "quantile_state", 437 "quantile_union", 438 "query", 439 "quota", 440 "random", 441 "range", 442 "read", 443 "real", 444 "rebalance", 445 "recover", 446 "recycle", 447 "refresh", 448 "references", 449 "regexp", 450 "release", 451 "rename", 452 "repair", 453 "repeatable", 454 "replace", 455 "replace_if_not_null", 456 "replica", 457 "repositories", 458 "repository", 459 "resource", 460 "resources", 461 "restore", 462 "restrictive", 463 "resume", 464 "returns", 465 "revoke", 466 "rewritten", 467 "right", 468 "rlike", 469 "role", 470 "roles", 471 "rollback", 472 "rollup", 473 "routine", 474 "row", 475 "rows", 476 "s3", 477 "sample", 478 "schedule", 479 "scheduler", 480 "schema", 481 "schemas", 482 "second", 483 "select", 484 "semi", 485 "sequence", 486 "serializable", 487 "session", 488 "set", 489 "sets", 490 "shape", 491 "show", 492 "signed", 493 "skew", 494 "smallint", 495 "snapshot", 496 "soname", 497 "split", 498 "sql_block_rule", 499 "start", 500 "starts", 501 "stats", 502 "status", 503 "stop", 504 "storage", 505 "stream", 506 "streaming", 507 "string", 508 "struct", 509 "subdate", 510 "sum", 511 "superuser", 512 "switch", 513 "sync", 514 "system", 515 "table", 516 "tables", 517 "tablesample", 518 "tablet", 519 "tablets", 520 "task", 521 "tasks", 522 "temporary", 523 "terminated", 524 "text", 525 "than", 526 "then", 527 "time", 528 "timestamp", 529 "timestampadd", 530 "timestampdiff", 531 "tinyint", 532 "to", 533 "token_filter", 534 "tokenizer", 535 "trailing", 536 "transaction", 537 "trash", 538 "tree", 539 "triggers", 540 "trim", 541 "true", 542 "truncate", 543 "try_cast", 544 "type", 545 "type_cast", 546 "types", 547 "unbounded", 548 "uncommitted", 549 "uninstall", 550 "union", 551 "unique", 552 "unlock", 553 "unsigned", 554 "update", 555 "use", 556 "use_mv", 557 "user", 558 "using", 559 "value", 560 "values", 561 "varchar", 562 "variables", 563 "variant", 564 "vault", 565 "verbose", 566 "version", 567 "view", 568 "warnings", 569 "week", 570 "when", 571 "where", 572 "whitelist", 573 "with", 574 "work", 575 "workload", 576 "write", 577 "xor", 578 "year", 579 } 580 581 def uniquekeyproperty_sql( 582 self, expression: exp.UniqueKeyProperty, prefix: str = "UNIQUE KEY" 583 ) -> str: 584 create_stmt = expression.find_ancestor(exp.Create) 585 if create_stmt and create_stmt.args["properties"].find(exp.MaterializedProperty): 586 return super().uniquekeyproperty_sql(expression, prefix="KEY") 587 588 return super().uniquekeyproperty_sql(expression) 589 590 def partitionrange_sql(self, expression: exp.PartitionRange) -> str: 591 name = self.sql(expression, "this") 592 values = expression.expressions 593 594 if len(values) != 1: 595 # Multiple values: use VALUES [ ... ) 596 if values and isinstance(values[0], list): 597 values_sql = ", ".join( 598 f"({', '.join(self.sql(v) for v in inner)})" for inner in values 599 ) 600 else: 601 values_sql = ", ".join(f"({self.sql(v)})" for v in values) 602 603 return f"PARTITION {name} VALUES [{values_sql})" 604 605 return f"PARTITION {name} VALUES LESS THAN ({self.sql(values[0])})" 606 607 def partitionbyrangepropertydynamic_sql( 608 self, expression: exp.PartitionByRangePropertyDynamic 609 ) -> str: 610 # Generates: FROM ("start") TO ("end") INTERVAL N UNIT 611 start = self.sql(expression, "start") 612 end = self.sql(expression, "end") 613 every = expression.args.get("every") 614 615 if every: 616 number = self.sql(every, "this") 617 interval = f"INTERVAL {number} {self.sql(every, 'unit')}" 618 else: 619 interval = "" 620 621 return f"FROM ({start}) TO ({end}) {interval}" 622 623 def partitionedbyproperty_sql(self, expression: exp.PartitionedByProperty) -> str: 624 this = expression.this 625 if isinstance(this, exp.Schema): 626 return f"PARTITION BY ({self.expressions(this, flat=True)})" 627 return f"PARTITION BY ({self.sql(this)})" 628 629 def table_sql(self, expression: exp.Table, sep: str = " AS ") -> str: 630 """Override table_sql to avoid AS keyword in UPDATE and DELETE statements.""" 631 ancestor = expression.find_ancestor(exp.Update, exp.Delete, exp.Select) 632 if not isinstance(ancestor, exp.Select): 633 sep = " " 634 return super().table_sql(expression, sep=sep)
26class DorisGenerator(MySQLGenerator): 27 LAST_DAY_SUPPORTS_DATE_PART = False 28 SUPPORTS_ALTER_COLUMN_NULLABILITY = False 29 VARCHAR_REQUIRES_SIZE = False 30 WITH_PROPERTIES_PREFIX = "PROPERTIES" 31 RENAME_TABLE_WITH_DB = False 32 UPDATE_STATEMENT_SUPPORTS_FROM = True 33 34 TYPE_MAPPING = { 35 **MySQLGenerator.TYPE_MAPPING, 36 exp.DType.TEXT: "STRING", 37 exp.DType.TIMESTAMP: "DATETIME", 38 exp.DType.TIMESTAMPTZ: "DATETIME", 39 } 40 41 PROPERTIES_LOCATION = { 42 **MySQLGenerator.PROPERTIES_LOCATION, 43 exp.UniqueKeyProperty: exp.Properties.Location.POST_SCHEMA, 44 exp.PartitionedByProperty: exp.Properties.Location.POST_SCHEMA, 45 exp.BuildProperty: exp.Properties.Location.POST_SCHEMA, 46 } 47 48 CAST_MAPPING: t.ClassVar[dict[exp.DType, str]] = {} 49 TIMESTAMP_FUNC_TYPES: t.ClassVar[set[exp.DType]] = set() 50 51 TRANSFORMS = { 52 **MySQLGenerator.TRANSFORMS, 53 exp.AddMonths: rename_func("MONTHS_ADD"), 54 exp.ApproxDistinct: approx_count_distinct_sql, 55 exp.ArgMax: rename_func("MAX_BY"), 56 exp.ArgMin: rename_func("MIN_BY"), 57 exp.ArrayAgg: rename_func("COLLECT_LIST"), 58 exp.ArrayToString: rename_func("ARRAY_JOIN"), 59 exp.ArrayUniqueAgg: rename_func("COLLECT_SET"), 60 exp.CurrentDate: lambda self, _: self.func("CURRENT_DATE"), 61 exp.CurrentTimestamp: lambda self, _: self.func("NOW"), 62 exp.DateTrunc: lambda self, e: self.func( 63 "DATE_TRUNC", e.this, weekstart_unit_to_str(self, e) 64 ), 65 exp.EuclideanDistance: rename_func("L2_DISTANCE"), 66 exp.GroupConcat: lambda self, e: self.func( 67 "GROUP_CONCAT", e.this, e.args.get("separator") or exp.Literal.string(",") 68 ), 69 exp.JSONExtractScalar: lambda self, e: self.func("JSON_EXTRACT", e.this, e.expression), 70 exp.Lag: _lag_lead_sql, 71 exp.Lead: _lag_lead_sql, 72 exp.Map: rename_func("ARRAY_MAP"), 73 exp.Property: property_sql, 74 exp.RegexpLike: rename_func("REGEXP"), 75 exp.RegexpSplit: rename_func("SPLIT_BY_STRING"), 76 exp.SchemaCommentProperty: lambda self, e: self.naked_property(e), 77 exp.Split: rename_func("SPLIT_BY_STRING"), 78 exp.StringToArray: rename_func("SPLIT_BY_STRING"), 79 exp.StrToUnix: lambda self, e: self.func("UNIX_TIMESTAMP", e.this, self.format_time(e)), 80 exp.TimeStrToDate: rename_func("TO_DATE"), 81 exp.TsOrDsAdd: lambda self, e: self.func("DATE_ADD", e.this, e.expression), 82 exp.TsOrDsToDate: lambda self, e: self.func("TO_DATE", e.this), 83 exp.TimeToUnix: rename_func("UNIX_TIMESTAMP"), 84 exp.TimestampTrunc: lambda self, e: self.func( 85 "DATE_TRUNC", e.this, weekstart_unit_to_str(self, e) 86 ), 87 exp.UnixToStr: lambda self, e: self.func( 88 "FROM_UNIXTIME", e.this, time_format("doris")(self, e) 89 ), 90 exp.UnixToTime: rename_func("FROM_UNIXTIME"), 91 } 92 93 # https://github.com/apache/doris/blob/e4f41dbf1ec03f5937fdeba2ee1454a20254015b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4#L93 94 RESERVED_KEYWORDS = { 95 "account_lock", 96 "account_unlock", 97 "add", 98 "adddate", 99 "admin", 100 "after", 101 "agg_state", 102 "aggregate", 103 "alias", 104 "all", 105 "alter", 106 "analyze", 107 "analyzed", 108 "analyzer", 109 "and", 110 "anti", 111 "append", 112 "array", 113 "array_range", 114 "as", 115 "asc", 116 "asof", 117 "at", 118 "authors", 119 "auto", 120 "auto_increment", 121 "backend", 122 "backends", 123 "backup", 124 "begin", 125 "belong", 126 "between", 127 "bigint", 128 "bin", 129 "binary", 130 "binlog", 131 "bitand", 132 "bitmap", 133 "bitmap_union", 134 "bitor", 135 "bitxor", 136 "blob", 137 "boolean", 138 "both", 139 "brief", 140 "broker", 141 "buckets", 142 "build", 143 "builtin", 144 "bulk", 145 "by", 146 "cached", 147 "call", 148 "cancel", 149 "case", 150 "cast", 151 "catalog", 152 "catalogs", 153 "chain", 154 "char", 155 "char_filter", 156 "character", 157 "charset", 158 "check", 159 "clean", 160 "cluster", 161 "clusters", 162 "collate", 163 "collation", 164 "collect", 165 "column", 166 "columns", 167 "comment", 168 "commit", 169 "committed", 170 "compact", 171 "complete", 172 "config", 173 "connection", 174 "connection_id", 175 "consistent", 176 "constraint", 177 "constraints", 178 "convert", 179 "copy", 180 "count", 181 "create", 182 "creation", 183 "cron", 184 "cross", 185 "cube", 186 "current", 187 "current_catalog", 188 "current_date", 189 "current_time", 190 "current_timestamp", 191 "current_user", 192 "data", 193 "database", 194 "databases", 195 "date", 196 "date_add", 197 "date_ceil", 198 "date_diff", 199 "date_floor", 200 "date_sub", 201 "dateadd", 202 "datediff", 203 "datetime", 204 "datetimev2", 205 "datev2", 206 "datetimev1", 207 "datev1", 208 "day", 209 "days_add", 210 "days_sub", 211 "decimal", 212 "decimalv2", 213 "decimalv3", 214 "decommission", 215 "default", 216 "deferred", 217 "delete", 218 "demand", 219 "desc", 220 "describe", 221 "diagnose", 222 "disk", 223 "distinct", 224 "distinctpc", 225 "distinctpcsa", 226 "distributed", 227 "distribution", 228 "div", 229 "do", 230 "doris_internal_table_id", 231 "double", 232 "drop", 233 "dropp", 234 "dual", 235 "dump", 236 "duplicate", 237 "dynamic", 238 "else", 239 "enable", 240 "encryptkey", 241 "encryptkeys", 242 "end", 243 "ends", 244 "engine", 245 "engines", 246 "enter", 247 "errors", 248 "events", 249 "every", 250 "except", 251 "exclude", 252 "execute", 253 "exists", 254 "expired", 255 "explain", 256 "export", 257 "extended", 258 "external", 259 "extract", 260 "failed_login_attempts", 261 "false", 262 "fast", 263 "feature", 264 "fields", 265 "file", 266 "filter", 267 "first", 268 "float", 269 "follower", 270 "following", 271 "for", 272 "foreign", 273 "force", 274 "format", 275 "free", 276 "from", 277 "frontend", 278 "frontends", 279 "full", 280 "function", 281 "functions", 282 "generic", 283 "global", 284 "grant", 285 "grants", 286 "graph", 287 "group", 288 "grouping", 289 "groups", 290 "hash", 291 "having", 292 "hdfs", 293 "help", 294 "histogram", 295 "hll", 296 "hll_union", 297 "hostname", 298 "hour", 299 "hub", 300 "identified", 301 "if", 302 "ignore", 303 "immediate", 304 "in", 305 "incremental", 306 "index", 307 "indexes", 308 "infile", 309 "inner", 310 "insert", 311 "install", 312 "int", 313 "integer", 314 "intermediate", 315 "intersect", 316 "interval", 317 "into", 318 "inverted", 319 "ipv4", 320 "ipv6", 321 "is", 322 "is_not_null_pred", 323 "is_null_pred", 324 "isnull", 325 "isolation", 326 "job", 327 "jobs", 328 "join", 329 "json", 330 "jsonb", 331 "key", 332 "keys", 333 "kill", 334 "label", 335 "largeint", 336 "last", 337 "lateral", 338 "layout", 339 "ldap", 340 "ldap_admin_password", 341 "leading", 342 "left", 343 "less", 344 "level", 345 "like", 346 "limit", 347 "lines", 348 "link", 349 "list", 350 "load", 351 "local", 352 "localtime", 353 "localtimestamp", 354 "location", 355 "lock", 356 "logical", 357 "low_priority", 358 "manual", 359 "map", 360 "match", 361 "match_all", 362 "match_any", 363 "match_condition", 364 "match_phrase", 365 "match_phrase_edge", 366 "match_phrase_prefix", 367 "match_regexp", 368 "materialized", 369 "max", 370 "maxvalue", 371 "memo", 372 "merge", 373 "migrate", 374 "migrations", 375 "min", 376 "minus", 377 "minute", 378 "modify", 379 "month", 380 "mtmv", 381 "name", 382 "names", 383 "natural", 384 "negative", 385 "never", 386 "next", 387 "ngram_bf", 388 "no", 389 "no_use_mv", 390 "non_nullable", 391 "not", 392 "null", 393 "nulls", 394 "observer", 395 "of", 396 "offset", 397 "on", 398 "only", 399 "open", 400 "optimized", 401 "or", 402 "order", 403 "outer", 404 "outfile", 405 "over", 406 "overwrite", 407 "parameter", 408 "parsed", 409 "partition", 410 "partitions", 411 "password", 412 "password_expire", 413 "password_history", 414 "password_lock_time", 415 "password_reuse", 416 "path", 417 "pause", 418 "percent", 419 "period", 420 "permissive", 421 "physical", 422 "plan", 423 "play", 424 "process", 425 "plugin", 426 "plugins", 427 "policy", 428 "preceding", 429 "prepare", 430 "primary", 431 "proc", 432 "procedure", 433 "processlist", 434 "profile", 435 "properties", 436 "property", 437 "quantile_state", 438 "quantile_union", 439 "query", 440 "quota", 441 "random", 442 "range", 443 "read", 444 "real", 445 "rebalance", 446 "recover", 447 "recycle", 448 "refresh", 449 "references", 450 "regexp", 451 "release", 452 "rename", 453 "repair", 454 "repeatable", 455 "replace", 456 "replace_if_not_null", 457 "replica", 458 "repositories", 459 "repository", 460 "resource", 461 "resources", 462 "restore", 463 "restrictive", 464 "resume", 465 "returns", 466 "revoke", 467 "rewritten", 468 "right", 469 "rlike", 470 "role", 471 "roles", 472 "rollback", 473 "rollup", 474 "routine", 475 "row", 476 "rows", 477 "s3", 478 "sample", 479 "schedule", 480 "scheduler", 481 "schema", 482 "schemas", 483 "second", 484 "select", 485 "semi", 486 "sequence", 487 "serializable", 488 "session", 489 "set", 490 "sets", 491 "shape", 492 "show", 493 "signed", 494 "skew", 495 "smallint", 496 "snapshot", 497 "soname", 498 "split", 499 "sql_block_rule", 500 "start", 501 "starts", 502 "stats", 503 "status", 504 "stop", 505 "storage", 506 "stream", 507 "streaming", 508 "string", 509 "struct", 510 "subdate", 511 "sum", 512 "superuser", 513 "switch", 514 "sync", 515 "system", 516 "table", 517 "tables", 518 "tablesample", 519 "tablet", 520 "tablets", 521 "task", 522 "tasks", 523 "temporary", 524 "terminated", 525 "text", 526 "than", 527 "then", 528 "time", 529 "timestamp", 530 "timestampadd", 531 "timestampdiff", 532 "tinyint", 533 "to", 534 "token_filter", 535 "tokenizer", 536 "trailing", 537 "transaction", 538 "trash", 539 "tree", 540 "triggers", 541 "trim", 542 "true", 543 "truncate", 544 "try_cast", 545 "type", 546 "type_cast", 547 "types", 548 "unbounded", 549 "uncommitted", 550 "uninstall", 551 "union", 552 "unique", 553 "unlock", 554 "unsigned", 555 "update", 556 "use", 557 "use_mv", 558 "user", 559 "using", 560 "value", 561 "values", 562 "varchar", 563 "variables", 564 "variant", 565 "vault", 566 "verbose", 567 "version", 568 "view", 569 "warnings", 570 "week", 571 "when", 572 "where", 573 "whitelist", 574 "with", 575 "work", 576 "workload", 577 "write", 578 "xor", 579 "year", 580 } 581 582 def uniquekeyproperty_sql( 583 self, expression: exp.UniqueKeyProperty, prefix: str = "UNIQUE KEY" 584 ) -> str: 585 create_stmt = expression.find_ancestor(exp.Create) 586 if create_stmt and create_stmt.args["properties"].find(exp.MaterializedProperty): 587 return super().uniquekeyproperty_sql(expression, prefix="KEY") 588 589 return super().uniquekeyproperty_sql(expression) 590 591 def partitionrange_sql(self, expression: exp.PartitionRange) -> str: 592 name = self.sql(expression, "this") 593 values = expression.expressions 594 595 if len(values) != 1: 596 # Multiple values: use VALUES [ ... ) 597 if values and isinstance(values[0], list): 598 values_sql = ", ".join( 599 f"({', '.join(self.sql(v) for v in inner)})" for inner in values 600 ) 601 else: 602 values_sql = ", ".join(f"({self.sql(v)})" for v in values) 603 604 return f"PARTITION {name} VALUES [{values_sql})" 605 606 return f"PARTITION {name} VALUES LESS THAN ({self.sql(values[0])})" 607 608 def partitionbyrangepropertydynamic_sql( 609 self, expression: exp.PartitionByRangePropertyDynamic 610 ) -> str: 611 # Generates: FROM ("start") TO ("end") INTERVAL N UNIT 612 start = self.sql(expression, "start") 613 end = self.sql(expression, "end") 614 every = expression.args.get("every") 615 616 if every: 617 number = self.sql(every, "this") 618 interval = f"INTERVAL {number} {self.sql(every, 'unit')}" 619 else: 620 interval = "" 621 622 return f"FROM ({start}) TO ({end}) {interval}" 623 624 def partitionedbyproperty_sql(self, expression: exp.PartitionedByProperty) -> str: 625 this = expression.this 626 if isinstance(this, exp.Schema): 627 return f"PARTITION BY ({self.expressions(this, flat=True)})" 628 return f"PARTITION BY ({self.sql(this)})" 629 630 def table_sql(self, expression: exp.Table, sep: str = " AS ") -> str: 631 """Override table_sql to avoid AS keyword in UPDATE and DELETE statements.""" 632 ancestor = expression.find_ancestor(exp.Update, exp.Delete, exp.Select) 633 if not isinstance(ancestor, exp.Select): 634 sep = " " 635 return super().table_sql(expression, sep=sep)
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.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.UNSUPPORTED: 'UNSUPPORTED'>, <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'>, <class 'sqlglot.expressions.properties.BuildProperty'>: <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 Generator.<lambda>>, <class 'sqlglot.expressions.array.ArrayContainsAll'>: <function Generator.<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.BinaryColumnConstraint'>: <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.JSONBContainsTopKey'>: <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 Generator.<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 Generator.<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 DorisGenerator.<lambda>>, <class 'sqlglot.expressions.functions.CurrentVersion'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.temporal.DateDiff'>: <function remove_ts_or_ds_to_date.<locals>.func>, <class 'sqlglot.expressions.temporal.DateAdd'>: <function date_add_sql.<locals>.func>, <class 'sqlglot.expressions.temporal.DateStrToDate'>: <function datestrtodate_sql>, <class 'sqlglot.expressions.temporal.DateSub'>: <function date_add_sql.<locals>.func>, <class 'sqlglot.expressions.temporal.DateTrunc'>: <function DorisGenerator.<lambda>>, <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 DorisGenerator.<lambda>>, <class 'sqlglot.expressions.core.ILike'>: <function no_ilike_sql>, <class 'sqlglot.expressions.functions.If'>: <function if_sql.<locals>._if_sql>, <class 'sqlglot.expressions.json.JSONExtractScalar'>: <function DorisGenerator.<lambda>>, <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.string.Trim'>: <function trim_sql>, <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 DorisGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.TsOrDsDiff'>: <function MySQLGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.TsOrDsToDate'>: <function DorisGenerator.<lambda>>, <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.temporal.AddMonths'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.core.ApproxDistinct'>: <function approx_count_distinct_sql>, <class 'sqlglot.expressions.aggregate.ArgMax'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.aggregate.ArgMin'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.array.ArrayToString'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.aggregate.ArrayUniqueAgg'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.temporal.CurrentTimestamp'>: <function DorisGenerator.<lambda>>, <class 'sqlglot.expressions.math.EuclideanDistance'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.aggregate.Lag'>: <function _lag_lead_sql>, <class 'sqlglot.expressions.aggregate.Lead'>: <function _lag_lead_sql>, <class 'sqlglot.expressions.array.Map'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.properties.Property'>: <function property_sql>, <class 'sqlglot.expressions.core.RegexpLike'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.string.RegexpSplit'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.properties.SchemaCommentProperty'>: <function DorisGenerator.<lambda>>, <class 'sqlglot.expressions.string.Split'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.array.StringToArray'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.temporal.StrToUnix'>: <function DorisGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.TimeStrToDate'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.temporal.TimeToUnix'>: <function rename_func.<locals>.<lambda>>, <class 'sqlglot.expressions.temporal.TimestampTrunc'>: <function DorisGenerator.<lambda>>, <class 'sqlglot.expressions.temporal.UnixToStr'>: <function DorisGenerator.<lambda>>}
RESERVED_KEYWORDS =
{'layout', 'parameter', 'sample', 'account_lock', 'asc', 'creation', 'hll_union', 'match_any', 'triggers', 'commit', 'duplicate', 'cancel', 'extended', 'from', 'catalogs', 'enter', 'local', 'period', 'databases', 'real', 'routine', 'config', 'maxvalue', 'demand', 'to', 'frontends', 'exists', 'array', 'help', 'rewritten', 'functions', 'account_unlock', 'localtime', 'using', 'returns', 'build', 'infile', 'decimalv2', 'chain', 'value', 'warnings', 'or', 'disk', 'auto', 'references', 'resume', 'left', 'incremental', 'aggregate', 'current', 'minute', 'mtmv', 'manual', 'auto_increment', 'trailing', 'negative', 'dateadd', 'sync', 'types', 'order', 'limit', 'cluster', 'join', 'smallint', 'isolation', 'user', 'index', 'procedure', 'set', 'never', 'sum', 'password_history', 'scheduler', 'analyzed', 'kill', 'primary', 'intermediate', 'div', 'double', 'is_null_pred', 'admin', 'type', 'case', 'analyzer', 'compact', 'check', 'sets', 'date_diff', 'plugins', 'verbose', 'password_expire', 'decimal', 'distinctpcsa', 'full', 'outfile', 'bitmap_union', 'character', 'schedule', 'global', 'label', 'decommission', 'type_cast', 'following', 'write', 'parsed', 'group', 'backup', 'stats', 'release', 'roles', 'over', 'builtin', 'alter', 'hash', 'jsonb', 'current_time', 'columns', 'inverted', 'datetimev2', 'create', 'partitions', 'role', 'location', 'policy', 'processlist', 'bitmap', 'connection_id', 'buckets', 'date_floor', 'select', 'password', 'timestampadd', 'play', 'add', 'password_reuse', 'tables', 'migrations', 'trash', 'property', 'char_filter', 'workload', 'match_phrase_prefix', 'external', 'variables', 'boolean', 'hour', 'is_not_null_pred', 'tree', 'collect', 'read', 'frontend', 'match_phrase_edge', 'session', 'start', 'days_sub', 'last', 'dropp', 'random', 'ipv6', 'date_ceil', 'enable', 'tablesample', 'uninstall', 'repository', 'histogram', 'replace_if_not_null', 'fast', 'belong', 'string', 'consistent', 'in', 'less', 'convert', 'struct', 'authors', 'diagnose', 'json', 'alias', 'binlog', 'outer', 'rlike', 'xor', 'clusters', 'engines', 'resources', 'schema', 'date_add', 'replace', 'variant', 'than', 'call', 'lines', 'unsigned', 'blob', 'explain', 'unlock', 'plan', 'date_sub', 'brief', 'array_range', 'whitelist', 'cross', 'current_date', 'second', 'no_use_mv', 'signed', 'match_condition', 'is', 'true', 'truncate', 'union', 'column', 'datetime', 'repeatable', 'percent', 'rollup', 'on', 'link', 'password_lock_time', 'task', 'all', 'comment', 'interval', 'optimized', 'soname', 'ngram_bf', 'match', 'show', 'drop', 'nulls', 'status', 'plugin', 'ipv4', 'lateral', 'min', 'format', 'asof', 'analyze', 'open', 'cube', 'serializable', 'match_regexp', 'failed_login_attempts', 'sql_block_rule', 'name', 'else', 'switch', 'physical', 'no', 'repair', 'backend', 'stop', 'copy', 'and', 'replica', 'collate', 'materialized', 'current_timestamp', 'profile', 'inner', 'hostname', 'at', 'end', 'committed', 'datev2', 'offset', 'integer', 'encryptkey', 'values', 'backends', 'for', 'observer', 'export', 'clean', 'count', 'restore', 'delete', 'storage', 'non_nullable', 'path', 'streaming', 'encryptkeys', 'starts', 'adddate', 'except', 'broker', 'prepare', 'where', 'rows', 'modify', 'database', 'unique', 'if', 'low_priority', 'text', 'grouping', 'quota', 'rollback', 'bitxor', 'expired', 'datetimev1', 'graph', 'hub', 'doris_internal_table_id', 'both', 'free', 'month', 'having', 'char', 'errors', 'current_catalog', 'begin', 'key', 'indexes', 'like', 'dump', 'table', 'tablets', 'isnull', 'ldap', 'identified', 'after', 'desc', 'hll', 'timestamp', 'foreign', 'hdfs', 'list', 'fields', 'cron', 'then', 'proc', 's3', 'days_add', 'not', 'only', 'bitor', 'row', 'grant', 'tasks', 'query', 'token_filter', 'job', 'events', 'skew', 'time', 'terminated', 'unbounded', 'sequence', 'float', 'distinctpc', 'int', 'ignore', 'properties', 'try_cast', 'year', 'follower', 'varchar', 'week', 'keys', 'rebalance', 'tokenizer', 'temporary', 'generic', 'regexp', 'agg_state', 'binary', 'quantile_union', 'next', 'stream', 'recover', 'partition', 'recycle', 'tablet', 'restrictive', 'localtimestamp', 'refresh', 'max', 'catalog', 'split', 'superuser', 'connection', 'distinct', 'into', 'load', 'install', 'rename', 'process', 'distributed', 'uncommitted', 'date', 'ldap_admin_password', 'force', 'every', 'right', 'groups', 'repositories', 'feature', 'use_mv', 'charset', 'distribution', 'append', 'insert', 'between', 'preceding', 'bitand', 'describe', 'schemas', 'intersect', 'false', 'of', 'revoke', 'update', 'complete', 'tinyint', 'system', 'data', 'jobs', 'first', 'view', 'dual', 'use', 'semi', 'when', 'do', 'lock', 'memo', 'datediff', 'constraint', 'default', 'bin', 'resource', 'snapshot', 'ends', 'decimalv3', 'file', 'exclude', 'pause', 'logical', 'migrate', 'current_user', 'permissive', 'shape', 'trim', 'with', 'collation', 'leading', 'match_phrase', 'overwrite', 'execute', 'quantile_state', 'by', 'deferred', 'minus', 'anti', 'version', 'extract', 'vault', 'as', 'null', 'dynamic', 'day', 'natural', 'timestampdiff', 'bulk', 'merge', 'subdate', 'bigint', 'range', 'engine', 'constraints', 'filter', 'cast', 'map', 'function', 'immediate', 'match_all', 'transaction', 'level', 'names', 'largeint', 'datev1', 'grants', 'cached', 'work'}
def
uniquekeyproperty_sql( self, expression: sqlglot.expressions.properties.UniqueKeyProperty, prefix: str = 'UNIQUE KEY') -> str:
582 def uniquekeyproperty_sql( 583 self, expression: exp.UniqueKeyProperty, prefix: str = "UNIQUE KEY" 584 ) -> str: 585 create_stmt = expression.find_ancestor(exp.Create) 586 if create_stmt and create_stmt.args["properties"].find(exp.MaterializedProperty): 587 return super().uniquekeyproperty_sql(expression, prefix="KEY") 588 589 return super().uniquekeyproperty_sql(expression)
591 def partitionrange_sql(self, expression: exp.PartitionRange) -> str: 592 name = self.sql(expression, "this") 593 values = expression.expressions 594 595 if len(values) != 1: 596 # Multiple values: use VALUES [ ... ) 597 if values and isinstance(values[0], list): 598 values_sql = ", ".join( 599 f"({', '.join(self.sql(v) for v in inner)})" for inner in values 600 ) 601 else: 602 values_sql = ", ".join(f"({self.sql(v)})" for v in values) 603 604 return f"PARTITION {name} VALUES [{values_sql})" 605 606 return f"PARTITION {name} VALUES LESS THAN ({self.sql(values[0])})"
def
partitionbyrangepropertydynamic_sql( self, expression: sqlglot.expressions.properties.PartitionByRangePropertyDynamic) -> str:
608 def partitionbyrangepropertydynamic_sql( 609 self, expression: exp.PartitionByRangePropertyDynamic 610 ) -> str: 611 # Generates: FROM ("start") TO ("end") INTERVAL N UNIT 612 start = self.sql(expression, "start") 613 end = self.sql(expression, "end") 614 every = expression.args.get("every") 615 616 if every: 617 number = self.sql(every, "this") 618 interval = f"INTERVAL {number} {self.sql(every, 'unit')}" 619 else: 620 interval = "" 621 622 return f"FROM ({start}) TO ({end}) {interval}"
def
partitionedbyproperty_sql( self, expression: sqlglot.expressions.properties.PartitionedByProperty) -> str:
630 def table_sql(self, expression: exp.Table, sep: str = " AS ") -> str: 631 """Override table_sql to avoid AS keyword in UPDATE and DELETE statements.""" 632 ancestor = expression.find_ancestor(exp.Update, exp.Delete, exp.Select) 633 if not isinstance(ancestor, exp.Select): 634 sep = " " 635 return super().table_sql(expression, sep=sep)
Override table_sql to avoid AS keyword in UPDATE and DELETE statements.
Inherited Members
- sqlglot.generator.Generator
- Generator
- WINDOW_FUNCS_WITH_NULL_ORDERING
- IGNORE_NULLS_IN_FUNC
- IGNORE_NULLS_BEFORE_ORDER
- EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE
- CREATE_FUNCTION_RETURN_AS
- MATCHED_BY_SOURCE
- SUPPORTS_MERGE_WHERE
- SINGLE_STRING_INTERVAL
- AUTO_REFRESH_BARE_INTERVALS
- GROUPINGS_SEP
- SUPPORTS_GROUPING_SETS_AS_SUFFIX
- INDEX_ON
- INOUT_SEPARATOR
- DIRECTED_JOINS
- QUERY_HINTS
- IS_BOOL_ALLOWED
- 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
- INSERT_OVERWRITE
- SUPPORTS_SELECT_INTO
- SUPPORTS_UNLOGGED_TABLES
- SUPPORTS_CREATE_TABLE_LIKE
- SUPPORTS_ALTER_COLUMN_IF_EXISTS
- 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
- SET_OP_LIMITS
- SET_OP_PARENTHESIZED_OPERANDS
- 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
- MOD_OPERATOR
- MOD_PAREN_PARENT_TYPES
- 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
- create_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
- 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
- clusterproperty_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
- distributedbyproperty_sql
- oncluster_sql
- clusteredbyproperty_sql
- anyvalue_sql
- querytransform_sql
- indexconstraintoption_sql
- checkcolumnconstraint_sql
- indexcolumnconstraint_sql
- nvl2_sql
- nthvalue_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
- arrayinsert_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
- 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
- refreshtriggerproperty_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
- casestatement_sql
- whileblock_sql
- loopblock_sql
- repeatblock_sql
- leave_sql
- iterate_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
- JSON_TYPE_REQUIRED_FOR_EXTRACTION
- JSON_PATH_BRACKETED_KEY_SUPPORTED
- JSON_KEY_VALUE_PAIR_SEP
- SUPPORTS_TO_NUMBER
- PARSE_JSON_NAME
- 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
- SQL_SECURITY_VIEW_LOCATION
- 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