Skip to content

Commit d5d1092

Browse files
committed
PolicyEntity and PolicyType
add more tests use plural form fix test fix test Throw error instead of -1 add policyMapping persistence
1 parent 495aea0 commit d5d1092

27 files changed

+2520
-7
lines changed

extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkMetaStoreSessionImpl.java

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,15 @@
5353
import org.apache.polaris.core.persistence.PrincipalSecretsGenerator;
5454
import org.apache.polaris.core.persistence.RetryOnConcurrencyException;
5555
import org.apache.polaris.core.persistence.transactional.AbstractTransactionalPersistence;
56+
import org.apache.polaris.core.policy.PolarisPolicyMappingRecord;
5657
import org.apache.polaris.core.storage.PolarisStorageConfigurationInfo;
5758
import org.apache.polaris.core.storage.PolarisStorageIntegration;
5859
import org.apache.polaris.core.storage.PolarisStorageIntegrationProvider;
5960
import org.apache.polaris.jpa.models.ModelEntity;
6061
import org.apache.polaris.jpa.models.ModelEntityActive;
6162
import org.apache.polaris.jpa.models.ModelEntityChangeTracking;
6263
import org.apache.polaris.jpa.models.ModelGrantRecord;
64+
import org.apache.polaris.jpa.models.ModelPolicyMappingRecord;
6365
import org.apache.polaris.jpa.models.ModelPrincipalSecrets;
6466
import org.slf4j.Logger;
6567
import org.slf4j.LoggerFactory;
@@ -664,6 +666,90 @@ PolarisStorageIntegration<T> loadPolarisStorageIntegrationInCurrentTxn(
664666
return storageIntegrationProvider.getStorageIntegrationForConfig(storageConfig);
665667
}
666668

