public Func<object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (dataStrategy is SimpleTransaction) return null; if (binder.Name.Equals("FindBy") || binder.Name.Equals("find_by")) { ArgumentHelper.CheckFindArgs(args, binder); if (args.Length == 1 && args[0].IsAnonymous()) return null; } var criteriaDictionary = ArgumentHelper.CreateCriteriaDictionary(binder, args, "FindBy", "find_by"); if (criteriaDictionary == null) return null; var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteriaDictionary); try { var adapter = dataStrategy.GetAdapter(); var func = adapter.OptimizingDelegateFactory.CreateFindOneDelegate(adapter, table.GetQualifiedName(), criteriaExpression); return a => { var data = func(a); return (data != null && data.Count > 0) ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null; }; } catch (NotImplementedException) { return null; } }
public Func<object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (dataStrategy is SimpleTransaction) return null; var criteriaDictionary = CreateCriteriaDictionary(binder, args); if (criteriaDictionary == null) return null; var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteriaDictionary); try { var adapter = dataStrategy.GetAdapter(); var func = adapter.OptimizingDelegateFactory.CreateFindOneDelegate(adapter, table.GetQualifiedName(), criteriaExpression); return a => { var data = func(a); return (data != null && data.Count > 0) ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null; }; } catch (NotImplementedException) { return null; } }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), MethodNameParser.ParseFromBinder(binder, args)); var data = dataStrategy.FindOne(table.GetQualifiedName(), criteriaExpression); return(data != null ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null); }
public Func<object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (dataStrategy is SimpleTransaction) return null; if (binder.Name.Equals("FindBy") || binder.Name.Equals("find_by")) { if (args.Length == 0) throw new ArgumentException("FindBy requires arguments."); if (args.Length == 1) { if (ReferenceEquals(args[0], null)) throw new ArgumentException("FindBy does not accept unnamed null argument."); if (args[0].GetType().Namespace == null) return null; } } var criteriaDictionary = CreateCriteriaDictionary(binder, args); if (criteriaDictionary == null) return null; var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteriaDictionary); try { var adapter = dataStrategy.GetAdapter(); var func = adapter.OptimizingDelegateFactory.CreateFindOneDelegate(adapter, table.GetQualifiedName(), criteriaExpression); return a => { var data = func(a); return (data != null && data.Count > 0) ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null; }; } catch (NotImplementedException) { return null; } }
public Func <object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (dataStrategy is SimpleTransaction) { return(null); } var criteriaDictionary = CreateCriteriaDictionary(binder, args); if (criteriaDictionary == null) { return(null); } var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteriaDictionary); try { var adapter = dataStrategy.GetAdapter(); var func = adapter.OptimizingDelegateFactory.CreateFindOneDelegate(adapter, table.GetQualifiedName(), criteriaExpression); return(a => { var data = func(a); return (data != null && data.Count > 0) ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null; }); } catch (NotImplementedException) { return(null); } }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), MethodNameParser.ParseFromBinder(binder, args)); var data = dataStrategy.Find(table.GetQualifiedName(), criteria); return(CreateSimpleResultSet(table, dataStrategy, data)); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), MethodNameParser.ParseFromBinder(binder, args)); return new SimpleQuery(dataStrategy.Adapter, table.GetQualifiedName()).Where(criteria); //var data = dataStrategy.Find(table.GetQualifiedName(), criteria); //return CreateSimpleResultSet(table, dataStrategy, data); }
private static object UpsertUsingKeys(DataStrategy dataStrategy, DynamicTable table, object[] args, bool isResultRequired) { var record = ObjectToDictionary(args[0]); var list = record as IList <IDictionary <string, object> >; if (list != null) { ErrorCallback errorCallback = (args.Length == 2 ? args[1] as ErrorCallback : null) ?? ((item, exception) => false); return(dataStrategy.Run.UpsertMany(table.GetQualifiedName(), list, isResultRequired, errorCallback)); } var dict = record as IDictionary <string, object>; if (dict == null) { throw new InvalidOperationException("Could not resolve data from passed object."); } var key = dataStrategy.GetAdapter().GetKey(table.GetQualifiedName(), dict); if (key == null) { throw new InvalidOperationException(string.Format("No key columns defined for table \"{0}\"", table.GetQualifiedName())); } if (key.Count == 0) { return(dataStrategy.Run.Insert(table.GetQualifiedName(), dict, isResultRequired)); } var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), key); return(dataStrategy.Run.Upsert(table.GetQualifiedName(), dict, criteria, isResultRequired)); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), CreateCriteriaDictionary(binder, args)); var data = dataStrategy.Run.FindOne(table.GetQualifiedName(), criteriaExpression); return data != null ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null; }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The data strategy.</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var criteriaDictionary = ArgumentHelper.CreateCriteriaDictionary(binder, args, "ExistsBy", "exists_by", "AnyBy", "any_by"); if (criteriaDictionary == null) return null; var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteriaDictionary); return new SimpleQuery(dataStrategy, table.GetQualifiedName()).Where(criteria).Exists(); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), MethodNameParser.ParseFromBinder(binder, args)); var data = dataStrategy.Find(table.GetQualifiedName(), criteria); return new SimpleResultSet(data != null ? data.Select(dict => new SimpleRecord(dict, table.GetQualifiedName(), dataStrategy)) : Enumerable.Empty<SimpleRecord>()); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), MethodNameParser.ParseFromBinder(binder, args)); var data = dataStrategy.Find(table.GetQualifiedName(), criteria); return(new SimpleResultSet(data != null ? data.Where(dict => dict != null).Select(dict => new SimpleRecord(dict, table.GetQualifiedName(), dataStrategy)) : Enumerable.Empty <SimpleRecord>())); }
private static object UpdateUsingKeys(DataStrategy dataStrategy, DynamicTable table, object[] args) { var record = ObjectToDictionary(args[0]); var list = record as IList<IDictionary<string, object>>; if (list != null) return dataStrategy.UpdateMany(table.GetQualifiedName(), list); var dict = record as IDictionary<string, object>; return dataStrategy.Update(table.GetQualifiedName(), dict); }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The database (or transaction)</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (args.Length == 1 && args[0] is SimpleExpression) { var data = dataStrategy.Run.FindOne(table.GetQualifiedName(), (SimpleExpression)args[0]); return(data != null ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null); } throw new BadExpressionException("Find only accepts a criteria expression."); }
public static object TypeResult(object result, DynamicTable table, DataStrategy dataStrategy) { var dictionary = result as IDictionary<string, object>; if (dictionary != null) return dictionary.ToDynamicRecord(table.GetQualifiedName(), dataStrategy); var list = result as IEnumerable<IDictionary<string, object>>; if (list != null) return new SimpleResultSet(list.Select(d => d.ToDynamicRecord(table.GetQualifiedName(), dataStrategy))); return null; }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The database (or transaction)</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (args.Length == 1 && args[0] is SimpleExpression) { var data = dataStrategy.FindOne(table.GetQualifiedName(), (SimpleExpression)args[0]); return data != null ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null; } return null; }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The database (or transaction)</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (args.Length == 1 && args[0] is SimpleExpression) { var data = dataStrategy.Run.FindOne(table.GetQualifiedName(), (SimpleExpression)args[0]); return data != null ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null; } throw new BadExpressionException("Find only accepts a criteria expression."); }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The database (or transaction)</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (args.Length == 1 && args[0] is SimpleExpression) { var data = dataStrategy.Find(table.GetQualifiedName(), (SimpleExpression)args[0]).FirstOrDefault(); return(data != null ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null); } return(null); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (args.Length != 1) throw new ArgumentException("Incorrect number of arguments to Update method."); var keyFieldNames = dataStrategy.Adapter.GetKeyFieldNames(table.GetQualifiedName()).ToArray(); if (keyFieldNames.Length == 0) { throw new NotSupportedException("Adapter does not support key-based update for this object."); } return UpdateByKeyFields(table.GetQualifiedName(), dataStrategy, args[0], keyFieldNames); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (args.Length != 1) throw new ArgumentException("Incorrect number of arguments to Update method."); var record = ObjectToDictionary(args[0]); var list = record as IList<IDictionary<string, object>>; if (list != null) return dataStrategy.UpdateMany(table.GetQualifiedName(), list); var dict = record as IDictionary<string, object>; return dataStrategy.Update(table.GetQualifiedName(), dict); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var result = DoInsert(binder, args, dataStrategy, table.GetQualifiedName()); var dictionary = result as IDictionary<string,object>; if (dictionary != null) return dictionary.ToDynamicRecord(table.GetQualifiedName(), dataStrategy); var list = result as IEnumerable<IDictionary<string, object>>; if (list != null) return list.Select(d => d.ToDynamicRecord(table.GetQualifiedName(), dataStrategy)); return null; }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The database or transaction</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (args.Length == 1 && args[0] is SimpleExpression) { var data = dataStrategy.Find(table.GetQualifiedName(), (SimpleExpression)args[0]); return(new SimpleResultSet(data != null ? data.Select(dict => new SimpleRecord(dict, table.GetQualifiedName(), dataStrategy)) : Enumerable.Empty <SimpleRecord>())); } return(null); }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The database or transaction</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (args.Length == 1 && args[0] is SimpleExpression) { var data = dataStrategy.Find(table.GetQualifiedName(), (SimpleExpression)args[0]); return new SimpleResultSet(data != null ? data.Select(dict => new SimpleRecord(dict, table.GetQualifiedName(), dataStrategy)) : Enumerable.Empty<SimpleRecord>()); } return null; }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The data strategy.</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (binder.Name.Equals("GetCountBy") || binder.Name.Equals("get_count_by")) { ArgumentHelper.CheckFindArgs(args, binder); } var criteriaDictionary = ArgumentHelper.CreateCriteriaDictionary(binder, args, "GetCountBy", "get_count_by"); var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteriaDictionary); return new SimpleQuery(dataStrategy, table.GetQualifiedName()).Where(criteria).Count(); }
private static object UpdateUsingKeys(DataStrategy dataStrategy, DynamicTable table, object[] args) { var record = ObjectToDictionary(args[0]); var list = record as IList<IDictionary<string, object>>; if (list != null) return dataStrategy.Run.UpdateMany(table.GetQualifiedName(), list); var dict = record as IDictionary<string, object>; if (dict == null) throw new InvalidOperationException("Could not resolve data from passed object."); var key = dataStrategy.GetAdapter().GetKey(table.GetQualifiedName(), dict); dict = dict.Where(kvp => key.All(keyKvp => keyKvp.Key.Homogenize() != kvp.Key.Homogenize())).ToDictionary(); var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), key); return dataStrategy.Run.Update(table.GetQualifiedName(), dict, criteria); }
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); }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The data strategy.</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var criteriaDictionary = ArgumentHelper.CreateCriteriaDictionary(binder, args, "ExistsBy", "exists_by", "AnyBy", "any_by"); if (criteriaDictionary == null) { return(null); } var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteriaDictionary); return(new SimpleQuery(dataStrategy, table.GetQualifiedName()).Where(criteria).Exists()); }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The data strategy.</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (binder.Name.Equals("GetCountBy") || binder.Name.Equals("get_count_by")) { ArgumentHelper.CheckFindArgs(args, binder); } var criteriaDictionary = ArgumentHelper.CreateCriteriaDictionary(binder, args, "GetCountBy", "get_count_by"); var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteriaDictionary); return(new SimpleQuery(dataStrategy, table.GetQualifiedName()).Where(criteria).Count()); }
public Func<object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), MethodNameParser.ParseFromBinder(binder, args)); try { var func = dataStrategy.Adapter.CreateFindOneDelegate(table.GetQualifiedName(), criteriaExpression); return a => new SimpleRecord(func(a), table.GetQualifiedName(), dataStrategy); } catch (NotImplementedException) { return null; } }
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)); }
public Func<object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (dataStrategy is SimpleTransaction) return null; var func = dataStrategy.GetAdapter().OptimizingDelegateFactory.CreateGetDelegate(dataStrategy.GetAdapter(), table.GetQualifiedName(), args); return a => { var data = func(a); return (data != null && data.Count > 0) ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null; }; }
private static object UpdateUsingKeys(DataStrategy dataStrategy, DynamicTable table, object[] args) { var record = ObjectToDictionary(args[0]); var list = record as IList <IDictionary <string, object> >; if (list != null) { return(dataStrategy.UpdateMany(table.GetQualifiedName(), list)); } var dict = record as IDictionary <string, object>; return(dataStrategy.Update(table.GetQualifiedName(), dict)); }
public Func <object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), MethodNameParser.ParseFromBinder(binder, args)); try { var func = dataStrategy.Adapter.CreateFindOneDelegate(table.GetQualifiedName(), criteriaExpression); return(a => new SimpleRecord(func(a), table.GetQualifiedName(), dataStrategy)); } catch (NotImplementedException) { return(null); } }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (args.Length != 1) { throw new ArgumentException("Incorrect number of arguments to Update method."); } var keyFieldNames = dataStrategy.Adapter.GetKeyFieldNames(table.GetQualifiedName()).ToArray(); if (keyFieldNames.Length == 0) { throw new NotSupportedException("Adapter does not support key-based update for this object."); } return(UpdateByKeyFields(table.GetQualifiedName(), dataStrategy, args[0], keyFieldNames)); }
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(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var deletedCount = 0; if (args.Length == 0) { deletedCount = dataStrategy.Run.Delete(table.GetQualifiedName(), new SimpleEmptyExpression()); } if (args.Length == 1 && args[0] is SimpleExpression) { deletedCount = dataStrategy.Run.Delete(table.GetQualifiedName(), (SimpleExpression)args[0]); } return(deletedCount.ResultSetFromModifiedRowCount()); }
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(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var deletedCount = 0; if (args.Length == 0) { deletedCount = dataStrategy.Run.Delete(table.GetQualifiedName(), new SimpleEmptyExpression()); } if (args.Length == 1 && args[0] is SimpleExpression) { deletedCount = dataStrategy.Run.Delete(table.GetQualifiedName(), (SimpleExpression)args[0]); } return deletedCount.ResultSetFromModifiedRowCount(); }
private static object UpdateUsingOriginalValues(DataStrategy dataStrategy, DynamicTable table, object[] args) { var newValues = ObjectToDictionary(args[0]); var newValuesList = newValues as IList<IDictionary<string, object>>; if (newValuesList != null) { var originalValuesList = ObjectToDictionary(args[1]) as IList<IDictionary<string, object>>; if (originalValuesList == null) throw new InvalidOperationException("Parameter type mismatch; both parameters to Update should be same type."); return dataStrategy.UpdateMany(table.GetQualifiedName(), newValuesList, originalValuesList); } var newValuesDict = newValues as IDictionary<string, object>; var originalValuesDict = ObjectToDictionary(args[1]) as IDictionary<string, object>; if (originalValuesDict == null) throw new InvalidOperationException("Parameter type mismatch; both parameters to Update should be same type."); return dataStrategy.Update(table.GetQualifiedName(), newValuesDict, originalValuesDict); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var result = dataStrategy.Run.Get(table.GetName(), args); if (result == null || result.Count == 0) return null; return binder.Name.Equals("get", StringComparison.OrdinalIgnoreCase) ? new SimpleRecord(result, table.GetQualifiedName(), dataStrategy) : result.First().Value; }
private static object UpsertUsingKeys(DataStrategy dataStrategy, DynamicTable table, object[] args, bool isResultRequired) { var record = ObjectToDictionary(args[0]); var list = record as IList<IDictionary<string, object>>; if (list != null) { ErrorCallback errorCallback = (args.Length == 2 ? args[1] as ErrorCallback : null) ?? ((item, exception) => false); return dataStrategy.Run.UpsertMany(table.GetQualifiedName(), list, isResultRequired, errorCallback); } var dict = record as IDictionary<string, object>; if (dict == null) throw new InvalidOperationException("Could not resolve data from passed object."); var key = dataStrategy.GetAdapter().GetKey(table.GetQualifiedName(), dict); if (key == null) throw new InvalidOperationException(string.Format("No key columns defined for table \"{0}\"",table.GetQualifiedName())); var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), key); return dataStrategy.Run.Upsert(table.GetQualifiedName(), dict, criteria, isResultRequired); }
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); }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The database or transaction</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (args.Length == 1 && args[0] is SimpleExpression) { return(new SimpleQuery(dataStrategy.Adapter, table.GetQualifiedName()).Where((SimpleExpression)args[0])); } return(null); }
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)); }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The database or transaction</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (args.Length == 1 && args[0] is SimpleExpression) { return(new SimpleQuery(dataStrategy, table.GetQualifiedName()).Where((SimpleExpression)args[0])); } throw new BadExpressionException("FindAll only accepts a criteria expression."); }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The database or transaction</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (args.Length == 1 && args[0] is SimpleExpression) { return new SimpleQuery(dataStrategy, table.GetQualifiedName()).Where((SimpleExpression)args[0]); } throw new BadExpressionException("FindAll only accepts a criteria expression."); }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The database or transaction</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (args.Length == 1 && args[0] is SimpleExpression) { return new SimpleQuery(dataStrategy, table.GetQualifiedName()).Where((SimpleExpression)args[0]); } return null; }
public static object TypeResult(object result, DynamicTable table, DataStrategy dataStrategy) { var dictionary = result as IDictionary <string, object>; if (dictionary != null) { return(dictionary.ToDynamicRecord(table.GetQualifiedName(), dataStrategy)); } var list = result as IEnumerable <IDictionary <string, object> >; if (list != null) { return(new SimpleResultSet(list.Select(d => d.ToDynamicRecord(table.GetQualifiedName(), dataStrategy)))); } return(null); }
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 Func <object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { if (dataStrategy is SimpleTransaction) { return(null); } if (binder.Name.Equals("FindBy") || binder.Name.Equals("find_by")) { ArgumentHelper.CheckFindArgs(args, binder); if (args.Length == 1 && args[0].IsAnonymous()) { return(null); } } var criteriaDictionary = ArgumentHelper.CreateCriteriaDictionary(binder, args, "FindBy", "find_by"); if (criteriaDictionary == null) { return(null); } var criteriaExpression = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), criteriaDictionary); try { var adapter = dataStrategy.GetAdapter(); var func = adapter.OptimizingDelegateFactory.CreateFindOneDelegate(adapter, table.GetQualifiedName(), criteriaExpression); return(a => { var data = func(a); return (data != null && data.Count > 0) ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null; }); } catch (NotImplementedException) { return(null); } }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The data strategy.</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var query = new SimpleQuery(dataStrategy.GetAdapter(), table.GetQualifiedName()); if (args.Length == 1 && args[0] is SimpleExpression) { query = query.Where((SimpleExpression)args[0]); } return query.Count(); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var result = DoInsert(binder, args, dataStrategy, table.GetQualifiedName()); var dictionary = result as IDictionary <string, object>; if (dictionary != null) { return(dictionary.ToDynamicRecord(table.GetQualifiedName(), dataStrategy)); } var list = result as IEnumerable <IDictionary <string, object> >; if (list != null) { return(new SimpleResultSet(list.Select(d => d.ToDynamicRecord(table.GetQualifiedName(), dataStrategy)))); } return(null); }
/// <summary> /// Executes the command. /// </summary> /// <param name="dataStrategy">The data strategy.</param> /// <param name="table"></param> /// <param name="binder">The binder from the <see cref="DynamicTable"/> method invocation.</param> /// <param name="args">The arguments from the <see cref="DynamicTable"/> method invocation.</param> /// <returns></returns> public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var query = new SimpleQuery(dataStrategy.GetAdapter(), table.GetQualifiedName()); if (args.Length == 1 && args[0] is SimpleExpression) { query = query.Where((SimpleExpression)args[0]); } return(query.Count()); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var result = dataStrategy.Run.Get(table.GetName(), args); if (result == null || result.Count == 0) { return(null); } return(binder.Name.Equals("get", StringComparison.OrdinalIgnoreCase) ? new SimpleRecord(result, table.GetQualifiedName(), dataStrategy) : result.First().Value); }
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)); }
public Func <object[], object> CreateDelegate(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { var func = dataStrategy.GetAdapter().OptimizingDelegateFactory.CreateGetDelegate(dataStrategy.GetAdapter(), table.GetName(), args); return(a => { var data = func(a); return (data != null && data.Count > 0) ? new SimpleRecord(data, table.GetQualifiedName(), dataStrategy) : null; }); }
public object Execute(DataStrategy dataStrategy, DynamicTable table, InvokeMemberBinder binder, object[] args) { SimpleExpression criteriaExpression = null; if (args.Length == 1 && args[0] is SimpleExpression) { criteriaExpression = args[0] as SimpleExpression; } var columName = binder.Name.Substring(3); var data = dataStrategy.Max(table.GetQualifiedName(), columName, criteriaExpression); return(data); }
private static object UpdateUsingKeys(DataStrategy dataStrategy, DynamicTable table, object[] args) { var record = ObjectToDictionary(args[0]); var list = record as IList <IDictionary <string, object> >; if (list != null) { return(dataStrategy.Run.UpdateMany(table.GetQualifiedName(), list)); } var dict = record as IDictionary <string, object>; if (dict == null) { throw new InvalidOperationException("Could not resolve data from passed object."); } var key = dataStrategy.GetAdapter().GetKey(table.GetQualifiedName(), dict); dict = dict.Where(kvp => key.All(keyKvp => keyKvp.Key.Homogenize() != kvp.Key.Homogenize())).ToDictionary(); var criteria = ExpressionHelper.CriteriaDictionaryToExpression(table.GetQualifiedName(), key); return(dataStrategy.Run.Update(table.GetQualifiedName(), dict, criteria)); }
private static object UpdateUsingOriginalValues(DataStrategy dataStrategy, DynamicTable table, object[] args) { var newValues = ObjectToDictionary(args[0]); var newValuesList = newValues as IList <IDictionary <string, object> >; if (newValuesList != null) { var originalValuesList = ObjectToDictionary(args[1]) as IList <IDictionary <string, object> >; if (originalValuesList == null) { throw new InvalidOperationException("Parameter type mismatch; both parameters to Update should be same type."); } return(dataStrategy.UpdateMany(table.GetQualifiedName(), newValuesList, originalValuesList)); } var newValuesDict = newValues as IDictionary <string, object>; var originalValuesDict = ObjectToDictionary(args[1]) as IDictionary <string, object>; if (originalValuesDict == null) { throw new InvalidOperationException("Parameter type mismatch; both parameters to Update should be same type."); } return(dataStrategy.Update(table.GetQualifiedName(), newValuesDict, originalValuesDict)); }
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()); }