1
0
Fork 0

Merging upstream version 26.2.1.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-13 22:00:08 +01:00
parent a5399bd16b
commit 4d0635d636
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
85 changed files with 57142 additions and 52288 deletions

View file

@ -114,12 +114,15 @@ class Generator(metaclass=_Generator):
**JSON_PATH_PART_TRANSFORMS,
exp.AllowedValuesProperty: lambda self,
e: f"ALLOWED_VALUES {self.expressions(e, flat=True)}",
exp.AnalyzeColumns: lambda self, e: self.sql(e, "this"),
exp.AnalyzeWith: lambda self, e: self.expressions(e, prefix="WITH ", sep=" "),
exp.ArrayContainsAll: lambda self, e: self.binary(e, "@>"),
exp.ArrayOverlaps: lambda self, e: self.binary(e, "&&"),
exp.AutoRefreshProperty: lambda self, e: f"AUTO REFRESH {self.sql(e, 'this')}",
exp.BackupProperty: lambda self, e: f"BACKUP {self.sql(e, 'this')}",
exp.CaseSpecificColumnConstraint: lambda _,
e: f"{'NOT ' if e.args.get('not_') else ''}CASESPECIFIC",
exp.Ceil: lambda self, e: self.ceil_floor(e),
exp.CharacterSetColumnConstraint: lambda self, e: f"CHARACTER SET {self.sql(e, 'this')}",
exp.CharacterSetProperty: lambda self,
e: f"{'DEFAULT ' if e.args.get('default') else ''}CHARACTER SET={self.sql(e, 'this')}",
@ -140,6 +143,7 @@ class Generator(metaclass=_Generator):
exp.ExecuteAsProperty: lambda self, e: self.naked_property(e),
exp.Except: lambda self, e: self.set_operations(e),
exp.ExternalProperty: lambda *_: "EXTERNAL",
exp.Floor: lambda self, e: self.ceil_floor(e),
exp.GlobalProperty: lambda *_: "GLOBAL",
exp.HeapProperty: lambda *_: "HEAP",
exp.IcebergProperty: lambda *_: "ICEBERG",
@ -196,6 +200,7 @@ class Generator(metaclass=_Generator):
exp.TransientProperty: lambda *_: "TRANSIENT",
exp.Union: lambda self, e: self.set_operations(e),
exp.UnloggedProperty: lambda *_: "UNLOGGED",
exp.UsingData: lambda self, e: f"USING DATA {self.sql(e, 'this')}",
exp.Uuid: lambda *_: "UUID()",
exp.UppercaseColumnConstraint: lambda *_: "UPPERCASE",
exp.VarMap: lambda self, e: self.func("MAP", e.args["keys"], e.args["values"]),
@ -1556,7 +1561,8 @@ class Generator(metaclass=_Generator):
return f"{prefix}{string}"
def partition_sql(self, expression: exp.Partition) -> str:
return f"PARTITION({self.expressions(expression, flat=True)})"
partition_keyword = "SUBPARTITION" if expression.args.get("subpartition") else "PARTITION"
return f"{partition_keyword}({self.expressions(expression, flat=True)})"
def properties_sql(self, expression: exp.Properties) -> str:
root_properties = []
@ -3532,6 +3538,13 @@ class Generator(metaclass=_Generator):
return "".join(sqls)
def ceil_floor(self, expression: exp.Ceil | exp.Floor) -> str:
to_clause = self.sql(expression, "to")
if to_clause:
return f"{expression.sql_name()}({self.sql(expression, 'this')} TO {to_clause})"
return self.function_fallback_sql(expression)
def function_fallback_sql(self, expression: exp.Func) -> str:
args = []
@ -4647,6 +4660,63 @@ class Generator(metaclass=_Generator):
return f"NAME {name} VALUE {values}"
def analyzesample_sql(self, expression: exp.AnalyzeSample) -> str:
kind = self.sql(expression, "kind")
sample = self.sql(expression, "sample")
return f"SAMPLE {sample} {kind}"
def analyzestatistics_sql(self, expression: exp.AnalyzeStatistics) -> str:
kind = self.sql(expression, "kind")
option = self.sql(expression, "option")
option = f" {option}" if option else ""
this = self.sql(expression, "this")
this = f" {this}" if this else ""
columns = self.expressions(expression)
columns = f" {columns}" if columns else ""
return f"{kind}{option} STATISTICS{this}{columns}"
def analyzehistogram_sql(self, expression: exp.AnalyzeHistogram) -> str:
this = self.sql(expression, "this")
columns = self.expressions(expression)
inner_expression = self.sql(expression, "expression")
inner_expression = f" {inner_expression}" if inner_expression else ""
update_options = self.sql(expression, "update_options")
update_options = f" {update_options} UPDATE" if update_options else ""
return f"{this} HISTOGRAM ON {columns}{inner_expression}{update_options}"
def analyzedelete_sql(self, expression: exp.AnalyzeDelete) -> str:
kind = self.sql(expression, "kind")
kind = f" {kind}" if kind else ""
return f"DELETE{kind} STATISTICS"
def analyzelistchainedrows_sql(self, expression: exp.AnalyzeListChainedRows) -> str:
inner_expression = self.sql(expression, "expression")
return f"LIST CHAINED ROWS{inner_expression}"
def analyzevalidate_sql(self, expression: exp.AnalyzeValidate) -> str:
kind = self.sql(expression, "kind")
this = self.sql(expression, "this")
this = f" {this}" if this else ""
inner_expression = self.sql(expression, "expression")
return f"VALIDATE {kind}{this}{inner_expression}"
def analyze_sql(self, expression: exp.Analyze) -> str:
options = self.expressions(expression, key="options", sep=" ")
options = f" {options}" if options else ""
kind = self.sql(expression, "kind")
kind = f" {kind}" if kind else ""
this = self.sql(expression, "this")
this = f" {this}" if this else ""
mode = self.sql(expression, "mode")
mode = f" {mode}" if mode else ""
properties = self.sql(expression, "properties")
properties = f" {properties}" if properties else ""
partition = self.sql(expression, "partition")
partition = f" {partition}" if partition else ""
inner_expression = self.sql(expression, "expression")
inner_expression = f" {inner_expression}" if inner_expression else ""
return f"ANALYZE{options}{kind}{this}{partition}{mode}{inner_expression}{properties}"
def xmltable_sql(self, expression: exp.XMLTable) -> str:
this = self.sql(expression, "this")
passing = self.expressions(expression, key="passing")