public void Execute() { new ObjectNameCheckingVisitor(mappingSource).Visit(sqlQuery); TableDeclarationVisitor.Visit(sqlQuery, clause => { queryEntityRegistry.RegisterTable(clause); return(clause); }); SubqueryVisitor.Visit(sqlQuery, clause => { queryEntityRegistry.RegisterSubquery(clause); return(clause); }); new AddAreaToJoinConditionVisitor().Visit(sqlQuery); new DeduceEntityTypeFromIsReferenceExpressionVisitor(queryEntityTree) .Visit(sqlQuery); var rewrittenColumns = new HashSet <ColumnReferenceExpression>(); new IsReferenceExpressionRewriter(queryEntityTree, nameGenerator, rewrittenColumns) .Visit(sqlQuery); new ColumnReferenceRewriter(queryEntityTree, rewrittenColumns, nameGenerator) .Visit(sqlQuery); new TableDeclarationRewriter(queryEntityTree, enumSqlBuilder, nameGenerator, areas) .RewriteTables(sqlQuery); new ValueLiteralRewriter(enumSqlBuilder).Visit(sqlQuery); new QueryFunctionRewriter().Visit(sqlQuery); }
public void RewriteTables(ISqlElement element) { var rewrittenTables = new Dictionary <IColumnSource, IColumnSource>(); TableDeclarationVisitor.Visit(element, original => { var rewritten = RewriteTableIfNeeded(original); if (rewritten != original) { rewrittenTables.Add(original, rewritten); } return(rewritten); }); new ColumnReferenceVisitor(column => { IColumnSource generatedTable; if (rewrittenTables.TryGetValue(column.Table, out generatedTable)) { column.Table = generatedTable; } return(column); }).Visit(element); }