Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
524abe35
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
524abe35
编写于
12月 28, 2021
作者:
C
Cary Xu
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' of github.com:taosdata/TDengine into develop
上级
efaaad27
4a63f359
变更
45
展开全部
隐藏空白更改
内联
并排
Showing
45 changed file
with
6163 addition
and
33 deletion
+6163
-33
cmake/version.inc
cmake/version.inc
+1
-1
snap/snapcraft.yaml
snap/snapcraft.yaml
+1
-1
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+1
-1
src/connector/node-red-contrib-tdengine/.gitignore
src/connector/node-red-contrib-tdengine/.gitignore
+1
-0
src/connector/node-red-contrib-tdengine/README.md
src/connector/node-red-contrib-tdengine/README.md
+36
-0
src/connector/node-red-contrib-tdengine/demo/EditTestSQL.png
src/connector/node-red-contrib-tdengine/demo/EditTestSQL.png
+0
-0
src/connector/node-red-contrib-tdengine/demo/ImportFlow.png
src/connector/node-red-contrib-tdengine/demo/ImportFlow.png
+0
-0
src/connector/node-red-contrib-tdengine/demo/InstallTDEngineNode.png
...or/node-red-contrib-tdengine/demo/InstallTDEngineNode.png
+0
-0
src/connector/node-red-contrib-tdengine/demo/ModifyServerConfig.png
...tor/node-red-contrib-tdengine/demo/ModifyServerConfig.png
+0
-0
src/connector/node-red-contrib-tdengine/demo/flow.json
src/connector/node-red-contrib-tdengine/demo/flow.json
+85
-0
src/connector/node-red-contrib-tdengine/package-lock.json
src/connector/node-red-contrib-tdengine/package-lock.json
+3683
-0
src/connector/node-red-contrib-tdengine/package.json
src/connector/node-red-contrib-tdengine/package.json
+29
-0
src/connector/node-red-contrib-tdengine/tdengine.html
src/connector/node-red-contrib-tdengine/tdengine.html
+89
-0
src/connector/node-red-contrib-tdengine/tdengine.js
src/connector/node-red-contrib-tdengine/tdengine.js
+71
-0
src/kit/shell/src/shellEngine.c
src/kit/shell/src/shellEngine.c
+22
-2
src/util/src/tlosertree.c
src/util/src/tlosertree.c
+6
-1
tests/develop-test/0-others/TD-12435.py
tests/develop-test/0-others/TD-12435.py
+49
-0
tests/develop-test/3-connectors/go/test.sh
tests/develop-test/3-connectors/go/test.sh
+3
-0
tests/develop-test/fulltest-others.sh
tests/develop-test/fulltest-others.sh
+2
-1
tests/examples/JDBC/taosdemo/src/main/resources/insert.json
tests/examples/JDBC/taosdemo/src/main/resources/insert.json
+1
-1
tests/pytest/dockerCluster/insert.json
tests/pytest/dockerCluster/insert.json
+1
-1
tests/pytest/manualTest/TD-5114/insertDataDb3Replica2.json
tests/pytest/manualTest/TD-5114/insertDataDb3Replica2.json
+1
-1
tests/pytest/query/nestedQuery/insertData.json
tests/pytest/query/nestedQuery/insertData.json
+1
-1
tests/pytest/tsdb/insertDataDb1.json
tests/pytest/tsdb/insertDataDb1.json
+1
-1
tests/pytest/tsdb/insertDataDb1Replica2.json
tests/pytest/tsdb/insertDataDb1Replica2.json
+1
-1
tests/pytest/tsdb/insertDataDb2.json
tests/pytest/tsdb/insertDataDb2.json
+1
-1
tests/pytest/tsdb/insertDataDb2Newstab.json
tests/pytest/tsdb/insertDataDb2Newstab.json
+1
-1
tests/pytest/tsdb/insertDataDb2NewstabReplica2.json
tests/pytest/tsdb/insertDataDb2NewstabReplica2.json
+1
-1
tests/pytest/tsdb/insertDataDb2Replica2.json
tests/pytest/tsdb/insertDataDb2Replica2.json
+1
-1
tests/pytest/wal/insertDataDb1.json
tests/pytest/wal/insertDataDb1.json
+1
-1
tests/pytest/wal/insertDataDb1Replica2.json
tests/pytest/wal/insertDataDb1Replica2.json
+1
-1
tests/pytest/wal/insertDataDb2.json
tests/pytest/wal/insertDataDb2.json
+1
-1
tests/pytest/wal/insertDataDb2Newstab.json
tests/pytest/wal/insertDataDb2Newstab.json
+1
-1
tests/pytest/wal/insertDataDb2NewstabReplica2.json
tests/pytest/wal/insertDataDb2NewstabReplica2.json
+1
-1
tests/pytest/wal/insertDataDb2Replica2.json
tests/pytest/wal/insertDataDb2Replica2.json
+1
-1
tests/system-test/3-connectors/c#/TDengineDriver/TDengineDriver.cs
...tem-test/3-connectors/c#/TDengineDriver/TDengineDriver.cs
+405
-0
tests/system-test/3-connectors/c#/TDengineDriver/TDengineDriver.csproj
...test/3-connectors/c#/TDengineDriver/TDengineDriver.csproj
+7
-0
tests/system-test/3-connectors/c#/TDengineDriver/TaosBind.cs
tests/system-test/3-connectors/c#/TDengineDriver/TaosBind.cs
+336
-0
tests/system-test/3-connectors/c#/TDengineDriver/TaosMultiBind.cs
...stem-test/3-connectors/c#/TDengineDriver/TaosMultiBind.cs
+629
-0
tests/system-test/3-connectors/c#/stmtfunction/stmtfunction.cs
.../system-test/3-connectors/c#/stmtfunction/stmtfunction.cs
+668
-0
tests/system-test/3-connectors/c#/stmtfunction/stmtfunction.csproj
...tem-test/3-connectors/c#/stmtfunction/stmtfunction.csproj
+14
-0
tests/system-test/3-connectors/c#/test.sh
tests/system-test/3-connectors/c#/test.sh
+3
-0
tests/system-test/3-connectors/go/test.sh
tests/system-test/3-connectors/go/test.sh
+0
-1
tests/test-CI.sh
tests/test-CI.sh
+1
-3
tests/test-all.sh
tests/test-all.sh
+5
-6
未找到文件。
cmake/version.inc
浏览文件 @
524abe35
...
...
@@ -4,7 +4,7 @@ PROJECT(TDengine)
IF
(
DEFINED
VERNUMBER
)
SET
(
TD_VER_NUMBER
$
{
VERNUMBER
})
ELSE
()
SET
(
TD_VER_NUMBER
"2.
3.2
.0"
)
SET
(
TD_VER_NUMBER
"2.
4.0
.0"
)
ENDIF
()
IF
(
DEFINED
VERCOMPATIBLE
)
...
...
snap/snapcraft.yaml
浏览文件 @
524abe35
name
:
tdengine
base
:
core20
version
:
'
2.
3.2
.0'
version
:
'
2.
4.0
.0'
icon
:
snap/gui/t-dengine.svg
summary
:
an open-source big data platform designed and optimized for IoT.
description
:
|
...
...
src/client/src/tscSQLParser.c
浏览文件 @
524abe35
...
...
@@ -6090,7 +6090,7 @@ int32_t getTimeRange(STimeWindow* win, tSqlExpr* pRight, int32_t optr, int16_t t
// todo error !!!!
int32_t
tsRewriteFieldNameIfNecessary
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
)
{
const
char
rep
[]
=
{
'('
,
')'
,
'*'
,
','
,
'.'
,
'/'
,
'\\'
,
'+'
,
'-'
,
'%'
,
' '
};
const
char
rep
[]
=
{
'('
,
')'
,
'*'
,
','
,
'.'
,
'/'
,
'\\'
,
'+'
,
'-'
,
'%'
,
' '
,
'`'
};
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
fieldsInfo
.
numOfOutput
;
++
i
)
{
char
*
fieldName
=
tscFieldInfoGetField
(
&
pQueryInfo
->
fieldsInfo
,
i
)
->
name
;
...
...
src/connector/node-red-contrib-tdengine/.gitignore
0 → 100644
浏览文件 @
524abe35
node_modules
\ No newline at end of file
src/connector/node-red-contrib-tdengine/README.md
0 → 100644
浏览文件 @
524abe35
This repositry create a custom Node-Red node for configing TDEngine server connection and execute SQL from preview node msg.payload
## Design
Use Taos data restful API to commit SQL, API call like
```
curl -H 'Authorization: Basic <TOKEN>' -d '<SQL>' <ip>:<PORT>/rest/sql/[db_name]
```
Input options:
*
DB Server: Setup server connection or select a exist server
*
DB Name: Database to execute SQL
Use
[
axios
](
https://axios-http.com/
)
to call http request
## Usage
1.
Start Node-Red
2.
Install TDEngine node
3.
Add "taos query" node to workspace from palette
4.
Setup a TDEngine server and database name
5.
Add function or other node to create SQL, put SQL into msg.payload
6.
Link to "taos query" node
### Demo
1.
Start Node-Red by docker
```
docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
```
2.
Import sample flow "demo/flow.json"
![
import-flow
](
demo/ImportFlow.png
)
3.
Install TDEngine node by name "node-red-contrib-tdengine", current version is 0.0.2
![
alt
](
demo/InstallTDEngineNode.png
)
4.
Modify your TDEngine server config
![
alt
](
demo/ModifyServerConfig.png
)
5.
Edit test SQL
![
alt
](
demo/EditTestSQL.png
)
6.
Start flow by click Inject node
src/connector/node-red-contrib-tdengine/demo/EditTestSQL.png
0 → 100644
浏览文件 @
524abe35
282.1 KB
src/connector/node-red-contrib-tdengine/demo/ImportFlow.png
0 → 100644
浏览文件 @
524abe35
312.6 KB
src/connector/node-red-contrib-tdengine/demo/InstallTDEngineNode.png
0 → 100644
浏览文件 @
524abe35
62.3 KB
src/connector/node-red-contrib-tdengine/demo/ModifyServerConfig.png
0 → 100644
浏览文件 @
524abe35
293.7 KB
src/connector/node-red-contrib-tdengine/demo/flow.json
0 → 100644
浏览文件 @
524abe35
[
{
"id"
:
"01ad89bea2c249f6"
,
"type"
:
"tab"
,
"label"
:
"流程 1"
,
"disabled"
:
false
,
"info"
:
""
,
"env"
:
[
{
"name"
:
"test"
,
"value"
:
"abc"
,
"type"
:
"str"
},
{
"name"
:
"path"
,
"value"
:
"{
\"
codes
\"
:
\"
/usr/local/processing/codes
\"
,
\"
parameters
\"
:
\"
/usr/local/processing/parameters
\"
}"
,
"type"
:
"json"
}
]
},
{
"id"
:
"0ab8aa0c7f1b7522"
,
"type"
:
"taos-query"
,
"z"
:
"01ad89bea2c249f6"
,
"server"
:
"e385222cd91994dc"
,
"database"
:
"demo"
,
"x"
:
780
,
"y"
:
400
,
"wires"
:
[
[
"f9c4f70dc2d79548"
]
]
},
{
"id"
:
"ba09b80a40b65780"
,
"type"
:
"inject"
,
"z"
:
"01ad89bea2c249f6"
,
"name"
:
""
,
"props"
:
[
{
"p"
:
"payload"
}
],
"repeat"
:
""
,
"crontab"
:
""
,
"once"
:
false
,
"onceDelay"
:
0.1
,
"topic"
:
""
,
"payload"
:
"INSERT INTO t VALUES (NOW, 23)"
,
"payloadType"
:
"str"
,
"x"
:
490
,
"y"
:
400
,
"wires"
:
[
[
"0ab8aa0c7f1b7522"
]
]
},
{
"id"
:
"f9c4f70dc2d79548"
,
"type"
:
"debug"
,
"z"
:
"01ad89bea2c249f6"
,
"name"
:
""
,
"active"
:
true
,
"tosidebar"
:
true
,
"console"
:
false
,
"tostatus"
:
false
,
"complete"
:
"payload"
,
"targetType"
:
"msg"
,
"statusVal"
:
""
,
"statusType"
:
"auto"
,
"x"
:
1050
,
"y"
:
400
,
"wires"
:
[]
},
{
"id"
:
"e385222cd91994dc"
,
"type"
:
"taos-config"
,
"host"
:
"localhost"
,
"port"
:
"6030"
,
"username"
:
"root"
,
"password"
:
"taosdata"
}
]
\ No newline at end of file
src/connector/node-red-contrib-tdengine/package-lock.json
0 → 100644
浏览文件 @
524abe35
此差异已折叠。
点击以展开。
src/connector/node-red-contrib-tdengine/package.json
0 → 100644
浏览文件 @
524abe35
{
"name"
:
"node-red-contrib-tdengine"
,
"version"
:
"0.0.2"
,
"description"
:
""
,
"main"
:
"tdengine.js"
,
"repository"
:
{
"type"
:
"git"
,
"url"
:
"git+https://github.com/kevinpan45/node-red-contrib-tdengine.git"
},
"author"
:
"kevinpan45@163.com"
,
"license"
:
"ISC"
,
"dependencies"
:
{
"axios"
:
"^0.24.0"
,
"mocha"
:
"^9.1.3"
},
"node-red"
:
{
"nodes"
:
{
"tdengine"
:
"tdengine.js"
}
},
"keywords"
:
[
"node-red"
,
"tdengine"
],
"devDependencies"
:
{
"node-red"
:
"^2.1.4"
,
"node-red-node-test-helper"
:
"^0.2.7"
}
}
src/connector/node-red-contrib-tdengine/tdengine.html
0 → 100644
浏览文件 @
524abe35
<script
type=
"text/javascript"
>
"
use strict
"
;
/*global RED*/
RED
.
nodes
.
registerType
(
'
taos-config
'
,
{
category
:
'
config
'
,
defaults
:
{
host
:
{
value
:
"
localhost
"
,
required
:
true
},
port
:
{
value
:
"
6030
"
,
required
:
true
},
username
:
{
value
:
""
,
required
:
false
},
password
:
{
value
:
""
,
required
:
false
}
},
label
:
function
()
{
return
this
.
host
||
"
TDEngine host
"
;
}
});
</script>
<script
type=
"text/x-red"
data-template-name=
"taos-config"
>
<
div
class
=
"
form-row
"
>
<
label
for
=
"
node-config-input-host
"
><
i
class
=
"
fa fa-server
"
><
/i> Host</
label
>
<
input
type
=
"
text
"
id
=
"
node-config-input-host
"
>
<
/div
>
<
div
class
=
"
form-row
"
>
<
label
for
=
"
node-config-input-port
"
><
i
class
=
"
fa fa-server
"
><
/i> Port</
label
>
<
input
type
=
"
text
"
id
=
"
node-config-input-port
"
>
<
/div
>
<
div
class
=
"
form-row
"
>
<
label
for
=
"
node-config-input-username
"
><
i
class
=
"
fa fa-server
"
><
/i> User Name</
label
>
<
input
type
=
"
text
"
id
=
"
node-config-input-username
"
>
<
/div
>
<
div
class
=
"
form-row
"
>
<
label
for
=
"
node-config-input-password
"
><
i
class
=
"
fa fa-server
"
><
/i> Password</
label
>
<
input
type
=
"
text
"
id
=
"
node-config-input-password
"
>
<
/div
>
</script>
<script
type=
"text/javascript"
>
/*global RED*/
RED
.
nodes
.
registerType
(
'
taos-query
'
,
{
category
:
'
TDEngine
'
,
inputs
:
1
,
outputs
:
1
,
color
:
"
#ffffff
"
,
paletteLabel
:
"
taos query
"
,
defaults
:
{
server
:
{
value
:
""
,
type
:
"
taos-config
"
},
database
:
{
value
:
""
},
sql
:
{
value
:
""
}
},
label
:
function
()
{
return
this
.
name
||
"
taos
"
+
this
.
database
;
}
});
</script>
<script
type=
"text/x-red"
data-template-name=
"taos-query"
>
<
div
class
=
"
form-row
"
>
<
label
for
=
"
node-input-server
"
><
i
class
=
"
fa fa-globe
"
><
/i> Server</
label
>
<
input
type
=
"
text
"
id
=
"
node-input-server
"
placeholder
=
"
Server
"
>
<
/div
>
<
div
class
=
"
form-row
"
>
<
label
for
=
"
node-input-database
"
><
i
class
=
"
fa fa-tag
"
><
/i> Database</
label
>
<
input
type
=
"
text
"
id
=
"
node-input-database
"
placeholder
=
"
Database
"
>
<
/div
>
</script>
<script
type=
"text/x-red"
data-help-name=
"taos-query"
>
<
p
>
TDEngine
Query
<
/p
>
<
p
>
Execute
SQL
on
remote
TDEngine
server
by
restful
API
<
/p
>
</script>
\ No newline at end of file
src/connector/node-red-contrib-tdengine/tdengine.js
0 → 100644
浏览文件 @
524abe35
module
.
exports
=
function
(
RED
)
{
"
use strict
"
;
const
axios
=
require
(
'
axios
'
);
function
TaosConfig
(
n
)
{
RED
.
nodes
.
createNode
(
this
,
n
);
this
.
host
=
n
.
host
;
this
.
port
=
n
.
port
;
this
.
username
=
n
.
username
;
this
.
password
=
n
.
password
;
}
RED
.
nodes
.
registerType
(
"
taos-config
"
,
TaosConfig
);
function
TaosQuery
(
n
)
{
RED
.
nodes
.
createNode
(
this
,
n
);
this
.
server
=
RED
.
nodes
.
getNode
(
n
.
server
);
this
.
database
=
n
.
database
;
var
node
=
this
;
node
.
on
(
"
close
"
,
function
(
done
)
{
node
.
status
({});
client
=
null
;
done
();
});
node
.
on
(
"
input
"
,
async
function
(
msg
,
send
,
done
)
{
send
=
send
||
function
()
{
node
.
send
.
apply
(
node
,
arguments
)
}
done
=
done
||
function
(
err
)
{
if
(
err
)
node
.
error
(
err
,
msg
);
}
let
sql
=
msg
.
payload
;
if
(
!
msg
.
payload
||
msg
.
payload
==
""
)
{
throw
new
Error
(
"
Execute SQL must be set.
"
);
}
try
{
msg
.
payload
=
await
query
(
this
.
server
,
sql
);
send
(
msg
);
done
();
}
catch
(
error
)
{
done
(
error
);
}
});
}
RED
.
nodes
.
registerType
(
"
taos-query
"
,
TaosQuery
);
function
query
(
server
,
sql
)
{
console
.
log
(
"
Start to execute SQL :
"
+
sql
);
let
url
=
generateUrl
(
server
);
return
axios
.
post
(
url
,
sql
,
{
headers
:
{
'
Authorization
'
:
token
(
server
)
}
}).
then
(
function
(
response
)
{
console
.
log
(
'
Get http response from taos :
'
+
response
.
data
.
data
);
return
response
.
data
.
data
;
}).
catch
(
function
(
error
)
{
console
.
error
(
"
Request Failed
"
+
e
);
throw
new
Error
(
response
.
desc
);
});
}
function
generateUrl
(
server
)
{
return
"
http://
"
+
server
.
host
+
"
:
"
+
server
.
port
+
'
/rest/sql
'
;
}
function
token
(
server
)
{
return
'
Basic
'
+
Buffer
.
from
(
server
.
username
+
"
:
"
+
server
.
password
).
toString
(
'
base64
'
)
}
};
src/kit/shell/src/shellEngine.c
浏览文件 @
524abe35
...
...
@@ -448,9 +448,29 @@ static char* formatTimestamp(char* buf, int64_t val, int precision) {
tt = 0;
}
*/
#ifdef WINDOWS
if
(
tt
<
0
)
tt
=
0
;
if
(
tt
<
0
)
{
SYSTEMTIME
a
=
{
1970
,
1
,
5
,
1
,
0
,
0
,
0
,
0
};
// SYSTEMTIME struct support 1601-01-01. set 1970 to compatible with Epoch time.
FILETIME
b
;
// unit is 100ns
ULARGE_INTEGER
c
;
SystemTimeToFileTime
(
&
a
,
&
b
);
c
.
LowPart
=
b
.
dwLowDateTime
;
c
.
HighPart
=
b
.
dwHighDateTime
;
c
.
QuadPart
+=
tt
*
10000000
;
b
.
dwLowDateTime
=
c
.
LowPart
;
b
.
dwHighDateTime
=
c
.
HighPart
;
FileTimeToLocalFileTime
(
&
b
,
&
b
);
FileTimeToSystemTime
(
&
b
,
&
a
);
int
pos
=
sprintf
(
buf
,
"%02d-%02d-%02d %02d:%02d:%02d"
,
a
.
wYear
,
a
.
wMonth
,
a
.
wDay
,
a
.
wHour
,
a
.
wMinute
,
a
.
wSecond
);
if
(
precision
==
TSDB_TIME_PRECISION_NANO
)
{
sprintf
(
buf
+
pos
,
".%09d"
,
ms
);
}
else
if
(
precision
==
TSDB_TIME_PRECISION_MICRO
)
{
sprintf
(
buf
+
pos
,
".%06d"
,
ms
);
}
else
{
sprintf
(
buf
+
pos
,
".%03d"
,
ms
);
}
return
buf
;
}
#endif
if
(
tt
<=
0
&&
ms
<
0
)
{
tt
--
;
...
...
src/util/src/tlosertree.c
浏览文件 @
524abe35
...
...
@@ -96,7 +96,12 @@ void tLoserTreeAdjust(SLoserTreeInfo* pTree, int32_t idx) {
return
;
}
int32_t
ret
=
pTree
->
comparFn
(
pCur
,
&
kLeaf
,
pTree
->
param
);
/* there is a risk
* there should be pTree->comparFn(&pCur->index, &kLeaf.index, pTree->param)
* but the first element in SLoserTreeNode is int32_t
* and the comparFn get data as *(int32_t*)(void *), so it is just ok.
*/
int32_t
ret
=
pTree
->
comparFn
(
&
pCur
,
&
kLeaf
,
pTree
->
param
);
if
(
ret
<
0
)
{
SLoserTreeNode
t
=
pTree
->
pNode
[
parentId
];
pTree
->
pNode
[
parentId
]
=
kLeaf
;
...
...
tests/develop-test/0-others/TD-12435.py
0 → 100644
浏览文件 @
524abe35
###################################################################
# Copyright (c) 2016 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, db_test.stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
import
sys
import
taos
from
util.log
import
tdLog
from
util.cases
import
tdCases
from
util.sql
import
tdSql
import
json
class
TDTestCase
:
def
caseDescription
(
self
):
'''
case1: [TD-12435] fix ` identifier in table column name if using create table as subquery
'''
return
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
def
run
(
self
):
tdSql
.
prepare
()
print
(
"============== STEP 1 ===== prepare data & validate json string"
)
tdSql
.
execute
(
"create table if not exists st(ts timestamp, dataInt int)"
)
tdSql
.
execute
(
"create table st_from_sub as select avg(`dataInt`) from st interval(1m)"
)
tdSql
.
query
(
"describe st_from_sub"
)
tdSql
.
checkData
(
1
,
0
,
'avg__dataInt__'
)
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/develop-test/3-connectors/go/test.sh
浏览文件 @
524abe35
...
...
@@ -18,3 +18,6 @@ sleep 10
cd
../../
WKC
=
`
pwd
`
git clone git@github.com:taosdata/driver-go.git
--branch
develop
--single-branch
--depth
1
cd
driver-go
go
test
-v
./...
\ No newline at end of file
tests/develop-test/fulltest-others.sh
浏览文件 @
524abe35
python3 ./test.py
-f
0-others/json_tag.py
\ No newline at end of file
python3 ./test.py
-f
0-others/json_tag.py
python3 ./test.py
-f
0-others/TD-12435.py
\ No newline at end of file
tests/examples/JDBC/taosdemo/src/main/resources/insert.json
浏览文件 @
524abe35
...
...
@@ -16,7 +16,7 @@
"cache"
:
16
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/dockerCluster/insert.json
浏览文件 @
524abe35
...
...
@@ -18,7 +18,7 @@
"cache"
:
16
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/manualTest/TD-5114/insertDataDb3Replica2.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/query/nestedQuery/insertData.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/tsdb/insertDataDb1.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/tsdb/insertDataDb1Replica2.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/tsdb/insertDataDb2.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/tsdb/insertDataDb2Newstab.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/tsdb/insertDataDb2NewstabReplica2.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/tsdb/insertDataDb2Replica2.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/wal/insertDataDb1.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/wal/insertDataDb1Replica2.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/wal/insertDataDb2.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/wal/insertDataDb2Newstab.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/wal/insertDataDb2NewstabReplica2.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/pytest/wal/insertDataDb2Replica2.json
浏览文件 @
524abe35
...
...
@@ -22,7 +22,7 @@
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"keep"
:
365
00
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
...
...
tests/system-test/3-connectors/c#/TDengineDriver/TDengineDriver.cs
0 → 100644
浏览文件 @
524abe35
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using
System
;
using
System.Collections.Generic
;
using
System.Runtime.InteropServices
;
namespace
TDengineDriver
{
public
enum
TDengineDataType
{
TSDB_DATA_TYPE_NULL
=
0
,
// 1 bytes
TSDB_DATA_TYPE_BOOL
=
1
,
// 1 bytes
TSDB_DATA_TYPE_TINYINT
=
2
,
// 1 bytes
TSDB_DATA_TYPE_SMALLINT
=
3
,
// 2 bytes
TSDB_DATA_TYPE_INT
=
4
,
// 4 bytes
TSDB_DATA_TYPE_BIGINT
=
5
,
// 8 bytes
TSDB_DATA_TYPE_FLOAT
=
6
,
// 4 bytes
TSDB_DATA_TYPE_DOUBLE
=
7
,
// 8 bytes
TSDB_DATA_TYPE_BINARY
=
8
,
// string
TSDB_DATA_TYPE_TIMESTAMP
=
9
,
// 8 bytes
TSDB_DATA_TYPE_NCHAR
=
10
,
// unicode string
TSDB_DATA_TYPE_UTINYINT
=
11
,
// 1 byte
TSDB_DATA_TYPE_USMALLINT
=
12
,
// 2 bytes
TSDB_DATA_TYPE_UINT
=
13
,
// 4 bytes
TSDB_DATA_TYPE_UBIGINT
=
14
,
// 8 bytes
TSDB_DATA_TYPE_JSONTAG
=
15
//4096 bytes
}
public
enum
TDengineInitOption
{
TSDB_OPTION_LOCALE
=
0
,
TSDB_OPTION_CHARSET
=
1
,
TSDB_OPTION_TIMEZONE
=
2
,
TDDB_OPTION_CONFIGDIR
=
3
,
TDDB_OPTION_SHELL_ACTIVITY_TIMER
=
4
}
enum
TaosField
{
STRUCT_SIZE
=
68
,
NAME_LENGTH
=
65
,
TYPE_OFFSET
=
65
,
BYTES_OFFSET
=
66
,
}
public
class
TDengineMeta
{
public
string
name
;
public
short
size
;
public
byte
type
;
public
string
TypeName
()
{
switch
((
TDengineDataType
)
type
)
{
case
TDengineDataType
.
TSDB_DATA_TYPE_BOOL
:
return
"BOOL"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TINYINT
:
return
"TINYINT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_SMALLINT
:
return
"SMALLINT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_INT
:
return
"INT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BIGINT
:
return
"BIGINT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_UTINYINT
:
return
"TINYINT UNSIGNED"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_USMALLINT
:
return
"SMALLINT UNSIGNED"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_UINT
:
return
"INT UNSIGNED"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_UBIGINT
:
return
"BIGINT UNSIGNED"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_FLOAT
:
return
"FLOAT"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_DOUBLE
:
return
"DOUBLE"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BINARY
:
return
"STRING"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TIMESTAMP
:
return
"TIMESTAMP"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_NCHAR
:
return
"NCHAR"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_JSONTAG
:
return
"JSON"
;
default
:
return
"undefine"
;
}
}
}
[
StructLayout
(
LayoutKind
.
Sequential
,
CharSet
=
CharSet
.
Ansi
)]
public
struct
TAOS_BIND
{
// column type
public
int
buffer_type
;
// one column value
public
IntPtr
buffer
;
// unused
public
Int32
buffer_length
;
// actual value length in buffer
public
IntPtr
length
;
// indicates the column value is null or not
public
IntPtr
is_null
;
// unused
public
int
is_unsigned
;
// unused
public
IntPtr
error
;
public
Int64
u
;
public
uint
allocated
;
}
[
StructLayout
(
LayoutKind
.
Sequential
)]
public
struct
TAOS_MULTI_BIND
{
// column type
public
int
buffer_type
;
// array, one or more lines column value
public
IntPtr
buffer
;
//length of element in TAOS_MULTI_BIND.buffer (for binary and nchar it is the longest element's length)
public
ulong
buffer_length
;
//array, actual data length for each value
public
IntPtr
length
;
//array, indicates each column value is null or not
public
IntPtr
is_null
;
// line number, or the values number in buffer
public
int
num
;
}
public
class
TDengine
{
public
const
int
TSDB_CODE_SUCCESS
=
0
;
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_init"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
void
Init
();
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_cleanup"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
void
Cleanup
();
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_options"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
void
Options
(
int
option
,
string
value
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_connect"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
Connect
(
string
ip
,
string
user
,
string
password
,
string
db
,
short
port
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_errstr"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
private
IntPtr
taos_errstr
(
IntPtr
res
);
static
public
string
Error
(
IntPtr
res
)
{
IntPtr
errPtr
=
taos_errstr
(
res
);
return
Marshal
.
PtrToStringAnsi
(
errPtr
);
}
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_errno"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
ErrorNo
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_query"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
Query
(
IntPtr
conn
,
string
sqlstr
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_affected_rows"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
AffectRows
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_field_count"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
FieldCount
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_fetch_fields"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
private
IntPtr
taos_fetch_fields
(
IntPtr
res
);
static
public
List
<
TDengineMeta
>
FetchFields
(
IntPtr
res
)
{
// const int fieldSize = 68;
List
<
TDengineMeta
>
metas
=
new
List
<
TDengineMeta
>();
if
(
res
==
IntPtr
.
Zero
)
{
return
metas
;
}
int
fieldCount
=
FieldCount
(
res
);
IntPtr
fieldsPtr
=
taos_fetch_fields
(
res
);
for
(
int
i
=
0
;
i
<
fieldCount
;
++
i
)
{
int
offset
=
i
*
(
int
)
TaosField
.
STRUCT_SIZE
;
TDengineMeta
meta
=
new
TDengineMeta
();
meta
.
name
=
Marshal
.
PtrToStringAnsi
(
fieldsPtr
+
offset
);
meta
.
type
=
Marshal
.
ReadByte
(
fieldsPtr
+
offset
+
(
int
)
TaosField
.
TYPE_OFFSET
);
meta
.
size
=
Marshal
.
ReadInt16
(
fieldsPtr
+
offset
+
(
int
)
TaosField
.
BYTES_OFFSET
);
metas
.
Add
(
meta
);
}
return
metas
;
}
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_fetch_row"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
FetchRows
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_free_result"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
FreeResult
(
IntPtr
res
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_close"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
Close
(
IntPtr
taos
);
//get precision of restultset
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_result_precision"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
ResultPrecision
(
IntPtr
taos
);
//stmt APIs:
/// <summary>
/// init a TAOS_STMT object for later use.
/// </summary>
/// <param name="taos">a valid taos connection</param>
/// <returns>
/// Not NULL returned for success, NULL for failure. And it should be freed with taos_stmt_close.
/// </returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_init"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
StmtInit
(
IntPtr
taos
);
/// <summary>
/// prepare a sql statement,'sql' should be a valid INSERT/SELECT statement.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="sql">sql string,used to bind parameters with</param>
/// <param name="length">no used</param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_prepare"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtPrepare
(
IntPtr
stmt
,
string
sql
);
/// <summary>
/// For INSERT only. Used to bind table name as a parmeter for the input stmt object.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="name">table name you want to bind</param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_set_tbname"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtSetTbname
(
IntPtr
stmt
,
string
name
);
/// <summary>
/// For INSERT only.
/// Set a table name for binding table name as parameter. Only used for binding all tables
/// in one stable, user application must call 'loadTableInfo' API to load all table
/// meta before calling this API. If the table meta is not cached locally, it will return error.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="name">table name which is belong to an stable</param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_set_sub_tbname"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtSetSubTbname
(
IntPtr
stmt
,
string
name
);
/// <summary>
/// For INSERT only.
/// set a table name for binding table name as parameter and tag values for all tag parameters.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="name">use to set table name</param>
/// <param name="tags">
/// is an array contains all tag values,each item in the array represents a tag column's value.
/// the item number and sequence should keep consistence with that in stable tag definition.
/// </param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_set_tbname_tags"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtSetTbnameTags
(
IntPtr
stmt
,
string
name
,
TAOS_BIND
[]
tags
);
/// <summary>
/// For both INSERT and SELECT.
/// bind a whole line data.
/// The usage of structure TAOS_BIND is the same with MYSQL_BIND in MySQL.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="bind">
/// points to an array contains the whole line data.
/// the item number and sequence should keep consistence with columns in sql statement.
/// </param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_bind_param"
,
CallingConvention
=
CallingConvention
.
Cdecl
,
SetLastError
=
true
)]
static
extern
public
int
StmtBindParam
(
IntPtr
stmt
,
TAOS_BIND
[]
bind
);
/// <summary>
/// bind a single column's data, INTERNAL used and for INSERT only.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="bind">points to a column's data which could be the one or more lines. </param>
/// <param name="colIdx">the column's index in prepared sql statement, it starts from 0.</param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_bind_single_param_batch"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtBindSingleParamBatch
(
IntPtr
stmt
,
ref
TAOS_MULTI_BIND
bind
,
int
colIdx
);
/// <summary>
/// for INSERT only
/// bind one or multiple lines data. The parameter 'bind'
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <param name="bind">
/// points to an array contains one or more lines data.Each item in array represents a column's value(s),
/// the item number and sequence should keep consistence with columns in sql statement.
/// </param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_bind_param_batch"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtBindParamBatch
(
IntPtr
stmt
,
[
In
,
Out
]
TAOS_MULTI_BIND
[]
bind
);
/// <summary>
/// For INSERT only.
/// add all current bound parameters to batch process. Must be called after each call to
/// StmtBindParam/StmtBindSingleParamBatch, or all columns binds for one or more lines
/// with StmtBindSingleParamBatch. User application can call any bind parameter
/// API again to bind more data lines after calling to this API.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_add_batch"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtAddBatch
(
IntPtr
stmt
);
/// <summary>
/// actually execute the INSERT/SELECT sql statement.
/// User application can continue to bind new data after calling to this API.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <returns></returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_execute"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtExecute
(
IntPtr
stmt
);
/// <summary>
/// For SELECT only,getting the query result. User application should free it with API 'FreeResult' at the end.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <returns>Not NULL for success, NULL for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_use_result"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
StmtUseResult
(
IntPtr
stmt
);
/// <summary>
/// close STMT object and free resources.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <returns>0 for success, non-zero for failure.</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_close"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
int
StmtClose
(
IntPtr
stmt
);
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_load_table_info"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
/// <summary>
/// user application must call this API to load all tables meta,
/// </summary>
/// <param name="taos">taos connection</param>
/// <param name="tableList">tablelist</param>
/// <returns></returns>
static
extern
private
int
LoadTableInfoDll
(
IntPtr
taos
,
string
tableList
);
/// <summary>
/// user application call this API to load all tables meta,this method call the native
/// method LoadTableInfoDll.
/// this method must be called before StmtSetSubTbname(IntPtr stmt, string name);
/// </summary>
/// <param name="taos">taos connection</param>
/// <param name="tableList">tables need to load meta info are form in an array</param>
/// <returns></returns>
static
public
int
LoadTableInfo
(
IntPtr
taos
,
string
[]
tableList
)
{
string
listStr
=
string
.
Join
(
","
,
tableList
);
return
LoadTableInfoDll
(
taos
,
listStr
);
}
/// <summary>
/// get detail error message when got failure for any stmt API call. If not failure, the result
/// returned in this API is unknown.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <returns>piont the error message</returns>
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_stmt_errstr"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
private
IntPtr
StmtErrPtr
(
IntPtr
stmt
);
/// <summary>
/// get detail error message when got failure for any stmt API call. If not failure, the result
/// returned in this API is unknown.
/// </summary>
/// <param name="stmt">could be the value returned by 'StmtInit', that may be a valid object or NULL.</param>
/// <returns>error string</returns>
static
public
string
StmtErrorStr
(
IntPtr
stmt
)
{
IntPtr
stmtErrPrt
=
StmtErrPtr
(
stmt
);
return
Marshal
.
PtrToStringAnsi
(
stmtErrPrt
);
}
[
DllImport
(
"taos"
,
EntryPoint
=
"taos_fetch_lengths"
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
static
extern
public
IntPtr
FetchLengths
(
IntPtr
taos
);
}
}
tests/system-test/3-connectors/c#/TDengineDriver/TDengineDriver.csproj
0 → 100644
浏览文件 @
524abe35
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
tests/system-test/3-connectors/c#/TDengineDriver/TaosBind.cs
0 → 100644
浏览文件 @
524abe35
此差异已折叠。
点击以展开。
tests/system-test/3-connectors/c#/TDengineDriver/TaosMultiBind.cs
0 → 100644
浏览文件 @
524abe35
此差异已折叠。
点击以展开。
tests/system-test/3-connectors/c#/stmtfunction/stmtfunction.cs
0 → 100644
浏览文件 @
524abe35
此差异已折叠。
点击以展开。
tests/system-test/3-connectors/c#/stmtfunction/stmtfunction.csproj
0 → 100644
浏览文件 @
524abe35
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\TDengineDriver\TDengineDriver.csproj" />
</ItemGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<!-- <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> -->
</PropertyGroup>
</Project>
tests/system-test/3-connectors/c#/test.sh
浏览文件 @
524abe35
...
...
@@ -26,6 +26,9 @@ dotnet run --project C#checker/C#checker.csproj
dotnet run
--project
TDengineTest/TDengineTest.csproj
dotnet run
--project
schemaless/schemaless.csproj
cd
${
WKC
}
/tests/system-test/3-connectors/c#/stmtfunction
dotnet run
||
exit
1
cd
${
WKC
}
/tests/examples/C#/taosdemo
dotnet build
-c
Release
tree |
true
...
...
tests/system-test/3-connectors/go/test.sh
浏览文件 @
524abe35
...
...
@@ -17,4 +17,3 @@ nohup taosd -c /etc/taos/ > /dev/null 2>&1 &
sleep
10
cd
../../
WKC
=
`
pwd
`
tests/test-CI.sh
浏览文件 @
524abe35
...
...
@@ -124,11 +124,9 @@ function runPyCaseOneByOnefq() {
else
echo
$line
if
[[
$line
=
~ ^bash.
*
]]
;
then
# $line > case.log 2>&1 || cat case.log && exit 8
# cat case.log
$line
>
case
.log 2>&1
cat
case
.log
if
[
$?
-ne
0
]
;
then
cat
case
.log
exit
8
fi
fi
...
...
tests/test-all.sh
浏览文件 @
524abe35
...
...
@@ -139,17 +139,17 @@ function runPyCaseOneByOne {
case
=
`
echo
$line
|awk
'{print $NF}'
`
fi
start_time
=
`
date
+%s
`
date
+%F
\
%T
|
tee
-a
pytest-out.log
date
+%F
\
%T
|
tee
-a
$tests_dir
/
pytest-out.log
echo
-n
$case
$line
>
/dev/null 2>&1
&&
\
echo
-e
"
${
GREEN
}
success
${
NC
}
"
|
tee
-a
pytest-out.log
||
\
echo
-e
"
${
RED
}
failed
${
NC
}
"
|
tee
-a
pytest-out.log
echo
-e
"
${
GREEN
}
success
${
NC
}
"
|
tee
-a
$tests_dir
/
pytest-out.log
||
\
echo
-e
"
${
RED
}
failed
${
NC
}
"
|
tee
-a
$tests_dir
/
pytest-out.log
end_time
=
`
date
+%s
`
out_log
=
`
tail
-1
pytest-out.log
`
# if [[ $out_log =~ 'failed' ]];then
# exit 8
# fi
echo
execution
time
of
$case
was
`
expr
$end_time
-
$start_time
`
s.
|
tee
-a
pytest-out.log
echo
execution
time
of
$case
was
`
expr
$end_time
-
$start_time
`
s.
|
tee
-a
$tests_dir
/
pytest-out.log
else
$line
>
/dev/null 2>&1
fi
...
...
@@ -339,10 +339,9 @@ if [ "$2" != "sim" ] && [ "$2" != "jdbc" ] && [ "$2" != "unit" ] && [ "$2" != "
export
LD_LIBRARY_PATH
=
$TOP_DIR
/
$LIB_DIR
:
$LD_LIBRARY_PATH
[
-f
$tests_dir
/pytest-out.log
]
&&
rm
-f
$tests_dir
/pytest-out.log
cd
$tests_dir
/pytest
[
-f
pytest-out.log
]
&&
rm
-f
pytest-out.log
if
[
"
$1
"
==
"cron"
]
;
then
echo
"### run Python regression test ###"
runPyCaseOneByOne regressiontest.sh
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录