some experimental into mod-mysql.c
This commit is contained in:
parent
851d485499
commit
e5692a250e
@ -1013,7 +1013,7 @@ static int fmt_outv (hawk_fmtout_t* fmtout, va_list ap)
|
||||
if (!fmtout->putobj) goto invalid_format;
|
||||
if (fmtout->putobj(fmtout, va_arg(ap, hawk_val_t*)) <= -1) goto oops;
|
||||
break;
|
||||
|
||||
|
||||
case 'e':
|
||||
case 'E':
|
||||
case 'f':
|
||||
|
@ -7794,7 +7794,7 @@ wp_mod_main:
|
||||
}
|
||||
else
|
||||
{
|
||||
v = eval_expression (rtx, args);
|
||||
v = eval_expression(rtx, args);
|
||||
if (v == HAWK_NULL) return HAWK_NULL;
|
||||
}
|
||||
}
|
||||
|
@ -1181,8 +1181,87 @@ oops:
|
||||
|
||||
static int fnc_stmt_bind_param (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
|
||||
{
|
||||
/* TODO: */
|
||||
return -1;
|
||||
sql_list_t* sql_list;
|
||||
sql_node_t* sql_node;
|
||||
stmt_list_t* stmt_list;
|
||||
stmt_node_t* stmt_node;
|
||||
int ret = -1;
|
||||
|
||||
sql_list = rtx_to_sql_list(rtx, fi);
|
||||
stmt_list = rtx_to_stmt_list(rtx, fi);
|
||||
sql_node = get_sql_list_node_with_arg(rtx, sql_list, hawk_rtx_getarg(rtx, 0));
|
||||
stmt_node = get_stmt_list_node_with_arg(rtx, sql_list, stmt_list, hawk_rtx_getarg(rtx, 0));
|
||||
if (stmt_node)
|
||||
{
|
||||
hawk_oow_t nargs, i;
|
||||
MYSQL_BIND* binds;
|
||||
|
||||
ENSURE_CONNECT_EVER_ATTEMPTED(rtx, sql_list, sql_node);
|
||||
|
||||
nargs = hawk_rtx_getnargs(rtx);
|
||||
if (nargs - 1 != mysql_stmt_param_count(stmt_node->stmt))
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, HAWK_T("invalid number of pramaters"));
|
||||
goto done;
|
||||
}
|
||||
binds = hawk_rtx_callocmem(rtx, HAWK_SIZEOF(MYSQL_BIND) * (nargs - 1));
|
||||
if (!binds) goto done;
|
||||
|
||||
int int_data[100];
|
||||
for (i = 1; i < nargs; i++)
|
||||
{
|
||||
hawk_val_t* a;
|
||||
hawk_oow_t j;
|
||||
int x, y;
|
||||
|
||||
a = hawk_rtx_getarg(rtx, i);
|
||||
j = i - 1;
|
||||
switch (HAWK_RTX_GETVALTYPE(rtx, a))
|
||||
{
|
||||
case HAWK_VAL_STR:
|
||||
break;
|
||||
case HAWK_VAL_MBS:
|
||||
break;
|
||||
|
||||
case HAWK_VAL_INT:
|
||||
binds[j].buffer_type = MYSQL_TYPE_LONG;
|
||||
binds[j].buffer = &int_data[j];
|
||||
binds[j].is_null = 0;
|
||||
binds[j].is_unsigned = 0;
|
||||
binds[j].length = HAWK_NULL;
|
||||
|
||||
int_data[j] = HAWK_RTX_GETINTFROMVAL(rtx, a);
|
||||
break;
|
||||
|
||||
case HAWK_VAL_FLT:
|
||||
break;
|
||||
|
||||
default:
|
||||
set_error_on_sql_list (rtx, sql_list, HAWK_T("invalid parameter"));
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
if (mysql_stmt_bind_param(stmt_node->stmt, binds) != 0)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, HAWK_T("%hs"), mysql_stmt_error(stmt_node->stmt));
|
||||
hawk_rtx_freemem (rtx, binds);
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (mysql_stmt_execute(stmt_node->stmt) != 0)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, HAWK_T("%hs"), mysql_stmt_error(stmt_node->stmt));
|
||||
goto done;
|
||||
}
|
||||
|
||||
hawk_rtx_freemem (rtx, binds);
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
done:
|
||||
hawk_rtx_setretval (rtx, hawk_rtx_makeintval(rtx, ret));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fnc_stmt_execute (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
|
||||
@ -1251,7 +1330,7 @@ static fnctab_t fnctab[] =
|
||||
{ HAWK_T("select_db"), { { 2, 2, HAWK_NULL }, fnc_select_db, 0 } },
|
||||
{ HAWK_T("set_option"), { { 3, 3, HAWK_NULL }, fnc_set_option, 0 } },
|
||||
|
||||
{ HAWK_T("stmt_bind_param"), { { 1, 1, HAWK_NULL }, fnc_stmt_bind_param, 0 } },
|
||||
{ HAWK_T("stmt_bind_param"), { { 1, A_MAX, HAWK_NULL }, fnc_stmt_bind_param, 0 } },
|
||||
{ HAWK_T("stmt_close"), { { 1, 1, HAWK_NULL }, fnc_stmt_close, 0 } },
|
||||
{ HAWK_T("stmt_execute"), { { 1, 1, HAWK_NULL }, fnc_stmt_execute, 0 } },
|
||||
{ HAWK_T("stmt_init"), { { 1, 1, HAWK_NULL }, fnc_stmt_init, 0 } },
|
||||
|
Loading…
Reference in New Issue
Block a user