diff --git a/src/executor/Executor.cpp b/src/executor/Executor.cpp
index f3005c6d29a1d0691b92a0c164f21c4c546181e3..7609d64b9250e309bd42d59c15712e62ae695f9f 100644
--- a/src/executor/Executor.cpp
+++ b/src/executor/Executor.cpp
@@ -164,11 +164,11 @@ std::unique_ptr<Executor> Executor::makeExecutor(Sentence *sentence) {
             executor = std::make_unique<LimitExecutor>(sentence, ectx());
             break;
         case Sentence::Kind::kUnknown:
-            LOG(FATAL) << "Sentence kind unknown";
-            break;
+            LOG(ERROR) << "Sentence kind unknown";
+            return nullptr;
         default:
-            LOG(FATAL) << "Sentence kind illegal: " << kind;
-            break;
+            LOG(ERROR) << "Sentence kind illegal: " << kind;
+            return nullptr;
     }
     return executor;
 }
diff --git a/src/executor/SequentialExecutor.cpp b/src/executor/SequentialExecutor.cpp
index 45a232fe99f7e4472a1591a4c05b1ef920bb8691..01b28ec0bc60c0cb06a1ff854631780c96fc6315 100644
--- a/src/executor/SequentialExecutor.cpp
+++ b/src/executor/SequentialExecutor.cpp
@@ -23,7 +23,9 @@ Status SequentialExecutor::prepare() {
     for (auto i = 0U; i < sentences_->sentences_.size(); i++) {
         auto *sentence = sentences_->sentences_[i].get();
         auto executor = makeExecutor(sentence);
-        DCHECK(executor != nullptr);
+        if (executor == nullptr) {
+            return Status::Error("The statement has not been implemented");
+        }
         auto status = executor->prepare();
         if (!status.ok()) {
             FLOG_ERROR("Prepare executor `%s' failed: %s",