Uploaded image for project: 'OJB'
  1. OJB
  2. OJB-120

addExists() builds invalid SQL if subquery has orderby clause

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 1.0.3
    • 1.0.5
    • PB-API
    • None

    Description

      I've got the following code:
      ===========Code===========
      //build sub query
      Criteria subCriteria = new Criteria();
      subCriteria.addEqualToField("parentId", Criteria.PARENT_QUERY_PREFIX + "id");
      subCriteria.addIn("someChildFeild", someCollection);

      ReportQueryByCriteria subQuery =
      QueryFactory.newReportQuery(Child.class, subCriteria);
      subQuery.setAttributes(new String[]

      { "1" }

      );
      subQuery.addOrderByDescending("someChildFeild"); //******

      //build main query
      Criteria mainCriteria = new Criteria();
      mainCriteria.addExists(subQuery);

      ReportQueryByCriteria mainQuery = QueryFactory.newReportQuery(Parent.class, mainCriteria);
      mainQuery.setAttributes(new String[]

      { "id", "someParentFeild1", "someParentFeild2" }

      );
      mainQuery.addOrderByDescending("someParentFeild2");

      ===========Generated SQL===========
      SELECT A0.ID,A0.SOME_PARENT_FEILD1,A0.SOME_PARENT_FEILD2
      FROM PARENT A0
      WHERE EXISTS (SELECT 1, B0.SOME_CHILD_FEILD as ojb_col_2
      FROM CHILD B0
      WHERE (B0.PARENT_ID = A0.ID)
      AND (B0.SOME_CHILD_FEILD IN (?, ?))
      ORDER BY 2 DESC)
      ORDER BY 3 DESC
      =================================
      This SQL throws "ORA-00907: missing right parenthesis".

      If we remove line marked with //****** we'll get:
      ===========Generated SQL===========
      SELECT A0.ID,A0.SOME_PARENT_FEILD1,A0.SOME_PARENT_FEILD2
      FROM PARENT A0
      WHERE EXISTS (SELECT 1
      FROM CHILD B0
      WHERE (B0.PARENT_ID = A0.ID)
      AND (B0.SOME_CHILD_FEILD IN (?, ?)))
      ORDER BY 3 DESC
      =================================
      ...which works fine.

      I think that addExists(subQuery) should check that subQuery doesn't have any orderby clause added and if it does throw more meaningful exception rather than "ORA-00907: missing right parenthesis".

      Attachments

        Activity

          People

            Unassigned Unassigned
            bas Bas Zoetekouw
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: