ESQueryNode *second{nullptr};
public:
ESQueryNode_Bool() {}
+ ESQueryNode_Bool(const string& _op, ESQueryNode *_first, ESQueryNode *_second) : op(_op), first(_first), second(_second) {}
bool init(ESQueryStack *s) {
bool valid = s->pop(&op);
if (!valid) {
class ESQueryNode_Op_Equal : public ESQueryNode_Op {
public:
ESQueryNode_Op_Equal() {}
+ ESQueryNode_Op_Equal(const string& f, const string& v) {
+ op = "==";
+ field = f;
+ val = v;
+ }
virtual void dump(Formatter *f) const {
f->open_object_section("term");
return false;
}
+ for (auto& c : eq_conds) {
+ ESQueryNode_Op_Equal *eq_node = new ESQueryNode_Op_Equal(c.first, c.second);
+ query_root = new ESQueryNode_Bool("and", eq_node, query_root);
+ }
+
return true;
}
bool convert(list<string>& infix);
+ list<pair<string, string> > eq_conds;
+
public:
- ESQueryCompiler(const string& query) : parser(query) {}
+ ESQueryCompiler(const string& query, list<pair<string, string> > *prepend_eq_conds) : parser(query) {
+ if (prepend_eq_conds) {
+ eq_conds = std::move(*prepend_eq_conds);
+ }
+ }
~ESQueryCompiler();
bool compile();
if (op_ret < 0)
return;
- ESQueryCompiler es_query(expression);
+ list<pair<string, string> > conds;
+
+ conds.push_back(make_pair("permissions", s->user->user_id.to_str()));
+
+ if (!s->bucket_name.empty()) {
+ conds.push_back(make_pair("bucket", s->bucket_name));
+ }
+
+ ESQueryCompiler es_query(expression, &conds);
bool valid = es_query.compile();
if (!valid) {
for (auto& i : response.hits.hits) {
es_index_obj_response& e = i.source;
s->formatter->open_object_section("Contents");
+ s->formatter->dump_string("Bucket", e.bucket);
s->formatter->dump_string("Key", e.key.name);
string instance = (!e.key.instance.empty() ? e.key.instance : "null");
s->formatter->dump_string("Instance", instance.c_str());