[ 
https://issues.apache.org/jira/browse/JCR-2663?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Randall Hauch updated JCR-2663:
-------------------------------

        Fix Version/s: 1.6.3
    Affects Version/s: 2.1.0
                       2.0.0
          Component/s: JCR 1.0.1

Added the other versions to which this issue applies.

> JCR unit tests use invalid queries
> ----------------------------------
>
>                 Key: JCR-2663
>                 URL: https://issues.apache.org/jira/browse/JCR-2663
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-jcr-tests, JCR 1.0.1, JCR 2.0
>    Affects Versions: 2.0.0, 2.1.0
>            Reporter: Randall Hauch
>             Fix For: 1.6.3
>
>
> According to Section 8.5.2.11 of the JCR 1.0 specification:
>     It is optional to support properties in the SELECT, WHERE and ORDER BY 
> clauses that are not explicitly
>     defined in the node types listed in the FROM clause but which are defined 
> in subtypes of those node types.
>     It is optional to support the specifying of properties in the 
> SELECT,WHERE and ORDERBY clauses that 
>     are not explicitly defined in the node types listed in the FROM clause 
> but which are defined in mixin 
>     node types that may be assigned to node instances of the types that are 
> mentioned in the SELECT clause.
> However, two of the test methods in the 
> org.apache.jackrabbit.test.api.query.SQLJoinTest class are producing and 
> executing queries that use in the WHERE clause different properties and node 
> types than those listed in the FROM clause.  The testJoinNtBase() method is 
> producing a query using the following code:
>         StringBuffer query = new StringBuffer("SELECT * FROM ");
>         query.append(ntBase).append(", ").append(testMixin);
>         query.append(" WHERE ");
>         query.append(testNodeType).append(".").append(jcrPath);
>         query.append(" = ");
>         query.append(mixReferenceable).append(".").append(jcrPath);
>         query.append(" AND ").append(jcrPath).append(" LIKE ");
>         query.append("'").append(testRoot).append("/%'");
> This code will produce a valid query only when "testNodeType" is set to 
> "nt:base" and "testMixin" is set to "mix:referenceable":
>     SELECT * FROM nt:base, mix:referenceable 
>     WHERE nt:base.jcr:path = mix:referenceable.jcr:path AND ...
> However, when any other values for "testNodeType" and "testMixin" are used, 
> this produces an invalid query in which the WHERE criteria references tuple 
> sources that do not exist in the FROM clause.  For example, when 
> "testNodeType" is "my:type" and "testMixin" is "my:mixin", the query becomes:
>     SELECT * FROM nt:base, my:mixin 
>     WHERE my:type.jcr:path = mix:referenceable.jcr:path AND ...
> This code can be corrected by simply using the "testNodeType" in the FROM 
> clause.
> A similar bug is in the testJoinFilterPrimaryType() method, which uses this 
> code:
>         StringBuffer query = new StringBuffer("SELECT * FROM ");
>         query.append(testNodeType).append(", ").append(ntBase);
>         query.append(" WHERE ");
>         query.append(testNodeType).append(".").append(jcrPath);
>         query.append(" = ");
>         query.append(mixReferenceable).append(".").append(jcrPath);
>         query.append(" AND ").append(jcrPath).append(" LIKE ");
>         query.append("'").append(testRoot).append("/%'");
> This code will really never produce a valid query, since the FROM clause uses 
> the "testNodeType" and "nt:base" node types, whereas the WHERE clause will 
> use the "testNodeType" and "mix:referenceable" types.  For example, if 
> "testNodeType" has a value of "my:type", the query becomes:
>     SELECT * FROM my:type, nt:base 
>     WHERE my:type.jcr:path = mix:referenceable.jcr:path AND ...

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to