}
String typeName = lexer.stringVal();
lexer.nextToken();
SQLCharactorDataType dataType = new SQLCharactorDataType(typeName);
if (lexer.token() == (Token.LPAREN)) {
lexer.nextToken();
exprList(dataType.getArguments());
accept(Token.RPAREN);
}
if (lexer.token() != Token.IDENTIFIER) {
throw new ParserException();
}
if (lexer.stringVal().equalsIgnoreCase("CHARACTER")) {
if (lexer.token() != Token.IDENTIFIER) {
throw new ParserException();
}
if (!lexer.stringVal().equalsIgnoreCase("SET")) {
throw new ParserException();
}
if (lexer.token() != Token.IDENTIFIER) {
throw new ParserException();
}
dataType.setCharSetName(lexer.stringVal());
lexer.nextToken();
if (lexer.token() == Token.IDENTIFIER) {
if (lexer.stringVal().equalsIgnoreCase("COLLATE")) {
lexer.nextToken();
if (lexer.token() != Token.IDENTIFIER) {
throw new ParserException();
}
dataType.setCollate(lexer.stringVal());
lexer.nextToken();
}
}
}
return dataType;