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);
            }
Beispiel #2
0
        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);
        }