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

richardantal pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/phoenix.git


The following commit(s) were added to refs/heads/master by this push:
     new 33d060f629 PHOENIX-7492: Need to clear the dependencies once it is 
closed (#2044)
33d060f629 is described below

commit 33d060f629424e9df29988425e17077b5517cf71
Author: Abhradeep Kundu <[email protected]>
AuthorDate: Thu Dec 19 18:32:04 2024 +0530

    PHOENIX-7492: Need to clear the dependencies once it is closed (#2044)
    
    
    Co-authored-by: abhradeep.kundu <[email protected]>
---
 .../org/apache/phoenix/execute/BaseQueryPlan.java  |  1 +
 .../org/apache/phoenix/execute/HashJoinPlan.java   |  1 +
 .../execute/LiteralResultIterationPlan.java        |  1 +
 .../org/apache/phoenix/end2end/UnionAllIT.java     | 99 ++++++++++++++++++++++
 4 files changed, 102 insertions(+)

diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java
index bee410e6af..fc6d7648f7 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java
@@ -216,6 +216,7 @@ public abstract class BaseQueryPlan implements QueryPlan {
                                        super.close();
                                } finally {
                                        
SQLCloseables.closeAll(dependencies.values());
+                                       dependencies.clear();
                                }
                        }
                };
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java
index 1ea56706a8..259d718acb 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java
@@ -226,6 +226,7 @@ public class HashJoinPlan extends DelegateQueryPlan {
         }
         if (firstException != null) {
             SQLCloseables.closeAllQuietly(dependencies.values());
+            dependencies.clear();
             throw firstException;
         }
 
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/execute/LiteralResultIterationPlan.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/execute/LiteralResultIterationPlan.java
index df17e73752..31a70c16cc 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/execute/LiteralResultIterationPlan.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/execute/LiteralResultIterationPlan.java
@@ -100,6 +100,7 @@ public class LiteralResultIterationPlan extends 
BaseQueryPlan {
             @Override
             public void close() throws SQLException {
                 SQLCloseables.closeAll(caches.values());
+                caches.clear();
                 this.closed = true;
             }
 
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UnionAllIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UnionAllIT.java
index b15f8c66c2..728edc15e6 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UnionAllIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UnionAllIT.java
@@ -765,6 +765,105 @@ public class UnionAllIT extends ParallelStatsDisabledIT {
         }
     }
 
