public override IEtlOperationResult Execute(EtlPipelineContext context)
        {
            var log = context.GetLogger(GetType().FullName);

            log.Debug("Opening connection to Redshift.");

            using (var con = context.CreateNamedDbConnection(_connectionName))
            {
                con.Open();
                foreach (var redshiftCommand in _commands)
                {
                    log.Trace($"Executing Redshift command: {redshiftCommand}");
                    try
                    {
                        using (var cmd = con.CreateCommand())
                        {
                            cmd.CommandType = CommandType.Text;
                            cmd.CommandText = redshiftCommand;
                            cmd.ExecuteNonQuery();
                        }
                    }
                    catch (Exception e)
                    {
                        log.Error(e.Message, e);
                        return(new EtlOperationResult(false)
                               .WithError(this, e, redshiftCommand));
                    }
                }
            }

            return(new EtlOperationResult(true));
        }
Example #2
0
        public override void OnExecute(EtlPipelineContext context)
        {
            using (var con = context.CreateNamedDbConnection(_connectionName))
            {
                if (con.State != ConnectionState.Open)
                {
                    con.Open();
                }


                foreach (var item in Input)
                {
                    var emitted = false;
                    using (var trx = con.BeginTransaction(_isolationLevel))
                        using (var cmd = con.CreateCommand())
                        {
                            cmd.CommandText = _dbQuery;
                            cmd.CommandType = _commandType;
                            cmd.Transaction = trx;

                            foreach (var param in _parameters)
                            {
                                var p = cmd.CreateParameter();
                                p.ParameterName = param.Key;
                                p.Value         = param.Value;

                                cmd.Parameters.Add(p);
                            }

                            using (var reader = cmd.ExecuteReader(CommandBehavior.Default))
                            {
                                while (reader.Read())
                                {
                                    var row = new Row();
                                    for (var i = 0; i < reader.FieldCount; i++)
                                    {
                                        row[reader.GetName(i)] = reader[i];
                                    }

                                    if (item[_leftColumn].Equals(row[_rightColumn]))
                                    {
                                        item.Merge(row);
                                        Emit(item);
                                        emitted = true;
                                    }
                                }
                            }
                        }
                    if (!emitted)
                    {
                        Emit(item);
                    }
                }
            }
            SignalEnd();
        }
Example #3
0
        public override void OnExecute(EtlPipelineContext context)
        {
            var logger = context.GetLogger(GetType().FullName);

            try
            {
                using (var con = context.CreateNamedDbConnection(_connectionName))
                {
                    if (con.State != ConnectionState.Open)
                    {
                        con.Open();
                    }

                    using (var trx = con.BeginTransaction(_isolationLevel))
                        using (var cmd = con.CreateCommand())
                        {
                            cmd.CommandText = _commandText;
                            cmd.CommandType = _commandType;
                            cmd.Transaction = trx;

                            foreach (var param in _parameters)
                            {
                                var p = cmd.CreateParameter();
                                p.ParameterName = param.Key;
                                p.Value         = param.Value;

                                cmd.Parameters.Add(p);
                            }

                            using (var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                            {
                                while (reader.Read())
                                {
                                    var row = new Row();
                                    for (var i = 0; i < reader.FieldCount; i++)
                                    {
                                        row[reader.GetName(i)] = reader[i];
                                    }

                                    Emit(row);
                                }
                            }
                        }
                }
            }
            catch (Exception e)
            {
                logger.Error($"Error while executing query: \"{_commandText}\"", e);
                throw;
            }
            finally
            {
                SignalEnd();
            }
        }
        public void Can_register_and_resolve_via_pipeline_context()
        {
            const string cs1 = "Data Source =:memory:; Version = 3; New = True;";

            var context = new EtlPipelineContext();

            context.DbConnections
            .For <SQLiteConnection>(con => con.Register("inmemory", cs1));

            var connection1 = context.CreateNamedDbConnection("inmemory");

            connection1.Should().NotBeNull();
            connection1.ConnectionString.Should().Be(cs1);
            connection1.Should().BeOfType <SQLiteConnection>();
        }