#include #include #include "query/parameters.hpp" #include "query/plan_interface.hpp" #include "query/typed_value.hpp" #include "storage/edge_accessor.hpp" #include "storage/vertex_accessor.hpp" #include "using.hpp" using std::cout; using std::endl; using query::TypedValue; // Query: MATCH (g:garment {garment_id: 1234}) RETURN g class CPUPlan : public PlanInterface { public: bool run(GraphDbAccessor &db_accessor, const Parameters &args, Stream &stream) { std::vector headers{std::string("g")}; stream.Header(headers); for (auto vertex : db_accessor.vertices(false)) { if (vertex.has_label(db_accessor.label("garment"))) { TypedValue prop = vertex.PropsAt(db_accessor.property("garment_id")); if (prop.type() == TypedValue::Type::Null) continue; auto cmp = prop == args.At(0).second; if (cmp.type() != TypedValue::Type::Bool) continue; if (cmp.Value() != true) continue; std::vector result{TypedValue(vertex)}; stream.Result(result); } } return true; } ~CPUPlan() {} }; extern "C" PlanInterface *produce() { return new CPUPlan(); } extern "C" void destruct(PlanInterface *p) { delete p; }