summaryrefslogtreecommitdiff
path: root/src/sticker
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-12-12 22:12:19 +0100
committerMax Kellermann <max@duempel.org>2014-12-12 22:16:00 +0100
commitcc143105b884bfcaa188c6e9f93babec5958ea87 (patch)
tree46d5022fc55999ca6ec69ea9a474b682ded4b3fd /src/sticker
parentfed44e95b3c4bc74c8bd96eaf6f08bc6ad01ed55 (diff)
sticker/Match: add operator "EQUALS"
Mapped to "=" in the MPD protocol. This is the first operator, initially supporting value matches in the MPD protocol.
Diffstat (limited to 'src/sticker')
-rw-r--r--src/sticker/Match.hxx6
-rw-r--r--src/sticker/StickerDatabase.cxx11
2 files changed, 15 insertions, 2 deletions
diff --git a/src/sticker/Match.hxx b/src/sticker/Match.hxx
index f91e70b40..6165ffb84 100644
--- a/src/sticker/Match.hxx
+++ b/src/sticker/Match.hxx
@@ -26,6 +26,12 @@ enum class StickerOperator {
* "value" parameter is ignored (must be nullptr).
*/
EXISTS,
+
+ /**
+ * Matches if a sticker with the specified name and value
+ * exists.
+ */
+ EQUALS,
};
#endif
diff --git a/src/sticker/StickerDatabase.cxx b/src/sticker/StickerDatabase.cxx
index 3c1245a6e..bd809c1d3 100644
--- a/src/sticker/StickerDatabase.cxx
+++ b/src/sticker/StickerDatabase.cxx
@@ -43,6 +43,7 @@ enum sticker_sql {
STICKER_SQL_DELETE,
STICKER_SQL_DELETE_VALUE,
STICKER_SQL_FIND,
+ STICKER_SQL_FIND_VALUE,
};
static const char *const sticker_sql[] = {
@@ -60,6 +61,9 @@ static const char *const sticker_sql[] = {
"DELETE FROM sticker WHERE type=? AND uri=? AND name=?",
//[STICKER_SQL_FIND] =
"SELECT uri,value FROM sticker WHERE type=? AND uri LIKE (? || '%') AND name=?",
+
+ //[STICKER_SQL_FIND_VALUE] =
+ "SELECT uri,value FROM sticker WHERE type=? AND uri LIKE (? || '%') AND name=? AND value=?",
};
static const char sticker_sql_create[] =
@@ -383,9 +387,12 @@ BindFind(const char *type, const char *base_uri, const char *name,
case StickerOperator::EXISTS:
return BindAllOrNull(error, sticker_stmt[STICKER_SQL_FIND],
type, base_uri, name);
- }
- (void)value;
+ case StickerOperator::EQUALS:
+ return BindAllOrNull(error,
+ sticker_stmt[STICKER_SQL_FIND_VALUE],
+ type, base_uri, name, value);
+ }
assert(false);
gcc_unreachable();