mirror of
https://github.com/luapower/mysql.git
synced 2025-02-08 16:20:31 +01:00
unimportant
This commit is contained in:
parent
7196fc9a77
commit
e4f81f4918
@ -482,18 +482,6 @@ function mysql.isconn(x)
|
|||||||
return getmetatable(x) == conn_mt
|
return getmetatable(x) == conn_mt
|
||||||
end
|
end
|
||||||
|
|
||||||
local default_to_lua = {
|
|
||||||
tinyint = tonumber,
|
|
||||||
smallint = tonumber,
|
|
||||||
mediumint = tonumber,
|
|
||||||
int = tonumber,
|
|
||||||
bigint = tonumber,
|
|
||||||
year = tonumber,
|
|
||||||
float = tonumber,
|
|
||||||
double = tonumber,
|
|
||||||
decimal = tonumber,
|
|
||||||
}
|
|
||||||
|
|
||||||
local function return_arg1(v) return v end
|
local function return_arg1(v) return v end
|
||||||
|
|
||||||
assert(ffi.abi'le')
|
assert(ffi.abi'le')
|
||||||
@ -898,7 +886,8 @@ end
|
|||||||
|
|
||||||
--NOTE: MySQL doesn't give enough metadata to generate a form in a UI,
|
--NOTE: MySQL doesn't give enough metadata to generate a form in a UI,
|
||||||
--you'll have to query `information_schema` to get the rest like enum values
|
--you'll have to query `information_schema` to get the rest like enum values
|
||||||
--and defaults. So we gather only what we need for display, not for editing.
|
--and defaults. So we gather only what we need for display and for encoding
|
||||||
|
--params and decoding values in binary form, but not for editing.
|
||||||
local function get_field_packet(buf)
|
local function get_field_packet(buf)
|
||||||
local col = {}
|
local col = {}
|
||||||
local _ = get_name(buf) --always "def"
|
local _ = get_name(buf) --always "def"
|
||||||
@ -926,7 +915,8 @@ local function get_field_packet(buf)
|
|||||||
col.decimals = 0
|
col.decimals = 0
|
||||||
col.unsigned = unsigned
|
col.unsigned = unsigned
|
||||||
elseif mysql_type == 'decimal' then
|
elseif mysql_type == 'decimal' then
|
||||||
col.type = 'number'
|
local digits = display_size - (unsigned and 1 or 2)
|
||||||
|
col.type = digits > 15 and 'decimal' or 'number'
|
||||||
col.decimals = decimals
|
col.decimals = decimals
|
||||||
col.unsigned = unsigned
|
col.unsigned = unsigned
|
||||||
elseif mysql_type == 'float' then
|
elseif mysql_type == 'float' then
|
||||||
@ -948,6 +938,7 @@ local function get_field_packet(buf)
|
|||||||
end
|
end
|
||||||
col.display_width = display_size
|
col.display_width = display_size
|
||||||
else
|
else
|
||||||
|
col.type = 'text'
|
||||||
mysql_type = text_types[buf_type] or buf_type
|
mysql_type = text_types[buf_type] or buf_type
|
||||||
local collation = collation_names[collation]
|
local collation = collation_names[collation]
|
||||||
local charset = collation and collation:match'^[^_]+'
|
local charset = collation and collation:match'^[^_]+'
|
||||||
@ -975,7 +966,7 @@ local function recv_field_packets(self, field_count, field_attrs, to_lua)
|
|||||||
local typ, buf = recv_packet(self)
|
local typ, buf = recv_packet(self)
|
||||||
checkp(self, typ == 'DATA', 'bad packet type')
|
checkp(self, typ == 'DATA', 'bad packet type')
|
||||||
local field = get_field_packet(buf)
|
local field = get_field_packet(buf)
|
||||||
field.to_lua = to_lua or default_to_lua[field.mysql_type]
|
field.to_lua = to_lua or (field.type == 'number' and tonumber or nil)
|
||||||
field.index = i
|
field.index = i
|
||||||
fields[i] = field
|
fields[i] = field
|
||||||
fields[field.name] = field
|
fields[field.name] = field
|
||||||
@ -1126,6 +1117,10 @@ function conn:close()
|
|||||||
end
|
end
|
||||||
conn.close = protect(conn.close)
|
conn.close = protect(conn.close)
|
||||||
|
|
||||||
|
function conn:closed()
|
||||||
|
return not self.state
|
||||||
|
end
|
||||||
|
|
||||||
local function send_query(self, query)
|
local function send_query(self, query)
|
||||||
mysql.dbg('query', '%s', query)
|
mysql.dbg('query', '%s', query)
|
||||||
assert(self.state == 'ready')
|
assert(self.state == 'ready')
|
||||||
@ -1228,6 +1223,10 @@ local function read_result(self, opt)
|
|||||||
else
|
else
|
||||||
checkp(self, false, 'unsupported param type %s', bt)
|
checkp(self, false, 'unsupported param type %s', bt)
|
||||||
end
|
end
|
||||||
|
local to_lua = col.to_lua
|
||||||
|
if to_lua then
|
||||||
|
v = to_lua(v)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
v = null_value
|
v = null_value
|
||||||
end
|
end
|
||||||
@ -1245,7 +1244,7 @@ local function read_result(self, opt)
|
|||||||
if v ~= nil then
|
if v ~= nil then
|
||||||
local to_lua = col.to_lua
|
local to_lua = col.to_lua
|
||||||
if to_lua then
|
if to_lua then
|
||||||
v = to_lua(v, col)
|
v = to_lua(v)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
v = null_value
|
v = null_value
|
||||||
|
@ -61,12 +61,16 @@ The `options` argument is a Lua table holding the following keys:
|
|||||||
"ssl disabled on server" is returned.
|
"ssl disabled on server" is returned.
|
||||||
* `ssl_verify`: if `true`, then verifies the validity of the server SSL
|
* `ssl_verify`: if `true`, then verifies the validity of the server SSL
|
||||||
certificate (default is `false`).
|
certificate (default is `false`).
|
||||||
* `to_lua = f(v, col) -> v` -- custom value converter (defaults to `mysql.to_lua`).
|
* `to_lua = f(v) -> v` -- custom value converter (defaults to `mysql.to_lua`).
|
||||||
|
|
||||||
### `cn:close() -> 1 | nil,err`
|
### `cn:close() -> true | nil,err`
|
||||||
|
|
||||||
Closes the current mysql connection and returns the status.
|
Closes the current mysql connection and returns the status.
|
||||||
|
|
||||||
|
### `cn:closed() -> true | false`
|
||||||
|
|
||||||
|
Check if the connection was closed.
|
||||||
|
|
||||||
### `cn:send_query(query) -> bytes | nil,err`
|
### `cn:send_query(query) -> bytes | nil,err`
|
||||||
|
|
||||||
Sends the query to the remote MySQL server without waiting for its replies.
|
Sends the query to the remote MySQL server without waiting for its replies.
|
||||||
@ -79,10 +83,14 @@ Reads in the next result set returned from the server.
|
|||||||
|
|
||||||
The `options` arg can contain:
|
The `options` arg can contain:
|
||||||
|
|
||||||
* `compact = true` -- return an array of arrays instead of an array of `{column->value}` maps.
|
* `compact = true` -- return an array of arrays instead of an array
|
||||||
|
of `{column->value}` maps
|
||||||
|
* __NOTE__: unless you set `null_value`, the rows in compact mode will
|
||||||
|
be sparse arrays so `ipairs(row)` and `#row` won't work on them
|
||||||
|
(but `#cols` will).
|
||||||
* `to_array = true` -- return an array of values for single-column results.
|
* `to_array = true` -- return an array of values for single-column results.
|
||||||
* `null_value = val` -- value to use for `null` (defaults to `nil`).
|
* `null_value = val` -- value to use for `null` (defaults to `nil`).
|
||||||
* `to_lua = f(v, col) -> v` -- custom value converter.
|
* `to_lua = f(v) -> v` -- custom value converter (defaults to `cn.to_lua`).
|
||||||
* `field_attrs = {name -> attr}` -- extra field attributes.
|
* `field_attrs = {name -> attr}` -- extra field attributes.
|
||||||
|
|
||||||
For queries that return a result set, it returns an array of rows.
|
For queries that return a result set, it returns an array of rows.
|
||||||
@ -102,10 +110,11 @@ the `sqlstate` return value contains the standard SQL error code that consists
|
|||||||
of 5 characters. Note that, the `errcode` and `sqlstate` might be `nil`
|
of 5 characters. Note that, the `errcode` and `sqlstate` might be `nil`
|
||||||
if MySQL does not return them.
|
if MySQL does not return them.
|
||||||
|
|
||||||
__NOTE:__ decimals and 64 bit integers are converted to Lua numbers by default.
|
__NOTE:__ Decimals with up to 15 digits of precision and 64 bit integers
|
||||||
That limits the useful range of number types to 15 significant digits.
|
are converted to Lua numbers by default. That limits the useful range of
|
||||||
If you have other needs, provide your own `to_lua` (which you can set at
|
integer types to 15 significant digits. If you have other needs, provide
|
||||||
module, connection and query level, and even per field with `field_attrs`).
|
your own `to_lua` (which you can set atmodule, connection and query level,
|
||||||
|
and even per field with `field_attrs`).
|
||||||
|
|
||||||
### `cn:query(query, [options]) -> res,nil,cols | nil,err,errcode,sqlstate`
|
### `cn:query(query, [options]) -> res,nil,cols | nil,err,errcode,sqlstate`
|
||||||
|
|
||||||
|
@ -99,7 +99,9 @@ sock.run(function()
|
|||||||
local spp = require'sqlpp'.new()
|
local spp = require'sqlpp'.new()
|
||||||
require'sqlpp_mysql'
|
require'sqlpp_mysql'
|
||||||
spp.import'mysql'
|
spp.import'mysql'
|
||||||
|
|
||||||
local cn = spp.connect(conn)
|
local cn = spp.connect(conn)
|
||||||
|
|
||||||
local rows, cols = cn:query({get_table_defs=1}, 'select * from test')
|
local rows, cols = cn:query({get_table_defs=1}, 'select * from test')
|
||||||
print()
|
print()
|
||||||
pr(cols, {
|
pr(cols, {
|
||||||
@ -119,11 +121,16 @@ sock.run(function()
|
|||||||
'padded',
|
'padded',
|
||||||
'enum_values',
|
'enum_values',
|
||||||
'default',
|
'default',
|
||||||
|
'mysql_default',
|
||||||
'mysql_display_charset',
|
'mysql_display_charset',
|
||||||
'mysql_display_collation',
|
'mysql_display_collation',
|
||||||
'mysql_buffer_type',
|
'mysql_buffer_type',
|
||||||
})
|
})
|
||||||
--cn:close()
|
|
||||||
|
pp(rows)
|
||||||
|
|
||||||
|
cn:close()
|
||||||
|
assert(conn:closed())
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user