Unverified 提交 97c4c1d6 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov 提交者: GitHub

Merge pull request #1127 from katzyn/misc

Update JdbcDatabaseMetaData.getSQLKeywords() and perform some minor optimizations
...@@ -3864,6 +3864,7 @@ public class Parser { ...@@ -3864,6 +3864,7 @@ public class Parser {
parseIndex = i; parseIndex = i;
String sub = sqlCommand.substring(start, i); String sub = sqlCommand.substring(start, i);
checkLiterals(false); checkLiterals(false);
BigDecimal bd;
if (!containsE && sub.indexOf('.') < 0) { if (!containsE && sub.indexOf('.') < 0) {
BigInteger bi = new BigInteger(sub); BigInteger bi = new BigInteger(sub);
if (bi.compareTo(ValueLong.MAX_BI) <= 0) { if (bi.compareTo(ValueLong.MAX_BI) <= 0) {
...@@ -3875,12 +3876,13 @@ public class Parser { ...@@ -3875,12 +3876,13 @@ public class Parser {
currentTokenType = VALUE; currentTokenType = VALUE;
return; return;
} }
} bd = new BigDecimal(bi);
BigDecimal bd; } else {
try { try {
bd = new BigDecimal(sub); bd = new BigDecimal(sub);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
throw DbException.get(ErrorCode.DATA_CONVERSION_ERROR_1, e, sub); throw DbException.get(ErrorCode.DATA_CONVERSION_ERROR_1, e, sub);
}
} }
currentValue = ValueDecimal.get(bd); currentValue = ValueDecimal.get(bd);
currentTokenType = VALUE; currentTokenType = VALUE;
......
...@@ -1535,19 +1535,19 @@ public class JdbcDatabaseMetaData extends TraceObject implements ...@@ -1535,19 +1535,19 @@ public class JdbcDatabaseMetaData extends TraceObject implements
} }
/** /**
* Gets the comma-separated list of all SQL keywords that are not supported * Gets the comma-separated list of all SQL keywords that are not supported as
* as table/column/index name, in addition to the SQL-2003 keywords. The list * table/column/index name, in addition to the SQL-2003 keywords. The list
* returned is: * returned is:
* <pre> * <pre>
* LIMIT,MINUS,OFFSET,ROWNUM,SYSDATE,SYSTIME,SYSTIMESTAMP,TODAY * INTERSECTS,LIMIT,MINUS,OFFSET,ROWNUM,SYSDATE,SYSTIME,SYSTIMESTAMP,TODAY,TOP
* </pre> * </pre>
* The complete list of keywords (including SQL-2003 keywords) is: * The complete list of keywords (including SQL-2003 keywords) is:
* <pre> * <pre>
* ALL, CHECK, CONSTRAINT, CROSS, CURRENT_DATE, CURRENT_TIME, * ALL, CHECK, CONSTRAINT, CROSS, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP,
* CURRENT_TIMESTAMP, DISTINCT, EXCEPT, EXISTS, FALSE, FETCH, FOR, FOREIGN, * DISTINCT, EXCEPT, EXISTS, FALSE, FETCH, FOR, FOREIGN, FROM, FULL, GROUP,
* FROM, FULL, GROUP, HAVING, INNER, INTERSECT, IS, JOIN, LIKE, LIMIT, * HAVING, INNER, INTERSECT, INTERSECTS, IS, JOIN, LIKE, LIMIT, MINUS, NATURAL,
* MINUS, NATURAL, NOT, NULL, OFFSET, ON, ORDER, PRIMARY, ROWNUM, SELECT, * NOT, NULL, OFFSET, ON, ORDER, PRIMARY, ROWNUM, SELECT, SYSDATE, SYSTIME,
* SYSDATE, SYSTIME, SYSTIMESTAMP, TODAY, TRUE, UNION, UNIQUE, WHERE, WITH * SYSTIMESTAMP, TODAY, TOP, TRUE, UNION, UNIQUE, WHERE, WITH
* </pre> * </pre>
* *
* @return a list of additional the keywords * @return a list of additional the keywords
...@@ -1555,7 +1555,7 @@ public class JdbcDatabaseMetaData extends TraceObject implements ...@@ -1555,7 +1555,7 @@ public class JdbcDatabaseMetaData extends TraceObject implements
@Override @Override
public String getSQLKeywords() { public String getSQLKeywords() {
debugCodeCall("getSQLKeywords"); debugCodeCall("getSQLKeywords");
return "LIMIT,MINUS,OFFSET,ROWNUM,SYSDATE,SYSTIME,SYSTIMESTAMP,TODAY"; return "INTERSECTS,LIMIT,MINUS,OFFSET,ROWNUM,SYSDATE,SYSTIME,SYSTIMESTAMP,TODAY,TOP";
} }
/** /**
......
...@@ -1253,8 +1253,7 @@ public class JdbcPreparedStatement extends JdbcStatement implements ...@@ -1253,8 +1253,7 @@ public class JdbcPreparedStatement extends JdbcStatement implements
try { try {
debugCodeCall("executeBatch"); debugCodeCall("executeBatch");
if (batchParameters == null) { if (batchParameters == null) {
// TODO batch: check what other database do if no parameters are // Empty batch is allowed, see JDK-4639504 and other issues
// set
batchParameters = Utils.newSmallArrayList(); batchParameters = Utils.newSmallArrayList();
} }
batchIdentities = new MergedResultSet(); batchIdentities = new MergedResultSet();
......
...@@ -44,10 +44,10 @@ public class JdbcSQLException extends SQLException { ...@@ -44,10 +44,10 @@ public class JdbcSQLException extends SQLException {
int errorCode, Throwable cause, String stackTrace) { int errorCode, Throwable cause, String stackTrace) {
super(message, state, errorCode); super(message, state, errorCode);
this.originalMessage = message; this.originalMessage = message;
setSQL(sql);
this.cause = cause; this.cause = cause;
this.stackTrace = stackTrace; this.stackTrace = stackTrace;
buildMessage(); // setSQL() invokes buildBessage() by itself
setSQL(sql);
initCause(cause); initCause(cause);
} }
......
...@@ -89,6 +89,10 @@ public class ParserUtil { ...@@ -89,6 +89,10 @@ public class ParserUtil {
* @return the token type * @return the token type
*/ */
public static int getSaveTokenType(String s, boolean additionalKeywords) { public static int getSaveTokenType(String s, boolean additionalKeywords) {
/*
* JdbcDatabaseMetaData.getSQLKeywords() and tests should be updated when new
* non-SQL:2003 keywords are introduced here.
*/
switch (s.charAt(0)) { switch (s.charAt(0)) {
case 'A': case 'A':
return getKeywordOrIdentifier(s, "ALL", KEYWORD); return getKeywordOrIdentifier(s, "ALL", KEYWORD);
......
...@@ -464,7 +464,7 @@ public class TestMetaData extends TestBase { ...@@ -464,7 +464,7 @@ public class TestMetaData extends TestBase {
assertEquals("schema", meta.getSchemaTerm()); assertEquals("schema", meta.getSchemaTerm());
assertEquals("\\", meta.getSearchStringEscape()); assertEquals("\\", meta.getSearchStringEscape());
assertEquals("LIMIT,MINUS,OFFSET,ROWNUM,SYSDATE,SYSTIME,SYSTIMESTAMP,TODAY", assertEquals("INTERSECTS,LIMIT,MINUS,OFFSET,ROWNUM,SYSDATE,SYSTIME,SYSTIMESTAMP,TODAY,TOP",
meta.getSQLKeywords()); meta.getSQLKeywords());
assertTrue(meta.getURL().startsWith("jdbc:h2:")); assertTrue(meta.getURL().startsWith("jdbc:h2:"));
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论