On Mon, Apr 4, 2011 at 7:20 PM, Vincent Massol <[email protected]> wrote: > > 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 > Right.
> 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. > Yep. I am more towards an evolution of XWQL that progressively incorporates XWiki Data Model constructs (e.g., properties, comments, attachment, tag, etc.) and removes HQL/JPQL specific stuff (because HQL is tied to a very specific storage and could be impossible to translate it) Thanks, Fabio > 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 > _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

