Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed May 3, 2021
2 parents d801958 + e3759e0 commit 2c893ac
Show file tree
Hide file tree
Showing 73 changed files with 1,181 additions and 923 deletions.
214 changes: 107 additions & 107 deletions repo/repo-sqale/sql/pgnew-repo.sql

Large diffs are not rendered by default.

Expand Up @@ -15,7 +15,6 @@
import com.evolveum.midpoint.repo.sqale.filtering.InOidFilterProcessor;
import com.evolveum.midpoint.repo.sqale.qmodel.SqaleTableMapping;
import com.evolveum.midpoint.repo.sqlbase.SqlQueryContext;
import com.evolveum.midpoint.repo.sqlbase.SqlRepoContext;
import com.evolveum.midpoint.repo.sqlbase.filtering.FilterProcessor;
import com.evolveum.midpoint.repo.sqlbase.mapping.QueryTableMapping;
import com.evolveum.midpoint.repo.sqlbase.querydsl.FlexibleRelationalPathBase;
Expand All @@ -24,8 +23,8 @@ public class SqaleQueryContext<S, Q extends FlexibleRelationalPathBase<R>, R>
extends SqlQueryContext<S, Q, R> {

public static <S, Q extends FlexibleRelationalPathBase<R>, R> SqaleQueryContext<S, Q, R> from(
Class<S> schemaType, SqaleSupportService sqaleSupportService,
SqlRepoContext sqlRepoContext) {
Class<S> schemaType,
SqaleRepoContext sqlRepoContext) {

SqaleTableMapping<S, Q, R> rootMapping = sqlRepoContext.getMappingBySchemaType(schemaType);
Q rootPath = rootMapping.defaultAlias();
Expand All @@ -35,16 +34,20 @@ public static <S, Q extends FlexibleRelationalPathBase<R>, R> SqaleQueryContext<
query.getMetadata().setValidate(true);

return new SqaleQueryContext<>(
rootPath, rootMapping, sqaleSupportService, sqlRepoContext, query);
rootPath, rootMapping, sqlRepoContext, query);
}

private SqaleQueryContext(
Q entityPath,
SqaleTableMapping<S, Q, R> mapping,
SqaleSupportService sqaleSupportService,
SqlRepoContext sqlRepoContext,
SqaleRepoContext sqlRepoContext,
SQLQuery<?> query) {
super(entityPath, mapping, sqaleSupportService, query);
super(entityPath, mapping, sqlRepoContext, query);
}

@Override
public SqaleRepoContext repositoryContext() {
return (SqaleRepoContext) super.repositoryContext();
}

@Override
Expand All @@ -53,23 +56,19 @@ public FilterProcessor<InOidFilter> createInOidFilter(SqlQueryContext<?, ?, ?> c
}

public @NotNull Integer searchCachedRelationId(QName qName) {
return supportService().searchCachedRelationId(qName);
return repositoryContext().searchCachedRelationId(qName);
}

/**
* Returns {@link SqaleQueryContext} - lot of ugly casting here, but it is not possible to
* use covariant return type with covariant parametric types (narrower generics).
* Returns derived {@link SqaleQueryContext} for join or subquery.
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
protected <TS, TQ extends FlexibleRelationalPathBase<TR>, TR> SqlQueryContext<TS, TQ, TR>
deriveNew(TQ newPath, QueryTableMapping<TS, TQ, TR> newMapping) {
return (SqlQueryContext<TS, TQ, TR>) new SqaleQueryContext(
newPath, (SqaleTableMapping<?, ?, ?>) newMapping,
supportService(), sqlRepoContext, sqlQuery);
}

private SqaleSupportService supportService() {
return (SqaleSupportService) sqlSupportService;
return new SqaleQueryContext<>(
newPath,
(SqaleTableMapping<TS, TQ, TR>) newMapping,
repositoryContext(),
sqlQuery);
}
}
Expand Up @@ -14,13 +14,15 @@
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.repo.sqale.qmodel.common.MContainerType;
import com.evolveum.midpoint.repo.sqale.qmodel.common.QUri;
import com.evolveum.midpoint.repo.sqale.qmodel.object.MObjectType;
import com.evolveum.midpoint.repo.sqale.qmodel.ref.MReferenceType;
import com.evolveum.midpoint.repo.sqlbase.JdbcRepositoryConfiguration;
import com.evolveum.midpoint.repo.sqlbase.SqlRepoContext;
import com.evolveum.midpoint.repo.sqlbase.mapping.QueryModelMappingRegistry;
import com.evolveum.midpoint.repo.sqlbase.querydsl.QuerydslJsonbType;
import com.evolveum.midpoint.schema.SchemaService;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

/**
Expand Down Expand Up @@ -69,29 +71,32 @@ public void clearCaches() {
uriCache.initialize(this::newJdbcSession);
}

/** @see UriCache#searchId(QName) */
@NotNull
public Integer searchCachedUriId(QName qName) {
return uriCache.searchId(qName);
}

