ColumnValue优化
This commit is contained in:
@@ -2,8 +2,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.source;
|
package org.redkale.source;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import org.redkale.annotation.AutoLoad;
|
import org.redkale.annotation.AutoLoad;
|
||||||
import org.redkale.annotation.ResourceListener;
|
import org.redkale.annotation.ResourceListener;
|
||||||
@@ -53,16 +51,6 @@ public abstract class AbstractCacheSource extends AbstractService implements Cac
|
|||||||
//@since 2.7.0
|
//@since 2.7.0
|
||||||
public static final String CACHE_SOURCE_PIPELINES = "pipelines";
|
public static final String CACHE_SOURCE_PIPELINES = "pipelines";
|
||||||
|
|
||||||
public static void main(String[] args) throws Throwable {
|
|
||||||
File file = new File("C:\\Users\\zhangjx\\Desktop\\AnonymousVirtualPoolFunction.class");
|
|
||||||
|
|
||||||
System.out.println(Utility.binToHexString(Files.readAllBytes(file.toPath())));
|
|
||||||
|
|
||||||
file = new File("C:\\Users\\zhangjx\\Desktop\\AnonymousVirtualExecutor.class");
|
|
||||||
|
|
||||||
System.out.println(Utility.binToHexString(Files.readAllBytes(file.toPath())));
|
|
||||||
}
|
|
||||||
|
|
||||||
@ResourceListener
|
@ResourceListener
|
||||||
public abstract void onResourceChange(ResourceEvent[] events);
|
public abstract void onResourceChange(ResourceEvent[] events);
|
||||||
|
|
||||||
|
|||||||
@@ -1403,7 +1403,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> DataBatch update(Class<T> clazz, Serializable pk, String column, Serializable value) {
|
public <T> DataBatch update(Class<T> clazz, Serializable pk, String column, Serializable value) {
|
||||||
return update(clazz, pk, ColumnValue.mov(column, value));
|
return update(clazz, pk, ColumnValue.set(column, value));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1425,7 +1425,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> DataBatch update(Class<T> clazz, FilterNode node, String column, Serializable value) {
|
public <T> DataBatch update(Class<T> clazz, FilterNode node, String column, Serializable value) {
|
||||||
return update(clazz, node, (Flipper) null, ColumnValue.mov(column, value));
|
return update(clazz, node, (Flipper) null, ColumnValue.set(column, value));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -59,12 +59,6 @@ public final class CacheMemorySource extends AbstractCacheSource {
|
|||||||
|
|
||||||
private final ReentrantLock containerLock = new ReentrantLock();
|
private final ReentrantLock containerLock = new ReentrantLock();
|
||||||
|
|
||||||
private final BiConsumer futureCompleteConsumer = (r, t) -> {
|
|
||||||
if (t != null) {
|
|
||||||
logger.log(Level.SEVERE, "CompletableFuture complete error", (Throwable) t);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//key: topic
|
//key: topic
|
||||||
private final Map<String, Set<CacheEventListener<byte[]>>> pubsubListeners = new ConcurrentHashMap<>();
|
private final Map<String, Set<CacheEventListener<byte[]>>> pubsubListeners = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
@@ -574,7 +568,7 @@ public final class CacheMemorySource extends AbstractCacheSource {
|
|||||||
entry.cacheType = CacheEntryType.DOUBLE;
|
entry.cacheType = CacheEntryType.DOUBLE;
|
||||||
}
|
}
|
||||||
Long v = ((AtomicLong) entry.objectValue).addAndGet(Double.doubleToLongBits(num));
|
Long v = ((AtomicLong) entry.objectValue).addAndGet(Double.doubleToLongBits(num));
|
||||||
return Double.longBitsToDouble(v.intValue());
|
return Double.longBitsToDouble(v.longValue());
|
||||||
} finally {
|
} finally {
|
||||||
entry.unlock();
|
entry.unlock();
|
||||||
}
|
}
|
||||||
@@ -631,7 +625,7 @@ public final class CacheMemorySource extends AbstractCacheSource {
|
|||||||
case ATOMIC:
|
case ATOMIC:
|
||||||
return Utility.convertValue(type, (AtomicLong) entry.objectValue);
|
return Utility.convertValue(type, (AtomicLong) entry.objectValue);
|
||||||
case DOUBLE:
|
case DOUBLE:
|
||||||
return Utility.convertValue(type, Double.longBitsToDouble(((AtomicLong) entry.objectValue).intValue()));
|
return Utility.convertValue(type, Double.longBitsToDouble(((AtomicLong) entry.objectValue).longValue()));
|
||||||
case SSET:
|
case SSET:
|
||||||
return (T) new LinkedHashSet(entry.setValue);
|
return (T) new LinkedHashSet(entry.setValue);
|
||||||
case ZSET:
|
case ZSET:
|
||||||
|
|||||||
@@ -14,9 +14,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", ColumnExpNode.inc("createTime", 10))); <br>
|
* source.updateColumn(Record.class, 1, ColumnValue.set("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", ColumnExpNode.div(ColumnExpNode.mul("createTime", 10), "createCount"))); <br>
|
* source.updateColumn(Record.class, 1, ColumnValue.set("updateTime", ColumnExpNode.div(ColumnExpNode.mul("createTime", 10), "createCount"))); <br>
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* 详情见: https://redkale.org
|
* 详情见: https://redkale.org
|
||||||
@@ -30,7 +30,7 @@ public class ColumnExpNode implements ColumnNode {
|
|||||||
protected ColumnNode left;//类型只能是ColumnNameNode、ColumnNumberNode、ColumnExpNode
|
protected ColumnNode left;//类型只能是ColumnNameNode、ColumnNumberNode、ColumnExpNode
|
||||||
|
|
||||||
@ConvertColumn(index = 2)
|
@ConvertColumn(index = 2)
|
||||||
protected ColumnExpress express; //MOV时,left必须是ColumnNameNode, right必须是null
|
protected ColumnExpress express; //SET时,left必须是ColumnNameNode, right必须是null
|
||||||
|
|
||||||
@ConvertColumn(index = 3)
|
@ConvertColumn(index = 3)
|
||||||
protected ColumnNode right;//类型只能是ColumnNameNode、ColumnNumberNode、ColumnExpNode
|
protected ColumnNode right;//类型只能是ColumnNameNode、ColumnNumberNode、ColumnExpNode
|
||||||
@@ -44,9 +44,9 @@ public class ColumnExpNode implements ColumnNode {
|
|||||||
}
|
}
|
||||||
ColumnNode leftNode = createColumnNode(left);
|
ColumnNode leftNode = createColumnNode(left);
|
||||||
ColumnNode rightNode = createColumnNode(right);
|
ColumnNode rightNode = createColumnNode(right);
|
||||||
if (express == MOV) {
|
if (express == SET) {
|
||||||
if (!(leftNode instanceof ColumnNameNode) || right != null) {
|
if (!(leftNode instanceof ColumnNameNode) || right != null) {
|
||||||
throw new IllegalArgumentException("left value must be ColumnNameNode, right value must be null on ColumnExpress.MOV");
|
throw new IllegalArgumentException("left value must be ColumnNameNode, right value must be null on ColumnExpress.SET");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.left = leftNode;
|
this.left = leftNode;
|
||||||
@@ -73,7 +73,7 @@ public class ColumnExpNode implements ColumnNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.redkale.source.ColumnNodes#mov(java.lang.String)
|
* @see org.redkale.source.ColumnNodes#set(java.lang.String)
|
||||||
*
|
*
|
||||||
* @param left Serializable
|
* @param left Serializable
|
||||||
*
|
*
|
||||||
@@ -82,7 +82,7 @@ public class ColumnExpNode implements ColumnNode {
|
|||||||
*/
|
*/
|
||||||
@Deprecated(since = "2.8.0")
|
@Deprecated(since = "2.8.0")
|
||||||
public static ColumnExpNode mov(String left) {
|
public static ColumnExpNode mov(String left) {
|
||||||
return new ColumnExpNode(left, MOV, null);
|
return new ColumnExpNode(left, SET, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public enum ColumnExpress {
|
|||||||
/**
|
/**
|
||||||
* 赋值 col = val
|
* 赋值 col = val
|
||||||
*/
|
*/
|
||||||
MOV,
|
SET,
|
||||||
/**
|
/**
|
||||||
* 加值 col = col + val
|
* 加值 col = col + val
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.source;
|
package org.redkale.source;
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import static org.redkale.source.ColumnExpress.*;
|
import static org.redkale.source.ColumnExpress.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -33,68 +32,184 @@ public abstract class ColumnNodes {
|
|||||||
return new ColumnStringNode(value);
|
return new ColumnStringNode(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnFuncNode func(FilterFunc func, Serializable node) {
|
public static ColumnFuncNode func(FilterFunc func, String column) {
|
||||||
|
return new ColumnFuncNode(func, column(column));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnFuncNode func(FilterFunc func, ColumnNode node) {
|
||||||
return new ColumnFuncNode(func, node);
|
return new ColumnFuncNode(func, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnFuncNode avg(Serializable node) {
|
public static ColumnFuncNode avg(String column) {
|
||||||
|
return new ColumnFuncNode(FilterFunc.AVG, column(column));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnFuncNode avg(ColumnNode node) {
|
||||||
return new ColumnFuncNode(FilterFunc.AVG, node);
|
return new ColumnFuncNode(FilterFunc.AVG, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnFuncNode count(Serializable node) {
|
public static ColumnFuncNode count(String column) {
|
||||||
|
return new ColumnFuncNode(FilterFunc.COUNT, column(column));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnFuncNode count(ColumnNode node) {
|
||||||
return new ColumnFuncNode(FilterFunc.COUNT, node);
|
return new ColumnFuncNode(FilterFunc.COUNT, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnFuncNode distinctCount(Serializable node) {
|
public static ColumnFuncNode distinctCount(String column) {
|
||||||
|
return new ColumnFuncNode(FilterFunc.DISTINCTCOUNT, column(column));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnFuncNode distinctCount(ColumnNode node) {
|
||||||
return new ColumnFuncNode(FilterFunc.DISTINCTCOUNT, node);
|
return new ColumnFuncNode(FilterFunc.DISTINCTCOUNT, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnFuncNode max(Serializable node) {
|
public static ColumnFuncNode max(String column) {
|
||||||
|
return new ColumnFuncNode(FilterFunc.MAX, column(column));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnFuncNode max(ColumnNode node) {
|
||||||
return new ColumnFuncNode(FilterFunc.MAX, node);
|
return new ColumnFuncNode(FilterFunc.MAX, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnFuncNode min(Serializable node) {
|
public static ColumnFuncNode min(String column) {
|
||||||
|
return new ColumnFuncNode(FilterFunc.MIN, column(column));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnFuncNode min(ColumnNode node) {
|
||||||
return new ColumnFuncNode(FilterFunc.MIN, node);
|
return new ColumnFuncNode(FilterFunc.MIN, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnFuncNode sum(Serializable node) {
|
public static ColumnFuncNode sum(String column) {
|
||||||
|
return new ColumnFuncNode(FilterFunc.SUM, column(column));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnFuncNode sum(ColumnNode node) {
|
||||||
return new ColumnFuncNode(FilterFunc.SUM, node);
|
return new ColumnFuncNode(FilterFunc.SUM, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnExpNode exp(Serializable left, ColumnExpress express, Serializable right) {
|
public static ColumnExpNode exp(ColumnNode left, ColumnExpress express, ColumnNode right) {
|
||||||
return new ColumnExpNode(left, express, right);
|
return new ColumnExpNode(left, express, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnExpNode mov(String left) {
|
public static ColumnExpNode set(String column) {
|
||||||
return new ColumnExpNode(left, MOV, null);
|
return new ColumnExpNode(column, SET, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnExpNode inc(Serializable left, Serializable right) {
|
public static ColumnExpNode set(ColumnNameNode left) {
|
||||||
|
return new ColumnExpNode(left, SET, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode inc(String leftColumn, Number rightValue) {
|
||||||
|
return new ColumnExpNode(column(leftColumn), INC, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode inc(ColumnNode left, ColumnNode right) {
|
||||||
return new ColumnExpNode(left, INC, right);
|
return new ColumnExpNode(left, INC, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnExpNode dec(Serializable left, Serializable right) {
|
public static ColumnExpNode inc(ColumnNode left, String rightColumn) {
|
||||||
|
return new ColumnExpNode(left, INC, column(rightColumn));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode inc(ColumnNode left, Number rightValue) {
|
||||||
|
return new ColumnExpNode(left, INC, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode dec(String leftColumn, Number rightValue) {
|
||||||
|
return new ColumnExpNode(column(leftColumn), DEC, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode dec(ColumnNode left, ColumnNode right) {
|
||||||
return new ColumnExpNode(left, DEC, right);
|
return new ColumnExpNode(left, DEC, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnExpNode mul(Serializable left, Serializable right) {
|
public static ColumnExpNode dec(ColumnNode left, String rightColumn) {
|
||||||
|
return new ColumnExpNode(left, DEC, column(rightColumn));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode dec(ColumnNode left, Number rightValue) {
|
||||||
|
return new ColumnExpNode(left, DEC, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode mul(String leftColumn, Number rightValue) {
|
||||||
|
return new ColumnExpNode(column(leftColumn), MUL, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode mul(ColumnNode left, ColumnNode right) {
|
||||||
return new ColumnExpNode(left, MUL, right);
|
return new ColumnExpNode(left, MUL, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnExpNode div(Serializable left, Serializable right) {
|
public static ColumnExpNode mul(ColumnNode left, String rightColumn) {
|
||||||
|
return new ColumnExpNode(left, MUL, column(rightColumn));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode mul(ColumnNode left, Number rightValue) {
|
||||||
|
return new ColumnExpNode(left, MUL, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode div(String leftColumn, Number rightValue) {
|
||||||
|
return new ColumnExpNode(column(leftColumn), DIV, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode div(ColumnNode left, ColumnNode right) {
|
||||||
return new ColumnExpNode(left, DIV, right);
|
return new ColumnExpNode(left, DIV, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnExpNode mod(Serializable left, Serializable right) {
|
public static ColumnExpNode div(ColumnNode left, String rightColumn) {
|
||||||
|
return new ColumnExpNode(left, DIV, column(rightColumn));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode div(ColumnNode left, Number rightValue) {
|
||||||
|
return new ColumnExpNode(left, DIV, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode mod(String leftColumn, Number rightValue) {
|
||||||
|
return new ColumnExpNode(column(leftColumn), MOD, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode mod(ColumnNode left, ColumnNode right) {
|
||||||
return new ColumnExpNode(left, MOD, right);
|
return new ColumnExpNode(left, MOD, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnExpNode and(Serializable left, Serializable right) {
|
public static ColumnExpNode mod(ColumnNode left, String rightColumn) {
|
||||||
|
return new ColumnExpNode(left, MOD, column(rightColumn));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode mod(ColumnNode left, Number rightValue) {
|
||||||
|
return new ColumnExpNode(left, MOD, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode and(String leftColumn, Number rightValue) {
|
||||||
|
return new ColumnExpNode(column(leftColumn), AND, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode and(ColumnNode left, ColumnNode right) {
|
||||||
return new ColumnExpNode(left, AND, right);
|
return new ColumnExpNode(left, AND, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColumnExpNode orr(Serializable left, Serializable right) {
|
public static ColumnExpNode and(ColumnNode left, String rightColumn) {
|
||||||
|
return new ColumnExpNode(left, AND, column(rightColumn));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode and(ColumnNode left, Number rightValue) {
|
||||||
|
return new ColumnExpNode(left, AND, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode orr(String leftColumn, Number rightValue) {
|
||||||
|
return new ColumnExpNode(column(leftColumn), ORR, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode orr(ColumnNode left, ColumnNode right) {
|
||||||
return new ColumnExpNode(left, ORR, right);
|
return new ColumnExpNode(left, ORR, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode orr(ColumnNode left, String rightColumn) {
|
||||||
|
return new ColumnExpNode(left, ORR, column(rightColumn));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ColumnExpNode orr(ColumnNode left, Number rightValue) {
|
||||||
|
return new ColumnExpNode(left, ORR, number(rightValue));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class ColumnValue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 同 mov 操作
|
* 同 set 操作
|
||||||
*
|
*
|
||||||
* @param column 字段名
|
* @param column 字段名
|
||||||
* @param value 字段值
|
* @param value 字段值
|
||||||
@@ -75,7 +75,21 @@ public class ColumnValue {
|
|||||||
* @return ColumnValue
|
* @return ColumnValue
|
||||||
*/
|
*/
|
||||||
public static ColumnValue create(String column, Serializable value) {
|
public static ColumnValue create(String column, Serializable value) {
|
||||||
return new ColumnValue(column, MOV, value);
|
return new ColumnValue(column, SET, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see #set(java.lang.String, java.io.Serializable)
|
||||||
|
*
|
||||||
|
* @param column 字段名
|
||||||
|
* @param value 字段值
|
||||||
|
*
|
||||||
|
* @return ColumnValue
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
@Deprecated(since = "2.8.0")
|
||||||
|
public static ColumnValue mov(String column, Serializable value) {
|
||||||
|
return set(column, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -86,8 +100,8 @@ public class ColumnValue {
|
|||||||
*
|
*
|
||||||
* @return ColumnValue
|
* @return ColumnValue
|
||||||
*/
|
*/
|
||||||
public static ColumnValue mov(String column, Serializable value) {
|
public static ColumnValue set(String column, Serializable value) {
|
||||||
return new ColumnValue(column, MOV, value);
|
return new ColumnValue(column, SET, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -172,10 +186,10 @@ public class ColumnValue {
|
|||||||
*
|
*
|
||||||
* @return ColumnValue
|
* @return ColumnValue
|
||||||
*/
|
*/
|
||||||
//不常用,防止开发者容易在mov时误输入mod
|
public static ColumnValue mod(String column, Serializable value) {
|
||||||
// public static ColumnValue mod(String column, Serializable value) {
|
return new ColumnValue(column, MOD, value);
|
||||||
// return new ColumnValue(column, MOD, value);
|
}
|
||||||
// }
|
|
||||||
/**
|
/**
|
||||||
* 返回 {column} = {column} & {value} 操作
|
* 返回 {column} = {column} & {value} 操作
|
||||||
*
|
*
|
||||||
@@ -201,7 +215,7 @@ public class ColumnValue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 同 mov 操作
|
* 同 set 操作
|
||||||
*
|
*
|
||||||
* @param func 字段名Lambda
|
* @param func 字段名Lambda
|
||||||
* @param <T> 值的泛型
|
* @param <T> 值的泛型
|
||||||
@@ -212,7 +226,7 @@ public class ColumnValue {
|
|||||||
* @since 2.8.0
|
* @since 2.8.0
|
||||||
*/
|
*/
|
||||||
public static <T extends Serializable> ColumnValue create(LambdaSupplier<T> func) {
|
public static <T extends Serializable> ColumnValue create(LambdaSupplier<T> func) {
|
||||||
return new ColumnValue(func, MOV);
|
return new ColumnValue(func, SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -225,8 +239,8 @@ public class ColumnValue {
|
|||||||
*
|
*
|
||||||
* @since 2.8.0
|
* @since 2.8.0
|
||||||
*/
|
*/
|
||||||
public static <T extends Serializable> ColumnValue mov(LambdaSupplier<T> func) {
|
public static <T extends Serializable> ColumnValue set(LambdaSupplier<T> func) {
|
||||||
return new ColumnValue(func, MOV);
|
return new ColumnValue(func, SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -285,6 +299,20 @@ public class ColumnValue {
|
|||||||
return new ColumnValue(func, DIV);
|
return new ColumnValue(func, DIV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回 {column} = {column} % {value} 操作
|
||||||
|
*
|
||||||
|
* @param func 字段名Lambda
|
||||||
|
* @param <T> 值的泛型
|
||||||
|
*
|
||||||
|
* @return ColumnValue
|
||||||
|
*
|
||||||
|
* @since 2.8.0
|
||||||
|
*/
|
||||||
|
public static <T extends Serializable> ColumnValue mod(LambdaSupplier<T> func) {
|
||||||
|
return new ColumnValue(func, MOD);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 返回 {column} = {column} & {value} 操作
|
* 返回 {column} = {column} & {value} 操作
|
||||||
*
|
*
|
||||||
@@ -314,7 +342,7 @@ public class ColumnValue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 同 mov 操作
|
* 同 set 操作
|
||||||
*
|
*
|
||||||
* @param func 字段名Lambda
|
* @param func 字段名Lambda
|
||||||
* @param value 字段值
|
* @param value 字段值
|
||||||
@@ -325,7 +353,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, MOV, value);
|
return new ColumnValue(func, SET, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -339,8 +367,8 @@ public class ColumnValue {
|
|||||||
*
|
*
|
||||||
* @since 2.8.0
|
* @since 2.8.0
|
||||||
*/
|
*/
|
||||||
public static <T> ColumnValue mov(LambdaFunction<T, ?> func, Serializable value) {
|
public static <T> ColumnValue set(LambdaFunction<T, ?> func, Serializable value) {
|
||||||
return new ColumnValue(func, MOV, value);
|
return new ColumnValue(func, SET, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -431,6 +459,21 @@ public class ColumnValue {
|
|||||||
return new ColumnValue(func, DIV, value);
|
return new ColumnValue(func, DIV, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回 {column} = {column} % {value} 操作
|
||||||
|
*
|
||||||
|
* @param func 字段名Lambda
|
||||||
|
* @param value 字段值
|
||||||
|
* @param <T> 值的泛型
|
||||||
|
*
|
||||||
|
* @return ColumnValue
|
||||||
|
*
|
||||||
|
* @since 2.8.0
|
||||||
|
*/
|
||||||
|
public static <T> ColumnValue mod(LambdaFunction<T, ?> func, Serializable value) {
|
||||||
|
return new ColumnValue(func, MOD, value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 返回 {column} = {column} & {value} 操作
|
* 返回 {column} = {column} & {value} 操作
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1015,7 +1015,7 @@ public final class EntityCache<T> {
|
|||||||
case ORR:
|
case ORR:
|
||||||
numb = getNumberValue((Number) attr.get(entity), express, val instanceof ColumnNumberNode ? ((ColumnNumberNode) val).getValue() : (Number) val);
|
numb = getNumberValue((Number) attr.get(entity), express, val instanceof ColumnNumberNode ? ((ColumnNumberNode) val).getValue() : (Number) val);
|
||||||
break;
|
break;
|
||||||
case MOV:
|
case SET:
|
||||||
if (val instanceof ColumnExpNode) {
|
if (val instanceof ColumnExpNode) {
|
||||||
val = updateColumnExpNode(attr, entity, (ColumnExpNode) val);
|
val = updateColumnExpNode(attr, entity, (ColumnExpNode) val);
|
||||||
}
|
}
|
||||||
@@ -1073,7 +1073,7 @@ public final class EntityCache<T> {
|
|||||||
} else if (leftNode instanceof ColumnExpNode) {
|
} else if (leftNode instanceof ColumnExpNode) {
|
||||||
leftVal = updateColumnExpNode(attr, entity, (ColumnExpNode) leftNode);
|
leftVal = updateColumnExpNode(attr, entity, (ColumnExpNode) leftNode);
|
||||||
}
|
}
|
||||||
if (node.getExpress() == ColumnExpress.MOV) {
|
if (node.getExpress() == ColumnExpress.SET) {
|
||||||
return leftVal;
|
return leftVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1513,7 +1513,7 @@ public final class EntityInfo<T> {
|
|||||||
}
|
}
|
||||||
//ColumnExpNode、ColumnFuncNode、ColumnNameNode、ColumnNumberNode、ColumnStringNode
|
//ColumnExpNode、ColumnFuncNode、ColumnNameNode、ColumnNumberNode、ColumnStringNode
|
||||||
ColumnNode node = cv.getValue();
|
ColumnNode node = cv.getValue();
|
||||||
//ColumnExpNode时 cv.getExpress() == ColumnExpress.MOV 只用于updateColumn
|
//ColumnExpNode时 cv.getExpress() == ColumnExpress.SET 只用于updateColumn
|
||||||
if (node instanceof ColumnExpNode) {
|
if (node instanceof ColumnExpNode) {
|
||||||
return formatColumnExpNodeSQLValue(attr, null, (ColumnExpNode) node, formatter);
|
return formatColumnExpNodeSQLValue(attr, null, (ColumnExpNode) node, formatter);
|
||||||
}
|
}
|
||||||
@@ -1543,7 +1543,7 @@ public final class EntityInfo<T> {
|
|||||||
return new StringBuilder().append(sqlColumn).append(" & ").append(val);
|
return new StringBuilder().append(sqlColumn).append(" & ").append(val);
|
||||||
case ORR:
|
case ORR:
|
||||||
return new StringBuilder().append(sqlColumn).append(" | ").append(val);
|
return new StringBuilder().append(sqlColumn).append(" | ").append(val);
|
||||||
case MOV:
|
case SET:
|
||||||
return val == null && isNotNullJson(attr) ? "" : val;
|
return val == null && isNotNullJson(attr) ? "" : val;
|
||||||
default:
|
default:
|
||||||
return val;
|
return val;
|
||||||
@@ -1572,7 +1572,7 @@ public final class EntityInfo<T> {
|
|||||||
} else if (leftNode instanceof ColumnFuncNode) {
|
} else if (leftNode instanceof ColumnFuncNode) {
|
||||||
leftVal = "(" + formatColumnFuncNodeSQLValue(attr, tabalis, (ColumnFuncNode) leftNode, formatter) + ")";
|
leftVal = "(" + formatColumnFuncNodeSQLValue(attr, tabalis, (ColumnFuncNode) leftNode, formatter) + ")";
|
||||||
}
|
}
|
||||||
if (node.getExpress() == ColumnExpress.MOV) {
|
if (node.getExpress() == ColumnExpress.SET) {
|
||||||
return leftVal;
|
return leftVal;
|
||||||
}
|
}
|
||||||
CharSequence rightVal = null;
|
CharSequence rightVal = null;
|
||||||
@@ -1604,7 +1604,7 @@ public final class EntityInfo<T> {
|
|||||||
case ORR:
|
case ORR:
|
||||||
return new StringBuilder().append(leftVal).append(" | ").append(rightVal);
|
return new StringBuilder().append(leftVal).append(" | ").append(rightVal);
|
||||||
}
|
}
|
||||||
throw new IllegalArgumentException(node + " express cannot be null or MOV");
|
throw new IllegalArgumentException(node + " express cannot be null or SET");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected CharSequence formatColumnNameNodeSQLValue(Attribute<T, Serializable> attr, String tabalis, final ColumnNameNode node, BiFunction<EntityInfo, Object, CharSequence> formatter) {
|
protected CharSequence formatColumnNameNodeSQLValue(Attribute<T, Serializable> attr, String tabalis, final ColumnNameNode node, BiFunction<EntityInfo, Object, CharSequence> formatter) {
|
||||||
|
|||||||
@@ -22,7 +22,9 @@ public enum FilterFunc {
|
|||||||
SUM; //求和
|
SUM; //求和
|
||||||
|
|
||||||
public String getColumn(String col) {
|
public String getColumn(String col) {
|
||||||
if (this == DISTINCTCOUNT) return "COUNT(DISTINCT " + col + ")";
|
if (this == DISTINCTCOUNT) {
|
||||||
|
return "COUNT(DISTINCT " + col + ")";
|
||||||
|
}
|
||||||
return this.name() + "(" + col + ")";
|
return this.name() + "(" + col + ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import java.util.function.*;
|
|||||||
import org.redkale.annotation.ConstructorParameters;
|
import org.redkale.annotation.ConstructorParameters;
|
||||||
import org.redkale.convert.ConvertColumn;
|
import org.redkale.convert.ConvertColumn;
|
||||||
import org.redkale.convert.ConvertDisabled;
|
import org.redkale.convert.ConvertDisabled;
|
||||||
|
import static org.redkale.util.Utility.isEmpty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 该类提供类似JSONObject的数据结构,主要用于读取xml配置文件和http-header存储
|
* 该类提供类似JSONObject的数据结构,主要用于读取xml配置文件和http-header存储
|
||||||
@@ -1631,8 +1632,7 @@ public abstract class AnyValue {
|
|||||||
* @return 字段值
|
* @return 字段值
|
||||||
*/
|
*/
|
||||||
public String getOrDefault(String name, String defaultValue) {
|
public String getOrDefault(String name, String defaultValue) {
|
||||||
String value = getValue(name);
|
return getValue(name, defaultValue);
|
||||||
return value == null ? defaultValue : value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1648,7 +1648,7 @@ public abstract class AnyValue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static <T> boolean equals(Entry<? extends T>[] entry1, Entry<T>[] entry2) {
|
private static <T> boolean equals(Entry<? extends T>[] entry1, Entry<T>[] entry2) {
|
||||||
if ((entry1 == null || entry1.length == 0) && (entry2 == null || entry2.length == 0)) {
|
if (isEmpty(entry1) && isEmpty(entry2)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (entry1.length != entry2.length) {
|
if (entry1.length != entry2.length) {
|
||||||
|
|||||||
@@ -429,12 +429,13 @@ public interface Attribute<T, F> {
|
|||||||
* 根据Class生成getter、setter方法都存在的字段对应的 Attribute 对象数组。
|
* 根据Class生成getter、setter方法都存在的字段对应的 Attribute 对象数组。
|
||||||
*
|
*
|
||||||
* @param <T> 依附类的类型
|
* @param <T> 依附类的类型
|
||||||
|
* @param <F> 字段的类型
|
||||||
* @param clazz 指定依附的类
|
* @param clazz 指定依附的类
|
||||||
*
|
*
|
||||||
* @return Attribute对象数组
|
* @return Attribute对象数组
|
||||||
*/
|
*/
|
||||||
public static <T> Attribute<T, ?>[] create(Class<T> clazz) {
|
public static <T, F> Attribute<T, F>[] create(Class<T> clazz) {
|
||||||
List<Attribute<T, ?>> list = new ArrayList<>();
|
List<Attribute<T, F>> list = new ArrayList<>();
|
||||||
RedkaleClassLoader.putReflectionPublicFields(clazz.getName());
|
RedkaleClassLoader.putReflectionPublicFields(clazz.getName());
|
||||||
for (java.lang.reflect.Field field : clazz.getFields()) {
|
for (java.lang.reflect.Field field : clazz.getFields()) {
|
||||||
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
|
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
|
||||||
@@ -476,12 +477,13 @@ public interface Attribute<T, F> {
|
|||||||
* 根据Class生成getter方法对应的 Attribute 对象数组。
|
* 根据Class生成getter方法对应的 Attribute 对象数组。
|
||||||
*
|
*
|
||||||
* @param <T> 依附类的类型
|
* @param <T> 依附类的类型
|
||||||
|
* @param <F> 字段的类型
|
||||||
* @param clazz 指定依附的类
|
* @param clazz 指定依附的类
|
||||||
*
|
*
|
||||||
* @return Attribute对象数组
|
* @return Attribute对象数组
|
||||||
*/
|
*/
|
||||||
public static <T> Attribute<T, ?>[] createGetters(Class<T> clazz) {
|
public static <T, F> Attribute<T, F>[] createGetters(Class<T> clazz) {
|
||||||
List<Attribute<T, ?>> list = new ArrayList<>();
|
List<Attribute<T, F>> list = new ArrayList<>();
|
||||||
RedkaleClassLoader.putReflectionPublicFields(clazz.getName());
|
RedkaleClassLoader.putReflectionPublicFields(clazz.getName());
|
||||||
for (java.lang.reflect.Field field : clazz.getFields()) {
|
for (java.lang.reflect.Field field : clazz.getFields()) {
|
||||||
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
|
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
|
||||||
@@ -519,12 +521,13 @@ public interface Attribute<T, F> {
|
|||||||
* 根据Class生成setter方法对应的 Attribute 对象数组。
|
* 根据Class生成setter方法对应的 Attribute 对象数组。
|
||||||
*
|
*
|
||||||
* @param <T> 依附类的类型
|
* @param <T> 依附类的类型
|
||||||
|
* @param <F> 字段的类型
|
||||||
* @param clazz 指定依附的类
|
* @param clazz 指定依附的类
|
||||||
*
|
*
|
||||||
* @return Attribute对象数组
|
* @return Attribute对象数组
|
||||||
*/
|
*/
|
||||||
public static <T> Attribute<T, ?>[] createSetters(Class<T> clazz) {
|
public static <T, F> Attribute<T, F>[] createSetters(Class<T> clazz) {
|
||||||
List<Attribute<T, ?>> list = new ArrayList<>();
|
List<Attribute<T, F>> list = new ArrayList<>();
|
||||||
RedkaleClassLoader.putReflectionPublicFields(clazz.getName());
|
RedkaleClassLoader.putReflectionPublicFields(clazz.getName());
|
||||||
for (java.lang.reflect.Field field : clazz.getFields()) {
|
for (java.lang.reflect.Field field : clazz.getFields()) {
|
||||||
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
|
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
|
||||||
|
|||||||
@@ -756,10 +756,7 @@ public final class ByteArray implements ByteTuple {
|
|||||||
* @return ByteArray
|
* @return ByteArray
|
||||||
*/
|
*/
|
||||||
public ByteArray putUnsignedMedium(int offset, int value) {
|
public ByteArray putUnsignedMedium(int offset, int value) {
|
||||||
content[offset] = (byte) (value >> 16 & 0xFF);
|
return putMedium(offset, value);
|
||||||
content[offset + 1] = (byte) (value >> 8 & 0xFF);
|
|
||||||
content[offset + 2] = (byte) (value & 0xFF);
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -101,14 +101,14 @@ public class OneOrList<T> implements java.io.Serializable {
|
|||||||
@Override
|
@Override
|
||||||
public OneOrList convertFrom(JsonReader in) {
|
public OneOrList convertFrom(JsonReader in) {
|
||||||
if (in.isNextArray()) {
|
if (in.isNextArray()) {
|
||||||
List list = (List) listDecoder.convertFrom(in);
|
List val = (List) listDecoder.convertFrom(in);
|
||||||
OneOrList rs = creator.create();
|
OneOrList rs = creator.create();
|
||||||
rs.setList(list);
|
rs.setList(val);
|
||||||
return rs;
|
return rs;
|
||||||
} else {
|
} else {
|
||||||
Object one = oneDecoder.convertFrom(in);
|
Object val = oneDecoder.convertFrom(in);
|
||||||
OneOrList rs = creator.create();
|
OneOrList rs = creator.create();
|
||||||
rs.setOne(one);
|
rs.setOne(val);
|
||||||
return rs;
|
return rs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.util;
|
package org.redkale.util;
|
||||||
|
|
||||||
import org.redkale.annotation.ConstructorParameters;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
import org.redkale.annotation.ConstructorParameters;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 详情见: https://redkale.org
|
* 详情见: https://redkale.org
|
||||||
@@ -71,7 +70,7 @@ public interface ResourceEvent<T> {
|
|||||||
|
|
||||||
public static class ResourceChangeEvent<T> implements ResourceEvent<T> {
|
public static class ResourceChangeEvent<T> implements ResourceEvent<T> {
|
||||||
|
|
||||||
private static final Predicate<String> numRegx = Pattern.compile("^(\\-|\\+)?\\d+(\\.\\d+)?$").asPredicate();
|
private static final Predicate<String> numRegx = Pattern.compile("^(\\-\\+)?\\d+(\\.\\d+)?$").asPredicate();
|
||||||
|
|
||||||
protected String name;
|
protected String name;
|
||||||
|
|
||||||
|
|||||||
@@ -96,11 +96,11 @@ public class ThreadHashExecutor extends AbstractExecutorService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Future<?> submit(Runnable task) {
|
public Future submit(Runnable task) {
|
||||||
return hashExecutor(0).submit(task);
|
return hashExecutor(0).submit(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Future<?> submit(int hash, Runnable task) {
|
public Future submit(int hash, Runnable task) {
|
||||||
return hashExecutor(hash).submit(task);
|
return hashExecutor(hash).submit(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ public final class Utility {
|
|||||||
private static final ReentrantLock clientLock = new ReentrantLock();
|
private static final ReentrantLock clientLock = new ReentrantLock();
|
||||||
|
|
||||||
//是否native-image运行环境
|
//是否native-image运行环境
|
||||||
private static final boolean nativeImageEnv = "executable".equals(System.getProperty("org.graalvm.nativeimage.kind"));
|
private static final boolean NATIVE_IMAGE_ENV = "executable".equals(System.getProperty("org.graalvm.nativeimage.kind"));
|
||||||
|
|
||||||
private static HttpClient httpClient;
|
private static HttpClient httpClient;
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ public final class Utility {
|
|||||||
Function<String, ExecutorService> virtualPoolFunction0 = null;
|
Function<String, ExecutorService> virtualPoolFunction0 = null;
|
||||||
Executor virtualExecutorConsumer0 = null;
|
Executor virtualExecutorConsumer0 = null;
|
||||||
|
|
||||||
if (!nativeImageEnv) { //not native-image
|
if (!NATIVE_IMAGE_ENV) { //not native-image
|
||||||
try {
|
try {
|
||||||
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
|
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
|
||||||
{ //virtualThreadLocalFunction
|
{ //virtualThreadLocalFunction
|
||||||
@@ -951,6 +951,30 @@ public final class Utility {
|
|||||||
return collection != null && !collection.isEmpty();
|
return collection != null && !collection.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否为空
|
||||||
|
*
|
||||||
|
* @param array 数组
|
||||||
|
*
|
||||||
|
* @return 是否为空
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static <T> boolean isEmpty(T[] array) {
|
||||||
|
return array == null || array.length == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否不为空
|
||||||
|
*
|
||||||
|
* @param array 数组
|
||||||
|
*
|
||||||
|
* @return 是否不为空
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static <T> boolean isNotEmpty(T[] array) {
|
||||||
|
return array != null && array.length > 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将字符串首字母大写
|
* 将字符串首字母大写
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -72,9 +72,9 @@ public class JsonRecord {
|
|||||||
source.init(conf);
|
source.init(conf);
|
||||||
JsonRecord record = JsonRecord.create();
|
JsonRecord record = JsonRecord.create();
|
||||||
source.insert(record);
|
source.insert(record);
|
||||||
source.updateColumn(JsonRecord.class, record.getRecordid(), ColumnValue.mov("recordname", "my name 2"));
|
source.updateColumn(JsonRecord.class, record.getRecordid(), ColumnValue.set("recordname", "my name 2"));
|
||||||
record.getRmap().put("haha", 2222);
|
record.getRmap().put("haha", 2222);
|
||||||
source.updateColumn(JsonRecord.class, record.getRecordid(), ColumnValue.mov("rmap", (Serializable) (Object) record.getRmap()));
|
source.updateColumn(JsonRecord.class, record.getRecordid(), ColumnValue.set("rmap", (Serializable) (Object) record.getRmap()));
|
||||||
System.out.println(source.find(JsonRecord.class, record.getRecordid()));
|
System.out.println(source.find(JsonRecord.class, record.getRecordid()));
|
||||||
System.out.println(source.findColumn(JsonRecord.class, "rmap", record.getRecordid()));
|
System.out.println(source.findColumn(JsonRecord.class, "rmap", record.getRecordid()));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user