Ejemplo n.º 1
0
        /// <summary>
        /// Great of huge result sets, process one row at the time
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="cmd"></param>
        /// <param name="processor">Result processor</param>
        /// <param name="mapper"></param>
        /// <param name="firstRowOnly"></param>
        public static void QueryAndProcess <T>(this DbCommand cmd, Func <T, bool> processor, Func <DbDataReader, T> mapper = null,
                                               bool firstRowOnly = false)
        {
            try
            {
                CommandBehavior behavior = firstRowOnly ? CommandBehavior.SingleRow : CommandBehavior.Default;
                using (var reader = cmd.ExecuteReader(behavior))
                {
                    SqlFuManager.Config.OnCommand(cmd);

                    while (reader.Read())
                    {
                        if (!processor(SqlFuManager.GetMapper(mapper, cmd.CommandText)(reader)))
                        {
                            break;
                        }
                    }
                }
            }
            catch (DbException ex)
            {
                SqlFuManager.Config.OnException(cmd, ex);
                throw;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Executes an async query then processes each result
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="cmd"></param>
        /// <param name="cancellation"></param>
        /// <param name="processor">Delegate to process a result item. Return false from delegate to end the query</param>
        /// <param name="mapper"></param>
        /// <param name="firstRowOnly"></param>
        /// <returns></returns>
        public static async Task QueryAndProcessAsync <T>(this DbCommand cmd, CancellationToken cancellation, Func <T, bool> processor, Func <DbDataReader, T> mapper = null,
                                                          bool firstRowOnly = false)
        {
            try
            {
                CommandBehavior behavior = firstRowOnly ? CommandBehavior.SingleRow : CommandBehavior.Default;
                using (var reader = await cmd.ExecuteReaderAsync(behavior, cancellation).ConfigureAwait(false))
                {
                    SqlFuManager.Config.OnCommand(cmd);

                    while (await reader.ReadAsync(cancellation).ConfigureAwait(false))
                    {
                        if (!processor(SqlFuManager.GetMapper(mapper, cmd.CommandText)(reader)))
                        {
                            break;
                        }
                    }
                }
            }
            catch (DbException ex)
            {
                SqlFuManager.Config.OnException(cmd, ex);
                throw;
            }
        }
Ejemplo n.º 3
0
 public Task <DbConnection> CreateAsync(CancellationToken cancel, DbConnection db = null)
 {
     if (db != null)
     {
         return(Task.FromResult((DbConnection) new SqlFuConnection(_provider, db, SqlFuManager.Config.TransientErrorsStrategyFactory)));
     }
     return(SqlFuManager.OpenConnectionAsync(_provider, _connectionString, cancel));
 }
Ejemplo n.º 4
0
 public DbConnection Create(DbConnection db = null)
 {
     if (db != null)
     {
         return(new SqlFuConnection(_provider, db, SqlFuManager.Config.TransientErrorsStrategyFactory));
     }
     return(SqlFuManager.OpenConnection(_provider, _connectionString));
 }
Ejemplo n.º 5
0
 public Task <DbConnection> CreateAsync(CancellationToken cancel, DbConnection db = null)
 {
     if (db != null)
     {
         return(Task.FromResult((DbConnection) new SqlFuConnection(db, _provider)));
     }
     return(SqlFuManager.OpenConnectionAsync(_provider, _connectionString, cancel));
 }
Ejemplo n.º 6
0
 public DbConnection Create(DbConnection db = null)
 {
     if (db != null)
     {
         return(new SqlFuConnection(db, _provider));
     }
     return(SqlFuManager.OpenConnection(_provider, _connectionString));
 }
Ejemplo n.º 7
0
 public DbConnection Create(DbConnection db = null)
 {
     if (db == null)
     {
         return(SqlFuManager.OpenConnection(_provider, _connectionString));
     }
     if (db is SqlFuConnection)
     {
         return(db);
     }
     return(new SqlFuConnection(_provider, db, Configuration));
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Gets one result value
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="cmd"></param>
 /// <param name="converter"></param>
 /// <returns></returns>
 public static T GetValue <T>(this DbCommand cmd, Func <object, T> converter = null)
 {
     try
     {
         object rez = cmd.ExecuteScalar();
         SqlFuManager.Config.OnCommand(cmd);
         return(SqlFuManager.GetConverter(converter)(rez));
     }
     catch (DbException ex)
     {
         SqlFuManager.Config.OnException(cmd, ex);
         throw;
     }
 }
Ejemplo n.º 9
0
        public static async Task <T> GetValueAsync <T>(this DbCommand cmd, CancellationToken token, Func <object, T> converter = null)
        {
            try
            {
                object rez = await cmd.ExecuteScalarAsync(token).ConfigureAwait(false);

                SqlFuManager.Config.OnCommand(cmd);
                return(SqlFuManager.GetConverter(converter)(rez));
            }
            catch (DbException ex)
            {
                SqlFuManager.Config.OnException(cmd, ex);
                throw;
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Great of huge result sets, process one row at the time
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="cmd"></param>
        /// <param name="processor">Result processor</param>
        /// <param name="mapper"></param>
        /// <param name="firstRowOnly"></param>
        public static void QueryAndProcess <T>(this DbCommand cmd, Func <T, bool> processor, Func <DbDataReader, T> mapper = null,
                                               bool firstRowOnly = false)
        {
            var             fuCommand = cmd.CastAs <SqlFuCommand>();
            var             strat     = fuCommand.GetErrorsStrategy();
            CommandBehavior behavior  = firstRowOnly ? CommandBehavior.SingleRow : CommandBehavior.Default;

            SqlFuCommand.HandleTransients(cmd, () =>
            {
                using (var reader = cmd.ExecuteReader(behavior))
                {
                    while (reader.Read())
                    {
                        if (!processor(SqlFuManager.GetMapper(mapper, cmd.CommandText)(reader)))
                        {
                            break;
                        }
                    }
                }
            }, strat, fuCommand.Provider);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Executes an async query then processes each result
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="cmd"></param>
        /// <param name="cancellation"></param>
        /// <param name="processor">Delegate to process a result item. Return false from delegate to end the query</param>
        /// <param name="mapper"></param>
        /// <param name="firstRowOnly"></param>
        /// <returns></returns>
        public static Task QueryAndProcessAsync <T>(this DbCommand cmd, CancellationToken cancellation, Func <T, bool> processor, Func <DbDataReader, T> mapper = null,
                                                    bool firstRowOnly = false)
        {
            var             fuCommand = cmd.CastAs <SqlFuCommand>();
            var             strat     = fuCommand.GetErrorsStrategy();
            CommandBehavior behavior  = firstRowOnly ? CommandBehavior.SingleRow : CommandBehavior.Default;

            return(SqlFuCommand.HandleTransientsAsync(cmd, async(c) =>
            {
                using (var reader = await cmd.ExecuteReaderAsync(behavior, c).ConfigureFalse())
                {
                    while (await reader.ReadAsync(c).ConfigureFalse())
                    {
                        if (!processor(SqlFuManager.GetMapper(mapper, cmd.CommandText)(reader)))
                        {
                            break;
                        }
                    }
                }
            }, strat, fuCommand.Provider, cancellation));
        }
Ejemplo n.º 12
0
 public Task <DbConnection> CreateAsync(CancellationToken cancel, string cnxString)
 {
     return(SqlFuManager.OpenConnectionAsync(_provider, cnxString ?? _connectionString, cancel));
 }
Ejemplo n.º 13
0
 public DbConnection Create(string cnxString)
 {
     return(SqlFuManager.OpenConnection(_provider, cnxString ?? _connectionString));
 }
Ejemplo n.º 14
0
 /// <summary>
 /// Gets one result value
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="cmd"></param>
 /// <param name="converter"></param>
 /// <returns></returns>
 public static T GetValue <T>(this DbCommand cmd, Func <object, T> converter = null)
 {
     return(SqlFuManager.GetConverter(converter)(cmd.ExecuteScalar()));
 }
Ejemplo n.º 15
0
 public static async Task <T> GetValueAsync <T>(this DbCommand cmd, CancellationToken token, Func <object, T> converter = null)
 {
     return(SqlFuManager.GetConverter(converter)(await cmd.ExecuteScalarAsync(token).ConfigureAwait(false)));
 }