Beispiel #1
0
        public void TransformCopyIntoParameters(Entity entity = null)
        {
            if (RequiresCopyParameters())
            {
                if (!Transforms.Any())
                {
                    Transforms.Add(new Operation {
                        Method = "copy"
                    });
                }
                var first      = Transforms.First();
                var expression = Utility.Split(T, ExpressionSplitter)[0];
                var parameters = Utility.Split(expression.Substring(expression.IndexOf('(') + 1), ',');

                foreach (var p in parameters)
                {
                    var parameter = new Parameter();
                    var modified  = p.EndsWith(")") ? p.Substring(0, p.Length - 1) : p;
                    if (modified.Contains(":"))
                    {
                        //named values
                        var named = modified.Split(':');
                        parameter.Name  = named[0];
                        parameter.Value = named[1];
                    }
                    else if (modified.Contains("."))
                    {
                        // entity, field combinations
                        var dotted = modified.Split('.');
                        parameter.Entity = dotted[0];
                        parameter.Field  = dotted[1];
                    }
                    else
                    {
                        parameter.Field = modified; // just fields
                        if (entity != null)
                        {
                            parameter.Entity = entity.Alias;
                        }
                    }
                    first.Parameters.Add(parameter);
                }
                // hack
                if (first.Parameters.Count == 1 && first.Parameters.First().Field == "*")
                {
                    first.Parameter = "*";
                    first.Parameters.Clear();
                }
            }
        }
        public virtual IEnumerable <IRow> Read()
        {
            Context.Debug(() => $"Running {Transforms.Count} transforms.");
            if (Context.Entity.NeedsUpdate())
            {
                if (Context.Process.Mode != "init")
                {
                    if (Context.Entity.Version != string.Empty)
                    {
                        var version = Context.Entity.GetVersionField();
                        if (version.Type == "byte[]")
                        {
                            var min = Context.Entity.MinVersion == null ? "null" : Utility.BytesToHexViaLookup32((byte[])Context.Entity.MinVersion).TrimStart(new[] { '0' });
                            var max = Context.Entity.MaxVersion == null ? "null" : Utility.BytesToHexViaLookup32((byte[])Context.Entity.MaxVersion).TrimStart(new[] { '0' });
                            Context.Info("Change Detected: Input:{0} > Output:{1}", max, min);
                        }
                        else
                        {
                            Context.Info("Change Detected: Input:{0} > Output:{1}", Context.Entity.MaxVersion ?? "null", Context.Entity.MinVersion ?? "null");
                        }
                    }
                }
                var data = Reader == null?InputProvider.Read() : Reader.Read();

#if NETS10
                // no PLINQ
#else
                if (Context.Entity.Pipeline == "parallel.linq")
                {
                    data = data.AsParallel();
                }
#endif

                if (Transforms.Any())
                {
                    data = Transforms.Aggregate(data, (rows, t) => t.Operate(rows));
                }
                if (Validators.Any())
                {
                    data = Validators.Aggregate(data, (rows, v) => v.Operate(rows));
                }
                return(data);
            }
            Context.Info("Change Detected: No.");
            return(Enumerable.Empty <IRow>());
        }
Beispiel #3
0
        public virtual IEnumerable <IRow> Read()
        {
            Context.Debug(() => $"Running {Transforms.Count} transforms.");
            if (Context.Entity.NeedsUpdate())
            {
                if (Context.Process.Mode != "init")
                {
                    if (Context.Entity.Version != string.Empty)
                    {
                        if (Context.Entity.GetVersionField().Type == "byte[]")
                        {
                            var min = Context.Entity.MinVersion == null ? "null" : "0x" + string.Format("{0:X}", Utility.BytesToHexString((byte[])Context.Entity.MinVersion).TrimStart(new[] { '0' }));
                            var max = Context.Entity.MaxVersion == null ? "null" : "0x" + string.Format("{0:X}", Utility.BytesToHexString((byte[])Context.Entity.MaxVersion).TrimStart(new[] { '0' }));
                            Context.Info("Change Detected: Input: {0} > Output: {1}", max, min);
                        }
                        else
                        {
                            Context.Info("Change Detected: Input: {0} > Output: {1}", Context.Entity.MaxVersion, Context.Entity.MinVersion);
                        }
                    }
                }
                var data = Reader == null?InputProvider.Read() : Reader.Read();

                if (Transforms.Any())
                {
                    data = Transforms.Aggregate(data, (rows, t) => t.Operate(rows));
                }
                if (Validators.Any())
                {
                    data = Validators.Aggregate(data, (rows, v) => v.Operate(rows));
                }
                return(data);
            }
            Context.Info("Change Detected: No.");
            return(Enumerable.Empty <IRow>());
        }
Beispiel #4
0
        public void TransformCopyIntoParameters(Entity entity = null)
        {
            if (RequiresCopyParameters())
            {
                if (!Transforms.Any())
                {
                    Transforms.Add(new Transform {
                        Method = "copy"
                    });
                }
                var first      = Transforms.First();
                var expression = Utility.Split(T, ExpressionSplitter)[0];
                var parameters = Utility.Split(expression.Substring(expression.IndexOf('(') + 1), ',');

                foreach (var p in parameters)
                {
                    var parameter = new Parameter();
                    var modified  = p.TrimEnd(')');
                    if (modified.Contains(":"))
                    {
                        //named values
                        var named = modified.Split(':');
                        parameter.Name  = named[0];
                        parameter.Value = named[1];
                    }
                    else if (modified.Contains("."))
                    {
                        // entity, field combinations
                        var dotted = modified.Split('.');
                        parameter.Entity = dotted[0];
                        parameter.Field  = dotted[1];
                    }
                    else
                    {
                        parameter.Field = modified; // just fields
                        if (entity != null)
                        {
                            parameter.Entity = entity.Alias;
                        }
                    }
                    first.Parameters.Add(parameter);
                }
                // hack
                if (first.Parameters.Count == 1 && first.Parameters.First().Field == "*")
                {
                    first.Parameter = "*";
                    first.Parameters.Clear();
                }
            }

            // e.g. t="copy(x).is(int).between(3,5), both is() and between() should refer to x.
            if (RequiresCompositeValidator())
            {
                var first = Transforms.First();
                foreach (var transform in Transforms.Skip(1))
                {
                    transform.Parameter  = transform.Parameter == string.Empty ? first.Parameter : transform.Parameter;
                    transform.Parameters = transform.Parameters.Count == 0 ? first.Parameters : transform.Parameters;
                }
            }
        }
Beispiel #5
0
 bool RequiresCopyParameters()
 {
     return(T.StartsWith("copy(", StringComparison.Ordinal) && Transforms.Any());
 }