Content-Length: 4785 | pFad | http://github.com/JavaScriptor/js-sql-parser/pull/15.patch
thub.com
From 0447de0f610283b55e85d73f8dd5c7a819c14077 Mon Sep 17 00:00:00 2001
From: oger000
Date: Thu, 26 Jul 2018 22:03:00 +0200
Subject: [PATCH] allow [$:] as prefix and plain ? for prepared statements
---
src/sqlParser.jison | 16 ++++++++++------
test/main.test.js | 4 +++-
2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/src/sqlParser.jison b/src/sqlParser.jison
index 40b0631..3bf8a0e 100644
--- a/src/sqlParser.jison
+++ b/src/sqlParser.jison
@@ -10,10 +10,12 @@
[-][-]\s.*\n /* skip sql comments */
[#]\s.*\n /* skip sql comments */
\s+ /* skip whitespace */
-
+
[`][a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]*[`] return 'IDENTIFIER'
[\w]+[\u4e00-\u9fa5]+[0-9a-zA-Z_\u4e00-\u9fa5]* return 'IDENTIFIER'
[\u4e00-\u9fa5][0-9a-zA-Z_\u4e00-\u9fa5]* return 'IDENTIFIER'
+[\$:][a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]* return 'PREP_TERM'
+[?] return 'PREP_TERM'
SELECT return 'SELECT'
ALL return 'ALL'
ANY return 'ANY'
@@ -116,7 +118,7 @@ LIMIT return 'LIMIT'
"{" return '{'
"}" return '}'
";" return ';'
-
+
['](\\.|[^'])*['] return 'STRING'
["](\\.|[^"])*["] return 'STRING'
[0][x][0-9a-fA-F]+ return 'HEX_NUMERIC'
@@ -126,7 +128,7 @@ LIMIT return 'LIMIT'
[a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]* return 'IDENTIFIER'
\. return 'DOT'
['"][a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]*["'] return 'QUOTED_IDENTIFIER'
-
+
<> return 'EOF'
. return 'INVALID'
@@ -164,7 +166,7 @@ main
;
selectClause
- : SELECT
+ : SELECT
distinctOpt
highPriorityOpt
maxStateMentTimeOpt
@@ -203,7 +205,7 @@ selectClause
;
distinctOpt
- : ALL { $$ = $1 }
+ : ALL { $$ = $1 }
| DISTINCT { $$ = $1 }
| DISTINCTROW { $$ = $1 }
| { $$ = null }
@@ -295,6 +297,7 @@ function_call_param
identifier
: IDENTIFIER { $$ = { type: 'Identifier', value: $1 } }
| identifier DOT IDENTIFIER { $$ = $1; $1.value += '.' + $3 }
+ | PREP_TERM { $$ = { type: 'Identifier', value: $1 } }
;
identifier_list
: identifier { $$ = { type: 'IdentifierList', value: [ $1 ] } }
@@ -336,7 +339,7 @@ simple_expr
;
bit_expr
: simple_expr { $$ = $1 }
- | bit_expr '|' bit_expr { $$ = { type: 'BitExpression', operator: '|', left: $1, right: $3 } }
+ | bit_expr '|' bit_expr { $$ = { type: 'BitExpression', operator: '|', left: $1, right: $3 } }
| bit_expr '&' bit_expr { $$ = { type: 'BitExpression', operator: '&', left: $1, right: $3 } }
| bit_expr '<<' bit_expr { $$ = { type: 'BitExpression', operator: '<<', left: $1, right: $3 } }
| bit_expr '>>' bit_expr { $$ = { type: 'BitExpression', operator: '>>', left: $1, right: $3 } }
@@ -446,6 +449,7 @@ limit
: LIMIT NUMERIC { $$ = { type: 'Limit', value: [ $2 ] } }
| LIMIT NUMERIC ',' NUMERIC { $$ = { type: 'Limit', value: [ $2, $4 ] } }
| LIMIT NUMERIC OFFSET NUMERIC { $$ = { type: 'Limit', value: [ $4, $2 ], offsetMode: true } }
+ | LIMIT PREP_TERM { $$ = { type: 'Limit', value: [ $2 ] } }
;
limit_opt
: { $$ = null }
diff --git a/test/main.test.js b/test/main.test.js
index 77a6545..f640d77 100644
--- a/test/main.test.js
+++ b/test/main.test.js
@@ -360,5 +360,7 @@ describe('select grammar support', function () {
testParser('SELECT COUNT(*) AS total FROM b');
});
+ it ('allow prepared statement prefix ("$" or ":") or plain ?.', function () {
+ testParser('SELECT * FROM b WHERE id=$id OR id=:id ORDER BY ?');
+ });
});
-
--- a PPN by Garber Painting Akron. With Image Size Reduction included!Fetched URL: http://github.com/JavaScriptor/js-sql-parser/pull/15.patch
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy