improved mariadb alter sequence support, fix #4024

This commit is contained in:
高铁
2020-11-07 17:40:55 +08:00
parent 39b58e0474
commit 3b1154ff9e
5 changed files with 73 additions and 0 deletions
@@ -25,6 +25,9 @@ public class SQLAlterSequenceStatement extends SQLStatementImpl implements SQLAl
private Boolean cache;
private SQLExpr cacheValue;
private boolean restart;
private SQLExpr restartWith;
private Boolean order;
private boolean changeToSimple;
@@ -203,4 +206,23 @@ public class SQLAlterSequenceStatement extends SQLStatementImpl implements SQLAl
public void setChangeToTime(boolean changeToTime) {
this.changeToTime = changeToTime;
}
public boolean isRestart() {
return restart;
}
public void setRestart(boolean restart) {
this.restart = restart;
}
public SQLExpr getRestartWith() {
return restartWith;
}
public void setRestartWith(SQLExpr x) {
if (x != null) {
x.setParent(this);
}
this.restartWith = x;
}
}
@@ -6548,6 +6548,18 @@ public class SQLStatementParser extends SQLParser {
} else if (lexer.token() == Token.ORDER) {
lexer.nextToken();
stmt.setOrder(Boolean.TRUE);
continue;
} else if (lexer.identifierEquals(FnvHash.Constants.RESTART)) {
lexer.nextToken();
stmt.setRestart(true);
if (lexer.token == Token.WITH || lexer.token == Token.EQ) {
lexer.nextToken();
stmt.setRestartWith(this.exprParser.primary());
} else if(lexer.token == LITERAL_INT) {
stmt.setRestartWith(this.exprParser.primary());
}
continue;
} else if (lexer.identifierEquals("NOORDER")) {
lexer.nextToken();
@@ -7820,6 +7820,16 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
}
}
if (x.isRestart()) {
print0(ucase ? " RESTART" : " restart");
SQLExpr restartWith = x.getRestartWith();
if (restartWith != null) {
print0(ucase ? " WITH " : " with ");
restartWith.accept(this);
}
}
return false;
}
@@ -1114,5 +1114,6 @@ public final class FnvHash {
long X = fnv1a_64_lower("X");
long TRANSFORM = fnv1a_64_lower("TRANSFORM");
long NESTED = fnv1a_64_lower("NESTED");
long RESTART = fnv1a_64_lower("RESTART");
}
}
@@ -46,4 +46,32 @@ public class MySqlAlterSequence_0 extends TestCase {
String output = SQLUtils.toOracleString(stmt);
Assert.assertEquals("ALTER SEQUENCE customers_seq CYCLE CACHE 5;", output);
}
public void test_alter_seq_3() throws Exception {
String sql = "ALTER SEQUENCE s1 MINVALUE 10 RESTART;";
SQLStatement stmt = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL).get(0);
String output = SQLUtils.toOracleString(stmt);
Assert.assertEquals("ALTER SEQUENCE s1 MINVALUE 10 RESTART;", output);
}
public void test_alter_seq_4() throws Exception {
String sql = "ALTER SEQUENCE s1 MINVALUE 10 RESTART 10;";
SQLStatement stmt = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL).get(0);
String output = SQLUtils.toOracleString(stmt);
Assert.assertEquals("ALTER SEQUENCE s1 MINVALUE 10 RESTART WITH 10;", output);
}
public void test_alter_seq_5() throws Exception {
String sql = "ALTER SEQUENCE s1 MINVALUE 10 RESTART with 10;";
SQLStatement stmt = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL).get(0);
String output = SQLUtils.toOracleString(stmt);
Assert.assertEquals("ALTER SEQUENCE s1 MINVALUE 10 RESTART WITH 10;", output);
}
public void test_alter_seq_6() throws Exception {
String sql = "ALTER SEQUENCE s1 MINVALUE 10 RESTART = 10;";
SQLStatement stmt = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL).get(0);
String output = SQLUtils.toOracleString(stmt);
Assert.assertEquals("ALTER SEQUENCE s1 MINVALUE 10 RESTART WITH 10;", output);
}
}