Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 85923200CB8 for ; Sat, 17 Jun 2017 01:23:05 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 84361160BDD; Fri, 16 Jun 2017 23:23:05 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 3EFD3160BEB for ; Sat, 17 Jun 2017 01:23:03 +0200 (CEST) Received: (qmail 8982 invoked by uid 500); 16 Jun 2017 23:23:02 -0000 Mailing-List: contact commits-help@asterixdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@asterixdb.apache.org Delivered-To: mailing list commits@asterixdb.apache.org Received: (qmail 8945 invoked by uid 99); 16 Jun 2017 23:23:01 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 16 Jun 2017 23:23:01 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 1907ADFAAF; Fri, 16 Jun 2017 23:23:01 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: buyingyi@apache.org To: commits@asterixdb.apache.org Date: Fri, 16 Jun 2017 23:23:01 -0000 Message-Id: <5e47b9e622274e3595808c4d9c175fe9@git.apache.org> In-Reply-To: <9904fd03aabd44c0bb43658b691cdaa0@git.apache.org> References: <9904fd03aabd44c0bb43658b691cdaa0@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [2/3] asterixdb git commit: Support for non-enforced secondary indexes archived-at: Fri, 16 Jun 2017 23:23:05 -0000 http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.1.ddl.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.1.ddl.sqlpp new file mode 100644 index 0000000..750ac72 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.1.ddl.sqlpp @@ -0,0 +1,33 @@ +/* + * 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. + */ +/* +* Description : Index selection for non-enforced indexes +* Expected Res : Success +* Date : 7 Jun 2017 +*/ +drop dataverse test if exists; +create dataverse test; +use test; + +create type TestOpenType as open { + c_id: int64 +} + +create dataset TestOpen(TestOpenType) +primary key c_id; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.10.query.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.10.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.10.query.sqlpp new file mode 100644 index 0000000..bb643f6 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.10.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 t.c_x as res +from TestOpen t +where t.c_d >= 3.25 +order by t.c_x; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.11.query.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.11.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.11.query.sqlpp new file mode 100644 index 0000000..85bb0ea --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.11.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 t.c_x as res +from TestOpen t +where t.c_i8 > 499 and t.c_i8 < 99999 +order by t.c_x; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.2.update.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.2.update.sqlpp new file mode 100644 index 0000000..eba8642 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.2.update.sqlpp @@ -0,0 +1,79 @@ +/* + * 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; + +insert into TestOpen ({ + "c_id": 1, + "c_x": 1, + "c_s": "hello", + "c_i64": 2, + "c_i8": 2, + "c_d": 2 +}); +insert into TestOpen ({ + "c_id": 2, + "c_x": 2, + "c_s": 2, + "c_i64": "2", + "c_i8": 2.5, + "c_d": 3 +}); +insert into TestOpen ({ + "c_id": 3, + "c_x": 3, + "c_s": "world", + "c_i64": 2, + "c_i8": 4, + "c_d": 3.125 +}); +insert into TestOpen ({ + "c_id": 4, + "c_x": 4, + "c_s": null, + "c_i64": null, + "c_i8": 500, + "c_d": 3.25 +}); +insert into TestOpen ({ + "c_id": 5, + "c_x": 5, + "c_s": "hello", + "c_i64": 2.25, + "c_i8": 10000.25, + "c_d": 3.5 +}); +insert into TestOpen ({ + "c_id": 6, + "c_x": 6, + "c_s": false, + "c_i64": false, + "c_i8": 2e100, + "c_d": 2e100 +}); +insert into TestOpen ({ + "c_id": 7, + "c_x": 7, + "c_s": "world", + "c_i64": 3 +}); +insert into TestOpen ({ + "c_id": 8, + "c_x": 8 +}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.3.ddl.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.3.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.3.ddl.sqlpp new file mode 100644 index 0000000..efec192 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.3.ddl.sqlpp @@ -0,0 +1,28 @@ +/* + * 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_s on TestOpen(c_s:string); + +create index idx_i64 on TestOpen(c_i64:int64); + +create index idx_i8 on TestOpen(c_i8:int8); + +create index idx_d on TestOpen(c_d:double); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.4.query.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.4.query.sqlpp new file mode 100644 index 0000000..fd0f674 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.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 t.c_x as res +from TestOpen t +where t.c_s = 'world' +order by t.c_x; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.5.query.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.5.query.sqlpp new file mode 100644 index 0000000..179d0c0 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.5.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 t.c_x as res +from TestOpen t +where t.c_i64 = 2 +order by t.c_x; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.6.query.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.6.query.sqlpp new file mode 100644 index 0000000..558769c --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.6.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 t.c_x as res +from TestOpen t +where t.c_i64 > 2 +order by t.c_x; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.7.query.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.7.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.7.query.sqlpp new file mode 100644 index 0000000..66fd4bd --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.7.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 t.c_x as res +from TestOpen t +where t.c_i64 > 2.0 +order by t.c_x; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.8.query.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.8.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.8.query.sqlpp new file mode 100644 index 0000000..1743ba7 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.8.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 t.c_x as res +from TestOpen t +where t.c_i8 > 2 +order by t.c_x; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.9.query.sqlpp ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.9.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.9.query.sqlpp new file mode 100644 index 0000000..0d6e0e3 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.9.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 t.c_x as res +from TestOpen t +where t.c_i8 > 2.5 +order by t.c_x; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-join/btree-equi-join-01/btree-equi-join-01.5.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-join/btree-equi-join-01/btree-equi-join-01.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-join/btree-equi-join-01/btree-equi-join-01.5.adm new file mode 100644 index 0000000..8643d5f --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-join/btree-equi-join-01/btree-equi-join-01.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/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.10.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.10.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.10.adm new file mode 100644 index 0000000..04080b7 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-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/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.11.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.11.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.11.adm new file mode 100644 index 0000000..429a13d --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-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/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.4.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.4.adm new file mode 100644 index 0000000..f36e389 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-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/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.5.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.5.adm new file mode 100644 index 0000000..9897674 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-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/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.6.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.6.adm new file mode 100644 index 0000000..c1c06bd --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-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/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.7.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.7.adm new file mode 100644 index 0000000..c1c06bd --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-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/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.8.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.8.adm new file mode 100644 index 0000000..e6e7ad6 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-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/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.9.adm ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-01.9.adm new file mode 100644 index 0000000..db56195 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/open-index-non-enforced/index-selection/btree-index-01/btree-index-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/8ba59445/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml index e986046..aad1832 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml @@ -3486,13 +3486,13 @@ missing-enforce-statement - Cannot create typed index on "[value]" field without enforcing it's type + ASX1042: Cannot create non-enforced typed index of this kind: RTREE missing-optionality - "?" + Cannot create enforced index on "[value]" field with non-optional type http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/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 6a6ea4b..9903fd0 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml @@ -3339,13 +3339,13 @@ missing-enforce-statement - Cannot create typed index on "[value]" field without enforcing it's type + ASX1042: Cannot create non-enforced typed index of this kind: RTREE missing-optionality - string) enforced + Cannot create enforced index on "[value]" field with non-optional type @@ -3540,6 +3540,20 @@ + + + + btree-index-01 + + + + + + + btree-equi-join-01 + + + http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java index 785135b..5deaf54 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java @@ -108,6 +108,8 @@ public class ErrorCode { public static final int COMPILATION_ILLEGAL_STATE = 1038; public static final int COMPILATION_TWO_PHASE_LOCKING_VIOLATION = 1039; public static final int DATASET_ID_EXHAUSTED = 1040; + public static final int INDEX_ILLEGAL_ENFORCED_NON_OPTIONAL = 1041; + public static final int INDEX_ILLEGAL_NON_ENFORCED_TYPED = 1042; // Feed errors public static final int DATAFLOW_ILLEGAL_STATE = 3001; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties index c118c36..c755e40 100644 --- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties +++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties @@ -94,6 +94,8 @@ 1038 = Illegal state. %1$s 1039 = Two-phase locking violation -- locks can not be acquired after unlocking 1040 = Dataset id space is exhausted +1041 = Cannot create enforced index on \"%1$s\" field with non-optional type +1042 = Cannot create non-enforced typed index of this kind: %1$s # Feed Errors 3001 = Illegal state. http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj b/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj index 8170eab..db63abb 100644 --- a/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj +++ b/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj @@ -90,6 +90,7 @@ import org.apache.asterix.lang.common.expression.FieldBinding; import org.apache.asterix.lang.common.expression.GbyVariableExpressionPair; import org.apache.asterix.lang.common.expression.IfExpr; import org.apache.asterix.lang.common.expression.IndexAccessor; +import org.apache.asterix.lang.common.expression.IndexedTypeExpression; import org.apache.asterix.lang.common.expression.ListConstructor; import org.apache.asterix.lang.common.expression.LiteralExpr; import org.apache.asterix.lang.common.expression.OperatorExpr; @@ -576,7 +577,7 @@ CreateIndexStatement IndexSpecification() throws ParseException: String indexName = null; boolean ifNotExists = false; Pair nameComponents = null; - Pair, TypeExpression>> fieldPair = null; + Pair, IndexedTypeExpression>> fieldPair = null; IndexParams indexType = null; boolean enforced = false; } @@ -1264,9 +1265,10 @@ Pair Property() throws ParseException: } } -TypeExpression IndexedTypeExpr() throws ParseException: +IndexedTypeExpression IndexedTypeExpr() throws ParseException: { TypeExpression typeExpr = null; + boolean isUnknownable = false; } { ( @@ -1274,8 +1276,9 @@ TypeExpression IndexedTypeExpr() throws ParseException: | typeExpr = OrderedListTypeDef() | typeExpr = UnorderedListTypeDef() ) + ( { isUnknownable = true; } )? { - return typeExpr; + return new IndexedTypeExpression(typeExpr, isUnknownable); } } @@ -1473,17 +1476,17 @@ String Identifier() throws ParseException: ) } -Pair, TypeExpression>> OpenField() throws ParseException: +Pair, IndexedTypeExpression>> OpenField() throws ParseException: { - TypeExpression fieldType = null; + IndexedTypeExpression fieldType = null; Pair> fieldList = null; } { fieldList = NestedField() - ( fieldType = IndexedTypeExpr() )? + ( fieldType = IndexedTypeExpr() )? { - return new Pair, TypeExpression>> - (fieldList.first, new Pair, TypeExpression>(fieldList.second, fieldType)); + return new Pair, IndexedTypeExpression>> + (fieldList.first, new Pair, IndexedTypeExpression>(fieldList.second, fieldType)); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IndexedTypeExpression.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IndexedTypeExpression.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IndexedTypeExpression.java new file mode 100644 index 0000000..3a0f1ed --- /dev/null +++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/IndexedTypeExpression.java @@ -0,0 +1,40 @@ +/* + * 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. + */ + +package org.apache.asterix.lang.common.expression; + +public final class IndexedTypeExpression { + + private final TypeExpression type; + + private final boolean isUnknownable; + + public IndexedTypeExpression(TypeExpression type, boolean isUnknownable) { + this.type = type; + this.isUnknownable = isUnknownable; + } + + public TypeExpression getType() { + return type; + } + + public boolean isUnknownable() { + return isUnknownable; + } +} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateIndexStatement.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateIndexStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateIndexStatement.java index 7297bf5..0d6a7ed 100644 --- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateIndexStatement.java +++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateIndexStatement.java @@ -24,7 +24,7 @@ import java.util.List; import org.apache.asterix.common.config.DatasetConfig.IndexType; import org.apache.asterix.common.exceptions.CompilationException; import org.apache.asterix.lang.common.base.Statement; -import org.apache.asterix.lang.common.expression.TypeExpression; +import org.apache.asterix.lang.common.expression.IndexedTypeExpression; import org.apache.asterix.lang.common.struct.Identifier; import org.apache.asterix.lang.common.visitor.base.ILangVisitor; import org.apache.hyracks.algebricks.common.utils.Pair; @@ -34,7 +34,7 @@ public class CreateIndexStatement implements Statement { private Identifier indexName; private Identifier dataverseName; private Identifier datasetName; - private List, TypeExpression>> fieldExprs = new ArrayList<>(); + private List, IndexedTypeExpression>> fieldExprs = new ArrayList<>(); private List fieldIndexIndicators = new ArrayList<>(); private IndexType indexType = IndexType.BTREE; private boolean enforced; @@ -78,11 +78,11 @@ public class CreateIndexStatement implements Statement { this.datasetName = datasetName; } - public List, TypeExpression>> getFieldExprs() { + public List, IndexedTypeExpression>> getFieldExprs() { return fieldExprs; } - public void addFieldExprPair(Pair, TypeExpression> fp) { + public void addFieldExprPair(Pair, IndexedTypeExpression> fp) { this.fieldExprs.add(fp); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java index 8b4cca1..a2e7341 100644 --- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java +++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java @@ -47,6 +47,7 @@ import org.apache.asterix.lang.common.expression.FieldBinding; import org.apache.asterix.lang.common.expression.GbyVariableExpressionPair; import org.apache.asterix.lang.common.expression.IfExpr; import org.apache.asterix.lang.common.expression.IndexAccessor; +import org.apache.asterix.lang.common.expression.IndexedTypeExpression; import org.apache.asterix.lang.common.expression.ListConstructor; import org.apache.asterix.lang.common.expression.LiteralExpr; import org.apache.asterix.lang.common.expression.OperatorExpr; @@ -660,14 +661,18 @@ public class FormatPrintVisitor implements ILangVisitor { out.print(generateFullName(cis.getDataverseName(), cis.getDatasetName())); out.print(" ("); - List, TypeExpression>> fieldExprs = cis.getFieldExprs(); + List, IndexedTypeExpression>> fieldExprs = cis.getFieldExprs(); int index = 0; int size = fieldExprs.size(); - for (Pair, TypeExpression> entry : fieldExprs) { + for (Pair, IndexedTypeExpression> entry : fieldExprs) { printNestField(entry.first); - if (entry.second != null) { + IndexedTypeExpression typeExpr = entry.second; + if (typeExpr != null) { out.print(":"); - entry.second.accept(this, step); + typeExpr.getType().accept(this, step); + if (typeExpr.isUnknownable()) { + out.print('?'); + } } if (++index < size) { out.print(","); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj index ce81a91..bcba939 100644 --- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj +++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj @@ -84,6 +84,7 @@ import org.apache.asterix.lang.common.expression.FieldBinding; import org.apache.asterix.lang.common.expression.GbyVariableExpressionPair; import org.apache.asterix.lang.common.expression.IfExpr; import org.apache.asterix.lang.common.expression.IndexAccessor; +import org.apache.asterix.lang.common.expression.IndexedTypeExpression; import org.apache.asterix.lang.common.expression.ListConstructor; import org.apache.asterix.lang.common.expression.LiteralExpr; import org.apache.asterix.lang.common.expression.OperatorExpr; @@ -619,7 +620,7 @@ CreateIndexStatement IndexSpecification() throws ParseException: String indexName = null; boolean ifNotExists = false; Pair nameComponents = null; - Pair, TypeExpression>> fieldPair = null; + Pair, IndexedTypeExpression>> fieldPair = null; IndexParams indexType = null; boolean enforced = false; } @@ -1342,9 +1343,10 @@ Pair Property() throws ParseException: } } -TypeExpression IndexedTypeExpr() throws ParseException: +IndexedTypeExpression IndexedTypeExpr() throws ParseException: { TypeExpression typeExpr = null; + boolean isUnknownable = false; } { ( @@ -1352,8 +1354,9 @@ TypeExpression IndexedTypeExpr() throws ParseException: | typeExpr = OrderedListTypeDef() | typeExpr = UnorderedListTypeDef() ) + ( { isUnknownable = true; } )? { - return typeExpr; + return new IndexedTypeExpression(typeExpr, isUnknownable); } } @@ -1557,17 +1560,17 @@ void Dataset() throws ParseException: (|) } -Pair, TypeExpression>> OpenField() throws ParseException: +Pair, IndexedTypeExpression>> OpenField() throws ParseException: { - TypeExpression fieldType = null; + IndexedTypeExpression fieldType = null; Pair> fieldList = null; } { fieldList = NestedField() - ( fieldType = IndexedTypeExpr() )? + ( fieldType = IndexedTypeExpr() )? { - return new Pair, TypeExpression>> - (fieldList.first, new Pair, TypeExpression>(fieldList.second, fieldType)); + return new Pair, IndexedTypeExpression>> + (fieldList.first, new Pair, IndexedTypeExpression>(fieldList.second, fieldType)); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-metadata/pom.xml ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/pom.xml b/asterixdb/asterix-metadata/pom.xml index fb66291..5497cf4 100644 --- a/asterixdb/asterix-metadata/pom.xml +++ b/asterixdb/asterix-metadata/pom.xml @@ -187,10 +187,5 @@ org.apache.hadoop hadoop-common - - org.apache.commons - commons-collections4 - 4.1 - \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java index 4880a73..84cb671 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java @@ -325,7 +325,7 @@ public class MetadataNode implements IMetadataNode { InternalDatasetDetails id = (InternalDatasetDetails) dataset.getDatasetDetails(); Index primaryIndex = new Index(dataset.getDataverseName(), dataset.getDatasetName(), dataset.getDatasetName(), IndexType.BTREE, id.getPrimaryKey(), id.getKeySourceIndicator(), - id.getPrimaryKeyType(), false, true, dataset.getPendingOp()); + id.getPrimaryKeyType(), false, false, true, dataset.getPendingOp()); addIndex(jobId, primaryIndex); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java index d8bf559..0229f39 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java @@ -127,7 +127,7 @@ public class MetadataTransactionContext extends MetadataCache { } public void dropIndex(String dataverseName, String datasetName, String indexName) { - Index index = new Index(dataverseName, datasetName, indexName, null, null, null, null, false, false, + Index index = new Index(dataverseName, datasetName, indexName, null, null, null, null, false, false, false, MetadataUtil.PENDING_NO_OP); droppedCache.addIndexIfNotExists(index); logAndApply(new MetadataLogicalOperation(index, false)); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java index 9c0ce05..57f0a07 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java @@ -51,7 +51,8 @@ public class Index implements IMetadataEntity, Comparable { private final List> keyFieldNames; private final List keyFieldSourceIndicators; private final List keyFieldTypes; - private final boolean enforceKeyFields; + private final boolean overrideKeyFieldTypes; + private final boolean isEnforced; private final boolean isPrimaryIndex; // Specific to NGRAM indexes. private final int gramLength; @@ -60,7 +61,7 @@ public class Index implements IMetadataEntity, Comparable { public Index(String dataverseName, String datasetName, String indexName, IndexType indexType, List> keyFieldNames, List keyFieldSourceIndicators, List keyFieldTypes, - int gramLength, boolean enforceKeyFields, boolean isPrimaryIndex, int pendingOp) { + int gramLength, boolean overrideKeyFieldTypes, boolean isEnforced, boolean isPrimaryIndex, int pendingOp) { this.dataverseName = dataverseName; this.datasetName = datasetName; this.indexName = indexName; @@ -69,16 +70,17 @@ public class Index implements IMetadataEntity, Comparable { this.keyFieldSourceIndicators = keyFieldSourceIndicators; this.keyFieldTypes = keyFieldTypes; this.gramLength = gramLength; - this.enforceKeyFields = enforceKeyFields; + this.overrideKeyFieldTypes = overrideKeyFieldTypes; + this.isEnforced = isEnforced; this.isPrimaryIndex = isPrimaryIndex; this.pendingOp = pendingOp; } public Index(String dataverseName, String datasetName, String indexName, IndexType indexType, List> keyFieldNames, List keyFieldSourceIndicators, List keyFieldTypes, - boolean enforceKeyFields, boolean isPrimaryIndex, int pendingOp) { + boolean overrideKeyFieldTypes, boolean isEnforced, boolean isPrimaryIndex, int pendingOp) { this(dataverseName, datasetName, indexName, indexType, keyFieldNames, keyFieldSourceIndicators, keyFieldTypes, - -1, enforceKeyFields, isPrimaryIndex, pendingOp); + -1, overrideKeyFieldTypes, isEnforced, isPrimaryIndex, pendingOp); } public String getDataverseName() { @@ -117,8 +119,12 @@ public class Index implements IMetadataEntity, Comparable { return isPrimaryIndex; } - public boolean isEnforcingKeyFields() { - return enforceKeyFields; + public boolean isOverridingKeyFieldTypes() { + return overrideKeyFieldTypes; + } + + public boolean isEnforced() { + return isEnforced; } public int getPendingOp() { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java index a6ec835..7b1d9a6 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java @@ -144,6 +144,7 @@ public class IndexTupleTranslator extends AbstractTupleTranslator { IAType fieldType = BuiltinTypeMap.getTypeFromTypeName(metadataNode, jobId, dvName, typeName, false); searchKeyType.add(fieldType); } + boolean isOverridingKeyTypes = !searchKeyType.isEmpty(); int isEnforcedFieldPos = rec.getType().getFieldIndex(INDEX_ISENFORCED_FIELD_NAME); Boolean isEnforcingKeys = false; @@ -200,7 +201,7 @@ public class IndexTupleTranslator extends AbstractTupleTranslator { } } return new Index(dvName, dsName, indexName, indexStructure, searchKey, keyFieldSourceIndicator, searchKeyType, - gramLength, isEnforcingKeys, isPrimaryIndex, pendingOp); + gramLength, isOverridingKeyTypes, isEnforcingKeys, isPrimaryIndex, pendingOp); } @Override @@ -293,7 +294,7 @@ public class IndexTupleTranslator extends AbstractTupleTranslator { recordBuilder.addField(nameValue, fieldValue); } - if (instance.isEnforcingKeyFields()) { + if (instance.isOverridingKeyFieldTypes()) { // write optional field 9 OrderedListBuilder typeListBuilder = new OrderedListBuilder(); typeListBuilder.reset(new AOrderedListType(BuiltinType.ANY, null)); @@ -312,7 +313,9 @@ public class IndexTupleTranslator extends AbstractTupleTranslator { fieldValue.reset(); typeListBuilder.write(fieldValue.getDataOutput(), true); recordBuilder.addField(nameValue, fieldValue); + } + if (instance.isEnforced()) { // write optional field 10 fieldValue.reset(); nameValue.reset(); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java index ca5ddd0..f2a0709 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java @@ -60,7 +60,7 @@ public class IndexUtil { InternalDatasetDetails id = (InternalDatasetDetails) dataset.getDatasetDetails(); return new Index(dataset.getDataverseName(), dataset.getDatasetName(), dataset.getDatasetName(), DatasetConfig.IndexType.BTREE, id.getPartitioningKey(), id.getKeySourceIndicator(), - id.getPrimaryKeyType(), false, true, dataset.getPendingOp()); + id.getPrimaryKeyType(), false, false, true, dataset.getPendingOp()); } public static int[] getBtreeFieldsIfFiltered(Dataset dataset, Index index) throws AlgebricksException { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryBTreeOperationsHelper.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryBTreeOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryBTreeOperationsHelper.java index f91df70..75e714b 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryBTreeOperationsHelper.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryBTreeOperationsHelper.java @@ -66,7 +66,7 @@ public class SecondaryBTreeOperationsHelper extends SecondaryTreeIndexOperations @Override public JobSpecification buildLoadingJobSpec() throws AlgebricksException { JobSpecification spec = RuntimeUtils.createJobSpecification(metadataProvider.getApplicationContext()); - boolean isEnforcingKeyTypes = index.isEnforcingKeyFields(); + boolean isOverridingKeyFieldTypes = index.isOverridingKeyFieldTypes(); int[] fieldPermutation = createFieldPermutationForBulkLoadOp(index.getKeyFieldNames().size()); IIndexDataflowHelperFactory dataflowHelperFactory = new IndexDataflowHelperFactory( metadataProvider.getStorageComponentProvider().getStorageManager(), secondaryFileSplitProvider); @@ -82,8 +82,8 @@ public class SecondaryBTreeOperationsHelper extends SecondaryTreeIndexOperations // Assign op. AbstractOperatorDescriptor sourceOp = primaryScanOp; - if (isEnforcingKeyTypes && !enforcedItemType.equals(itemType)) { - sourceOp = createCastOp(spec, dataset.getDatasetType()); + if (isOverridingKeyFieldTypes && !enforcedItemType.equals(itemType)) { + sourceOp = createCastOp(spec, dataset.getDatasetType(), index.isEnforced()); spec.connect(new OneToOneConnectorDescriptor(spec), primaryScanOp, 0, sourceOp, 0); } AlgebricksMetaOperatorDescriptor asterixAssignOp = @@ -91,7 +91,7 @@ public class SecondaryBTreeOperationsHelper extends SecondaryTreeIndexOperations // If any of the secondary fields are nullable, then add a select op that filters nulls. AlgebricksMetaOperatorDescriptor selectOp = null; - if (anySecondaryKeyIsNullable || isEnforcingKeyTypes) { + if (anySecondaryKeyIsNullable || isOverridingKeyFieldTypes) { selectOp = createFilterNullsSelectOp(spec, index.getKeyFieldNames().size(), secondaryRecDesc); } @@ -115,7 +115,7 @@ public class SecondaryBTreeOperationsHelper extends SecondaryTreeIndexOperations spec.connect(new OneToOneConnectorDescriptor(spec), secondaryBulkLoadOp, 0, metaOp, 0); root = metaOp; spec.connect(new OneToOneConnectorDescriptor(spec), sourceOp, 0, asterixAssignOp, 0); - if (anySecondaryKeyIsNullable || isEnforcingKeyTypes) { + if (anySecondaryKeyIsNullable || isOverridingKeyFieldTypes) { spec.connect(new OneToOneConnectorDescriptor(spec), asterixAssignOp, 0, selectOp, 0); spec.connect(new OneToOneConnectorDescriptor(spec), selectOp, 0, sortOp, 0); } else { @@ -137,8 +137,8 @@ public class SecondaryBTreeOperationsHelper extends SecondaryTreeIndexOperations // Assign op. IOperatorDescriptor sourceOp = primaryScanOp; - if (isEnforcingKeyTypes && !enforcedItemType.equals(itemType)) { - sourceOp = createCastOp(spec, dataset.getDatasetType()); + if (isOverridingKeyFieldTypes && !enforcedItemType.equals(itemType)) { + sourceOp = createCastOp(spec, dataset.getDatasetType(), index.isEnforced()); spec.connect(new OneToOneConnectorDescriptor(spec), primaryScanOp, 0, sourceOp, 0); } AlgebricksMetaOperatorDescriptor asterixAssignOp = @@ -146,7 +146,7 @@ public class SecondaryBTreeOperationsHelper extends SecondaryTreeIndexOperations // If any of the secondary fields are nullable, then add a select op that filters nulls. AlgebricksMetaOperatorDescriptor selectOp = null; - if (anySecondaryKeyIsNullable || isEnforcingKeyTypes) { + if (anySecondaryKeyIsNullable || isOverridingKeyFieldTypes) { selectOp = createFilterNullsSelectOp(spec, index.getKeyFieldNames().size(), secondaryRecDesc); } @@ -162,7 +162,7 @@ public class SecondaryBTreeOperationsHelper extends SecondaryTreeIndexOperations // Connect the operators. spec.connect(new OneToOneConnectorDescriptor(spec), keyProviderOp, 0, primaryScanOp, 0); spec.connect(new OneToOneConnectorDescriptor(spec), sourceOp, 0, asterixAssignOp, 0); - if (anySecondaryKeyIsNullable || isEnforcingKeyTypes) { + if (anySecondaryKeyIsNullable || isOverridingKeyFieldTypes) { spec.connect(new OneToOneConnectorDescriptor(spec), asterixAssignOp, 0, selectOp, 0); spec.connect(new OneToOneConnectorDescriptor(spec), selectOp, 0, sortOp, 0); } else { @@ -201,7 +201,7 @@ public class SecondaryBTreeOperationsHelper extends SecondaryTreeIndexOperations metadataProvider.getFormat().getBinaryComparatorFactoryProvider(); // Record column is 0 for external datasets, numPrimaryKeys for internal ones int recordColumn = dataset.getDatasetType() == DatasetType.INTERNAL ? numPrimaryKeys : 0; - boolean isEnforcingKeyTypes = index.isEnforcingKeyFields(); + boolean isOverridingKeyFieldTypes = index.isOverridingKeyFieldTypes(); for (int i = 0; i < numSecondaryKeys; i++) { ARecordType sourceType; int sourceColumn; @@ -214,7 +214,8 @@ public class SecondaryBTreeOperationsHelper extends SecondaryTreeIndexOperations sourceColumn = recordColumn + 1; } secondaryFieldAccessEvalFactories[i] = metadataProvider.getFormat().getFieldAccessEvaluatorFactory( - isEnforcingKeyTypes ? enforcedItemType : sourceType, index.getKeyFieldNames().get(i), sourceColumn); + isOverridingKeyFieldTypes ? enforcedItemType : sourceType, index.getKeyFieldNames().get(i), + sourceColumn); Pair keyTypePair = Index.getNonNullableOpenFieldType(index.getKeyFieldTypes().get(i), index.getKeyFieldNames().get(i), sourceType); IAType keyType = keyTypePair.first; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java index 21ec8de..d11ba21 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java @@ -19,6 +19,7 @@ package org.apache.asterix.metadata.utils; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -40,13 +41,14 @@ import org.apache.asterix.metadata.entities.Dataset; import org.apache.asterix.metadata.entities.Index; import org.apache.asterix.metadata.entities.InternalDatasetDetails; import org.apache.asterix.metadata.lock.ExternalDatasetsRegistry; +import org.apache.asterix.om.functions.BuiltinFunctions; +import org.apache.asterix.om.functions.FunctionManagerHolder; +import org.apache.asterix.om.functions.IFunctionDescriptor; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.IAType; import org.apache.asterix.runtime.evaluators.functions.AndDescriptor; -import org.apache.asterix.runtime.evaluators.functions.CastTypeDescriptor; import org.apache.asterix.runtime.evaluators.functions.IsUnknownDescriptor; import org.apache.asterix.runtime.evaluators.functions.NotDescriptor; -import org.apache.commons.collections4.IteratorUtils; import org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint; import org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraintHelper; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; @@ -130,11 +132,9 @@ public abstract class SecondaryIndexOperationsHelper { private static Pair getEnforcedType(Index index, ARecordType aRecordType, ARecordType metaRecordType) throws AlgebricksException { - return index.isEnforcingKeyFields() - ? TypeUtil.createEnforcedType(aRecordType, metaRecordType, - IteratorUtils.toList(IteratorUtils.singletonIterator(index))) + return index.isOverridingKeyFieldTypes() + ? TypeUtil.createEnforcedType(aRecordType, metaRecordType, Collections.singletonList(index)) : new Pair<>(null, null); - } public static SecondaryIndexOperationsHelper createIndexOperationsHelper(Dataset dataset, Index index, @@ -292,8 +292,10 @@ public abstract class SecondaryIndexOperationsHelper { return asterixAssignOp; } - protected AlgebricksMetaOperatorDescriptor createCastOp(JobSpecification spec, DatasetType dsType) { - CastTypeDescriptor castFuncDesc = (CastTypeDescriptor) CastTypeDescriptor.FACTORY.createFunctionDescriptor(); + protected AlgebricksMetaOperatorDescriptor createCastOp(JobSpecification spec, DatasetType dsType, + boolean strictCast) throws AlgebricksException { + IFunctionDescriptor castFuncDesc = FunctionManagerHolder.getFunctionManager() + .lookupFunction(strictCast ? BuiltinFunctions.CAST_TYPE : BuiltinFunctions.CAST_TYPE_LAX); castFuncDesc.setImmutableStates(enforcedItemType, itemType); int[] outColumns = new int[1]; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryInvertedIndexOperationsHelper.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryInvertedIndexOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryInvertedIndexOperationsHelper.java index 23854e3..cb15b98 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryInvertedIndexOperationsHelper.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryInvertedIndexOperationsHelper.java @@ -86,7 +86,7 @@ public class SecondaryInvertedIndexOperationsHelper extends SecondaryTreeIndexOp protected void setSecondaryRecDescAndComparators() throws AlgebricksException { int numSecondaryKeys = index.getKeyFieldNames().size(); IndexType indexType = index.getIndexType(); - boolean isEnforcingKeyTypes = index.isEnforcingKeyFields(); + boolean isOverridingKeyFieldTypes = index.isOverridingKeyFieldTypes(); // Sanity checks. if (numPrimaryKeys > 1) { throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_INDEX_FOR_DATASET_WITH_COMPOSITE_PRIMARY_INDEX, @@ -114,7 +114,8 @@ public class SecondaryInvertedIndexOperationsHelper extends SecondaryTreeIndexOp ITypeTraitProvider typeTraitProvider = FormatUtils.getDefaultFormat().getTypeTraitProvider(); if (numSecondaryKeys > 0) { secondaryFieldAccessEvalFactories[0] = FormatUtils.getDefaultFormat().getFieldAccessEvaluatorFactory( - isEnforcingKeyTypes ? enforcedItemType : itemType, index.getKeyFieldNames().get(0), numPrimaryKeys); + isOverridingKeyFieldTypes ? enforcedItemType : itemType, index.getKeyFieldNames().get(0), + numPrimaryKeys); Pair keyTypePair = Index.getNonNullableOpenFieldType(index.getKeyFieldTypes().get(0), index.getKeyFieldNames().get(0), itemType); secondaryKeyType = keyTypePair.first; @@ -216,10 +217,10 @@ public class SecondaryInvertedIndexOperationsHelper extends SecondaryTreeIndexOp jobId); IOperatorDescriptor sourceOp = primaryScanOp; - boolean isEnforcingKeyTypes = index.isEnforcingKeyFields(); + boolean isOverridingKeyFieldTypes = index.isOverridingKeyFieldTypes(); int numSecondaryKeys = index.getKeyFieldNames().size(); - if (isEnforcingKeyTypes && !enforcedItemType.equals(itemType)) { - sourceOp = createCastOp(spec, dataset.getDatasetType()); + if (isOverridingKeyFieldTypes && !enforcedItemType.equals(itemType)) { + sourceOp = createCastOp(spec, dataset.getDatasetType(), index.isEnforced()); spec.connect(new OneToOneConnectorDescriptor(spec), primaryScanOp, 0, sourceOp, 0); } AlgebricksMetaOperatorDescriptor asterixAssignOp = createAssignOp(spec, numSecondaryKeys, secondaryRecDesc); @@ -227,7 +228,7 @@ public class SecondaryInvertedIndexOperationsHelper extends SecondaryTreeIndexOp // If any of the secondary fields are nullable, then add a select op // that filters nulls. AlgebricksMetaOperatorDescriptor selectOp = null; - if (anySecondaryKeyIsNullable || isEnforcingKeyTypes) { + if (anySecondaryKeyIsNullable || isOverridingKeyFieldTypes) { selectOp = createFilterNullsSelectOp(spec, numSecondaryKeys, secondaryRecDesc); } @@ -248,7 +249,7 @@ public class SecondaryInvertedIndexOperationsHelper extends SecondaryTreeIndexOp // Connect the operators. spec.connect(new OneToOneConnectorDescriptor(spec), keyProviderOp, 0, primaryScanOp, 0); spec.connect(new OneToOneConnectorDescriptor(spec), sourceOp, 0, asterixAssignOp, 0); - if (anySecondaryKeyIsNullable || isEnforcingKeyTypes) { + if (anySecondaryKeyIsNullable || isOverridingKeyFieldTypes) { spec.connect(new OneToOneConnectorDescriptor(spec), asterixAssignOp, 0, selectOp, 0); spec.connect(new OneToOneConnectorDescriptor(spec), selectOp, 0, tokenizerOp, 0); } else { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryRTreeOperationsHelper.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryRTreeOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryRTreeOperationsHelper.java index f3ed3df..08ee0aa 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryRTreeOperationsHelper.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryRTreeOperationsHelper.java @@ -83,7 +83,7 @@ public class SecondaryRTreeOperationsHelper extends SecondaryTreeIndexOperations protected void setSecondaryRecDescAndComparators() throws AlgebricksException { List> secondaryKeyFields = index.getKeyFieldNames(); int numSecondaryKeys = secondaryKeyFields.size(); - boolean isEnforcingKeyTypes = index.isEnforcingKeyFields(); + boolean isOverridingKeyFieldTypes = index.isOverridingKeyFieldTypes(); if (numSecondaryKeys != 1) { throw new AsterixException("Cannot use " + numSecondaryKeys + " fields as a key for the R-tree index. " + "There can be only one field as a key for the R-tree index."); @@ -100,7 +100,7 @@ public class SecondaryRTreeOperationsHelper extends SecondaryTreeIndexOperations numNestedSecondaryKeyFields = numDimensions * 2; int recordColumn = dataset.getDatasetType() == DatasetType.INTERNAL ? numPrimaryKeys : 0; secondaryFieldAccessEvalFactories = - metadataProvider.getFormat().createMBRFactory(isEnforcingKeyTypes ? enforcedItemType : itemType, + metadataProvider.getFormat().createMBRFactory(isOverridingKeyFieldTypes ? enforcedItemType : itemType, secondaryKeyFields.get(0), recordColumn, numDimensions, filterFieldName, isPointMBR); secondaryComparatorFactories = new IBinaryComparatorFactory[numNestedSecondaryKeyFields]; valueProviderFactories = new IPrimitiveValueProviderFactory[numNestedSecondaryKeyFields]; @@ -195,7 +195,7 @@ public class SecondaryRTreeOperationsHelper extends SecondaryTreeIndexOperations isPointMBR ? numNestedSecondaryKeyFields / 2 : numNestedSecondaryKeyFields; RecordDescriptor secondaryRecDescConsideringPointMBR = isPointMBR ? secondaryRecDescForPointMBR : secondaryRecDesc; - boolean isEnforcingKeyTypes = index.isEnforcingKeyFields(); + boolean isOverridingKeyFieldTypes = index.isOverridingKeyFieldTypes(); IIndexDataflowHelperFactory indexDataflowHelperFactory = new IndexDataflowHelperFactory( metadataProvider.getStorageComponentProvider().getStorageManager(), secondaryFileSplitProvider); if (dataset.getDatasetType() == DatasetType.INTERNAL) { @@ -209,8 +209,8 @@ public class SecondaryRTreeOperationsHelper extends SecondaryTreeIndexOperations // Assign op. IOperatorDescriptor sourceOp = primaryScanOp; - if (isEnforcingKeyTypes && !enforcedItemType.equals(itemType)) { - sourceOp = createCastOp(spec, dataset.getDatasetType()); + if (isOverridingKeyFieldTypes && !enforcedItemType.equals(itemType)) { + sourceOp = createCastOp(spec, dataset.getDatasetType(), index.isEnforced()); spec.connect(new OneToOneConnectorDescriptor(spec), primaryScanOp, 0, sourceOp, 0); } AlgebricksMetaOperatorDescriptor asterixAssignOp = createAssignOp(spec, @@ -218,7 +218,7 @@ public class SecondaryRTreeOperationsHelper extends SecondaryTreeIndexOperations // If any of the secondary fields are nullable, then add a select op that filters nulls. AlgebricksMetaOperatorDescriptor selectOp = null; - if (anySecondaryKeyIsNullable || isEnforcingKeyTypes) { + if (anySecondaryKeyIsNullable || isOverridingKeyFieldTypes) { selectOp = createFilterNullsSelectOp(spec, numNestedSecondaryKeFieldsConsideringPointMBR, secondaryRecDescConsideringPointMBR); } @@ -236,7 +236,7 @@ public class SecondaryRTreeOperationsHelper extends SecondaryTreeIndexOperations // Connect the operators. spec.connect(new OneToOneConnectorDescriptor(spec), keyProviderOp, 0, primaryScanOp, 0); spec.connect(new OneToOneConnectorDescriptor(spec), sourceOp, 0, asterixAssignOp, 0); - if (anySecondaryKeyIsNullable || isEnforcingKeyTypes) { + if (anySecondaryKeyIsNullable || isOverridingKeyFieldTypes) { spec.connect(new OneToOneConnectorDescriptor(spec), asterixAssignOp, 0, selectOp, 0); spec.connect(new OneToOneConnectorDescriptor(spec), selectOp, 0, sortOp, 0); } else { @@ -256,8 +256,8 @@ public class SecondaryRTreeOperationsHelper extends SecondaryTreeIndexOperations // Create external indexing scan operator ExternalScanOperatorDescriptor primaryScanOp = createExternalIndexingOp(spec); AbstractOperatorDescriptor sourceOp = primaryScanOp; - if (isEnforcingKeyTypes && !enforcedItemType.equals(itemType)) { - sourceOp = createCastOp(spec, dataset.getDatasetType()); + if (isOverridingKeyFieldTypes && !enforcedItemType.equals(itemType)) { + sourceOp = createCastOp(spec, dataset.getDatasetType(), index.isEnforced()); spec.connect(new OneToOneConnectorDescriptor(spec), primaryScanOp, 0, sourceOp, 0); } // Assign op. @@ -266,7 +266,7 @@ public class SecondaryRTreeOperationsHelper extends SecondaryTreeIndexOperations // If any of the secondary fields are nullable, then add a select op that filters nulls. AlgebricksMetaOperatorDescriptor selectOp = null; - if (anySecondaryKeyIsNullable || isEnforcingKeyTypes) { + if (anySecondaryKeyIsNullable || isOverridingKeyFieldTypes) { selectOp = createFilterNullsSelectOp(spec, numNestedSecondaryKeFieldsConsideringPointMBR, secondaryRecDescConsideringPointMBR); } @@ -294,7 +294,7 @@ public class SecondaryRTreeOperationsHelper extends SecondaryTreeIndexOperations spec.connect(new OneToOneConnectorDescriptor(spec), secondaryBulkLoadOp, 0, metaOp, 0); root = metaOp; spec.connect(new OneToOneConnectorDescriptor(spec), sourceOp, 0, asterixAssignOp, 0); - if (anySecondaryKeyIsNullable || isEnforcingKeyTypes) { + if (anySecondaryKeyIsNullable || isOverridingKeyFieldTypes) { spec.connect(new OneToOneConnectorDescriptor(spec), asterixAssignOp, 0, selectOp, 0); spec.connect(new OneToOneConnectorDescriptor(spec), selectOp, 0, sortOp, 0); } else { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/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 5a2f399..4ef3933 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 @@ -54,7 +54,7 @@ public class TypeUtil { ARecordType enforcedRecordType = recordType; ARecordType enforcedMetaType = metaType; for (Index index : indexes) { - if (!index.isSecondaryIndex() || !index.isEnforcingKeyFields()) { + if (!index.isSecondaryIndex() || !index.isOverridingKeyFieldTypes()) { continue; } if (index.hasMetaFields()) { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java b/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java index 46bacdd..fe76c6b 100644 --- a/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java +++ b/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java @@ -68,7 +68,7 @@ public class IndexTupleTranslatorTest { Index index = new Index("test", "d1", "i1", IndexType.BTREE, Collections.singletonList(Collections.singletonList("row_id")), indicator == null ? null : Collections.singletonList(indicator), - Collections.singletonList(BuiltinType.AINT64), -1, false, false, 0); + Collections.singletonList(BuiltinType.AINT64), -1, false, false, false, 0); MetadataNode mockMetadataNode = mock(MetadataNode.class); when(mockMetadataNode.getDatatype(any(), anyString(), anyString())).thenReturn(new Datatype("test", "d1", http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java index ded0eca..5be58cb 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java @@ -45,7 +45,7 @@ import org.apache.hyracks.api.dataflow.value.IMissingWriterFactory; import org.apache.hyracks.api.dataflow.value.IPredicateEvaluatorFactoryProvider; public interface IDataFormat { - public void registerRuntimeFunctions(List funcDescriptor) throws AlgebricksException; + public void registerRuntimeFunctions(List funcDescriptor); public ISerializerDeserializerProvider getSerdeProvider(); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionManager.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionManager.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionManager.java index ce1dac1..f7c11ff 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionManager.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionManager.java @@ -23,9 +23,9 @@ import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; public interface IFunctionManager extends Iterable { - public void registerFunction(IFunctionDescriptorFactory descriptorFactory) throws AlgebricksException; + public void registerFunction(IFunctionDescriptorFactory descriptorFactory); - public void unregisterFunction(IFunctionDescriptorFactory descriptorFactory) throws AlgebricksException; + public void unregisterFunction(IFunctionDescriptorFactory descriptorFactory); public IFunctionDescriptor lookupFunction(FunctionIdentifier fid) throws AlgebricksException; } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/8ba59445/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/FunctionManagerImpl.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/FunctionManagerImpl.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/FunctionManagerImpl.java index 034cfeb..ae9a700 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/FunctionManagerImpl.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/FunctionManagerImpl.java @@ -49,14 +49,13 @@ public class FunctionManagerImpl implements IFunctionManager { } @Override - public synchronized void registerFunction(IFunctionDescriptorFactory descriptorFactory) throws AlgebricksException { + public synchronized void registerFunction(IFunctionDescriptorFactory descriptorFactory) { FunctionIdentifier fid = descriptorFactory.createFunctionDescriptor().getIdentifier(); functions.put(new Pair(fid, fid.getArity()), descriptorFactory); } @Override - public synchronized void unregisterFunction(IFunctionDescriptorFactory descriptorFactory) - throws AlgebricksException { + public synchronized void unregisterFunction(IFunctionDescriptorFactory descriptorFactory) { FunctionIdentifier fid = descriptorFactory.createFunctionDescriptor().getIdentifier(); Pair key = new Pair<>(fid, fid.getArity()); functions.remove(key);