The following query cause a NPE failure during the optimization:
drop dataverse test if exists;
create dataverse test;
use dataverse test;
create type Type1 as closed {
id: int32,
items: [{
subid: string,
value: int32
}]
}
create type Type2 as closed {
id: string,
val: int32
}
create dataset Dataset1(Type1) primary key id;
create dataset Dataset2(Type2) primary key id;
insert into dataset Dataset1 (
{ "id": 1, "items": [ { "subid": "2", "value": 1 }, { "subid": "4", "value": 1111 } ] }
)
insert into dataset Dataset1 (
{ "id": 2, "items": [ { "subid": "0", "value": 1 }, { "subid": "1", "value": 2222 } ] }
)
insert into dataset Dataset2 (
{ "id": "0", "val": 0 }
)
insert into dataset Dataset2 (
{ "id": "1", "val": 1 }
)
insert into dataset Dataset2 (
{ "id": "2", "val": 2 }
)
insert into dataset Dataset2 (
{ "id": "3", "val": 3 }
)
insert into dataset Dataset2 (
{ "id": "4", "val": 4 }
)
let $cs := for $k in dataset Dataset2 return $k
for $i in dataset Dataset1
return {
"id": $i.id,
"items":
for $k in $cs
return {
"subid": $k.id,
"sum":
let $s := sum(
for $j in $i.items
where $j.subid = $k.id
return $j.value)
return $s
}
}
However if the assignment in the inner-most sub plan is removed as follows, the
query works:
let $cs := for $k in dataset Dataset2 return $k
for $i in dataset Dataset1
return {
"id": $i.id,
"items":
for $k in $cs
return {
"subid": $k.id,
"sum":
sum(
for $j in $i.items
where $j.subid = $k.id
return $j.value)
}
}
From the exception, it seems that the NPE comes from LoadRecordFieldsRule when
a scan-collection is inserted, but the type inference is failed.
Original issue reported on code.google.com by jarod...@gmail.com on 4 Sep 2013 at 8:49
Original issue reported on code.google.com by
jarod...@gmail.com
on 4 Sep 2013 at 8:49