ColumnNodeValue更名为ColumnExpNode

This commit is contained in:
redkale
2023-11-17 20:54:18 +08:00
parent ea13e89146
commit 36c68df5ff
9 changed files with 89 additions and 92 deletions

View File

@@ -365,7 +365,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data
* *
* @return Predicate * @return Predicate
*/ */
protected <T, E> Predicate<T> createPredicate(FilterNode node, EntityCache<T> cache) { protected <T> Predicate<T> createPredicate(FilterNode node, EntityCache<T> cache) {
return node.createPredicate(cache); return node.createPredicate(cache);
} }

View File

@@ -2458,7 +2458,7 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement
if (funcNodes[i] instanceof ColumnFuncNode) { if (funcNodes[i] instanceof ColumnFuncNode) {
funcSqlColumns.append(info.formatSQLValue((Attribute) null, "a", (ColumnFuncNode) funcNodes[i], sqlFormatter)); funcSqlColumns.append(info.formatSQLValue((Attribute) null, "a", (ColumnFuncNode) funcNodes[i], sqlFormatter));
} else { } else {
funcSqlColumns.append(info.formatSQLValue((Attribute) null, "a", (ColumnNodeValue) funcNodes[i], sqlFormatter)); funcSqlColumns.append(info.formatSQLValue((Attribute) null, "a", (ColumnExpNode) funcNodes[i], sqlFormatter));
} }
} }
final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis(); final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis();

View File

