From caf4e2137369618544536d1019fa03fff6711374 Mon Sep 17 00:00:00 2001 From: Joel Date: Sun, 19 Jun 2016 23:11:52 -0400 Subject: [PATCH] Added next block of CMIS assertions --- .../alfresco/solr/AlfrescoSolrTestCaseJ4.java | 2 + .../query/AlfrescoCMISQParserPluginTest.java | 464 ++++++++++++++++++ 2 files changed, 466 insertions(+) diff --git a/search-services/alfresco-solr/src/test/java/org/alfresco/solr/AlfrescoSolrTestCaseJ4.java b/search-services/alfresco-solr/src/test/java/org/alfresco/solr/AlfrescoSolrTestCaseJ4.java index a1b7183a9..83343cbb5 100644 --- a/search-services/alfresco-solr/src/test/java/org/alfresco/solr/AlfrescoSolrTestCaseJ4.java +++ b/search-services/alfresco-solr/src/test/java/org/alfresco/solr/AlfrescoSolrTestCaseJ4.java @@ -90,6 +90,7 @@ public class AlfrescoSolrTestCaseJ4 extends SolrTestCaseJ4 implements SolrTestFi private static int orderTextCount = 0; protected static String testNodeRef; protected static String testBaseFolderNodeRef; + protected static String testfolder00NodeRef; private static Date orderDate = new Date(); protected static final String TEST_NAMESPACE = "http://www.alfresco.org/test/solrtest"; @@ -591,6 +592,7 @@ public class AlfrescoSolrTestCaseJ4 extends SolrTestCaseJ4 implements SolrTestFi folder00Properties.put(ContentModel.PROP_NAME, new StringPropertyValue("Folder 0")); HashMap folder00Content = new HashMap(); NodeRef folder00NodeRef = new NodeRef(new StoreRef("workspace", "SpacesStore"), createGUID()); + testfolder00NodeRef = folder00NodeRef.toString(); QName folder00QName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "Folder 0"); ChildAssociationRef folder00CAR = new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, baseFolderNodeRef, folder00QName, folder00NodeRef, true, 0); diff --git a/search-services/alfresco-solr/src/test/java/org/alfresco/solr/query/AlfrescoCMISQParserPluginTest.java b/search-services/alfresco-solr/src/test/java/org/alfresco/solr/query/AlfrescoCMISQParserPluginTest.java index f02018d8d..e211f4292 100644 --- a/search-services/alfresco-solr/src/test/java/org/alfresco/solr/query/AlfrescoCMISQParserPluginTest.java +++ b/search-services/alfresco-solr/src/test/java/org/alfresco/solr/query/AlfrescoCMISQParserPluginTest.java @@ -489,6 +489,470 @@ public class AlfrescoCMISQParserPluginTest extends AlfrescoSolrTestCaseJ4 implem "SELECT cmis:objectTypeId FROM cmis:folder WHERE cmis:objectTypeId IS NULL"), null), "*[count(//doc)=0]"); + /************** checkCmisObjecId ***********************/ + + /* + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId = '" + + folderId + "'", 1, null, null, null, null, null, (String) null); + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId <> '" + + folderId + "'", 10, null, null, null, null, null, (String) null); + + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId IN ('" + + folderId + "')", 1, null, null, null, null, null, (String) null); + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId NOT IN('" + + folderId + "')", 10, null, null, null, null, null, (String) null); + + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:folder WHERE IN_FOLDER('" + folderId + + "')", 2, null, null, null, null, null, (String) null); + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:folder WHERE IN_TREE ('" + folderId + + "')", 6, null, null, null, null, null, (String) null); + + testQueryByHandler(report, core, "/cmis", + "SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId IS NOT NULL", 11, null, null, null, + null, null, (String) null); + testQueryByHandler(report, core, "/cmis", + "SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId IS NULL", 0, null, null, null, null, + null, (String) null); + + // ignore folder versions + + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId = '" + + folderId + ";1.0'", 1, null, null, null, null, null, (String) null); + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId <> '" + + folderId + ";1.0'", 10, null, null, null, null, null, (String) null); + + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId IN ('" + + folderId + ";1.0')", 1, null, null, null, null, null, (String) null); + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId NOT IN('" + + folderId + ";1.0')", 10, null, null, null, null, null, (String) null); + + // testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:folder WHERE IN_FOLDER('" + + // folderId + ";1.0')", 2, null, null, null, null, null, (String) null); + // testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:folder WHERE IN_TREE ('" + + // folderId + ";1.0')", 6, null, null, null, null, null, (String) null); + + // Docs + + String id = docId; + + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:document WHERE cmis:objectId = '" + + id + "'", 1, null, null, null, null, null, (String) null); + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:document WHERE cmis:objectId <> '" + + id + "'", 10, null, null, null, null, null, (String) null); + + testQueryByHandler(report, core, "/cmis", + "SELECT cmis:objectId FROM cmis:document WHERE cmis:objectId IN ('" + id + "')", 1, null, null, + null, null, null, (String) null); + testQueryByHandler(report, core, "/cmis", + "SELECT cmis:objectId FROM cmis:document WHERE cmis:objectId NOT IN('" + id + "')", 10, null, + null, null, null, null, (String) null); + + testQueryByHandler(report, core, "/cmis", + "SELECT cmis:objectId FROM cmis:document WHERE cmis:objectId IS NOT NULL", 11, null, null, null, + null, null, (String) null); + testQueryByHandler(report, core, "/cmis", + "SELECT cmis:objectId FROM cmis:document WHERE cmis:objectId IS NULL", 0, null, null, null, + null, null, (String) null); + + id = docId + ";1.0"; + + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:document WHERE cmis:objectId = '" + + id + "'", 1, null, null, null, null, null, (String) null); + testQueryByHandler(report, core, "/cmis", "SELECT cmis:objectId FROM cmis:document WHERE cmis:objectId <> '" + + id + "'", 10, null, null, null, null, null, (String) null); + + testQueryByHandler(report, core, "/cmis", + "SELECT cmis:objectId FROM cmis:document WHERE cmis:objectId IN ('" + id + "')", 1, null, null, + null, null, null, (String) null); + testQueryByHandler(report, core, "/cmis", + "SELECT cmis:objectId FROM cmis:document WHERE cmis:objectId NOT IN('" + id + "')", 10, null, + null, null, null, null, (String) null); + + testQueryByHandler(report, core, "/cmis", + "SELECT cmis:objectId FROM cmis:document WHERE cmis:objectId IS NOT NULL", 11, null, null, null, + null, null, (String) null); + testQueryByHandler(report, core, "/cmis", + "SELECT cmis:objectId FROM cmis:document WHERE cmis:objectId IS NULL", 0, null, null, null, + null, null, (String) null); + */ + + /************** checkCmisTextPredicates ***********************/ + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name = 'Folder 1'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name = 'Folder 9'"), null), + "*[count(//doc)=0]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name = 'Folder 9\\''"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND NOT cmis:name = 'Folder 1'"), null), + "*[count(//doc)=10]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND 'Folder 1' = ANY cmis:name"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND NOT cmis:name <> 'Folder 1'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name <> 'Folder 1'"), null), + "*[count(//doc)=10]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name < 'Folder 1'"), null), + "*[count(//doc)=2]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name <= 'Folder 1'"), null), + "*[count(//doc)=3]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name > 'Folder 1'"), null), + "*[count(//doc)=8]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name >= 'Folder 1'"), null), + "*[count(//doc)=9]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name IN ('Folder 1', '1')"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name NOT IN ('Folder 1', 'Folder 9\\'')"), null), + "*[count(//doc)=9]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND ANY cmis:name IN ('Folder 1', 'Folder 9\\'')"), null), + "*[count(//doc)=2]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND ANY cmis:name NOT IN ('2', '3')"), null), + "*[count(//doc)=11]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name LIKE 'Folder 1'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name LIKE 'Fol%'"), null), + "*[count(//doc)=10]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name LIKE 'F_l_e_ 1'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name NOT LIKE 'F_l_e_ 1'"), null), + "*[count(//doc)=10]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name LIKE 'F_l_e_ %'"), null), + "*[count(//doc)=10]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name NOT LIKE 'F_l_e_ %'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name LIKE 'F_l_e_ _'"), null), + "*[count(//doc)=9]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name NOT LIKE 'F_l_e_ _'"), null), + "*[count(//doc)=2]"); + + + + /********* checkCmisSimpleConjunction **********************/ + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name = 'Folder 1'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name = 'Folder'"), null), + "*[count(//doc)=0]"); + + + + /*************** checkCmisSimpleDisjunction *****************/ + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name = 'Folder 1'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name = 'Folder 2'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name = 'Folder 1' OR cmis:name = 'Folder 2'"), null), + "*[count(//doc)=2]"); + + /*************** checkCmisExists *********************/ + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL"), null), + "*[count(//doc)=11]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE cmis:name IS NULL"), null), + "*[count(//doc)=0]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:document WHERE cmis:name IS NOT NULL"), null), + "*[count(//doc)=11]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:document WHERE cmis:name IS NULL"), null), + "*[count(//doc)=0]"); + + /********** checkInTree ***************************/ + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE IN_TREE('" + testfolder00NodeRef + "')"), null), + "*[count(//doc)=6]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder F WHERE IN_TREE(F, '" + testfolder00NodeRef + "')"), null), + "*[count(//doc)=6]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT D.*, O.* FROM cmis:document AS D JOIN cm:ownable AS O ON D.cmis:objectId = O.cmis:objectId WHERE IN_TREE(D, '" + + testBaseFolderNodeRef + "')"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE IN_TREE('woof://woof/woof')"), null), + "*[count(//doc)=0]"); + + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:folder WHERE IN_TREE('woof://woof/woof;woof')"), null), + "*[count(//doc)=0]"); + + /************* checkLikeEscaping *******************/ + + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco Tutorial'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco Tutoria_'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco T_______'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco T______\\_'"), null), + "*[count(//doc)=0]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco T%'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco'"), null), + "*[count(//doc)=0]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco%'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco T\\%'"), null), + "*[count(//doc)=0]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'GG*GG'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE '__*__'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE '%*%'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'HH?HH'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE '__?__'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE '%?%'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'AA%'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'AA\\%'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'A%'"), null), + "*[count(//doc)=2]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'a%'"), null), + "*[count(//doc)=2]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'A\\%'"), null), + "*[count(//doc)=0]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'BB_'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'BB\\_'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'B__'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'B_\\_'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'B\\_\\_'"), null), + "*[count(//doc)=0]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'CC\\\\'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'DD\\''"), null), + "*[count(//doc)=1]"); + + + + /******* checkDateFormatting ******/ + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cm:lockable L WHERE L.cm:expiryDate = TIMESTAMP '2012-12-12T12:12:12.012Z'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cm:lockable L WHERE L.cm:expiryDate = TIMESTAMP '2012-012-12T12:12:12.012Z'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cm:lockable L WHERE L.cm:expiryDate = TIMESTAMP '2012-2-12T12:12:12.012Z'"), null), + "*[count(//doc)=0]"); + + /********** checkAspectJoin **********/ + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "select o.*, t.* from ( cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId JOIN cmis:document AS D ON D.cmis:objectId = o.cmis:objectId ) where o.cm:owner = 'andy' and t.cm:title = 'Alfresco tutorial' and CONTAINS(D, '\\'jumped\\'') and D.cmis:contentStreamLength <> 2"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cm:ownable"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cm:ownable where cm:owner = 'andy'"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cm:ownable where cm:owner = 'bob'"), null), + "*[count(//doc)=0]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT D.*, O.* FROM cmis:document AS D JOIN cm:ownable AS O ON D.cmis:objectId = O.cmis:objectId"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "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"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT D.*, O.* FROM cm:ownable O JOIN cmis:document D ON D.cmis:objectId = O.cmis:objectId"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT D.*, F.* FROM cmis:folder F JOIN cmis:document D ON D.cmis:objectId = F.cmis:objectId"), null), + "*[count(//doc)=0]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT O.*, T.* FROM cm:ownable O JOIN cm:titled T ON O.cmis:objectId = T.cmis:objectId"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "select o.*, t.* from cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "sElEcT o.*, T.* fRoM cm:ownable o JoIn cm:titled T oN o.cmis:objectId = T.cmis:objectId"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "select o.*, t.* from ( cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId )"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "select o.*, t.* from ( cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId JOIN cmis:document AS D ON D.cmis:objectId = o.cmis:objectId )"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "select o.*, t.* from ( cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId JOIN cmis:document AS D ON D.cmis:objectId = o.cmis:objectId ) where o.cm:owner = 'andy' and t.cm:title = 'Alfresco tutorial' and CONTAINS(D, '\\'jumped\\'') and D.cmis:contentStreamLength <> 2"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "select o.*, t.* from ( cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId JOIN cmis:document AS D ON D.cmis:objectId = o.cmis:objectId ) where o.cm:owner = 'andy' and t.cm:title = 'Alfresco tutorial' and CONTAINS(D, 'jumped') and D.cmis:contentStreamLength <> 2"), null), + "*[count(//doc)=1]"); + + /******* checkFTSConnectives ********/ + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:document where contains('\\'two\\' OR \\'zebra\\'')"), null), + "*[count(//doc)=10]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:document where contains('\\'two\\' or \\'zebra\\'')"), null), + "*[count(//doc)=10]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:document where contains('\\'two\\' \\'zebra\\'')"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:document where contains('\\'two\\' and \\'zebra\\'')"), null), + "*[count(//doc)=1]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:document where contains('\\'two\\' or \\'zebra\\'')"), null), + "*[count(//doc)=10]"); + + assertQ(areq(params("rows", "20", "qt", "/cmis", "q", + "SELECT * FROM cmis:document where contains('\\'two\\' \\'zebra\\'')"), null), + "*[count(//doc)=1]"); + + + }