From 930f0781b8363bc77493a25b0a5adbcdfcd5b67e Mon Sep 17 00:00:00 2001 From: redkale Date: Sat, 18 Nov 2023 11:28:49 +0800 Subject: [PATCH] =?UTF-8?q?ColumnValue=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redkale/source/AbstractCacheSource.java | 12 -- .../redkale/source/AbstractDataSource.java | 4 +- .../org/redkale/source/CacheMemorySource.java | 10 +- .../org/redkale/source/ColumnExpNode.java | 14 +- .../org/redkale/source/ColumnExpress.java | 2 +- .../java/org/redkale/source/ColumnNodes.java | 151 +++++++++++++++--- .../java/org/redkale/source/ColumnValue.java | 75 +++++++-- .../java/org/redkale/source/EntityCache.java | 4 +- .../java/org/redkale/source/EntityInfo.java | 8 +- .../java/org/redkale/source/FilterFunc.java | 4 +- src/main/java/org/redkale/util/AnyValue.java | 6 +- src/main/java/org/redkale/util/Attribute.java | 15 +- src/main/java/org/redkale/util/ByteArray.java | 5 +- src/main/java/org/redkale/util/OneOrList.java | 8 +- .../java/org/redkale/util/ResourceEvent.java | 5 +- .../org/redkale/util/ThreadHashExecutor.java | 4 +- src/main/java/org/redkale/util/Utility.java | 28 +++- .../org/redkale/test/source/JsonRecord.java | 4 +- 18 files changed, 262 insertions(+), 97 deletions(-) diff --git a/src/main/java/org/redkale/source/AbstractCacheSource.java b/src/main/java/org/redkale/source/AbstractCacheSource.java index 2e50466c3..f410bb239 100644 --- a/src/main/java/org/redkale/source/AbstractCacheSource.java +++ b/src/main/java/org/redkale/source/AbstractCacheSource.java @@ -2,8 +2,6 @@ */ package org.redkale.source; -import java.io.File; -import java.nio.file.Files; import java.util.*; import org.redkale.annotation.AutoLoad; import org.redkale.annotation.ResourceListener; @@ -53,16 +51,6 @@ public abstract class AbstractCacheSource extends AbstractService implements Cac //@since 2.7.0 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 public abstract void onResourceChange(ResourceEvent[] events); diff --git a/src/main/java/org/redkale/source/AbstractDataSource.java b/src/main/java/org/redkale/source/AbstractDataSource.java index f58891d16..62d6e2c3e 100644 --- a/src/main/java/org/redkale/source/AbstractDataSource.java +++ b/src/main/java/org/redkale/source/AbstractDataSource.java @@ -1403,7 +1403,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data @Override public DataBatch update(Class clazz, Serializable pk, String column, Serializable value) { - return update(clazz, pk, ColumnValue.mov(column, value)); + return update(clazz, pk, ColumnValue.set(column, value)); } @Override @@ -1425,7 +1425,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data @Override public DataBatch update(Class 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 diff --git a/src/main/java/org/redkale/source/CacheMemorySource.java b/src/main/java/org/redkale/source/CacheMemorySource.java index a5d352126..78a8ce075 100644 --- a/src/main/java/org/redkale/source/CacheMemorySource.java +++ b/src/main/java/org/redkale/source/CacheMemorySource.java @@ -59,12 +59,6 @@ public final class CacheMemorySource extends AbstractCacheSource { 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 private final Map>> pubsubListeners = new ConcurrentHashMap<>(); @@ -574,7 +568,7 @@ public final class CacheMemorySource extends AbstractCacheSource { entry.cacheType = CacheEntryType.DOUBLE; } Long v = ((AtomicLong) entry.objectValue).addAndGet(Double.doubleToLongBits(num)); - return Double.longBitsToDouble(v.intValue()); + return Double.longBitsToDouble(v.longValue()); } finally { entry.unlock(); } @@ -631,7 +625,7 @@ public final class CacheMemorySource extends AbstractCacheSource { case ATOMIC: return Utility.convertValue(type, (AtomicLong) entry.objectValue); case DOUBLE: - return Utility.convertValue(type, Double.longBitsToDouble(((AtomicLong) entry.objectValue).intValue())); + return Utility.convertValue(type, Double.longBitsToDouble(((AtomicLong) entry.objectValue).longValue())); case SSET: return (T) new LinkedHashSet(entry.setValue); case ZSET: diff --git a/src/main/java/org/redkale/source/ColumnExpNode.java b/src/main/java/org/redkale/source/ColumnExpNode.java index ba581312d..d4279f8a8 100644 --- a/src/main/java/org/redkale/source/ColumnExpNode.java +++ b/src/main/java/org/redkale/source/ColumnExpNode.java @@ -14,9 +14,9 @@ import static org.redkale.source.ColumnExpress.*; * String 视为 字段名
* Number 视为 数值
* 例如: UPDATE Reord SET updateTime = createTime + 10 WHERE id = 1
- * source.updateColumn(Record.class, 1, ColumnValue.mov("updateTime", ColumnExpNode.inc("createTime", 10)));
+ * source.updateColumn(Record.class, 1, ColumnValue.set("updateTime", ColumnExpNode.inc("createTime", 10)));
* 例如: UPDATE Reord SET updateTime = createTime * 10 / createCount WHERE id = 1
- * source.updateColumn(Record.class, 1, ColumnValue.mov("updateTime", ColumnExpNode.div(ColumnExpNode.mul("createTime", 10), "createCount")));
+ * source.updateColumn(Record.class, 1, ColumnValue.set("updateTime", ColumnExpNode.div(ColumnExpNode.mul("createTime", 10), "createCount")));
* *

