protected virtual string CompileTableExpression(AbstractFrom from) { if (from is RawFromClause) { return(WrapIdentifiers((from as RawFromClause).Expression)); } if (from is QueryFromClause) { var fromQuery = (from as QueryFromClause).Query; var alias = string.IsNullOrEmpty(fromQuery.QueryAlias) ? "" : " AS " + WrapValue(fromQuery.QueryAlias); var compiled = CompileSelect(fromQuery); return("(" + compiled + ")" + alias); } if (from is FromClause) { return(WrapTable((from as FromClause).Table)); } throw InvalidClauseException("TableExpression", from); }
public virtual string CompileTableExpression(SqlResult ctx, AbstractFrom from) { if (from is RawFromClause raw) { ctx.Bindings.AddRange(raw.Bindings); return(WrapIdentifiers(raw.Expression)); } if (from is QueryFromClause queryFromClause) { var fromQuery = queryFromClause.Query; var alias = string.IsNullOrEmpty(fromQuery.QueryAlias) ? "" : $" {TableAsKeyword}" + WrapValue(fromQuery.QueryAlias); var subCtx = CompileSelectQuery(fromQuery); ctx.Bindings.AddRange(subCtx.Bindings); return("(" + subCtx.RawSql + ")" + alias); } if (from is FromClause fromClause) { return(Wrap(fromClause.Table)); } throw InvalidClauseException("TableExpression", from); }
public virtual string CompileTableExpression(SqlResult context, AbstractFrom from) { if (from is RawFromClause raw) { context.Bindings.AddRange(raw.Bindings); return(wrapper.WrapIdentifiers(raw.Expression)); } if (from is QueryFromClause queryFromClause) { Query fromQuery = queryFromClause.Query; string alias = string.IsNullOrEmpty(fromQuery.QueryAlias) ? "" : $" {wrapper.TableAsKeyword}" + wrapper.WrapValue(fromQuery.QueryAlias); SqlResult subContext = CompileSelectQuery(fromQuery); context.Bindings.AddRange(subContext.Bindings); return("(" + subContext.RawSql + ")" + alias); } if (from is FromClause fromClause) { return(wrapper.Wrap(fromClause.Table)); } throw InvalidClauseException("TableExpression", from); }
private string MakeTable(SqlResult context) { AbstractFrom fromClause = context.Query.GetOneComponent <AbstractFrom>("from", EngineCode); if (fromClause is null) { throw new InvalidOperationException("Invalid table expression"); } TableProcessor tableProcessor = new TableProcessor(context, wrapper); fromClause.Accept(tableProcessor); string table = tableProcessor.GetTableExpression(); /* * if (fromClause is FromClause fromClauseCast) * { * table = Wrap(fromClauseCast.Table); * } * else if (fromClause is RawFromClause rawFromClause) * { * table = WrapIdentifiers(rawFromClause.Expression); * context.Bindings.AddRange(rawFromClause.Bindings); * }*/ if (table is null) { throw new InvalidOperationException("Invalid table expression"); } return(table); }
public virtual SqlResult CompileCte(AbstractFrom cte) { var ctx = new SqlResult(); if (null == cte) { return(ctx); } if (cte is RawFromClause raw) { ctx.Bindings.AddRange(raw.Bindings); ctx.RawSql = $"{WrapValue(raw.Alias)} AS ({WrapIdentifiers(raw.Expression)})"; } else if (cte is QueryFromClause queryFromClause) { var subCtx = CompileSelectQuery(queryFromClause.Query); ctx.Bindings.AddRange(subCtx.Bindings); ctx.RawSql = $"{WrapValue(queryFromClause.Alias)} AS ({subCtx.RawSql})"; } else if (cte is AdHocTableFromClause adHoc) { var subCtx = CompileAdHocQuery(adHoc); ctx.Bindings.AddRange(subCtx.Bindings); ctx.RawSql = $"{WrapValue(adHoc.Alias)} AS ({subCtx.RawSql})"; } return(ctx); }
public virtual string CompileTableExpression(AbstractFrom from) { if (from is RawFromClause raw) { bindings.AddRange(raw.Bindings); return(WrapIdentifiers(raw.Expression)); } if (from is QueryFromClause queryFromClause) { var fromQuery = queryFromClause.Query; var alias = string.IsNullOrEmpty(fromQuery.QueryAlias) ? "" : " AS " + WrapValue(fromQuery.QueryAlias); var compiled = CompileSelect(fromQuery); return("(" + compiled + ")" + alias); } if (from is FromClause fromClause) { return(Wrap(fromClause.Table)); } throw InvalidClauseException("TableExpression", from); }
public virtual string CompileFrom(SqlResult context) { if (!context.Query.HasComponent("from", EngineCode)) { throw new InvalidOperationException("No table is set"); } AbstractFrom from = context.Query.GetOneComponent <AbstractFrom>("from", EngineCode); return("FROM " + CompileTableExpression(context, from)); }
public virtual string CompileJoin(SqlResult context, Join join, bool isNested = false) { AbstractFrom from = join.GetOneComponent <AbstractFrom>("from", EngineCode); List <AbstractCondition> conditions = join.GetComponents <AbstractCondition>("where", EngineCode); string joinTable = CompileTableExpression(context, from); string constraints = CompileConditions(context, conditions); string onClause = conditions.Any() ? $" ON {constraints}" : ""; return($"{join.Type} {joinTable}{onClause}"); }
public virtual SqlResult CompileCte(AbstractFrom context) { SqlResult sqlContext = new SqlResult(); if (null == context) { return(sqlContext); } if (context is RawFromClause raw) { sqlContext.Bindings.AddRange(raw.Bindings); sqlContext.RawSql = $"{wrapper.WrapValue(raw.Alias)} AS ({wrapper.WrapIdentifiers(raw.Expression)})"; } else if (context is QueryFromClause queryFromClause) { SqlResult subSqlContext = CompileSelectQuery(queryFromClause.Query); sqlContext.Bindings.AddRange(subSqlContext.Bindings); sqlContext.RawSql = $"{wrapper.WrapValue(queryFromClause.Alias)} AS ({subSqlContext.RawSql})"; } return(sqlContext); }