未验证 提交 005294f3 编写于 作者: S slguan 提交者: GitHub

Merge pull request #273 from robotspace/master

Add example implementation for lua connector.
# 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 .
## Dependencies
- Lua:
```
https://www.lua.org/
```
## Run with Sample
Build driver lib:
```
./build.sh
```
Run lua sample:
```
lua test.lua
```
gcc lua_connector.c -fPIC -shared -o luaconnector.so -Wall -ltaos
#include <stdio.h>
#include <math.h>
#include <stdarg.h>
#include <stdlib.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
#include <taos.h>
static int l_connect(lua_State *L)
{
TAOS * taos;
char *host = lua_tostring(L, 1);
char *user = lua_tostring(L, 2);
char *password = lua_tostring(L, 3);
char *database = lua_tostring(L, 4);
int port =luaL_checknumber(L, 5);
taos_init();
lua_newtable(L);
int table_index = lua_gettop(L);
taos = taos_connect(host, user,password,database, port);
if (taos == NULL) {
printf("failed to connect to server, reason:%s\n", taos_errstr(taos));
lua_pushnumber(L, -1);
lua_setfield(L, table_index, "code");
lua_pushstring(L, taos_errstr(taos));
lua_setfield(L, table_index, "error");
lua_pushlightuserdata(L,NULL);
}else{
printf("success to connect to server\n");
lua_pushnumber(L, 0);
lua_setfield(L, table_index, "code");
lua_pushstring(L, taos_errstr(taos));
lua_setfield(L, table_index, "error");
lua_pushlightuserdata(L,taos);
lua_setfield(L, table_index, "conn");
}
return 1;
}
static int l_query(lua_State *L){
TAOS * taos= lua_topointer(L,1);
char *s = lua_tostring(L, 2);
TAOS_RES *result;
lua_newtable(L);
int table_index = lua_gettop(L);
printf("receive command:%s\r\n",s);
if(taos_query(taos, s)!=0){
printf("failed, reason:%s\n", taos_errstr(taos));
lua_pushnumber(L, -1);
lua_setfield(L, table_index, "code");
lua_pushstring(L, taos_errstr(taos));
lua_setfield(L, table_index, "error");
return 1;
}else{
result = taos_use_result(taos);
if (result == NULL) {
printf("failed to get result, reason:%s\n", taos_errstr(taos));
lua_pushnumber(L, -2);
lua_setfield(L, table_index, "code");
lua_pushstring(L, taos_errstr(taos));
lua_setfield(L, table_index, "error");
return 1;
}
TAOS_ROW row;
int rows = 0;
int num_fields = taos_field_count(taos);
TAOS_FIELD *fields = taos_fetch_fields(result);
char temp[256];
lua_pushnumber(L, 0);
lua_setfield(L, table_index, "code");
lua_newtable(L);
while ((row = taos_fetch_row(result))) {
rows++;
taos_print_row(temp, row, fields, num_fields);
printf("%s\n", temp);
lua_pushnumber(L,rows);
lua_pushstring(L,temp);
lua_settable(L,-3);
}
taos_free_result(result);
}
lua_setfield(L, table_index, "item");
return 1;
}
static int l_close(lua_State *L){
TAOS * taos= lua_topointer(L,1);
lua_newtable(L);
int table_index = lua_gettop(L);
if(taos == NULL){
lua_pushnumber(L, -1);
lua_setfield(L, table_index, "code");
lua_pushstring(L, "null pointer.");
lua_setfield(L, table_index, "error");
}else{
taos_close(taos);
lua_pushnumber(L, 0);
lua_setfield(L, table_index, "code");
lua_pushstring(L, "done.");
lua_setfield(L, table_index, "error");
}
return 1;
}
static const struct luaL_Reg lib[] = {
{"connect", l_connect},
{"query", l_query},
{"close", l_close},
{NULL, NULL}
};
extern int luaopen_luaconnector(lua_State* L)
{
luaL_newlib(L, lib);
return 1;
}
local mylib = require "luaconnector"
local host="127.0.0.1"
local user="root"
local password="taosdata"
local db =nil
local port=6030
local conn
local res = mylib.connect(host,user,password,db,port)
if res.code ~=0 then
print(res.error)
return
else
conn = res.conn
end
local res = mylib.query(conn,"drop database demo")
res = mylib.query(conn,"create database demo")
if res.code ~=0 then
print(res.error)
return
end
res = mylib.query(conn,"use demo")
if res.code ~=0 then
print(res.error)
return
end
res = mylib.query(conn,"create table m1 (ts timestamp, speed int)")
if res.code ~=0 then
print(res.error)
return
end
res = mylib.query(conn,"insert into m1 values (1592222222223,3)")
res = mylib.query(conn,"select * from m1")
if res.code ==0 then
print("in lua, result:")
for i=1,#(res.item) do
print(res.item[i])
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册