コード例 #1
0
        // pivot
        internal PivotChainer(Chainer prev,
                              SysFn aggregate,
                              NonSelectColumnArgument rotatingColumn,
                              string[] rotatedColumns)
            : base(prev, true)
        {
            _method = Text.Method.Pivot;

            CheckNullAndThrow(Arg(() => rotatingColumn, rotatingColumn));
            CheckNullOrEmptyAndThrow(Argc(() => rotatedColumns, rotatedColumns));
            Array.ForEach(rotatedColumns, column => { if (column == null)
                                                      {
                                                          Throw(QueryTalkExceptionType.ArgumentNull, "rotatedColumn = null");
                                                      }
                          });

            Build = (buildContext, buildArgs) =>
            {
                // build IN values
                List <string> columns = new List <string>();
                Array.ForEach(rotatedColumns, column =>
                {
                    columns.Add(Filter.Delimit(column));
                });

                var sql = Text.GenerateSql(300)
                          .NewLine(Text.Pivot).S()
                          .Append(Text.LeftBracket)
                          .Append(aggregate.Build(buildContext, buildArgs)).S()
                          .Append(Text.For).S()
                          .Append(rotatingColumn.Build(buildContext, buildArgs)).S()
                          .NewLineIndent(Text.In).S()
                          .Append(Text.LeftBracket)
                          .Append(String.Join(Text.Comma, columns))
                          .Append(Text.RightBracket).Append(Text.RightBracket)
                          .Append(Text._As_).Append(Filter.Delimit(Alias.Name))
                          .ToString();

                TryThrow(buildContext);

                return(sql);
            };
        }
コード例 #2
0
 /// <summary>
 /// Sets the argument's type.
 /// </summary>
 /// <param name="arg">Is an argument.</param>
 protected internal void SetArgType(SysFn arg)
 {
     ArgType = typeof(SysFn);
     SetDebugValue(arg);
 }