Task <object> IScriptingCommands.Eval(int db, string script, string[] keyArgs, object[] valueArgs, bool useCache, bool inferStrings, bool queueJump)
{
if (string.IsNullOrEmpty(script))
{
throw new ArgumentNullException("script");
}
var args = new RedisMessage.RedisParameter[2 + (keyArgs == null ? 0 : keyArgs.Length) + (valueArgs == null ? 0 : valueArgs.Length)];
args[1] = keyArgs == null ? 0 : keyArgs.Length;
int idx = 2;
if (keyArgs != null)
{
for (int i = 0; i < keyArgs.Length; i++)
{
args[idx++] = keyArgs[i];
}
}
if (valueArgs != null)
{
for (int i = 0; i < valueArgs.Length; i++)
{
args[idx++] = RedisMessage.RedisParameter.Create(valueArgs[i]);
}
}
if (!useCache)
{
args[0] = script;
return(ExecuteScript(RedisMessage.Create(db, RedisLiteral.EVAL, args), inferStrings, queueJump));
}
// note this does a SCRIPT LOAD if it is the first time it is seen on this connection
args[0] = GetScriptHash(script);
return(ExecuteScript(RedisMessage.Create(db, RedisLiteral.EVALSHA, args), inferStrings, queueJump));
}