sticker/Match: add inequality operators
This commit is contained in:
parent
cc143105b8
commit
49968541fd
@ -2155,6 +2155,11 @@ OK
|
||||
<para>
|
||||
Searches for stickers with the given value.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Other supported operators are:
|
||||
"<function><</function>", "<function>></function>"
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
@ -155,6 +155,10 @@ handle_sticker_song(Client &client, ConstBuffer<const char *> args)
|
||||
|
||||
if (strcmp(op_s, "=") == 0)
|
||||
op = StickerOperator::EQUALS;
|
||||
else if (strcmp(op_s, "<") == 0)
|
||||
op = StickerOperator::LESS_THAN;
|
||||
else if (strcmp(op_s, ">") == 0)
|
||||
op = StickerOperator::GREATER_THAN;
|
||||
else {
|
||||
command_error(client, ACK_ERROR_ARG,
|
||||
"bad operator");
|
||||
|
@ -32,6 +32,18 @@ enum class StickerOperator {
|
||||
* exists.
|
||||
*/
|
||||
EQUALS,
|
||||
|
||||
/**
|
||||
* Matches if a sticker with the specified name exists with a
|
||||
* value smaller than the specified one.
|
||||
*/
|
||||
LESS_THAN,
|
||||
|
||||
/**
|
||||
* Matches if a sticker with the specified name exists with a
|
||||
* value bigger than the specified one.
|
||||
*/
|
||||
GREATER_THAN,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -44,6 +44,8 @@ enum sticker_sql {
|
||||
STICKER_SQL_DELETE_VALUE,
|
||||
STICKER_SQL_FIND,
|
||||
STICKER_SQL_FIND_VALUE,
|
||||
STICKER_SQL_FIND_LT,
|
||||
STICKER_SQL_FIND_GT,
|
||||
};
|
||||
|
||||
static const char *const sticker_sql[] = {
|
||||
@ -64,6 +66,12 @@ static const char *const sticker_sql[] = {
|
||||
|
||||
//[STICKER_SQL_FIND_VALUE] =
|
||||
"SELECT uri,value FROM sticker WHERE type=? AND uri LIKE (? || '%') AND name=? AND value=?",
|
||||
|
||||
//[STICKER_SQL_FIND_LT] =
|
||||
"SELECT uri,value FROM sticker WHERE type=? AND uri LIKE (? || '%') AND name=? AND value<?",
|
||||
|
||||
//[STICKER_SQL_FIND_GT] =
|
||||
"SELECT uri,value FROM sticker WHERE type=? AND uri LIKE (? || '%') AND name=? AND value>?",
|
||||
};
|
||||
|
||||
static const char sticker_sql_create[] =
|
||||
@ -392,6 +400,16 @@ BindFind(const char *type, const char *base_uri, const char *name,
|
||||
return BindAllOrNull(error,
|
||||
sticker_stmt[STICKER_SQL_FIND_VALUE],
|
||||
type, base_uri, name, value);
|
||||
|
||||
case StickerOperator::LESS_THAN:
|
||||
return BindAllOrNull(error,
|
||||
sticker_stmt[STICKER_SQL_FIND_LT],
|
||||
type, base_uri, name, value);
|
||||
|
||||
case StickerOperator::GREATER_THAN:
|
||||
return BindAllOrNull(error,
|
||||
sticker_stmt[STICKER_SQL_FIND_GT],
|
||||
type, base_uri, name, value);
|
||||
}
|
||||
|
||||
assert(false);
|
||||
|
Loading…
Reference in New Issue
Block a user