Description
I am unsure if GROUP BY meta().id is valid but I see some incorrect behaviour when I tried out the same. Below are the steps:
Create a document:
Index: CREATE INDEX `i1` ON `default`(`f1`,`f2`)
Query: SELECT SUM(f1 * 2), meta().id FROM default WHERE f1 IS NOT NULL GROUP BY f2, meta().id
Results:
[
]
The result is incorrect as I see id as 40 and SUM (ie $1) as null.
Explain plan:
{
|
"plan": {
|
"#operator": "Sequence",
|
"~children": [
|
{
|
"#operator": "IndexScan3",
|
"covers": [
|
"cover ((`default`.`f1`))",
|
"cover ((`default`.`f2`))",
|
"cover ((meta(`default`).`id`))",
|
"cover ((meta(`default`).`id`))",
|
"cover (sum((cover ((`default`.`f1`)) * 2)))"
|
],
|
"index": "i1",
|
"index_group_aggs": {
|
"aggregates": [
|
{
|
"aggregate": "SUM",
|
"depends": [
|
0
|
],
|
"expr": "(cover ((`default`.`f1`)) * 2)",
|
"id": 3,
|
"keypos": -1
|
}
|
],
|
"depends": [
|
0,
|
1,
|
2
|
],
|
"group": [
|
{
|
"depends": [
|
1
|
],
|
"expr": "cover ((`default`.`f2`))",
|
"id": 1,
|
"keypos": 1
|
},
|
{
|
"depends": [
|
2
|
],
|
"expr": "cover ((meta(`default`).`id`))",
|
"id": 2,
|
"keypos": -1
|
}
|
],
|
"partial": true
|
},
|
"index_id": "4e4a11c49a600684",
|
"index_projection": {
|
"entry_keys": [
|
1,
|
2,
|
3
|
]
|
},
|
"keyspace": "default",
|
"namespace": "default",
|
"spans": [
|
{
|
"exact": true,
|
"range": [
|
{
|
"inclusion": 0,
|
"low": "null"
|
}
|
]
|
}
|
],
|
"using": "gsi"
|
},
|
{
|
"#operator": "Parallel",
|
"~child": {
|
"#operator": "Sequence",
|
"~children": [
|
{
|
"#operator": "InitialGroup",
|
"aggregates": [
|
"sum(cover (sum((cover ((`default`.`f1`)) * 2))))"
|
],
|
"group_keys": [
|
"cover ((`default`.`f2`))",
|
"cover ((meta(`default`).`id`))"
|
]
|
}
|
]
|
}
|
},
|
{
|
"#operator": "IntermediateGroup",
|
"aggregates": [
|
"sum(cover (sum((cover ((`default`.`f1`)) * 2))))"
|
],
|
"group_keys": [
|
"cover ((`default`.`f2`))",
|
"cover ((meta(`default`).`id`))"
|
]
|
},
|
{
|
"#operator": "FinalGroup",
|
"aggregates": [
|
"sum(cover (sum((cover ((`default`.`f1`)) * 2))))"
|
],
|
"group_keys": [
|
"cover ((`default`.`f2`))",
|
"cover ((meta(`default`).`id`))"
|
]
|
},
|
{
|
"#operator": "Parallel",
|
"~child": {
|
"#operator": "Sequence",
|
"~children": [
|
{
|
"#operator": "InitialProject",
|
"result_terms": [
|
{
|
"expr": "sum(cover (sum((cover ((`default`.`f1`)) * 2))))"
|
},
|
{
|
"expr": "cover ((meta(`default`).`id`))"
|
}
|
]
|
},
|
{
|
"#operator": "FinalProject"
|
}
|
]
|
}
|
}
|
]
|
},
|
"text": "SELECT SUM(f1 * 2), meta().id FROM default WHERE f1 IS NOT NULL\nGROUP BY f2, meta().id"
|
}
|
Indexer returns result row as : [5,"K1",40] which seems correct given the index_projection by query.