#include <iostream>
#include <string>

#include "gflags/gflags.h"
#include "gflags/gflags_declare.h"
#include "glog/logging.h"
#include "data_structures/bitset/static_bitset.hpp"
#include "communication/bolt/v1/encoder/result_stream.hpp"
#include "io/network/socket.hpp"
#include "query/backend/cpp/typed_value.hpp"
#include "query/plan_interface.hpp"

using std::cout;
using std::endl;

// Query: {{query}}

class {{class_name}} : public PlanInterface<{{stream}}> {
public:
    bool run(Db &db, const PlanArgsT &args, {{stream}} &stream) override {
        {{code}}
    }

    ~{{class_name}}() {}
};

extern "C" PlanInterface<{{stream}}>* produce() {
    return new {{class_name}}();
}

extern "C" void destruct(PlanInterface<{{stream}}>* p) {
    delete p;
}
