提交 476dba18 authored 作者: Noel Grandin's avatar Noel Grandin

date/time functions don't need to be keywords

and making them sort-of regular functions makes it easier to allow
overriding them
上级 1972c244
...@@ -182,8 +182,7 @@ public class Parser { ...@@ -182,8 +182,7 @@ public class Parser {
private static final int MINUS = 13, PLUS = 14, STRING_CONCAT = 15; private static final int MINUS = 13, PLUS = 14, STRING_CONCAT = 15;
private static final int OPEN = 16, CLOSE = 17, NULL = 18, TRUE = 19, private static final int OPEN = 16, CLOSE = 17, NULL = 18, TRUE = 19,
FALSE = 20; FALSE = 20;
private static final int CURRENT_TIMESTAMP = 21, CURRENT_DATE = 22, private static final int ROWNUM = 24;
CURRENT_TIME = 23, ROWNUM = 24;
private static final int SPATIAL_INTERSECTS = 25; private static final int SPATIAL_INTERSECTS = 25;
private static final Comparator<TableFilter> TABLE_FILTER_COMPARATOR = private static final Comparator<TableFilter> TABLE_FILTER_COMPARATOR =
...@@ -2887,6 +2886,20 @@ public class Parser { ...@@ -2887,6 +2886,20 @@ public class Parser {
r = readFunction(null, name); r = readFunction(null, name);
} else if (equalsToken("CURRENT_USER", name)) { } else if (equalsToken("CURRENT_USER", name)) {
r = readFunctionWithoutParameters("USER"); r = readFunctionWithoutParameters("USER");
} else if (equalsToken("CURRENT_TIMESTAMP", name)) {
r = readFunctionWithoutParameters("CURRENT_TIMESTAMP");
} else if (equalsToken("SYSDATE", name)) {
r = readFunctionWithoutParameters("CURRENT_TIMESTAMP");
} else if (equalsToken("SYSTIMESTAMP", name)) {
r = readFunctionWithoutParameters("CURRENT_TIMESTAMP");
} else if (equalsToken("CURRENT_DATE", name)) {
r = readFunctionWithoutParameters("CURRENT_DATE");
} else if (equalsToken("TODAY", name)) {
r = readFunctionWithoutParameters("CURRENT_DATE");
} else if (equalsToken("CURRENT_TIME", name)) {
r = readFunctionWithoutParameters("CURRENT_TIME");
} else if (equalsToken("SYSTIME", name)) {
r = readFunctionWithoutParameters("CURRENT_TIME");
} else if (equalsToken("CURRENT", name)) { } else if (equalsToken("CURRENT", name)) {
if (readIf("TIMESTAMP")) { if (readIf("TIMESTAMP")) {
r = readFunctionWithoutParameters("CURRENT_TIMESTAMP"); r = readFunctionWithoutParameters("CURRENT_TIMESTAMP");
...@@ -3004,28 +3017,6 @@ public class Parser { ...@@ -3004,28 +3017,6 @@ public class Parser {
read(); read();
r = ValueExpression.get(ValueBoolean.get(false)); r = ValueExpression.get(ValueBoolean.get(false));
break; break;
case CURRENT_TIME:
read();
r = readFunctionWithoutParameters("CURRENT_TIME");
break;
case CURRENT_DATE:
read();
r = readFunctionWithoutParameters("CURRENT_DATE");
break;
case CURRENT_TIMESTAMP: {
Function function = Function.getFunction(database,
"CURRENT_TIMESTAMP");
read();
if (readIf("(")) {
if (!readIf(")")) {
function.setParameter(0, readExpression());
read(")");
}
}
function.doneWithParameters();
r = function;
break;
}
case ROWNUM: case ROWNUM:
read(); read();
if (readIf("(")) { if (readIf("(")) {
...@@ -3922,12 +3913,6 @@ public class Parser { ...@@ -3922,12 +3913,6 @@ public class Parser {
case 'C': case 'C':
if (s.equals("CHECK")) { if (s.equals("CHECK")) {
return KEYWORD; return KEYWORD;
} else if (s.equals("CURRENT_TIMESTAMP")) {
return CURRENT_TIMESTAMP;
} else if (s.equals("CURRENT_TIME")) {
return CURRENT_TIME;
} else if (s.equals("CURRENT_DATE")) {
return CURRENT_DATE;
} }
return getKeywordOrIdentifier(s, "CROSS", KEYWORD); return getKeywordOrIdentifier(s, "CROSS", KEYWORD);
case 'D': case 'D':
...@@ -3987,18 +3972,8 @@ public class Parser { ...@@ -3987,18 +3972,8 @@ public class Parser {
case 'R': case 'R':
return getKeywordOrIdentifier(s, "ROWNUM", ROWNUM); return getKeywordOrIdentifier(s, "ROWNUM", ROWNUM);
case 'S': case 'S':
if (s.equals("SYSTIMESTAMP")) {
return CURRENT_TIMESTAMP;
} else if (s.equals("SYSTIME")) {
return CURRENT_TIME;
} else if (s.equals("SYSDATE")) {
return CURRENT_TIMESTAMP;
}
return getKeywordOrIdentifier(s, "SELECT", KEYWORD); return getKeywordOrIdentifier(s, "SELECT", KEYWORD);
case 'T': case 'T':
if ("TODAY".equals(s)) {
return CURRENT_DATE;
}
return getKeywordOrIdentifier(s, "TRUE", TRUE); return getKeywordOrIdentifier(s, "TRUE", TRUE);
case 'U': case 'U':
if ("UNIQUE".equals(s)) { if ("UNIQUE".equals(s)) {
......
...@@ -314,6 +314,8 @@ public class Function extends Expression implements FunctionCall { ...@@ -314,6 +314,8 @@ public class Function extends Expression implements FunctionCall {
0, Value.DATE); 0, Value.DATE);
addFunctionNotDeterministic("CURDATE", CURDATE, addFunctionNotDeterministic("CURDATE", CURDATE,
0, Value.DATE); 0, Value.DATE);
addFunctionNotDeterministic("TODAY", CURRENT_DATE,
0, Value.DATE);
addFunction("TO_DATE", TO_DATE, VAR_ARGS, Value.TIMESTAMP); addFunction("TO_DATE", TO_DATE, VAR_ARGS, Value.TIMESTAMP);
addFunction("TO_TIMESTAMP", TO_TIMESTAMP, VAR_ARGS, Value.TIMESTAMP); addFunction("TO_TIMESTAMP", TO_TIMESTAMP, VAR_ARGS, Value.TIMESTAMP);
addFunction("ADD_MONTHS", ADD_MONTHS, 2, Value.TIMESTAMP); addFunction("ADD_MONTHS", ADD_MONTHS, 2, Value.TIMESTAMP);
...@@ -322,10 +324,16 @@ public class Function extends Expression implements FunctionCall { ...@@ -322,10 +324,16 @@ public class Function extends Expression implements FunctionCall {
0, Value.DATE); 0, Value.DATE);
addFunctionNotDeterministic("CURRENT_TIME", CURRENT_TIME, addFunctionNotDeterministic("CURRENT_TIME", CURRENT_TIME,
0, Value.TIME); 0, Value.TIME);
addFunctionNotDeterministic("SYSTIME", CURRENT_TIME,
0, Value.TIME);
addFunctionNotDeterministic("CURTIME", CURTIME, addFunctionNotDeterministic("CURTIME", CURTIME,
0, Value.TIME); 0, Value.TIME);
addFunctionNotDeterministic("CURRENT_TIMESTAMP", CURRENT_TIMESTAMP, addFunctionNotDeterministic("CURRENT_TIMESTAMP", CURRENT_TIMESTAMP,
VAR_ARGS, Value.TIMESTAMP); VAR_ARGS, Value.TIMESTAMP);
addFunctionNotDeterministic("SYSDATE", CURRENT_TIMESTAMP,
VAR_ARGS, Value.TIMESTAMP);
addFunctionNotDeterministic("SYSTIMESTAMP", CURRENT_TIMESTAMP,
VAR_ARGS, Value.TIMESTAMP);
addFunctionNotDeterministic("NOW", NOW, addFunctionNotDeterministic("NOW", NOW,
VAR_ARGS, Value.TIMESTAMP); VAR_ARGS, Value.TIMESTAMP);
addFunction("DATEADD", DATE_ADD, addFunction("DATEADD", DATE_ADD,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论