提交 02629361 编写于 作者: R robot

Return records with seperated fields in lua connector.

Field names and values are both returned. Client application gets value by field name. It runs as convention except that bool type is returned as one byte,tiny integer. Bool type will be returned in future if tiny integer causes confusion.
上级 50f0d969
# TDengine driver connector for Lua # TDengine driver connector for Lua
It's a lua implementation for [TDengine](https://github.com/taosdata/TDengine), an open-sourced big data platform designed and optimized for the Internet of Things (IoT), Connected Cars, Industrial IoT, and IT Infrastructure and Application Monitoring. You may needs install Lua5.3 . It's a Lua implementation for [TDengine](https://github.com/taosdata/TDengine), an open-sourced big data platform designed and optimized for the Internet of Things (IoT), Connected Cars, Industrial IoT, and IT Infrastructure and Application Monitoring. You may need to install Lua5.3 .
## Dependencies ## Dependencies
- Lua: - Lua:
......
...@@ -22,7 +22,7 @@ static int l_connect(lua_State *L) ...@@ -22,7 +22,7 @@ static int l_connect(lua_State *L)
taos = taos_connect(host, user,password,database, port); taos = taos_connect(host, user,password,database, port);
if (taos == NULL) { if (taos == NULL) {
printf("failed to connect to server, reason:%s\n", taos_errstr(taos)); printf("failed to connect server, reason:%s\n", taos_errstr(taos));
lua_pushnumber(L, -1); lua_pushnumber(L, -1);
lua_setfield(L, table_index, "code"); lua_setfield(L, table_index, "code");
...@@ -30,7 +30,7 @@ static int l_connect(lua_State *L) ...@@ -30,7 +30,7 @@ static int l_connect(lua_State *L)
lua_setfield(L, table_index, "error"); lua_setfield(L, table_index, "error");
lua_pushlightuserdata(L,NULL); lua_pushlightuserdata(L,NULL);
}else{ }else{
printf("success to connect to server\n"); printf("success to connect server\n");
lua_pushnumber(L, 0); lua_pushnumber(L, 0);
lua_setfield(L, table_index, "code"); lua_setfield(L, table_index, "code");
lua_pushstring(L, taos_errstr(taos)); lua_pushstring(L, taos_errstr(taos));
...@@ -60,6 +60,7 @@ static int l_query(lua_State *L){ ...@@ -60,6 +60,7 @@ static int l_query(lua_State *L){
return 1; return 1;
}else{ }else{
//printf("success to query.\n");
result = taos_use_result(taos); result = taos_use_result(taos);
if (result == NULL) { if (result == NULL) {
...@@ -82,17 +83,61 @@ static int l_query(lua_State *L){ ...@@ -82,17 +83,61 @@ static int l_query(lua_State *L){
lua_newtable(L); lua_newtable(L);
while ((row = taos_fetch_row(result))) { while ((row = taos_fetch_row(result))) {
//printf("row index:%d\n",rows);
rows++; rows++;
taos_print_row(temp, row, fields, num_fields);
printf("%s\n", temp);
lua_pushnumber(L,rows); lua_pushnumber(L,rows);
lua_pushstring(L,temp); lua_newtable(L);
for (int i = 0; i < num_fields; ++i) {
if (row[i] == NULL) {
continue;
}
lua_pushstring(L,fields[i].name);
//printf("field name:%s,type:%d\n",fields[i].name,fields[i].type);
switch (fields[i].type) {
case TSDB_DATA_TYPE_TINYINT:
lua_pushinteger(L,*((char *)row[i]));
break;
case TSDB_DATA_TYPE_SMALLINT:
lua_pushinteger(L,*((short *)row[i]));
break;
case TSDB_DATA_TYPE_INT:
lua_pushinteger(L,*((int *)row[i]));
break;
case TSDB_DATA_TYPE_BIGINT:
lua_pushinteger(L,*((int64_t *)row[i]));
break;
case TSDB_DATA_TYPE_FLOAT:
lua_pushnumber(L,*((float *)row[i]));
break;
case TSDB_DATA_TYPE_DOUBLE:
lua_pushnumber(L,*((double *)row[i]));
break;
case TSDB_DATA_TYPE_BINARY:
case TSDB_DATA_TYPE_NCHAR:
lua_pushstring(L,(char *)row[i]);
break;
case TSDB_DATA_TYPE_TIMESTAMP:
lua_pushinteger(L,*((int64_t *)row[i]));
break;
case TSDB_DATA_TYPE_BOOL:
lua_pushinteger(L,*((char *)row[i]));
break;
default:
lua_pushnil(L);
break;
}
lua_settable(L,-3);
}
lua_settable(L,-3); lua_settable(L,-3);
} }
taos_free_result(result); taos_free_result(result);
} }
lua_setfield(L, table_index, "item"); lua_setfield(L, table_index, "item");
return 1; return 1;
} }
......
local mylib = require "luaconnector" local driver = require "luaconnector"
local host="127.0.0.1" local host="127.0.0.1"
local user="root" local user="root"
...@@ -7,7 +7,7 @@ local db =nil ...@@ -7,7 +7,7 @@ local db =nil
local port=6030 local port=6030
local conn local conn
local res = mylib.connect(host,user,password,db,port) local res = driver.connect(host,user,password,db,port)
if res.code ~=0 then if res.code ~=0 then
print(res.error) print(res.error)
return return
...@@ -15,33 +15,44 @@ else ...@@ -15,33 +15,44 @@ else
conn = res.conn conn = res.conn
end end
local res = mylib.query(conn,"drop database demo") local res = driver.query(conn,"drop database demo")
res = mylib.query(conn,"create database demo") res = driver.query(conn,"create database demo")
if res.code ~=0 then if res.code ~=0 then
print(res.error) print(res.error)
return return
end end
res = mylib.query(conn,"use demo") res = driver.query(conn,"use demo")
if res.code ~=0 then if res.code ~=0 then
print(res.error) print(res.error)
return return
end end
res = mylib.query(conn,"create table m1 (ts timestamp, speed int)") res = driver.query(conn,"create table m1 (ts timestamp, speed int,owner binary(20))")
if res.code ~=0 then if res.code ~=0 then
print(res.error) print(res.error)
return return
end end
res = mylib.query(conn,"insert into m1 values (1592222222223,3)") res = driver.query(conn,"insert into m1 values (1592222222222,0,'robotspace'), (1592222222223,1,'Hilink'),(1592222222224,2,'Harmony')")
if res.code ~=0 then
print(res.error)
return
end
res = mylib.query(conn,"select * from m1") res = driver.query(conn,"select * from m1")
if res.code ==0 then if res.code ~=0 then
print("select error:"..res.error)
return
else
print("in lua, result:") print("in lua, result:")
for i=1,#(res.item) do for i = 1, #(res.item) do
print(res.item[i]) print("timestamp:"..res.item[i].ts)
print("speed:"..res.item[i].speed)
print("owner:"..res.item[i].owner)
end end
end end
driver.close(conn)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册