private void Initialize(NonSelectColumnArgument column, DataType dataTypeDef) { IsNullable = null; CheckNullAndThrow(Arg(() => column, column)); TryThrow(dataTypeDef.Exception); Prev.GetPrev <BeginTableChainer>().SetHasColumns(); Build = (buildContext, buildArgs) => { var sql = Text.GenerateSql(300); sql.AppendLine(); sql.Append(Text.TwoSpaces); if (!(Prev is BeginTableChainer && !((BeginTableChainer)Prev).IsDesignedByType)) { sql.Append(Text.Comma); } sql.Append(column.Build(buildContext, buildArgs)).S() .Append(dataTypeDef.Build()); TryThrow(column.Exception); if (Identity != null) { sql.S().Append(Text.Identity) .EncloseLeft() .Append(Identity.Seed) .AppendComma() .Append(Identity.Increment) .EncloseRight(); } if (IsNullable == true) { sql.S().Append(Text.Null); } else if (IsNullable == false) { sql.S().Append(Text.NotNull); } if (Check != null) { sql.S().Append(Text.Check) .EncloseLeft().Append(Check.Build(buildContext, buildArgs)).EncloseRight(); TryThrow(buildContext); } if (Default != null) { sql.S().Append(Text.Default) .EncloseLeft().Append(Default.Build(buildContext, buildArgs)).EncloseRight(); TryThrow(buildContext); } return(sql.ToString()); }; }
internal BeginTableColumnChainer(Chainer prev, NonSelectColumnArgument column, Type type) : base(prev) { Type clrType; var typeMatch = Mapping.CheckClrCompliance(type, out clrType, out chainException); if (typeMatch != Mapping.ClrTypeMatch.ClrMatch) { TryThrow(); } var dataTypeDef = Mapping.ClrMapping[clrType].DefaultDataType; Initialize(column, dataTypeDef); }
// unpivot internal PivotChainer(Chainer prev, NonSelectColumnArgument valueColumn, NonSelectColumnArgument rotatingColumn, string[] rotatedColumns) : base(prev, true) { _method = Text.Method.Unpivot; CheckNullAndThrow(Arg(() => valueColumn, valueColumn)); 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.Unpivot).S() .Append(Text.LeftBracket) .Append(valueColumn.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); }; }
internal BeginTableColumnChainer(Chainer prev, NonSelectColumnArgument column, DataType dataTypeDef) : base(prev) { Initialize(column, dataTypeDef); }