>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]>

Reply via email to