mirror of
https://github.com/Alfresco/SearchServices.git
synced 2026-09-16 18:12:56 +00:00
SEARCH-433 CMIS QL - Support inner and left outer joins
This commit is contained in:
@@ -18,7 +18,7 @@
|
||||
<dependency>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-solrclient</artifactId>
|
||||
<version>${alfresco-solr.version}</version>
|
||||
<version>${alfresco-solrclient.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
|
||||
+1
-5
@@ -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;
|
||||
}
|
||||
|
||||
+6
@@ -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)
|
||||
|
||||
+18
@@ -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));
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
<properties>
|
||||
<solr.version>6.6.0</solr.version>
|
||||
<alfresco-solr.version>5.3-SNAPSHOT</alfresco-solr.version>
|
||||
<alfresco-solrclient.version>6.4</alfresco-solrclient.version>
|
||||
</properties>
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
|
||||
Reference in New Issue
Block a user