diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 16:13:01 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 16:13:01 +0000 |
commit | a7044b672667f2a0b48bd0b326b5a55b0815ef79 (patch) | |
tree | 4fb5238d47fb4709d47f766a74b8bbaa9c6f17d8 /sqlglot/dialects/snowflake.py | |
parent | Releasing debian version 23.12.1-1. (diff) | |
download | sqlglot-a7044b672667f2a0b48bd0b326b5a55b0815ef79.tar.xz sqlglot-a7044b672667f2a0b48bd0b326b5a55b0815ef79.zip |
Merging upstream version 23.13.1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sqlglot/dialects/snowflake.py')
-rw-r--r-- | sqlglot/dialects/snowflake.py | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/sqlglot/dialects/snowflake.py b/sqlglot/dialects/snowflake.py index dba56c4..b79386a 100644 --- a/sqlglot/dialects/snowflake.py +++ b/sqlglot/dialects/snowflake.py @@ -289,6 +289,7 @@ class Snowflake(Dialect): SUPPORTS_SEMI_ANTI_JOIN = False PREFER_CTE_ALIAS_COLUMN = True TABLESAMPLE_SIZE_IS_PERCENT = True + COPY_PARAMS_ARE_CSV = False TIME_MAPPING = { "YYYY": "%Y", @@ -439,7 +440,7 @@ class Snowflake(Dialect): PROPERTY_PARSERS = { **parser.Parser.PROPERTY_PARSERS, - "LOCATION": lambda self: self._parse_location(), + "LOCATION": lambda self: self._parse_location_property(), } SHOW_PARSERS = { @@ -675,10 +676,13 @@ class Snowflake(Dialect): self._match_text_seq("WITH") return self.expression(exp.SwapTable, this=self._parse_table(schema=True)) - def _parse_location(self) -> exp.LocationProperty: + def _parse_location_property(self) -> exp.LocationProperty: self._match(TokenType.EQ) return self.expression(exp.LocationProperty, this=self._parse_location_path()) + def _parse_file_location(self) -> t.Optional[exp.Expression]: + return self._parse_table_parts() + def _parse_location_path(self) -> exp.Var: parts = [self._advance_any(ignore_reserved=True)] @@ -715,10 +719,7 @@ class Snowflake(Dialect): "SQL_DOUBLE": TokenType.DOUBLE, "SQL_VARCHAR": TokenType.VARCHAR, "STORAGE INTEGRATION": TokenType.STORAGE_INTEGRATION, - "TIMESTAMP_LTZ": TokenType.TIMESTAMPLTZ, - "TIMESTAMP_NTZ": TokenType.TIMESTAMP, "TIMESTAMP_TZ": TokenType.TIMESTAMPTZ, - "TIMESTAMPNTZ": TokenType.TIMESTAMP, "TOP": TokenType.TOP, } @@ -745,6 +746,8 @@ class Snowflake(Dialect): JSON_KEY_VALUE_PAIR_SEP = "," INSERT_OVERWRITE = " OVERWRITE INTO" STRUCT_DELIMITER = ("(", ")") + COPY_PARAMS_ARE_WRAPPED = False + COPY_PARAMS_EQ_REQUIRED = True TRANSFORMS = { **generator.Generator.TRANSFORMS, @@ -845,7 +848,6 @@ class Snowflake(Dialect): **generator.Generator.TYPE_MAPPING, exp.DataType.Type.NESTED: "OBJECT", exp.DataType.Type.STRUCT: "OBJECT", - exp.DataType.Type.TIMESTAMP: "TIMESTAMPNTZ", } STAR_MAPPING = { @@ -1038,3 +1040,11 @@ class Snowflake(Dialect): values.append(e) return self.func("OBJECT_CONSTRUCT", *flatten(zip(keys, values))) + + def copyparameter_sql(self, expression: exp.CopyParameter) -> str: + option = self.sql(expression, "this") + if option.upper() == "FILE_FORMAT": + values = self.expressions(expression, key="expression", flat=True, sep=" ") + return f"{option} = ({values})" + + return super().copyparameter_sql(expression) |