Skip to content

Commit

Permalink
For #475.
Browse files Browse the repository at this point in the history
  • Loading branch information
haocao committed Dec 27, 2017
1 parent bf9657c commit 8f06e81
Show file tree
Hide file tree
Showing 12 changed files with 71 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ public enum MySQLKeyword implements Keyword {
IGNORE,
CHANGE,
FIRST,
FULLTEXT,
SPATIAL,
ALGORITHM,
CHARACTER,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ public enum DefaultKeyword implements Keyword {
NOSORT,
REVERSE,
COMPILE,
FULLTEXT,

/*
Alter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

package io.shardingjdbc.core.parsing.parser.dialect.mysql.sql;

import io.shardingjdbc.core.parsing.lexer.dialect.mysql.MySQLKeyword;
import io.shardingjdbc.core.rule.ShardingRule;
import io.shardingjdbc.core.parsing.lexer.token.DefaultKeyword;
import io.shardingjdbc.core.parsing.lexer.token.Keyword;
Expand All @@ -43,4 +44,9 @@ protected Keyword[] getSkippedKeywordsBetweenCreateAndKeyword() {
protected Keyword[] getSkippedKeywordsBetweenCreateTableAndTableName() {
return new Keyword[] {DefaultKeyword.IF, DefaultKeyword.NOT, DefaultKeyword.EXISTS};
}

@Override
protected Keyword[] getSkippedKeywordsBetweenCreateIndexAndKeyword() {
return new Keyword[] {DefaultKeyword.UNIQUE, DefaultKeyword.FULLTEXT, MySQLKeyword.SPATIAL};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,9 @@ protected Keyword[] getSkippedKeywordsBetweenCreateAndKeyword() {
protected Keyword[] getSkippedKeywordsBetweenCreateTableAndTableName() {
return new Keyword[] {};
}

@Override
protected Keyword[] getSkippedKeywordsBetweenCreateIndexAndKeyword() {
return new Keyword[] {DefaultKeyword.UNIQUE, DefaultKeyword.BITMAP};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,9 @@ protected Keyword[] getSkippedKeywordsBetweenCreateAndKeyword() {
protected Keyword[] getSkippedKeywordsBetweenCreateTableAndTableName() {
return new Keyword[] {DefaultKeyword.IF, DefaultKeyword.NOT, DefaultKeyword.EXISTS};
}

@Override
protected Keyword[] getSkippedKeywordsBetweenCreateIndexAndKeyword() {
return new Keyword[] {DefaultKeyword.UNIQUE};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@

package io.shardingjdbc.core.parsing.parser.dialect.sqlserver.sql;

import io.shardingjdbc.core.rule.ShardingRule;
import io.shardingjdbc.core.parsing.lexer.token.Keyword;
import io.shardingjdbc.core.parsing.lexer.LexerEngine;
import io.shardingjdbc.core.parsing.lexer.token.DefaultKeyword;
import io.shardingjdbc.core.parsing.lexer.token.Keyword;
import io.shardingjdbc.core.parsing.parser.sql.ddl.create.AbstractCreateParser;
import io.shardingjdbc.core.rule.ShardingRule;

/**
* Create parser for SQLServer.
Expand All @@ -42,4 +43,9 @@ protected Keyword[] getSkippedKeywordsBetweenCreateAndKeyword() {
protected Keyword[] getSkippedKeywordsBetweenCreateTableAndTableName() {
return new Keyword[] {};
}

@Override
protected Keyword[] getSkippedKeywordsBetweenCreateIndexAndKeyword() {
return new Keyword[] {DefaultKeyword.UNIQUE, DefaultKeyword.FULLTEXT};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@

package io.shardingjdbc.core.parsing.parser.sql.ddl.create;

import io.shardingjdbc.core.rule.ShardingRule;
import io.shardingjdbc.core.parsing.lexer.LexerEngine;
import io.shardingjdbc.core.parsing.lexer.token.DefaultKeyword;
import io.shardingjdbc.core.parsing.lexer.token.Keyword;
import io.shardingjdbc.core.parsing.parser.clause.TableReferencesClauseParser;
import io.shardingjdbc.core.parsing.parser.sql.SQLParser;
import io.shardingjdbc.core.parsing.parser.sql.ddl.DDLStatement;
import io.shardingjdbc.core.rule.ShardingRule;
import lombok.AccessLevel;
import lombok.Getter;

Expand All @@ -50,9 +50,15 @@ public AbstractCreateParser(final ShardingRule shardingRule, final LexerEngine l
@Override
public DDLStatement parse() {
lexerEngine.nextToken();
lexerEngine.skipAll(getSkippedKeywordsBetweenCreateIndexAndKeyword());
lexerEngine.skipAll(getSkippedKeywordsBetweenCreateAndKeyword());
lexerEngine.unsupportedIfNotSkip(DefaultKeyword.TABLE);
lexerEngine.skipAll(getSkippedKeywordsBetweenCreateTableAndTableName());
if (lexerEngine.equalAny(DefaultKeyword.INDEX)) {
lexerEngine.skipUntil(DefaultKeyword.ON);
lexerEngine.nextToken();
} else {
lexerEngine.unsupportedIfNotSkip(DefaultKeyword.TABLE);
lexerEngine.skipAll(getSkippedKeywordsBetweenCreateTableAndTableName());
}
DDLStatement result = new DDLStatement();
tableReferencesClauseParser.parse(result, true);
return result;
Expand All @@ -61,4 +67,6 @@ public DDLStatement parse() {
protected abstract Keyword[] getSkippedKeywordsBetweenCreateAndKeyword();

protected abstract Keyword[] getSkippedKeywordsBetweenCreateTableAndTableName();

protected abstract Keyword[] getSkippedKeywordsBetweenCreateIndexAndKeyword();
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,14 @@ public AbstractDropParser(final ShardingRule shardingRule, final LexerEngine lex
@Override
public DDLStatement parse() {
lexerEngine.nextToken();
lexerEngine.skipAll(getSkippedKeywordsBetweenDropAndTable());
lexerEngine.unsupportedIfNotSkip(DefaultKeyword.TABLE);
lexerEngine.skipAll(getSkippedKeywordsBetweenDropTableAndTableName());
if (lexerEngine.equalAny(DefaultKeyword.INDEX)) {
lexerEngine.skipUntil(DefaultKeyword.ON);
lexerEngine.nextToken();
} else {
lexerEngine.skipAll(getSkippedKeywordsBetweenDropAndTable());
lexerEngine.unsupportedIfNotSkip(DefaultKeyword.TABLE);
lexerEngine.skipAll(getSkippedKeywordsBetweenDropTableAndTableName());
}
DDLStatement result = new DDLStatement();
tableReferencesClauseParser.parse(result, true);
return result;
Expand Down
16 changes: 16 additions & 0 deletions sharding-jdbc-core/src/test/resources/parser/create.xml
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,20 @@
<table-token begin-position="22" original-literals="t_log" />
</table-tokens>
</assert>
` <assert id="assertCreateIndex">
<tables>
<table name="t_log" />
</tables>
<table-tokens>
<table-token begin-position="30" original-literals="t_log" />
</table-tokens>
</assert>
<assert id="assertCreateUniqueIndex">
<tables>
<table name="t_log" />
</tables>
<table-tokens>
<table-token begin-position="37" original-literals="t_log" />
</table-tokens>
</assert>
</asserts>
8 changes: 8 additions & 0 deletions sharding-jdbc-core/src/test/resources/parser/drop.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,12 @@
<table-token begin-position="11" original-literals="t_log" />
</table-tokens>
</assert>
<assert id="assertDropIndex">
<tables>
<table name="t_log" />
</tables>
<table-tokens>
<table-token begin-position="26" original-literals="t_log" />
</table-tokens>
</assert>
</asserts>
2 changes: 2 additions & 0 deletions sharding-jdbc-core/src/test/resources/sql/ddl/create.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@
<sql id="assertCreateGlobalTemporaryTable" value="CREATE GLOBAL TEMPORARY TABLE t_temp_log(id int, status varchar(10))" type="Oracle,PostgreSQL" />
<sql id="assertCreateLocalTempTable" value="CREATE LOCAL TEMP TABLE t_temp_log(id int, status varchar(10))" type="PostgreSQL" />
<sql id="assertCreateUnloggedTable" value="CREATE UNLOGGED TABLE t_log(id int, status varchar(10))" type="PostgreSQL" />
<sql id="assertCreateIndex" value="CREATE INDEX t_order_index ON t_log (id)" />
<sql id="assertCreateUniqueIndex" value="CREATE UNIQUE INDEX t_order_index ON t_log (id)" />
</sqls>
1 change: 1 addition & 0 deletions sharding-jdbc-core/src/test/resources/sql/ddl/drop.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@
<sql id="assertDropTableRestrict" value="DROP TABLE t_log RESTRICT" type="MySQL,PostgreSQL" />
<sql id="assertDropTableCascade" value="DROP TABLE t_log CASCADE" type="MySQL,PostgreSQL" />
<sql id="assertDropTableCascadeConstraintsAndPurge" value="DROP TABLE t_log CASCADE CONSTRAINTS PURGE" type="Oracle" />
<sql id="assertDropIndex" value="DROP INDEX t_log_index ON t_log" />
</sqls>

0 comments on commit 8f06e81

Please sign in to comment.