ColumnNodeValue更名为ColumnExpNode
This commit is contained in:
@@ -365,7 +365,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data
|
||||
*
|
||||
* @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);
|
||||
}
|
||||
|
||||
|
||||
@@ -2458,7 +2458,7 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement
|
||||
if (funcNodes[i] instanceof ColumnFuncNode) {
|
||||
funcSqlColumns.append(info.formatSQLValue((Attribute) null, "a", (ColumnFuncNode) funcNodes[i], sqlFormatter));
|
||||
} 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();
|
||||
|
||||
@@ -13,9 +13,9 @@ import static org.redkale.source.ColumnExpress.*;
|
||||
* String 视为 字段名 <br>
|
||||
* Number 视为 数值 <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>
|
||||
* 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>
|
||||
* 详情见: https://redkale.org
|
||||
@@ -23,18 +23,18 @@ import static org.redkale.source.ColumnExpress.*;
|
||||
* @author zhangjx
|
||||
* @since 2.0.0
|
||||
*/
|
||||
public class ColumnNodeValue implements ColumnNode {
|
||||
public class ColumnExpNode implements ColumnNode {
|
||||
|
||||
protected Serializable left;//类型只能是String、Number、ColumnNodeValue
|
||||
protected Serializable left;//类型只能是String、Number、ColumnExpNode
|
||||
|
||||
protected ColumnExpress express; //MOV时,left必须是String, right必须是null
|
||||
|
||||
protected Serializable right;//类型只能是String、Number、ColumnNodeValue
|
||||
protected Serializable right;//类型只能是String、Number、ColumnExpNode
|
||||
|
||||
public ColumnNodeValue() {
|
||||
public ColumnExpNode() {
|
||||
}
|
||||
|
||||
public ColumnNodeValue(Serializable left, ColumnExpress express, Serializable right) {
|
||||
public ColumnExpNode(Serializable left, ColumnExpress express, Serializable right) {
|
||||
if (express == 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");
|
||||
}
|
||||
} else {
|
||||
if (!(left instanceof String) && !(left instanceof Number) && !(left instanceof ColumnNodeValue) && !(left instanceof ColumnFuncNode)) {
|
||||
throw new IllegalArgumentException("left value must be String, Number, ColumnFuncNode or ColumnNodeValue");
|
||||
if (!(left instanceof String) && !(left instanceof Number) && !(left instanceof ColumnExpNode) && !(left instanceof ColumnFuncNode)) {
|
||||
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)) {
|
||||
throw new IllegalArgumentException("right value must be String, Number, ColumnFuncNode or ColumnNodeValue");
|
||||
if (!(right instanceof String) && !(right instanceof Number) && !(right instanceof ColumnExpNode) && !(right instanceof ColumnFuncNode)) {
|
||||
throw new IllegalArgumentException("right value must be String, Number, ColumnFuncNode or ColumnExpNode");
|
||||
}
|
||||
}
|
||||
this.left = left;
|
||||
@@ -55,72 +55,72 @@ public class ColumnNodeValue implements ColumnNode {
|
||||
this.right = right;
|
||||
}
|
||||
|
||||
public static ColumnNodeValue create(Serializable left, ColumnExpress express, Serializable right) {
|
||||
return new ColumnNodeValue(left, express, right);
|
||||
public static ColumnExpNode create(Serializable left, ColumnExpress express, Serializable right) {
|
||||
return new ColumnExpNode(left, express, right);
|
||||
}
|
||||
|
||||
public static ColumnNodeValue mov(String left) {
|
||||
return new ColumnNodeValue(left, MOV, null);
|
||||
public static ColumnExpNode mov(String left) {
|
||||
return new ColumnExpNode(left, MOV, null);
|
||||
}
|
||||
|
||||
public static ColumnNodeValue inc(Serializable left, Serializable right) {
|
||||
return new ColumnNodeValue(left, INC, right);
|
||||
public static ColumnExpNode inc(Serializable left, Serializable right) {
|
||||
return new ColumnExpNode(left, INC, right);
|
||||
}
|
||||
|
||||
public static ColumnNodeValue dec(Serializable left, Serializable right) {
|
||||
return new ColumnNodeValue(left, DEC, right);
|
||||
public static ColumnExpNode dec(Serializable left, Serializable right) {
|
||||
return new ColumnExpNode(left, DEC, right);
|
||||
}
|
||||
|
||||
public static ColumnNodeValue mul(Serializable left, Serializable right) {
|
||||
return new ColumnNodeValue(left, MUL, right);
|
||||
public static ColumnExpNode mul(Serializable left, Serializable right) {
|
||||
return new ColumnExpNode(left, MUL, right);
|
||||
}
|
||||
|
||||
public static ColumnNodeValue div(Serializable left, Serializable right) {
|
||||
return new ColumnNodeValue(left, DIV, right);
|
||||
public static ColumnExpNode div(Serializable left, Serializable right) {
|
||||
return new ColumnExpNode(left, DIV, right);
|
||||
}
|
||||
|
||||
public static ColumnNodeValue mod(Serializable left, Serializable right) {
|
||||
return new ColumnNodeValue(left, MOD, right);
|
||||
public static ColumnExpNode mod(Serializable left, Serializable right) {
|
||||
return new ColumnExpNode(left, MOD, right);
|
||||
}
|
||||
|
||||
public static ColumnNodeValue and(Serializable left, Serializable right) {
|
||||
return new ColumnNodeValue(left, AND, right);
|
||||
public static ColumnExpNode and(Serializable left, Serializable right) {
|
||||
return new ColumnExpNode(left, AND, right);
|
||||
}
|
||||
|
||||
public static ColumnNodeValue orr(Serializable left, Serializable right) {
|
||||
return new ColumnNodeValue(left, ORR, right);
|
||||
public static ColumnExpNode orr(Serializable left, Serializable right) {
|
||||
return new ColumnExpNode(left, ORR, right);
|
||||
}
|
||||
|
||||
public ColumnNodeValue inc(Serializable right) {
|
||||
public ColumnExpNode inc(Serializable right) {
|
||||
return any(INC, right);
|
||||
}
|
||||
|
||||
public ColumnNodeValue dec(Serializable right) {
|
||||
public ColumnExpNode dec(Serializable right) {
|
||||
return any(DEC, right);
|
||||
}
|
||||
|
||||
public ColumnNodeValue mul(Serializable right) {
|
||||
public ColumnExpNode mul(Serializable right) {
|
||||
return any(MUL, right);
|
||||
}
|
||||
|
||||
public ColumnNodeValue div(Serializable right) {
|
||||
public ColumnExpNode div(Serializable right) {
|
||||
return any(DIV, right);
|
||||
}
|
||||
|
||||
public ColumnNodeValue mod(Serializable right) {
|
||||
public ColumnExpNode mod(Serializable right) {
|
||||
return any(MOD, right);
|
||||
}
|
||||
|
||||
public ColumnNodeValue and(Serializable right) {
|
||||
public ColumnExpNode and(Serializable right) {
|
||||
return any(AND, right);
|
||||
}
|
||||
|
||||
public ColumnNodeValue orr(Serializable right) {
|
||||
public ColumnExpNode orr(Serializable right) {
|
||||
return any(ORR, right);
|
||||
}
|
||||
|
||||
protected ColumnNodeValue any(ColumnExpress express, Serializable right) {
|
||||
ColumnNodeValue one = new ColumnNodeValue(this.left, this.express, this.right);
|
||||
protected ColumnExpNode any(ColumnExpress express, Serializable right) {
|
||||
ColumnExpNode one = new ColumnExpNode(this.left, this.express, this.right);
|
||||
this.left = one;
|
||||
this.express = express;
|
||||
this.right = right;
|
||||
@@ -8,7 +8,7 @@ package org.redkale.source;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 与ColumnNodeValue 组合,用于复杂的字段表达式 。
|
||||
* 与ColumnExpNode 组合,用于复杂的字段表达式 。
|
||||
* String 视为 字段名
|
||||
*
|
||||
* <p>
|
||||
@@ -21,14 +21,14 @@ public class ColumnFuncNode implements ColumnNode {
|
||||
|
||||
protected FilterFunc func;
|
||||
|
||||
protected Serializable value;//类型只能是String、ColumnNodeValue
|
||||
protected Serializable value;//类型只能是String、ColumnExpNode
|
||||
|
||||
public ColumnFuncNode() {
|
||||
}
|
||||
|
||||
public ColumnFuncNode(FilterFunc func, Serializable node) {
|
||||
if (!(node instanceof String) && !(node instanceof ColumnNodeValue)) {
|
||||
throw new IllegalArgumentException("value must be String or ColumnNodeValue");
|
||||
if (!(node instanceof String) && !(node instanceof ColumnExpNode)) {
|
||||
throw new IllegalArgumentException("value must be String or ColumnExpNode");
|
||||
}
|
||||
this.func = func;
|
||||
this.value = node;
|
||||
|
||||
@@ -8,7 +8,7 @@ package org.redkale.source;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* ColumnFuncNode与ColumnNodeValue 的接口
|
||||
* ColumnFuncNode与ColumnExpNode 的接口
|
||||
*
|
||||
* <p>
|
||||
* 详情见: https://redkale.org
|
||||
|
||||
@@ -13,7 +13,7 @@ import org.redkale.util.*;
|
||||
|
||||
/**
|
||||
* ColumnValue主要用于多个字段更新的表达式。
|
||||
* value值一般为: ColumnNodeValue、ColumnFuncNode、Number、String等 <br>
|
||||
* value值一般为: ColumnExpNode、ColumnFuncNode、Number、String等 <br>
|
||||
* 用于 DataSource.updateColumn 方法 <br>
|
||||
*
|
||||
* <p>
|
||||
@@ -35,7 +35,7 @@ public class 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());
|
||||
}
|
||||
|
||||
@@ -43,22 +43,19 @@ public class ColumnValue {
|
||||
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) {
|
||||
this(LambdaFunction.readColumn(func), express, value);
|
||||
}
|
||||
|
||||
public ColumnValue(String column, Serializable value) {
|
||||
private ColumnValue(String column, Serializable value) {
|
||||
this(column, ColumnExpress.MOV, value);
|
||||
}
|
||||
|
||||
public ColumnValue(String column, ColumnExpress express, Serializable value) {
|
||||
Objects.requireNonNull(column);
|
||||
Objects.requireNonNull(express);
|
||||
this.column = column;
|
||||
this.express = express == null ? ColumnExpress.MOV : express;
|
||||
this.express = express;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@@ -94,7 +91,7 @@ public class 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);
|
||||
}
|
||||
|
||||
@@ -119,7 +116,7 @@ public class 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);
|
||||
}
|
||||
|
||||
@@ -144,7 +141,7 @@ public class 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);
|
||||
}
|
||||
|
||||
@@ -156,7 +153,7 @@ public class 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);
|
||||
}
|
||||
|
||||
@@ -321,7 +318,7 @@ public class ColumnValue {
|
||||
* @since 2.8.0
|
||||
*/
|
||||
public static <T> ColumnValue create(LambdaFunction<T, ?> func, Serializable value) {
|
||||
return new ColumnValue(func, value);
|
||||
return new ColumnValue(func, MOV, value);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1358,7 +1358,7 @@ public interface DataSource extends Resourcable {
|
||||
/**
|
||||
* 查询符合过滤条件记录的GROUP BY聚合结果Map <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>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
@@ -1377,7 +1377,7 @@ public interface DataSource extends Resourcable {
|
||||
/**
|
||||
* 查询符合过滤条件记录的GROUP BY聚合结果Map <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>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
@@ -1396,7 +1396,7 @@ public interface DataSource extends Resourcable {
|
||||
/**
|
||||
* 查询符合过滤条件记录的GROUP BY聚合结果Map <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>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
@@ -1416,7 +1416,7 @@ public interface DataSource extends Resourcable {
|
||||
/**
|
||||
* 查询符合过滤条件记录的GROUP BY聚合结果Map <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>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
@@ -1436,7 +1436,7 @@ public interface DataSource extends Resourcable {
|
||||
/**
|
||||
* 查询符合过滤条件记录的GROUP BY聚合结果Map <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>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
@@ -1454,7 +1454,7 @@ public interface DataSource extends Resourcable {
|
||||
/**
|
||||
* 查询符合过滤条件记录的GROUP BY聚合结果Map <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>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
@@ -1472,7 +1472,7 @@ public interface DataSource extends Resourcable {
|
||||
/**
|
||||
* 查询符合过滤条件记录的GROUP BY聚合结果Map <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>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
@@ -1491,7 +1491,7 @@ public interface DataSource extends Resourcable {
|
||||
/**
|
||||
* 查询符合过滤条件记录的GROUP BY聚合结果Map <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>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
@@ -1510,7 +1510,7 @@ public interface DataSource extends Resourcable {
|
||||
/**
|
||||
* 查询符合过滤条件记录的GROUP BY聚合结果Map <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>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
@@ -1530,7 +1530,7 @@ public interface DataSource extends Resourcable {
|
||||
/**
|
||||
* 查询符合过滤条件记录的GROUP BY聚合结果Map <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>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
@@ -1550,7 +1550,7 @@ public interface DataSource extends Resourcable {
|
||||
/**
|
||||
* 查询符合过滤条件记录的GROUP BY聚合结果Map <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>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
@@ -1568,7 +1568,7 @@ public interface DataSource extends Resourcable {
|
||||
/**
|
||||
* 查询符合过滤条件记录的GROUP BY聚合结果Map <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>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
|
||||
@@ -537,8 +537,8 @@ public final class EntityCache<T> {
|
||||
private Number queryColumnNumber(final List<T> list, final ColumnNode funcNode) {
|
||||
if (funcNode instanceof ColumnFuncNode) {
|
||||
return queryColumnNumber(list, (ColumnFuncNode) funcNode);
|
||||
} else if (funcNode instanceof ColumnNodeValue) {
|
||||
return queryColumnNumber(list, (ColumnNodeValue) funcNode);
|
||||
} else if (funcNode instanceof ColumnExpNode) {
|
||||
return queryColumnNumber(list, (ColumnExpNode) funcNode);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
@@ -553,13 +553,13 @@ public final class EntityCache<T> {
|
||||
Number num = null;
|
||||
if (funcNode.getValue() instanceof ColumnFuncNode) {
|
||||
num = queryColumnNumber(list, (ColumnFuncNode) funcNode.getValue());
|
||||
} else if (funcNode.getValue() instanceof ColumnNodeValue) {
|
||||
num = queryColumnNumber(list, (ColumnNodeValue) funcNode.getValue());
|
||||
} else if (funcNode.getValue() instanceof ColumnExpNode) {
|
||||
num = queryColumnNumber(list, (ColumnExpNode) funcNode.getValue());
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
private Number queryColumnNumber(final List<T> list, final ColumnNodeValue nodeValue) {
|
||||
private Number queryColumnNumber(final List<T> list, final ColumnExpNode nodeValue) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1015,8 +1015,8 @@ public final class EntityCache<T> {
|
||||
numb = getValue((Number) attr.get(entity), express, val);
|
||||
break;
|
||||
case MOV:
|
||||
if (val instanceof ColumnNodeValue) {
|
||||
val = updateColumnNodeValue(attr, entity, (ColumnNodeValue) val);
|
||||
if (val instanceof ColumnExpNode) {
|
||||
val = updateColumnExpNode(attr, entity, (ColumnExpNode) val);
|
||||
}
|
||||
newval = val;
|
||||
if (val instanceof Number) {
|
||||
@@ -1061,21 +1061,21 @@ public final class EntityCache<T> {
|
||||
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();
|
||||
if (left instanceof CharSequence) {
|
||||
left = info.getUpdateAttribute(left.toString()).get(entity);
|
||||
if (node.getExpress() == ColumnExpress.MOV) {
|
||||
return left;
|
||||
}
|
||||
} else if (left instanceof ColumnNodeValue) {
|
||||
left = updateColumnNodeValue(attr, entity, (ColumnNodeValue) left);
|
||||
} else if (left instanceof ColumnExpNode) {
|
||||
left = updateColumnExpNode(attr, entity, (ColumnExpNode) left);
|
||||
}
|
||||
Serializable right = node.getRight();
|
||||
if (left instanceof CharSequence) {
|
||||
right = info.getUpdateAttribute(right.toString()).get(entity);
|
||||
} else if (left instanceof ColumnNodeValue) {
|
||||
right = updateColumnNodeValue(attr, entity, (ColumnNodeValue) right);
|
||||
} else if (left instanceof ColumnExpNode) {
|
||||
right = updateColumnExpNode(attr, entity, (ColumnExpNode) right);
|
||||
}
|
||||
return getValue((Number) left, node.getExpress(), right);
|
||||
}
|
||||
|
||||
@@ -1512,9 +1512,9 @@ public final class EntityInfo<T> {
|
||||
return null;
|
||||
}
|
||||
Object val = cv.getValue();
|
||||
//ColumnNodeValue时 cv.getExpress() == ColumnExpress.MOV 只用于updateColumn
|
||||
if (val instanceof ColumnNodeValue) {
|
||||
return formatSQLValue(attr, null, (ColumnNodeValue) val, formatter);
|
||||
//ColumnExpNode时 cv.getExpress() == ColumnExpress.MOV 只用于updateColumn
|
||||
if (val instanceof ColumnExpNode) {
|
||||
return formatSQLValue(attr, null, (ColumnExpNode) val, formatter);
|
||||
}
|
||||
if (val instanceof ColumnFuncNode) {
|
||||
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) {
|
||||
if (node.getValue() instanceof ColumnNodeValue) {
|
||||
return node.getFunc().getColumn(formatSQLValue(attr, tabalis, (ColumnNodeValue) node.getValue(), formatter).toString());
|
||||
if (node.getValue() instanceof ColumnExpNode) {
|
||||
return node.getFunc().getColumn(formatSQLValue(attr, tabalis, (ColumnExpNode) node.getValue(), formatter).toString());
|
||||
} else {
|
||||
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();
|
||||
if (left instanceof CharSequence) {
|
||||
left = this.getSQLColumn(tabalis, left.toString());
|
||||
if (node.getExpress() == ColumnExpress.MOV) {
|
||||
return (String) left;
|
||||
}
|
||||
} else if (left instanceof ColumnNodeValue) {
|
||||
left = "(" + formatSQLValue(attr, tabalis, (ColumnNodeValue) left, formatter) + ")";
|
||||
} else if (left instanceof ColumnExpNode) {
|
||||
left = "(" + formatSQLValue(attr, tabalis, (ColumnExpNode) left, formatter) + ")";
|
||||
} else if (left instanceof ColumnFuncNode) {
|
||||
left = "(" + formatSQLValue(attr, tabalis, (ColumnFuncNode) left, formatter) + ")";
|
||||
}
|
||||
Serializable right = node.getRight();
|
||||
if (right instanceof CharSequence) {
|
||||
right = this.getSQLColumn(null, right.toString());
|
||||
} else if (left instanceof ColumnNodeValue) {
|
||||
right = "(" + formatSQLValue(attr, tabalis, (ColumnNodeValue) right, formatter) + ")";
|
||||
} else if (left instanceof ColumnExpNode) {
|
||||
right = "(" + formatSQLValue(attr, tabalis, (ColumnExpNode) right, formatter) + ")";
|
||||
} else if (left instanceof ColumnFuncNode) {
|
||||
right = "(" + formatSQLValue(attr, tabalis, (ColumnFuncNode) right, formatter) + ")";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user