fix for pull request #3561

This commit is contained in:
高铁
2020-09-17 20:42:42 +08:00
parent 63a91957bf
commit a69b47d1f5
2 changed files with 34 additions and 18 deletions
@@ -2716,18 +2716,33 @@ public class SQLExprParser extends SQLParser {
}
}
if (typeNameHashCode == FnvHash.Constants.NATIONAL) {
if (lexer.token == Token.IDENTIFIER) {
String nationalName = lexer.stringVal();
if ("varchar".equalsIgnoreCase(nationalName) || "char"
.equalsIgnoreCase(nationalName)) {
typeName = (" n" + lexer.stringVal().toLowerCase());
lexer.nextToken();
}
if (isCharType(typeName)) {
SQLCharacterDataType charType = new SQLCharacterDataType(typeName);
if (lexer.token == Token.LPAREN) {
lexer.nextToken();
SQLExpr arg = this.expr();
arg.setParent(charType);
charType.addArgument(arg);
accept(Token.RPAREN);
}
charType = (SQLCharacterDataType) parseCharTypeRest(charType);
if (lexer.token == Token.HINT) {
List<SQLCommentHint> hints = this.parseHints();
charType.setHints(hints);
}
return charType;
}
if (isCharType(typeName)) {
if ("national".equalsIgnoreCase(typeName) &&
(lexer.identifierEquals(FnvHash.Constants.CHAR)
|| lexer.identifierEquals(FnvHash.Constants.VARCHAR))) {
typeName += ' ' + lexer.stringVal();
lexer.nextToken();
SQLCharacterDataType charType = new SQLCharacterDataType(typeName);
if (lexer.token == Token.LPAREN) {
@@ -26,16 +26,17 @@ public class MySqlCreateTableTest135 extends MysqlTest {
assertEquals(1, statementList.size());
assertEquals("CREATE TABLE MQ_TOPIC_RECORD (\n"
+ "\tTOPIC_ID bigint(11) NOT NULL,\n"
+ "\tBROKENNAME nvarchar(50),\n"
+ "\tBROKENNAME2 nchar(50)\n"
+ ");", stmt.toString());
assertEquals("CREATE TABLE MQ_TOPIC_RECORD (\n" +
"\tTOPIC_ID bigint(11) NOT NULL,\n" +
"\tBROKENNAME national VARCHAR(50),\n" +
"\tBROKENNAME2 national CHAR(50)\n" +
");", stmt.toString());
assertEquals("create table MQ_TOPIC_RECORD (\n"
+ "\tTOPIC_ID bigint(11) not null,\n"
+ "\tBROKENNAME nvarchar(50),\n"
+ "\tBROKENNAME2 nchar(50)\n" + ");", stmt.toLowerCaseString());
assertEquals("create table MQ_TOPIC_RECORD (\n" +
"\tTOPIC_ID bigint(11) not null,\n" +
"\tBROKENNAME national VARCHAR(50),\n" +
"\tBROKENNAME2 national CHAR(50)\n" +
");", stmt.toLowerCaseString());
}
}