From 390b01c4eb42fa62a88a58bd1f8650ef21a85a6b Mon Sep 17 00:00:00 2001 From: guanmengyuan Date: Thu, 9 Nov 2023 14:16:48 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8DArithmeticQueryColumn?= =?UTF-8?q?=E7=AE=97=E6=9C=AF=E8=BF=90=E7=AE=97=E6=97=A0=E6=B3=95=E6=8B=BC?= =?UTF-8?q?=E6=8E=A5=E6=9D=A1=E4=BB=B6=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/query/ArithmeticQueryColumn.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/ArithmeticQueryColumn.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/ArithmeticQueryColumn.java index 35ae3cf4..a1e63d08 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/ArithmeticQueryColumn.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/ArithmeticQueryColumn.java @@ -22,11 +22,12 @@ import com.mybatisflex.core.util.CollectionUtil; import com.mybatisflex.core.util.StringUtil; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import static com.mybatisflex.core.constant.SqlConsts.*; -public class ArithmeticQueryColumn extends QueryColumn { +public class ArithmeticQueryColumn extends QueryColumn implements HasParamsColumn { private List arithmeticInfos; @@ -114,6 +115,16 @@ public class ArithmeticQueryColumn extends QueryColumn { return SqlConsts.BRACKET_LEFT + sql + SqlConsts.BRACKET_RIGHT; } + @Override + public Object[] getParamValues() { + return arithmeticInfos.stream() + .map(arithmeticInfo -> arithmeticInfo.value) + .filter(value -> value instanceof HasParamsColumn) + .map(value -> ((HasParamsColumn) value).getParamValues()) + .flatMap(Arrays::stream) + .toArray(); + } + static class ArithmeticInfo implements CloneSupport { From a4678770bb2e9311cfd0d1ef7582f5c75098d1ef Mon Sep 17 00:00:00 2001 From: guanmengyuan Date: Thu, 9 Nov 2023 14:32:16 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8DArithmeticQueryColumn?= =?UTF-8?q?=E7=AE=97=E6=9C=AF=E8=BF=90=E7=AE=97=E6=97=A0=E6=B3=95=E6=8B=BC?= =?UTF-8?q?=E6=8E=A5=E6=9D=A1=E4=BB=B6=E7=9A=84=E9=97=AE=E9=A2=98=20#?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../query/ArithmeticQueryColumnTest.java | 3 + .../main/java/com/mybatisflex/test/Demo.java | 71 +++++++++++++++++++ .../test/ArithmeticQueryColumnTest.java | 18 +++++ .../mybatis-flex-native-test/test.sql | 25 +++++++ 4 files changed, 117 insertions(+) create mode 100644 mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/Demo.java create mode 100644 mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/ArithmeticQueryColumnTest.java create mode 100644 mybatis-flex-test/mybatis-flex-native-test/test.sql diff --git a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/query/ArithmeticQueryColumnTest.java b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/query/ArithmeticQueryColumnTest.java index f84439d3..b86ab8cb 100644 --- a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/query/ArithmeticQueryColumnTest.java +++ b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/query/ArithmeticQueryColumnTest.java @@ -31,7 +31,10 @@ public class ArithmeticQueryColumnTest { return dialect.forSelectByQuery(queryWrapper); } + @Test + public void testAddWithCondition(){ + } @Test public void testAdd() { QueryWrapper query = new QueryWrapper() diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/Demo.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/Demo.java new file mode 100644 index 00000000..188841a6 --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/Demo.java @@ -0,0 +1,71 @@ +package com.mybatisflex.test; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import com.mybatisflex.core.activerecord.Model; +import com.mybatisflex.core.keygen.KeyGenerators; + +import java.math.BigDecimal; + +@Table("demo") +public class Demo extends Model { + @Id(keyType = KeyType.Generator, value = KeyGenerators.snowFlakeId) + private String id; + + public static Demo create() { + return new Demo(); + } + + private BigDecimal firstField; + private String userId; + private BigDecimal secondField; + private String foreignId; + + public String getId() { + return id; + } + + public Demo setId(String id) { + this.id = id; + return this; + } + + public BigDecimal getFirstField() { + return firstField; + } + + public Demo setFirstField(BigDecimal firstField) { + this.firstField = firstField; + return this; + } + + public String getUserId() { + return userId; + } + + public Demo setUserId(String userId) { + this.userId = userId; + return this; + + } + + public BigDecimal getSecondField() { + return secondField; + } + + public Demo setSecondField(BigDecimal secondField) { + this.secondField = secondField; + return this; + } + + public String getForeignId() { + return foreignId; + } + + public Demo setForeignId(String foreignId) { + this.foreignId = foreignId; + return this; + } +} + diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/ArithmeticQueryColumnTest.java b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/ArithmeticQueryColumnTest.java new file mode 100644 index 00000000..35bea91a --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-native-test/src/test/java/com/mybatisflex/test/ArithmeticQueryColumnTest.java @@ -0,0 +1,18 @@ +package com.mybatisflex.test; + +import com.mybatisflex.core.query.QueryMethods; +import org.junit.Test; + +import java.math.BigDecimal; + +public class ArithmeticQueryColumnTest { + @Test + public void testAddWithCondition() { + BigDecimal bigDecimal = Demo.create() + .select(QueryMethods.sum(Demo::getFirstField) + .add(QueryMethods.sum(QueryMethods.if_(QueryMethods.column(Demo::getForeignId).eq("1"), QueryMethods.column(Demo::getSecondField), QueryMethods.number(0))))) + .where(Demo::getUserId).eq("1").objAsOpt(BigDecimal.class).orElse(BigDecimal.ZERO); + System.out.println(bigDecimal); + } + +} diff --git a/mybatis-flex-test/mybatis-flex-native-test/test.sql b/mybatis-flex-test/mybatis-flex-native-test/test.sql new file mode 100644 index 00000000..6639129e --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-native-test/test.sql @@ -0,0 +1,25 @@ +CREATE TABLE `demo` +( + `id` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, + `first_field` decimal(10, 2) DEFAULT NULL, + `foreign_id` varchar(255) collate utf8mb4_general_ci default null, + second_field decimal(10, 2) DEFAULT NULL, + user_id varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + + +INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id) +values ('1', 10.12, '1', 12.2, '1'); +INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id) +values ('2', 10.12, '2', 12.2, '1'); +INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id) +values ('3', 10.12, '3', 12.2, '1'); +INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id) +values ('4', 10.12, '4', 12.2, '1'); +INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id) +values ('5', 10.12, '5', 12.2, '1'); +INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id) +values ('6', 10.12, '6', NUll, '1'); +INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id) +values ('7', NULL, '7', 12.2, '1'); \ No newline at end of file