@@ -312,9 +312,13 @@ std::shared_ptr<Statement> TrafficCop::PrepareStatement(
312312 // TODO(Tianyi) Move Statement Planing into Statement's method
313313 // to increase coherence
314314 try {
315+ // Run binder
316+ auto bind_node_visitor = binder::BindNodeVisitor (
317+ tcop_txn_state_.top ().first , default_database_name_);
318+ bind_node_visitor.BindNameToNode (
319+ statement->GetStmtParseTreeList ()->GetStatement (0 ));
315320 auto plan = optimizer_->BuildPelotonPlanTree (
316- statement->GetStmtParseTreeList (), default_database_name_,
317- tcop_txn_state_.top ().first );
321+ statement->GetStmtParseTreeList (), tcop_txn_state_.top ().first );
318322 statement->SetPlanTree (plan);
319323 // Get the tables that our plan references so that we know how to
320324 // invalidate it at a later point when the catalog changes
@@ -362,8 +366,8 @@ void TrafficCop::ProcessInvalidStatement() {
362366}
363367
364368bool TrafficCop::BindParamsForCachePlan (
365- const std::vector<std::unique_ptr<expression::AbstractExpression>> &
366- parameters,
369+ const std::vector<std::unique_ptr<expression::AbstractExpression>>
370+ & parameters,
367371 const size_t thread_id UNUSED_ATTRIBUTE) {
368372 if (tcop_txn_state_.empty ()) {
369373 single_statement_txn_ = true ;
@@ -377,8 +381,8 @@ bool TrafficCop::BindParamsForCachePlan(
377381 tcop_txn_state_.emplace (txn, ResultType::SUCCESS);
378382 }
379383 // Run binder
380- auto bind_node_visitor = std::make_shared< binder::BindNodeVisitor>(
381- tcop_txn_state_. top (). first , default_database_name_);
384+ auto bind_node_visitor = binder::BindNodeVisitor (tcop_txn_state_. top (). first ,
385+ default_database_name_);
382386
383387 std::vector<type::Value> param_values;
384388 for (const std::unique_ptr<expression::AbstractExpression> ¶m :
@@ -387,7 +391,7 @@ bool TrafficCop::BindParamsForCachePlan(
387391 error_message_ = " Invalid Expression Type" ;
388392 return false ;
389393 }
390- param->Accept (bind_node_visitor. get () );
394+ param->Accept (& bind_node_visitor);
391395 // TODO(Yuchen): need better check for nullptr argument
392396 param_values.push_back (param->Evaluate (nullptr , nullptr , nullptr ));
393397 }
@@ -580,9 +584,12 @@ ResultType TrafficCop::ExecuteStatement(
580584 if (statement->GetNeedsReplan ()) {
581585 // TODO(Tianyi) Move Statement Replan into Statement's method
582586 // to increase coherence
587+ auto bind_node_visitor = binder::BindNodeVisitor (
588+ tcop_txn_state_.top ().first , default_database_name_);
589+ bind_node_visitor.BindNameToNode (
590+ statement->GetStmtParseTreeList ()->GetStatement (0 ));
583591 auto plan = optimizer_->BuildPelotonPlanTree (
584- statement->GetStmtParseTreeList (), default_database_name_,
585- tcop_txn_state_.top ().first );
592+ statement->GetStmtParseTreeList (), tcop_txn_state_.top ().first );
586593 statement->SetPlanTree (plan);
587594 statement->SetNeedsReplan (true );
588595 }
0 commit comments