ColumnExpress增加减法DEC

This commit is contained in:
Redkale
2020-01-10 19:08:50 +08:00
parent 51b45f4713
commit 81ae68c571
5 changed files with 42 additions and 2 deletions

View File

@@ -22,6 +22,10 @@ public enum ColumnExpress {
* 加值 col = col + val
*/
INC,
/**
* 加值 col = col - val
*/
DEC,
/**
* 乘值 col = col * val
*/

View File

@@ -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);
}

View File

@@ -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} 操作
*

View File

@@ -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;

View File

@@ -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: