类参考
本页将描述Lua类。
SqlEngine
SqlEngine类用于执行SQL语句和查询,以及调用提供以下方法的xSQL函数:
query()
执行SQL查询并返回游标。
query(sql, ...)
参数
- sql:一个SQL查询字符串,参数占位符为%b (bool), %s (string), %L (integer), %f (real)。
- ...:要替换的字符串参数的变化列表。
示例
engine:query("select * from Customer where id=%s", cust_id)
statement()
执行插入、更新、删除SQL语句,并返回受影响的行数。
statement(sql, ...)
参数
- sql:一个SQL查询字符串,参数占位符为%b (bool), %s (string), %L (integer), %f (real)。
- ...:要替换的字符串参数的变化列表。
示例
engine:statement("insert into Customer values (%s,%s,%s)",
"ABC123", "Honjuan Inc.", "Shengen, po.1234")
call
调用带有指定参数的函数,并返回函数的结果。
call(func,...)
参数
- func:使用%[b (bool), %s (string), %L (integer), %f (real)占位符作为参数的SQL语句。
- ...:要替换的字符串参数的变化列表
示例
engine:call("seq_avg",price)
close()
关闭当前会话。
close()
Cursor
Cursor 类表示数据库游标。它是作为 SqlEngine:method query() 方法的结果创建并返回的。Cursor 提供了以下方法:
moveNext()
将光标移至下一条记录。如果使用 Cursor:get*() 方法访问记录字段,此功能可替代 next() 函数。如果存在下一条记录则返回 true,否则返回 false。
next()
获取下一条记录。如果已到达结果集的末尾,则返回下一条记录或 nil 。
getColumnName( column )
获取结果列的名称。
参数:
- column:列的从零开始的列索引。
getColumnType( column )
获取结果列类型:它返回的列类型为:'void'(空)、'int'(整型)、'real'(实型)、'string'(字符串)、'bool'(布尔型)、'array'(数组)、'struct'(结构体)、'binary'(二进制)、'raw'(原始)、'sequence'(序列)
extract( dst, size )
从一个 C 结构体(使用 FFI 创建)中提取记录。
参数:
- dst:使用 ffi.new 创建的结构体的地址。
- size:结构体的大小(ffi.sizeof)。
getInt( column )
获取一个整数列的值。
参数:
- column:列的从零开始的列索引。
示例:
local i0 = cursor:getInt(0)
getReal( column )
获取一个浮点数列的值。
参数:
- column:列的从零开始的列索引。
示例:
local r0 = cursor:getReal(0)
getString( column )
获取字符串列的值。
参数:
- column:列的从零开始的列索引。
getBinary( column )
获取一个二进制列的值。
参数:
- column:列的从零开始的列索引。
get( column )
获取列值。
参数:
- column:列的从零开始的列索引。
getSequence( column )
获取序列列值。它返回一个原始序列,该序列可传递给 xSQL 序列函数,或者使用 Sequence.iterator 函数转换为序列迭代器。
参数:
- column:列的从零开始的列索引。
getBool( column )
获取布尔型列的值。
参数:
- column:列的从零开始的列索引。
示例:
local b0 = cursor:getBool(0)
numberOfColumns()
获取结果集中的列数。
getRow()
获取当前记录作为Lua表。
close()
关闭游标。
reset()
关闭游标。
lazy()
Setup a cursor to lazily extract columns. When lazy columns extraction is active, the cursor will extract only columns which are requested by the program (UDF or script). Columns that are not specified, will not be extracted. Lazy extraction will speed up execution.
示例:
for t in con:query("select * from eqtrade"):lazy():tuples() do
if t.price >= 10 then
acc.sum_size = (acc.sum_size or 0) + t.size
acc.sum_price = (acc.sum_price or 0) + t.price
count = count + 1
end
end