// 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); }; }
/// <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); }