diff --git a/src/main/java/neatlogic/framework/sqlgenerator/$sql.java b/src/main/java/neatlogic/framework/sqlgenerator/$sql.java index e96aecf7a2df8b85ff195aaafea8a84f7ca77917..af25ce7cd2fb840538ed51d1aedc9b3a369d0fd0 100644 --- a/src/main/java/neatlogic/framework/sqlgenerator/$sql.java +++ b/src/main/java/neatlogic/framework/sqlgenerator/$sql.java @@ -111,6 +111,10 @@ public class $sql { return new ExpressionVo(leftColumn, operationSymbol, rightValueExpression); } + public static ExpressionVo exp(String leftColumn, String operationSymbol, FunctionVo rightFunction) { + return new ExpressionVo(leftColumn, operationSymbol, rightFunction); + } + public static ExpressionVo exp(String leftColumn, String operationSymbol) { return new ExpressionVo(leftColumn, operationSymbol, new ValueVo("")); } @@ -221,6 +225,7 @@ public class $sql { if (CollectionUtils.isNotEmpty(sqlVo.getWhereExpressionList())) { whereExpressionList.addAll(sqlVo.getWhereExpressionList()); } + List joinAliasList = new ArrayList<>(); List joinList = sqlVo.getJoinList(); for (JoinVo joinVo : joinList) { if (CollectionUtils.isNotEmpty(joinVo.getGroupByList())) { @@ -235,7 +240,10 @@ public class $sql { if (CollectionUtils.isNotEmpty(joinVo.getWhereExpressionList())) { whereExpressionList.addAll(joinVo.getWhereExpressionList()); } - addJoin(plainSelect, joinVo); + if (!joinAliasList.contains(joinVo.getAlias())) { + addJoin(plainSelect, joinVo); + joinAliasList.add(joinVo.getAlias()); + } } if (CollectionUtils.isNotEmpty(selectColumnList)) { for (ColumnVo selectColumn : selectColumnList) { @@ -662,6 +670,8 @@ public class $sql { } else if (rightObj instanceof ExpressionList) { rightExpressionList = (ExpressionList) rightObj; } + } else if (expressionVo.getRightFunctionVo() != null) { + rightExpression = parseFunction(expressionVo.getRightFunctionVo()); } if (Objects.equals(operationSymbol, "=")) { resultExpression = new EqualsTo(leftExpression, rightExpression); diff --git a/src/main/java/neatlogic/framework/sqlgenerator/$sqlTest.java b/src/main/java/neatlogic/framework/sqlgenerator/$sqlTest.java index f2abd2fa4d0aa7aba9051f27ece469120315b338..3088073f2561b2eac82220d76fbb9d5ad4fccd86 100644 --- a/src/main/java/neatlogic/framework/sqlgenerator/$sqlTest.java +++ b/src/main/java/neatlogic/framework/sqlgenerator/$sqlTest.java @@ -526,6 +526,11 @@ public class $sqlTest { $sql.addWhereExpression(plainSelect, $sql.exp("is_active", "in", "(0, 1)")); Assert.isTrue(Objects.equals(plainSelect.toString(), "SELECT FROM tenant WHERE is_active IN (0, 1)"), "测试失败"); methodNameList.remove("public static ExpressionVo exp(String, String, String)"); +// public static ExpressionVo exp(String, String, FunctionVo) + plainSelect = $sql.from("tenant"); + $sql.addWhereExpression(plainSelect, $sql.exp("visit_time", ">=", $sql.fun("STR_TO_DATE", "'2023-11-08 09:57:01'", "'%Y-%m-%d %H:%i:%s'"))); + Assert.isTrue(Objects.equals(plainSelect.toString(), "SELECT FROM tenant WHERE visit_time >= STR_TO_DATE('2023-11-08 09:57:01', '%Y-%m-%d %H:%i:%s')"), "测试失败"); + methodNameList.remove("public static ExpressionVo exp(String, String, FunctionVo)"); // public static ExpressionVo exp(String, String, Integer) plainSelect = $sql.from("tenant"); $sql.addWhereExpression(plainSelect, $sql.exp("is_active", "=", 0)); diff --git a/src/main/java/neatlogic/framework/sqlgenerator/ExpressionVo.java b/src/main/java/neatlogic/framework/sqlgenerator/ExpressionVo.java index 65b0631314d3e8bb0dce52bdb617677729beb586..efa99dbf92c8a56d56f62d30baa3de8fb2c9e53a 100644 --- a/src/main/java/neatlogic/framework/sqlgenerator/ExpressionVo.java +++ b/src/main/java/neatlogic/framework/sqlgenerator/ExpressionVo.java @@ -29,6 +29,7 @@ public class ExpressionVo { private String rightColumn; private ValueVo leftValueExpression; private ValueVo rightValueExpression; + private FunctionVo rightFunctionVo; private ExpressionVo leftExpressionVo; private ExpressionVo rightExpressionVo; private final String operationSymbol; @@ -62,6 +63,13 @@ public class ExpressionVo { this(leftColumn, operationSymbol, new ValueVo("")); } + ExpressionVo(String leftColumn, String operationSymbol, FunctionVo rightFunctionVo) { + this.leftColumn = leftColumn; + this.operationSymbol = operationSymbol; + this.rightFunctionVo = rightFunctionVo; + this.type = $sql.COMPARATIVE_OPERATION; + } + ExpressionVo(String leftColumn, String operationSymbol, ValueVo rightValueExpression) { this.leftColumn = leftColumn; this.operationSymbol = operationSymbol; @@ -108,6 +116,10 @@ public class ExpressionVo { return rightValueExpression; } + public FunctionVo getRightFunctionVo() { + return rightFunctionVo; + } + public String getOperationSymbol() { return operationSymbol; }