Bug #2101
multi-buffer FOR loop with rowid and to-rowid functions in WHERE clause not converting properly
100%
History
#1 Updated by Eric Faulhaber over 13 years ago
This issue was first reported in note 192 of #2068.
The following converts badly:
def temp-table tt1 field f1 as char.
for each tt1,
first person where rowid(person) = to-rowid(tt1.f1):
end.
I think the FOR EACH, FIRST loop should convert to:
query0 = new CompoundQuery(false, false);
query0.addComponent(new AdaptiveQuery(tt1, (String) null, null, "tt1.id asc"));
RecordBuffer.prepare(person);
query0.addComponent(new RandomAccessQuery(person, "person.id = toRowid(?)", null, "person.siteId asc, person.empNum asc", new Object[]
{
new FieldReference(tt1, "f1")
}), QueryConstants.FIRST);
Consider that:
def temp-table tt1 field f1 as rowid.
for each tt1,
first person where rowid(person) = tt1.f1:
end.
already converts properly to:
query0 = new CompoundQuery(false, false);
query0.addComponent(new AdaptiveQuery(tt1, (String) null, null, "tt1.id asc"));
RecordBuffer.prepare(person);
query0.addComponent(new RandomAccessQuery(person, "person.id = ?", null, "person.siteId asc, person.empNum asc", new Object[]
{
new FieldReference(tt1, "f1")
}), QueryConstants.FIRST);
The difference between the two is the data type of tt1.f1 and the use of the to-rowid builtin function in the where clause. I believe the latter is driving us down the path of a client-side where clause when we don't need to go there.
#2 Updated by Eric Faulhaber over 13 years ago
- File ecf_upd20130323a.zip added
Although I'm not the assignee, in having to think through the problem for the above post, I took a quick look at the related rules and made a fix candidate, which is attached. It is going through conversion regression testing now.
#3 Updated by Eric Faulhaber over 13 years ago
- Project changed from Liberty to Database
#4 Updated by Eric Faulhaber over 13 years ago
- % Done changed from 0 to 80
- Status changed from WIP to Review
Update ecf_upd20130323a.zip has passed conversion regression testing and is committed to bzr rev. 10325.
#5 Updated by Eric Faulhaber over 13 years ago
- % Done changed from 80 to 100
- Status changed from Review to Closed
I've compared conversions of the customer's server project with and without this fix and it seems correct in all the locations which differ as a result of the fix. It simplifies the conversion of a number of cases similar to the originally reported problem, reducing the use of client-side where clauses considerably.
I am closing this issue accordingly.
#6 Updated by Greg Shah over 9 years ago
- Target version changed from Milestone 4 to Conversion Support for Server Features