提交 183217a6 编写于 作者: H haocao

Merge remote-tracking branch 'origin/1.5.2-SNAPSHOT' into 1.5.2-SNAPSHOT

......@@ -53,5 +53,6 @@ public enum MySQLKeyword implements Keyword {
OPTIMIZE,
ANALYZE,
IGNORE,
IDENTIFIED
IDENTIFIED,
MODIFY
}
......@@ -33,7 +33,6 @@ public enum SQLServerKeyword implements Keyword {
ROW_NUMBER,
PARTITION,
ONLY,
IF,
OUTPUT,
AUTO,
BEGIN,
......
......@@ -49,14 +49,15 @@ public enum DefaultKeyword implements Keyword {
ASC,
DESC,
GROUP,
BY,
HAVING,
INTO,
VALUES,
COLUMN,
TABLE,
TABLESPACE,
SET,
BY,
HAVING,
INTO,
VALUES,
COLUMN,
TABLE,
TABLESPACE,
SET,
ADD,
PRIMARY,
KEY,
INDEX,
......
......@@ -17,7 +17,6 @@
package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.mysql;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Keyword;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.AbstractSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.ddl.alter.AbstractAlterParser;
......@@ -31,9 +30,4 @@ public final class MySQLAlterParser extends AbstractAlterParser {
public MySQLAlterParser(final AbstractSQLParser sqlParser) {
super(sqlParser);
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
return new Keyword[] {};
}
}
......@@ -34,12 +34,12 @@ public final class MySQLCreateParser extends AbstractCreateParser {
}
@Override
protected Keyword[] getSkipWordsBetweenCreateAndKeyword() {
protected Keyword[] getSkippedKeywordsBetweenCreateAndKeyword() {
return new Keyword[] {DefaultKeyword.TEMPORARY};
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
protected Keyword[] getSkippedKeywordsBetweenCreateTableAndTableName() {
return new Keyword[] {DefaultKeyword.IF, DefaultKeyword.NOT, DefaultKeyword.EXISTS};
}
}
......@@ -17,6 +17,7 @@
package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.mysql;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Keyword;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.AbstractSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.ddl.drop.AbstractDropParser;
......@@ -33,7 +34,12 @@ public final class MySQLDropParser extends AbstractDropParser {
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
return new Keyword[] {};
protected Keyword[] getSkippedKeywordsBetweenDropAndTable() {
return new Keyword[] {DefaultKeyword.TEMPORARY};
}
@Override
protected Keyword[] getSkippedKeywordsBetweenDropTableAndTableName() {
return new Keyword[] {DefaultKeyword.IF, DefaultKeyword.EXISTS};
}
}
......@@ -17,7 +17,6 @@
package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.mysql;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Keyword;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.AbstractSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.ddl.truncate.AbstractTruncateParser;
......@@ -31,9 +30,4 @@ public final class MySQLTruncateParser extends AbstractTruncateParser {
public MySQLTruncateParser(final AbstractSQLParser sqlParser) {
super(sqlParser);
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
return new Keyword[] {};
}
}
......@@ -17,7 +17,6 @@
package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.oracle;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Keyword;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.AbstractSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.ddl.alter.AbstractAlterParser;
......@@ -31,9 +30,4 @@ public final class OracleAlterParser extends AbstractAlterParser {
public OracleAlterParser(final AbstractSQLParser sqlParser) {
super(sqlParser);
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
return new Keyword[] {};
}
}
......@@ -34,12 +34,12 @@ public final class OracleCreateParser extends AbstractCreateParser {
}
@Override
protected Keyword[] getSkipWordsBetweenCreateAndKeyword() {
protected Keyword[] getSkippedKeywordsBetweenCreateAndKeyword() {
return new Keyword[] {DefaultKeyword.GLOBAL, DefaultKeyword.TEMPORARY};
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
protected Keyword[] getSkippedKeywordsBetweenCreateTableAndTableName() {
return new Keyword[] {};
}
}
......@@ -33,7 +33,7 @@ public final class OracleDropParser extends AbstractDropParser {
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
protected Keyword[] getSkippedKeywordsBetweenDropTableAndTableName() {
return new Keyword[] {};
}
}
......@@ -17,7 +17,6 @@
package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.oracle;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Keyword;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.AbstractSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.ddl.truncate.AbstractTruncateParser;
......@@ -31,9 +30,4 @@ public final class OracleTruncateParser extends AbstractTruncateParser {
public OracleTruncateParser(final AbstractSQLParser sqlParser) {
super(sqlParser);
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
return new Keyword[] {};
}
}
......@@ -17,6 +17,7 @@
package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.postgresql;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.dialect.postgresql.PostgreSQLKeyword;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Keyword;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.AbstractSQLParser;
......@@ -34,7 +35,7 @@ public final class PostgreSQLAlterParser extends AbstractAlterParser {
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
return new Keyword[] {DefaultKeyword.IF, DefaultKeyword.NOT, DefaultKeyword.EXISTS};
protected Keyword[] getSkippedKeywordsBetweenAlterTableAndTableName() {
return new Keyword[] {DefaultKeyword.IF, DefaultKeyword.EXISTS, PostgreSQLKeyword.ONLY};
}
}
......@@ -35,12 +35,12 @@ public final class PostgreSQLCreateParser extends AbstractCreateParser {
}
@Override
protected Keyword[] getSkipWordsBetweenCreateAndKeyword() {
protected Keyword[] getSkippedKeywordsBetweenCreateAndKeyword() {
return new Keyword[] {DefaultKeyword.GLOBAL, DefaultKeyword.LOCAL, DefaultKeyword.TEMPORARY, PostgreSQLKeyword.TEMP, PostgreSQLKeyword.UNLOGGED};
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
protected Keyword[] getSkippedKeywordsBetweenCreateTableAndTableName() {
return new Keyword[] {DefaultKeyword.IF, DefaultKeyword.NOT, DefaultKeyword.EXISTS};
}
}
......@@ -34,7 +34,7 @@ public final class PostgreSQLDropParser extends AbstractDropParser {
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
protected Keyword[] getSkippedKeywordsBetweenDropTableAndTableName() {
return new Keyword[] {DefaultKeyword.IF, DefaultKeyword.EXISTS};
}
}
......@@ -34,7 +34,7 @@ public final class PostgreSQLTruncateParser extends AbstractTruncateParser {
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
protected Keyword[] getSkippedKeywordsBetweenTruncateTableAndTableName() {
return new Keyword[] {PostgreSQLKeyword.ONLY};
}
}
......@@ -17,7 +17,6 @@
package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.sqlserver;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Keyword;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.AbstractSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.ddl.alter.AbstractAlterParser;
......@@ -31,9 +30,4 @@ public final class SQLServerAlterParser extends AbstractAlterParser {
public SQLServerAlterParser(final AbstractSQLParser sqlParser) {
super(sqlParser);
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
return new Keyword[] {};
}
}
......@@ -33,12 +33,12 @@ public final class SQLServerCreateParser extends AbstractCreateParser {
}
@Override
protected Keyword[] getSkipWordsBetweenCreateAndKeyword() {
protected Keyword[] getSkippedKeywordsBetweenCreateAndKeyword() {
return new Keyword[] {};
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
protected Keyword[] getSkippedKeywordsBetweenCreateTableAndTableName() {
return new Keyword[] {};
}
}
......@@ -34,7 +34,7 @@ public final class SQLServerDropParser extends AbstractDropParser {
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
protected Keyword[] getSkippedKeywordsBetweenDropTableAndTableName() {
return new Keyword[] {DefaultKeyword.IF, DefaultKeyword.EXISTS};
}
}
......@@ -17,7 +17,6 @@
package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.sqlserver;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Keyword;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.AbstractSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.ddl.truncate.AbstractTruncateParser;
......@@ -31,9 +30,4 @@ public final class SQLServerTruncateParser extends AbstractTruncateParser {
public SQLServerTruncateParser(final AbstractSQLParser sqlParser) {
super(sqlParser);
}
@Override
protected Keyword[] getSkipWordsBetweenKeywordAndTableName() {
return new Keyword[] {};
}
}
......@@ -51,10 +51,12 @@ public abstract class AbstractAlterParser implements SQLStatementParser {
if (!sqlParser.skipIfEqual(DefaultKeyword.TABLE)) {
throw new SQLParsingUnsupportedException(sqlParser.getLexer().getCurrentToken().getType());
}
getSqlParser().skipAll(getSkipWordsBetweenKeywordAndTableName());
getSqlParser().skipAll(getSkippedKeywordsBetweenAlterTableAndTableName());
sqlParser.parseSingleTable(alterStatement);
return alterStatement;
}
protected abstract Keyword[] getSkipWordsBetweenKeywordAndTableName();
protected Keyword[] getSkippedKeywordsBetweenAlterTableAndTableName() {
return new Keyword[0];
}
}
......@@ -48,16 +48,16 @@ public abstract class AbstractCreateParser implements SQLStatementParser {
@Override
public DDLStatement parse() {
sqlParser.getLexer().nextToken();
getSqlParser().skipAll(getSkipWordsBetweenCreateAndKeyword());
getSqlParser().skipAll(getSkippedKeywordsBetweenCreateAndKeyword());
if (!sqlParser.skipIfEqual(DefaultKeyword.TABLE)) {
throw new SQLParsingUnsupportedException(sqlParser.getLexer().getCurrentToken().getType());
}
getSqlParser().skipAll(getSkipWordsBetweenKeywordAndTableName());
getSqlParser().skipAll(getSkippedKeywordsBetweenCreateTableAndTableName());
sqlParser.parseSingleTable(createStatement);
return createStatement;
}
protected abstract Keyword[] getSkipWordsBetweenCreateAndKeyword();
protected abstract Keyword[] getSkippedKeywordsBetweenCreateAndKeyword();
protected abstract Keyword[] getSkipWordsBetweenKeywordAndTableName();
protected abstract Keyword[] getSkippedKeywordsBetweenCreateTableAndTableName();
}
......@@ -48,13 +48,18 @@ public abstract class AbstractDropParser implements SQLStatementParser {
@Override
public DDLStatement parse() {
sqlParser.getLexer().nextToken();
getSqlParser().skipAll(getSkippedKeywordsBetweenDropAndTable());
if (!sqlParser.skipIfEqual(DefaultKeyword.TABLE)) {
throw new SQLParsingUnsupportedException(sqlParser.getLexer().getCurrentToken().getType());
}
getSqlParser().skipAll(getSkipWordsBetweenKeywordAndTableName());
getSqlParser().skipAll(getSkippedKeywordsBetweenDropTableAndTableName());
sqlParser.parseSingleTable(dropStatement);
return dropStatement;
}
protected abstract Keyword[] getSkipWordsBetweenKeywordAndTableName();
protected Keyword[] getSkippedKeywordsBetweenDropAndTable() {
return new Keyword[0];
}
protected abstract Keyword[] getSkippedKeywordsBetweenDropTableAndTableName();
}
......@@ -20,7 +20,6 @@ package com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.ddl.truncate;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Keyword;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.AbstractSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsupportedException;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatementParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.ddl.DDLStatement;
import lombok.AccessLevel;
......@@ -48,13 +47,13 @@ public abstract class AbstractTruncateParser implements SQLStatementParser {
@Override
public DDLStatement parse() {
sqlParser.getLexer().nextToken();
if (!sqlParser.skipIfEqual(DefaultKeyword.TABLE)) {
throw new SQLParsingUnsupportedException(sqlParser.getLexer().getCurrentToken().getType());
}
getSqlParser().skipAll(getSkipWordsBetweenKeywordAndTableName());
sqlParser.skipIfEqual(DefaultKeyword.TABLE);
getSqlParser().skipAll(getSkippedKeywordsBetweenTruncateTableAndTableName());
sqlParser.parseSingleTable(truncateStatement);
return truncateStatement;
}
protected abstract Keyword[] getSkipWordsBetweenKeywordAndTableName();
protected Keyword[] getSkippedKeywordsBetweenTruncateTableAndTableName() {
return new Keyword[0];
}
}
<?xml version="1.0" encoding="UTF-8"?>
<asserts>
<assert id="assertAlterTable">
<tables>
<table name="t_temp" />
</tables>
</assert>
<assert id="assertAlterTableIfExistAndOnly">
<tables>
<table name="t_temp" />
</tables>
</assert>
</asserts>
......@@ -15,4 +15,19 @@
<table name="t_temp" />
</tables>
</assert>
<assert id="assertCreateTempGlobalTable">
<tables>
<table name="t_temp" />
</tables>
</assert>
<assert id="assertCreateTempLocalTemporaryTable">
<tables>
<table name="t_temp" />
</tables>
</assert>
<assert id="assertCreateUnloggedTable">
<tables>
<table name="t_temp" />
</tables>
</assert>
</asserts>
<?xml version="1.0" encoding="UTF-8"?>
<asserts>
<assert id="assertDropTable">
<tables>
<table name="t_temp" />
</tables>
</assert>
<assert id="assertDropTableIfExist">
<tables>
<table name="t_temp" />
</tables>
</assert>
<assert id="assertDropTemporaryTable">
<tables>
<table name="t_temp" />
</tables>
</assert>
<assert id="assertDropTableRestrict">
<tables>
<table name="t_temp" />
</tables>
</assert>
<assert id="assertDropTableCascade">
<tables>
<table name="t_temp" />
</tables>
</assert>
<assert id="assertDropTableCascadeConstraintsAndPurge">
<tables>
<table name="t_temp" />
</tables>
</assert>
</asserts>
<?xml version="1.0" encoding="UTF-8"?>
<asserts>
<assert id="assertTruncateTable">
<tables>
<table name="t_temp" />
</tables>
</assert>
<assert id="assertTruncateTableOnly">
<tables>
<table name="t_temp" />
</tables>
</assert>
</asserts>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertAlterTable" value="ALTER TABLE t_temp ADD name varchar" />
<sql id="assertAlterTableIfExistAndOnly" value="ALTER TABLE IF EXISTS ONLY t_temp ADD name varchar" type="PostgreSQL" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertCreateTable" value="CREATE TABLE t_temp(id int)" />
<sql id="assertCreateTableIfNotExist" value="CREATE TABLE IF NOT EXISTS t_temp(id int)" type="PostgreSQL"/>
<sql id="assertCreateTemporaryTable" value="CREATE TEMPORARY TABLE IF NOT EXISTS t_temp(id int)" type="H2,MySQL,PostgreSQL"/>
<sql id="assertCreateTableIfNotExist" value="CREATE TABLE IF NOT EXISTS t_temp(id int)" type="MySQL,PostgreSQL" />
<sql id="assertCreateTemporaryTable" value="CREATE TEMPORARY TABLE IF NOT EXISTS t_temp(id int)" type="MySQL,PostgreSQL" />
<sql id="assertCreateGlobalTemporaryTable" value="CREATE GLOBAL TEMPORARY TABLE t_temp(id int)" type="Oracle,PostgreSQL" />
<sql id="assertCreateTempLocalTempTable" value="CREATE LOCAL TEMP TABLE t_temp(id int)" type="PostgreSQL" />
<sql id="assertCreateUnloggedTable" value="CREATE UNLOGGED TABLE t_temp(id int)" type="PostgreSQL" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertDropTable" value="DROP TABLE t_temp(id int)" />
<sql id="assertDropTableIfExist" value="DROP TABLE IF EXISTS t_temp(id int)" type="MySQL,PostgreSQL,SQLServer" />
<sql id="assertDropTemporaryTable" value="DROP TEMPORARY TABLE t_temp(id int)" type="MySQL" />
<sql id="assertDropTableRestrict" value="DROP TABLE t_temp(id int) RESTRICT" type="MySQL,PostgreSQL" />
<sql id="assertDropTableCascade" value="DROP TABLE t_temp(id int) CASCADE" type="MySQL,PostgreSQL" />
<sql id="assertDropTableCascadeConstraintsAndPurge" value="DROP TABLE t_temp(id int) CASCADE CONSTRAINTS PURGE" type="Oracle" />
</sqls>
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertTruncateTable" value="TRUNCATE TABLE t_temp" />
<sql id="assertTruncateTableOnly" value="TRUNCATE TABLE ONLY t_temp" type="PostgreSQL" />
</sqls>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册