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

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


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

commit 59fd350a94c9b621a05847fc34c4e76551b40e32
Author: Abhradeep Kundu <[email protected]>
AuthorDate: Thu Dec 19 19:03:35 2024 +0530

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

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 9b76b319db..2a854f0b69 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
@@ -763,6 +763,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();
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java 
b/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java
index 91d7f9b25e..77d1079816 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java
@@ -219,6 +219,7 @@ public abstract class BaseQueryPlan implements QueryPlan {
                                        super.close();
                                } finally {
                                        
SQLCloseables.closeAll(dependencies.values());
+                                       dependencies.clear();
                                }
                        }
                };
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java 
b/phoenix-core/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java
index 74f38ed63c..d5de50c4a2 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/HashJoinPlan.java
@@ -223,6 +223,7 @@ public class HashJoinPlan extends DelegateQueryPlan {
         }
         if (firstException != null) {
             SQLCloseables.closeAllQuietly(dependencies.values());
+            dependencies.clear();
             throw firstException;
         }
 
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/execute/LiteralResultIterationPlan.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/execute/LiteralResultIterationPlan.java
index df17e73752..31a70c16cc 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/execute/LiteralResultIterationPlan.java
+++ 
b/phoenix-core/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;
             }
 

Reply via email to