Пример #1
0
        private static bool ParameterizationCriteria(BuildContext buildContext, Parameterization p = Parameterization.None)
        {
            if (buildContext == null)
            {
                return(false);
            }

            if (p == Parameterization.Param)
            {
                return(true);
            }

            var root = buildContext.Root;

            return
                (Admin.IsValueParameterizationOn
                 &&
                 (root.CompilableType.IsProcOrSnipOrMapper() ||
                  (root.CompilableType == Compilable.ObjectType.View &&
                   (buildContext.ParamRoot.CompilableType.IsProcOrSnipOrMapper()))
                 )
                 &&
                 // do not parameterize non-parameterizable arguments (DeclareChainer, SetChainer, RaiserrorChainer)
                 !(buildContext.Current is INonParameterizable));
        }
Пример #2
0
            internal virtual void BuildParameterizations(IDictionary <Type, Parameterization> result, Type type, IList <Exception> errors)
            {
                if (type == typeof(object))
                {
                    return;
                }
                BuildParameterizations(result, type.BaseType, errors);
                SuiteClasses annotation = type.getAnnotation(typeof(SuiteClasses));

                if (annotation != null)
                {
                    foreach (Type test in annotation.value())
                    {
                        if (!result.ContainsKey(test))
                        {
                            try
                            {
                                result[test] = new Parameterization(this, test.GetConstructor(type));
                            }
                            catch (InitializationError failure)
                            {
                                ((IList <Exception>)errors).AddRange(failure.Causes);
                            }
                            catch (NoSuchMethodException e)
                            {
                                errors.Add(e);
                            }
                        }
                    }
                }
            }
Пример #3
0
 public Record(string name, double min, double max, bool computed, Parameterization param)
 {
     ReadableName = name;
     MinimumValue = min;
     MaximumValue = max;
     Computed     = computed;
     Params       = param;
 }
Пример #4
0
        public static Interval GetReasonableInterval(this Parameterization parameterization)
        {
            if (parameterization.Bounds.Start == null)
            {
                return(Interval.Create(-1000, 1000));
            }

            return(Interval.Create(parameterization.Bounds.Start.Value, parameterization.Bounds.End.Value));
        }
Пример #5
0
        internal Value(System.TimeSpan value, Parameterization p = Parameterization.Value)
            : base(value)
        {
            Original  = value;
            _clrType  = typeof(System.TimeSpan);
            _hashCode = GetCrossTypeHashCode(_clrType, value.GetHashCode());

            Build = (buildContext, buildArgs) =>
            {
                return((p != Parameterization.None) ? (value.Parameterize(buildContext, p) ?? Mapping.BuildCast(value)) : Mapping.BuildCast(value));
            };
        }
Пример #6
0
            public Record(string name, bool computed, Parameterization param)
            {
                ReadableName = name;
                Computed     = computed;
                Params       = param;
                Prefab       = Prefabs.NoPrefab;

                MinimumValue = 0.0;
                MaximumValue = 1.0;

                EnumerationValues = new HashSet <string>();
            }
Пример #7
0
        internal Value(object value, Parameterization p, DataType dataType = null)
            : base(value)
        {
            if (value == null)
            {
                SetAsNull();
                return;
            }

            Original = value;
            var clrType = value.GetType();

            if (Mapping.CheckClrCompliance(clrType, out _clrType, out chainException) != Mapping.ClrTypeMatch.ClrMatch)
            {
                TryThrow();
            }

            DebugValue = value;

            if (_clrType == typeof(DBNull) || _clrType == typeof(System.Object))
            {
                SetAsNull();
                return;
            }

            _hashCode = GetCrossTypeHashCode(_clrType, value.GetHashCode());

            Build = (buildContext, buildArgs) =>
            {
                string sql = null;
                if (p != Parameterization.None)
                {
                    sql = value.Parameterize(buildContext, dataType, p);
                }

                if (sql == null)
                {
                    if (dataType != null)
                    {
                        sql = String.Format("{0}({1} AS {2})", Text.Cast, Mapping.Build(value, dataType), dataType.Build());
                    }
                    else
                    {
                        sql = Mapping.BuildUnchecked(value, out chainException);
                    }
                }

                return(sql);
            };
        }
