#include #include #include "/usr/include/mysql/mysql.h" #include "tlmpsql.h" #include "tlmplib.h" #include "tlmpsql.m" #include "internal.h" struct _F_sql_query___v1_private{ NSQL *sq; }; void _F_sql_query___v1::dostart(int ) { } void _F_sql_query___v1::doend() { } void _F_sql_query___v1::empty() { } void _F_sql_query___v1::error(int errcode, const char *msg) { tlmp_error (MSG_U(E_SQLERROR,"Error %d: %s\n"),errcode,msg); } void _F_sql_query___v1::onerow(const char *[],int, NSQL_FIELD_NAMES &fields, bool &end) { } static int sql_query___v1 (_F_sql_query___v1 &c, NSQL &sq, const char *safe_query, const char *ctl, va_list list) { _F_sql_query___v1_private priv; priv.sq = &sq; bool old_mode = sq.showerrormode (false); c.priv = &priv; int ret; if (safe_query != nullptr){ ret = sq.query (safe_query); }else{ ret = sq.vqueryf (ctl,list); } sq.showerrormode (old_mode); if (ret != -1){ MYSQL_RES *res = sq.store_result(); if (res != NULL){ int nb = mysql_num_rows(res); if (nb == 0){ c.empty(); }else if (nb > 0){ c.dostart(nb); MYSQL_FIELD *mfields= mysql_fetch_fields(res); int numf = mysql_num_fields(res); const char *tbf[numf]; for (int i=0; ia_query(req.c_str()); } return ret; } /* Record the default database to use for sql_query */ void query_setdefaultdb(const char *server, const char *db) { delete default_sq; default_sq = new NSQL (server,db); } /* Record the default database to use for sql_query */ void query_setdefaultdb( const char *server, const char *db, const char *user, const char *passwd) { delete default_sq; default_sq = new NSQL (server,db,user,passwd); } /* Return the default database in use */ NSQL *query_getdefaultdb() { if (default_sq == NULL){ tlmp_error ("%s\n",MSG_R(E_NODEFSQ)); } return default_sq; } /* Return the value of the last auto_increment field in the last insert statement. */ int sql_getlastid() { int ret = -1; if (default_sq == NULL){ tlmp_error ("%s\n",MSG_R(E_NODEFSQ)); }else{ ret = default_sq->getlastid(); } return ret; }