public string GetSql(Action <IKeyValuePairBuilder <T> > action, Action <IRestrictable <T> > restriction, List <object> parameters) { var builder = new KeyValuePairBuilder <T>(); action(builder); var properties = builder.GetEnumerable().ToArray(); if (properties.Any(x => x.Item1.ReadOnly)) { throw new UpdateByQueryException("Update by query columns contained at least one read only column"); } var columns = properties .Select(x => { var sql = x.Item1.ColumnName + " = " + _map.CreateParameter("p" + parameters.Count); var value = x.Item1.ConvertValue(x.Item2); parameters.Add(value); return(sql); }).ToArray(); var restrictable = new Restrictable <T>(); restriction(restrictable); var where = restrictable.BuildRestrictionsIncludeWhere(parameters, _map.Dialect); return(string.Format("UPDATE {0} SET {1}{2};", _map.TableName, string.Join(", ", columns), where)); }
public string GetSql(Action <IUpdateStatementBuilder <T> > action, Action <IRestrictable <T> > restriction, List <object> parameters) { var builder = new UpdateStatementBuilder <T>(); action(builder); if (builder.HasNoStatements()) { throw new UpdateByQueryException("Can not update without update statements. Please add SET statements"); } var properties = builder.GetEnumerable().ToArray(); if (properties.Any(x => x.Property.ReadOnly)) { throw new UpdateByQueryException("Update by query columns contained at least one read only column"); } var columns = properties .Select(x => x.GetSql(_map, parameters)).ToArray(); var restrictable = new Restrictable <T>(); restriction(restrictable); var where = restrictable.BuildRestrictionsIncludeWhere(parameters, _map.Dialect); return(string.Format("UPDATE {0} SET {1}{2};", _map.TableName, string.Join(", ", columns), where)); }
public string GetSql(Action <IRestrictable <T> > restriction, List <object> parameters) { var map = MappingRepo <T> .GetMap(); var restrictable = new Restrictable <T>(); restriction(restrictable); var where = restrictable.BuildRestrictionsIncludeWhere(parameters, map.Dialect); return("DELETE FROM " + map.TableName + where + ";"); }
public string Apply(List <object> parameters, IDialect dialect) { var disjunction = new List <string>(); foreach (var restriction in _restrictions) { var restrictable = new Restrictable <T>(); restriction(restrictable); disjunction.Add(restrictable.BuildRestrictions(parameters, dialect)); } return("(" + string.Join(" OR ", disjunction) + ")"); }
public string GetSql(Action <IRestrictable <T> > restriction, Expression <Func <T, object> > accessor, int amount, List <object> parameters) { var restrictable = new Restrictable <T>(); restriction(restrictable); var where = restrictable.BuildRestrictionsIncludeWhere(parameters, _map.Dialect); var property = ExpressionProcessor <T> .GetPropertyFromCache(accessor); if (property.Update) { throw new MoranbernateMappingException("Can't use property " + property.Name + " for atomic increment as it is not defined as Readonly"); } return(string.Format("UPDATE {0} SET {1} = {1} + {2}{3};", _map.TableName, property.Name, amount, where)); }
public string GetSql(Action <IRestrictable <T> > restriction, List <object> parameters) { var map = MappingRepo <T> .GetMap(); var baseSql = "SELECT COUNT(*) FROM " + map.TableName; if (restriction == null) { return(baseSql + ";"); } var restrictable = new Restrictable <T>(); restriction(restrictable); var where = restrictable.BuildRestrictionsIncludeWhere(parameters, map.Dialect); return(baseSql + where + ";"); }
public void Setup() { _target = new Restrictable <TestDto>(); }