openresty / lua-resty-mysql

Nonblocking Lua MySQL driver library for ngx_lua or OpenResty
708 stars 236 forks source link

asymmetrical `(` in `message` property of result of update sql statement #61

Closed xiangnanscu closed 7 years ago

xiangnanscu commented 7 years ago

Hello, When I query an statement like update user set username='bbbbbb' where id=2;, will get result like (as json){"insert_id":0,"server_status":2,"warning_count":0,"affected_rows":1,"message":"(Rows matched: 1 Changed: 0 Warnings: 0"}. As you see, the first character of message is (, which is a little wired. When in mysql client shell, it's like

Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
agentzh commented 7 years ago

@pronan Will you prepare a standalone and minimal test case for the existing test suite so that we can easily run and reproduce the problem on our side? Thanks!

xiangnanscu commented 7 years ago

@agentzh Hello, chun ge. Sorry I should do this when I report this. Both windows 10 and Ubuntu 14.04 are the same. Version Openresty 1.11.2.2

worker_processes  1;
user root root;

events {worker_connections  1024;}

http {

    access_log  logs/access.log;
    error_log  logs/error.log;

    client_body_temp_path tmp/client_body_temp;
    fastcgi_temp_path tmp/fastcgi_temp;
    proxy_temp_path tmp/proxy_temp;
    scgi_temp_path tmp/scgi_temp;
    uwsgi_temp_path tmp/uwsgi_temp;

    include mime.types;

    server {
        listen       8888;
        server_name  localhost;

        location / {
            content_by_lua_block {

local mysql_driver = require "resty.mysql"

local connect_table = { 
        host     = "127.0.0.1", 
        port     = 3306, 
        database = "test", 
        user     = 'root', 
        password = '', }
local connect_timeout = 1000
local idle_timeout = 10000
local pool_size = 50

local function query(statement, compact, rows)
    local db, res, ok, err, errno, sqlstate
    db, err = mysql_driver:new()
    if not db then
        return nil, err
    end
    db:set_timeout(connect_timeout) 
    res, err, errno, sqlstate = db:connect(connect_table)
    if not res then
        return nil, err, errno, sqlstate
    end
    db.compact = compact
    res, err, errno, sqlstate =  db:query(statement, rows)
    if res ~= nil then
        ok, err = db:set_keepalive(idle_timeout, pool_size)
        if not ok then
            return nil, 'fail to set_keepalive:'..err
        end
    end
    return res, err, errno, sqlstate
end

local statements = {
    'drop table if exists test_usr',
    'create table test_usr (name varchar(10))',
    'insert into test_usr values ("name1")',
    'update test_usr set name="foo"',
}

local res, err
for i, stm in ipairs(statements) do
    res, err = query(stm)
    if not res then
        return ngx.say(err)
    else

    end
end

ngx.say(res.message)

            }
        }

    }

}
xiangnanscu commented 7 years ago

@agentzh you will see (Rows matched: 1 Changed: 1 Warnings: 0 in the browser.

agentzh commented 7 years ago

@pronan Fixed in commit 79c4a377. Thanks for the report and test case!