Hi Florent, thank you for responding. I think the problem was that I had been basing the query on an older document from EMC https://community.emc.com/docs/DOC-1582, when I should have been referring to the 1.0 specs from OASIS directly.
Inside of this document it has the following description which differs from the OASIS spec. <quantified comparison predicate> ::= <literal> <comp op> ANY <multi-valued-column reference> <comp op> ::= "=" | "<>" | "<" | ">" | "<=" | ">=" So this led me to believe that the query I had written was a valid query. This query was just part of a Junit test suite that I had written to test my custom repository connector. It was one of many queries that I wrote to test my code. The query always failed and I was never able to determine why. Many thanks, Randy -----Original Message----- From: Florent Guillaume [mailto:[email protected]] Sent: Sunday, April 17, 2011 11:33 AM To: [email protected] Cc: Speakman, Randy Subject: Re: OpenCMIS Query Parsing Failure with Repeating Attribute and Not Equal Operator The BNF grammar of the CMIS 1.0 specification (§ 2.1.10.2.1 at http://docs.oasis-open.org/cmis/CMIS/v1.0/cmis-spec-v1.0.html) has: <quantified comparison predicate> ::= <literal> "=" ANY <multi-valued-column reference> So only the "=" operator is allowed by the strict spec, not "<>". Your query would be a straightforward extension that OpenCMIS could very reasonably allow in non-strict mode (if the server chooses to support it), but it's not in it at the moment. Florent PS: are you sure that you don't want to write ... WHERE NOT('keyword1' = ANY keywords), which is legal? This is the semantics people usually want. On Fri, Apr 15, 2011 at 8:29 PM, Speakman, Randy <[email protected]> wrote: > Hi, > > I am having an issue with a specific type of CMISQL query that fails to be > parsed in OpenCMIS 0.3.0 by the CmisQlStrictParser class. I have checked the > CMIS 1.0 specs and believe the query I have written is valid, however I would > like someone else to look at the query and double check it. The query > criteria filters on a repeating attribute that is not equal to a specific > value. In the query below, the keywords attribute is a repeating string. The > exception is thrown when QueryUtil.getWalker(...) is called and hits line 57, > where it checks the parser for errors. The error message in the parser says > "line 1:114 mismatched input '<>' expecting EQ". > > /* > Lines 56 to 59 from QueryWalker class > */ > query_return parsedStatement = parser.query(); > if (parser.hasErrors()) { > throw new CmisInvalidArgumentException(parser.getErrorMessages()); > } > > /* > My query > */ > select cmis:objectId, cmis:name, cmis:contentStreamLength, keywords from > my_doc_type where 'keyword1' <> any keywords > > > > Thanks, > > Randy > -- Florent Guillaume, Director of R&D, Nuxeo Open Source, Java EE based, Enterprise Content Management (ECM) http://www.nuxeo.com http://www.nuxeo.org +33 1 40 33 79 87
