ColumnExpress增加减法DEC
This commit is contained in:
@@ -22,6 +22,10 @@ public enum ColumnExpress {
|
||||
* 加值 col = col + val
|
||||
*/
|
||||
INC,
|
||||
/**
|
||||
* 加值 col = col - val
|
||||
*/
|
||||
DEC,
|
||||
/**
|
||||
* 乘值 col = col * val
|
||||
*/
|
||||
|
||||
@@ -17,11 +17,11 @@ import static org.redkale.source.ColumnExpress.*;
|
||||
*/
|
||||
public class ColumnNodeValue implements Serializable {
|
||||
|
||||
private Serializable left;//类型只能是String、Number、ColumnNode
|
||||
private Serializable left;//类型只能是String、Number、ColumnNodeValue
|
||||
|
||||
private ColumnExpress express; //不能是MOV
|
||||
|
||||
private Serializable right;//类型只能是String、Number、ColumnNode
|
||||
private Serializable right;//类型只能是String、Number、ColumnNodeValue
|
||||
|
||||
public ColumnNodeValue() {
|
||||
}
|
||||
@@ -41,6 +41,10 @@ public class ColumnNodeValue implements Serializable {
|
||||
return new ColumnNodeValue(left, INC, right);
|
||||
}
|
||||
|
||||
public static ColumnNodeValue dec(Serializable left, Serializable right) {
|
||||
return new ColumnNodeValue(left, DEC, right);
|
||||
}
|
||||
|
||||
public static ColumnNodeValue mul(Serializable left, Serializable right) {
|
||||
return new ColumnNodeValue(left, MUL, right);
|
||||
}
|
||||
|
||||
@@ -74,6 +74,18 @@ public class ColumnValue {
|
||||
return new ColumnValue(column, INC, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回 {column} = {column} - {value} 操作
|
||||
*
|
||||
* @param column 字段名
|
||||
* @param value 字段值
|
||||
*
|
||||
* @return ColumnValue
|
||||
*/
|
||||
public static ColumnValue dec(String column, Serializable value) {
|
||||
return new ColumnValue(column, DEC, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回 {column} = {column} * {value} 操作
|
||||
*
|
||||
|
||||
@@ -622,6 +622,15 @@ public final class EntityCache<T> {
|
||||
}
|
||||
}
|
||||
|
||||
public <V> T updateColumnDecrement(final Serializable pk, Attribute<T, V> attr, final long incvalue) {
|
||||
if (pk == null) return null;
|
||||
T rs = this.map.get(pk);
|
||||
if (rs == null) return rs;
|
||||
synchronized (rs) {
|
||||
return updateColumn(attr, rs, ColumnExpress.DEC, incvalue);
|
||||
}
|
||||
}
|
||||
|
||||
private <V> T updateColumn(Attribute<T, V> attr, final T entity, final ColumnExpress express, Serializable val) {
|
||||
final Class ft = attr.type();
|
||||
Number numb = null;
|
||||
@@ -695,6 +704,13 @@ public final class EntityCache<T> {
|
||||
numb = numb.longValue() + ((Number) val).longValue();
|
||||
}
|
||||
break;
|
||||
case DEC:
|
||||
if (numb == null) {
|
||||
numb = (Number) val;
|
||||
} else {
|
||||
numb = numb.longValue() - ((Number) val).longValue();
|
||||
}
|
||||
break;
|
||||
case MUL:
|
||||
if (numb == null) {
|
||||
numb = 0;
|
||||
|
||||
@@ -977,6 +977,8 @@ public final class EntityInfo<T> {
|
||||
switch (cv.getExpress()) {
|
||||
case INC:
|
||||
return new StringBuilder().append(sqlColumn).append(" + ").append(val);
|
||||
case DEC:
|
||||
return new StringBuilder().append(sqlColumn).append(" - ").append(val);
|
||||
case MUL:
|
||||
return new StringBuilder().append(sqlColumn).append(" * ").append(val);
|
||||
case DIV:
|
||||
@@ -1013,6 +1015,8 @@ public final class EntityInfo<T> {
|
||||
switch (node.getExpress()) {
|
||||
case INC:
|
||||
return new StringBuilder().append(left).append(" + ").append(right);
|
||||
case DEC:
|
||||
return new StringBuilder().append(left).append(" - ").append(right);
|
||||
case MUL:
|
||||
return new StringBuilder().append(left).append(" * ").append(right);
|
||||
case DIV:
|
||||
|
||||
Reference in New Issue
Block a user