From fc2dfa1a8a5c91cf3ea8eae8025ee6712c0566ec Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Sat, 8 Oct 2016 12:30:45 +0800 Subject: [PATCH] --- .../redkale/service/DataSourceService.java | 15 ++++++ src/org/redkale/source/DataDefaultSource.java | 23 +++++++-- src/org/redkale/source/DataSource.java | 6 +++ src/org/redkale/source/EntityCache.java | 49 ++++++++++++------- 4 files changed, 72 insertions(+), 21 deletions(-) diff --git a/src/org/redkale/service/DataSourceService.java b/src/org/redkale/service/DataSourceService.java index b63d6da6d..6e47e1e7a 100644 --- a/src/org/redkale/service/DataSourceService.java +++ b/src/org/redkale/service/DataSourceService.java @@ -103,6 +103,21 @@ public class DataSourceService implements DataSource, Service, AutoCloseable { return source.getNumberResult(entityClass, func, column, node); } + @Override + public Number getNumberResult(final Class entityClass, FilterFunc func, final Number defVal, final String column) { + return source.getNumberResult(entityClass, func, defVal, column); + } + + @Override + public final Number getNumberResult(final Class entityClass, FilterFunc func, final Number defVal, final String column, FilterBean bean) { + return getNumberResult(entityClass, func, defVal, column, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public Number getNumberResult(final Class entityClass, FilterFunc func, final Number defVal, final String column, FilterNode node) { + return source.getNumberResult(entityClass, func, defVal, column, node); + } + @Override public Map queryColumnMap(final Class entityClass, final String keyColumn, FilterFunc func, final String funcColumn) { return source.queryColumnMap(entityClass, keyColumn, func, funcColumn); diff --git a/src/org/redkale/source/DataDefaultSource.java b/src/org/redkale/source/DataDefaultSource.java index e505e3d02..2ac84af59 100644 --- a/src/org/redkale/source/DataDefaultSource.java +++ b/src/org/redkale/source/DataDefaultSource.java @@ -1035,23 +1035,38 @@ public final class DataDefaultSource implements DataSource, Function joinTabalis = node == null ? null : node.getJoinTabalis(); @@ -1061,7 +1076,7 @@ public final class DataDefaultSource implements DataSource, Function { case MAX: if (attr.type() == int.class || attr.type() == Integer.class) { - return stream.mapToInt(x -> (Integer) attr.get(x)).max().orElse(0); + OptionalInt rs = stream.mapToInt(x -> (Integer) attr.get(x)).max(); + return rs.isPresent() ? rs.getAsInt() : defResult; } else if (attr.type() == long.class || attr.type() == Long.class) { - return stream.mapToLong(x -> (Long) attr.get(x)).max().orElse(0); + OptionalLong rs = stream.mapToLong(x -> (Long) attr.get(x)).max(); + return rs.isPresent() ? rs.getAsLong() : defResult; } else if (attr.type() == short.class || attr.type() == Short.class) { - return (short) stream.mapToInt(x -> ((Short) attr.get(x)).intValue()).max().orElse(0); + OptionalInt rs = stream.mapToInt(x -> ((Short) attr.get(x)).intValue()).max(); + return rs.isPresent() ? (short) rs.getAsInt() : defResult; } else if (attr.type() == float.class || attr.type() == Float.class) { - return (float) stream.mapToDouble(x -> ((Float) attr.get(x)).doubleValue()).max().orElse(0); + OptionalDouble rs = stream.mapToDouble(x -> ((Float) attr.get(x)).doubleValue()).max(); + return rs.isPresent() ? (float) rs.getAsDouble() : defResult; } else if (attr.type() == double.class || attr.type() == Double.class) { - return stream.mapToDouble(x -> (Double) attr.get(x)).max().orElse(0); + OptionalDouble rs = stream.mapToDouble(x -> (Double) attr.get(x)).max(); + return rs.isPresent() ? rs.getAsDouble() : defResult; } throw new RuntimeException("getNumberResult error(type:" + type + ", attr.declaringClass: " + attr.declaringClass() + ", attr.field: " + attr.field() + ", attr.type: " + attr.type()); case MIN: if (attr.type() == int.class || attr.type() == Integer.class) { - return stream.mapToInt(x -> (Integer) attr.get(x)).min().orElse(0); + OptionalInt rs = stream.mapToInt(x -> (Integer) attr.get(x)).min(); + return rs.isPresent() ? rs.getAsInt() : defResult; } else if (attr.type() == long.class || attr.type() == Long.class) { - return stream.mapToLong(x -> (Long) attr.get(x)).min().orElse(0); + OptionalLong rs = stream.mapToLong(x -> (Long) attr.get(x)).min(); + return rs.isPresent() ? rs.getAsLong() : defResult; } else if (attr.type() == short.class || attr.type() == Short.class) { - return (short) stream.mapToInt(x -> ((Short) attr.get(x)).intValue()).min().orElse(0); + OptionalInt rs = stream.mapToInt(x -> ((Short) attr.get(x)).intValue()).min(); + return rs.isPresent() ? (short) rs.getAsInt() : defResult; } else if (attr.type() == float.class || attr.type() == Float.class) { - return (float) stream.mapToDouble(x -> ((Float) attr.get(x)).doubleValue()).min().orElse(0); + OptionalDouble rs = stream.mapToDouble(x -> ((Float) attr.get(x)).doubleValue()).min(); + return rs.isPresent() ? (float) rs.getAsDouble() : defResult; } else if (attr.type() == double.class || attr.type() == Double.class) { - return stream.mapToDouble(x -> (Double) attr.get(x)).min().orElse(0); + OptionalDouble rs = stream.mapToDouble(x -> (Double) attr.get(x)).min(); + return rs.isPresent() ? rs.getAsDouble() : defResult; } throw new RuntimeException("getNumberResult error(type:" + type + ", attr.declaringClass: " + attr.declaringClass() + ", attr.field: " + attr.field() + ", attr.type: " + attr.type()); @@ -286,7 +301,7 @@ public final class EntityCache { } throw new RuntimeException("getNumberResult error(type:" + type + ", attr.declaringClass: " + attr.declaringClass() + ", attr.field: " + attr.field() + ", attr.type: " + attr.type()); } - return -1; + return defResult; } public Sheet querySheet(final SelectColumn selects, final Flipper flipper, final FilterNode node) {