+    @Test
+    public void testBug7492() throws Exception {
+
+        String accountTableDDL = "CREATE TABLE ACCOUNT (\n" +
+                "ACCOUNT_IDENTIFIER VARCHAR(100) NOT NULL,\n" +
+                "CRN_NUMBER_TEXT VARCHAR(100),\n" +
+                "ORIGINAL_CURRENCY_CODE VARCHAR(100),\n" +
+                "OUTSTANDING_BALANCE_AMOUNT DECIMAL(20,4),\n" +
+                "SOURCE_SYSTEM_CODE VARCHAR(6) NOT NULL,\n" +
+                "ACCOUNT_TYPE_CODE VARCHAR(100)\n" +
+                "CONSTRAINT pk PRIMARY KEY (ACCOUNT_IDENTIFIER, 
SOURCE_SYSTEM_CODE)\n" +
+                ") SALT_BUCKET=4";
+        String exchangeTableDDL = "CREATE TABLE EXCHANGE_RATE (\n" +
+                "CURRENCY_CODE VARCHAR(3) NOT NULL,\n" +
+                "SPOT_RATE DECIMAL(15,9),\n" +
+                "EXPANDED_SPOT_RATE DECIMAL(19,9),\n" +
+                "RECORD_LAST_UPDATE_DATE TIMESTAMP\n" +
+                "CONSTRAINT pk PRIMARY KEY (CURRENCY_CODE)\n" +
+                ")SALT_BUCKETS=4";
+        String customerTableDDL = "CREATE TABLE CUSTOMER (\n" +
+                "CUSTOMER_IDENTIFIER VARCHAR(100),\n" +
+                "SOURCE_SYSTEM_CODE VARCHAR(100) NOT NULL,\n" +
+                "CRN_NUMBER_TEXT VARCHAR(100),\n" +
+                "CONSTRAINT pk PRIMARY KEY (CUSTOMER_IDENTIFIER, 
SOURCE_SYSTEM_CODE)\n" +
+                ") SALT_BUCKETS=4";
+
+        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
+        Connection conn = DriverManager.getConnection(getUrl(), props);
+        conn.setAutoCommit(false);
+
+        try {
+            createTestTable(getUrl(), accountTableDDL);
+            createTestTable(getUrl(), exchangeTableDDL);
+            createTestTable(getUrl(), customerTableDDL);
+
+            String dml = "UPSERT INTO ACCOUNT VALUES ('ACC_1', 'CRN_1', 'IDR', 
999, 'SRC_1', 'ATC_1')";
+            conn.prepareStatement(dml).execute();
+
+            dml = "UPSERT INTO EXCHANGE_RATE VALUES ('IDR', 0.53233436, 
0.198919644, '2024-07-03')";
+            conn.prepareStatement(dml).execute();
+
+            dml = "UPSERT INTO CUSTOMER VALUES ('CUST_1', 'SRC_1','CRN_1')";
+            conn.prepareStatement(dml).execute();
+
+            conn.commit();
+
+            String query = "select * from CUSTOMER";
+
+            PreparedStatement pstmt = conn.prepareStatement(query);
+            assertTrue(pstmt.getParameterMetaData() != null);
+            ResultSet rs = pstmt.executeQuery();
+            assertTrue(rs.next());
+            assertEquals("CUST_1",rs.getString(1));
+            assertEquals("SRC_1",rs.getString(2));
+            assertEquals("CRN_1",rs.getString(3));
+            assertFalse(rs.next());
+
+            query = "SELECT\n" +
+                    "    ca1.ORIGINAL_CURRENCY_CODE AS 
ORIGINAL_CURRENCY_CODE\n" +
+                    "FROM\n" +
+                    "    ACCOUNT ca1\n" +
+                    "LEFT JOIN EXCHANGE_RATE er1 ON\n" +
+                    "    ca1.ORIGINAL_CURRENCY_CODE = er1.CURRENCY_CODE\n" +
+                    "WHERE\n" +
+                    "    (ca1.ACCOUNT_IDENTIFIER,\n" +
+                    "    ca1.SOURCE_SYSTEM_CODE) IN (\n" +
+                    "    SELECT\n" +
+                    "        ca.ACCOUNT_IDENTIFIER,\n" +
+                    "        ca.SOURCE_SYSTEM_CODE\n" +
+                    "    FROM\n" +
+                    "        ACCOUNT ca\n" +
+                    "    WHERE\n" +
+                    "        ca.CRN_NUMBER_TEXT IN (\n" +
+                    "        SELECT\n" +
+                    "            CRN_NUMBER_TEXT\n" +
+                    "        FROM\n" +
+                    "            CUSTOMER\n" +
+                    "        WHERE\n" +
+                    "            CUSTOMER_IDENTIFIER = 'CUST_2'\n" +
+                    "        AND SOURCE_SYSTEM_CODE='SRC_1'))\n" +
+                    "AND ca1.ACCOUNT_TYPE_CODE IN ('ATC_1')\n" +
+                    "UNION ALL\n" +
+                    "SELECT\n" +
+                    "    ca1.ORIGINAL_CURRENCY_CODE AS 
ORIGINAL_CURRENCY_CODE\n" +
+                    "FROM\n" +
+                    "    ACCOUNT ca1\n" +
+                    "WHERE\n" +
+                    "    ca1.ACCOUNT_TYPE_CODE IN ('ATC_1')";
+            pstmt = conn.prepareStatement(query);
+            assertTrue(pstmt.getParameterMetaData() != null);
+            rs = pstmt.executeQuery();
+
+            assertTrue(rs.next());
+
+        } finally {
+            conn.close();
+        }
+    }
+
     @Test
     public void testParameterMetaDataNotNull() throws Exception {
         String tableName1 = generateUniqueName();

Reply via email to