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

XWQL "in element()" expression creates exception with DBStringListProperty classes

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Major
    • 10.5-rc-1
    • 9.11
    • Query
    • None
    • Unit
    • Unknown
    • N/A
    • N/A

    Description

      Steps to REPRODUCE

      1. Login as Admin
      2. Edit the Help.Application.Movies class and enable the "Relational Storage" of the Genre (staticList1) property
      3. Execute this XWQL query: 
        select doc.fullName from Document as doc, doc.object(Help.Applications.Movies.Code.MoviesClass) as obj where doc.fullName not like '%Template' and 'drama' member of obj.staticList1
        

        You can either generate it with the Query Generator extension or by editing a page and adding this velocity code:

        {{velocity}}
        $services.query.hql("select doc.fullName from Document as doc, doc.object(Help.Applications.Movies.Code.MoviesClass) as obj where doc.fullName not like '%Template' and 'drama' member of obj.staticList1").execute()
        {{/velocity}}
        

       

      Expected results

      Only one result is being returned like this:

      Actual results

      Two results:

      Analysis

      Happen since the fix for XWIKI-15250.
      The previous XWQL query is translated to this HQL query:

       select doc.fullName from com.xpn.xwiki.doc.XWikiDocument as doc , com.xpn.xwiki.objects.BaseObject as obj , com.xpn.xwiki.objects.DBStringListProperty as obj_staticList11 join obj_staticList11.list obj_staticList11list where ( doc.fullName not like '%Template' and 'drama' in elements( obj_staticList11.list ) ) and doc.fullName=obj.name and obj.className='Help.Applications.Movies.Code.MoviesClass' and obj_staticList11.id.id=obj.id and obj_staticList11.id.name='staticList1' 
      

      The issue comes from the

      'drama' in elements( obj_staticList11.list )
      

      which generates (in SQL) another 'join' of the 'obj_staticList11.list'. It should be replaced by:

      'drama' in (obj_staticList11list)
      

      or

      obj_staticList11list = 'drama'
      

      Attachments

        Issue Links

          Activity

            People

              atallahade Adel Atallah
              atallahade Adel Atallah
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: