From a1150fb12858d4ec802ee88f64f501c513a3151a Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Fri, 23 Jul 2021 20:32:56 -0500 Subject: [PATCH 1/2] Include scores in zset value --- redis_fdw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/redis_fdw.c b/redis_fdw.c index dcc3e24..4e81bcd 100644 --- a/redis_fdw.c +++ b/redis_fdw.c @@ -1349,7 +1349,7 @@ redisIterateForeignScanMulti(ForeignScanState *node) break; case PG_REDIS_ZSET_TABLE: reply = redisCommand(festate->context, - "ZRANGE %s 0 -1", key); + "ZRANGE %s 0 -1 WITHSCORES", key); break; case PG_REDIS_SCALAR_TABLE: default: From baa8a0b3da68ebd5d7cbe10e88d7212dc85962c5 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 8 Feb 2022 17:00:02 -0500 Subject: [PATCH 2/2] Keep looking if the last key in elements was of the wrong type This is a boundary case where we exhaust elements (row >= elements) but the cursor is still valid and so we should ask for more keys instead of declaring victory. --- redis_fdw.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/redis_fdw.c b/redis_fdw.c index 4e81bcd..1264e36 100644 --- a/redis_fdw.c +++ b/redis_fdw.c @@ -1415,6 +1415,8 @@ redisIterateForeignScanMulti(ForeignScanState *node) values[1] = data; tuple = BuildTupleFromCStrings(festate->attinmeta, values); ExecStoreTuple(tuple, slot, InvalidBuffer, false); + } else if (festate->cursor_id != NULL) { + redisIterateForeignScanMulti(node); } /* Cleanup */