Skip to content

Commit 6b00e9e

Browse files
committed
Merge PR #319: Support bigquery DDL optional args
2 parents 228991e + 9f4879a commit 6b00e9e

File tree

5 files changed

+732
-73
lines changed

5 files changed

+732
-73
lines changed

src/languages/bigquery/bigquery.formatter.ts

Lines changed: 75 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,59 +31,114 @@ const reservedCommands = [
3131
'MERGE INTO',
3232
// 'USING',
3333
// DDL, https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language
34-
'SET SCHEMA', // added
3534
'CREATE SCHEMA',
35+
'CREATE SCHEMA IF NOT EXISTS',
36+
'DEFAULT COLLATE',
3637
'CREATE TABLE',
3738
'CREATE TABLE IF NOT EXISTS',
3839
'CREATE TEMP TABLE',
3940
'CREATE TEMP TABLE IF NOT EXISTS',
4041
'CREATE TEMPORARY TABLE',
4142
'CREATE TEMPORARY TABLE IF NOT EXISTS',
43+
'CLUSTER BY',
4244
'CREATE OR REPLACE TABLE',
4345
'CREATE OR REPLACE TEMP TABLE',
4446
'CREATE OR REPLACE TEMPORARY TABLE',
45-
'CREATE TABLE LIKE',
46-
'CREATE TABLE COPY',
47+
'FOR SYSTEM_TIME AS OF', // CREATE SNAPSHOT TABLE
4748
'CREATE SNAPSHOT TABLE',
48-
'CREATE TABLE CLONE',
49+
'CREATE SNAPSHOT TABLE IF NOT EXISTS',
4950
'CREATE VIEW',
5051
'CREATE VIEW IF NOT EXISTS',
5152
'CREATE OR REPLACE VIEW',
5253
'CREATE MATERIALIZED VIEW',
54+
'CREATE OR REPLACE MATERIALIZED VIEW',
55+
'CREATE MATERIALIZED VIEW IF NOT EXISTS',
5356
'CREATE EXTERNAL TABLE',
57+
'CREATE OR REPLACE EXTERNAL TABLE',
58+
'CREATE EXTERNAL TABLE IF NOT EXISTS',
59+
'WITH CONNECTION',
60+
'WITH PARTITION COLUMNS',
5461
'CREATE FUNCTION',
62+
'CREATE OR REPLACE FUNCTION',
63+
'CREATE FUNCTION IF NOT EXISTS',
64+
'CREATE TEMP FUNCTION',
65+
'CREATE OR REPLACE TEMP FUNCTION',
66+
'CREATE TEMP FUNCTION IF NOT EXISTS',
67+
'CREATE TEMPORARY FUNCTION',
68+
'CREATE OR REPLACE TEMPORARY FUNCTION',
69+
'CREATE TEMPORARY FUNCTION IF NOT EXISTS',
70+
'REMOTE WITH CONNECTION',
5571
'CREATE TABLE FUNCTION',
72+
'CREATE OR REPLACE TABLE FUNCTION',
73+
'CREATE TABLE FUNCTION IF NOT EXISTS',
74+
'RETURNS TABLE',
5675
'CREATE PROCEDURE',
76+
'CREATE OR REPLACE PROCEDURE',
77+
'CREATE PROCEDURE IF NOT EXISTS',
5778
'CREATE ROW ACCESS POLICY',
58-
'ALTER SCHEMA SET OPTIONS',
59-
'ALTER TABLE SET OPTIONS',
60-
'ALTER TABLE ADD COLUMN',
61-
'ALTER TABLE RENAME TO',
62-
'ALTER TABLE DROP COLUMN',
63-
'ALTER COLUMN SET OPTIONS',
64-
'ALTER COLUMN DROP NOT NULL',
65-
'ALTER COLUMN SET DATA TYPE',
66-
'ALTER VIEW SET OPTIONS',
67-
'ALTER MATERIALIZED VIEW SET OPTIONS',
79+
'CREATE OR REPLACE ROW ACCESS POLICY',
80+
'CREATE ROW ACCESS POLICY IF NOT EXISTS',
81+
'GRANT TO',
82+
'FILTER USING',
83+
'CREATE CAPACITY',
84+
'AS JSON',
85+
'CREATE RESERVATION',
86+
'CREATE ASSIGNMENT',
87+
'CREATE SEARCH INDEX',
88+
'CREATE SEARCH INDEX IF NOT EXISTS',
89+
'ALTER SCHEMA',
90+
'ALTER SCHEMA IF EXISTS',
91+
'SET DEFAULT COLLATE',
92+
'SET OPTIONS',
93+
'ALTER TABLE',
94+
'ALTER TABLE IF EXISTS',
95+
'ADD COLUMN',
96+
'ADD COLUMN IF NOT EXISTS',
97+
'RENAME TO',
98+
'DROP COLUMN',
99+
'DROP COLUMN IF EXISTS',
100+
'ALTER COLUMN',
101+
'ALTER COLUMN IF EXISTS',
102+
'DROP NOT NULL',
103+
'SET DATA TYPE',
104+
'ALTER VIEW',
105+
'ALTER VIEW IF EXISTS',
106+
'ALTER MATERIALIZED VIEW',
107+
'ALTER MATERIALIZED VIEW IF EXISTS',
108+
'ALTER BI_CAPACITY',
68109
'DROP SCHEMA',
110+
'DROP SCHEMA IF EXISTS',
69111
'DROP TABLE',
112+
'DROP TABLE IF EXISTS',
70113
'DROP SNAPSHOT TABLE',
114+
'DROP SNAPSHOT TABLE IF EXISTS',
71115
'DROP EXTERNAL TABLE',
116+
'DROP EXTERNAL TABLE IF EXISTS',
72117
'DROP VIEW',
118+
'DROP VIEW IF EXISTS',
73119
'DROP MATERIALIZED VIEW',
120+
'DROP MATERIALIZED VIEW IF EXISTS',
74121
'DROP FUNCTION',
122+
'DROP FUNCTION IF EXISTS',
75123
'DROP TABLE FUNCTION',
124+
'DROP TABLE FUNCTION IF EXISTS',
76125
'DROP PROCEDURE',
126+
'DROP PROCEDURE IF EXISTS',
77127
'DROP ROW ACCESS POLICY',
78-
// DCL, https://cloud.google.com/bigquery/docs/reference/standard-sql/data-control-language
79-
'GRANT',
80-
'REVOKE',
81-
'CREATE CAPACITY',
82-
'CREATE RESERVATION',
83-
'CREATE ASSIGNMENT',
128+
'DROP ALL ROW ACCESS POLICIES',
84129
'DROP CAPACITY',
130+
'DROP CAPACITY IF EXISTS',
85131
'DROP RESERVATION',
132+
'DROP RESERVATION IF EXISTS',
86133
'DROP ASSIGNMENT',
134+
'DROP ASSIGNMENT IF EXISTS',
135+
'DROP SEARCH INDEX',
136+
'DROP SEARCH INDEX IF EXISTS',
137+
'DROP',
138+
'DROP IF EXISTS',
139+
// DCL, https://cloud.google.com/bigquery/docs/reference/standard-sql/data-control-language
140+
'GRANT',
141+
'REVOKE',
87142
// Script, https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
88143
'DECLARE',
89144
'SET',

src/languages/bigquery/bigquery.functions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,7 @@ export const functions = flatKeywordList({
536536
'TO_BASE64',
537537
],
538538
other: ['BQ.JOBS.CANCEL', 'BQ.REFRESH_MATERIALIZED_VIEW'],
539+
ddl: ['OPTIONS'],
539540
pivot: ['PIVOT', 'UNPIVOT'],
540541
// Data types with parameters like VARCHAR(100)
541542
// https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#parameterized_data_types

src/languages/bigquery/bigquery.keywords.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,4 +127,21 @@ export const keywords = flatKeywordList({
127127
// https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions#formatting_syntax
128128
stringFormat: ['HEX', 'BASEX', 'BASE64M', 'ASCII', 'UTF-8', 'UTF8'],
129129
misc: ['SAFE'],
130+
// https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language
131+
ddl: [
132+
// 'LIKE', // CREATE TABLE LIKE
133+
'COPY', // CREATE TABLE COPY
134+
'CLONE', // CREATE TABLE CLONE
135+
// 'IN',
136+
'OUT',
137+
'INOUT',
138+
'RETURNS',
139+
'LANGUAGE',
140+
'ANY TYPE',
141+
'ALL COLUMNS',
142+
'CASCADE',
143+
'RESTRICT',
144+
'DETERMINISTIC',
145+
'NOT DETERMINISTIC',
146+
],
130147
});

test/behavesLikeSqlFormatter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,10 @@ export default function behavesLikeSqlFormatter(format: FormatFn) {
250250
});
251251

252252
it('formats simple DROP query', () => {
253-
const result = format('DROP TABLE IF EXISTS admin_role;');
253+
const result = format('DROP TABLE admin_role;');
254254
expect(result).toBe(dedent`
255255
DROP TABLE
256-
IF EXISTS admin_role;
256+
admin_role;
257257
`);
258258
});
259259

0 commit comments

Comments
 (0)