On Apr 4, 2011, at 7:10 PM, Fabio Mancinelli wrote: > Hi, > > I agree with Ludovic... > > From my point of view XWQL is an XWiki-specific DSL that abstracts the > underlying XWiki Data Model and allows you to write declarative > queries for retrieving XWiki data using the XWiki vocabulary. I see > HQL compatibility as a "backdoor" to write queries for things that are > not yet expressable with some XWQL constructs. Something that is not > really necessary and that we should get rid of eventually. > > Ideally HQL should disappear in the background when XWQL will be > enough expressive to cover all the XWiki Data Model. > > With a powerful XWQL where every query in XWiki is expressed in XWQL, > the underlying persistence mechanism could be changes (provided that > there is a driver for translating XWQL to something that is able to > retrieve data in the underlying persistence layer) > > Going to the DataNucleus stuff... DataNucleus provides an abstraction > layer that allows to map JDO/JPA annotated models to be persisted > using different storages. > Now this is about the "lower part" of the architecture. On the upper > part there will be a driver that takes an XWQL and spits the needed > query for retrieving data using JDOQL (i.e., DataNucleus' query > language). > > Basically DataNucleus would provide drivers for mapping JDO/JPA and > their query languages to different storages. We need to provide > drivers to XWQL to JDOQL. > > I agree that we should define what XWQL is and make the current > version evolve towards this definition :) > > One thing that could be useful is to search the current XWiki > distribution for all the queries done in scripts and try to extract > patterns from the results. > An XWQL definition that covers 80% of these queries would be great :)
Well isn't XWQL is already defined and specified: http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-query/jpql-parser/src/main/sablecc/JPQL.grammar What you suggest Fabio would be equivalent to creating a new QL (or maybe a new version of XWQL in the same manner as we have XWiki Syntax 2.0 and XWiki Syntax 2.1), unless I'm mistaken or didn't understand something. Thanks -Vincent > -Fabio > > > > On Mon, Apr 4, 2011 at 6:47 PM, Ludovic Dubost <[email protected]> wrote: >> Le 04/04/11 16:37, Caleb James DeLisle a écrit : >>> >>> On 04/04/2011 10:01 AM, Sergiu Dumitriu wrote: >>>> >>>> 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. >>> >>> The problem now is we don't have any specification to tell us what is >>> valid and what is not. >>> Is this a valid XWQL query? >>> >>> $services.query.xwql("from BaseObject as obj where doc.fullName = obj.name >>> and obj.className = >>> 'XWiki.XWikiUsers'").execute() >>> >>> Run it and you might be surprised. >>> Based on that, we have no way of ensuring that a query which works now >>> will work in a new XWQL >>> implementation which defeats the purpose of abstracting the user away from >>> HQL. >>> >>>> 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. >>> >>> If we're going to define our own query language (I think there are enough >>> already) there are certain >>> things we have to do such as writing a specification. I frankly find this >>> thing embarrassing. >>> >>>> - Is there any tool that allows mapping a JPQL or JDOQL query into other >>>> query languages? >>> >>> http://www.datanucleus.org/products/accessplatform_3_0/datastores.html >>> These folks are mapping JDOQL and JPQL into a whole bunch of different >>> types of storage. >>> >>>> - 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? >>> >>> This particular one has 2 downsides: >>> 1. There is no official specification. >>> 2. HQL can be run as shown above. >>> >>> The major downside of implementing one correctly is that it is massively >>> complicated. >>> >>> Caleb >>> >>>> 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") >>>>> >> >> The key objective of XWQL is to abstract from the XWiki point of view and >> make it as simple as possible to write queries. >> If I take this (valid) query in XWQL: >> >> from doc.object(Blog.BlogPostClass) as blogarticle where 'Blog.Blogging' >> member of blogarticle.category >> >> It seems to me that it would be more complex in JPQL or JDOQL, which is not >> very cool. >> I'm -1 from any new query language that would end up being more complex. >> >> If I take your 2 downsides: >> >> 1/ Official spec >> >> Well we should write one. It seems normal to me that a new query language >> has no spec. >> But this does not mean that we don't need a language. >> >> Unless we can find a standard language that is as easy to use as XWQL, let's >> stick to XWQL. >> If we need to improve XWQL let's improve it. >> >> 2/ HQL can be run >> >> That's an implementation issue. XWQL's objective is to write and run after >> translations to whatever is needed by the backend. >> It is VERY important to have a simple query language. It took a long time to >> learn how to run joins in HQL which are not needed from a pure "functionnal" >> standpoint. >> >> BTW I had fixed XWiki's query generator which now generates XWQL. It needs >> XWiki 2.7.1+ >> >> Example here: >> >> http://www.ludovic.org/xwiki/bin/view/Test/Query?query=1&classname=Blog.BlogPostClass&Blog.BlogPostClass_title=&Blog.BlogPostClass_content=&Blog.BlogPostClass_extract=&Blog.BlogPostClass_category=Blog.Blogging&Blog.BlogPostClass_publishDate_morethan=&Blog.BlogPostClass_publishDate_lessthan= >> >> I will document it and publish it on extensions.xwiki.org >> >> Ludovic >> >> >>>>> 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 _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

