On 04/02/2011 02:22 PM, Caleb James DeLisle wrote:
> After searching through documentation on JPQL (JPA's query language) I was 
> unable to find any
> example of the "doc.object(XWiki.XWikiUsers)" construct. This means XWQL is 
> it's own standard and
> there is no authoritative reference on it. What makes an implementation 
> compliant? I have found that
> most HQL queries can be executed as XWQL queries with little or no 
> modification so if compliance is
> defined as being "just like the reference implementation" then nearly all HQL 
> must be implemented in
> order to be compliant.

The goal of XWQL was to not be bound to a certain query language, but to 
be able to map it to as many QLs as possible, be they SQL-related, like 
HQL or JPQL, or other types of queries, like QBE, XPath, SPARQL. So, it 
wasn't meant from the start to be compatible with any standard.

Now, I'm not sure if the right thing to do is to move to a standard 
query language, or to stick with our own.

- Is there any tool that allows mapping a JPQL or JDOQL query into other 
query languages?
- Is there a way to parse a query into a tree/AST?
- Other than the fact that it's a non-standard language (and all the 
consequences of this, like no support from tools and libraries), are 
there any downsides to having our own query language?

The benefit of XWQL was that it allowed to write domain specific 
queries, which are shorter and easier to understand (at least in theory).

> Looking at the specifications I have rewritten the example query in compliant 
> JPQL and JDOQL.
> I wrote these so that they would work if all objects were custom mapped which 
> is similar to the
> appearance XWQL gives.
>
> XWQL:
> (SELECT doc.fullName FROM XWikiDocument as doc) where doc.author = 
> 'XWiki.LudovicDubost' and
> doc.object(XWiki.XWikiUsers).email like '%xwiki.com'
>
> JPQL:
> SELECT doc.fullName FROM XWikiDocument as doc, IN(doc.xObjects) obj WHERE 
> obj.className =
> 'XWiki.XWikiUsers' and obj.email LIKE '%xwiki.com'
>
> JDOQL:
> SELECT this.fullName FROM XWikiDocument WHERE 
> this.xObjects.containsValue(obj)&&  obj.className ==
> "XWiki.XWikiUsers"&&  obj.email.startsWith("xwiki.com")
>
>
> I understood that XWQL was simply a translation scheme which made it appear 
> that we were using JPQL
> with the schema we wanted when really we were using HQL with the schema we 
> had. Given that it is not
> compliant JPQL that is not the case.
>
> I think when we update the schema, we should cut our losses with this thing 
> and move to something
> which has a reference document and is more widely used.
>
> WDYT?
>
> Caleb
>
>
>
> The JPQL specification (originally called EJBQL):
> ejb-3_0-fr-spec-ejbcore.pdf chapter 9.
> http://jcp.org/aboutJava/communityprocess/final/jsr220/
>
> The JDOQL specification:
> jdo-3_0-mrel3-spec.pdf chapter 26.
> http://db.apache.org/jdo/specifications.html
>
> Easy to read, example rich descriptions:
> http://www.datanucleus.org/products/accessplatform_3_0/jpa/jpql.html
> http://www.datanucleus.org/products/accessplatform_3_0/jdo/jdoql.html


-- 
Sergiu Dumitriu
http://purl.org/net/sergiu/
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to