// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>

#include "base/check.h"
#include "testing/libfuzzer/proto/lpm_interface.h"
#include "third_party/sqlite/fuzz/sql_query_grammar.pb.h"
#include "third_party/sqlite/fuzz/sql_query_grammar_fuzzable.pb.h"
#include "third_party/sqlite/fuzz/sql_query_proto_to_string.h"
#include "third_party/sqlite/fuzz/sql_run_queries.h"

using namespace sql_query_grammar;

DEFINE_PROTO_FUZZER(const fuzzable::sql_query_grammar::Expr& fuzzable_expr) {
  std::string serialized;
  CHECK(fuzzable_expr.SerializeToString(&serialized));
  sql_query_grammar::Expr expr;
  // Recursion limits can cause parsing to fail.
  if (!expr.ParseFromString(serialized)) {
    return;
  }
  std::string expr_str = sql_fuzzer::ExprToString(expr);
  // Convert printf command into runnable SQL query.
  expr_str = "SELECT " + expr_str + ";";

  if (::getenv("LPM_DUMP_NATIVE_INPUT")) {
    std::cout << "_________________________" << std::endl;
    std::cout << expr_str << std::endl;
    std::cout << "------------------------" << std::endl;
  }

  std::vector<std::string> queries;
  queries.push_back(expr_str);
  sql_fuzzer::RunSqlQueries(queries, ::getenv("LPM_SQLITE_TRACE"));
}
