Advertisement
Guest User

Untitled

a guest
Jan 4th, 2018
982
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 65.58 KB | None | 0 0
  1. /*
  2. T-SQL (Transact-SQL, MSSQL) grammar.
  3. The MIT License (MIT).
  4. Copyright (c) 2015-2016, Ivan Kochurkin (kvanttt@gmail.com), Positive Technologies.
  5. Copyright (c) 2016, Scott Ure (scott@redstormsoftware.com).
  6. Copyright (c) 2016, Rui Zhang (ruizhang.ccs@gmail.com).
  7. Copyright (c) 2016, Marcus Henriksson (kuseman80@gmail.com).
  8.  
  9. Permission is hereby granted, free of charge, to any person obtaining a copy
  10. of this software and associated documentation files (the "Software"), to deal
  11. in the Software without restriction, including without limitation the rights
  12. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  13. copies of the Software, and to permit persons to whom the Software is
  14. furnished to do so, subject to the following conditions:
  15.  
  16. The above copyright notice and this permission notice shall be included in
  17. all copies or substantial portions of the Software.
  18.  
  19. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  20. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  22. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  23. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  24. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  25. THE SOFTWARE.
  26. */
  27.  
  28. grammar tsql;
  29.  
  30. options
  31. {
  32. language = CSharp;
  33. }
  34.  
  35. tsql_file
  36. : batch* EOF
  37. ;
  38.  
  39. batch
  40. : sql_clauses go_statement?
  41. ;
  42.  
  43. sql_clauses
  44. : (sql_clause SEMI?)+
  45. ;
  46.  
  47. sql_clause
  48. : dml_clause
  49.  
  50. | ddl_clause
  51.  
  52. | cfl_statement
  53.  
  54. | dbcc_clause
  55.  
  56. | empty_statement
  57.  
  58. | another_statement
  59. ;
  60.  
  61. // Data Manipulation Language: https://msdn.microsoft.com/en-us/library/ff848766(v=sql.120).aspx
  62. dml_clause
  63. : delete_statement
  64. | insert_statement
  65. | select_statement
  66. | update_statement
  67. ;
  68.  
  69. // Data Definition Language: https://msdn.microsoft.com/en-us/library/ff848799.aspx)
  70. ddl_clause
  71. :
  72. create_database
  73. | create_index
  74. | create_or_alter_procedure
  75. | create_or_alter_function
  76. | create_statistics
  77. | create_table
  78. | create_type
  79. | create_view
  80.  
  81. | alter_table
  82. | alter_database
  83.  
  84. | drop_index
  85. | drop_procedure
  86. | drop_function
  87. | drop_statistics
  88. | drop_table
  89. | drop_type
  90. | drop_view
  91. ;
  92.  
  93. // Control-of-Flow Language: https://msdn.microsoft.com/en-us/library/ms174290.aspx
  94. // Labels for better AST traverse.
  95. cfl_statement
  96. // https://msdn.microsoft.com/en-us/library/ms190487.aspx
  97. : BEGIN ';'? sql_clauses? END ';'? #block_statement
  98. // https://msdn.microsoft.com/en-us/library/ms181271.aspx
  99. | BREAK ';'? #break_statement
  100. // https://msdn.microsoft.com/en-us/library/ms174366.aspx
  101. | CONTINUE ';'? #continue_statement
  102. // https://msdn.microsoft.com/en-us/library/ms180188.aspx
  103. | GOTO id ';'? #goto_statement
  104. | id ':' ';'? #goto_statement
  105. // https://msdn.microsoft.com/en-us/library/ms182717.aspx
  106. | IF search_condition sql_clause (ELSE sql_clause)? ';'? #if_statement
  107. // https://msdn.microsoft.com/en-us/library/ms174998.aspx
  108. | RETURN expression? ';'? #return_statement
  109. // https://msdn.microsoft.com/en-us/library/ee677615.aspx
  110. | THROW (
  111. error_number=(DECIMAL | LOCAL_ID) ',' message=(STRING | LOCAL_ID) ','
  112. state=(DECIMAL | LOCAL_ID))? ';'? #throw_statement
  113. // https://msdn.microsoft.com/en-us/library/ms175976.aspx
  114. | BEGIN TRY ';'? try_clauses=sql_clauses? END TRY ';'?
  115. BEGIN CATCH ';'? catch_clauses=sql_clauses? END CATCH ';'? #try_catch_statement
  116. // https://msdn.microsoft.com/en-us/library/ms187331.aspx
  117. | WAITFOR (DELAY | TIME) expression ';'? #waitfor_statement
  118. // https://msdn.microsoft.com/en-us/library/ms178642.aspx
  119. | WHILE search_condition (sql_clause | BREAK ';'? | CONTINUE ';'?) #while_statement
  120. // https://msdn.microsoft.com/en-us/library/ms176047.aspx.
  121. | PRINT expression ';'? #print_statement
  122. // https://msdn.microsoft.com/en-us/library/ms178592.aspx
  123. | RAISERROR '(' msg=(DECIMAL | STRING | LOCAL_ID) ',' severity=constant_LOCAL_ID ','
  124. state=constant_LOCAL_ID (',' constant_LOCAL_ID)* ')' ';'? #raiseerror_statement
  125. ;
  126.  
  127. empty_statement
  128. : ';'
  129. ;
  130.  
  131. another_statement
  132. : declare_statement
  133. | cursor_statement
  134. | execute_statement
  135. | security_statement
  136. | set_statement
  137. | transaction_statement
  138. | use_statement
  139. ;
  140.  
  141. // DML
  142.  
  143. // https://msdn.microsoft.com/en-us/library/ms189835.aspx
  144. delete_statement
  145. : with_expression?
  146. DELETE (TOP '(' expression ')' PERCENT?)?
  147. FROM? delete_statement_from
  148. insert_with_table_hints?
  149. output_clause?
  150. (FROM table_sources)?
  151. (WHERE (search_condition | CURRENT OF (GLOBAL? cursor_name | cursor_var=LOCAL_ID)))?
  152. for_clause? option_clause? ';'?
  153. ;
  154.  
  155. delete_statement_from
  156. : table_alias
  157. | ddl_object
  158. | rowset_function_limited
  159. | table_var=LOCAL_ID
  160. ;
  161.  
  162. // https://msdn.microsoft.com/en-us/library/ms174335.aspx
  163. insert_statement
  164. : with_expression?
  165. INSERT (TOP '(' expression ')' PERCENT?)?
  166. INTO? (ddl_object | rowset_function_limited)
  167. insert_with_table_hints?
  168. ('(' column_name_list ')')?
  169. output_clause?
  170. insert_statement_value
  171. for_clause? option_clause? ';'?
  172. ;
  173.  
  174. insert_statement_value
  175. : table_value_constructor
  176. | derived_table
  177. | execute_statement
  178. | DEFAULT VALUES
  179. ;
  180.  
  181. // https://msdn.microsoft.com/en-us/library/ms189499.aspx
  182. select_statement
  183. : with_expression? query_expression order_by_clause? for_clause? option_clause? ';'?
  184. ;
  185.  
  186. // https://msdn.microsoft.com/en-us/library/ms177523.aspx
  187. update_statement
  188. : with_expression?
  189. UPDATE (TOP '(' expression ')' PERCENT?)?
  190. (ddl_object | rowset_function_limited)
  191. with_table_hints?
  192. SET update_elem (',' update_elem)*
  193. output_clause?
  194. (FROM table_sources)?
  195. (WHERE (search_condition_list | CURRENT OF (GLOBAL? cursor_name | cursor_var=LOCAL_ID)))?
  196. for_clause? option_clause? ';'?
  197. ;
  198.  
  199. // https://msdn.microsoft.com/en-us/library/ms177564.aspx
  200. output_clause
  201. : OUTPUT output_dml_list_elem (',' output_dml_list_elem)*
  202. (INTO (LOCAL_ID | table_name) ('(' column_name_list ')')? )?
  203. ;
  204.  
  205. output_dml_list_elem
  206. : (output_column_name | expression) (AS? column_alias)? // TODO: scalar_expression
  207. ;
  208.  
  209. output_column_name
  210. : (DELETED | INSERTED | table_name) '.' ('*' | id)
  211. | DOLLAR_ACTION
  212. ;
  213.  
  214. // DDL
  215.  
  216. // https://msdn.microsoft.com/en-ie/library/ms176061.aspx
  217. create_database
  218. : CREATE DATABASE (database=id)
  219. ( CONTAINMENT '=' ( NONE | PARTIAL ) )?
  220. ( ON PRIMARY? database_file_spec ( ',' database_file_spec )* )?
  221. ( LOG ON database_file_spec ( ',' database_file_spec )* )?
  222. ( COLLATE collation_name = id )?
  223. ( WITH create_database_option ( ',' create_database_option )* )?
  224. ;
  225.  
  226. // https://msdn.microsoft.com/en-us/library/ms188783.aspx
  227. create_index
  228. : CREATE UNIQUE? clustered? INDEX id ON table_name_with_hint '(' column_name_list (ASC | DESC)? ')'
  229. (index_options)?
  230. (ON id)?
  231. ';'?
  232. ;
  233.  
  234. // https://msdn.microsoft.com/en-us/library/ms187926(v=sql.120).aspx
  235. create_or_alter_procedure
  236. : (CREATE | ALTER) proc=(PROC | PROCEDURE) func_proc_name (';' DECIMAL)?
  237. ('('? procedure_param (',' procedure_param)* ')'?)?
  238. (WITH procedure_option (',' procedure_option)*)?
  239. (FOR REPLICATION)? AS sql_clauses
  240. ;
  241.  
  242. //https://msdn.microsoft.com/en-us/library/ms186755.aspx
  243. create_or_alter_function
  244. : (CREATE | ALTER) FUNCTION func_proc_name
  245. (('(' procedure_param (',' procedure_param)* ')') | '(' ')') //must have (), but can be empty
  246. (func_body_returns_select | func_body_returns_table | func_body_returns_scalar) ';'?
  247.  
  248. ;
  249.  
  250. func_body_returns_select
  251. :RETURNS TABLE
  252. (WITH function_option (',' function_option)*)?
  253. AS?
  254. RETURN select_statement
  255. ;
  256.  
  257. func_body_returns_table
  258. : RETURNS LOCAL_ID table_type_definition
  259. (WITH function_option (',' function_option)*)?
  260. AS?
  261. BEGIN
  262. sql_clause*
  263. RETURN
  264. END
  265. ;
  266.  
  267.  
  268. func_body_returns_scalar
  269. :RETURNS data_type
  270. (WITH function_option (',' function_option)*)?
  271. AS?
  272. BEGIN
  273. sql_clause*
  274. RETURN ret=expression ';'?
  275. END
  276. ;
  277.  
  278. procedure_param
  279. : LOCAL_ID (id '.')? AS? data_type VARYING? ('=' default_val=default_value)? (OUT | OUTPUT | READONLY)?
  280. ;
  281.  
  282. procedure_option
  283. : ENCRYPTION
  284. | RECOMPILE
  285. | execute_clause
  286. ;
  287.  
  288. function_option
  289. : RETURNS NULL ON NULL INPUT
  290. | CALLED ON NULL INPUT
  291. | execute_clause
  292. ;
  293.  
  294. // https://msdn.microsoft.com/en-us/library/ms188038.aspx
  295. create_statistics
  296. : CREATE STATISTICS id ON table_name_with_hint '(' column_name_list ')'
  297. (WITH (FULLSCAN | SAMPLE DECIMAL (PERCENT | ROWS) | STATS_STREAM)
  298. (',' NORECOMPUTE)? (',' INCREMENTAL EQUAL on_off)? )? ';'?
  299. ;
  300.  
  301. // https://msdn.microsoft.com/en-us/library/ms174979.aspx
  302. create_table
  303. : CREATE TABLE table_name '(' column_def_table_constraints ','? ')' (ON id | DEFAULT)? (TEXTIMAGE_ON id | DEFAULT)?';'?
  304. ;
  305.  
  306. // https://msdn.microsoft.com/en-us/library/ms187956.aspx
  307. create_view
  308. : CREATE VIEW simple_name ('(' column_name_list ')')?
  309. (WITH view_attribute (',' view_attribute)*)?
  310. AS select_statement (WITH CHECK OPTION)? ';'?
  311. ;
  312.  
  313. view_attribute
  314. : ENCRYPTION | SCHEMABINDING | VIEW_METADATA
  315. ;
  316.  
  317. // https://msdn.microsoft.com/en-us/library/ms190273.aspx
  318. alter_table
  319. : ALTER TABLE table_name (SET '(' LOCK_ESCALATION '=' (AUTO | TABLE | DISABLE) ')'
  320. | ADD column_def_table_constraint
  321. | DROP CONSTRAINT constraint=id
  322. | WITH CHECK ADD CONSTRAINT constraint=id FOREIGN KEY '(' fk = column_name_list ')' REFERENCES table_name '(' pk = column_name_list')'
  323. | CHECK CONSTRAINT constraint=id
  324. )
  325. ';'?
  326. ;
  327.  
  328. // https://msdn.microsoft.com/en-us/library/ms174269.aspx
  329. alter_database
  330. : ALTER DATABASE (database=id | CURRENT)
  331. (MODIFY NAME '=' new_name=id | COLLATE collation=id | SET database_optionspec (WITH termination)? ) ';'?
  332. ;
  333.  
  334. // https://msdn.microsoft.com/en-us/library/bb522682.aspx
  335. // Runtime check.
  336. database_optionspec
  337. : auto_option
  338. | change_tracking_option
  339. | containment_option
  340. | cursor_option
  341. // | database_mirroring_option
  342. | date_correlation_optimization_option
  343. | db_encryption_option
  344. | db_state_option
  345. | db_update_option
  346. | db_user_access_option
  347. | delayed_durability_option
  348. | external_access_option
  349. | FILESTREAM database_filestream_option
  350. | HADR_options
  351. | mixed_page_allocation_option
  352. | parameterization_option
  353. // | query_store_options
  354. | recovery_option
  355. // | remote_data_archive_option
  356. | service_broker_option
  357. | snapshot_option
  358. | sql_option
  359. | target_recovery_time_option
  360. | termination
  361. ;
  362.  
  363. auto_option:
  364. AUTO_CLOSE on_off
  365. | AUTO_CREATE_STATISTICS OFF | ON ( INCREMENTAL EQUAL ON | OFF )
  366. | AUTO_SHRINK on_off
  367. | AUTO_UPDATE_STATISTICS on_off
  368. | AUTO_UPDATE_STATISTICS_ASYNC (ON | OFF )
  369. ;
  370.  
  371. change_tracking_option:
  372. CHANGE_TRACKING EQUAL ( OFF | ON (change_tracking_option_list (',' change_tracking_option_list)*)* )
  373. ;
  374.  
  375. change_tracking_option_list:
  376. AUTO_CLEANUP EQUAL on_off
  377. | CHANGE_RETENTION EQUAL ( DAYS | HOURS | MINUTES )
  378. ;
  379.  
  380. containment_option:
  381. CONTAINMENT EQUAL ( NONE | PARTIAL )
  382. ;
  383.  
  384. cursor_option:
  385. CURSOR_CLOSE_ON_COMMIT on_off
  386. | CURSOR_DEFAULT ( LOCAL | GLOBAL )
  387. ;
  388.  
  389. /* Will visit later
  390. database_mirroring_option:
  391. ALTER DATABASE Database Mirroring
  392. ;
  393. */
  394.  
  395. date_correlation_optimization_option:
  396. DATE_CORRELATION_OPTIMIZATION on_off
  397. ;
  398.  
  399. db_encryption_option:
  400. ENCRYPTION on_off
  401. ;
  402. db_state_option:
  403. ( ONLINE | OFFLINE | EMERGENCY )
  404. ;
  405.  
  406. db_update_option:
  407. READ_ONLY | READ_WRITE
  408. ;
  409.  
  410. db_user_access_option:
  411. ( SINGLE_USER | RESTRICTED_USER | MULTI_USER )
  412. ;
  413. delayed_durability_option:
  414. DELAYED_DURABILITY EQUAL ( DISABLED | ALLOWED | FORCED )
  415. ;
  416.  
  417. external_access_option:
  418. DB_CHAINING on_off
  419. | TRUSTWORTHY on_off
  420. | DEFAULT_LANGUAGE EQUAL ( id | STRING )
  421. | DEFAULT_FULLTEXT_LANGUAGE EQUAL ( id | STRING )
  422. | NESTED_TRIGGERS EQUAL ( OFF | ON )
  423. | TRANSFORM_NOISE_WORDS EQUAL ( OFF | ON )
  424. | TWO_DIGIT_YEAR_CUTOFF EQUAL DECIMAL
  425. ;
  426.  
  427. HADR_options:
  428. ALTER DATABASE SET HADR
  429. ;
  430.  
  431. mixed_page_allocation_option:
  432. MIXED_PAGE_ALLOCATION ( OFF | ON )
  433. ;
  434.  
  435. parameterization_option:
  436. PARAMETERIZATION ( SIMPLE | FORCED )
  437. ;
  438.  
  439. /* Will visit later
  440. query_store_options:
  441. ;
  442. */
  443.  
  444. recovery_option:
  445. RECOVERY ( FULL | BULK_LOGGED | SIMPLE )
  446. | TORN_PAGE_DETECTION on_off
  447. | PAGE_VERIFY ( CHECKSUM | TORN_PAGE_DETECTION | NONE )
  448. ;
  449.  
  450. /*Will visit later
  451. remote_data_archive_option:
  452. ;
  453. */
  454.  
  455. service_broker_option:
  456. ENABLE_BROKER
  457. | DISABLE_BROKER
  458. | NEW_BROKER
  459. | ERROR_BROKER_CONVERSATIONS
  460. | HONOR_BROKER_PRIORITY on_off
  461. ;
  462. snapshot_option:
  463. ALLOW_SNAPSHOT_ISOLATION on_off
  464. | READ_COMMITTED_SNAPSHOT (ON | OFF )
  465. | MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = (ON | OFF )
  466. ;
  467.  
  468. sql_option:
  469. ANSI_NULL_DEFAULT on_off
  470. | ANSI_NULLS on_off
  471. | ANSI_PADDING on_off
  472. | ANSI_WARNINGS on_off
  473. | ARITHABORT on_off
  474. | COMPATIBILITY_LEVEL EQUAL DECIMAL
  475. | CONCAT_NULL_YIELDS_NULL on_off
  476. | NUMERIC_ROUNDABORT on_off
  477. | QUOTED_IDENTIFIER on_off
  478. | RECURSIVE_TRIGGERS on_off
  479. ;
  480.  
  481. target_recovery_time_option:
  482. TARGET_RECOVERY_TIME EQUAL DECIMAL ( SECONDS | MINUTES )
  483. ;
  484.  
  485. termination:
  486. ROLLBACK AFTER seconds = DECIMAL
  487. | ROLLBACK IMMEDIATE
  488. | NO_WAIT
  489. ;
  490.  
  491. // https://msdn.microsoft.com/en-us/library/ms176118.aspx
  492. drop_index
  493. : DROP INDEX (IF EXISTS)? name=id (ON table_name)? ';'?
  494. ;
  495.  
  496. // https://msdn.microsoft.com/en-us/library/ms174969.aspx
  497. drop_procedure
  498. : DROP proc=(PROC | PROCEDURE) (IF EXISTS)? func_proc_name (',' func_proc_name)* ';'?
  499. ;
  500.  
  501. //https://msdn.microsoft.com/en-us/library/ms190290.aspx
  502. drop_function
  503. : DROP FUNCTION (IF EXISTS)? func_proc_name (',' func_proc_name)* ';'?
  504. ;
  505.  
  506. // https://msdn.microsoft.com/en-us/library/ms175075.aspx
  507. drop_statistics
  508. : DROP STATISTICS (table_name '.')? name=id ';'
  509. ;
  510.  
  511. // https://msdn.microsoft.com/en-us/library/ms173790.aspx
  512. drop_table
  513. : DROP TABLE (IF EXISTS)? table_name ';'?
  514. ;
  515.  
  516. // https://msdn.microsoft.com/en-us/library/ms173492.aspx
  517. drop_view
  518. : DROP VIEW (IF EXISTS)? simple_name (',' simple_name)* ';'?
  519. ;
  520.  
  521. create_type:
  522. CREATE TYPE name = simple_name FROM data_type default_value
  523. ;
  524.  
  525. drop_type:
  526. DROP TYPE ( IF EXISTS )? name = simple_name
  527. ;
  528.  
  529. rowset_function_limited
  530. : openquery
  531. | opendatasource
  532. ;
  533.  
  534. // https://msdn.microsoft.com/en-us/library/ms188427(v=sql.120).aspx
  535. openquery
  536. : OPENQUERY '(' linked_server=id ',' query=STRING ')'
  537. ;
  538.  
  539. // https://msdn.microsoft.com/en-us/library/ms179856.aspx
  540. opendatasource
  541. : OPENDATASOURCE '(' provider=STRING ',' init=STRING ')'
  542. '.' (database=id)? '.' (scheme=id)? '.' (table=id)
  543. ;
  544.  
  545. // Other statements.
  546.  
  547. // https://msdn.microsoft.com/en-us/library/ms188927.aspx
  548. declare_statement
  549. : DECLARE LOCAL_ID AS? table_type_definition ';'?
  550. | DECLARE declare_local (',' declare_local)* ';'?
  551. ;
  552.  
  553. // https://msdn.microsoft.com/en-us/library/ms181441(v=sql.120).aspx
  554. cursor_statement
  555. // https://msdn.microsoft.com/en-us/library/ms175035(v=sql.120).aspx
  556. : CLOSE GLOBAL? cursor_name ';'?
  557. // https://msdn.microsoft.com/en-us/library/ms188782(v=sql.120).aspx
  558. | DEALLOCATE GLOBAL? cursor_name ';'?
  559. // https://msdn.microsoft.com/en-us/library/ms180169(v=sql.120).aspx
  560. | declare_cursor
  561. // https://msdn.microsoft.com/en-us/library/ms180152(v=sql.120).aspx
  562. | fetch_cursor
  563. // https://msdn.microsoft.com/en-us/library/ms190500(v=sql.120).aspx
  564. | OPEN GLOBAL? cursor_name ';'?
  565. ;
  566.  
  567. // https://msdn.microsoft.com/en-us/library/ms188332.aspx
  568. execute_statement
  569. : EXECUTE (return_status=LOCAL_ID '=')? func_proc_name (execute_statement_arg (',' execute_statement_arg)*)? ';'?
  570. | EXECUTE '(' execute_var_string ('+' execute_var_string)* ')' (AS? (LOGIN | USER) '=' STRING)? ';'?
  571. ;
  572.  
  573. execute_statement_arg
  574. : (parameter=LOCAL_ID '=')? ((constant_LOCAL_ID | id) (OUTPUT | OUT)? | DEFAULT | NULL)
  575. ;
  576.  
  577. execute_var_string
  578. : LOCAL_ID
  579. | STRING
  580. ;
  581.  
  582. // https://msdn.microsoft.com/en-us/library/ff848791.aspx
  583. security_statement
  584. // https://msdn.microsoft.com/en-us/library/ms188354.aspx
  585. : execute_clause ';'?
  586. // https://msdn.microsoft.com/en-us/library/ms187965.aspx
  587. | GRANT (ALL PRIVILEGES? | grant_permission ('(' column_name_list ')')?) (ON on_id=table_name)? TO (to_principal=id) (WITH GRANT OPTION)? (AS as_principal=id)? ';'?
  588. // https://msdn.microsoft.com/en-us/library/ms178632.aspx
  589. | REVERT ('(' WITH COOKIE '=' LOCAL_ID ')')? ';'?
  590. ;
  591.  
  592. grant_permission
  593. : EXECUTE
  594. | VIEW id // DEFINITION
  595. | TAKE id // OWNERSHIP
  596. | CONTROL id? // SERVER
  597. | CREATE (TABLE | VIEW)
  598. | SHOWPLAN
  599. | IMPERSONATE
  600. | SELECT
  601. | REFERENCES
  602. | INSERT
  603. | ALTER (ANY? (id | DATABASE))?
  604. ;
  605.  
  606. // https://msdn.microsoft.com/en-us/library/ms190356.aspx
  607. // https://msdn.microsoft.com/en-us/library/ms189484.aspx
  608. set_statement
  609. : SET LOCAL_ID ('.' member_name=id)? '=' expression ';'?
  610. | SET LOCAL_ID assignment_operator expression ';'?
  611. | SET LOCAL_ID '='
  612. CURSOR declare_set_cursor_common (FOR (READ ONLY | UPDATE (OF column_name_list)?))? ';'?
  613. // https://msdn.microsoft.com/en-us/library/ms189837.aspx
  614. | set_special
  615. ;
  616.  
  617. // https://msdn.microsoft.com/en-us/library/ms174377.aspx
  618. transaction_statement
  619. // https://msdn.microsoft.com/en-us/library/ms188386.aspx
  620. : BEGIN DISTRIBUTED (TRAN | TRANSACTION) (id | LOCAL_ID)? ';'?
  621. // https://msdn.microsoft.com/en-us/library/ms188929.aspx
  622. | BEGIN (TRAN | TRANSACTION) ((id | LOCAL_ID) (WITH MARK STRING)?)? ';'?
  623. // https://msdn.microsoft.com/en-us/library/ms190295.aspx
  624. | COMMIT (TRAN | TRANSACTION) ((id | LOCAL_ID) (WITH '(' DELAYED_DURABILITY EQUAL (OFF | ON) ')')?)? ';'?
  625. // https://msdn.microsoft.com/en-us/library/ms178628.aspx
  626. | COMMIT WORK? ';'?
  627. // https://msdn.microsoft.com/en-us/library/ms181299.aspx
  628. | ROLLBACK (TRAN | TRANSACTION) (id | LOCAL_ID)? ';'?
  629. // https://msdn.microsoft.com/en-us/library/ms174973.aspx
  630. | ROLLBACK WORK? ';'?
  631. // https://msdn.microsoft.com/en-us/library/ms188378.aspx
  632. | SAVE (TRAN | TRANSACTION) (id | LOCAL_ID)? ';'?
  633. ;
  634.  
  635. // https://msdn.microsoft.com/en-us/library/ms188037.aspx
  636. go_statement
  637. : GO (count=DECIMAL)?
  638. ;
  639.  
  640. // https://msdn.microsoft.com/en-us/library/ms188366.aspx
  641. use_statement
  642. : USE database=id ';'?
  643. ;
  644.  
  645. dbcc_clause
  646. : DBCC name=simple_id ('(' expression_list ')')? (WITH dbcc_options)? ';'?
  647. ;
  648.  
  649. dbcc_options
  650. : simple_id (',' simple_id)?
  651. ;
  652.  
  653. execute_clause
  654. : EXECUTE AS clause=(CALLER | SELF | OWNER | STRING)
  655. ;
  656.  
  657. declare_local
  658. : LOCAL_ID AS? data_type ('=' expression)?
  659. ;
  660.  
  661. table_type_definition
  662. : TABLE '(' column_def_table_constraints ')'
  663. ;
  664.  
  665. column_def_table_constraints
  666. : column_def_table_constraint (','? column_def_table_constraint)*
  667. ;
  668.  
  669. column_def_table_constraint
  670. : column_definition
  671. | table_constraint
  672. ;
  673.  
  674. // https://msdn.microsoft.com/en-us/library/ms187742.aspx
  675. column_definition
  676. : id (data_type | AS expression) (COLLATE id)? null_notnull?
  677. ((CONSTRAINT constraint=id)? DEFAULT constant_expression (WITH VALUES)?
  678. | IDENTITY ('(' seed=DECIMAL ',' increment=DECIMAL ')')? (NOT FOR REPLICATION)?)?
  679. ROWGUIDCOL?
  680. column_constraint*
  681. ;
  682.  
  683. // https://msdn.microsoft.com/en-us/library/ms186712.aspx
  684. column_constraint
  685. :(CONSTRAINT id)? null_notnull?
  686. ((PRIMARY KEY | UNIQUE) clustered? index_options?
  687. | CHECK (NOT FOR REPLICATION)? '(' search_condition ')')
  688. ;
  689.  
  690. // https://msdn.microsoft.com/en-us/library/ms188066.aspx
  691. table_constraint
  692. : (CONSTRAINT id)?
  693. ((PRIMARY KEY | UNIQUE) clustered? '(' column_name_list (ASC | DESC)? ')' index_options? (ON id)?
  694. | CHECK (NOT FOR REPLICATION)? '(' search_condition ')')
  695. ;
  696.  
  697. index_options
  698. : WITH '(' index_option (',' index_option)* ')'
  699. ;
  700.  
  701. // https://msdn.microsoft.com/en-us/library/ms186869.aspx
  702. // Id runtime checking. Id in (PAD_INDEX, FILLFACTOR, IGNORE_DUP_KEY, STATISTICS_NORECOMPUTE, ALLOW_ROW_LOCKS,
  703. // ALLOW_PAGE_LOCKS, SORT_IN_TEMPDB, ONLINE, MAXDOP, DATA_COMPRESSION, ONLINE).
  704. index_option
  705. : simple_id '=' (simple_id | on_off | DECIMAL)
  706. ;
  707.  
  708. // https://msdn.microsoft.com/en-us/library/ms180169.aspx
  709. declare_cursor
  710. : DECLARE cursor_name
  711. (CURSOR (declare_set_cursor_common (FOR UPDATE (OF column_name_list)?)?)?
  712. | INSENSITIVE? SCROLL? CURSOR FOR select_statement (FOR (READ ONLY | UPDATE | (OF column_name_list)))?
  713. ) ';'?
  714. ;
  715.  
  716. declare_set_cursor_common
  717. : (LOCAL | GLOBAL)?
  718. (FORWARD_ONLY | SCROLL)? (STATIC | KEYSET | DYNAMIC | FAST_FORWARD)?
  719. (READ_ONLY | SCROLL_LOCKS | OPTIMISTIC)? TYPE_WARNING?
  720. FOR select_statement
  721. ;
  722.  
  723. fetch_cursor
  724. : FETCH ((NEXT | PRIOR | FIRST | LAST | (ABSOLUTE | RELATIVE) expression)? FROM)?
  725. GLOBAL? cursor_name (INTO LOCAL_ID (',' LOCAL_ID)*)? ';'?
  726. ;
  727.  
  728. // https://msdn.microsoft.com/en-us/library/ms190356.aspx
  729. // Runtime check.
  730. set_special
  731. : SET id (id | constant_LOCAL_ID | on_off) ';'?
  732. // https://msdn.microsoft.com/en-us/library/ms173763.aspx
  733. | SET TRANSACTION ISOLATION LEVEL
  734. (READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE) ';'?
  735. // https://msdn.microsoft.com/en-us/library/ms188059.aspx
  736. | SET IDENTITY_INSERT table_name on_off ';'?
  737. | SET ANSI_NULLS on_off
  738. | SET QUOTED_IDENTIFIER on_off
  739. | SET ANSI_PADDING on_off
  740. ;
  741.  
  742. constant_LOCAL_ID
  743. : constant
  744. | LOCAL_ID
  745. ;
  746.  
  747. // Expression.
  748.  
  749. // https://msdn.microsoft.com/en-us/library/ms190286.aspx
  750. // Operator precendence: https://msdn.microsoft.com/en-us/library/ms190276.aspx
  751. expression
  752. : DEFAULT #primitive_expression
  753. | NULL #primitive_expression
  754. | LOCAL_ID #primitive_expression
  755. | constant #primitive_expression
  756. | function_call #function_call_expression
  757. | expression COLLATE id #function_call_expression
  758. // https://msdn.microsoft.com/en-us/library/ms181765.aspx
  759. | CASE caseExpr=expression switch_section+ (ELSE elseExpr=expression)? END #case_expression
  760. | CASE switch_search_condition_section+ (ELSE elseExpr=expression)? END #case_expression
  761.  
  762. | full_column_name #column_ref_expression
  763. | '(' expression ')' #bracket_expression
  764. | '(' subquery ')' #subquery_expression
  765. | '~' expression #unary_operator_expression
  766.  
  767. | expression op=('*' | '/' | '%') expression #binary_operator_expression
  768. | op=('+' | '-') expression #unary_operator_expression
  769. | expression op=('+' | '-' | '&' | '^' | '|') expression #binary_operator_expression
  770. | expression comparison_operator expression #binary_operator_expression
  771.  
  772. | over_clause #over_clause_expression
  773. ;
  774.  
  775. constant_expression
  776. : NULL
  777. | constant
  778. // system functions: https://msdn.microsoft.com/en-us/library/ms187786.aspx
  779. | function_call
  780. | LOCAL_ID // TODO: remove.
  781. | '(' constant_expression ')'
  782. ;
  783.  
  784. subquery
  785. : select_statement
  786. ;
  787.  
  788. // https://msdn.microsoft.com/en-us/library/ms175972.aspx
  789. with_expression
  790. : WITH (XMLNAMESPACES ',')? common_table_expression (',' common_table_expression)*
  791. ;
  792.  
  793. common_table_expression
  794. : expression_name=id ('(' column_name_list ')')? AS '(' select_statement ')'
  795. ;
  796.  
  797. update_elem
  798. : (full_column_name | LOCAL_ID) ('=' | assignment_operator) expression
  799. | udt_column_name=id '.' method_name=id '(' expression_list ')'
  800. //| full_column_name '.' WRITE (expression, )
  801. ;
  802.  
  803. // https://msdn.microsoft.com/en-us/library/ms173545.aspx
  804. search_condition_list
  805. : search_condition (',' search_condition)*
  806. ;
  807.  
  808. search_condition
  809. : search_condition_and (OR search_condition_and)*
  810. ;
  811.  
  812. search_condition_and
  813. : search_condition_not (AND search_condition_not)*
  814. ;
  815.  
  816. search_condition_not
  817. : NOT? predicate
  818. ;
  819.  
  820. predicate
  821. : EXISTS '(' subquery ')'
  822. | expression comparison_operator expression
  823. | expression comparison_operator (ALL | SOME | ANY) '(' subquery ')'
  824. | expression NOT? BETWEEN expression AND expression
  825. | expression NOT? IN '(' (subquery | expression_list) ')'
  826. | expression NOT? LIKE expression (ESCAPE expression)?
  827. | expression IS null_notnull
  828. | '(' search_condition ')'
  829. ;
  830.  
  831. query_expression
  832. : (query_specification | '(' query_expression ')') union*
  833. ;
  834.  
  835. union
  836. : (UNION ALL? | EXCEPT | INTERSECT) (query_specification | ('(' query_expression ')'))
  837. ;
  838.  
  839. // https://msdn.microsoft.com/en-us/library/ms176104.aspx
  840. query_specification
  841. : SELECT (ALL | DISTINCT)? top_clause?
  842. select_list
  843. // https://msdn.microsoft.com/en-us/library/ms188029.aspx
  844. (INTO table_name)?
  845. (FROM table_sources)?
  846. (WHERE where=search_condition)?
  847. // https://msdn.microsoft.com/en-us/library/ms177673.aspx
  848. (GROUP BY group_by_item (',' group_by_item)*)?
  849. (HAVING having=search_condition)?
  850. ;
  851.  
  852. // https://msdn.microsoft.com/en-us/library/ms189463.aspx
  853. top_clause
  854. : TOP (top_percent | top_count) (WITH TIES)?
  855. ;
  856.  
  857. top_percent
  858. : (REAL | FLOAT) PERCENT
  859. | '(' expression ')' PERCENT
  860. ;
  861.  
  862. top_count
  863. : DECIMAL
  864. | '(' expression ')'
  865. ;
  866.  
  867. // https://msdn.microsoft.com/en-us/library/ms188385.aspx
  868. order_by_clause
  869. : ORDER BY order_by_expression (',' order_by_expression)*
  870. (OFFSET expression (ROW | ROWS) (FETCH (FIRST | NEXT) expression (ROW | ROWS) ONLY)?)?
  871. ;
  872.  
  873. // https://msdn.microsoft.com/en-us/library/ms173812.aspx
  874. for_clause
  875. : FOR BROWSE
  876. | FOR XML AUTO xml_common_directives?
  877. | FOR XML PATH ('(' STRING ')')? xml_common_directives?
  878. ;
  879.  
  880. xml_common_directives
  881. : ',' (BINARY BASE64 | TYPE | ROOT)
  882. ;
  883.  
  884. order_by_expression
  885. : expression (ASC | DESC)?
  886. ;
  887.  
  888. group_by_item
  889. : expression
  890. /*| rollup_spec
  891. | cube_spec
  892. | grouping_sets_spec
  893. | grand_total*/
  894. ;
  895.  
  896. option_clause
  897. // https://msdn.microsoft.com/en-us/library/ms181714.aspx
  898. : OPTION '(' option (',' option)* ')'
  899. ;
  900.  
  901. option
  902. : FAST number_rows=DECIMAL
  903. | (HASH | ORDER) GROUP
  904. | (MERGE | HASH | CONCAT) UNION
  905. | (LOOP | MERGE | HASH) JOIN
  906. | EXPAND VIEWS
  907. | FORCE ORDER
  908. | IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
  909. | KEEP PLAN
  910. | KEEPFIXED PLAN
  911. | MAXDOP number_of_processors=DECIMAL
  912. | MAXRECURSION number_recursion=DECIMAL
  913. | OPTIMIZE FOR '(' optimize_for_arg (',' optimize_for_arg)* ')'
  914. | OPTIMIZE FOR UNKNOWN
  915. | PARAMETERIZATION (SIMPLE | FORCED)
  916. | RECOMPILE
  917. | ROBUST PLAN
  918. | USE PLAN STRING
  919. ;
  920.  
  921. optimize_for_arg
  922. : LOCAL_ID (UNKNOWN | '=' constant)
  923. ;
  924.  
  925. // https://msdn.microsoft.com/en-us/library/ms176104.aspx
  926. select_list
  927. : select_list_elem (',' select_list_elem)*
  928. ;
  929.  
  930. select_list_elem
  931. : (table_name '.')? ('*' | '$' (IDENTITY | ROWGUID))
  932. | column_alias '=' expression
  933. | expression (AS? column_alias)?
  934. ;
  935.  
  936. table_sources
  937. : table_source (',' table_source)*
  938. ;
  939.  
  940. // https://msdn.microsoft.com/en-us/library/ms177634.aspx
  941. table_source
  942. : table_source_item_joined
  943. | '(' table_source_item_joined ')'
  944. ;
  945.  
  946. table_source_item_joined
  947. : table_source_item join_part*
  948. ;
  949.  
  950. table_source_item
  951. : table_name_with_hint as_table_alias?
  952. | rowset_function as_table_alias?
  953. | derived_table (as_table_alias column_alias_list?)?
  954. | change_table as_table_alias
  955. | function_call as_table_alias?
  956. | LOCAL_ID as_table_alias?
  957. | LOCAL_ID '.' function_call (as_table_alias column_alias_list?)?
  958. ;
  959.  
  960. change_table
  961. : CHANGETABLE '(' CHANGES table_name ',' (NULL | DECIMAL | LOCAL_ID) ')'
  962. ;
  963.  
  964. // https://msdn.microsoft.com/en-us/library/ms191472.aspx
  965. join_part
  966. // https://msdn.microsoft.com/en-us/library/ms173815(v=sql.120).aspx
  967. : (INNER? |
  968. join_type=(LEFT | RIGHT | FULL) OUTER?) (join_hint=(LOOP | HASH | MERGE | REMOTE))?
  969. JOIN table_source ON search_condition
  970. | CROSS JOIN table_source
  971. | CROSS APPLY table_source
  972. | OUTER APPLY table_source
  973. ;
  974.  
  975. table_name_with_hint
  976. : table_name with_table_hints?
  977. ;
  978.  
  979. // https://msdn.microsoft.com/en-us/library/ms190312.aspx
  980. rowset_function
  981. : (
  982. OPENROWSET LR_BRACKET provider_name = STRING COMMA connectionString = STRING COMMA sql = STRING RR_BRACKET
  983. )
  984. | ( OPENROWSET '(' BULK data_file=STRING ',' (bulk_option (',' bulk_option)* | id)')' )
  985. ;
  986.  
  987. // runtime check.
  988. bulk_option
  989. : id '=' bulk_option_value=(DECIMAL | STRING)
  990. ;
  991.  
  992. derived_table
  993. : subquery
  994. | '(' subquery ')'
  995. ;
  996.  
  997. function_call
  998. : ranking_windowed_function
  999. | aggregate_windowed_function
  1000. | scalar_function_name '(' expression_list? ')'
  1001. // https://msdn.microsoft.com/en-us/library/ms173784.aspx
  1002. | BINARY_CHECKSUM '(' '*' ')'
  1003. // https://msdn.microsoft.com/en-us/library/hh231076.aspx
  1004. // https://msdn.microsoft.com/en-us/library/ms187928.aspx
  1005. | CAST '(' expression AS data_type ')'
  1006. | CONVERT '(' data_type ',' expression (',' style=expression)? ')'
  1007. // https://msdn.microsoft.com/en-us/library/ms189788.aspx
  1008. | CHECKSUM '(' '*' ')'
  1009. // https://msdn.microsoft.com/en-us/library/ms190349.aspx
  1010. | COALESCE '(' expression_list ')'
  1011. // https://msdn.microsoft.com/en-us/library/ms188751.aspx
  1012. | CURRENT_TIMESTAMP
  1013. // https://msdn.microsoft.com/en-us/library/ms176050.aspx
  1014. | CURRENT_USER
  1015. // https://msdn.microsoft.com/en-us/library/ms186819.aspx
  1016. | DATEADD '(' ID ',' expression ',' expression ')'
  1017. // https://msdn.microsoft.com/en-us/library/ms189794.aspx
  1018. | DATEDIFF '(' ID ',' expression ',' expression ')'
  1019. // https://msdn.microsoft.com/en-us/library/ms174395.aspx
  1020. | DATENAME '(' ID ',' expression ')'
  1021. // https://msdn.microsoft.com/en-us/library/ms174420.aspx
  1022. | DATEPART '(' ID ',' expression ')'
  1023. // https://msdn.microsoft.com/en-us/library/ms189838.aspx
  1024. | IDENTITY '(' data_type (',' seed=DECIMAL)? (',' increment=DECIMAL)? ')'
  1025. // https://msdn.microsoft.com/en-us/library/bb839514.aspx
  1026. | MIN_ACTIVE_ROWVERSION
  1027. // https://msdn.microsoft.com/en-us/library/ms177562.aspx
  1028. | NULLIF '(' expression ',' expression ')'
  1029. // https://msdn.microsoft.com/en-us/library/ms177587.aspx
  1030. | SESSION_USER
  1031. // https://msdn.microsoft.com/en-us/library/ms179930.aspx
  1032. | SYSTEM_USER
  1033. ;
  1034.  
  1035. switch_section
  1036. : WHEN expression THEN expression
  1037. ;
  1038.  
  1039. switch_search_condition_section
  1040. : WHEN search_condition THEN expression
  1041. ;
  1042.  
  1043. as_table_alias
  1044. : AS? table_alias
  1045. ;
  1046.  
  1047. table_alias
  1048. : id with_table_hints?
  1049. ;
  1050.  
  1051. // https://msdn.microsoft.com/en-us/library/ms187373.aspx
  1052. with_table_hints
  1053. : WITH? '(' table_hint (',' table_hint)* ')'
  1054. ;
  1055.  
  1056. // https://msdn.microsoft.com/en-us/library/ms187373.aspx
  1057. insert_with_table_hints
  1058. : WITH '(' table_hint (',' table_hint)* ')'
  1059. ;
  1060.  
  1061. // Id runtime check. Id can be (FORCESCAN, HOLDLOCK, NOLOCK, NOWAIT, PAGLOCK, READCOMMITTED,
  1062. // READCOMMITTEDLOCK, READPAST, READUNCOMMITTED, REPEATABLEREAD, ROWLOCK, TABLOCK, TABLOCKX
  1063. // UPDLOCK, XLOCK)
  1064. table_hint
  1065. : NOEXPAND? ( INDEX '(' index_value (',' index_value)* ')'
  1066. | INDEX '=' index_value
  1067. | FORCESEEK ('(' index_value '(' ID (',' ID)* ')' ')')?
  1068. | SERIALIZABLE
  1069. | SNAPSHOT
  1070. | SPATIAL_WINDOW_MAX_CELLS '=' DECIMAL
  1071. | ID)?
  1072. ;
  1073.  
  1074. index_value
  1075. : id | DECIMAL
  1076. ;
  1077.  
  1078. column_alias_list
  1079. : '(' column_alias (',' column_alias)* ')'
  1080. ;
  1081.  
  1082. column_alias
  1083. : id
  1084. | STRING
  1085. ;
  1086.  
  1087. table_value_constructor
  1088. : VALUES '(' expression_list ')' (',' '(' expression_list ')')*
  1089. ;
  1090.  
  1091. expression_list
  1092. : expression (',' expression)*
  1093. ;
  1094.  
  1095. // https://msdn.microsoft.com/en-us/library/ms189798.aspx
  1096. ranking_windowed_function
  1097. : (RANK | DENSE_RANK | ROW_NUMBER) '(' ')' over_clause
  1098. | NTILE '(' expression ')' over_clause
  1099. ;
  1100.  
  1101. // https://msdn.microsoft.com/en-us/library/ms173454.aspx
  1102. aggregate_windowed_function
  1103. : (AVG | MAX | MIN | SUM | STDEV | STDEVP | VAR | VARP)
  1104. '(' all_distinct_expression ')' over_clause?
  1105. | (COUNT | COUNT_BIG)
  1106. '(' ('*' | all_distinct_expression) ')' over_clause?
  1107. | CHECKSUM_AGG '(' all_distinct_expression ')'
  1108. | GROUPING '(' expression ')'
  1109. | GROUPING_ID '(' expression_list ')'
  1110. ;
  1111.  
  1112. all_distinct_expression
  1113. : (ALL | DISTINCT)? expression
  1114. ;
  1115.  
  1116. // https://msdn.microsoft.com/en-us/library/ms189461.aspx
  1117. over_clause
  1118. : OVER '(' (PARTITION BY expression_list)? order_by_clause? row_or_range_clause? ')'
  1119. ;
  1120.  
  1121. row_or_range_clause
  1122. : (ROWS | RANGE) window_frame_extent
  1123. ;
  1124.  
  1125. window_frame_extent
  1126. : window_frame_preceding
  1127. | BETWEEN window_frame_bound AND window_frame_bound
  1128. ;
  1129.  
  1130. window_frame_bound
  1131. : window_frame_preceding
  1132. | window_frame_following
  1133. ;
  1134.  
  1135. window_frame_preceding
  1136. : UNBOUNDED PRECEDING
  1137. | DECIMAL PRECEDING
  1138. | CURRENT ROW
  1139. ;
  1140.  
  1141. window_frame_following
  1142. : UNBOUNDED FOLLOWING
  1143. | DECIMAL FOLLOWING
  1144. ;
  1145.  
  1146. create_database_option:
  1147. FILESTREAM ( database_filestream_option (',' database_filestream_option)* )
  1148. | DEFAULT_LANGUAGE EQUAL ( id | STRING )
  1149. | DEFAULT_FULLTEXT_LANGUAGE EQUAL ( id | STRING )
  1150. | NESTED_TRIGGERS EQUAL ( OFF | ON )
  1151. | TRANSFORM_NOISE_WORDS EQUAL ( OFF | ON )
  1152. | TWO_DIGIT_YEAR_CUTOFF EQUAL DECIMAL
  1153. | DB_CHAINING ( OFF | ON )
  1154. | TRUSTWORTHY ( OFF | ON )
  1155. ;
  1156.  
  1157. database_filestream_option:
  1158. LR_BRACKET
  1159. (
  1160. ( NON_TRANSACTED_ACCESS EQUAL ( OFF | READ_ONLY | FULL ) )
  1161. |
  1162. ( DIRECTORY_NAME EQUAL STRING )
  1163. )
  1164. RR_BRACKET
  1165. ;
  1166.  
  1167. database_file_spec:
  1168. file_group | file_spec;
  1169.  
  1170. file_group:
  1171. FILEGROUP id
  1172. ( CONTAINS FILESTREAM )?
  1173. ( DEFAULT )?
  1174. ( CONTAINS MEMORY_OPTIMIZED_DATA )?
  1175. file_spec ( ',' file_spec )*
  1176. ;
  1177. file_spec
  1178. : LR_BRACKET
  1179. NAME EQUAL ( id | STRING ) ','?
  1180. FILENAME EQUAL file = STRING ','?
  1181. ( SIZE EQUAL file_size ','? )?
  1182. ( MAXSIZE EQUAL (file_size | UNLIMITED )','? )?
  1183. ( FILEGROWTH EQUAL file_size ','? )?
  1184. RR_BRACKET
  1185. ;
  1186.  
  1187. // Primitive.
  1188.  
  1189. full_table_name
  1190. : (server=id '.' database=id '.' schema=id '.'
  1191. | database=id '.' (schema=id)? '.'
  1192. | schema=id '.')? table=id
  1193. ;
  1194.  
  1195. table_name
  1196. : (database=id '.' (schema=id)? '.' | schema=id '.')? table=id
  1197. ;
  1198.  
  1199. simple_name
  1200. : (schema=id '.')? name=id
  1201. ;
  1202.  
  1203. func_proc_name
  1204. : (database=id '.' (schema=id)? '.' | (schema=id) '.')? procedure=id
  1205. ;
  1206.  
  1207. ddl_object
  1208. : full_table_name
  1209. | LOCAL_ID
  1210. ;
  1211.  
  1212. full_column_name
  1213. : (table_name '.')? id
  1214. ;
  1215.  
  1216. column_name_list
  1217. : id (',' id)*
  1218. ;
  1219.  
  1220. cursor_name
  1221. : id
  1222. | LOCAL_ID
  1223. ;
  1224.  
  1225. on_off
  1226. : ON
  1227. | OFF
  1228. ;
  1229.  
  1230. clustered
  1231. : CLUSTERED
  1232. | NONCLUSTERED
  1233. ;
  1234.  
  1235. null_notnull
  1236. : NOT? NULL
  1237. ;
  1238.  
  1239. scalar_function_name
  1240. : func_proc_name
  1241. | RIGHT
  1242. | LEFT
  1243. | BINARY_CHECKSUM
  1244. | CHECKSUM
  1245. ;
  1246.  
  1247. // https://msdn.microsoft.com/en-us/library/ms187752.aspx
  1248. // TODO: implement runtime check or add new tokens.
  1249. data_type
  1250. /*: BIGINT
  1251. | BINARY '(' DECIMAL ')'
  1252. | BIT
  1253. | CHAR '(' DECIMAL ')'
  1254. | DATE
  1255. | DATETIME
  1256. | DATETIME2
  1257. | DATETIMEOFFSET '(' DECIMAL ')'
  1258. | DECIMAL '(' DECIMAL ',' DECIMAL ')'
  1259. | FLOAT
  1260. | GEOGRAPHY
  1261. | GEOMETRY
  1262. | HIERARCHYID
  1263. | IMAGE
  1264. | INT
  1265. | MONEY
  1266. | NCHAR '(' DECIMAL ')'
  1267. | NTEXT
  1268. | NUMERIC '(' DECIMAL ',' DECIMAL ')'
  1269. | NVARCHAR '(' DECIMAL | MAX ')'
  1270. | REAL
  1271. | SMALLDATETIME
  1272. | SMALLINT
  1273. | SMALLMONEY
  1274. | SQL_VARIANT
  1275. | TEXT
  1276. | TIME '(' DECIMAL ')'
  1277. | TIMESTAMP
  1278. | TINYINT
  1279. | UNIQUEIDENTIFIER
  1280. | VARBINARY '(' DECIMAL | MAX ')'
  1281. | VARCHAR '(' DECIMAL | MAX ')'
  1282. | XML*/
  1283. : id IDENTITY? ('(' (DECIMAL | MAX) (',' DECIMAL)? ')')?
  1284. ;
  1285.  
  1286. default_value
  1287. : NULL
  1288. | constant
  1289. ;
  1290.  
  1291. // https://msdn.microsoft.com/en-us/library/ms179899.aspx
  1292. constant
  1293. : STRING // string, datetime or uniqueidentifier
  1294. | BINARY
  1295. | sign? DECIMAL
  1296. | sign? (REAL | FLOAT) // float or decimal
  1297. | sign? dollar='$' (DECIMAL | FLOAT) // money
  1298. ;
  1299.  
  1300. sign
  1301. : '+'
  1302. | '-'
  1303. ;
  1304.  
  1305. // https://msdn.microsoft.com/en-us/library/ms175874.aspx
  1306. id
  1307. : simple_id
  1308. | DOUBLE_QUOTE_ID
  1309. | SQUARE_BRACKET_ID
  1310. ;
  1311.  
  1312. simple_id
  1313. : ID
  1314. | ABSOLUTE
  1315. | APPLY
  1316. | AUTO
  1317. | AVG
  1318. | BASE64
  1319. | CALLED
  1320. | CALLER
  1321. | CAST
  1322. | CATCH
  1323. | CHECKSUM_AGG
  1324. | COMMITTED
  1325. | CONCAT
  1326. | CONTROL
  1327. | COOKIE
  1328. | COUNT
  1329. | COUNT_BIG
  1330. | DELAY
  1331. | DELETED
  1332. | DENSE_RANK
  1333. | DISABLE
  1334. | DYNAMIC
  1335. | ENCRYPTION
  1336. | EXPAND
  1337. | FAST
  1338. | FAST_FORWARD
  1339. | FIRST
  1340. | FOLLOWING
  1341. | FORCE
  1342. | FORCESEEK
  1343. | FORWARD_ONLY
  1344. | FULLSCAN
  1345. | GLOBAL
  1346. | GO
  1347. | GROUPING
  1348. | GROUPING_ID
  1349. | HASH
  1350. | IMPERSONATE
  1351. | INSENSITIVE
  1352. | INSERTED
  1353. | ISOLATION
  1354. | KEEP
  1355. | KEEPFIXED
  1356. | FORCED
  1357. | KEYSET
  1358. | IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
  1359. | INPUT
  1360. | LAST
  1361. | LEVEL
  1362. | LOCAL
  1363. | LOCK_ESCALATION
  1364. | LOGIN
  1365. | LOOP
  1366. | MARK
  1367. | MAX
  1368. | MAXDOP
  1369. | MAXRECURSION
  1370. | MIN
  1371. | MODIFY
  1372. | NAME
  1373. | NEXT
  1374. | NOCOUNT
  1375. | NOEXPAND
  1376. | NORECOMPUTE
  1377. | NTILE
  1378. | NUMBER
  1379. | OFFSET
  1380. | ONLINE
  1381. | ONLY
  1382. | OPTIMISTIC
  1383. | OPTIMIZE
  1384. | OUT
  1385. | OUTPUT
  1386. | OWNER
  1387. | PARAMETERIZATION
  1388. | PARTITION
  1389. | PATH
  1390. | PRECEDING
  1391. | PRIOR
  1392. | PRIVILEGES
  1393. | RANGE
  1394. | RANK
  1395. | READONLY
  1396. | READ_ONLY
  1397. | RECOMPILE
  1398. | RELATIVE
  1399. | REMOTE
  1400. | REPEATABLE
  1401. | RETURN
  1402. | RETURNS
  1403. | ROBUST
  1404. | ROOT
  1405. | ROW
  1406. | ROWGUID
  1407. | ROWS
  1408. | ROW_NUMBER
  1409. | SAMPLE
  1410. | SIZE
  1411. | SCHEMABINDING
  1412. | SCROLL
  1413. | SCROLL_LOCKS
  1414. | SELF
  1415. | SERIALIZABLE
  1416. | SIMPLE
  1417. | SNAPSHOT
  1418. | SPATIAL_WINDOW_MAX_CELLS
  1419. | STATIC
  1420. | STATS_STREAM
  1421. | STDEV
  1422. | STDEVP
  1423. | SUM
  1424. | TEXTIMAGE_ON
  1425. | THROW
  1426. | TIES
  1427. | TIME
  1428. | TRY
  1429. | TYPE
  1430. | TYPE_WARNING
  1431. | UNBOUNDED
  1432. | UNCOMMITTED
  1433. | UNKNOWN
  1434. | USING
  1435. | VAR
  1436. | VARP
  1437. | VIEW_METADATA
  1438. | VIEWS
  1439. | WORK
  1440. | XML
  1441. | XMLNAMESPACES
  1442. ;
  1443.  
  1444. // https://msdn.microsoft.com/en-us/library/ms188074.aspx
  1445. // Spaces are allowed for comparison operators.
  1446. comparison_operator
  1447. : '=' | '>' | '<' | '<' '=' | '>' '=' | '<' '>' | '!' '=' | '!' '>' | '!' '<'
  1448. ;
  1449.  
  1450. assignment_operator
  1451. : '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '^=' | '|='
  1452. ;
  1453.  
  1454. file_size:
  1455. DECIMAL( KB | MB | GB | TB | '%' )?
  1456. ;
  1457.  
  1458. // Lexer
  1459.  
  1460. // Basic keywords (from https://msdn.microsoft.com/en-us/library/ms189822.aspx)
  1461. ADD: A D D;
  1462. ALL: A L L;
  1463. ALTER: A L T E R;
  1464. AND: A N D;
  1465. ANY: A N Y;
  1466. AS: A S;
  1467. ASC: A S C;
  1468. AUTHORIZATION: A U T H O R I Z A T I O N;
  1469. BACKUP: B A C K U P;
  1470. BEGIN: B E G I N;
  1471. BETWEEN: B E T W E E N;
  1472. BREAK: B R E A K;
  1473. BROWSE: B R O W S E;
  1474. BULK: B U L K;
  1475. BY: B Y;
  1476. CALLED: C A L L E D;
  1477. CASCADE: C A S C A D E;
  1478. CASE: C A S E;
  1479. CHANGETABLE: C H A N G E T A B L E;
  1480. CHANGES: C H A N G E S;
  1481. CHECK: C H E C K;
  1482. CHECKPOINT: C H E C K P O I N T;
  1483. CLOSE: C L O S E;
  1484. CLUSTERED: C L U S T E R E D;
  1485. COALESCE: C O A L E S C E;
  1486. COLLATE: C O L L A T E;
  1487. COLUMN: C O L U M N;
  1488. COMMIT: C O M M I T;
  1489. COMPUTE: C O M P U T E;
  1490. CONSTRAINT: C O N S T R A I N T;
  1491. CONTAINMENT: C O N T A I N M E N T;
  1492. CONTAINS: C O N T A I N S;
  1493. CONTAINSTABLE: C O N T A I N S T A B L E;
  1494. CONTINUE: C O N T I N U E;
  1495. CONVERT: C O N V E R T;
  1496. CREATE: C R E A T E;
  1497. CROSS: C R O S S;
  1498. CURRENT: C U R R E N T;
  1499. CURRENT_DATE: C U R R E N T '_' D A T E;
  1500. CURRENT_TIME: C U R R E N T '_' T I M E;
  1501. CURRENT_TIMESTAMP: C U R R E N T '_' T I M E S T A M P;
  1502. CURRENT_USER: C U R R E N T '_' U S E R;
  1503. CURSOR: C U R S O R;
  1504. DATABASE: D A T A B A S E;
  1505. DBCC: D B C C;
  1506. DEALLOCATE: D E A L L O C A T E;
  1507. DECLARE: D E C L A R E;
  1508. DEFAULT: D E F A U L T;
  1509. DELETE: D E L E T E;
  1510. DENY: D E N Y;
  1511. DESC: D E S C;
  1512. DISK: D I S K;
  1513. DISTINCT: D I S T I N C T;
  1514. DISTRIBUTED: D I S T R I B U T E D;
  1515. DOUBLE: D O U B L E;
  1516. DROP: D R O P;
  1517. DUMP: D U M P;
  1518. ELSE: E L S E;
  1519. END: E N D;
  1520. ERRLVL: E R R L V L;
  1521. ESCAPE: E S C A P E;
  1522. EXCEPT: E X C E P T;
  1523. EXECUTE: E X E C (U T E)?;
  1524. EXISTS: E X I S T S;
  1525. EXIT: E X I T;
  1526. EXTERNAL: E X T E R N A L;
  1527. FETCH: F E T C H;
  1528. FILE: F I L E;
  1529. FILENAME: F I L E N A M E;
  1530. FILLFACTOR: F I L L F A C T O R;
  1531. FOR: F O R;
  1532. FORCESEEK: F O R C E S E E K;
  1533. FOREIGN: F O R E I G N;
  1534. FREETEXT: F R E E T E X T;
  1535. FREETEXTTABLE: F R E E T E X T T A B L E;
  1536. FROM: F R O M;
  1537. FULL: F U L L;
  1538. FUNCTION: F U N C T I O N;
  1539. GOTO: G O T O;
  1540. GRANT: G R A N T;
  1541. GROUP: G R O U P;
  1542. HAVING: H A V I N G;
  1543. IDENTITY: I D E N T I T Y;
  1544. IDENTITYCOL: I D E N T I T Y C O L;
  1545. IDENTITY_INSERT: I D E N T I T Y '_' I N S E R T;
  1546. IF: I F;
  1547. IN: I N;
  1548. INDEX: I N D E X;
  1549. INNER: I N N E R;
  1550. INSERT: I N S E R T;
  1551. INTERSECT: I N T E R S E C T;
  1552. INTO: I N T O;
  1553. IS: I S;
  1554. JOIN: J O I N;
  1555. KEY: K E Y;
  1556. KILL: K I L L;
  1557. LEFT: L E F T;
  1558. LIKE: L I K E;
  1559. LINENO: L I N E N O;
  1560. LOAD: L O A D;
  1561. LOG: L O G;
  1562. MERGE: M E R G E;
  1563. NATIONAL: N A T I O N A L;
  1564. NOCHECK: N O C H E C K;
  1565. NONCLUSTERED: N O N C L U S T E R E D;
  1566. NONE: N O N E;
  1567. NOT: N O T;
  1568. NULL: N U L L;
  1569. NULLIF: N U L L I F;
  1570. OF: O F;
  1571. OFF: O F F;
  1572. OFFSETS: O F F S E T S;
  1573. ON: O N;
  1574. OPEN: O P E N;
  1575. OPENDATASOURCE: O P E N D A T A S O U R C E;
  1576. OPENQUERY: O P E N Q U E R Y;
  1577. OPENROWSET: O P E N R O W S E T;
  1578. OPENXML: O P E N X M L;
  1579. OPTION: O P T I O N;
  1580. OR: O R;
  1581. ORDER: O R D E R;
  1582. OUTER: O U T E R;
  1583. OVER: O V E R;
  1584. PARTIAL: P A R T I A L;
  1585. PERCENT: P E R C E N T;
  1586. PIVOT: P I V O T;
  1587. PLAN: P L A N;
  1588. PRECISION: P R E C I S I O N;
  1589. PRIMARY: P R I M A R Y;
  1590. PRINT: P R I N T;
  1591. PROC: P R O C;
  1592. PROCEDURE: P R O C E D U R E;
  1593. PUBLIC: P U B L I C;
  1594. RAISERROR: R A I S E R R O R;
  1595. READ: R E A D;
  1596. READTEXT: R E A D T E X T;
  1597. RECONFIGURE: R E C O N F I G U R E;
  1598. REFERENCES: R E F E R E N C E S;
  1599. REPLICATION: R E P L I C A T I O N;
  1600. RESTORE: R E S T O R E;
  1601. RESTRICT: R E S T R I C T;
  1602. RETURN: R E T U R N;
  1603. RETURNS: R E T U R N S;
  1604. REVERT: R E V E R T;
  1605. REVOKE: R E V O K E;
  1606. RIGHT: R I G H T;
  1607. ROLLBACK: R O L L B A C K;
  1608. ROWCOUNT: R O W C O U N T;
  1609. ROWGUIDCOL: R O W G U I D C O L;
  1610. RULE: R U L E;
  1611. SAVE: S A V E;
  1612. SCHEMA: S C H E M A;
  1613. SECURITYAUDIT: S E C U R I T Y A U D I T;
  1614. SELECT: S E L E C T;
  1615. SEMANTICKEYPHRASETABLE: S E M A N T I C K E Y P H R A S E T A B L E;
  1616. SEMANTICSIMILARITYDETAILSTABLE: S E M A N T I C S I M I L A R I T Y D E T A I L S T A B L E;
  1617. SEMANTICSIMILARITYTABLE: S E M A N T I C S I M I L A R I T Y T A B L E;
  1618. SESSION_USER: S E S S I O N '_' U S E R;
  1619. SET: S E T;
  1620. SETUSER: S E T U S E R;
  1621. SHUTDOWN: S H U T D O W N;
  1622. SOME: S O M E;
  1623. STATISTICS: S T A T I S T I C S;
  1624. SYSTEM_USER: S Y S T E M '_' U S E R;
  1625. TABLE: T A B L E;
  1626. TABLESAMPLE: T A B L E S A M P L E;
  1627. TEXTSIZE: T E X T S I Z E;
  1628. THEN: T H E N;
  1629. TO: T O;
  1630. TOP: T O P;
  1631. TRAN: T R A N;
  1632. TRANSACTION: T R A N S A C T I O N;
  1633. TRIGGER: T R I G G E R;
  1634. TRUNCATE: T R U N C A T E;
  1635. TRY_CONVERT: T R Y '_' C O N V E R T;
  1636. TSEQUAL: T S E Q U A L;
  1637. UNION: U N I O N;
  1638. UNIQUE: U N I Q U E;
  1639. UNPIVOT: U N P I V O T;
  1640. UPDATE: U P D A T E;
  1641. UPDATETEXT: U P D A T E T E X T;
  1642. USE: U S E;
  1643. USER: U S E R;
  1644. VALUES: V A L U E S;
  1645. VARYING: V A R Y I N G;
  1646. VIEW: V I E W;
  1647. WAITFOR: W A I T F O R;
  1648. WHEN: W H E N;
  1649. WHERE: W H E R E;
  1650. WHILE: W H I L E;
  1651. WITH: W I T H;
  1652. WITHIN: W I T H I N;
  1653. WRITETEXT: W R I T E T E X T;
  1654.  
  1655. // Additional keywords (they can be id).
  1656. ABSOLUTE: A B S O L U T E;
  1657. AFTER: A F T E R;
  1658. ALLOWED: A L L O W E D;
  1659. ALLOW_SNAPSHOT_ISOLATION: A L L O W '_' S N A P S H O T '_' I S O L A T I O N;
  1660. ANSI_NULLS: A N S I '_' N U L L S;
  1661. ANSI_NULL_DEFAULT: A N S I '_' N U L L '_' D E F A U L T;
  1662. ANSI_PADDING: A N S I '_' P A D D I N G;
  1663. ANSI_WARNINGS: A N S I '_' W A R N I N G S;
  1664. APPLY: A P P L Y;
  1665. ARITHABORT: A R I T H A B O R T;
  1666. AUTO: A U T O;
  1667. AUTO_CLEANUP: A U T O '_' C L E A N U P;
  1668. AUTO_CLOSE: A U T O '_' C L O S E;
  1669. AUTO_CREATE_STATISTICS: A U T O '_' C R E A T E '_' S T A T I S T I C S;
  1670. AUTO_SHRINK: A U T O '_' S H R I N K;
  1671. AUTO_UPDATE_STATISTICS: A U T O '_' U P D A T E '_' S T A T I S T I C S;
  1672. AUTO_UPDATE_STATISTICS_ASYNC: A U T O '_' U P D A T E '_' S T A T I S T I C S '_' A S Y N C;
  1673. AVG: A V G;
  1674. BASE64: B A S E '64';
  1675. BINARY_CHECKSUM: B I N A R Y '_' C H E C K S U M;
  1676. BULK_LOGGED: B U L K '_' L O G G E D;
  1677. CALLER: C A L L E R;
  1678. CAST: C A S T;
  1679. CATCH: C A T C H;
  1680. CHANGE_RETENTION: C H A N G E '_' R E T E N T I O N;
  1681. CHANGE_TRACKING: C H A N G E '_' T R A C K I N G;
  1682. CHECKSUM: C H E C K S U M;
  1683. CHECKSUM_AGG: C H E C K S U M '_' A G G;
  1684. COMMITTED: C O M M I T T E D;
  1685. COMPATIBILITY_LEVEL: C O M P A T I B I L I T Y '_' L E V E L;
  1686. CONCAT: C O N C A T;
  1687. CONCAT_NULL_YIELDS_NULL: C O N C A T '_' N U L L '_' Y I E L D S '_' N U L L;
  1688. CONTROL: C O N T R O L;
  1689. COOKIE: C O O K I E;
  1690. COUNT: C O U N T;
  1691. COUNT_BIG: C O U N T '_' B I G;
  1692. CURSOR_CLOSE_ON_COMMIT: C U R S O R '_' C L O S E '_' O N '_' C O M M I T;
  1693. CURSOR_DEFAULT: C U R S O R '_' D E F A U L T;
  1694. DATEADD: D A T E A D D;
  1695. DATEDIFF: D A T E D I F F;
  1696. DATENAME: D A T E N A M E;
  1697. DATEPART: D A T E P A R T;
  1698. DATE_CORRELATION_OPTIMIZATION: D A T E '_' C O R R E L A T I O N '_' O P T I M I Z A T I O N;
  1699. DAYS: D A Y S;
  1700. DB_CHAINING: D B '_' C H A I N I N G;
  1701. DEFAULT_FULLTEXT_LANGUAGE: D E F A U L T '_' F U L L T E X T '_' L A N G U A G E;
  1702. DEFAULT_LANGUAGE: D E F A U L T '_' L A N G U A G E;
  1703. DELAY: D E L A Y;
  1704. DELAYED_DURABILITY: D E L A Y E D '_' D U R A B I L I T Y;
  1705. DELETED: D E L E T E D;
  1706. DENSE_RANK: D E N S E '_' R A N K;
  1707. DIRECTORY_NAME: D I R E C T O R Y '_' N A M E;
  1708. DISABLE: D I S A B L E;
  1709. DISABLED: D I S A B L E D;
  1710. DISABLE_BROKER: D I S A B L E '_' B R O K E R;
  1711. DYNAMIC: D Y N A M I C;
  1712. EMERGENCY: E M E R G E N C Y;
  1713. ENABLE_BROKER: E N A B L E '_' B R O K E R;
  1714. ENCRYPTION: E N C R Y P T I O N;
  1715. ERROR_BROKER_CONVERSATIONS: E R R O R '_' B R O K E R '_' C O N V E R S A T I O N S;
  1716. EXPAND: E X P A N D;
  1717. FAST: F A S T;
  1718. FAST_FORWARD: F A S T '_' F O R W A R D;
  1719. FILEGROUP: F I L E G R O U P;
  1720. FILEGROWTH: F I L E G R O W T H;
  1721. FILESTREAM: F I L E S T R E A M;
  1722. FIRST: F I R S T;
  1723. FOLLOWING: F O L L O W I N G;
  1724. FORCE: F O R C E;
  1725. FORCED: F O R C E D;
  1726. FORWARD_ONLY: F O R W A R D '_' O N L Y;
  1727. FULLSCAN: F U L L S C A N;
  1728. GB: G B;
  1729. GLOBAL: G L O B A L;
  1730. GO: G O;
  1731. GROUPING: G R O U P I N G;
  1732. GROUPING_ID: G R O U P I N G '_' I D;
  1733. HADR: H A D R;
  1734. HASH: H A S H;
  1735. HONOR_BROKER_PRIORITY: H O N O R '_' B R O K E R '_' P R I O R I T Y;
  1736. HOURS: H O U R S;
  1737. IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX: I G N O R E '_' N O N C L U S T E R E D '_' C O L U M N S T O R E '_' I N D E X;
  1738. IMMEDIATE: I M M E D I A T E;
  1739. IMPERSONATE: I M P E R S O N A T E;
  1740. INCREMENTAL: I N C R E M E N T A L;
  1741. INPUT: I N P U T;
  1742. INSENSITIVE: I N S E N S I T I V E;
  1743. INSERTED: I N S E R T E D;
  1744. ISOLATION: I S O L A T I O N;
  1745. KB: K B;
  1746. KEEP: K E E P;
  1747. KEEPFIXED: K E E P F I X E D;
  1748. KEYSET: K E Y S E T;
  1749. LAST: L A S T;
  1750. LEVEL: L E V E L;
  1751. LOCAL: L O C A L;
  1752. LOCK_ESCALATION: L O C K '_' E S C A L A T I O N;
  1753. LOGIN: L O G I N;
  1754. LOOP: L O O P;
  1755. MARK: M A R K;
  1756. MAX: M A X;
  1757. MAXDOP: M A X D O P;
  1758. MAXRECURSION: M A X R E C U R S I O N;
  1759. MAXSIZE: M A X S I Z E;
  1760. MB: M B;
  1761. MEMORY_OPTIMIZED_DATA: M E M O R Y '_' O P T I M I Z E D '_' D A T A;
  1762. MIN: M I N;
  1763. MINUTES: M I N U T E S;
  1764. MIN_ACTIVE_ROWVERSION: M I N '_' A C T I V E '_' R O W V E R S I O N;
  1765. MIXED_PAGE_ALLOCATION: M I X E D '_' P A G E '_' A L L O C A T I O N;
  1766. MODIFY: M O D I F Y;
  1767. MULTI_USER: M U L T I '_' U S E R;
  1768. NAME: N A M E;
  1769. NESTED_TRIGGERS: N E S T E D '_' T R I G G E R S;
  1770. NEW_BROKER: N E W '_' B R O K E R;
  1771. NEXT: N E X T;
  1772. NOCOUNT: N O C O U N T;
  1773. NOEXPAND: N O E X P A N D;
  1774. NON_TRANSACTED_ACCESS: N O N '_' T R A N S A C T E D '_' A C C E S S;
  1775. NORECOMPUTE: N O R E C O M P U T E;
  1776. NO_WAIT: N O '_' W A I T;
  1777. NTILE: N T I L E;
  1778. NUMBER: N U M B E R;
  1779. NUMERIC_ROUNDABORT: N U M E R I C '_' R O U N D A B O R T;
  1780. OFFLINE: O F F L I N E;
  1781. OFFSET: O F F S E T;
  1782. ONLINE: O N L I N E;
  1783. ONLY: O N L Y;
  1784. OPTIMISTIC: O P T I M I S T I C;
  1785. OPTIMIZE: O P T I M I Z E;
  1786. OUT: O U T;
  1787. OUTPUT: O U T P U T;
  1788. OWNER: O W N E R;
  1789. PAGE_VERIFY: P A G E '_' V E R I F Y;
  1790. PARAMETERIZATION: P A R A M E T E R I Z A T I O N;
  1791. PARTITION: P A R T I T I O N;
  1792. PATH: P A T H;
  1793. PRECEDING: P R E C E D I N G;
  1794. PRIOR: P R I O R;
  1795. PRIVILEGES: P R I V I L E G E S;
  1796. QUOTED_IDENTIFIER: Q U O T E D '_' I D E N T I F I E R;
  1797. RANGE: R A N G E;
  1798. RANK: R A N K;
  1799. READONLY: R E A D O N L Y;
  1800. READ_COMMITTED_SNAPSHOT: R E A D '_' C O M M I T T E D '_' S N A P S H O T;
  1801. READ_ONLY: R E A D '_' O N L Y;
  1802. READ_WRITE: R E A D '_' W R I T E;
  1803. RECOMPILE: R E C O M P I L E;
  1804. RECOVERY: R E C O V E R Y;
  1805. RECURSIVE_TRIGGERS: R E C U R S I V E '_' T R I G G E R S;
  1806. RELATIVE: R E L A T I V E;
  1807. REMOTE: R E M O T E;
  1808. REPEATABLE: R E P E A T A B L E;
  1809. RESTRICTED_USER: R E S T R I C T E D '_' U S E R;
  1810. ROBUST: R O B U S T;
  1811. ROOT: R O O T;
  1812. ROW: R O W;
  1813. ROWGUID: R O W G U I D;
  1814. ROWS: R O W S;
  1815. ROW_NUMBER: R O W '_' N U M B E R;
  1816. SAMPLE: S A M P L E;
  1817. SCHEMABINDING: S C H E M A B I N D I N G;
  1818. SCROLL: S C R O L L;
  1819. SCROLL_LOCKS: S C R O L L '_' L O C K S;
  1820. SECONDS: S E C O N D S;
  1821. SELF: S E L F;
  1822. SERIALIZABLE: S E R I A L I Z A B L E;
  1823. SHOWPLAN: S H O W P L A N;
  1824. SIMPLE: S I M P L E;
  1825. SINGLE_USER: S I N G L E '_' U S E R;
  1826. SIZE: S I Z E;
  1827. SNAPSHOT: S N A P S H O T;
  1828. SPATIAL_WINDOW_MAX_CELLS: S P A T I A L '_' W I N D O W '_' M A X '_' C E L L S;
  1829. STATIC: S T A T I C;
  1830. STATS_STREAM: S T A T S '_' S T R E A M;
  1831. STDEV: S T D E V;
  1832. STDEVP: S T D E V P;
  1833. SUM: S U M;
  1834. TAKE: T A K E;
  1835. TARGET_RECOVERY_TIME: T A R G E T '_' R E C O V E R Y '_' T I M E;
  1836. TB: T B;
  1837. TEXTIMAGE_ON: T E X T I M A G E '_' O N;
  1838. THROW: T H R O W;
  1839. TIES: T I E S;
  1840. TIME: T I M E;
  1841. TORN_PAGE_DETECTION: T O R N '_' P A G E '_' D E T E C T I O N;
  1842. TRANSFORM_NOISE_WORDS: T R A N S F O R M '_' N O I S E '_' W O R D S;
  1843. TRUSTWORTHY: T R U S T W O R T H Y;
  1844. TRY: T R Y;
  1845. TWO_DIGIT_YEAR_CUTOFF: T W O '_' D I G I T '_' Y E A R '_' C U T O F F;
  1846. TYPE: T Y P E;
  1847. TYPE_WARNING: T Y P E '_' W A R N I N G;
  1848. UNBOUNDED: U N B O U N D E D;
  1849. UNCOMMITTED: U N C O M M I T T E D;
  1850. UNKNOWN: U N K N O W N;
  1851. UNLIMITED: U N L I M I T E D;
  1852. USING: U S I N G;
  1853. VAR: V A R;
  1854. VARP: V A R P;
  1855. VIEWS: V I E W S;
  1856. VIEW_METADATA: V I E W '_' M E T A D A T A;
  1857. WORK: W O R K;
  1858. XML: X M L;
  1859. XMLNAMESPACES: X M L N A M E S P A C E S;
  1860.  
  1861. DOLLAR_ACTION: '$' A C T I O N;
  1862.  
  1863. SPACE: [ \t\r\n]+ -> skip;
  1864. COMMENT: '/*' .*? '*/' -> channel(HIDDEN);
  1865. LINE_COMMENT: '--' ~[\r\n]* -> channel(HIDDEN);
  1866.  
  1867. // TODO: ID can be not only Latin.
  1868. DOUBLE_QUOTE_ID: '"' ~'"'+ '"';
  1869. SQUARE_BRACKET_ID: '[' ~']'+ ']';
  1870. LOCAL_ID: '@' ([a-zA-Z_$@#0-9] | FullWidthLetter)+;
  1871. DECIMAL: DEC_DIGIT+;
  1872. ID: ( [a-zA-Z_#] | FullWidthLetter) ( [a-zA-Z_#$@0-9] | FullWidthLetter )*;
  1873. STRING: N? '\'' (~'\'' | '\'\'')* '\'';
  1874. BINARY: '0' X HEX_DIGIT*;
  1875. FLOAT: DEC_DOT_DEC;
  1876. REAL: DEC_DOT_DEC (E [+-]? DEC_DIGIT+)?;
  1877.  
  1878. EQUAL: '=';
  1879.  
  1880. GREATER: '>';
  1881. LESS: '<';
  1882. EXCLAMATION: '!';
  1883.  
  1884. PLUS_ASSIGN: '+=';
  1885. MINUS_ASSIGN: '-=';
  1886. MULT_ASSIGN: '*=';
  1887. DIV_ASSIGN: '/=';
  1888. MOD_ASSIGN: '%=';
  1889. AND_ASSIGN: '&=';
  1890. XOR_ASSIGN: '^=';
  1891. OR_ASSIGN: '|=';
  1892.  
  1893. DOT: '.';
  1894. UNDERLINE: '_';
  1895. AT: '@';
  1896. SHARP: '#';
  1897. DOLLAR: '$';
  1898. LR_BRACKET: '(';
  1899. RR_BRACKET: ')';
  1900. COMMA: ',';
  1901. SEMI: ';';
  1902. COLON: ':';
  1903. STAR: '*';
  1904. DIVIDE: '/';
  1905. MODULE: '%';
  1906. PLUS: '+';
  1907. MINUS: '-';
  1908. BIT_NOT: '~';
  1909. BIT_OR: '|';
  1910. BIT_AND: '&';
  1911. BIT_XOR: '^';
  1912.  
  1913. fragment LETTER: [a-zA-Z_];
  1914. fragment DEC_DOT_DEC: (DEC_DIGIT+ '.' DEC_DIGIT+ | DEC_DIGIT+ '.' | '.' DEC_DIGIT+);
  1915. fragment HEX_DIGIT: [0-9A-Fa-f];
  1916. fragment DEC_DIGIT: [0-9];
  1917.  
  1918. fragment A: [aA];
  1919. fragment B: [bB];
  1920. fragment C: [cC];
  1921. fragment D: [dD];
  1922. fragment E: [eE];
  1923. fragment F: [fF];
  1924. fragment G: [gG];
  1925. fragment H: [hH];
  1926. fragment I: [iI];
  1927. fragment J: [jJ];
  1928. fragment K: [kK];
  1929. fragment L: [lL];
  1930. fragment M: [mM];
  1931. fragment N: [nN];
  1932. fragment O: [oO];
  1933. fragment P: [pP];
  1934. fragment Q: [qQ];
  1935. fragment R: [rR];
  1936. fragment S: [sS];
  1937. fragment T: [tT];
  1938. fragment U: [uU];
  1939. fragment V: [vV];
  1940. fragment W: [wW];
  1941. fragment X: [xX];
  1942. fragment Y: [yY];
  1943. fragment Z: [zZ];
  1944. fragment FullWidthLetter
  1945. : '\u00c0'..'\u00d6'
  1946. | '\u00d8'..'\u00f6'
  1947. | '\u00f8'..'\u00ff'
  1948. | '\u0100'..'\u1fff'
  1949. | '\u2c00'..'\u2fff'
  1950. | '\u3040'..'\u318f'
  1951. | '\u3300'..'\u337f'
  1952. | '\u3400'..'\u3fff'
  1953. | '\u4e00'..'\u9fff'
  1954. | '\ua000'..'\ud7ff'
  1955. | '\uf900'..'\ufaff'
  1956. | '\uff00'..'\ufff0'
  1957. // | '\u10000'..'\u1F9FF' //not support four bytes chars
  1958. // | '\u20000'..'\u2FA1F'
  1959. ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement