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

emaynard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git


The following commit(s) were added to refs/heads/main by this push:
     new ef9e2572b JDBC: create objects without reflection (#1434)
ef9e2572b is described below

commit ef9e2572b64a83437ded59f8f02e3d4e9e9b928d
Author: Prashant Singh <35593236+singhpk...@users.noreply.github.com>
AuthorDate: Thu May 1 13:01:25 2025 -0700

    JDBC: create objects without reflection (#1434)
---
 .../relational/jdbc/JdbcBasePersistenceImpl.java   | 26 ++++++++--------
 .../relational/jdbc/QueryGenerator.java            | 35 ++++++++--------------
 .../impl/relational/jdbc/QueryGeneratorTest.java   |  4 +--
 3 files changed, 28 insertions(+), 37 deletions(-)

diff --git 
a/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcBasePersistenceImpl.java
 
b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcBasePersistenceImpl.java
index f58101b91..0d74011cc 100644
--- 
a/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcBasePersistenceImpl.java
+++ 
b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcBasePersistenceImpl.java
@@ -266,7 +266,7 @@ public class JdbcBasePersistenceImpl implements 
BasePersistence, IntegrationPers
       @Nonnull PolarisCallContext callCtx, long catalogId, long entityId, int 
typeCode) {
     Map<String, Object> params =
         Map.of("catalog_id", catalogId, "id", entityId, "type_code", typeCode, 
"realm_id", realmId);
-    String query = generateSelectQuery(ModelEntity.class, params);
+    String query = generateSelectQuery(new ModelEntity(), params);
     return getPolarisBaseEntity(query);
   }
 
@@ -289,7 +289,7 @@ public class JdbcBasePersistenceImpl implements 
BasePersistence, IntegrationPers
             name,
             "realm_id",
             realmId);
-    String query = generateSelectQuery(ModelEntity.class, params);
+    String query = generateSelectQuery(new ModelEntity(), params);
     return getPolarisBaseEntity(query);
   }
 
@@ -410,7 +410,7 @@ public class JdbcBasePersistenceImpl implements 
BasePersistence, IntegrationPers
 
     // Limit can't be pushed down, due to client side filtering
     // absence of transaction.
-    String query = QueryGenerator.generateSelectQuery(ModelEntity.class, 
params);
+    String query = QueryGenerator.generateSelectQuery(new ModelEntity(), 
params);
     try {
       List<PolarisBaseEntity> results =
           datasourceOperations.executeSelect(
@@ -430,7 +430,7 @@ public class JdbcBasePersistenceImpl implements 
BasePersistence, IntegrationPers
 
     Map<String, Object> params =
         Map.of("catalog_id", catalogId, "id", entityId, "realm_id", realmId);
-    String query = QueryGenerator.generateSelectQuery(ModelEntity.class, 
params);
+    String query = QueryGenerator.generateSelectQuery(new ModelEntity(), 
params);
     PolarisBaseEntity b = getPolarisBaseEntity(query);
     return b == null ? 0 : b.getGrantRecordsVersion();
   }
@@ -457,7 +457,7 @@ public class JdbcBasePersistenceImpl implements 
BasePersistence, IntegrationPers
             privilegeCode,
             "realm_id",
             realmId);
