| 6389 | } |
| 6390 | |
| 6391 | static int push_args(const char **argstr, struct sqlclntstate *clnt, char **err, int *argc) |
| 6392 | { |
| 6393 | const char *s = *argstr; |
| 6394 | SP sp = clnt->sp; |
| 6395 | Lua lua = sp->lua; |
| 6396 | |
| 6397 | const char *msg = s; |
| 6398 | int argcnt = 0; |
| 6399 | sparg_t arg; |
| 6400 | |
| 6401 | int rc; |
| 6402 | while ((rc = getarg(&s, clnt, &arg)) > arg_end) { |
| 6403 | if ((rc = !lua_checkstack(lua, 1)) != 0) break; |
| 6404 | switch (arg.type) { |
| 6405 | case arg_null: luabb_pushnull(lua, DBTYPES_CSTRING); break; |
| 6406 | case arg_int: lua_pushnumber(lua, arg.u.i); break; |
| 6407 | case arg_real: lua_pushnumber(lua, arg.u.d); break; |
| 6408 | case arg_str: lua_pushstring(lua, arg.u.c); break; |
| 6409 | case arg_blob: luabb_pushblob(lua, &arg.u.b); break; |
| 6410 | case arg_bool: lua_pushboolean(lua, arg.u.i); break; |
| 6411 | case arg_param: rc = push_param(lua, clnt, arg.u.i); break; |
| 6412 | default: rc = 99; break; |
| 6413 | } |
| 6414 | free(arg.mbuf); |
| 6415 | ++argcnt; |
| 6416 | if (rc) break; |
| 6417 | msg = s; |
| 6418 | } |
| 6419 | if (rc != arg_end) { |
| 6420 | *err = malloc(64); |
| 6421 | if (arg.type == arg_param) { |
| 6422 | snprintf0(*err, 60, "Bad parameter:%s type:%d", arg.buf + 1, rc); |
| 6423 | } else { |
| 6424 | if (snprintf0(*err, 60, "bad argument -> %s", msg) >= 60) { |
| 6425 | strcat(*err, "..."); |
| 6426 | } |
| 6427 | } |
| 6428 | reset_sp(sp); |
| 6429 | return -1; |
| 6430 | } |
| 6431 | *argc = argcnt; |
| 6432 | return 0; |
| 6433 | } |
| 6434 | |
| 6435 | static int run_sp_int(struct sqlclntstate *clnt, int argcnt, char **err) |
| 6436 | { |
no test coverage detected