Merge pull request #588 from bucketli/master

1.fix KEY using btree not fit mysql 5.5 syntax,2.fix ALTER TABLE COLLATE...
This commit is contained in:
高铁
2014-07-11 18:12:35 +08:00
7 changed files with 264 additions and 13 deletions
@@ -613,11 +613,11 @@ public class MySqlCreateTableParser extends SQLCreateTableParser {
MySqlKey key = new MySqlKey();
key.setHasConstaint(hasConstaint);
if (identifierEquals("USING")) {
lexer.nextToken();
key.setIndexType(lexer.stringVal());
lexer.nextToken();
}
// if (identifierEquals("USING")) {
// lexer.nextToken();
// key.setIndexType(lexer.stringVal());
// lexer.nextToken();
// }
if (lexer.token() == Token.IDENTIFIER) {
SQLName indexName = this.exprParser.name();
@@ -625,6 +625,13 @@ public class MySqlCreateTableParser extends SQLCreateTableParser {
key.setIndexName(indexName);
}
}
//5.5语法 USING BTREE 放在index 名字后
if (identifierEquals("USING")) {
lexer.nextToken();
key.setIndexType(lexer.stringVal());
lexer.nextToken();
}
accept(Token.LPAREN);
for (;;) {
@@ -373,11 +373,15 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
if (x.getCharSetName() != null) {
print(" CHARACTER SET ");
print(x.getCharSetName());
}
if (x.getCollate() != null) {
if (x.getCollate() != null) {
print(" COLLATE ");
print(x.getCollate());
}
}else if (x.getCollate() != null) {
print(" COLLATE ");
print(x.getCollate());
}
return false;
}
@@ -404,7 +408,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
print(x.getIndexType());
}
print("(");
print(" (");
for (int i = 0, size = x.getColumns().size(); i < size; ++i) {
if (i != 0) {
print(", ");
@@ -237,7 +237,7 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS
@Override
public boolean visit(MySqlTableIndex x) {
return true;
return false;
}
@Override
@@ -184,13 +184,39 @@ public class SQLParser {
return alias;
}
protected void printError(Token token){
String arround;
if (lexer.mark >= 0 && (lexer.text.length() > lexer.mark + 30)) {
if (lexer.mark - 5 > 0) {
arround = lexer.text.substring(lexer.mark - 5, lexer.mark + 30);
} else {
arround = lexer.text.substring(lexer.mark, lexer.mark + 30);
}
} else if (lexer.mark >= 0) {
if (lexer.mark - 5 > 0) {
arround = lexer.text.substring(lexer.mark - 5);
} else {
arround = lexer.text.substring(lexer.mark);
}
} else {
arround = lexer.text;
}
// throw new
// ParserException("syntax error, error arround:'"+arround+"',expect "
// + token + ", actual " + lexer.token() + " "
// + lexer.stringVal() + ", pos " + this.lexer.pos());
throw new ParserException("syntax error, error in :'" + arround + "',expect " + token + ", actual "
+ lexer.token() + " " + lexer.stringVal());
}
public void accept(Token token) {
if (lexer.token() == token) {
lexer.nextToken();
} else {
setErrorEndPos(lexer.pos());
throw new ParserException("syntax error, expect " + token + ", actual " + lexer.token() + " "
+ lexer.stringVal() + ", pos " + this.lexer.pos());
printError(token);
}
}
@@ -297,8 +297,10 @@ public class SQLStatementParser extends SQLParser {
continue;
}
throw new ParserException("syntax error, " + lexer.token() + " " + lexer.stringVal() + ", pos "
+ lexer.pos());
// throw new ParserException("syntax error, " + lexer.token() + " "
// + lexer.stringVal() + ", pos "
// + lexer.pos());
printError(lexer.token());
}
}