Merging upstream version 17.12.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
aa315e6009
commit
aae08e0bb3
64 changed files with 12465 additions and 11885 deletions
|
@ -71,6 +71,8 @@ class Generator:
|
|||
exp.ExternalProperty: lambda self, e: "EXTERNAL",
|
||||
exp.HeapProperty: lambda self, e: "HEAP",
|
||||
exp.InlineLengthColumnConstraint: lambda self, e: f"INLINE LENGTH {self.sql(e, 'this')}",
|
||||
exp.IntervalDayToSecondSpan: "DAY TO SECOND",
|
||||
exp.IntervalYearToMonthSpan: "YEAR TO MONTH",
|
||||
exp.LanguageProperty: lambda self, e: self.naked_property(e),
|
||||
exp.LocationProperty: lambda self, e: self.naked_property(e),
|
||||
exp.LogProperty: lambda self, e: f"{'NO ' if e.args.get('no') else ''}LOG",
|
||||
|
@ -166,6 +168,9 @@ class Generator:
|
|||
# Whether or not to generate an unquoted value for EXTRACT's date part argument
|
||||
EXTRACT_ALLOWS_QUOTES = True
|
||||
|
||||
# Whether or not TIMETZ / TIMESTAMPTZ will be generated using the "WITH TIME ZONE" syntax
|
||||
TZ_TO_WITH_TIME_ZONE = False
|
||||
|
||||
# https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax
|
||||
SELECT_KINDS: t.Tuple[str, ...] = ("STRUCT", "VALUE")
|
||||
|
||||
|
@ -271,10 +276,12 @@ class Generator:
|
|||
|
||||
# Expressions whose comments are separated from them for better formatting
|
||||
WITH_SEPARATED_COMMENTS: t.Tuple[t.Type[exp.Expression], ...] = (
|
||||
exp.Create,
|
||||
exp.Delete,
|
||||
exp.Drop,
|
||||
exp.From,
|
||||
exp.Insert,
|
||||
exp.Join,
|
||||
exp.Select,
|
||||
exp.Update,
|
||||
exp.Where,
|
||||
|
@ -831,14 +838,17 @@ class Generator:
|
|||
|
||||
def datatype_sql(self, expression: exp.DataType) -> str:
|
||||
type_value = expression.this
|
||||
|
||||
type_sql = (
|
||||
self.TYPE_MAPPING.get(type_value, type_value.value)
|
||||
if isinstance(type_value, exp.DataType.Type)
|
||||
else type_value
|
||||
)
|
||||
|
||||
nested = ""
|
||||
interior = self.expressions(expression, flat=True)
|
||||
values = ""
|
||||
|
||||
if interior:
|
||||
if expression.args.get("nested"):
|
||||
nested = f"{self.STRUCT_DELIMITER[0]}{interior}{self.STRUCT_DELIMITER[1]}"
|
||||
|
@ -846,10 +856,19 @@ class Generator:
|
|||
delimiters = ("[", "]") if type_value == exp.DataType.Type.ARRAY else ("(", ")")
|
||||
values = self.expressions(expression, key="values", flat=True)
|
||||
values = f"{delimiters[0]}{values}{delimiters[1]}"
|
||||
elif type_value == exp.DataType.Type.INTERVAL:
|
||||
nested = f" {interior}"
|
||||
else:
|
||||
nested = f"({interior})"
|
||||
|
||||
return f"{type_sql}{nested}{values}"
|
||||
type_sql = f"{type_sql}{nested}{values}"
|
||||
if self.TZ_TO_WITH_TIME_ZONE and type_value in (
|
||||
exp.DataType.Type.TIMETZ,
|
||||
exp.DataType.Type.TIMESTAMPTZ,
|
||||
):
|
||||
type_sql = f"{type_sql} WITH TIME ZONE"
|
||||
|
||||
return type_sql
|
||||
|
||||
def directory_sql(self, expression: exp.Directory) -> str:
|
||||
local = "LOCAL " if expression.args.get("local") else ""
|
||||
|
@ -1288,7 +1307,12 @@ class Generator:
|
|||
unpivot = expression.args.get("unpivot")
|
||||
direction = "UNPIVOT" if unpivot else "PIVOT"
|
||||
field = self.sql(expression, "field")
|
||||
return f"{direction}({expressions} FOR {field}){alias}"
|
||||
include_nulls = expression.args.get("include_nulls")
|
||||
if include_nulls is not None:
|
||||
nulls = " INCLUDE NULLS " if include_nulls else " EXCLUDE NULLS "
|
||||
else:
|
||||
nulls = ""
|
||||
return f"{direction}{nulls}({expressions} FOR {field}){alias}"
|
||||
|
||||
def tuple_sql(self, expression: exp.Tuple) -> str:
|
||||
return f"({self.expressions(expression, flat=True)})"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue