private SimpleQuery ParseJoin(InvokeMemberBinder binder, object[] args) { var tableToJoin = args[0] as ObjectReference; if (tableToJoin == null) { throw new InvalidOperationException(); } SimpleExpression joinExpression = null; if (binder.CallInfo.ArgumentNames.Any(s => !string.IsNullOrWhiteSpace(s))) { joinExpression = ExpressionHelper.CriteriaDictionaryToExpression(tableToJoin, binder.NamedArgumentsToDictionary(args)); } else if (args.Length == 2) { joinExpression = args[1] as SimpleExpression; } if (joinExpression == null) { throw new InvalidOperationException(); } var newJoin = new JoinClause(tableToJoin, joinExpression); return(AddNewJoin(newJoin)); }
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); }
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); }
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)); }
private SimpleQuery ParseOn(InvokeMemberBinder binder, IEnumerable <object> args) { if (_tempJoinWaitingForOn == null) { throw new InvalidOperationException("Call to On must be preceded by call to Join."); } var joinExpression = ExpressionHelper.CriteriaDictionaryToExpression(_tempJoinWaitingForOn.Table, binder.NamedArgumentsToDictionary(args)); return(new SimpleQuery(this, _clauses.Append(new JoinClause(_tempJoinWaitingForOn.Table, joinExpression)))); }
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)); }
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)); }
private SimpleQuery ParseOn(InvokeMemberBinder binder, IEnumerable <object> args) { if (_tempJoinWaitingForOn == null) { throw new InvalidOperationException("Call to On must be preceded by call to JoinInfo."); } var namedArguments = binder.NamedArgumentsToDictionary(args); if (namedArguments == null || namedArguments.Count == 0) { throw new BadExpressionException("On expects an expression or named parameters."); } var joinExpression = ExpressionHelper.CriteriaDictionaryToExpression(_tempJoinWaitingForOn.Table, namedArguments); return(AddNewJoin(new JoinClause(_tempJoinWaitingForOn.Table, _tempJoinWaitingForOn.JoinType, joinExpression))); }
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); }
private SimpleQuery ParseJoin(InvokeMemberBinder binder, object[] args) { var tableToJoin = args[0] as ObjectReference; if (ReferenceEquals(tableToJoin, null)) { var dynamicTable = args[0] as DynamicTable; if (!ReferenceEquals(dynamicTable, null)) { tableToJoin = dynamicTable.ToObjectReference(); } } if (tableToJoin == null) { throw new BadJoinExpressionException("Incorrect join table specified"); } if (HomogenizedEqualityComparer.DefaultInstance.Equals(tableToJoin.GetAliasOrName(), _tableName)) { throw new BadJoinExpressionException("Cannot join unaliased table to itself."); } SimpleExpression joinExpression = null; if (binder.CallInfo.ArgumentNames.Any(s => !string.IsNullOrWhiteSpace(s))) { joinExpression = ExpressionHelper.CriteriaDictionaryToExpression(tableToJoin, binder.NamedArgumentsToDictionary(args)); } else if (args.Length == 2) { joinExpression = args[1] as SimpleExpression; } if (joinExpression == null) { throw new BadJoinExpressionException("Could not create join expression"); } var type = binder.Name.Equals("join", StringComparison.OrdinalIgnoreCase) ? JoinType.Inner : JoinType.Outer; var newJoin = new JoinClause(tableToJoin, type, joinExpression); return(AddNewJoin(newJoin)); }
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)); }
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.Run.Upsert(table.GetQualifiedName(), data, criteriaExpression, !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 IDictionary <string, object> InsertDictionary(InvokeMemberBinder binder, object[] args, DataStrategy dataStrategy, string tableName) { return(dataStrategy.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())); }
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.GetAdapter(), table.GetQualifiedName()).Where(criteriaExpression)); }