Ejemplo n.º 1
0
        /// <summary>
        ///     Executes the non query.
        /// </summary>
        /// <param name="databaseManager">The database manager.</param>
        /// <param name="executableCommandInfo">The executable command information.</param>
        /// <returns>System.Int32.</returns>
        public override int ExecuteNonQuery(IDatabaseManager databaseManager, IExecutableCommandInfo executableCommandInfo)
        {
            var transformed = _transforms.Aggregate(executableCommandInfo, (current, commandTransform) =>
                                                    commandTransform.Transform(current));

            return(Source.ExecuteNonQuery(databaseManager, transformed));
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Executes the scalar asynchronously.
        /// </summary>
        /// <typeparam name="TReturn">The type of the return.</typeparam>
        /// <param name="databaseManager">The database manager.</param>
        /// <param name="executableCommandInfo">The executable command information.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>System.Threading.Tasks.Task&lt;TReturn&gt;.</returns>
        public override async Task <TReturn> ExecuteScalarAsync <TReturn>(IDatabaseManager databaseManager,
                                                                          IExecutableCommandInfo executableCommandInfo, CancellationToken cancellationToken)
        {
            var transformed = _transforms.Aggregate(executableCommandInfo, (current, commandTransform) =>
                                                    commandTransform.Transform(current));

            return(await Source.ExecuteScalarAsync <TReturn>(databaseManager, transformed, cancellationToken)
                   .ConfigureAwait(false));
        }
        /// <summary>
        ///     Executes the scalar.
        /// </summary>
        /// <typeparam name="TReturn">The type of the return.</typeparam>
        /// <param name="databaseManager">The database manager.</param>
        /// <param name="executableCommandInfo">The executable command information.</param>
        /// <returns>TReturn.</returns>
        public override TReturn ExecuteScalar <TReturn>(IDatabaseManager databaseManager,
                                                        IExecutableCommandInfo executableCommandInfo)
        {
            var transformed = _transforms.Aggregate(executableCommandInfo, (current, commandTransform) =>
                                                    commandTransform.Transform(current));

            _queryInspector(transformed);

            return(Source.ExecuteScalar <TReturn>(databaseManager, transformed));
        }
        /// <summary>
        ///     Executes the non query asynchronously.
        /// </summary>
        /// <param name="databaseManager">The database manager.</param>
        /// <param name="executableCommandInfo">The executable command information.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>System.Threading.Tasks.Task&lt;System.Int32&gt;.</returns>
        public override async Task <int> ExecuteNonQueryAsync(IDatabaseManager databaseManager,
                                                              IExecutableCommandInfo executableCommandInfo, CancellationToken cancellationToken)
        {
            var transformed = _transforms.Aggregate(executableCommandInfo, (current, commandTransform) =>
                                                    commandTransform.Transform(current));

            _queryInspector(transformed);

            return(await Source.ExecuteNonQueryAsync(databaseManager, transformed, cancellationToken)
                   .ConfigureAwait(false));
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Builds the where filter implementation.
        /// </summary>
        /// <param name="info">The information.</param>
        /// <returns>ICommandSingleResultExpression&lt;TFilter, TResult&gt;.</returns>
        public IExecutableCommandInfo BuildWhereFilterTransform(IExecutableCommandInfo info)
        {
            var mappings = info.Parameters
                           .Join(_processor.CommandResultInfo.RetrieveResultSetMappings(typeof(TResult)).Export(), parameter =>
                                 parameter.SourceColumn, pair => pair.Key,
                                 (parameter, pair) =>
                                 new Tuple <string, Type, string, string>(
                                     pair.Key,                                 //Property Name
                                     pair.Value.PropertyMetadata.PropertyType, //Property Type
                                     parameter.ParameterName,                  //Parameter Name
                                     pair.Value.ActiveAlias                    //Result Column Name
                                     ))
                           .GroupJoin(WhereFilterOptions, tuple => tuple.Item1, pair => pair.Key,
                                      (tuple, pairs) => new { tuple, comparer = pairs.Select(kvp => kvp.Value).FirstOrDefault() })
                           .Select(o => new Tuple <string, Type, string, string, object>(
                                       o.tuple.Item1,                                       //Property Name
                                       o.tuple.Item2,                                       //Property Type
                                       o.tuple.Item3,                                       //Parameter Name
                                       o.tuple.Item4,                                       //Result Column Name
                                       o.comparer ?? GetDefaultCompareMethod(o.tuple.Item2) //Comparer
                                       ));

            return(new ExecutableCommandInfo
            {
                CommandText = info.CommandText + string.Concat(mappings.Select(o =>
                {
                    var parameter = info.Parameters.SingleOrDefault(param => param.ParameterName == o.Item3);

                    var compareFormat = string.Empty;
                    //If no matching parameter or value is null or DBNull, don't add a comaparison.
                    if (parameter?.Value != null && parameter.Value != DBNull.Value)
                    {
                        if (o.Item5 is CompareMethod)
                        {
                            compareFormat = Comparison.GetComparisonFormat((CompareMethod)o.Item5);
                        }
                    }

                    var value = o.Item5 as ComparisonOverride;
                    compareFormat = value != null ? value.OverrideText : compareFormat;

                    if (compareFormat.Contains('{'))
                    {
                        compareFormat = string.Format(compareFormat, o.Item3, "[" + o.Item4 + "]");
                    }

                    return compareFormat;
                })),
                DbCommandType = info.DbCommandType,
                Parameters = info.Parameters
            });
        }
Ejemplo n.º 6
0
        /// <summary>
        ///     Executes the non query.
        /// </summary>
        /// <param name="databaseManager">The database manager.</param>
        /// <param name="executableCommandInfo">The executable command information.</param>
        /// <returns>System.Int32.</returns>
        public override int ExecuteNonQuery(IDatabaseManager databaseManager,
                                            IExecutableCommandInfo executableCommandInfo)
        {
            int result;

            try
            {
                result = databaseManager.ExecuteNonQuery(
                    executableCommandInfo.CommandText,
                    executableCommandInfo.DbCommandType,
                    Timeout,
                    executableCommandInfo.Parameters);
            }
            catch (Exception ex)
            {
                throw new SusanooExecutionException(ex, executableCommandInfo, Timeout, executableCommandInfo.Parameters);
            }

            return(result);
        }
Ejemplo n.º 7
0
        /// <summary>
        ///     Executes the scalar.
        /// </summary>
        /// <typeparam name="TReturn">The type of the return.</typeparam>
        /// <param name="databaseManager">The database manager.</param>
        /// <param name="executableCommandInfo">The executable command information.</param>
        /// <returns>TReturn.</returns>
        public override TReturn ExecuteScalar <TReturn>(IDatabaseManager databaseManager,
                                                        IExecutableCommandInfo executableCommandInfo)
        {
            var result = default(TReturn);

            try
            {
                result = databaseManager.ExecuteScalar <TReturn>(
                    executableCommandInfo.CommandText,
                    executableCommandInfo.DbCommandType,
                    Timeout,
                    executableCommandInfo.Parameters);
            }
            catch (Exception ex)
            {
                throw new SusanooExecutionException(ex, executableCommandInfo, Timeout, executableCommandInfo.Parameters);
            }

            return(result);
        }
Ejemplo n.º 8
0
        /// <summary>
        ///     Executes the scalar asynchronously.
        /// </summary>
        /// <typeparam name="TReturn">The type of the return.</typeparam>
        /// <param name="databaseManager">The database manager.</param>
        /// <param name="executableCommandInfo">The executable command information.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>System.Threading.Tasks.Task&lt;TReturn&gt;.</returns>
        public override async Task <TReturn> ExecuteScalarAsync <TReturn>(IDatabaseManager databaseManager,
                                                                          IExecutableCommandInfo executableCommandInfo, CancellationToken cancellationToken)
        {
            var result = default(TReturn);

            try
            {
                result = await databaseManager.ExecuteScalarAsync <TReturn>(
                    executableCommandInfo.CommandText,
                    executableCommandInfo.DbCommandType,
                    Timeout,
                    cancellationToken,
                    executableCommandInfo.Parameters).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                throw new SusanooExecutionException(ex, executableCommandInfo, Timeout, executableCommandInfo.Parameters);
            }

            return(result);
        }
Ejemplo n.º 9
0
        public override int ExecuteNonQuery(IDatabaseManager databaseManager, IExecutableCommandInfo executableCommandInfo)
        {
            try
            {
                return(Source.ExecuteNonQuery(databaseManager, executableCommandInfo));
            }
            catch (SusanooExecutionException ex)
            {
                try
                {
                    _exceptionInterception(ex);
                }
                catch (Exception exFault)
                {
                    throw new SusanooExecutionException("Exception interception failed.",
                                                        new AggregateException(exFault, ex), ex.Info, ex.Timeout, ex.Parameters);
                }

                throw;
            }
        }
        /// <summary>
        /// Assembles a data CommandBuilder for an ADO.NET provider,
        /// executes the CommandBuilder and uses pre-compiled mappings to assign the resultant data to the result object type.
        /// </summary>
        /// <param name="databaseManager">The database manager.</param>
        /// <param name="executableCommandInfo">The executable command information.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>Task&lt;IEnumerable&lt;TResult&gt;&gt;.</returns>
        /// <exception cref="SusanooExecutionException">Any exception is encountered during execution.</exception>
        public override async Task <IEnumerable <TResult> > ExecuteAsync(IDatabaseManager databaseManager,
                                                                         IExecutableCommandInfo executableCommandInfo, CancellationToken cancellationToken)
        {
            try
            {
                var records = await databaseManager
                              .ExecuteDataReaderAsync(
                    executableCommandInfo.CommandText,
                    executableCommandInfo.DbCommandType,
                    Timeout,
                    cancellationToken,
                    executableCommandInfo.Parameters)
                              .ConfigureAwait(false);

                var results = CompiledMapping.Deserialize(records, ColumnReport);

                if (StreamingScope.Current == null)
                {
                    try
                    {
                        results = results?.ToList();
                    }
                    finally
                    {
                        records.Dispose();
                    }
                }
                else
                {
                    StreamingScope.Current.Enlist(records);
                }

                return(results ?? Enumerable.Empty <TResult>());
            }
            catch (Exception ex)
            {
                throw new SusanooExecutionException(ex, executableCommandInfo, Timeout, executableCommandInfo.Parameters);
            }
        }
Ejemplo n.º 11
0
        public override async Task <TReturn> ExecuteScalarAsync <TReturn>(IDatabaseManager databaseManager,
                                                                          IExecutableCommandInfo executableCommandInfo, CancellationToken cancellationToken)
        {
            try
            {
                return(await Source.ExecuteScalarAsync <TReturn>(databaseManager, executableCommandInfo, cancellationToken)
                       .ConfigureAwait(false));
            }
            catch (SusanooExecutionException ex)
            {
                try
                {
                    _exceptionInterception(ex);
                }
                catch (Exception exFault)
                {
                    throw new SusanooExecutionException("Exception interception failed.",
                                                        new AggregateException(exFault, ex), ex.Info, ex.Timeout, ex.Parameters);
                }

                throw;
            }
        }
 /// <summary>
 /// Assembles a data CommandBuilder for an ADO.NET provider,
 /// executes the CommandBuilder and uses pre-compiled mappings to assign the resultant data to the result object type.
 /// </summary>
 /// <param name="databaseManager">The database manager.</param>
 /// <param name="executableCommandInfo">The executable command information.</param>
 /// <returns>System.Collections.Generic.IEnumerable&lt;TResult&gt;.</returns>
 /// <exception cref="SusanooExecutionException">Any exception is encountered during execution.</exception>
 public abstract IEnumerable <TResult> Execute(IDatabaseManager databaseManager,
                                               IExecutableCommandInfo executableCommandInfo);
Ejemplo n.º 13
0
 /// <summary>
 /// Assembles a data CommandBuilder for an ADO.NET provider,
 /// executes the CommandBuilder and uses pre-compiled mappings to assign the resultant data to the result object type.
 /// </summary>
 /// <param name="databaseManager">The database manager.</param>
 /// <param name="executableCommandInfo">The executable command information.</param>
 /// <param name="cancellationToken">The cancellation token.</param>
 /// <returns>Task&lt;IEnumerable&lt;TResult&gt;&gt;.</returns>
 public abstract Task <IResultSetCollection> ExecuteAsync(IDatabaseManager databaseManager,
                                                          IExecutableCommandInfo executableCommandInfo,
                                                          CancellationToken cancellationToken);
Ejemplo n.º 14
0
 /// <summary>
 /// Executes the CommandBuilder using a provided database manager and optionally a filter to read parameters from and explicit
 /// parameters.
 /// </summary>
 /// <param name="databaseManager">The database manager.</param>
 /// <param name="executableCommandInfo">The executable command information.</param>
 /// <returns>IResultSetCollection.</returns>
 /// <exception cref="SusanooExecutionException">Any exception occured during execution.</exception>
 public abstract IResultSetCollection Execute(IDatabaseManager databaseManager,
                                              IExecutableCommandInfo executableCommandInfo);
 /// <summary>
 ///     Executes the non query asynchronously.
 /// </summary>
 /// <param name="databaseManager">The database manager.</param>
 /// <param name="executableCommandInfo">The executable command information.</param>
 /// <param name="cancellationToken">The cancellation token.</param>
 /// <returns>System.Threading.Tasks.Task&lt;System.Int32&gt;.</returns>
 public abstract Task <int> ExecuteNonQueryAsync(IDatabaseManager databaseManager,
                                                 IExecutableCommandInfo executableCommandInfo, CancellationToken cancellationToken);
        public override IEnumerable <TResult> Execute(IDatabaseManager databaseManager, IExecutableCommandInfo executableCommandInfo)
        {
            var key = executableCommandInfo.GetDeterministicKey();

            var result = _cacheProvider.GetValue <IEnumerable <TResult> >(key);


            if (result == null)
            {
                result = Source.Execute(databaseManager, executableCommandInfo);

                if (_expiryPeriod != System.Threading.Timeout.InfiniteTimeSpan)
                {
                    _cacheProvider.SetValue(key, result, _expiryPeriod);
                }
                else
                {
                    _cacheProvider.SetValue(key, result);
                }
            }

            return(result);
        }
        /// <summary>
        /// Assembles a data CommandBuilder for an ADO.NET provider,
        /// executes the CommandBuilder and uses pre-compiled mappings to assign the resultant data to the result object type.
        /// </summary>
        /// <param name="databaseManager">The database manager.</param>
        /// <param name="executableCommandInfo">The executable command information.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>Task&lt;IEnumerable&lt;TResult&gt;&gt;.</returns>
        public override async Task <IResultSetCollection> ExecuteAsync(IDatabaseManager databaseManager, IExecutableCommandInfo executableCommandInfo,
                                                                       CancellationToken cancellationToken)
        {
            var transformed = _transforms.Aggregate(executableCommandInfo, (current, commandTransform) =>
                                                    commandTransform.Transform(current));

            return(await Source.ExecuteAsync(databaseManager, transformed, cancellationToken));
        }
        /// <summary>
        /// Executes the CommandBuilder using a provided database manager and optionally a filter to read parameters from and explicit
        /// parameters.
        /// </summary>
        /// <param name="databaseManager">The database manager.</param>
        /// <param name="executableCommandInfo">The executable command information.</param>
        /// <returns>IResultSetCollection.</returns>
        /// <exception cref="SusanooExecutionException">Any exception occured during execution.</exception>
        public override IResultSetCollection Execute(IDatabaseManager databaseManager, IExecutableCommandInfo executableCommandInfo)
        {
            var transformed = _transforms.Aggregate(executableCommandInfo, (current, commandTransform) =>
                                                    commandTransform.Transform(current));

            return(Source.Execute(databaseManager, transformed));
        }
        public override async Task <IResultSetCollection> ExecuteAsync(IDatabaseManager databaseManager, IExecutableCommandInfo executableCommandInfo,
                                                                       CancellationToken cancellationToken)
        {
            try
            {
                return(await Source.ExecuteAsync(databaseManager, executableCommandInfo, cancellationToken));
            }
            catch (SusanooExecutionException ex)
            {
                try
                {
                    _exceptionHandler(ex);
                }
                catch (Exception exFault)
                {
                    throw new SusanooExecutionException("Exception interception failed.", new AggregateException(exFault, ex), ex.Info, ex.Timeout, ex.Parameters);
                }

                throw;
            }
        }
 /// <summary>
 ///     Executes the scalar asynchronously.
 /// </summary>
 /// <typeparam name="TReturn">The type of the return.</typeparam>
 /// <param name="databaseManager">The database manager.</param>
 /// <param name="executableCommandInfo">The executable command information.</param>
 /// <param name="cancellationToken">The cancellation token.</param>
 /// <returns>System.Threading.Tasks.Task&lt;TReturn&gt;.</returns>
 public abstract Task <TReturn> ExecuteScalarAsync <TReturn>(IDatabaseManager databaseManager,
                                                             IExecutableCommandInfo executableCommandInfo, CancellationToken cancellationToken);
 /// <summary>
 ///     Executes the non query.
 /// </summary>
 /// <param name="databaseManager">The database manager.</param>
 /// <param name="executableCommandInfo">The executable command information.</param>
 /// <returns>System.Int32.</returns>
 public abstract int ExecuteNonQuery(IDatabaseManager databaseManager,
                                     IExecutableCommandInfo executableCommandInfo);
 /// <summary>
 ///     Executes the scalar.
 /// </summary>
 /// <typeparam name="TReturn">The type of the return.</typeparam>
 /// <param name="databaseManager">The database manager.</param>
 /// <param name="executableCommandInfo">The executable command information.</param>
 /// <returns>TReturn.</returns>
 public abstract TReturn ExecuteScalar <TReturn>(IDatabaseManager databaseManager,
                                                 IExecutableCommandInfo executableCommandInfo);
Ejemplo n.º 23
0
        /// <summary>
        /// Executes the CommandBuilder using a provided database manager and optionally a filter to read parameters from and explicit
        /// parameters.
        /// </summary>
        /// <param name="databaseManager">The database manager.</param>
        /// <param name="executableCommandInfo">The executable command information.</param>
        /// <returns>Tuple&lt;
        /// IEnumerable&lt;TResult1&gt;,
        /// IEnumerable&lt;TResult2&gt;&gt;.</returns>
        /// <exception cref="SusanooExecutionException">Any exception occured during execution.</exception>
        public override IResultSetCollection Execute(IDatabaseManager databaseManager,
                                                     IExecutableCommandInfo executableCommandInfo)
        {
            var results = new IEnumerable[_mappers.Length];
            IResultSetCollection finalResults;

            try
            {
                var record = databaseManager
                             .ExecuteDataReader(
                    executableCommandInfo.CommandText,
                    executableCommandInfo.DbCommandType,
                    Timeout,
                    executableCommandInfo.Parameters);

                var ix = 0;

                do
                {
                    results[ix] = _mappers[ix].Deserialize(record, RetrieveColumnIndexInfo());
                    ix++;
                } while (ix < results.Length);

                if (StreamingScope.Current == null)
                {
                    try
                    {
                        for (int i = 0; i < results.Length; i++)
                        {
                            results[i] = results[i].Cast <object>().ToList();

                            if (!record.NextResult())
                            {
                                for (int j = i + 1; j < results.Length; j++)
                                {
                                    results[j] = null;
                                }

                                break;
                            }
                        }

                        finalResults = new ResultSetCollection(results, null);
                    }
                    finally
                    {
                        record.Dispose();
                    }
                }
                else
                {
                    StreamingScope.Current.Enlist(record);
                    finalResults = new ResultSetCollection(results, record);
                }
            }
            catch (Exception ex)
            {
                throw new SusanooExecutionException(ex, executableCommandInfo, Timeout, executableCommandInfo.Parameters);
            }

            return(finalResults);
        }
 /// <summary>
 /// Assembles a data CommandBuilder for an ADO.NET provider,
 /// executes the CommandBuilder and uses pre-compiled mappings to assign the resultant data to the result object type.
 /// </summary>
 /// <param name="databaseManager">The database manager.</param>
 /// <param name="executableCommandInfo">The executable command information.</param>
 /// <param name="cancellationToken">The cancellation token.</param>
 /// <returns>Task&lt;IEnumerable&lt;TResult&gt;&gt;.</returns>
 /// <exception cref="SusanooExecutionException">Any exception is encountered during execution.</exception>
 public abstract Task <IEnumerable <TResult> > ExecuteAsync(IDatabaseManager databaseManager,
                                                            IExecutableCommandInfo executableCommandInfo, CancellationToken cancellationToken);