Skip to content

Commit

Permalink
BigQuery Alter Schema (#5835)
Browse files Browse the repository at this point in the history
  • Loading branch information
greg-finley committed May 3, 2024
1 parent d2e448a commit 4f6760e
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 0 deletions.
38 changes: 38 additions & 0 deletions src/sqlfluff/dialects/dialect_bigquery.py
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,7 @@ class StatementSegment(ansi.StatementSegment):
Ref("ContinueStatementSegment"),
Ref("RaiseStatementSegment"),
Ref("AlterViewStatementSegment"),
Ref("AlterSchemaStatementSegment"),
Ref("CreateMaterializedViewStatementSegment"),
Ref("CreateMaterializedViewAsReplicaOfStatementSegment"),
Ref("AlterMaterializedViewStatementSegment"),
Expand Down Expand Up @@ -1827,6 +1828,43 @@ class AlterTableStatementSegment(ansi.AlterTableStatementSegment):
)


class AlterSchemaStatementSegment(BaseSegment):
"""A `ALTER SCHEMA` statement."""

type = "alter_schema_statement"

match_grammar: Matchable = Sequence(
"ALTER",
"SCHEMA",
Ref("IfNotExistsGrammar", optional=True),
Ref("TableReferenceSegment"),
OneOf(
Sequence(
"SET",
OneOf(
# https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#alter_schema_collate_statement
Ref("DefaultCollateSegment"),
# https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#alter_schema_set_options_statement
Ref("OptionsSegment"),
),
),
# https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#alter_schema_add_replica_statement
Sequence(
"ADD",
"REPLICA",
Ref("BaseExpressionElementGrammar"),
Ref("OptionsSegment", optional=True),
),
# https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#alter_schema_drop_replica_statement
Sequence(
"DROP",
"REPLICA",
Ref("BaseExpressionElementGrammar"),
),
),
)


class CreateExternalTableStatementSegment(BaseSegment):
"""A `CREATE EXTERNAL TABLE` statement.
Expand Down
11 changes: 11 additions & 0 deletions test/fixtures/dialects/bigquery/alter_schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ALTER SCHEMA example_dataset
SET DEFAULT COLLATE "und:ci";

ALTER SCHEMA example_dataset
SET OPTIONS(description="");

ALTER SCHEMA example_dataset
ADD REPLICA `EU` OPTIONS(location=`eu`);

ALTER SCHEMA example_dataset
DROP REPLICA `EU`;
68 changes: 68 additions & 0 deletions test/fixtures/dialects/bigquery/alter_schema.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# YML test files are auto-generated from SQL files and should not be edited by
# hand. To help enforce this, the "hash" field in the file must match a hash
# computed by SQLFluff when running the tests. Please run
# `python test/generate_parse_fixture_yml.py` to generate them after adding or
# altering SQL files.
_hash: 2c88c9247c171e647f853cd704b69e76dd9aa1a0dcb86ad26f6280a9e89c8a0b
file:
- statement:
alter_schema_statement:
- keyword: ALTER
- keyword: SCHEMA
- table_reference:
naked_identifier: example_dataset
- keyword: SET
- default_collate:
- keyword: DEFAULT
- keyword: COLLATE
- quoted_literal: '"und:ci"'
- statement_terminator: ;
- statement:
alter_schema_statement:
- keyword: ALTER
- keyword: SCHEMA
- table_reference:
naked_identifier: example_dataset
- keyword: SET
- options_segment:
keyword: OPTIONS
bracketed:
start_bracket: (
parameter: description
comparison_operator:
raw_comparison_operator: '='
quoted_literal: '""'
end_bracket: )
- statement_terminator: ;
- statement:
alter_schema_statement:
- keyword: ALTER
- keyword: SCHEMA
- table_reference:
naked_identifier: example_dataset
- keyword: ADD
- keyword: REPLICA
- column_reference:
quoted_identifier: '`EU`'
- options_segment:
keyword: OPTIONS
bracketed:
start_bracket: (
parameter: location
comparison_operator:
raw_comparison_operator: '='
column_reference:
quoted_identifier: '`eu`'
end_bracket: )
- statement_terminator: ;
- statement:
alter_schema_statement:
- keyword: ALTER
- keyword: SCHEMA
- table_reference:
naked_identifier: example_dataset
- keyword: DROP
- keyword: REPLICA
- column_reference:
quoted_identifier: '`EU`'
- statement_terminator: ;

0 comments on commit 4f6760e

Please sign in to comment.