This commit is contained in:
kamhung
2015-12-03 16:42:11 +08:00
parent 56418b5fe3
commit c698109e3b
3 changed files with 15 additions and 10 deletions

View File

@@ -1086,7 +1086,7 @@ public final class DataDefaultSource implements DataSource, Nameable, Function<C
if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass()); if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass());
final EntityCache<T> cache = info.getCache(); final EntityCache<T> cache = info.getCache();
if (cache != null && (info.isVirtualEntity() || cache.isFullLoaded())) { if (cache != null && (info.isVirtualEntity() || cache.isFullLoaded())) {
if (node == null || node.isCacheUseable()) { if (node == null || node.isCacheUseable(this)) {
return cache.getNumberResult(reckon, column, node, bean); return cache.getNumberResult(reckon, column, node, bean);
} }
} }
@@ -1134,7 +1134,7 @@ public final class DataDefaultSource implements DataSource, Nameable, Function<C
if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass()); if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass());
final EntityCache cache = info.getCache(); final EntityCache cache = info.getCache();
if (cache != null && (info.isVirtualEntity() || cache.isFullLoaded())) { if (cache != null && (info.isVirtualEntity() || cache.isFullLoaded())) {
if (node == null || node.isCacheUseable()) { if (node == null || node.isCacheUseable(this)) {
return cache.getMapResult(keyColumn, reckon, reckonColumn, node, bean); return cache.getMapResult(keyColumn, reckon, reckonColumn, node, bean);
} }
} }
@@ -1219,7 +1219,7 @@ public final class DataDefaultSource implements DataSource, Nameable, Function<C
final EntityInfo<T> info = loadEntityInfo(clazz); final EntityInfo<T> info = loadEntityInfo(clazz);
final EntityCache<T> cache = info.getCache(); final EntityCache<T> cache = info.getCache();
if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass()); if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass());
if (cache != null && cache.isFullLoaded() && (node == null || node.isCacheUseable())) return cache.find(selects, node, bean); if (cache != null && cache.isFullLoaded() && (node == null || node.isCacheUseable(this))) return cache.find(selects, node, bean);
final Connection conn = createReadSQLConnection(); final Connection conn = createReadSQLConnection();
try { try {
@@ -1278,7 +1278,7 @@ public final class DataDefaultSource implements DataSource, Nameable, Function<C
final EntityInfo<T> info = loadEntityInfo(clazz); final EntityInfo<T> info = loadEntityInfo(clazz);
final EntityCache<T> cache = info.getCache(); final EntityCache<T> cache = info.getCache();
if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass()); if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass());
if (cache != null && cache.isFullLoaded() && (node == null || node.isCacheUseable())) return cache.exists(node, bean); if (cache != null && cache.isFullLoaded() && (node == null || node.isCacheUseable(this))) return cache.exists(node, bean);
final Connection conn = createReadSQLConnection(); final Connection conn = createReadSQLConnection();
try { try {
@@ -1526,7 +1526,7 @@ public final class DataDefaultSource implements DataSource, Nameable, Function<C
final EntityCache<T> cache = info.getCache(); final EntityCache<T> cache = info.getCache();
if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass()); if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass());
if (readcache && cache != null) { if (readcache && cache != null) {
if (node == null || node.isCacheUseable()) { if (node == null || node.isCacheUseable(this)) {
if (debug.get() && info.isLoggable(Level.FINEST)) logger.finest(clazz.getSimpleName() + " cache query predicate = " + (node == null ? null : node.createPredicate(cache, bean))); if (debug.get() && info.isLoggable(Level.FINEST)) logger.finest(clazz.getSimpleName() + " cache query predicate = " + (node == null ? null : node.createPredicate(cache, bean)));
Sheet<T> sheet = cache.querySheet(needtotal, selects, flipper, node, bean); Sheet<T> sheet = cache.querySheet(needtotal, selects, flipper, node, bean);
if (!sheet.isEmpty() || info.isVirtualEntity() || cache.isFullLoaded()) return sheet; if (!sheet.isEmpty() || info.isVirtualEntity() || cache.isFullLoaded()) return sheet;

View File

@@ -372,7 +372,7 @@ final class FilterBeanNode extends FilterNode {
} }
@Override @Override
protected boolean isCacheUseable() { protected boolean isCacheUseable(final Function<Class, EntityInfo> entityApplyer) {
return joinallcached; return joinallcached;
} }

View File

@@ -149,9 +149,14 @@ public class FilterNode {
/** /**
* 该方法需要重载 * 该方法需要重载
* *
* @param entityApplyer
* @return * @return
*/ */
protected boolean isCacheUseable() { protected boolean isCacheUseable(final Function<Class, EntityInfo> entityApplyer) {
if (this.nodes == null) return true;
for (FilterNode node : this.nodes) {
if (!node.isCacheUseable(entityApplyer)) return false;
}
return true; return true;
} }
@@ -165,7 +170,7 @@ public class FilterNode {
* @return * @return
*/ */
protected <T> CharSequence createSQLExpress(final Function<Class, EntityInfo> func, final EntityInfo<T> info, final FilterBean bean) { protected <T> CharSequence createSQLExpress(final Function<Class, EntityInfo> func, final EntityInfo<T> info, final FilterBean bean) {
CharSequence sb0 = createElementSQLExpress(info, bean); CharSequence sb0 = createElementSQLExpress(info, getTabalis(), bean);
if (this.nodes == null) return sb0; if (this.nodes == null) return sb0;
final StringBuilder rs = new StringBuilder(); final StringBuilder rs = new StringBuilder();
rs.append('('); rs.append('(');
@@ -194,9 +199,9 @@ public class FilterNode {
return new FilterNode(column, express, value); return new FilterNode(column, express, value);
} }
protected final <T> CharSequence createElementSQLExpress(final EntityInfo<T> info, final FilterBean bean) { protected final <T> CharSequence createElementSQLExpress(final EntityInfo<T> info, String talis, final FilterBean bean) {
if (column == null) return null; if (column == null) return null;
final String talis = getTabalis() == null ? "a" : getTabalis(); if (talis == null) talis = "a";
if (express == ISNULL || express == ISNOTNULL) { if (express == ISNULL || express == ISNOTNULL) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(info.getSQLColumn(talis, column)).append(' ').append(express.value()); sb.append(info.getSQLColumn(talis, column)).append(' ').append(express.value());