예제 #1
0
        internal EndRankingChainer(Chainer prev)
            : base(prev)
        {
            Build = (buildContext, buildArgs) =>
            {
                StringBuilder sql  = new StringBuilder();
                Chainer       node = GetPrev <RankingChainer>();

                while (node != this)
                {
                    var append = node.Build(buildContext, buildArgs);
                    TryThrow(buildContext);
                    if (append != null)
                    {
                        sql.Append(append);
                    }
                    node = node.Next;
                }

                return(Text.GenerateSql(200)
                       .Append(sql.TrimEnd())
                       .Append(Text.RightBracket)
                       .ToString());
            };
        }
예제 #2
0
 internal OrderedChainer(Chainer prev, SortOrder sortOrder)
     : base(prev)
 {
     Build = (buildContext, buildArgs) =>
     {
         return(String.Format("{0} {1}",
                              prev.Build(buildContext, buildArgs),
                              sortOrder.ToUpperCase()));
     };
 }
예제 #3
0
        internal ColumnAsChainer(Chainer prev, string alias)
            : base(prev, alias)
        {
            if (!CheckNull(Arg(() => prev, prev)))
            {
                chainException.Extra = Text.Free.ChainObjectNullExtra;
                return;
            }

            if (chainException != null)
            {
                return;
            }

            _columnName = alias;
            _prevBuild  = (buildContext, buildArgs) =>
            {
                return(prev.Build(buildContext, buildArgs));
            };

            Build = (buildContext, buildArgs) =>
            {
                // do not perform critical alias check on scalars, only on table arguments
                if (!(prev is IScalar))
                {
                    Statement.CheckAlias(this);
                }

                var sql = Text.GenerateSql(20)
                          .Append(prev.Build(buildContext, buildArgs))
                          .Append(Text._As_)
                          .Append(Filter.Delimit(Name))
                          .ToString();

                TryThrow(buildContext);

                return(sql);
            };
        }
예제 #4
0
        private string BuildCase(BuildContext buildContext, BuildArgs buildArgs)
        {
            var     sql  = new StringBuilder();
            Chainer node = GetPrev <CaseChainer>();

            while (node != this)
            {
                object append = null;
                append = node.Build(buildContext, buildArgs);
                if (append != null)
                {
                    sql.Append(append);
                    sql.S();
                }
                node = node.Next;
            }

            return(sql.TrimEnd().ToString());
        }
예제 #5
0
        internal CollateChainer(Chainer prev, string collation)
            : base(prev)
        {
            CheckNullAndThrow(Arg(() => collation, collation));

            Build = (buildContext, buildArgs) =>
            {
                if (prev is IColumnName)
                {
                    _columnName = ((IColumnName)prev).ColumnName;
                }

                return(Text.GenerateSql(50)
                       .Append(prev.Build(buildContext, buildArgs)).S()
                       .Append(Text.Collate).S()
                       .Append(collation)
                       .ToString());
            };
        }