diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
index b33bba5..7e563e17 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
@@ -382,8 +382,8 @@
         return result;
     }
 
-    protected void setRequestParam(IServletRequest request, QueryServiceRequestParameters param)
-            throws IOException, AlgebricksException {
+    protected void setRequestParam(IServletRequest request, QueryServiceRequestParameters param,
+            Map<String, String> optionalParams) throws IOException, AlgebricksException {
         param.setHost(host(request));
         param.setPath(servletPath(request));
         String contentType = HttpUtil.getContentTypeOnly(request);
@@ -498,7 +498,11 @@
             sessionOutput.hold();
             sessionOutput.out().print("{\n");
             HttpUtil.setContentType(response, HttpUtil.ContentType.APPLICATION_JSON, HttpUtil.Encoding.UTF8);
-            setRequestParam(request, param);
+            Map<String, String> optionalParams = null;
+            if (optionalParamProvider != null) {
+                optionalParams = optionalParamProvider.apply(request);
+            }
+            setRequestParam(request, param, optionalParams);
             LOGGER.info("handleRequest: {}", param);
             ResultDelivery delivery = parseResultDelivery(param.getMode());
             setSessionConfig(sessionOutput, param, delivery);
@@ -513,10 +517,6 @@
                 throw new RuntimeDataException(ErrorCode.NO_STATEMENT_PROVIDED);
             }
             String statementsText = param.getStatement() + ";";
-            Map<String, String> optionalParams = null;
-            if (optionalParamProvider != null) {
-                optionalParams = optionalParamProvider.apply(request);
-            }
             Map<String, byte[]> statementParams = org.apache.asterix.app.translator.RequestParameters
                     .serializeParameterValues(param.getStatementParams());
             // CORS
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppStatementUtil.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppStatementUtil.java
index f1278ec..e41b9ac 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppStatementUtil.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppStatementUtil.java
@@ -44,6 +44,7 @@
     private SqlppStatementUtil() {
     }
 
+    @SuppressWarnings("squid:S1172") // unused variable
     public static StringBuilder getCreateDataverseStatement(StringBuilder stringBuilder, String dataverseName,
             boolean ifNotExists, int version) {
         stringBuilder.append(CREATE_DATAVERSE);
@@ -51,6 +52,7 @@
         return ifNotExists(stringBuilder, ifNotExists).append(SEMI_COLON);
     }
 
+    @SuppressWarnings("squid:S1172") // unused variable
     public static StringBuilder getDropDatasetStatement(StringBuilder stringBuilder, String dataverseName,
             String datasetName, boolean ifExists, int version) {
         stringBuilder.append(DROP_DATASET);
@@ -58,6 +60,7 @@
         return ifExists(stringBuilder, ifExists).append(SEMI_COLON);
     }
 
+    @SuppressWarnings("squid:S1172") // unused variable
     public static StringBuilder getCreateIndexStatement(StringBuilder stringBuilder, String dataverseName,
             String datasetName, String indexName, String fields, int version) {
         stringBuilder.append(CREATE_INDEX);
@@ -65,6 +68,7 @@
         return enclose(stringBuilder, dataverseName, datasetName).append(fields).append(SEMI_COLON);
     }
 
+    @SuppressWarnings("squid:S1172") // unused variable
     public static StringBuilder getCreatePrimaryIndexStatement(StringBuilder stringBuilder, String dataverseName,
             String datasetName, String indexName, int version) {
         stringBuilder.append(CREATE_PRIMARY_INDEX);
@@ -72,6 +76,7 @@
         return enclose(stringBuilder, dataverseName, datasetName).append(SEMI_COLON);
     }
 
+    @SuppressWarnings("squid:S1172") // unused variable
     public static StringBuilder getDropIndexStatement(StringBuilder stringBuilder, String dataverseName,
             String datasetName, String indexName, boolean ifExists, int version) {
         stringBuilder.append(DROP_INDEX);
