From 98350274ade414604de9ad58378a306536307087 Mon Sep 17 00:00:00 2001
From: Marin Tomic <marin.tomic@memgraph.io>
Date: Fri, 20 Jul 2018 12:31:22 +0200
Subject: [PATCH] Fix repl/single_query

Reviewers: mferencevic, teon.banek

Reviewed By: teon.banek

Subscribers: pullbot

Differential Revision: https://phabricator.memgraph.io/D1503
---
 src/communication/result_stream_faker.hpp | 30 +++--------------------
 src/query/repl.cpp                        |  9 ++++---
 tests/manual/single_query.cpp             |  9 ++++---
 3 files changed, 15 insertions(+), 33 deletions(-)

diff --git a/src/communication/result_stream_faker.hpp b/src/communication/result_stream_faker.hpp
index f52d8f3bf..831bcc0db 100644
--- a/src/communication/result_stream_faker.hpp
+++ b/src/communication/result_stream_faker.hpp
@@ -24,36 +24,21 @@ class ResultStreamFaker {
   ResultStreamFaker(ResultStreamFaker &&) = default;
   ResultStreamFaker &operator=(ResultStreamFaker &&) = default;
 
-  void Header(const std::vector<std::string> &fields) {
-    DCHECK(current_state_ == State::Start)
-        << "Headers can only be written in the beginning";
-    header_ = fields;
-    current_state_ = State::WritingResults;
-  }
+  void Header(const std::vector<std::string> &fields) { header_ = fields; }
 
   void Result(const std::vector<TResultValue> &values) {
-    DCHECK(current_state_ == State::WritingResults)
-        << "Can't accept results before header nor after summary";
     results_.push_back(values);
   }
 
   void Summary(const std::map<std::string, TResultValue> &summary) {
-    DCHECK(current_state_ != State::Done) << "Can only send a summary once";
     summary_ = summary;
-    current_state_ = State::Done;
   }
 
-  const auto &GetHeader() const {
-    DCHECK(current_state_ != State::Start) << "Header not written";
-    return header_;
-  }
+  const auto &GetHeader() const { return header_; }
 
   const auto &GetResults() const { return results_; }
 
-  const auto &GetSummary() const {
-    DCHECK(current_state_ == State::Done) << "Summary not written";
-    return summary_;
-  }
+  const auto &GetSummary() const { return summary_; }
 
   friend std::ostream &operator<<(std::ostream &os,
                                   const ResultStreamFaker &results) {
@@ -123,15 +108,6 @@ class ResultStreamFaker {
   }
 
  private:
-  /**
-   * Possible states of the Mocker. Used for checking if calls to
-   * the Mocker as in acceptable order.
-   */
-  enum class State { Start, WritingResults, Done };
-
-  // the current state
-  State current_state_ = State::Start;
-
   // the data that the record stream can accept
   std::vector<std::string> header_;
   std::vector<std::vector<TResultValue>> results_;
diff --git a/src/query/repl.cpp b/src/query/repl.cpp
index 96cf47a87..c43f115e0 100644
--- a/src/query/repl.cpp
+++ b/src/query/repl.cpp
@@ -64,9 +64,12 @@ void query::Repl(database::GraphDb &db) {
     // regular cypher queries
     try {
       database::GraphDbAccessor dba(db);
-      ResultStreamFaker<query::TypedValue> results;
-      interpeter(command, dba, {}, false).PullAll(results);
-      std::cout << results;
+      ResultStreamFaker<query::TypedValue> stream;
+      auto results = interpeter(command, dba, {}, false);
+      stream.Header(results.header());
+      results.PullAll(stream);
+      stream.Summary(results.summary());
+      std::cout << stream;
       dba.Commit();
     } catch (const query::SyntaxException &e) {
       std::cout << "SYNTAX EXCEPTION: " << e.what() << std::endl;
diff --git a/tests/manual/single_query.cpp b/tests/manual/single_query.cpp
index 7ef65fa9c..48d186514 100644
--- a/tests/manual/single_query.cpp
+++ b/tests/manual/single_query.cpp
@@ -13,8 +13,11 @@ int main(int argc, char *argv[]) {
   }
   database::SingleNode db;
   database::GraphDbAccessor dba(db);
-  ResultStreamFaker<query::TypedValue> results;
-  query::Interpreter{db}(argv[1], dba, {}, false).PullAll(results);
-  std::cout << results;
+  ResultStreamFaker<query::TypedValue> stream;
+  auto results = query::Interpreter{db}(argv[1], dba, {}, false);
+  stream.Header(results.header());
+  results.PullAll(stream);
+  stream.Summary(results.summary());
+  std::cout << stream;
   return 0;
 }