From 493a8035cd360a227a93a43ed59ba99cfb34fa51 Mon Sep 17 00:00:00 2001 From: zehuiHuang <18612611241@163.com> Date: Wed, 25 Dec 2024 19:33:26 +0800 Subject: [PATCH] [fix][common]Support 'BETWEEN AND' query condition parameter parsing `CURRENT`. #1972 (#1973) --- .../FieldAndValueAcquireVisitor.java | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/com/tencent/supersonic/common/jsqlparser/FieldAndValueAcquireVisitor.java b/common/src/main/java/com/tencent/supersonic/common/jsqlparser/FieldAndValueAcquireVisitor.java index 008fc38a0..2e27ec67c 100644 --- a/common/src/main/java/com/tencent/supersonic/common/jsqlparser/FieldAndValueAcquireVisitor.java +++ b/common/src/main/java/com/tencent/supersonic/common/jsqlparser/FieldAndValueAcquireVisitor.java @@ -7,15 +7,7 @@ import net.sf.jsqlparser.expression.ExpressionVisitorAdapter; import net.sf.jsqlparser.expression.Function; import net.sf.jsqlparser.expression.LongValue; import net.sf.jsqlparser.expression.StringValue; -import net.sf.jsqlparser.expression.operators.relational.ComparisonOperator; -import net.sf.jsqlparser.expression.operators.relational.EqualsTo; -import net.sf.jsqlparser.expression.operators.relational.ExpressionList; -import net.sf.jsqlparser.expression.operators.relational.GreaterThan; -import net.sf.jsqlparser.expression.operators.relational.GreaterThanEquals; -import net.sf.jsqlparser.expression.operators.relational.InExpression; -import net.sf.jsqlparser.expression.operators.relational.LikeExpression; -import net.sf.jsqlparser.expression.operators.relational.MinorThan; -import net.sf.jsqlparser.expression.operators.relational.MinorThanEquals; +import net.sf.jsqlparser.expression.operators.relational.*; import net.sf.jsqlparser.schema.Column; import org.apache.commons.collections.CollectionUtils; @@ -34,6 +26,29 @@ public class FieldAndValueAcquireVisitor extends ExpressionVisitorAdapter { this.fieldExpressions = fieldExpressions; } + public void visit(Between between) { + Expression leftExpression = between.getLeftExpression(); + String columnName = null; + if (leftExpression instanceof Column) { + Column column = (Column) leftExpression; + columnName = column.getColumnName(); + } + Expression betweenExpressionStart = between.getBetweenExpressionStart(); + Expression betweenExpressionEnd = between.getBetweenExpressionEnd(); + + FieldExpression fieldExpressionStart = new FieldExpression(); + fieldExpressionStart.setFieldName(columnName); + fieldExpressionStart.setFieldValue(getFieldValue(betweenExpressionStart)); + fieldExpressionStart.setOperator(JsqlConstants.GREATER_THAN_EQUALS); + fieldExpressions.add(fieldExpressionStart); + + FieldExpression fieldExpressionEnd = new FieldExpression(); + fieldExpressionEnd.setFieldName(columnName); + fieldExpressionEnd.setFieldValue(getFieldValue(betweenExpressionEnd)); + fieldExpressionEnd.setOperator(JsqlConstants.MINOR_THAN_EQUALS); + fieldExpressions.add(fieldExpressionEnd); + } + public void visit(LikeExpression expr) { Expression leftExpression = expr.getLeftExpression(); Expression rightExpression = expr.getRightExpression();