/** @see UriCache#searchId(String) */
public Integer searchCachedUriId(String uri) {
return uriCache.searchId(uri);
}

/** @see UriCache#resolveUriToId(String) */
public @NotNull Integer resolveUriToId(String uri) {
return uriCache.resolveUriToId(uri);
}

/** @see UriCache#resolveUriToId(QName) */
public Integer resolveUriToId(QName uri) {
return uriCache.resolveUriToId(uri);
/**
* Returns ID for relation QName or {@link UriCache#UNKNOWN_ID} without going to the database.
* Relation is normalized before consulting {@link UriCache}.
* Never returns null; returns default ID for configured default relation if provided with null.
*/
public @NotNull Integer searchCachedRelationId(QName qName) {
return searchCachedUriId(QNameUtil.qNameToUri(normalizeRelation(qName)));
}

/** Returns ID for URI creating new cache row in DB as needed. */
public Integer processCacheableUri(String uri) {
return uriCache.processCacheableUri(uri);
}

/**
* Returns ID for relation QName creating new {@link QUri} row in DB as needed.
* Relation is normalized before consulting the cache.
* Never returns null, returns default ID for configured default relation.
*/
public Integer processCacheableRelation(QName qName) {
return processCacheableUri(
QNameUtil.qNameToUri(normalizeRelation(qName)));
}
}
Expand Up @@ -112,52 +112,64 @@ public SqaleRepoContext sqlRepoContext(
SqaleRepositoryConfiguration repositoryConfiguration,
SchemaService schemaService,
DataSource dataSource) {
QueryModelMappingRegistry mappingRegistry = new QueryModelMappingRegistry()
// ordered alphabetically here, mappings without schema type at the end
.register(AbstractRoleType.COMPLEX_TYPE, QAbstractRoleMapping.INSTANCE)
QueryModelMappingRegistry mappingRegistry = new QueryModelMappingRegistry();
SqaleRepoContext repositoryContext = new SqaleRepoContext(
repositoryConfiguration, dataSource, schemaService, mappingRegistry);

// Registered mapping needs repository context which needs registry. Now we can fill it.
// Mappings are ordered alphabetically here, mappings without schema type are at the end.
mappingRegistry
.register(AbstractRoleType.COMPLEX_TYPE,
QAbstractRoleMapping.init(repositoryContext))
.register(AccessCertificationDefinitionType.COMPLEX_TYPE,
QAccessCertificationDefinitionMapping.INSTANCE)
.register(ArchetypeType.COMPLEX_TYPE, QArchetypeMapping.INSTANCE)
.register(AssignmentHolderType.COMPLEX_TYPE, QAssignmentHolderMapping.INSTANCE)
.register(AssignmentType.COMPLEX_TYPE, QAssignmentMapping.INSTANCE)
.register(CaseType.COMPLEX_TYPE, QCaseMapping.INSTANCE)
.register(DashboardType.COMPLEX_TYPE, QDashboardMapping.INSTANCE)
.register(FocusType.COMPLEX_TYPE, QFocusMapping.INSTANCE)
.register(FormType.COMPLEX_TYPE, QFormMapping.INSTANCE)
.register(FunctionLibraryType.COMPLEX_TYPE, QFunctionLibraryMapping.INSTANCE)
.register(ConnectorType.COMPLEX_TYPE, QConnectorMapping.INSTANCE)
.register(ConnectorHostType.COMPLEX_TYPE, QConnectorHostMapping.INSTANCE)
.register(GenericObjectType.COMPLEX_TYPE, QGenericObjectMapping.INSTANCE)
.register(LookupTableType.COMPLEX_TYPE, QLookupTableMapping.INSTANCE)
.register(LookupTableRowType.COMPLEX_TYPE, QLookupTableRowMapping.INSTANCE)
.register(NodeType.COMPLEX_TYPE, QNodeMapping.INSTANCE)
.register(ObjectType.COMPLEX_TYPE, QObjectMapping.INSTANCE)
.register(ObjectTemplateType.COMPLEX_TYPE, QObjectTemplateMapping.INSTANCE)
.register(ObjectCollectionType.COMPLEX_TYPE, QObjectCollectionMapping.INSTANCE)
.register(OperationExecutionType.COMPLEX_TYPE, QOperationExecutionMapping.INSTANCE)
.register(ReportType.COMPLEX_TYPE, QReportMapping.INSTANCE)
.register(ReportDataType.COMPLEX_TYPE, QReportDataMapping.INSTANCE)
.register(ResourceType.COMPLEX_TYPE, QResourceMapping.INSTANCE)
.register(RoleType.COMPLEX_TYPE, QRoleMapping.INSTANCE)
.register(SecurityPolicyType.COMPLEX_TYPE, QSecurityPolicyMapping.INSTANCE)
.register(SequenceType.COMPLEX_TYPE, QSequenceMapping.INSTANCE)
.register(ServiceType.COMPLEX_TYPE, QServiceMapping.INSTANCE)
.register(ShadowType.COMPLEX_TYPE, QShadowMapping.INSTANCE)
QAccessCertificationDefinitionMapping.init(repositoryContext))
.register(ArchetypeType.COMPLEX_TYPE, QArchetypeMapping.init(repositoryContext))
.register(AssignmentHolderType.COMPLEX_TYPE,
QAssignmentHolderMapping.init(repositoryContext))
.register(AssignmentType.COMPLEX_TYPE,
QAssignmentMapping.initAssignment(repositoryContext))
.register(CaseType.COMPLEX_TYPE, QCaseMapping.init(repositoryContext))
.register(DashboardType.COMPLEX_TYPE, QDashboardMapping.init(repositoryContext))
.register(FocusType.COMPLEX_TYPE, QFocusMapping.init(repositoryContext))
.register(FormType.COMPLEX_TYPE, QFormMapping.init(repositoryContext))
.register(FunctionLibraryType.COMPLEX_TYPE,
QFunctionLibraryMapping.init(repositoryContext))
.register(ConnectorType.COMPLEX_TYPE, QConnectorMapping.init(repositoryContext))
.register(ConnectorHostType.COMPLEX_TYPE,
QConnectorHostMapping.init(repositoryContext))
.register(GenericObjectType.COMPLEX_TYPE,
QGenericObjectMapping.init(repositoryContext))
.register(LookupTableType.COMPLEX_TYPE, QLookupTableMapping.init(repositoryContext))
.register(LookupTableRowType.COMPLEX_TYPE,
QLookupTableRowMapping.init(repositoryContext))
.register(NodeType.COMPLEX_TYPE, QNodeMapping.init(repositoryContext))
.register(ObjectType.COMPLEX_TYPE, QObjectMapping.init(repositoryContext))
.register(ObjectCollectionType.COMPLEX_TYPE,
QObjectCollectionMapping.init(repositoryContext))
.register(ObjectTemplateType.COMPLEX_TYPE,
QObjectTemplateMapping.init(repositoryContext))
.register(OperationExecutionType.COMPLEX_TYPE,
QOperationExecutionMapping.init(repositoryContext))
.register(ReportType.COMPLEX_TYPE, QReportMapping.init(repositoryContext))
.register(ReportDataType.COMPLEX_TYPE, QReportDataMapping.init(repositoryContext))
.register(ResourceType.COMPLEX_TYPE, QResourceMapping.init(repositoryContext))
.register(RoleType.COMPLEX_TYPE, QRoleMapping.init(repositoryContext))
.register(SecurityPolicyType.COMPLEX_TYPE,
QSecurityPolicyMapping.init(repositoryContext))
.register(SequenceType.COMPLEX_TYPE, QSequenceMapping.init(repositoryContext))
.register(ServiceType.COMPLEX_TYPE, QServiceMapping.init(repositoryContext))
.register(ShadowType.COMPLEX_TYPE, QShadowMapping.init(repositoryContext))
.register(SystemConfigurationType.COMPLEX_TYPE,
QSystemConfigurationMapping.INSTANCE)
.register(TaskType.COMPLEX_TYPE, QTaskMapping.INSTANCE)
.register(TriggerType.COMPLEX_TYPE, QTriggerMapping.INSTANCE)
.register(UserType.COMPLEX_TYPE, QUserMapping.INSTANCE)
.register(ValuePolicyType.COMPLEX_TYPE, QValuePolicyMapping.INSTANCE)
.register(QContainerMapping.INSTANCE)
.register(QReferenceMapping.INSTANCE)
QSystemConfigurationMapping.init(repositoryContext))
.register(TaskType.COMPLEX_TYPE, QTaskMapping.init(repositoryContext))
.register(TriggerType.COMPLEX_TYPE, QTriggerMapping.init(repositoryContext))
.register(UserType.COMPLEX_TYPE, QUserMapping.init(repositoryContext))
.register(ValuePolicyType.COMPLEX_TYPE, QValuePolicyMapping.init(repositoryContext))
.register(QContainerMapping.initContainerMapping(repositoryContext))
.register(QReferenceMapping.init(repositoryContext))
.seal();

return new SqaleRepoContext(
repositoryConfiguration,
dataSource,
schemaService,
mappingRegistry);
return repositoryContext;
}

@Bean
Expand Down

0 comments on commit 2c893ac

Please sign in to comment.