Merging upstream version 17.9.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
2bf6699c56
commit
9777880e00
87 changed files with 45907 additions and 42511 deletions
|
@ -68,6 +68,7 @@ class Generator:
|
|||
exp.EncodeColumnConstraint: lambda self, e: f"ENCODE {self.sql(e, 'this')}",
|
||||
exp.ExecuteAsProperty: lambda self, e: self.naked_property(e),
|
||||
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.LanguageProperty: lambda self, e: self.naked_property(e),
|
||||
exp.LocationProperty: lambda self, e: self.naked_property(e),
|
||||
|
@ -161,6 +162,9 @@ class Generator:
|
|||
# Whether or not to generate the (+) suffix for columns used in old-style join conditions
|
||||
COLUMN_JOIN_MARKS_SUPPORTED = False
|
||||
|
||||
# Whether or not to generate an unquoted value for EXTRACT's date part argument
|
||||
EXTRACT_ALLOWS_QUOTES = True
|
||||
|
||||
# https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax
|
||||
SELECT_KINDS: t.Tuple[str, ...] = ("STRUCT", "VALUE")
|
||||
|
||||
|
@ -224,6 +228,7 @@ class Generator:
|
|||
exp.FallbackProperty: exp.Properties.Location.POST_NAME,
|
||||
exp.FileFormatProperty: exp.Properties.Location.POST_WITH,
|
||||
exp.FreespaceProperty: exp.Properties.Location.POST_NAME,
|
||||
exp.HeapProperty: exp.Properties.Location.POST_WITH,
|
||||
exp.IsolatedLoadingProperty: exp.Properties.Location.POST_NAME,
|
||||
exp.JournalProperty: exp.Properties.Location.POST_NAME,
|
||||
exp.LanguageProperty: exp.Properties.Location.POST_SCHEMA,
|
||||
|
@ -265,9 +270,12 @@ class Generator:
|
|||
|
||||
# Expressions whose comments are separated from them for better formatting
|
||||
WITH_SEPARATED_COMMENTS: t.Tuple[t.Type[exp.Expression], ...] = (
|
||||
exp.Delete,
|
||||
exp.Drop,
|
||||
exp.From,
|
||||
exp.Insert,
|
||||
exp.Select,
|
||||
exp.Update,
|
||||
exp.Where,
|
||||
exp.With,
|
||||
)
|
||||
|
@ -985,8 +993,9 @@ class Generator:
|
|||
) -> str:
|
||||
if properties.expressions:
|
||||
expressions = self.expressions(properties, sep=sep, indent=False)
|
||||
expressions = self.wrap(expressions) if wrapped else expressions
|
||||
return f"{prefix}{' ' if prefix and prefix != ' ' else ''}{expressions}{suffix}"
|
||||
if expressions:
|
||||
expressions = self.wrap(expressions) if wrapped else expressions
|
||||
return f"{prefix}{' ' if prefix and prefix != ' ' else ''}{expressions}{suffix}"
|
||||
return ""
|
||||
|
||||
def with_properties(self, properties: exp.Properties) -> str:
|
||||
|
@ -1905,7 +1914,7 @@ class Generator:
|
|||
return f"NEXT VALUE FOR {self.sql(expression, 'this')}{order}"
|
||||
|
||||
def extract_sql(self, expression: exp.Extract) -> str:
|
||||
this = self.sql(expression, "this")
|
||||
this = self.sql(expression, "this") if self.EXTRACT_ALLOWS_QUOTES else expression.this.name
|
||||
expression_sql = self.sql(expression, "expression")
|
||||
return f"EXTRACT({this} FROM {expression_sql})"
|
||||
|
||||
|
@ -2370,7 +2379,12 @@ class Generator:
|
|||
elif arg_value is not None:
|
||||
args.append(arg_value)
|
||||
|
||||
return self.func(expression.sql_name(), *args)
|
||||
if self.normalize_functions:
|
||||
name = expression.sql_name()
|
||||
else:
|
||||
name = (expression._meta and expression.meta.get("name")) or expression.sql_name()
|
||||
|
||||
return self.func(name, *args)
|
||||
|
||||
def func(
|
||||
self,
|
||||
|
@ -2412,7 +2426,7 @@ class Generator:
|
|||
return ""
|
||||
|
||||
if flat:
|
||||
return sep.join(self.sql(e) for e in expressions)
|
||||
return sep.join(sql for sql in (self.sql(e) for e in expressions) if sql)
|
||||
|
||||
num_sqls = len(expressions)
|
||||
|
||||
|
@ -2423,6 +2437,9 @@ class Generator:
|
|||
result_sqls = []
|
||||
for i, e in enumerate(expressions):
|
||||
sql = self.sql(e, comment=False)
|
||||
if not sql:
|
||||
continue
|
||||
|
||||
comments = self.maybe_comment("", e) if isinstance(e, exp.Expression) else ""
|
||||
|
||||
if self.pretty:
|
||||
|
@ -2562,6 +2579,51 @@ class Generator:
|
|||
record_reader = f" RECORDREADER {record_reader}" if record_reader else ""
|
||||
return f"{transform}{row_format_before}{record_writer}{using}{schema}{row_format_after}{record_reader}"
|
||||
|
||||
def indexconstraintoption_sql(self, expression: exp.IndexConstraintOption) -> str:
|
||||
key_block_size = self.sql(expression, "key_block_size")
|
||||
if key_block_size:
|
||||
return f"KEY_BLOCK_SIZE = {key_block_size}"
|
||||
|
||||
using = self.sql(expression, "using")
|
||||
if using:
|
||||
return f"USING {using}"
|
||||
|
||||
parser = self.sql(expression, "parser")
|
||||
if parser:
|
||||
return f"WITH PARSER {parser}"
|
||||
|
||||
comment = self.sql(expression, "comment")
|
||||
if comment:
|
||||
return f"COMMENT {comment}"
|
||||
|
||||
visible = expression.args.get("visible")
|
||||
if visible is not None:
|
||||
return "VISIBLE" if visible else "INVISIBLE"
|
||||
|
||||
engine_attr = self.sql(expression, "engine_attr")
|
||||
if engine_attr:
|
||||
return f"ENGINE_ATTRIBUTE = {engine_attr}"
|
||||
|
||||
secondary_engine_attr = self.sql(expression, "secondary_engine_attr")
|
||||
if secondary_engine_attr:
|
||||
return f"SECONDARY_ENGINE_ATTRIBUTE = {secondary_engine_attr}"
|
||||
|
||||
self.unsupported("Unsupported index constraint option.")
|
||||
return ""
|
||||
|
||||
def indexcolumnconstraint_sql(self, expression: exp.IndexColumnConstraint) -> str:
|
||||
kind = self.sql(expression, "kind")
|
||||
kind = f"{kind} INDEX" if kind else "INDEX"
|
||||
this = self.sql(expression, "this")
|
||||
this = f" {this}" if this else ""
|
||||
type_ = self.sql(expression, "type")
|
||||
type_ = f" USING {type_}" if type_ else ""
|
||||
schema = self.sql(expression, "schema")
|
||||
schema = f" {schema}" if schema else ""
|
||||
options = self.expressions(expression, key="options", sep=" ")
|
||||
options = f" {options}" if options else ""
|
||||
return f"{kind}{this}{type_}{schema}{options}"
|
||||
|
||||
|
||||
def cached_generator(
|
||||
cache: t.Optional[t.Dict[int, str]] = None
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue