Exemplo n.º 1
0
 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));
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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);
 }
Exemplo n.º 7
0
        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]));
        }