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());
final EntityCache<T> cache = info.getCache();
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);
}
}
@@ -1134,7 +1134,7 @@ public final class DataDefaultSource implements DataSource, Nameable, Function<C
if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass());
final EntityCache cache = info.getCache();
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);
}
}
@@ -1219,7 +1219,7 @@ public final class DataDefaultSource implements DataSource, Nameable, Function<C
final EntityInfo<T> info = loadEntityInfo(clazz);
final EntityCache<T> cache = info.getCache();
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();
try {
@@ -1278,7 +1278,7 @@ public final class DataDefaultSource implements DataSource, Nameable, Function<C
final EntityInfo<T> info = loadEntityInfo(clazz);
final EntityCache<T> cache = info.getCache();
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();
try {
@@ -1526,7 +1526,7 @@ public final class DataDefaultSource implements DataSource, Nameable, Function<C
final EntityCache<T> cache = info.getCache();
if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass());
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)));
Sheet<T> sheet = cache.querySheet(needtotal, selects, flipper, node, bean);
if (!sheet.isEmpty() || info.isVirtualEntity() || cache.isFullLoaded()) return sheet;

View File

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

View File

@@ -149,9 +149,14 @@ public class FilterNode {
/**
* 该方法需要重载
*
* @param entityApplyer
* @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;
}
@@ -165,7 +170,7 @@ public class FilterNode {
* @return
*/
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;
final StringBuilder rs = new StringBuilder();
rs.append('(');
@@ -194,9 +199,9 @@ public class FilterNode {
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;
final String talis = getTabalis() == null ? "a" : getTabalis();
if (talis == null) talis = "a";
if (express == ISNULL || express == ISNOTNULL) {
StringBuilder sb = new StringBuilder();
sb.append(info.getSQLColumn(talis, column)).append(' ').append(express.value());