-    String query = generateSelectQuery(ModelGrantRecord.class, params);
+    String query = generateSelectQuery(new ModelGrantRecord(), params);
     try {
       List<PolarisGrantRecord> results =
           datasourceOperations.executeSelect(
@@ -492,7 +492,7 @@ public class JdbcBasePersistenceImpl implements 
BasePersistence, IntegrationPers
             securableId,
             "realm_id",
             realmId);
-    String query = generateSelectQuery(ModelGrantRecord.class, params);
+    String query = generateSelectQuery(new ModelGrantRecord(), params);
     try {
       List<PolarisGrantRecord> results =
           datasourceOperations.executeSelect(
@@ -518,7 +518,7 @@ public class JdbcBasePersistenceImpl implements 
BasePersistence, IntegrationPers
     Map<String, Object> params =
         Map.of(
             "grantee_catalog_id", granteeCatalogId, "grantee_id", granteeId, 
"realm_id", realmId);
-    String query = generateSelectQuery(ModelGrantRecord.class, params);
+    String query = generateSelectQuery(new ModelGrantRecord(), params);
     try {
       List<PolarisGrantRecord> results =
           datasourceOperations.executeSelect(
@@ -550,7 +550,7 @@ public class JdbcBasePersistenceImpl implements 
BasePersistence, IntegrationPers
     if (optionalEntityType != null) {
       params.put("type_code", optionalEntityType.getCode());
     }
-    String query = generateSelectQuery(ModelEntity.class, params);
+    String query = generateSelectQuery(new ModelEntity(), params);
     try {
       List<ModelEntity> results =
           datasourceOperations.executeSelect(
@@ -569,7 +569,7 @@ public class JdbcBasePersistenceImpl implements 
BasePersistence, IntegrationPers
   public PolarisPrincipalSecrets loadPrincipalSecrets(
       @Nonnull PolarisCallContext callCtx, @Nonnull String clientId) {
     Map<String, Object> params = Map.of("principal_client_id", clientId, 
"realm_id", realmId);
-    String query = generateSelectQuery(ModelPrincipalAuthenticationData.class, 
params);
+    String query = generateSelectQuery(new ModelPrincipalAuthenticationData(), 
params);
     try {
       List<PolarisPrincipalSecrets> results =
           datasourceOperations.executeSelect(
@@ -828,7 +828,7 @@ public class JdbcBasePersistenceImpl implements 
BasePersistence, IntegrationPers
             policyCatalogId,
             "realm_id",
             realmId);
-    String query = generateSelectQuery(ModelPolicyMappingRecord.class, params);
+    String query = generateSelectQuery(new ModelPolicyMappingRecord(), params);
     List<PolarisPolicyMappingRecord> results = 
fetchPolicyMappingRecords(query);
     Preconditions.checkState(results.size() <= 1, "More than one policy 
mapping records found");
     return results.size() == 1 ? results.getFirst() : null;
@@ -851,7 +851,7 @@ public class JdbcBasePersistenceImpl implements 
BasePersistence, IntegrationPers
             policyTypeCode,
             "realm_id",
             realmId);
-    String query = generateSelectQuery(ModelPolicyMappingRecord.class, params);
+    String query = generateSelectQuery(new ModelPolicyMappingRecord(), params);
     return fetchPolicyMappingRecords(query);
   }
 
@@ -861,7 +861,7 @@ public class JdbcBasePersistenceImpl implements 
BasePersistence, IntegrationPers
       @Nonnull PolarisCallContext callCtx, long targetCatalogId, long 
targetId) {
     Map<String, Object> params =
         Map.of("target_catalog_id", targetCatalogId, "target_id", targetId, 
"realm_id", realmId);
-    String query = generateSelectQuery(ModelPolicyMappingRecord.class, params);
+    String query = generateSelectQuery(new ModelPolicyMappingRecord(), params);
     return fetchPolicyMappingRecords(query);
   }
 
@@ -871,7 +871,7 @@ public class JdbcBasePersistenceImpl implements 
BasePersistence, IntegrationPers
       @Nonnull PolarisCallContext callCtx, long policyCatalogId, long 
policyId) {
     Map<String, Object> params =
         Map.of("policy_catalog_id", policyCatalogId, "policy_id", policyId, 
"realm_id", realmId);
-    String query = generateSelectQuery(ModelPolicyMappingRecord.class, params);
+    String query = generateSelectQuery(new ModelPolicyMappingRecord(), params);
     return fetchPolicyMappingRecords(query);
   }
 
diff --git 
a/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/QueryGenerator.java
 
b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/QueryGenerator.java
index 7d0b5ec92..d8f8d0864 100644
--- 
a/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/QueryGenerator.java
+++ 
b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/QueryGenerator.java
@@ -20,7 +20,6 @@ package 
org.apache.polaris.extension.persistence.relational.jdbc;
 
 import com.google.common.annotations.VisibleForTesting;
 import jakarta.annotation.Nonnull;
-import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -34,9 +33,9 @@ import 
org.apache.polaris.extension.persistence.relational.jdbc.models.ModelPrin
 
 public class QueryGenerator {
 
-  public static String generateSelectQuery(
-      @Nonnull Class<?> entityClass, @Nonnull Map<String, Object> whereClause) 
{
-    return generateSelectQuery(entityClass, generateWhereClause(whereClause));
+  public static <T> String generateSelectQuery(
+      @Nonnull Converter<T> entity, @Nonnull Map<String, Object> whereClause) {
+    return generateSelectQuery(entity, generateWhereClause(whereClause));
   }
 
   public static String generateDeleteQueryForEntityGrantRecords(
@@ -96,7 +95,7 @@ public class QueryGenerator {
     condition.append(")");
     condition.append(" AND realm_id = '").append(realmId).append("'");
 
-    return generateSelectQuery(ModelEntity.class, " WHERE " + condition);
+    return generateSelectQuery(new ModelEntity(), " WHERE " + condition);
   }
 
   public static <T> String generateInsertQuery(
@@ -158,24 +157,16 @@ public class QueryGenerator {
 
   @VisibleForTesting
   public static <T> String generateSelectQuery(
-      @Nonnull Class<?> entityClass, @Nonnull String filter) {
-    String tableName = getTableName(entityClass);
-    try {
-      Converter<T> entity = (Converter<T>) 
entityClass.getDeclaredConstructor().newInstance();
-      Map<String, Object> objectMap = entity.toMap();
-      String columns = String.join(", ", objectMap.keySet());
-      StringBuilder query =
-          new StringBuilder("SELECT ").append(columns).append(" FROM 
").append(tableName);
-      if (!filter.isEmpty()) {
-        query.append(filter);
-      }
-      return query.toString();
-    } catch (InstantiationException
-        | IllegalAccessException
-        | InvocationTargetException
-        | NoSuchMethodException e) {
-      throw new RuntimeException("Failed to create instance of " + 
entityClass.getName(), e);
+      @Nonnull Converter<T> entity, @Nonnull String filter) {
+    String tableName = getTableName(entity.getClass());
+    Map<String, Object> objectMap = entity.toMap();
+    String columns = String.join(", ", objectMap.keySet());
+    StringBuilder query =
+        new StringBuilder("SELECT ").append(columns).append(" FROM 
").append(tableName);
+    if (!filter.isEmpty()) {
+      query.append(filter);
     }
+    return query.toString();
   }
 
   @VisibleForTesting
diff --git 
a/extension/persistence/relational-jdbc/src/test/java/org/apache/polaris/extension/persistence/impl/relational/jdbc/QueryGeneratorTest.java
 
b/extension/persistence/relational-jdbc/src/test/java/org/apache/polaris/extension/persistence/impl/relational/jdbc/QueryGeneratorTest.java
index 653487b47..2f886ac69 100644
--- 
a/extension/persistence/relational-jdbc/src/test/java/org/apache/polaris/extension/persistence/impl/relational/jdbc/QueryGeneratorTest.java
+++ 
b/extension/persistence/relational-jdbc/src/test/java/org/apache/polaris/extension/persistence/impl/relational/jdbc/QueryGeneratorTest.java
@@ -47,7 +47,7 @@ public class QueryGeneratorTest {
     whereClause.put("entity_version", 1);
     String expectedQuery =
         "SELECT entity_version, to_purge_timestamp, internal_properties, 
catalog_id, purge_timestamp, sub_type_code, create_timestamp, 
last_update_timestamp, parent_id, name, id, drop_timestamp, properties, 
grant_records_version, type_code FROM POLARIS_SCHEMA.ENTITIES WHERE 
entity_version = 1 AND name = 'testEntity'";
-    assertEquals(expectedQuery, 
QueryGenerator.generateSelectQuery(ModelEntity.class, whereClause));
+    assertEquals(expectedQuery, QueryGenerator.generateSelectQuery(new 
ModelEntity(), whereClause));
   }
 
   @Test
@@ -199,7 +199,7 @@ public class QueryGeneratorTest {
     Map<String, Object> emptyWhereClause = Collections.emptyMap();
     assertEquals(
         expectedQuery,
-        QueryGenerator.generateSelectQuery(ModelEntity.class, " WHERE name = 
'testEntity'"));
+        QueryGenerator.generateSelectQuery(new ModelEntity(), " WHERE name = 
'testEntity'"));
   }
 
   @Test

Reply via email to