diff --git a/config/alfresco/ibatis/alfresco-SqlMapConfig.xml b/config/alfresco/ibatis/alfresco-SqlMapConfig.xml
index 89c598ad66..f7d2b71ca8 100644
--- a/config/alfresco/ibatis/alfresco-SqlMapConfig.xml
+++ b/config/alfresco/ibatis/alfresco-SqlMapConfig.xml
@@ -224,6 +224,7 @@ Inbound settings from iBatis
+
diff --git a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/metadata-query-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/metadata-query-SqlMap.xml
new file mode 100644
index 0000000000..afeb36cf4a
--- /dev/null
+++ b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/metadata-query-SqlMap.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/metadata-query-common-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/metadata-query-common-SqlMap.xml
index 0837e3cd8c..40535dec31 100644
--- a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/metadata-query-common-SqlMap.xml
+++ b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/metadata-query-common-SqlMap.xml
@@ -4,15 +4,11 @@
-
+
\ No newline at end of file
diff --git a/config/alfresco/ibatis/org.hibernate.dialect.MySQLInnoDBDialect/metadata-query-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.MySQLInnoDBDialect/metadata-query-SqlMap.xml
new file mode 100644
index 0000000000..511adb58ef
--- /dev/null
+++ b/config/alfresco/ibatis/org.hibernate.dialect.MySQLInnoDBDialect/metadata-query-SqlMap.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/source/java/org/alfresco/repo/search/AbstractResultSet.java b/source/java/org/alfresco/repo/search/AbstractResultSet.java
index 764f1799d6..ea8ba380ec 100644
--- a/source/java/org/alfresco/repo/search/AbstractResultSet.java
+++ b/source/java/org/alfresco/repo/search/AbstractResultSet.java
@@ -27,7 +27,6 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.ResultSetRow;
import org.alfresco.util.Pair;
-import org.apache.lucene.search.HitCollector;
/**
* Common result set implementation.
diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/db/DBQueryEngine.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/db/DBQueryEngine.java
index b1acc15037..d906eb14b2 100644
--- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/db/DBQueryEngine.java
+++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/db/DBQueryEngine.java
@@ -160,13 +160,13 @@ public class DBQueryEngine implements QueryEngine
}
dbQuery.prepare(namespaceService, dictionaryService, qnameDAO, nodeDAO, selectorGroup, null, functionContext);
List nodes = (List)template.selectList(SELECT_BY_DYNAMIC_QUERY, dbQuery);
- LinkedHashSet set = new LinkedHashSet(nodes.size());
+ LinkedHashSet set = new LinkedHashSet(nodes.size());
for(Node node : nodes)
{
- set.add(node.getNodeRef());
+ set.add(node.getId());
}
- List nodeRefs = new ArrayList(set);
- ResultSet rs = new DBResultSet(options.getAsSearchParmeters(), nodeRefs, nodeDAO, nodeService, Integer.MAX_VALUE);
+ List nodeIds = new ArrayList(set);
+ ResultSet rs = new DBResultSet(options.getAsSearchParmeters(), nodeIds, nodeDAO, nodeService, Integer.MAX_VALUE);
ResultSet paged = new PagingLuceneResultSet(rs, options.getAsSearchParmeters(), nodeService);
answer.put(key, paged);
diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/db/DBResultSet.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/db/DBResultSet.java
index 2d6a8770ef..35864dde4a 100644
--- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/db/DBResultSet.java
+++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/db/DBResultSet.java
@@ -41,7 +41,9 @@ import org.alfresco.service.cmr.search.SearchParameters;
*/
public class DBResultSet extends AbstractResultSet
{
- private List nodeRefs;
+ private List dbids;
+
+ private NodeRef[] nodeRefs;
private NodeDAO nodeDao;
@@ -51,12 +53,13 @@ public class DBResultSet extends AbstractResultSet
private BitSet prefetch;
- public DBResultSet(SearchParameters searchParameters, List nodeRefs, NodeDAO nodeDao, NodeService nodeService, int maximumResultsFromUnlimitedQuery)
+ public DBResultSet(SearchParameters searchParameters, List dbids, NodeDAO nodeDao, NodeService nodeService, int maximumResultsFromUnlimitedQuery)
{
this.nodeDao = nodeDao;
- this.nodeRefs = nodeRefs;
+ this.dbids = dbids;
this.nodeService = nodeService;
- this.prefetch = new BitSet(nodeRefs.size());
+ this.prefetch = new BitSet(dbids.size());
+ nodeRefs= new NodeRef[(dbids.size())];
final LimitBy limitBy;
int maxResults = -1;
@@ -81,7 +84,7 @@ public class DBResultSet extends AbstractResultSet
}
this.resultSetMetaData = new SimpleResultSetMetaData(
- maxResults > 0 && nodeRefs.size() < maxResults ? LimitBy.UNLIMITED : limitBy,
+ maxResults > 0 && dbids.size() < maxResults ? LimitBy.UNLIMITED : limitBy,
PermissionEvaluationMode.EAGER, searchParameters);
}
@@ -91,7 +94,7 @@ public class DBResultSet extends AbstractResultSet
@Override
public int length()
{
- return nodeRefs.size();
+ return dbids.size();
}
/* (non-Javadoc)
@@ -100,7 +103,7 @@ public class DBResultSet extends AbstractResultSet
@Override
public long getNumberFound()
{
- return nodeRefs.size();
+ return dbids.size();
}
/* (non-Javadoc)
@@ -110,7 +113,7 @@ public class DBResultSet extends AbstractResultSet
public NodeRef getNodeRef(int n)
{
prefetch(n);
- return nodeRefs.get(n);
+ return nodeRefs[n];
}
/* (non-Javadoc)
@@ -185,8 +188,16 @@ public class DBResultSet extends AbstractResultSet
}
// Start at 'n' and process the the next bulk set
int bulkFetchSize = getBulkFetchSize();
- List fetchList = new ArrayList(bulkFetchSize);
- int totalHits = nodeRefs.size();
+ if(bulkFetchSize < 1)
+ {
+ nodeRefs[n] = nodeDao.getNodePair(dbids.get(n)).getSecond();
+ return;
+ }
+
+
+ List fetchList = new ArrayList(bulkFetchSize);
+ BitSet done = new BitSet(bulkFetchSize);
+ int totalHits = dbids.size();
for (int i = 0; i < bulkFetchSize; i++)
{
int next = n + i;
@@ -203,12 +214,17 @@ public class DBResultSet extends AbstractResultSet
// We store the node and mark it as prefetched
prefetch.set(next);
- fetchList.add(nodeRefs.get(next));
+ fetchList.add(dbids.get(next));
+ done.set(next);
}
// Now bulk fetch
if (fetchList.size() > 1)
{
- nodeDao.cacheNodes(fetchList);
+ nodeDao.cacheNodesById(fetchList);
+ for (int i = done.nextSetBit(0); i >= 0; i = done.nextSetBit(i+1))
+ {
+ nodeRefs[n+i] = nodeDao.getNodePair(fetchList.get(i)).getSecond();
+ }
}
}