Running `5.7.1:441300`, trying to loop through the results of an `HGETALL` operation in Redis:
``` 127.0.0.1:6379[1]> keys * 1) "customer_params:14045551212:1.1.1.1" 127.0.0.1:6379[1]> hgetall customer_params:14045551212:1.1.1.1 1) "auth_ha1" 2) "9febe8cf72c6bd063b8978cded892e4bb" ```
This means that the returned type will be `$redisd(rpl_arr)` and a loop is required. For any given key value `$redis(r=>value[x])`, the value is in the next array slot, at `$redis(r=>value[x + 1])`.
With that in mind, I tried this loop:
``` $var(i) = 0;
while($var(i) < $redis(r=>size)) { $var(key) = $redis(r=>value[$var(i)]);
switch($var(key)) { case "auth_ha1": $var(auth_ha1) = $redis(r=>value[$var(i)+1]); break; }
$var(i) = $var(i) + 1; } ```
However, this ends up storing the key value ("auth_ha1") in `$var(auth_ha1)`. I also tried `$(var(i){s.int}) + 1` for the subscript value.
To get the actual next-slot value, the expression evaluation has to be externalised into an intermediate variable:
``` while($var(i) < $redis(r=>size)) { $var(key) = $redis(r=>value[$var(i)]);
# For some reason, Kamailio cannot evaluate an addition expression inside this subscript: $redis(r=>value[EXPR]) $var(idx) = $var(i) + 1;
switch($var(key)) { case "auth_ha1": $var(auth_ha1) = $redis(r=>value[$var(idx)]); break; }
$var(i) = $var(i) + 1; } ```
This works, and yields `9febe8cf72c6bd063b8978cded892e4bb`.