private static BaseQuery BuildUpdateQuery(ITrackedModel <BaseModel> trackedModel) { var rootSchemaName = trackedModel.Model.GetSchemaName(); var values = trackedModel.GetChanges(); if (!values.Any()) { return(null); } var updateQuery = new UpdateQuery() { RootSchemaName = rootSchemaName, ColumnValues = new ColumnValues() { Items = ConvertValuesToColumnExpressions(trackedModel.Type, values) }, Filters = new Filters() { FilterType = FilterType.FilterGroup, Items = new Dictionary <string, Filter>() { { "PrimaryFilter", GeneratePrimaryFilter(trackedModel) } }, } }; return(updateQuery); }
private static BaseQuery BuildInsertQuery(ITrackedModel <BaseModel> trackedModel) { var rootSchemaName = trackedModel.Model.GetSchemaName(); var values = trackedModel.Model.GetModelPropertyValues(); var insertQuery = new InsertQuery() { RootSchemaName = rootSchemaName, ColumnValues = new ColumnValues() { Items = ConvertValuesToColumnExpressions(trackedModel.Type, values) } }; return(insertQuery); }
public static BaseQuery BuildModifyQuery(ITrackedModel <BaseModel> trackedModel) { switch (trackedModel.GetStatus()) { case ModelState.New: return(BuildInsertQuery(trackedModel)); case ModelState.Changed: return(BuildUpdateQuery(trackedModel)); case ModelState.Deleted: return(BuildDeleteQuery(trackedModel)); default: throw new NotSupportedException(); } }
private static BaseQuery BuildDeleteQuery(ITrackedModel <BaseModel> trackedModel) { var rootSchemaName = trackedModel.Model.GetSchemaName(); var deleteQuery = new DeleteQuery() { RootSchemaName = rootSchemaName, Filters = new Filters() { FilterType = FilterType.FilterGroup, Items = new Dictionary <string, Filter>() { { "PrimaryFilter", GeneratePrimaryFilter(trackedModel) } }, } }; return(deleteQuery); }
private static Filter GeneratePrimaryFilter(ITrackedModel <BaseModel> trackedModel) { return(new Filter() { FilterType = FilterType.CompareFilter, LeftExpression = new ColumnExpression() { ExpressionType = EntitySchemaQueryExpressionType.SchemaColumn, ColumnPath = "Id" }, ComparisonType = FilterComparisonType.Equal, RightExpression = new BaseExpression() { ExpressionType = EntitySchemaQueryExpressionType.Parameter, Parameter = new Parameter() { Value = trackedModel.Model.Id, DataValueType = DataValueType.Guid } } }); }