public void Load()
        {
            var autoIndex = Convert.ToInt16(_process.MasterEntity == null ? 0 : new Fields(_process.MasterEntity.Fields, _process.MasterEntity.CalculatedFields).Count + 1);

            foreach (var f in _calculatedFields)
            {
                var field = new FieldReader(_process, _process.MasterEntity, false).Read(f);

                if (field.Index.Equals(short.MaxValue))
                {
                    field.Index = autoIndex;
                }

                field.Input        = false;
                field.IsCalculated = true;
                field.Index        = field.Index == 0 ? autoIndex : field.Index;
                _process.CalculatedFields.Add(field);

                foreach (var t in f.Transforms)
                {
                    var factory    = new TransformOperationFactory(_process, string.Empty);
                    var parameters = new ProcessTransformParametersReader(_process, new DefaultFactory(_process.Logger)).Read(t);
                    var operation  = factory.Create(field, t, parameters);

                    _process.TransformOperations.Add(operation);
                    foreach (var parameter in parameters)
                    {
                        _process.Parameters[parameter.Key] = parameter.Value;
                    }
                }

                autoIndex++;
            }
        }
        public void Load() {

            var autoIndex = Convert.ToInt16(_process.MasterEntity == null ? 0 : new Fields(_process.MasterEntity.Fields, _process.MasterEntity.CalculatedFields).Count + 1);

            foreach (var f in _calculatedFields) {
                var field = new FieldReader(_process, _process.MasterEntity, false).Read(f);

                if (field.Index.Equals(short.MaxValue)) {
                    field.Index = autoIndex;
                }

                field.Input = false;
                field.IsCalculated = true;
                field.Index = field.Index == 0 ? autoIndex : field.Index;
                _process.CalculatedFields.Add(field);

                foreach (var t in f.Transforms) {

                    var factory = new TransformOperationFactory(_process, string.Empty);
                    var parameters = new ProcessTransformParametersReader(_process, new DefaultFactory(_process.Logger)).Read(t);
                    var operation = factory.Create(field, t, parameters);

                    _process.TransformOperations.Add(operation);
                    foreach (var parameter in parameters) {
                        _process.Parameters[parameter.Key] = parameter.Value;
                    }
                }

                autoIndex++;
            }
        }
        public Entity Read(TflEntity element, short entityIndex) {

            var entity = new Entity() {
                ProcessName = _process.Name,
                Schema = element.Schema,
                PipelineThreading = DetermineThreading(element),
                Name = element.Name,
                Prefix = element.Prefix,
                Group = element.Group,
                Delete = element.Delete,
                PrependProcessNameToOutputName = element.PrependProcessNameToOutputName,
                Sample = element.Sample,
                DetectChanges = element.DetectChanges,
                TrimAll = element.TrimAll,
                NoLock = element.NoLock,
                Unicode = element.Unicode,
                VariableLength = element.VariableLength,
                SqlOverride = element.Query,
                SqlScriptOverride = element.Script,
                SqlKeysOverride = element.QueryKeys,
                Alias = string.IsNullOrEmpty(element.Alias) ? element.Name : element.Alias,
                InputOperation = element.InputOperation,
                Index = entityIndex
            };

            // wire up connections
            if (_process.Connections.Contains(element.Connection)) {
                entity.Input.Add(_process.Connections.GetConnectionByName(element.Connection).NamedConnection());
            } else {
                _process.Logger.EntityWarn(element.Name, "Could not find connection '{0}'.", element.Connection);
            }

            //needs an input connection
            GuardAgainstMissingFields(element, entity, entityIndex);

            //fields
            short autoIndex = 0;

            foreach (TflField f in element.Fields) {
                var fieldType = GetFieldType(f, entityIndex == 0);

                var field = new FieldReader(_process, entity).Read(f, fieldType);
                if (field.Index.Equals(short.MaxValue)) {
                    field.Index = autoIndex;
                }

                entity.Fields.Add(field);

                if (f.PrimaryKey) {
                    entity.PrimaryKey.Add(field);
                }

                autoIndex++;
            }

            foreach (var cf in element.CalculatedFields) {
                var fieldReader = new FieldReader(_process, entity, usePrefix: false);
                var fieldType = GetFieldType(cf, entityIndex == 0);
                var field = fieldReader.Read(cf, fieldType);

                if (field.Index.Equals(short.MaxValue)) {
                    field.Index = autoIndex;
                }

                field.IsCalculated = true;
                field.Input = false;
                entity.CalculatedFields.Add(field);
                if (cf.PrimaryKey) {
                    entity.PrimaryKey.Add(field);
                }
                autoIndex++;
            }

            //depend on fields
            LoadVersion(element, entity);
            LoadFilter(element.Filter, entity, _process.Logger);

            entity.Input.AddRange(PrepareIo(element.Input, entity.Fields));
            entity.Output = PrepareIo(element.Output, entity.Fields);

            return entity;
        }
        public Entity Read(TflEntity element, short entityIndex)
        {
            var entity = new Entity()
            {
                ProcessName       = _process.Name,
                Schema            = element.Schema,
                PipelineThreading = DetermineThreading(element),
                Name   = element.Name,
                Prefix = element.Prefix,
                Group  = element.Group,
                Delete = element.Delete,
                PrependProcessNameToOutputName = element.PrependProcessNameToOutputName,
                Sample            = element.Sample,
                DetectChanges     = element.DetectChanges,
                TrimAll           = element.TrimAll,
                NoLock            = element.NoLock,
                Unicode           = element.Unicode,
                VariableLength    = element.VariableLength,
                SqlOverride       = element.Query,
                SqlScriptOverride = element.Script,
                SqlKeysOverride   = element.QueryKeys,
                Alias             = string.IsNullOrEmpty(element.Alias) ? element.Name : element.Alias,
                InputOperation    = element.InputOperation,
                Index             = entityIndex
            };

            // wire up connections
            if (_process.Connections.Contains(element.Connection))
            {
                entity.Input.Add(_process.Connections.GetConnectionByName(element.Connection).NamedConnection());
            }
            else
            {
                _process.Logger.EntityWarn(element.Name, "Could not find connection '{0}'.", element.Connection);
            }

            //needs an input connection
            GuardAgainstMissingFields(element, entity, entityIndex);

            //fields
            short autoIndex = 0;

            foreach (TflField f in element.Fields)
            {
                var fieldType = GetFieldType(f, entityIndex == 0);

                var field = new FieldReader(_process, entity).Read(f, fieldType);
                if (field.Index.Equals(short.MaxValue))
                {
                    field.Index = autoIndex;
                }

                entity.Fields.Add(field);

                if (f.PrimaryKey)
                {
                    entity.PrimaryKey.Add(field);
                }

                autoIndex++;
            }

            foreach (var cf in element.CalculatedFields)
            {
                var fieldReader = new FieldReader(_process, entity, usePrefix: false);
                var fieldType   = GetFieldType(cf, entityIndex == 0);
                var field       = fieldReader.Read(cf, fieldType);

                if (field.Index.Equals(short.MaxValue))
                {
                    field.Index = autoIndex;
                }

                field.IsCalculated = true;
                field.Input        = false;
                entity.CalculatedFields.Add(field);
                if (cf.PrimaryKey)
                {
                    entity.PrimaryKey.Add(field);
                }
                autoIndex++;
            }

            //depend on fields
            LoadVersion(element, entity);
            LoadFilter(element.Filter, entity, _process.Logger);

            entity.Input.AddRange(PrepareIo(element.Input, entity.Fields));
            entity.Output = PrepareIo(element.Output, entity.Fields);

            return(entity);
        }