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

shahrs87 pushed a commit to branch PHOENIX-6883-feature
in repository https://gitbox.apache.org/repos/asf/phoenix.git


The following commit(s) were added to refs/heads/PHOENIX-6883-feature by this 
push:
     new d6a6147453 PHOENIX-7307 : Client should refresh its metadata cache 
before running EXPLAIN if last_ddl_timestamp validation is enabled (#1881)
d6a6147453 is described below

commit d6a6147453e0b1664b72f2477d7e68b12ed735fd
Author: palash <palashc...@gmail.com>
AuthorDate: Wed Apr 17 11:13:33 2024 -0700

    PHOENIX-7307 : Client should refresh its metadata cache before running 
EXPLAIN if last_ddl_timestamp validation is enabled (#1881)
---
 .../main/java/org/apache/phoenix/jdbc/PhoenixStatement.java | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java
index c3c52255d2..897de9350a 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/PhoenixStatement.java
@@ -867,6 +867,19 @@ public class PhoenixStatement implements 
PhoenixMonitoredStatement, SQLCloseable
         public QueryPlan compilePlan(PhoenixStatement stmt, Sequence.ValueOp 
seqAction) throws SQLException {
             CompilableStatement compilableStmt = getStatement();
             StatementPlan compilePlan = compilableStmt.compilePlan(stmt, 
Sequence.ValueOp.VALIDATE_SEQUENCE);
+            // if client is validating timestamps, ensure its metadata cache 
is up to date.
+            if (ValidateLastDDLTimestampUtil
+                    .getValidateLastDdlTimestampEnabled(stmt.getConnection())) 
{
+                Set<TableRef> tableRefs = compilePlan.getSourceRefs();
+                for (TableRef tableRef : tableRefs) {
+                    new MetaDataClient(stmt.getConnection()).updateCache(
+                            stmt.getConnection().getTenantId(),
+                            tableRef.getTable().getSchemaName().getString(),
+                            tableRef.getTable().getTableName().getString(),
+                            true);
+                }
+                compilePlan = compilableStmt.compilePlan(stmt, 
Sequence.ValueOp.VALIDATE_SEQUENCE);
+            }
             // For a QueryPlan, we need to get its optimized plan; for a 
MutationPlan, its enclosed QueryPlan
             // has already been optimized during compilation.
             if (compilePlan instanceof QueryPlan) {

Reply via email to