added qse_awk_backuperrmsg() and qse_awk_rtx_backuperrmsg().
enhanced the module loading code to emit more comprehensive error message in awk/parse.c removed dynamic exception specification from some methods. added mysql::affected_rows() fixed wrong parameter handling in mysql::autocommit(). changed mysql::esacpe_string() to return the result via the second parameter
This commit is contained in:
@ -254,88 +254,6 @@ static int fnc_close (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fnc_connect (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
sql_list_t* sql_list;
|
||||
sql_node_t* sql_node;
|
||||
int ret = -1, take_rtx_err = 0;
|
||||
|
||||
qse_awk_val_t* a1, * a2, * a3;
|
||||
qse_mchar_t* host = QSE_NULL;
|
||||
qse_mchar_t* user = QSE_NULL;
|
||||
qse_mchar_t* pass = QSE_NULL;
|
||||
|
||||
sql_list = rtx_to_sql_list(rtx, fi);
|
||||
sql_node = get_sql_list_node_with_arg(rtx, sql_list, qse_awk_rtx_getarg(rtx, 0));
|
||||
if (sql_node)
|
||||
{
|
||||
a1 = qse_awk_rtx_getarg(rtx, 1);
|
||||
a2 = qse_awk_rtx_getarg(rtx, 2);
|
||||
a3 = qse_awk_rtx_getarg(rtx, 3);
|
||||
|
||||
host = qse_awk_rtx_getvalmbs(rtx, a1, QSE_NULL);
|
||||
if (!host) { take_rtx_err = 1; goto done; }
|
||||
user = qse_awk_rtx_getvalmbs(rtx, a2, QSE_NULL);
|
||||
if (!user) { take_rtx_err = 1; goto done; }
|
||||
pass = qse_awk_rtx_getvalmbs(rtx, a3, QSE_NULL);
|
||||
if (!pass) { take_rtx_err = 1; goto done; }
|
||||
|
||||
if (!mysql_real_connect(sql_node->mysql, host, user, pass, QSE_NULL, 0, QSE_NULL, 0))
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("%hs"), mysql_error(sql_node->mysql));
|
||||
sql_node->connect_ever_attempted = 1; /* doesn't matter if mysql_real_connect() failed */
|
||||
goto done;
|
||||
}
|
||||
|
||||
sql_node->connect_ever_attempted = 1;
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
done:
|
||||
if (take_rtx_err) set_error_on_sql_list (rtx, sql_list, QSE_NULL);
|
||||
if (pass) qse_awk_rtx_freevalmbs (rtx, a3, pass);
|
||||
if (user) qse_awk_rtx_freevalmbs (rtx, a2, user);
|
||||
if (host) qse_awk_rtx_freevalmbs (rtx, a1, host);
|
||||
|
||||
qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval(rtx, ret));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fnc_ping (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
sql_list_t* sql_list;
|
||||
sql_node_t* sql_node;
|
||||
int ret = -1, take_rtx_err = 0;
|
||||
|
||||
sql_list = rtx_to_sql_list(rtx, fi);
|
||||
sql_node = get_sql_list_node_with_arg(rtx, sql_list, qse_awk_rtx_getarg(rtx, 0));
|
||||
if (sql_node)
|
||||
{
|
||||
if (!sql_node->connect_ever_attempted)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("not connected"));
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (mysql_ping(sql_node->mysql) != 0)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("%hs"), mysql_error(sql_node->mysql));
|
||||
goto done;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
done:
|
||||
if (take_rtx_err) set_error_on_sql_list (rtx, sql_list, QSE_NULL);
|
||||
qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval(rtx, ret));
|
||||
return 0;
|
||||
|
||||
oops:
|
||||
if (take_rtx_err) set_error_on_sql_list (rtx, sql_list, QSE_NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static int fnc_get_option (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
@ -360,12 +278,6 @@ static int fnc_get_option (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
goto oops;
|
||||
}
|
||||
|
||||
if (!sql_node->connect_ever_attempted)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("not connected"));
|
||||
goto done;
|
||||
}
|
||||
|
||||
switch (id)
|
||||
{
|
||||
case MYSQL_OPT_CONNECT_TIMEOUT:
|
||||
@ -484,7 +396,6 @@ static int fnc_set_option (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
goto done;
|
||||
}
|
||||
|
||||
printf ("%d %d\n", (int)id, *(int*)vptr);
|
||||
if (mysql_options(sql_node->mysql, id, vptr) != 0)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("%hs"), mysql_error(sql_node->mysql));
|
||||
@ -504,6 +415,93 @@ oops:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int fnc_connect (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
sql_list_t* sql_list;
|
||||
sql_node_t* sql_node;
|
||||
int ret = -1, take_rtx_err = 0;
|
||||
|
||||
qse_awk_val_t* a1, * a2, * a3;
|
||||
qse_mchar_t* host = QSE_NULL;
|
||||
qse_mchar_t* user = QSE_NULL;
|
||||
qse_mchar_t* pass = QSE_NULL;
|
||||
|
||||
sql_list = rtx_to_sql_list(rtx, fi);
|
||||
sql_node = get_sql_list_node_with_arg(rtx, sql_list, qse_awk_rtx_getarg(rtx, 0));
|
||||
if (sql_node)
|
||||
{
|
||||
a1 = qse_awk_rtx_getarg(rtx, 1);
|
||||
a2 = qse_awk_rtx_getarg(rtx, 2);
|
||||
a3 = qse_awk_rtx_getarg(rtx, 3);
|
||||
|
||||
host = qse_awk_rtx_getvalmbs(rtx, a1, QSE_NULL);
|
||||
if (!host) { take_rtx_err = 1; goto done; }
|
||||
user = qse_awk_rtx_getvalmbs(rtx, a2, QSE_NULL);
|
||||
if (!user) { take_rtx_err = 1; goto done; }
|
||||
pass = qse_awk_rtx_getvalmbs(rtx, a3, QSE_NULL);
|
||||
if (!pass) { take_rtx_err = 1; goto done; }
|
||||
|
||||
if (!mysql_real_connect(sql_node->mysql, host, user, pass, QSE_NULL, 0, QSE_NULL, 0))
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("%hs"), mysql_error(sql_node->mysql));
|
||||
sql_node->connect_ever_attempted = 1; /* doesn't matter if mysql_real_connect() failed */
|
||||
goto done;
|
||||
}
|
||||
|
||||
sql_node->connect_ever_attempted = 1;
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
done:
|
||||
if (take_rtx_err) set_error_on_sql_list (rtx, sql_list, QSE_NULL);
|
||||
if (pass) qse_awk_rtx_freevalmbs (rtx, a3, pass);
|
||||
if (user) qse_awk_rtx_freevalmbs (rtx, a2, user);
|
||||
if (host) qse_awk_rtx_freevalmbs (rtx, a1, host);
|
||||
|
||||
qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval(rtx, ret));
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define ENSURE_CONNECT_EVER_ATTEMPTED(rtx, sql_list, sql_node) \
|
||||
do { \
|
||||
if (!(sql_node)->connect_ever_attempted) \
|
||||
{ \
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("not connected")); \
|
||||
goto done; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
static int fnc_ping (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
sql_list_t* sql_list;
|
||||
sql_node_t* sql_node;
|
||||
int ret = -1, take_rtx_err = 0;
|
||||
|
||||
sql_list = rtx_to_sql_list(rtx, fi);
|
||||
sql_node = get_sql_list_node_with_arg(rtx, sql_list, qse_awk_rtx_getarg(rtx, 0));
|
||||
if (sql_node)
|
||||
{
|
||||
ENSURE_CONNECT_EVER_ATTEMPTED(rtx, sql_list, sql_node);
|
||||
|
||||
if (mysql_ping(sql_node->mysql) != 0)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("%hs"), mysql_error(sql_node->mysql));
|
||||
goto done;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
done:
|
||||
if (take_rtx_err) set_error_on_sql_list (rtx, sql_list, QSE_NULL);
|
||||
qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval(rtx, ret));
|
||||
return 0;
|
||||
|
||||
oops:
|
||||
if (take_rtx_err) set_error_on_sql_list (rtx, sql_list, QSE_NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int fnc_autocommit (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
sql_list_t* sql_list;
|
||||
@ -519,11 +517,7 @@ static int fnc_autocommit (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
v = qse_awk_rtx_valtobool(rtx, qse_awk_rtx_getarg(rtx, 1));
|
||||
if (v <= -1) { take_rtx_err = 1; goto oops; }
|
||||
|
||||
if (!sql_node->connect_ever_attempted)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("not connected"));
|
||||
goto done;
|
||||
}
|
||||
ENSURE_CONNECT_EVER_ATTEMPTED(rtx, sql_list, sql_node);
|
||||
|
||||
if (mysql_autocommit(sql_node->mysql, v) != 0)
|
||||
{
|
||||
@ -559,11 +553,7 @@ static int fnc_commit (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
v = qse_awk_rtx_valtobool(rtx, qse_awk_rtx_getarg(rtx, 1));
|
||||
if (v <= -1) { take_rtx_err = 1; goto oops; }
|
||||
|
||||
if (!sql_node->connect_ever_attempted)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("not connected"));
|
||||
goto done;
|
||||
}
|
||||
ENSURE_CONNECT_EVER_ATTEMPTED(rtx, sql_list, sql_node);
|
||||
|
||||
if (mysql_commit(sql_node->mysql) != 0)
|
||||
{
|
||||
@ -599,11 +589,7 @@ static int fnc_rollback (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
v = qse_awk_rtx_valtobool(rtx, qse_awk_rtx_getarg(rtx, 1));
|
||||
if (v <= -1) { take_rtx_err = 1; goto oops; }
|
||||
|
||||
if (!sql_node->connect_ever_attempted)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("not connected"));
|
||||
goto done;
|
||||
}
|
||||
ENSURE_CONNECT_EVER_ATTEMPTED(rtx, sql_list, sql_node);
|
||||
|
||||
if (mysql_rollback(sql_node->mysql) != 0)
|
||||
{
|
||||
@ -624,11 +610,61 @@ oops:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int fnc_affected_rows (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
sql_list_t* sql_list;
|
||||
sql_node_t* sql_node;
|
||||
int ret = -1, take_rtx_err = 0;
|
||||
|
||||
sql_list = rtx_to_sql_list(rtx, fi);
|
||||
sql_node = get_sql_list_node_with_arg(rtx, sql_list, qse_awk_rtx_getarg(rtx, 0));
|
||||
if (sql_node)
|
||||
{
|
||||
my_ulonglong nrows;
|
||||
qse_awk_val_t* vrows;
|
||||
|
||||
ENSURE_CONNECT_EVER_ATTEMPTED(rtx, sql_list, sql_node);
|
||||
|
||||
nrows = mysql_affected_rows(sql_node->mysql);
|
||||
if (nrows == (my_ulonglong)-1)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("%hs"), mysql_error(sql_node->mysql));
|
||||
goto done;
|
||||
}
|
||||
|
||||
vrows = qse_awk_rtx_makeintval(rtx, nrows);
|
||||
if (!vrows)
|
||||
{
|
||||
take_rtx_err = 1;
|
||||
goto oops;
|
||||
}
|
||||
|
||||
if (qse_awk_rtx_setrefval(rtx, (qse_awk_val_ref_t*)qse_awk_rtx_getarg(rtx, 1), vrows) <= -1)
|
||||
{
|
||||
qse_awk_rtx_refupval (rtx, vrows);
|
||||
qse_awk_rtx_refdownval (rtx, vrows);
|
||||
take_rtx_err = 1;
|
||||
goto oops;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
done:
|
||||
if (take_rtx_err) set_error_on_sql_list (rtx, sql_list, QSE_NULL);
|
||||
qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval(rtx, ret));
|
||||
return 0;
|
||||
|
||||
oops:
|
||||
if (take_rtx_err) set_error_on_sql_list (rtx, sql_list, QSE_NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int fnc_escape_string (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
sql_list_t* sql_list;
|
||||
sql_node_t* sql_node;
|
||||
int take_rtx_err = 0;
|
||||
int ret = -1, take_rtx_err = 0;
|
||||
|
||||
qse_awk_val_t* a1, *retv;
|
||||
qse_mchar_t* qstr = QSE_NULL;
|
||||
@ -639,7 +675,7 @@ static int fnc_escape_string (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
if (sql_node)
|
||||
{
|
||||
qse_size_t qlen;
|
||||
|
||||
|
||||
a1 = qse_awk_rtx_getarg(rtx, 1);
|
||||
|
||||
qstr = qse_awk_rtx_getvalmbs(rtx, a1, &qlen);
|
||||
@ -648,27 +684,38 @@ static int fnc_escape_string (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
ebuf = qse_awk_rtx_allocmem(rtx, (qlen * 2 + 1) * QSE_SIZEOF(*qstr));
|
||||
if (!ebuf) { take_rtx_err = 1; goto oops; }
|
||||
|
||||
if (mysql_real_escape_string(sql_node->mysql, ebuf, qstr, qlen) != 0)
|
||||
ENSURE_CONNECT_EVER_ATTEMPTED(rtx, sql_list, sql_node);
|
||||
mysql_real_escape_string(sql_node->mysql, ebuf, qstr, qlen);
|
||||
|
||||
retv = qse_awk_rtx_makestrvalwithmbs(rtx, ebuf);
|
||||
if (!retv)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("%hs"), mysql_error(sql_node->mysql));
|
||||
goto done;
|
||||
take_rtx_err = 1;
|
||||
goto oops;
|
||||
}
|
||||
|
||||
if (qse_awk_rtx_setrefval(rtx, (qse_awk_val_ref_t*)qse_awk_rtx_getarg(rtx, 2), retv) <= -1)
|
||||
{
|
||||
qse_awk_rtx_refupval (rtx, retv);
|
||||
qse_awk_rtx_refdownval (rtx, retv);
|
||||
take_rtx_err = 1;
|
||||
goto oops;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
done:
|
||||
if (take_rtx_err) set_error_on_sql_list (rtx, sql_list, QSE_NULL);
|
||||
if (qstr) qse_awk_rtx_freevalmbs (rtx, a1, qstr);
|
||||
retv = ebuf? qse_awk_rtx_makestrvalwithmbs(rtx, ebuf): qse_awk_rtx_makenilval(rtx);
|
||||
if (take_rtx_err) set_error_on_sql_list (rtx, sql_list, QSE_NULL);
|
||||
if (ebuf) qse_awk_rtx_freemem (rtx, ebuf);
|
||||
if (!retv) return -1;
|
||||
|
||||
qse_awk_rtx_setretval (rtx, retv);
|
||||
if (qstr) qse_awk_rtx_freevalmbs (rtx, a1, qstr);
|
||||
qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval(rtx, ret));
|
||||
return 0;
|
||||
|
||||
oops:
|
||||
if (take_rtx_err) set_error_on_sql_list (rtx, sql_list, QSE_NULL);
|
||||
if (qstr) qse_awk_rtx_freevalmbs (rtx, a1, qstr);
|
||||
if (ebuf) qse_awk_rtx_freemem (rtx, ebuf);
|
||||
if (qstr) qse_awk_rtx_freevalmbs (rtx, a1, qstr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -691,11 +738,7 @@ static int fnc_query (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
qstr = qse_awk_rtx_getvalmbs(rtx, a1, &qlen);
|
||||
if (!qstr) { take_rtx_err = 1; goto oops; }
|
||||
|
||||
if (!sql_node->connect_ever_attempted)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("not connected"));
|
||||
goto done;
|
||||
}
|
||||
ENSURE_CONNECT_EVER_ATTEMPTED(rtx, sql_list, sql_node);
|
||||
|
||||
if (mysql_real_query(sql_node->mysql, qstr, qlen) != 0)
|
||||
{
|
||||
@ -734,11 +777,7 @@ static int fnc_store_result (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
|
||||
res_list = rtx_to_res_list(rtx, fi);
|
||||
|
||||
if (!sql_node->connect_ever_attempted)
|
||||
{
|
||||
set_error_on_sql_list (rtx, sql_list, QSE_T("not connected"));
|
||||
goto done;
|
||||
}
|
||||
ENSURE_CONNECT_EVER_ATTEMPTED(rtx, sql_list, sql_node);
|
||||
|
||||
res = mysql_store_result(sql_node->mysql);
|
||||
if (!res)
|
||||
@ -888,21 +927,22 @@ struct inttab_t
|
||||
static fnctab_t fnctab[] =
|
||||
{
|
||||
/* keep this table sorted for binary search in query(). */
|
||||
{ QSE_T("autocommit"), { { 1, 1, QSE_NULL }, fnc_autocommit, 0 } },
|
||||
{ QSE_T("close"), { { 1, 1, QSE_NULL }, fnc_close, 0 } },
|
||||
{ QSE_T("commit"), { { 1, 1, QSE_NULL }, fnc_commit, 0 } },
|
||||
{ QSE_T("connect"), { { 4, 8, QSE_NULL }, fnc_connect, 0 } },
|
||||
{ QSE_T("errmsg"), { { 0, 0, QSE_NULL }, fnc_errmsg, 0 } },
|
||||
{ QSE_T("escape_string"), { { 2, 2, QSE_NULL }, fnc_escape_string, 0 } },
|
||||
{ QSE_T("fetch_row"), { { 2, 2, QSE_T("vr") }, fnc_fetch_row, 0 } },
|
||||
{ QSE_T("free_result"), { { 1, 1, QSE_NULL }, fnc_free_result, 0 } },
|
||||
/*{ QSE_T("get_option"), { { 3, 3, QSE_T("vr") }, fnc_get_option, 0 } },*/
|
||||
{ QSE_T("open"), { { 0, 0, QSE_NULL }, fnc_open, 0 } },
|
||||
{ QSE_T("ping"), { { 1, 1, QSE_NULL }, fnc_ping, 0 } },
|
||||
{ QSE_T("query"), { { 2, 2, QSE_NULL }, fnc_query, 0 } },
|
||||
{ QSE_T("rollback"), { { 1, 1, QSE_NULL }, fnc_rollback, 0 } },
|
||||
{ QSE_T("set_option"), { { 3, 3, QSE_NULL }, fnc_set_option, 0 } },
|
||||
{ QSE_T("store_result"), { { 1, 1, QSE_NULL }, fnc_store_result, 0 } }
|
||||
{ QSE_T("affected_rows"), { { 2, 2, QSE_T("vr") }, fnc_affected_rows, 0 } },
|
||||
{ QSE_T("autocommit"), { { 2, 2, QSE_NULL }, fnc_autocommit, 0 } },
|
||||
{ QSE_T("close"), { { 1, 1, QSE_NULL }, fnc_close, 0 } },
|
||||
{ QSE_T("commit"), { { 1, 1, QSE_NULL }, fnc_commit, 0 } },
|
||||
{ QSE_T("connect"), { { 4, 8, QSE_NULL }, fnc_connect, 0 } },
|
||||
{ QSE_T("errmsg"), { { 0, 0, QSE_NULL }, fnc_errmsg, 0 } },
|
||||
{ QSE_T("escape_string"), { { 3, 3, QSE_T("vvr") }, fnc_escape_string, 0 } },
|
||||
{ QSE_T("fetch_row"), { { 2, 2, QSE_T("vr") }, fnc_fetch_row, 0 } },
|
||||
{ QSE_T("free_result"), { { 1, 1, QSE_NULL }, fnc_free_result, 0 } },
|
||||
/*{ QSE_T("get_option"), { { 3, 3, QSE_T("vr") }, fnc_get_option, 0 } },*/
|
||||
{ QSE_T("open"), { { 0, 0, QSE_NULL }, fnc_open, 0 } },
|
||||
{ QSE_T("ping"), { { 1, 1, QSE_NULL }, fnc_ping, 0 } },
|
||||
{ QSE_T("query"), { { 2, 2, QSE_NULL }, fnc_query, 0 } },
|
||||
{ QSE_T("rollback"), { { 1, 1, QSE_NULL }, fnc_rollback, 0 } },
|
||||
{ QSE_T("set_option"), { { 3, 3, QSE_NULL }, fnc_set_option, 0 } },
|
||||
{ QSE_T("store_result"), { { 1, 1, QSE_NULL }, fnc_store_result, 0 } }
|
||||
};
|
||||
|
||||
static inttab_t inttab[] =
|
||||
@ -1023,6 +1063,7 @@ static void unload (qse_awk_mod_t* mod, qse_awk_t* awk)
|
||||
|
||||
QSE_ASSERT (QSE_RBT_SIZE(rbt) == 0);
|
||||
qse_rbt_close (rbt);
|
||||
//mysql_library_end ();
|
||||
}
|
||||
|
||||
int qse_awk_mod_mysql (qse_awk_mod_t* mod, qse_awk_t* awk)
|
||||
|
Reference in New Issue
Block a user