internal T UpdateObject <T>(T o, SerializedEntity entity) { foreach (var fieldName in entity.FieldNames) { FieldsByMappedName[fieldName].SetField(o, entity[fieldName]); } return(o); }
public bool DeleteObject(SerializedEntity o, TableSchema schema) { using (var bucket = GetBucket(schema)) { for (int i = 0; i < bucket.Objects.Count; i++) { if (schema.PrimaryKeys.All(primaryKey => Equals(bucket.Objects[i][primaryKey.MappedName], o[primaryKey.MappedName]))) { bucket.IndexedObjects.Remove(bucket.IndexedObjects.First(kv => kv.Value == bucket.Objects[i]).Key); bucket.Objects.RemoveAt(i); return(true); } } } return(false); }
public CompositeKey(TableSchema schema, SerializedEntity o) { _keyValues = schema.PrimaryKeys.ToDictionary(pk => pk.MappedName, pk => o[pk.MappedName]); }
public ObjectWriteResult WriteObject(SerializedEntity o, bool?createNew, TableSchema schema) { if (schema.IncrementKey != null && createNew == null) { return new ObjectWriteResult() { Success = false } } ; var result = new ObjectWriteResult(); using (var bucket = GetBucket(schema)) { if (createNew == null) { if (schema.PrimaryKeys.Length == 0) { return new ObjectWriteResult() { Success = false } } ; var compositeKey = new CompositeKey(schema.PrimaryKeys.ToDictionary(field => field.MappedName, field => o[field.MappedName])); createNew = !bucket.IndexedObjects.ContainsKey(compositeKey); } if (createNew.Value) { if (schema.IncrementKey != null) { o[schema.IncrementKey.MappedName] = bucket.NextIncrementCounter(schema.IncrementKey.FieldName).Convert(schema.IncrementKey.FieldType); result.OriginalUpdated = true; } var storedObject = o.AsDictionary(); bucket.Objects.Add(storedObject); bucket.IndexedObjects[new CompositeKey(schema, o)] = storedObject; result.Added = true; result.Success = true; } else { if (schema.PrimaryKeys.Length > 0) { for (int i = 0; i < bucket.Objects.Count; i++) { if (schema.PrimaryKeys.All(primaryKey => Equals(bucket.Objects[i][primaryKey.MappedName], o[primaryKey.MappedName]))) { var compositeKey = new CompositeKey(schema, o); var storedObject = o.AsDictionary(); bucket.Objects[i] = storedObject; bucket.IndexedObjects[compositeKey] = storedObject; result.Success = true; break; } } } else { result.Success = false; } } } return(result); }