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