>From Janhavi Tripurwar <[email protected]>:
Janhavi Tripurwar has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21383?usp=email )
Change subject: [ASTERIXDB-3784][COMP]: Fix internal error in CREATE OR REPLACE
VIEW
......................................................................
[ASTERIXDB-3784][COMP]: Fix internal error in CREATE OR REPLACE VIEW
Details:
Issue: Replacing an untyped view with a typed view crashes because it was
assumed that an inline datatype already exists.
Fix: Check the existing view state to properly add, update, or clean up
inline datatypes across all transition types.
Change-Id: I71acde09496d493fc044cb69b6838c1cd18c9bbb
---
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
A
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/view/create-view-8-replace-typed/create-view-8-replace-typed.1.ddl.sqlpp
A
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/view/create-view-8-replace-typed/create-view-8-replace-typed.2.update.sqlpp
A
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/view/create-view-8-replace-typed/create-view-8-replace-typed.3.query.sqlpp
A
asterixdb/asterix-app/src/test/resources/runtimets/results/view/create-view-8-replace-typed/create-view-8-replace-typed.3.adm
M asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
6 files changed, 96 insertions(+), 1 deletion(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/83/21383/1
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 6d14787..71788e1 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -3210,10 +3210,21 @@
}
MetadataManager.INSTANCE.addDataset(mdTxnCtx, view);
} else {
+ boolean existingItemTypeIsInline =
+ TypeUtil.isDatasetInlineTypeName(existingDataset,
existingDataset.getItemTypeDatabaseName(),
+ existingDataset.getItemTypeDataverseName(),
existingDataset.getItemTypeName());
if (itemTypeIsInline) {
- MetadataManager.INSTANCE.updateDatatype(mdTxnCtx,
itemTypeEntity);
+ if (existingItemTypeIsInline) {
+ MetadataManager.INSTANCE.updateDatatype(mdTxnCtx,
itemTypeEntity);
+ } else {
+ MetadataManager.INSTANCE.addDatatype(mdTxnCtx,
itemTypeEntity);
+ }
}
MetadataManager.INSTANCE.updateDataset(mdTxnCtx, view);
+ if (!itemTypeIsInline && existingItemTypeIsInline) {
+ MetadataManager.INSTANCE.dropDatatype(mdTxnCtx,
existingDataset.getItemTypeDatabaseName(),
+ existingDataset.getItemTypeDataverseName(),
existingDataset.getItemTypeName());
+ }
}
beforeTxnCommit(metadataProvider, creator,
EntityDetails.newView(databaseName, dataverseName, viewName));
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/view/create-view-8-replace-typed/create-view-8-replace-typed.1.ddl.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/view/create-view-8-replace-typed/create-view-8-replace-typed.1.ddl.sqlpp
new file mode 100644
index 0000000..21080e6
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/view/create-view-8-replace-typed/create-view-8-replace-typed.1.ddl.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * 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 test1 if exists;
+create dataverse test1;
+
+use test1;
+
+create dataset t1(c_id int32 not unknown) open type primary key c_id;
+
+create view v1 as select c_id, c_val from t1;
+
+-- replace the untyped view with a typed one
+create or replace view v1(c_id int32, c_val int64) default null as select
c_id, c_val from t1;
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/view/create-view-8-replace-typed/create-view-8-replace-typed.2.update.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/view/create-view-8-replace-typed/create-view-8-replace-typed.2.update.sqlpp
new file mode 100644
index 0000000..8da731c
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/view/create-view-8-replace-typed/create-view-8-replace-typed.2.update.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 test1;
+
+insert into t1 ([
+ { 'c_id': 1, 'c_val': 100 },
+ { 'c_id': 2 }
+]);
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/view/create-view-8-replace-typed/create-view-8-replace-typed.3.query.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/view/create-view-8-replace-typed/create-view-8-replace-typed.3.query.sqlpp
new file mode 100644
index 0000000..e77504f
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/view/create-view-8-replace-typed/create-view-8-replace-typed.3.query.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 test1;
+
+select c_id, c_val from v1 order by c_id;
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/view/create-view-8-replace-typed/create-view-8-replace-typed.3.adm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/view/create-view-8-replace-typed/create-view-8-replace-typed.3.adm
new file mode 100644
index 0000000..41059c9
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/view/create-view-8-replace-typed/create-view-8-replace-typed.3.adm
@@ -0,0 +1,2 @@
+{ "c_id": 1, "c_val": 100 }
+{ "c_id": 2, "c_val": null }
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
index d4437c0..667f6be 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
@@ -14060,6 +14060,11 @@
</compilation-unit>
</test-case>
<test-case FilePath="view">
+ <compilation-unit name="create-view-8-replace-typed">
+ <output-dir compare="Text">create-view-8-replace-typed</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="view">
<compilation-unit name="drop-dataverse-1">
<output-dir compare="Text">drop-dataverse-1</output-dir>
</compilation-unit>
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21383?usp=email
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I71acde09496d493fc044cb69b6838c1cd18c9bbb
Gerrit-Change-Number: 21383
Gerrit-PatchSet: 1
Gerrit-Owner: Janhavi Tripurwar <[email protected]>