forked from DerekStride/tree-sitter-sql
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate-procedure.js
More file actions
123 lines (118 loc) · 2.71 KB
/
Copy pathcreate-procedure.js
File metadata and controls
123 lines (118 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
export default {
create_procedure: $ => seq(
$.keyword_create,
optional($._or_replace),
// mariadb/mysql
optional(seq($.keyword_definer, '=', $.identifier)),
$.keyword_procedure,
optional($._if_not_exists),
$.object_reference,
optional($.function_arguments),
// Firebird output parameters
optional(seq($.keyword_returns, $.function_arguments)),
repeat(
choice(
$.function_language,
$.function_security,
$.function_safety,
),
),
$.procedure_body,
repeat(
choice(
$.function_language,
$.function_security,
$.function_safety,
),
),
),
procedure_body: $ => choice(
// BEGIN ATOMIC block (SQL standard)
seq(
$.keyword_begin,
$.keyword_atomic,
repeat1(
seq(
$._function_body_statement,
';',
),
),
$.keyword_end,
),
// Dollar-quoted with optional DECLARE (PostgreSQL)
seq(
$.keyword_as,
alias($._dollar_quoted_string_start_tag, $.dollar_quote),
optional(
seq(
$.keyword_declare,
repeat1(
$.function_declaration,
),
),
),
$.keyword_begin,
repeat1(
seq(
$._function_body_statement,
';',
),
),
$.keyword_end,
optional(';'),
alias($._dollar_quoted_string_end_tag, $.dollar_quote),
),
// String literal body
seq(
$.keyword_as,
alias(
choice(
$._single_quote_string,
$._double_quote_string,
),
$.literal
),
),
// Dollar-quoted single statement (PostgreSQL)
seq(
$.keyword_as,
alias($._dollar_quoted_string_start_tag, $.dollar_quote),
$._function_body_statement,
optional(';'),
alias($._dollar_quoted_string_end_tag, $.dollar_quote),
),
// T-SQL style (no required RETURN): AS BEGIN ... END
$._tsql_procedure_body_statement,
// Firebird style: [AS] DECLARE VARIABLE x type; ... BEGIN ... END
$._fb_procedure_body_statement,
),
_tsql_procedure_body_statement: $ => seq(
optional($.keyword_as),
$.keyword_begin,
optional($.var_declarations),
choice(
repeat($.statement),
repeat1(seq(
$.keyword_begin,
repeat($.statement),
$.keyword_end,
)),
),
$.keyword_end,
),
_fb_procedure_body_statement: $ => seq(
optional($.keyword_as),
repeat1($.fb_var_declaration),
$.keyword_begin,
optional($.var_declarations),
choice(
repeat($.statement),
repeat1(seq(
$.keyword_begin,
repeat($.statement),
$.keyword_end,
)),
),
$.keyword_end,
),
};