fix merge build error

This commit is contained in:
shaojin.wensj
2023-02-22 22:37:23 +08:00
parent c6091bf86d
commit ecbca9efab
6 changed files with 130 additions and 7 deletions
@@ -109,6 +109,7 @@ public class OracleLexer extends Lexer {
map.put("PARTITION", Token.PARTITION);
map.put("TRUE", Token.TRUE);
map.put("FALSE", Token.FALSE);
map.put("CASCADE", Token.CASCADE);
map.put(",", Token.COMMA);
map.put("(", Token.LPAREN);
@@ -2910,9 +2910,17 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
String alias = x.getAlias();
List<SQLName> columns = x.getColumnsDirect();
if (alias != null) {
print(' ');
print0(ucase ? " AS " : " as ");
print0(alias);
SQLObject parent = x.getParent();
if (parent instanceof SQLCreateIndexStatement
|| parent instanceof SQLMergeStatement
|| parent instanceof SQLDeleteStatement) {
print(' ');
print0(alias);
} else {
print(' ');
print0(ucase ? " AS " : " as ");
print0(alias);
}
}
if (columns != null && columns.size() > 0) {
@@ -160,7 +160,6 @@ public class Keywords {
map.put("INOUT", Token.INOUT);
map.put("LIMIT", Token.LIMIT);
map.put("CASCADE", Token.CASCADE);
DEFAULT_KEYWORDS = new Keywords(map);
@@ -35,6 +35,8 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import static com.alibaba.druid.sql.parser.Token.CASCADE;
public class SQLExprParser extends SQLParser {
public static final String[] AGGREGATE_FUNCTIONS;
@@ -1029,6 +1031,10 @@ public class SQLExprParser extends SQLParser {
sqlExpr = new SQLIdentifierExpr("DATABASE");
lexer.nextToken();
break;
case CASCADE:
sqlExpr = new SQLIdentifierExpr("CASCADE");
lexer.nextToken();
break;
case LOCK:
sqlExpr = new SQLIdentifierExpr("LOCK");
lexer.nextToken();
@@ -4946,7 +4952,7 @@ public class SQLExprParser extends SQLParser {
if (lexer.token() == Token.RESTRICT || lexer.identifierEquals(FnvHash.Constants.RESTRICT)) {
option = SQLForeignKeyImpl.Option.RESTRICT;
lexer.nextToken();
} else if (lexer.identifierEquals(FnvHash.Constants.CASCADE)) {
} else if (lexer.identifierEquals(FnvHash.Constants.CASCADE) || lexer.token == CASCADE) {
option = SQLForeignKeyImpl.Option.CASCADE;
lexer.nextToken();
} else if (lexer.token() == Token.SET) {
@@ -500,6 +500,115 @@ public class SQLParserUtils {
return buf.toString();
}
public static List<String> split(String sql, DbType dbType) {
if (dbType == null) {
dbType = DbType.other;
}
{
Lexer lexer = createLexer(sql, dbType);
lexer.nextToken();
boolean script = false;
if (dbType == DbType.odps && lexer.token == Token.VARIANT) {
script = true;
}
if (script) {
return Collections.singletonList(sql);
}
}
List list = new ArrayList();
Lexer lexer = createLexer(sql, dbType);
lexer.config(SQLParserFeature.SkipComments, false);
lexer.config(SQLParserFeature.KeepComments, true);
boolean set = false, paiOrJar = false;
int start = 0;
Token token = lexer.token;
for (; lexer.token != Token.EOF; ) {
if (token == Token.SEMI) {
int len = lexer.startPos - start;
if (len > 0) {
String lineSql = sql.substring(start, lexer.startPos);
lineSql = lineSql.trim();
if (!lineSql.isEmpty()) {
list.add(lineSql);
}
}
start = lexer.startPos + 1;
set = false;
} else if (token == Token.CREATE) {
lexer.nextToken();
if (lexer.token == Token.FUNCTION || lexer.identifierEquals("FUNCTION")) {
lexer.nextToken();
lexer.nextToken();
if (lexer.token == Token.AS) {
lexer.nextToken();
if (lexer.token == Token.LITERAL_CHARS) {
lexer.nextToken();
token = lexer.token;
continue;
}
}
lexer.startPos = sql.length();
break;
}
token = lexer.token;
continue;
} else if (set && token == Token.EQ && dbType == DbType.odps) {
lexer.nextTokenForSet();
token = lexer.token;
continue;
}
if (lexer.identifierEquals("USING")) {
lexer.nextToken();
if (lexer.identifierEquals("jar")) {
lexer.nextToken();
}
}
if (lexer.token == Token.SET) {
set = true;
}
if (lexer.identifierEquals("ADD") && (dbType == DbType.hive || dbType == DbType.odps)) {
lexer.nextToken();
if (lexer.identifierEquals("JAR")) {
lexer.nextPath();
}
} else {
lexer.nextToken();
}
token = lexer.token;
}
if (start != sql.length() && token != Token.SEMI) {
int end = lexer.startPos;
if (end > sql.length()) {
end = sql.length();
}
String splitSql = sql.substring(start, end).trim();
if (!paiOrJar) {
splitSql = removeComment(splitSql, dbType).trim();
} else {
if (splitSql.endsWith(";")) {
splitSql = splitSql.substring(0, splitSql.length() - 1).trim();
}
}
if (!splitSql.isEmpty()) {
list.add(splitSql);
}
}
return list;
}
public static List<String> splitAndRemoveComment(String sql, DbType dbType) {
if (dbType == null) {
dbType = DbType.other;
@@ -2786,7 +2786,7 @@ public class SQLStatementParser extends SQLParser {
continue;
}
if (lexer.identifierEquals(FnvHash.Constants.CASCADE)) {
if (lexer.identifierEquals(FnvHash.Constants.CASCADE) || lexer.token == CASCADE) {
lexer.nextToken();
stmt.setCascade(true);
@@ -2880,7 +2880,7 @@ public class SQLStatementParser extends SQLParser {
if (lexer.identifierEquals("RESTRICT")) {
lexer.nextToken();
stmt.setRestrict(true);
} else if (lexer.identifierEquals("CASCADE")) {
} else if (lexer.identifierEquals(FnvHash.Constants.CASCADE) || lexer.token == CASCADE) {
lexer.nextToken();
if (lexer.identifierEquals("CONSTRAINTS")) { // for oracle