public object ConvertQueryResult(AuditConfiguration auditCfg, EntityInstantiator entityInstantiator, string entityName, long revision, object value) { return(auditCfg.EntCfg.IsVersioned(entityName) ? entityInstantiator.CreateInstanceFromVersionsEntity(entityName, (IDictionary)value, revision) : value); }
public object MapToObjectFromFullMap(EntityInstantiator entityInstantiator, IDictionary data, object dataObject, long revision) { return(entityInstantiator.CreateInstanceFromVersionsEntity(_relatedIdData.EntityName, data, revision)); }
public override IEnumerable <TEntity> Results() { /* * The query that should be executed in the versions table: * SELECT e FROM ent_ver e * WHERE * (all specified conditions, transformed, on the "e" entity) AND * (selecting e entities at revision :revision) * --> for DefaultAuditStrategy: * e.revision = (SELECT max(e2.revision) FROM versionsReferencedEntity e2 * WHERE e2.revision <= :revision AND e2.id = e.id) * * --> for ValidityAuditStrategy: * e.revision <= :revision and (e.endRevision > :revision or e.endRevision is null) * * AND * (only non-deleted entities) * e.revision_type != DEL */ var verEntCfg = AuditConfiguration.AuditEntCfg; var revisionPropertyPath = verEntCfg.RevisionNumberPath; var originalIdPropertyName = verEntCfg.OriginalIdPropName; var referencedIdData = new MiddleIdData(verEntCfg, AuditConfiguration.EntCfg[EntityName].IdMappingData, prefix: null, EntityName, AuditConfiguration.EntCfg.IsVersioned(EntityName)); // (selecting e entities at revision :revision) // --> based on auditStrategy (see above) AuditConfiguration.GlobalCfg.AuditStrategy.AddEntityAtRevisionRestriction(QueryBuilder, QueryBuilder.RootParameters, revisionPropertyPath, verEntCfg.RevisionEndFieldName, true, referencedIdData, revisionPropertyPath, originalIdPropertyName, QueryConstants.ReferencedEntityAlias, QueryConstants.ReferencedEntityAliasDefAudStr); SetIncludeDeletationClause(); AddCriterions(); // the result of BuildAndExecuteQuery is always the name-value pair of EntityMode.Map return(from versionsEntity in BuildAndExecuteQuery <IDictionary>() select(TEntity) EntityInstantiator.CreateInstanceFromVersionsEntity(EntityName, versionsEntity, _revision)); }
public override IEnumerable <TEntity> Results() { /* * The query that should be executed in the versions table: * SELECT e FROM ent_ver e, rev_entity r WHERE * e.revision_type != DEL (if includesDeletations == false) AND * e.revision = r.revision AND * (all specified conditions, transformed, on the "e" entity) * ORDER BY e.revision ASC (unless another order is specified) */ SetIncludeDeletationClause(); AddCriterions(); AddOrders(); // the result of BuildAndExecuteQuery is always the name-value pair of EntityMode.Map return(from versionsEntity in BuildAndExecuteQuery <IDictionary>() let revision = GetRevisionNumberFromDynamicEntity(versionsEntity) select(TEntity) EntityInstantiator.CreateInstanceFromVersionsEntity(EntityName, versionsEntity, revision)); }
protected override void FillResult(IList result) { var verEntCfg = VerCfg.AuditEntCfg; /* * The query that should be executed in the versions table: * SELECT e (unless another projection is specified) FROM ent_ver e, rev_entity r WHERE * e.revision_type != DEL (if selectDeletedEntities == false) AND * e.revision = r.revision AND * (all specified conditions, transformed, on the "e" entity) * ORDER BY e.revision ASC (unless another order or projection is specified) */ if (!_selectDeletedEntities) { // e.revision_type != DEL AND QueryBuilder.RootParameters.AddWhereWithParam(verEntCfg.RevisionTypePropName, "<>", RevisionType.Deleted); } // all specified conditions, transformed foreach (var criterion in Criterions) { criterion.AddToQuery(VerCfg, VersionsReader, EntityName, QueryBuilder, QueryBuilder.RootParameters); } if (!HasProjection() && !HasOrder) { var revisionPropertyPath = verEntCfg.RevisionNumberPath; QueryBuilder.AddOrder(QueryConstants.ReferencedEntityAlias, revisionPropertyPath, true); } if (!_selectEntitiesOnly) { QueryBuilder.AddFrom(VerCfg.AuditEntCfg.RevisionInfoEntityFullClassName(), QueryConstants.RevisionAlias, true); QueryBuilder.RootParameters.AddWhere(VerCfg.AuditEntCfg.RevisionNumberPath, true, "=", QueryConstants.RevisionAlias + ".id", false); } if (HasProjection()) { BuildAndExecuteQuery(result); return; } var internalResult = new ArrayList(); BuildAndExecuteQuery(internalResult); var revisionTypePropertyName = verEntCfg.RevisionTypePropName; foreach (var resultRow in internalResult) { IDictionary versionsEntity; object revisionData = null; if (_selectEntitiesOnly) { versionsEntity = (IDictionary)resultRow; } else { var arrayResultRow = (Object[])resultRow; versionsEntity = (IDictionary)arrayResultRow[0]; revisionData = arrayResultRow[1]; } var revision = revisionNumber(versionsEntity); var entity = EntityInstantiator.CreateInstanceFromVersionsEntity(EntityName, versionsEntity, revision); result.Add(_selectEntitiesOnly ? entity : new[] { entity, revisionData, versionsEntity[revisionTypePropertyName] }); } }
public Object MapToObjectFromFullMap(EntityInstantiator entityInstantiator, IDictionary<String, Object> data, Object dataObject, long revision) { return entityInstantiator.CreateInstanceFromVersionsEntity(relatedIdData.EntityName, data, revision); }
public override IEnumerable <IRevisionEntityInfo <TEntity, TRevisionEntity> > Results() { var auditEntitiesConfiguration = AuditConfiguration.AuditEntCfg; /* * The query that should be executed in the versions table: * SELECT e FROM ent_ver e, rev_entity r WHERE * e.revision_type != DEL (if selectDeletedEntities == false) AND * e.revision = r.revision AND * (all specified conditions, transformed, on the "e" entity) * ORDER BY e.revision ASC (unless another order is specified) */ SetIncludeDeletationClause(); AddCriterions(); AddOrders(); QueryBuilder.AddFrom(auditEntitiesConfiguration.RevisionInfoEntityFullClassName(), QueryConstants.RevisionAlias, true); QueryBuilder.RootParameters.AddWhere(auditEntitiesConfiguration.RevisionNumberPath, true, "=", QueryConstants.RevisionAlias + ".id", false); var revisionTypePropertyName = auditEntitiesConfiguration.RevisionTypePropName; return(from resultRow in BuildAndExecuteQuery <object[]>() let versionsEntity = (IDictionary)resultRow[0] let revisionData = (TRevisionEntity)resultRow[1] let revision = GetRevisionNumberFromDynamicEntity(versionsEntity) let entity = (TEntity)EntityInstantiator.CreateInstanceFromVersionsEntity(EntityName, versionsEntity, revision) select new RevisionEntityInfo <TEntity, TRevisionEntity>(entity, revisionData, (RevisionType)versionsEntity[revisionTypePropertyName])); }