Skip to content

Commit 147af8e

Browse files
committed
feat: TSQL CREATE FUNCTION
1 parent b5109bd commit 147af8e

File tree

2 files changed

+257
-0
lines changed

2 files changed

+257
-0
lines changed

grammar.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,20 @@ module.exports = grammar({
699699
),
700700
),
701701

702+
var_declarations: $ => seq($.keyword_declare, repeat1($.var_declaration)),
703+
var_declaration: $ => seq(
704+
$.identifier,
705+
$._type,
706+
optional(
707+
seq(
708+
choice($.keyword_default, '='),
709+
$.literal,
710+
),
711+
),
712+
optional(','),
713+
),
714+
715+
702716
_ddl_statement: $ => choice(
703717
$._create_statement,
704718
$._alter_statement,
@@ -1244,6 +1258,32 @@ module.exports = grammar({
12441258
$._function_return,
12451259
),
12461260

1261+
_tsql_function_body_statement: $ => seq(
1262+
optional($.keyword_as),
1263+
$.keyword_begin,
1264+
optional($.var_declarations),
1265+
$._tsql_statement,
1266+
$._function_return,
1267+
$.keyword_end,
1268+
),
1269+
1270+
_tsql_statement: $ => choice(
1271+
repeat1(
1272+
seq(
1273+
$.keyword_begin,
1274+
$._tsql_statement_no_block,
1275+
$.keyword_end,
1276+
),
1277+
),
1278+
$._tsql_statement_no_block,
1279+
),
1280+
1281+
_tsql_statement_no_block: $ => choice(
1282+
$._ddl_statement,
1283+
$._dml_write,
1284+
optional_parenthesis($._dml_read),
1285+
),
1286+
12471287
function_body: $ => choice(
12481288
seq(
12491289
$._function_return,
@@ -1299,6 +1339,7 @@ module.exports = grammar({
12991339
optional(';'),
13001340
alias($._dollar_quoted_string_end_tag, $.dollar_quote),
13011341
),
1342+
$._tsql_function_body_statement,
13021343
),
13031344

13041345
function_language: $ => seq(

test/corpus/functions.txt

Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,3 +1142,219 @@ $_$
11421142
(literal)
11431143
(keyword_end)
11441144
(dollar_quote)))))
1145+
1146+
================================================================================
1147+
TSQL Function Returns
1148+
================================================================================
1149+
1150+
CREATE FUNCTION dbo.fn(@par int, @parr nvarchar(4000))
1151+
RETURNS int
1152+
AS
1153+
BEGIN
1154+
SELECT * FROM ATABLE
1155+
RETURN @par
1156+
END
1157+
1158+
--------------------------------------------------------------------------------
1159+
1160+
(program
1161+
(statement
1162+
(create_function
1163+
(keyword_create)
1164+
(keyword_function)
1165+
(object_reference
1166+
(identifier)
1167+
(identifier))
1168+
(function_arguments
1169+
(function_argument
1170+
(identifier)
1171+
(int
1172+
(keyword_int)))
1173+
(function_argument
1174+
(identifier)
1175+
(nvarchar
1176+
(keyword_nvarchar)
1177+
(literal))))
1178+
(keyword_returns)
1179+
(int
1180+
(keyword_int))
1181+
(function_body
1182+
(keyword_as)
1183+
(keyword_begin)
1184+
(select
1185+
(keyword_select)
1186+
(select_expression
1187+
(term
1188+
(all_fields))))
1189+
(from
1190+
(keyword_from)
1191+
(relation
1192+
(object_reference
1193+
(identifier))))
1194+
(keyword_return)
1195+
(field
1196+
(identifier))
1197+
(keyword_end)))))
1198+
1199+
================================================================================
1200+
TSQL Function Declare
1201+
================================================================================
1202+
1203+
CREATE FUNCTION dbo.fn(@par int, @parr nvarchar(4000))
1204+
RETURNS int
1205+
AS
1206+
BEGIN
1207+
DECLARE @s int, @t int, @i int, @j int
1208+
SELECT * FROM ATABLE
1209+
RETURN @par
1210+
END
1211+
1212+
--------------------------------------------------------------------------------
1213+
1214+
(program
1215+
(statement
1216+
(create_function
1217+
(keyword_create)
1218+
(keyword_function)
1219+
(object_reference
1220+
(identifier)
1221+
(identifier))
1222+
(function_arguments
1223+
(function_argument
1224+
(identifier)
1225+
(int
1226+
(keyword_int)))
1227+
(function_argument
1228+
(identifier)
1229+
(nvarchar
1230+
(keyword_nvarchar)
1231+
(literal))))
1232+
(keyword_returns)
1233+
(int
1234+
(keyword_int))
1235+
(function_body
1236+
(keyword_as)
1237+
(keyword_begin)
1238+
(var_declarations
1239+
(keyword_declare)
1240+
(var_declaration
1241+
(identifier)
1242+
(int
1243+
(keyword_int)))
1244+
(var_declaration
1245+
(identifier)
1246+
(int
1247+
(keyword_int)))
1248+
(var_declaration
1249+
(identifier)
1250+
(int
1251+
(keyword_int)))
1252+
(var_declaration
1253+
(identifier)
1254+
(int
1255+
(keyword_int))))
1256+
(select
1257+
(keyword_select)
1258+
(select_expression
1259+
(term
1260+
(all_fields))))
1261+
(from
1262+
(keyword_from)
1263+
(relation
1264+
(object_reference
1265+
(identifier))))
1266+
(keyword_return)
1267+
(field
1268+
(identifier))
1269+
(keyword_end)))))
1270+
1271+
================================================================================
1272+
TSQL Function With Nested BEGIN-END
1273+
================================================================================
1274+
1275+
CREATE FUNCTION dbo.fn(@par int, @parr nvarchar(4000))
1276+
RETURNS int
1277+
AS
1278+
BEGIN
1279+
DECLARE @s int, @t int, @i int, @j int
1280+
BEGIN
1281+
SELECT * FROM ATABLE
1282+
END
1283+
BEGIN
1284+
SELECT * FROM ANOTHER_TABLE
1285+
END
1286+
RETURN @par
1287+
END
1288+
1289+
--------------------------------------------------------------------------------
1290+
1291+
(program
1292+
(statement
1293+
(create_function
1294+
(keyword_create)
1295+
(keyword_function)
1296+
(object_reference
1297+
(identifier)
1298+
(identifier))
1299+
(function_arguments
1300+
(function_argument
1301+
(identifier)
1302+
(int
1303+
(keyword_int)))
1304+
(function_argument
1305+
(identifier)
1306+
(nvarchar
1307+
(keyword_nvarchar)
1308+
(literal))))
1309+
(keyword_returns)
1310+
(int
1311+
(keyword_int))
1312+
(function_body
1313+
(keyword_as)
1314+
(keyword_begin)
1315+
(var_declarations
1316+
(keyword_declare)
1317+
(var_declaration
1318+
(identifier)
1319+
(int
1320+
(keyword_int)))
1321+
(var_declaration
1322+
(identifier)
1323+
(int
1324+
(keyword_int)))
1325+
(var_declaration
1326+
(identifier)
1327+
(int
1328+
(keyword_int)))
1329+
(var_declaration
1330+
(identifier)
1331+
(int
1332+
(keyword_int))))
1333+
(keyword_begin)
1334+
(select
1335+
(keyword_select)
1336+
(select_expression
1337+
(term
1338+
(all_fields))))
1339+
(from
1340+
(keyword_from)
1341+
(relation
1342+
(object_reference
1343+
(identifier))))
1344+
(keyword_end)
1345+
(keyword_begin)
1346+
(select
1347+
(keyword_select)
1348+
(select_expression
1349+
(term
1350+
(all_fields))))
1351+
(from
1352+
(keyword_from)
1353+
(relation
1354+
(object_reference
1355+
(identifier))))
1356+
(keyword_end)
1357+
(keyword_return)
1358+
(field
1359+
(identifier))
1360+
(keyword_end)))))

0 commit comments

Comments
 (0)