Artem Melentyev wrote: > Hi, devs. > > I would like to discuss about the new xwiki query language. > http://dev.xwiki.org/xwiki/bin/view/Design/XWikiQueryLanguage > > We need to choose a syntax and data model of the query language > > There are some examples in > http://dev.xwiki.org/xwiki/bin/view/Design/XWiki+Query+Language+Specification > > I already have a prototype based on my JPQL parser (SableCC based) and > hql generator. It is quite easy to modify syntax and generator. Results > of my query parser research in the end of the message. > > I propose: > > 0) Name: XWiki Query Language, XWQL as a name of the new language. > > Why not XQL ? Does it conflict with something ?
> 1) Data Model: Choose query method #1 from specification > http://dev.xwiki.org/xwiki/bin/view/Design/XWiki+Query+Language+Specification > with corrections: > > add Document as a virtual class for our XWikiDocument. > use "docalias.XWiki.ClassName instead" of "XWiki.ClassName". docalias is > some alias for Document. > add optional select clause. > > example: > "select doc.fullName > from Document as doc, doc.XWiki.XWikiUsers as user > where user.email like '%xwiki.com' and doc.author=:username" > > sounds good.. +1 for method #1 > "select doc.fullName from Document as doc" may be omitted. It will be > added if there is no Document in query statement. So "from > doc.XWiki.XWikiUsers as user" is correct query statement. > > It is possible to use several documents and objects in one query. > Attachment, Class, and other xwiki entities will be added later if needed. > > 2) Syntax: XWQL will be JPQL subset. > (hint: JPQL is part of Java Persistance API standard, JSR#317. HQL is > a superset of JPQL. Hibernate support JPA) > All JPQL features and all hibernate data model will be accessible for > hibernate store. But it is not true for JCR store. > Only described data model will be available for XWQL on JCRStore. (But > we may add some extensions later) > In JCRv2 will not work (JCRSQL2 constraint): > arithmetic expressions (+-*/) > aggregation funtions (max,min,sum,avg) > some other functions > In JCRv1 also will not work (XPath constraint): > query on several documents (from Document as doc1, Document as doc2) > > Some JPQL limitations compared with HQL: > no arithmetic expressions (+-*/) in select clause > aliases at from clause are mandatory (from Document as alias) > > So the main idea is to use simple JPQL preprocessor to rewrite virtual > data model to real. > This is quite easy for HQL and JCRSQL2. But it is hard(but doable) for > JCRv1 XPath. > > I'm not sure we need XPath.. It's deprecated in JCR v2 so we don't really care. The most important is to have a consitent query api XWQL or XQL working the same way for HQL and JCRSQL2. Ludovic > WDYT? > > > Appendix: > > I researched a many of query engines and found nothing appropriate. All > query engines/parsers is either very specific or cannot be used > standalone or cannot be used as a preprocessor. JCRSQL2 language parser > from Jackrabbit is still unusable. > Next I researched a parser generators and found that SableCC is best > choose for my needs. Other tools (ANTLR, JavaCC, Cup, Beaver) requires > much more hand work to write parse tree (AST) and preprocessors > (Visitors and ast.toString). JTB and JJTree also generate AST and > visitors, but SableCC generated code is much more clean. > SableCC generate all of this from one clear grammar file. Maybe it is > not as perfect as hand-written one, but it is quite suitable. > > Reason to choose sql-like syntax: > XPath isn't still much spread. XPath language is deprecated in JCRv2. > JCRv2 uses JCRSQL2 and criteria-like AQM instead. JCRSQL2 is much more > powerful (in expression sense) than JCR's XPath and JCRSQL1. > > -- > Artem Melentyev > > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs > > -- Ludovic Dubost Blog: http://blog.ludovic.org/ XWiki: http://www.xwiki.com Skype: ldubost GTalk: ldubost _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

