Uploaded image for project: 'XWiki Platform'
  1. XWiki Platform
  2. XWIKI-22621

XWQL subqueries (IN and NOT IN operators) don't seem translated to HQL

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • Major
    • None
    • 16.6.0
    • Query
    • None
    • Unknown

    Description

      I tried:

      {{groovy}}
      services.query.xwql("select space.reference from Space space where space.reference not in (select d.fullName from Document d)").execute()
      {{/groovy}}
      

      I expected the query to run fine (I guess I'm supposed to get a list of spaces without a corresponding document; this is a MWE, this may not actually be accurate or even useful).

      Instead, I got:

      Failed to execute the [groovy] macro. Cause: [Document is not mapped]. Click on this message for details.
      

      The relevant stack trace:

      Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Document is not mapped [ select space.reference from com.xpn.xwiki.doc.XWikiSpace as space where space.reference not in ( select d.fullName from Document d ) ]
       at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79)
       at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)
       at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:220)
       at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144)
       at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:112)
       at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:73)
       at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:162)
       at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:636)
       at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:748)
       ... 225 more
      Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Document is not mapped
       at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:170)
       at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91)
       at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:77)
       at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:334)
       at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3782)
       at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3671)
       at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:746)
       at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:602)
       at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.collectionFunctionOrSubselect(HqlSqlBaseWalker.java:5020)
       at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.inRhs(HqlSqlBaseWalker.java:4919)
       at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4602)
       at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2180)
       at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:841)
       at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:635)
       at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:339)
       at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:287)
       at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:276)
       at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:192)
       ... 231 more
      

      More precisely, the query seems to be translated to the following HQL:

      select space.reference from com.xpn.xwiki.doc.XWikiSpace as space where space.reference not in ( select d.fullName from Document d )
      

      what is between the NOT IN parentheses is surprising, Document should have been translated to XWikiDocument. This part of the query seems to be output as-is instead of translated.

      Attachments

        Activity

          People

            rjakse Raphaël Jakse
            rjakse Raphaël Jakse
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated: