3838
3939namespace bustub {
4040
41- auto BustubInstance::MakeExecutorContext (Transaction *txn) -> std::unique_ptr<ExecutorContext> {
42- return std::make_unique<ExecutorContext>(txn, catalog_, buffer_pool_manager_, txn_manager_, lock_manager_);
41+ auto BustubInstance::MakeExecutorContext (Transaction *txn, bool is_modify ) -> std::unique_ptr<ExecutorContext> {
42+ return std::make_unique<ExecutorContext>(txn, catalog_, buffer_pool_manager_, txn_manager_, lock_manager_, is_modify );
4343}
4444
4545BustubInstance::BustubInstance (const std::string &db_file_name) {
@@ -70,6 +70,8 @@ BustubInstance::BustubInstance(const std::string &db_file_name) {
7070
7171 txn_manager_ = new TransactionManager (lock_manager_, log_manager_);
7272
73+ lock_manager_->txn_manager_ = txn_manager_;
74+
7375 // Checkpoint related.
7476 checkpoint_manager_ = new CheckpointManager (txn_manager_, log_manager_, buffer_pool_manager_);
7577
@@ -108,6 +110,8 @@ BustubInstance::BustubInstance() {
108110
109111 txn_manager_ = new TransactionManager (lock_manager_, log_manager_);
110112
113+ lock_manager_->txn_manager_ = txn_manager_;
114+
111115 // Checkpoint related.
112116 checkpoint_manager_ = new CheckpointManager (txn_manager_, log_manager_, buffer_pool_manager_);
113117
@@ -226,6 +230,8 @@ auto BustubInstance::ExecuteSqlTxn(const std::string &sql, ResultWriter &writer,
226230 binder.ParseAndSave (sql);
227231 l.unlock ();
228232
233+ bool is_delete = false ;
234+
229235 for (auto *stmt : binder.statement_nodes_ ) {
230236 auto statement = binder.BindStatement (stmt);
231237 switch (statement->type_ ) {
@@ -254,6 +260,8 @@ auto BustubInstance::ExecuteSqlTxn(const std::string &sql, ResultWriter &writer,
254260 HandleExplainStatement (txn, explain_stmt, writer);
255261 continue ;
256262 }
263+ case StatementType::DELETE_STATEMENT:
264+ is_delete = true ;
257265 default :
258266 break ;
259267 }
@@ -271,7 +279,7 @@ auto BustubInstance::ExecuteSqlTxn(const std::string &sql, ResultWriter &writer,
271279 l.unlock ();
272280
273281 // Execute the query.
274- auto exec_ctx = MakeExecutorContext (txn);
282+ auto exec_ctx = MakeExecutorContext (txn, is_delete );
275283 if (check_options != nullptr ) {
276284 exec_ctx->InitCheckOptions (std::move (check_options));
277285 }
@@ -310,7 +318,7 @@ auto BustubInstance::ExecuteSqlTxn(const std::string &sql, ResultWriter &writer,
310318 */
311319void BustubInstance::GenerateTestTable () {
312320 auto txn = txn_manager_->Begin ();
313- auto exec_ctx = MakeExecutorContext (txn);
321+ auto exec_ctx = MakeExecutorContext (txn, false );
314322 TableGenerator gen{exec_ctx.get ()};
315323
316324 std::shared_lock<std::shared_mutex> l (catalog_lock_);
0 commit comments