http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-open-index/index-selection/non-enforced-04/non-enforced-04.3.ddl.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-open-index/index-selection/non-enforced-04/non-enforced-04.3.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-open-index/index-selection/non-enforced-04/non-enforced-04.3.ddl.sqlpp new file mode 100644 index 0000000..c04b4d7 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-open-index/index-selection/non-enforced-04/non-enforced-04.3.ddl.sqlpp @@ -0,0 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +use test; + +create index idx_i64_on_d on TestOpen(nested.c_d:int64, nested.c_x: int); \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-open-index/index-selection/non-enforced-04/non-enforced-04.4.query.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-open-index/index-selection/non-enforced-04/non-enforced-04.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-open-index/index-selection/non-enforced-04/non-enforced-04.4.query.sqlpp new file mode 100644 index 0000000..1c07ea6 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-open-index/index-selection/non-enforced-04/non-enforced-04.4.query.sqlpp @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +use test; + +select value t.nested.c_x +from TestOpen t +where t.nested.c_d = 3.25 +order by t.nested.c_x; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-open-index/index-selection/non-enforced-04/non-enforced-04.5.ddl.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-open-index/index-selection/non-enforced-04/non-enforced-04.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-open-index/index-selection/non-enforced-04/non-enforced-04.5.ddl.sqlpp new file mode 100644 index 0000000..548e632 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-open-index/index-selection/non-enforced-04/non-enforced-04.5.ddl.sqlpp @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +drop dataverse test if exists; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.10.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.10.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.10.adm new file mode 100644 index 0000000..c45a808 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.10.adm @@ -0,0 +1,6 @@ +{ "c1": 1, "c2": 101 } +{ "c1": 2, "c2": 102 } +{ "c1": 3, "c2": 103 } +{ "c1": 4, "c2": 104 } +{ "c1": 5, "c2": 105 } +{ "c1": 6, "c2": 106 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.5.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.5.adm new file mode 100644 index 0000000..8643d5f --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.5.adm @@ -0,0 +1,10 @@ +{ "c1": 1, "c2": 101 } +{ "c1": 1, "c2": 105 } +{ "c1": 2, "c2": 102 } +{ "c1": 3, "c2": 103 } +{ "c1": 3, "c2": 107 } +{ "c1": 5, "c2": 101 } +{ "c1": 5, "c2": 105 } +{ "c1": 6, "c2": 106 } +{ "c1": 7, "c2": 103 } +{ "c1": 7, "c2": 107 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.6.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.6.adm new file mode 100644 index 0000000..8643d5f --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.6.adm @@ -0,0 +1,10 @@ +{ "c1": 1, "c2": 101 } +{ "c1": 1, "c2": 105 } +{ "c1": 2, "c2": 102 } +{ "c1": 3, "c2": 103 } +{ "c1": 3, "c2": 107 } +{ "c1": 5, "c2": 101 } +{ "c1": 5, "c2": 105 } +{ "c1": 6, "c2": 106 } +{ "c1": 7, "c2": 103 } +{ "c1": 7, "c2": 107 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.7.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.7.adm new file mode 100644 index 0000000..78a404d --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.7.adm @@ -0,0 +1,8 @@ +{ "c1": 1, "c2": 101 } +{ "c1": 1, "c2": 105 } +{ "c1": 3, "c2": 103 } +{ "c1": 3, "c2": 107 } +{ "c1": 5, "c2": 101 } +{ "c1": 5, "c2": 105 } +{ "c1": 7, "c2": 103 } +{ "c1": 7, "c2": 107 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.8.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.8.adm new file mode 100644 index 0000000..78a404d --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.8.adm @@ -0,0 +1,8 @@ +{ "c1": 1, "c2": 101 } +{ "c1": 1, "c2": 105 } +{ "c1": 3, "c2": 103 } +{ "c1": 3, "c2": 107 } +{ "c1": 5, "c2": 101 } +{ "c1": 5, "c2": 105 } +{ "c1": 7, "c2": 103 } +{ "c1": 7, "c2": 107 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.9.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.9.adm new file mode 100644 index 0000000..97b278c --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join-2/btree-secondary-non-enforced-equi-join-2.9.adm @@ -0,0 +1,9 @@ +{ "c1": 1, "c2": 101 } +{ "c1": 1, "c2": 103 } +{ "c1": 2, "c2": 101 } +{ "c1": 2, "c2": 103 } +{ "c1": 3, "c2": 101 } +{ "c1": 3, "c2": 103 } +{ "c1": 5, "c2": 101 } +{ "c1": 5, "c2": 103 } +{ "c1": 7, "c2": 107 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join/btree-secondary-non-enforced-equi-join.4.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join/btree-secondary-non-enforced-equi-join.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join/btree-secondary-non-enforced-equi-join.4.adm new file mode 100644 index 0000000..a4b9391 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-join/btree-secondary-non-enforced-equi-join/btree-secondary-non-enforced-equi-join.4.adm @@ -0,0 +1,2 @@ +{ "aid": 5, "bid": 98, "authors": "Umeshwar Dayal Eric N. Hanson Jennifer Widom" } +{ "aid": 34, "bid": 57, "authors": "" } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.10.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.10.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.10.adm new file mode 100644 index 0000000..04080b7 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.10.adm @@ -0,0 +1,3 @@ +{ "res": 4 } +{ "res": 5 } +{ "res": 6 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.11.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.11.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.11.adm new file mode 100644 index 0000000..429a13d --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.11.adm @@ -0,0 +1,2 @@ +{ "res": 4 } +{ "res": 5 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.4.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.4.adm new file mode 100644 index 0000000..f36e389 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.4.adm @@ -0,0 +1,2 @@ +{ "res": 3 } +{ "res": 7 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.5.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.5.adm new file mode 100644 index 0000000..9897674 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.5.adm @@ -0,0 +1,2 @@ +{ "res": 1 } +{ "res": 3 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.6.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.6.adm new file mode 100644 index 0000000..c1c06bd --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.6.adm @@ -0,0 +1,2 @@ +{ "res": 5 } +{ "res": 7 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.7.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.7.adm new file mode 100644 index 0000000..c1c06bd --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.7.adm @@ -0,0 +1,2 @@ +{ "res": 5 } +{ "res": 7 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.8.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.8.adm new file mode 100644 index 0000000..e6e7ad6 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.8.adm @@ -0,0 +1,5 @@ +{ "res": 2 } +{ "res": 3 } +{ "res": 4 } +{ "res": 5 } +{ "res": 6 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.9.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.9.adm new file mode 100644 index 0000000..db56195 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-01/non-enforced-01.9.adm @@ -0,0 +1,4 @@ +{ "res": 3 } +{ "res": 4 } +{ "res": 5 } +{ "res": 6 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-02/non-enforced-02.4.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-02/non-enforced-02.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-02/non-enforced-02.4.adm new file mode 100644 index 0000000..66fa150 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-02/non-enforced-02.4.adm @@ -0,0 +1 @@ +{ "res": 3 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-02/non-enforced-02.5.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-02/non-enforced-02.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-02/non-enforced-02.5.adm new file mode 100644 index 0000000..18cc982 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-02/non-enforced-02.5.adm @@ -0,0 +1,2 @@ +{ "res": 3 } +{ "res": 5 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-03/non-enforced-03.3.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-03/non-enforced-03.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-03/non-enforced-03.3.adm new file mode 100644 index 0000000..31ca720 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-03/non-enforced-03.3.adm @@ -0,0 +1 @@ +{ "id": 3, "nested": { "alias": "Hillery", "userSince": 2016 } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-04/non-enforced-04.4.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-04/non-enforced-04.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-04/non-enforced-04.4.adm new file mode 100644 index 0000000..05d6df6 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/nested-open-index/index-selection/non-enforced-04/non-enforced-04.4.adm @@ -0,0 +1,2 @@ +4 +9 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml index f5a2ab4..37eaf79 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml @@ -4284,6 +4284,16 @@ <output-dir compare="Text">word-jaccard-inline</output-dir> </compilation-unit> </test-case> + <test-case FilePath="nested-open-index/index-join"> + <compilation-unit name="btree-secondary-non-enforced-equi-join"> + <output-dir compare="Text">btree-secondary-non-enforced-equi-join</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="nested-open-index/index-join"> + <compilation-unit name="btree-secondary-non-enforced-equi-join-2"> + <output-dir compare="Text">btree-secondary-non-enforced-equi-join-2</output-dir> + </compilation-unit> + </test-case> </test-group> <test-group name="nested-open-index/index-leftouterjoin"> <test-case FilePath="nested-open-index/index-leftouterjoin"> @@ -4388,6 +4398,26 @@ <output-dir compare="Text">rtree-secondary-index</output-dir> </compilation-unit> </test-case> + <test-case FilePath="nested-open-index/index-selection"> + <compilation-unit name="non-enforced-01"> + <output-dir compare="Text">non-enforced-01</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="nested-open-index/index-selection"> + <compilation-unit name="non-enforced-02"> + <output-dir compare="Text">non-enforced-02</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="nested-open-index/index-selection"> + <compilation-unit name="non-enforced-03"> + <output-dir compare="Text">non-enforced-03</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="nested-open-index/index-selection"> + <compilation-unit name="non-enforced-04"> + <output-dir compare="Text">non-enforced-04</output-dir> + </compilation-unit> + </test-case> </test-group> <test-group name="nested-open-index/highly-open-highly-nested"> <test-case FilePath="nested-open-index/highly-open-highly-nested"> http://git-wip-us.apache.org/repos/asf/asterixdb/blob/9a61bd2c/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java index 4ef3933..efe795b 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java @@ -24,7 +24,10 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import org.apache.asterix.common.exceptions.AsterixException; +import org.apache.asterix.common.exceptions.ErrorCode; import org.apache.asterix.metadata.entities.Index; +import org.apache.asterix.om.typecomputer.impl.TypeComputeUtils; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.types.AUnionType; @@ -51,8 +54,9 @@ public class TypeUtil { */ public static Pair<ARecordType, ARecordType> createEnforcedType(ARecordType recordType, ARecordType metaType, List<Index> indexes) throws AlgebricksException { - ARecordType enforcedRecordType = recordType; + IAType enforcedRecordType = recordType; ARecordType enforcedMetaType = metaType; + List<String> subFieldName; for (Index index : indexes) { if (!index.isSecondaryIndex() || !index.isOverridingKeyFieldTypes()) { continue; @@ -61,21 +65,28 @@ public class TypeUtil { throw new AlgebricksException("Indexing an open field is only supported on the record part"); } for (int i = 0; i < index.getKeyFieldNames().size(); i++) { - Deque<Pair<ARecordType, String>> nestedTypeStack = new ArrayDeque<>(); + // keeps track of a record type and a field name in that record type + Deque<Pair<IAType, String>> nestedTypeStack = new ArrayDeque<>(); List<String> splits = index.getKeyFieldNames().get(i); - ARecordType nestedFieldType = enforcedRecordType; + IAType nestedFieldType = enforcedRecordType; boolean openRecords = false; String bridgeName = nestedFieldType.getTypeName(); int j; - // Build the stack for the enforced type + // enforcedRecordType must always be/stay as ARecordType + validateRecord(enforcedRecordType); + // build the stack for the enforced type, stack of a mixture of ARecord and AUnion(ARecord) types + // try to build up to the last record field, e.g. for a.b.c.d.e, build up to and including "d" for (j = 1; j < splits.size(); j++) { nestedTypeStack.push(new Pair<>(nestedFieldType, splits.get(j - 1))); bridgeName = nestedFieldType.getTypeName(); - nestedFieldType = (ARecordType) enforcedRecordType.getSubFieldType(splits.subList(0, j)); + subFieldName = splits.subList(0, j); + nestedFieldType = ((ARecordType) enforcedRecordType).getSubFieldType(subFieldName); if (nestedFieldType == null) { openRecords = true; break; } + // nestedFieldType (i.e. nested record field) must be either ARecordType or AUnion(ARecordType) + validateNestedRecord(nestedFieldType, subFieldName); } if (openRecords) { // create the smallest record @@ -87,19 +98,23 @@ public class TypeUtil { enforcedRecordType = new ARecordType(splits.get(k), new String[] { splits.get(k + 1) }, new IAType[] { AUnionType.createUnknownableType(enforcedRecordType) }, true); } - // Bridge the gap - Pair<ARecordType, String> gapPair = nestedTypeStack.pop(); - ARecordType parent = gapPair.first; + // bridge the gap. Update the parent type to include the new optional field, e.g. c.d.e + Pair<IAType, String> gapPair = nestedTypeStack.pop(); + ARecordType parent = (ARecordType) TypeComputeUtils.getActualType(gapPair.first); + // parent type must be "open" to allow inclusion of the non-declared field IAType[] parentFieldTypes = ArrayUtils.addAll(parent.getFieldTypes().clone(), new IAType[] { AUnionType.createUnknownableType(enforcedRecordType) }); enforcedRecordType = new ARecordType(bridgeName, ArrayUtils.addAll(parent.getFieldNames(), enforcedRecordType.getTypeName()), parentFieldTypes, true); + // make nullable/missable if the original parent was nullable/missable + enforcedRecordType = keepUnknown(gapPair.first, (ARecordType) enforcedRecordType); } else { - //Schema is closed all the way to the field - //enforced fields are either null or strongly typed - Map<String, IAType> recordNameTypesMap = TypeUtil.createRecordNameTypeMap(nestedFieldType); + // schema is closed all the way to the field. Enforced fields are either null or strongly typed + // e.g. nestedFieldType = a.b.c.d + ARecordType lastNestedRecord = (ARecordType) TypeComputeUtils.getActualType(nestedFieldType); + Map<String, IAType> recordNameTypesMap = TypeUtil.createRecordNameTypeMap(lastNestedRecord); // if a an enforced field already exists and the type is correct IAType enforcedFieldType = recordNameTypesMap.get(splits.get(splits.size() - 1)); if (enforcedFieldType != null && enforcedFieldType.getTypeTag() == ATypeTag.UNION @@ -108,44 +123,49 @@ public class TypeUtil { } if (enforcedFieldType != null && !ATypeHierarchy.canPromote(enforcedFieldType.getTypeTag(), index.getKeyFieldTypes().get(i).getTypeTag())) { - throw new AlgebricksException("Cannot enforce field " + index.getKeyFieldNames().get(i) - + " to have type " + index.getKeyFieldTypes().get(i)); + throw new AsterixException(ErrorCode.COMPILATION_ERROR, + "Cannot enforce field \"" + String.join(".", index.getKeyFieldNames().get(i)) + + "\" to have type " + index.getKeyFieldTypes().get(i)); } if (enforcedFieldType == null) { recordNameTypesMap.put(splits.get(splits.size() - 1), AUnionType.createUnknownableType(index.getKeyFieldTypes().get(i))); } - enforcedRecordType = new ARecordType(nestedFieldType.getTypeName(), + enforcedRecordType = new ARecordType(lastNestedRecord.getTypeName(), recordNameTypesMap.keySet().toArray(new String[recordNameTypesMap.size()]), recordNameTypesMap.values().toArray(new IAType[recordNameTypesMap.size()]), - nestedFieldType.isOpen()); + lastNestedRecord.isOpen()); + // make nullable/missable if the original nestedFieldType was nullable/missable + enforcedRecordType = keepUnknown(nestedFieldType, (ARecordType) enforcedRecordType); } // Create the enforced type for the nested fields in the schema, from the ground up if (!nestedTypeStack.isEmpty()) { while (!nestedTypeStack.isEmpty()) { - Pair<ARecordType, String> nestedTypePair = nestedTypeStack.pop(); - ARecordType nestedRecType = nestedTypePair.first; + Pair<IAType, String> nestedType = nestedTypeStack.pop(); + ARecordType nestedRecType = (ARecordType) TypeComputeUtils.getActualType(nestedType.first); IAType[] nestedRecTypeFieldTypes = nestedRecType.getFieldTypes().clone(); - nestedRecTypeFieldTypes[nestedRecType.getFieldIndex(nestedTypePair.second)] = - enforcedRecordType; + nestedRecTypeFieldTypes[nestedRecType.getFieldIndex(nestedType.second)] = enforcedRecordType; enforcedRecordType = new ARecordType(nestedRecType.getTypeName() + "_enforced", nestedRecType.getFieldNames(), nestedRecTypeFieldTypes, nestedRecType.isOpen()); + // make nullable/missable if the original nestedRecType was nullable/missable + enforcedRecordType = keepUnknown(nestedType.first, (ARecordType) enforcedRecordType); } } } } - return new Pair<>(enforcedRecordType, enforcedMetaType); + // the final enforcedRecordType built must be ARecordType since the original dataset rec. type can't be nullable + validateRecord(enforcedRecordType); + return new Pair<>((ARecordType) enforcedRecordType, enforcedMetaType); } /** * Creates a map from name to type for fields in the passed type * - * @param recordType - * the type to be mapped + * @param recordType the type to be mapped * @return a map mapping all fields to their types */ - public static Map<String, IAType> createRecordNameTypeMap(ARecordType recordType) { + private static Map<String, IAType> createRecordNameTypeMap(ARecordType recordType) { LinkedHashMap<String, IAType> recordNameTypesMap = new LinkedHashMap<>(); for (int j = 0; j < recordType.getFieldNames().length; j++) { recordNameTypesMap.put(recordType.getFieldNames()[j], recordType.getFieldTypes()[j]); @@ -153,4 +173,43 @@ public class TypeUtil { return recordNameTypesMap; } + /** + * Maintains the {@code updatedRecordType} as nullable/missable (?) in case it was originally nullable/missable + * @param originalRecordType the original record type + * @param updatedRecordType the original record type being enforced/modified with new non-declared fields included + * @return {@code updatedRecordType} + */ + private static IAType keepUnknown(IAType originalRecordType, ARecordType updatedRecordType) { + if (originalRecordType.getTypeTag() == ATypeTag.UNION) { + return AUnionType.createUnknownableType(updatedRecordType, updatedRecordType.getTypeName()); + } + return updatedRecordType; + } + + /** + * Makes sure the dataset record type being enforced/modified stays as a pure record type + * @param enforcedDatasetRecordType the dataset record type enforced and modified by adding the extra fields indexed + */ + private static void validateRecord(IAType enforcedDatasetRecordType) { + if (enforcedDatasetRecordType.getTypeTag() != ATypeTag.OBJECT) { + throw new IllegalStateException("The dataset type must be a record type to be able to build an index"); + } + } + + /** + * Makes sure the chain of fields accessed and leading to the indexed field are all valid record types. + * E.g. for CREATE INDEX idx on ds(a.b.c.d: int) validate that a, b and c are all valid record types (?). + * @param nestedRecordType the nested record field being accessed + * @param fieldName the name of the nested record field + * @throws AsterixException when supplying bad fields, e.g. CREATE INDEX i on ds(a.b: int, a.b.c: int) (mostly + * for non-declared fields) + */ + private static void validateNestedRecord(IAType nestedRecordType, List<String> fieldName) throws AsterixException { + IAType actualType = TypeComputeUtils.getActualType(nestedRecordType); + if (actualType.getTypeTag() != ATypeTag.OBJECT) { + String fName = String.join(".", fieldName); + throw new AsterixException(ErrorCode.COMPILATION_ERROR, + "Field accessor is not defined for \"" + fName + "\" of type " + actualType.getTypeTag()); + } + } }