@@ -13,9 +13,9 @@ import static org.redkale.source.ColumnExpress.*;
* String 视为 字段名 <br> * String 视为 字段名 <br>
* Number 视为 数值 <br> * Number 视为 数值 <br>
* 例如 UPDATE Reord SET updateTime = createTime + 10 WHERE id = 1 <br> * 例如 UPDATE Reord SET updateTime = createTime + 10 WHERE id = 1 <br>
* source.updateColumn(Record.class, 1, ColumnValue.mov("updateTime", ColumnNodeValue.inc("createTime", 10))); <br> source.updateColumn(Record.class, 1, ColumnValue.mov("updateTime", ColumnExpNode.inc("createTime", 10))); <br>
* 例如 UPDATE Reord SET updateTime = createTime * 10 / createCount WHERE id = 1 <br> * 例如 UPDATE Reord SET updateTime = createTime * 10 / createCount WHERE id = 1 <br>
* source.updateColumn(Record.class, 1, ColumnValue.mov("updateTime", ColumnNodeValue.div(ColumnNodeValue.mul("createTime", 10), "createCount"))); <br> source.updateColumn(Record.class, 1, ColumnValue.mov("updateTime", ColumnExpNode.div(ColumnExpNode.mul("createTime", 10), "createCount"))); <br>
* *
* <p> * <p>
* 详情见: https://redkale.org * 详情见: https://redkale.org
@@ -23,18 +23,18 @@ import static org.redkale.source.ColumnExpress.*;
* @author zhangjx * @author zhangjx
* @since 2.0.0 * @since 2.0.0
*/ */
public class ColumnNodeValue implements ColumnNode { public class ColumnExpNode implements ColumnNode {
protected Serializable left;//类型只能是StringNumberColumnNodeValue protected Serializable left;//类型只能是StringNumberColumnExpNode
protected ColumnExpress express; //MOV时left必须是String, right必须是null protected ColumnExpress express; //MOV时left必须是String, right必须是null
protected Serializable right;//类型只能是StringNumberColumnNodeValue protected Serializable right;//类型只能是StringNumberColumnExpNode
public ColumnNodeValue() { public ColumnExpNode() {
} }
public ColumnNodeValue(Serializable left, ColumnExpress express, Serializable right) { public ColumnExpNode(Serializable left, ColumnExpress express, Serializable right) {
if (express == null) { if (express == null) {
throw new IllegalArgumentException("express cannot be null"); throw new IllegalArgumentException("express cannot be null");
} }
@@ -43,11 +43,11 @@ public class ColumnNodeValue implements ColumnNode {
throw new IllegalArgumentException("left value must be String, right value must be null on ColumnExpress.MOV"); throw new IllegalArgumentException("left value must be String, right value must be null on ColumnExpress.MOV");
} }
} else { } else {
if (!(left instanceof String) && !(left instanceof Number) && !(left instanceof ColumnNodeValue) && !(left instanceof ColumnFuncNode)) { if (!(left instanceof String) && !(left instanceof Number) && !(left instanceof ColumnExpNode) && !(left instanceof ColumnFuncNode)) {
throw new IllegalArgumentException("left value must be String, Number, ColumnFuncNode or ColumnNodeValue"); throw new IllegalArgumentException("left value must be String, Number, ColumnFuncNode or ColumnExpNode");
} }
if (!(right instanceof String) && !(right instanceof Number) && !(right instanceof ColumnNodeValue) && !(right instanceof ColumnFuncNode)) { if (!(right instanceof String) && !(right instanceof Number) && !(right instanceof ColumnExpNode) && !(right instanceof ColumnFuncNode)) {
throw new IllegalArgumentException("right value must be String, Number, ColumnFuncNode or ColumnNodeValue"); throw new IllegalArgumentException("right value must be String, Number, ColumnFuncNode or ColumnExpNode");
} }
} }
this.left = left; this.left = left;
@@ -55,72 +55,72 @@ public class ColumnNodeValue implements ColumnNode {
this.right = right; this.right = right;
} }
public static ColumnNodeValue create(Serializable left, ColumnExpress express, Serializable right) { public static ColumnExpNode create(Serializable left, ColumnExpress express, Serializable right) {
return new ColumnNodeValue(left, express, right); return new ColumnExpNode(left, express, right);
} }
public static ColumnNodeValue mov(String left) { public static ColumnExpNode mov(String left) {
return new ColumnNodeValue(left, MOV, null); return new ColumnExpNode(left, MOV, null);
} }
public static ColumnNodeValue inc(Serializable left, Serializable right) { public static ColumnExpNode inc(Serializable left, Serializable right) {
return new ColumnNodeValue(left, INC, right); return new ColumnExpNode(left, INC, right);
} }
public static ColumnNodeValue dec(Serializable left, Serializable right) { public static ColumnExpNode dec(Serializable left, Serializable right) {
return new ColumnNodeValue(left, DEC, right); return new ColumnExpNode(left, DEC, right);
} }
public static ColumnNodeValue mul(Serializable left, Serializable right) { public static ColumnExpNode mul(Serializable left, Serializable right) {
return new ColumnNodeValue(left, MUL, right); return new ColumnExpNode(left, MUL, right);
} }
public static ColumnNodeValue div(Serializable left, Serializable right) { public static ColumnExpNode div(Serializable left, Serializable right) {
return new ColumnNodeValue(left, DIV, right); return new ColumnExpNode(left, DIV, right);
} }
public static ColumnNodeValue mod(Serializable left, Serializable right) { public static ColumnExpNode mod(Serializable left, Serializable right) {
return new ColumnNodeValue(left, MOD, right); return new ColumnExpNode(left, MOD, right);
} }
public static ColumnNodeValue and(Serializable left, Serializable right) { public static ColumnExpNode and(Serializable left, Serializable right) {
return new ColumnNodeValue(left, AND, right); return new ColumnExpNode(left, AND, right);
} }
public static ColumnNodeValue orr(Serializable left, Serializable right) { public static ColumnExpNode orr(Serializable left, Serializable right) {
return new ColumnNodeValue(left, ORR, right); return new ColumnExpNode(left, ORR, right);
} }
public ColumnNodeValue inc(Serializable right) { public ColumnExpNode inc(Serializable right) {
return any(INC, right); return any(INC, right);
} }
public ColumnNodeValue dec(Serializable right) { public ColumnExpNode dec(Serializable right) {
return any(DEC, right); return any(DEC, right);
} }
public ColumnNodeValue mul(Serializable right) { public ColumnExpNode mul(Serializable right) {
return any(MUL, right); return any(MUL, right);
} }
public ColumnNodeValue div(Serializable right) { public ColumnExpNode div(Serializable right) {
return any(DIV, right); return any(DIV, right);
} }
public ColumnNodeValue mod(Serializable right) { public ColumnExpNode mod(Serializable right) {
return any(MOD, right); return any(MOD, right);
} }
public ColumnNodeValue and(Serializable right) { public ColumnExpNode and(Serializable right) {
return any(AND, right); return any(AND, right);
} }
public ColumnNodeValue orr(Serializable right) { public ColumnExpNode orr(Serializable right) {
return any(ORR, right); return any(ORR, right);
} }
protected ColumnNodeValue any(ColumnExpress express, Serializable right) { protected ColumnExpNode any(ColumnExpress express, Serializable right) {
ColumnNodeValue one = new ColumnNodeValue(this.left, this.express, this.right); ColumnExpNode one = new ColumnExpNode(this.left, this.express, this.right);
this.left = one; this.left = one;
this.express = express; this.express = express;
this.right = right; this.right = right;

View File

@@ -8,7 +8,7 @@ package org.redkale.source;
import java.io.Serializable; import java.io.Serializable;
/** /**
* 与ColumnNodeValue 组合,用于复杂的字段表达式 。 * 与ColumnExpNode 组合,用于复杂的字段表达式 。
* String 视为 字段名 * String 视为 字段名
* *
* <p> * <p>
@@ -21,14 +21,14 @@ public class ColumnFuncNode implements ColumnNode {
protected FilterFunc func; protected FilterFunc func;
protected Serializable value;//类型只能是String、ColumnNodeValue protected Serializable value;//类型只能是String、ColumnExpNode
public ColumnFuncNode() { public ColumnFuncNode() {
} }
public ColumnFuncNode(FilterFunc func, Serializable node) { public ColumnFuncNode(FilterFunc func, Serializable node) {
if (!(node instanceof String) && !(node instanceof ColumnNodeValue)) { if (!(node instanceof String) && !(node instanceof ColumnExpNode)) {
throw new IllegalArgumentException("value must be String or ColumnNodeValue"); throw new IllegalArgumentException("value must be String or ColumnExpNode");
} }
this.func = func; this.func = func;
this.value = node; this.value = node;

View File

@@ -8,7 +8,7 @@ package org.redkale.source;
import java.io.Serializable; import java.io.Serializable;
/** /**
* ColumnFuncNode与ColumnNodeValue 的接口 * ColumnFuncNode与ColumnExpNode 的接口
* *
* <p> * <p>
* 详情见: https://redkale.org * 详情见: https://redkale.org

View File

@@ -13,7 +13,7 @@ import org.redkale.util.*;
/** /**
* ColumnValue主要用于多个字段更新的表达式。 * ColumnValue主要用于多个字段更新的表达式。
* value值一般为: ColumnNodeValue、ColumnFuncNode、Number、String等 <br> * value值一般为: ColumnExpNode、ColumnFuncNode、Number、String等 <br>
* 用于 DataSource.updateColumn 方法 <br> * 用于 DataSource.updateColumn 方法 <br>
* *
* <p> * <p>
@@ -35,7 +35,7 @@ public class ColumnValue {
public ColumnValue() { public ColumnValue() {
} }
public <T extends Serializable> ColumnValue(LambdaSupplier<T> func) { private <T extends Serializable> ColumnValue(LambdaSupplier<T> func) {
this(LambdaSupplier.readColumn(func), ColumnExpress.MOV, func.get()); this(LambdaSupplier.readColumn(func), ColumnExpress.MOV, func.get());
} }
@@ -43,22 +43,19 @@ public class ColumnValue {
this(LambdaSupplier.readColumn(func), express, func.get()); this(LambdaSupplier.readColumn(func), express, func.get());
} }
public <T> ColumnValue(LambdaFunction<T, ?> func, Serializable value) {
this(LambdaFunction.readColumn(func), ColumnExpress.MOV, value);
}
public <T> ColumnValue(LambdaFunction<T, ?> func, ColumnExpress express, Serializable value) { public <T> ColumnValue(LambdaFunction<T, ?> func, ColumnExpress express, Serializable value) {
this(LambdaFunction.readColumn(func), express, value); this(LambdaFunction.readColumn(func), express, value);
} }
public ColumnValue(String column, Serializable value) { private ColumnValue(String column, Serializable value) {
this(column, ColumnExpress.MOV, value); this(column, ColumnExpress.MOV, value);
} }
public ColumnValue(String column, ColumnExpress express, Serializable value) { public ColumnValue(String column, ColumnExpress express, Serializable value) {
Objects.requireNonNull(column); Objects.requireNonNull(column);
Objects.requireNonNull(express);
this.column = column; this.column = column;
this.express = express == null ? ColumnExpress.MOV : express; this.express = express;
this.value = value; this.value = value;
} }
@@ -94,7 +91,7 @@ public class ColumnValue {
* *
* @return ColumnValue * @return ColumnValue
*/ */
public static ColumnValue inc(String column, Serializable value) { public static ColumnValue inc(String column, Number value) {
return new ColumnValue(column, INC, value); return new ColumnValue(column, INC, value);
} }
@@ -119,7 +116,7 @@ public class ColumnValue {
* *
* @return ColumnValue * @return ColumnValue
*/ */
public static ColumnValue dec(String column, Serializable value) { public static ColumnValue dec(String column, Number value) {
return new ColumnValue(column, DEC, value); return new ColumnValue(column, DEC, value);
} }
@@ -144,7 +141,7 @@ public class ColumnValue {
* *
* @return ColumnValue * @return ColumnValue
*/ */
public static ColumnValue mul(String column, Serializable value) { public static ColumnValue mul(String column, Number value) {
return new ColumnValue(column, MUL, value); return new ColumnValue(column, MUL, value);
} }
@@ -156,7 +153,7 @@ public class ColumnValue {
* *
* @return ColumnValue * @return ColumnValue
*/ */
public static ColumnValue div(String column, Serializable value) { public static ColumnValue div(String column, Number value) {
return new ColumnValue(column, DIV, value); return new ColumnValue(column, DIV, value);
} }
@@ -321,7 +318,7 @@ public class ColumnValue {
* @since 2.8.0 * @since 2.8.0
*/ */
public static <T> ColumnValue create(LambdaFunction<T, ?> func, Serializable value) { public static <T> ColumnValue create(LambdaFunction<T, ?> func, Serializable value) {
return new ColumnValue(func, value); return new ColumnValue(func, MOV, value);
} }
/** /**

View File

@@ -1358,7 +1358,7 @@ public interface DataSource extends Resourcable {
/** /**
* 查询符合过滤条件记录的GROUP BY聚合结果Map <br> * 查询符合过滤条件记录的GROUP BY聚合结果Map <br>
* 等价SQL: SELECT col1, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE GROUP BY {col1} <br> * 等价SQL: SELECT col1, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE GROUP BY {col1} <br>
* 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnNodeValue.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnNodeValue.dec("money", 20)))), "targetid") * 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnExpNode.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnExpNode.dec("money", 20)))), "targetid")
* 等价于: SELECT targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY targetid<br> * 等价于: SELECT targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY targetid<br>
* *
* @param <T> Entity泛型 * @param <T> Entity泛型
@@ -1377,7 +1377,7 @@ public interface DataSource extends Resourcable {
/** /**
* 查询符合过滤条件记录的GROUP BY聚合结果Map <br> * 查询符合过滤条件记录的GROUP BY聚合结果Map <br>
* 等价SQL: SELECT col1, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} GROUP BY {col1} <br> * 等价SQL: SELECT col1, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} GROUP BY {col1} <br>
* 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnNodeValue.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnNodeValue.dec("money", 20)))), "targetid") * 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnExpNode.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnExpNode.dec("money", 20)))), "targetid")
* 等价于: SELECT targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY targetid<br> * 等价于: SELECT targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY targetid<br>
* *
* @param <T> Entity泛型 * @param <T> Entity泛型
@@ -1396,7 +1396,7 @@ public interface DataSource extends Resourcable {
/** /**
* 查询符合过滤条件记录的GROUP BY聚合结果Map <br> * 查询符合过滤条件记录的GROUP BY聚合结果Map <br>
* 等价SQL: SELECT col1, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter bean} GROUP BY {col1} <br> * 等价SQL: SELECT col1, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter bean} GROUP BY {col1} <br>
* 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnNodeValue.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnNodeValue.dec("money", 20)))), "targetid", (FilterBean)null) * 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnExpNode.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnExpNode.dec("money", 20)))), "targetid", (FilterBean)null)
* 等价于: SELECT targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY targetid<br> * 等价于: SELECT targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY targetid<br>
* *
* @param <T> Entity泛型 * @param <T> Entity泛型
@@ -1416,7 +1416,7 @@ public interface DataSource extends Resourcable {
/** /**
* 查询符合过滤条件记录的GROUP BY聚合结果Map <br> * 查询符合过滤条件记录的GROUP BY聚合结果Map <br>
* 等价SQL: SELECT col1, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter bean} GROUP BY {col1} <br> * 等价SQL: SELECT col1, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter bean} GROUP BY {col1} <br>
* 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnNodeValue.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnNodeValue.dec("money", 20)))), "targetid", (FilterBean)null) * 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnExpNode.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnExpNode.dec("money", 20)))), "targetid", (FilterBean)null)
* 等价于: SELECT targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY targetid<br> * 等价于: SELECT targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY targetid<br>
* *
* @param <T> Entity泛型 * @param <T> Entity泛型
@@ -1436,7 +1436,7 @@ public interface DataSource extends Resourcable {
/** /**
* 查询符合过滤条件记录的GROUP BY聚合结果Map <br> * 查询符合过滤条件记录的GROUP BY聚合结果Map <br>
* 等价SQL: SELECT col1, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter node} GROUP BY {col1} <br> * 等价SQL: SELECT col1, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter node} GROUP BY {col1} <br>
* 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnNodeValue.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnNodeValue.dec("money", 20)))), "targetid", (FilterNode)null) * 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnExpNode.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnExpNode.dec("money", 20)))), "targetid", (FilterNode)null)
* 等价于: SELECT targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY targetid<br> * 等价于: SELECT targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY targetid<br>
* *
* @param <T> Entity泛型 * @param <T> Entity泛型
@@ -1454,7 +1454,7 @@ public interface DataSource extends Resourcable {
/** /**
* 查询符合过滤条件记录的GROUP BY聚合结果Map <br> * 查询符合过滤条件记录的GROUP BY聚合结果Map <br>
* 等价SQL: SELECT col1, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter node} GROUP BY {col1} <br> * 等价SQL: SELECT col1, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter node} GROUP BY {col1} <br>
* 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnNodeValue.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnNodeValue.dec("money", 20)))), "targetid", (FilterNode)null) * 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnExpNode.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnExpNode.dec("money", 20)))), "targetid", (FilterNode)null)
* 等价于: SELECT targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY targetid<br> * 等价于: SELECT targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY targetid<br>
* *
* @param <T> Entity泛型 * @param <T> Entity泛型
@@ -1472,7 +1472,7 @@ public interface DataSource extends Resourcable {
/** /**
* 查询符合过滤条件记录的GROUP BY聚合结果Map <br> * 查询符合过滤条件记录的GROUP BY聚合结果Map <br>
* 等价SQL: SELECT col1, col2, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} GROUP BY {col1}, {col2} <br> * 等价SQL: SELECT col1, col2, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} GROUP BY {col1}, {col2} <br>
* 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnNodeValue.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnNodeValue.dec("money", 20)))), Utility.ofArray("fromid", "targetid")) * 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnExpNode.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnExpNode.dec("money", 20)))), Utility.ofArray("fromid", "targetid"))
* 等价于: SELECT fromid, targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY fromid, targetid<br> * 等价于: SELECT fromid, targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY fromid, targetid<br>
* *
* @param <T> Entity泛型 * @param <T> Entity泛型
@@ -1491,7 +1491,7 @@ public interface DataSource extends Resourcable {
/** /**
* 查询符合过滤条件记录的GROUP BY聚合结果Map <br> * 查询符合过滤条件记录的GROUP BY聚合结果Map <br>
* 等价SQL: SELECT col1, col2, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} GROUP BY {col1}, {col2} <br> * 等价SQL: SELECT col1, col2, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} GROUP BY {col1}, {col2} <br>
* 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnNodeValue.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnNodeValue.dec("money", 20)))), Utility.ofArray("fromid", "targetid")) * 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnExpNode.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnExpNode.dec("money", 20)))), Utility.ofArray("fromid", "targetid"))
* 等价于: SELECT fromid, targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY fromid, targetid<br> * 等价于: SELECT fromid, targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY fromid, targetid<br>
* *
* @param <T> Entity泛型 * @param <T> Entity泛型
@@ -1510,7 +1510,7 @@ public interface DataSource extends Resourcable {
/** /**
* 查询符合过滤条件记录的GROUP BY聚合结果Map <br> * 查询符合过滤条件记录的GROUP BY聚合结果Map <br>
* 等价SQL: SELECT col1, col2, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter bean} GROUP BY {col1}, {col2} <br> * 等价SQL: SELECT col1, col2, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter bean} GROUP BY {col1}, {col2} <br>
* 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnNodeValue.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnNodeValue.dec("money", 20)))), Utility.ofArray("fromid", "targetid"), (FilterBean)null) * 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnExpNode.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnExpNode.dec("money", 20)))), Utility.ofArray("fromid", "targetid"), (FilterBean)null)
* 等价于: SELECT fromid, targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY fromid, targetid<br> * 等价于: SELECT fromid, targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY fromid, targetid<br>
* *
* @param <T> Entity泛型 * @param <T> Entity泛型
@@ -1530,7 +1530,7 @@ public interface DataSource extends Resourcable {
/** /**
* 查询符合过滤条件记录的GROUP BY聚合结果Map <br> * 查询符合过滤条件记录的GROUP BY聚合结果Map <br>
* 等价SQL: SELECT col1, col2, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter bean} GROUP BY {col1}, {col2} <br> * 等价SQL: SELECT col1, col2, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter bean} GROUP BY {col1}, {col2} <br>
* 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnNodeValue.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnNodeValue.dec("money", 20)))), Utility.ofArray("fromid", "targetid"), (FilterBean)null) * 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnExpNode.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnExpNode.dec("money", 20)))), Utility.ofArray("fromid", "targetid"), (FilterBean)null)
* 等价于: SELECT fromid, targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY fromid, targetid<br> * 等价于: SELECT fromid, targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY fromid, targetid<br>
* *
* @param <T> Entity泛型 * @param <T> Entity泛型
@@ -1550,7 +1550,7 @@ public interface DataSource extends Resourcable {
/** /**
* 查询符合过滤条件记录的GROUP BY聚合结果Map <br> * 查询符合过滤条件记录的GROUP BY聚合结果Map <br>
* 等价SQL: SELECT col1, col2, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter node} GROUP BY {col1}, {col2} <br> * 等价SQL: SELECT col1, col2, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter node} GROUP BY {col1}, {col2} <br>
* 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnNodeValue.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnNodeValue.dec("money", 20)))), Utility.ofArray("fromid", "targetid"), (FilterNode)null) * 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnExpNode.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnExpNode.dec("money", 20)))), Utility.ofArray("fromid", "targetid"), (FilterNode)null)
* 等价于: SELECT fromid, targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY fromid, targetid<br> * 等价于: SELECT fromid, targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY fromid, targetid<br>
* *
* @param <T> Entity泛型 * @param <T> Entity泛型
@@ -1568,7 +1568,7 @@ public interface DataSource extends Resourcable {
/** /**
* 查询符合过滤条件记录的GROUP BY聚合结果Map <br> * 查询符合过滤条件记录的GROUP BY聚合结果Map <br>
* 等价SQL: SELECT col1, col2, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter node} GROUP BY {col1}, {col2} <br> * 等价SQL: SELECT col1, col2, FUNC{funcColumn1}, FUNC{funcColumn2} FROM {table} WHERE {filter node} GROUP BY {col1}, {col2} <br>
* 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnNodeValue.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnNodeValue.dec("money", 20)))), Utility.ofArray("fromid", "targetid"), (FilterNode)null) * 如 queryColumnMapAsync(OrderRecord.class, Utility.ofArray(ColumnExpNode.div(ColumnFuncNode.sum("money"), 100), ColumnFuncNode.avg(ColumnExpNode.dec("money", 20)))), Utility.ofArray("fromid", "targetid"), (FilterNode)null)
* 等价于: SELECT fromid, targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY fromid, targetid<br> * 等价于: SELECT fromid, targetid, SUM(money) / 100, AVG(money - 20) FROM orderrecord GROUP BY fromid, targetid<br>
* *
* @param <T> Entity泛型 * @param <T> Entity泛型

View File

@@ -537,8 +537,8 @@ public final class EntityCache<T> {
private Number queryColumnNumber(final List<T> list, final ColumnNode funcNode) { private Number queryColumnNumber(final List<T> list, final ColumnNode funcNode) {
if (funcNode instanceof ColumnFuncNode) { if (funcNode instanceof ColumnFuncNode) {
return queryColumnNumber(list, (ColumnFuncNode) funcNode); return queryColumnNumber(list, (ColumnFuncNode) funcNode);
} else if (funcNode instanceof ColumnNodeValue) { } else if (funcNode instanceof ColumnExpNode) {
return queryColumnNumber(list, (ColumnNodeValue) funcNode); return queryColumnNumber(list, (ColumnExpNode) funcNode);
} else { } else {
return null; return null;
} }
@@ -553,13 +553,13 @@ public final class EntityCache<T> {
Number num = null; Number num = null;
if (funcNode.getValue() instanceof ColumnFuncNode) { if (funcNode.getValue() instanceof ColumnFuncNode) {
num = queryColumnNumber(list, (ColumnFuncNode) funcNode.getValue()); num = queryColumnNumber(list, (ColumnFuncNode) funcNode.getValue());
} else if (funcNode.getValue() instanceof ColumnNodeValue) { } else if (funcNode.getValue() instanceof ColumnExpNode) {
num = queryColumnNumber(list, (ColumnNodeValue) funcNode.getValue()); num = queryColumnNumber(list, (ColumnExpNode) funcNode.getValue());
} }
return num; return num;
} }
private Number queryColumnNumber(final List<T> list, final ColumnNodeValue nodeValue) { private Number queryColumnNumber(final List<T> list, final ColumnExpNode nodeValue) {
return null; return null;
} }
@@ -1015,8 +1015,8 @@ public final class EntityCache<T> {
numb = getValue((Number) attr.get(entity), express, val); numb = getValue((Number) attr.get(entity), express, val);
break; break;
case MOV: case MOV:
if (val instanceof ColumnNodeValue) { if (val instanceof ColumnExpNode) {
val = updateColumnNodeValue(attr, entity, (ColumnNodeValue) val); val = updateColumnExpNode(attr, entity, (ColumnExpNode) val);
} }
newval = val; newval = val;
if (val instanceof Number) { if (val instanceof Number) {
@@ -1061,21 +1061,21 @@ public final class EntityCache<T> {
return entity; return entity;
} }
private <V> Serializable updateColumnNodeValue(Attribute<T, V> attr, final T entity, ColumnNodeValue node) { private <V> Serializable updateColumnExpNode(Attribute<T, V> attr, final T entity, ColumnExpNode node) {
Serializable left = node.getLeft(); Serializable left = node.getLeft();
if (left instanceof CharSequence) { if (left instanceof CharSequence) {
left = info.getUpdateAttribute(left.toString()).get(entity); left = info.getUpdateAttribute(left.toString()).get(entity);
if (node.getExpress() == ColumnExpress.MOV) { if (node.getExpress() == ColumnExpress.MOV) {
return left; return left;
} }
} else if (left instanceof ColumnNodeValue) { } else if (left instanceof ColumnExpNode) {
left = updateColumnNodeValue(attr, entity, (ColumnNodeValue) left); left = updateColumnExpNode(attr, entity, (ColumnExpNode) left);
} }
Serializable right = node.getRight(); Serializable right = node.getRight();
if (left instanceof CharSequence) { if (left instanceof CharSequence) {
right = info.getUpdateAttribute(right.toString()).get(entity); right = info.getUpdateAttribute(right.toString()).get(entity);
} else if (left instanceof ColumnNodeValue) { } else if (left instanceof ColumnExpNode) {
right = updateColumnNodeValue(attr, entity, (ColumnNodeValue) right); right = updateColumnExpNode(attr, entity, (ColumnExpNode) right);
} }
return getValue((Number) left, node.getExpress(), right); return getValue((Number) left, node.getExpress(), right);
} }

View File

@@ -1512,9 +1512,9 @@ public final class EntityInfo<T> {
return null; return null;
} }
Object val = cv.getValue(); Object val = cv.getValue();
//ColumnNodeValue时 cv.getExpress() == ColumnExpress.MOV 只用于updateColumn //ColumnExpNode时 cv.getExpress() == ColumnExpress.MOV 只用于updateColumn
if (val instanceof ColumnNodeValue) { if (val instanceof ColumnExpNode) {
return formatSQLValue(attr, null, (ColumnNodeValue) val, formatter); return formatSQLValue(attr, null, (ColumnExpNode) val, formatter);
} }
if (val instanceof ColumnFuncNode) { if (val instanceof ColumnFuncNode) {
return formatSQLValue(attr, null, (ColumnFuncNode) val, formatter); return formatSQLValue(attr, null, (ColumnFuncNode) val, formatter);
@@ -1545,30 +1545,30 @@ public final class EntityInfo<T> {
} }
protected CharSequence formatSQLValue(Attribute<T, Serializable> attr, String tabalis, final ColumnFuncNode node, BiFunction<EntityInfo, Object, CharSequence> formatter) { protected CharSequence formatSQLValue(Attribute<T, Serializable> attr, String tabalis, final ColumnFuncNode node, BiFunction<EntityInfo, Object, CharSequence> formatter) {
if (node.getValue() instanceof ColumnNodeValue) { if (node.getValue() instanceof ColumnExpNode) {
return node.getFunc().getColumn(formatSQLValue(attr, tabalis, (ColumnNodeValue) node.getValue(), formatter).toString()); return node.getFunc().getColumn(formatSQLValue(attr, tabalis, (ColumnExpNode) node.getValue(), formatter).toString());
} else { } else {
return node.getFunc().getColumn(this.getSQLColumn(tabalis, String.valueOf(node.getValue()))); return node.getFunc().getColumn(this.getSQLColumn(tabalis, String.valueOf(node.getValue())));
} }
} }
protected CharSequence formatSQLValue(Attribute<T, Serializable> attr, String tabalis, final ColumnNodeValue node, BiFunction<EntityInfo, Object, CharSequence> formatter) { protected CharSequence formatSQLValue(Attribute<T, Serializable> attr, String tabalis, final ColumnExpNode node, BiFunction<EntityInfo, Object, CharSequence> formatter) {
Serializable left = node.getLeft(); Serializable left = node.getLeft();
if (left instanceof CharSequence) { if (left instanceof CharSequence) {
left = this.getSQLColumn(tabalis, left.toString()); left = this.getSQLColumn(tabalis, left.toString());
if (node.getExpress() == ColumnExpress.MOV) { if (node.getExpress() == ColumnExpress.MOV) {
return (String) left; return (String) left;
} }
} else if (left instanceof ColumnNodeValue) { } else if (left instanceof ColumnExpNode) {
left = "(" + formatSQLValue(attr, tabalis, (ColumnNodeValue) left, formatter) + ")"; left = "(" + formatSQLValue(attr, tabalis, (ColumnExpNode) left, formatter) + ")";
} else if (left instanceof ColumnFuncNode) { } else if (left instanceof ColumnFuncNode) {
left = "(" + formatSQLValue(attr, tabalis, (ColumnFuncNode) left, formatter) + ")"; left = "(" + formatSQLValue(attr, tabalis, (ColumnFuncNode) left, formatter) + ")";
} }
Serializable right = node.getRight(); Serializable right = node.getRight();
if (right instanceof CharSequence) { if (right instanceof CharSequence) {
right = this.getSQLColumn(null, right.toString()); right = this.getSQLColumn(null, right.toString());
} else if (left instanceof ColumnNodeValue) { } else if (left instanceof ColumnExpNode) {
right = "(" + formatSQLValue(attr, tabalis, (ColumnNodeValue) right, formatter) + ")"; right = "(" + formatSQLValue(attr, tabalis, (ColumnExpNode) right, formatter) + ")";
} else if (left instanceof ColumnFuncNode) { } else if (left instanceof ColumnFuncNode) {
right = "(" + formatSQLValue(attr, tabalis, (ColumnFuncNode) right, formatter) + ")"; right = "(" + formatSQLValue(attr, tabalis, (ColumnFuncNode) right, formatter) + ")";
} }