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