Issue Details (XML | Word | Printable)

Key: NUCCORE-516
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Andy Jefferson
Reporter: Andy Jefferson
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
DataNucleus Core

Generic compilation of JDOQL subquery via API can omit the rename of candidate in some cases

Created: 27/Apr/10 11:16 AM   Updated: 24/May/10 03:44 PM   Resolved: 27/Apr/10 12:11 PM
Component/s: Queries
Affects Version/s: 2.1.0.m1, 2.1.0.m2
Fix Version/s: 2.1.0.m3


 Description  « Hide
If we have
Query sub = pm.newQuery(Employee.class);
sub.setResult("avg(this.weeklyhours)");
sub.setFilter("this.manager == :manager");
Query apiQuery = pm.newQuery(Employee.class);
apiQuery.setFilter("this.weeklyhours> averageWeeklyhours");
apiQuery.addSubquery(sub, "double averageWeeklyhours", "this.department.employees", "this.manager");

this equates to

SELECT FROM " + Employee.class.getName() + " WHERE this.weeklyhours > " +
    "(SELECT AVG(e.weeklyhours) FROM this.department.employees e " +
    " WHERE e.manager == this.manager)

but when specified via the API is being generically compiled as

QueryCompilation:
  [filter:DyadicExpression{PrimaryExpression{this.weeklyhours} > VariableExpression{averageWeeklyhours}}]
  [symbols: averageWeeklyhours type=unknown, this type=org.apache.jdo.tck.pc.company.Employee]
  [subquery: averageWeeklyhours
    [result:InvokeExpression{STATIC.avg(PrimaryExpression{this.weeklyhours})}]
    [from:ClassExpression(candidate=this.department.employees alias=this)]
    [filter:DyadicExpression{PrimaryExpression{this.manager} = PrimaryExpression{this.manager}}]
    [symbols: this type=org.apache.jdo.tck.pc.company.Employee]]

i.e the rename of the subquery candidate hasn't happened (likely because the subquery candidate is an expression)

Andy Jefferson added a comment - 27/Apr/10 12:11 PM
SVN trunk now compiles the specified query to be

QueryCompilation:
  [filter:DyadicExpression{PrimaryExpression{this.weeklyhours} > VariableExpression{averageWeeklyhours}}]
  [symbols: averageWeeklyhours type=unknown, this type=org.apache.jdo.tck.pc.company.Employee]
  [subquery: averageWeeklyhours
    [result:InvokeExpression{STATIC.avg(PrimaryExpression{sub_this.weeklyhours})}]
    [from:ClassExpression(candidate=this.department.employees alias=sub_this)]
    [filter:DyadicExpression{PrimaryExpression{sub_this.manager} = PrimaryExpression{this.manager}}]
    [symbols: sub_this type=org.apache.jdo.tck.pc.company.Employee]]

Andy Jefferson made changes - 27/Apr/10 12:11 PM
Field Original Value New Value
Status Open [ 1 ] Resolved [ 5 ]
Fix Version/s 2.1.0.m3 [ 10942 ]
Resolution Fixed [ 1 ]
Andy Jefferson made changes - 24/May/10 03:44 PM
Status Resolved [ 5 ] Closed [ 6 ]