luasql-master的修改,支持调用存储过程

本文档介绍了如何修改luasql库,使其支持调用MySQL的存储过程。通过在`ls_mysql.c`文件中添加一个新的连接参数`client_flag`,允许用户在lua层选择启用`CLIENT_MULTI_STATEMENTS`标志,从而实现对存储过程的调用功能。详细步骤包括检查环境、初始化连接对象以及在连接数据库时设置可选参数。
摘要由CSDN通过智能技术生成

针对luasql库不支持执行存储过程,需要针对C的代码进行修改


文件名: ls_mysql.c 

/*
** Connects to a data source.
**     param: one string for each connection parameter, said
**     datasource, username, password, host and port.
*/
static int  env_connect (lua_State *L) {
        const char *sourcename = luaL_checkstring(L, 2);
        const char *username = luaL_optstring(L, 3, NULL);
        const char *password = luaL_optstring(L, 4, NULL);
        const char *host = luaL_optstring(L, 5, NULL);
        const int port = luaL_optint(L, 6, 0);


        MYSQL *conn;


        /* ==================== begin =================
        ** xxxxx
        ** 添加连接数据库的flag参数 
        ** 用于扩充调用mysql的存储过程.
        ** 参数可选
        */
        size_t client_flag = 0 ;
        if(lua_gettop(L) == 7)
        {
                client_flag = (size_t)luaL_checknumber(L, 7);
        }


        getenvironment(L); /* validade environment */


        /* Try to init the connection object. */
        conn = mysql_init(NULL);
        if (conn == NULL)
                return luasql_faildirect(L, "error connecting: Out of memory.");


        if (!mysql_real_connect(conn, host, username, password,
                sourcename, port, NULL, client_flag))
        {
                char error_msg[100];
                strncpy (error_msg,  mysql_error(conn), 99);
                mysql_close (conn); /* Close conn if connect failed */
                return luasql_failmsg (L, "error connecting to database. MySQL: ", error_msg);
        }
        return create_connection(L, 1, conn);
}

默认情况下client_flag直接固定为0, 需要把参数开放出来给lua层,可选参数,默认为0 

针对需要执行存储过程,则需要添加 CLIENT_MULTI_STATEMENTS 参数.

针对C的定义如下:

mysql/mysql_com.h:#define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */

http://dev.mysql.com/doc/refman/5.0/en/mysql-real-connect.html

Flag Name  Flag Description
CLIENT_COMPRESS Use compression protocol.(使用压缩协议。)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值