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)); }
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(); }
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>(); }