diff --git a/src/context/ExecutionContext.cpp b/src/context/ExecutionContext.cpp
index 04936ec547de23b4b75fe4880b4273055a2b25b8..54df3480f56c4c76170ab945d9608945a00c25dc 100644
--- a/src/context/ExecutionContext.cpp
+++ b/src/context/ExecutionContext.cpp
@@ -64,29 +64,28 @@ const Result& ExecutionContext::getResult(const std::string& name) const {
     if (it != valueMap_.end() && !it->second.empty()) {
         return it->second.back();
     } else {
-        return Result::kEmptyResult;
+        return Result::EmptyResult();
     }
 }
 
-const Result& ExecutionContext::getVersionedResult(const std::string& name,
-                                                   int64_t version) const {
+const Result& ExecutionContext::getVersionedResult(const std::string& name, int64_t version) const {
     auto& result = getHistory(name);
     auto size = result.size();
     if (static_cast<size_t>(std::abs(version)) >= size) {
-        return Result::kEmptyResult;
+        return Result::EmptyResult();
     } else {
-        return result[(size + version - 1) % size ];
+        return result[(size + version - 1) % size];
     }
 }
 
-const std::vector<Result>& ExecutionContext::getHistory(
-    const std::string& name) const {
+const std::vector<Result>& ExecutionContext::getHistory(const std::string& name) const {
     auto it = valueMap_.find(name);
     if (it != valueMap_.end()) {
         return it->second;
     } else {
-        return Result::kEmptyResultList;
+        return Result::EmptyResultList();
     }
 }
+
 }   // namespace graph
 }   // namespace nebula
diff --git a/src/context/Result.cpp b/src/context/Result.cpp
index c40cbc2e08702c94f7346c380f8a05282c7efad0..702a2c9128981bc92de1e9fe15cfc52db892dbf7 100644
--- a/src/context/Result.cpp
+++ b/src/context/Result.cpp
@@ -9,9 +9,32 @@
 namespace nebula {
 namespace graph {
 
-const Result Result::kEmptyResult = ResultBuilder().iter(Iterator::Kind::kDefault).finish();
+const Result& Result::EmptyResult() {
+    static Result kEmptyResult = ResultBuilder().iter(Iterator::Kind::kDefault).finish();
+    return kEmptyResult;
+}
 
-const std::vector<Result> Result::kEmptyResultList;
+const std::vector<Result>& Result::EmptyResultList() {
+    static std::vector<Result> kEmptyResultList;
+    return kEmptyResultList;
+}
+
+ResultBuilder& ResultBuilder::iter(Iterator::Kind kind) {
+    DCHECK(kind == Iterator::Kind::kDefault || core_.value)
+        << "Must set value when creating non-default iterator";
+    switch (kind) {
+        case Iterator::Kind::kDefault:
+            return iter(std::make_unique<DefaultIter>(core_.value));
+        case Iterator::Kind::kSequential:
+            return iter(std::make_unique<SequentialIter>(core_.value));
+        case Iterator::Kind::kGetNeighbors:
+            return iter(std::make_unique<GetNeighborsIter>(core_.value));
+        case Iterator::Kind::kProp:
+            return iter(std::make_unique<PropIter>(core_.value));
+        default:
+            LOG(FATAL) << "Invalid Iterator kind" << static_cast<uint8_t>(kind);
+    }
+}
 
 }   // namespace graph
 }   // namespace nebula
diff --git a/src/context/Result.h b/src/context/Result.h
index 48ee72746b8310433a015ec6b1656e8e8fa092df..ff60738ed9a23469356addb4933a694bf095344d 100644
--- a/src/context/Result.h
+++ b/src/context/Result.h
@@ -21,15 +21,15 @@ class ResultBuilder;
 // An executor will produce a result.
 class Result final {
 public:
-    static const Result kEmptyResult;
-    static const std::vector<Result> kEmptyResultList;
-
     enum class State : uint8_t {
         kUnExecuted,
         kPartialSuccess,
         kSuccess,
     };
 
+    static const Result& EmptyResult();
+    static const std::vector<Result>& EmptyResultList();
+
     std::shared_ptr<Value> valuePtr() const {
         return core_.value;
     }
@@ -98,22 +98,7 @@ public:
         return *this;
     }
 
-    ResultBuilder& iter(Iterator::Kind kind) {
-        DCHECK(kind == Iterator::Kind::kDefault || core_.value)
-            << "Must set value when creating non-default iterator";
-        switch (kind) {
-            case Iterator::Kind::kDefault:
-                return iter(std::make_unique<DefaultIter>(core_.value));
-            case Iterator::Kind::kSequential:
-                return iter(std::make_unique<SequentialIter>(core_.value));
-            case Iterator::Kind::kGetNeighbors:
-                return iter(std::make_unique<GetNeighborsIter>(core_.value));
-            case Iterator::Kind::kProp:
-                return iter(std::make_unique<PropIter>(core_.value));
-            default:
-                LOG(FATAL) << "Invalid Iterator kind" << static_cast<uint8_t>(kind);
-        }
-    }
+    ResultBuilder& iter(Iterator::Kind kind);
 
     ResultBuilder& state(Result::State state) {
         core_.state = state;