TT#63000 skip non-EQ DB query type keys

When looking for usable type keys, we must consider only types using the
DB "=" operator. Skip type keys that use any other operator.

Change-Id: I2ef696dc6d4930bc63e102c8251082ef9e3ff6b8
(cherry picked from commit 6111fb0605)
changes/80/32280/3
Richard Fuchs 7 years ago
parent c11065b535
commit 558fec4768

@ -42,3 +42,4 @@ sipwise/rtpengine-play-media.patch
sipwise/registrar_add_path.patch
upstream/limit_the_execution_of_dialplan_reload.patch
sipwise/db_redis_fix_scan_usage.patch
sipwise/db_redis_skip_not_eq_type_keys.patch

@ -0,0 +1,64 @@
--- a/src/modules/db_redis/redis_dbase.c
+++ b/src/modules/db_redis/redis_dbase.c
@@ -279,7 +279,7 @@
}
static int db_redis_find_query_key(redis_key_t *key, const str *table_name,
- str *type_name, const db_key_t *_k, const db_val_t *_v, const int _n,
+ str *type_name, const db_key_t *_k, const db_val_t *_v, const db_op_t *_op, const int _n,
str *key_name, int *key_found) {
unsigned int len;
@@ -297,11 +297,16 @@
for (i = 0; i < _n; ++i) {
const db_key_t k = _k[i];
const db_val_t v = _v[i];
+ const db_op_t op = _op ? _op[i] : NULL;
if (VAL_NULL(&v)) {
LM_DBG("Skipping null value for given key '%.*s'\n",
k->len, k->s);
break;
+ } else if (op && strcmp(op, OP_EQ)) {
+ LM_DBG("Skipping non-EQ op (%s) for given key '%.*s'\n",
+ op, k->len, k->s);
+ break;
} else if (!str_strcmp(&key->key, (str*)k)) {
LM_DBG("found key in entry key\n");
if (db_redis_val2str(&v, &val) != 0) goto err;
@@ -389,7 +394,7 @@
}
table = (redis_table_t*)table_e->u.p;
key = table->entry_keys;
- if (db_redis_find_query_key(key, table_name, &type_name, _k, _v, _n, &keyname, &key_found) != 0) {
+ if (db_redis_find_query_key(key, table_name, &type_name, _k, _v, NULL, _n, &keyname, &key_found) != 0) {
goto err;
}
if (key_found) {
@@ -479,7 +484,7 @@
str keyname = {NULL, 0};
key = type->keys;
- if (db_redis_find_query_key(key, table_name, &type->type, _k, _v, _n, &keyname, &key_found) != 0) {
+ if (db_redis_find_query_key(key, table_name, &type->type, _k, _v, NULL, _n, &keyname, &key_found) != 0) {
goto err;
}
if (key_found) {
@@ -536,7 +541,7 @@
keyname.len = 0;
key = table->entry_keys;
- if (db_redis_find_query_key(key, table_name, &typename, _k, _v, _n, &keyname, &key_found) != 0) {
+ if (db_redis_find_query_key(key, table_name, &typename, _k, _v, _op, _n, &keyname, &key_found) != 0) {
goto err;
}
if (key_found) {
@@ -554,7 +559,7 @@
for (type = table->types; type; type = type->next) {
key = type->keys;
LM_DBG("checking type '%.*s'\n", type->type.len, type->type.s);
- if (db_redis_find_query_key(key, table_name, &type->type, _k, _v, _n, &keyname, &key_found) != 0) {
+ if (db_redis_find_query_key(key, table_name, &type->type, _k, _v, _op, _n, &keyname, &key_found) != 0) {
goto err;
}
if (key_found) {
Loading…
Cancel
Save