ccdffa1d7e
Summary: Rename TypedValue to PropertyValue. Move original TypedValue to query/backend/cpp. Fix undefined behaviours and memory leaks in PropertyValue. Add list type to PropertyValue. Operators and appropriate tests will be revised in following commits. Fix bugs in TypedValue Fix bugs in typed value Reviewers: buda, florijan Reviewed By: buda Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D77
84 lines
2.3 KiB
C++
84 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <iostream>
|
|
#include <map>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "query/backend/cpp/typed_value.hpp"
|
|
#include "storage/edge_accessor.hpp"
|
|
#include "storage/vertex_accessor.hpp"
|
|
|
|
void write_properties(std::ostream &os, const GraphDbAccessor &access,
|
|
const PropertyValueStore<GraphDb::Property> &properties) {
|
|
if (properties.size() > 0) {
|
|
os << "{";
|
|
for (auto x : properties) {
|
|
os << access.property_name(x.first) << ": " << x.second << ",";
|
|
}
|
|
os << "}\n";
|
|
}
|
|
}
|
|
|
|
std::ostream &operator<<(std::ostream &os, const VertexAccessor &vertex) {
|
|
if (vertex.labels().size() > 0) {
|
|
for (GraphDb::Label label : vertex.labels()) {
|
|
os << vertex.db_accessor().property_name(label) << ", ";
|
|
}
|
|
os << "\n";
|
|
}
|
|
write_properties(os, vertex.db_accessor(), vertex.Properties());
|
|
return os;
|
|
}
|
|
|
|
std::ostream &operator<<(std::ostream &os, const EdgeAccessor &edge) {
|
|
os << "Edge: " << edge.db_accessor().edge_type_name(edge.edge_type()) << "\n";
|
|
write_properties(os, edge.db_accessor(), edge.Properties());
|
|
return os;
|
|
}
|
|
|
|
class PrintRecordStream {
|
|
private:
|
|
std::ostream &stream;
|
|
|
|
public:
|
|
PrintRecordStream(std::ostream &stream) : stream(stream) {}
|
|
|
|
void write_success() { stream << "SUCCESS\n"; }
|
|
|
|
void write_success_empty() { stream << "SUCCESS EMPTY\n"; }
|
|
|
|
void write_ignored() { stream << "IGNORED\n"; }
|
|
|
|
void write_empty_fields() { stream << "EMPTY FIELDS\n"; }
|
|
|
|
void write_fields(const std::vector<std::string> &fields) {
|
|
stream << "FIELDS:";
|
|
for (auto &field : fields) {
|
|
stream << " " << field;
|
|
}
|
|
stream << '\n';
|
|
}
|
|
|
|
void write_field(const std::string &field) {
|
|
stream << "Field: " << field << '\n';
|
|
}
|
|
|
|
void write(const TypedValue &value) { stream << value << " "; }
|
|
void write_list_header(size_t size) { stream << "List: " << size << '\n'; }
|
|
|
|
void write_record() { stream << "Record\n"; }
|
|
|
|
void write_vertex_record(const VertexAccessor &vertex) { stream << vertex; }
|
|
void write_edge_record(const EdgeAccessor &edge) { stream << edge; }
|
|
|
|
void write_meta(const std::string &type) {
|
|
stream << "Meta: " << type << std::endl;
|
|
}
|
|
|
|
void write_failure(const std::map<std::string, std::string> &data) {}
|
|
|
|
void write_count(const size_t count) {}
|
|
void chunk() { stream << "CHUNK\n"; }
|
|
};
|