public ITableInfo VisitSubStatementTableInfo(ResolvedSubStatementTableInfo tableInfo) { ArgumentUtility.CheckNotNull("tableInfo", tableInfo); var newSqlStatement = _stage.ResolveSqlStatement(tableInfo.SqlStatement, _context); if (newSqlStatement.Equals(tableInfo.SqlStatement)) { return(tableInfo); } else { return(new ResolvedSubStatementTableInfo(tableInfo.TableAlias, newSqlStatement)); } }
/// <summary> /// Transforms and resolves <see cref="QueryModel"/> to build a <see cref="SqlStatement"/> which represents an AST to generate query text. /// </summary> /// <param name="queryModel">The <see cref="QueryModel"/> which should be transformed.</param> /// <returns>the generated <see cref="SqlStatement"/></returns> protected virtual SqlStatement TransformAndResolveQueryModel(QueryModel queryModel) { var sqlStatement = _preparationStage.PrepareSqlStatement(queryModel, null); var mappingResolutionContext = new MappingResolutionContext(); return(_resolutionStage.ResolveSqlStatement(sqlStatement, mappingResolutionContext)); }
protected virtual SqlStatement ResolveSqlStatement(SqlStatement sqlStatement) { ArgumentUtility.CheckNotNull("sqlStatement", sqlStatement); foreach (var sqlTable in sqlStatement.SqlTables) { sqlTable.Accept(this); } var sqlStatementBuilder = new SqlStatementBuilder(sqlStatement); var previousSelectProjection = sqlStatementBuilder.SelectProjection; sqlStatementBuilder.SelectProjection = ResolveSelectProjection(sqlStatementBuilder.SelectProjection, sqlStatementBuilder); sqlStatementBuilder.RecalculateDataInfo(previousSelectProjection); if (sqlStatementBuilder.GroupByExpression != null) { sqlStatementBuilder.GroupByExpression = ResolveGroupByExpression(sqlStatementBuilder.GroupByExpression); } if (sqlStatementBuilder.WhereCondition != null) { sqlStatementBuilder.WhereCondition = ResolveWhereCondition(sqlStatementBuilder.WhereCondition); } if (sqlStatementBuilder.TopExpression != null) { sqlStatementBuilder.TopExpression = ResolveTopExpression(sqlStatementBuilder.TopExpression); } if (sqlStatementBuilder.Orderings.Count > 0) { for (int i = 0; i < sqlStatementBuilder.Orderings.Count; ++i) { var resolvedOrderingExpression = _stage.ResolveOrderingExpression(sqlStatementBuilder.Orderings[i].Expression, _context); if (resolvedOrderingExpression != sqlStatementBuilder.Orderings[i].Expression) { sqlStatementBuilder.Orderings[i] = new Ordering(resolvedOrderingExpression, sqlStatementBuilder.Orderings[i].OrderingDirection); } } } for (int i = 0; i < sqlStatement.SetOperationCombinedStatements.Count; i++) { var combinedStatement = sqlStatement.SetOperationCombinedStatements[i]; var resolvedSqlStatement = _stage.ResolveSqlStatement(combinedStatement.SqlStatement, _context); if (!Equals(resolvedSqlStatement, combinedStatement.SqlStatement)) { sqlStatementBuilder.SetOperationCombinedStatements[i] = new SetOperationCombinedStatement( resolvedSqlStatement, combinedStatement.SetOperation); } } return(sqlStatementBuilder.GetSqlStatement()); }
public virtual Expression VisitSqlSubStatement(SqlSubStatementExpression expression) { ArgumentUtility.CheckNotNull("expression", expression); var resolvedSqlStatement = _stage.ResolveSqlStatement(expression.SqlStatement, _context); var resolvedExpression = Equals(resolvedSqlStatement, expression.SqlStatement) ? expression : new SqlSubStatementExpression(resolvedSqlStatement); return(_groupAggregateSimplifier.SimplifyIfPossible(resolvedExpression, expression.SqlStatement.SelectProjection)); }