/// <summary> /// SQL文を生成する /// </summary> /// <param name="context">生成先のコンテキスト</param> public void ToElementCode(ElementCode context) { var delayedCode = new DelayedCodeGenerator((wb) => { var ec = new ElementCode(); ec.BeginParenthesize(); ec.Add(SqlKeyword.Values); var list = this.List; for (int i = 0, n = list.Count; i < n; i++) { if (i != 0) { ec.AddComma(); } ec.BeginParenthesize(); ec.AddValues <TColumns>(list[i]); ec.EndParenthesize(); } ec.EndParenthesize(); ec.Add(this); ec.BeginParenthesize(); ec.AddColumns(this.ColumnMap, column => ec.Concat(column.Name)); ec.EndParenthesize(); ec.Build(wb); }); context.Add(delayedCode); context.RegisterBuildHandler(this, (item, wb) => { // delayedCode 内でエイリアス名付与するので、既存の処理をオーバーライドし何もしないようにする }); }
/// <summary> /// SQL文を生成する /// </summary> /// <param name="context">生成先のコンテキスト</param> public void ToElementCode(ElementCode context) { int i = 0; context.Add(SqlKeyword.Select); context.AddColumns(this.ColumnMap, column => { context.Add(column.Source); context.Add(SqlKeyword.As); context.Concat("c" + (i++)); }); }
public void ToElementCode(ElementCode context) { // SELECT 部分作成 int i = 0; context.Add(SqlKeyword.Select); context.AddColumns(this.ColumnMap, column => { context.Add(column.Source); context.Add(SqlKeyword.As); context.Concat("c" + (i++)); }); // WHERE 部分作成 if (this.WhereNode != null) { this.WhereNode.ToElementCode(context); } }
/// <summary> /// SQL文を生成する /// </summary> /// <param name="context">生成先のコンテキスト</param> public void ToElementCode(ElementCode context) { if (this.FromNode == null) { throw new ApplicationException(); } // SELECT 部作成 int i = 0; context.Add(SqlKeyword.Select); context.AddColumns(this.ColumnMap, column => { context.Add(column.Source); context.Add(SqlKeyword.As); context.Concat("c" + (i++)); }); // FROM 部作成 this.FromNode.ToElementCode(context); }
/// <summary> /// SQL文を生成する /// </summary> /// <param name="context">生成先のコンテキスト</param> public void ToElementCode(ElementCode context) { context.Add(SqlKeyword.GroupBy); context.AddColumns(this.Columns); }