fix: sql变量支持写在 join on 条件

This commit is contained in:
taojinlong
2025-01-13 17:39:41 +08:00
committed by taojinlong
parent 41ba9d6ab3
commit 6ba6471173

View File

@@ -280,6 +280,28 @@ public class SqlparserUtils {
List<Join> joinsList = new ArrayList<>();
for (Join join : joins) {
FromItem rightItem = join.getRightItem();
Collection<Expression> exprs = join.getOnExpressions();
Collection<Expression> exprs2 = new ArrayList<>();
for (Expression expr : exprs) {
StringBuilder stringBuilder = new StringBuilder();
BinaryExpression binaryExpression = null;
try {
binaryExpression = (BinaryExpression) expr;
} catch (Exception e) {
}
if (binaryExpression != null) {
boolean hasSubBinaryExpression = binaryExpression instanceof AndExpression || binaryExpression instanceof OrExpression;
if (!hasSubBinaryExpression && !(binaryExpression.getLeftExpression() instanceof BinaryExpression) && !(binaryExpression.getLeftExpression() instanceof InExpression) && (hasVariable(binaryExpression.getLeftExpression().toString()) || hasVariable(binaryExpression.getRightExpression().toString()))) {
stringBuilder.append(handleSubstitutedSql(binaryExpression.toString()));
} else {
expr.accept(getExpressionDeParser(stringBuilder));
}
} else {
expr.accept(getExpressionDeParser(stringBuilder));
}
exprs2.add(CCJSqlParserUtil.parseCondExpression(stringBuilder.toString())) ;
}
join.setOnExpressions(exprs2);
if (rightItem instanceof ParenthesedSelect) {
try {
PlainSelect selectBody = ((ParenthesedSelect) rightItem).getPlainSelect();