Пример #8
0
        internal Value(System.Int32 value, Parameterization p = Parameterization.Value)
            : base(value)
        {
            Original  = value;
            _clrType  = typeof(System.Int32);
            _hashCode = GetCrossTypeHashCode(_clrType, value.GetHashCode());

            Build = (buildContext, buildArgs) =>
            {
                // literal:
                return((p != Parameterization.None) ?
                       (value.Parameterize(buildContext, p) ?? Mapping.Build(value, Mapping.DefaultInt32Type)) :
                       Mapping.Build(value, Mapping.DefaultInt32Type));
            };
        }
Пример #9
0
        internal Value(System.DateTime value, Parameterization p = Parameterization.Value, DataType dataType = null)
            : base(value)
        {
            Original  = value;
            _clrType  = typeof(System.DateTime);
            _hashCode = GetCrossTypeHashCode(_clrType, value.GetHashCode());
            dataType  = dataType ?? Mapping.DefaultDateTimeType;

            // build
            Build = (buildContext, buildArgs) =>
            {
                return((p != Parameterization.None) ?
                       (value.Parameterize(buildContext, dataType, p) ??
                        Mapping.BuildCast(value, dataType)) : Mapping.BuildCast(value, dataType));
            };
        }
Пример #10
0
        internal Value(System.Byte[] value, Parameterization p = Parameterization.Value)
            : base(value)
        {
            Original = value;
            _clrType = typeof(System.Byte[]);

            // use Binary type for byte[] hash code calculation
            _hashCode = GetCrossTypeHashCode(_clrType, new System.Data.Linq.Binary(value).GetHashCode());

            Build = (buildContext, buildArgs) =>
            {
                // literal:
                return((p != Parameterization.None) ?
                       (value.Parameterize(buildContext, p) ?? Mapping.Build(value, Mapping.DefaultBinaryType)) :
                       Mapping.Build(value, Mapping.DefaultBinaryType));
            };
        }
Пример #11
0
        internal Value(System.String value, Parameterization p = Parameterization.Value, DataType dataType = null)
            : base(value)
        {
            Original = value;
            _clrType = typeof(System.String);

            if (dataType == null)
            {
                dataType = Mapping.DefaultStringType;
            }

            if (value != null)
            {
                _hashCode = GetCrossTypeHashCode(_clrType, value.GetHashCode());
            }

            Build = (buildContext, buildArgs) =>
            {
                string sql = null;
                if (p != Parameterization.None)
                {
                    sql = value.Parameterize(buildContext, dataType, p);
                }

                if (sql == null)
                {
                    // literal:
                    sql = Mapping.Build(value, dataType);

                    // if node contains concatenator than all string values should be escaped twice
                    if (buildContext.Current.IsQuery)
                    {
                        if (buildContext.Current.Query.Master.IsConcatenated)
                        {
                            sql = Filter.Escape(sql);
                        }
                    }
                }

                return(sql);
            };
        }
Пример #12
0
        internal static string Parameterize(this System.DateTime value, BuildContext buildContext, DataType dataType, Parameterization p = Parameterization.Value)
        {
            if (!ParameterizationCriteria(buildContext, p))
            {
                return(null);
            }

            var argument = new ParameterArgument(new Value(value, p, dataType));

            return(Parameterize(argument, buildContext, p));
        }
Пример #13
0
        internal static string Parameterize(this System.Byte[] value, BuildContext buildContext, Parameterization p = Parameterization.Value)
        {
            if (!ParameterizationCriteria(buildContext, p))
            {
                return(null);
            }

            var argument = new ParameterArgument(value);

            return(Parameterize(argument, buildContext, p));
        }
Пример #14
0
        // create the parameter from the inline value argument
        private static string Parameterize(ParameterArgument argument, BuildContext buildContext, Parameterization p = Parameterization.Value)
        {
            QueryTalkException exception;
            var root = buildContext.ConcatRoot;

            // infer param from argument
            var param = Variable.InferParam(root, argument, out exception);

            TryThrow(exception);
            root.TryAddParamOrThrow(param, true);
            argument.BuildArgument(root, param.Name);
            TryThrow(argument.Exception);

            if (p == Parameterization.Value)
            {
                param.SetParameterizedValue(argument);
            }

            return(param.Name);
        }