Merge branch 'gerrit/neo'

Change-Id: Id189559017248b3c9ecdfd54fa7c6d84aa21be08
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/BaseClientRequest.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/BaseClientRequest.java
index eaca53b..99cda09 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/BaseClientRequest.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/BaseClientRequest.java
@@ -90,7 +90,7 @@
 
     @Override
     public String toJson() {
-        return JSONUtil.convertNodeOrThrow(asJson());
+        return JSONUtil.convertNodeUnchecked(asJson());
     }
 
     protected ObjectNode asJson() {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
index 1d226dd..ea80ea6 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
@@ -18,11 +18,9 @@
  */
 package org.apache.asterix.translator;
 
-import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.Deque;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -125,6 +123,7 @@
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.DistinctOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.EmptyTupleSourceOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.InnerJoinOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator;
@@ -155,7 +154,6 @@
     public static final String REWRITE_IN_AS_OR_OPTION = "rewrite_in_as_or";
     private static final boolean REWRITE_IN_AS_OR_OPTION_DEFAULT = true;
 
-    private Deque<Mutable<ILogicalOperator>> uncorrelatedRightBranchStack = new ArrayDeque<>();
     private final Map<VarIdentifier, IAObject> externalVars;
     private final boolean translateInAsOr;
 
@@ -303,12 +301,10 @@
             throws CompilationException {
         Mutable<ILogicalOperator> inputSrc = arg;
         Pair<ILogicalOperator, LogicalVariable> topUnnest = null;
-        uncorrelatedRightBranchStack.push(inputSrc);
         for (FromTerm fromTerm : fromClause.getFromTerms()) {
             topUnnest = fromTerm.accept(this, inputSrc);
             inputSrc = new MutableObject<>(topUnnest.first);
         }
-        uncorrelatedRightBranchStack.pop();
         return topUnnest;
     }
 
@@ -345,8 +341,10 @@
     public Pair<ILogicalOperator, LogicalVariable> visit(JoinClause joinClause, Mutable<ILogicalOperator> leftInputRef)
             throws CompilationException {
         SourceLocation sourceLoc = joinClause.getSourceLocation();
-        if (joinClause.getJoinType() == JoinType.INNER && !context.inSubplan()) {
-            Mutable<ILogicalOperator> rightInputRef = uncorrelatedRightBranchStack.peek();
+        if (joinClause.getJoinType() == JoinType.INNER && !hasFreeVariables(joinClause.getRightExpression())) {
+            EmptyTupleSourceOperator ets = new EmptyTupleSourceOperator();
+            ets.setSourceLocation(joinClause.getSourceLocation());
+            Mutable<ILogicalOperator> rightInputRef = new MutableObject<>(ets);
             Pair<ILogicalOperator, LogicalVariable> rightBranch =
                     generateUnnestForBinaryCorrelateRightBranch(joinClause, rightInputRef, false, null);
             // A join operator with condition TRUE.
@@ -509,6 +507,16 @@
         }
     }
 
+    private boolean hasFreeVariables(Expression expr) throws CompilationException {
+        Set<VariableExpr> freeVars = SqlppRewriteUtil.getFreeVariable(expr);
+        for (VariableExpr varRef : freeVars) {
+            if (!SqlppVariableUtil.isExternalVariableReference(varRef)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private static IAlgebricksConstantValue translateLeftOuterMissingValue(Literal.Type type)
             throws CompilationException {
         switch (type) {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
index 0d6a452..a2b26e7 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
@@ -236,7 +236,7 @@
                         break;
                     default:
                         throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                                "The field \"" + displayFieldName + "\" which is of type " + fieldType.getTypeTag()
+                                "The field '" + displayFieldName + "' which is of type " + fieldType.getTypeTag()
                                         + " cannot be indexed using the BTree index.");
                 }
                 break;
@@ -251,14 +251,14 @@
                         break;
                     default:
                         throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                                "The field \"" + displayFieldName + "\" which is of type " + fieldType.getTypeTag()
+                                "The field '" + displayFieldName + "' which is of type " + fieldType.getTypeTag()
                                         + " cannot be indexed using the RTree index.");
                 }
                 break;
             case LENGTH_PARTITIONED_NGRAM_INVIX:
                 if (fieldType.getTypeTag() != ATypeTag.STRING) {
                     throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                            "The field \"" + displayFieldName + "\" which is of type " + fieldType.getTypeTag()
+                            "The field '" + displayFieldName + "' which is of type " + fieldType.getTypeTag()
                                     + " cannot be indexed using the Length Partitioned N-Gram index.");
                 }
                 break;
@@ -270,14 +270,14 @@
                         break;
                     default:
                         throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                                "The field \"" + displayFieldName + "\" which is of type " + fieldType.getTypeTag()
+                                "The field '" + displayFieldName + "' which is of type " + fieldType.getTypeTag()
                                         + " cannot be indexed using the Length Partitioned Keyword index.");
                 }
                 break;
             case SINGLE_PARTITION_NGRAM_INVIX:
                 if (fieldType.getTypeTag() != ATypeTag.STRING) {
                     throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                            "The field \"" + displayFieldName + "\" which is of type " + fieldType.getTypeTag()
+                            "The field '" + displayFieldName + "' which is of type " + fieldType.getTypeTag()
                                     + " cannot be indexed using the N-Gram index.");
                 }
                 break;
@@ -289,7 +289,7 @@
                         break;
                     default:
                         throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
-                                "The field \"" + displayFieldName + "\" which is of type " + fieldType.getTypeTag()
+                                "The field '" + displayFieldName + "' which is of type " + fieldType.getTypeTag()
                                         + " cannot be indexed using the Keyword index.");
                 }
                 break;
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java
index bdc1bd7..eaeb082 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java
@@ -83,7 +83,7 @@
             }
             JSONUtil.writeNode(responseWriter, json);
         } catch (IllegalArgumentException e) { // NOSONAR - exception not logged or rethrown
-            response.setStatus(HttpResponseStatus.NOT_FOUND);
+            sendError(response, HttpResponseStatus.NOT_FOUND);
         } catch (Exception e) {
             LOGGER.log(Level.INFO, "exception thrown for " + request, e);
             response.setStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR);
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java
index 9876eed..5e4b376 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java
@@ -79,10 +79,10 @@
         } catch (RejectedExecutionException e) {
             // we must be shutting down, return 503
             LOGGER.info("RejectedExecutionException while servicing request; returning 503", e);
-            sendError(response, HttpResponseStatus.SERVICE_UNAVAILABLE, null);
+            sendError(response, HttpResponseStatus.SERVICE_UNAVAILABLE);
         } catch (Exception e) {
             LOGGER.warn("exception while servicing request; returning 500", e);
-            sendError(response, HttpResponseStatus.INTERNAL_SERVER_ERROR, e.toString());
+            sendError(response, HttpResponseStatus.INTERNAL_SERVER_ERROR);
         }
         responseWriter.flush();
     }
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCUdfApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCUdfApiServlet.java
index 9efb6f8..8cf70b2 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCUdfApiServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCUdfApiServlet.java
@@ -295,7 +295,8 @@
         responseWriter.flush();
     }
 
