@dbml/core 3.5.0 → 3.5.2-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4368 @@
1
+ /*
2
+ Original: https://github.com/antlr/grammars-v4/blob/master/sql/snowflake/SnowflakeParser.g4
3
+ Last updated: 2024-06-26
4
+ */
5
+
6
+ /*
7
+ Snowflake Database grammar.
8
+ The MIT License (MIT).
9
+
10
+ Copyright (c) 2022, Michał Lorek.
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+ The above copyright notice and this permission notice shall be included in
19
+ all copies or substantial portions of the Software.
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
26
+ THE SOFTWARE.
27
+ */
28
+
29
+ // $antlr-format alignTrailingComments true, columnLimit 150, minEmptyLines 1, maxEmptyLinesToKeep 1, reflowComments false, useTab false
30
+ // $antlr-format allowShortRulesOnASingleLine false, allowShortBlocksOnASingleLine true, alignSemicolons hanging, alignColons hanging
31
+
32
+ parser grammar SnowflakeParser;
33
+
34
+ options {
35
+ tokenVocab = SnowflakeLexer;
36
+ }
37
+
38
+ snowflake_file
39
+ : batch? EOF
40
+ ;
41
+
42
+ batch
43
+ : sql_command (SEMI sql_command)* SEMI?
44
+ ;
45
+
46
+ sql_command
47
+ : ddl_command
48
+ | dml_command
49
+ | show_command
50
+ | use_command
51
+ | describe_command
52
+ | other_command
53
+ ;
54
+
55
+ ddl_command
56
+ : alter_command
57
+ | create_command
58
+ | drop_command
59
+ | undrop_command
60
+ ;
61
+
62
+ dml_command
63
+ : query_statement
64
+ | insert_statement
65
+ | insert_multi_table_statement
66
+ | update_statement
67
+ | delete_statement
68
+ | merge_statement
69
+ ;
70
+
71
+ insert_statement
72
+ : INSERT OVERWRITE? INTO object_name column_list_in_parentheses? (
73
+ values_builder
74
+ | query_statement
75
+ )
76
+ ;
77
+
78
+ insert_multi_table_statement
79
+ : INSERT OVERWRITE? ALL into_clause2
80
+ | INSERT OVERWRITE? (FIRST | ALL) (WHEN predicate THEN into_clause2+)+ (ELSE into_clause2)? subquery
81
+ ;
82
+
83
+ into_clause2
84
+ : INTO object_name ('(' column_list ')')? values_list?
85
+ ;
86
+
87
+ values_list
88
+ : VALUES '(' value_item (COMMA value_item)* ')'
89
+ ;
90
+
91
+ value_item
92
+ : column_name
93
+ | DEFAULT
94
+ | NULL_
95
+ ;
96
+
97
+ merge_statement
98
+ : MERGE INTO object_name as_alias? USING table_source ON search_condition merge_matches
99
+ ;
100
+
101
+ merge_matches
102
+ : merge_cond+
103
+ ;
104
+
105
+ merge_cond
106
+ : (WHEN MATCHED (AND search_condition)? THEN merge_update_delete)+
107
+ | WHEN NOT MATCHED (AND search_condition)? THEN merge_insert
108
+ ;
109
+
110
+ merge_update_delete
111
+ : UPDATE SET column_name EQ expr (',' column_name EQ expr)*
112
+ | DELETE
113
+ ;
114
+
115
+ merge_insert
116
+ : INSERT ('(' column_list ')')? VALUES '(' expr_list ')'
117
+ ;
118
+
119
+ update_statement
120
+ : UPDATE object_name as_alias? SET column_name EQ expr (COMMA column_name EQ expr)* (
121
+ FROM table_sources
122
+ )? (WHERE search_condition)?
123
+ ;
124
+
125
+ table_or_query
126
+ : object_name as_alias?
127
+ | '(' subquery ')' as_alias?
128
+ ;
129
+
130
+ delete_statement
131
+ : DELETE FROM object_name as_alias? (USING table_or_query (COMMA table_or_query)?)? (
132
+ WHERE search_condition
133
+ )?
134
+ ;
135
+
136
+ values_builder
137
+ : VALUES '(' expr_list ')' (COMMA '(' expr_list ')')?
138
+ ;
139
+
140
+ other_command
141
+ : copy_into_table
142
+ | copy_into_location
143
+ | comment
144
+ | commit
145
+ | execute_immediate
146
+ | execute_task
147
+ | explain
148
+ | get_dml
149
+ | grant_ownership
150
+ | grant_to_role
151
+ | grant_to_share
152
+ | grant_role
153
+ | list
154
+ | put
155
+ | remove
156
+ | revoke_from_role
157
+ | revoke_from_share
158
+ | revoke_role
159
+ | rollback
160
+ | set
161
+ | truncate_materialized_view
162
+ | truncate_table
163
+ | unset
164
+ | call
165
+ | begin_txn
166
+ ;
167
+
168
+ begin_txn
169
+ : BEGIN (WORK | TRANSACTION)? (NAME id_)?
170
+ | START TRANSACTION ( NAME id_)?
171
+ ;
172
+
173
+ copy_into_table
174
+ : COPY INTO object_name FROM (table_stage | user_stage | named_stage | external_location) files? pattern? file_format? copy_options* (
175
+ VALIDATION_MODE EQ (RETURN_N_ROWS | RETURN_ERRORS | RETURN_ALL_ERRORS)
176
+ )?
177
+ //
178
+ /* Data load with transformation */
179
+ | COPY INTO object_name ('(' column_list ')')? FROM '(' SELECT select_list FROM (
180
+ table_stage
181
+ | user_stage
182
+ | named_stage
183
+ ) ')' files? pattern? file_format? copy_options*
184
+ ;
185
+
186
+ external_location
187
+ //(for Amazon S3)
188
+ : S3_PATH //'s3://<bucket>[/<path>]'
189
+ // ( ( STORAGE_INTEGRATION EQ id_ )?
190
+ // | ( CREDENTIALS EQ '(' ( AWS_KEY_ID EQ string AWS_SECRET_KEY EQ string ( AWS_TOKEN EQ string )? ) ')' )?
191
+ // )?
192
+ // [ ENCRYPTION = ( [ TYPE = 'AWS_CSE' ] [ MASTER_KEY = '<string>' ] |
193
+ // [ TYPE = 'AWS_SSE_S3' ] |
194
+ // [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '<string>' ] ] |
195
+ // [ TYPE = 'NONE' ] ) ]
196
+ // (for Google Cloud Storage)
197
+ | GCS_PATH //'gcs://<bucket>[/<path>]'
198
+ // ( STORAGE_INTEGRATION EQ id_ )?
199
+ //[ ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' ] [ KMS_KEY_ID = '<string>' ] | [ TYPE = 'NONE' ] ) ]
200
+ // (for Microsoft Azure)
201
+ | AZURE_PATH //'azure://<account>.blob.core.windows.net/<container>[/<path>]'
202
+ // ( ( STORAGE_INTEGRATION EQ id_ )?
203
+ // | ( CREDENTIALS EQ '(' ( AZURE_SAS_TOKEN EQ string ) ')' )
204
+ // )?
205
+ //[ ENCRYPTION = ( [ TYPE = { 'AZURE_CSE' | 'NONE' } ] [ MASTER_KEY = '<string>' ] ) ]
206
+ ;
207
+
208
+ files
209
+ : FILES EQ '(' string (COMMA string)* ')'
210
+ ;
211
+
212
+ file_format
213
+ : FILE_FORMAT EQ '(' (format_name | format_type) ')'
214
+ ;
215
+
216
+ format_name
217
+ : FORMAT_NAME EQ string
218
+ ;
219
+
220
+ format_type
221
+ : TYPE EQ type_fileformat format_type_options*
222
+ ;
223
+
224
+ stage_file_format
225
+ : STAGE_FILE_FORMAT EQ LR_BRACKET FORMAT_NAME EQ string
226
+ | TYPE EQ type_fileformat format_type_options+ RR_BRACKET
227
+ ;
228
+
229
+ copy_into_location
230
+ : COPY INTO (table_stage | user_stage | named_stage | external_location) FROM (
231
+ object_name
232
+ | '(' query_statement ')'
233
+ ) partition_by? file_format? copy_options? (VALIDATION_MODE EQ RETURN_ROWS)? HEADER?
234
+ ;
235
+
236
+ comment
237
+ : COMMENT if_exists? ON object_type_name object_name function_signature? IS string
238
+ | COMMENT if_exists? ON COLUMN full_column_name IS string
239
+ ;
240
+
241
+ function_signature
242
+ : '(' data_type_list? ')'
243
+ ;
244
+
245
+ commit
246
+ : COMMIT WORK?
247
+ ;
248
+
249
+ execute_immediate
250
+ : EXECUTE IMMEDIATE (string | id_ | ID2) (USING '(' id_ (COMMA id_)* ')')?
251
+ | EXECUTE IMMEDIATE DBL_DOLLAR
252
+ ;
253
+
254
+ execute_task
255
+ : EXECUTE TASK object_name
256
+ ;
257
+
258
+ explain
259
+ : EXPLAIN (USING (TABULAR | JSON | TEXT))? sql_command
260
+ ;
261
+
262
+ parallel
263
+ : PARALLEL EQ num
264
+ ;
265
+
266
+ get_dml
267
+ : GET (named_stage | user_stage | table_stage) FILE_PATH parallel? pattern?
268
+ ;
269
+
270
+ grant_ownership
271
+ : GRANT OWNERSHIP (
272
+ ON (
273
+ object_type_name object_name
274
+ | ALL object_type_plural IN ( DATABASE id_ | SCHEMA schema_name)
275
+ )
276
+ | ON FUTURE object_type_plural IN ( DATABASE id_ | SCHEMA schema_name)
277
+ ) TO ROLE id_ (( REVOKE | COPY) CURRENT GRANTS)?
278
+ ;
279
+
280
+ grant_to_role
281
+ : GRANT (
282
+ ( global_privileges | ALL PRIVILEGES?) ON ACCOUNT
283
+ | (account_object_privileges | ALL PRIVILEGES?) ON (
284
+ USER
285
+ | RESOURCE MONITOR
286
+ | WAREHOUSE
287
+ | DATABASE
288
+ | INTEGRATION
289
+ ) object_name
290
+ | (schema_privileges | ALL PRIVILEGES?) ON (
291
+ SCHEMA schema_name
292
+ | ALL SCHEMAS IN DATABASE id_
293
+ )
294
+ | ( schema_privileges | ALL PRIVILEGES?) ON FUTURE SCHEMAS IN DATABASE id_
295
+ | (schema_object_privileges | ALL PRIVILEGES?) ON (
296
+ object_type object_name
297
+ | ALL object_type_plural IN ( DATABASE id_ | SCHEMA schema_name)
298
+ )
299
+ | (schema_object_privileges | ALL PRIVILEGES?) ON FUTURE object_type_plural IN (
300
+ DATABASE id_
301
+ | SCHEMA schema_name
302
+ )
303
+ ) TO ROLE? id_ (WITH GRANT OPTION)?
304
+ ;
305
+
306
+ global_privileges
307
+ : global_privilege (COMMA global_privilege)*
308
+ ;
309
+
310
+ global_privilege
311
+ : CREATE (
312
+ ACCOUNT
313
+ | DATA EXCHANGE LISTING
314
+ | DATABASE
315
+ | INTEGRATION
316
+ | NETWORK POLICY
317
+ | ROLE
318
+ | SHARE
319
+ | USER
320
+ | WAREHOUSE
321
+ )
322
+ | (
323
+ APPLY MASKING POLICY
324
+ | APPLY ROW ACCESS POLICY
325
+ | APPLY SESSION POLICY
326
+ | APPLY TAG
327
+ | ATTACH POLICY
328
+ )
329
+ | (
330
+ EXECUTE TASK
331
+ | IMPORT SHARE
332
+ | MANAGE GRANTS
333
+ | MONITOR ( EXECUTION | USAGE)
334
+ | OVERRIDE SHARE RESTRICTIONS
335
+ )
336
+ ;
337
+
338
+ account_object_privileges
339
+ : account_object_privilege (COMMA account_object_privilege)*
340
+ ;
341
+
342
+ account_object_privilege
343
+ : MONITOR
344
+ | MODIFY
345
+ | USAGE
346
+ | OPERATE
347
+ | CREATE SCHEMA
348
+ | IMPORTED PRIVILEGES
349
+ | USE_ANY_ROLE
350
+ ;
351
+
352
+ schema_privileges
353
+ : schema_privilege (COMMA schema_privilege)*
354
+ ;
355
+
356
+ schema_privilege
357
+ : MODIFY
358
+ | MONITOR
359
+ | USAGE
360
+ | CREATE (
361
+ TABLE
362
+ | EXTERNAL TABLE
363
+ | VIEW
364
+ | MATERIALIZED VIEW
365
+ | MASKING POLICY
366
+ | ROW ACCESS POLICY
367
+ | SESSION POLICY
368
+ | TAG
369
+ | SEQUENCE
370
+ | FUNCTION
371
+ | PROCEDURE
372
+ | FILE FORMAT
373
+ | STAGE
374
+ | PIPE
375
+ | STREAM
376
+ | TASK
377
+ )
378
+ | ADD SEARCH OPTIMIZATION
379
+ ;
380
+
381
+ schema_object_privileges
382
+ : schema_object_privilege (COMMA schema_object_privilege)*
383
+ ;
384
+
385
+ schema_object_privilege
386
+ : SELECT
387
+ | INSERT
388
+ | UPDATE
389
+ | DELETE
390
+ | TRUNCATE
391
+ | REFERENCES
392
+ | USAGE
393
+ | READ (COMMA WRITE)?
394
+ | MONITOR
395
+ | OPERATE
396
+ | APPLY
397
+ ;
398
+
399
+ grant_to_share
400
+ : GRANT object_privilege ON (
401
+ DATABASE id_
402
+ | SCHEMA id_
403
+ | FUNCTION id_
404
+ | ( TABLE object_name | ALL TABLES IN SCHEMA schema_name)
405
+ | VIEW id_
406
+ ) TO SHARE id_
407
+ ;
408
+
409
+ object_privilege
410
+ : USAGE
411
+ | SELECT
412
+ | REFERENCE_USAGE
413
+ ;
414
+
415
+ grant_role
416
+ : GRANT ROLE role_name TO (ROLE role_name | USER id_)
417
+ ;
418
+
419
+ role_name
420
+ : system_defined_role
421
+ | id_
422
+ ;
423
+
424
+ system_defined_role
425
+ : ORGADMIN
426
+ | ACCOUNTADMIN
427
+ | SECURITYADMIN
428
+ | USERADMIN
429
+ | SYSADMIN
430
+ | PUBLIC
431
+ ;
432
+
433
+ list
434
+ : LIST (user_stage | table_stage | named_stage) pattern?
435
+ ;
436
+
437
+ // @~[/<path>]
438
+ user_stage
439
+ : AT TILDA stage_path?
440
+ ;
441
+
442
+ // @[<namespace>.]%<table_name>[/<path>]
443
+ table_stage
444
+ : AT schema_name? '%' id_ stage_path?
445
+ ;
446
+
447
+ // @[<namespace>.]<ext_stage_name>[/<path>]
448
+ named_stage
449
+ : AT object_name stage_path?
450
+ ;
451
+
452
+ stage_path
453
+ : DIVIDE (ID (DIVIDE ID)* DIVIDE?)?
454
+ ;
455
+
456
+ put
457
+ : PUT FILE_PATH (table_stage | user_stage | named_stage) (PARALLEL EQ num)? (
458
+ AUTO_COMPRESS EQ true_false
459
+ )? (
460
+ SOURCE_COMPRESSION EQ (
461
+ AUTO_DETECT
462
+ | GZIP
463
+ | BZ2
464
+ | BROTLI
465
+ | ZSTD
466
+ | DEFLATE
467
+ | RAW_DEFLATE
468
+ | NONE
469
+ )
470
+ )? (OVERWRITE EQ true_false)?
471
+ ;
472
+
473
+ remove
474
+ : REMOVE (table_stage | user_stage | named_stage) pattern?
475
+ ;
476
+
477
+ revoke_from_role
478
+ : REVOKE (GRANT OPTION FOR)? (
479
+ ( global_privilege | ALL PRIVILEGES?) ON ACCOUNT
480
+ | (account_object_privileges | ALL PRIVILEGES?) ON (
481
+ RESOURCE MONITOR
482
+ | WAREHOUSE
483
+ | DATABASE
484
+ | INTEGRATION
485
+ ) object_name
486
+ | (schema_privileges | ALL PRIVILEGES?) ON (
487
+ SCHEMA schema_name
488
+ | ALL SCHEMAS IN DATABASE id_
489
+ )
490
+ | (schema_privileges | ALL PRIVILEGES?) ON (FUTURE SCHEMAS IN DATABASE <db_name>)
491
+ | (schema_object_privileges | ALL PRIVILEGES?) ON (
492
+ object_type object_name
493
+ | ALL object_type_plural IN SCHEMA schema_name
494
+ )
495
+ | (schema_object_privileges | ALL PRIVILEGES?) ON FUTURE object_type_plural IN (
496
+ DATABASE id_
497
+ | SCHEMA schema_name
498
+ )
499
+ ) FROM ROLE? id_ cascade_restrict?
500
+ ;
501
+
502
+ revoke_from_share
503
+ : REVOKE object_privilege ON (
504
+ DATABASE id_
505
+ | SCHEMA schema_name
506
+ | ( TABLE object_name | ALL TABLES IN SCHEMA schema_name)
507
+ | ( VIEW object_name | ALL VIEWS IN SCHEMA schema_name)
508
+ ) FROM SHARE id_
509
+ ;
510
+
511
+ revoke_role
512
+ : REVOKE ROLE role_name FROM (ROLE role_name | USER id_)
513
+ ;
514
+
515
+ rollback
516
+ : ROLLBACK WORK?
517
+ ;
518
+
519
+ set
520
+ : SET id_ EQ expr
521
+ | SET LR_BRACKET id_ (COMMA id_)* RR_BRACKET EQ LR_BRACKET expr (COMMA expr)* RR_BRACKET
522
+ ;
523
+
524
+ truncate_materialized_view
525
+ : TRUNCATE MATERIALIZED VIEW object_name
526
+ ;
527
+
528
+ truncate_table
529
+ : TRUNCATE TABLE? if_exists? object_name
530
+ ;
531
+
532
+ unset
533
+ : UNSET id_
534
+ | UNSET '(' id_ (COMMA id_)* ')'
535
+ ;
536
+
537
+ // alter commands
538
+ alter_command
539
+ : alter_account
540
+ | alter_alert
541
+ | alter_api_integration
542
+ | alter_connection
543
+ | alter_database
544
+ | alter_dynamic_table
545
+ //| alter_event_table // uses ALTER TABLE stmt
546
+ | alter_external_table
547
+ | alter_failover_group
548
+ | alter_file_format
549
+ | alter_function
550
+ | alter_masking_policy
551
+ | alter_materialized_view
552
+ | alter_network_policy
553
+ | alter_notification_integration
554
+ | alter_password_policy
555
+ | alter_pipe
556
+ | alter_procedure
557
+ | alter_replication_group
558
+ | alter_resource_monitor
559
+ | alter_role
560
+ | alter_row_access_policy
561
+ | alter_schema
562
+ | alter_security_integration_external_oauth
563
+ | alter_security_integration_snowflake_oauth
564
+ | alter_security_integration_saml2
565
+ | alter_security_integration_scim
566
+ | alter_sequence
567
+ | alter_session
568
+ | alter_session_policy
569
+ | alter_share
570
+ | alter_stage
571
+ | alter_storage_integration
572
+ | alter_stream
573
+ | alter_table
574
+ | alter_table_alter_column
575
+ | alter_tag
576
+ | alter_task
577
+ | alter_user
578
+ | alter_view
579
+ | alter_warehouse
580
+ ;
581
+
582
+ account_params
583
+ : ALLOW_ID_TOKEN EQ true_false
584
+ | CLIENT_ENCRYPTION_KEY_SIZE EQ num
585
+ | ENFORCE_SESSION_POLICY EQ true_false
586
+ | EXTERNAL_OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LIST EQ true_false
587
+ | INITIAL_REPLICATION_SIZE_LIMIT_IN_TB EQ num
588
+ | NETWORK_POLICY EQ string
589
+ | PERIODIC_DATA_REKEYING EQ true_false
590
+ | PREVENT_UNLOAD_TO_INLINE_URL EQ true_false
591
+ | PREVENT_UNLOAD_TO_INTERNAL_STAGES EQ true_false
592
+ | REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION EQ true_false
593
+ | REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION EQ true_false
594
+ | SAML_IDENTITY_PROVIDER EQ json_literal
595
+ | SESSION_POLICY EQ string
596
+ | SSO_LOGIN_PAGE EQ true_false
597
+ ;
598
+
599
+ object_params
600
+ : DATA_RETENTION_TIME_IN_DAYS EQ num
601
+ | MAX_DATA_EXTENSION_TIME_IN_DAYS EQ num
602
+ | default_ddl_collation
603
+ | MAX_CONCURRENCY_LEVEL EQ num
604
+ | NETWORK_POLICY EQ string
605
+ | PIPE_EXECUTION_PAUSED EQ true_false
606
+ | SESSION_POLICY EQ string
607
+ | STATEMENT_QUEUED_TIMEOUT_IN_SECONDS EQ num
608
+ | STATEMENT_TIMEOUT_IN_SECONDS EQ num
609
+ ;
610
+
611
+ default_ddl_collation
612
+ : DEFAULT_DDL_COLLATION_ EQ string
613
+ ;
614
+
615
+ object_properties
616
+ : PASSWORD EQ string
617
+ | LOGIN_NAME EQ string
618
+ | DISPLAY_NAME EQ string
619
+ | FIRST_NAME EQ string
620
+ | MIDDLE_NAME EQ string
621
+ | LAST_NAME EQ string
622
+ | EMAIL EQ string
623
+ | MUST_CHANGE_PASSWORD EQ true_false
624
+ | DISABLED EQ true_false
625
+ | DAYS_TO_EXPIRY EQ num
626
+ | MINS_TO_UNLOCK EQ num
627
+ | DEFAULT_WAREHOUSE EQ string
628
+ | DEFAULT_NAMESPACE EQ string
629
+ | DEFAULT_ROLE EQ string
630
+ //| DEFAULT_SECONDARY_ROLES EQ '(' 'ALL' ')'
631
+ | MINS_TO_BYPASS_MFA EQ num
632
+ | RSA_PUBLIC_KEY EQ string
633
+ | RSA_PUBLIC_KEY_2 EQ string
634
+ | comment_clause
635
+ ;
636
+
637
+ session_params
638
+ : ABORT_DETACHED_QUERY EQ true_false
639
+ | AUTOCOMMIT EQ true_false
640
+ | BINARY_INPUT_FORMAT EQ string
641
+ | BINARY_OUTPUT_FORMAT EQ string
642
+ | DATE_INPUT_FORMAT EQ string
643
+ | DATE_OUTPUT_FORMAT EQ string
644
+ | ERROR_ON_NONDETERMINISTIC_MERGE EQ true_false
645
+ | ERROR_ON_NONDETERMINISTIC_UPDATE EQ true_false
646
+ | JSON_INDENT EQ num
647
+ | LOCK_TIMEOUT EQ num
648
+ | QUERY_TAG EQ string
649
+ | ROWS_PER_RESULTSET EQ num
650
+ | SIMULATED_DATA_SHARING_CONSUMER EQ string
651
+ | STATEMENT_TIMEOUT_IN_SECONDS EQ num
652
+ | STRICT_JSON_OUTPUT EQ true_false
653
+ | TIMESTAMP_DAY_IS_ALWAYS_24H EQ true_false
654
+ | TIMESTAMP_INPUT_FORMAT EQ string
655
+ | TIMESTAMP_LTZ_OUTPUT_FORMAT EQ string
656
+ | TIMESTAMP_NTZ_OUTPUT_FORMAT EQ string
657
+ | TIMESTAMP_OUTPUT_FORMAT EQ string
658
+ | TIMESTAMP_TYPE_MAPPING EQ string
659
+ | TIMESTAMP_TZ_OUTPUT_FORMAT EQ string
660
+ | TIMEZONE EQ string
661
+ | TIME_INPUT_FORMAT EQ string
662
+ | TIME_OUTPUT_FORMAT EQ string
663
+ | TRANSACTION_DEFAULT_ISOLATION_LEVEL EQ string
664
+ | TWO_DIGIT_CENTURY_START EQ num
665
+ | UNSUPPORTED_DDL_ACTION EQ string
666
+ | USE_CACHED_RESULT EQ true_false
667
+ | WEEK_OF_YEAR_POLICY EQ num
668
+ | WEEK_START EQ num
669
+ ;
670
+
671
+ alter_account
672
+ : ALTER ACCOUNT alter_account_opts
673
+ ;
674
+
675
+ enabled_true_false
676
+ : ENABLED EQ true_false
677
+ ;
678
+
679
+ alter_alert
680
+ : ALTER ALERT if_exists? id_ (
681
+ resume_suspend
682
+ | SET alert_set_clause+
683
+ | UNSET alert_unset_clause+
684
+ | MODIFY CONDITION EXISTS '(' alert_condition ')'
685
+ | MODIFY ACTION alert_action
686
+ )
687
+ ;
688
+
689
+ resume_suspend
690
+ : RESUME
691
+ | SUSPEND
692
+ ;
693
+
694
+ alert_set_clause
695
+ : WAREHOUSE EQ id_
696
+ | SCHEDULE EQ string
697
+ | comment_clause
698
+ ;
699
+
700
+ alert_unset_clause
701
+ : WAREHOUSE
702
+ | SCHEDULE
703
+ | COMMENT
704
+ ;
705
+
706
+ alter_api_integration
707
+ : ALTER API? INTEGRATION if_exists? id_ SET (API_AWS_ROLE_ARN EQ string)? (
708
+ AZURE_AD_APPLICATION_ID EQ string
709
+ )? (API_KEY EQ string)? enabled_true_false? (API_ALLOWED_PREFIXES EQ '(' string ')')? (
710
+ API_BLOCKED_PREFIXES EQ '(' string ')'
711
+ )? comment_clause?
712
+ | ALTER API? INTEGRATION id_ set_tags
713
+ | ALTER API? INTEGRATION id_ unset_tags
714
+ | ALTER API? INTEGRATION if_exists? id_ UNSET api_integration_property (
715
+ COMMA api_integration_property
716
+ )*
717
+ ;
718
+
719
+ api_integration_property
720
+ : API_KEY
721
+ | ENABLED
722
+ | API_BLOCKED_PREFIXES
723
+ | COMMENT
724
+ ;
725
+
726
+ alter_connection
727
+ : ALTER CONNECTION alter_connection_opts
728
+ ;
729
+
730
+ alter_database
731
+ : ALTER DATABASE if_exists? id_ RENAME TO id_
732
+ | ALTER DATABASE if_exists? id_ SWAP WITH id_
733
+ | ALTER DATABASE if_exists? id_ SET (DATA_RETENTION_TIME_IN_DAYS EQ num)? (
734
+ MAX_DATA_EXTENSION_TIME_IN_DAYS EQ num
735
+ )? default_ddl_collation? comment_clause?
736
+ | ALTER DATABASE id_ set_tags
737
+ | ALTER DATABASE id_ unset_tags
738
+ | ALTER DATABASE if_exists? id_ UNSET database_property (COMMA database_property)*
739
+ | ALTER DATABASE id_ ENABLE REPLICATION TO ACCOUNTS account_id_list (IGNORE EDITION CHECK)?
740
+ | ALTER DATABASE id_ DISABLE REPLICATION ( TO ACCOUNTS account_id_list)?
741
+ | ALTER DATABASE id_ REFRESH
742
+ // Database Failover
743
+ | ALTER DATABASE id_ ENABLE FAILOVER TO ACCOUNTS account_id_list
744
+ | ALTER DATABASE id_ DISABLE FAILOVER ( TO ACCOUNTS account_id_list)?
745
+ | ALTER DATABASE id_ PRIMARY
746
+ ;
747
+
748
+ database_property
749
+ : DATA_RETENTION_TIME_IN_DAYS
750
+ | MAX_DATA_EXTENSION_TIME_IN_DAYS
751
+ | DEFAULT_DDL_COLLATION_
752
+ | COMMENT
753
+ ;
754
+
755
+ account_id_list
756
+ : account_identifier (COMMA account_identifier)*
757
+ ;
758
+
759
+ alter_dynamic_table
760
+ : ALTER DYNAMIC TABLE id_ (resume_suspend | REFRESH | SET WAREHOUSE EQ id_)
761
+ ;
762
+
763
+ alter_external_table
764
+ : ALTER EXTERNAL TABLE if_exists? object_name REFRESH string?
765
+ | ALTER EXTERNAL TABLE if_exists? object_name ADD FILES '(' string_list ')'
766
+ | ALTER EXTERNAL TABLE if_exists? object_name REMOVE FILES '(' string_list ')'
767
+ | ALTER EXTERNAL TABLE if_exists? object_name SET (AUTO_REFRESH EQ true_false)? tag_decl_list?
768
+ | ALTER EXTERNAL TABLE if_exists? object_name unset_tags
769
+ //Partitions added and removed manually
770
+ | ALTER EXTERNAL TABLE object_name if_exists? ADD PARTITION '(' column_name EQ string (
771
+ COMMA column_name EQ string
772
+ )* ')' LOCATION string
773
+ | ALTER EXTERNAL TABLE object_name if_exists? DROP PARTITION LOCATION string
774
+ ;
775
+
776
+ ignore_edition_check
777
+ : IGNORE EDITION CHECK
778
+ ;
779
+
780
+ replication_schedule
781
+ : REPLICATION_SCHEDULE EQ string
782
+ ;
783
+
784
+ db_name_list
785
+ : id_ (COMMA id_)*
786
+ ;
787
+
788
+ share_name_list
789
+ : id_ (COMMA id_)*
790
+ ;
791
+
792
+ full_acct_list
793
+ : full_acct (COMMA full_acct)*
794
+ ;
795
+
796
+ alter_failover_group
797
+ //Source Account
798
+ : ALTER FAILOVER GROUP if_exists? id_ RENAME TO id_
799
+ | ALTER FAILOVER GROUP if_exists? id_ SET (OBJECT_TYPES EQ object_type_list)? replication_schedule?
800
+ | ALTER FAILOVER GROUP if_exists? id_ SET OBJECT_TYPES EQ object_type_list
801
+ // ALLOWED_INTEGRATION_TYPES EQ <integration_type_name> [ , <integration_type_name> ... ] ]
802
+ replication_schedule?
803
+ | ALTER FAILOVER GROUP if_exists? id_ ADD db_name_list TO ALLOWED_DATABASES
804
+ | ALTER FAILOVER GROUP if_exists? id_ MOVE DATABASES db_name_list TO FAILOVER GROUP id_
805
+ | ALTER FAILOVER GROUP if_exists? id_ REMOVE db_name_list FROM ALLOWED_DATABASES
806
+ | ALTER FAILOVER GROUP if_exists? id_ ADD share_name_list TO ALLOWED_SHARES
807
+ | ALTER FAILOVER GROUP if_exists? id_ MOVE SHARES share_name_list TO FAILOVER GROUP id_
808
+ | ALTER FAILOVER GROUP if_exists? id_ REMOVE share_name_list FROM ALLOWED_SHARES
809
+ | ALTER FAILOVER GROUP if_exists? id_ ADD full_acct_list TO ALLOWED_ACCOUNTS ignore_edition_check?
810
+ | ALTER FAILOVER GROUP if_exists? id_ REMOVE full_acct_list FROM ALLOWED_ACCOUNTS
811
+ //Target Account
812
+ | ALTER FAILOVER GROUP if_exists? id_ ( REFRESH | PRIMARY | SUSPEND | RESUME)
813
+ ;
814
+
815
+ alter_file_format
816
+ : ALTER FILE FORMAT if_exists? id_ RENAME TO id_
817
+ | ALTER FILE FORMAT if_exists? id_ SET (format_type_options* comment_clause?)
818
+ ;
819
+
820
+ alter_function
821
+ : alter_function_signature RENAME TO id_
822
+ | alter_function_signature SET comment_clause
823
+ | alter_function_signature SET SECURE
824
+ | alter_function_signature UNSET (SECURE | COMMENT)
825
+ // External Functions
826
+ | alter_function_signature SET API_INTEGRATION EQ id_
827
+ | alter_function_signature SET HEADERS EQ '(' header_decl* ')'
828
+ | alter_function_signature SET CONTEXT_HEADERS EQ '(' id_* ')'
829
+ | alter_function_signature SET MAX_BATCH_ROWS EQ num
830
+ | alter_function_signature SET COMPRESSION EQ compression_type
831
+ | alter_function_signature SET (REQUEST_TRANSLATOR | RESPONSE_TRANSLATOR) EQ id_
832
+ | alter_function_signature UNSET (
833
+ COMMENT
834
+ | HEADERS
835
+ | CONTEXT_HEADERS
836
+ | MAX_BATCH_ROWS
837
+ | COMPRESSION
838
+ | SECURE
839
+ | REQUEST_TRANSLATOR
840
+ | RESPONSE_TRANSLATOR
841
+ )
842
+ ;
843
+
844
+ alter_function_signature
845
+ : ALTER FUNCTION if_exists? id_ '(' data_type_list? ')'
846
+ ;
847
+
848
+ data_type_list
849
+ : data_type (COMMA data_type)*
850
+ ;
851
+
852
+ alter_masking_policy
853
+ : ALTER MASKING POLICY if_exists? id_ SET BODY ARROW expr
854
+ | ALTER MASKING POLICY if_exists? id_ RENAME TO id_
855
+ | ALTER MASKING POLICY if_exists? id_ SET comment_clause
856
+ ;
857
+
858
+ alter_materialized_view
859
+ : ALTER MATERIALIZED VIEW id_ (
860
+ RENAME TO id_
861
+ | CLUSTER BY '(' expr_list ')'
862
+ | DROP CLUSTERING KEY
863
+ | resume_suspend RECLUSTER?
864
+ | SET ( SECURE? comment_clause?)
865
+ | UNSET ( SECURE | COMMENT)
866
+ )
867
+ ;
868
+
869
+ alter_network_policy
870
+ : ALTER NETWORK POLICY alter_network_policy_opts
871
+ ;
872
+
873
+ alter_notification_integration
874
+ : ALTER NOTIFICATION? INTEGRATION if_exists? id_ SET enabled_true_false? cloud_provider_params_auto comment_clause?
875
+ // Push notifications
876
+ | ALTER NOTIFICATION? INTEGRATION if_exists? id_ SET enabled_true_false? cloud_provider_params_push comment_clause?
877
+ | ALTER NOTIFICATION? INTEGRATION id_ set_tags
878
+ | ALTER NOTIFICATION? INTEGRATION id_ unset_tags
879
+ | ALTER NOTIFICATION? INTEGRATION if_exists id_ UNSET (ENABLED | COMMENT)
880
+ ;
881
+
882
+ alter_pipe
883
+ : ALTER PIPE if_exists? id_ SET (object_properties? comment_clause?)
884
+ | ALTER PIPE id_ set_tags
885
+ | ALTER PIPE id_ unset_tags
886
+ | ALTER PIPE if_exists? id_ UNSET PIPE_EXECUTION_PAUSED EQ true_false
887
+ | ALTER PIPE if_exists? id_ UNSET COMMENT
888
+ | ALTER PIPE if_exists? id_ REFRESH (PREFIX EQ string)? (MODIFIED_AFTER EQ string)?
889
+ ;
890
+
891
+ alter_procedure
892
+ : ALTER PROCEDURE if_exists? id_ '(' data_type_list? ')' RENAME TO id_
893
+ | ALTER PROCEDURE if_exists? id_ '(' data_type_list? ')' SET comment_clause
894
+ | ALTER PROCEDURE if_exists? id_ '(' data_type_list? ')' UNSET COMMENT
895
+ | ALTER PROCEDURE if_exists? id_ '(' data_type_list? ')' EXECUTE AS caller_owner
896
+ ;
897
+
898
+ alter_replication_group
899
+ //Source Account
900
+ : ALTER REPLICATION GROUP if_exists? id_ RENAME TO id_
901
+ | ALTER REPLICATION GROUP if_exists? id_ SET (OBJECT_TYPES EQ object_type_list)? (
902
+ REPLICATION_SCHEDULE EQ string
903
+ )?
904
+ | ALTER REPLICATION GROUP if_exists? id_ SET OBJECT_TYPES EQ object_type_list ALLOWED_INTEGRATION_TYPES EQ integration_type_name (
905
+ COMMA integration_type_name
906
+ )* (REPLICATION_SCHEDULE EQ string)?
907
+ | ALTER REPLICATION GROUP if_exists? id_ ADD db_name_list TO ALLOWED_DATABASES
908
+ | ALTER REPLICATION GROUP if_exists? id_ MOVE DATABASES db_name_list TO REPLICATION GROUP id_
909
+ | ALTER REPLICATION GROUP if_exists? id_ REMOVE db_name_list FROM ALLOWED_DATABASES
910
+ | ALTER REPLICATION GROUP if_exists? id_ ADD share_name_list TO ALLOWED_SHARES
911
+ | ALTER REPLICATION GROUP if_exists? id_ MOVE SHARES share_name_list TO REPLICATION GROUP id_
912
+ | ALTER REPLICATION GROUP if_exists? id_ REMOVE share_name_list FROM ALLOWED_SHARES
913
+ | ALTER REPLICATION GROUP if_exists? id_ ADD account_id_list TO ALLOWED_ACCOUNTS ignore_edition_check?
914
+ | ALTER REPLICATION GROUP if_exists? id_ REMOVE account_id_list FROM ALLOWED_ACCOUNTS
915
+ //Target Account
916
+ | ALTER REPLICATION GROUP if_exists? id_ REFRESH
917
+ | ALTER REPLICATION GROUP if_exists? id_ SUSPEND
918
+ | ALTER REPLICATION GROUP if_exists? id_ RESUME
919
+ ;
920
+
921
+ credit_quota
922
+ : CREDIT_QUOTA EQ num
923
+ ;
924
+
925
+ frequency
926
+ : FREQUENCY EQ (MONTHLY | DAILY | WEEKLY | YEARLY | NEVER)
927
+ ;
928
+
929
+ notify_users
930
+ : NOTIFY_USERS EQ LR_BRACKET id_ (COMMA id_)* RR_BRACKET
931
+ ;
932
+
933
+ triggerDefinition
934
+ : ON num PERCENT DO (SUSPEND | SUSPEND_IMMEDIATE | NOTIFY)
935
+ ;
936
+
937
+ alter_resource_monitor
938
+ : ALTER RESOURCE MONITOR if_exists? id_ (
939
+ SET credit_quota? frequency? (
940
+ START_TIMESTAMP EQ LR_BRACKET string
941
+ | IMMEDIATELY RR_BRACKET
942
+ )? (END_TIMESTAMP EQ string)?
943
+ )? (notify_users ( TRIGGERS triggerDefinition (COMMA triggerDefinition)*)?)?
944
+ ;
945
+
946
+ alter_role
947
+ : ALTER ROLE if_exists? id_ RENAME TO id_
948
+ | ALTER ROLE if_exists? id_ SET comment_clause
949
+ | ALTER ROLE if_exists? id_ UNSET COMMENT
950
+ | ALTER ROLE if_exists? id_ set_tags
951
+ | ALTER ROLE if_exists? id_ unset_tags
952
+ ;
953
+
954
+ alter_row_access_policy
955
+ : ALTER ROW ACCESS POLICY if_exists? id_ SET BODY ARROW expr
956
+ | ALTER ROW ACCESS POLICY if_exists? id_ RENAME TO id_
957
+ | ALTER ROW ACCESS POLICY if_exists? id_ SET comment_clause
958
+ ;
959
+
960
+ alter_schema
961
+ : ALTER SCHEMA if_exists? schema_name RENAME TO schema_name
962
+ | ALTER SCHEMA if_exists? schema_name SWAP WITH schema_name
963
+ | ALTER SCHEMA if_exists? schema_name SET (
964
+ (DATA_RETENTION_TIME_IN_DAYS EQ num)? (MAX_DATA_EXTENSION_TIME_IN_DAYS EQ num)? default_ddl_collation? comment_clause?
965
+ )
966
+ | ALTER SCHEMA if_exists? schema_name set_tags
967
+ | ALTER SCHEMA if_exists? schema_name unset_tags
968
+ | ALTER SCHEMA if_exists? schema_name UNSET schema_property (COMMA schema_property)*
969
+ | ALTER SCHEMA if_exists? schema_name ( ENABLE | DISABLE) MANAGED ACCESS
970
+ ;
971
+
972
+ schema_property
973
+ : DATA_RETENTION_TIME_IN_DAYS
974
+ | MAX_DATA_EXTENSION_TIME_IN_DAYS
975
+ | DEFAULT_DDL_COLLATION_
976
+ | COMMENT
977
+ ;
978
+
979
+ alter_sequence
980
+ : ALTER SEQUENCE if_exists? object_name RENAME TO object_name
981
+ | ALTER SEQUENCE if_exists? object_name SET? ( INCREMENT BY? EQ? num)?
982
+ | ALTER SEQUENCE if_exists? object_name SET (order_noorder? comment_clause | order_noorder)
983
+ | ALTER SEQUENCE if_exists? object_name UNSET COMMENT
984
+ ;
985
+
986
+ alter_security_integration_external_oauth
987
+ : ALTER SECURITY? INTEGRATION if_exists id_ SET (TYPE EQ EXTERNAL_OAUTH)? (
988
+ ENABLED EQ true_false
989
+ )? (EXTERNAL_OAUTH_TYPE EQ ( OKTA | AZURE | PING_FEDERATE | CUSTOM))? (
990
+ EXTERNAL_OAUTH_ISSUER EQ string
991
+ )? (EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM EQ (string | '(' string_list ')'))? (
992
+ EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE EQ string
993
+ )? (EXTERNAL_OAUTH_JWS_KEYS_URL EQ string)? // For OKTA | PING_FEDERATE | CUSTOM
994
+ (EXTERNAL_OAUTH_JWS_KEYS_URL EQ (string | '(' string_list ')'))? // For Azure
995
+ (EXTERNAL_OAUTH_RSA_PUBLIC_KEY EQ string)? (EXTERNAL_OAUTH_RSA_PUBLIC_KEY_2 EQ string)? (
996
+ EXTERNAL_OAUTH_BLOCKED_ROLES_LIST EQ '(' string_list ')'
997
+ )? (EXTERNAL_OAUTH_ALLOWED_ROLES_LIST EQ '(' string_list ')')? (
998
+ EXTERNAL_OAUTH_AUDIENCE_LIST EQ '(' string ')'
999
+ )? (EXTERNAL_OAUTH_ANY_ROLE_MODE EQ (DISABLE | ENABLE | ENABLE_FOR_PRIVILEGE))? (
1000
+ EXTERNAL_OAUTH_ANY_ROLE_MODE EQ string
1001
+ )? // Only for EXTERNAL_OAUTH_TYPE EQ CUSTOM
1002
+ | ALTER SECURITY? INTEGRATION if_exists? id_ UNSET security_integration_external_oauth_property (
1003
+ COMMA security_integration_external_oauth_property
1004
+ )*
1005
+ | ALTER SECURITY? INTEGRATION id_ set_tags
1006
+ | ALTER SECURITY? INTEGRATION id_ unset_tags
1007
+ ;
1008
+
1009
+ security_integration_external_oauth_property
1010
+ : ENABLED
1011
+ | NETWORK_POLICY
1012
+ | OAUTH_CLIENT_RSA_PUBLIC_KEY
1013
+ | OAUTH_CLIENT_RSA_PUBLIC_KEY_2
1014
+ | OAUTH_USE_SECONDARY_ROLES EQ (IMPLICIT | NONE)
1015
+ | COMMENT
1016
+ ;
1017
+
1018
+ alter_security_integration_snowflake_oauth
1019
+ : ALTER SECURITY? INTEGRATION if_exists? id_ SET (TYPE EQ EXTERNAL_OAUTH)? enabled_true_false? (
1020
+ EXTERNAL_OAUTH_TYPE EQ ( OKTA | AZURE | PING_FEDERATE | CUSTOM)
1021
+ )? (EXTERNAL_OAUTH_ISSUER EQ string)? (
1022
+ EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM EQ (string | '(' string_list ')')
1023
+ )? (EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE EQ string)? (
1024
+ EXTERNAL_OAUTH_JWS_KEYS_URL EQ string
1025
+ )? // For OKTA | PING_FEDERATE | CUSTOM
1026
+ (EXTERNAL_OAUTH_JWS_KEYS_URL EQ ( string | '(' string_list ')'))? // For Azure
1027
+ (EXTERNAL_OAUTH_RSA_PUBLIC_KEY EQ string)? (EXTERNAL_OAUTH_RSA_PUBLIC_KEY_2 EQ string)? (
1028
+ EXTERNAL_OAUTH_BLOCKED_ROLES_LIST EQ '(' string_list ')'
1029
+ )? (EXTERNAL_OAUTH_ALLOWED_ROLES_LIST EQ '(' string_list ')')? (
1030
+ EXTERNAL_OAUTH_AUDIENCE_LIST EQ '(' string ')'
1031
+ )? (EXTERNAL_OAUTH_ANY_ROLE_MODE EQ DISABLE | ENABLE | ENABLE_FOR_PRIVILEGE)? (
1032
+ EXTERNAL_OAUTH_SCOPE_DELIMITER EQ string
1033
+ ) // Only for EXTERNAL_OAUTH_TYPE EQ CUSTOM
1034
+ | ALTER SECURITY? INTEGRATION if_exists? id_ UNSET security_integration_snowflake_oauth_property (
1035
+ COMMA security_integration_snowflake_oauth_property
1036
+ )*
1037
+ | ALTER SECURITY? INTEGRATION id_ set_tags
1038
+ | ALTER SECURITY? INTEGRATION id_ unset_tags
1039
+ ;
1040
+
1041
+ security_integration_snowflake_oauth_property
1042
+ : ENABLED
1043
+ | EXTERNAL_OAUTH_AUDIENCE_LIST
1044
+ ;
1045
+
1046
+ alter_security_integration_saml2
1047
+ : ALTER SECURITY? INTEGRATION if_exists? id_ SET (TYPE EQ SAML2)? enabled_true_false? (
1048
+ SAML2_ISSUER EQ string
1049
+ )? (SAML2_SSO_URL EQ string)? (SAML2_PROVIDER EQ string)? (SAML2_X509_CERT EQ string)? (
1050
+ SAML2_SP_INITIATED_LOGIN_PAGE_LABEL EQ string
1051
+ )? (SAML2_ENABLE_SP_INITIATED EQ true_false)? (SAML2_SNOWFLAKE_X509_CERT EQ string)? (
1052
+ SAML2_SIGN_REQUEST EQ true_false
1053
+ )? (SAML2_REQUESTED_NAMEID_FORMAT EQ string)? (SAML2_POST_LOGOUT_REDIRECT_URL EQ string)? (
1054
+ SAML2_FORCE_AUTHN EQ true_false
1055
+ )? (SAML2_SNOWFLAKE_ISSUER_URL EQ string)? (SAML2_SNOWFLAKE_ACS_URL EQ string)?
1056
+ | ALTER SECURITY? INTEGRATION if_exists? id_ UNSET ENABLED
1057
+ | ALTER SECURITY? INTEGRATION id_ set_tags
1058
+ | ALTER SECURITY? INTEGRATION id_ unset_tags
1059
+ ;
1060
+
1061
+ alter_security_integration_scim
1062
+ : ALTER SECURITY? INTEGRATION if_exists? id_ SET (NETWORK_POLICY EQ string)? (
1063
+ SYNC_PASSWORD EQ true_false
1064
+ )? comment_clause?
1065
+ | ALTER SECURITY? INTEGRATION if_exists? id_ UNSET security_integration_scim_property (
1066
+ COMMA security_integration_scim_property
1067
+ )*
1068
+ | ALTER SECURITY? INTEGRATION id_ set_tags
1069
+ | ALTER SECURITY? INTEGRATION id_ unset_tags
1070
+ ;
1071
+
1072
+ security_integration_scim_property
1073
+ : NETWORK_POLICY
1074
+ | SYNC_PASSWORD
1075
+ | COMMENT
1076
+ ;
1077
+
1078
+ alter_session
1079
+ : ALTER SESSION SET session_params
1080
+ | ALTER SESSION UNSET param_name (COMMA param_name)*
1081
+ ;
1082
+
1083
+ alter_session_policy
1084
+ : ALTER SESSION POLICY if_exists? object_name SET session_policy_params*
1085
+ | ALTER SESSION POLICY if_exists? object_name UNSET (session_policy_param_name | COMMENT)
1086
+ | ALTER SESSION POLICY if_exists? object_name RENAME TO object_name
1087
+ | ALTER SESSION POLICY if_exists? object_name (set_tags | unset_tags)
1088
+ ;
1089
+
1090
+ alter_password_policy
1091
+ : ALTER PASSWORD POLICY if_exists? object_name SET password_policy_params*
1092
+ | ALTER PASSWORD POLICY if_exists? object_name UNSET (password_policy_param_name | COMMENT)
1093
+ | ALTER PASSWORD POLICY if_exists? object_name RENAME TO object_name
1094
+ | ALTER PASSWORD POLICY if_exists? object_name (set_tags | unset_tags)
1095
+ ;
1096
+
1097
+ alter_share
1098
+ : ALTER SHARE if_exists? id_ (ADD | REMOVE) ACCOUNTS EQ id_ (COMMA id_)* (
1099
+ SHARE_RESTRICTIONS EQ true_false
1100
+ )?
1101
+ | ALTER SHARE if_exists? id_ ADD ACCOUNTS EQ id_ (COMMA id_)* (
1102
+ SHARE_RESTRICTIONS EQ true_false
1103
+ )?
1104
+ | ALTER SHARE if_exists? id_ SET (ACCOUNTS EQ id_ (COMMA id_)*)? comment_clause?
1105
+ | ALTER SHARE if_exists? id_ set_tags
1106
+ | ALTER SHARE id_ unset_tags
1107
+ | ALTER SHARE if_exists? id_ UNSET COMMENT
1108
+ ;
1109
+
1110
+ alter_storage_integration
1111
+ : ALTER STORAGE? INTEGRATION if_exists? id_ SET cloud_provider_params2? enabled_true_false? (
1112
+ STORAGE_ALLOWED_LOCATIONS EQ '(' string_list ')'
1113
+ )? (STORAGE_BLOCKED_LOCATIONS EQ '(' string_list ')')? comment_clause?
1114
+ | ALTER STORAGE? INTEGRATION if_exists? id_ set_tags
1115
+ | ALTER STORAGE? INTEGRATION id_ unset_tags
1116
+ | ALTER STORAGE? INTEGRATION if_exists? id_ UNSET (
1117
+ ENABLED
1118
+ | STORAGE_BLOCKED_LOCATIONS
1119
+ | COMMENT
1120
+ )
1121
+ //[ , ... ]
1122
+ ;
1123
+
1124
+ alter_stream
1125
+ : ALTER STREAM if_exists? id_ SET tag_decl_list? comment_clause?
1126
+ | ALTER STREAM if_exists? id_ set_tags
1127
+ | ALTER STREAM id_ unset_tags
1128
+ | ALTER STREAM if_exists? id_ UNSET COMMENT
1129
+ ;
1130
+
1131
+ alter_table
1132
+ : ALTER TABLE if_exists? object_name RENAME TO object_name
1133
+ | ALTER TABLE if_exists? object_name SWAP WITH object_name
1134
+ | ALTER TABLE if_exists? object_name (
1135
+ clustering_action
1136
+ | table_column_action
1137
+ | constraint_action
1138
+ )
1139
+ | ALTER TABLE if_exists? object_name ext_table_column_action
1140
+ | ALTER TABLE if_exists? object_name search_optimization_action
1141
+ | ALTER TABLE if_exists? object_name SET stage_file_format? (
1142
+ STAGE_COPY_OPTIONS EQ '(' copy_options ')'
1143
+ )? (DATA_RETENTION_TIME_IN_DAYS EQ num)? (MAX_DATA_EXTENSION_TIME_IN_DAYS EQ num)? (
1144
+ CHANGE_TRACKING EQ true_false
1145
+ )? default_ddl_collation? comment_clause?
1146
+ | ALTER TABLE if_exists? object_name set_tags
1147
+ | ALTER TABLE if_exists? object_name unset_tags
1148
+ | ALTER TABLE if_exists? object_name UNSET (
1149
+ DATA_RETENTION_TIME_IN_DAYS
1150
+ | MAX_DATA_EXTENSION_TIME_IN_DAYS
1151
+ | CHANGE_TRACKING
1152
+ | DEFAULT_DDL_COLLATION_
1153
+ | COMMENT
1154
+ |
1155
+ )
1156
+ //[ , ... ]
1157
+ | ALTER TABLE if_exists? object_name ADD ROW ACCESS POLICY id_ ON column_list_in_parentheses
1158
+ | ALTER TABLE if_exists? object_name DROP ROW ACCESS POLICY id_
1159
+ | ALTER TABLE if_exists? object_name DROP ROW ACCESS POLICY id_ COMMA ADD ROW ACCESS POLICY id_ ON column_list_in_parentheses
1160
+ | ALTER TABLE if_exists? object_name DROP ALL ROW ACCESS POLICIES
1161
+ ;
1162
+
1163
+ clustering_action
1164
+ : CLUSTER BY '(' expr_list ')'
1165
+ | RECLUSTER ( MAX_SIZE EQ num)? ( WHERE expr)?
1166
+ | resume_suspend RECLUSTER
1167
+ | DROP CLUSTERING KEY
1168
+ ;
1169
+
1170
+ table_column_action
1171
+ : ADD COLUMN? if_not_exists? full_col_decl (COMMA full_col_decl)*
1172
+ | RENAME COLUMN column_name TO column_name
1173
+ | alter_modify (
1174
+ '(' alter_column_clause (',' alter_column_clause)* ')'
1175
+ | alter_column_clause (',' alter_column_clause)*
1176
+ )
1177
+ | alter_modify COLUMN column_name SET MASKING POLICY id_ (
1178
+ USING '(' column_name COMMA column_list ')'
1179
+ )? FORCE?
1180
+ | alter_modify COLUMN column_name UNSET MASKING POLICY
1181
+ | alter_modify column_set_tags (COMMA column_set_tags)*
1182
+ | alter_modify column_unset_tags (COMMA column_unset_tags)*
1183
+ | DROP COLUMN? if_exists? column_list
1184
+ //| DROP DEFAULT
1185
+ ;
1186
+
1187
+ alter_column_clause
1188
+ : COLUMN? column_name (
1189
+ DROP DEFAULT
1190
+ | SET DEFAULT object_name DOT NEXTVAL
1191
+ | ( SET? NOT NULL_ | DROP NOT NULL_)
1192
+ | ( (SET DATA)? TYPE)? data_type
1193
+ | COMMENT string
1194
+ | UNSET COMMENT
1195
+ )
1196
+ ;
1197
+
1198
+ inline_constraint
1199
+ : (CONSTRAINT id_)? (
1200
+ (UNIQUE | primary_key) common_constraint_properties*
1201
+ | foreign_key REFERENCES object_name (LR_BRACKET column_name RR_BRACKET)? constraint_properties
1202
+ )
1203
+ ;
1204
+
1205
+ enforced_not_enforced
1206
+ : NOT? ENFORCED
1207
+ ;
1208
+
1209
+ deferrable_not_deferrable
1210
+ : NOT? DEFERRABLE
1211
+ ;
1212
+
1213
+ initially_deferred_or_immediate
1214
+ : INITIALLY (DEFERRED | IMMEDIATE)
1215
+ ;
1216
+
1217
+ //TODO : Some properties are mutualy exclusive ie INITIALLY DEFERRED is not compatible with NOT DEFERRABLE
1218
+ // also VALIDATE | NOVALIDATE need to be after ENABLE or ENFORCED. Lot of case to handle :)
1219
+ common_constraint_properties
1220
+ : enforced_not_enforced (VALIDATE | NOVALIDATE)?
1221
+ | deferrable_not_deferrable
1222
+ | initially_deferred_or_immediate
1223
+ | ( ENABLE | DISABLE) ( VALIDATE | NOVALIDATE)?
1224
+ | RELY
1225
+ | NORELY
1226
+ ;
1227
+
1228
+ on_update
1229
+ : ON UPDATE on_action
1230
+ ;
1231
+
1232
+ on_delete
1233
+ : ON DELETE on_action
1234
+ ;
1235
+
1236
+ foreign_key_match
1237
+ : MATCH match_type = (FULL | PARTIAL | SIMPLE)
1238
+ ;
1239
+
1240
+ on_action
1241
+ : CASCADE
1242
+ | SET ( NULL_ | DEFAULT)
1243
+ | RESTRICT
1244
+ | NO ACTION
1245
+ ;
1246
+
1247
+ constraint_properties
1248
+ : common_constraint_properties*
1249
+ | foreign_key_match
1250
+ | foreign_key_match? ( on_update on_delete? | on_delete on_update?)
1251
+ ;
1252
+
1253
+ ext_table_column_action
1254
+ : ADD COLUMN? column_name data_type AS '(' expr ')'
1255
+ | RENAME COLUMN column_name TO column_name
1256
+ | DROP COLUMN? column_list
1257
+ ;
1258
+
1259
+ constraint_action
1260
+ : ADD out_of_line_constraint
1261
+ | RENAME CONSTRAINT id_ TO id_
1262
+ | alter_modify (CONSTRAINT id_ | primary_key | UNIQUE | foreign_key) column_list_in_parentheses enforced_not_enforced? (
1263
+ VALIDATE
1264
+ | NOVALIDATE
1265
+ ) (RELY | NORELY)
1266
+ | DROP (CONSTRAINT id_ | primary_key | UNIQUE | foreign_key) column_list_in_parentheses? cascade_restrict?
1267
+ | DROP PRIMARY KEY
1268
+ ;
1269
+
1270
+ search_optimization_action
1271
+ : ADD SEARCH OPTIMIZATION (ON search_method_with_target (COMMA search_method_with_target)*)?
1272
+ | DROP SEARCH OPTIMIZATION (ON search_method_with_target (COMMA search_method_with_target)*)?
1273
+ ;
1274
+
1275
+ search_method_with_target
1276
+ : (EQUALITY | SUBSTRING | GEO) '(' (STAR | expr) ')'
1277
+ ;
1278
+
1279
+ alter_table_alter_column
1280
+ : ALTER TABLE object_name alter_modify (
1281
+ '(' alter_column_decl_list ')'
1282
+ | alter_column_decl_list
1283
+ )
1284
+ | ALTER TABLE object_name alter_modify COLUMN column_name SET MASKING POLICY id_ (
1285
+ USING '(' column_name COMMA column_list ')'
1286
+ )? FORCE?
1287
+ | ALTER TABLE object_name alter_modify COLUMN column_name UNSET MASKING POLICY
1288
+ | ALTER TABLE object_name alter_modify column_set_tags (COMMA column_set_tags)*
1289
+ | ALTER TABLE object_name alter_modify column_unset_tags (COMMA column_unset_tags)*
1290
+ ;
1291
+
1292
+ alter_column_decl_list
1293
+ : alter_column_decl (COMMA alter_column_decl)*
1294
+ ;
1295
+
1296
+ alter_column_decl
1297
+ : COLUMN? column_name alter_column_opts
1298
+ ;
1299
+
1300
+ alter_column_opts
1301
+ : DROP DEFAULT
1302
+ | SET DEFAULT object_name DOT NEXTVAL
1303
+ | ( SET? NOT NULL_ | DROP NOT NULL_)
1304
+ | ( (SET DATA)? TYPE)? data_type
1305
+ | comment_clause
1306
+ | UNSET COMMENT
1307
+ ;
1308
+
1309
+ column_set_tags
1310
+ : COLUMN? column_name set_tags
1311
+ ;
1312
+
1313
+ column_unset_tags
1314
+ : COLUMN column_name unset_tags
1315
+ ;
1316
+
1317
+ alter_tag
1318
+ : ALTER TAG if_exists? object_name alter_tag_opts
1319
+ ;
1320
+
1321
+ alter_task
1322
+ : ALTER TASK if_exists? object_name resume_suspend
1323
+ | ALTER TASK if_exists? object_name ( REMOVE | ADD) AFTER string_list
1324
+ | ALTER TASK if_exists? object_name SET
1325
+ // TODO : Check and review if element's order binded or not
1326
+ (WAREHOUSE EQ id_)? task_schedule? task_overlap? task_timeout? task_suspend_after_failure_number? comment_clause? session_params_list?
1327
+ | ALTER TASK if_exists? object_name UNSET
1328
+ // TODO : Check and review if element's order binded or not
1329
+ WAREHOUSE? SCHEDULE? ALLOW_OVERLAPPING_EXECUTION? USER_TASK_TIMEOUT_MS? SUSPEND_TASK_AFTER_NUM_FAILURES? COMMENT? session_parameter_list?
1330
+ //[ , ... ]
1331
+ | ALTER TASK if_exists? object_name set_tags
1332
+ | ALTER TASK if_exists? object_name unset_tags
1333
+ | ALTER TASK if_exists? object_name MODIFY AS sql
1334
+ | ALTER TASK if_exists? object_name MODIFY WHEN expr
1335
+ ;
1336
+
1337
+ alter_user
1338
+ : ALTER USER if_exists? id_ alter_user_opts
1339
+ ;
1340
+
1341
+ alter_view
1342
+ : ALTER VIEW if_exists? object_name RENAME TO object_name
1343
+ | ALTER VIEW if_exists? object_name SET comment_clause
1344
+ | ALTER VIEW if_exists? object_name UNSET COMMENT
1345
+ | ALTER VIEW object_name SET SECURE
1346
+ | ALTER VIEW object_name UNSET SECURE
1347
+ | ALTER VIEW if_exists? object_name set_tags
1348
+ | ALTER VIEW if_exists? object_name unset_tags
1349
+ | ALTER VIEW if_exists? object_name ADD ROW ACCESS POLICY id_ ON column_list_in_parentheses
1350
+ | ALTER VIEW if_exists? object_name DROP ROW ACCESS POLICY id_
1351
+ | ALTER VIEW if_exists? object_name ADD ROW ACCESS POLICY id_ ON column_list_in_parentheses COMMA DROP ROW ACCESS POLICY id_
1352
+ | ALTER VIEW if_exists? object_name DROP ALL ROW ACCESS POLICIES
1353
+ | ALTER VIEW object_name alter_modify COLUMN? id_ SET MASKING POLICY id_ (
1354
+ USING '(' column_name COMMA column_list ')'
1355
+ )? FORCE?
1356
+ | ALTER VIEW object_name alter_modify COLUMN? id_ UNSET MASKING POLICY
1357
+ | ALTER VIEW object_name alter_modify COLUMN? id_ set_tags
1358
+ | ALTER VIEW object_name alter_modify COLUMN id_ unset_tags
1359
+ ;
1360
+
1361
+ alter_modify
1362
+ : ALTER
1363
+ | MODIFY
1364
+ ;
1365
+
1366
+ alter_warehouse
1367
+ : ALTER WAREHOUSE if_exists? alter_warehouse_opts
1368
+ ;
1369
+
1370
+ alter_connection_opts
1371
+ : id_ ENABLE FAILOVER TO ACCOUNTS id_ DOT id_ (COMMA id_ DOT id_)* ignore_edition_check?
1372
+ | id_ DISABLE FAILOVER ( TO ACCOUNTS id_ DOT id_ (COMMA id_ DOT id_))?
1373
+ | id_ PRIMARY
1374
+ | if_exists? id_ SET comment_clause
1375
+ | if_exists? id_ UNSET COMMENT
1376
+ ;
1377
+
1378
+ alter_user_opts
1379
+ : RENAME TO id_
1380
+ | RESET PASSWORD
1381
+ | ABORT ALL QUERIES
1382
+ | ADD DELEGATED AUTHORIZATION OF ROLE id_ TO SECURITY INTEGRATION id_
1383
+ | REMOVE DELEGATED (AUTHORIZATION OF ROLE id_ | AUTHORIZATIONS) FROM SECURITY INTEGRATION id_
1384
+ | set_tags
1385
+ | unset_tags
1386
+ // | SET object_properties? object_params? session_params?
1387
+ // | UNSET (object_property_name | object_param_name | session_param_name) //[ , ... ]
1388
+ ;
1389
+
1390
+ alter_tag_opts
1391
+ : RENAME TO object_name
1392
+ | ( ADD | DROP) tag_allowed_values
1393
+ | UNSET ALLOWED_VALUES
1394
+ | SET MASKING POLICY id_ (COMMA MASKING POLICY id_)*
1395
+ | UNSET MASKING POLICY id_ (COMMA MASKING POLICY id_)*
1396
+ | SET comment_clause
1397
+ | UNSET COMMENT
1398
+ ;
1399
+
1400
+ alter_network_policy_opts
1401
+ : if_exists? id_ SET (ALLOWED_IP_LIST EQ '(' string_list ')')? (
1402
+ BLOCKED_IP_LIST EQ '(' string_list ')'
1403
+ )? comment_clause?
1404
+ | if_exists? id_ UNSET COMMENT
1405
+ | id_ RENAME TO id_
1406
+ ;
1407
+
1408
+ alter_warehouse_opts
1409
+ : id_fn? (SUSPEND | RESUME if_suspended?)
1410
+ | id_fn? ABORT ALL QUERIES
1411
+ | id_fn RENAME TO id_
1412
+ // | id_ SET [ objectProperties ]
1413
+ | id_fn set_tags
1414
+ | id_fn unset_tags
1415
+ | id_fn UNSET id_ (COMMA id_)*
1416
+ | id_ SET wh_properties (',' wh_properties)*
1417
+ ;
1418
+
1419
+ alter_account_opts
1420
+ : SET account_params? object_params? session_params?
1421
+ | UNSET param_name (COMMA param_name)?
1422
+ | SET RESOURCE_MONITOR EQ id_
1423
+ | set_tags
1424
+ | unset_tags
1425
+ | id_ RENAME TO id_ ( SAVE_OLD_URL EQ true_false)?
1426
+ | id_ DROP OLD URL
1427
+ ;
1428
+
1429
+ set_tags
1430
+ : SET tag_decl_list
1431
+ ;
1432
+
1433
+ tag_decl_list
1434
+ : TAG object_name EQ tag_value (COMMA object_name EQ tag_value)*
1435
+ ;
1436
+
1437
+ unset_tags
1438
+ : UNSET TAG object_name (COMMA object_name)*
1439
+ ;
1440
+
1441
+ // create commands
1442
+ create_command
1443
+ : create_account
1444
+ | create_alert
1445
+ | create_api_integration
1446
+ | create_object_clone
1447
+ | create_connection
1448
+ | create_database
1449
+ | create_dynamic_table
1450
+ | create_event_table
1451
+ | create_external_function
1452
+ | create_external_table
1453
+ | create_failover_group
1454
+ | create_file_format
1455
+ | create_function
1456
+ //| create_integration
1457
+ | create_managed_account
1458
+ | create_masking_policy
1459
+ | create_materialized_view
1460
+ | create_network_policy
1461
+ | create_notification_integration
1462
+ | create_password_policy
1463
+ | create_pipe
1464
+ | create_procedure
1465
+ | create_replication_group
1466
+ | create_resource_monitor
1467
+ | create_role
1468
+ | create_row_access_policy
1469
+ | create_schema
1470
+ | create_security_integration_external_oauth
1471
+ | create_security_integration_snowflake_oauth
1472
+ | create_security_integration_saml2
1473
+ | create_security_integration_scim
1474
+ | create_sequence
1475
+ | create_session_policy
1476
+ | create_share
1477
+ | create_stage
1478
+ | create_storage_integration
1479
+ | create_stream
1480
+ | create_table
1481
+ | create_table_as_select
1482
+ | create_table_like
1483
+ // | create_|_alter_table_…_constraint
1484
+ | create_tag
1485
+ | create_task
1486
+ | create_user
1487
+ | create_view
1488
+ | create_warehouse
1489
+ ;
1490
+
1491
+ create_account
1492
+ : CREATE ACCOUNT id_ ADMIN_NAME EQ id_ ADMIN_PASSWORD EQ string (FIRST_NAME EQ id_)? (
1493
+ LAST_NAME EQ id_
1494
+ )? EMAIL EQ string (MUST_CHANGE_PASSWORD EQ true_false)? EDITION EQ (
1495
+ STANDARD
1496
+ | ENTERPRISE
1497
+ | BUSINESS_CRITICAL
1498
+ ) (REGION_GROUP EQ region_group_id)? (REGION EQ snowflake_region_id)? comment_clause?
1499
+ ;
1500
+
1501
+ create_alert
1502
+ : CREATE or_replace? ALERT if_not_exists? id_ WAREHOUSE EQ id_ SCHEDULE EQ string IF '(' EXISTS '(' alert_condition ')' ')' THEN alert_action
1503
+ ;
1504
+
1505
+ alert_condition
1506
+ : select_statement
1507
+ | show_command
1508
+ | call
1509
+ ;
1510
+
1511
+ alert_action
1512
+ : sql_command
1513
+ ;
1514
+
1515
+ create_api_integration
1516
+ : CREATE or_replace? API INTEGRATION if_not_exists? id_ API_PROVIDER EQ (id_) API_AWS_ROLE_ARN EQ string (
1517
+ API_KEY EQ string
1518
+ )? API_ALLOWED_PREFIXES EQ LR_BRACKET string RR_BRACKET (
1519
+ API_BLOCKED_PREFIXES EQ LR_BRACKET string RR_BRACKET
1520
+ )? ENABLED EQ true_false comment_clause?
1521
+ | CREATE or_replace? API INTEGRATION if_not_exists? id_ API_PROVIDER EQ id_ AZURE_TENANT_ID EQ string AZURE_AD_APPLICATION_ID EQ string (
1522
+ API_KEY EQ string
1523
+ )? API_ALLOWED_PREFIXES EQ '(' string ')' (API_BLOCKED_PREFIXES EQ '(' string ')')? ENABLED EQ true_false comment_clause?
1524
+ | CREATE or_replace API INTEGRATION if_not_exists id_ API_PROVIDER EQ id_ GOOGLE_AUDIENCE EQ string API_ALLOWED_PREFIXES EQ '(' string ')' (
1525
+ API_BLOCKED_PREFIXES EQ '(' string ')'
1526
+ )? ENABLED EQ true_false comment_clause?
1527
+ ;
1528
+
1529
+ create_object_clone
1530
+ : CREATE or_replace? (DATABASE | SCHEMA | TABLE) if_not_exists? id_ CLONE object_name (
1531
+ at_before1 LR_BRACKET (TIMESTAMP ASSOC string | OFFSET ASSOC string | STATEMENT ASSOC id_) RR_BRACKET
1532
+ )?
1533
+ | CREATE or_replace? (STAGE | FILE FORMAT | SEQUENCE | STREAM | TASK) if_not_exists? object_name CLONE object_name
1534
+ ;
1535
+
1536
+ create_connection
1537
+ : CREATE CONNECTION if_not_exists? id_ (
1538
+ comment_clause?
1539
+ | (AS REPLICA OF id_ DOT id_ DOT id_ comment_clause?)
1540
+ )
1541
+ ;
1542
+
1543
+ create_database
1544
+ : CREATE or_replace? TRANSIENT? DATABASE if_not_exists? id_ clone_at_before? (
1545
+ DATA_RETENTION_TIME_IN_DAYS EQ num
1546
+ )? (MAX_DATA_EXTENSION_TIME_IN_DAYS EQ num)? default_ddl_collation? with_tags? comment_clause?
1547
+ ;
1548
+
1549
+ clone_at_before
1550
+ : CLONE id_ (
1551
+ at_before1 LR_BRACKET (TIMESTAMP ASSOC string | OFFSET ASSOC string | STATEMENT ASSOC id_) RR_BRACKET
1552
+ )?
1553
+ ;
1554
+
1555
+ at_before1
1556
+ : AT_KEYWORD
1557
+ | BEFORE
1558
+ ;
1559
+
1560
+ header_decl
1561
+ : string EQ string
1562
+ ;
1563
+
1564
+ compression_type
1565
+ : NONE
1566
+ | GZIP
1567
+ | DEFLATE
1568
+ | AUTO
1569
+ ;
1570
+
1571
+ compression
1572
+ : COMPRESSION EQ compression_type
1573
+ ;
1574
+
1575
+ create_dynamic_table
1576
+ : CREATE or_replace? DYNAMIC TABLE id_ TARGET_LAG EQ (string | DOWNSTREAM) WAREHOUSE EQ wh = id_ AS query_statement
1577
+ ;
1578
+
1579
+ create_event_table
1580
+ : CREATE or_replace? EVENT TABLE if_not_exists? id_ cluster_by? (
1581
+ DATA_RETENTION_TIME_IN_DAYS EQ num
1582
+ )? (MAX_DATA_EXTENSION_TIME_IN_DAYS EQ num)? change_tracking? (
1583
+ DEFAULT_DDL_COLLATION_ EQ string
1584
+ )? copy_grants? with_row_access_policy? with_tags? (WITH? comment_clause)?
1585
+ ;
1586
+
1587
+ create_external_function
1588
+ : CREATE or_replace? SECURE? EXTERNAL FUNCTION object_name LR_BRACKET (
1589
+ arg_name arg_data_type (COMMA arg_name arg_data_type)*
1590
+ )? RR_BRACKET RETURNS data_type null_not_null? (
1591
+ ( CALLED ON NULL_ INPUT)
1592
+ | ((RETURNS NULL_ ON NULL_ INPUT) | STRICT)
1593
+ )? (VOLATILE | IMMUTABLE)? comment_clause? API_INTEGRATION EQ id_ (
1594
+ HEADERS EQ LR_BRACKET header_decl (COMMA header_decl)* RR_BRACKET
1595
+ )? (CONTEXT_HEADERS EQ LR_BRACKET id_ (COMMA id_)* RR_BRACKET)? (MAX_BATCH_ROWS EQ num)? compression? (
1596
+ REQUEST_TRANSLATOR EQ id_
1597
+ )? (RESPONSE_TRANSLATOR EQ id_)? AS string
1598
+ ;
1599
+
1600
+ create_external_table
1601
+ // Partitions computed from expressions
1602
+ : CREATE or_replace? EXTERNAL TABLE if_not_exists? object_name '(' external_table_column_decl_list ')' cloud_provider_params3? partition_by? WITH?
1603
+ LOCATION EQ named_stage (REFRESH_ON_CREATE EQ true_false)? (AUTO_REFRESH EQ true_false)? pattern? file_format (
1604
+ AWS_SNS_TOPIC EQ string
1605
+ )? copy_grants? with_row_access_policy? with_tags? comment_clause?
1606
+ // Partitions added and removed manually
1607
+ | CREATE or_replace? EXTERNAL TABLE if_not_exists? object_name '(' external_table_column_decl_list ')' cloud_provider_params3? partition_by? WITH?
1608
+ LOCATION EQ named_stage PARTITION_TYPE EQ USER_SPECIFIED file_format copy_grants? with_row_access_policy? with_tags? comment_clause?
1609
+ // Delta Lake
1610
+ | CREATE or_replace? EXTERNAL TABLE if_not_exists? object_name '(' external_table_column_decl_list ')' cloud_provider_params3? partition_by? WITH?
1611
+ LOCATION EQ named_stage PARTITION_TYPE EQ USER_SPECIFIED file_format (
1612
+ TABLE_FORMAT EQ DELTA
1613
+ )? copy_grants? with_row_access_policy? with_tags? comment_clause?
1614
+ ;
1615
+
1616
+ external_table_column_decl
1617
+ : column_name data_type AS (expr | id_) inline_constraint?
1618
+ ;
1619
+
1620
+ external_table_column_decl_list
1621
+ : external_table_column_decl (COMMA external_table_column_decl)*
1622
+ ;
1623
+
1624
+ full_acct
1625
+ : id_ DOT id_
1626
+ ;
1627
+
1628
+ integration_type_name
1629
+ : SECURITY INTEGRATIONS
1630
+ | API INTEGRATIONS
1631
+ ;
1632
+
1633
+ create_failover_group
1634
+ : CREATE FAILOVER GROUP if_not_exists? id_ OBJECT_TYPES EQ object_type (COMMA object_type)* (
1635
+ ALLOWED_DATABASES EQ id_ (COMMA id_)*
1636
+ )? (ALLOWED_SHARES EQ id_ (COMMA id_)*)? (
1637
+ ALLOWED_INTEGRATION_TYPES EQ integration_type_name (COMMA integration_type_name)*
1638
+ )? ALLOWED_ACCOUNTS EQ full_acct (COMMA full_acct)* (IGNORE EDITION CHECK)? (
1639
+ REPLICATION_SCHEDULE EQ string
1640
+ )?
1641
+ // Secondary Replication Group
1642
+ | CREATE FAILOVER GROUP if_not_exists? id_ AS REPLICA OF id_ DOT id_ DOT id_
1643
+ ;
1644
+
1645
+ type_fileformat
1646
+ : CSV
1647
+ | JSON
1648
+ | AVRO
1649
+ | ORC
1650
+ | PARQUET
1651
+ | XML
1652
+ | CSV_Q
1653
+ | JSON_Q
1654
+ | AVRO_Q
1655
+ | ORC_Q
1656
+ | PARQUET_Q
1657
+ | XML_Q
1658
+ ;
1659
+
1660
+ create_file_format
1661
+ : CREATE or_replace? FILE FORMAT if_not_exists? object_name (TYPE EQ type_fileformat)? format_type_options* comment_clause?
1662
+ ;
1663
+
1664
+ arg_decl
1665
+ : arg_name arg_data_type arg_default_value_clause?
1666
+ ;
1667
+
1668
+ arg_default_value_clause
1669
+ : DEFAULT expr
1670
+ ;
1671
+
1672
+ col_decl
1673
+ : column_name data_type virtual_column_decl?
1674
+ ;
1675
+
1676
+ virtual_column_decl
1677
+ : AS '(' function_call ')'
1678
+ ;
1679
+
1680
+ function_definition
1681
+ : string
1682
+ | DBL_DOLLAR
1683
+ ;
1684
+
1685
+ create_function
1686
+ : CREATE or_replace? SECURE? FUNCTION if_not_exists? object_name LR_BRACKET (
1687
+ arg_decl (COMMA arg_decl)*
1688
+ )? RR_BRACKET RETURNS (data_type | TABLE LR_BRACKET (col_decl (COMMA col_decl)*)? RR_BRACKET) null_not_null? (
1689
+ LANGUAGE (JAVA | PYTHON | JAVASCRIPT | SQL)
1690
+ )? (CALLED ON NULL_ INPUT | RETURNS NULL_ ON NULL_ INPUT | STRICT)? (VOLATILE | IMMUTABLE)? (
1691
+ PACKAGES EQ '(' string_list ')'
1692
+ )? (RUNTIME_VERSION EQ (string | FLOAT))? (IMPORTS EQ '(' string_list ')')? (
1693
+ PACKAGES EQ '(' string_list ')'
1694
+ )? (HANDLER EQ string)? comment_clause? AS function_definition
1695
+ | CREATE or_replace? SECURE? FUNCTION object_name LR_BRACKET (arg_decl (COMMA arg_decl)*)? RR_BRACKET RETURNS (
1696
+ data_type
1697
+ | TABLE LR_BRACKET (col_decl (COMMA col_decl)*)? RR_BRACKET
1698
+ ) null_not_null? (CALLED ON NULL_ INPUT | RETURNS NULL_ ON NULL_ INPUT | STRICT)? (
1699
+ VOLATILE
1700
+ | IMMUTABLE
1701
+ )? MEMOIZABLE? comment_clause? AS function_definition
1702
+ ;
1703
+
1704
+ create_managed_account
1705
+ : CREATE MANAGED ACCOUNT id_ ADMIN_NAME EQ id_ COMMA ADMIN_PASSWORD EQ string COMMA TYPE EQ READER (
1706
+ COMMA comment_clause
1707
+ )?
1708
+ ;
1709
+
1710
+ create_masking_policy
1711
+ : CREATE or_replace? MASKING POLICY if_not_exists? object_name AS '(' arg_name arg_data_type (
1712
+ COMMA arg_name arg_data_type
1713
+ )? ')' RETURNS arg_data_type ARROW expr comment_clause?
1714
+ ;
1715
+
1716
+ tag_decl
1717
+ : object_name EQ string
1718
+ ;
1719
+
1720
+ column_list_in_parentheses
1721
+ : LR_BRACKET column_list RR_BRACKET
1722
+ ;
1723
+
1724
+ create_materialized_view
1725
+ : CREATE or_replace? SECURE? MATERIALIZED VIEW if_not_exists? object_name (
1726
+ LR_BRACKET column_list_with_comment RR_BRACKET
1727
+ )? view_col* with_row_access_policy? with_tags? copy_grants? comment_clause? cluster_by? AS select_statement
1728
+ //NOTA MATERIALIZED VIEW accept only simple select statement at this time
1729
+ ;
1730
+
1731
+ create_network_policy
1732
+ : CREATE or_replace? NETWORK POLICY id_ ALLOWED_IP_LIST EQ '(' string_list? ')' (
1733
+ BLOCKED_IP_LIST EQ '(' string_list? ')'
1734
+ )? comment_clause?
1735
+ ;
1736
+
1737
+ cloud_provider_params_auto
1738
+ //(for Google Cloud Storage)
1739
+ : NOTIFICATION_PROVIDER EQ GCP_PUBSUB GCP_PUBSUB_SUBSCRIPTION_NAME EQ string
1740
+ //(for Microsoft Azure Storage)
1741
+ | NOTIFICATION_PROVIDER EQ AZURE_EVENT_GRID AZURE_STORAGE_QUEUE_PRIMARY_URI EQ string AZURE_TENANT_ID EQ string
1742
+ ;
1743
+
1744
+ cloud_provider_params_push
1745
+ //(for Amazon SNS)
1746
+ : NOTIFICATION_PROVIDER EQ AWS_SNS AWS_SNS_TOPIC_ARN EQ string AWS_SNS_ROLE_ARN EQ string
1747
+ //(for Google Pub/Sub)
1748
+ | NOTIFICATION_PROVIDER EQ GCP_PUBSUB GCP_PUBSUB_TOPIC_NAME EQ string
1749
+ //(for Microsoft Azure Event Grid)
1750
+ | NOTIFICATION_PROVIDER EQ AZURE_EVENT_GRID AZURE_EVENT_GRID_TOPIC_ENDPOINT EQ string AZURE_TENANT_ID EQ string
1751
+ ;
1752
+
1753
+ create_notification_integration
1754
+ : CREATE or_replace? NOTIFICATION INTEGRATION if_not_exists? id_ ENABLED EQ true_false TYPE EQ QUEUE cloud_provider_params_auto comment_clause?
1755
+ | CREATE or_replace? NOTIFICATION INTEGRATION if_not_exists? id_ ENABLED EQ true_false DIRECTION EQ OUTBOUND TYPE EQ QUEUE
1756
+ cloud_provider_params_push comment_clause?
1757
+ ;
1758
+
1759
+ create_pipe
1760
+ : CREATE or_replace? PIPE if_not_exists? object_name (AUTO_INGEST EQ true_false)? (
1761
+ ERROR_INTEGRATION EQ id_
1762
+ )? (AWS_SNS_TOPIC EQ string)? (INTEGRATION EQ string)? comment_clause? AS copy_into_table
1763
+ ;
1764
+
1765
+ caller_owner
1766
+ : CALLER
1767
+ | OWNER
1768
+ ;
1769
+
1770
+ executa_as
1771
+ : EXECUTE AS caller_owner
1772
+ ;
1773
+
1774
+ procedure_definition
1775
+ : string
1776
+ | DBL_DOLLAR
1777
+ ;
1778
+
1779
+ not_null
1780
+ : NOT NULL_
1781
+ ;
1782
+
1783
+ create_procedure
1784
+ : CREATE or_replace? PROCEDURE object_name LR_BRACKET (arg_decl (COMMA arg_decl)*)? RR_BRACKET RETURNS (
1785
+ data_type
1786
+ | TABLE LR_BRACKET (col_decl (COMMA col_decl)*)? RR_BRACKET
1787
+ ) not_null? LANGUAGE SQL (CALLED ON NULL_ INPUT | RETURNS NULL_ ON NULL_ INPUT | STRICT)? (
1788
+ VOLATILE
1789
+ | IMMUTABLE
1790
+ )? // Note: VOLATILE and IMMUTABLE are deprecated.
1791
+ comment_clause? executa_as? AS procedure_definition
1792
+ | CREATE or_replace? SECURE? PROCEDURE object_name LR_BRACKET (arg_decl (COMMA arg_decl)*)? RR_BRACKET RETURNS data_type not_null? LANGUAGE
1793
+ JAVASCRIPT (CALLED ON NULL_ INPUT | RETURNS NULL_ ON NULL_ INPUT | STRICT)? (
1794
+ VOLATILE
1795
+ | IMMUTABLE
1796
+ )? // Note: VOLATILE and IMMUTABLE are deprecated.
1797
+ comment_clause? executa_as? AS procedure_definition
1798
+ | CREATE or_replace? SECURE? PROCEDURE object_name LR_BRACKET (arg_decl (COMMA arg_decl)*)? RR_BRACKET RETURNS (
1799
+ data_type not_null?
1800
+ | TABLE LR_BRACKET (col_decl (COMMA col_decl)*)? RR_BRACKET
1801
+ ) LANGUAGE PYTHON RUNTIME_VERSION EQ string (IMPORTS EQ '(' string_list ')')? PACKAGES EQ '(' string_list ')' HANDLER EQ string
1802
+ // ( CALLED ON NULL_ INPUT | RETURNS NULL_ ON NULL_ INPUT | STRICT )?
1803
+ // ( VOLATILE | IMMUTABLE )? // Note: VOLATILE and IMMUTABLE are deprecated.
1804
+ comment_clause? executa_as? AS procedure_definition
1805
+ ;
1806
+
1807
+ create_replication_group
1808
+ : CREATE REPLICATION GROUP if_not_exists? id_ OBJECT_TYPES EQ object_type (COMMA object_type)* (
1809
+ ALLOWED_DATABASES EQ id_ (COMMA id_)*
1810
+ )? (ALLOWED_SHARES EQ id_ (COMMA id_)*)? (
1811
+ ALLOWED_INTEGRATION_TYPES EQ integration_type_name (COMMA integration_type_name)*
1812
+ )? ALLOWED_ACCOUNTS EQ full_acct (COMMA full_acct)* (IGNORE EDITION CHECK)? (
1813
+ REPLICATION_SCHEDULE EQ string
1814
+ )?
1815
+ //Secondary Replication Group
1816
+ | CREATE REPLICATION GROUP if_not_exists? id_ AS REPLICA OF id_ DOT id_ DOT id_
1817
+ ;
1818
+
1819
+ create_resource_monitor
1820
+ : CREATE or_replace? RESOURCE MONITOR id_ WITH credit_quota? frequency? (
1821
+ START_TIMESTAMP EQ ( string | IMMEDIATELY)
1822
+ )? (END_TIMESTAMP EQ string)? notify_users? (TRIGGERS trigger_definition+)?
1823
+ ;
1824
+
1825
+ create_role
1826
+ : CREATE or_replace? ROLE if_not_exists? id_ with_tags? comment_clause?
1827
+ ;
1828
+
1829
+ create_row_access_policy
1830
+ : CREATE or_replace? ROW ACCESS POLICY if_not_exists? id_ AS LR_BRACKET arg_decl (
1831
+ COMMA arg_decl
1832
+ )* RR_BRACKET RETURNS BOOLEAN ARROW expr comment_clause?
1833
+ ;
1834
+
1835
+ create_schema
1836
+ : CREATE or_replace? TRANSIENT? SCHEMA if_not_exists? schema_name clone_at_before? (
1837
+ WITH MANAGED ACCESS
1838
+ )? (DATA_RETENTION_TIME_IN_DAYS EQ num)? (MAX_DATA_EXTENSION_TIME_IN_DAYS EQ num)? default_ddl_collation? with_tags? comment_clause?
1839
+ ;
1840
+
1841
+ create_security_integration_external_oauth
1842
+ : CREATE or_replace? SECURITY INTEGRATION if_not_exists? id_ TYPE EQ EXTERNAL_OAUTH ENABLED EQ true_false EXTERNAL_OAUTH_TYPE EQ (
1843
+ OKTA
1844
+ | AZURE
1845
+ | PING_FEDERATE
1846
+ | CUSTOM
1847
+ ) EXTERNAL_OAUTH_ISSUER EQ string EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM EQ (
1848
+ string
1849
+ | '(' string_list ')'
1850
+ ) EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE EQ string (
1851
+ EXTERNAL_OAUTH_JWS_KEYS_URL EQ string
1852
+ )? // For OKTA | PING_FEDERATE | CUSTOM
1853
+ (EXTERNAL_OAUTH_JWS_KEYS_URL EQ (string | '(' string_list ')'))? // For Azure
1854
+ (EXTERNAL_OAUTH_BLOCKED_ROLES_LIST EQ '(' string_list ')')? (
1855
+ EXTERNAL_OAUTH_ALLOWED_ROLES_LIST EQ '(' string_list ')'
1856
+ )? (EXTERNAL_OAUTH_RSA_PUBLIC_KEY EQ string)? (EXTERNAL_OAUTH_RSA_PUBLIC_KEY_2 EQ string)? (
1857
+ EXTERNAL_OAUTH_AUDIENCE_LIST EQ '(' string ')'
1858
+ )? (EXTERNAL_OAUTH_ANY_ROLE_MODE EQ (DISABLE | ENABLE | ENABLE_FOR_PRIVILEGE))? (
1859
+ EXTERNAL_OAUTH_SCOPE_DELIMITER EQ string
1860
+ )? // Only for EXTERNAL_OAUTH_TYPE EQ CUSTOM
1861
+ ;
1862
+
1863
+ implicit_none
1864
+ : IMPLICIT
1865
+ | NONE
1866
+ ;
1867
+
1868
+ create_security_integration_snowflake_oauth
1869
+ : CREATE or_replace? SECURITY INTEGRATION if_not_exists? id_ TYPE EQ OAUTH OAUTH_CLIENT EQ partner_application OAUTH_REDIRECT_URI EQ string
1870
+ //Required when OAUTH_CLIENTEQLOOKER
1871
+ enabled_true_false? (OAUTH_ISSUE_REFRESH_TOKENS EQ true_false)? (
1872
+ OAUTH_REFRESH_TOKEN_VALIDITY EQ num
1873
+ )? (OAUTH_USE_SECONDARY_ROLES EQ implicit_none)? (BLOCKED_ROLES_LIST EQ '(' string_list ')')? comment_clause?
1874
+ // Snowflake OAuth for custom clients
1875
+ | CREATE or_replace? SECURITY INTEGRATION if_not_exists? id_ TYPE EQ OAUTH OAUTH_CLIENT EQ CUSTOM
1876
+ //OAUTH_CLIENT_TYPE EQ 'CONFIDENTIAL' | 'PUBLIC'
1877
+ OAUTH_REDIRECT_URI EQ string enabled_true_false? (
1878
+ OAUTH_ALLOW_NON_TLS_REDIRECT_URI EQ true_false
1879
+ )? (OAUTH_ENFORCE_PKCE EQ true_false)? (OAUTH_USE_SECONDARY_ROLES EQ implicit_none)? (
1880
+ PRE_AUTHORIZED_ROLES_LIST EQ '(' string_list ')'
1881
+ )? (BLOCKED_ROLES_LIST EQ '(' string_list ')')? (OAUTH_ISSUE_REFRESH_TOKENS EQ true_false)? (
1882
+ OAUTH_REFRESH_TOKEN_VALIDITY EQ num
1883
+ )? network_policy? (OAUTH_CLIENT_RSA_PUBLIC_KEY EQ string)? (
1884
+ OAUTH_CLIENT_RSA_PUBLIC_KEY_2 EQ string
1885
+ )? comment_clause?
1886
+ ;
1887
+
1888
+ create_security_integration_saml2
1889
+ : CREATE or_replace? SECURITY INTEGRATION if_not_exists? TYPE EQ SAML2 enabled_true_false SAML2_ISSUER EQ string SAML2_SSO_URL EQ string
1890
+ SAML2_PROVIDER EQ string SAML2_X509_CERT EQ string (
1891
+ SAML2_SP_INITIATED_LOGIN_PAGE_LABEL EQ string
1892
+ )? (SAML2_ENABLE_SP_INITIATED EQ true_false)? (SAML2_SNOWFLAKE_X509_CERT EQ string)? (
1893
+ SAML2_SIGN_REQUEST EQ true_false
1894
+ )? (SAML2_REQUESTED_NAMEID_FORMAT EQ string)? (SAML2_POST_LOGOUT_REDIRECT_URL EQ string)? (
1895
+ SAML2_FORCE_AUTHN EQ true_false
1896
+ )? (SAML2_SNOWFLAKE_ISSUER_URL EQ string)? (SAML2_SNOWFLAKE_ACS_URL EQ string)?
1897
+ ;
1898
+
1899
+ create_security_integration_scim
1900
+ : CREATE or_replace? SECURITY INTEGRATION if_not_exists? id_ TYPE EQ SCIM SCIM_CLIENT EQ (
1901
+ OKTA_Q
1902
+ | AZURE_Q
1903
+ | GENERIC_Q
1904
+ ) RUN_AS_ROLE EQ (OKTA_PROVISIONER_Q | AAD_PROVISIONER_Q | GENERIC_SCIM_PROVISIONER_Q) network_policy? (
1905
+ SYNC_PASSWORD EQ true_false
1906
+ )? comment_clause?
1907
+ ;
1908
+
1909
+ network_policy
1910
+ : NETWORK_POLICY EQ string
1911
+ ;
1912
+
1913
+ partner_application
1914
+ : TABLEAU_DESKTOP
1915
+ | TABLEAU_SERVER
1916
+ | LOOKER
1917
+ ;
1918
+
1919
+ start_with
1920
+ : START WITH? EQ? num
1921
+ ;
1922
+
1923
+ increment_by
1924
+ : INCREMENT BY? EQ? num
1925
+ ;
1926
+
1927
+ create_sequence
1928
+ : CREATE or_replace? SEQUENCE if_not_exists? object_name WITH? start_with? increment_by? order_noorder? comment_clause?
1929
+ ;
1930
+
1931
+ create_session_policy
1932
+ : CREATE or_replace? SESSION POLICY if_not_exists? object_name session_policy_params*
1933
+ ;
1934
+
1935
+ session_policy_params
1936
+ : session_policy_param_name EQ num
1937
+ | comment_clause
1938
+ ;
1939
+
1940
+ session_policy_param_name
1941
+ : SESSION_IDLE_TIMEOUT_MINS
1942
+ | SESSION_UI_IDLE_TIMEOUT_MINS
1943
+ ;
1944
+
1945
+ create_password_policy
1946
+ : CREATE or_replace? PASSWORD POLICY if_not_exists? object_name password_policy_params*
1947
+ ;
1948
+
1949
+ password_policy_params
1950
+ : password_policy_param_name EQ num
1951
+ | comment_clause
1952
+ ;
1953
+
1954
+ password_policy_param_name
1955
+ : PASSWORD_HISTORY
1956
+ | PASSWORD_LOCKOUT_TIME_MINS
1957
+ | PASSWORD_MAX_AGE_DAYS
1958
+ | PASSWORD_MAX_LENGTH
1959
+ | PASSWORD_MAX_RETRIES
1960
+ | PASSWORD_MIN_AGE_DAYS
1961
+ | PASSWORD_MIN_LENGTH
1962
+ | PASSWORD_MIN_LOWER_CASE_CHARS
1963
+ | PASSWORD_MIN_NUMERIC_CHARS
1964
+ | PASSWORD_MIN_SPECIAL_CHARS
1965
+ | PASSWORD_MIN_UPPER_CASE_CHARS
1966
+ ;
1967
+
1968
+ create_share
1969
+ : CREATE or_replace? SHARE id_ comment_clause?
1970
+ ;
1971
+
1972
+ character
1973
+ : CHAR_LITERAL
1974
+ | AAD_PROVISIONER_Q
1975
+ | ARRAY_Q
1976
+ | AUTO_Q
1977
+ | AVRO_Q
1978
+ | AZURE_CSE_Q
1979
+ | AZURE_Q
1980
+ | BOTH_Q
1981
+ | CSV_Q
1982
+ | GCS_SSE_KMS_Q
1983
+ | GENERIC_Q
1984
+ | GENERIC_SCIM_PROVISIONER_Q
1985
+ | JSON_Q
1986
+ | NONE_Q
1987
+ | OBJECT_Q
1988
+ | OKTA_PROVISIONER_Q
1989
+ | OKTA_Q
1990
+ | ORC_Q
1991
+ | PARQUET_Q
1992
+ | S3
1993
+ | SNOWPARK_OPTIMIZED
1994
+ | XML_Q
1995
+ ;
1996
+
1997
+ format_type_options
1998
+ //-- If TYPE EQ CSV
1999
+ : COMPRESSION EQ (AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE | AUTO_Q)
2000
+ | RECORD_DELIMITER EQ ( string | NONE)
2001
+ | FIELD_DELIMITER EQ ( string | NONE)
2002
+ | FILE_EXTENSION EQ string
2003
+ | SKIP_HEADER EQ num
2004
+ | SKIP_BLANK_LINES EQ true_false
2005
+ | DATE_FORMAT EQ (string | AUTO)
2006
+ | TIME_FORMAT EQ (string | AUTO)
2007
+ | TIMESTAMP_FORMAT EQ (string | AUTO)
2008
+ | BINARY_FORMAT EQ (HEX | BASE64 | UTF8)
2009
+ | ESCAPE EQ (character | NONE | NONE_Q)
2010
+ | ESCAPE_UNENCLOSED_FIELD EQ (string | NONE | NONE_Q)
2011
+ | TRIM_SPACE EQ true_false
2012
+ | FIELD_OPTIONALLY_ENCLOSED_BY EQ (string | NONE | NONE_Q | SINGLE_QUOTE)
2013
+ | NULL_IF EQ LR_BRACKET string_list RR_BRACKET
2014
+ | ERROR_ON_COLUMN_COUNT_MISMATCH EQ true_false
2015
+ | REPLACE_INVALID_CHARACTERS EQ true_false
2016
+ | EMPTY_FIELD_AS_NULL EQ true_false
2017
+ | SKIP_BYTE_ORDER_MARK EQ true_false
2018
+ | ENCODING EQ (string | UTF8) //by the way other encoding keyword are valid ie WINDOWS1252
2019
+ //-- If TYPE EQ JSON
2020
+ //| COMPRESSION EQ (AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE)
2021
+ // | DATE_FORMAT EQ string | AUTO
2022
+ // | TIME_FORMAT EQ string | AUTO
2023
+ // | TIMESTAMP_FORMAT EQ string | AUTO
2024
+ // | BINARY_FORMAT EQ HEX | BASE64 | UTF8
2025
+ // | TRIM_SPACE EQ true_false
2026
+ // | NULL_IF EQ LR_BRACKET string_list RR_BRACKET
2027
+ // | FILE_EXTENSION EQ string
2028
+ | ENABLE_OCTAL EQ true_false
2029
+ | ALLOW_DUPLICATE EQ true_false
2030
+ | STRIP_OUTER_ARRAY EQ true_false
2031
+ | STRIP_NULL_VALUES EQ true_false
2032
+ // | REPLACE_INVALID_CHARACTERS EQ true_false
2033
+ | IGNORE_UTF8_ERRORS EQ true_false
2034
+ // | SKIP_BYTE_ORDER_MARK EQ true_false
2035
+ //-- If TYPE EQ AVRO
2036
+ // | COMPRESSION EQ AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
2037
+ // | TRIM_SPACE EQ true_false
2038
+ // | NULL_IF EQ LR_BRACKET string_list RR_BRACKET
2039
+ //-- If TYPE EQ ORC
2040
+ // | TRIM_SPACE EQ true_false
2041
+ // | NULL_IF EQ LR_BRACKET string_list RR_BRACKET
2042
+ //-- If TYPE EQ PARQUET
2043
+ | COMPRESSION EQ AUTO
2044
+ | LZO
2045
+ | SNAPPY
2046
+ | NONE
2047
+ | SNAPPY_COMPRESSION EQ true_false
2048
+ | BINARY_AS_TEXT EQ true_false
2049
+ // | TRIM_SPACE EQ true_false
2050
+ // | NULL_IF EQ LR_BRACKET string_list RR_BRACKET
2051
+ //-- If TYPE EQ XML
2052
+ | COMPRESSION EQ AUTO
2053
+ | GZIP
2054
+ | BZ2
2055
+ | BROTLI
2056
+ | ZSTD
2057
+ | DEFLATE
2058
+ | RAW_DEFLATE
2059
+ | NONE
2060
+ // | IGNORE_UTF8_ERRORS EQ true_false
2061
+ | PRESERVE_SPACE EQ true_false
2062
+ | STRIP_OUTER_ELEMENT EQ true_false
2063
+ | DISABLE_SNOWFLAKE_DATA EQ true_false
2064
+ | DISABLE_AUTO_CONVERT EQ true_false
2065
+ // | SKIP_BYTE_ORDER_MARK EQ true_false
2066
+ ;
2067
+
2068
+ copy_options
2069
+ : ON_ERROR EQ (CONTINUE | SKIP_FILE | SKIP_FILE_N | SKIP_FILE_N ABORT_STATEMENT)
2070
+ | SIZE_LIMIT EQ num
2071
+ | PURGE EQ true_false
2072
+ | RETURN_FAILED_ONLY EQ true_false
2073
+ | MATCH_BY_COLUMN_NAME EQ CASE_SENSITIVE
2074
+ | CASE_INSENSITIVE
2075
+ | NONE
2076
+ | ENFORCE_LENGTH EQ true_false
2077
+ | TRUNCATECOLUMNS EQ true_false
2078
+ | FORCE EQ true_false
2079
+ ;
2080
+
2081
+ stage_encryption_opts_internal
2082
+ : ENCRYPTION EQ LR_BRACKET TYPE EQ (SNOWFLAKE_FULL | SNOWFLAKE_SSE) RR_BRACKET
2083
+ ;
2084
+
2085
+ stage_type
2086
+ : TYPE EQ string
2087
+ ;
2088
+
2089
+ stage_master_key
2090
+ : MASTER_KEY EQ string
2091
+ ;
2092
+
2093
+ stage_kms_key
2094
+ : KMS_KEY_ID EQ string
2095
+ ;
2096
+
2097
+ stage_encryption_opts_aws
2098
+ : ENCRYPTION EQ LR_BRACKET (stage_type? stage_master_key | stage_type stage_kms_key?) RR_BRACKET
2099
+ ;
2100
+
2101
+ aws_token
2102
+ : AWS_TOKEN EQ string
2103
+ ;
2104
+
2105
+ aws_key_id
2106
+ : AWS_KEY_ID EQ string
2107
+ ;
2108
+
2109
+ aws_secret_key
2110
+ : AWS_SECRET_KEY EQ string
2111
+ ;
2112
+
2113
+ aws_role
2114
+ : AWS_ROLE EQ string
2115
+ ;
2116
+
2117
+ azure_encryption_value
2118
+ : (TYPE EQ AZURE_CSE_Q)? MASTER_KEY EQ string
2119
+ | MASTER_KEY EQ string TYPE EQ AZURE_CSE_Q
2120
+ | TYPE EQ NONE_Q
2121
+ ;
2122
+
2123
+ stage_encryption_opts_az
2124
+ : ENCRYPTION EQ LR_BRACKET azure_encryption_value RR_BRACKET
2125
+ ;
2126
+
2127
+ storage_integration_eq_id
2128
+ : STORAGE_INTEGRATION EQ id_
2129
+ ;
2130
+
2131
+ az_credential_or_storage_integration
2132
+ : storage_integration_eq_id
2133
+ | CREDENTIALS EQ LR_BRACKET AZURE_SAS_TOKEN EQ string RR_BRACKET
2134
+ ;
2135
+
2136
+ gcp_encryption_value
2137
+ : (TYPE EQ GCS_SSE_KMS_Q)? KMS_KEY_ID EQ string
2138
+ | KMS_KEY_ID EQ string TYPE EQ GCS_SSE_KMS_Q
2139
+ | TYPE EQ NONE_Q
2140
+ ;
2141
+
2142
+ stage_encryption_opts_gcp
2143
+ : ENCRYPTION EQ LR_BRACKET gcp_encryption_value RR_BRACKET
2144
+ ;
2145
+
2146
+ aws_credential_or_storage_integration
2147
+ : storage_integration_eq_id
2148
+ | CREDENTIALS EQ LR_BRACKET (aws_key_id aws_secret_key aws_token? | aws_role) RR_BRACKET
2149
+ ;
2150
+
2151
+ external_stage_params
2152
+ //(for Amazon S3)
2153
+ : URL EQ s3_url = (S3_PATH | S3GOV_PATH) (
2154
+ aws_credential_or_storage_integration? stage_encryption_opts_aws
2155
+ | stage_encryption_opts_aws? aws_credential_or_storage_integration
2156
+ )?
2157
+ //(for Google Cloud Storage)
2158
+ | URL EQ gc_url = GCS_PATH (
2159
+ storage_integration_eq_id? stage_encryption_opts_gcp
2160
+ | stage_encryption_opts_gcp? storage_integration_eq_id
2161
+ )?
2162
+ //(for Microsoft Azure)
2163
+ | URL EQ azure_url = AZURE_PATH (
2164
+ az_credential_or_storage_integration? stage_encryption_opts_az
2165
+ | stage_encryption_opts_az? az_credential_or_storage_integration
2166
+ )?
2167
+ ;
2168
+
2169
+ true_false
2170
+ : TRUE
2171
+ | FALSE
2172
+ ;
2173
+
2174
+ enable
2175
+ : ENABLE EQ true_false
2176
+ ;
2177
+
2178
+ refresh_on_create
2179
+ : REFRESH_ON_CREATE EQ true_false
2180
+ ;
2181
+
2182
+ auto_refresh
2183
+ : AUTO_REFRESH EQ true_false
2184
+ ;
2185
+
2186
+ notification_integration
2187
+ : NOTIFICATION_INTEGRATION EQ string
2188
+ ;
2189
+
2190
+ directory_table_internal_params
2191
+ : DIRECTORY EQ LR_BRACKET (
2192
+ enable refresh_on_create?
2193
+ | REFRESH_ON_CREATE EQ FALSE
2194
+ | refresh_on_create enable
2195
+ ) RR_BRACKET
2196
+ ;
2197
+
2198
+ directory_table_external_params
2199
+ // (for Amazon S3)
2200
+ : DIRECTORY EQ LR_BRACKET enable refresh_on_create? auto_refresh? RR_BRACKET
2201
+ // (for Google Cloud Storage)
2202
+ | DIRECTORY EQ LR_BRACKET enable auto_refresh? refresh_on_create? notification_integration? RR_BRACKET
2203
+ // (for Microsoft Azure)
2204
+ | DIRECTORY EQ LR_BRACKET enable refresh_on_create? auto_refresh? notification_integration? RR_BRACKET
2205
+ ;
2206
+
2207
+ /* =========== Stage DDL section =========== */
2208
+ create_stage
2209
+ : CREATE or_replace? temporary? STAGE if_not_exists? object_name_or_identifier stage_encryption_opts_internal? directory_table_internal_params? (
2210
+ FILE_FORMAT EQ LR_BRACKET (
2211
+ FORMAT_NAME EQ string
2212
+ | TYPE EQ type_fileformat format_type_options*
2213
+ ) RR_BRACKET
2214
+ )? (COPY_OPTIONS_ EQ LR_BRACKET copy_options RR_BRACKET)? with_tags? comment_clause?
2215
+ | CREATE or_replace? temporary? STAGE if_not_exists? object_name_or_identifier external_stage_params directory_table_external_params? (
2216
+ FILE_FORMAT EQ LR_BRACKET (
2217
+ FORMAT_NAME EQ string
2218
+ | TYPE EQ type_fileformat format_type_options*
2219
+ ) RR_BRACKET
2220
+ )? (COPY_OPTIONS_ EQ LR_BRACKET copy_options RR_BRACKET)? with_tags? comment_clause?
2221
+ ;
2222
+
2223
+ alter_stage
2224
+ : ALTER STAGE if_exists? object_name_or_identifier RENAME TO object_name_or_identifier
2225
+ | ALTER STAGE if_exists? object_name_or_identifier set_tags
2226
+ | ALTER STAGE if_exists? object_name_or_identifier unset_tags
2227
+ | ALTER STAGE if_exists? object_name_or_identifier SET external_stage_params? file_format? (
2228
+ COPY_OPTIONS_ EQ LR_BRACKET copy_options RR_BRACKET
2229
+ )? comment_clause?
2230
+ ;
2231
+
2232
+ drop_stage
2233
+ : DROP STAGE if_exists? object_name_or_identifier
2234
+ ;
2235
+
2236
+ describe_stage
2237
+ : describe STAGE object_name_or_identifier
2238
+ ;
2239
+
2240
+ show_stages
2241
+ : SHOW STAGES like_pattern? in_obj?
2242
+ ;
2243
+
2244
+ /* =========== End of stage DDL section =========== */
2245
+
2246
+ cloud_provider_params
2247
+ //(for Amazon S3)
2248
+ : STORAGE_PROVIDER EQ S3 STORAGE_AWS_ROLE_ARN EQ string (STORAGE_AWS_OBJECT_ACL EQ string)?
2249
+ //(for Google Cloud Storage)
2250
+ | STORAGE_PROVIDER EQ GCS
2251
+ //(for Microsoft Azure)
2252
+ | STORAGE_PROVIDER EQ AZURE AZURE_TENANT_ID EQ string
2253
+ ;
2254
+
2255
+ cloud_provider_params2
2256
+ //(for Amazon S3)
2257
+ : STORAGE_AWS_ROLE_ARN EQ string (STORAGE_AWS_OBJECT_ACL EQ string)?
2258
+ //(for Microsoft Azure)
2259
+ | AZURE_TENANT_ID EQ string
2260
+ ;
2261
+
2262
+ cloud_provider_params3
2263
+ : INTEGRATION EQ string
2264
+ ;
2265
+
2266
+ create_storage_integration
2267
+ : CREATE or_replace? STORAGE INTEGRATION if_not_exists? id_ TYPE EQ EXTERNAL_STAGE cloud_provider_params ENABLED EQ true_false
2268
+ STORAGE_ALLOWED_LOCATIONS EQ LR_BRACKET string_list RR_BRACKET (
2269
+ STORAGE_BLOCKED_LOCATIONS EQ LR_BRACKET string_list RR_BRACKET
2270
+ )? comment_clause?
2271
+ ;
2272
+
2273
+ copy_grants
2274
+ : COPY GRANTS
2275
+ ;
2276
+
2277
+ append_only
2278
+ : APPEND_ONLY EQ true_false
2279
+ ;
2280
+
2281
+ insert_only
2282
+ : INSERT_ONLY EQ TRUE
2283
+ ;
2284
+
2285
+ show_initial_rows
2286
+ : SHOW_INITIAL_ROWS EQ true_false
2287
+ ;
2288
+
2289
+ stream_time
2290
+ : at_before1 LR_BRACKET (
2291
+ TIMESTAMP ASSOC string
2292
+ | OFFSET ASSOC string
2293
+ | STATEMENT ASSOC id_
2294
+ | STREAM ASSOC string
2295
+ ) RR_BRACKET
2296
+ ;
2297
+
2298
+ create_stream
2299
+ //-- table
2300
+ : CREATE or_replace? STREAM if_not_exists? object_name copy_grants? ON TABLE object_name stream_time? append_only? show_initial_rows?
2301
+ comment_clause?
2302
+ //-- External table
2303
+ | CREATE or_replace? STREAM if_not_exists? object_name copy_grants? ON EXTERNAL TABLE object_name stream_time? insert_only? comment_clause?
2304
+ //-- Directory table
2305
+ | CREATE or_replace? STREAM if_not_exists? object_name copy_grants? ON STAGE object_name comment_clause?
2306
+ //-- View
2307
+ | CREATE or_replace? STREAM if_not_exists? object_name copy_grants? ON VIEW object_name stream_time? append_only? show_initial_rows?
2308
+ comment_clause?
2309
+ ;
2310
+
2311
+ temporary
2312
+ : TEMP
2313
+ | TEMPORARY
2314
+ ;
2315
+
2316
+ table_type
2317
+ : (( LOCAL | GLOBAL)? temporary | VOLATILE)
2318
+ | TRANSIENT
2319
+ ;
2320
+
2321
+ with_tags
2322
+ : WITH? TAG LR_BRACKET tag_decl (COMMA tag_decl)* RR_BRACKET
2323
+ ;
2324
+
2325
+ with_row_access_policy
2326
+ : WITH? ROW ACCESS POLICY id_ ON LR_BRACKET column_name (COMMA column_name)* RR_BRACKET
2327
+ ;
2328
+
2329
+ cluster_by
2330
+ : CLUSTER BY LINEAR? expr_list_in_parentheses
2331
+ ;
2332
+
2333
+ change_tracking
2334
+ : CHANGE_TRACKING EQ true_false
2335
+ ;
2336
+
2337
+ with_masking_policy
2338
+ : WITH? MASKING POLICY id_ (USING column_list_in_parentheses)?
2339
+ ;
2340
+
2341
+ collate
2342
+ : COLLATE string
2343
+ ;
2344
+
2345
+ order_noorder
2346
+ : ORDER
2347
+ | NOORDER
2348
+ ;
2349
+
2350
+ default_value
2351
+ : DEFAULT expr
2352
+ | (AUTOINCREMENT | IDENTITY) (
2353
+ LR_BRACKET num COMMA num RR_BRACKET
2354
+ | start_with
2355
+ | increment_by
2356
+ | start_with increment_by
2357
+ )? order_noorder?
2358
+ ;
2359
+
2360
+ foreign_key
2361
+ : FOREIGN KEY
2362
+ ;
2363
+
2364
+ primary_key
2365
+ : PRIMARY KEY
2366
+ ;
2367
+
2368
+ out_of_line_constraint
2369
+ : (CONSTRAINT id_)? (
2370
+ (UNIQUE | primary_key) column_list_in_parentheses common_constraint_properties*
2371
+ | foreign_key column_list_in_parentheses REFERENCES object_name column_list_in_parentheses constraint_properties
2372
+ )
2373
+ ;
2374
+
2375
+ full_col_decl
2376
+ : col_decl (collate | inline_constraint | null_not_null | (default_value | NULL_))* with_masking_policy? with_tags? (
2377
+ COMMENT string
2378
+ )?
2379
+ ;
2380
+
2381
+ column_decl_item
2382
+ : full_col_decl
2383
+ | out_of_line_constraint
2384
+ ;
2385
+
2386
+ column_decl_item_list
2387
+ : column_decl_item (COMMA column_decl_item)*
2388
+ ;
2389
+
2390
+ create_table
2391
+ : CREATE or_replace? table_type? TABLE (
2392
+ if_not_exists? object_name
2393
+ | object_name if_not_exists?
2394
+ ) ((comment_clause? create_table_clause) | (create_table_clause comment_clause?))
2395
+ ;
2396
+
2397
+ column_decl_item_list_paren
2398
+ : '(' column_decl_item_list ')'
2399
+ ;
2400
+
2401
+ create_table_clause
2402
+ : (
2403
+ column_decl_item_list_paren cluster_by?
2404
+ | cluster_by? comment_clause? column_decl_item_list_paren
2405
+ ) stage_file_format? (STAGE_COPY_OPTIONS EQ LR_BRACKET copy_options RR_BRACKET)? (
2406
+ DATA_RETENTION_TIME_IN_DAYS EQ num
2407
+ )? (MAX_DATA_EXTENSION_TIME_IN_DAYS EQ num)? change_tracking? default_ddl_collation? copy_grants? comment_clause? with_row_access_policy?
2408
+ with_tags?
2409
+ ;
2410
+
2411
+ create_table_as_select
2412
+ : CREATE or_replace? table_type? TABLE (
2413
+ if_not_exists? object_name
2414
+ | object_name if_not_exists?
2415
+ ) ('(' column_decl_item_list ')')? cluster_by? copy_grants? with_row_access_policy? with_tags? comment_clause? AS query_statement
2416
+ ;
2417
+
2418
+ create_table_like
2419
+ : CREATE or_replace? TRANSIENT? TABLE if_not_exists? object_name LIKE object_name cluster_by? copy_grants?
2420
+ ;
2421
+
2422
+ create_tag
2423
+ : CREATE or_replace? TAG if_not_exists? object_name tag_allowed_values? comment_clause?
2424
+ ;
2425
+
2426
+ tag_allowed_values
2427
+ : ALLOWED_VALUES string_list
2428
+ ;
2429
+
2430
+ session_parameter
2431
+ : ABORT_DETACHED_QUERY
2432
+ | ALLOW_CLIENT_MFA_CACHING
2433
+ | ALLOW_ID_TOKEN
2434
+ | AUTOCOMMIT
2435
+ | AUTOCOMMIT_API_SUPPORTED
2436
+ | BINARY_INPUT_FORMAT
2437
+ | BINARY_OUTPUT_FORMAT
2438
+ | CLIENT_ENABLE_LOG_INFO_STATEMENT_PARAMETERS
2439
+ | CLIENT_ENCRYPTION_KEY_SIZE
2440
+ | CLIENT_MEMORY_LIMIT
2441
+ | CLIENT_METADATA_REQUEST_USE_CONNECTION_CTX
2442
+ | CLIENT_METADATA_USE_SESSION_DATABASE
2443
+ | CLIENT_PREFETCH_THREADS
2444
+ | CLIENT_RESULT_CHUNK_SIZE
2445
+ | CLIENT_RESULT_COLUMN_CASE_INSENSITIVE
2446
+ | CLIENT_SESSION_KEEP_ALIVE
2447
+ | CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY
2448
+ | CLIENT_TIMESTAMP_TYPE_MAPPING
2449
+ | DATA_RETENTION_TIME_IN_DAYS
2450
+ | DATE_INPUT_FORMAT
2451
+ | DATE_OUTPUT_FORMAT
2452
+ | DEFAULT_DDL_COLLATION_
2453
+ | ENABLE_INTERNAL_STAGES_PRIVATELINK
2454
+ | ENABLE_UNLOAD_PHYSICAL_TYPE_OPTIMIZATION
2455
+ | ENFORCE_SESSION_POLICY
2456
+ | ERROR_ON_NONDETERMINISTIC_MERGE
2457
+ | ERROR_ON_NONDETERMINISTIC_UPDATE
2458
+ | EXTERNAL_OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LIST
2459
+ | GEOGRAPHY_OUTPUT_FORMAT
2460
+ | GEOMETRY_OUTPUT_FORMAT
2461
+ | INITIAL_REPLICATION_SIZE_LIMIT_IN_TB
2462
+ | JDBC_TREAT_DECIMAL_AS_INT
2463
+ | JDBC_TREAT_TIMESTAMP_NTZ_AS_UTC
2464
+ | JDBC_USE_SESSION_TIMEZONE
2465
+ | JSON_INDENT
2466
+ | JS_TREAT_INTEGER_AS_BIGINT
2467
+ | LOCK_TIMEOUT
2468
+ | MAX_CONCURRENCY_LEVEL
2469
+ | MAX_DATA_EXTENSION_TIME_IN_DAYS
2470
+ | MULTI_STATEMENT_COUNT
2471
+ | MIN_DATA_RETENTION_TIME_IN_DAYS
2472
+ | NETWORK_POLICY
2473
+ | SHARE_RESTRICTIONS
2474
+ | PERIODIC_DATA_REKEYING
2475
+ | PIPE_EXECUTION_PAUSED
2476
+ | PREVENT_UNLOAD_TO_INLINE_URL
2477
+ | PREVENT_UNLOAD_TO_INTERNAL_STAGES
2478
+ | QUERY_TAG
2479
+ | QUOTED_IDENTIFIERS_IGNORE_CASE
2480
+ | REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION
2481
+ | REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION
2482
+ | ROWS_PER_RESULTSET
2483
+ | SAML_IDENTITY_PROVIDER
2484
+ | SIMULATED_DATA_SHARING_CONSUMER
2485
+ | SSO_LOGIN_PAGE
2486
+ | STATEMENT_QUEUED_TIMEOUT_IN_SECONDS
2487
+ | STATEMENT_TIMEOUT_IN_SECONDS
2488
+ | STRICT_JSON_OUTPUT
2489
+ | SUSPEND_TASK_AFTER_NUM_FAILURES
2490
+ | TIMESTAMP_DAY_IS_ALWAYS_24H
2491
+ | TIMESTAMP_INPUT_FORMAT
2492
+ | TIMESTAMP_LTZ_OUTPUT_FORMAT
2493
+ | TIMESTAMP_NTZ_OUTPUT_FORMAT
2494
+ | TIMESTAMP_OUTPUT_FORMAT
2495
+ | TIMESTAMP_TYPE_MAPPING
2496
+ | TIMESTAMP_TZ_OUTPUT_FORMAT
2497
+ | TIMEZONE
2498
+ | TIME_INPUT_FORMAT
2499
+ | TIME_OUTPUT_FORMAT
2500
+ | TRANSACTION_ABORT_ON_ERROR
2501
+ | TRANSACTION_DEFAULT_ISOLATION_LEVEL
2502
+ | TWO_DIGIT_CENTURY_START
2503
+ | UNSUPPORTED_DDL_ACTION
2504
+ | USE_CACHED_RESULT
2505
+ | USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE
2506
+ | USER_TASK_TIMEOUT_MS
2507
+ | WEEK_OF_YEAR_POLICY
2508
+ | WEEK_START
2509
+ ;
2510
+
2511
+ session_parameter_list
2512
+ : session_parameter (COMMA session_parameter)*
2513
+ ;
2514
+
2515
+ session_params_list
2516
+ : session_params (COMMA session_params)*
2517
+ ;
2518
+
2519
+ create_task
2520
+ : CREATE or_replace? TASK if_not_exists? object_name task_parameters* comment_clause? copy_grants? (
2521
+ AFTER object_name (COMMA object_name)*
2522
+ )? (WHEN search_condition)? AS sql
2523
+ ;
2524
+
2525
+ task_parameters
2526
+ : task_compute
2527
+ | task_schedule
2528
+ | task_overlap
2529
+ | session_params_list
2530
+ | task_timeout
2531
+ | task_suspend_after_failure_number
2532
+ | task_error_integration
2533
+ ;
2534
+
2535
+ task_compute
2536
+ : WAREHOUSE EQ id_
2537
+ | USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE EQ (
2538
+ wh_common_size
2539
+ | string
2540
+ ) //Snowflake allow quoted warehouse size but must be without quote.
2541
+ ;
2542
+
2543
+ task_schedule
2544
+ : SCHEDULE EQ string
2545
+ ;
2546
+
2547
+ task_timeout
2548
+ : USER_TASK_TIMEOUT_MS EQ num
2549
+ ;
2550
+
2551
+ task_suspend_after_failure_number
2552
+ : SUSPEND_TASK_AFTER_NUM_FAILURES EQ num
2553
+ ;
2554
+
2555
+ task_error_integration
2556
+ : ERROR_INTEGRATION EQ id_
2557
+ ;
2558
+
2559
+ task_overlap
2560
+ : ALLOW_OVERLAPPING_EXECUTION EQ true_false
2561
+ ;
2562
+
2563
+ sql
2564
+ : EXECUTE IMMEDIATE DBL_DOLLAR
2565
+ | sql_command
2566
+ | call
2567
+ ;
2568
+
2569
+ call
2570
+ : CALL object_name '(' expr_list? ')'
2571
+ ;
2572
+
2573
+ create_user
2574
+ : CREATE or_replace? USER if_not_exists? id_ object_properties? object_params? session_params?
2575
+ ;
2576
+
2577
+ view_col
2578
+ : column_name with_masking_policy with_tags
2579
+ ;
2580
+
2581
+ create_view
2582
+ : CREATE or_replace? SECURE? RECURSIVE? VIEW if_not_exists? object_name (
2583
+ LR_BRACKET column_list_with_comment RR_BRACKET
2584
+ )? view_col* with_row_access_policy? with_tags? copy_grants? comment_clause? AS query_statement
2585
+ ;
2586
+
2587
+ create_warehouse
2588
+ : CREATE or_replace? WAREHOUSE if_not_exists? id_fn (WITH? wh_properties+)? wh_params*
2589
+ ;
2590
+
2591
+ wh_common_size
2592
+ : XSMALL
2593
+ | SMALL
2594
+ | MEDIUM
2595
+ | LARGE
2596
+ | XLARGE
2597
+ | XXLARGE
2598
+ ;
2599
+
2600
+ wh_extra_size
2601
+ : XXXLARGE
2602
+ | X4LARGE
2603
+ | X5LARGE
2604
+ | X6LARGE
2605
+ ;
2606
+
2607
+ wh_properties
2608
+ : WAREHOUSE_SIZE EQ (wh_common_size | wh_extra_size | ID2)
2609
+ | WAREHOUSE_TYPE EQ (STANDARD | SNOWPARK_OPTIMIZED)
2610
+ | MAX_CLUSTER_COUNT EQ num
2611
+ | MIN_CLUSTER_COUNT EQ num
2612
+ | SCALING_POLICY EQ (STANDARD | ECONOMY)
2613
+ | AUTO_SUSPEND (EQ num | NULL_)
2614
+ | AUTO_RESUME EQ true_false
2615
+ | INITIALLY_SUSPENDED EQ true_false
2616
+ | RESOURCE_MONITOR EQ id_
2617
+ | comment_clause
2618
+ | ENABLE_QUERY_ACCELERATION EQ true_false
2619
+ | QUERY_ACCELERATION_MAX_SCALE_FACTOR EQ num
2620
+ | MAX_CONCURRENCY_LEVEL EQ num
2621
+ ;
2622
+
2623
+ wh_params
2624
+ : MAX_CONCURRENCY_LEVEL EQ num
2625
+ | STATEMENT_QUEUED_TIMEOUT_IN_SECONDS EQ num
2626
+ | STATEMENT_TIMEOUT_IN_SECONDS EQ num with_tags?
2627
+ ;
2628
+
2629
+ trigger_definition
2630
+ : ON num PERCENT DO (SUSPEND | SUSPEND_IMMEDIATE | NOTIFY)
2631
+ ;
2632
+
2633
+ object_type_name
2634
+ : ROLE
2635
+ | USER
2636
+ | WAREHOUSE
2637
+ | INTEGRATION
2638
+ | NETWORK POLICY
2639
+ | SESSION POLICY
2640
+ | DATABASE
2641
+ | SCHEMA
2642
+ | TABLE
2643
+ | VIEW
2644
+ | STAGE
2645
+ | FILE FORMAT
2646
+ | STREAM
2647
+ | TASK
2648
+ | MASKING POLICY
2649
+ | ROW ACCESS POLICY
2650
+ | TAG
2651
+ | PIPE
2652
+ | FUNCTION
2653
+ | PROCEDURE
2654
+ | SEQUENCE
2655
+ ;
2656
+
2657
+ object_type_plural
2658
+ : ALERTS
2659
+ | DATABASES
2660
+ | INTEGRATIONS
2661
+ | POLICIES
2662
+ | ROLES
2663
+ | SCHEMAS
2664
+ | STAGES
2665
+ | STREAMS
2666
+ | TABLES
2667
+ | TAGS
2668
+ | TASKS
2669
+ | USERS
2670
+ | VIEWS
2671
+ | WAREHOUSES
2672
+ ;
2673
+
2674
+ // drop commands
2675
+ drop_command
2676
+ : drop_object
2677
+ | drop_alert
2678
+ | drop_connection
2679
+ | drop_database
2680
+ | drop_dynamic_table
2681
+ //| drop_event_table //uses DROP TABLE stmt
2682
+ | drop_external_table
2683
+ | drop_failover_group
2684
+ | drop_file_format
2685
+ | drop_function
2686
+ | drop_integration
2687
+ | drop_managed_account
2688
+ | drop_masking_policy
2689
+ | drop_materialized_view
2690
+ | drop_network_policy
2691
+ | drop_password_policy
2692
+ | drop_pipe
2693
+ | drop_procedure
2694
+ | drop_replication_group
2695
+ | drop_resource_monitor
2696
+ | drop_role
2697
+ | drop_row_access_policy
2698
+ | drop_schema
2699
+ | drop_sequence
2700
+ | drop_session_policy
2701
+ | drop_share
2702
+ | drop_stage
2703
+ | drop_stream
2704
+ | drop_table
2705
+ | drop_tag
2706
+ | drop_task
2707
+ | drop_user
2708
+ | drop_view
2709
+ | drop_warehouse
2710
+ ;
2711
+
2712
+ drop_object
2713
+ : DROP object_type if_exists id_ cascade_restrict?
2714
+ ;
2715
+
2716
+ drop_alert
2717
+ : DROP ALERT id_
2718
+ ;
2719
+
2720
+ drop_connection
2721
+ : DROP CONNECTION if_exists? id_
2722
+ ;
2723
+
2724
+ drop_database
2725
+ : DROP DATABASE if_exists? id_ cascade_restrict?
2726
+ ;
2727
+
2728
+ drop_dynamic_table
2729
+ : DROP DYNAMIC TABLE id_
2730
+ ;
2731
+
2732
+ drop_external_table
2733
+ : DROP EXTERNAL TABLE if_exists? object_name cascade_restrict?
2734
+ ;
2735
+
2736
+ drop_failover_group
2737
+ : DROP FAILOVER GROUP if_exists? id_
2738
+ ;
2739
+
2740
+ drop_file_format
2741
+ : DROP FILE FORMAT if_exists? id_
2742
+ ;
2743
+
2744
+ drop_function
2745
+ : DROP FUNCTION if_exists? object_name arg_types
2746
+ ;
2747
+
2748
+ drop_integration
2749
+ : DROP (API | NOTIFICATION | SECURITY | STORAGE)? INTEGRATION if_exists? id_
2750
+ ;
2751
+
2752
+ drop_managed_account
2753
+ : DROP MANAGED ACCOUNT id_
2754
+ ;
2755
+
2756
+ drop_masking_policy
2757
+ : DROP MASKING POLICY id_
2758
+ ;
2759
+
2760
+ drop_materialized_view
2761
+ : DROP MATERIALIZED VIEW if_exists? object_name
2762
+ ;
2763
+
2764
+ drop_network_policy
2765
+ : DROP NETWORK POLICY if_exists? id_
2766
+ ;
2767
+
2768
+ drop_pipe
2769
+ : DROP PIPE if_exists? object_name
2770
+ ;
2771
+
2772
+ drop_procedure
2773
+ : DROP PROCEDURE if_exists? object_name arg_types
2774
+ ;
2775
+
2776
+ drop_replication_group
2777
+ : DROP REPLICATION GROUP if_exists? id_
2778
+ ;
2779
+
2780
+ drop_resource_monitor
2781
+ : DROP RESOURCE MONITOR id_
2782
+ ;
2783
+
2784
+ drop_role
2785
+ : DROP ROLE if_exists? id_
2786
+ ;
2787
+
2788
+ drop_row_access_policy
2789
+ : DROP ROW ACCESS POLICY if_exists? id_
2790
+ ;
2791
+
2792
+ drop_schema
2793
+ : DROP SCHEMA if_exists? schema_name cascade_restrict?
2794
+ ;
2795
+
2796
+ drop_sequence
2797
+ : DROP SEQUENCE if_exists? object_name cascade_restrict?
2798
+ ;
2799
+
2800
+ drop_session_policy
2801
+ : DROP SESSION POLICY if_exists? object_name
2802
+ ;
2803
+
2804
+ drop_password_policy
2805
+ : DROP PASSWORD POLICY if_exists? object_name
2806
+ ;
2807
+
2808
+ drop_share
2809
+ : DROP SHARE id_
2810
+ ;
2811
+
2812
+ drop_stream
2813
+ : DROP STREAM if_exists? object_name
2814
+ ;
2815
+
2816
+ drop_table
2817
+ : DROP TABLE if_exists? object_name cascade_restrict?
2818
+ ;
2819
+
2820
+ drop_tag
2821
+ : DROP TAG if_exists? object_name
2822
+ ;
2823
+
2824
+ drop_task
2825
+ : DROP TASK if_exists? object_name
2826
+ ;
2827
+
2828
+ drop_user
2829
+ : DROP USER if_exists? id_
2830
+ ;
2831
+
2832
+ drop_view
2833
+ : DROP VIEW if_exists? object_name
2834
+ ;
2835
+
2836
+ drop_warehouse
2837
+ : DROP WAREHOUSE if_exists? id_fn
2838
+ ;
2839
+
2840
+ cascade_restrict
2841
+ : CASCADE
2842
+ | RESTRICT
2843
+ ;
2844
+
2845
+ arg_types
2846
+ : LR_BRACKET data_type_list? RR_BRACKET
2847
+ ;
2848
+
2849
+ // undrop commands
2850
+ undrop_command
2851
+ //: undrop_object
2852
+ : undrop_database
2853
+ | undrop_schema
2854
+ | undrop_table
2855
+ | undrop_tag
2856
+ ;
2857
+
2858
+ undrop_database
2859
+ : UNDROP DATABASE id_
2860
+ ;
2861
+
2862
+ undrop_schema
2863
+ : UNDROP SCHEMA schema_name
2864
+ ;
2865
+
2866
+ undrop_table
2867
+ : UNDROP TABLE object_name
2868
+ ;
2869
+
2870
+ undrop_tag
2871
+ : UNDROP TAG object_name
2872
+ ;
2873
+
2874
+ // use commands
2875
+ use_command
2876
+ : use_database
2877
+ | use_role
2878
+ | use_schema
2879
+ | use_secondary_roles
2880
+ | use_warehouse
2881
+ ;
2882
+
2883
+ use_database
2884
+ : USE DATABASE id_
2885
+ ;
2886
+
2887
+ use_role
2888
+ : USE ROLE id_
2889
+ ;
2890
+
2891
+ use_schema
2892
+ : USE SCHEMA? (id_ DOT)? id_
2893
+ ;
2894
+
2895
+ use_secondary_roles
2896
+ : USE SECONDARY ROLES (ALL | NONE)
2897
+ ;
2898
+
2899
+ use_warehouse
2900
+ : USE WAREHOUSE id_fn
2901
+ ;
2902
+
2903
+ /* */
2904
+ comment_clause
2905
+ : COMMENT EQ string
2906
+ ;
2907
+
2908
+ if_suspended
2909
+ : IF SUSPENDED
2910
+ ;
2911
+
2912
+ if_exists
2913
+ : IF EXISTS
2914
+ ;
2915
+
2916
+ if_not_exists
2917
+ : IF NOT EXISTS
2918
+ ;
2919
+
2920
+ or_replace
2921
+ : OR REPLACE
2922
+ ;
2923
+
2924
+ describe
2925
+ : DESC
2926
+ | DESCRIBE
2927
+ ;
2928
+
2929
+ // describe command
2930
+ describe_command
2931
+ : describe_alert
2932
+ | describe_database
2933
+ | describe_dynamic_table
2934
+ | describe_event_table
2935
+ | describe_external_table
2936
+ | describe_file_format
2937
+ | describe_function
2938
+ | describe_integration
2939
+ | describe_masking_policy
2940
+ | describe_materialized_view
2941
+ | describe_network_policy
2942
+ | describe_password_policy
2943
+ | describe_pipe
2944
+ | describe_procedure
2945
+ | describe_result
2946
+ | describe_row_access_policy
2947
+ | describe_schema
2948
+ | describe_search_optimization
2949
+ | describe_sequence
2950
+ | describe_session_policy
2951
+ | describe_share
2952
+ | describe_stage
2953
+ | describe_stream
2954
+ | describe_table
2955
+ | describe_task
2956
+ | describe_transaction
2957
+ | describe_user
2958
+ | describe_view
2959
+ | describe_warehouse
2960
+ ;
2961
+
2962
+ describe_alert
2963
+ : describe ALERT id_
2964
+ ;
2965
+
2966
+ describe_database
2967
+ : describe DATABASE id_
2968
+ ;
2969
+
2970
+ describe_dynamic_table
2971
+ : describe DYNAMIC TABLE id_
2972
+ ;
2973
+
2974
+ describe_event_table
2975
+ : describe EVENT TABLE id_
2976
+ ;
2977
+
2978
+ describe_external_table
2979
+ : describe EXTERNAL? TABLE object_name (TYPE EQ (COLUMNS | STAGE))?
2980
+ ;
2981
+
2982
+ describe_file_format
2983
+ : describe FILE FORMAT id_
2984
+ ;
2985
+
2986
+ describe_function
2987
+ : describe FUNCTION object_name arg_types
2988
+ ;
2989
+
2990
+ describe_integration
2991
+ : describe (API | NOTIFICATION | SECURITY | STORAGE)? INTEGRATION id_
2992
+ ;
2993
+
2994
+ describe_masking_policy
2995
+ : describe MASKING POLICY id_
2996
+ ;
2997
+
2998
+ describe_materialized_view
2999
+ : describe MATERIALIZED VIEW object_name
3000
+ ;
3001
+
3002
+ describe_network_policy
3003
+ : describe NETWORK POLICY id_
3004
+ ;
3005
+
3006
+ describe_pipe
3007
+ : describe PIPE object_name
3008
+ ;
3009
+
3010
+ describe_procedure
3011
+ : describe PROCEDURE object_name arg_types
3012
+ ;
3013
+
3014
+ describe_result
3015
+ : describe RESULT (STRING | LAST_QUERY_ID LR_BRACKET RR_BRACKET)
3016
+ ;
3017
+
3018
+ describe_row_access_policy
3019
+ : describe ROW ACCESS POLICY id_
3020
+ ;
3021
+
3022
+ describe_schema
3023
+ : describe SCHEMA schema_name
3024
+ ;
3025
+
3026
+ describe_search_optimization
3027
+ : describe SEARCH OPTIMIZATION ON object_name
3028
+ ;
3029
+
3030
+ describe_sequence
3031
+ : describe SEQUENCE object_name
3032
+ ;
3033
+
3034
+ describe_session_policy
3035
+ : describe SESSION POLICY object_name
3036
+ ;
3037
+
3038
+ describe_password_policy
3039
+ : describe PASSWORD POLICY object_name
3040
+ ;
3041
+
3042
+ describe_share
3043
+ : describe SHARE id_
3044
+ ;
3045
+
3046
+ describe_stream
3047
+ : describe STREAM object_name
3048
+ ;
3049
+
3050
+ describe_table
3051
+ : describe TABLE object_name (TYPE EQ (COLUMNS | STAGE))?
3052
+ ;
3053
+
3054
+ describe_task
3055
+ : describe TASK object_name
3056
+ ;
3057
+
3058
+ describe_transaction
3059
+ : describe TRANSACTION num
3060
+ ;
3061
+
3062
+ describe_user
3063
+ : describe USER id_
3064
+ ;
3065
+
3066
+ describe_view
3067
+ : describe VIEW object_name
3068
+ ;
3069
+
3070
+ describe_warehouse
3071
+ : describe WAREHOUSE id_
3072
+ ;
3073
+
3074
+ // show commands
3075
+ show_command
3076
+ : show_alerts
3077
+ | show_channels
3078
+ | show_columns
3079
+ | show_connections
3080
+ | show_databases
3081
+ | show_databases_in_failover_group
3082
+ | show_databases_in_replication_group
3083
+ | show_delegated_authorizations
3084
+ | show_dynamic_tables
3085
+ | show_event_tables
3086
+ | show_external_functions
3087
+ | show_external_tables
3088
+ | show_failover_groups
3089
+ | show_file_formats
3090
+ | show_functions
3091
+ | show_global_accounts
3092
+ | show_grants
3093
+ | show_integrations
3094
+ | show_locks
3095
+ | show_managed_accounts
3096
+ | show_masking_policies
3097
+ | show_materialized_views
3098
+ | show_network_policies
3099
+ | show_objects
3100
+ | show_organization_accounts
3101
+ | show_parameters
3102
+ | show_password_policies
3103
+ | show_pipes
3104
+ | show_primary_keys
3105
+ | show_procedures
3106
+ | show_regions
3107
+ | show_replication_accounts
3108
+ | show_replication_databases
3109
+ | show_replication_groups
3110
+ | show_resource_monitors
3111
+ | show_roles
3112
+ | show_row_access_policies
3113
+ | show_schemas
3114
+ | show_sequences
3115
+ | show_session_policies
3116
+ | show_shares
3117
+ | show_shares_in_failover_group
3118
+ | show_shares_in_replication_group
3119
+ | show_stages
3120
+ | show_streams
3121
+ | show_tables
3122
+ | show_tags
3123
+ | show_tasks
3124
+ | show_transactions
3125
+ | show_user_functions
3126
+ | show_users
3127
+ | show_variables
3128
+ | show_views
3129
+ | show_warehouses
3130
+ ;
3131
+
3132
+ show_alerts
3133
+ : SHOW TERSE? ALERTS like_pattern? (IN ( ACCOUNT | DATABASE id_? | SCHEMA schema_name?))? starts_with? limit_rows?
3134
+ ;
3135
+
3136
+ show_channels
3137
+ : SHOW CHANNELS like_pattern? (
3138
+ IN (ACCOUNT | DATABASE id_? | SCHEMA schema_name? | TABLE | TABLE? object_name)
3139
+ )?
3140
+ ;
3141
+
3142
+ show_columns
3143
+ : SHOW COLUMNS like_pattern? (
3144
+ IN (
3145
+ ACCOUNT
3146
+ | DATABASE id_?
3147
+ | SCHEMA schema_name?
3148
+ | TABLE
3149
+ | TABLE? object_name
3150
+ | VIEW
3151
+ | VIEW? object_name
3152
+ )
3153
+ )?
3154
+ ;
3155
+
3156
+ show_connections
3157
+ : SHOW CONNECTIONS like_pattern?
3158
+ ;
3159
+
3160
+ starts_with
3161
+ : STARTS WITH string
3162
+ ;
3163
+
3164
+ limit_rows
3165
+ : LIMIT num (FROM string)?
3166
+ ;
3167
+
3168
+ show_databases
3169
+ : SHOW TERSE? DATABASES HISTORY? like_pattern? starts_with? limit_rows?
3170
+ ;
3171
+
3172
+ show_databases_in_failover_group
3173
+ : SHOW DATABASES IN FAILOVER GROUP id_
3174
+ ;
3175
+
3176
+ show_databases_in_replication_group
3177
+ : SHOW DATABASES IN REPLICATION GROUP id_
3178
+ ;
3179
+
3180
+ show_delegated_authorizations
3181
+ : SHOW DELEGATED AUTHORIZATIONS
3182
+ | SHOW DELEGATED AUTHORIZATIONS BY USER id_
3183
+ | SHOW DELEGATED AUTHORIZATIONS TO SECURITY INTEGRATION id_
3184
+ ;
3185
+
3186
+ show_dynamic_tables
3187
+ : SHOW DYNAMIC TABLES like_pattern? (IN ( ACCOUNT | DATABASE id_? | SCHEMA? schema_name?))? starts_with? limit_rows?
3188
+ ;
3189
+
3190
+ show_event_tables
3191
+ : SHOW TERSE? EVENT TABLES like_pattern? (IN ( ACCOUNT | DATABASE id_? | SCHEMA? schema_name?))? starts_with? limit_rows?
3192
+ ;
3193
+
3194
+ show_external_functions
3195
+ : SHOW EXTERNAL FUNCTIONS like_pattern?
3196
+ ;
3197
+
3198
+ show_external_tables
3199
+ : SHOW TERSE? EXTERNAL TABLES like_pattern? (
3200
+ IN ( ACCOUNT | DATABASE id_? | SCHEMA? schema_name?)
3201
+ )? starts_with? limit_rows?
3202
+ ;
3203
+
3204
+ show_failover_groups
3205
+ : SHOW FAILOVER GROUPS (IN ACCOUNT id_)?
3206
+ ;
3207
+
3208
+ show_file_formats
3209
+ : SHOW FILE FORMATS like_pattern? (
3210
+ IN (ACCOUNT | DATABASE | DATABASE id_ | SCHEMA | SCHEMA schema_name | schema_name)
3211
+ )?
3212
+ ;
3213
+
3214
+ show_functions
3215
+ : SHOW FUNCTIONS like_pattern? (
3216
+ IN ( ACCOUNT | DATABASE | DATABASE id_ | SCHEMA | SCHEMA id_ | id_)
3217
+ )?
3218
+ ;
3219
+
3220
+ show_global_accounts
3221
+ : SHOW GLOBAL ACCOUNTS like_pattern?
3222
+ ;
3223
+
3224
+ show_grants
3225
+ : SHOW GRANTS show_grants_opts?
3226
+ | SHOW FUTURE GRANTS IN SCHEMA schema_name
3227
+ | SHOW FUTURE GRANTS IN DATABASE id_
3228
+ ;
3229
+
3230
+ show_grants_opts
3231
+ : ON ACCOUNT
3232
+ | ON object_type object_name
3233
+ | TO (ROLE id_ | USER id_ | SHARE id_)
3234
+ | OF ROLE id_
3235
+ | OF SHARE id_
3236
+ ;
3237
+
3238
+ show_integrations
3239
+ : SHOW (API | NOTIFICATION | SECURITY | STORAGE)? INTEGRATIONS like_pattern?
3240
+ ;
3241
+
3242
+ show_locks
3243
+ : SHOW LOCKS (IN ACCOUNT)?
3244
+ ;
3245
+
3246
+ show_managed_accounts
3247
+ : SHOW MANAGED ACCOUNTS like_pattern?
3248
+ ;
3249
+
3250
+ show_masking_policies
3251
+ : SHOW MASKING POLICIES like_pattern? in_obj?
3252
+ ;
3253
+
3254
+ in_obj
3255
+ : IN (ACCOUNT | DATABASE | DATABASE id_ | SCHEMA | SCHEMA schema_name | schema_name)
3256
+ ;
3257
+
3258
+ in_obj_2
3259
+ : IN (ACCOUNT | DATABASE id_? | SCHEMA schema_name? | TABLE | TABLE object_name)
3260
+ ;
3261
+
3262
+ show_materialized_views
3263
+ : SHOW MATERIALIZED VIEWS like_pattern? in_obj?
3264
+ ;
3265
+
3266
+ show_network_policies
3267
+ : SHOW NETWORK POLICIES
3268
+ ;
3269
+
3270
+ show_objects
3271
+ : SHOW OBJECTS like_pattern? in_obj?
3272
+ ;
3273
+
3274
+ show_organization_accounts
3275
+ : SHOW ORGANIZATION ACCOUNTS like_pattern?
3276
+ ;
3277
+
3278
+ in_for
3279
+ : IN
3280
+ | FOR
3281
+ ;
3282
+
3283
+ show_parameters
3284
+ : SHOW PARAMETERS like_pattern? (
3285
+ in_for (
3286
+ SESSION
3287
+ | ACCOUNT
3288
+ | USER id_?
3289
+ | ( WAREHOUSE | DATABASE | SCHEMA | TASK) id_?
3290
+ | TABLE object_name
3291
+ )
3292
+ )?
3293
+ ;
3294
+
3295
+ show_pipes
3296
+ : SHOW PIPES like_pattern? in_obj?
3297
+ ;
3298
+
3299
+ show_primary_keys
3300
+ : SHOW TERSE? PRIMARY KEYS in_obj_2?
3301
+ ;
3302
+
3303
+ show_procedures
3304
+ : SHOW PROCEDURES like_pattern? in_obj?
3305
+ ;
3306
+
3307
+ show_regions
3308
+ : SHOW REGIONS like_pattern?
3309
+ ;
3310
+
3311
+ show_replication_accounts
3312
+ : SHOW REPLICATION ACCOUNTS like_pattern?
3313
+ ;
3314
+
3315
+ show_replication_databases
3316
+ : SHOW REPLICATION DATABASES like_pattern? (WITH PRIMARY account_identifier DOT id_)?
3317
+ ;
3318
+
3319
+ show_replication_groups
3320
+ : SHOW REPLICATION GROUPS (IN ACCOUNT id_)?
3321
+ ;
3322
+
3323
+ show_resource_monitors
3324
+ : SHOW RESOURCE MONITORS like_pattern?
3325
+ ;
3326
+
3327
+ show_roles
3328
+ : SHOW ROLES like_pattern?
3329
+ ;
3330
+
3331
+ show_row_access_policies
3332
+ : SHOW ROW ACCESS POLICIES like_pattern? in_obj?
3333
+ ;
3334
+
3335
+ show_schemas
3336
+ : SHOW TERSE? SCHEMAS HISTORY? like_pattern? (IN ( ACCOUNT | DATABASE id_?))? starts_with? limit_rows?
3337
+ ;
3338
+
3339
+ show_sequences
3340
+ : SHOW SEQUENCES like_pattern? in_obj?
3341
+ ;
3342
+
3343
+ show_session_policies
3344
+ : SHOW SESSION POLICIES
3345
+ ;
3346
+
3347
+ show_password_policies
3348
+ : SHOW PASSWORD POLICIES
3349
+ ;
3350
+
3351
+ show_shares
3352
+ : SHOW SHARES like_pattern?
3353
+ ;
3354
+
3355
+ show_shares_in_failover_group
3356
+ : SHOW SHARES IN FAILOVER GROUP id_
3357
+ ;
3358
+
3359
+ show_shares_in_replication_group
3360
+ : SHOW SHARES IN REPLICATION GROUP id_
3361
+ ;
3362
+
3363
+ show_streams
3364
+ : SHOW STREAMS like_pattern? in_obj?
3365
+ ;
3366
+
3367
+ show_tables
3368
+ : SHOW TABLES like_pattern? in_obj?
3369
+ ;
3370
+
3371
+ show_tags
3372
+ : SHOW TAGS like_pattern? (
3373
+ IN ACCOUNT
3374
+ | DATABASE
3375
+ | DATABASE id_
3376
+ | SCHEMA
3377
+ | SCHEMA schema_name
3378
+ | schema_name
3379
+ )?
3380
+ ;
3381
+
3382
+ show_tasks
3383
+ : SHOW TERSE? TASKS like_pattern? (IN ( ACCOUNT | DATABASE id_? | SCHEMA? schema_name?))? starts_with? limit_rows?
3384
+ ;
3385
+
3386
+ show_transactions
3387
+ : SHOW TRANSACTIONS (IN ACCOUNT)?
3388
+ ;
3389
+
3390
+ show_user_functions
3391
+ : SHOW USER FUNCTIONS like_pattern? in_obj?
3392
+ ;
3393
+
3394
+ show_users
3395
+ : SHOW TERSE? USERS like_pattern? (STARTS WITH string)? (LIMIT num)? (FROM string)?
3396
+ ;
3397
+
3398
+ show_variables
3399
+ : SHOW VARIABLES like_pattern?
3400
+ ;
3401
+
3402
+ show_views
3403
+ : SHOW TERSE? VIEWS like_pattern? (IN ( ACCOUNT | DATABASE id_? | SCHEMA? schema_name?))? starts_with? limit_rows?
3404
+ ;
3405
+
3406
+ show_warehouses
3407
+ : SHOW WAREHOUSES like_pattern?
3408
+ ;
3409
+
3410
+ like_pattern
3411
+ : LIKE string
3412
+ ;
3413
+
3414
+ //names
3415
+ account_identifier
3416
+ : id_
3417
+ ;
3418
+
3419
+ schema_name
3420
+ : d = id_ DOT s = id_
3421
+ | s = id_
3422
+ ;
3423
+
3424
+ object_type
3425
+ : ACCOUNT PARAMETERS
3426
+ | DATABASES
3427
+ | INTEGRATIONS
3428
+ | NETWORK POLICIES
3429
+ | RESOURCE MONITORS
3430
+ | ROLES
3431
+ | SHARES
3432
+ | USERS
3433
+ | WAREHOUSES
3434
+ ;
3435
+
3436
+ object_type_list
3437
+ : object_type (COMMA object_type)*
3438
+ ;
3439
+
3440
+ tag_value
3441
+ : string
3442
+ ;
3443
+
3444
+ arg_data_type
3445
+ : id_
3446
+ ;
3447
+
3448
+ arg_name
3449
+ : id_
3450
+ ;
3451
+
3452
+ param_name
3453
+ : id_
3454
+ ;
3455
+
3456
+ region_group_id
3457
+ : id_
3458
+ ;
3459
+
3460
+ snowflake_region_id
3461
+ : id_
3462
+ ;
3463
+
3464
+ string
3465
+ : STRING
3466
+ ;
3467
+
3468
+ string_list
3469
+ : string (COMMA string)*
3470
+ ;
3471
+
3472
+ id_fn
3473
+ : id_
3474
+ | IDENTIFIER '(' id_ ')'
3475
+ ;
3476
+
3477
+ id_
3478
+ //id_ is used for object name. Snowflake is very permissive
3479
+ //so we could use nearly all keyword as object name (table, column etc..)
3480
+ : ID
3481
+ | ID2
3482
+ | DOUBLE_QUOTE_ID
3483
+ | DOUBLE_QUOTE_BLANK
3484
+ | keyword
3485
+ | non_reserved_words
3486
+ | object_type_plural
3487
+ | data_type
3488
+ | builtin_function
3489
+ | unary_or_binary_builtin_function
3490
+ | binary_builtin_function
3491
+ | binary_or_ternary_builtin_function
3492
+ | ternary_builtin_function
3493
+ ;
3494
+
3495
+ keyword
3496
+ //List here keyword (SnowSQL meaning) allowed as object name
3497
+ // Name of builtin function should be included in specifique section (ie builtin_function)
3498
+ // please add in alphabetic order for easy reading
3499
+ : ACCOUNT
3500
+ | ALERT
3501
+ | ACTION
3502
+ | AT_KEYWORD
3503
+ | CLUSTER
3504
+ | COMMENT
3505
+ | CONDITION
3506
+ | COPY_OPTIONS_
3507
+ | DIRECTION
3508
+ | EMAIL
3509
+ | FIRST_VALUE
3510
+ | FLATTEN
3511
+ | FUNCTION
3512
+ | IF
3513
+ | JOIN
3514
+ | KEY
3515
+ | LANGUAGE
3516
+ | LENGTH
3517
+ | MAX_CONCURRENCY_LEVEL
3518
+ | MODE
3519
+ | NOORDER
3520
+ | ORDER
3521
+ | OUTER
3522
+ | POLICY
3523
+ | RECURSIVE
3524
+ | REGION
3525
+ | ROLE
3526
+ | ROLLUP
3527
+ | ROW_NUMBER
3528
+ | SEQUENCE
3529
+ | SESSION
3530
+ | STAGE
3531
+ | TAG
3532
+ | TARGET_LAG
3533
+ | TEMP
3534
+ | TYPE
3535
+ | USER
3536
+ | VALUE
3537
+ | VALUES
3538
+ | WAREHOUSE
3539
+ | WAREHOUSE_TYPE
3540
+ // etc
3541
+ ;
3542
+
3543
+ non_reserved_words
3544
+ //List here lexer token referenced by rules which is not a keyword (SnowSQL Meaning) and allowed has object name
3545
+ // please add in alphabetic order for easy reading
3546
+ : ACCOUNTADMIN
3547
+ | AES
3548
+ | ARRAY_AGG
3549
+ | CHECKSUM
3550
+ | COLLECTION
3551
+ | CONFIGURATION
3552
+ | DATA
3553
+ | DEFINITION
3554
+ | DELTA
3555
+ | DOWNSTREAM
3556
+ | DYNAMIC
3557
+ | EDITION
3558
+ | EMAIL
3559
+ | EVENT
3560
+ | EXPIRY_DATE
3561
+ | EXPR
3562
+ | FIRST_NAME
3563
+ | FIRST_VALUE
3564
+ | GLOBAL
3565
+ | IDENTIFIER
3566
+ | IDENTITY
3567
+ | INDEX
3568
+ | INPUT
3569
+ | INTERVAL
3570
+ | JAVASCRIPT
3571
+ | LAST_NAME
3572
+ | LAST_QUERY_ID
3573
+ | LEAD
3574
+ | LOCAL
3575
+ | NAME
3576
+ | NETWORK
3577
+ | OFFSET
3578
+ | ONE
3579
+ | OPTION
3580
+ | ORGADMIN
3581
+ | OUTBOUND
3582
+ | PARTITION
3583
+ | PASSWORD
3584
+ | PASSWORD_HISTORY
3585
+ | PASSWORD_LOCKOUT_TIME_MINS
3586
+ | PASSWORD_MAX_AGE_DAYS
3587
+ | PASSWORD_MAX_LENGTH
3588
+ | PASSWORD_MAX_RETRIES
3589
+ | PASSWORD_MIN_AGE_DAYS
3590
+ | PASSWORD_MIN_LENGTH
3591
+ | PASSWORD_MIN_LOWER_CASE_CHARS
3592
+ | PASSWORD_MIN_NUMERIC_CHARS
3593
+ | PASSWORD_MIN_SPECIAL_CHARS
3594
+ | PASSWORD_MIN_UPPER_CASE_CHARS
3595
+ | PATH_
3596
+ | PATTERN
3597
+ | PORT
3598
+ | PROCEDURE_NAME
3599
+ | PROPERTY
3600
+ | PROVIDER
3601
+ | PUBLIC
3602
+ | RANK
3603
+ | RESOURCE
3604
+ | RESOURCES
3605
+ | RESPECT
3606
+ | RESTRICT
3607
+ | RESULT
3608
+ | ROUNDING_MODE
3609
+ | SCALE
3610
+ | SECURITYADMIN
3611
+ | SOURCE
3612
+ | STATE
3613
+ | STATS
3614
+ | SYSADMIN
3615
+ | TIMEZONE
3616
+ | URL
3617
+ | USERADMIN
3618
+ | VALUE
3619
+ | VALUES
3620
+ | VERSION
3621
+ | WAREHOUSE_TYPE
3622
+ ;
3623
+
3624
+ builtin_function
3625
+ // If there is a lexer entry for a function we also need to add the token here
3626
+ // as it otherwise will not be picked up by the id_ rule (See also derived rule below)
3627
+ : SUM
3628
+ | AVG
3629
+ | MIN
3630
+ | COUNT
3631
+ | CURRENT_TIMESTAMP
3632
+ | CURRENT_DATE
3633
+ | UPPER
3634
+ | LOWER
3635
+ | TO_BOOLEAN
3636
+ | IDENTIFIER
3637
+ | FLATTEN
3638
+ | SPLIT_TO_TABLE
3639
+ | CAST
3640
+ | TRY_CAST
3641
+ | ANY_VALUE
3642
+ | GETDATE
3643
+ ;
3644
+
3645
+ //TODO : Split builtin between NoParam func,special_builtin_func (like CAST), unary_builtin_function and unary_or_binary_builtin_function for better AST
3646
+ unary_or_binary_builtin_function
3647
+ // lexer entry of function name which admit 1, 2 or more parameters
3648
+ // expr rule use this
3649
+ : FLOOR
3650
+ | TRUNCATE
3651
+ | TRUNC
3652
+ | CEIL
3653
+ | ROUND
3654
+ ;
3655
+
3656
+ binary_builtin_function
3657
+ // lexer entry of function name which admit 2 parameters
3658
+ // expr rule use this
3659
+ : ifnull = (IFNULL | NVL)
3660
+ | GET
3661
+ | LEFT
3662
+ | RIGHT
3663
+ | DATE_PART
3664
+ | to_date = (TO_DATE | DATE)
3665
+ | SPLIT
3666
+ | NULLIF
3667
+ | EQUAL_NULL
3668
+ | CONTAINS
3669
+ | COLLATE
3670
+ | TO_TIMESTAMP
3671
+ ;
3672
+
3673
+ binary_or_ternary_builtin_function
3674
+ // lexer entry of function name which admit 2 or 3 parameters
3675
+ // expr rule use this
3676
+ : CHARINDEX
3677
+ | REPLACE
3678
+ | substring = ( SUBSTRING | SUBSTR)
3679
+ | LIKE
3680
+ | ILIKE
3681
+ ;
3682
+
3683
+ ternary_builtin_function
3684
+ // lexer entry of function name which admit 3 parameters
3685
+ // expr rule use this
3686
+ : dateadd = (DATEADD | TIMEADD | TIMESTAMPADD)
3687
+ | datefiff = (DATEDIFF | TIMEDIFF | TIMESTAMPDIFF)
3688
+ | SPLIT_PART
3689
+ | NVL2
3690
+ | IFF
3691
+ ;
3692
+
3693
+ list_function
3694
+ // lexer entry of function name which admit a list of comma separated expr
3695
+ // expr rule use this
3696
+ : CONCAT
3697
+ | CONCAT_WS
3698
+ | COALESCE
3699
+ | HASH
3700
+ // To complete as needed
3701
+ ;
3702
+
3703
+ pattern
3704
+ : PATTERN EQ string
3705
+ ;
3706
+
3707
+ //pattern_assoc
3708
+ // : PATTERN ASSOC string
3709
+ // ;
3710
+
3711
+ column_name
3712
+ : (id_ '.')? id_
3713
+ ;
3714
+
3715
+ column_list
3716
+ : column_name (COMMA column_name)*
3717
+ ;
3718
+
3719
+ column_list_with_comment
3720
+ : column_name (COMMENT string)? (COMMA column_name (COMMENT string)?)*
3721
+ ;
3722
+
3723
+ object_name
3724
+ : d = id_ DOT s = id_ DOT o = id_
3725
+ | s = id_ DOT o = id_
3726
+ | o = id_
3727
+ ;
3728
+
3729
+ object_name_or_identifier
3730
+ : object_name
3731
+ | IDENTIFIER LR_BRACKET string RR_BRACKET
3732
+ ;
3733
+
3734
+ num
3735
+ : DECIMAL
3736
+ ;
3737
+
3738
+ /*** expressions ***/
3739
+ expr_list
3740
+ : expr (COMMA expr)*
3741
+ ;
3742
+
3743
+ expr_list_sorted
3744
+ : expr asc_desc? (COMMA expr asc_desc?)*
3745
+ ;
3746
+
3747
+ expr
3748
+ : object_name DOT NEXTVAL
3749
+ | expr LSB expr RSB //array access
3750
+ | expr COLON expr //json access
3751
+ | expr DOT (VALUE | expr)
3752
+ | expr COLLATE string
3753
+ | case_expression
3754
+ | iff_expr
3755
+ | bracket_expression
3756
+ | op = ( PLUS | MINUS) expr
3757
+ | expr op = (STAR | DIVIDE | MODULE) expr
3758
+ | expr op = (PLUS | MINUS | PIPE_PIPE) expr
3759
+ | expr comparison_operator expr
3760
+ | op = NOT+ expr
3761
+ | expr AND expr //bool operation
3762
+ | expr OR expr //bool operation
3763
+ | arr_literal
3764
+ // | expr time_zone
3765
+ | expr over_clause
3766
+ | cast_expr
3767
+ | expr COLON_COLON data_type // Cast also
3768
+ | try_cast_expr
3769
+ | json_literal
3770
+ | trim_expression
3771
+ | function_call
3772
+ | subquery
3773
+ | expr IS null_not_null
3774
+ | expr NOT? IN LR_BRACKET (subquery | expr_list) RR_BRACKET
3775
+ | expr NOT? ( LIKE | ILIKE) expr (ESCAPE expr)?
3776
+ | expr NOT? RLIKE expr
3777
+ | expr NOT? (LIKE | ILIKE) ANY LR_BRACKET expr (COMMA expr)* RR_BRACKET (ESCAPE expr)?
3778
+ | primitive_expression //Should be latest rule as it's nearly a catch all
3779
+ ;
3780
+
3781
+ iff_expr
3782
+ : IFF '(' search_condition ',' expr ',' expr ')'
3783
+ ;
3784
+
3785
+ trim_expression
3786
+ : (TRIM | LTRIM | RTRIM) LR_BRACKET expr (COMMA string)* RR_BRACKET
3787
+ ;
3788
+
3789
+ try_cast_expr
3790
+ : TRY_CAST LR_BRACKET expr AS data_type RR_BRACKET
3791
+ ;
3792
+
3793
+ cast_expr
3794
+ : CAST LR_BRACKET expr AS data_type RR_BRACKET
3795
+ | (TIMESTAMP | DATE | TIME | INTERVAL) expr
3796
+ ;
3797
+
3798
+ json_literal
3799
+ : LCB kv_pair (COMMA kv_pair)* RCB
3800
+ | LCB RCB
3801
+ ;
3802
+
3803
+ kv_pair
3804
+ : key = STRING COLON value
3805
+ ;
3806
+
3807
+ value
3808
+ : expr
3809
+ ;
3810
+
3811
+ arr_literal
3812
+ : LSB value (',' value)* RSB
3813
+ | LSB RSB
3814
+ ;
3815
+
3816
+ data_type_size
3817
+ : LR_BRACKET num RR_BRACKET
3818
+ ;
3819
+
3820
+ data_type
3821
+ : int_alias = (INT | INTEGER | SMALLINT | TINYINT | BYTEINT | BIGINT)
3822
+ | number_alias = (NUMBER | NUMERIC | DECIMAL_) (LR_BRACKET num (COMMA num)? RR_BRACKET)?
3823
+ | float_alias = (FLOAT_ | FLOAT4 | FLOAT8 | DOUBLE | DOUBLE_PRECISION | REAL_)
3824
+ | BOOLEAN
3825
+ | DATE
3826
+ | DATETIME data_type_size?
3827
+ | TIME data_type_size?
3828
+ | TIMESTAMP data_type_size?
3829
+ | TIMESTAMP_LTZ data_type_size?
3830
+ | TIMESTAMP_NTZ data_type_size?
3831
+ | TIMESTAMP_TZ data_type_size?
3832
+ | char_alias = ( CHAR | NCHAR | CHARACTER) data_type_size?
3833
+ | varchar_alias = (
3834
+ CHAR_VARYING
3835
+ | NCHAR_VARYING
3836
+ | NVARCHAR2
3837
+ | NVARCHAR
3838
+ | STRING_
3839
+ | TEXT
3840
+ | VARCHAR
3841
+ ) data_type_size?
3842
+ | binary_alias = ( BINARY | VARBINARY) data_type_size?
3843
+ | VARIANT
3844
+ | OBJECT
3845
+ | ARRAY
3846
+ | GEOGRAPHY
3847
+ | GEOMETRY
3848
+ ;
3849
+
3850
+ primitive_expression
3851
+ : DEFAULT //?
3852
+ | NULL_
3853
+ | id_ ('.' id_)* // json field access
3854
+ | full_column_name
3855
+ | literal
3856
+ | BOTH_Q
3857
+ | ARRAY_Q
3858
+ | OBJECT_Q
3859
+ //| json_literal
3860
+ //| arr_literal
3861
+ ;
3862
+
3863
+ order_by_expr
3864
+ : ORDER BY expr_list_sorted
3865
+ ;
3866
+
3867
+ //order_by_expr_list
3868
+ // : ORDER BY expr_list
3869
+ // ;
3870
+
3871
+ //over_clause_window
3872
+ // : OVER '(' partition_by? order_by_expr (cumulative_frame | sliding_frame)? ')'
3873
+ // ;
3874
+
3875
+ asc_desc
3876
+ : ASC
3877
+ | DESC
3878
+ ;
3879
+
3880
+ over_clause
3881
+ : OVER '(' partition_by order_by_expr? ')'
3882
+ | OVER '(' order_by_expr ')'
3883
+ ;
3884
+
3885
+ function_call
3886
+ : round_expr
3887
+ | unary_or_binary_builtin_function LR_BRACKET expr (COMMA expr)* RR_BRACKET
3888
+ | binary_builtin_function LR_BRACKET expr COMMA expr RR_BRACKET
3889
+ | binary_or_ternary_builtin_function LR_BRACKET expr COMMA expr (COMMA expr)* RR_BRACKET
3890
+ | ternary_builtin_function LR_BRACKET expr COMMA expr COMMA expr RR_BRACKET
3891
+ | ranking_windowed_function
3892
+ | aggregate_function
3893
+ // | aggregate_windowed_function
3894
+ | object_name '(' expr_list? ')'
3895
+ | object_name '(' param_assoc_list ')'
3896
+ | list_function LR_BRACKET expr_list RR_BRACKET
3897
+ | to_date = ( TO_DATE | DATE) LR_BRACKET expr RR_BRACKET
3898
+ | length = ( LENGTH | LEN) LR_BRACKET expr RR_BRACKET
3899
+ | TO_BOOLEAN LR_BRACKET expr RR_BRACKET
3900
+ ;
3901
+
3902
+ param_assoc_list
3903
+ : param_assoc (',' param_assoc)*
3904
+ ;
3905
+
3906
+ param_assoc
3907
+ : id_ ASSOC expr
3908
+ ;
3909
+
3910
+ ignore_or_repect_nulls
3911
+ : (IGNORE | RESPECT) NULLS
3912
+ ;
3913
+
3914
+ ranking_windowed_function
3915
+ : (RANK | DENSE_RANK | ROW_NUMBER) '(' ')' over_clause
3916
+ | NTILE '(' expr ')' over_clause
3917
+ | (LEAD | LAG) LR_BRACKET expr (COMMA expr COMMA expr)? RR_BRACKET ignore_or_repect_nulls? over_clause
3918
+ | (FIRST_VALUE | LAST_VALUE) LR_BRACKET expr RR_BRACKET ignore_or_repect_nulls? over_clause
3919
+ ;
3920
+
3921
+ aggregate_function
3922
+ : id_ '(' DISTINCT? expr_list ')'
3923
+ | id_ '(' STAR ')'
3924
+ | (LISTAGG | ARRAY_AGG) '(' DISTINCT? expr (COMMA string)? ')' (
3925
+ WITHIN GROUP '(' order_by_clause ')'
3926
+ )?
3927
+ ;
3928
+
3929
+ //rows_range
3930
+ // : ROWS | RANGE
3931
+ // ;
3932
+
3933
+ //cumulative_frame
3934
+ // : rows_range BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
3935
+ // | rows_range BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
3936
+ // ;
3937
+
3938
+ //preceding_following
3939
+ // : PRECEDING | FOLLOWING
3940
+ // ;
3941
+
3942
+ //sliding_frame
3943
+ // : ROWS BETWEEN num preceding_following AND num preceding_following
3944
+ // | ROWS BETWEEN UNBOUNDED PRECEDING AND num preceding_following
3945
+ // | ROWS BETWEEN num preceding_following AND UNBOUNDED FOLLOWING
3946
+ // ;
3947
+
3948
+ literal
3949
+ : STRING // string, date, time, timestamp
3950
+ | sign? DECIMAL
3951
+ | sign? (REAL | FLOAT)
3952
+ | true_false
3953
+ | NULL_
3954
+ | AT_Q
3955
+ ;
3956
+
3957
+ sign
3958
+ : PLUS
3959
+ | MINUS
3960
+ ;
3961
+
3962
+ full_column_name
3963
+ : db_name = id_? DOT schema = id_? DOT tab_name = id_? DOT col_name = id_
3964
+ | schema = id_? DOT tab_name = id_? DOT col_name = id_
3965
+ | tab_name = id_? DOT col_name = id_
3966
+ | col_name = id_
3967
+ ;
3968
+
3969
+ bracket_expression
3970
+ : LR_BRACKET expr_list RR_BRACKET
3971
+ | LR_BRACKET subquery RR_BRACKET
3972
+ ;
3973
+
3974
+ case_expression
3975
+ : CASE expr switch_section+ (ELSE expr)? END
3976
+ | CASE switch_search_condition_section+ (ELSE expr)? END
3977
+ ;
3978
+
3979
+ switch_search_condition_section
3980
+ : WHEN search_condition THEN expr
3981
+ ;
3982
+
3983
+ switch_section
3984
+ : WHEN expr THEN expr
3985
+ ;
3986
+
3987
+ // select
3988
+ query_statement
3989
+ : with_expression? select_statement set_operators*
3990
+ ;
3991
+
3992
+ with_expression
3993
+ : WITH common_table_expression (COMMA common_table_expression)*
3994
+ ;
3995
+
3996
+ common_table_expression
3997
+ : id_ ('(' columns = column_list ')')? AS '(' select_statement set_operators* ')'
3998
+ ;
3999
+
4000
+ select_statement
4001
+ : select_clause select_optional_clauses limit_clause?
4002
+ | select_top_clause select_optional_clauses //TOP and LIMIT are not allowed together
4003
+ ;
4004
+
4005
+ set_operators
4006
+ : (UNION ALL? | EXCEPT | MINUS_ | INTERSECT) select_statement //EXCEPT and MINUS have same SQL meaning
4007
+ | LR_BRACKET select_statement RR_BRACKET
4008
+ ;
4009
+
4010
+ select_optional_clauses
4011
+ : into_clause? from_clause? where_clause? (group_by_clause | having_clause)? qualify_clause? order_by_clause?
4012
+ ;
4013
+
4014
+ select_clause
4015
+ : SELECT select_list_no_top
4016
+ ;
4017
+
4018
+ select_top_clause
4019
+ : SELECT select_list_top
4020
+ ;
4021
+
4022
+ select_list_no_top
4023
+ : all_distinct? select_list
4024
+ ;
4025
+
4026
+ select_list_top
4027
+ : all_distinct? top_clause? select_list
4028
+ ;
4029
+
4030
+ select_list
4031
+ : select_list_elem (COMMA select_list_elem)* COMMA?
4032
+ ;
4033
+
4034
+ select_list_elem
4035
+ : column_elem as_alias?
4036
+ | column_elem_star
4037
+ // | udt_elem
4038
+ | expression_elem as_alias?
4039
+ ;
4040
+
4041
+ column_elem_star
4042
+ : object_name_or_alias? STAR
4043
+ ;
4044
+
4045
+ column_elem
4046
+ : object_name_or_alias? column_name
4047
+ | object_name_or_alias? DOLLAR column_position
4048
+ ;
4049
+
4050
+ object_name_or_alias
4051
+ : object_name
4052
+ | alias DOT
4053
+ ;
4054
+
4055
+ as_alias
4056
+ : AS? alias
4057
+ ;
4058
+
4059
+ expression_elem
4060
+ : expr
4061
+ | predicate
4062
+ ;
4063
+
4064
+ column_position
4065
+ : num
4066
+ ;
4067
+
4068
+ all_distinct
4069
+ : ALL
4070
+ | DISTINCT
4071
+ ;
4072
+
4073
+ top_clause
4074
+ : TOP num
4075
+ ;
4076
+
4077
+ into_clause
4078
+ : INTO var_list
4079
+ ;
4080
+
4081
+ var_list
4082
+ : var (COMMA var)*
4083
+ ;
4084
+
4085
+ var
4086
+ : COLON id_
4087
+ ;
4088
+
4089
+ from_clause
4090
+ : FROM table_sources // object_ref join_clause*
4091
+ ;
4092
+
4093
+ table_sources
4094
+ : table_source (',' table_source)*
4095
+ ;
4096
+
4097
+ table_source
4098
+ : table_source_item_joined
4099
+ //| '(' table_source ')'
4100
+ ;
4101
+
4102
+ table_source_item_joined
4103
+ : object_ref join_clause*
4104
+ | '(' table_source_item_joined ')' join_clause*
4105
+ ;
4106
+
4107
+ object_ref
4108
+ : object_name at_before? changes? match_recognize? pivot_unpivot? as_alias? column_list_in_parentheses? sample?
4109
+ | object_name START WITH predicate CONNECT BY prior_list?
4110
+ | TABLE '(' function_call ')' pivot_unpivot? as_alias? sample?
4111
+ | values_table sample?
4112
+ | LATERAL? '(' subquery ')' pivot_unpivot? as_alias? column_list_in_parentheses?
4113
+ | LATERAL (flatten_table | splited_table) as_alias?
4114
+ //| AT id_ PATH?
4115
+ // ('(' FILE_FORMAT ASSOC id_ COMMA pattern_assoc ')')?
4116
+ // as_alias?
4117
+ ;
4118
+
4119
+ flatten_table_option
4120
+ : PATH_ ASSOC string
4121
+ | OUTER ASSOC true_false
4122
+ | RECURSIVE ASSOC true_false
4123
+ | MODE ASSOC (ARRAY_Q | OBJECT_Q | BOTH_Q)
4124
+ ;
4125
+
4126
+ flatten_table
4127
+ : FLATTEN LR_BRACKET (INPUT ASSOC)? expr (COMMA flatten_table_option)* RR_BRACKET
4128
+ ;
4129
+
4130
+ splited_table
4131
+ : SPLIT_TO_TABLE LR_BRACKET expr COMMA expr RR_BRACKET
4132
+ ;
4133
+
4134
+ prior_list
4135
+ : prior_item (COMMA prior_item)*
4136
+ ;
4137
+
4138
+ prior_item
4139
+ : PRIOR? id_ EQ PRIOR? id_
4140
+ ;
4141
+
4142
+ outer_join
4143
+ : (LEFT | RIGHT | FULL) OUTER?
4144
+ ;
4145
+
4146
+ join_type
4147
+ : INNER
4148
+ | outer_join
4149
+ ;
4150
+
4151
+ join_clause
4152
+ : join_type? JOIN object_ref ((ON search_condition)? | (USING '(' column_list ')')?)
4153
+ //| join_type? JOIN object_ref (USING '(' column_list ')')?
4154
+ | NATURAL outer_join? JOIN object_ref
4155
+ | CROSS JOIN object_ref
4156
+ ;
4157
+
4158
+ at_before
4159
+ : AT_KEYWORD LR_BRACKET (
4160
+ TIMESTAMP ASSOC expr
4161
+ | OFFSET ASSOC expr
4162
+ | STATEMENT ASSOC string
4163
+ | STREAM ASSOC string
4164
+ ) RR_BRACKET
4165
+ | BEFORE LR_BRACKET STATEMENT ASSOC string RR_BRACKET
4166
+ ;
4167
+
4168
+ end
4169
+ : END LR_BRACKET (TIMESTAMP ASSOC expr | OFFSET ASSOC expr | STATEMENT ASSOC string) RR_BRACKET
4170
+ ;
4171
+
4172
+ changes
4173
+ : CHANGES LR_BRACKET INFORMATION ASSOC default_append_only RR_BRACKET at_before end?
4174
+ ;
4175
+
4176
+ default_append_only
4177
+ : DEFAULT
4178
+ | APPEND_ONLY
4179
+ ;
4180
+
4181
+ partition_by
4182
+ : PARTITION BY expr_list
4183
+ ;
4184
+
4185
+ alias
4186
+ : id_
4187
+ ;
4188
+
4189
+ expr_alias_list
4190
+ : expr AS? alias (COMMA expr AS? alias)*
4191
+ ;
4192
+
4193
+ measures
4194
+ : MEASURES expr_alias_list
4195
+ ;
4196
+
4197
+ match_opts
4198
+ : SHOW EMPTY_ MATCHES
4199
+ | OMIT EMPTY_ MATCHES
4200
+ | WITH UNMATCHED ROWS
4201
+ ;
4202
+
4203
+ row_match
4204
+ : (ONE ROW PER MATCH | ALL ROWS PER MATCH) match_opts?
4205
+ ;
4206
+
4207
+ first_last
4208
+ : FIRST
4209
+ | LAST
4210
+ ;
4211
+
4212
+ symbol
4213
+ : DUMMY
4214
+ ;
4215
+
4216
+ after_match
4217
+ : AFTER MATCH SKIP_ (PAST LAST ROW | TO NEXT ROW | TO first_last? symbol)
4218
+ ;
4219
+
4220
+ symbol_list
4221
+ : symbol AS expr (COMMA symbol AS expr)*
4222
+ ;
4223
+
4224
+ define
4225
+ : DEFINE symbol_list
4226
+ ;
4227
+
4228
+ match_recognize
4229
+ : MATCH_RECOGNIZE LR_BRACKET partition_by? order_by_clause? measures? row_match? after_match? pattern? define? RR_BRACKET
4230
+ ;
4231
+
4232
+ pivot_unpivot
4233
+ : PIVOT LR_BRACKET id_ LR_BRACKET id_ RR_BRACKET FOR id_ IN LR_BRACKET literal (COMMA literal)* RR_BRACKET RR_BRACKET (
4234
+ as_alias column_alias_list_in_brackets?
4235
+ )?
4236
+ | UNPIVOT LR_BRACKET id_ FOR column_name IN LR_BRACKET column_list RR_BRACKET RR_BRACKET
4237
+ ;
4238
+
4239
+ column_alias_list_in_brackets
4240
+ : LR_BRACKET id_ (COMMA id_)* RR_BRACKET
4241
+ ;
4242
+
4243
+ expr_list_in_parentheses
4244
+ : LR_BRACKET expr_list RR_BRACKET
4245
+ ;
4246
+
4247
+ values_table
4248
+ : LR_BRACKET values_table_body RR_BRACKET (as_alias column_alias_list_in_brackets?)?
4249
+ | values_table_body (as_alias column_alias_list_in_brackets?)?
4250
+ ;
4251
+
4252
+ values_table_body
4253
+ : VALUES expr_list_in_parentheses (COMMA expr_list_in_parentheses)*
4254
+ ;
4255
+
4256
+ sample_method
4257
+ : row_sampling = (BERNOULLI | ROW)
4258
+ | block_sampling = ( SYSTEM | BLOCK)
4259
+ ;
4260
+
4261
+ repeatable_seed
4262
+ : (REPEATABLE | SEED) LR_BRACKET num RR_BRACKET
4263
+ ;
4264
+
4265
+ sample_opts
4266
+ : LR_BRACKET num ROWS? RR_BRACKET repeatable_seed?
4267
+ ;
4268
+
4269
+ sample
4270
+ : (SAMPLE | TABLESAMPLE) sample_method? sample_opts
4271
+ ;
4272
+
4273
+ search_condition
4274
+ : NOT* (predicate | '(' search_condition ')')
4275
+ | search_condition AND search_condition
4276
+ | search_condition OR search_condition
4277
+ ;
4278
+
4279
+ comparison_operator
4280
+ : EQ
4281
+ | GT
4282
+ | LT
4283
+ | LE
4284
+ | GE
4285
+ | LTGT
4286
+ | NE
4287
+ ;
4288
+
4289
+ null_not_null
4290
+ : NOT? NULL_
4291
+ ;
4292
+
4293
+ subquery
4294
+ : query_statement
4295
+ ;
4296
+
4297
+ predicate
4298
+ : EXISTS LR_BRACKET subquery RR_BRACKET
4299
+ | expr comparison_operator (ALL | SOME | ANY) '(' subquery ')'
4300
+ | expr NOT? BETWEEN expr AND expr
4301
+ | expr NOT? IN '(' (subquery | expr_list) ')'
4302
+ | expr NOT? (LIKE | ILIKE) expr (ESCAPE expr)?
4303
+ | expr NOT? RLIKE expr
4304
+ | expr NOT? (LIKE | ILIKE) ANY LR_BRACKET expr (COMMA expr)* RR_BRACKET (ESCAPE expr)?
4305
+ | expr IS null_not_null
4306
+ | expr
4307
+ ;
4308
+
4309
+ where_clause
4310
+ : WHERE search_condition
4311
+ ;
4312
+
4313
+ group_by_elem
4314
+ : column_elem
4315
+ | num
4316
+ | expression_elem
4317
+ ;
4318
+
4319
+ group_by_list
4320
+ : group_by_elem (COMMA group_by_elem)*
4321
+ ;
4322
+
4323
+ group_by_clause
4324
+ : GROUP BY group_by_list having_clause?
4325
+ | GROUP BY (CUBE | GROUPING SETS | ROLLUP) LR_BRACKET group_by_list RR_BRACKET
4326
+ | GROUP BY ALL
4327
+ ;
4328
+
4329
+ having_clause
4330
+ : HAVING search_condition
4331
+ ;
4332
+
4333
+ qualify_clause
4334
+ : QUALIFY expr
4335
+ ;
4336
+
4337
+ order_item
4338
+ : (id_ | num | expr) (ASC | DESC)? (NULLS ( FIRST | LAST))?
4339
+ ;
4340
+
4341
+ order_by_clause
4342
+ : ORDER BY order_item (COMMA order_item)*
4343
+ ;
4344
+
4345
+ row_rows
4346
+ : ROW
4347
+ | ROWS
4348
+ ;
4349
+
4350
+ first_next
4351
+ : FIRST
4352
+ | NEXT
4353
+ ;
4354
+
4355
+ limit_clause
4356
+ : LIMIT num (OFFSET num)?
4357
+ | (OFFSET num)? row_rows? FETCH first_next? num row_rows? ONLY?
4358
+ ;
4359
+
4360
+ round_mode
4361
+ : HALF_AWAY_FROM_ZERO_Q
4362
+ | HALF_TO_EVEN_Q
4363
+ ;
4364
+
4365
+ round_expr
4366
+ : ROUND LR_BRACKET EXPR ASSOC expr COMMA SCALE ASSOC expr (COMMA ROUNDING_MODE ASSOC round_mode)* RR_BRACKET
4367
+ | ROUND LR_BRACKET expr COMMA expr (COMMA round_mode)* RR_BRACKET
4368
+ ;