@@ -60,7 +60,8 @@ class PrepareForExternalDatabaseVisitor : public InDepthQueryTreeVisitor<Prepare
6060
6161ASTPtr getASTForExternalDatabaseFromQueryTree (ContextPtr context, const QueryTreeNodePtr & query_tree, const QueryTreeNodePtr & table_expression)
6262{
63- auto new_tree = query_tree->clone ();
63+ auto replacement_table_expression = table_expression->clone ();
64+ auto new_tree = query_tree->cloneAndReplace (table_expression, replacement_table_expression);
6465
6566 PrepareForExternalDatabaseVisitor visitor;
6667 visitor.visit (new_tree);
@@ -71,9 +72,9 @@ ASTPtr getASTForExternalDatabaseFromQueryTree(ContextPtr context, const QueryTre
7172 if (const auto * join_node = join_tree->as <JoinNode>())
7273 {
7374 if (join_node->getKind () == JoinKind::Left)
74- allow_where = join_node->getLeftTableExpression ()->isEqual (*table_expression );
75+ allow_where = join_node->getLeftTableExpression ()->isEqual (*replacement_table_expression );
7576 else if (join_node->getKind () == JoinKind::Right)
76- allow_where = join_node->getRightTableExpression ()->isEqual (*table_expression );
77+ allow_where = join_node->getRightTableExpression ()->isEqual (*replacement_table_expression );
7778 else
7879 allow_where = (join_node->getKind () == JoinKind::Inner);
7980 }
@@ -83,9 +84,9 @@ ASTPtr getASTForExternalDatabaseFromQueryTree(ContextPtr context, const QueryTre
8384 if (allow_where)
8485 {
8586 if (query_node->hasPrewhere ())
86- removeExpressionsThatDoNotDependOnTableIdentifiers (query_node->getPrewhere (), table_expression , context);
87+ removeExpressionsThatDoNotDependOnTableIdentifiers (query_node->getPrewhere (), replacement_table_expression , context);
8788 if (query_node->hasWhere ())
88- removeExpressionsThatDoNotDependOnTableIdentifiers (query_node->getWhere (), table_expression , context);
89+ removeExpressionsThatDoNotDependOnTableIdentifiers (query_node->getWhere (), replacement_table_expression , context);
8990 }
9091
9192 auto query_node_ast = query_node->toAST ({ .add_cast_for_constants = false , .fully_qualified_identifiers = false });
0 commit comments