public ModelStep(Query query, DbParameterCollection parameters, QueryResultModelHandler <TArg, TModel> resultHandler, TArg optionalArgument) { _isTopOne = false; _query = query; _resultHandler = resultHandler; _parameters = parameters; _optionalArgument = optionalArgument; }
public ModelStep(Query query, DbParameterCollection parameters, QueryResultModelHandler <TArg, TModel> resultHandler, bool isTopOne) { _isTopOne = isTopOne; _query = query; _resultHandler = resultHandler; _parameters = parameters; _optionalArgument = default(TArg); }
public static ShardBatch <TModel> Add <TModel>(this ShardBatch <TModel> batch, Query query, QueryResultModelHandler <object, TModel> resultHandler) where TModel : class, new() { batch.Add(new ModelStep <object, TModel>(query, new ParameterCollection(), resultHandler, null)); return(batch); }
public static ShardBatch <TModel> Add <TArg, TModel>(this ShardBatch <TModel> batch, Query query, QueryResultModelHandler <TArg, TModel> resultHandler, TArg optionalArgument) where TModel : class, new() { batch.Add(new ModelStep <TArg, TModel>(query, new ParameterCollection(), resultHandler, optionalArgument)); return(batch); }
public static DatabaseBatch <TModel> Add <TModel>(this DatabaseBatch <TModel> batch, Query query, DbParameterCollection parameters, QueryResultModelHandler <object, TModel> resultHandler) where TModel : class, new() { batch.Add(new ModelStep <object, TModel>(query, parameters, resultHandler, null)); return(batch); }
public static DatabaseBatch <TModel> Add <TArg, TModel>(this DatabaseBatch <TModel> batch, Query query, DbParameterCollection parameters, QueryResultModelHandler <TArg, TModel> resultHandler, TArg optionalArgument) where TModel : class, new() { batch.Add(new ModelStep <TArg, TModel>(query, parameters, resultHandler, optionalArgument)); return(batch); }
internal async Task <List <TModel> > ReadQueryAllAsync <TArg, TModel>(Query query, DbParameterCollection parameters, ShardsValues shardParameterValues, string shardParameterName, QueryResultModelHandler <TArg, TModel> resultHandler, TArg dataObject, CancellationToken cancellationToken) { var result = new List <TModel>(); if (query is null || string.IsNullOrEmpty(query.Sql) || string.IsNullOrEmpty(query.Name)) { throw new ArgumentNullException(nameof(query)); } if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } if (!(this.MockResults is null) && this.MockResults.Count > 0 && this.MockResults.ContainsKey(query.Name)) { return((List <TModel>) this.MockResults[query.Name]); } var shardParameterOrdinal = parameters.GetParameterOrdinal(shardParameterName); cancellationToken.ThrowIfCancellationRequested(); var tsks = new List <Task <TModel> >(); var cancelTokenSource = new CancellationTokenSource(); using (var queryCancelationToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, cancelTokenSource.Token)) { if (shardParameterValues is null) { foreach (var shardId in dtn.Keys) { parameters.SetShardId(shardParameterOrdinal, shardId); tsks.Add(this.dtn[shardId].Read._manager.QueryAsync <TArg, TModel>(query, parameters, parameters.GetParameterOrdinal(shardParameterName), null, resultHandler, false, dataObject, null, cancellationToken)); } } else { if (shardParameterValues.Shards.Count == 0) { return(result); } foreach (var shardTuple in shardParameterValues.Shards) { parameters.SetShardId(shardParameterOrdinal, shardTuple.Key); tsks.Add(this.dtn[shardTuple.Key].Read._manager.QueryAsync <TArg, TModel>(query, parameters, parameters.GetParameterOrdinal(shardParameterName), shardTuple.Value, resultHandler, false, dataObject, null, cancellationToken)); } } await Task.WhenAll(tsks).ConfigureAwait(false); foreach (var tsk in tsks) { var tskResult = tsk.Result; if (tskResult != null) { result.Add(tskResult); } } } return(result); }