669+
/** {@inheritDoc} */
670+
@Override
671+
public void writeToPolicyMappingRecordsInCurrentTxn(
672+
@Nonnull PolarisCallContext callCtx, @Nonnull PolarisPolicyMappingRecord record) {
673+
674+
this.store.writeToPolicyMappingRecords(localSession.get(), record);
675+
}
676+
677+
/** {@inheritDoc} */
678+
@Override
679+
public void deleteFromPolicyMappingRecordsInCurrentTxn(
680+
@Nonnull PolarisCallContext callCtx, @Nonnull PolarisPolicyMappingRecord record) {
681+
this.store.deleteFromPolicyMappingRecords(localSession.get(), record);
682+
}
683+
684+
/** {@inheritDoc} */
685+
@Override
686+
public void deleteAllEntityPolicyMappingRecordsInCurrentTxn(
687+
@Nonnull PolarisCallContext callCtx,
688+
@Nonnull PolarisEntityCore entity,
689+
@Nonnull List<PolarisPolicyMappingRecord> mappingOnTarget,
690+
@Nonnull List<PolarisPolicyMappingRecord> mappingOnPolicy) {
691+
this.store.deleteAllEntityPolicyMappingRecords(localSession.get(), entity);
692+
}
693+
694+
/** {@inheritDoc} */
695+
@Nullable
696+
@Override
697+
public PolarisPolicyMappingRecord lookupPolicyMappingRecordInCurrentTxn(
698+
@Nonnull PolarisCallContext callCtx,
699+
long targetCatalogId,
700+
long targetId,
701+
int policyTypeCode,
702+
long policyCatalogId,
703+
long policyId) {
704+
return ModelPolicyMappingRecord.toPolicyMappingRecord(
705+
this.store.lookupPolicyMappingRecord(
706+
localSession.get(),
707+
targetCatalogId,
708+
targetId,
709+
policyTypeCode,
710+
policyCatalogId,
711+
policyId));
712+
}
713+
714+
/** {@inheritDoc} */
715+
@Nonnull
716+
@Override
717+
public List<PolarisPolicyMappingRecord> loadPoliciesOnTargetByTypeInCurrentTxn(
718+
@Nonnull PolarisCallContext callCtx,
719+
long targetCatalogId,
720+
long targetId,
721+
int policyTypeCode) {
722+
return this.store
723+
.loadPoliciesOnTargetByType(localSession.get(), targetCatalogId, targetId, policyTypeCode)
724+
.stream()
725+
.map(ModelPolicyMappingRecord::toPolicyMappingRecord)
726+
.toList();
727+
}
728+
729+
/** {@inheritDoc} */
730+
@Nonnull
731+
@Override
732+
public List<PolarisPolicyMappingRecord> loadAllPoliciesOnTargetInCurrentTxn(
733+
@Nonnull PolarisCallContext callCtx, long targetCatalogId, long targetId) {
734+
return this.store
735+
.loadAllPoliciesOnTarget(localSession.get(), targetCatalogId, targetId)
736+
.stream()
737+
.map(ModelPolicyMappingRecord::toPolicyMappingRecord)
738+
.toList();
739+
}
740+
741+
/** {@inheritDoc} */
742+
@Nonnull
743+
@Override
744+
public List<PolarisPolicyMappingRecord> loadAllPoliciesOnPolicyInCurrentTxn(
745+
@Nonnull PolarisCallContext callCtx, long policyCatalogId, long policyId) {
746+
return this.store
747+
.loadAllPoliciesOnPolicy(localSession.get(), policyCatalogId, policyId)
748+
.stream()
749+
.map(ModelPolicyMappingRecord::toPolicyMappingRecord)
750+
.toList();
751+
}
752+
667753
@Override
668754
public void rollback() {
669755
EntityManager session = localSession.get();

extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/PolarisEclipseLinkStore.java

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@
3535
import org.apache.polaris.core.entity.PolarisEntityType;
3636
import org.apache.polaris.core.entity.PolarisGrantRecord;
3737
import org.apache.polaris.core.entity.PolarisPrincipalSecrets;
38+
import org.apache.polaris.core.policy.PolarisPolicyMappingRecord;
3839
import org.apache.polaris.jpa.models.ModelEntity;
3940
import org.apache.polaris.jpa.models.ModelEntityActive;
4041
import org.apache.polaris.jpa.models.ModelEntityChangeTracking;
4142
import org.apache.polaris.jpa.models.ModelGrantRecord;
43+
import org.apache.polaris.jpa.models.ModelPolicyMappingRecord;
4244
import org.apache.polaris.jpa.models.ModelPrincipalSecrets;
4345
import org.slf4j.Logger;
4446
import org.slf4j.LoggerFactory;
@@ -411,6 +413,121 @@ void deletePrincipalSecrets(EntityManager session, String clientId) {
411413
session.remove(modelPrincipalSecrets);
412414
}
413415

416+
void writeToPolicyMappingRecords(
417+
EntityManager session, PolarisPolicyMappingRecord mappingRecord) {
418+
diagnosticServices.check(session != null, "session_is_null");
419+
checkInitialized();
420+
421+
session.persist(ModelPolicyMappingRecord.fromPolicyMappingRecord(mappingRecord));
422+
}
423+
424+
void deleteFromPolicyMappingRecords(
425+
EntityManager session, PolarisPolicyMappingRecord mappingRecord) {
426+
diagnosticServices.check(session != null, "session_is_null");
427+
checkInitialized();
428+
429+
ModelPolicyMappingRecord lookupPolicyMappingRecord =
430+
lookupPolicyMappingRecord(
431+
session,
432+
mappingRecord.getTargetCatalogId(),
433+
mappingRecord.getTargetId(),
434+
mappingRecord.getPolicyTypeCode(),
435+
mappingRecord.getPolicyCatalogId(),
436+
mappingRecord.getPolicyId());
437+
438+
diagnosticServices.check(lookupPolicyMappingRecord != null, "policy_mapping_record_not_found");
439+
session.remove(lookupPolicyMappingRecord);
440+
}
441+
442+
void deleteAllEntityPolicyMappingRecords(EntityManager session, PolarisEntityCore entity) {
443+
diagnosticServices.check(session != null, "session_is_null");
444+
checkInitialized();
445+
446+
loadAllPoliciesOnPolicy(session, entity.getCatalogId(), entity.getId())
447+
.forEach(session::remove);
448+
loadAllPoliciesOnTarget(session, entity.getCatalogId(), entity.getId())
449+
.forEach(session::remove);
450+
}
451+
452+
ModelPolicyMappingRecord lookupPolicyMappingRecord(
453+
EntityManager session,
454+
long targetCatalogId,
455+
long targetId,
456+
long policyTypeCode,
457+
long policyCatalogId,
458+
long policyId) {
459+
diagnosticServices.check(session != null, "session_is_null");
460+
checkInitialized();
461+
462+
return session
463+
.createQuery(
464+
"SELECT m from ModelPolicyMappingRecord m "
465+
+ "where m.targetCatalogId=:targetCatalogId "
466+
+ "and m.targetId=:targetId "
467+
+ "and m.policyTypeCode=:policyTypeCode "
468+
+ "and m.policyCatalogId=:policyCatalogId "
469+
+ "and m.policyId=:policyId",
470+
ModelPolicyMappingRecord.class)
471+
.setParameter("targetCatalogId", targetCatalogId)
472+
.setParameter("targetId", targetId)
473+
.setParameter("policyTypeCode", policyTypeCode)
474+
.setParameter("policyCatalogId", policyCatalogId)
475+
.setParameter("policyId", policyId)
476+
.getResultStream()
477+
.findFirst()
478+
.orElse(null);
479+
}
480+
481+
List<ModelPolicyMappingRecord> loadPoliciesOnTargetByType(
482+
EntityManager session, long targetCatalogId, long targetId, int policyTypeCode) {
483+
diagnosticServices.check(session != null, "session_is_null");
484+
checkInitialized();
485+
486+
return session
487+
.createQuery(
488+
"SELECT m from ModelPolicyMappingRecord m "
489+
+ "where m.targetCatalogId=:targetCatalogId "
490+
+ "and m.targetId=:targetId "
491+
+ "and m.policyTypeCode=:policyTypeCode",
492+
ModelPolicyMappingRecord.class)
493+
.setParameter("targetCatalogId", targetCatalogId)
494+
.setParameter("targetId", targetId)
495+
.setParameter("policyTypeCode", policyTypeCode)
496+
.getResultList();
497+
}
498+
499+
List<ModelPolicyMappingRecord> loadAllPoliciesOnTarget(
500+
EntityManager session, long targetCatalogId, long targetId) {
501+
diagnosticServices.check(session != null, "session_is_null");
502+
checkInitialized();
503+
504+
return session
505+
.createQuery(
506+
"SELECT m from ModelPolicyMappingRecord m "
507+
+ " where m.targetCatalogId=:targetCatalogId "
508+
+ "and m.targetId=:targetId",
509+
ModelPolicyMappingRecord.class)
510+
.setParameter("targetCatalogId", targetCatalogId)
511+
.setParameter("targetId", targetId)
512+
.getResultList();
513+
}
514+
515+
List<ModelPolicyMappingRecord> loadAllPoliciesOnPolicy(
516+
EntityManager session, long policyCatalogId, long policyId) {
517+
diagnosticServices.check(session != null, "session_is_null");
518+
checkInitialized();
519+
520+
return session
521+
.createQuery(
522+
"SELECT m from ModelPolicyMappingRecord m "
523+
+ "where m.policyCatalogId=:policyCatalogId "
524+
+ "and m.policyId=:policyId",
525+
ModelPolicyMappingRecord.class)
526+
.setParameter("policyCatalogId", policyCatalogId)
527+
.setParameter("policyId", policyId)
528+
.getResultList();
529+
}
530+
414531
private void checkInitialized() {
415532
diagnosticServices.check(this.initialized.get(), "store_not_initialized");
416533
}

extension/persistence/eclipselink/src/main/resources/META-INF/persistence.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<class>org.apache.polaris.jpa.models.ModelEntityActive</class>
3030
<class>org.apache.polaris.jpa.models.ModelEntityChangeTracking</class>
3131
<class>org.apache.polaris.jpa.models.ModelGrantRecord</class>
32+
<class>org.apache.polaris.jpa.models.ModelPolicyMappingRecord</class>
3233
<class>org.apache.polaris.jpa.models.ModelPrincipalSecrets</class>
3334
<class>org.apache.polaris.jpa.models.ModelSequenceId</class>
3435
<shared-cache-mode>NONE</shared-cache-mode>

0 commit comments

Comments
 (0)