This is an automated email from the ASF dual-hosted git repository.

billyliu pushed a commit to branch 2.3.x
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit 60639456423a44ea6d88b0548fa3c1541db57e98
Author: nichunen <chunen...@kyligence.io>
AuthorDate: Mon Mar 12 20:28:24 2018 +0800

    KYLIN-3276 Fix query with different dynamic parameters get the same query 
result
---
 .../org/apache/kylin/jdbc/ITJDBCDriverTest.java    | 27 ++++++++++++++++++++++
 .../kylin/rest/request/PrepareSqlRequest.java      | 18 ++++++++++++++-
 .../org/apache/kylin/rest/request/SQLRequest.java  |  2 +-
 3 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/kylin-it/src/test/java/org/apache/kylin/jdbc/ITJDBCDriverTest.java 
b/kylin-it/src/test/java/org/apache/kylin/jdbc/ITJDBCDriverTest.java
index 765b12c..de5e193 100644
--- a/kylin-it/src/test/java/org/apache/kylin/jdbc/ITJDBCDriverTest.java
+++ b/kylin-it/src/test/java/org/apache/kylin/jdbc/ITJDBCDriverTest.java
@@ -301,6 +301,33 @@ public class ITJDBCDriverTest extends 
HBaseMetadataTestCase {
 
     }
 
+    @Test
+    public void testPreparedStatementWithCache() throws Exception {
+        Connection conn = getConnection();
+
+        PreparedStatement statement = conn
+                .prepareStatement("select count(1) as TRANS_CNT from 
test_kylin_fact where LSTG_FORMAT_NAME = ?");
+
+        statement.setString(1, "ABIN");
+        ResultSet rs = statement.executeQuery();
+        Assert.assertTrue(rs.next());
+        Object object = rs.getObject(1);
+        long countFirst = (long) object;
+
+        statement.setString(1, "FP-GTC");
+        rs = statement.executeQuery();
+        Assert.assertTrue(rs.next());
+        object = rs.getObject(1);
+        long countSecond = (long) object;
+
+        Assert.assertTrue(countFirst > countSecond);
+
+        rs.close();
+        statement.close();
+        conn.close();
+
+    }
+
     private static class SystemPropertiesOverride {
         HashMap<String, String> backup = new HashMap<String, String>();
 
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/request/PrepareSqlRequest.java
 
b/server-base/src/main/java/org/apache/kylin/rest/request/PrepareSqlRequest.java
index e296248..97a4863 100644
--- 
a/server-base/src/main/java/org/apache/kylin/rest/request/PrepareSqlRequest.java
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/request/PrepareSqlRequest.java
@@ -19,7 +19,9 @@
 package org.apache.kylin.rest.request;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 
 /**
  * @author xduo
@@ -41,7 +43,7 @@ public class PrepareSqlRequest extends SQLRequest {
         this.params = params;
     }
 
-    public static class StateParam implements Serializable{
+    public static class StateParam implements Serializable {
         private String className;
         private String value;
 
@@ -97,6 +99,20 @@ public class PrepareSqlRequest extends SQLRequest {
     }
 
     @Override
+    public Object getCacheKey() {
+        if (cacheKey != null)
+            return cacheKey;
+
+        cacheKey = super.getCacheKey();
+
+        if (params != null) {
+            ArrayList keyList = (ArrayList) (cacheKey);
+            Collections.addAll(keyList, params);
+        }
+        return cacheKey;
+    }
+
+    @Override
     public int hashCode() {
         final int prime = 31;
         int result = super.hashCode();
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/request/SQLRequest.java 
b/server-base/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
index 92533b8..56db745 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
@@ -39,7 +39,7 @@ public class SQLRequest implements Serializable {
 
     private Map<String, String> backdoorToggles;
 
-    private volatile Object cacheKey = null;
+    protected volatile Object cacheKey = null;
 
     public SQLRequest() {
     }

-- 
To stop receiving notification emails like this one, please contact
billy...@apache.org.

Reply via email to