From 232321f3a42af47c4c262aaf3174fb3bb5853815 Mon Sep 17 00:00:00 2001 From: zadam Date: Wed, 1 Jan 2020 20:49:26 +0100 Subject: [PATCH] fix searching multi-valued attributes, closes #800 --- src/services/build_search_query.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/services/build_search_query.js b/src/services/build_search_query.js index 54dbfc325..40c422f57 100644 --- a/src/services/build_search_query.js +++ b/src/services/build_search_query.js @@ -21,17 +21,19 @@ module.exports = function(filters, selectedColumns = 'notes.*') { "notes": null }; + let attrFilterId = 1; + function getAccessor(property) { let accessor; if (!VIRTUAL_ATTRIBUTES.includes(property)) { - const alias = "attr_" + property; + // not reusing existing filters to support multi-valued filters e.g. "@tag=christmas @tag=shopping" + // can match notes because @tag can be both "shopping" and "christmas" + const alias = "attr_" + property + "_" + attrFilterId++; - if (!(alias in joins)) { - joins[alias] = `LEFT JOIN attributes AS ${alias} ` - + `ON ${alias}.noteId = notes.noteId ` - + `AND ${alias}.name = '${property}' AND ${alias}.isDeleted = 0`; - } + joins[alias] = `LEFT JOIN attributes AS ${alias} ` + + `ON ${alias}.noteId = notes.noteId ` + + `AND ${alias}.name = '${property}' AND ${alias}.isDeleted = 0`; accessor = `${alias}.value`; }