예제 #1
0
        public override void OnExecute(EtlPipelineContext context)
        {
            using (var input1Enumerator = Input.GetEnumerator())
                using (var input2Enumerator = Input2.GetEnumerator())
                {
                    var input1HasItems = input1Enumerator.MoveNext();
                    var input2HasItems = input2Enumerator.MoveNext();

                    while (input1HasItems && input2HasItems)
                    {
                        Emit(input1Enumerator.Current);
                        input1HasItems = input1Enumerator.MoveNext();

                        Emit(input2Enumerator.Current);
                        input2HasItems = input2Enumerator.MoveNext();
                    }

                    while (input1HasItems)
                    {
                        Emit(input1Enumerator.Current);
                        input1HasItems = input1Enumerator.MoveNext();
                    }

                    while (input2HasItems)
                    {
                        Emit(input2Enumerator.Current);
                        input2HasItems = input2Enumerator.MoveNext();
                    }

                    TypedEmitter.SignalEnd();
                }
        }
예제 #2
0
        public override void OnExecute(EtlPipelineContext context)
        {
            foreach (var item in Input)
            {
                if (_predicate(item))
                {
                    Emit(item);
                }
                else
                {
                    context.ObjectPool.Return(item);
                }
            }

            TypedEmitter.SignalEnd();
        }
예제 #3
0
        public override void OnExecute(EtlPipelineContext context)
        {
            foreach (var item in Input)
            {
                try
                {
                    Emit(_transform(_stateDictionary, item));
                }
                catch (Exception e)
                {
                    RaiseError(e, item);
                }
            }

            TypedEmitter.SignalEnd();
        }
예제 #4
0
        public override void OnExecute(EtlPipelineContext context)
        {
            using (var con = new Npgsql.NpgsqlConnection(_connectionString))
            {
                con.Open();

                using (var trx = con.BeginTransaction(_isolationLevel))
                    using (var cmd = con.CreateCommand())
                    {
                        cmd.CommandText = _commandText;
                        cmd.CommandType = CommandType.Text;
                        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))
                        {
                            if (!reader.HasRows)
                            {
                                return;
                            }

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

                                Emit(row);
                            }
                        }
                    }
            }

            TypedEmitter.SignalEnd();
        }
예제 #5
0
        public override void OnExecute(EtlPipelineContext context)
        {
            foreach (var item in Input)
            {
                var newItem = context.ObjectPool.Borrow <TOut>();
                try
                {
                    Emit(_mapFn(item, newItem));
                    context.ObjectPool.Return(item);
                }
                catch (Exception ex)
                {
                    RaiseError(ex, item);
                    context.ObjectPool.Return(newItem);
                }
            }

            TypedEmitter.SignalEnd();
        }
예제 #6
0
        public override void OnExecute(EtlPipelineContext context)
        {
            foreach (var item in Input)
            {
                var newItem = context.ObjectPool.Borrow <T>();
                try
                {
                    item.CopyTo(newItem);
                    var matchedPredicate = false;

                    foreach (var predicate in _classFns)
                    {
                        if (!predicate.Value(item))
                        {
                            continue;
                        }

                        SetValue(newItem, predicate.Key);
                        matchedPredicate = true;
                        break;
                    }

                    if (!matchedPredicate)
                    {
                        SetValue(newItem, _defaultClass);
                    }

                    Emit(newItem);
                    context.ObjectPool.Return(item);
                }
                catch (Exception e)
                {
                    context.ObjectPool.Return(newItem);
                    RaiseError(e, item);
                }
            }

            TypedEmitter.SignalEnd();
        }