Fix for CLOUD-2249 'SELECT * FROM cmis:folder' query returns object with 'null' parameter

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@59557 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Andrew Hind
2014-01-08 15:25:54 +00:00
parent 12e0a9327e
commit 5d830f1a9f
3 changed files with 15 additions and 5 deletions

View File

@@ -2783,6 +2783,13 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen
for (CMISResultSetRow row : rs) for (CMISResultSetRow row : rs)
{ {
NodeRef nodeRef = row.getNodeRef();
if(!nodeService.exists(nodeRef) || filter(nodeRef))
{
continue;
}
ObjectDataImpl hit = new ObjectDataImpl(); ObjectDataImpl hit = new ObjectDataImpl();
PropertiesImpl properties = new PropertiesImpl(); PropertiesImpl properties = new PropertiesImpl();
hit.setProperties(properties); hit.setProperties(properties);
@@ -2799,7 +2806,6 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen
if (fetchObject) if (fetchObject)
{ {
NodeRef nodeRef = row.getNodeRef();
TypeDefinitionWrapper type = getType(nodeRef); TypeDefinitionWrapper type = getType(nodeRef);
if (type == null) if (type == null)
{ {

View File

@@ -178,7 +178,7 @@ public class DBQueryEngine implements QueryEngine
set.add(node.getId()); set.add(node.getId());
} }
List<Long> nodeIds = new ArrayList<Long>(set); List<Long> nodeIds = new ArrayList<Long>(set);
ResultSet rs = new DBResultSet(options.getAsSearchParmeters(), nodeIds, nodeDAO, nodeService, Integer.MAX_VALUE); ResultSet rs = new DBResultSet(options.getAsSearchParmeters(), nodeIds, nodeDAO, nodeService, tenantService, Integer.MAX_VALUE);
ResultSet paged = new PagingLuceneResultSet(rs, options.getAsSearchParmeters(), nodeService); ResultSet paged = new PagingLuceneResultSet(rs, options.getAsSearchParmeters(), nodeService);
answer.put(key, paged); answer.put(key, paged);

View File

@@ -26,6 +26,7 @@ import java.util.List;
import org.alfresco.repo.domain.node.NodeDAO; import org.alfresco.repo.domain.node.NodeDAO;
import org.alfresco.repo.search.AbstractResultSet; import org.alfresco.repo.search.AbstractResultSet;
import org.alfresco.repo.search.SimpleResultSetMetaData; import org.alfresco.repo.search.SimpleResultSetMetaData;
import org.alfresco.repo.tenant.TenantService;
import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
@@ -49,15 +50,18 @@ public class DBResultSet extends AbstractResultSet
private NodeService nodeService; private NodeService nodeService;
private TenantService tenantService;
private SimpleResultSetMetaData resultSetMetaData; private SimpleResultSetMetaData resultSetMetaData;
private BitSet prefetch; private BitSet prefetch;
public DBResultSet(SearchParameters searchParameters, List<Long> dbids, NodeDAO nodeDao, NodeService nodeService, int maximumResultsFromUnlimitedQuery) public DBResultSet(SearchParameters searchParameters, List<Long> dbids, NodeDAO nodeDao, NodeService nodeService, TenantService tenantService, int maximumResultsFromUnlimitedQuery)
{ {
this.nodeDao = nodeDao; this.nodeDao = nodeDao;
this.dbids = dbids; this.dbids = dbids;
this.nodeService = nodeService; this.nodeService = nodeService;
this.tenantService = tenantService;
this.prefetch = new BitSet(dbids.size()); this.prefetch = new BitSet(dbids.size());
nodeRefs= new NodeRef[(dbids.size())]; nodeRefs= new NodeRef[(dbids.size())];
@@ -190,7 +194,7 @@ public class DBResultSet extends AbstractResultSet
int bulkFetchSize = getBulkFetchSize(); int bulkFetchSize = getBulkFetchSize();
if(bulkFetchSize < 1) if(bulkFetchSize < 1)
{ {
nodeRefs[n] = nodeDao.getNodePair(dbids.get(n)).getSecond(); nodeRefs[n] = tenantService.getBaseName(nodeDao.getNodePair(dbids.get(n)).getSecond());
return; return;
} }
@@ -223,7 +227,7 @@ public class DBResultSet extends AbstractResultSet
nodeDao.cacheNodesById(fetchList); nodeDao.cacheNodesById(fetchList);
for (int i = done.nextSetBit(0); i >= 0; i = done.nextSetBit(i+1)) for (int i = done.nextSetBit(0); i >= 0; i = done.nextSetBit(i+1))
{ {
nodeRefs[n+i] = nodeDao.getNodePair(fetchList.get(i)).getSecond(); nodeRefs[n+i] = tenantService.getBaseName(nodeDao.getNodePair(fetchList.get(i)).getSecond());
} }
} }
} }