提交 e2e8736a authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Use currentTokenType in Parser.parsePrepared()

上级 87e449d9
...@@ -672,24 +672,32 @@ public class Parser { ...@@ -672,24 +672,32 @@ public class Parser {
private Prepared parsePrepared() { private Prepared parsePrepared() {
int start = lastParseIndex; int start = lastParseIndex;
Prepared c = null; Prepared c = null;
String token = currentToken; switch (currentTokenType) {
if (token.length() == 0) { case END:
case SEMICOLON:
c = new NoOperation(session); c = new NoOperation(session);
} else { setSQL(c, null, start);
char first = token.charAt(0); return c;
switch (first) { case PARAMETER:
case '?': // read the ? as a parameter
// read the ? as a parameter readTerm();
readTerm(); // this is an 'out' parameter - set a dummy value
// this is an 'out' parameter - set a dummy value parameters.get(0).setValue(ValueNull.INSTANCE);
parameters.get(0).setValue(ValueNull.INSTANCE); read(EQUAL);
read(EQUAL); read("CALL");
read("CALL"); c = parseCall();
c = parseCall(); break;
break; case OPEN_PAREN:
case '(': case FROM:
c = parseSelect(); case SELECT:
break; c = parseSelect();
break;
case WITH:
read();
c = parseWithStatementOrQuery();
break;
case IDENTIFIER:
switch (currentToken.charAt(0)) {
case 'a': case 'a':
case 'A': case 'A':
if (readIf("ALTER")) { if (readIf("ALTER")) {
...@@ -741,12 +749,6 @@ public class Parser { ...@@ -741,12 +749,6 @@ public class Parser {
c = parseExecute(); c = parseExecute();
} }
break; break;
case 'f':
case 'F':
if (isToken(FROM)) {
c = parseSelect();
}
break;
case 'g': case 'g':
case 'G': case 'G':
if (readIf("GRANT")) { if (readIf("GRANT")) {
...@@ -793,9 +795,7 @@ public class Parser { ...@@ -793,9 +795,7 @@ public class Parser {
break; break;
case 's': case 's':
case 'S': case 'S':
if (isToken(SELECT)) { if (readIf("SET")) {
c = parseSelect();
} else if (readIf("SET")) {
c = parseSet(); c = parseSet();
} else if (readIf("SAVEPOINT")) { } else if (readIf("SAVEPOINT")) {
c = parseSavepoint(); c = parseSavepoint();
...@@ -826,52 +826,40 @@ public class Parser { ...@@ -826,52 +826,40 @@ public class Parser {
if (readIf("VALUES")) { if (readIf("VALUES")) {
c = parseValues(); c = parseValues();
} }
break;
case 'w':
case 'W':
if (readIf(WITH)) {
c = parseWithStatementOrQuery();
}
break;
case ';':
c = new NoOperation(session);
break;
default:
throw getSyntaxError();
} }
if (indexedParameterList != null) { }
for (int i = 0, size = indexedParameterList.size(); if (c == null) {
i < size; i++) { throw getSyntaxError();
if (indexedParameterList.get(i) == null) { }
indexedParameterList.set(i, new Parameter(i)); if (indexedParameterList != null) {
} for (int i = 0, size = indexedParameterList.size();
i < size; i++) {
if (indexedParameterList.get(i) == null) {
indexedParameterList.set(i, new Parameter(i));
} }
parameters = indexedParameterList;
} }
if (readIf(OPEN_BRACE)) { parameters = indexedParameterList;
do { }
int index = (int) readLong() - 1; if (readIf(OPEN_BRACE)) {
if (index < 0 || index >= parameters.size()) { do {
throw getSyntaxError(); int index = (int) readLong() - 1;
} if (index < 0 || index >= parameters.size()) {
Parameter p = parameters.get(index); throw getSyntaxError();
if (p == null) { }
throw getSyntaxError(); Parameter p = parameters.get(index);
} if (p == null) {
read(COLON); throw getSyntaxError();
Expression expr = readExpression();
expr = expr.optimize(session);
p.setValue(expr.getValue(session));
} while (readIf(COMMA));
read(CLOSE_BRACE);
for (Parameter p : parameters) {
p.checkSet();
} }
parameters.clear(); read(COLON);
Expression expr = readExpression();
expr = expr.optimize(session);
p.setValue(expr.getValue(session));
} while (readIf(COMMA));
read(CLOSE_BRACE);
for (Parameter p : parameters) {
p.checkSet();
} }
} parameters.clear();
if (c == null) {
throw getSyntaxError();
} }
setSQL(c, null, start); setSQL(c, null, start);
return c; return c;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论