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();