提交 801e2304 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Convert _ROWID_ to a keyword

上级 d4b3f8f6
......@@ -480,7 +480,7 @@ CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, DISTINCT, EXCEPT,
EXISTS, FALSE, FETCH, FOR, FOREIGN, FROM, FULL, GROUP, HAVING,
IF, INNER, INTERSECT, INTERSECTS, INTERVAL, IS, JOIN, LIKE,
LIMIT, LOCALTIME, LOCALTIMESTAMP, MINUS, NATURAL, NOT, NULL,
OFFSET, ON, ORDER, PRIMARY, QUALIFY, ROW, ROWNUM, SELECT,
OFFSET, ON, ORDER, PRIMARY, QUALIFY, ROW, _ROWID_, ROWNUM, SELECT,
SYSDATE, SYSTIME, SYSTIMESTAMP, TABLE, TODAY, TOP, TRUE, UNION,
UNIQUE, VALUES, WHERE, WINDOW, WITH
</code>
......
......@@ -61,6 +61,7 @@ import static org.h2.util.ParserUtil.VALUES;
import static org.h2.util.ParserUtil.WHERE;
import static org.h2.util.ParserUtil.WINDOW;
import static org.h2.util.ParserUtil.WITH;
import static org.h2.util.ParserUtil._ROWID_;
import java.math.BigDecimal;
import java.math.BigInteger;
......@@ -511,6 +512,8 @@ public class Parser {
"QUALIFY",
// ROW
"ROW",
// _ROWID_
"_ROWID_",
// ROWNUM
"ROWNUM",
// SELECT
......@@ -3808,6 +3811,9 @@ public class Parser {
if (expr != null) {
return expr;
}
if (readIf(_ROWID_)) {
return new ExpressionColumn(database, null, objectName, Column.ROWID);
}
String name = readColumnIdentifier();
Schema s = database.findSchema(objectName);
if (readIf(OPEN_PAREN)) {
......@@ -3819,6 +3825,9 @@ public class Parser {
if (expr != null) {
return expr;
}
if (readIf(_ROWID_)) {
return new ExpressionColumn(database, schema, objectName, Column.ROWID);
}
name = readColumnIdentifier();
if (readIf(OPEN_PAREN)) {
String databaseName = schema;
......@@ -4050,6 +4059,10 @@ public class Parser {
read();
r = ValueExpression.getNull();
break;
case _ROWID_:
read();
r = new ExpressionColumn(database, null, null, Column.ROWID);
break;
case VALUE:
r = ValueExpression.get(currentValue);
read();
......
......@@ -1551,7 +1551,7 @@ public class JdbcDatabaseMetaData extends TraceObject implements
* EXISTS, FALSE, FETCH, FOR, FOREIGN, FROM, FULL, GROUP, HAVING,
* IF, INNER, INTERSECT, INTERSECTS, INTERVAL, IS, JOIN, LIKE,
* LIMIT, LOCALTIME, LOCALTIMESTAMP, MINUS, NATURAL, NOT, NULL,
* OFFSET, ON, ORDER, PRIMARY, QUALIFY, ROW, ROWNUM, SELECT,
* OFFSET, ON, ORDER, PRIMARY, QUALIFY, ROW, _ROWID_, ROWNUM, SELECT,
* SYSDATE, SYSTIME, SYSTIMESTAMP, TABLE, TODAY, TOP, TRUE, UNION,
* UNIQUE, VALUES, WHERE, WINDOW, WITH
* </pre>
......@@ -1561,7 +1561,7 @@ public class JdbcDatabaseMetaData extends TraceObject implements
@Override
public String getSQLKeywords() {
debugCodeCall("getSQLKeywords");
return "IF,INTERSECTS,LIMIT,MINUS,OFFSET,QUALIFY,ROWNUM,SYSDATE,SYSTIME,SYSTIMESTAMP,TODAY,TOP";
return "IF,INTERSECTS,LIMIT,MINUS,OFFSET,QUALIFY,_ROWID_,ROWNUM,SYSDATE,SYSTIME,SYSTIMESTAMP,TODAY,TOP";
}
/**
......
......@@ -1640,7 +1640,7 @@ public class MVMap<K, V> extends AbstractMap<K, V>
* Add, replace or remove a key-value pair.
*
* @param key the key (may not be null)
* @param value new value, it may be null when removal is indended
* @param value new value, it may be null when removal is intended
* @param decisionMaker command object to make choices during transaction.
* @return previous value, if mapping for that key existed, or null otherwise
*/
......
......@@ -227,10 +227,15 @@ public class ParserUtil {
*/
public static final int ROW = QUALIFY + 1;
/**
* The token "_ROWID_".
*/
public static final int _ROWID_ = ROW + 1;
/**
* The token "ROWNUM".
*/
public static final int ROWNUM = ROW + 1;
public static final int ROWNUM = _ROWID_ + 1;
/**
* The token "SELECT".
......@@ -352,10 +357,7 @@ public class ParserUtil {
*/
char c = s.charAt(start);
if (ignoreCase) {
/*
* Convert a-z to A-Z. This method is safe, because only A-Z
* characters are considered below.
*/
// Convert a-z to A-Z and 0x7f to _ (need special handling).
c &= 0xffdf;
}
switch (c) {
......@@ -537,6 +539,12 @@ public class ParserUtil {
return WITH;
}
return IDENTIFIER;
case '_':
// Cannot use eq() because 0x7f can be converted to '_' (0x5f)
if (end - start == 7 && "_ROWID_".regionMatches(ignoreCase, 0, s, start, 7)) {
return _ROWID_;
}
//$FALL-THROUGH$
default:
return IDENTIFIER;
}
......
......@@ -463,7 +463,7 @@ public class TestMetaData extends TestDb {
assertEquals("schema", meta.getSchemaTerm());
assertEquals("\\", meta.getSearchStringEscape());
assertEquals("IF,INTERSECTS,LIMIT,MINUS,OFFSET,QUALIFY,ROWNUM,SYSDATE,SYSTIME,SYSTIMESTAMP,TODAY,TOP",
assertEquals("IF,INTERSECTS,LIMIT,MINUS,OFFSET,QUALIFY,_ROWID_,ROWNUM,SYSDATE,SYSTIME,SYSTIMESTAMP,TODAY,TOP",
meta.getSQLKeywords());
assertTrue(meta.getURL().startsWith("jdbc:h2:"));
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论