fix "no output if no top clause"
This commit is contained in:
parent
c5d5cbc7fd
commit
79a898fb7b
40
src/dbx.c
40
src/dbx.c
@ -284,7 +284,7 @@ int SelectCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
|
|||||||
return RedisModule_WrongArity(ctx);
|
return RedisModule_WrongArity(ctx);
|
||||||
|
|
||||||
// Table
|
// Table
|
||||||
long top = 0;
|
long top = -1;
|
||||||
RedisModuleString *fromKeys;
|
RedisModuleString *fromKeys;
|
||||||
char intoKey[32] = "";
|
char intoKey[32] = "";
|
||||||
|
|
||||||
@ -452,28 +452,36 @@ int SelectCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
|
|||||||
char setName[32];
|
char setName[32];
|
||||||
sprintf(setName, "__db_tempset_%i", rn++);
|
sprintf(setName, "__db_tempset_%i", rn++);
|
||||||
|
|
||||||
char stmt[128];
|
|
||||||
RedisModuleCallReply *rep;
|
RedisModuleCallReply *rep;
|
||||||
|
|
||||||
if (buildSetByPattern(ctx, ®ex, setName, vWhere) > 0) {
|
if (buildSetByPattern(ctx, ®ex, setName, vWhere) > 0) {
|
||||||
size_t n = 0;
|
|
||||||
// Sort the fields under the key and send the resulting array to processRecords module
|
|
||||||
char *field;
|
char *field;
|
||||||
Vector_Get(vOrder, 0, &field);
|
int nSortField = Vector_Size(vOrder);
|
||||||
if (field[strlen(field)-1] == '-') {
|
int cap = 3 * nSortField + 2;
|
||||||
field[strlen(field)-1] = 0;
|
|
||||||
sprintf(stmt, "*->%s", field);
|
RedisModuleString *param[cap];
|
||||||
rep = RedisModule_Call(ctx, "SORT", "ccccc", setName, "by", stmt, "desc", "alpha");
|
param[0] = RedisModule_CreateString(ctx, setName, strlen(setName));
|
||||||
|
|
||||||
|
for(int sf = 0; sf < nSortField; sf++) {
|
||||||
|
Vector_Get(vOrder, sf, &field);
|
||||||
|
if (field[strlen(field)-1] == '-') {
|
||||||
|
field[strlen(field)-1] = 0;
|
||||||
|
param[3+sf*3] = RedisModule_CreateString(ctx, "desc", 4);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
param[3+sf*3] = RedisModule_CreateString(ctx, "asc", 3);
|
||||||
|
param[1+sf*3] = RedisModule_CreateString(ctx, "by", 2);
|
||||||
|
param[2+sf*3] = RedisModule_CreateStringPrintf(ctx, "*->%s", field, 3 + strlen(field));
|
||||||
}
|
}
|
||||||
else {
|
param[cap-1] = RedisModule_CreateString(ctx, "alpha", 5);
|
||||||
sprintf(stmt, "*->%s", field);
|
rep = RedisModule_Call(ctx, "SORT", "v", ¶m, cap);
|
||||||
rep = RedisModule_Call(ctx, "SORT", "cccc", setName, "by", stmt, "alpha");
|
|
||||||
}
|
for(int i = 0; i < cap; i++)
|
||||||
n += processRecords(ctx, rep, ®ex, vSelect, NULL, intoKey, &top);
|
RedisModule_FreeString(ctx, param[i]);
|
||||||
|
|
||||||
|
size_t n = processRecords(ctx, rep, ®ex, vSelect, NULL, intoKey, &top);
|
||||||
|
|
||||||
RedisModule_FreeCallReply(rep);
|
RedisModule_FreeCallReply(rep);
|
||||||
|
|
||||||
// set number of output
|
|
||||||
RedisModule_ReplySetArrayLength(ctx, n);
|
RedisModule_ReplySetArrayLength(ctx, n);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user