-    protected boolean isRequestPermittedForWrite(IServletRequest request, IServletResponse response) {
+    protected boolean isRequestPermittedForWrite(IServletRequest request, IServletResponse response)
+            throws IOException {
         if (!isRequestOnLoopback(request)) {
             rejectForbidden(response);
             return false;
@@ -313,20 +314,21 @@
         }
     }
 
-    protected static void rejectForbidden(IServletResponse response) {
-        response.setStatus(HttpResponseStatus.FORBIDDEN);
-        response.writer().write("{ \"error\": \"Forbidden\" }");
+    protected void rejectForbidden(IServletResponse response) throws IOException {
+        // TODO: why this JSON format, do we use this anywhere else?
+        sendError(response, HttpUtil.ContentType.APPLICATION_JSON, HttpResponseStatus.FORBIDDEN,
+                "{ \"error\": \"Forbidden\" }");
     }
 
     @Override
-    protected void post(IServletRequest request, IServletResponse response) {
+    protected void post(IServletRequest request, IServletResponse response) throws IOException {
         if (isRequestPermittedForWrite(request, response)) {
             handleModification(request, response, LibraryOperation.UPSERT);
         }
     }
 
     @Override
-    protected void delete(IServletRequest request, IServletResponse response) {
+    protected void delete(IServletRequest request, IServletResponse response) throws IOException {
         if (isRequestPermittedForWrite(request, response)) {
             handleModification(request, response, LibraryOperation.DELETE);
         }
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java
index 6b5cae2..284929f 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java
@@ -181,10 +181,9 @@
     @Override
     public synchronized IActiveEntityEventsListener[] getEventListeners() {
         if (LOGGER.isTraceEnabled()) {
-            LOGGER.trace("getEventListeners() was called");
-            LOGGER.trace("returning " + entityEventListeners.size() + " Listeners");
+            LOGGER.trace("getEventListeners() returning {} listeners", entityEventListeners.size());
         }
-        return entityEventListeners.values().toArray(new IActiveEntityEventsListener[entityEventListeners.size()]);
+        return entityEventListeners.values().toArray(IActiveEntityEventsListener[]::new);
     }
 
     @Override
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/AbstractCodedMessagePrinter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/AbstractCodedMessagePrinter.java
index 6270c4c..f1eb315 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/AbstractCodedMessagePrinter.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/AbstractCodedMessagePrinter.java
@@ -26,6 +26,9 @@
 import org.apache.asterix.common.api.IResponseFieldPrinter;
 import org.apache.hyracks.util.JSONUtil;
 
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
 public abstract class AbstractCodedMessagePrinter implements IResponseFieldPrinter {
 
     private enum CodedMessageField {
@@ -68,4 +71,14 @@
         }
         pw.print("]");
     }
+
+    public ObjectNode appendTo(ObjectNode objectNode) {
+        ArrayNode array = objectNode.putArray(getName());
+        messages.forEach(codedMessage -> {
+            ObjectNode error = array.addObject();
+            error.put(CodedMessageField.CODE.str(), codedMessage.getCode());
+            error.put(CodedMessageField.MSG.str(), codedMessage.getMessage());
+        });
+        return objectNode;
+    }
 }
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 eb6c779..f7da31d 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
@@ -1248,8 +1248,8 @@
                                 // allow overriding the type of the closed-field only if CAST modifier is used
                                 if (!stmtCreateIndex.hasCastDefaultNull()) {
                                     throw new CompilationException(ErrorCode.COMPILATION_ERROR,
-                                            indexedElement.getSourceLocation(), "Typed index on \"" + projectPath
-                                                    + "\" field could be created only for open datatype");
+                                            indexedElement.getSourceLocation(), "Typed index on '" + projectPath
+                                                    + "' field could be created only for open datatype");
                                 }
                             }
                         }
@@ -1631,9 +1631,9 @@
                             && !existingIndexKeyFieldTypes.equals(indexKeyFieldTypes)) {
                         throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
                                 "Cannot create index " + index.getIndexName() + " , enforced index "
-                                        + existingIndex.getIndexName() + " on field \""
-                                        + StringUtils.join(indexKeyFieldNames, ',')
-                                        + "\" is already defined with type \"" + existingIndexKeyFieldTypes + "\"");
+                                        + existingIndex.getIndexName() + " on field '"
+                                        + StringUtils.join(indexKeyFieldNames, ',') + "' is already defined with type '"
+                                        + existingIndexKeyFieldTypes + "'");
                     }
                 }
             }
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ResultExtractor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ResultExtractor.java
index f83ddb2..091fc20 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ResultExtractor.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/ResultExtractor.java
@@ -227,7 +227,7 @@
             final String fieldName = fieldNameIter.next();
             final ResultField fieldKind = ResultField.ofFieldName(fieldName.split("-")[0]);
             if (fieldKind == null) {
-                throw new AsterixException("Unanticipated field \"" + fieldName + "\"");
+                throw new AsterixException("Unanticipated field '" + fieldName + "'");
             }
             if (!resultFields.contains(fieldKind)) {
                 continue;
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml b/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml
index dc6ae3d..e642922 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml
+++ b/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml
@@ -498,7 +498,7 @@
     <test-case FilePath="exception">
       <compilation-unit name="issue_255_create_dataset_error_1">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1014: Field "name" is not found (in line 34, at column 1)</expected-error>
+        <expected-error>ASX1014: Field 'name' is not found (in line 34, at column 1)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
@@ -511,56 +511,56 @@
     <test-case FilePath="exception">
       <compilation-unit name="issue_255_create_feed_error">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>org.json.JSONException: JSONObject["summary"] not found</expected-error>
+        <expected-error>org.json.JSONException: JSONObject['summary'] not found</expected-error>
       </compilation-unit>
     </test-case> -->
     <!-- This case should be fixed to return a proper message rather than NPE -->
     <test-case FilePath="exception">
       <compilation-unit name="issue_266_create_dataset_error_1">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1014: Field "point" is not found (in line 34, at column 1)</expected-error>
+        <expected-error>ASX1014: Field 'point' is not found (in line 34, at column 1)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
       <compilation-unit name="issue_266_create_dataset_error_2">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1021: The primary key field "id" cannot be nullable (in line 34, at column 1)</expected-error>
+        <expected-error>ASX1021: The primary key field 'id' cannot be nullable (in line 34, at column 1)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
       <compilation-unit name="issue_384_create_index_error_1">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1079: Compilation error: The field "[loc]" which is of type point cannot be indexed using the BTree index. (in line 37, at column 33)</expected-error>
+        <expected-error>ASX1079: Compilation error: The field '[loc]' which is of type point cannot be indexed using the BTree index. (in line 37, at column 33)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
       <compilation-unit name="issue_384_create_index_error_2">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1079: Compilation error: The field "[age]" which is of type integer cannot be indexed using the RTree index. (in line 37, at column 33)</expected-error>
+        <expected-error>ASX1079: Compilation error: The field '[age]' which is of type integer cannot be indexed using the RTree index. (in line 37, at column 33)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
       <compilation-unit name="issue_384_create_index_error_3">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1079: Compilation error: The field "[loc]" which is of type point cannot be indexed using the Length Partitioned Keyword index. (in line 37, at column 33)</expected-error>
+        <expected-error>ASX1079: Compilation error: The field '[loc]' which is of type point cannot be indexed using the Length Partitioned Keyword index. (in line 37, at column 33)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
       <compilation-unit name="issue_384_create_index_error_4">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1079: Compilation error: The field "[loc]" which is of type point cannot be indexed using the Length Partitioned Keyword index. (in line 37, at column 33)</expected-error>
+        <expected-error>ASX1079: Compilation error: The field '[loc]' which is of type point cannot be indexed using the Length Partitioned Keyword index. (in line 37, at column 33)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
       <compilation-unit name="issue_384_create_index_error_5">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1079: Compilation error: The field "[loc]" which is of type point cannot be indexed using the Length Partitioned N-Gram index. (in line 37, at column 33)</expected-error>
+        <expected-error>ASX1079: Compilation error: The field '[loc]' which is of type point cannot be indexed using the Length Partitioned N-Gram index. (in line 37, at column 33)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="exception">
       <compilation-unit name="issue_384_create_index_error_6">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1079: Compilation error: The field "[loc]" which is of type point cannot be indexed using the Length Partitioned N-Gram index. (in line 37, at column 33)</expected-error>
+        <expected-error>ASX1079: Compilation error: The field '[loc]' which is of type point cannot be indexed using the Length Partitioned N-Gram index. (in line 37, at column 33)</expected-error>
       </compilation-unit>
     </test-case>
   </test-group>
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/ch2/ch2_q8_subquery.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/ch2/ch2_q8_subquery.sqlpp
new file mode 100644
index 0000000..3b31cf7
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/ch2/ch2_q8_subquery.sqlpp
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+
+/*
+ * Test plan for CH2 Q8
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use test;
+
+create dataset stock(id uuid not unknown) open type primary key `id` autogenerated;
+create dataset orders(id uuid not unknown) open type primary key `id` autogenerated;
+create dataset customer(id uuid not unknown) open type primary key `id` autogenerated;
+create dataset nation(id uuid not unknown) open type primary key `id` autogenerated;
+create dataset supplier(id uuid not unknown) open type primary key `id` autogenerated;
+create dataset item(id uuid not unknown) open type primary key `id` autogenerated;
+create dataset region(id uuid not unknown) open type primary key `id` autogenerated;
+
+SELECT
+  GET_YEAR(DATE(rn1coolis.o_entry_d)) AS l_year,
+  ROUND((SUM(CASE WHEN sun2.n_name = 'Germany' THEN rn1coolis.ol_amount ELSE 0 END) / SUM(rn1coolis.ol_amount)),2)
+  AS mkt_share
+FROM (
+  SELECT rn1cooli.o_entry_d, rn1cooli.ol_amount, s.s_w_id, s.s_i_id
+  FROM stock s
+  JOIN (
+    SELECT o.o_entry_d, ol.ol_i_id, ol.ol_amount, ol.ol_supply_w_id
+    FROM orders o, o.o_orderline ol, item i
+    JOIN (
+      SELECT c.c_id,c.c_w_id, c.c_d_id
+      FROM customer c
+      JOIN (
+        SELECT n1.n_nationkey
+        FROM nation n1, region r
+        WHERE n1.n_regionkey = r.r_regionkey AND r.r_name = 'Europe'
+      ) nr ON nr.n_nationkey = string_to_codepoint(c.c_state)[0]
+    ) cnr ON cnr.c_id = o.o_c_id
+          AND cnr.c_w_id = o.o_w_id AND cnr.c_d_id = o.o_d_id AND i.i_data LIKE '%b'
+          AND i.i_id = ol.ol_i_id AND ol.ol_i_id < 1000
+          AND o.o_entry_d BETWEEN '2017-01-01 00:00:00.000000' AND '2018-12-31 00:00:00.000000'
+  ) rn1cooli ON rn1cooli.ol_i_id = s.s_i_id AND rn1cooli.ol_supply_w_id = s.s_w_id
+) rn1coolis
+JOIN (
+  SELECT su.su_suppkey, n2.n_name
+  FROM supplier su, nation n2
+  WHERE su.su_nationkey = n2.n_nationkey
+) sun2 ON rn1coolis.s_w_id * rn1coolis.s_i_id MOD 10000 = sun2.su_suppkey
+GROUP BY get_year(date(rn1coolis.o_entry_d))
+ORDER BY l_year;
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/joins/inner_right_corr.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/joins/inner_right_corr.sqlpp
new file mode 100644
index 0000000..86821b1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/joins/inner_right_corr.sqlpp
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+
+/*
+ * Test plan when right branch of an inner join uses an outer variable.
+ * Currently this results in NL join
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use test;
+
+create dataset t1(id uuid not unknown) open type primary key id autogenerated;
+create dataset t2(id uuid not unknown) open type primary key id autogenerated;
+
+select a
+from t1
+let a = (select value count(*) from t2 join t1.x as z on t2.y = z.b );
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/ch2/ch2_q8_subquery.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ch2/ch2_q8_subquery.plan
new file mode 100644
index 0000000..3c62aa7
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ch2/ch2_q8_subquery.plan
@@ -0,0 +1,128 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- SORT_MERGE_EXCHANGE [$#1(ASC) ]  |PARTITIONED|
+          -- SORT_GROUP_BY[$$333]  |PARTITIONED|
+                  {
+                    -- AGGREGATE  |LOCAL|
+                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                  }
+            -- HASH_PARTITION_EXCHANGE [$$333]  |PARTITIONED|
+              -- SORT_GROUP_BY[$$278]  |PARTITIONED|
+                      {
+                        -- AGGREGATE  |LOCAL|
+                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                      }
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ASSIGN  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- HYBRID_HASH_JOIN [$$304][$$325]  |PARTITIONED|
+                            -- HASH_PARTITION_EXCHANGE [$$304]  |PARTITIONED|
+                              -- STREAM_PROJECT  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- HYBRID_HASH_JOIN [$$280, $$279][$$290, $$320]  |PARTITIONED|
+                                        -- HASH_PARTITION_EXCHANGE [$$280, $$279]  |PARTITIONED|
+                                          -- STREAM_PROJECT  |PARTITIONED|
+                                            -- ASSIGN  |PARTITIONED|
+                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- DATASOURCE_SCAN (test.stock)  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                        -- HASH_PARTITION_EXCHANGE [$$290, $$320]  |PARTITIONED|
+                                          -- STREAM_PROJECT  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- HYBRID_HASH_JOIN [$$297, $$299, $$301][$$317, $$318, $$316]  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE [$$297, $$299, $$301]  |PARTITIONED|
+                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- HYBRID_HASH_JOIN [$$290][$$308]  |PARTITIONED|
+                                                        -- HASH_PARTITION_EXCHANGE [$$290]  |PARTITIONED|
+                                                          -- STREAM_SELECT  |PARTITIONED|
+                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                              -- ASSIGN  |PARTITIONED|
+                                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                                  -- UNNEST  |PARTITIONED|
+                                                                    -- STREAM_SELECT  |PARTITIONED|
+                                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                                        -- ASSIGN  |PARTITIONED|
+                                                                          -- STREAM_PROJECT  |PARTITIONED|
+                                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                              -- DATASOURCE_SCAN (test.orders)  |PARTITIONED|
+                                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                        -- HASH_PARTITION_EXCHANGE [$$308]  |PARTITIONED|
+                                                          -- STREAM_PROJECT  |PARTITIONED|
+                                                            -- STREAM_SELECT  |PARTITIONED|
+                                                              -- ASSIGN  |PARTITIONED|
+                                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                    -- DATASOURCE_SCAN (test.item)  |PARTITIONED|
+                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE [$$317, $$318, $$316]  |PARTITIONED|
+                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- HYBRID_HASH_JOIN [$$295][$$315]  |PARTITIONED|
+                                                        -- HASH_PARTITION_EXCHANGE [$$295]  |PARTITIONED|
+                                                          -- STREAM_PROJECT  |PARTITIONED|
+                                                            -- ASSIGN  |PARTITIONED|
+                                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                  -- DATASOURCE_SCAN (test.customer)  |PARTITIONED|
+                                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                        -- HASH_PARTITION_EXCHANGE [$$315]  |PARTITIONED|
+                                                          -- STREAM_PROJECT  |PARTITIONED|
+                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                              -- HYBRID_HASH_JOIN [$$292][$$293]  |PARTITIONED|
+                                                                -- HASH_PARTITION_EXCHANGE [$$292]  |PARTITIONED|
+                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                                    -- ASSIGN  |PARTITIONED|
+                                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                        -- REPLICATE  |PARTITIONED|
+                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- STREAM_PROJECT  |PARTITIONED|
+                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                -- DATASOURCE_SCAN (test.nation)  |PARTITIONED|
+                                                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                                                -- HASH_PARTITION_EXCHANGE [$$293]  |PARTITIONED|
+                                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                                    -- STREAM_SELECT  |PARTITIONED|
+                                                                      -- ASSIGN  |PARTITIONED|
+                                                                        -- STREAM_PROJECT  |PARTITIONED|
+                                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                            -- DATASOURCE_SCAN (test.region)  |PARTITIONED|
+                                                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                            -- HASH_PARTITION_EXCHANGE [$$325]  |PARTITIONED|
+                              -- STREAM_PROJECT  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- HYBRID_HASH_JOIN [$$309][$$310]  |PARTITIONED|
+                                    -- HASH_PARTITION_EXCHANGE [$$309]  |PARTITIONED|
+                                      -- STREAM_PROJECT  |PARTITIONED|
+                                        -- ASSIGN  |PARTITIONED|
+                                          -- STREAM_PROJECT  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- DATASOURCE_SCAN (test.supplier)  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                    -- HASH_PARTITION_EXCHANGE [$$310]  |PARTITIONED|
+                                      -- STREAM_PROJECT  |PARTITIONED|
+                                        -- ASSIGN  |PARTITIONED|
+                                          -- STREAM_PROJECT  |PARTITIONED|
+                                            -- ASSIGN  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- REPLICATE  |PARTITIONED|
+                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                        -- DATASOURCE_SCAN (test.nation)  |PARTITIONED|
+                                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/joins/inner_right_corr.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/joins/inner_right_corr.plan
new file mode 100644
index 0000000..37c3434
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/joins/inner_right_corr.plan
@@ -0,0 +1,53 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- PRE_CLUSTERED_GROUP_BY[$$71]  |PARTITIONED|
+                    {
+                      -- AGGREGATE  |LOCAL|
+                        -- AGGREGATE  |LOCAL|
+                          -- STREAM_SELECT  |LOCAL|
+                            -- NESTED_TUPLE_SOURCE  |LOCAL|
+                    }
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- HYBRID_HASH_JOIN [$$71][$$87]  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- DATASOURCE_SCAN (test.t1)  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                      -- HASH_PARTITION_EXCHANGE [$$87]  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- UNNEST  |PARTITIONED|
+                              -- STREAM_PROJECT  |PARTITIONED|
+                                -- SUBPLAN  |PARTITIONED|
+                                        {
+                                          -- AGGREGATE  |LOCAL|
+                                            -- STREAM_SELECT  |LOCAL|
+                                              -- ASSIGN  |LOCAL|
+                                                -- UNNEST  |LOCAL|
+                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                        }
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- NESTED_LOOP  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_PROJECT  |PARTITIONED|
+                                          -- ASSIGN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- DATASOURCE_SCAN (test.t1)  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_PROJECT  |PARTITIONED|
+                                          -- ASSIGN  |PARTITIONED|
+                                            -- STREAM_PROJECT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- DATASOURCE_SCAN (test.t2)  |PARTITIONED|
+                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/query-ASTERIXDB-3006.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/query-ASTERIXDB-3006.plan
index a5264a9..dfaa310 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/query-ASTERIXDB-3006.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/query-ASTERIXDB-3006.plan
@@ -1,49 +1,41 @@
 -- DISTRIBUTE_RESULT  |PARTITIONED|
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
-      -- SORT_MERGE_EXCHANGE [$$64(ASC) ]  |PARTITIONED|
+      -- SORT_MERGE_EXCHANGE [$$55(ASC) ]  |PARTITIONED|
         -- STREAM_PROJECT  |PARTITIONED|
           -- STREAM_SELECT  |PARTITIONED|
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- SORT_GROUP_BY[$$78]  |PARTITIONED|
+              -- SORT_GROUP_BY[$$65]  |PARTITIONED|
                       {
                         -- AGGREGATE  |LOCAL|
                           -- NESTED_TUPLE_SOURCE  |LOCAL|
                       }
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- PRE_CLUSTERED_GROUP_BY[$$48]  |PARTITIONED|
+                -- HASH_PARTITION_EXCHANGE [$$65]  |PARTITIONED|
+                  -- PRE_CLUSTERED_GROUP_BY[$$46]  |PARTITIONED|
                           {
                             -- AGGREGATE  |LOCAL|
                               -- STREAM_SELECT  |LOCAL|
                                 -- NESTED_TUPLE_SOURCE  |LOCAL|
                           }
                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
+                      -- STABLE_SORT [$$46(ASC)]  |PARTITIONED|
                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- HYBRID_HASH_JOIN [$$48][$$61]  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- DATASOURCE_SCAN (test.ds1)  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                            -- HASH_PARTITION_EXCHANGE [$$61]  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- HYBRID_HASH_JOIN [$$b][$$51]  |PARTITIONED|
-                                      -- HASH_PARTITION_EXCHANGE [$$b]  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- UNNEST  |PARTITIONED|
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              -- ASSIGN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- DATASOURCE_SCAN (test.ds1)  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                      -- HASH_PARTITION_EXCHANGE [$$51]  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- ASSIGN  |PARTITIONED|
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- DATASOURCE_SCAN (test.ds2)  |PARTITIONED|
-                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
+                              -- HYBRID_HASH_JOIN [$$b][$$48]  |PARTITIONED|
+                                -- HASH_PARTITION_EXCHANGE [$$b]  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- UNNEST  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN (test.ds1)  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                -- HASH_PARTITION_EXCHANGE [$$48]  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ASSIGN  |PARTITIONED|
+                                      -- STREAM_PROJECT  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN (test.ds2)  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/datetime_01/datetime_01.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/datetime_01/datetime_01.3.query.sqlpp
index 97a9955..eb34dbf 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/datetime_01/datetime_01.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/datetime_01/datetime_01.3.query.sqlpp
@@ -34,7 +34,8 @@
     '-19280329T17493737+0630',
     '-19280301T05493737+0630',
     test.datetime('-19280301T05493737+0630'),
-    date('2020-01-02')
+    date('2020-01-02'),
+    time('01:02:03.456')
 ],
 testNull = [
   null,
@@ -47,7 +48,6 @@
   int64(0),
   float(0),
   double(0),
-  time('01:02:03'),
   duration('PT0H'),
   year_month_duration('P0Y0M'),
   day_time_duration('P0D')
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/datetime_02/datetime_02.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/datetime_02/datetime_02.1.query.sqlpp
index 082d840..dec3016 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/datetime_02/datetime_02.1.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/datetime_02/datetime_02.1.query.sqlpp
@@ -24,8 +24,7 @@
   "null_0": datetime("@#!"),
   "null_1": datetime(false),
   "null_2": datetime(0),
-  "null_3": datetime(time("01:02:03")),
-  "null_4": datetime([]),
-  "null_5": datetime({}),
-  "null_6": datetime("1951-12-27T12:20:15Z", "INVALID_FORMAT")
+  "null_3": datetime([]),
+  "null_4": datetime({}),
+  "null_5": datetime("1951-12-27T12:20:15Z", "INVALID_FORMAT")
 };
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/objects/ObjectsQueries.xml b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/objects/ObjectsQueries.xml
index 2675c40..bf48a7b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/objects/ObjectsQueries.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/objects/ObjectsQueries.xml
@@ -111,7 +111,7 @@
     <compilation-unit name="no_fieldname_constr">
       <output-dir compare="Text">no_fieldname_constr</output-dir>
       <expected-warn>Encountered a cross product join (in line 27, at column 22)</expected-warn>
-      <expected-warn>Duplicate field name "a" (in line 31, at column 24)</expected-warn>
+      <expected-warn>Duplicate field name 'a' (in line 31, at column 24)</expected-warn>
     </compilation-unit>
   </test-case>
   <test-case FilePath="objects">
@@ -199,7 +199,7 @@
   <test-case FilePath="objects" check-warnings="true">
     <compilation-unit name="closed-closed-fieldname-conflict_issue173">
       <output-dir compare="Text">closed-closed-fieldname-conflict_issue173</output-dir>
-      <expected-warn>Duplicate field name "name" (in line 30, at column 16)</expected-warn>
+      <expected-warn>Duplicate field name 'name' (in line 30, at column 16)</expected-warn>
     </compilation-unit>
   </test-case>
   <test-case FilePath="objects" check-warnings="true">
@@ -227,15 +227,15 @@
   <test-case FilePath="objects" check-warnings="true">
     <compilation-unit name="object_duplicate_fields">
       <output-dir compare="Text">object_duplicate_fields</output-dir>
-      <expected-warn>Duplicate field name "name" (in line 27, at column 1)</expected-warn>
-      <expected-warn>Duplicate field name "Name" (in line 29, at column 1)</expected-warn>
-      <expected-warn>Duplicate field name "name" (in line 31, at column 1)</expected-warn>
-      <expected-warn>Duplicate field name "name" (in line 22, at column 30)</expected-warn>
-      <expected-warn>Duplicate field name "id" (in line 22, at column 56)</expected-warn>
-      <expected-warn>Duplicate field name "f1" (in line 22, at column 70)</expected-warn>
-      <expected-warn>Duplicate field name "id" (in line 22, at column 56)</expected-warn>
-      <expected-warn>Duplicate field name "f1" (in line 22, at column 83)</expected-warn>
-      <expected-warn>Duplicate field name "fname1" (in line 25, at column 45)</expected-warn>
+      <expected-warn>Duplicate field name 'name' (in line 27, at column 1)</expected-warn>
+      <expected-warn>Duplicate field name 'Name' (in line 29, at column 1)</expected-warn>
+      <expected-warn>Duplicate field name 'name' (in line 31, at column 1)</expected-warn>
+      <expected-warn>Duplicate field name 'name' (in line 22, at column 30)</expected-warn>
+      <expected-warn>Duplicate field name 'id' (in line 22, at column 56)</expected-warn>
+      <expected-warn>Duplicate field name 'f1' (in line 22, at column 70)</expected-warn>
+      <expected-warn>Duplicate field name 'id' (in line 22, at column 56)</expected-warn>
+      <expected-warn>Duplicate field name 'f1' (in line 22, at column 83)</expected-warn>
+      <expected-warn>Duplicate field name 'fname1' (in line 25, at column 45)</expected-warn>
     </compilation-unit>
   </test-case>
 </test-group>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson
index f444fa1..ad95b7b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson
@@ -1,6 +1,6 @@
 {
 	"errors": [{ 
-		"code": 1,		"msg": "ASX0047: Invalid value for parameter \"format\": foo"	} 
+		"code": 1,		"msg": "ASX0047: Invalid value for parameter 'format': foo"	}
 	],
 	"status": "fatal",
 	"metrics": {
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/datetime_01/datetime_01.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/datetime_01/datetime_01.1.adm
index 8d2b2d2..cb20c29 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/datetime_01/datetime_01.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/datetime_01/datetime_01.1.adm
@@ -14,6 +14,7 @@
 { "g": 0, "i": 13, "actual": datetime("-1928-03-01T05:49:37.370") }
 { "g": 0, "i": 14, "actual": datetime("-1928-03-01T05:49:37.370") }
 { "g": 0, "i": 15, "actual": datetime("2020-01-02T00:00:00.000") }
+{ "g": 0, "i": 16, "actual": datetime("1970-01-01T01:02:03.456") }
 { "g": 1, "i": 0, "expected": null, "actual": null }
 { "g": 1, "i": 1, "expected": null, "actual": null }
 { "g": 1, "i": 2, "expected": null, "actual": null }
@@ -27,5 +28,4 @@
 { "g": 1, "i": 10, "expected": null, "actual": null }
 { "g": 1, "i": 11, "expected": null, "actual": null }
 { "g": 1, "i": 12, "expected": null, "actual": null }
-{ "g": 1, "i": 13, "expected": null, "actual": null }
 { "g": 2, "i": 0, "expected": true, "actual": true }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/datetime_02/datetime_02.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/datetime_02/datetime_02.1.adm
index a7601ae..4d80977 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/datetime_02/datetime_02.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/constructor/datetime_02/datetime_02.1.adm
@@ -1 +1 @@
-{ "null_0": null, "null_1": null, "null_2": null, "null_3": null, "null_4": null, "null_5": null, "null_6": null }
\ No newline at end of file
+{ "null_0": null, "null_1": null, "null_2": null, "null_3": null, "null_4": null, "null_5": null }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.03.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.03.regexadm
index d67e7a1..519019a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.03.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.03.regexadm
@@ -23,7 +23,7 @@
 \s*\Q"warnings": [{\E\s*
 \s*\Q"code": 1,\E\s*\Q"msg": "ASX1107: Unexpected hint: hint. None expected at this location\E[^}]+\Q}\E\s*
 \s*\Q,{\E\s*
-\s*\Q"code": 1,\E\s*\Q"msg": "ASX1006: Duplicate field name \"a\"\E[^}]+\Q}\E\s*
+\s*\Q"code": 1,\E\s*\Q"msg": "ASX1006: Duplicate field name 'a'\E[^}]+\Q}\E\s*
 \s*\Q,{\E\s*
 \s*\Q"code": 1,\E\s*\Q"msg": "ASX0002: Type mismatch: function isbitset expects its 2nd input parameter to be of type bigint or array, but the actual input type is string\E[^}]+\Q}\E\s*
 \s*\Q],\E
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.06.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.06.regexadm
index 64a3bde..5eeb3df 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.06.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.06.regexadm
@@ -6,7 +6,7 @@
 \s*\Q"results": [ {\E.*warnings\Q": [{\E\s*
 \s*\Q"code": 1,\E\s*\Q"msg": "ASX1107: Unexpected hint: hint. None expected at this location\E[^}]+\Q}\E\s*
 \s*\Q,{\E\s*
-\s*\Q"code": 1,\E\s*\Q"msg": "ASX1006: Duplicate field name \"a\"\E[^}]+\Q}\E\s*
+\s*\Q"code": 1,\E\s*\Q"msg": "ASX1006: Duplicate field name 'a'\E[^}]+\Q}\E\s*
 \s*\Q],\E
 \s*\Q"status": "success",\E
 \s*\Q"metrics": {\E
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.08.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.08.regexadm
index d67e7a1..519019a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.08.regexadm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.08.regexadm
@@ -23,7 +23,7 @@
 \s*\Q"warnings": [{\E\s*
 \s*\Q"code": 1,\E\s*\Q"msg": "ASX1107: Unexpected hint: hint. None expected at this location\E[^}]+\Q}\E\s*
 \s*\Q,{\E\s*
-\s*\Q"code": 1,\E\s*\Q"msg": "ASX1006: Duplicate field name \"a\"\E[^}]+\Q}\E\s*
+\s*\Q"code": 1,\E\s*\Q"msg": "ASX1006: Duplicate field name 'a'\E[^}]+\Q}\E\s*
 \s*\Q,{\E\s*
 \s*\Q"code": 1,\E\s*\Q"msg": "ASX0002: Type mismatch: function isbitset expects its 2nd input parameter to be of type bigint or array, but the actual input type is string\E[^}]+\Q}\E\s*
 \s*\Q],\E
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/datetime_01/datetime_01.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/datetime_01/datetime_01.3.ast
index b348fda..ad2b9d9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/datetime_01/datetime_01.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/datetime_01/datetime_01.3.ast
@@ -22,6 +22,9 @@
     FunctionCall asterix.date@1[
       LiteralExpr [STRING] [2020-01-02]
     ]
+    FunctionCall asterix.time@1[
+      LiteralExpr [STRING] [01:02:03.456]
+    ]
   ]
 Let Variable [ Name=$testNull ]
   :=
@@ -48,9 +51,6 @@
     FunctionCall asterix.double@1[
       LiteralExpr [LONG] [0]
     ]
-    FunctionCall asterix.time@1[
-      LiteralExpr [STRING] [01:02:03]
-    ]
     FunctionCall asterix.duration@1[
       LiteralExpr [STRING] [PT0H]
     ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_azure_blob_storage.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_azure_blob_storage.xml
index 2e1a6bf..ae3b2aa 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_azure_blob_storage.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_azure_blob_storage.xml
@@ -218,28 +218,28 @@
       <compilation-unit name="common/include-exclude/bad-name-1">
         <placeholder name="adapter" value="AZUREBLOB" />
         <output-dir compare="Text">common/include-exclude/bad-name-1</output-dir>
-        <expected-error>Invalid format for property "exclude1"</expected-error>
+        <expected-error>Invalid format for property 'exclude1'</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="external-dataset">
       <compilation-unit name="common/include-exclude/bad-name-2">
         <placeholder name="adapter" value="AZUREBLOB" />
         <output-dir compare="Text">common/include-exclude/bad-name-2</output-dir>
-        <expected-error>Invalid format for property "exclude#"</expected-error>
+        <expected-error>Invalid format for property 'exclude#'</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="external-dataset">
       <compilation-unit name="common/include-exclude/bad-name-3">
         <placeholder name="adapter" value="AZUREBLOB" />
         <output-dir compare="Text">common/include-exclude/bad-name-3</output-dir>
-        <expected-error>Invalid format for property "exclude#hello"</expected-error>
+        <expected-error>Invalid format for property 'exclude#hello'</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="external-dataset">
       <compilation-unit name="common/include-exclude/both">
         <placeholder name="adapter" value="AZUREBLOB" />
         <output-dir compare="Text">common/include-exclude/both</output-dir>
-        <expected-error>The parameters "include" and "exclude" cannot be provided at the same time</expected-error>
+        <expected-error>The parameters 'include' and 'exclude' cannot be provided at the same time</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="external-dataset">
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_s3.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_s3.xml
index a8786e2..12a8ae2 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_s3.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_external_dataset_s3.xml
@@ -305,28 +305,28 @@
       <compilation-unit name="common/include-exclude/bad-name-1">
         <placeholder name="adapter" value="S3" />
         <output-dir compare="Text">common/include-exclude/bad-name-1</output-dir>
-        <expected-error>Invalid format for property "exclude1"</expected-error>
+        <expected-error>Invalid format for property 'exclude1'</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="external-dataset">
       <compilation-unit name="common/include-exclude/bad-name-2">
         <placeholder name="adapter" value="S3" />
         <output-dir compare="Text">common/include-exclude/bad-name-2</output-dir>
-        <expected-error>Invalid format for property "exclude#"</expected-error>
+        <expected-error>Invalid format for property 'exclude#'</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="external-dataset">
       <compilation-unit name="common/include-exclude/bad-name-3">
         <placeholder name="adapter" value="S3" />
         <output-dir compare="Text">common/include-exclude/bad-name-3</output-dir>
-        <expected-error>Invalid format for property "exclude#hello"</expected-error>
+        <expected-error>Invalid format for property 'exclude#hello'</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="external-dataset">
       <compilation-unit name="common/include-exclude/both">
         <placeholder name="adapter" value="S3" />
         <output-dir compare="Text">common/include-exclude/both</output-dir>
-        <expected-error>The parameters "include" and "exclude" cannot be provided at the same time</expected-error>
+        <expected-error>The parameters 'include' and 'exclude' cannot be provided at the same time</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="external-dataset">
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_sqlpp.xml
index 7667bb4..b922fe4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_sqlpp.xml
@@ -72,7 +72,7 @@
         <expected-error>ASX3042: Unsupported function language badType</expected-error>
         <expected-error>ASX1117: Cannot find library with name testlib</expected-error>
         <expected-error>ASX0049: Parameter(s) type must be specified</expected-error>
-        <expected-error>ASX0047: Invalid value for parameter \"data\": Attribute</expected-error>
+        <expected-error>ASX0047: Invalid value for parameter 'data': Attribute</expected-error>
         <expected-error>ASX0049: Parameter(s) data must be specified</expected-error>
       </compilation-unit>
     </test-case>
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 0bfbcf2..bc9353b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -62,31 +62,31 @@
     <test-case FilePath="api">
       <compilation-unit name="request-param-validation">
         <output-dir compare="Text">request-param-validation</output-dir>
-        <expected-error>Invalid value for parameter "format": foo</expected-error>
-        <expected-error>Invalid value for parameter "pretty": bar</expected-error>
-        <expected-error>Invalid value for parameter "plan-format": blah</expected-error>
-        <expected-error>Invalid value for parameter "max-result-reads": foo</expected-error>
-        <expected-error>Invalid value for parameter "max-result-reads": 9999999999999999999999999999999999999999</expected-error>
-        <expected-error>Invalid value for parameter "max-warnings": baz</expected-error>
-        <expected-error>Invalid value for parameter "max-warnings": 1.5</expected-error>
-        <expected-error>Invalid value for parameter "mode": asyn</expected-error>
-        <expected-error>Invalid value for parameter "timeout": 12</expected-error>
-        <expected-error>Invalid value for parameter "args": 12</expected-error>
+        <expected-error>Invalid value for parameter 'format': foo</expected-error>
+        <expected-error>Invalid value for parameter 'pretty': bar</expected-error>
+        <expected-error>Invalid value for parameter 'plan-format': blah</expected-error>
+        <expected-error>Invalid value for parameter 'max-result-reads': foo</expected-error>
+        <expected-error>Invalid value for parameter 'max-result-reads': 9999999999999999999999999999999999999999</expected-error>
+        <expected-error>Invalid value for parameter 'max-warnings': baz</expected-error>
+        <expected-error>Invalid value for parameter 'max-warnings': 1.5</expected-error>
+        <expected-error>Invalid value for parameter 'mode': asyn</expected-error>
+        <expected-error>Invalid value for parameter 'timeout': 12</expected-error>
+        <expected-error>Invalid value for parameter 'args': 12</expected-error>
         <expected-error>Unable to process JSON content in request</expected-error>
         <expected-error>Unable to process JSON content in request</expected-error>
-        <expected-error>Invalid value for parameter "format": foo</expected-error>
-        <expected-error>Invalid value for parameter "pretty": bar</expected-error>
-        <expected-error>Invalid value for parameter "plan-format": blah</expected-error>
-        <expected-error>Invalid value for parameter "max-result-reads": foo</expected-error>
-        <expected-error>Invalid value for parameter "max-warnings": baz</expected-error>
-        <expected-error>Invalid value for parameter "mode": asyn</expected-error>
-        <expected-error>Invalid value for parameter "args": 12</expected-error>
+        <expected-error>Invalid value for parameter 'format': foo</expected-error>
+        <expected-error>Invalid value for parameter 'pretty': bar</expected-error>
+        <expected-error>Invalid value for parameter 'plan-format': blah</expected-error>
+        <expected-error>Invalid value for parameter 'max-result-reads': foo</expected-error>
+        <expected-error>Invalid value for parameter 'max-warnings': baz</expected-error>
+        <expected-error>Invalid value for parameter 'mode': asyn</expected-error>
+        <expected-error>Invalid value for parameter 'args': 12</expected-error>
         <expected-error>Unable to process JSON content in request</expected-error>
         <expected-error>Unable to process JSON content in request</expected-error>
-        <expected-error>Invalid value for parameter "profile": true</expected-error>
-        <expected-error>Invalid value for parameter "profile": true</expected-error>
-        <expected-error>Invalid value for parameter "profile": foo</expected-error>
-        <expected-error>Invalid value for parameter "profile": foo</expected-error>
+        <expected-error>Invalid value for parameter 'profile': true</expected-error>
+        <expected-error>Invalid value for parameter 'profile': true</expected-error>
+        <expected-error>Invalid value for parameter 'profile': foo</expected-error>
+        <expected-error>Invalid value for parameter 'profile': foo</expected-error>
         <source-location>false</source-location>
       </compilation-unit>
     </test-case>
@@ -232,21 +232,21 @@
     <test-case FilePath="flwor" check-warnings="true">
       <compilation-unit name="query-ASTERIXDB-2446">
         <output-dir compare="Text">query-ASTERIXDB-2446</output-dir>
-        <expected-error>ASX0013: Duplicate field name "a"</expected-error>
-        <expected-warn>Duplicate field name "c" (in line 28, at column 84)</expected-warn>
-        <expected-warn>Duplicate field name "e" (in line 28, at column 116)</expected-warn>
+        <expected-error>ASX0013: Duplicate field name 'a'</expected-error>
+        <expected-warn>Duplicate field name 'c' (in line 28, at column 84)</expected-warn>
+        <expected-warn>Duplicate field name 'e' (in line 28, at column 116)</expected-warn>
       </compilation-unit>
     </test-case>
     <test-case FilePath="flwor">
       <compilation-unit name="query-ASTERIXDB-2446-2">
         <output-dir compare="Text">query-ASTERIXDB-883</output-dir>
-        <expected-error>ASX0013: Duplicate field name "a" (in line 27, at column 20)</expected-error>
-        <expected-error>ASX0013: Duplicate field name "b" (in line 27, at column 20)</expected-error>
-        <expected-error>ASX0013: Duplicate field name "c" (in line 27, at column 11)</expected-error>
-        <expected-error>ASX0013: Duplicate field name "d" (in line 27, at column 11)</expected-error>
-        <expected-error>ASX0013: Duplicate field name "e" (in line 27, at column 14)</expected-error>
-        <expected-error>ASX0013: Duplicate field name "f" (in line 27, at column 11)</expected-error>
-        <expected-error>ASX0013: Duplicate field name "g" (in line 27, at column 11)</expected-error>
+        <expected-error>ASX0013: Duplicate field name 'a' (in line 27, at column 20)</expected-error>
+        <expected-error>ASX0013: Duplicate field name 'b' (in line 27, at column 20)</expected-error>
+        <expected-error>ASX0013: Duplicate field name 'c' (in line 27, at column 11)</expected-error>
+        <expected-error>ASX0013: Duplicate field name 'd' (in line 27, at column 11)</expected-error>
+        <expected-error>ASX0013: Duplicate field name 'e' (in line 27, at column 14)</expected-error>
+        <expected-error>ASX0013: Duplicate field name 'f' (in line 27, at column 11)</expected-error>
+        <expected-error>ASX0013: Duplicate field name 'g' (in line 27, at column 11)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="flwor">
@@ -3674,10 +3674,9 @@
         <expected-warn>ASX0006: Invalid format for datetime in @#! (in line 24, at column 13)</expected-warn>
         <expected-warn>ASX0004: Unsupported type: datetime() cannot process input type boolean (in line 25, at column 13)</expected-warn>
         <expected-warn>ASX0004: Unsupported type: datetime() cannot process input type bigint (in line 26, at column 13)</expected-warn>
-        <expected-warn>ASX0004: Unsupported type: datetime() cannot process input type time (in line 27, at column 13)</expected-warn>
-        <expected-warn>ASX0004: Unsupported type: datetime() cannot process input type array (in line 28, at column 13)</expected-warn>
-        <expected-warn>ASX0004: Unsupported type: datetime() cannot process input type object (in line 29, at column 13)</expected-warn>
-        <expected-warn>ASX0006: Invalid format for datetime in 1951-12-27T12:20:15Z (in line 30, at column 13)</expected-warn>
+        <expected-warn>ASX0004: Unsupported type: datetime() cannot process input type array (in line 27, at column 13)</expected-warn>
+        <expected-warn>ASX0004: Unsupported type: datetime() cannot process input type object (in line 28, at column 13)</expected-warn>
+        <expected-warn>ASX0006: Invalid format for datetime in 1951-12-27T12:20:15Z (in line 29, at column 13)</expected-warn>
       </compilation-unit>
     </test-case>
     <test-case FilePath="constructor">
@@ -4158,7 +4157,7 @@
       <compilation-unit name="bad-type-ddl">
         <output-dir compare="Text">none</output-dir>
         <expected-error>ASX1079: Compilation error: Reserved type name $x</expected-error>
-        <expected-error>ASX0013: Duplicate field name "c" (in line 29, at column 19)</expected-error>
+        <expected-error>ASX0013: Duplicate field name 'c' (in line 29, at column 19)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="ddl">
@@ -4172,13 +4171,13 @@
         <expected-error>ASX1082: Cannot find datatype with name test.$d$t$i$Cust1</expected-error>
         <expected-error>ASX1082: Cannot find datatype with name test.$d$t$i$Cust2</expected-error>
         <expected-error>ASX1082: Cannot find datatype with name my_unknown_type</expected-error>
-        <expected-error>ASX0013: Duplicate field name "c_name" (in line 25, at column 22)</expected-error>
+        <expected-error>ASX0013: Duplicate field name 'c_name' (in line 25, at column 22)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="ddl">
       <compilation-unit name="drop-primary-index">
         <output-dir compare="Text">drop-primary-index</output-dir>
-        <expected-error>Cannot drop index "ds". Drop dataset "ds" to remove this index</expected-error>
+        <expected-error>Cannot drop index 'ds'. Drop dataset 'ds' to remove this index</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="ddl" check-warnings="true">
@@ -4197,89 +4196,89 @@
     <test-case FilePath="ddl">
       <compilation-unit name="invalid-dataverse-name">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1115: Invalid name for a database object: ""</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " a"</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " invalid"</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ''</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' a'</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' invalid'</expected-error>
         <expected-error>ASX1079: Compilation error: Invalid operation - Cannot create dataverse: asterix</expected-error>
         <expected-error>ASX1079: Compilation error: Invalid operation - Cannot create dataverse: algebricks</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "" (in line 24, at column 16)</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "a/b" (in line 27, at column 16)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: '' (in line 24, at column 16)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'a/b' (in line 27, at column 16)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="ddl">
       <compilation-unit name="invalid-dataset-name">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1115: Invalid name for a database object: ""</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " a"</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " invalid"</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "a/b" (in line 29, at column 16)</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "c/d" (in line 31, at column 14)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ''</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' a'</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' invalid'</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'a/b' (in line 29, at column 16)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'c/d' (in line 31, at column 14)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="ddl">
       <compilation-unit name="invalid-feed-name">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1115: Invalid name for a database object: ""</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " a"</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " invalid"</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "a/b" (in line 34, at column 13)</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "c/d" (in line 42, at column 11)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ''</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' a'</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' invalid'</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'a/b' (in line 34, at column 13)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'c/d' (in line 42, at column 11)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="ddl">
       <compilation-unit name="invalid-feed-policy-name">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1115: Invalid name for a database object: ""</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " a"</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "a/b" (in line 29, at column 1)</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "c/d" (in line 32, at column 23)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ''</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' a'</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'a/b' (in line 29, at column 1)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'c/d' (in line 32, at column 23)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="ddl">
       <compilation-unit name="invalid-index-name">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1115: Invalid name for a database object: ""</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " a"</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " invalid"</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "a/b" (in line 29, at column 19)</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "c/d" (in line 33, at column 12)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ''</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' a'</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' invalid'</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'a/b' (in line 29, at column 19)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'c/d' (in line 33, at column 12)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="ddl">
       <compilation-unit name="invalid-nodegroup-name">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1115: Invalid name for a database object: ""</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " a"</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ''</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' a'</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="ddl">
       <compilation-unit name="invalid-type-name">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1115: Invalid name for a database object: ""</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " a"</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " invalid"</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "a/b" (in line 29, at column 13)</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "c/d" (in line 33, at column 11)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ''</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' a'</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' invalid'</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'a/b' (in line 29, at column 13)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'c/d' (in line 33, at column 11)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="ddl">
       <compilation-unit name="invalid-udf-name">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1115: Invalid name for a database object: ""</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " a"</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " invalid"</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "a/b" (in line 29, at column 17)</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "c/d" (in line 33, at column 15)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ''</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' a'</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' invalid'</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'a/b' (in line 29, at column 17)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'c/d' (in line 33, at column 15)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="ddl">
       <compilation-unit name="invalid-view-name">
         <output-dir compare="Text">none</output-dir>
-        <expected-error>ASX1115: Invalid name for a database object: "" (in line 29, at column 1)</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " a" (in line 29, at column 1)</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: " invalid" (in line 29, at column 1)</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "a/b" (in line 29, at column 13)</expected-error>
-        <expected-error>ASX1115: Invalid name for a database object: "c/d" (in line 32, at column 11)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: '' (in line 29, at column 1)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' a' (in line 29, at column 1)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: ' invalid' (in line 29, at column 1)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'a/b' (in line 29, at column 13)</expected-error>
+        <expected-error>ASX1115: Invalid name for a database object: 'c/d' (in line 32, at column 11)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="ddl">
@@ -4328,7 +4327,7 @@
         <expected-error>CAST modifier is only allowed for B-Tree indexes</expected-error>
         <expected-error>CAST modifier cannot be specified together with ENFORCED</expected-error>
         <expected-error>CAST modifier is used without specifying the type of the indexed field</expected-error>
-        <expected-error>Typed index on "[typed_f2]" field could be created only for open datatype</expected-error>
+        <expected-error>Typed index on '[typed_f2]' field could be created only for open datatype</expected-error>
         <expected-error>Parameter invalid_date cannot be set</expected-error>
       </compilation-unit>
     </test-case>
@@ -4592,8 +4591,8 @@
     <test-case FilePath="dml">
       <compilation-unit name="load-with-autogenerated-no-field">
         <output-dir compare="Text">load-with-autogenerated-no-field</output-dir>
-        <expected-error>ASX1014: Field "not_id" is not found</expected-error>
-        <expected-error>ASX1014: Field "not_id" is not found</expected-error>
+        <expected-error>ASX1014: Field 'not_id' is not found</expected-error>
+        <expected-error>ASX1014: Field 'not_id' is not found</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="dml">
@@ -5110,8 +5109,8 @@
     <test-case FilePath="dml">
       <compilation-unit name="load-with-autogenerated-no-field">
         <output-dir compare="Text">load-with-autogenerated-no-field</output-dir>
-        <expected-error>ASX1014: Field "not_id" is not found</expected-error>
-        <expected-error>ASX1014: Field "not_id" is not found</expected-error>
+        <expected-error>ASX1014: Field 'not_id' is not found</expected-error>
+        <expected-error>ASX1014: Field 'not_id' is not found</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="dml">
@@ -6985,7 +6984,7 @@
     <test-case FilePath="misc">
       <compilation-unit name="partition-by-nonexistent-field">
         <output-dir compare="Text">partition-by-nonexistent-field</output-dir>
-        <expected-error>Field "id" is not found</expected-error>
+        <expected-error>Field 'id' is not found</expected-error>
         <expected-error>Cannot find dataset with name testds in dataverse test</expected-error>
         <expected-error>Cannot find dataset testds in dataverse test nor an alias with name testds</expected-error>
       </compilation-unit>
@@ -7274,7 +7273,7 @@
       <test-case FilePath="index/validations">
         <compilation-unit name="repetitive-keys">
           <output-dir compare="Text">repetitive-keys</output-dir>
-          <expected-error>Cannot create index with the same field "[value]" specified more than once.</expected-error>
+          <expected-error>Cannot create index with the same field '[value]' specified more than once.</expected-error>
         </compilation-unit>
       </test-case>
     </test-group>
@@ -7284,13 +7283,13 @@
       <test-case FilePath="open-index-enforced/error-checking">
         <compilation-unit name="enforced-field-name-collision">
           <output-dir compare="Text">enforced-field-name-collision</output-dir>
-          <expected-error>Cannot create enforced index on "[value]" field. The field is closed type.</expected-error>
+          <expected-error>Cannot create enforced index on '[value]' field. The field is closed type.</expected-error>
         </compilation-unit>
       </test-case>
       <test-case FilePath="open-index-enforced/error-checking">
         <compilation-unit name="enforced-field-type-collision">
           <output-dir compare="Text">enforced-field-type-collision</output-dir>
-          <expected-error>Cannot create enforced index on "[value]" field. The field is closed type.</expected-error>
+          <expected-error>Cannot create enforced index on '[value]' field. The field is closed type.</expected-error>
         </compilation-unit>
       </test-case>
       <test-case FilePath="open-index-enforced/error-checking">
@@ -7302,31 +7301,31 @@
       <test-case FilePath="open-index-enforced/error-checking">
         <compilation-unit name="missing-optionality">
           <output-dir compare="Text">missing-optionality</output-dir>
-          <expected-error>Cannot create enforced index on "[value]" field with non-optional type</expected-error>
+          <expected-error>Cannot create enforced index on '[value]' field with non-optional type</expected-error>
         </compilation-unit>
       </test-case>
       <test-case FilePath="open-index-enforced/error-checking">
         <compilation-unit name="index-on-closed-type">
           <output-dir compare="Text">index-on-closed-type</output-dir>
-          <expected-error>ASX1014: Field "value" is not found (in line 33, at column 34)</expected-error>
+          <expected-error>ASX1014: Field 'value' is not found (in line 33, at column 34)</expected-error>
         </compilation-unit>
       </test-case>
       <test-case FilePath="open-index-enforced/error-checking">
         <compilation-unit name="index-type-collision">
           <output-dir compare="Text">index-type-collision</output-dir>
-          <expected-error>Cannot create index testIdx2 , enforced index testIdx1 on field "[value]" is already defined with type "[integer]"</expected-error>
+          <expected-error>Cannot create index testIdx2 , enforced index testIdx1 on field '[value]' is already defined with type '[integer]'</expected-error>
         </compilation-unit>
       </test-case>
       <test-case FilePath="open-index-enforced/error-checking">
         <compilation-unit name="index-type-promotion-collision">
           <output-dir compare="Text">index-type-promotion-collision</output-dir>
-          <expected-error>Cannot create index testIdx2 , enforced index testIdx1 on field "[value]" is already defined with type "[bigint]"</expected-error>
+          <expected-error>Cannot create index testIdx2 , enforced index testIdx1 on field '[value]' is already defined with type '[bigint]'</expected-error>
         </compilation-unit>
       </test-case>
       <test-case FilePath="open-index-enforced/error-checking">
         <compilation-unit name="object-type-collision">
           <output-dir compare="Text">object-type-collision</output-dir>
-          <expected-error>ASX1051: Cannot create enforced index on "[value]" field. The field is closed type.</expected-error>
+          <expected-error>ASX1051: Cannot create enforced index on '[value]' field. The field is closed type.</expected-error>
         </compilation-unit>
       </test-case>
     </test-group>
@@ -8142,7 +8141,7 @@
       <test-case FilePath="array-index/error-handling">
         <compilation-unit name="index-on-closed-array">
           <output-dir compare="Text">index-on-closed-array</output-dir>
-          <expected-error>ASX1014: Field "date" is not found</expected-error>
+          <expected-error>ASX1014: Field 'date' is not found</expected-error>
           <source-location>false</source-location>
         </compilation-unit>
       </test-case>
@@ -8587,7 +8586,7 @@
     <test-case FilePath="nestrecords">
       <compilation-unit name="nested-optional-pk">
         <output-dir compare="Text">nested-optional-pk</output-dir>
-        <expected-error>ASX1021: The primary key field "nested.id" cannot be nullable</expected-error>
+        <expected-error>ASX1021: The primary key field 'nested.id' cannot be nullable</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="nestrecords">
@@ -9660,13 +9659,13 @@
     <!-- Fail sporadically        <test-case FilePath="range-hints">
             <compilation-unit name="order-by-exception_01">
                 <output-dir compare="Text">order-by</output-dir>
-                <expected-error>org.json.JSONException: JSONObject["summary"] not found</expected-error>
+                <expected-error>org.json.JSONException: JSONObject['summary'] not found</expected-error>
             </compilation-unit>
         </test-case>
         <test-case FilePath="range-hints">
             <compilation-unit name="order-by-exception_02">
                 <output-dir compare="Text">order-by</output-dir>
-                <expected-error>org.json.JSONException: JSONObject["summary"] not found</expected-error>
+                <expected-error>org.json.JSONException: JSONObject['summary'] not found</expected-error>
             </compilation-unit>
         </test-case> -->
   </test-group>
@@ -10535,8 +10534,8 @@
     <test-case FilePath="string">
       <compilation-unit name="like_03_negative">
         <output-dir compare="Text">like_03_negative</output-dir>
-        <expected-error>Invalid pattern "__\c" for LIKE (in line 21, at column 11)</expected-error>
-        <expected-error>Invalid pattern "%\" for LIKE (in line 21, at column 18)</expected-error>
+        <expected-error>Invalid pattern '__\c' for LIKE (in line 21, at column 11)</expected-error>
+        <expected-error>Invalid pattern '%\' for LIKE (in line 21, at column 18)</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="string">
@@ -13422,10 +13421,10 @@
         <expected-error><![CDATA[ASX1001: Syntax error: In line 25 >>create view test.v1(r bigint, a [bigint]) default null as<< Encountered "[" at column 33]]></expected-error>
         <expected-error>ASX1092: Parameter date_illegal_property_name cannot be set (in line 25, at column 1)</expected-error>
         <expected-error><![CDATA[ASX1001: Syntax error: In line 25 >>create view test.v1(r bigint) as<< Encountered "as" at column 31]]></expected-error>
-        <expected-error><![CDATA[ASX1014: Field "unknown_field" is not found (in line 25, at column 1)]]></expected-error>
-        <expected-error><![CDATA[ASX1014: Field "unknown_field_2" is not found (in line 25, at column 1)]]></expected-error>
+        <expected-error><![CDATA[ASX1014: Field 'unknown_field' is not found (in line 25, at column 1)]]></expected-error>
+        <expected-error><![CDATA[ASX1014: Field 'unknown_field_2' is not found (in line 25, at column 1)]]></expected-error>
         <expected-error><![CDATA[ASX1001: Syntax error: In line 28 >>  as select r from range(1,2) r;<< Encountered "as" at column 3]]></expected-error>
-        <expected-error><![CDATA[ASX0013: Duplicate field name "r" (in line 25, at column 20)]]></expected-error>
+        <expected-error><![CDATA[ASX0013: Duplicate field name 'r' (in line 25, at column 20)]]></expected-error>
         <expected-error><![CDATA[ASX1167: Cannot change primary key of view test1.employee_v1 (in line 38, at column 1)]]></expected-error>
         <expected-error><![CDATA[ASX1162: Invalid primary key definition (in line 25, at column 1)]]></expected-error>
         <expected-error><![CDATA[ASX1162: Invalid primary key definition (in line 26, at column 1)]]></expected-error>
@@ -15303,14 +15302,14 @@
     <test-case FilePath="ddl-with-clause">
       <compilation-unit name="missing-non-optional">
         <output-dir compare="Text">missing-non-optional</output-dir>
-        <expected-error>ASX1061: Field "merge-policy.name" in the with clause cannot be null or missing</expected-error>
+        <expected-error>ASX1061: Field 'merge-policy.name' in the with clause cannot be null or missing</expected-error>
         <source-location>false</source-location>
       </compilation-unit>
     </test-case>
     <test-case FilePath="ddl-with-clause">
       <compilation-unit name="type-mismatch">
         <output-dir compare="Text">type-mismatch</output-dir>
-        <expected-error>ASX1060: Field "merge-policy.parameters.max-mergable-component-size" in the with clause must be of type bigint, but found string</expected-error>
+        <expected-error>ASX1060: Field 'merge-policy.parameters.max-mergable-component-size' in the with clause must be of type bigint, but found string</expected-error>
         <source-location>false</source-location>
       </compilation-unit>
     </test-case>
@@ -15324,7 +15323,7 @@
     <test-case FilePath="ddl-with-clause">
       <compilation-unit name="unsupported-subfield">
         <output-dir compare="Text">unsupported-subfield</output-dir>
-        <expected-error>ASX1097: Subfield(s) [unknown-subfield] in "merge-policy" unsupported in the with clause</expected-error>
+        <expected-error>ASX1097: Subfield(s) [unknown-subfield] in 'merge-policy' unsupported in the with clause</expected-error>
         <source-location>false</source-location>
       </compilation-unit>
     </test-case>
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/RequestReference.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/RequestReference.java
index eb08c09..78b6b3b 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/RequestReference.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/RequestReference.java
@@ -79,6 +79,6 @@
         object.put("time", time);
         object.put("userAgent", userAgent);
         object.put("remoteAddr", remoteAddr);
-        return JSONUtil.convertNodeOrThrow(object);
+        return JSONUtil.convertNodeUnchecked(object);
     }
 }
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/StorageProperties.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/StorageProperties.java
index 12c9c68..5b10777 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/StorageProperties.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/StorageProperties.java
@@ -54,7 +54,7 @@
         STORAGE_FILTERED_MEMORYCOMPONENT_MAX_SIZE(LONG_BYTE_UNIT, 0L),
         STORAGE_LSM_BLOOMFILTER_FALSEPOSITIVERATE(DOUBLE, 0.01d),
         STORAGE_COMPRESSION_BLOCK(STRING, "snappy"),
-        STORAGE_DISK_FORCE_BYTES(LONG_BYTE_UNIT, StorageUtil.getLongSizeInBytes(16, MEGABYTE)),
+        STORAGE_DISK_FORCE_BYTES(LONG_BYTE_UNIT, StorageUtil.getLongSizeInBytes(1, MEGABYTE)),
         STORAGE_IO_SCHEDULER(STRING, "greedy"),
         STORAGE_WRITE_RATE_LIMIT(LONG_BYTE_UNIT, 0l),
         STORAGE_MAX_CONCURRENT_FLUSHES_PER_PARTITION(NONNEGATIVE_INTEGER, 2),
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 faaf8d5..f5ef79d 100644
--- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
+++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
@@ -37,7 +37,7 @@
 3,1003 = Type incompatibility: function %1$s gets incompatible input values: %2$s and %3$s
 4,1004 = Unsupported type: %1$s cannot process input type %2$s
 5,1005 = Invalid item type: function %1$s cannot process item type %2$s in an input array (or multiset)
-13,1006 = Duplicate field name \"%1$s\"
+13,1006 = Duplicate field name '%1$s'
 1009 = A returning expression cannot contain dataset access
 37,1091 = Type mismatch: expected value of type %1$s, but got the value of type %2$s
 51 = Incomparable input types: %1$s and %2$s
@@ -64,7 +64,7 @@
 25 = Polygon must have at least 3 points
 26 = %1$s can not be an instance of polygon
 27 = Operation not supported
-28 = Invalid duration \"%1$s\"
+28 = Invalid duration '%1$s'
 29 = Unknown duration unit %1$s
 30 = Request timed out and will be cancelled
 31 = Invalid type-casting math function: %1$s for converting %2$s to %3$s
@@ -76,15 +76,15 @@
 39 = Expected integer value, got %1$s
 40 = No statement provided
 41 = Request %1$s has been cancelled
-42 = %1$s: \"%2$s\" is not a TPC-DS table name
+42 = %1$s: '%2$s' is not a TPC-DS table name
 43 = Value out of range, function %1$s expects its %2$s input parameter value to be between %3$s and %4$s, received %5$s
 44 = %1$s statement is not supported in read-only mode
 45 = Invalid value: function %1$s expects its %2$s input parameter to be an integer value, got %3$s
-46 = Invalid pattern \"%1$s\" for LIKE
-47 = Invalid value for parameter \"%1$s\": %2$s
+46 = Invalid pattern '%1$s' for LIKE
+47 = Invalid value for parameter '%1$s': %2$s
 48 = Unable to process JSON content in request
 49 = Parameter(s) %1$s must be specified
-50 = Invalid parameter \"%1$s\"
+50 = Invalid parameter '%1$s'
 #51 is used
 52 = Illegal state. %1$s
 53 = Unsupported Parquet type '%1$s'
@@ -107,14 +107,14 @@
 1011 = Unknown dataset type %1$s
 1012 = Unknown index type %1$s
 1013 = Cannot use %1$s fields as a key for the %2$s index. The index can only support keys of size %3$s
-1014 = Field \"%1$s\" is not found
-1015 = Index of type %1$s is not supported for dataset \"%2$s\" since it has composite primary keys
+1014 = Field '%1$s' is not found
+1015 = Index of type %1$s is not supported for dataset '%2$s' since it has composite primary keys
 1016 = Index of type %1$s is not supported for dataset of type %2$s
-1017 = The filter field \"%1$s\" cannot be an optional field
+1017 = The filter field '%1$s' cannot be an optional field
 1018 = Field of type %1$s cannot be used as a filter field
 1019 = Cannot autogenerate a composite %1$s key
 1020 = Cannot autogenerate a %1$s key for %1$s key of type %2$s. Autogenerated %1$s keys must be of type %3$s
-1021 = The %1$s key field \"%2$s\" cannot be nullable
+1021 = The %1$s key field '%2$s' cannot be nullable
 1022 = Field of type %1$s cannot be used as a %2$s key field
 1023 = Cannot drop dataset %1$s since it is connected to active entity: %2$s
 #1024 is no longer used
@@ -134,7 +134,7 @@
 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
+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
 1043 = Cannot use %1$s fields as key for the R-tree index. There can be only one field as a key for the R-tree index.
 1044 = Communication-related exception occurred during the execution of a remote method call
@@ -144,8 +144,8 @@
 1048 = Metadata lock cannot be downgraded! because it was not acquired before
 1049 = Metadata lock cannot be acquired for %1$s since it is already acquired for %2$s
 1050 = Cannot find dataset with name %1$s in dataverse %2$s
-1051 = Cannot create enforced index on \"%1$s\" field. The field is closed type.
-1052 = Cannot create index with the same field \"%1$s\" specified more than once.
+1051 = Cannot create enforced index on '%1$s' field. The field is closed type.
+1052 = Cannot create index with the same field '%1$s' specified more than once.
 1053 = Cannot create primary index on external dataset.
 1054 = Compilation failed due to some problem in the query plan.
 1055 = Incompatible implementation language %1$s for function %2$s. Expected language %3$s.
@@ -153,8 +153,8 @@
 1057 = Expression of type %1$s is not supported in constant record
 1058 = Literal of type %1$s is not supported in constant record
 1059 = Field(s) %1$s unsupported in the with clause
-1060 = Field \"%1$s\" in the with clause must be of type %2$s, but found %3$s
-1061 = Field \"%1$s\" in the with clause cannot be null or missing
+1060 = Field '%1$s' in the with clause must be of type %2$s, but found %3$s
+1061 = Field '%1$s' in the with clause cannot be null or missing
 1062 = Configuration parameter cannot be of type %1$s
 1063 = Cannot find dataverse with name %1$s
 1064 = An error was occurred while converting type %1$s to type %2$s.
@@ -162,7 +162,7 @@
 1066 = Cannot serialize a value.
 1067 = Cannot find a non-missing SELECT operator in GROUP operator for a left-outer-join plan optimization.
 1068 = Cannot get the conditional split variable for the given UNNESTMAP operator.
-1069 = Cannot drop index \"%1$s\". Drop dataset \"%1$s\" to remove this index
+1069 = Cannot drop index '%1$s'. Drop dataset '%1$s' to remove this index
 1070 = Metadata error. %1$s
 1071 = A dataverse with this name %1$s already exists.
 1072 = A dataset with name %1$s already exists in dataverse %2$s
@@ -189,7 +189,7 @@
 1094 = Cannot parse range map: %1$s
 1095 = Expected function call
 1096 = Unknown compression scheme %1$s. Supported schemes are %2$s
-1097 = Subfield(s) %1$s in \"%2$s\" unsupported in the with clause
+1097 = Subfield(s) %1$s in '%2$s' unsupported in the with clause
 1098 = Invalid window frame definition
 1099 = Unexpected window frame definition
 1100 = Unexpected window expression
@@ -202,12 +202,12 @@
 1107 = Unexpected hint: %1$s. %2$s expected at this location
 1108 = External source error. %1$s
 1109 = External source container %1$s not found
-1110 = The parameters \"%1$s\" and \"%2$s\" cannot be provided at the same time
-1111 = Property \"%1$s\" expects value(s) of type %2$s
-1112 = Invalid format for property \"%1$s\"
+1110 = The parameters '%1$s' and '%2$s' cannot be provided at the same time
+1111 = Property '%1$s' expects value(s) of type %2$s
+1112 = Invalid format for property '%1$s'
 1113 = Invalid pattern %1$s
 1114 = The provided external dataset configuration returned no files from the external source
-1115 = Invalid name for a database object: \"%1$s\"
+1115 = Invalid name for a database object: '%1$s'
 1116 = Cannot find synonym with name %1$s
 1117 = Cannot find library with name %1$s
 1118 = Too many grouping sets in group by clause: %1$s. Maximum allowed: %2$s.
@@ -324,7 +324,7 @@
 3056 = Illegal escape '\%1$s'
 3057 = Found END_RECORD while expecting a record field.
 3058 = This record is closed, you can not add extra fields! new field name: %1$s
-3059 = Unexpected ADM token kind: %1$s while expecting ":"
+3059 = Unexpected ADM token kind: %1$s while expecting ':'
 3060 = Found COMMA %1$s %2$s record field
 3061 = Unsupported interval type: %1$s
 3062 = Interval was not closed
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
index 77b9991..9115b1c 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
@@ -23,6 +23,7 @@
 import java.util.List;
 
 import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.lang.common.base.AbstractClause;
 import org.apache.asterix.lang.common.base.Clause.ClauseType;
 import org.apache.asterix.lang.common.base.Expression;
@@ -50,6 +51,7 @@
 import org.apache.asterix.lang.common.struct.Identifier;
 import org.apache.asterix.lang.common.struct.QuantifiedPair;
 import org.apache.asterix.lang.sqlpp.clause.AbstractBinaryCorrelateClause;
+import org.apache.asterix.lang.sqlpp.clause.AbstractBinaryCorrelateWithConditionClause;
 import org.apache.asterix.lang.sqlpp.clause.FromClause;
 import org.apache.asterix.lang.sqlpp.clause.FromTerm;
 import org.apache.asterix.lang.sqlpp.clause.HavingClause;
@@ -107,41 +109,74 @@
         }
 
         // Visits join/unnest/nest clauses.
-        for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) {
-            Collection<VariableExpr> correlateFreeVars = new HashSet<>();
-            correlateClause.accept(this, correlateFreeVars);
-            if (correlateClause.getClauseType() != ClauseType.JOIN_CLAUSE) {
-                // Correlation is allowed if the clause is not a join clause,
-                // therefore we remove left-side binding variables for these cases.
-                correlateFreeVars.removeAll(bindingVariables);
-
-                // Adds binding variables.
-                bindingVariables.add(correlateClause.getRightVariable());
-                if (correlateClause.hasPositionalVariable()) {
-                    bindingVariables.add(correlateClause.getPositionalVariable());
-                }
+        Collection<VariableExpr> clauseFreeVars = null;
+        Collection<VariableExpr> conditionFreeVars = null;
+        for (AbstractBinaryCorrelateClause clause : fromTerm.getCorrelateClauses()) {
+            if (clauseFreeVars == null) {
+                clauseFreeVars = new HashSet<>();
+            } else {
+                clauseFreeVars.clear();
             }
-            freeVars.addAll(correlateFreeVars);
+            clause.getRightExpression().accept(this, clauseFreeVars);
+
+            switch (clause.getClauseType()) {
+                case UNNEST_CLAUSE:
+                    // right branch CAN be use binding variables from prior clauses
+                    // -> these binding variables are not free vars for the whole FromTerm
+                    clauseFreeVars.removeAll(bindingVariables);
+                    break;
+                case JOIN_CLAUSE:
+                case NEST_CLAUSE:
+                    // right branch CANNOT use binding variables from prior clauses, but condition expression CAN.
+                    if (conditionFreeVars == null) {
+                        conditionFreeVars = new HashSet<>();
+                    } else {
+                        conditionFreeVars.clear();
+                    }
+                    AbstractBinaryCorrelateWithConditionClause clauseWithCondition =
+                            (AbstractBinaryCorrelateWithConditionClause) clause;
+                    clauseWithCondition.getConditionExpression().accept(this, conditionFreeVars);
+                    conditionFreeVars.removeAll(bindingVariables);
+                    conditionFreeVars.remove(clause.getRightVariable());
+                    if (clause.hasPositionalVariable()) {
+                        conditionFreeVars.remove(clause.getPositionalVariable());
+                    }
+                    clauseFreeVars.addAll(conditionFreeVars);
+                    break;
+                default:
+                    throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, clause.getSourceLocation(),
+                            clause.getClauseType().toString());
+            }
+
+            // Adds binding variables.
+            bindingVariables.add(clause.getRightVariable());
+            if (clause.hasPositionalVariable()) {
+                bindingVariables.add(clause.getPositionalVariable());
+            }
+            freeVars.addAll(clauseFreeVars);
         }
         return null;
     }
 
     @Override
-    public Void visit(JoinClause joinClause, Collection<VariableExpr> freeVars) throws CompilationException {
-        visitJoinAndNest(joinClause, joinClause.getConditionExpression(), freeVars);
-        return null;
+    public Void visit(JoinClause joinClause, Collection<VariableExpr> arg) throws CompilationException {
+        // not supposed to be invoked
+        throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, joinClause.getSourceLocation(),
+                joinClause.getClauseType().toString());
     }
 
     @Override
-    public Void visit(NestClause nestClause, Collection<VariableExpr> freeVars) throws CompilationException {
-        visitJoinAndNest(nestClause, nestClause.getConditionExpression(), freeVars);
-        return null;
+    public Void visit(NestClause nestClause, Collection<VariableExpr> arg) throws CompilationException {
+        // not supposed to be invoked
+        throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, nestClause.getSourceLocation(),
+                nestClause.getClauseType().toString());
     }
 
     @Override
-    public Void visit(UnnestClause unnestClause, Collection<VariableExpr> freeVars) throws CompilationException {
-        unnestClause.getRightExpression().accept(this, freeVars);
-        return null;
+    public Void visit(UnnestClause unnestClause, Collection<VariableExpr> arg) throws CompilationException {
+        // not supposed to be invoked
+        throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, unnestClause.getSourceLocation(),
+                unnestClause.getClauseType().toString());
     }
 
     @Override
@@ -491,20 +526,6 @@
         }
     }
 
-    private void visitJoinAndNest(AbstractBinaryCorrelateClause clause, Expression condition,
-            Collection<VariableExpr> freeVars) throws CompilationException {
-        clause.getRightExpression().accept(this, freeVars);
-        Collection<VariableExpr> conditionFreeVars = new HashSet<>();
-        condition.accept(this, freeVars);
-
-        // The condition expression can free binding variables defined in the join clause.
-        conditionFreeVars.remove(clause.getRightVariable());
-        if (clause.hasPositionalVariable()) {
-            conditionFreeVars.remove(clause.getPositionalVariable());
-        }
-        freeVars.addAll(conditionFreeVars);
-    }
-
     private void visit(List<Expression> exprs, Collection<VariableExpr> arg) throws CompilationException {
         for (Expression expr : exprs) {
             expr.accept(this, arg);
diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateFileTask.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateFileTask.java
index bf1613c..5bec257 100644
--- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateFileTask.java
+++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateFileTask.java
@@ -95,7 +95,7 @@
             }
             //delete mask
             Files.delete(maskPath);
-            LOGGER.info("received file {} from master", localPath);
+            LOGGER.debug("received file {} from master", localPath);
             ReplicationProtocol.sendAck(worker.getChannel(), worker.getReusableBuffer());
         } catch (IOException e) {
             throw new ReplicationException(e);
diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/sync/FileSynchronizer.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/sync/FileSynchronizer.java
index 813b293..968f883 100644
--- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/sync/FileSynchronizer.java
+++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/sync/FileSynchronizer.java
@@ -58,7 +58,7 @@
             String masterNode = appCtx.getReplicaManager().isPartitionOwner(replica.getIdentifier().getPartition())
                     ? appCtx.getServiceContext().getNodeId() : null;
             ReplicateFileTask task = new ReplicateFileTask(file, filePath.getFile().length(), metadata, masterNode);
-            LOGGER.info("attempting to replicate {} to replica {}", task, replica);
+            LOGGER.debug("attempting to replicate {} to replica {}", task, replica);
             ReplicationProtocol.sendTo(replica, task);
             // send the file itself
             try (RandomAccessFile fromFile = new RandomAccessFile(filePath.getFile(), "r");
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractDateTimeConstructorEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractDateTimeConstructorEvaluator.java
index 6765d90..3b4355d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractDateTimeConstructorEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractDateTimeConstructorEvaluator.java
@@ -20,6 +20,7 @@
 package org.apache.asterix.runtime.evaluators.constructors;
 
 import org.apache.asterix.dataflow.data.nontagged.serde.ADateSerializerDeserializer;
+import org.apache.asterix.dataflow.data.nontagged.serde.ATimeSerializerDeserializer;
 import org.apache.asterix.formats.nontagged.SerializerDeserializerProvider;
 import org.apache.asterix.om.base.ADateTime;
 import org.apache.asterix.om.base.AMutableDateTime;
@@ -67,6 +68,13 @@
                 datetimeSerde.serialize(aDateTime, out);
                 result.set(resultStorage);
                 break;
+            case TIME:
+                int chronon = ATimeSerializerDeserializer.getChronon(bytes, startOffset + 1);
+                aDateTime.setValue(chronon);
+                resultStorage.reset();
+                datetimeSerde.serialize(aDateTime, out);
+                result.set(resultStorage);
+                break;
             case STRING:
                 utf8Ptr.set(bytes, startOffset + 1, len - 1);
                 if (parseDateTime(utf8Ptr, aDateTime)) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
index 6de1dda..052f568 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/utils/ClusterStateManager.java
@@ -470,7 +470,12 @@
     @Override
     public synchronized void setRebalanceRequired(boolean rebalanceRequired) throws HyracksDataException {
         this.rebalanceRequired = rebalanceRequired;
-        refreshState();
+        // if the cluster requires a rebalance, we will refresh the cluster state to ensure the state is updated
+        // to REBALANCE_REQUIRED. Otherwise, we will let the rebalance operation update the cluster state to avoid
+        // changing the cluster state during the rebalance
+        if (rebalanceRequired) {
+            refreshState();
+        }
     }
 
     @Override
diff --git a/asterixdb/asterix-server/pom.xml b/asterixdb/asterix-server/pom.xml
index 1c7208e..d8ad238 100644
--- a/asterixdb/asterix-server/pom.xml
+++ b/asterixdb/asterix-server/pom.xml
@@ -314,41 +314,42 @@
             </override>
             <override>
               <gavs>
-                <gav>com.google.http-client:google-http-client-jackson2:1.39.2</gav>
-                <gav>com.google.http-client:google-http-client-appengine:1.39.2</gav>
-                <gav>com.google.http-client:google-http-client-gson:1.39.2</gav>
-                <gav>com.google.http-client:google-http-client-apache-v2:1.39.2</gav>
+                <gav>com.google.http-client:google-http-client:1.41.0</gav>
+                <gav>com.google.http-client:google-http-client-jackson2:1.41.0</gav>
+                <gav>com.google.http-client:google-http-client-appengine:1.41.0</gav>
+                <gav>com.google.http-client:google-http-client-gson:1.41.0</gav>
+                <gav>com.google.http-client:google-http-client-apache-v2:1.41.0</gav>
               </gavs>
-              <url>https://raw.githubusercontent.com/googleapis/google-http-java-client/v1.39.2/LICENSE</url>
+              <url>https://raw.githubusercontent.com/googleapis/google-http-java-client/v1.41.0/LICENSE</url>
             </override>
             <override>
-              <gav>com.google.oauth-client:google-oauth-client:1.31.5</gav>
-              <url>https://raw.githubusercontent.com/googleapis/google-oauth-java-client/v1.31.5/LICENSE</url>
+              <gav>com.google.oauth-client:google-oauth-client:1.32.1</gav>
+              <url>https://raw.githubusercontent.com/googleapis/google-oauth-java-client/v1.32.1/LICENSE</url>
             </override>
             <override>
               <gavs>
-                <gav>com.google.protobuf:protobuf-java:3.16.0</gav>
-                <gav>com.google.protobuf:protobuf-java-util:3.16.0</gav>
+                <gav>com.google.protobuf:protobuf-java:3.19.2</gav>
+                <gav>com.google.protobuf:protobuf-java-util:3.19.2</gav>
               </gavs>
-              <url>https://raw.githubusercontent.com/protocolbuffers/protobuf/v3.16.0/LICENSE</url>
+              <url>https://raw.githubusercontent.com/protocolbuffers/protobuf/v3.19.2/LICENSE</url>
             </override>
             <override>
               <gavs>
-                <gav>com.google.auth:google-auth-library-oauth2-http:0.25.5</gav>
-                <gav>com.google.auth:google-auth-library-credentials:0.25.5</gav>
+                <gav>com.google.auth:google-auth-library-oauth2-http:1.3.0</gav>
+                <gav>com.google.auth:google-auth-library-credentials:1.3.0</gav>
               </gavs>
-              <url>https://raw.githubusercontent.com/googleapis/google-auth-library-java/v0.25.5/LICENSE</url>
+              <url>https://raw.githubusercontent.com/googleapis/google-auth-library-java/v1.3.0/LICENSE</url>
             </override>
             <override>
               <gavs>
-                <gav>com.google.cloud:google-cloud-core:1.94.8</gav>
-                <gav>com.google.cloud:google-cloud-core-http:1.94.8</gav>
+                <gav>com.google.cloud:google-cloud-core:2.3.5</gav>
+                <gav>com.google.cloud:google-cloud-core-http:2.3.5</gav>
               </gavs>
-              <url>https://raw.githubusercontent.com/googleapis/java-core/v1.94.8/LICENSE</url>
+              <url>https://raw.githubusercontent.com/googleapis/java-core/v2.3.5/LICENSE</url>
             </override>
             <override>
-              <gav>com.google.cloud:google-cloud-storage:1.114.0</gav>
-              <url>https://raw.githubusercontent.com/googleapis/java-storage/v1.114.0/LICENSE</url>
+              <gav>com.google.cloud:google-cloud-storage:2.3.0</gav>
+              <url>https://raw.githubusercontent.com/googleapis/java-storage/v2.3.0/LICENSE</url>
             </override>
             <override>
               <gavs>
@@ -358,39 +359,39 @@
               <url>https://raw.githubusercontent.com/census-instrumentation/opencensus-java/v0.28.0/LICENSE</url>
             </override>
             <override>
-              <gav>com.google.api-client:google-api-client:1.31.5</gav>
-              <url>https://raw.githubusercontent.com/googleapis/google-api-java-client/v1.31.5/LICENSE</url>
+              <gav>com.google.api-client:google-api-client:1.33.0</gav>
+              <url>https://raw.githubusercontent.com/googleapis/google-api-java-client/v1.33.0/LICENSE</url>
             </override>
             <override>
-              <gav>com.google.api.grpc:proto-google-iam-v1:1.0.13</gav>
-              <url>https://raw.githubusercontent.com/googleapis/java-iam/v1.0.13/proto-google-iam-v1/LICENSE</url>
+              <gav>com.google.api.grpc:proto-google-iam-v1:1.2.0</gav>
+              <url>https://raw.githubusercontent.com/googleapis/java-iam/v1.2.0/proto-google-iam-v1/LICENSE</url>
             </override>
             <override>
-              <gav>com.google.api.grpc:proto-google-common-protos:2.1.0</gav>
-              <url>https://raw.githubusercontent.com/googleapis/java-common-protos/v2.1.0/proto-google-common-protos/LICENSE</url>
+              <gav>com.google.api.grpc:proto-google-common-protos:2.7.1</gav>
+              <url>https://raw.githubusercontent.com/googleapis/java-common-protos/v2.7.1/proto-google-common-protos/LICENSE</url>
             </override>
             <override>
-              <gav>com.google.api:api-common:1.10.3</gav>
-              <url>https://raw.githubusercontent.com/googleapis/api-common-java/v1.10.3/LICENSE</url>
+              <gav>com.google.api:api-common:2.1.2</gav>
+              <url>https://raw.githubusercontent.com/googleapis/api-common-java/v2.1.2/LICENSE</url>
             </override>
             <override>
               <gavs>
-                <gav>com.google.api:gax-httpjson:0.81.0</gav>
-                <gav>com.google.api:gax:1.64.0</gav>
+                <gav>com.google.api:gax-httpjson:0.93.1</gav>
+                <gav>com.google.api:gax:2.8.1</gav>
               </gavs>
-              <url>https://raw.githubusercontent.com/googleapis/gax-java/v1.64.0/LICENSE</url>
+              <url>https://raw.githubusercontent.com/googleapis/gax-java/v2.8.1/LICENSE</url>
             </override>
             <override>
-              <gav>com.google.auto.value:auto-value-annotations:1.8.1</gav>
-              <url>https://raw.githubusercontent.com/google/auto/auto-value-1.8.1/LICENSE</url>
+              <gav>com.google.auto.value:auto-value-annotations:1.9</gav>
+              <url>https://raw.githubusercontent.com/google/auto/auto-value-1.9/LICENSE</url>
             </override>
             <override>
               <gav>com.google.code.findbugs:jsr305:3.0.2</gav>
               <url>https://raw.githubusercontent.com/findbugsproject/findbugs/3.0.2_preview2/findbugs/licenses/LICENSE-jsr305.txt</url>
             </override>
             <override>
-              <gav>com.google.code.gson:gson:2.8.6</gav>
-              <url>https://raw.githubusercontent.com/google/gson/gson-parent-2.8.6/LICENSE</url>
+              <gav>com.google.code.gson:gson:2.8.9</gav>
+              <url>https://raw.githubusercontent.com/google/gson/gson-parent-2.8.9/LICENSE</url>
             </override>
             <override>
               <gav>com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava</gav>
@@ -401,17 +402,9 @@
               <url>https://raw.githubusercontent.com/google/j2objc/1.3/LICENSE</url>
             </override>
             <override>
-              <gav>io.grpc:grpc-context:1.37.0</gav>
-              <url>https://raw.githubusercontent.com/grpc/grpc-java/v1.37.0/LICENSE</url>
-              <noticeUrl>https://raw.githubusercontent.com/grpc/grpc-java/v1.37.0/NOTICE.txt</noticeUrl>
-            </override>
-            <override>
-              <gav>org.checkerframework:checker-compat-qual:2.5.5</gav>
-              <url>https://raw.githubusercontent.com/typetools/checker-framework/checker-framework-2.5.5/LICENSE.txt</url>
-            </override>
-            <override>
-              <gav>com.google.api:api-common:1.10.3</gav>
-              <url>https://raw.githubusercontent.com/googleapis/api-common-java/v1.10.3/LICENSE</url>
+              <gav>io.grpc:grpc-context:1.43.2</gav>
+              <url>https://raw.githubusercontent.com/grpc/grpc-java/v1.43.2/LICENSE</url>
+              <noticeUrl>https://raw.githubusercontent.com/grpc/grpc-java/v1.43.2/NOTICE.txt</noticeUrl>
             </override>
             <override>
               <gav>org.mindrot:jbcrypt:0.4</gav>
@@ -467,11 +460,11 @@
                 <aliasUrl>https://raw.githubusercontent.com/reactor/reactor-core/v3.4.10/LICENSE</aliasUrl>
                 <aliasUrl>https://raw.githubusercontent.com/codehaus/stax/master/dev/ASF2.0.txt</aliasUrl>
                 <aliasUrl>https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions/raw/5d13925b57ace092ea5e1131c338f464d85545f4/LICENSE.txt</aliasUrl>
-                <aliasUrl>https://raw.githubusercontent.com/google/auto/auto-value-1.8.1/LICENSE</aliasUrl>
+                <aliasUrl>https://raw.githubusercontent.com/google/auto/auto-value-1.9/LICENSE</aliasUrl>
                 <aliasUrl>https://raw.githubusercontent.com/google/j2objc/1.3/LICENSE</aliasUrl>
-                <aliasUrl>https://raw.githubusercontent.com/googleapis/java-common-protos/v2.1.0/proto-google-common-protos/LICENSE</aliasUrl>
-                <aliasUrl>https://raw.githubusercontent.com/googleapis/java-iam/v1.0.13/proto-google-iam-v1/LICENSE</aliasUrl>
-                <aliasUrl>https://raw.githubusercontent.com/googleapis/java-storage/v1.114.0/LICENSE</aliasUrl>
+                <aliasUrl>https://raw.githubusercontent.com/googleapis/java-common-protos/v2.7.1/proto-google-common-protos/LICENSE</aliasUrl>
+                <aliasUrl>https://raw.githubusercontent.com/googleapis/java-iam/v1.2.0/proto-google-iam-v1/LICENSE</aliasUrl>
+                <aliasUrl>https://raw.githubusercontent.com/googleapis/java-storage/v2.3.0/LICENSE</aliasUrl>
                 <aliasUrl>http://repository.jboss.org/licenses/apache-2.0.txt</aliasUrl>
               </aliasUrls>
               <metric>1</metric>
diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml
index 09c5f4a..40ff4e6 100644
--- a/asterixdb/pom.xml
+++ b/asterixdb/pom.xml
@@ -92,7 +92,7 @@
     <hadoop-awsjavasdk.version>1.12.109</hadoop-awsjavasdk.version>
     <azureblobjavasdk.version>12.14.2</azureblobjavasdk.version>
     <azuredatalakejavasdk.version>12.7.2</azuredatalakejavasdk.version>
-    <gcsjavasdk.version>1.114.0</gcsjavasdk.version>
+    <gcsjavasdk.version>2.3.0</gcsjavasdk.version>
     <hadoop-azuresdk.version>8.6.6</hadoop-azuresdk.version>
 
     <implementation.title>Apache AsterixDB - ${project.name}</implementation.title>
@@ -1819,7 +1819,7 @@
       <dependency>
         <groupId>org.apache.tomcat</groupId>
         <artifactId>tomcat-annotations-api</artifactId>
-        <version>10.0.12</version>
+        <version>10.0.16</version>
       </dependency>
       <!-- Google Cloud Storage end -->
       <!-- Azure Data Lake start -->
diff --git a/asterixdb/src/main/appended-resources/supplemental-models.xml b/asterixdb/src/main/appended-resources/supplemental-models.xml
index 61ac8b5..825c845 100644
--- a/asterixdb/src/main/appended-resources/supplemental-models.xml
+++ b/asterixdb/src/main/appended-resources/supplemental-models.xml
@@ -1109,27 +1109,15 @@
   </supplement>
 
   <!-- GCS SDK for Java start -->
-  <!-- com.google.http-client is ALv2 with no NOTICE file -->
-  <supplement>
-    <project>
-      <groupId>com.google.http-client</groupId>
-      <artifactId>google-http-client-jackson2</artifactId>
-      <properties>
-        <license.ignoreMissingEmbeddedLicense>1.39.2</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.39.2</license.ignoreMissingEmbeddedNotice>
-      </properties>
-    </project>
-  </supplement>
-
   <!-- com.google.api has no NOTICE file -->
   <supplement>
     <project>
       <groupId>com.google.api</groupId>
       <artifactId>api-common</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>1.10.3</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.10.3</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>1.10.3</license.ignoreLicenseOverride>
+        <license.ignoreMissingEmbeddedLicense>2.1.2</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>2.1.2</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreLicenseOverride>2.1.2</license.ignoreLicenseOverride>
       </properties>
     </project>
   </supplement>
@@ -1140,9 +1128,9 @@
       <groupId>com.google.api</groupId>
       <artifactId>gax-httpjson</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>0.81.0</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>0.81.0</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>0.81.0</license.ignoreLicenseOverride>
+        <license.ignoreMissingEmbeddedLicense>0.93.1</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>0.93.1</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreLicenseOverride>0.93.1</license.ignoreLicenseOverride>
       </properties>
     </project>
   </supplement>
@@ -1153,9 +1141,9 @@
       <groupId>com.google.api</groupId>
       <artifactId>gax</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>1.64.0</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.64.0</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>1.64.0</license.ignoreLicenseOverride>
+        <license.ignoreMissingEmbeddedLicense>2.8.1</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>2.8.1</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreLicenseOverride>2.8.1</license.ignoreLicenseOverride>
       </properties>
     </project>
   </supplement>
@@ -1166,9 +1154,9 @@
       <groupId>com.google.api-client</groupId>
       <artifactId>google-api-client</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>1.31.5</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.31.5</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>1.31.5</license.ignoreLicenseOverride>
+        <license.ignoreMissingEmbeddedLicense>1.33.0</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>1.33.0</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreLicenseOverride>1.33.0</license.ignoreLicenseOverride>
       </properties>
     </project>
   </supplement>
@@ -1205,9 +1193,9 @@
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-core</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>1.94.8</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.94.8</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>1.94.8</license.ignoreLicenseOverride>
+        <license.ignoreMissingEmbeddedLicense>2.3.5</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>2.3.5</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreLicenseOverride>2.3.5</license.ignoreLicenseOverride>
       </properties>
     </project>
   </supplement>
@@ -1218,9 +1206,9 @@
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-core-http</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>1.94.8</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.94.8</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>1.94.8</license.ignoreLicenseOverride>
+        <license.ignoreMissingEmbeddedLicense>2.3.5</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>2.3.5</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreLicenseOverride>2.3.5</license.ignoreLicenseOverride>
       </properties>
     </project>
   </supplement>
@@ -1231,35 +1219,9 @@
       <groupId>com.google.auth</groupId>
       <artifactId>google-auth-library-credentials</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>0.25.5</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>0.25.5</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>0.25.5</license.ignoreLicenseOverride>
-      </properties>
-    </project>
-  </supplement>
-
-  <!-- io.grpc:grpc-context uses non-fixed ALv2 and has no NOTICE -->
-  <supplement>
-    <project>
-      <groupId>io.grpc</groupId>
-      <artifactId>grpc-context</artifactId>
-      <properties>
-        <license.ignoreMissingEmbeddedLicense>1.37.0</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.37.0</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>1.37.0</license.ignoreLicenseOverride>
-      </properties>
-    </project>
-  </supplement>
-
-  <!-- com.google.protobuf has no NOTICE file -->
-  <supplement>
-    <project>
-      <groupId>com.google.protobuf</groupId>
-      <artifactId>protobuf-java-util</artifactId>
-      <properties>
-        <license.ignoreMissingEmbeddedLicense>3.16.0</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>3.16.0</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>3.16.0</license.ignoreLicenseOverride>
+        <license.ignoreMissingEmbeddedLicense>1.3.0</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>1.3.0</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreLicenseOverride>1.3.0</license.ignoreLicenseOverride>
       </properties>
     </project>
   </supplement>
@@ -1270,9 +1232,35 @@
       <groupId>com.google.auth</groupId>
       <artifactId>google-auth-library-oauth2-http</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>0.25.5</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>0.25.5</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>0.25.5</license.ignoreLicenseOverride>
+        <license.ignoreMissingEmbeddedLicense>1.3.0</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>1.3.0</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreLicenseOverride>1.3.0</license.ignoreLicenseOverride>
+      </properties>
+    </project>
+  </supplement>
+
+  <!-- io.grpc:grpc-context uses non-fixed ALv2 and has no NOTICE -->
+  <supplement>
+    <project>
+      <groupId>io.grpc</groupId>
+      <artifactId>grpc-context</artifactId>
+      <properties>
+        <license.ignoreMissingEmbeddedLicense>1.43.2</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>1.43.2</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreLicenseOverride>1.43.2</license.ignoreLicenseOverride>
+      </properties>
+    </project>
+  </supplement>
+
+  <!-- com.google.protobuf has no NOTICE file -->
+  <supplement>
+    <project>
+      <groupId>com.google.protobuf</groupId>
+      <artifactId>protobuf-java-util</artifactId>
+      <properties>
+        <license.ignoreMissingEmbeddedLicense>3.19.2</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>3.19.2</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreLicenseOverride>3.19.2</license.ignoreLicenseOverride>
       </properties>
     </project>
   </supplement>
@@ -1283,9 +1271,9 @@
       <groupId>com.google.protobuf</groupId>
       <artifactId>protobuf-java</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>3.16.0</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>3.16.0</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>3.16.0</license.ignoreLicenseOverride>
+        <license.ignoreMissingEmbeddedLicense>3.19.2</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>3.19.2</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreLicenseOverride>3.19.2</license.ignoreLicenseOverride>
       </properties>
     </project>
   </supplement>
@@ -1296,7 +1284,19 @@
       <groupId>org.threeten</groupId>
       <artifactId>threetenbp</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedNotice>1.5.1</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreMissingEmbeddedNotice>1.5.2</license.ignoreMissingEmbeddedNotice>
+      </properties>
+    </project>
+  </supplement>
+
+  <!-- com.google.http-client is ALv2 with no NOTICE file -->
+  <supplement>
+    <project>
+      <groupId>com.google.http-client</groupId>
+      <artifactId>google-http-client-jackson2</artifactId>
+      <properties>
+        <license.ignoreMissingEmbeddedLicense>1.41.0</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>1.41.0</license.ignoreMissingEmbeddedNotice>
       </properties>
     </project>
   </supplement>
@@ -1307,8 +1307,8 @@
       <groupId>com.google.http-client</groupId>
       <artifactId>google-http-client</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>1.39.2</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.39.2</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreMissingEmbeddedLicense>1.41.0</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>1.41.0</license.ignoreMissingEmbeddedNotice>
       </properties>
     </project>
   </supplement>
@@ -1319,8 +1319,8 @@
       <groupId>com.google.http-client</groupId>
       <artifactId>google-http-client-appengine</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>1.39.2</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.39.2</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreMissingEmbeddedLicense>1.41.0</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>1.41.0</license.ignoreMissingEmbeddedNotice>
       </properties>
     </project>
   </supplement>
@@ -1331,8 +1331,8 @@
       <groupId>com.google.http-client</groupId>
       <artifactId>google-http-client-apache-v2</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>1.39.2</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.39.2</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreMissingEmbeddedLicense>1.41.0</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>1.41.0</license.ignoreMissingEmbeddedNotice>
       </properties>
     </project>
   </supplement>
@@ -1343,8 +1343,8 @@
       <groupId>com.google.http-client</groupId>
       <artifactId>google-http-client-gson</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>1.39.2</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.39.2</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreMissingEmbeddedLicense>1.41.0</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>1.41.0</license.ignoreMissingEmbeddedNotice>
       </properties>
     </project>
   </supplement>
@@ -1368,9 +1368,9 @@
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>2.8.6</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>2.8.6</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>2.8.6</license.ignoreLicenseOverride>
+        <license.ignoreMissingEmbeddedLicense>2.8.9</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>2.8.9</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreLicenseOverride>2.8.9</license.ignoreLicenseOverride>
       </properties>
     </project>
   </supplement>
@@ -1392,24 +1392,9 @@
   <supplement>
     <project>
       <groupId>org.checkerframework</groupId>
-      <artifactId>checker-compat-qual</artifactId>
+      <artifactId>checker-qual</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>2.5.5</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>2.5.5</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>2.5.5</license.ignoreLicenseOverride>
-      </properties>
-    </project>
-  </supplement>
-
-  <!-- com.google.api:api-common has no NOTICE file -->
-  <supplement>
-    <project>
-      <groupId>com.google.api</groupId>
-      <artifactId>api-common</artifactId>
-      <properties>
-        <license.ignoreMissingEmbeddedLicense>1.10.3</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.10.3</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>1.10.3</license.ignoreLicenseOverride>
+        <license.ignoreMissingEmbeddedNotice>3.20.0</license.ignoreMissingEmbeddedNotice>
       </properties>
     </project>
   </supplement>
@@ -1420,8 +1405,8 @@
       <groupId>com.google.auto.value</groupId>
       <artifactId>auto-value-annotations</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>1.8.1</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.8.1</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreMissingEmbeddedLicense>1.9</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>1.9</license.ignoreMissingEmbeddedNotice>
       </properties>
     </project>
   </supplement>
@@ -1444,21 +1429,21 @@
       <groupId>com.google.apis</groupId>
       <artifactId>google-api-services-storage</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>v1-rev20210127-1.31.0</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>v1-rev20210127-1.31.0</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreMissingEmbeddedLicense>v1-rev20211201-1.32.1</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>v1-rev20211201-1.32.1</license.ignoreMissingEmbeddedNotice>
       </properties>
     </project>
   </supplement>
 
-  <!-- com.google.oauth-client:google-oauth-client:1.31.5 uses non-fixed ALv2 and has no NOTICE file -->
+  <!-- com.google.oauth-client:google-oauth-client uses non-fixed ALv2 and has no NOTICE file -->
   <supplement>
     <project>
       <groupId>com.google.oauth-client</groupId>
       <artifactId>google-oauth-client</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>1.31.5</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.31.5</license.ignoreMissingEmbeddedNotice>
-        <license.ignoreLicenseOverride>1.31.5</license.ignoreLicenseOverride>
+        <license.ignoreMissingEmbeddedLicense>1.32.1</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>1.32.1</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreLicenseOverride>1.32.1</license.ignoreLicenseOverride>
       </properties>
     </project>
   </supplement>
@@ -1469,8 +1454,8 @@
       <groupId>com.google.api.grpc</groupId>
       <artifactId>proto-google-iam-v1</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>1.0.13</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.0.13</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreMissingEmbeddedLicense>1.2.0</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>1.2.0</license.ignoreMissingEmbeddedNotice>
       </properties>
     </project>
   </supplement>
@@ -1481,8 +1466,8 @@
       <groupId>com.google.api.grpc</groupId>
       <artifactId>proto-google-common-protos</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>2.1.0</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>2.1.0</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreMissingEmbeddedLicense>2.7.1</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>2.7.1</license.ignoreMissingEmbeddedNotice>
       </properties>
     </project>
   </supplement>
@@ -1493,8 +1478,8 @@
       <groupId>com.google.cloud</groupId>
       <artifactId>google-cloud-storage</artifactId>
       <properties>
-        <license.ignoreMissingEmbeddedLicense>1.114.0</license.ignoreMissingEmbeddedLicense>
-        <license.ignoreMissingEmbeddedNotice>1.114.0</license.ignoreMissingEmbeddedNotice>
+        <license.ignoreMissingEmbeddedLicense>2.3.0</license.ignoreMissingEmbeddedLicense>
+        <license.ignoreMissingEmbeddedNotice>2.3.0</license.ignoreMissingEmbeddedNotice>
       </properties>
     </project>
   </supplement>
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_google_gson_gson-parent-2.8.6_LICENSE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_google_gson_gson-parent-2.8.9_LICENSE.txt
similarity index 100%
rename from asterixdb/src/main/licenses/content/raw.githubusercontent.com_google_gson_gson-parent-2.8.6_LICENSE.txt
rename to asterixdb/src/main/licenses/content/raw.githubusercontent.com_google_gson_gson-parent-2.8.9_LICENSE.txt
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_api-common-java_v1.10.3_LICENSE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_api-common-java_v2.1.2_LICENSE.txt
similarity index 100%
rename from asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_api-common-java_v1.10.3_LICENSE.txt
rename to asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_api-common-java_v2.1.2_LICENSE.txt
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_gax-java_v1.64.0_LICENSE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_gax-java_v2.8.1_LICENSE.txt
similarity index 100%
rename from asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_gax-java_v1.64.0_LICENSE.txt
rename to asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_gax-java_v2.8.1_LICENSE.txt
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-api-java-client_v1.31.5_LICENSE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-api-java-client_v1.33.0_LICENSE.txt
similarity index 100%
rename from asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-api-java-client_v1.31.5_LICENSE.txt
rename to asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-api-java-client_v1.33.0_LICENSE.txt
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-auth-library-java_v0.25.5_LICENSE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-auth-library-java_v1.3.0_LICENSE.txt
similarity index 100%
rename from asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-auth-library-java_v0.25.5_LICENSE.txt
rename to asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-auth-library-java_v1.3.0_LICENSE.txt
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-http-java-client_v1.39.2_LICENSE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-http-java-client_v1.39.2_LICENSE.txt
deleted file mode 100644
index f49a4e1..0000000
--- a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-http-java-client_v1.39.2_LICENSE.txt
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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.
\ No newline at end of file
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-api-java-client_v1.31.5_LICENSE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-http-java-client_v1.41.0_LICENSE.txt
similarity index 100%
copy from asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-api-java-client_v1.31.5_LICENSE.txt
copy to asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-http-java-client_v1.41.0_LICENSE.txt
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-oauth-java-client_v1.31.5_LICENSE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-oauth-java-client_v1.31.5_LICENSE.txt
deleted file mode 100644
index f49a4e1..0000000
--- a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-oauth-java-client_v1.31.5_LICENSE.txt
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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.
\ No newline at end of file
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-api-java-client_v1.31.5_LICENSE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-oauth-java-client_v1.32.1_LICENSE.txt
similarity index 100%
copy from asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-api-java-client_v1.31.5_LICENSE.txt
copy to asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_google-oauth-java-client_v1.32.1_LICENSE.txt
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_java-core_v1.94.8_LICENSE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_java-core_v2.3.5_LICENSE.txt
similarity index 100%
rename from asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_java-core_v1.94.8_LICENSE.txt
rename to asterixdb/src/main/licenses/content/raw.githubusercontent.com_googleapis_java-core_v2.3.5_LICENSE.txt
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_grpc_grpc-java_v1.37.0_LICENSE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_grpc_grpc-java_v1.43.2_LICENSE.txt
similarity index 100%
rename from asterixdb/src/main/licenses/content/raw.githubusercontent.com_grpc_grpc-java_v1.37.0_LICENSE.txt
rename to asterixdb/src/main/licenses/content/raw.githubusercontent.com_grpc_grpc-java_v1.43.2_LICENSE.txt
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_grpc_grpc-java_v1.37.0_NOTICE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_grpc_grpc-java_v1.43.2_NOTICE.txt
similarity index 100%
rename from asterixdb/src/main/licenses/content/raw.githubusercontent.com_grpc_grpc-java_v1.37.0_NOTICE.txt
rename to asterixdb/src/main/licenses/content/raw.githubusercontent.com_grpc_grpc-java_v1.43.2_NOTICE.txt
diff --git a/asterixdb/src/main/licenses/content/raw.githubusercontent.com_protocolbuffers_protobuf_v3.16.0_LICENSE.txt b/asterixdb/src/main/licenses/content/raw.githubusercontent.com_protocolbuffers_protobuf_v3.19.2_LICENSE.txt
similarity index 100%
rename from asterixdb/src/main/licenses/content/raw.githubusercontent.com_protocolbuffers_protobuf_v3.16.0_LICENSE.txt
rename to asterixdb/src/main/licenses/content/raw.githubusercontent.com_protocolbuffers_protobuf_v3.19.2_LICENSE.txt
diff --git a/hyracks-fullstack/hyracks/hyracks-http/pom.xml b/hyracks-fullstack/hyracks/hyracks-http/pom.xml
index 466a447..e06f6be 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-http/pom.xml
@@ -125,5 +125,10 @@
       <version>${project.version}</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.hyracks</groupId>
+      <artifactId>hyracks-api</artifactId>
+      <version>${project.version}</version>
+    </dependency>
   </dependencies>
 </project>
\ No newline at end of file
diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/AbstractServlet.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/AbstractServlet.java
index ff23ac2..64a76f7 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/AbstractServlet.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/AbstractServlet.java
@@ -26,6 +26,7 @@
 import java.util.Arrays;
 import java.util.concurrent.ConcurrentMap;
 
+import org.apache.hyracks.api.exceptions.IFormattedException;
 import org.apache.hyracks.http.api.IServlet;
 import org.apache.hyracks.http.api.IServletRequest;
 import org.apache.hyracks.http.api.IServletResponse;
@@ -98,7 +99,7 @@
             } else if (HttpMethod.OPTIONS.equals(method)) {
                 options(request, response);
             } else {
-                notAllowed(method, response);
+                methodNotAllowed(method, response);
             }
         } catch (Exception e) {
             LOGGER.log(Level.WARN, "Unhandled exception", e);
@@ -113,21 +114,31 @@
     }
 
     protected void sendError(IServletResponse response, HttpResponseStatus status, String message) throws IOException {
+        sendError(response, HttpUtil.ContentType.TEXT_PLAIN, status, message);
+    }
+
+    protected void sendError(IServletResponse response, String contentType, HttpResponseStatus status, String message)
+            throws IOException {
         response.setStatus(status);
-        HttpUtil.setContentType(response, HttpUtil.ContentType.TEXT_PLAIN, StandardCharsets.UTF_8);
+        HttpUtil.setContentType(response, contentType, StandardCharsets.UTF_8);
         if (message != null) {
             response.writer().println(message);
         }
         if (LOGGER.isInfoEnabled()) {
-            LOGGER.info("sendError: status=" + status + ", message=" + message);
+            LOGGER.info("sendError: status={}, message={}", status, message);
         }
     }
 
-    protected void sendError(IServletResponse response, HttpResponseStatus status) throws IOException {
-        sendError(response, status, null);
+    protected void sendError(IServletResponse response, HttpResponseStatus status, IFormattedException ex)
+            throws IOException {
+        sendError(response, status, ex != null ? ex.getMessage() : null);
     }
 
-    protected void notAllowed(HttpMethod method, IServletResponse response) throws IOException {
+    protected void sendError(IServletResponse response, HttpResponseStatus status) throws IOException {
+        sendError(response, status, status.reasonPhrase());
+    }
+
+    protected void methodNotAllowed(HttpMethod method, IServletResponse response) throws IOException {
         sendError(response, HttpResponseStatus.METHOD_NOT_ALLOWED,
                 "Method " + method + " not allowed for the requested resource.");
     }
@@ -135,37 +146,37 @@
     @SuppressWarnings("squid:S1172")
     protected void get(IServletRequest request, IServletResponse response) throws Exception {
         // designed to be extended but an error in standard case
-        notAllowed(HttpMethod.GET, response);
+        methodNotAllowed(HttpMethod.GET, response);
     }
 
     @SuppressWarnings("squid:S1172")
     protected void head(IServletRequest request, IServletResponse response) throws Exception {
         // designed to be extended but an error in standard case
-        notAllowed(HttpMethod.HEAD, response);
+        methodNotAllowed(HttpMethod.HEAD, response);
     }
 
     @SuppressWarnings("squid:S1172")
     protected void post(IServletRequest request, IServletResponse response) throws Exception {
         // designed to be extended but an error in standard case
-        notAllowed(HttpMethod.POST, response);
+        methodNotAllowed(HttpMethod.POST, response);
     }
 
     @SuppressWarnings("squid:S1172")
     protected void put(IServletRequest request, IServletResponse response) throws Exception {
         // designed to be extended but an error in standard case
-        notAllowed(HttpMethod.PUT, response);
+        methodNotAllowed(HttpMethod.PUT, response);
     }
 
     @SuppressWarnings("squid:S1172")
     protected void delete(IServletRequest request, IServletResponse response) throws Exception {
         // designed to be extended but an error in standard case
-        notAllowed(HttpMethod.DELETE, response);
+        methodNotAllowed(HttpMethod.DELETE, response);
     }
 
     @SuppressWarnings("squid:S1172")
     protected void options(IServletRequest request, IServletResponse response) throws Exception {
         // designed to be extended but an error in standard case
-        notAllowed(HttpMethod.OPTIONS, response);
+        methodNotAllowed(HttpMethod.OPTIONS, response);
     }
 
     public String host(IServletRequest request) {
diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/JSONUtil.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/JSONUtil.java
index 5c1b292..f937e97 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/JSONUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/JSONUtil.java
@@ -35,6 +35,7 @@
 import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.util.concurrent.UncheckedExecutionException;
 
 public class JSONUtil {
 
@@ -53,11 +54,11 @@
         return SORTED_MAPPER.writeValueAsString(SORTED_MAPPER.treeToValue(node, Object.class));
     }
 
-    public static String convertNodeOrThrow(final JsonNode node) {
+    public static String convertNodeUnchecked(final JsonNode node) throws UncheckedExecutionException {
         try {
             return convertNode(node);
         } catch (JsonProcessingException e) {
-            throw new IllegalStateException(e);
+            throw new UncheckedExecutionException(e);
         }
     }