Commit 18d75a13 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

queryservice WIP, error handling

parent bdd8fce5
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ set(FNORDMETRIC_CSV_BACKEND_SOURCES
set(FNORDMETRIC_QUERY_SOURCES
    ${FNORDMETRIC_UI_SOURCES}
    ${FNORDMETRIC_CSV_BACKEND_SOURCES}
    stage/src/fnordmetric/query/query.cc
    stage/src/fnordmetric/query/astnode.cc
    stage/src/fnordmetric/query/compile.cc
    stage/src/fnordmetric/query/drawstatement.cc
@@ -39,7 +38,9 @@ set(FNORDMETRIC_QUERY_SOURCES
    stage/src/fnordmetric/query/expressions/math.cc
    stage/src/fnordmetric/query/grouper.cc
    stage/src/fnordmetric/query/parser.cc
    stage/src/fnordmetric/query/query.cc
    stage/src/fnordmetric/query/queryplan.cc
    stage/src/fnordmetric/query/queryservice.cc
    stage/src/fnordmetric/query/svalue.cc
    stage/src/fnordmetric/query/symboltable.cc
    stage/src/fnordmetric/query/token.cc
+13 −2
Original line number Diff line number Diff line
@@ -23,9 +23,16 @@ namespace query {

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

  if (!parser.parse(query_string, strlen(query_string))) {
    fprintf(stderr, "parser error\n");
  if (query_string_len == 0) {
    RAISE(Parser::ParseError, "empty query");
  }

  if (!parser.parse(query_string, query_string_len)) {
    RAISE(
        Parser::ParseError,
        "can't figure out how to parse this, sorry :(");
  }

  for (auto stmt : parser.getStatements()) {
@@ -94,6 +101,10 @@ ResultList* Query::getResultList(size_t index) const {
  return results_[index].get();
}

size_t Query::getNumCharts() const {
  return charts_.size();
}

ui::Canvas* Query::getChart(size_t index) const {
  assert(index < charts_.size()); // FIXPAUL
  return charts_[index].get();
+1 −1
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ public:
  /**
   * Get the number of charts
   */
  size_t getNumChart() const;
  size_t getNumCharts() const;

  /**
   * Get the nth chart result of the query. Raises an exception if no such
+1 −1
Original line number Diff line number Diff line
@@ -983,7 +983,7 @@ TEST_CASE(QueryTest, TestQueryService, [] () {

  query_service.executeQuery(
      input.get(),
      QueryService::FORMAT_CSV,
      QueryService::FORMAT_SVG,
      output.get());
});

+52 −0
Original line number Diff line number Diff line
/**
 * This file is part of the "FnordMetric" project
 *   Copyright (c) 2014 Paul Asmuth, Google Inc.
 *
 * Licensed under the MIT license (see LICENSE).
 */
#include <fnordmetric/query/executable.h>
#include <fnordmetric/query/query.h>
#include <fnordmetric/query/queryservice.h>
#include <fnordmetric/query/resultlist.h>
#include <fnordmetric/query/tablerepository.h>
#include <fnordmetric/ui/svgtarget.h>

namespace fnordmetric {
namespace query {

QueryService::QueryService() {

}

void QueryService::executeQuery(
    util::InputStream* input_stream,
    kFormat output_format,
    util::OutputStream* output_stream) const {
  TableRepository repo;
  std::string query_string;

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

  switch (output_format) {

    case FORMAT_SVG: {
      ui::SVGTarget target;
      renderCharts(&query, &target);
      break;
    }

  }
}

void QueryService::registerBackend() {
}

void QueryService::renderCharts(Query* query, ui::RenderTarget* target) const {
  for (int i = 0; i < query->getNumCharts(); ++i) {
    query->getChart(i)->render(target);
  }
}

}
}
Loading