Esempio n. 1
0
        private void BuildBody(StringBuilder sql, string bodyWrappedAndEscaped)
        {
            sql.NewLine(Text.Free.ExecSpExecutesql_N)
            .NewLine(Text.Declare).S().Append(Text.Reserved.ReturnValueOuterParam).Append(Text._As_)
            .Append(Text.Free.EnclosedInt).Terminate()
            .NewLine(Text.Declare).S().Append(Text.Reserved.ConcatVar).Append(Text._As_)
            .Append(Text.Free.EnclosedNVarcharMax).Terminate();

            if (!Compilable.GetRoot().IsEmbeddedTransaction)
            {
                sql.NewLine();
            }

            sql
            .Append(bodyWrappedAndEscaped)
            .Append(TerminateBody(bodyWrappedAndEscaped));

            if (!Compilable.GetRoot().IsEmbeddedTransaction)
            {
                sql.NewLine();
            }

            sql
            .NewLine(Text.SingleQuote)
            .Append(Text.Free.CommaNSingleQuote)
            .Append(_paramDeclaration)
            .Append(Text.SingleQuote)
            .NewLine(Text.Comma)
            .Append(_paramAssignment)
            .TerminateSingle()
            .NewLine();
        }
Esempio n. 2
0
        internal static Connectable GetConnectable(Assembly client, Chainer prev, ConnectionData connectionData)
        {
            if (prev is Connectable)
            {
                return((Connectable)prev);
            }

            Connectable connectable;
            Compilable  compilable = null;
            Executable  executable = null;

            if (prev is Compilable)
            {
                compilable = (Compilable)prev;
                executable = new Executable(compilable);
            }
            else if (prev is IExecutable)
            {
                executable = ((Chainer)prev).Executable;
            }
            else if (prev is Connectable)
            {
                connectable = (Connectable)prev;
                connectable.SetTimeout(connectionData.CommandTimeout);
            }
            // root:
            else
            {
                compilable = new Procedure(prev);
                executable = new Executable(compilable);
            }

            connectable = new Connectable(client, executable, connectionData);
            return(connectable);
        }
Esempio n. 3
0
        internal Executable(Compilable compilable)
            : base(null)
        {
            _compilable     = compilable;
            _rootCompilable = compilable.GetRoot();

            Build = (buildContext, buildArgs) =>
            {
                var sql = new StringBuilder();

                // in case of inlining
                if (buildArgs.Executable != null)
                {
                    _inlineCaller = buildArgs.Executable;
                }

                if (buildArgs.TestBody != null)
                {
                    _body = buildArgs.TestBody;
                }
                else
                {
                    _body = compilable.Build(buildContext, new BuildArgs(this));
                }

                string bodyWrapped = _body;

                // for stored procedures
                if (_compilable.CompilableType == Compilable.ObjectType.StoredProc)
                {
                    bodyWrapped = BuildStoredProc();
                }

                BuildParamAppendix(buildArgs);
                string bodyWrappedAndEscaped = Filter.Escape(bodyWrapped);
                BuildTableValuedParams(sql);
                BuildBody(sql, bodyWrappedAndEscaped);

                _sql = sql.ToString();
                return(_sql);
            };
        }
Esempio n. 4
0
        internal PassChainer(Chainer prev, ParameterArgument[] arguments)
            : this(prev)
        {
            Compilable compilable = (Compilable)prev;
            var        root       = GetRoot();

            if (arguments == null)
            {
                arguments = new ParameterArgument[] { Designer.Null };
            }

            // check arguments-params count match
            int argumentsCount      = arguments.Count();
            int explicitParamsCount = root.ExplicitParams.Count;
            if (!root.ParamCountCheck(argumentsCount))
            {
                ThrowArgumentCountMismatch(explicitParamsCount, argumentsCount);
            }

            // check each argument
            int i = 0;
            Array.ForEach(arguments, argument =>
            {
                if (argument != null && argument.Exception != null)
                {
                    if (argument.Exception.Arguments == null && i < root.ExplicitParams.Count)
                    {
                        argument.Exception.Arguments = String.Format("param = {0}", root.ExplicitParams[i].Name);
                    }

                    TryThrow(argument.Exception);
                }
                ++i;
            });

            Executable = new Executable(compilable, arguments);
        }
Esempio n. 5
0
 internal Executable(Compilable compilable, ParameterArgument[] arguments)
     : this(compilable)
 {
     AddArguments(arguments);
     TryThrow(Text.Method.Pass);
 }
Esempio n. 6
0
 // ctor for mapper
 internal BuildContext(Mapper creator)
 {
     _creator = creator;
     Current  = creator; // mapper is THE ONLY chain object in Navigation Querying
 }
Esempio n. 7
0
 // regular ctor
 internal BuildContext(Compilable creator, Designer paramRoot = null)
 {
     _creator   = creator;
     _paramRoot = paramRoot;
 }