From: antirez <antirez@gmail.com>
Date: Mon, 2 May 2011 22:07:41 +0000 (+0200)
Subject: Lua scripting: Honor SELECT command in both ways
X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/c2a7dd85ae007f157da3a5bedf1392a23fc38bc4?ds=sidebyside

Lua scripting: Honor SELECT command in both ways
---

diff --git a/src/scripting.c b/src/scripting.c
index 65cbed62..26e33bc7 100644
--- a/src/scripting.c
+++ b/src/scripting.c
@@ -368,15 +368,20 @@ void evalCommand(redisClient *c) {
      * EVAL received. */
     luaSetGlobalArray(lua,"KEYS",c->argv+3,numkeys);
     luaSetGlobalArray(lua,"ARGV",c->argv+3+numkeys,c->argc-3-numkeys);
+
+    /* Select the right DB in the context of the Lua client */
+    selectDb(server.lua_client,c->db->id);
     
     /* At this point whatever this script was never seen before or if it was
      * already defined, we can call it. We have zero arguments and expect
      * a single return value. */
     if (lua_pcall(lua,0,1,0)) {
+        selectDb(c,server.lua_client->db->id); /* set DB ID from Lua client */
         addReplyErrorFormat(c,"Error running script (call to %s): %s\n",
             funcname, lua_tostring(lua,-1));
         lua_pop(lua,1);
         return;
     }
+    selectDb(c,server.lua_client->db->id); /* set DB ID from Lua client */
     luaReplyToRedisReply(c,lua);
 }