Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1335,7 +1335,7 @@ public SQLExpr primaryRest(SQLExpr expr) {
expr = dotRest(expr);
return primaryRest(expr);
} else if (lexer.identifierEquals(FnvHash.Constants.SETS) //
&& expr.getClass() == SQLIdentifierExpr.class //
&& expr.getClass() == SQLIdentifierExpr.class //
&& "GROUPING".equalsIgnoreCase(((SQLIdentifierExpr) expr).getName())) {
SQLGroupingSetExpr groupingSets = new SQLGroupingSetExpr();
lexer.nextToken();
Expand Down Expand Up @@ -1950,6 +1950,10 @@ public SQLName name() {
} else {
switch (lexer.token) {
// case MODEL:
case MODE:
case ERRORS:
case NOWAIT:
case COMMIT:
case PCTFREE:
case INITRANS:
case MAXTRANS:
Expand Down
35 changes: 35 additions & 0 deletions src/test/java/com/alibaba/druid/bvt/bug/Issue4253.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.alibaba.druid.bvt.bug;
import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.parser.SQLParserUtils;
import com.alibaba.druid.sql.parser.SQLStatementParser;
import com.alibaba.druid.util.JdbcConstants;
import com.alibaba.druid.util.JdbcUtils;
import com.alibaba.druid.util.Utils;
import junit.framework.TestCase;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.StandardCharsets;

/**
* Created by wenshao on 03/02/2017.
*/
public class Issue4253 extends TestCase {
private final DbType dbType = JdbcConstants.ORACLE;

public void test_for_issue() throws Exception {
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("bvt/parser/oracle-63.txt");
Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8);
String input = Utils.read(reader);
JdbcUtils.close(reader);
SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(input, dbType);
Exception error = null;
try {
parser.parseStatement(true);
} catch (Exception ex) {
error = ex;
}
assertNull(error);
}
}
127 changes: 127 additions & 0 deletions src/test/resources/bvt/parser/oracle-63.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
CREATE TABLE CLOUDCANAL.BB (
FOUND NUMBER(10, 0),
FULL NUMBER(10, 0),
GENERAL NUMBER(10, 0),
GEOMCOLLECTION NUMBER(10, 0),
GEOMETRY NUMBER(10, 0),
GEOMETRYCOLLECTION NUMBER(10, 0),
GET_FORMAT NUMBER(10, 0),
GET_MASTER_PUBLIC_KEY NUMBER(10, 0),
GET_SOURCE_PUBLIC_KEY NUMBER(10, 0),
GLOBAL NUMBER(10, 0),
GRANTS NUMBER(10, 0),
GROUP_REPLICATION NUMBER(10, 0),
HANDLER NUMBER(10, 0),
HASH NUMBER(10, 0),
HELP NUMBER(10, 0),
HISTOGRAM NUMBER(10, 0),
HISTORY NUMBER(10, 0),
HOST NUMBER(10, 0),
HOSTS NUMBER(10, 0),
HOUR NUMBER(10, 0),
IDENTIFIED NUMBER(10, 0),
IGNORE_SERVER_IDS NUMBER(10, 0),
IMPORT NUMBER(10, 0),
INACTIVE NUMBER(10, 0),
INDEXES NUMBER(10, 0),
INITIAL_SIZE NUMBER(10, 0),
INSERT_METHOD NUMBER(10, 0),
INSTALL NUMBER(10, 0),
INSTANCE NUMBER(10, 0),
INVISIBLE NUMBER(10, 0),
INVOKER NUMBER(10, 0),
IO NUMBER(10, 0),
IO_THREAD NUMBER(10, 0),
IPC NUMBER(10, 0),
ISOLATION NUMBER(10, 0),
ISSUER NUMBER(10, 0),
JSON NUMBER(10, 0),
JSON_VALUE NUMBER(10, 0),
KEY_BLOCK_SIZE NUMBER(10, 0),
LANGUAGE NUMBER(10, 0),
LAST NUMBER(10, 0),
LEAVES NUMBER(10, 0),
LESS NUMBER(10, 0),
LEVEL NUMBER(10, 0),
LINESTRING NUMBER(10, 0),
LIST NUMBER(10, 0),
LOCAL NUMBER(10, 0),
LOCKED NUMBER(10, 0),
LOCKS NUMBER(10, 0),
LOGFILE NUMBER(10, 0),
LOGS NUMBER(10, 0),
MASTER NUMBER(10, 0),
MASTER_AUTO_POSITION NUMBER(10, 0),
MASTER_COMPRESSION_ALGORITHMS NUMBER(10, 0),
MASTER_CONNECT_RETRY NUMBER(10, 0),
MASTER_DELAY NUMBER(10, 0),
MASTER_HEARTBEAT_PERIOD NUMBER(10, 0),
MASTER_HOST NUMBER(10, 0),
MASTER_LOG_FILE NUMBER(10, 0),
MASTER_LOG_POS NUMBER(10, 0),
MASTER_PASSWORD NUMBER(10, 0),
MASTER_PORT NUMBER(10, 0),
MASTER_PUBLIC_KEY_PATH NUMBER(10, 0),
MASTER_RETRY_COUNT NUMBER(10, 0),
MASTER_SSL NUMBER(10, 0),
MASTER_SSL_CA NUMBER(10, 0),
MASTER_SSL_CAPATH NUMBER(10, 0),
MASTER_SSL_CERT NUMBER(10, 0),
MASTER_SSL_CIPHER NUMBER(10, 0),
MASTER_SSL_CRL NUMBER(10, 0),
MASTER_SSL_CRLPATH NUMBER(10, 0),
MASTER_SSL_KEY NUMBER(10, 0),
MASTER_TLS_CIPHERSUITES NUMBER(10, 0),
MASTER_TLS_VERSION NUMBER(10, 0),
MASTER_USER NUMBER(10, 0),
MASTER_ZSTD_COMPRESSION_LEVEL NUMBER(10, 0),
MAX_CONNECTIONS_PER_HOUR NUMBER(10, 0),
MAX_QUERIES_PER_HOUR NUMBER(10, 0),
MAX_ROWS NUMBER(10, 0),
MAX_SIZE NUMBER(10, 0),
MAX_UPDATES_PER_HOUR NUMBER(10, 0),
MAX_USER_CONNECTIONS NUMBER(10, 0),
MEDIUM NUMBER(10, 0),
MEMBER NUMBER(10, 0),
MEMORY NUMBER(10, 0),
MERGE NUMBER(10, 0),
MESSAGE_TEXT NUMBER(10, 0),
MICROSECOND NUMBER(10, 0),
MIGRATE NUMBER(10, 0),
MINUTE NUMBER(10, 0),
MIN_ROWS NUMBER(10, 0),
MODE NUMBER(10, 0),
MODIFY NUMBER(10, 0),
MONTH NUMBER(10, 0),
MULTILINESTRING NUMBER(10, 0),
MULTIPOINT NUMBER(10, 0),
MULTIPOLYGON NUMBER(10, 0),
MUTEX NUMBER(10, 0),
MYSQL_ERRNO NUMBER(10, 0),
NAME NUMBER(10, 0),
NAMES NUMBER(10, 0),
NATIONAL NUMBER(10, 0),
NCHAR NUMBER(10, 0),
NDB NUMBER(10, 0),
NDBCLUSTER NUMBER(10, 0),
NESTED NUMBER(10, 0),
NETWORK_NAMESPACE NUMBER(10, 0),
NEVER NUMBER(10, 0),
NEW NUMBER(10, 0),
NEXT NUMBER(10, 0),
NO NUMBER(10, 0),
NODEGROUP NUMBER(10, 0),
NONE NUMBER(10, 0),
NOWAIT NUMBER(10, 0),
NO_WAIT NUMBER(10, 0),
NULLS NUMBER(10, 0),
NUMBER NUMBER(10, 0),
NVARCHAR NUMBER(10, 0)
)
PCTFREE 10
PCTUSED 40
INITRANS 1
MAXTRANS 255
NOCOMPRESS
LOGGING
TABLESPACE USERS