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); }
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()); }
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) }); }
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); }
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(); } }
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()); }
private static ISyncableEntity GetSyncableEntity(IDataStore dataStore, string entityName) { var entity = dataStore.Entities[entityName]; return(SyncEntity.Create(entity)); }
public ISyncableEntity GetSyncableEntity() { var entity = _datastore.Entities[EntityName]; return(SyncEntity.Create(entity)); }