diff --git a/search-services/alfresco-search/pom.xml b/search-services/alfresco-search/pom.xml index 87f8bb07c..6ab8c1bcf 100644 --- a/search-services/alfresco-search/pom.xml +++ b/search-services/alfresco-search/pom.xml @@ -18,7 +18,7 @@ org.alfresco alfresco-solrclient - ${alfresco-solr.version} + ${alfresco-solrclient.version} servlet-api diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/AlfrescoSolrDataModel.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/AlfrescoSolrDataModel.java index dc782e79a..8d777c5a3 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/AlfrescoSolrDataModel.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/AlfrescoSolrDataModel.java @@ -1386,7 +1386,7 @@ public class AlfrescoSolrDataModel implements QueryConstants } // parse cmis syntax - CapabilityJoin joinSupport = (mode == CMISQueryMode.CMS_STRICT) ? CapabilityJoin.NONE : CapabilityJoin.INNERONLY; + CapabilityJoin joinSupport = (mode == CMISQueryMode.CMS_STRICT) ? CapabilityJoin.NONE : CapabilityJoin.INNERANDOUTER; CmisFunctionEvaluationContext functionContext = getCMISFunctionEvaluationContext(mode, cmisVersion, alternativeDictionary); CMISDictionaryService cmisDictionary = getCMISDictionary(alternativeDictionary, cmisVersion); @@ -1401,10 +1401,6 @@ public class AlfrescoSolrDataModel implements QueryConstants { throw new UnsupportedOperationException("No selectors"); } - if (selectorGroups.size() > 1) - { - throw new UnsupportedOperationException("Advanced join is not supported"); - } } return queryModelQuery; } diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/CMISDataCreatorTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/CMISDataCreatorTest.java index 97af9c241..edd3e709e 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/CMISDataCreatorTest.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/CMISDataCreatorTest.java @@ -414,6 +414,12 @@ public class CMISDataCreatorTest extends TestCase result = session.query("select * from cmis:document where cmis:name = '"+document1.getName()+"' AND cmis:contentStreamLength = 5 AND cmis:contentStreamMimeType = 'text/plain'", false); assertEquals(1, result.getTotalNumItems()); + + result = session.query("SELECT * FROM cmis:document", false); + long docCount = result.getTotalNumItems(); + + result = session.query("SELECT * FROM cmis:document d left outer join exif:exif t on d.cmis:objectId = t.cmis:objectId", false); + assertEquals(docCount, result.getTotalNumItems()); } private Document createUniqueDocument(Folder newFolder) diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/query/cmis/AlfrescoCMISQParserPluginTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/query/cmis/AlfrescoCMISQParserPluginTest.java index 81981807c..b98fe72b0 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/query/cmis/AlfrescoCMISQParserPluginTest.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/query/cmis/AlfrescoCMISQParserPluginTest.java @@ -690,19 +690,37 @@ public class AlfrescoCMISQParserPluginTest extends LoadCMISData implements Query assertQ(qurySolr("SELECT D.*, O.* FROM cmis:document AS D JOIN cm:ownable AS O ON D.cmis:objectId = O.cmis:objectId"), expectedDocCount(1)); + + assertQ(qurySolr("SELECT D.*, O.* FROM cmis:document AS D LEFT OUTER JOIN cm:ownable AS O ON D.cmis:objectId = O.cmis:objectId"), + expectedDocCount(11)); + + assertQ(qurySolr("SELECT D.*, O.* FROM cmis:folder AS D LEFT OUTER JOIN cm:ownable AS O ON D.cmis:objectId = O.cmis:objectId"), + expectedDocCount(11)); + + assertQ(qurySolr("SELECT D.*, O.* FROM cmis:folder AS D JOIN cm:ownable AS O ON D.cmis:objectId = O.cmis:objectId"), + expectedDocCount(0)); assertQ(qurySolr("SELECT D.*, O.*, T.* FROM cmis:document AS D JOIN cm:ownable AS O ON D.cmis:objectId = O.cmis:objectId JOIN cm:titled AS T ON T.cmis:objectId = D.cmis:objectId"), expectedDocCount(1)); assertQ(qurySolr("SELECT D.*, O.* FROM cm:ownable O JOIN cmis:document D ON D.cmis:objectId = O.cmis:objectId"), expectedDocCount(1)); + + assertQ(qurySolr("SELECT D.*, O.* FROM cm:ownable O LEFT JOIN cmis:document D ON D.cmis:objectId = O.cmis:objectId"), + expectedDocCount(1)); assertQ(qurySolr("SELECT D.*, F.* FROM cmis:folder F JOIN cmis:document D ON D.cmis:objectId = F.cmis:objectId"), expectedDocCount(0)); + + assertQ(qurySolr("SELECT D.*, F.* FROM cmis:folder F LEFT JOIN cmis:document D ON D.cmis:objectId = F.cmis:objectId"), + expectedDocCount(11)); assertQ(qurySolr("SELECT O.*, T.* FROM cm:ownable O JOIN cm:titled T ON O.cmis:objectId = T.cmis:objectId"), expectedDocCount(1)); + assertQ(qurySolr("SELECT O.*, T.* FROM cm:ownable O LEFT JOIN cm:titled T ON O.cmis:objectId = T.cmis:objectId"), + expectedDocCount(1)); + assertQ(qurySolr("select o.*, t.* from cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId"), expectedDocCount(1)); diff --git a/search-services/pom.xml b/search-services/pom.xml index e6fb6c176..3646f381f 100644 --- a/search-services/pom.xml +++ b/search-services/pom.xml @@ -13,6 +13,7 @@ 6.6.0 5.3-SNAPSHOT + 6.4