Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ public PolarisBaseEntity lookupEntity(
@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);
}

Expand All @@ -289,7 +289,7 @@ public PolarisBaseEntity lookupEntityByName(
name,
"realm_id",
realmId);
String query = generateSelectQuery(ModelEntity.class, params);
String query = generateSelectQuery(new ModelEntity(), params);
return getPolarisBaseEntity(query);
}

Expand Down Expand Up @@ -410,7 +410,7 @@ public <T> List<T> listEntities(

// 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(
Expand All @@ -430,7 +430,7 @@ public int lookupEntityGrantRecordsVersion(

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();
}
Expand All @@ -457,7 +457,7 @@ public PolarisGrantRecord lookupGrantRecord(
privilegeCode,
"realm_id",
realmId);
String query = generateSelectQuery(ModelGrantRecord.class, params);
String query = generateSelectQuery(new ModelGrantRecord(), params);
try {
List<PolarisGrantRecord> results =
datasourceOperations.executeSelect(
Expand Down Expand Up @@ -492,7 +492,7 @@ public List<PolarisGrantRecord> loadAllGrantRecordsOnSecurable(
securableId,
"realm_id",
realmId);
String query = generateSelectQuery(ModelGrantRecord.class, params);
String query = generateSelectQuery(new ModelGrantRecord(), params);
try {
List<PolarisGrantRecord> results =
datasourceOperations.executeSelect(
Expand All @@ -518,7 +518,7 @@ public List<PolarisGrantRecord> loadAllGrantRecordsOnGrantee(
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(
Expand Down Expand Up @@ -550,7 +550,7 @@ public boolean hasChildren(
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(
Expand All @@ -569,7 +569,7 @@ public boolean hasChildren(
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(
Expand Down Expand Up @@ -828,7 +828,7 @@ public PolarisPolicyMappingRecord lookupPolicyMappingRecord(
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;
Expand All @@ -851,7 +851,7 @@ public List<PolarisPolicyMappingRecord> loadPoliciesOnTargetByType(
policyTypeCode,
"realm_id",
realmId);
String query = generateSelectQuery(ModelPolicyMappingRecord.class, params);
String query = generateSelectQuery(new ModelPolicyMappingRecord(), params);
return fetchPolicyMappingRecords(query);
}

Expand All @@ -861,7 +861,7 @@ public List<PolarisPolicyMappingRecord> loadAllPoliciesOnTarget(
@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);
}

Expand All @@ -871,7 +871,7 @@ public List<PolarisPolicyMappingRecord> loadAllTargetsOnPolicy(
@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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

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;
Expand All @@ -34,9 +33,9 @@

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(
Expand Down Expand Up @@ -96,7 +95,7 @@ public static String generateSelectQueryWithEntityIds(
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(
Expand Down Expand Up @@ -158,24 +157,16 @@ public static <T> String generateDeleteQuery(

@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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ void testGenerateSelectQuery_withMapWhereClause() {
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
Expand Down Expand Up @@ -199,7 +199,7 @@ void testGenerateSelectQuery_withFilter() {
Map<String, Object> emptyWhereClause = Collections.emptyMap();
assertEquals(
expectedQuery,
QueryGenerator.generateSelectQuery(ModelEntity.class, " WHERE name = 'testEntity'"));
QueryGenerator.generateSelectQuery(new ModelEntity(), " WHERE name = 'testEntity'"));
}

@Test
Expand Down