Commit abdbd092 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

queryservice working

parent 18d75a13
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -379,6 +379,9 @@ ASTNode* Parser::axisStatement() {
  consumeToken();

  switch (cur_token_->getType()) {
    case Token::T_TOP:
    case Token::T_RIGHT:
    case Token::T_BOTTOM:
    case Token::T_LEFT:
      axis->setToken(consumeToken());
      break;
@@ -395,12 +398,7 @@ ASTNode* Parser::axisStatement() {
    return nullptr;
  }

/*
  if (consumeIf(Token::T_WITH)) {
    draw->appendChild(selectStatement());
  } else {
  }
*/
  consumeIf(Token::T_WITH);

  consumeIf(Token::T_SEMICOLON);
  return axis;
+9 −2
Original line number Diff line number Diff line
@@ -21,9 +21,16 @@
namespace fnordmetric {
namespace query {

Query::Query(const char* query_string, query::TableRepository* repo) {
Query::Query(
    const char* query_string,
    query::TableRepository* repo) :
    Query(query_string, strlen(query_string), repo) {}

Query::Query(
    const char* query_string,
    size_t query_string_len,
    TableRepository* repo) {
  query::Parser parser;
  size_t query_string_len = strlen(query_string);

  if (query_string_len == 0) {
    RAISE(Parser::ParseError, "empty query");
+7 −0
Original line number Diff line number Diff line
@@ -22,7 +22,14 @@ class ResultList;

class Query {
public:

  explicit Query(const char* query_string, TableRepository* repo);

  explicit Query(
      const char* query_string,
      size_t query_string_len,
      TableRepository* repo);

  Query(const Query& copy) = delete;
  Query& operator=(const Query& copy) = delete;
  Query(Query&& move);
+4 −2
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#include <fnordmetric/query/queryservice.h>
#include <fnordmetric/query/resultlist.h>
#include <fnordmetric/query/tablerepository.h>
#include <fnordmetric/util/inputstream.h>
#include <fnordmetric/ui/svgtarget.h>

namespace fnordmetric {
@@ -22,10 +23,11 @@ void QueryService::executeQuery(
    util::InputStream* input_stream,
    kFormat output_format,
    util::OutputStream* output_stream) const {
  TableRepository repo;
  std::string query_string;
  input_stream->readUntilEOF(&query_string);

  Query query(query_string.c_str(), &repo);
  TableRepository repo;
  Query query(query_string.c_str(), query_string.size(), &repo);
  query.execute();

  switch (output_format) {
+15 −2
Original line number Diff line number Diff line
@@ -13,6 +13,18 @@
namespace fnordmetric {
namespace util {

// FIXPAUL: optimize?
size_t InputStream::readUntilEOF(std::string* target) {
  char byte;
  size_t length;

  for (length = 0; readNextByte(&byte); ++length) {
    *target += byte;
  }

  return length;
}

std::unique_ptr<FileInputStream> FileInputStream::openFile(
    const std::string& file_path) {
  auto fp = file_path.c_str();
@@ -76,11 +88,12 @@ std::unique_ptr<StringInputStream> StringInputStream::fromString(
StringInputStream::StringInputStream(
    const std::string& string) :
    str_(string),
    cur_(0) {}
    cur_(0) {
}

bool StringInputStream::readNextByte(char* target) {
  if (cur_ < str_.size()) {
    *target = str_.at(cur_++);
    *target = str_[cur_++];
    return true;
  } else {
    return false;
Loading