internal static IEnumerable<KeyValuePair<string, object>> CreateCriteriaDictionary(InvokeMemberBinder binder, IList<object> args, params string[] exactNames) { IDictionary<string, object> criteriaDictionary = null; if (exactNames.Contains(binder.Name)) { if (binder.CallInfo.ArgumentNames != null && binder.CallInfo.ArgumentNames.Count > 0) { criteriaDictionary = binder.NamedArgumentsToDictionary(args); } else if (args.Count == 1) { if (ReferenceEquals(args[0], null)) throw new ArgumentException("FindBy does not accept unnamed null argument."); criteriaDictionary = args[0].ObjectToDictionary(); } } else { criteriaDictionary = MethodNameParser.ParseFromBinder(binder, args); } if (criteriaDictionary == null || criteriaDictionary.Count == 0) { throw new ArgumentException(binder.Name + " requires an equal number of column names and values to filter data by."); } return criteriaDictionary; }
internal static IDictionary<string, object> ParseFromBinder(InvokeMemberBinder binder, IList<object> args) { if (binder == null) throw new ArgumentNullException("binder"); if (binder.CallInfo.ArgumentNames != null && binder.CallInfo.ArgumentNames.Count > 0) { return ParseFromMethodName(binder.Name, binder.NamedArgumentsToDictionary(args)); } return ParseFromMethodName(binder.Name, args); }
private static SimpleExpression GetCriteriaExpression(InvokeMemberBinder binder, object[] args, DynamicTable table) { var criteria = binder.Name.Equals("delete", StringComparison.InvariantCultureIgnoreCase) ? binder.NamedArgumentsToDictionary(args) : MethodNameParser.ParseFromBinder(binder, args); return ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteria); }
public object Execute(Database database, string tableName, InvokeMemberBinder binder, object[] args) { var criteria = binder.Name.Equals("delete", StringComparison.InvariantCultureIgnoreCase) ? binder.NamedArgumentsToDictionary(args) : MethodNameParser.ParseFromBinder(binder, args); var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(tableName, criteria); return database.Adapter.Delete(tableName, criteriaExpression); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var criteria = args.OfType<SimpleExpression>().SingleOrDefault() ?? new SimpleEmptyExpression(); var data = binder.NamedArgumentsToDictionary(args).Where(kv=>!(kv.Value is SimpleExpression)).ToDictionary(); var updatedCount = dataStrategy.Update(table.GetQualifiedName(), data, criteria); return updatedCount.ResultSetFromModifiedRowCount(); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { SimpleExpression criteriaExpression; if (binder.Name.Equals("FindAllBy") || binder.Name.Equals("find_all_by")) { criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), binder.NamedArgumentsToDictionary(args)); } else { criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), MethodNameParser.ParseFromBinder(binder, args)); } return new SimpleQuery(dataStrategy, table.GetQualifiedName()).Where(criteriaExpression); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (binder.HasSingleUnnamedArgument()) { return UpdateByKeyFields(table.GetQualifiedName(), dataStrategy, args[0], MethodNameParser.ParseCriteriaNamesFromMethodName(binder.Name)); } var criteria = MethodNameParser.ParseFromBinder(binder, args); var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteria); var data = binder.NamedArgumentsToDictionary(args) .Where(kvp => !criteria.ContainsKey(kvp.Key)) .ToDictionary(); return dataStrategy.Update(table.GetQualifiedName(), data, criteriaExpression); }
public object Execute(Database database, string tableName, InvokeMemberBinder binder, object[] args) { if (binder.HasSingleUnnamedArgument()) { return UpdateCommand.UpdateByKeyFields(tableName, database, args[0], MethodNameParser.ParseCriteriaNamesFromMethodName(binder.Name)); } var criteria = MethodNameParser.ParseFromBinder(binder, args); var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(tableName, criteria); var data = binder.NamedArgumentsToDictionary(args) .Where(kvp => !criteria.ContainsKey(kvp.Key)) .ToDictionary(); return database.Adapter.Update(tableName, data, criteriaExpression); }
private static IDictionary<string, object> CreateCriteriaDictionary(InvokeMemberBinder binder, IList<object> args) { IDictionary<string, object> criteriaDictionary = null; if (binder.Name.Equals("FindBy") || binder.Name.Equals("find_by")) { if (binder.CallInfo.ArgumentNames != null && binder.CallInfo.ArgumentNames.Count > 0) { criteriaDictionary = binder.NamedArgumentsToDictionary(args); } } else { criteriaDictionary = MethodNameParser.ParseFromBinder(binder, args); } return criteriaDictionary; }
internal static IDictionary<string, object> ParseFromBinder(InvokeMemberBinder binder, IList<object> args) { if (binder == null) throw new ArgumentNullException("binder"); if (binder.CallInfo.ArgumentNames != null && binder.CallInfo.ArgumentNames.Count > 0) { return ParseFromMethodName(binder.Name, binder.NamedArgumentsToDictionary(args)); } if (binder.Name.Equals("findby", StringComparison.OrdinalIgnoreCase) || binder.Name.Equals("find_by", StringComparison.OrdinalIgnoreCase)) { if (args.Count == 1) { return args[0].ObjectToDictionary(); } throw new InvalidOperationException("Invalid criteria specification."); } return ParseFromMethodName(binder.Name, args); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var criteria = args.OfType<SimpleExpression>().SingleOrDefault() ?? new SimpleEmptyExpression(); var data = binder.NamedArgumentsToDictionary(args).Where(kv=>!(kv.Value is SimpleExpression)).ToDictionary(); if (data.Count == 0) data = args.OfType<IDictionary<string, object>>().SingleOrDefault(); if (data == null) { throw new SimpleDataException("Could not resolve data."); } var updatedCount = dataStrategy.Run.Update(table.GetQualifiedName(), data, criteria); return updatedCount.ResultSetFromModifiedRowCount(); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { object[] objects; if (binder.CallInfo.ArgumentNames.Count > 0 && binder.CallInfo.ArgumentNames.All(s => !string.IsNullOrWhiteSpace(s))) { objects = new object[] {binder.NamedArgumentsToDictionary(args)}; } else if (args.Length == 0 || args.Length > 2) { throw new ArgumentException("Incorrect number of arguments to Upsert method."); } else { objects = args; } var result = UpsertUsingKeys(dataStrategy, table, objects, !binder.IsResultDiscarded()); return ResultHelper.TypeResult(result, table, dataStrategy); }
private static SimpleExpression GetCriteriaExpression(InvokeMemberBinder binder, object[] args, DynamicTable table) { IDictionary<string, object> criteria; if (binder.Name.Equals("delete", StringComparison.InvariantCultureIgnoreCase)) { criteria = binder.NamedArgumentsToDictionary(args); if (criteria.Count == 0 && args.Length == 1) { criteria = args[0] as IDictionary<string, object> ?? args[0].ObjectToDictionary(); } } else { criteria = MethodNameParser.ParseFromBinder(binder, args); } if (criteria.Count == 0) throw new InvalidOperationException("No criteria specified for Delete. To delete all data, use DeleteAll()."); return ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteria); }
private static IEnumerable<KeyValuePair<string, object>> CreateCriteriaDictionary(InvokeMemberBinder binder, IList<object> args) { IDictionary<string, object> criteriaDictionary = null; if (binder.Name.Equals("FindBy") || binder.Name.Equals("find_by")) { if (args.Count == 0) throw new ArgumentException("FindBy requires arguments."); if (binder.CallInfo.ArgumentNames != null && binder.CallInfo.ArgumentNames.Count > 0) { criteriaDictionary = binder.NamedArgumentsToDictionary(args); } else if (args.Count == 1) { if (ReferenceEquals(args[0], null)) throw new ArgumentException("FindBy does not accept unnamed null argument."); criteriaDictionary = args[0].ObjectToDictionary(); } } else { criteriaDictionary = MethodNameParser.ParseFromBinder(binder, args); } return criteriaDictionary; }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { object result; if (binder.HasSingleUnnamedArgument() || args.Length == 2 && args[1] is ErrorCallback) { result = UpsertByKeyFields(table.GetQualifiedName(), dataStrategy, args[0], MethodNameParser.ParseCriteriaNamesFromMethodName(binder.Name), !binder.IsResultDiscarded(), args.Length == 2 ? (ErrorCallback)args[1] : ((item, exception) => false)); } else { var criteria = MethodNameParser.ParseFromBinder(binder, args); var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteria); var data = binder.NamedArgumentsToDictionary(args); result = dataStrategy.Upsert(table.GetQualifiedName(), data, criteriaExpression, !binder.IsResultDiscarded()); } return ResultHelper.TypeResult(result, table, dataStrategy); }
private static IDictionary<string, object> InsertDictionary(InvokeMemberBinder binder, object[] args, Database database, string tableName) { return database.Adapter.Insert(tableName, binder.NamedArgumentsToDictionary(args)); }
private static object InsertDictionary(InvokeMemberBinder binder, object[] args, DataStrategy dataStrategy, string tableName) { return dataStrategy.Insert(tableName, binder.NamedArgumentsToDictionary(args), !binder.IsResultDiscarded()); }