* 详情见: https://redkale.org @@ -30,7 +30,7 @@ public class ColumnExpNode implements ColumnNode { protected ColumnNode left;//类型只能是ColumnNameNode、ColumnNumberNode、ColumnExpNode @ConvertColumn(index = 2) - protected ColumnExpress express; //MOV时,left必须是ColumnNameNode, right必须是null + protected ColumnExpress express; //SET时,left必须是ColumnNameNode, right必须是null @ConvertColumn(index = 3) protected ColumnNode right;//类型只能是ColumnNameNode、ColumnNumberNode、ColumnExpNode @@ -44,9 +44,9 @@ public class ColumnExpNode implements ColumnNode { } ColumnNode leftNode = createColumnNode(left); ColumnNode rightNode = createColumnNode(right); - if (express == MOV) { + if (express == SET) { 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; @@ -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 * @@ -82,7 +82,7 @@ public class ColumnExpNode implements ColumnNode { */ @Deprecated(since = "2.8.0") public static ColumnExpNode mov(String left) { - return new ColumnExpNode(left, MOV, null); + return new ColumnExpNode(left, SET, null); } /** diff --git a/src/main/java/org/redkale/source/ColumnExpress.java b/src/main/java/org/redkale/source/ColumnExpress.java index dcfd6c807..1d50903ee 100644 --- a/src/main/java/org/redkale/source/ColumnExpress.java +++ b/src/main/java/org/redkale/source/ColumnExpress.java @@ -17,7 +17,7 @@ public enum ColumnExpress { /** * 赋值 col = val */ - MOV, + SET, /** * 加值 col = col + val */ diff --git a/src/main/java/org/redkale/source/ColumnNodes.java b/src/main/java/org/redkale/source/ColumnNodes.java index c48bb9696..fdf1c634a 100644 --- a/src/main/java/org/redkale/source/ColumnNodes.java +++ b/src/main/java/org/redkale/source/ColumnNodes.java @@ -3,7 +3,6 @@ */ package org.redkale.source; -import java.io.Serializable; import static org.redkale.source.ColumnExpress.*; /** @@ -33,68 +32,184 @@ public abstract class ColumnNodes { 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); } - 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); } - 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); } - 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); } - 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); } - 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); } - 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); } - 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); } - public static ColumnExpNode mov(String left) { - return new ColumnExpNode(left, MOV, null); + public static ColumnExpNode set(String column) { + 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); } - 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); } - 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); } - 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); } - 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); } - 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); } - 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); } + 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)); + } + } diff --git a/src/main/java/org/redkale/source/ColumnValue.java b/src/main/java/org/redkale/source/ColumnValue.java index 122826d96..9a9ed560f 100644 --- a/src/main/java/org/redkale/source/ColumnValue.java +++ b/src/main/java/org/redkale/source/ColumnValue.java @@ -67,7 +67,7 @@ public class ColumnValue { } /** - * 同 mov 操作 + * 同 set 操作 * * @param column 字段名 * @param value 字段值 @@ -75,7 +75,21 @@ public class ColumnValue { * @return ColumnValue */ 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 */ - public static ColumnValue mov(String column, Serializable value) { - return new ColumnValue(column, MOV, value); + public static ColumnValue set(String column, Serializable value) { + return new ColumnValue(column, SET, value); } /** @@ -172,10 +186,10 @@ public class ColumnValue { * * @return ColumnValue */ - //不常用,防止开发者容易在mov时误输入mod -// public static ColumnValue mod(String column, Serializable value) { -// return new ColumnValue(column, MOD, value); -// } + public static ColumnValue mod(String column, Serializable value) { + return new ColumnValue(column, MOD, value); + } + /** * 返回 {column} = {column} & {value} 操作 * @@ -201,7 +215,7 @@ public class ColumnValue { } /** - * 同 mov 操作 + * 同 set 操作 * * @param func 字段名Lambda * @param 值的泛型 @@ -212,7 +226,7 @@ public class ColumnValue { * @since 2.8.0 */ public static ColumnValue create(LambdaSupplier func) { - return new ColumnValue(func, MOV); + return new ColumnValue(func, SET); } /** @@ -225,8 +239,8 @@ public class ColumnValue { * * @since 2.8.0 */ - public static ColumnValue mov(LambdaSupplier func) { - return new ColumnValue(func, MOV); + public static ColumnValue set(LambdaSupplier func) { + return new ColumnValue(func, SET); } /** @@ -285,6 +299,20 @@ public class ColumnValue { return new ColumnValue(func, DIV); } + /** + * 返回 {column} = {column} % {value} 操作 + * + * @param func 字段名Lambda + * @param 值的泛型 + * + * @return ColumnValue + * + * @since 2.8.0 + */ + public static ColumnValue mod(LambdaSupplier func) { + return new ColumnValue(func, MOD); + } + /** * 返回 {column} = {column} & {value} 操作 * @@ -314,7 +342,7 @@ public class ColumnValue { } /** - * 同 mov 操作 + * 同 set 操作 * * @param func 字段名Lambda * @param value 字段值 @@ -325,7 +353,7 @@ public class ColumnValue { * @since 2.8.0 */ public static ColumnValue create(LambdaFunction 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 */ - public static ColumnValue mov(LambdaFunction func, Serializable value) { - return new ColumnValue(func, MOV, value); + public static ColumnValue set(LambdaFunction func, Serializable value) { + return new ColumnValue(func, SET, value); } /** @@ -431,6 +459,21 @@ public class ColumnValue { return new ColumnValue(func, DIV, value); } + /** + * 返回 {column} = {column} % {value} 操作 + * + * @param func 字段名Lambda + * @param value 字段值 + * @param 值的泛型 + * + * @return ColumnValue + * + * @since 2.8.0 + */ + public static ColumnValue mod(LambdaFunction func, Serializable value) { + return new ColumnValue(func, MOD, value); + } + /** * 返回 {column} = {column} & {value} 操作 * diff --git a/src/main/java/org/redkale/source/EntityCache.java b/src/main/java/org/redkale/source/EntityCache.java index 51dca39a7..00be59571 100644 --- a/src/main/java/org/redkale/source/EntityCache.java +++ b/src/main/java/org/redkale/source/EntityCache.java @@ -1015,7 +1015,7 @@ public final class EntityCache { case ORR: numb = getNumberValue((Number) attr.get(entity), express, val instanceof ColumnNumberNode ? ((ColumnNumberNode) val).getValue() : (Number) val); break; - case MOV: + case SET: if (val instanceof ColumnExpNode) { val = updateColumnExpNode(attr, entity, (ColumnExpNode) val); } @@ -1073,7 +1073,7 @@ public final class EntityCache { } else if (leftNode instanceof ColumnExpNode) { leftVal = updateColumnExpNode(attr, entity, (ColumnExpNode) leftNode); } - if (node.getExpress() == ColumnExpress.MOV) { + if (node.getExpress() == ColumnExpress.SET) { return leftVal; } diff --git a/src/main/java/org/redkale/source/EntityInfo.java b/src/main/java/org/redkale/source/EntityInfo.java index b559f1e14..5f1e59cf8 100644 --- a/src/main/java/org/redkale/source/EntityInfo.java +++ b/src/main/java/org/redkale/source/EntityInfo.java @@ -1513,7 +1513,7 @@ public final class EntityInfo { } //ColumnExpNode、ColumnFuncNode、ColumnNameNode、ColumnNumberNode、ColumnStringNode ColumnNode node = cv.getValue(); - //ColumnExpNode时 cv.getExpress() == ColumnExpress.MOV 只用于updateColumn + //ColumnExpNode时 cv.getExpress() == ColumnExpress.SET 只用于updateColumn if (node instanceof ColumnExpNode) { return formatColumnExpNodeSQLValue(attr, null, (ColumnExpNode) node, formatter); } @@ -1543,7 +1543,7 @@ public final class EntityInfo { return new StringBuilder().append(sqlColumn).append(" & ").append(val); case ORR: return new StringBuilder().append(sqlColumn).append(" | ").append(val); - case MOV: + case SET: return val == null && isNotNullJson(attr) ? "" : val; default: return val; @@ -1572,7 +1572,7 @@ public final class EntityInfo { } else if (leftNode instanceof ColumnFuncNode) { leftVal = "(" + formatColumnFuncNodeSQLValue(attr, tabalis, (ColumnFuncNode) leftNode, formatter) + ")"; } - if (node.getExpress() == ColumnExpress.MOV) { + if (node.getExpress() == ColumnExpress.SET) { return leftVal; } CharSequence rightVal = null; @@ -1604,7 +1604,7 @@ public final class EntityInfo { case ORR: 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 attr, String tabalis, final ColumnNameNode node, BiFunction formatter) { diff --git a/src/main/java/org/redkale/source/FilterFunc.java b/src/main/java/org/redkale/source/FilterFunc.java index 756906cee..cebaa1f56 100644 --- a/src/main/java/org/redkale/source/FilterFunc.java +++ b/src/main/java/org/redkale/source/FilterFunc.java @@ -22,7 +22,9 @@ public enum FilterFunc { SUM; //求和 public String getColumn(String col) { - if (this == DISTINCTCOUNT) return "COUNT(DISTINCT " + col + ")"; + if (this == DISTINCTCOUNT) { + return "COUNT(DISTINCT " + col + ")"; + } return this.name() + "(" + col + ")"; } } diff --git a/src/main/java/org/redkale/util/AnyValue.java b/src/main/java/org/redkale/util/AnyValue.java index a83946ca0..596d29edf 100644 --- a/src/main/java/org/redkale/util/AnyValue.java +++ b/src/main/java/org/redkale/util/AnyValue.java @@ -12,6 +12,7 @@ import java.util.function.*; import org.redkale.annotation.ConstructorParameters; import org.redkale.convert.ConvertColumn; import org.redkale.convert.ConvertDisabled; +import static org.redkale.util.Utility.isEmpty; /** * 该类提供类似JSONObject的数据结构,主要用于读取xml配置文件和http-header存储 @@ -1631,8 +1632,7 @@ public abstract class AnyValue { * @return 字段值 */ public String getOrDefault(String name, String defaultValue) { - String value = getValue(name); - return value == null ? defaultValue : value; + return getValue(name, defaultValue); } @Override @@ -1648,7 +1648,7 @@ public abstract class AnyValue { } private static boolean equals(Entry[] entry1, Entry[] entry2) { - if ((entry1 == null || entry1.length == 0) && (entry2 == null || entry2.length == 0)) { + if (isEmpty(entry1) && isEmpty(entry2)) { return true; } if (entry1.length != entry2.length) { diff --git a/src/main/java/org/redkale/util/Attribute.java b/src/main/java/org/redkale/util/Attribute.java index 81562e213..2dfbc619a 100644 --- a/src/main/java/org/redkale/util/Attribute.java +++ b/src/main/java/org/redkale/util/Attribute.java @@ -429,12 +429,13 @@ public interface Attribute { * 根据Class生成getter、setter方法都存在的字段对应的 Attribute 对象数组。 * * @param 依附类的类型 + * @param 字段的类型 * @param clazz 指定依附的类 * * @return Attribute对象数组 */ - public static Attribute[] create(Class clazz) { - List> list = new ArrayList<>(); + public static Attribute[] create(Class clazz) { + List> list = new ArrayList<>(); RedkaleClassLoader.putReflectionPublicFields(clazz.getName()); for (java.lang.reflect.Field field : clazz.getFields()) { if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) { @@ -476,12 +477,13 @@ public interface Attribute { * 根据Class生成getter方法对应的 Attribute 对象数组。 * * @param 依附类的类型 + * @param 字段的类型 * @param clazz 指定依附的类 * * @return Attribute对象数组 */ - public static Attribute[] createGetters(Class clazz) { - List> list = new ArrayList<>(); + public static Attribute[] createGetters(Class clazz) { + List> list = new ArrayList<>(); RedkaleClassLoader.putReflectionPublicFields(clazz.getName()); for (java.lang.reflect.Field field : clazz.getFields()) { if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) { @@ -519,12 +521,13 @@ public interface Attribute { * 根据Class生成setter方法对应的 Attribute 对象数组。 * * @param 依附类的类型 + * @param 字段的类型 * @param clazz 指定依附的类 * * @return Attribute对象数组 */ - public static Attribute[] createSetters(Class clazz) { - List> list = new ArrayList<>(); + public static Attribute[] createSetters(Class clazz) { + List> list = new ArrayList<>(); RedkaleClassLoader.putReflectionPublicFields(clazz.getName()); for (java.lang.reflect.Field field : clazz.getFields()) { if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) { diff --git a/src/main/java/org/redkale/util/ByteArray.java b/src/main/java/org/redkale/util/ByteArray.java index 61eb65fce..acd88b9ca 100644 --- a/src/main/java/org/redkale/util/ByteArray.java +++ b/src/main/java/org/redkale/util/ByteArray.java @@ -756,10 +756,7 @@ public final class ByteArray implements ByteTuple { * @return ByteArray */ public ByteArray putUnsignedMedium(int offset, int value) { - content[offset] = (byte) (value >> 16 & 0xFF); - content[offset + 1] = (byte) (value >> 8 & 0xFF); - content[offset + 2] = (byte) (value & 0xFF); - return this; + return putMedium(offset, value); } /** diff --git a/src/main/java/org/redkale/util/OneOrList.java b/src/main/java/org/redkale/util/OneOrList.java index 2c7dd40a5..df75b1d58 100644 --- a/src/main/java/org/redkale/util/OneOrList.java +++ b/src/main/java/org/redkale/util/OneOrList.java @@ -101,14 +101,14 @@ public class OneOrList implements java.io.Serializable { @Override public OneOrList convertFrom(JsonReader in) { if (in.isNextArray()) { - List list = (List) listDecoder.convertFrom(in); + List val = (List) listDecoder.convertFrom(in); OneOrList rs = creator.create(); - rs.setList(list); + rs.setList(val); return rs; } else { - Object one = oneDecoder.convertFrom(in); + Object val = oneDecoder.convertFrom(in); OneOrList rs = creator.create(); - rs.setOne(one); + rs.setOne(val); return rs; } } diff --git a/src/main/java/org/redkale/util/ResourceEvent.java b/src/main/java/org/redkale/util/ResourceEvent.java index 6694966e3..4c1589b42 100644 --- a/src/main/java/org/redkale/util/ResourceEvent.java +++ b/src/main/java/org/redkale/util/ResourceEvent.java @@ -2,11 +2,10 @@ */ package org.redkale.util; -import org.redkale.annotation.ConstructorParameters; - import java.util.*; import java.util.function.Predicate; import java.util.regex.Pattern; +import org.redkale.annotation.ConstructorParameters; /** * 详情见: https://redkale.org @@ -71,7 +70,7 @@ public interface ResourceEvent { public static class ResourceChangeEvent implements ResourceEvent { - private static final Predicate numRegx = Pattern.compile("^(\\-|\\+)?\\d+(\\.\\d+)?$").asPredicate(); + private static final Predicate numRegx = Pattern.compile("^(\\-\\+)?\\d+(\\.\\d+)?$").asPredicate(); protected String name; diff --git a/src/main/java/org/redkale/util/ThreadHashExecutor.java b/src/main/java/org/redkale/util/ThreadHashExecutor.java index 67b1a4e69..d5719a0bc 100644 --- a/src/main/java/org/redkale/util/ThreadHashExecutor.java +++ b/src/main/java/org/redkale/util/ThreadHashExecutor.java @@ -96,11 +96,11 @@ public class ThreadHashExecutor extends AbstractExecutorService { } @Override - public Future submit(Runnable task) { + public Future submit(Runnable 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); } diff --git a/src/main/java/org/redkale/util/Utility.java b/src/main/java/org/redkale/util/Utility.java index 2118c674b..27e81e7a6 100644 --- a/src/main/java/org/redkale/util/Utility.java +++ b/src/main/java/org/redkale/util/Utility.java @@ -119,7 +119,7 @@ public final class Utility { private static final ReentrantLock clientLock = new ReentrantLock(); //是否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; @@ -140,7 +140,7 @@ public final class Utility { Function virtualPoolFunction0 = null; Executor virtualExecutorConsumer0 = null; - if (!nativeImageEnv) { //not native-image + if (!NATIVE_IMAGE_ENV) { //not native-image try { final ClassLoader loader = Thread.currentThread().getContextClassLoader(); { //virtualThreadLocalFunction @@ -951,6 +951,30 @@ public final class Utility { return collection != null && !collection.isEmpty(); } + /** + * 是否为空 + * + * @param array 数组 + * + * @return 是否为空 + * + */ + public static boolean isEmpty(T[] array) { + return array == null || array.length == 0; + } + + /** + * 是否不为空 + * + * @param array 数组 + * + * @return 是否不为空 + * + */ + public static boolean isNotEmpty(T[] array) { + return array != null && array.length > 0; + } + /** * 将字符串首字母大写 * diff --git a/src/test/java/org/redkale/test/source/JsonRecord.java b/src/test/java/org/redkale/test/source/JsonRecord.java index 4f793a087..87e61404a 100644 --- a/src/test/java/org/redkale/test/source/JsonRecord.java +++ b/src/test/java/org/redkale/test/source/JsonRecord.java @@ -72,9 +72,9 @@ public class JsonRecord { source.init(conf); JsonRecord record = JsonRecord.create(); 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); - 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.findColumn(JsonRecord.class, "rmap", record.getRecordid())); }