Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
575686c6
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
575686c6
编写于
1月 06, 2022
作者:
W
wenzhouwww
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' into test/case_runCI_query
上级
fa83c300
5ffa14b4
变更
35
展开全部
隐藏空白更改
内联
并排
Showing
35 changed file
with
4299 addition
and
618 deletion
+4299
-618
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+11
-4
src/connector/C#/.gitignore
src/connector/C#/.gitignore
+2
-2
src/connector/C#/csharpTaos.sln
src/connector/C#/csharpTaos.sln
+14
-14
src/connector/C#/src/TDengineDriver/TDengineDriver.cs
src/connector/C#/src/TDengineDriver/TDengineDriver.cs
+1
-1
src/connector/C#/src/TDengineDriver/TDengineDriver.csproj
src/connector/C#/src/TDengineDriver/TDengineDriver.csproj
+2
-2
src/connector/C#/src/TDengineDriver/TaosMultiBind.cs
src/connector/C#/src/TDengineDriver/TaosMultiBind.cs
+43
-50
src/connector/C#/src/test/Cases/FetchLength.cs
src/connector/C#/src/test/Cases/FetchLength.cs
+0
-44
src/connector/C#/src/test/Cases/Program.cs
src/connector/C#/src/test/Cases/Program.cs
+0
-90
src/connector/C#/src/test/Cases/StmtStable.cs
src/connector/C#/src/test/Cases/StmtStable.cs
+0
-188
src/connector/C#/src/test/Cases/TaosFeild.cs
src/connector/C#/src/test/Cases/TaosFeild.cs
+0
-39
src/connector/C#/src/test/FunctionTest/DataSource.cs
src/connector/C#/src/test/FunctionTest/DataSource.cs
+421
-0
src/connector/C#/src/test/FunctionTest/FetchLength.cs
src/connector/C#/src/test/FunctionTest/FetchLength.cs
+56
-0
src/connector/C#/src/test/FunctionTest/FunctionTest.csproj
src/connector/C#/src/test/FunctionTest/FunctionTest.csproj
+28
-0
src/connector/C#/src/test/FunctionTest/ResultSetUtils.cs
src/connector/C#/src/test/FunctionTest/ResultSetUtils.cs
+39
-0
src/connector/C#/src/test/FunctionTest/StmtNormalTable.cs
src/connector/C#/src/test/FunctionTest/StmtNormalTable.cs
+455
-0
src/connector/C#/src/test/FunctionTest/StmtQuery.cs
src/connector/C#/src/test/FunctionTest/StmtQuery.cs
+0
-0
src/connector/C#/src/test/FunctionTest/StmtStable.cs
src/connector/C#/src/test/FunctionTest/StmtStable.cs
+468
-0
src/connector/C#/src/test/FunctionTest/StmtUtil.cs
src/connector/C#/src/test/FunctionTest/StmtUtil.cs
+0
-0
src/connector/C#/src/test/FunctionTest/TaosFeild.cs
src/connector/C#/src/test/FunctionTest/TaosFeild.cs
+80
-0
src/connector/C#/src/test/FunctionTest/Utils.cs
src/connector/C#/src/test/FunctionTest/Utils.cs
+388
-0
src/connector/C#/src/test/XUnitTest/TestTDengineMeta.cs
src/connector/C#/src/test/XUnitTest/TestTDengineMeta.cs
+76
-3
src/connector/C#/src/test/XUnitTest/TestTaosBind.cs
src/connector/C#/src/test/XUnitTest/TestTaosBind.cs
+208
-57
tests/develop-test/3-connectors/c#/test.sh
tests/develop-test/3-connectors/c#/test.sh
+3
-1
tests/examples/C#/.gitignore
tests/examples/C#/.gitignore
+2
-0
tests/examples/C#/jsonTag/JsonTag.cs
tests/examples/C#/jsonTag/JsonTag.cs
+18
-2
tests/examples/C#/jsonTag/Util.cs
tests/examples/C#/jsonTag/Util.cs
+3
-117
tests/examples/C#/jsonTag/jsonTag.csproj
tests/examples/C#/jsonTag/jsonTag.csproj
+12
-0
tests/examples/JDBC/connectionPools/pom.xml
tests/examples/JDBC/connectionPools/pom.xml
+1
-1
tests/examples/JDBC/taosdemo/pom.xml
tests/examples/JDBC/taosdemo/pom.xml
+1
-1
tests/perftest-scripts/HttpPerfCompare.py
tests/perftest-scripts/HttpPerfCompare.py
+137
-0
tests/perftest-scripts/specifyColsComparison.py
tests/perftest-scripts/specifyColsComparison.py
+197
-0
tests/pytest/fulltest-query.sh
tests/pytest/fulltest-query.sh
+1
-1
tests/pytest/functions/function_derivative.py
tests/pytest/functions/function_derivative.py
+6
-0
tests/pytest/functions/function_elapsed_case.py
tests/pytest/functions/function_elapsed_case.py
+3
-1
tests/system-test/2-query/function_elapsed.py
tests/system-test/2-query/function_elapsed.py
+1623
-0
未找到文件。
src/client/src/tscSQLParser.c
浏览文件 @
575686c6
...
...
@@ -2727,7 +2727,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
memset
(
pExpr
->
base
.
aliasName
,
0
,
tListLen
(
pExpr
->
base
.
aliasName
));
getColumnName
(
pItem
,
pExpr
->
base
.
aliasName
,
pExpr
->
base
.
token
,
sizeof
(
pExpr
->
base
.
aliasName
)
-
1
);
SColumnList
list
=
createColumnList
(
1
,
index
.
tableIndex
,
index
.
columnIndex
);
if
(
finalResult
)
{
int32_t
numOfOutput
=
tscNumOfFields
(
pQueryInfo
);
...
...
@@ -2852,6 +2852,13 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
char
val
[
8
]
=
{
0
};
int64_t
tickPerSec
=
0
;
char
*
exprToken
=
tcalloc
(
pParamElem
[
1
].
pNode
->
exprToken
.
n
+
1
,
sizeof
(
char
));
memcpy
(
exprToken
,
pParamElem
[
1
].
pNode
->
exprToken
.
z
,
pParamElem
[
1
].
pNode
->
exprToken
.
n
);
if
(
pParamElem
[
1
].
pNode
->
exprToken
.
type
==
TK_NOW
||
strstr
(
exprToken
,
"now"
))
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
}
tfree
(
exprToken
);
if
((
TSDB_DATA_TYPE_NULL
==
pParamElem
[
1
].
pNode
->
value
.
nType
)
||
tVariantDump
(
&
pParamElem
[
1
].
pNode
->
value
,
(
char
*
)
&
tickPerSec
,
TSDB_DATA_TYPE_BIGINT
,
true
)
<
0
)
{
return
TSDB_CODE_TSC_INVALID_OPERATION
;
}
...
...
@@ -2866,7 +2873,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg10
);
}
else
if
(
tickPerSec
<=
0
)
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg16
);
}
}
tscExprAddParams
(
&
pExpr
->
base
,
(
char
*
)
&
tickPerSec
,
TSDB_DATA_TYPE_BIGINT
,
LONG_BYTES
);
if
(
functionId
==
TSDB_FUNC_DERIVATIVE
)
{
...
...
@@ -4906,14 +4913,14 @@ static int32_t validateNullExpr(tSqlExpr* pExpr, STableMeta* pTableMeta, int32_t
if
(
IS_VAR_DATA_TYPE
(
pSchema
[
index
].
type
)
||
pSchema
[
index
].
type
==
TSDB_DATA_TYPE_JSON
)
{
return
TSDB_CODE_SUCCESS
;
}
char
*
v
=
strndup
(
pRight
->
exprToken
.
z
,
pRight
->
exprToken
.
n
);
int32_t
len
=
strRmquote
(
v
,
pRight
->
exprToken
.
n
);
if
(
len
>
0
)
{
uint32_t
type
=
0
;
tGetToken
(
v
,
&
type
);
if
(
type
==
TK_NULL
)
{
if
(
type
==
TK_NULL
)
{
free
(
v
);
return
invalidOperationMsg
(
msgBuf
,
msg
);
}
...
...
src/connector/C#/.gitignore
浏览文件 @
575686c6
src/TDengineDriver/bin/
src/TDengineDriver/obj/
src/test/
Cases
/bin/
src/test/
Cases
/obj/
src/test/
FunctionTest
/bin/
src/test/
FunctionTest
/obj/
src/test/XUnitTest/bin/
src/test/XUnitTest/obj/
src/test/doc/
...
...
src/connector/C#/csharpTaos.sln
浏览文件 @
575686c6
...
...
@@ -11,7 +11,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{CB8E6458-3
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XUnitTest", "src\test\XUnitTest\XUnitTest.csproj", "{64C0A478-2591-4459-9F8F-A70F37976A41}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "
Cases", "src\test\Cases\Cases.csproj", "{19A69D26-66BF-4227-97BE-9B087BC76B2F
}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "
FunctionTest", "src\test\FunctionTest\FunctionTest.csproj", "{E66B034B-4677-4BFB-8B87-84715D281E21
}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
...
...
@@ -50,23 +50,23 @@ Global
{64C0A478-2591-4459-9F8F-A70F37976A41}.Release|x64.Build.0 = Release|Any CPU
{64C0A478-2591-4459-9F8F-A70F37976A41}.Release|x86.ActiveCfg = Release|Any CPU
{64C0A478-2591-4459-9F8F-A70F37976A41}.Release|x86.Build.0 = Release|Any CPU
{
19A69D26-66BF-4227-97BE-9B087BC76B2F
}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{
19A69D26-66BF-4227-97BE-9B087BC76B2F
}.Debug|Any CPU.Build.0 = Debug|Any CPU
{
19A69D26-66BF-4227-97BE-9B087BC76B2F
}.Debug|x64.ActiveCfg = Debug|Any CPU
{
19A69D26-66BF-4227-97BE-9B087BC76B2F
}.Debug|x64.Build.0 = Debug|Any CPU
{
19A69D26-66BF-4227-97BE-9B087BC76B2F
}.Debug|x86.ActiveCfg = Debug|Any CPU
{
19A69D26-66BF-4227-97BE-9B087BC76B2F
}.Debug|x86.Build.0 = Debug|Any CPU
{
19A69D26-66BF-4227-97BE-9B087BC76B2F
}.Release|Any CPU.ActiveCfg = Release|Any CPU
{
19A69D26-66BF-4227-97BE-9B087BC76B2F
}.Release|Any CPU.Build.0 = Release|Any CPU
{
19A69D26-66BF-4227-97BE-9B087BC76B2F
}.Release|x64.ActiveCfg = Release|Any CPU
{
19A69D26-66BF-4227-97BE-9B087BC76B2F
}.Release|x64.Build.0 = Release|Any CPU
{
19A69D26-66BF-4227-97BE-9B087BC76B2F
}.Release|x86.ActiveCfg = Release|Any CPU
{
19A69D26-66BF-4227-97BE-9B087BC76B2F
}.Release|x86.Build.0 = Release|Any CPU
{
E66B034B-4677-4BFB-8B87-84715D281E21
}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{
E66B034B-4677-4BFB-8B87-84715D281E21
}.Debug|Any CPU.Build.0 = Debug|Any CPU
{
E66B034B-4677-4BFB-8B87-84715D281E21
}.Debug|x64.ActiveCfg = Debug|Any CPU
{
E66B034B-4677-4BFB-8B87-84715D281E21
}.Debug|x64.Build.0 = Debug|Any CPU
{
E66B034B-4677-4BFB-8B87-84715D281E21
}.Debug|x86.ActiveCfg = Debug|Any CPU
{
E66B034B-4677-4BFB-8B87-84715D281E21
}.Debug|x86.Build.0 = Debug|Any CPU
{
E66B034B-4677-4BFB-8B87-84715D281E21
}.Release|Any CPU.ActiveCfg = Release|Any CPU
{
E66B034B-4677-4BFB-8B87-84715D281E21
}.Release|Any CPU.Build.0 = Release|Any CPU
{
E66B034B-4677-4BFB-8B87-84715D281E21
}.Release|x64.ActiveCfg = Release|Any CPU
{
E66B034B-4677-4BFB-8B87-84715D281E21
}.Release|x64.Build.0 = Release|Any CPU
{
E66B034B-4677-4BFB-8B87-84715D281E21
}.Release|x86.ActiveCfg = Release|Any CPU
{
E66B034B-4677-4BFB-8B87-84715D281E21
}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{5BED7402-0A65-4ED9-A491-C56BFB518045} = {A1FB5B66-E32F-4789-9BE9-042E5BD21087}
{CB8E6458-31E1-4351-B704-1B918E998654} = {A1FB5B66-E32F-4789-9BE9-042E5BD21087}
{64C0A478-2591-4459-9F8F-A70F37976A41} = {CB8E6458-31E1-4351-B704-1B918E998654}
{
19A69D26-66BF-4227-97BE-9B087BC76B2F
} = {CB8E6458-31E1-4351-B704-1B918E998654}
{
E66B034B-4677-4BFB-8B87-84715D281E21
} = {CB8E6458-31E1-4351-B704-1B918E998654}
EndGlobalSection
EndGlobal
src/connector/C#/src/TDengineDriver/TDengineDriver.cs
浏览文件 @
575686c6
...
...
@@ -87,7 +87,7 @@ namespace TDengineDriver
case
TDengineDataType
.
TSDB_DATA_TYPE_DOUBLE
:
return
"DOUBLE"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BINARY
:
return
"
STRING
"
;
return
"
BINARY
"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TIMESTAMP
:
return
"TIMESTAMP"
;
case
TDengineDataType
.
TSDB_DATA_TYPE_NCHAR
:
...
...
src/connector/C#/src/TDengineDriver/TDengineDriver.csproj
浏览文件 @
575686c6
...
...
@@ -4,7 +4,7 @@
<TargetFrameworks>net5;netstandard2.0;net45</TargetFrameworks>
<PackageId>TDengine.Connector</PackageId>
<PackageIcon>logo.jpg</PackageIcon>
<Version>1.0.
3
</Version>
<Version>1.0.
4
</Version>
<Authors>taosdata</Authors>
<Company>www.taosdata.com</Company>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
...
...
@@ -14,7 +14,7 @@
This C # connector supports: Linux 64/Windows x64/Windows x86.
more information please visit: https://www.taosdata.com
</Description>
<RepositoryUrl>https://github.com/taosdata/TDengine/tree/develop/src/connector/C%2
3
</RepositoryUrl>
<RepositoryUrl>https://github.com/taosdata/TDengine/tree/develop/src/connector/C%2
523/src/TDengineDriver
</RepositoryUrl>
<NoWarn>CS1591</NoWarn>
</PropertyGroup>
<ItemGroup>
...
...
src/connector/C#/src/TDengineDriver/TaosMultiBind.cs
浏览文件 @
575686c6
...
...
@@ -436,49 +436,46 @@ namespace TDengineDriver
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
//TypeSize represent the Max element length of the comming arr
//The size of the buffer is typeSize * elementCount
//This buffer is used to store TAOS_MULTI_BIND.buffer
int
typeSize
=
MaxElementLength
(
arr
);
//This intSize is used to calcuate buffer size of the struct TAOS_MULTI_BIND's
//length. The buffer is intSize * elementCount,which is used to store TAOS_MULTI_BIND.length
int
intSize
=
sizeof
(
int
);
//This byteSize is used to calculate the buffer size of the struct TAOS_MULTI_BIND.is_null
//This buffer size is byteSize * elementCount
int
byteSize
=
sizeof
(
byte
);
StringBuilder
arrStrBuilder
=
new
StringBuilder
();
;
StringBuilder
arrStrBuilder
=
new
StringBuilder
();
;
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
//TAOS_MULTI_BIND.buffer
IntPtr
uNcharBuff
=
Marshal
.
AllocHGlobal
(
typeSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
int
itemLength
=
0
;
byte
[]
decodeByte
=
GetStringEncodeByte
(
arr
[
i
]);
itemLength
=
decodeByte
.
Length
;
// if element if not null and element length is less then typeSize
// fill the memory with default char.Since arr element memory need align.
if
(!
String
.
IsNullOrEmpty
(
arr
[
i
])
&&
typeSize
==
itemLength
)
{
arrStrBuilder
.
Append
(
arr
[
i
]);
}
else
if
(!
String
.
IsNullOrEmpty
(
arr
[
i
])
&&
typeSize
>
itemLength
)
{
arrStrBuilder
.
Append
(
arr
[
i
]);
arrStrBuilder
.
Append
(
AlignCharArr
(
typeSize
-
itemLength
));
}
else
if
(!
String
.
IsNullOrEmpty
(
arr
[
i
]))
{
// if is null value,fill the memory with default values.
arrStrBuilder
.
Append
(
AlignCharArr
(
typeSize
));
for
(
int
j
=
0
;
j
<
itemLength
;
j
++)
{
//Read byte after byte
Marshal
.
WriteByte
(
uNcharBuff
,
i
*
typeSize
+
j
,
decodeByte
[
j
]);
}
}
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
//Set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
itemLength
);
//Set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
String
.
IsNullOrEmpty
(
arr
[
i
])
?
1
:
0
));
}
//set TAOS_MULTI_BIND.buffer
IntPtr
uBinaryBuff
=
(
IntPtr
)
Marshal
.
StringToHGlobalAnsi
(
arrStrBuilder
.
ToString
());
//config TAOS_MULTI_BIND
//Config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_BINARY
;
multiBind
.
buffer
=
u
Binary
Buff
;
multiBind
.
buffer
=
u
Nchar
Buff
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
multiBind
.
length
=
lengthArr
;
multiBind
.
is_null
=
nullArr
;
...
...
@@ -491,47 +488,43 @@ namespace TDengineDriver
{
TAOS_MULTI_BIND
multiBind
=
new
TAOS_MULTI_BIND
();
int
elementCount
=
arr
.
Length
;
//TypeSize represent the Max element length of the comming arr
//The size of the buffer is typeSize * elementCount
//This buffer is used to store TAOS_MULTI_BIND.buffer
int
typeSize
=
MaxElementLength
(
arr
);
//This intSize is used to calcuate buffer size of the struct TAOS_MULTI_BIND's
//length. The buffer is intSize * elementCount,which is used to store TAOS_MULTI_BIND.length
int
intSize
=
sizeof
(
int
);
//This byteSize is used to calculate the buffer size of the struct TAOS_MULTI_BIND.is_null
//This buffer size is byteSize * elementCount
int
byteSize
=
sizeof
(
byte
);
StringBuilder
arrStrBuilder
=
new
StringBuilder
();
;
//TAOS_MULTI_BIND.length
IntPtr
lengthArr
=
Marshal
.
AllocHGlobal
(
intSize
*
elementCount
);
//TAOS_MULTI_BIND.is_null
IntPtr
nullArr
=
Marshal
.
AllocHGlobal
(
byteSize
*
elementCount
);
//TAOS_MULTI_BIND.buffer
IntPtr
uNcharBuff
=
Marshal
.
AllocHGlobal
(
typeSize
*
elementCount
);
for
(
int
i
=
0
;
i
<
elementCount
;
i
++)
{
int
itemLength
=
0
;
byte
[]
decodeByte
=
GetStringEncodeByte
(
arr
[
i
]);
itemLength
=
decodeByte
.
Length
;
// if element if not null and element length is less then typeSize
// fill the memory with default char.Since arr element memory need align.
if
(!
String
.
IsNullOrEmpty
(
arr
[
i
])
&&
typeSize
==
itemLength
)
{
arrStrBuilder
.
Append
(
arr
[
i
]);
}
else
if
(!
String
.
IsNullOrEmpty
(
arr
[
i
])
&&
typeSize
>
itemLength
)
if
(!
String
.
IsNullOrEmpty
(
arr
[
i
]))
{
arrStrBuilder
.
Append
(
arr
[
i
]);
arrStrBuilder
.
Append
(
AlignCharArr
(
typeSize
-
itemLength
));
for
(
int
j
=
0
;
j
<
itemLength
;
j
++)
{
//Read byte after byte
Marshal
.
WriteByte
(
uNcharBuff
,
i
*
typeSize
+
j
,
decodeByte
[
j
]);
}
}
else
{
// if is null value,fill the memory with default values.
arrStrBuilder
.
Append
(
AlignCharArr
(
typeSize
));
}
//set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
typeSize
);
//set TAOS_MULTI_BIND.is_null
//Set TAOS_MULTI_BIND.length
Marshal
.
WriteInt32
(
lengthArr
,
intSize
*
i
,
itemLength
);
//Set TAOS_MULTI_BIND.is_null
Marshal
.
WriteByte
(
nullArr
,
byteSize
*
i
,
Convert
.
ToByte
(
String
.
IsNullOrEmpty
(
arr
[
i
])
?
1
:
0
));
}
//set TAOS_MULTI_BIND.buffer
IntPtr
uNcharBuff
=
(
IntPtr
)
Marshal
.
StringToHGlobalAnsi
(
arrStrBuilder
.
ToString
());
//config TAOS_MULTI_BIND
//Config TAOS_MULTI_BIND
multiBind
.
buffer_type
=
(
int
)
TDengineDataType
.
TSDB_DATA_TYPE_NCHAR
;
multiBind
.
buffer
=
uNcharBuff
;
multiBind
.
buffer_length
=
(
ulong
)
typeSize
;
...
...
@@ -612,16 +605,16 @@ namespace TDengineDriver
}
private
static
Byte
[]
GetStringEncodeByte
(
string
str
)
{
{
Byte
[]
strToBytes
=
null
;
if
(
String
.
IsNullOrEmpty
(
str
))
if
(
String
.
IsNullOrEmpty
(
str
))
{
strToBytes
=
System
.
Text
.
Encoding
.
Default
.
GetBytes
(
String
.
Empty
);
}
else
{
strToBytes
=
System
.
Text
.
Encoding
.
Default
.
GetBytes
(
str
);
}
}
return
strToBytes
;
}
}
...
...
src/connector/C#/src/test/Cases/FetchLength.cs
已删除
100644 → 0
浏览文件 @
fa83c300
using
System
;
using
Test.UtilsTools
;
using
System.Collections.Generic
;
namespace
Cases
{
public
class
FetchLengthCase
{
/// <author>xiaolei</author>
/// <Name>TestRetrieveBinary</Name>
/// <describe>TD-12103 C# connector fetch_row with binary data retrieving error</describe>
/// <filename>FetchLength.cs</filename>
/// <result>pass or failed </result>
public
void
TestRetrieveBinary
(
IntPtr
conn
)
{
string
sql1
=
"create stable stb1 (ts timestamp, name binary(10)) tags(n int);"
;
string
sql2
=
"insert into tb1 using stb1 tags(1) values(now, 'log');"
;
string
sql3
=
"insert into tb2 using stb1 tags(2) values(now, 'test');"
;
string
sql4
=
"insert into tb3 using stb1 tags(3) values(now, 'db02');"
;
string
sql5
=
"insert into tb4 using stb1 tags(4) values(now, 'db3');"
;
string
sql6
=
"select distinct(name) from stb1;"
;
//
UtilsTools
.
ExecuteQuery
(
conn
,
sql1
);
UtilsTools
.
ExecuteQuery
(
conn
,
sql2
);
UtilsTools
.
ExecuteQuery
(
conn
,
sql3
);
UtilsTools
.
ExecuteQuery
(
conn
,
sql4
);
UtilsTools
.
ExecuteQuery
(
conn
,
sql5
);
IntPtr
resPtr
=
IntPtr
.
Zero
;
resPtr
=
UtilsTools
.
ExecuteQuery
(
conn
,
sql6
);
List
<
List
<
string
>>
result
=
UtilsTools
.
GetResultSet
(
resPtr
);
List
<
string
>
colname
=
result
[
0
];
List
<
string
>
data
=
result
[
1
];
UtilsTools
.
AssertEqual
(
"db3"
,
data
[
0
]);
UtilsTools
.
AssertEqual
(
"log"
,
data
[
1
]);
UtilsTools
.
AssertEqual
(
"db02"
,
data
[
2
]);
UtilsTools
.
AssertEqual
(
"test"
,
data
[
3
]);
}
}
}
src/connector/C#/src/test/Cases/Program.cs
已删除
100644 → 0
浏览文件 @
fa83c300
using
System
;
using
Test.UtilsTools
;
using
Cases
;
namespace
Cases.EntryPoint
{
class
Program
{
static
void
Main
(
string
[]
args
)
{
IntPtr
conn
=
IntPtr
.
Zero
;
IntPtr
stmt
=
IntPtr
.
Zero
;
IntPtr
res
=
IntPtr
.
Zero
;
conn
=
UtilsTools
.
TDConnection
(
"127.0.0.1"
,
"root"
,
"taosdata"
,
""
,
0
);
UtilsTools
.
ExecuteUpdate
(
conn
,
"drop database if exists csharp"
);
UtilsTools
.
ExecuteUpdate
(
conn
,
"create database if not exists csharp keep 3650"
);
UtilsTools
.
ExecuteUpdate
(
conn
,
"use csharp"
);
Console
.
WriteLine
(
"====================StableColumnByColumn==================="
);
StableColumnByColumn
columnByColumn
=
new
StableColumnByColumn
();
columnByColumn
.
Test
(
conn
,
"stablecolumnbycolumn"
);
Console
.
WriteLine
(
"====================StmtStableQuery==================="
);
StmtStableQuery
stmtStableQuery
=
new
StmtStableQuery
();
stmtStableQuery
.
Test
(
conn
,
"stablecolumnbycolumn"
);
Console
.
WriteLine
(
"====================StableMutipleLine==================="
);
StableMutipleLine
mutipleLine
=
new
StableMutipleLine
();
mutipleLine
.
Test
(
conn
,
"stablemutipleline"
);
//================================================================================
Console
.
WriteLine
(
"====================NtableSingleLine==================="
);
NtableSingleLine
ntableSingleLine
=
new
NtableSingleLine
();
ntableSingleLine
.
Test
(
conn
,
"stablesingleline"
);
IntPtr
resPtr
=
UtilsTools
.
ExecuteQuery
(
conn
,
"select * from stablesingleline "
);
UtilsTools
.
DisplayRes
(
resPtr
);
Console
.
WriteLine
(
"====================NtableMutipleLine==================="
);
NtableMutipleLine
ntableMutipleLine
=
new
NtableMutipleLine
();
ntableMutipleLine
.
Test
(
conn
,
"ntablemutipleline"
);
Console
.
WriteLine
(
"====================StmtNtableQuery==================="
);
StmtNtableQuery
stmtNtableQuery
=
new
StmtNtableQuery
();
stmtNtableQuery
.
Test
(
conn
,
"ntablemutipleline"
);
Console
.
WriteLine
(
"====================NtableColumnByColumn==================="
);
NtableColumnByColumn
ntableColumnByColumn
=
new
NtableColumnByColumn
();
ntableColumnByColumn
.
Test
(
conn
,
"ntablecolumnbycolumn"
);
Console
.
WriteLine
(
"====================fetchfeilds==================="
);
FetchFields
fetchFields
=
new
FetchFields
();
fetchFields
.
Test
(
conn
,
"fetchfeilds"
);
StableStmtCases
stableStmtCases
=
new
StableStmtCases
();
Console
.
WriteLine
(
"====================stableStmtCases.TestBindSingleLineCn==================="
);
stableStmtCases
.
TestBindSingleLineCn
(
conn
,
"stablestmtcasestestbindsinglelinecn"
);
Console
.
WriteLine
(
"====================stableStmtCases.TestBindColumnCn==================="
);
stableStmtCases
.
TestBindColumnCn
(
conn
,
" stablestmtcasestestbindcolumncn"
);
Console
.
WriteLine
(
"====================stableStmtCases.TestBindMultiLineCn==================="
);
stableStmtCases
.
TestBindMultiLineCn
(
conn
,
"stablestmtcasestestbindmultilinecn"
);
NormalTableStmtCases
normalTableStmtCases
=
new
NormalTableStmtCases
();
Console
.
WriteLine
(
"====================normalTableStmtCases.TestBindSingleLineCn==================="
);
normalTableStmtCases
.
TestBindSingleLineCn
(
conn
,
"normaltablestmtcasestestbindsinglelinecn"
);
Console
.
WriteLine
(
"====================normalTableStmtCases.TestBindColumnCn==================="
);
normalTableStmtCases
.
TestBindColumnCn
(
conn
,
"normaltablestmtcasestestbindcolumncn"
);
Console
.
WriteLine
(
"====================normalTableStmtCases.TestBindMultiLineCn==================="
);
normalTableStmtCases
.
TestBindMultiLineCn
(
conn
,
"normaltablestmtcasestestbindmultilinecn"
);
Console
.
WriteLine
(
"===================JsonTagTest===================="
);
JsonTagTest
jsonTagTest
=
new
JsonTagTest
();
jsonTagTest
.
Test
(
conn
);
Console
.
WriteLine
(
"====================fetchLengthCase==================="
);
FetchLengthCase
fetchLengthCase
=
new
FetchLengthCase
();
fetchLengthCase
.
TestRetrieveBinary
(
conn
);
UtilsTools
.
ExecuteQuery
(
conn
,
"drop database if exists csharp"
);
UtilsTools
.
CloseConnection
(
conn
);
UtilsTools
.
ExitProgram
();
}
}
}
src/connector/C#/src/test/Cases/StmtStable.cs
已删除
100644 → 0
浏览文件 @
fa83c300
using
System
;
using
Test.UtilsTools
;
using
TDengineDriver
;
using
Test.UtilsTools.DataSource
;
namespace
Cases
{
public
class
StableMutipleLine
{
TAOS_BIND
[]
tags
=
DataSource
.
getTags
();
TAOS_MULTI_BIND
[]
mbind
=
DataSource
.
GetMultiBindArr
();
public
void
Test
(
IntPtr
conn
,
string
tableName
)
{
String
createTb
=
"create stable "
+
tableName
+
" (ts timestamp ,b bool,v1 tinyint,v2 smallint,v4 int,v8 bigint,f4 float,f8 double,u1 tinyint unsigned,u2 smallint unsigned,u4 int unsigned,u8 bigint unsigned,bin binary(200),blob nchar(200))tags(bo bool,tt tinyint,si smallint,ii int,bi bigint,tu tinyint unsigned,su smallint unsigned,iu int unsigned,bu bigint unsigned,ff float ,dd double ,bb binary(200),nc nchar(200));"
;
String
insertSql
=
"insert into ? using "
+
tableName
+
" tags(?,?,?,?,?,?,?,?,?,?,?,?,?) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
;
UtilsTools
.
ExecuteUpdate
(
conn
,
createTb
);
IntPtr
stmt
=
StmtUtilTools
.
StmtInit
(
conn
);
StmtUtilTools
.
StmtPrepare
(
stmt
,
insertSql
);
StmtUtilTools
.
SetTableNameTags
(
stmt
,
tableName
+
"_t1"
,
tags
);
StmtUtilTools
.
BindParamBatch
(
stmt
,
mbind
);
StmtUtilTools
.
AddBatch
(
stmt
);
StmtUtilTools
.
StmtExecute
(
stmt
);
StmtUtilTools
.
StmtClose
(
stmt
);
DataSource
.
FreeTaosBind
(
tags
);
DataSource
.
FreeTaosMBind
(
mbind
);
}
}
public
class
StableColumnByColumn
{
DataSource
data
=
new
DataSource
();
TAOS_BIND
[]
tags
=
DataSource
.
getTags
();
TAOS_MULTI_BIND
[]
mbind
=
DataSource
.
GetMultiBindArr
();
public
void
Test
(
IntPtr
conn
,
string
tableName
)
{
String
createTb
=
"create stable "
+
tableName
+
" (ts timestamp ,b bool,v1 tinyint,v2 smallint,v4 int,v8 bigint,f4 float,f8 double,u1 tinyint unsigned,u2 smallint unsigned,u4 int unsigned,u8 bigint unsigned,bin binary(200),blob nchar(200))tags(bo bool,tt tinyint,si smallint,ii int,bi bigint,tu tinyint unsigned,su smallint unsigned,iu int unsigned,bu bigint unsigned,ff float ,dd double ,bb binary(200),nc nchar(200));"
;
String
insertSql
=
"insert into ? using "
+
tableName
+
" tags(?,?,?,?,?,?,?,?,?,?,?,?,?) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
;
UtilsTools
.
ExecuteUpdate
(
conn
,
createTb
);
IntPtr
stmt
=
StmtUtilTools
.
StmtInit
(
conn
);
StmtUtilTools
.
StmtPrepare
(
stmt
,
insertSql
);
StmtUtilTools
.
SetTableNameTags
(
stmt
,
tableName
+
"_t1"
,
tags
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
0
],
0
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
1
],
1
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
2
],
2
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
3
],
3
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
4
],
4
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
5
],
5
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
6
],
6
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
7
],
7
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
8
],
8
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
9
],
9
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
10
],
10
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
11
],
11
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
12
],
12
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
13
],
13
);
StmtUtilTools
.
AddBatch
(
stmt
);
StmtUtilTools
.
StmtExecute
(
stmt
);
StmtUtilTools
.
StmtClose
(
stmt
);
DataSource
.
FreeTaosBind
(
tags
);
DataSource
.
FreeTaosMBind
(
mbind
);
}
}
public
class
StableStmtCases
{
/// <author>xiaolei</author>
/// <Name>StableStmtCases.TestBindSingleLineCn</Name>
/// <describe>Test stmt insert single line of chinese character into stable by column after column </describe>
/// <filename>StmtSTable.cs</filename>
/// <result>pass or failed </result>
public
void
TestBindSingleLineCn
(
IntPtr
conn
,
string
tableName
)
{
TAOS_BIND
[]
tags
=
DataSource
.
getCNTags
();
TAOS_BIND
[]
binds
=
DataSource
.
getNtableCNRow
();
String
createTb
=
"create stable "
+
tableName
+
" (ts timestamp,v1 tinyint,v2 smallint,v4 int,v8 bigint,u1 tinyint unsigned,u2 smallint unsigned,u4 int unsigned,u8 bigint unsigned,f4 float,f8 double,bin binary(200),blob nchar(200),b bool,nilcol int)tags(bo bool,tt tinyint,si smallint,ii int,bi bigint,tu tinyint unsigned,su smallint unsigned,iu int unsigned,bu bigint unsigned,ff float ,dd double ,bb binary(200),nc nchar(200));"
;
String
insertSql
=
"insert into ? using "
+
tableName
+
" tags(?,?,?,?,?,?,?,?,?,?,?,?,?) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
;
UtilsTools
.
ExecuteUpdate
(
conn
,
createTb
);
IntPtr
stmt
=
StmtUtilTools
.
StmtInit
(
conn
);
StmtUtilTools
.
StmtPrepare
(
stmt
,
insertSql
);
StmtUtilTools
.
SetTableNameTags
(
stmt
,
tableName
+
"_t1"
,
tags
);
StmtUtilTools
.
BindParam
(
stmt
,
binds
);
StmtUtilTools
.
AddBatch
(
stmt
);
StmtUtilTools
.
StmtExecute
(
stmt
);
StmtUtilTools
.
StmtClose
(
stmt
);
DataSource
.
FreeTaosBind
(
tags
);
DataSource
.
FreeTaosBind
(
binds
);
string
querySql
=
"select * from "
+
tableName
;
IntPtr
res
=
UtilsTools
.
ExecuteQuery
(
conn
,
querySql
);
UtilsTools
.
DisplayRes
(
res
);
}
/// <author>xiaolei</author>
/// <Name>StableStmtCases.TestBindColumnCn</Name>
/// <describe>Test stmt insert single line of chinese character into stable by column after column </describe>
/// <filename>StmtSTable.cs</filename>
/// <result>pass or failed </result>
public
void
TestBindColumnCn
(
IntPtr
conn
,
string
tableName
)
{
DataSource
data
=
new
DataSource
();
TAOS_BIND
[]
tags
=
DataSource
.
getCNTags
();
TAOS_MULTI_BIND
[]
mbind
=
DataSource
.
GetMultiBindCNArr
();
String
createTb
=
"create stable "
+
tableName
+
" (ts timestamp ,b bool,v1 tinyint,v2 smallint,v4 int,v8 bigint,f4 float,f8 double,u1 tinyint unsigned,u2 smallint unsigned,u4 int unsigned,u8 bigint unsigned,bin binary(200),blob nchar(200))tags(bo bool,tt tinyint,si smallint,ii int,bi bigint,tu tinyint unsigned,su smallint unsigned,iu int unsigned,bu bigint unsigned,ff float ,dd double ,bb binary(200),nc nchar(200));"
;
String
insertSql
=
"insert into ? using "
+
tableName
+
" tags(?,?,?,?,?,?,?,?,?,?,?,?,?) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
;
UtilsTools
.
ExecuteUpdate
(
conn
,
createTb
);
IntPtr
stmt
=
StmtUtilTools
.
StmtInit
(
conn
);
StmtUtilTools
.
StmtPrepare
(
stmt
,
insertSql
);
StmtUtilTools
.
SetTableNameTags
(
stmt
,
tableName
+
"_t1"
,
tags
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
0
],
0
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
1
],
1
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
2
],
2
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
3
],
3
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
4
],
4
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
5
],
5
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
6
],
6
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
7
],
7
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
8
],
8
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
9
],
9
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
10
],
10
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
11
],
11
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
12
],
12
);
StmtUtilTools
.
BindSingleParamBatch
(
stmt
,
mbind
[
13
],
13
);
StmtUtilTools
.
AddBatch
(
stmt
);
StmtUtilTools
.
StmtExecute
(
stmt
);
StmtUtilTools
.
StmtClose
(
stmt
);
DataSource
.
FreeTaosBind
(
tags
);
DataSource
.
FreeTaosMBind
(
mbind
);
string
querySql
=
"select * from "
+
tableName
;
IntPtr
res
=
UtilsTools
.
ExecuteQuery
(
conn
,
querySql
);
UtilsTools
.
DisplayRes
(
res
);
}
/// <author>xiaolei</author>
/// <Name>StableStmtCases.TestBindMultiLineCn</Name>
/// <describe>Test stmt insert single line of chinese character into stable by column after column </describe>
/// <filename>StmtSTable.cs</filename>
/// <result>pass or failed </result>
public
void
TestBindMultiLineCn
(
IntPtr
conn
,
string
tableName
)
{
TAOS_BIND
[]
tags
=
DataSource
.
getCNTags
();
TAOS_MULTI_BIND
[]
mbind
=
DataSource
.
GetMultiBindCNArr
();
String
createTb
=
"create stable "
+
tableName
+
" (ts timestamp ,b bool,v1 tinyint,v2 smallint,v4 int,v8 bigint,f4 float,f8 double,u1 tinyint unsigned,u2 smallint unsigned,u4 int unsigned,u8 bigint unsigned,bin binary(200),blob nchar(200))tags(bo bool,tt tinyint,si smallint,ii int,bi bigint,tu tinyint unsigned,su smallint unsigned,iu int unsigned,bu bigint unsigned,ff float ,dd double ,bb binary(200),nc nchar(200));"
;
String
insertSql
=
"insert into ? using "
+
tableName
+
" tags(?,?,?,?,?,?,?,?,?,?,?,?,?) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
;
UtilsTools
.
ExecuteUpdate
(
conn
,
createTb
);
IntPtr
stmt
=
StmtUtilTools
.
StmtInit
(
conn
);
StmtUtilTools
.
StmtPrepare
(
stmt
,
insertSql
);
StmtUtilTools
.
SetTableNameTags
(
stmt
,
tableName
+
"_t1"
,
tags
);
StmtUtilTools
.
BindParamBatch
(
stmt
,
mbind
);
StmtUtilTools
.
AddBatch
(
stmt
);
StmtUtilTools
.
StmtExecute
(
stmt
);
StmtUtilTools
.
StmtClose
(
stmt
);
DataSource
.
FreeTaosBind
(
tags
);
DataSource
.
FreeTaosMBind
(
mbind
);
string
querySql
=
"select * from "
+
tableName
;
IntPtr
res
=
UtilsTools
.
ExecuteQuery
(
conn
,
querySql
);
UtilsTools
.
DisplayRes
(
res
);
}
}
}
\ No newline at end of file
src/connector/C#/src/test/Cases/TaosFeild.cs
已删除
100644 → 0
浏览文件 @
fa83c300
using
System
;
using
Test.UtilsTools
;
using
TDengineDriver
;
using
System.Collections.Generic
;
using
System.Runtime.InteropServices
;
namespace
Cases
{
public
class
FetchFields
{
public
void
Test
(
IntPtr
conn
,
string
tableName
)
{
IntPtr
res
=
IntPtr
.
Zero
;
String
createTb
=
"create stable "
+
tableName
+
" (ts timestamp ,b bool,v1 tinyint,v2 smallint,v4 int,v8 bigint,f4 float,f8 double,u1 tinyint unsigned,u2 smallint unsigned,u4 int unsigned,u8 bigint unsigned,bin binary(200),blob nchar(200))tags(jsontag json);"
;
String
insertSql
=
"insert into "
+
tableName
+
"_t1 using "
+
tableName
+
" tags('{\"k1\": \"v1\"}') values(1637064040000,true,1,2,3,4,5,6,7,8,9,10,'XI','XII')"
;
String
selectSql
=
"select * from "
+
tableName
;
String
dropSql
=
"drop table "
+
tableName
;
UtilsTools
.
ExecuteQuery
(
conn
,
createTb
);
UtilsTools
.
ExecuteQuery
(
conn
,
insertSql
);
res
=
UtilsTools
.
ExecuteQuery
(
conn
,
selectSql
);
UtilsTools
.
ExecuteQuery
(
conn
,
dropSql
);
List
<
TDengineMeta
>
metas
=
new
List
<
TDengineMeta
>();
metas
=
TDengine
.
FetchFields
(
res
);
if
(
metas
.
Capacity
==
0
)
{
Console
.
WriteLine
(
"empty result"
);
}
else
{
foreach
(
TDengineMeta
meta
in
metas
){
Console
.
WriteLine
(
"col_name:{0},col_type_code:{1},col_type:{2}({3})"
,
meta
.
name
,
meta
.
type
,
meta
.
TypeName
(),
meta
.
size
);
}
}
}
}
}
src/connector/C#/src/test/
Cases
/DataSource.cs
→
src/connector/C#/src/test/
FunctionTest
/DataSource.cs
浏览文件 @
575686c6
using
System
;
using
Test.UtilsTools
;
using
TDengineDriver
;
using
System.Collections.Generic
;
namespace
Test.UtilsTools.DataSource
{
public
class
DataSource
...
...
@@ -23,7 +23,10 @@ namespace Test.UtilsTools.DataSource
public
static
string
[]
binaryArrCn
=
new
string
[
5
]
{
"涛思数据"
,
String
.
Empty
,
null
,
"taosdata涛思数据"
,
"涛思数据TDengine"
};
public
static
string
[]
NcharArrCn
=
new
string
[
5
]
{
"涛思数据"
,
null
,
"taosdata涛思数据"
,
"涛思数据TDengine"
,
String
.
Empty
};
public
static
TAOS_BIND
[]
getTags
()
// Construct a TAOS_BIND array which contains normal character.
// For stmt bind tags,this will be used as tag info
public
static
TAOS_BIND
[]
GetTags
()
{
TAOS_BIND
[]
binds
=
new
TAOS_BIND
[
13
];
binds
[
0
]
=
TaosBind
.
BindBool
(
true
);
...
...
@@ -41,8 +44,59 @@ namespace Test.UtilsTools.DataSource
binds
[
12
]
=
TaosBind
.
BindNchar
(
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKZXCVBNM`1234567890-=+_)(*&^%$#@!~[];,./<>?:{}"
);
return
binds
;
}
// Get the tag data within and string list
// Which will be retrieved as a string List
private
static
List
<
String
>
GetTagData
()
{
List
<
String
>
tagData
=
new
List
<
String
>();
tagData
.
Add
(
true
.
ToString
());
tagData
.
Add
((-
2
).
ToString
());
tagData
.
Add
((
short
.
MaxValue
).
ToString
());
tagData
.
Add
((
int
.
MaxValue
).
ToString
());
tagData
.
Add
((
Int64
.
MaxValue
).
ToString
());
tagData
.
Add
((
byte
.
MaxValue
-
1
).
ToString
());
tagData
.
Add
((
UInt16
.
MaxValue
-
1
).
ToString
());
tagData
.
Add
((
uint
.
MinValue
+
1
).
ToString
());
tagData
.
Add
((
UInt64
.
MinValue
+
1
).
ToString
());
tagData
.
Add
((
11.11F
).
ToString
());
tagData
.
Add
((
22.22D
).
ToString
());
tagData
.
Add
(
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKZXCVBNM`1234567890-=+_)(*&^%$#@!~[];,./<>?:{}"
);
tagData
.
Add
(
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKZXCVBNM`1234567890-=+_)(*&^%$#@!~[];,./<>?:{}"
);
return
tagData
;
}
public
static
TAOS_BIND
[]
getCNTags
()
public
static
List
<
string
>
GetMultiBindStableRowData
()
{
List
<
string
>
rowData
=
new
List
<
String
>();
List
<
string
>
tagData
=
GetTagData
();
for
(
int
i
=
0
;
i
<
tsArr
.
Length
;
i
++)
{
rowData
.
Add
(
tsArr
[
i
].
ToString
());
rowData
.
Add
(
boolArr
[
i
].
Equals
(
null
)
?
"NULL"
:
boolArr
[
i
].
ToString
());
rowData
.
Add
(
tinyIntArr
[
i
].
Equals
(
null
)
?
"NULL"
:
tinyIntArr
[
i
].
ToString
());
rowData
.
Add
(
shortArr
[
i
].
Equals
(
null
)
?
"NULL"
:
shortArr
[
i
].
ToString
());
rowData
.
Add
(
intArr
[
i
].
Equals
(
null
)
?
"NULL"
:
intArr
[
i
].
ToString
());
rowData
.
Add
(
longArr
[
i
].
Equals
(
null
)
?
"NULL"
:
longArr
[
i
].
ToString
());
rowData
.
Add
(
floatArr
[
i
].
Equals
(
null
)
?
"NULL"
:
floatArr
[
i
].
ToString
());
rowData
.
Add
(
doubleArr
[
i
].
Equals
(
null
)
?
"NULL"
:
doubleArr
[
i
].
ToString
());
rowData
.
Add
(
uTinyIntArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uTinyIntArr
[
i
].
ToString
());
rowData
.
Add
(
uShortArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uShortArr
[
i
].
ToString
());
rowData
.
Add
(
uIntArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uIntArr
[
i
].
ToString
());
rowData
.
Add
(
uLongArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uLongArr
[
i
].
ToString
());
rowData
.
Add
(
String
.
IsNullOrEmpty
(
binaryArr
[
i
])
?
"NULL"
:
binaryArr
[
i
]);
rowData
.
Add
(
String
.
IsNullOrEmpty
(
ncharArr
[
i
])
?
"NULL"
:
ncharArr
[
i
]);
rowData
.
AddRange
(
tagData
);
// Console.WriteLine("binaryArrCn[{0}]:{1},ncharArr[{0}]:{2}",i,String.IsNullOrEmpty(binaryArrCn[i]) ? "NULL" : binaryArrCn[i],String.IsNullOrEmpty(ncharArr[i]) ? "NULL" : NcharArrCn[i]);
// Console.WriteLine("binaryArrCn[{0}]:{1},ncharArr[{0}]:{2}",i,String.IsNullOrEmpty(binaryArrCn[i]) ? 0 :binaryArrCn[i].Length, String.IsNullOrEmpty(ncharArr[i]) ? 0 : NcharArrCn[i].Length);
// Console.WriteLine("========");
}
return
rowData
;
}
// Construct a TAOS_BIND array which contains chinese character.
// For stmt bind tags,this will be used as tag info
public
static
TAOS_BIND
[]
GetCNTags
()
{
TAOS_BIND
[]
binds
=
new
TAOS_BIND
[
13
];
binds
[
0
]
=
TaosBind
.
BindBool
(
true
);
...
...
@@ -57,11 +111,32 @@ namespace Test.UtilsTools.DataSource
binds
[
9
]
=
TaosBind
.
BindFloat
(
11.11F
);
binds
[
10
]
=
TaosBind
.
BindDouble
(
22.22D
);
binds
[
11
]
=
TaosBind
.
BindBinary
(
"TDengine涛思数据"
);
binds
[
12
]
=
TaosBind
.
BindNchar
(
"涛思"
);
binds
[
12
]
=
TaosBind
.
BindNchar
(
"涛思
数据taos
"
);
return
binds
;
}
public
static
TAOS_BIND
[]
getNtableCNRow
()
// Get the tag data within and string list
// Which will be retrieved as a string List
private
static
List
<
String
>
GetTagCnData
()
{
List
<
String
>
tagData
=
new
List
<
String
>();
tagData
.
Add
(
true
.
ToString
());
tagData
.
Add
((-
2
).
ToString
());
tagData
.
Add
((
short
.
MaxValue
-
1
).
ToString
());
tagData
.
Add
((
int
.
MaxValue
-
1
).
ToString
());
tagData
.
Add
((
Int64
.
MaxValue
-
1
).
ToString
());
tagData
.
Add
((
byte
.
MaxValue
-
1
).
ToString
());
tagData
.
Add
((
UInt16
.
MaxValue
-
1
).
ToString
());
tagData
.
Add
((
uint
.
MinValue
+
1
).
ToString
());
tagData
.
Add
((
UInt64
.
MinValue
+
1
).
ToString
());
tagData
.
Add
((
11.11F
).
ToString
());
tagData
.
Add
((
22.22D
).
ToString
());
tagData
.
Add
(
"TDengine涛思数据"
);
tagData
.
Add
(
"涛思数据taos"
);
return
tagData
;
}
// A line of data that's without CN character.
// Which is construct as an TAOS_BIND array
public
static
TAOS_BIND
[]
GetNtableCNRow
()
{
TAOS_BIND
[]
binds
=
new
TAOS_BIND
[
15
];
binds
[
0
]
=
TaosBind
.
BindTimestamp
(
1637064040000
);
...
...
@@ -81,8 +156,40 @@ namespace Test.UtilsTools.DataSource
binds
[
14
]
=
TaosBind
.
BindNil
();
return
binds
;
}
//Get and list data that will be insert into table
public
static
List
<
String
>
GetNtableCNRowData
()
{
var
data
=
new
List
<
string
>{
"1637064040000"
,
"-2"
,
short
.
MaxValue
.
ToString
(),
int
.
MaxValue
.
ToString
(),
Int64
.
MaxValue
.
ToString
(),
(
byte
.
MaxValue
-
1
).
ToString
(),
(
UInt16
.
MaxValue
-
1
).
ToString
(),
(
uint
.
MinValue
+
1
).
ToString
(),
(
UInt64
.
MinValue
+
1
).
ToString
(),
(
11.11F
).
ToString
(),
(
22.22D
).
ToString
(),
"TDengine数据"
,
"taosdata涛思数据"
,
"True"
,
"NULL"
};
return
data
;
}
// Get the data value and tag values which have chinese characters
// And retrieved as a string list.This is single Line.
public
static
List
<
String
>
GetStableCNRowData
()
{
List
<
String
>
columnData
=
GetNtableCNRowData
();
List
<
String
>
tagData
=
GetTagCnData
();
columnData
.
AddRange
(
tagData
);
return
columnData
;
}
public
static
TAOS_BIND
[]
getNtableRow
()
// A line of data that's without CN character
public
static
TAOS_BIND
[]
GetNtableRow
()
{
TAOS_BIND
[]
binds
=
new
TAOS_BIND
[
15
];
binds
[
0
]
=
TaosBind
.
BindTimestamp
(
1637064040000
);
...
...
@@ -102,6 +209,31 @@ namespace Test.UtilsTools.DataSource
binds
[
14
]
=
TaosBind
.
BindNil
();
return
binds
;
}
// A List of data ,use as expectResData. The value is equal to getNtableRow()
public
static
List
<
String
>
GetNtableRowData
()
{
var
data
=
new
List
<
string
>{
"1637064040000"
,
"-2"
,
short
.
MaxValue
.
ToString
(),
int
.
MaxValue
.
ToString
(),
(
Int64
.
MaxValue
).
ToString
(),
(
byte
.
MaxValue
-
1
).
ToString
(),
(
UInt16
.
MaxValue
-
1
).
ToString
(),
(
uint
.
MinValue
+
1
).
ToString
(),
(
UInt64
.
MinValue
+
1
).
ToString
(),
(
11.11F
).
ToString
(),
(
22.22D
).
ToString
(),
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKZXCVBNM`1234567890-=+_)(*&^%$#@!~[];,./<>?:{}"
,
"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKZXCVBNM`1234567890-=+_)(*&^%$#@!~[];,./<>?:{}"
,
true
.
ToString
(),
"NULL"
};
return
data
;
}
// Five lines of data, that is construct as taos_mutli_bind array.
// There aren't any CN character
public
static
TAOS_MULTI_BIND
[]
GetMultiBindArr
()
{
TAOS_MULTI_BIND
[]
mBinds
=
new
TAOS_MULTI_BIND
[
14
];
...
...
@@ -121,6 +253,35 @@ namespace Test.UtilsTools.DataSource
mBinds
[
13
]
=
TaosMultiBind
.
MultiBindNchar
(
ncharArr
);
return
mBinds
;
}
// A List of data ,use as expectResData. The value is equal to GetMultiBindCNArr()
public
static
List
<
string
>
GetMultiBindResData
()
{
var
rowData
=
new
List
<
string
>();
for
(
int
i
=
0
;
i
<
tsArr
.
Length
;
i
++)
{
rowData
.
Add
(
tsArr
[
i
].
ToString
());
rowData
.
Add
(
boolArr
[
i
].
Equals
(
null
)
?
"NULL"
:
boolArr
[
i
].
ToString
());
rowData
.
Add
(
tinyIntArr
[
i
].
Equals
(
null
)
?
"NULL"
:
tinyIntArr
[
i
].
ToString
());
rowData
.
Add
(
shortArr
[
i
].
Equals
(
null
)
?
"NULL"
:
shortArr
[
i
].
ToString
());
rowData
.
Add
(
intArr
[
i
].
Equals
(
null
)
?
"NULL"
:
intArr
[
i
].
ToString
());
rowData
.
Add
(
longArr
[
i
].
Equals
(
null
)
?
"NULL"
:
longArr
[
i
].
ToString
());
rowData
.
Add
(
floatArr
[
i
].
Equals
(
null
)
?
"NULL"
:
floatArr
[
i
].
ToString
());
rowData
.
Add
(
doubleArr
[
i
].
Equals
(
null
)
?
"NULL"
:
doubleArr
[
i
].
ToString
());
rowData
.
Add
(
uTinyIntArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uTinyIntArr
[
i
].
ToString
());
rowData
.
Add
(
uShortArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uShortArr
[
i
].
ToString
());
rowData
.
Add
(
uIntArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uIntArr
[
i
].
ToString
());
rowData
.
Add
(
uLongArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uLongArr
[
i
].
ToString
());
rowData
.
Add
(
String
.
IsNullOrEmpty
(
binaryArr
[
i
])
?
"NULL"
:
binaryArr
[
i
]);
rowData
.
Add
(
String
.
IsNullOrEmpty
(
ncharArr
[
i
])
?
"NULL"
:
ncharArr
[
i
]);
// Console.WriteLine("binaryArrCn[{0}]:{1},NcharArrCn[{0}]:{2}",i,String.IsNullOrEmpty(binaryArrCn[i]) ? "NULL" : binaryArrCn[i],String.IsNullOrEmpty(NcharArrCn[i]) ? "NULL" : NcharArrCn[i]);
// Console.WriteLine("binaryArrCn[{0}]:{1},NcharArrCn[{0}]:{2}",i,String.IsNullOrEmpty(binaryArrCn[i]) ? 0 :binaryArrCn[i].Length, String.IsNullOrEmpty(NcharArrCn[i]) ? 0 : NcharArrCn[i].Length);
// Console.WriteLine("========");
}
return
rowData
;
}
// Five lines of data, that is construct as taos_mutli_bind array.
// There aren some CN characters and letters.
public
static
TAOS_MULTI_BIND
[]
GetMultiBindCNArr
()
{
TAOS_MULTI_BIND
[]
mBinds
=
new
TAOS_MULTI_BIND
[
14
];
...
...
@@ -140,6 +301,62 @@ namespace Test.UtilsTools.DataSource
mBinds
[
13
]
=
TaosMultiBind
.
MultiBindNchar
(
NcharArrCn
);
return
mBinds
;
}
// A List of data ,use as expectResData. The value is equal to GetMultiBindCNArr()
public
static
List
<
string
>
GetMultiBindCNRowData
()
{
var
rowData
=
new
List
<
string
>();
for
(
int
i
=
0
;
i
<
tsArr
.
Length
;
i
++)
{
rowData
.
Add
(
tsArr
[
i
].
ToString
());
rowData
.
Add
(
boolArr
[
i
].
Equals
(
null
)
?
"NULL"
:
boolArr
[
i
].
ToString
());
rowData
.
Add
(
tinyIntArr
[
i
].
Equals
(
null
)
?
"NULL"
:
tinyIntArr
[
i
].
ToString
());
rowData
.
Add
(
shortArr
[
i
].
Equals
(
null
)
?
"NULL"
:
shortArr
[
i
].
ToString
());
rowData
.
Add
(
intArr
[
i
].
Equals
(
null
)
?
"NULL"
:
intArr
[
i
].
ToString
());
rowData
.
Add
(
longArr
[
i
].
Equals
(
null
)
?
"NULL"
:
longArr
[
i
].
ToString
());
rowData
.
Add
(
floatArr
[
i
].
Equals
(
null
)
?
"NULL"
:
floatArr
[
i
].
ToString
());
rowData
.
Add
(
doubleArr
[
i
].
Equals
(
null
)
?
"NULL"
:
doubleArr
[
i
].
ToString
());
rowData
.
Add
(
uTinyIntArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uTinyIntArr
[
i
].
ToString
());
rowData
.
Add
(
uShortArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uShortArr
[
i
].
ToString
());
rowData
.
Add
(
uIntArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uIntArr
[
i
].
ToString
());
rowData
.
Add
(
uLongArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uLongArr
[
i
].
ToString
());
rowData
.
Add
(
String
.
IsNullOrEmpty
(
binaryArrCn
[
i
])
?
"NULL"
:
binaryArrCn
[
i
]);
rowData
.
Add
(
String
.
IsNullOrEmpty
(
NcharArrCn
[
i
])
?
"NULL"
:
NcharArrCn
[
i
]);
// Console.WriteLine("binaryArrCn[{0}]:{1},NcharArrCn[{0}]:{2}",i,String.IsNullOrEmpty(binaryArrCn[i]) ? "NULL" : binaryArrCn[i],String.IsNullOrEmpty(NcharArrCn[i]) ? "NULL" : NcharArrCn[i]);
// Console.WriteLine("binaryArrCn[{0}]:{1},NcharArrCn[{0}]:{2}",i,String.IsNullOrEmpty(binaryArrCn[i]) ? 0 :binaryArrCn[i].Length, String.IsNullOrEmpty(NcharArrCn[i]) ? 0 : NcharArrCn[i].Length);
// Console.WriteLine("========");
}
return
rowData
;
}
public
static
List
<
String
>
GetMultiBindStableCNRowData
()
{
List
<
String
>
columnData
=
new
List
<
string
>();
List
<
String
>
tagData
=
GetTagCnData
();
for
(
int
i
=
0
;
i
<
tsArr
.
Length
;
i
++)
{
columnData
.
Add
(
tsArr
[
i
].
ToString
());
columnData
.
Add
(
boolArr
[
i
].
Equals
(
null
)
?
"NULL"
:
boolArr
[
i
].
ToString
());
columnData
.
Add
(
tinyIntArr
[
i
].
Equals
(
null
)
?
"NULL"
:
tinyIntArr
[
i
].
ToString
());
columnData
.
Add
(
shortArr
[
i
].
Equals
(
null
)
?
"NULL"
:
shortArr
[
i
].
ToString
());
columnData
.
Add
(
intArr
[
i
].
Equals
(
null
)
?
"NULL"
:
intArr
[
i
].
ToString
());
columnData
.
Add
(
longArr
[
i
].
Equals
(
null
)
?
"NULL"
:
longArr
[
i
].
ToString
());
columnData
.
Add
(
floatArr
[
i
].
Equals
(
null
)
?
"NULL"
:
floatArr
[
i
].
ToString
());
columnData
.
Add
(
doubleArr
[
i
].
Equals
(
null
)
?
"NULL"
:
doubleArr
[
i
].
ToString
());
columnData
.
Add
(
uTinyIntArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uTinyIntArr
[
i
].
ToString
());
columnData
.
Add
(
uShortArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uShortArr
[
i
].
ToString
());
columnData
.
Add
(
uIntArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uIntArr
[
i
].
ToString
());
columnData
.
Add
(
uLongArr
[
i
].
Equals
(
null
)
?
"NULL"
:
uLongArr
[
i
].
ToString
());
columnData
.
Add
(
String
.
IsNullOrEmpty
(
binaryArrCn
[
i
])
?
"NULL"
:
binaryArrCn
[
i
]);
columnData
.
Add
(
String
.
IsNullOrEmpty
(
NcharArrCn
[
i
])
?
"NULL"
:
NcharArrCn
[
i
]);
columnData
.
AddRange
(
tagData
);
// Console.WriteLine("binaryArrCn[{0}]:{1},NcharArrCn[{0}]:{2}",i,String.IsNullOrEmpty(binaryArrCn[i]) ? "NULL" : binaryArrCn[i],String.IsNullOrEmpty(NcharArrCn[i]) ? "NULL" : NcharArrCn[i]);
// Console.WriteLine("binaryArrCn[{0}]:{1},NcharArrCn[{0}]:{2}",i,String.IsNullOrEmpty(binaryArrCn[i]) ? 0 :binaryArrCn[i].Length, String.IsNullOrEmpty(NcharArrCn[i]) ? 0 : NcharArrCn[i].Length);
// Console.WriteLine("========");
}
return
columnData
;
}
public
static
TAOS_BIND
[]
GetQueryCondition
()
{
...
...
@@ -158,7 +375,47 @@ namespace Test.UtilsTools.DataSource
{
TaosMultiBind
.
FreeTaosBind
(
mbinds
);
}
//Get the TDengineMeta list from the ddl either normal table or stable
public
static
List
<
TDengineMeta
>
GetMetaFromDLL
(
string
dllStr
)
{
var
expectResMeta
=
new
List
<
TDengineMeta
>();
//"CREATE TABLE meters(ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS(location BINARY(30), groupId INT);";
int
bracetInd
=
dllStr
.
IndexOf
(
"("
);
//(ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS(location BINARY(30), groupId INT);
string
subDllStr
=
dllStr
.
Substring
(
bracetInd
);
String
[]
stableSeparators
=
new
String
[]
{
"tags"
,
"TAGS"
};
//(ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT)
//(location BINARY(30), groupId INT)
String
[]
dllStrElements
=
subDllStr
.
Split
(
stableSeparators
,
StringSplitOptions
.
RemoveEmptyEntries
);
//(ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT)
dllStrElements
[
0
]
=
dllStrElements
[
0
].
Substring
(
1
,
dllStrElements
[
0
].
Length
-
2
);
String
[]
finalStr1
=
dllStrElements
[
0
].
Split
(
','
,
StringSplitOptions
.
RemoveEmptyEntries
);
foreach
(
string
item
in
finalStr1
)
{
//ts TIMESTAMP
string
[]
itemArr
=
item
.
Split
(
' '
,
2
,
StringSplitOptions
.
RemoveEmptyEntries
);
// Console.WriteLine("GetMetaFromDLL():{0},{1}",itemArr[0],itemArr[1]);
expectResMeta
.
Add
(
UtilsTools
.
ConstructTDengineMeta
(
itemArr
[
0
],
itemArr
[
1
]));
}
if
(
dllStr
.
Contains
(
"TAGS"
)
||
dllStr
.
Contains
(
"tags"
))
{
//location BINARY(30), groupId INT
dllStrElements
[
1
]
=
dllStrElements
[
1
].
Substring
(
1
,
dllStrElements
[
1
].
Length
-
2
);
//location BINARY(30) groupId INT
String
[]
finalStr2
=
dllStrElements
[
1
].
Split
(
','
,
StringSplitOptions
.
RemoveEmptyEntries
);
Console
.
WriteLine
(
"========"
);
foreach
(
string
item
in
finalStr2
)
{
//location BINARY(30)
string
[]
itemArr
=
item
.
Split
(
' '
,
2
,
StringSplitOptions
.
RemoveEmptyEntries
);
// Console.WriteLine("GetMetaFromDLL():{0},{1}",itemArr[0],itemArr[1]);
expectResMeta
.
Add
(
UtilsTools
.
ConstructTDengineMeta
(
itemArr
[
0
],
itemArr
[
1
]));
}
}
return
expectResMeta
;
}
}
}
\ No newline at end of file
src/connector/C#/src/test/FunctionTest/FetchLength.cs
0 → 100644
浏览文件 @
575686c6
using
System
;
using
Test.UtilsTools
;
using
System.Collections.Generic
;
using
Xunit
;
using
TDengineDriver
;
using
Test.UtilsTools.ResultSet
;
namespace
Cases
{
public
class
FetchLengthCase
{
/// <author>xiaolei</author>
/// <Name>TestRetrieveBinary</Name>
/// <describe>TD-12103 C# connector fetch_row with binary data retrieving error</describe>
/// <filename>FetchLength.cs</filename>
/// <result>pass or failed </result>
[
Fact
(
DisplayName
=
"Skip FetchLengthCase.TestRetrieveBinary()"
)]
public
void
TestRetrieveBinary
()
{
IntPtr
conn
=
UtilsTools
.
TDConnection
();
var
expectData
=
new
List
<
string
>
{
"log"
,
"test"
,
"db02"
,
"db3"
};
var
expectMeta
=
new
List
<
TDengineMeta
>{
UtilsTools
.
ConstructTDengineMeta
(
"ts"
,
"timestamp"
),
UtilsTools
.
ConstructTDengineMeta
(
"name"
,
"binary(10)"
),
UtilsTools
.
ConstructTDengineMeta
(
"n"
,
"int"
)
};
string
sql0
=
"drop table if exists stb1;"
;
string
sql1
=
"create stable if not exists stb1 (ts timestamp, name binary(10)) tags(n int);"
;
string
sql2
=
$"insert into tb1 using stb1 tags(1) values(now, '
{
expectData
[
0
]}
');"
;
string
sql3
=
$"insert into tb2 using stb1 tags(2) values(now, '
{
expectData
[
1
]}
');"
;
string
sql4
=
$"insert into tb3 using stb1 tags(3) values(now, '
{
expectData
[
2
]}
');"
;
string
sql5
=
$"insert into tb4 using stb1 tags(4) values(now, '
{
expectData
[
3
]}
');"
;
string
sql6
=
"select distinct(name) from stb1;"
;
UtilsTools
.
ExecuteQuery
(
conn
,
sql0
);
UtilsTools
.
ExecuteQuery
(
conn
,
sql1
);
UtilsTools
.
ExecuteQuery
(
conn
,
sql2
);
UtilsTools
.
ExecuteQuery
(
conn
,
sql3
);
UtilsTools
.
ExecuteQuery
(
conn
,
sql4
);
UtilsTools
.
ExecuteQuery
(
conn
,
sql5
);
IntPtr
resPtr
=
IntPtr
.
Zero
;
resPtr
=
UtilsTools
.
ExecuteQuery
(
conn
,
sql6
);
ResultSet
actualResult
=
new
ResultSet
(
resPtr
);
List
<
string
>
actualData
=
actualResult
.
GetResultData
();
List
<
TDengineMeta
>
actualMeta
=
actualResult
.
GetResultMeta
();
expectData
.
Reverse
();
Assert
.
Equal
(
expectData
[
0
],
actualData
[
0
]);
Assert
.
Equal
(
expectMeta
[
1
].
name
,
actualMeta
[
0
].
name
);
Assert
.
Equal
(
expectMeta
[
1
].
size
,
actualMeta
[
0
].
size
);
Assert
.
Equal
(
expectMeta
[
1
].
type
,
actualMeta
[
0
].
type
);
}
}
}
src/connector/C#/src/test/FunctionTest/FunctionTest.csproj
0 → 100644
浏览文件 @
575686c6
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable>
<NoWarn>CS1591;CS0168</NoWarn>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<DocumentationFile>..\doc\FunctionTest.XML</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.0.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\TDengineDriver\TDengineDriver.csproj" />
</ItemGroup>
</Project>
src/connector/C#/src/test/FunctionTest/ResultSetUtils.cs
0 → 100644
浏览文件 @
575686c6
using
System
;
using
TDengineDriver
;
using
System.Runtime.InteropServices
;
using
System.Text
;
using
System.Collections.Generic
;
namespace
Test.UtilsTools.ResultSet
{
public
class
ResultSet
{
private
List
<
TDengineMeta
>
resultMeta
;
private
List
<
String
>
resultData
;
// private bool isValidResult = false;
public
ResultSet
(
IntPtr
res
)
{
resultMeta
=
UtilsTools
.
GetResField
(
res
);
resultData
=
UtilsTools
.
GetResData
(
res
);
}
public
ResultSet
(
List
<
TDengineMeta
>
metas
,
List
<
String
>
datas
)
{
resultMeta
=
metas
;
resultData
=
datas
;
}
public
List
<
String
>
GetResultData
()
{
return
resultData
;
}
public
List
<
TDengineMeta
>
GetResultMeta
()
{
return
resultMeta
;
}
}
}
\ No newline at end of file
src/connector/C#/src/test/
Cases
/StmtNormalTable.cs
→
src/connector/C#/src/test/
FunctionTest
/StmtNormalTable.cs
浏览文件 @
575686c6
此差异已折叠。
点击以展开。
src/connector/C#/src/test/
Cases
/StmtQuery.cs
→
src/connector/C#/src/test/
FunctionTest
/StmtQuery.cs
浏览文件 @
575686c6
文件已移动
src/connector/C#/src/test/FunctionTest/StmtStable.cs
0 → 100644
浏览文件 @
575686c6
此差异已折叠。
点击以展开。
src/connector/C#/src/test/
Cases
/StmtUtil.cs
→
src/connector/C#/src/test/
FunctionTest
/StmtUtil.cs
浏览文件 @
575686c6
文件已移动
src/connector/C#/src/test/FunctionTest/TaosFeild.cs
0 → 100644
浏览文件 @
575686c6
using
System
;
using
Test.UtilsTools
;
using
TDengineDriver
;
using
System.Collections.Generic
;
using
Xunit
;
using
Test.UtilsTools.ResultSet
;
namespace
Cases
{
public
class
FetchFieldCases
{
/// <author>xiaolei</author>
/// <Name>FetchFieldCases.TestFetchFieldJsonTag</Name>
/// <describe>test taos_fetch_fields(), check the meta data</describe>
/// <filename>TaosFeild.cs</filename>
/// <result>pass or failed </result>
[
Fact
(
DisplayName
=
"FetchFieldCases.TestFetchFieldJsonTag()"
)]
public
void
TestFetchFieldJsonTag
()
{
IntPtr
conn
=
UtilsTools
.
TDConnection
();
IntPtr
_res
=
IntPtr
.
Zero
;
string
tableName
=
"fetchfeilds"
;
var
expectResMeta
=
new
List
<
TDengineMeta
>
{
UtilsTools
.
ConstructTDengineMeta
(
"ts"
,
"timestamp"
),
UtilsTools
.
ConstructTDengineMeta
(
"b"
,
"bool"
),
UtilsTools
.
ConstructTDengineMeta
(
"v1"
,
"tinyint"
),
UtilsTools
.
ConstructTDengineMeta
(
"v2"
,
"smallint"
),
UtilsTools
.
ConstructTDengineMeta
(
"v4"
,
"int"
),
UtilsTools
.
ConstructTDengineMeta
(
"v8"
,
"bigint"
),
UtilsTools
.
ConstructTDengineMeta
(
"f4"
,
"float"
),
UtilsTools
.
ConstructTDengineMeta
(
"f8"
,
"double"
),
UtilsTools
.
ConstructTDengineMeta
(
"u1"
,
"tinyint unsigned"
),
UtilsTools
.
ConstructTDengineMeta
(
"u2"
,
"smallint unsigned"
),
UtilsTools
.
ConstructTDengineMeta
(
"u4"
,
"int unsigned"
),
UtilsTools
.
ConstructTDengineMeta
(
"u8"
,
"bigint unsigned"
),
UtilsTools
.
ConstructTDengineMeta
(
"bin"
,
"binary(200)"
),
UtilsTools
.
ConstructTDengineMeta
(
"blob"
,
"nchar(200)"
),
UtilsTools
.
ConstructTDengineMeta
(
"jsontag"
,
"json"
),
};
var
expectResData
=
new
List
<
String
>
{
"1637064040000"
,
"true"
,
"1"
,
"2"
,
"3"
,
"4"
,
"5"
,
"6"
,
"7"
,
"8"
,
"9"
,
"10"
,
"XI"
,
"XII"
,
"{\"k1\": \"v1\"}"
};
String
dropTb
=
"drop table if exists "
+
tableName
;
String
createTb
=
"create stable "
+
tableName
+
" (ts timestamp"
+
",b bool"
+
",v1 tinyint"
+
",v2 smallint"
+
",v4 int"
+
",v8 bigint"
+
",f4 float"
+
",f8 double"
+
",u1 tinyint unsigned"
+
",u2 smallint unsigned"
+
",u4 int unsigned"
+
",u8 bigint unsigned"
+
",bin binary(200)"
+
",blob nchar(200)"
+
")"
+
"tags"
+
"(jsontag json);"
;
String
insertSql
=
"insert into "
+
tableName
+
"_t1 using "
+
tableName
+
" tags('{\"k1\": \"v1\"}') "
+
"values(1637064040000,true,1,2,3,4,5,6,7,8,9,10,'XI','XII')"
;
String
selectSql
=
"select * from "
+
tableName
;
String
dropSql
=
"drop table "
+
tableName
;
UtilsTools
.
ExecuteUpdate
(
conn
,
dropTb
);
UtilsTools
.
ExecuteUpdate
(
conn
,
createTb
);
UtilsTools
.
ExecuteUpdate
(
conn
,
insertSql
);
_res
=
UtilsTools
.
ExecuteQuery
(
conn
,
selectSql
);
ResultSet
actualResult
=
new
ResultSet
(
_res
);
List
<
TDengineMeta
>
actualMeta
=
actualResult
.
GetResultMeta
();
for
(
int
i
=
0
;
i
<
actualMeta
.
Count
;
i
++)
{
Assert
.
Equal
(
expectResMeta
[
i
].
name
,
actualMeta
[
i
].
name
);
Assert
.
Equal
(
expectResMeta
[
i
].
type
,
actualMeta
[
i
].
type
);
Assert
.
Equal
(
expectResMeta
[
i
].
size
,
actualMeta
[
i
].
size
);
}
}
}
}
src/connector/C#/src/test/FunctionTest/Utils.cs
0 → 100644
浏览文件 @
575686c6
using
System
;
using
TDengineDriver
;
using
System.Runtime.InteropServices
;
using
System.Text
;
using
System.Collections.Generic
;
namespace
Test.UtilsTools
{
public
class
UtilsTools
{
static
string
ip
=
"127.0.0.1"
;
static
string
user
=
"root"
;
static
string
password
=
"taosdata"
;
static
string
db
=
""
;
static
short
port
=
0
;
public
static
IntPtr
TDConnection
()
{
TDengine
.
Options
((
int
)
TDengineInitOption
.
TDDB_OPTION_CONFIGDIR
,
GetConfigPath
());
TDengine
.
Options
((
int
)
TDengineInitOption
.
TDDB_OPTION_SHELL_ACTIVITY_TIMER
,
"60"
);
TDengine
.
Init
();
IntPtr
conn
=
TDengine
.
Connect
(
ip
,
user
,
password
,
db
,
port
);
// UtilsTools.ExecuteUpdate(conn, "drop database if exists csharp");
UtilsTools
.
ExecuteUpdate
(
conn
,
"create database if not exists csharp keep 3650"
);
UtilsTools
.
ExecuteUpdate
(
conn
,
"use csharp"
);
return
conn
;
}
public
static
string
GetConfigPath
()
{
string
configDir
=
""
;
if
(
OperatingSystem
.
IsOSPlatform
(
"Windows"
))
{
configDir
=
"C:/TDengine/cfg"
;
}
else
if
(
OperatingSystem
.
IsOSPlatform
(
"Linux"
))
{
configDir
=
"/etc/taos"
;
}
else
if
(
OperatingSystem
.
IsOSPlatform
(
"macOS"
))
{
configDir
=
"/etc/taos"
;
}
return
configDir
;
}
public
static
IntPtr
ExecuteQuery
(
IntPtr
conn
,
String
sql
)
{
IntPtr
res
=
TDengine
.
Query
(
conn
,
sql
);
if
(!
IsValidResult
(
res
))
{
Console
.
Write
(
sql
.
ToString
()
+
" failure, "
);
ExitProgram
();
}
else
{
Console
.
WriteLine
(
sql
.
ToString
()
+
" success"
);
}
return
res
;
}
public
static
IntPtr
ExecuteErrorQuery
(
IntPtr
conn
,
String
sql
)
{
IntPtr
res
=
TDengine
.
Query
(
conn
,
sql
);
if
(!
IsValidResult
(
res
))
{
Console
.
Write
(
sql
.
ToString
()
+
" failure, "
);
ExitProgram
();
}
else
{
Console
.
WriteLine
(
sql
.
ToString
()
+
" success"
);
}
return
res
;
}
public
static
void
ExecuteUpdate
(
IntPtr
conn
,
String
sql
)
{
IntPtr
res
=
TDengine
.
Query
(
conn
,
sql
);
if
(!
IsValidResult
(
res
))
{
Console
.
Write
(
sql
.
ToString
()
+
" failure, "
);
ExitProgram
();
}
else
{
Console
.
WriteLine
(
sql
.
ToString
()
+
" success"
);
}
TDengine
.
FreeResult
(
res
);
}
public
static
void
DisplayRes
(
IntPtr
res
)
{
if
(!
IsValidResult
(
res
))
{
ExitProgram
();
}
List
<
TDengineMeta
>
metas
=
GetResField
(
res
);
int
fieldCount
=
metas
.
Count
;
IntPtr
rowdata
;
// StringBuilder builder = new StringBuilder();
List
<
string
>
datas
=
QueryRes
(
res
,
metas
);
Console
.
Write
(
" DisplayRes ---"
);
for
(
int
i
=
0
;
i
<
metas
.
Count
;
i
++)
{
for
(
int
j
=
0
;
j
<
datas
.
Count
;
j
++)
{
Console
.
Write
(
" {0} ---"
,
datas
[
i
*
j
+
i
]);
}
Console
.
WriteLine
(
""
);
}
// if (TDengine.ErrorNo(res) != 0)
// {
// Console.Write("Query is not complete, Error {0:G}", TDengine.ErrorNo(res), TDengine.Error(res));
// }
// TDengine.FreeResult(res); Console.WriteLine("");
}
public
static
List
<
List
<
string
>>
GetResultSet
(
IntPtr
res
)
{
List
<
List
<
string
>>
result
=
new
List
<
List
<
string
>>();
List
<
string
>
colName
=
new
List
<
string
>();
List
<
string
>
dataRaw
=
new
List
<
string
>();
if
(!
IsValidResult
(
res
))
{
ExitProgram
();
}
List
<
TDengineMeta
>
metas
=
GetResField
(
res
);
result
.
Add
(
colName
);
dataRaw
=
QueryRes
(
res
,
metas
);
result
.
Add
(
dataRaw
);
if
(
TDengine
.
ErrorNo
(
res
)
!=
0
)
{
Console
.
Write
(
"Query is not complete, Error {0:G}"
,
TDengine
.
ErrorNo
(
res
),
TDengine
.
Error
(
res
));
}
return
result
;
}
public
static
bool
IsValidResult
(
IntPtr
res
)
{
if
((
res
==
IntPtr
.
Zero
)
||
(
TDengine
.
ErrorNo
(
res
)
!=
0
))
{
if
(
res
!=
IntPtr
.
Zero
)
{
Console
.
Write
(
"reason: "
+
TDengine
.
Error
(
res
));
return
false
;
}
Console
.
WriteLine
(
""
);
return
false
;
}
return
true
;
}
public
static
void
CloseConnection
(
IntPtr
conn
)
{
ExecuteUpdate
(
conn
,
"drop database if exists csharp"
);
if
(
conn
!=
IntPtr
.
Zero
)
{
if
(
TDengine
.
Close
(
conn
)
==
0
)
{
Console
.
WriteLine
(
"close connection sucess"
);
}
else
{
Console
.
WriteLine
(
"close Connection failed"
);
}
}
}
public
static
List
<
TDengineMeta
>
GetResField
(
IntPtr
res
)
{
List
<
TDengineMeta
>
metas
=
TDengine
.
FetchFields
(
res
);
return
metas
;
}
public
static
void
AssertEqual
(
string
expectVal
,
string
actualVal
)
{
if
(
expectVal
==
actualVal
)
{
Console
.
WriteLine
(
"{0}=={1} pass"
,
expectVal
,
actualVal
);
}
else
{
Console
.
WriteLine
(
"{0}=={1} failed"
,
expectVal
,
actualVal
);
ExitProgram
();
}
}
public
static
void
ExitProgram
()
{
TDengine
.
Cleanup
();
System
.
Environment
.
Exit
(
0
);
}
public
static
List
<
String
>
GetResData
(
IntPtr
res
)
{
List
<
string
>
colName
=
new
List
<
string
>();
List
<
string
>
dataRaw
=
new
List
<
string
>();
if
(!
IsValidResult
(
res
))
{
ExitProgram
();
}
List
<
TDengineMeta
>
metas
=
GetResField
(
res
);
dataRaw
=
QueryRes
(
res
,
metas
);
return
dataRaw
;
}
public
static
TDengineMeta
ConstructTDengineMeta
(
string
name
,
string
type
)
{
TDengineMeta
_meta
=
new
TDengineMeta
();
_meta
.
name
=
name
;
char
[]
separators
=
new
char
[]
{
'('
,
')'
};
string
[]
subs
=
type
.
Split
(
separators
,
StringSplitOptions
.
RemoveEmptyEntries
);
switch
(
subs
[
0
].
ToUpper
())
{
case
"BOOL"
:
_meta
.
type
=
1
;
_meta
.
size
=
1
;
break
;
case
"TINYINT"
:
_meta
.
type
=
2
;
_meta
.
size
=
1
;
break
;
case
"SMALLINT"
:
_meta
.
type
=
3
;
_meta
.
size
=
2
;
break
;
case
"INT"
:
_meta
.
type
=
4
;
_meta
.
size
=
4
;
break
;
case
"BIGINT"
:
_meta
.
type
=
5
;
_meta
.
size
=
8
;
break
;
case
"TINYINT UNSIGNED"
:
_meta
.
type
=
11
;
_meta
.
size
=
1
;
break
;
case
"SMALLINT UNSIGNED"
:
_meta
.
type
=
12
;
_meta
.
size
=
2
;
break
;
case
"INT UNSIGNED"
:
_meta
.
type
=
13
;
_meta
.
size
=
4
;
break
;
case
"BIGINT UNSIGNED"
:
_meta
.
type
=
14
;
_meta
.
size
=
8
;
break
;
case
"FLOAT"
:
_meta
.
type
=
6
;
_meta
.
size
=
4
;
break
;
case
"DOUBLE"
:
_meta
.
type
=
7
;
_meta
.
size
=
8
;
break
;
case
"BINARY"
:
_meta
.
type
=
8
;
_meta
.
size
=
short
.
Parse
(
subs
[
1
]);
break
;
case
"TIMESTAMP"
:
_meta
.
type
=
9
;
_meta
.
size
=
8
;
break
;
case
"NCHAR"
:
_meta
.
type
=
10
;
_meta
.
size
=
short
.
Parse
(
subs
[
1
]);
break
;
case
"JSON"
:
_meta
.
type
=
15
;
_meta
.
size
=
4096
;
break
;
default
:
_meta
.
type
=
byte
.
MaxValue
;
_meta
.
size
=
0
;
break
;
}
return
_meta
;
}
private
static
List
<
string
>
QueryRes
(
IntPtr
res
,
List
<
TDengineMeta
>
metas
)
{
IntPtr
rowdata
;
long
queryRows
=
0
;
List
<
string
>
dataRaw
=
new
List
<
string
>();
int
fieldCount
=
metas
.
Count
;
while
((
rowdata
=
TDengine
.
FetchRows
(
res
))
!=
IntPtr
.
Zero
)
{
queryRows
++;
IntPtr
colLengthPtr
=
TDengine
.
FetchLengths
(
res
);
int
[]
colLengthArr
=
new
int
[
fieldCount
];
Marshal
.
Copy
(
colLengthPtr
,
colLengthArr
,
0
,
fieldCount
);
for
(
int
fields
=
0
;
fields
<
fieldCount
;
++
fields
)
{
TDengineMeta
meta
=
metas
[
fields
];
int
offset
=
IntPtr
.
Size
*
fields
;
IntPtr
data
=
Marshal
.
ReadIntPtr
(
rowdata
,
offset
);
if
(
data
==
IntPtr
.
Zero
)
{
dataRaw
.
Add
(
"NULL"
);
continue
;
}
switch
((
TDengineDataType
)
meta
.
type
)
{
case
TDengineDataType
.
TSDB_DATA_TYPE_BOOL
:
bool
v1
=
Marshal
.
ReadByte
(
data
)
==
0
?
false
:
true
;
dataRaw
.
Add
(
v1
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TINYINT
:
sbyte
v2
=
(
sbyte
)
Marshal
.
ReadByte
(
data
);
dataRaw
.
Add
(
v2
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_SMALLINT
:
short
v3
=
Marshal
.
ReadInt16
(
data
);
dataRaw
.
Add
(
v3
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_INT
:
int
v4
=
Marshal
.
ReadInt32
(
data
);
dataRaw
.
Add
(
v4
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BIGINT
:
long
v5
=
Marshal
.
ReadInt64
(
data
);
dataRaw
.
Add
(
v5
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_FLOAT
:
float
v6
=
(
float
)
Marshal
.
PtrToStructure
(
data
,
typeof
(
float
));
dataRaw
.
Add
(
v6
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_DOUBLE
:
double
v7
=
(
double
)
Marshal
.
PtrToStructure
(
data
,
typeof
(
double
));
dataRaw
.
Add
(
v7
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BINARY
:
string
v8
=
Marshal
.
PtrToStringAnsi
(
data
,
colLengthArr
[
fields
]);
dataRaw
.
Add
(
v8
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TIMESTAMP
:
long
v9
=
Marshal
.
ReadInt64
(
data
);
dataRaw
.
Add
(
v9
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_NCHAR
:
string
v10
=
Marshal
.
PtrToStringAnsi
(
data
,
colLengthArr
[
fields
]);
dataRaw
.
Add
(
v10
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_UTINYINT
:
byte
v12
=
Marshal
.
ReadByte
(
data
);
dataRaw
.
Add
(
v12
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_USMALLINT
:
ushort
v13
=
(
ushort
)
Marshal
.
ReadInt16
(
data
);
dataRaw
.
Add
(
v13
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_UINT
:
uint
v14
=
(
uint
)
Marshal
.
ReadInt32
(
data
);
dataRaw
.
Add
(
v14
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_UBIGINT
:
ulong
v15
=
(
ulong
)
Marshal
.
ReadInt64
(
data
);
dataRaw
.
Add
(
v15
.
ToString
());
break
;
default
:
dataRaw
.
Add
(
"unknown value"
);
break
;
}
}
}
if
(
TDengine
.
ErrorNo
(
res
)
!=
0
)
{
Console
.
Write
(
"Query is not complete, Error {0:G}"
,
TDengine
.
ErrorNo
(
res
),
TDengine
.
Error
(
res
));
}
TDengine
.
FreeResult
(
res
);
Console
.
WriteLine
(
""
);
return
dataRaw
;
}
}
}
src/connector/C#/src/test/XUnitTest/TestTDengineMeta.cs
浏览文件 @
575686c6
...
...
@@ -6,6 +6,11 @@ namespace TDengineDriver.Test
{
public
class
TestTDengineMeta
{
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameBool</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's bool meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameBool
()
{
...
...
@@ -17,7 +22,11 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameTINYINT</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's TinnyInt's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameTINYINT
()
{
...
...
@@ -29,6 +38,11 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameSMALLINT</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's SMALLINT's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameSMALLINT
()
{
...
...
@@ -40,6 +54,11 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameINT</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's INT's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameINT
()
{
...
...
@@ -51,6 +70,11 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameBIGINT</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's BIGINT's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameBIGINT
()
{
...
...
@@ -62,6 +86,11 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameUTINYINT</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's TINYINT UNSIGNED's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameUTINYINT
()
{
...
...
@@ -73,6 +102,11 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameUSMALLINT</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's SMALLINT UNSIGNED's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameUSMALLINT
()
{
...
...
@@ -84,6 +118,11 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameUINT</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's INT UNSIGNED's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameUINT
()
{
...
...
@@ -95,6 +134,11 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameUBIGINT</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's BIGINT UNSIGNED's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameUBIGINT
()
{
...
...
@@ -106,7 +150,11 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameFLOAT</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's FLOAT's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameFLOAT
()
{
...
...
@@ -118,6 +166,11 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameDOUBLE</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's DOUBLE's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameDOUBLE
()
{
...
...
@@ -129,10 +182,15 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameSTRING</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's BINARY's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameSTRING
()
{
string
typeName
=
"
STRING
"
;
string
typeName
=
"
BINARY
"
;
TDengineDriver
.
TDengineMeta
meta
=
new
TDengineDriver
.
TDengineMeta
();
meta
.
type
=
8
;
string
metaTypeName
=
meta
.
TypeName
();
...
...
@@ -140,6 +198,11 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameTIMESTAMP</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's TIMESTAMP's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameTIMESTAMP
()
{
...
...
@@ -151,6 +214,11 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameNCHAR</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's NCHAR's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameNCHAR
()
{
...
...
@@ -162,6 +230,11 @@ namespace TDengineDriver.Test
Assert
.
Equal
(
metaTypeName
,
typeName
);
}
/// <author>xiaolei</author>
/// <Name>TestTDengineMeta.TestTypeNameUndefined</Name>
/// <describe>Unit test for oject TDengineDriver.TDengineMeta's undefine's meta info</describe>
/// <filename>TestTDengineMeta.cs</filename>
/// <result>pass or failed </result>
[
Fact
]
public
void
TestTypeNameUndefined
()
{
...
...
src/connector/C#/src/test/XUnitTest/TestTaosBind.cs
浏览文件 @
575686c6
此差异已折叠。
点击以展开。
tests/develop-test/3-connectors/c#/test.sh
浏览文件 @
575686c6
...
...
@@ -19,12 +19,14 @@ cd ../../
WKC
=
`
pwd
`
cd
${
WKC
}
/src/connector/C#
dotnet
test
dotnet run
--project
src/test/Cases/Cases.csproj
#
dotnet run --project src/test/Cases/Cases.csproj
cd
${
WKC
}
/tests/examples/C#
dotnet run
--project
C#checker/C#checker.csproj
dotnet run
--project
TDengineTest/TDengineTest.csproj
dotnet run
--project
schemaless/schemaless.csproj
dotnet run
--project
jsonTag/jsonTag.csproj
dotnet run
--project
stmt/stmt.csproj
cd
${
WKC
}
/tests/examples/C#/taosdemo
dotnet build
-c
Release
...
...
tests/examples/C#/.gitignore
浏览文件 @
575686c6
...
...
@@ -11,3 +11,5 @@ stmt/bin/
stmt/obj/
taosdemo/bin/
taosdemo/obj/
jsonTag/bin/
jsonTag/obj/
src/connector/C#/src/test/Cases
/JsonTag.cs
→
tests/examples/C#/jsonTag
/JsonTag.cs
浏览文件 @
575686c6
using
System
;
using
Test.UtilsToo
ls
;
using
Uti
ls
;
namespace
Cases
{
public
class
JsonTagTest
class
Program
{
static
void
Main
(
string
[]
args
)
{
IntPtr
conn
=
IntPtr
.
Zero
;
Console
.
WriteLine
(
"===================JsonTagTest===================="
);
conn
=
conn
=
UtilsTools
.
TDConnection
(
"127.0.0.1"
,
"root"
,
"taosdata"
,
""
,
0
);
UtilsTools
.
ExecuteUpdate
(
conn
,
"create database if not exists csharp_sample keep 3650"
);
UtilsTools
.
ExecuteUpdate
(
conn
,
"use csharp"
);
JsonTagSample
jsonTagSample
=
new
JsonTagSample
();
jsonTagSample
.
Test
(
conn
);
}
}
public
class
JsonTagSample
{
public
void
Test
(
IntPtr
conn
)
{
...
...
src/connector/C#/src/test/Cases/Utils
.cs
→
tests/examples/C#/jsonTag/Util
.cs
浏览文件 @
575686c6
...
...
@@ -3,9 +3,9 @@ using TDengineDriver;
using
System.Runtime.InteropServices
;
using
System.Text
;
using
System.Collections.Generic
;
namespace
Test.UtilsToo
ls
namespace
Uti
ls
{
public
class
UtilsTools
public
class
UtilsTools
{
static
string
configDir
=
"/etc/taos"
;
//"C:/TDengine/cfg";
...
...
@@ -189,103 +189,6 @@ namespace Test.UtilsTools
TDengine
.
FreeResult
(
res
);
Console
.
WriteLine
(
""
);
}
public
static
List
<
List
<
string
>>
GetResultSet
(
IntPtr
res
)
{
List
<
List
<
string
>>
result
=
new
List
<
List
<
string
>>();
List
<
string
>
colName
=
new
List
<
string
>();
List
<
string
>
dataRaw
=
new
List
<
string
>();
long
queryRows
=
0
;
if
(!
IsValidResult
(
res
))
{
ExitProgram
();
}
int
fieldCount
=
TDengine
.
FieldCount
(
res
);
List
<
TDengineMeta
>
metas
=
TDengine
.
FetchFields
(
res
);
for
(
int
j
=
0
;
j
<
metas
.
Count
;
j
++)
{
TDengineMeta
meta
=
(
TDengineMeta
)
metas
[
j
];
colName
.
Add
(
meta
.
name
);
}
result
.
Add
(
colName
);
IntPtr
rowdata
;
while
((
rowdata
=
TDengine
.
FetchRows
(
res
))
!=
IntPtr
.
Zero
)
{
queryRows
++;
IntPtr
colLengthPtr
=
TDengine
.
FetchLengths
(
res
);
int
[]
colLengthArr
=
new
int
[
fieldCount
];
Marshal
.
Copy
(
colLengthPtr
,
colLengthArr
,
0
,
fieldCount
);
for
(
int
fields
=
0
;
fields
<
fieldCount
;
++
fields
)
{
TDengineMeta
meta
=
metas
[
fields
];
int
offset
=
IntPtr
.
Size
*
fields
;
IntPtr
data
=
Marshal
.
ReadIntPtr
(
rowdata
,
offset
);
if
(
data
==
IntPtr
.
Zero
)
{
dataRaw
.
Add
(
"NULL"
);
continue
;
}
switch
((
TDengineDataType
)
meta
.
type
)
{
case
TDengineDataType
.
TSDB_DATA_TYPE_BOOL
:
bool
v1
=
Marshal
.
ReadByte
(
data
)
==
0
?
false
:
true
;
dataRaw
.
Add
(
v1
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TINYINT
:
byte
v2
=
Marshal
.
ReadByte
(
data
);
dataRaw
.
Add
(
v2
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_SMALLINT
:
short
v3
=
Marshal
.
ReadInt16
(
data
);
dataRaw
.
Add
(
v3
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_INT
:
int
v4
=
Marshal
.
ReadInt32
(
data
);
dataRaw
.
Add
(
v4
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BIGINT
:
long
v5
=
Marshal
.
ReadInt64
(
data
);
dataRaw
.
Add
(
v5
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_FLOAT
:
float
v6
=
(
float
)
Marshal
.
PtrToStructure
(
data
,
typeof
(
float
));
dataRaw
.
Add
(
v6
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_DOUBLE
:
double
v7
=
(
double
)
Marshal
.
PtrToStructure
(
data
,
typeof
(
double
));
dataRaw
.
Add
(
v7
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_BINARY
:
string
v8
=
Marshal
.
PtrToStringAnsi
(
data
,
colLengthArr
[
fields
]);
dataRaw
.
Add
(
v8
);
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_TIMESTAMP
:
long
v9
=
Marshal
.
ReadInt64
(
data
);
dataRaw
.
Add
(
v9
.
ToString
());
break
;
case
TDengineDataType
.
TSDB_DATA_TYPE_NCHAR
:
string
v10
=
Marshal
.
PtrToStringAnsi
(
data
,
colLengthArr
[
fields
]);
dataRaw
.
Add
(
v10
);
break
;
}
}
}
result
.
Add
(
dataRaw
);
if
(
TDengine
.
ErrorNo
(
res
)
!=
0
)
{
Console
.
Write
(
"Query is not complete, Error {0:G}"
,
TDengine
.
ErrorNo
(
res
),
TDengine
.
Error
(
res
));
}
TDengine
.
FreeResult
(
res
);
Console
.
WriteLine
(
""
);
return
result
;
}
public
static
bool
IsValidResult
(
IntPtr
res
)
{
if
((
res
==
IntPtr
.
Zero
)
||
(
TDengine
.
ErrorNo
(
res
)
!=
0
))
...
...
@@ -314,27 +217,10 @@ namespace Test.UtilsTools
}
}
}
public
static
List
<
TDengineMeta
>
getField
(
IntPtr
res
)
{
List
<
TDengineMeta
>
metas
=
TDengine
.
FetchFields
(
res
);
return
metas
;
}
public
static
void
AssertEqual
(
string
expectVal
,
string
actualVal
)
{
if
(
expectVal
==
actualVal
)
{
Console
.
WriteLine
(
"{0}=={1} pass"
,
expectVal
,
actualVal
);
}
else
{
Console
.
WriteLine
(
"{0}=={1} failed"
,
expectVal
,
actualVal
);
ExitProgram
();
}
}
public
static
void
ExitProgram
()
{
TDengine
.
Cleanup
();
System
.
Environment
.
Exit
(
0
);
}
}
}
}
\ No newline at end of file
src/connector/C#/src/test/Cases/Cases
.csproj
→
tests/examples/C#/jsonTag/jsonTag
.csproj
浏览文件 @
575686c6
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\TDengineDriver\TDengineDriver.csproj" />
</ItemGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<NoWarn>CS1591</NoWarn>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<DocumentationFile>..\doc\FunctionTest.XML</DocumentationFile>
</PropertyGroup>
</Project>
<PackageReference Include="TDengine.Connector" Version="1.0.3" />
</ItemGroup>
</Project>
tests/examples/JDBC/connectionPools/pom.xml
浏览文件 @
575686c6
...
...
@@ -53,7 +53,7 @@
<dependency>
<groupId>
org.apache.logging.log4j
</groupId>
<artifactId>
log4j-core
</artifactId>
<version>
2.17.
0
</version>
<version>
2.17.
1
</version>
</dependency>
<!-- proxool -->
<dependency>
...
...
tests/examples/JDBC/taosdemo/pom.xml
浏览文件 @
575686c6
...
...
@@ -88,7 +88,7 @@
<dependency>
<groupId>
org.apache.logging.log4j
</groupId>
<artifactId>
log4j-core
</artifactId>
<version>
2.17.
0
</version>
<version>
2.17.
1
</version>
</dependency>
<!-- junit -->
<dependency>
...
...
tests/perftest-scripts/HttpPerfCompare.py
0 → 100644
浏览文件 @
575686c6
from
loguru
import
logger
import
time
import
os
import
json
class
HttpPerfCompard
:
def
__init__
(
self
):
self
.
hostname
=
"vm85"
self
.
taosc_port
=
6030
self
.
http_port
=
6041
self
.
database
=
"test"
self
.
query_times
=
1
self
.
concurrent
=
1
self
.
column_count
=
10
self
.
tag_count
=
10
self
.
perfMonitorBin
=
'/home/ubuntu/perfMonitor'
self
.
taosBenchmarkBin
=
'/usr/local/bin/taosBenchmark'
self
.
sleep_time
=
20
self
.
current_time
=
time
.
strftime
(
"%Y-%m-%d-%H:%M:%S"
,
time
.
localtime
(
time
.
time
()))
self
.
current_dir
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
self
.
log_file
=
os
.
path
.
join
(
self
.
current_dir
,
f
'./performance.log'
)
logger
.
add
(
self
.
log_file
)
logger
.
info
(
f
'init env success, log will be export to
{
self
.
log_file
}
'
)
self
.
sql_list
=
[
'select last_row(*) from test.stb;'
,
'select * from test.stb limit 100000;'
,
'select count(*) from test.stb interval (1d);'
,
'select avg(c3), max(c4), min(c5) from test.stb interval (1d);'
,
'select count(*) from test.stb where t1 = "shanghai" interval (1h);'
,
'select avg(c3), max(c4), min(c5) from test.stb where t1 = "shanghai" interval (1d);'
,
'select avg(c3), max(c4), min(c5) from test.stb where ts > "2021-01-01 00:00:00" and ts < "2021-01-31 00:00:00" interval (1d);'
'select last(*) from test.stb;'
]
# self.sql_list = ['select * from test.stb limit 100000;']
def
initLog
(
self
):
self
.
exec_local_cmd
(
f
'echo "" >
{
self
.
log_file
}
'
)
def
exec_local_cmd
(
self
,
shell_cmd
):
result
=
os
.
popen
(
shell_cmd
).
read
().
strip
()
return
result
def
genQueryJsonFile
(
self
,
query_sql
):
json_file
=
os
.
path
.
join
(
self
.
current_dir
,
f
'./query.json'
)
jdict
=
{
"filetype"
:
"query"
,
"cfgdir"
:
"/etc/taos"
,
"host"
:
self
.
hostname
,
"port"
:
self
.
taosc_port
,
"user"
:
"root"
,
"password"
:
"taosdata"
,
"confirm_parameter_prompt"
:
"no"
,
"databases"
:
self
.
database
,
"query_times"
:
self
.
query_times
,
"query_mode"
:
"restful"
,
"specified_table_query"
:
{
"concurrent"
:
self
.
concurrent
,
"sqls"
:
[
{
"sql"
:
query_sql
,
"result"
:
"./query_res0.txt"
}
]
}
}
with
open
(
json_file
,
"w"
,
encoding
=
"utf-8"
)
as
f_w
:
f_w
.
write
(
json
.
dumps
(
jdict
))
def
genInsertJsonFile
(
self
,
thread_count
,
table_count
,
row_count
,
batch_size
):
json_file
=
os
.
path
.
join
(
self
.
current_dir
,
f
'./insert.json'
)
jdict
=
{
"filetype"
:
"insert"
,
"cfgdir"
:
"/etc/taos"
,
"host"
:
self
.
hostname
,
"rest_host"
:
self
.
hostname
,
"port"
:
self
.
taosc_port
,
"rest_port"
:
self
.
http_port
,
"user"
:
"root"
,
"password"
:
"taosdata"
,
"thread_count"
:
thread_count
,
"thread_count_create_tbl"
:
1
,
"result_file"
:
self
.
log_file
,
"databases"
:
[{
"dbinfo"
:
{
"name"
:
self
.
database
,
"drop"
:
"yes"
},
"super_tables"
:
[{
"name"
:
"stb"
,
"childtable_count"
:
table_count
,
"childtable_prefix"
:
"stb_"
,
"batch_create_tbl_num"
:
1
,
"insert_mode"
:
"rand"
,
"insert_iface"
:
"rest"
,
"insert_rows"
:
row_count
,
"insert_interval"
:
0
,
"batch_rows"
:
batch_size
,
"max_sql_len"
:
1048576
,
"timestamp_step"
:
3000
,
"start_timestamp"
:
"2021-01-01 00:00:00.000"
,
"tags_file"
:
""
,
"partical_col_num"
:
0
,
"columns"
:
[{
"type"
:
"INT"
,
"count"
:
self
.
column_count
}],
"tags"
:
[{
"type"
:
"BINARY"
,
"len"
:
16
,
"count"
:
self
.
tag_count
}]
}]
}]
}
with
open
(
json_file
,
"w"
,
encoding
=
"utf-8"
)
as
f_w
:
f_w
.
write
(
json
.
dumps
(
jdict
))
def
runTest
(
self
):
self
.
initLog
()
self
.
genInsertJsonFile
(
32
,
100
,
100000
,
1
)
logger
.
info
(
'result of insert_perf with 32 threads and 1 batch_size:'
)
self
.
exec_local_cmd
(
f
'
{
self
.
perfMonitorBin
}
-f insert.json'
)
time
.
sleep
(
self
.
sleep_time
)
self
.
genInsertJsonFile
(
32
,
500
,
1000000
,
1000
)
logger
.
info
(
'result of insert_perf with 32 threads and 1000 batch_size:'
)
self
.
exec_local_cmd
(
f
'
{
self
.
perfMonitorBin
}
-f insert.json'
)
time
.
sleep
(
self
.
sleep_time
)
for
query_sql
in
self
.
sql_list
:
self
.
genQueryJsonFile
(
query_sql
)
self
.
exec_local_cmd
(
f
'
{
self
.
taosBenchmarkBin
}
-f query.json > tmp.log'
)
res
=
self
.
exec_local_cmd
(
'grep -Eo
\'
\<Spent.+s\>
\'
tmp.log |grep -v
\'
total queries
\'
|awk
\'
{sum+=$2}END{print "Average=",sum/NR,"s"}
\'
'
)
logger
.
info
(
query_sql
)
logger
.
info
(
res
)
time
.
sleep
(
self
.
sleep_time
)
if
__name__
==
'__main__'
:
runPerf
=
HttpPerfCompard
()
runPerf
.
runTest
()
tests/perftest-scripts/specifyColsComparison.py
0 → 100644
浏览文件 @
575686c6
from
loguru
import
logger
import
time
import
os
import
json
import
sys
from
fabric
import
Connection
# apt install -y sudo python3-pip
# pip3 install fabric loguru
class
specifyColsCompared
:
def
__init__
(
self
):
# remote server
self
.
remote_hostname
=
"vm85"
self
.
remote_sshport
=
"22"
self
.
remote_username
=
"root"
self
.
remote_password
=
"tbase125!"
# TDengine pkg path
self
.
autoDeploy
=
False
self
.
install_package
=
'/root/share/TDengine-server-2.4.0.0-Linux-amd64.tar.gz'
# test element
self
.
update_list
=
[
1
,
2
]
self
.
column_count_list
=
[
100
,
500
,
2000
]
# perfMonitor config
self
.
thread_count
=
10
self
.
taosc_port
=
6030
self
.
http_port
=
6041
self
.
database
=
"test"
self
.
table_count
=
10
self
.
tag_count
=
5
self
.
col_count
=
50000
self
.
batch_size
=
1
self
.
sleep_time
=
20
self
.
current_time
=
time
.
strftime
(
"%Y-%m-%d-%H:%M:%S"
,
time
.
localtime
(
time
.
time
()))
self
.
current_dir
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
self
.
log_file
=
os
.
path
.
join
(
self
.
current_dir
,
f
'./performance.log'
)
if
self
.
remote_username
==
"root"
:
self
.
remote_dir
=
"/root"
else
:
self
.
remote_dir
=
f
'/home/
{
self
.
remote_username
}
'
self
.
conn
=
Connection
(
self
.
remote_hostname
,
user
=
self
.
remote_username
,
port
=
self
.
remote_sshport
,
connect_timeout
=
120
,
connect_kwargs
=
{
"password"
:
self
.
remote_password
})
logger
.
add
(
self
.
log_file
)
logger
.
info
(
f
'init env success, log will be export to
{
self
.
log_file
}
'
)
def
initLog
(
self
):
# init log
self
.
exec_local_cmd
(
f
'echo "" >
{
self
.
log_file
}
'
)
def
exec_local_cmd
(
self
,
shell_cmd
):
# exec local cmd
try
:
result
=
os
.
popen
(
shell_cmd
).
read
().
strip
()
return
result
except
Exception
as
e
:
logger
.
error
(
f
"exec cmd:
{
shell_cmd
}
failed----
{
e
}
"
)
def
checkStatus
(
self
,
process
):
# check process status
try
:
process_count
=
self
.
conn
.
run
(
f
'ps -ef | grep -w
{
process
}
| grep -v grep | wc -l'
,
pty
=
False
,
warn
=
True
,
hide
=
False
).
stdout
if
int
(
process_count
.
strip
())
>
0
:
logger
.
info
(
f
'check
{
self
.
remote_hostname
}
{
process
}
existed'
)
return
True
else
:
logger
.
info
(
f
'check
{
self
.
remote_hostname
}
{
process
}
not exist'
)
return
False
except
Exception
as
e
:
logger
.
error
(
f
"check status failed----
{
e
}
, please check by manual"
)
def
deployPerfMonitor
(
self
):
# deploy perfMonitor
logger
.
info
(
'deploying perfMonitor'
)
if
os
.
path
.
exists
(
f
'
{
self
.
current_dir
}
/perfMonitor'
):
os
.
remove
(
f
'
{
self
.
current_dir
}
/perfMonitor'
)
self
.
exec_local_cmd
(
f
'wget -P
{
self
.
current_dir
}
http://39.105.163.10:9000/perfMonitor && chmod +x
{
self
.
current_dir
}
/perfMonitor'
)
package_name
=
self
.
install_package
.
split
(
'/'
)[
-
1
]
package_dir
=
'-'
.
join
(
package_name
.
split
(
"-"
,
3
)[
0
:
3
])
self
.
exec_local_cmd
(
f
'tar -xvf
{
self
.
install_package
}
&& cd
{
package_dir
}
&& echo -e "
\n
" | ./install.sh'
)
def
dropAndCreateDb
(
self
):
try
:
self
.
conn
.
run
(
f
'taos -s "drop database if exists
{
self
.
database
}
"'
)
self
.
conn
.
run
(
f
'taos -s "create database if not exists
{
self
.
database
}
"'
)
except
Exception
as
e
:
logger
.
error
(
f
"drop db failed----
{
e
}
, please check by manual"
)
def
uploadPkg
(
self
):
# upload TDengine pkg
try
:
logger
.
info
(
f
'uploading
{
self
.
install_package
}
to
{
self
.
remote_hostname
}
:
{
self
.
remote_dir
}
'
)
self
.
conn
.
put
(
self
.
install_package
,
self
.
remote_dir
)
except
Exception
as
e
:
logger
.
error
(
f
"pkg send failed----
{
e
}
, please check by manual"
)
def
deployTDengine
(
self
):
# deploy TDengine
try
:
package_name
=
self
.
install_package
.
split
(
'/'
)[
-
1
]
package_dir
=
'-'
.
join
(
package_name
.
split
(
"-"
,
3
)[
0
:
3
])
self
.
uploadPkg
()
self
.
conn
.
run
(
f
'sudo rmtaos'
,
pty
=
False
,
warn
=
True
,
hide
=
False
)
logger
.
info
(
'installing TDengine'
)
logger
.
info
(
self
.
conn
.
run
(
f
'cd
{
self
.
remote_dir
}
&& tar -xvf
{
self
.
remote_dir
}
/
{
package_name
}
&& cd
{
package_dir
}
&& echo -e "
\n
"|./install.sh'
,
pty
=
False
,
warn
=
True
,
hide
=
False
))
logger
.
info
(
'start TDengine'
)
logger
.
info
(
self
.
conn
.
run
(
'sudo systemctl start taosd'
,
pty
=
False
,
warn
=
True
,
hide
=
False
))
for
deploy_elm
in
[
'taosd'
,
'taosadapter'
]:
if
self
.
checkStatus
(
deploy_elm
):
logger
.
success
(
f
'
{
self
.
remote_hostname
}
:
{
deploy_elm
}
deploy success'
)
else
:
logger
.
error
(
f
'
{
self
.
remote_hostname
}
:
{
deploy_elm
}
deploy failed, please check by manual'
)
sys
.
exit
(
1
)
except
Exception
as
e
:
logger
.
error
(
f
"deploy TDengine failed----
{
e
}
, please check by manual"
)
def
genInsertJsonFile
(
self
,
thread_count
,
table_count
,
row_count
,
batch_size
,
column_count
,
partical_col_num
,
update
,
drop
=
"yes"
,
result_file
=
None
):
# gen json file
json_file
=
os
.
path
.
join
(
self
.
current_dir
,
f
'./insert.json'
)
if
result_file
==
None
:
result_file
=
self
.
log_file
else
:
result_file
=
self
.
log_file
.
replace
(
'performance.log'
,
'unused_performance.log'
)
jdict
=
{
"filetype"
:
"insert"
,
"cfgdir"
:
"/etc/taos"
,
"host"
:
self
.
remote_hostname
,
"rest_host"
:
self
.
remote_hostname
,
"port"
:
self
.
taosc_port
,
"rest_port"
:
self
.
http_port
,
"user"
:
"root"
,
"password"
:
"taosdata"
,
"thread_count"
:
thread_count
,
"thread_count_create_tbl"
:
1
,
"result_file"
:
result_file
,
"databases"
:
[{
"dbinfo"
:
{
"name"
:
self
.
database
,
"drop"
:
drop
,
"update"
:
update
},
"super_tables"
:
[{
"name"
:
"stb"
,
"childtable_count"
:
table_count
,
"childtable_prefix"
:
"stb_"
,
"batch_create_tbl_num"
:
1
,
"insert_mode"
:
"rand"
,
"insert_iface"
:
"rest"
,
"insert_rows"
:
row_count
,
"insert_interval"
:
0
,
"batch_rows"
:
batch_size
,
"max_sql_len"
:
1048576
,
"timestamp_step"
:
1000
,
"start_timestamp"
:
"2021-01-01 00:00:00.000"
,
"tags_file"
:
""
,
"partical_col_num"
:
partical_col_num
,
"columns"
:
[{
"type"
:
"INT"
,
"count"
:
column_count
}],
"tags"
:
[{
"type"
:
"BINARY"
,
"len"
:
16
,
"count"
:
self
.
tag_count
}]
}]
}]
}
with
open
(
json_file
,
"w"
,
encoding
=
"utf-8"
)
as
f_w
:
f_w
.
write
(
json
.
dumps
(
jdict
))
def
runTest
(
self
):
self
.
initLog
()
if
self
.
autoDeploy
:
self
.
deployTDengine
()
self
.
deployPerfMonitor
()
# blank insert
update
=
0
for
col_count
in
self
.
column_count_list
:
for
partical_col_num
in
[
int
(
col_count
*
0
),
int
(
col_count
*
0.1
),
int
(
col_count
*
0.3
)]:
logger
.
info
(
f
'update:
{
update
}
|| col_count:
{
col_count
}
|| partical_col_num:
{
partical_col_num
}
test'
)
self
.
genInsertJsonFile
(
self
.
thread_count
,
self
.
table_count
,
self
.
col_count
,
self
.
batch_size
,
col_count
,
partical_col_num
,
update
)
self
.
exec_local_cmd
(
f
'
{
self
.
current_dir
}
/perfMonitor -f insert.json'
)
time
.
sleep
(
self
.
sleep_time
)
# update = 1/2
for
update
in
self
.
update_list
:
for
col_count
in
self
.
column_count_list
:
for
partical_col_num
in
[
int
(
col_count
*
0.1
),
int
(
col_count
*
0.3
)]:
logger
.
info
(
f
'update:
{
update
}
|| col_count:
{
col_count
}
|| partical_col_num:
{
partical_col_num
}
test'
)
self
.
genInsertJsonFile
(
self
.
thread_count
,
self
.
table_count
,
self
.
col_count
,
100
,
col_count
,
int
(
col_count
*
0
),
update
,
drop
=
"yes"
,
result_file
=
"unused"
)
self
.
exec_local_cmd
(
f
'
{
self
.
current_dir
}
/perfMonitor -f insert.json'
)
time
.
sleep
(
self
.
sleep_time
)
self
.
genInsertJsonFile
(
self
.
thread_count
,
self
.
table_count
,
self
.
col_count
,
self
.
batch_size
,
col_count
,
partical_col_num
,
update
,
drop
=
"no"
)
self
.
exec_local_cmd
(
f
'
{
self
.
current_dir
}
/perfMonitor -f insert.json'
)
time
.
sleep
(
self
.
sleep_time
)
if
__name__
==
'__main__'
:
runPerf
=
specifyColsCompared
()
runPerf
.
runTest
()
tests/pytest/fulltest-query.sh
浏览文件 @
575686c6
...
...
@@ -143,7 +143,7 @@ python3 ./test.py -f stream/stream1.py
python3 ./test.py
-f
stream/stream2.py
#python3 ./test.py -f stream/parser.py
python3 ./test.py
-f
stream/history.py
python3 ./test.py
-f
stream/sys.py
#
python3 ./test.py -f stream/sys.py
python3 ./test.py
-f
stream/table_1.py
python3 ./test.py
-f
stream/table_n.py
python3 ./test.py
-f
stream/showStreamExecTimeisNull.py
...
...
tests/pytest/functions/function_derivative.py
浏览文件 @
575686c6
...
...
@@ -140,6 +140,9 @@ class TDTestCase:
tdSql
.
error
(
"select derivative(col, 1s, 1) from tb2"
)
tdSql
.
error
(
"select derivative(col, 10s, 0) from tb2"
)
tdSql
.
error
(
"select derivative(col, 999ms, 0) from tb2"
)
tdSql
.
error
(
"select derivative(col, now, 0) from tb2"
)
#TD-11983 now not allowed in second param
tdSql
.
error
(
"select derivative(col, now+3d-8h+6m, 0) from tb2"
)
#TD-11983 now not allowed in second param
tdSql
.
error
(
"select derivative(col, 3d-8h+now+6m, 0) from tb2"
)
#TD-11983 now not allowed in second param
tdSql
.
error
(
"select derivative(col, 10s, 1) from stb"
)
tdSql
.
error
(
"select derivative(col, 10s, 1) from stb group by col"
)
...
...
@@ -150,6 +153,9 @@ class TDTestCase:
tdSql
.
error
(
"select derivative(col, 10y, 0) from stb group by tbname"
)
#TD-10399, DB error: syntax error near '10y, 0) from stb group by tbname;'
tdSql
.
error
(
"select derivative(col, -106752d, 0) from stb group by tbname"
)
#TD-10398 overflow tips
tdSql
.
error
(
"select derivative(col, 106751991168d, 0) from stb group by tbname"
)
#TD-10398 overflow tips
tdSql
.
error
(
"select derivative(col, now, 1) from stb"
)
#TD-11983 now not allowed in second param
tdSql
.
error
(
"select derivative(col, now+3d-8h+6m, 1) from stb"
)
#TD-11983 now not allowed in second param
tdSql
.
error
(
"select derivative(col, 3d-8h+now+6m, 1) from stb"
)
#TD-11983 now not allowed in second param
def
run
(
self
):
tdSql
.
prepare
()
...
...
tests/pytest/functions/function_elapsed_case.py
浏览文件 @
575686c6
...
...
@@ -345,7 +345,9 @@ class ElapsedCase:
tdSql
.
error
(
"select elapsed(*) from t1 where ts > '2021-11-22 00:00:00' and ts < '2021-11-23 00:00:00'"
)
tdSql
.
error
(
"select elapsed(ts, '1s') from t1 where ts > '2021-11-22 00:00:00' and ts < '2021-11-23 00:00:00'"
)
tdSql
.
error
(
"select elapsed(ts, i) from t1 where ts > '2021-11-22 00:00:00' and ts < '2021-11-23 00:00:00'"
)
#tdSql.error("select elapsed(ts, now) from t1 where ts > '2021-11-22 00:00:00' and ts < '2021-11-23 00:00:00'")
tdSql
.
error
(
"select elapsed(ts, now) from t1 where ts > '2021-11-22 00:00:00' and ts < '2021-11-23 00:00:00'"
)
tdSql
.
error
(
"select elapsed(ts, now-7d+2h-3m+2s) from t1 where ts > '2021-11-22 00:00:00' and ts < '2021-11-23 00:00:00'"
)
tdSql
.
error
(
"select elapsed(ts, 7d+2h+now+3m+2s) from t1 where ts > '2021-11-22 00:00:00' and ts < '2021-11-23 00:00:00'"
)
tdSql
.
error
(
"select elapsed(ts, ts) from t1 where ts > '2021-11-22 00:00:00' and ts < '2021-11-23 00:00:00'"
)
tdSql
.
error
(
"select elapsed(ts + 1) from t1 where ts > '2021-11-22 00:00:00' and ts < '2021-11-23 00:00:00'"
)
tdSql
.
error
(
"select elapsed(ts, 1b) from t1 where ts > '2021-11-22 00:00:00' and ts < '2021-11-23 00:00:00'"
)
...
...
tests/system-test/2-query/function_elapsed.py
0 → 100644
浏览文件 @
575686c6
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录