Пример #1
0
        public void CreateTombstone_PrimaryKeyShouldHaveKeySchemToNone()
        {
            var entities            = new EntityInfoCollection();
            var factory             = new Mock <IFieldPropertyFactory>();
            var entityInfo          = EntityInfo.Create(factory.Object, entities, typeof(EntitySync));
            var entitySync          = SyncEntity.Create(entityInfo);
            var tombstoneEntityInfo = entitySync.CreateEntityTombstone();

            Assert.AreEqual(KeyScheme.None, tombstoneEntityInfo.PrimaryKey.KeyScheme);
        }
Пример #2
0
        public void ValidSyncAttribute()
        {
            var entityInfo     = Desktop.DataStore.Entities.ElementAt(1);
            var syncableEntity = SyncEntity.Create(entityInfo);

            Assert.AreEqual("entity", syncableEntity.GetNameInStore());
            Assert.AreEqual("created_at", syncableEntity.CreationTrackingColumn);
            Assert.AreEqual("updated_at", syncableEntity.UpdateTrackingColumn);
            Assert.AreEqual("last_sync_at", syncableEntity.LastSyncTrackingColumn);
            Assert.AreEqual("deleted_at", syncableEntity.EntityTombstoneInfo.DeletionTrackingColumn);
            Assert.AreEqual("entity_tombstone", syncableEntity.EntityTombstoneInfo.GetNameInStore());
        }
Пример #3
0
        public static MergeResolution Create(IEntityInfo entityInfo, OperationTypes operationType, IEntity entity)
        {
            var entitySync = SyncEntity.Create(entityInfo);

            if (entitySync.Direction == SyncDirection.UploadOnly)
            {
                return(null);
            }

            return(new MergeResolution
            {
                OperationType = operationType,
                Entity = EntityChange.Create(entityInfo, entity)
            });
        }
Пример #4
0
        protected override IEntityInfo AddTypeSafe(Type entityType)
        {
            var entity = base.AddTypeSafe(entityType);

            if (entity == null)
            {
                return(null);
            }

            var syncEntity = SyncEntity.Create(entity);

            if (syncEntity != null)
            {
                AddTypeSafe(syncEntity.EntityTombstoneType);
            }
            return(entity);
        }
Пример #5
0
        public static void CleanEntities(IDataStore dataStore, DateTime now)
        {
            foreach (var entity in dataStore.Entities.Reverse())
            {
                var syncableEntity = SyncEntity.Create(entity);
                if (syncableEntity == null || !syncableEntity.ShouldBeCleannedOnClient())
                {
                    continue;
                }

                var createdAt     = dataStore.ToColumnValue(entity, syncableEntity.CreationTrackingColumn);
                var retentionDate = now.AddDays(-1 * syncableEntity.ClientRetentionTime);
                var createdBeforeRetentionLimit = dataStore.Condition(createdAt, retentionDate, FilterOperator.LessThanOrEqual);
                var legacyRow = dataStore.Condition(createdAt, null, FilterOperator.Equals);
                dataStore.Select(entity.EntityType)
                .Where(createdBeforeRetentionLimit.Or(legacyRow))
                .Delete();
            }
        }
Пример #6
0
        public IdentityChange Resolve(IDataStore localDataStore)
        {
            if (_alreadyMerge)
            {
                return(null);
            }

            var syncableEntity = SyncEntity.Create(_entityInfo);
            var solver         = syncableEntity.GetSolver() as IEntityConflictSolver ?? new DefaultEntitySolver <ISyncable>();

            solver.SyncSessionInfo = _syncSessionInfo;

            var serializer   = _entityInfo.GetSerializer();
            var localEntity  = serializer.Deserialize(_local);
            var remoteEntity = serializer.Deserialize(_remote);

            RemoteMergeResolution = solver.Merge(localDataStore, localEntity, remoteEntity);
            _alreadyMerge         = true;
            return(RemoteMergeResolution.GetIdentityChange());
        }
Пример #7
0
        private static ISyncableEntity GetSyncableEntity(IDataStore dataStore, string entityName)
        {
            var entity = dataStore.Entities[entityName];

            return(SyncEntity.Create(entity));
        }
Пример #8
0
        public ISyncableEntity GetSyncableEntity()
        {
            var entity = _datastore.Entities[EntityName];

            return(SyncEntity.Create(entity));
        }