Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
f46f941c
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看板
提交
f46f941c
编写于
11月 21, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.0' of
https://github.com/taosdata/TDengine
into enh/row_optimize
上级
31f667f8
7f199091
变更
39
隐藏空白更改
内联
并排
Showing
39 changed file
with
2065 addition
and
468 deletion
+2065
-468
cmake/taosws_CMakeLists.txt.in
cmake/taosws_CMakeLists.txt.in
+1
-1
docs/zh/05-get-started/index.md
docs/zh/05-get-started/index.md
+1
-1
source/libs/executor/inc/executorimpl.h
source/libs/executor/inc/executorimpl.h
+0
-1
source/libs/executor/inc/tfill.h
source/libs/executor/inc/tfill.h
+2
-1
source/libs/executor/src/timewindowoperator.c
source/libs/executor/src/timewindowoperator.c
+122
-206
tests/parallel_test/cases.task
tests/parallel_test/cases.task
+2
-2
tests/pytest/crash_gen.sh
tests/pytest/crash_gen.sh
+1
-1
tests/pytest/crash_gen/crash_gen_main.py
tests/pytest/crash_gen/crash_gen_main.py
+700
-21
tests/pytest/crash_gen/shared/db.py
tests/pytest/crash_gen/shared/db.py
+72
-7
tests/pytest/util/dnodes.py
tests/pytest/util/dnodes.py
+12
-3
tests/pytest/util/log.py
tests/pytest/util/log.py
+1
-1
tests/script/sh/checkAsan.sh
tests/script/sh/checkAsan.sh
+7
-1
tests/script/sh/exec.sh
tests/script/sh/exec.sh
+1
-0
tests/script/sh/sigint_stop_dnodes.sh
tests/script/sh/sigint_stop_dnodes.sh
+1
-1
tests/script/sh/stop_dnodes.sh
tests/script/sh/stop_dnodes.sh
+1
-1
tests/system-test/2-query/abs.py
tests/system-test/2-query/abs.py
+8
-14
tests/system-test/2-query/and_or_for_byte.py
tests/system-test/2-query/and_or_for_byte.py
+4
-4
tests/system-test/2-query/arccos.py
tests/system-test/2-query/arccos.py
+8
-17
tests/system-test/2-query/arcsin.py
tests/system-test/2-query/arcsin.py
+9
-17
tests/system-test/2-query/arctan.py
tests/system-test/2-query/arctan.py
+7
-17
tests/system-test/2-query/avg.py
tests/system-test/2-query/avg.py
+9
-15
tests/system-test/2-query/ceil.py
tests/system-test/2-query/ceil.py
+8
-13
tests/system-test/2-query/cos.py
tests/system-test/2-query/cos.py
+5
-21
tests/system-test/2-query/floor.py
tests/system-test/2-query/floor.py
+8
-13
tests/system-test/2-query/function_stateduration.py
tests/system-test/2-query/function_stateduration.py
+5
-5
tests/system-test/2-query/interp.py
tests/system-test/2-query/interp.py
+950
-14
tests/system-test/2-query/last_row.py
tests/system-test/2-query/last_row.py
+4
-4
tests/system-test/2-query/log.py
tests/system-test/2-query/log.py
+4
-5
tests/system-test/2-query/pow.py
tests/system-test/2-query/pow.py
+4
-4
tests/system-test/2-query/round.py
tests/system-test/2-query/round.py
+9
-13
tests/system-test/2-query/sin.py
tests/system-test/2-query/sin.py
+4
-4
tests/system-test/2-query/sqrt.py
tests/system-test/2-query/sqrt.py
+4
-4
tests/system-test/2-query/statecount.py
tests/system-test/2-query/statecount.py
+5
-5
tests/system-test/2-query/tail.py
tests/system-test/2-query/tail.py
+8
-8
tests/system-test/2-query/tan.py
tests/system-test/2-query/tan.py
+4
-4
tests/system-test/2-query/txt.txt
tests/system-test/2-query/txt.txt
+40
-0
tests/system-test/2-query/unique.py
tests/system-test/2-query/unique.py
+6
-6
tests/system-test/pytest.sh
tests/system-test/pytest.sh
+27
-12
tests/system-test/test.py
tests/system-test/test.py
+1
-1
未找到文件。
cmake/taosws_CMakeLists.txt.in
浏览文件 @
f46f941c
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
# taosws-rs
# taosws-rs
ExternalProject_Add(taosws-rs
ExternalProject_Add(taosws-rs
GIT_REPOSITORY https://github.com/taosdata/taos-connector-rust.git
GIT_REPOSITORY https://github.com/taosdata/taos-connector-rust.git
GIT_TAG
9843872
GIT_TAG
f406d51
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taosws-rs"
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taosws-rs"
BINARY_DIR ""
BINARY_DIR ""
#BUILD_IN_SOURCE TRUE
#BUILD_IN_SOURCE TRUE
...
...
docs/zh/05-get-started/index.md
浏览文件 @
f46f941c
...
@@ -24,7 +24,7 @@ TDengine 知识地图中涵盖了 TDengine 的各种知识点,揭示了各概
...
@@ -24,7 +24,7 @@ TDengine 知识地图中涵盖了 TDengine 的各种知识点,揭示了各概
<figure>
<figure>
<center>
<center>
<a
href=
"/img/tdengine-map.svg"
target=
"_blank"
><img
src=
"/img/tdengine-map.svg"
width=
"80%"
/></a>
<a
href=
"
pathname://
/img/tdengine-map.svg"
target=
"_blank"
><img
src=
"/img/tdengine-map.svg"
width=
"80%"
/></a>
<figcaption>
图 1. TDengine 知识地图
</figcaption>
<figcaption>
图 1. TDengine 知识地图
</figcaption>
</center>
</center>
</figure>
</figure>
...
...
source/libs/executor/inc/executorimpl.h
浏览文件 @
f46f941c
...
@@ -776,7 +776,6 @@ typedef struct STimeSliceOperatorInfo {
...
@@ -776,7 +776,6 @@ typedef struct STimeSliceOperatorInfo {
SArray
*
pPrevRow
;
// SArray<SGroupValue>
SArray
*
pPrevRow
;
// SArray<SGroupValue>
SArray
*
pNextRow
;
// SArray<SGroupValue>
SArray
*
pNextRow
;
// SArray<SGroupValue>
SArray
*
pLinearInfo
;
// SArray<SFillLinearInfo>
SArray
*
pLinearInfo
;
// SArray<SFillLinearInfo>
bool
fillLastPoint
;
bool
isPrevRowSet
;
bool
isPrevRowSet
;
bool
isNextRowSet
;
bool
isNextRowSet
;
int32_t
fillType
;
// fill type
int32_t
fillType
;
// fill type
...
...
source/libs/executor/inc/tfill.h
浏览文件 @
f46f941c
...
@@ -36,7 +36,8 @@ typedef struct SFillColInfo {
...
@@ -36,7 +36,8 @@ typedef struct SFillColInfo {
typedef
struct
SFillLinearInfo
{
typedef
struct
SFillLinearInfo
{
SPoint
start
;
SPoint
start
;
SPoint
end
;
SPoint
end
;
bool
hasNull
;
bool
isStartSet
;
bool
isEndSet
;
int16_t
type
;
int16_t
type
;
int32_t
bytes
;
int32_t
bytes
;
}
SFillLinearInfo
;
}
SFillLinearInfo
;
...
...
source/libs/executor/src/timewindowoperator.c
浏览文件 @
f46f941c
...
@@ -1942,10 +1942,8 @@ static void doKeepPrevRows(STimeSliceOperatorInfo* pSliceInfo, const SSDataBlock
...
@@ -1942,10 +1942,8 @@ static void doKeepPrevRows(STimeSliceOperatorInfo* pSliceInfo, const SSDataBlock
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pBlock
->
pDataBlock
,
i
);
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pBlock
->
pDataBlock
,
i
);
// null data should not be kept since it can not be used to perform interpolation
SGroupKeys
*
pkey
=
taosArrayGet
(
pSliceInfo
->
pPrevRow
,
i
);
if
(
!
colDataIsNull_s
(
pColInfoData
,
i
))
{
if
(
!
colDataIsNull_s
(
pColInfoData
,
rowIndex
))
{
SGroupKeys
*
pkey
=
taosArrayGet
(
pSliceInfo
->
pPrevRow
,
i
);
pkey
->
isNull
=
false
;
pkey
->
isNull
=
false
;
char
*
val
=
colDataGetData
(
pColInfoData
,
rowIndex
);
char
*
val
=
colDataGetData
(
pColInfoData
,
rowIndex
);
if
(
!
IS_VAR_DATA_TYPE
(
pkey
->
type
))
{
if
(
!
IS_VAR_DATA_TYPE
(
pkey
->
type
))
{
...
@@ -1953,6 +1951,8 @@ static void doKeepPrevRows(STimeSliceOperatorInfo* pSliceInfo, const SSDataBlock
...
@@ -1953,6 +1951,8 @@ static void doKeepPrevRows(STimeSliceOperatorInfo* pSliceInfo, const SSDataBlock
}
else
{
}
else
{
memcpy
(
pkey
->
pData
,
val
,
varDataLen
(
val
));
memcpy
(
pkey
->
pData
,
val
,
varDataLen
(
val
));
}
}
}
else
{
pkey
->
isNull
=
true
;
}
}
}
}
...
@@ -1964,10 +1964,8 @@ static void doKeepNextRows(STimeSliceOperatorInfo* pSliceInfo, const SSDataBlock
...
@@ -1964,10 +1964,8 @@ static void doKeepNextRows(STimeSliceOperatorInfo* pSliceInfo, const SSDataBlock
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pBlock
->
pDataBlock
,
i
);
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pBlock
->
pDataBlock
,
i
);
// null data should not be kept since it can not be used to perform interpolation
SGroupKeys
*
pkey
=
taosArrayGet
(
pSliceInfo
->
pNextRow
,
i
);
if
(
!
colDataIsNull_s
(
pColInfoData
,
i
))
{
if
(
!
colDataIsNull_s
(
pColInfoData
,
rowIndex
))
{
SGroupKeys
*
pkey
=
taosArrayGet
(
pSliceInfo
->
pNextRow
,
i
);
pkey
->
isNull
=
false
;
pkey
->
isNull
=
false
;
char
*
val
=
colDataGetData
(
pColInfoData
,
rowIndex
);
char
*
val
=
colDataGetData
(
pColInfoData
,
rowIndex
);
if
(
!
IS_VAR_DATA_TYPE
(
pkey
->
type
))
{
if
(
!
IS_VAR_DATA_TYPE
(
pkey
->
type
))
{
...
@@ -1975,50 +1973,51 @@ static void doKeepNextRows(STimeSliceOperatorInfo* pSliceInfo, const SSDataBlock
...
@@ -1975,50 +1973,51 @@ static void doKeepNextRows(STimeSliceOperatorInfo* pSliceInfo, const SSDataBlock
}
else
{
}
else
{
memcpy
(
pkey
->
pData
,
val
,
varDataLen
(
val
));
memcpy
(
pkey
->
pData
,
val
,
varDataLen
(
val
));
}
}
}
else
{
pkey
->
isNull
=
true
;
}
}
}
}
pSliceInfo
->
isNextRowSet
=
true
;
pSliceInfo
->
isNextRowSet
=
true
;
}
}
static
void
doKeepLinearInfo
(
STimeSliceOperatorInfo
*
pSliceInfo
,
const
SSDataBlock
*
pBlock
,
int32_t
rowIndex
,
static
void
doKeepLinearInfo
(
STimeSliceOperatorInfo
*
pSliceInfo
,
const
SSDataBlock
*
pBlock
,
int32_t
rowIndex
)
{
bool
isLastRow
)
{
int32_t
numOfCols
=
taosArrayGetSize
(
pBlock
->
pDataBlock
);
int32_t
numOfCols
=
taosArrayGetSize
(
pBlock
->
pDataBlock
);
bool
fillLastPoint
=
pSliceInfo
->
fillLastPoint
;
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pBlock
->
pDataBlock
,
i
);
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pBlock
->
pDataBlock
,
i
);
SColumnInfoData
*
pTsCol
=
taosArrayGet
(
pBlock
->
pDataBlock
,
pSliceInfo
->
tsCol
.
slotId
);
SColumnInfoData
*
pTsCol
=
taosArrayGet
(
pBlock
->
pDataBlock
,
pSliceInfo
->
tsCol
.
slotId
);
SFillLinearInfo
*
pLinearInfo
=
taosArrayGet
(
pSliceInfo
->
pLinearInfo
,
i
);
SFillLinearInfo
*
pLinearInfo
=
taosArrayGet
(
pSliceInfo
->
pLinearInfo
,
i
);
// null data should not be kept since it can not be used to perform interpolation
// null value is represented by using key = INT64_MIN for now.
if
(
!
colDataIsNull_s
(
pColInfoData
,
i
))
{
// TODO: optimize to ignore null values for linear interpolation.
if
(
isLastRow
)
{
if
(
!
pLinearInfo
->
isStartSet
)
{
if
(
!
colDataIsNull_s
(
pColInfoData
,
rowIndex
))
{
pLinearInfo
->
start
.
key
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
rowIndex
);
pLinearInfo
->
start
.
key
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
rowIndex
);
memcpy
(
pLinearInfo
->
start
.
val
,
colDataGetData
(
pColInfoData
,
rowIndex
),
pLinearInfo
->
bytes
);
memcpy
(
pLinearInfo
->
start
.
val
,
colDataGetData
(
pColInfoData
,
rowIndex
),
pLinearInfo
->
bytes
);
}
else
if
(
fillLastPoint
)
{
}
pLinearInfo
->
isStartSet
=
true
;
}
else
if
(
!
pLinearInfo
->
isEndSet
)
{
if
(
!
colDataIsNull_s
(
pColInfoData
,
rowIndex
))
{
pLinearInfo
->
end
.
key
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
rowIndex
);
pLinearInfo
->
end
.
key
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
rowIndex
);
memcpy
(
pLinearInfo
->
end
.
val
,
colDataGetData
(
pColInfoData
,
rowIndex
),
pLinearInfo
->
bytes
);
memcpy
(
pLinearInfo
->
end
.
val
,
colDataGetData
(
pColInfoData
,
rowIndex
),
pLinearInfo
->
bytes
);
}
else
{
pLinearInfo
->
start
.
key
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
rowIndex
);
pLinearInfo
->
end
.
key
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
rowIndex
+
1
);
char
*
val
;
val
=
colDataGetData
(
pColInfoData
,
rowIndex
);
memcpy
(
pLinearInfo
->
start
.
val
,
val
,
pLinearInfo
->
bytes
);
val
=
colDataGetData
(
pColInfoData
,
rowIndex
+
1
);
memcpy
(
pLinearInfo
->
end
.
val
,
val
,
pLinearInfo
->
bytes
);
}
}
pLinearInfo
->
isEndSet
=
true
;
pLinearInfo
->
hasNull
=
false
;
}
else
{
}
else
{
pLinearInfo
->
hasNull
=
true
;
pLinearInfo
->
start
.
key
=
pLinearInfo
->
end
.
key
;
memcpy
(
pLinearInfo
->
start
.
val
,
pLinearInfo
->
end
.
val
,
pLinearInfo
->
bytes
);
if
(
!
colDataIsNull_s
(
pColInfoData
,
rowIndex
))
{
pLinearInfo
->
end
.
key
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
rowIndex
);
memcpy
(
pLinearInfo
->
end
.
val
,
colDataGetData
(
pColInfoData
,
rowIndex
),
pLinearInfo
->
bytes
);
}
else
{
pLinearInfo
->
end
.
key
=
INT64_MIN
;
}
}
}
}
}
pSliceInfo
->
fillLastPoint
=
isLastRow
;
}
}
static
void
genInterpolationResult
(
STimeSliceOperatorInfo
*
pSliceInfo
,
SExprSupp
*
pExprSup
,
SSDataBlock
*
pResBlock
)
{
static
bool
genInterpolationResult
(
STimeSliceOperatorInfo
*
pSliceInfo
,
SExprSupp
*
pExprSup
,
SSDataBlock
*
pResBlock
,
bool
beforeTs
)
{
int32_t
rows
=
pResBlock
->
info
.
rows
;
int32_t
rows
=
pResBlock
->
info
.
rows
;
blockDataEnsureCapacity
(
pResBlock
,
rows
+
1
);
blockDataEnsureCapacity
(
pResBlock
,
rows
+
1
);
// todo set the correct primary timestamp column
// todo set the correct primary timestamp column
...
@@ -2037,7 +2036,6 @@ static void genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
...
@@ -2037,7 +2036,6 @@ static void genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
}
}
int32_t
srcSlot
=
pExprInfo
->
base
.
pParam
[
0
].
pCol
->
slotId
;
int32_t
srcSlot
=
pExprInfo
->
base
.
pParam
[
0
].
pCol
->
slotId
;
// SColumnInfoData* pSrc = taosArrayGet(pBlock->pDataBlock, srcSlot);
switch
(
pSliceInfo
->
fillType
)
{
switch
(
pSliceInfo
->
fillType
)
{
case
TSDB_FILL_NULL
:
{
case
TSDB_FILL_NULL
:
{
colDataAppendNULL
(
pDst
,
rows
);
colDataAppendNULL
(
pDst
,
rows
);
...
@@ -2069,21 +2067,26 @@ static void genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
...
@@ -2069,21 +2067,26 @@ static void genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
SPoint
start
=
pLinearInfo
->
start
;
SPoint
start
=
pLinearInfo
->
start
;
SPoint
end
=
pLinearInfo
->
end
;
SPoint
end
=
pLinearInfo
->
end
;
SPoint
current
=
{.
key
=
pSliceInfo
->
current
};
SPoint
current
=
{.
key
=
pSliceInfo
->
current
};
current
.
val
=
taosMemoryCalloc
(
pLinearInfo
->
bytes
,
1
);
// before interp range, do not fill
// do not interpolate before ts range, only increate pSliceInfo->current
if
(
start
.
key
==
INT64_MIN
||
end
.
key
==
INT64_MAX
)
{
if
(
beforeTs
&&
!
pLinearInfo
->
isEndSet
)
{
return
true
;
}
if
(
!
pLinearInfo
->
isStartSet
||
!
pLinearInfo
->
isEndSet
)
{
hasInterp
=
false
;
hasInterp
=
false
;
break
;
break
;
}
}
if
(
pLinearInfo
->
hasNull
)
{
if
(
start
.
key
==
INT64_MIN
||
end
.
key
==
INT64_MIN
)
{
colDataAppendNULL
(
pDst
,
rows
);
colDataAppendNULL
(
pDst
,
rows
);
}
else
{
break
;
taosGetLinearInterpolationVal
(
&
current
,
pLinearInfo
->
type
,
&
start
,
&
end
,
pLinearInfo
->
type
);
colDataAppend
(
pDst
,
rows
,
(
char
*
)
current
.
val
,
false
);
}
}
current
.
val
=
taosMemoryCalloc
(
pLinearInfo
->
bytes
,
1
);
taosGetLinearInterpolationVal
(
&
current
,
pLinearInfo
->
type
,
&
start
,
&
end
,
pLinearInfo
->
type
);
colDataAppend
(
pDst
,
rows
,
(
char
*
)
current
.
val
,
false
);
taosMemoryFree
(
current
.
val
);
taosMemoryFree
(
current
.
val
);
break
;
break
;
}
}
...
@@ -2094,7 +2097,11 @@ static void genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
...
@@ -2094,7 +2097,11 @@ static void genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
}
}
SGroupKeys
*
pkey
=
taosArrayGet
(
pSliceInfo
->
pPrevRow
,
srcSlot
);
SGroupKeys
*
pkey
=
taosArrayGet
(
pSliceInfo
->
pPrevRow
,
srcSlot
);
colDataAppend
(
pDst
,
rows
,
pkey
->
pData
,
false
);
if
(
pkey
->
isNull
==
false
)
{
colDataAppend
(
pDst
,
rows
,
pkey
->
pData
,
false
);
}
else
{
colDataAppendNULL
(
pDst
,
rows
);
}
break
;
break
;
}
}
...
@@ -2105,7 +2112,11 @@ static void genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
...
@@ -2105,7 +2112,11 @@ static void genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
}
}
SGroupKeys
*
pkey
=
taosArrayGet
(
pSliceInfo
->
pNextRow
,
srcSlot
);
SGroupKeys
*
pkey
=
taosArrayGet
(
pSliceInfo
->
pNextRow
,
srcSlot
);
colDataAppend
(
pDst
,
rows
,
pkey
->
pData
,
false
);
if
(
pkey
->
isNull
==
false
)
{
colDataAppend
(
pDst
,
rows
,
pkey
->
pData
,
false
);
}
else
{
colDataAppendNULL
(
pDst
,
rows
);
}
break
;
break
;
}
}
...
@@ -2118,8 +2129,40 @@ static void genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
...
@@ -2118,8 +2129,40 @@ static void genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
if
(
hasInterp
)
{
if
(
hasInterp
)
{
pResBlock
->
info
.
rows
+=
1
;
pResBlock
->
info
.
rows
+=
1
;
}
}
return
hasInterp
;
}
}
static
void
addCurrentRowToResult
(
STimeSliceOperatorInfo
*
pSliceInfo
,
SExprSupp
*
pExprSup
,
SSDataBlock
*
pResBlock
,
SSDataBlock
*
pSrcBlock
,
int32_t
index
)
{
blockDataEnsureCapacity
(
pResBlock
,
pResBlock
->
info
.
rows
+
1
);
for
(
int32_t
j
=
0
;
j
<
pExprSup
->
numOfExprs
;
++
j
)
{
SExprInfo
*
pExprInfo
=
&
pExprSup
->
pExprInfo
[
j
];
int32_t
dstSlot
=
pExprInfo
->
base
.
resSchema
.
slotId
;
SColumnInfoData
*
pDst
=
taosArrayGet
(
pResBlock
->
pDataBlock
,
dstSlot
);
if
(
IS_TIMESTAMP_TYPE
(
pExprInfo
->
base
.
resSchema
.
type
))
{
colDataAppend
(
pDst
,
pResBlock
->
info
.
rows
,
(
char
*
)
&
pSliceInfo
->
current
,
false
);
}
else
{
int32_t
srcSlot
=
pExprInfo
->
base
.
pParam
[
0
].
pCol
->
slotId
;
SColumnInfoData
*
pSrc
=
taosArrayGet
(
pSrcBlock
->
pDataBlock
,
srcSlot
);
if
(
colDataIsNull_s
(
pSrc
,
index
))
{
colDataAppendNULL
(
pDst
,
pResBlock
->
info
.
rows
);
continue
;
}
char
*
v
=
colDataGetData
(
pSrc
,
index
);
colDataAppend
(
pDst
,
pResBlock
->
info
.
rows
,
v
,
false
);
}
}
pResBlock
->
info
.
rows
+=
1
;
return
;
}
static
int32_t
initPrevRowsKeeper
(
STimeSliceOperatorInfo
*
pInfo
,
SSDataBlock
*
pBlock
)
{
static
int32_t
initPrevRowsKeeper
(
STimeSliceOperatorInfo
*
pInfo
,
SSDataBlock
*
pBlock
)
{
if
(
pInfo
->
pPrevRow
!=
NULL
)
{
if
(
pInfo
->
pPrevRow
!=
NULL
)
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
...
@@ -2190,24 +2233,19 @@ static int32_t initFillLinearInfo(STimeSliceOperatorInfo* pInfo, SSDataBlock* pB
...
@@ -2190,24 +2233,19 @@ static int32_t initFillLinearInfo(STimeSliceOperatorInfo* pInfo, SSDataBlock* pB
SFillLinearInfo
linearInfo
=
{
0
};
SFillLinearInfo
linearInfo
=
{
0
};
linearInfo
.
start
.
key
=
INT64_MIN
;
linearInfo
.
start
.
key
=
INT64_MIN
;
linearInfo
.
end
.
key
=
INT64_M
AX
;
linearInfo
.
end
.
key
=
INT64_M
IN
;
linearInfo
.
start
.
val
=
taosMemoryCalloc
(
1
,
pColInfo
->
info
.
bytes
);
linearInfo
.
start
.
val
=
taosMemoryCalloc
(
1
,
pColInfo
->
info
.
bytes
);
linearInfo
.
end
.
val
=
taosMemoryCalloc
(
1
,
pColInfo
->
info
.
bytes
);
linearInfo
.
end
.
val
=
taosMemoryCalloc
(
1
,
pColInfo
->
info
.
bytes
);
linearInfo
.
hasNull
=
false
;
linearInfo
.
isStartSet
=
false
;
linearInfo
.
isEndSet
=
false
;
linearInfo
.
type
=
pColInfo
->
info
.
type
;
linearInfo
.
type
=
pColInfo
->
info
.
type
;
linearInfo
.
bytes
=
pColInfo
->
info
.
bytes
;
linearInfo
.
bytes
=
pColInfo
->
info
.
bytes
;
taosArrayPush
(
pInfo
->
pLinearInfo
,
&
linearInfo
);
taosArrayPush
(
pInfo
->
pLinearInfo
,
&
linearInfo
);
}
}
pInfo
->
fillLastPoint
=
false
;
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
bool
needToFillLastPoint
(
STimeSliceOperatorInfo
*
pSliceInfo
)
{
return
(
pSliceInfo
->
fillLastPoint
==
true
&&
pSliceInfo
->
fillType
==
TSDB_FILL_LINEAR
);
}
static
int32_t
initKeeperInfo
(
STimeSliceOperatorInfo
*
pInfo
,
SSDataBlock
*
pBlock
)
{
static
int32_t
initKeeperInfo
(
STimeSliceOperatorInfo
*
pInfo
,
SSDataBlock
*
pBlock
)
{
int32_t
code
;
int32_t
code
;
code
=
initPrevRowsKeeper
(
pInfo
,
pBlock
);
code
=
initPrevRowsKeeper
(
pInfo
,
pBlock
);
...
@@ -2263,195 +2301,73 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
...
@@ -2263,195 +2301,73 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
for
(
int32_t
i
=
0
;
i
<
pBlock
->
info
.
rows
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pBlock
->
info
.
rows
;
++
i
)
{
int64_t
ts
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
i
);
int64_t
ts
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
i
);
if
(
i
==
0
&&
needToFillLastPoint
(
pSliceInfo
))
{
// first row in current block
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
,
false
);
while
(
pSliceInfo
->
current
<
ts
&&
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
)
{
genInterpolationResult
(
pSliceInfo
,
&
pOperator
->
exprSupp
,
pResBlock
);
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
}
}
if
(
pSliceInfo
->
current
>
pSliceInfo
->
win
.
ekey
)
{
if
(
pSliceInfo
->
current
>
pSliceInfo
->
win
.
ekey
)
{
setOperatorCompleted
(
pOperator
);
setOperatorCompleted
(
pOperator
);
break
;
break
;
}
}
if
(
ts
==
pSliceInfo
->
current
)
{
if
(
ts
==
pSliceInfo
->
current
)
{
blockDataEnsureCapacity
(
pResBlock
,
pResBlock
->
info
.
rows
+
1
);
addCurrentRowToResult
(
pSliceInfo
,
&
pOperator
->
exprSupp
,
pResBlock
,
pBlock
,
i
);
for
(
int32_t
j
=
0
;
j
<
pOperator
->
exprSupp
.
numOfExprs
;
++
j
)
{
SExprInfo
*
pExprInfo
=
&
pOperator
->
exprSupp
.
pExprInfo
[
j
];
int32_t
dstSlot
=
pExprInfo
->
base
.
resSchema
.
slotId
;
SColumnInfoData
*
pDst
=
taosArrayGet
(
pResBlock
->
pDataBlock
,
dstSlot
);
if
(
IS_TIMESTAMP_TYPE
(
pExprInfo
->
base
.
resSchema
.
type
))
{
colDataAppend
(
pDst
,
pResBlock
->
info
.
rows
,
(
char
*
)
&
pSliceInfo
->
current
,
false
);
}
else
{
int32_t
srcSlot
=
pExprInfo
->
base
.
pParam
[
0
].
pCol
->
slotId
;
SColumnInfoData
*
pSrc
=
taosArrayGet
(
pBlock
->
pDataBlock
,
srcSlot
);
if
(
colDataIsNull_s
(
pSrc
,
i
))
{
colDataAppendNULL
(
pDst
,
pResBlock
->
info
.
rows
);
continue
;
}
char
*
v
=
colDataGetData
(
pSrc
,
i
);
colDataAppend
(
pDst
,
pResBlock
->
info
.
rows
,
v
,
false
);
}
}
pResBlock
->
info
.
rows
+=
1
;
doKeepPrevRows
(
pSliceInfo
,
pBlock
,
i
);
doKeepPrevRows
(
pSliceInfo
,
pBlock
,
i
);
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
);
// for linear interpolation, always fill value between this and next points;
pSliceInfo
->
current
=
// if its the first point in data block, also fill values between previous(if there's any) and this point;
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
// if its the last point in data block, no need to fill, but reserve this point as the start value and do
if
(
pSliceInfo
->
current
>
pSliceInfo
->
win
.
ekey
)
{
// the interpolation when processing next data block.
setOperatorCompleted
(
pOperator
);
if
(
pSliceInfo
->
fillType
==
TSDB_FILL_LINEAR
)
{
break
;
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
if
(
i
<
pBlock
->
info
.
rows
-
1
)
{
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
,
false
);
int64_t
nextTs
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
i
+
1
);
if
(
nextTs
>
pSliceInfo
->
current
)
{
while
(
pSliceInfo
->
current
<
nextTs
&&
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
)
{
genInterpolationResult
(
pSliceInfo
,
&
pOperator
->
exprSupp
,
pResBlock
);
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
}
if
(
pSliceInfo
->
current
>
pSliceInfo
->
win
.
ekey
)
{
setOperatorCompleted
(
pOperator
);
break
;
}
}
}
else
{
// it is the last row of current block
// store ts value as start, and calculate interp value when processing next block
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
,
true
);
}
}
else
{
// non-linear interpolation
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
if
(
pSliceInfo
->
current
>
pSliceInfo
->
win
.
ekey
)
{
setOperatorCompleted
(
pOperator
);
break
;
}
}
}
}
else
if
(
ts
<
pSliceInfo
->
current
)
{
}
else
if
(
ts
<
pSliceInfo
->
current
)
{
// in case of interpolation window starts and ends between two datapoints, fill(prev) need to interpolate
// in case of interpolation window starts and ends between two datapoints, fill(prev) need to interpolate
doKeepPrevRows
(
pSliceInfo
,
pBlock
,
i
);
doKeepPrevRows
(
pSliceInfo
,
pBlock
,
i
);
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
);
if
(
pSliceInfo
->
fillType
==
TSDB_FILL_LINEAR
)
{
// no need to increate pSliceInfo->current here
if
(
i
<
pBlock
->
info
.
rows
-
1
)
{
// pSliceInfo->current =
// in case of interpolation window starts and ends between two datapoints, fill(next) need to interpolate
// taosTimeAdd(pSliceInfo->current, pInterval->interval, pInterval->intervalUnit, pInterval->precision);
doKeepNextRows
(
pSliceInfo
,
pBlock
,
i
+
1
);
if
(
i
<
pBlock
->
info
.
rows
-
1
)
{
int64_t
nextTs
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
i
+
1
);
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
,
false
);
if
(
nextTs
>
pSliceInfo
->
current
)
{
int64_t
nextTs
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
i
+
1
);
while
(
pSliceInfo
->
current
<
nextTs
&&
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
)
{
if
(
nextTs
>
pSliceInfo
->
current
)
{
if
(
!
genInterpolationResult
(
pSliceInfo
,
&
pOperator
->
exprSupp
,
pResBlock
,
false
)
&&
pSliceInfo
->
fillType
==
TSDB_FILL_LINEAR
)
{
while
(
pSliceInfo
->
current
<
nextTs
&&
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
)
{
genInterpolationResult
(
pSliceInfo
,
&
pOperator
->
exprSupp
,
pResBlock
);
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
}
if
(
pSliceInfo
->
current
>
pSliceInfo
->
win
.
ekey
)
{
setOperatorCompleted
(
pOperator
);
break
;
break
;
}
else
{
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
}
}
}
}
}
else
{
// store ts value as start, and calculate interp value when processing next block
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
,
true
);
}
}
else
{
// non-linear interpolation
if
(
i
<
pBlock
->
info
.
rows
-
1
)
{
// in case of interpolation window starts and ends between two datapoints, fill(next) need to interpolate
doKeepNextRows
(
pSliceInfo
,
pBlock
,
i
+
1
);
int64_t
nextTs
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
i
+
1
);
if
(
nextTs
>
pSliceInfo
->
current
)
{
while
(
pSliceInfo
->
current
<
nextTs
&&
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
)
{
genInterpolationResult
(
pSliceInfo
,
&
pOperator
->
exprSupp
,
pResBlock
);
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
}
if
(
pSliceInfo
->
current
>
pSliceInfo
->
win
.
ekey
)
{
if
(
pSliceInfo
->
current
>
pSliceInfo
->
win
.
ekey
)
{
setOperatorCompleted
(
pOperator
);
setOperatorCompleted
(
pOperator
);
break
;
break
;
}
}
else
{
// ignore current row, and do nothing
}
}
}
else
{
// it is the last row of current block
}
else
{
doKeepPrevRows
(
pSliceInfo
,
pBlock
,
i
);
// ignore current row, and do nothing
}
}
}
else
{
// it is the last row of current block
doKeepPrevRows
(
pSliceInfo
,
pBlock
,
i
);
}
}
}
else
{
// ts > pSliceInfo->current
}
else
{
// ts > pSliceInfo->current
// in case of interpolation window starts and ends between two datapoints, fill(next) need to interpolate
// in case of interpolation window starts and ends between two datapoints, fill(next) need to interpolate
doKeepNextRows
(
pSliceInfo
,
pBlock
,
i
);
doKeepNextRows
(
pSliceInfo
,
pBlock
,
i
);
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
);
while
(
pSliceInfo
->
current
<
ts
&&
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
)
{
while
(
pSliceInfo
->
current
<
ts
&&
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
)
{
genInterpolationResult
(
pSliceInfo
,
&
pOperator
->
exprSupp
,
pResBlock
);
if
(
!
genInterpolationResult
(
pSliceInfo
,
&
pOperator
->
exprSupp
,
pResBlock
,
true
)
&&
pSliceInfo
->
fillType
==
TSDB_FILL_LINEAR
)
{
pSliceInfo
->
current
=
break
;
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
}
else
{
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
}
}
}
// add current row if timestamp match
// add current row if timestamp match
if
(
ts
==
pSliceInfo
->
current
&&
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
)
{
if
(
ts
==
pSliceInfo
->
current
&&
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
)
{
blockDataEnsureCapacity
(
pResBlock
,
pResBlock
->
info
.
rows
+
1
);
addCurrentRowToResult
(
pSliceInfo
,
&
pOperator
->
exprSupp
,
pResBlock
,
pBlock
,
i
);
for
(
int32_t
j
=
0
;
j
<
pOperator
->
exprSupp
.
numOfExprs
;
++
j
)
{
SExprInfo
*
pExprInfo
=
&
pOperator
->
exprSupp
.
pExprInfo
[
j
];
int32_t
dstSlot
=
pExprInfo
->
base
.
resSchema
.
slotId
;
SColumnInfoData
*
pDst
=
taosArrayGet
(
pResBlock
->
pDataBlock
,
dstSlot
);
if
(
IS_TIMESTAMP_TYPE
(
pExprInfo
->
base
.
resSchema
.
type
))
{
colDataAppend
(
pDst
,
pResBlock
->
info
.
rows
,
(
char
*
)
&
pSliceInfo
->
current
,
false
);
}
else
{
int32_t
srcSlot
=
pExprInfo
->
base
.
pParam
[
0
].
pCol
->
slotId
;
SColumnInfoData
*
pSrc
=
taosArrayGet
(
pBlock
->
pDataBlock
,
srcSlot
);
if
(
colDataIsNull_s
(
pSrc
,
i
))
{
colDataAppendNULL
(
pDst
,
pResBlock
->
info
.
rows
);
continue
;
}
char
*
v
=
colDataGetData
(
pSrc
,
i
);
colDataAppend
(
pDst
,
pResBlock
->
info
.
rows
,
v
,
false
);
}
}
pResBlock
->
info
.
rows
+=
1
;
doKeepPrevRows
(
pSliceInfo
,
pBlock
,
i
);
doKeepPrevRows
(
pSliceInfo
,
pBlock
,
i
);
if
(
pSliceInfo
->
fillType
==
TSDB_FILL_LINEAR
)
{
pSliceInfo
->
current
=
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
if
(
i
<
pBlock
->
info
.
rows
-
1
)
{
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
,
false
);
int64_t
nextTs
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
i
+
1
);
if
(
nextTs
>
pSliceInfo
->
current
)
{
while
(
pSliceInfo
->
current
<
nextTs
&&
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
)
{
genInterpolationResult
(
pSliceInfo
,
&
pOperator
->
exprSupp
,
pResBlock
);
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
}
if
(
pSliceInfo
->
current
>
pSliceInfo
->
win
.
ekey
)
{
setOperatorCompleted
(
pOperator
);
break
;
}
}
}
else
{
// it is the last row of current block
// store ts value as start, and calculate interp value when processing next block
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
,
true
);
}
}
else
{
// non-linear interpolation
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
}
}
}
if
(
pSliceInfo
->
current
>
pSliceInfo
->
win
.
ekey
)
{
if
(
pSliceInfo
->
current
>
pSliceInfo
->
win
.
ekey
)
{
...
@@ -2466,7 +2382,7 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
...
@@ -2466,7 +2382,7 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
// except for fill(next), fill(linear)
// except for fill(next), fill(linear)
while
(
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
&&
pSliceInfo
->
fillType
!=
TSDB_FILL_NEXT
&&
while
(
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
&&
pSliceInfo
->
fillType
!=
TSDB_FILL_NEXT
&&
pSliceInfo
->
fillType
!=
TSDB_FILL_LINEAR
)
{
pSliceInfo
->
fillType
!=
TSDB_FILL_LINEAR
)
{
genInterpolationResult
(
pSliceInfo
,
&
pOperator
->
exprSupp
,
pResBlock
);
genInterpolationResult
(
pSliceInfo
,
&
pOperator
->
exprSupp
,
pResBlock
,
false
);
pSliceInfo
->
current
=
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
}
}
...
...
tests/parallel_test/cases.task
浏览文件 @
f46f941c
...
@@ -438,11 +438,11 @@
...
@@ -438,11 +438,11 @@
,,,system-test,python3 ./test.py -f 1-insert/database_pre_suf.py
,,,system-test,python3 ./test.py -f 1-insert/database_pre_suf.py
,,,system-test,python3 ./test.py -f 1-insert/InsertFuturets.py
,,,system-test,python3 ./test.py -f 1-insert/InsertFuturets.py
,,,system-test,python3 ./test.py -f 0-others/show.py
,,,system-test,python3 ./test.py -f 0-others/show.py
,,,system-test,python3 ./test.py -f 2-query/abs.py
,,,system-test,
./pytest.sh
python3 ./test.py -f 2-query/abs.py
,,,system-test,python3 ./test.py -f 2-query/abs.py -R
,,,system-test,python3 ./test.py -f 2-query/abs.py -R
,,,system-test,python3 ./test.py -f 2-query/and_or_for_byte.py
,,,system-test,python3 ./test.py -f 2-query/and_or_for_byte.py
,,,system-test,python3 ./test.py -f 2-query/and_or_for_byte.py -R
,,,system-test,python3 ./test.py -f 2-query/and_or_for_byte.py -R
,,,system-test,python3 ./test.py -f 2-query/apercentile.py
,,,system-test,
./pytest.sh
python3 ./test.py -f 2-query/apercentile.py
,,,system-test,python3 ./test.py -f 2-query/apercentile.py -R
,,,system-test,python3 ./test.py -f 2-query/apercentile.py -R
,,,system-test,python3 ./test.py -f 2-query/arccos.py
,,,system-test,python3 ./test.py -f 2-query/arccos.py
,,,system-test,python3 ./test.py -f 2-query/arccos.py -R
,,,system-test,python3 ./test.py -f 2-query/arccos.py -R
...
...
tests/pytest/crash_gen.sh
浏览文件 @
f46f941c
...
@@ -45,7 +45,7 @@ fi
...
@@ -45,7 +45,7 @@ fi
# Now getting ready to execute Python
# Now getting ready to execute Python
# The following is the default of our standard dev env (Ubuntu 20.04), modify/adjust at your own risk
# The following is the default of our standard dev env (Ubuntu 20.04), modify/adjust at your own risk
PYTHON_EXEC
=
python3
.8
PYTHON_EXEC
=
python3
# First we need to set up a path for Python to find our own TAOS modules, so that "import" can work.
# First we need to set up a path for Python to find our own TAOS modules, so that "import" can work.
# export PYTHONPATH=$(pwd)/../../src/connector/python:$(pwd)
# export PYTHONPATH=$(pwd)/../../src/connector/python:$(pwd)
...
...
tests/pytest/crash_gen/crash_gen_main.py
浏览文件 @
f46f941c
...
@@ -37,6 +37,7 @@ import requests
...
@@ -37,6 +37,7 @@ import requests
# from guppy import hpy
# from guppy import hpy
import
gc
import
gc
import
taos
import
taos
from
taos.tmq
import
*
from
.shared.types
import
TdColumns
,
TdTags
from
.shared.types
import
TdColumns
,
TdTags
...
@@ -419,10 +420,12 @@ class ThreadCoordinator:
...
@@ -419,10 +420,12 @@ class ThreadCoordinator:
except
threading
.
BrokenBarrierError
as
err
:
except
threading
.
BrokenBarrierError
as
err
:
self
.
_execStats
.
registerFailure
(
"Aborted due to worker thread timeout"
)
self
.
_execStats
.
registerFailure
(
"Aborted due to worker thread timeout"
)
Logging
.
error
(
"
\n
"
)
Logging
.
error
(
"
\n
"
)
Logging
.
error
(
"Main loop aborted, caused by worker thread(s) time-out of {} seconds"
.
format
(
Logging
.
error
(
"Main loop aborted, caused by worker thread(s) time-out of {} seconds"
.
format
(
ThreadCoordinator
.
WORKER_THREAD_TIMEOUT
))
ThreadCoordinator
.
WORKER_THREAD_TIMEOUT
))
Logging
.
error
(
"TAOS related threads blocked at (stack frames top-to-bottom):"
)
Logging
.
error
(
"TAOS related threads blocked at (stack frames top-to-bottom):"
)
ts
=
ThreadStacks
()
ts
=
ThreadStacks
()
ts
.
record_current_time
(
time
.
time
())
# record thread exit time at current moment
ts
.
print
(
filterInternal
=
True
)
ts
.
print
(
filterInternal
=
True
)
workerTimeout
=
True
workerTimeout
=
True
...
@@ -546,7 +549,12 @@ class ThreadCoordinator:
...
@@ -546,7 +549,12 @@ class ThreadCoordinator:
# pick a task type for current state
# pick a task type for current state
db
=
self
.
pickDatabase
()
db
=
self
.
pickDatabase
()
taskType
=
db
.
getStateMachine
().
pickTaskType
()
# dynamic name of class
if
Dice
.
throw
(
2
)
==
1
:
taskType
=
db
.
getStateMachine
().
pickTaskType
()
# dynamic name of class
else
:
taskType
=
db
.
getStateMachine
().
balance_pickTaskType
()
# and an method can get balance task types
pass
return
taskType
(
self
.
_execStats
,
db
)
# create a task from it
return
taskType
(
self
.
_execStats
,
db
)
# create a task from it
def
resetExecutedTasks
(
self
):
def
resetExecutedTasks
(
self
):
...
@@ -674,9 +682,15 @@ class AnyState:
...
@@ -674,9 +682,15 @@ class AnyState:
# only "under normal circumstances", as we may override it with the -b option
# only "under normal circumstances", as we may override it with the -b option
CAN_DROP_DB
=
2
CAN_DROP_DB
=
2
CAN_CREATE_FIXED_SUPER_TABLE
=
3
CAN_CREATE_FIXED_SUPER_TABLE
=
3
CAN_CREATE_STREAM
=
3
# super table must exists
CAN_CREATE_TOPIC
=
3
# super table must exists
CAN_CREATE_CONSUMERS
=
3
CAN_DROP_FIXED_SUPER_TABLE
=
4
CAN_DROP_FIXED_SUPER_TABLE
=
4
CAN_DROP_TOPIC
=
4
CAN_DROP_STREAM
=
4
CAN_ADD_DATA
=
5
CAN_ADD_DATA
=
5
CAN_READ_DATA
=
6
CAN_READ_DATA
=
6
CAN_DELETE_DATA
=
6
def
__init__
(
self
):
def
__init__
(
self
):
self
.
_info
=
self
.
getInfo
()
self
.
_info
=
self
.
getInfo
()
...
@@ -727,12 +741,30 @@ class AnyState:
...
@@ -727,12 +741,30 @@ class AnyState:
return
False
return
False
return
self
.
_info
[
self
.
CAN_DROP_FIXED_SUPER_TABLE
]
return
self
.
_info
[
self
.
CAN_DROP_FIXED_SUPER_TABLE
]
def
canCreateTopic
(
self
):
return
self
.
_info
[
self
.
CAN_CREATE_TOPIC
]
def
canDropTopic
(
self
):
return
self
.
_info
[
self
.
CAN_DROP_TOPIC
]
def
canCreateConsumers
(
self
):
return
self
.
_info
[
self
.
CAN_CREATE_CONSUMERS
]
def
canCreateStreams
(
self
):
return
self
.
_info
[
self
.
CAN_CREATE_STREAM
]
def
canDropStream
(
self
):
return
self
.
_info
[
self
.
CAN_DROP_STREAM
]
def
canAddData
(
self
):
def
canAddData
(
self
):
return
self
.
_info
[
self
.
CAN_ADD_DATA
]
return
self
.
_info
[
self
.
CAN_ADD_DATA
]
def
canReadData
(
self
):
def
canReadData
(
self
):
return
self
.
_info
[
self
.
CAN_READ_DATA
]
return
self
.
_info
[
self
.
CAN_READ_DATA
]
def
canDeleteData
(
self
):
return
self
.
_info
[
self
.
CAN_DELETE_DATA
]
def
assertAtMostOneSuccess
(
self
,
tasks
,
cls
):
def
assertAtMostOneSuccess
(
self
,
tasks
,
cls
):
sCnt
=
0
sCnt
=
0
for
task
in
tasks
:
for
task
in
tasks
:
...
@@ -902,7 +934,7 @@ class StateHasData(AnyState):
...
@@ -902,7 +934,7 @@ class StateHasData(AnyState):
):
# only if we didn't create one
):
# only if we didn't create one
# we shouldn't have dropped it
# we shouldn't have dropped it
self
.
assertNoTask
(
tasks
,
TaskDropDb
)
self
.
assertNoTask
(
tasks
,
TaskDropDb
)
if
(
not
self
.
hasTask
(
tasks
,
TaskCreateSuperTable
)
if
not
(
self
.
hasTask
(
tasks
,
TaskCreateSuperTable
)
):
# if we didn't create the table
):
# if we didn't create the table
# we should not have a task that drops it
# we should not have a task that drops it
self
.
assertNoTask
(
tasks
,
TaskDropSuperTable
)
self
.
assertNoTask
(
tasks
,
TaskDropSuperTable
)
...
@@ -974,14 +1006,21 @@ class StateMechine:
...
@@ -974,14 +1006,21 @@ class StateMechine:
# did not do this when openning connection, and this is NOT the worker
# did not do this when openning connection, and this is NOT the worker
# thread, which does this on their own
# thread, which does this on their own
dbc
.
use
(
dbName
)
dbc
.
use
(
dbName
)
if
not
dbc
.
hasTables
():
# no tables
if
not
dbc
.
hasTables
():
# no tables
Logging
.
debug
(
"[STT] DB_ONLY found, between {} and {}"
.
format
(
ts
,
time
.
time
()))
Logging
.
debug
(
"[STT] DB_ONLY found, between {} and {}"
.
format
(
ts
,
time
.
time
()))
return
StateDbOnly
()
return
StateDbOnly
()
# For sure we have tables, which means we must have the super table. # TODO: are we sure?
# For sure we have tables, which means we must have the super table. # TODO: are we sure?
sTable
=
self
.
_db
.
getFixedSuperTable
()
sTable
=
self
.
_db
.
getFixedSuperTable
()
if
sTable
.
hasRegTables
(
dbc
):
# no regular tables
if
sTable
.
hasRegTables
(
dbc
):
# no regular tables
# print("debug=====*\n"*100)
Logging
.
debug
(
"[STT] SUPER_TABLE_ONLY found, between {} and {}"
.
format
(
ts
,
time
.
time
()))
Logging
.
debug
(
"[STT] SUPER_TABLE_ONLY found, between {} and {}"
.
format
(
ts
,
time
.
time
()))
return
StateSuperTableOnly
()
return
StateSuperTableOnly
()
else
:
# has actual tables
else
:
# has actual tables
Logging
.
debug
(
"[STT] HAS_DATA found, between {} and {}"
.
format
(
ts
,
time
.
time
()))
Logging
.
debug
(
"[STT] HAS_DATA found, between {} and {}"
.
format
(
ts
,
time
.
time
()))
...
@@ -1051,6 +1090,28 @@ class StateMechine:
...
@@ -1051,6 +1090,28 @@ class StateMechine:
# Logging.debug(" (weighted random:{}/{}) ".format(i, len(taskTypes)))
# Logging.debug(" (weighted random:{}/{}) ".format(i, len(taskTypes)))
return
taskTypes
[
i
]
return
taskTypes
[
i
]
def
balance_pickTaskType
(
self
):
# all the task types we can choose from at curent state
BasicTypes
=
self
.
getTaskTypes
()
weightsTypes
=
BasicTypes
.
copy
()
# this matrixs can balance the Frequency of TaskTypes
balance_TaskType_matrixs
=
{
'TaskDropDb'
:
5
,
'TaskDropTopics'
:
20
,
'TaskDropStreams'
:
10
,
'TaskDropStreamTables'
:
10
,
'TaskReadData'
:
50
,
'TaskDropSuperTable'
:
5
,
'TaskAlterTags'
:
3
,
'TaskAddData'
:
10
,
'TaskDeleteData'
:
10
,
'TaskCreateDb'
:
10
,
'TaskCreateStream'
:
3
,
'TaskCreateTopic'
:
3
,
'TaskCreateConsumers'
:
10
,
'TaskCreateSuperTable'
:
10
}
# TaskType : balance_matrixs of task
for
task
,
weights
in
balance_TaskType_matrixs
.
items
():
for
basicType
in
BasicTypes
:
if
basicType
.
__name__
==
task
:
for
_
in
range
(
weights
):
weightsTypes
.
append
(
basicType
)
task
=
random
.
sample
(
weightsTypes
,
1
)
return
task
[
0
]
# ref:
# ref:
# https://eli.thegreenplace.net/2010/01/22/weighted-random-generation-in-python/
# https://eli.thegreenplace.net/2010/01/22/weighted-random-generation-in-python/
def
_weighted_choice_sub
(
self
,
weights
)
->
int
:
def
_weighted_choice_sub
(
self
,
weights
)
->
int
:
...
@@ -1109,6 +1170,7 @@ class Database:
...
@@ -1109,6 +1170,7 @@ class Database:
return
"fs_table"
return
"fs_table"
def
getFixedSuperTable
(
self
)
->
TdSuperTable
:
def
getFixedSuperTable
(
self
)
->
TdSuperTable
:
return
TdSuperTable
(
self
.
getFixedSuperTableName
(),
self
.
getName
())
return
TdSuperTable
(
self
.
getFixedSuperTableName
(),
self
.
getName
())
# We aim to create a starting time tick, such that, whenever we run our test here once
# We aim to create a starting time tick, such that, whenever we run our test here once
...
@@ -1342,6 +1404,19 @@ class Task():
...
@@ -1342,6 +1404,19 @@ class Task():
0x2603
,
# Table does not exist, replaced by 2662 below
0x2603
,
# Table does not exist, replaced by 2662 below
0x260d
,
# Tags number not matched
0x260d
,
# Tags number not matched
0x2662
,
# Table does not exist #TODO: what about 2603 above?
0x2662
,
# Table does not exist #TODO: what about 2603 above?
0x2600
,
# database not specified, SQL: show stables , database droped , and show tables
0x032C
,
# Object is creating
0x032D
,
# Object is dropping
0x03D3
,
# Conflict transaction not completed
0x0707
,
# Query not ready , it always occur at replica 3
0x707
,
# Query not ready
0x396
,
# Database in creating status
0x386
,
# Database in droping status
0x03E1
,
# failed on tmq_subscribe ,topic not exist
0x03ed
,
# Topic must be dropped first, SQL: drop database db_0
0x0203
,
# Invalid value
0x03f0
,
# Stream already exist , topic already exists
...
@@ -1638,9 +1713,12 @@ class TaskCreateDb(StateTransitionTask):
...
@@ -1638,9 +1713,12 @@ class TaskCreateDb(StateTransitionTask):
# numReplica = Dice.throw(Settings.getConfig().max_replicas) + 1 # 1,2 ... N
# numReplica = Dice.throw(Settings.getConfig().max_replicas) + 1 # 1,2 ... N
numReplica
=
Config
.
getConfig
().
num_replicas
# fixed, always
numReplica
=
Config
.
getConfig
().
num_replicas
# fixed, always
repStr
=
"replica {}"
.
format
(
numReplica
)
repStr
=
"replica {}"
.
format
(
numReplica
)
updatePostfix
=
"update 1"
if
Config
.
getConfig
().
verify_data
else
""
# allow update only when "verify data" is active
updatePostfix
=
""
if
Config
.
getConfig
().
verify_data
else
""
# allow update only when "verify data" is active , 3.0 version default is update 1
vg_nums
=
random
.
randint
(
1
,
8
)
cache_model
=
Dice
.
choice
([
'none'
,
'last_row'
,
'last_value'
,
'both'
])
buffer
=
random
.
randint
(
3
,
128
)
dbName
=
self
.
_db
.
getName
()
dbName
=
self
.
_db
.
getName
()
self
.
execWtSql
(
wt
,
"create database {} {} {}
"
.
format
(
dbName
,
repStr
,
updatePostfix
)
)
self
.
execWtSql
(
wt
,
"create database {} {} {}
vgroups {} cachemodel '{}' buffer {} "
.
format
(
dbName
,
repStr
,
updatePostfix
,
vg_nums
,
cache_model
,
buffer
)
)
if
dbName
==
"db_0"
and
Config
.
getConfig
().
use_shadow_db
:
if
dbName
==
"db_0"
and
Config
.
getConfig
().
use_shadow_db
:
self
.
execWtSql
(
wt
,
"create database {} {} {} "
.
format
(
"db_s"
,
repStr
,
updatePostfix
)
)
self
.
execWtSql
(
wt
,
"create database {} {} {} "
.
format
(
"db_s"
,
repStr
,
updatePostfix
)
)
...
@@ -1654,9 +1732,211 @@ class TaskDropDb(StateTransitionTask):
...
@@ -1654,9 +1732,211 @@ class TaskDropDb(StateTransitionTask):
return
state
.
canDropDb
()
return
state
.
canDropDb
()
def
_executeInternal
(
self
,
te
:
TaskExecutor
,
wt
:
WorkerThread
):
def
_executeInternal
(
self
,
te
:
TaskExecutor
,
wt
:
WorkerThread
):
self
.
execWtSql
(
wt
,
"drop database {}"
.
format
(
self
.
_db
.
getName
()))
try
:
self
.
queryWtSql
(
wt
,
"drop database {}"
.
format
(
self
.
_db
.
getName
()))
# drop database maybe failed ,because topic exists
except
taos
.
error
.
ProgrammingError
as
err
:
errno
=
Helper
.
convertErrno
(
err
.
errno
)
if
errno
in
[
0x0203
]:
# drop maybe failed
pass
Logging
.
debug
(
"[OPS] database dropped at {}"
.
format
(
time
.
time
()))
Logging
.
debug
(
"[OPS] database dropped at {}"
.
format
(
time
.
time
()))
class
TaskCreateStream
(
StateTransitionTask
):
@
classmethod
def
getEndState
(
cls
):
return
StateHasData
()
@
classmethod
def
canBeginFrom
(
cls
,
state
:
AnyState
):
return
state
.
canCreateStreams
()
def
_executeInternal
(
self
,
te
:
TaskExecutor
,
wt
:
WorkerThread
):
dbname
=
self
.
_db
.
getName
()
sub_stream_name
=
dbname
+
'_sub_stream'
sub_stream_tb_name
=
'stream_tb_sub'
super_stream_name
=
dbname
+
'_super_stream'
super_stream_tb_name
=
'stream_tb_super'
if
not
self
.
_db
.
exists
(
wt
.
getDbConn
()):
Logging
.
debug
(
"Skipping task, no DB yet"
)
return
sTable
=
self
.
_db
.
getFixedSuperTable
()
# type: TdSuperTable
# wt.execSql("use db") # should always be in place
stbname
=
sTable
.
getName
()
sub_tables
=
sTable
.
getRegTables
(
wt
.
getDbConn
())
aggExpr
=
Dice
.
choice
([
'count(*)'
,
'avg(speed)'
,
'sum(speed)'
,
'stddev(speed)'
,
'min(speed)'
,
'max(speed)'
,
'first(speed)'
,
'last(speed)'
,
'apercentile(speed, 10)'
,
'last_row(*)'
,
'twa(speed)'
])
stream_sql
=
''
# set default value
if
sub_tables
:
sub_tbname
=
sub_tables
[
0
]
# create stream with query above sub_table
stream_sql
=
'create stream {} into {}.{} as select {}, avg(speed) FROM {}.{} PARTITION BY tbname INTERVAL(5s) SLIDING(3s) '
.
\
format
(
sub_stream_name
,
dbname
,
sub_stream_tb_name
,
aggExpr
,
dbname
,
sub_tbname
)
else
:
stream_sql
=
'create stream {} into {}.{} as select {}, avg(speed) FROM {}.{} PARTITION BY tbname INTERVAL(5s) SLIDING(3s) '
.
\
format
(
super_stream_name
,
dbname
,
super_stream_tb_name
,
aggExpr
,
dbname
,
stbname
)
self
.
execWtSql
(
wt
,
stream_sql
)
Logging
.
debug
(
"[OPS] stream is creating at {}"
.
format
(
time
.
time
()))
class
TaskCreateTopic
(
StateTransitionTask
):
@
classmethod
def
getEndState
(
cls
):
return
StateHasData
()
@
classmethod
def
canBeginFrom
(
cls
,
state
:
AnyState
):
return
state
.
canCreateTopic
()
def
_executeInternal
(
self
,
te
:
TaskExecutor
,
wt
:
WorkerThread
):
dbname
=
self
.
_db
.
getName
()
sub_topic_name
=
dbname
+
'_sub_topic'
super_topic_name
=
dbname
+
'_super_topic'
stable_topic
=
dbname
+
'_stable_topic'
db_topic
=
'database_'
+
dbname
+
'_topics'
if
not
self
.
_db
.
exists
(
wt
.
getDbConn
()):
Logging
.
debug
(
"Skipping task, no DB yet"
)
return
sTable
=
self
.
_db
.
getFixedSuperTable
()
# type: TdSuperTable
# wt.execSql("use db") # should always be in place
# create topic if not exists topic_ctb_column as select ts, c1, c2, c3 from stb1;
stbname
=
sTable
.
getName
()
sub_tables
=
sTable
.
getRegTables
(
wt
.
getDbConn
())
scalarExpr
=
Dice
.
choice
([
'*'
,
'speed'
,
'color'
,
'abs(speed)'
,
'acos(speed)'
,
'asin(speed)'
,
'atan(speed)'
,
'ceil(speed)'
,
'cos(speed)'
,
'cos(speed)'
,
'floor(speed)'
,
'log(speed,2)'
,
'pow(speed,2)'
,
'round(speed)'
,
'sin(speed)'
,
'sqrt(speed)'
,
'char_length(color)'
,
'concat(color,color)'
,
'concat_ws(" ", color,color," ")'
,
'length(color)'
,
'lower(color)'
,
'ltrim(color)'
,
'substr(color , 2)'
,
'upper(color)'
,
'cast(speed as double)'
,
'cast(ts as bigint)'
])
topic_sql
=
''
# set default value
if
Dice
.
throw
(
3
)
==
0
:
# create topic : source data from sub query
if
sub_tables
:
# if not empty
sub_tbname
=
sub_tables
[
0
]
# create topic : source data from sub query of sub stable
topic_sql
=
'create topic {} as select {} FROM {}.{} ; '
.
format
(
sub_topic_name
,
scalarExpr
,
dbname
,
sub_tbname
)
else
:
# create topic : source data from sub query of stable
topic_sql
=
'create topic {} as select {} FROM {}.{} '
.
format
(
super_topic_name
,
scalarExpr
,
dbname
,
stbname
)
elif
Dice
.
throw
(
3
)
==
1
:
# create topic : source data from super table
topic_sql
=
'create topic {} AS STABLE {}.{} '
.
format
(
stable_topic
,
dbname
,
stbname
)
elif
Dice
.
throw
(
3
)
==
2
:
# create topic : source data from whole database
topic_sql
=
'create topic {} AS DATABASE {} '
.
format
(
db_topic
,
dbname
)
else
:
pass
# exec create topics
self
.
execWtSql
(
wt
,
"use {}"
.
format
(
dbname
))
self
.
execWtSql
(
wt
,
topic_sql
)
Logging
.
debug
(
"[OPS] db topic is creating at {}"
.
format
(
time
.
time
()))
class
TaskDropTopics
(
StateTransitionTask
):
@
classmethod
def
getEndState
(
cls
):
return
StateHasData
()
@
classmethod
def
canBeginFrom
(
cls
,
state
:
AnyState
):
return
state
.
canDropTopic
()
def
_executeInternal
(
self
,
te
:
TaskExecutor
,
wt
:
WorkerThread
):
dbname
=
self
.
_db
.
getName
()
if
not
self
.
_db
.
exists
(
wt
.
getDbConn
()):
Logging
.
debug
(
"Skipping task, no DB yet"
)
return
sTable
=
self
.
_db
.
getFixedSuperTable
()
# type: TdSuperTable
# wt.execSql("use db") # should always be in place
tblName
=
sTable
.
getName
()
if
sTable
.
hasTopics
(
wt
.
getDbConn
()):
sTable
.
dropTopics
(
wt
.
getDbConn
(),
dbname
,
None
)
# drop topics of database
sTable
.
dropTopics
(
wt
.
getDbConn
(),
dbname
,
tblName
)
# drop topics of stable
class
TaskDropStreams
(
StateTransitionTask
):
@
classmethod
def
getEndState
(
cls
):
return
StateHasData
()
@
classmethod
def
canBeginFrom
(
cls
,
state
:
AnyState
):
return
state
.
canDropStream
()
def
_executeInternal
(
self
,
te
:
TaskExecutor
,
wt
:
WorkerThread
):
# dbname = self._db.getName()
if
not
self
.
_db
.
exists
(
wt
.
getDbConn
()):
Logging
.
debug
(
"Skipping task, no DB yet"
)
return
sTable
=
self
.
_db
.
getFixedSuperTable
()
# type: TdSuperTable
# wt.execSql("use db") # should always be in place
# tblName = sTable.getName()
if
sTable
.
hasStreams
(
wt
.
getDbConn
()):
sTable
.
dropStreams
(
wt
.
getDbConn
())
# drop stream of database
class
TaskDropStreamTables
(
StateTransitionTask
):
@
classmethod
def
getEndState
(
cls
):
return
StateHasData
()
@
classmethod
def
canBeginFrom
(
cls
,
state
:
AnyState
):
return
state
.
canDropStream
()
def
_executeInternal
(
self
,
te
:
TaskExecutor
,
wt
:
WorkerThread
):
# dbname = self._db.getName()
if
not
self
.
_db
.
exists
(
wt
.
getDbConn
()):
Logging
.
debug
(
"Skipping task, no DB yet"
)
return
sTable
=
self
.
_db
.
getFixedSuperTable
()
# type: TdSuperTable
wt
.
execSql
(
"use db"
)
# should always be in place
# tblName = sTable.getName()
if
sTable
.
hasStreamTables
(
wt
.
getDbConn
()):
sTable
.
dropStreamTables
(
wt
.
getDbConn
())
# drop stream tables
class
TaskCreateConsumers
(
StateTransitionTask
):
@
classmethod
def
getEndState
(
cls
):
return
StateHasData
()
@
classmethod
def
canBeginFrom
(
cls
,
state
:
AnyState
):
return
state
.
canCreateConsumers
()
def
_executeInternal
(
self
,
te
:
TaskExecutor
,
wt
:
WorkerThread
):
if
Config
.
getConfig
().
connector_type
==
'native'
:
sTable
=
self
.
_db
.
getFixedSuperTable
()
# type: TdSuperTable
# wt.execSql("use db") # should always be in place
if
sTable
.
hasTopics
(
wt
.
getDbConn
()):
sTable
.
createConsumer
(
wt
.
getDbConn
(),
random
.
randint
(
1
,
10
))
pass
else
:
print
(
" restful not support tmq consumers"
)
return
class
TaskCreateSuperTable
(
StateTransitionTask
):
class
TaskCreateSuperTable
(
StateTransitionTask
):
@
classmethod
@
classmethod
def
getEndState
(
cls
):
def
getEndState
(
cls
):
...
@@ -1673,7 +1953,7 @@ class TaskCreateSuperTable(StateTransitionTask):
...
@@ -1673,7 +1953,7 @@ class TaskCreateSuperTable(StateTransitionTask):
sTable
=
self
.
_db
.
getFixedSuperTable
()
# type: TdSuperTable
sTable
=
self
.
_db
.
getFixedSuperTable
()
# type: TdSuperTable
# wt.execSql("use db") # should always be in place
# wt.execSql("use db") # should always be in place
sTable
.
create
(
wt
.
getDbConn
(),
sTable
.
create
(
wt
.
getDbConn
(),
{
'ts'
:
TdDataType
.
TIMESTAMP
,
'speed'
:
TdDataType
.
INT
,
'color'
:
TdDataType
.
BINARY16
},
{
{
'ts'
:
TdDataType
.
TIMESTAMP
,
'speed'
:
TdDataType
.
INT
,
'color'
:
TdDataType
.
BINARY16
},
{
'b'
:
TdDataType
.
BINARY200
,
'f'
:
TdDataType
.
FLOAT
},
'b'
:
TdDataType
.
BINARY200
,
'f'
:
TdDataType
.
FLOAT
},
...
@@ -1688,14 +1968,17 @@ class TdSuperTable:
...
@@ -1688,14 +1968,17 @@ class TdSuperTable:
def
__init__
(
self
,
stName
,
dbName
):
def
__init__
(
self
,
stName
,
dbName
):
self
.
_stName
=
stName
self
.
_stName
=
stName
self
.
_dbName
=
dbName
self
.
_dbName
=
dbName
self
.
_consumerLists
=
{}
self
.
_ConsumerInsts
=
[]
def
getName
(
self
):
def
getName
(
self
):
return
self
.
_stName
return
self
.
_stName
def
drop
(
self
,
dbc
,
skipCheck
=
False
):
def
drop
(
self
,
dbc
,
skipCheck
=
False
):
dbName
=
self
.
_dbName
dbName
=
self
.
_dbName
if
self
.
exists
(
dbc
)
:
# if myself exists
if
self
.
exists
(
dbc
)
:
# if myself exists
fullTableName
=
dbName
+
'.'
+
self
.
_stName
fullTableName
=
dbName
+
'.'
+
self
.
_stName
dbc
.
execute
(
"DROP TABLE {}"
.
format
(
fullTableName
))
dbc
.
execute
(
"DROP TABLE {}"
.
format
(
fullTableName
))
else
:
else
:
if
not
skipCheck
:
if
not
skipCheck
:
...
@@ -1711,10 +1994,12 @@ class TdSuperTable:
...
@@ -1711,10 +1994,12 @@ class TdSuperTable:
dbName
=
self
.
_dbName
dbName
=
self
.
_dbName
dbc
.
execute
(
"USE "
+
dbName
)
dbc
.
execute
(
"USE "
+
dbName
)
fullTableName
=
dbName
+
'.'
+
self
.
_stName
fullTableName
=
dbName
+
'.'
+
self
.
_stName
if
dbc
.
existsSuperTable
(
self
.
_stName
):
if
dbc
.
existsSuperTable
(
self
.
_stName
):
if
dropIfExists
:
if
dropIfExists
:
dbc
.
execute
(
"DROP TABLE {}"
.
format
(
fullTableName
))
dbc
.
execute
(
"DROP TABLE {}"
.
format
(
fullTableName
))
else
:
# error
else
:
# error
raise
CrashGenError
(
"Cannot create super table, already exists: {}"
.
format
(
self
.
_stName
))
raise
CrashGenError
(
"Cannot create super table, already exists: {}"
.
format
(
self
.
_stName
))
...
@@ -1728,12 +2013,61 @@ class TdSuperTable:
...
@@ -1728,12 +2013,61 @@ class TdSuperTable:
)
)
else
:
else
:
sql
+=
" TAGS (dummy int) "
sql
+=
" TAGS (dummy int) "
dbc
.
execute
(
sql
)
dbc
.
execute
(
sql
)
def
createConsumer
(
self
,
dbc
,
Consumer_nums
):
def
generateConsumer
(
current_topic_list
):
conf
=
TaosTmqConf
()
conf
.
set
(
"group.id"
,
"tg2"
)
conf
.
set
(
"td.connect.user"
,
"root"
)
conf
.
set
(
"td.connect.pass"
,
"taosdata"
)
conf
.
set
(
"enable.auto.commit"
,
"true"
)
def
tmq_commit_cb_print
(
tmq
,
resp
,
offset
,
param
=
None
):
print
(
f
"commit:
{
resp
}
, tmq:
{
tmq
}
, offset:
{
offset
}
, param:
{
param
}
"
)
conf
.
set_auto_commit_cb
(
tmq_commit_cb_print
,
None
)
consumer
=
conf
.
new_consumer
()
topic_list
=
TaosTmqList
()
for
topic
in
current_topic_list
:
topic_list
.
append
(
topic
)
try
:
consumer
.
subscribe
(
topic_list
)
except
TmqError
as
e
:
pass
# consumer with random work life
time_start
=
time
.
time
()
while
1
:
res
=
consumer
.
poll
(
1000
)
if
time
.
time
()
-
time_start
>
random
.
randint
(
5
,
50
)
:
break
try
:
consumer
.
unsubscribe
()
except
TmqError
as
e
:
pass
return
# mulit Consumer
current_topic_list
=
self
.
getTopicLists
(
dbc
)
for
i
in
range
(
Consumer_nums
):
consumer_inst
=
threading
.
Thread
(
target
=
generateConsumer
,
args
=
(
current_topic_list
,))
self
.
_ConsumerInsts
.
append
(
consumer_inst
)
for
ConsumerInst
in
self
.
_ConsumerInsts
:
ConsumerInst
.
start
()
for
ConsumerInst
in
self
.
_ConsumerInsts
:
ConsumerInst
.
join
()
def
getTopicLists
(
self
,
dbc
:
DbConn
):
dbc
.
query
(
"show topics "
)
topics
=
dbc
.
getQueryResult
()
topicLists
=
[
v
[
0
]
for
v
in
topics
]
return
topicLists
def
getRegTables
(
self
,
dbc
:
DbConn
):
def
getRegTables
(
self
,
dbc
:
DbConn
):
dbName
=
self
.
_dbName
dbName
=
self
.
_dbName
try
:
try
:
dbc
.
query
(
"select TBNAME from {}.{}"
.
format
(
dbName
,
self
.
_stName
))
# TODO: analyze result set later
dbc
.
query
(
"select
distinct
TBNAME from {}.{}"
.
format
(
dbName
,
self
.
_stName
))
# TODO: analyze result set later
except
taos
.
error
.
ProgrammingError
as
err
:
except
taos
.
error
.
ProgrammingError
as
err
:
errno2
=
Helper
.
convertErrno
(
err
.
errno
)
errno2
=
Helper
.
convertErrno
(
err
.
errno
)
Logging
.
debug
(
"[=] Failed to get tables from super table: errno=0x{:X}, msg: {}"
.
format
(
errno2
,
err
))
Logging
.
debug
(
"[=] Failed to get tables from super table: errno=0x{:X}, msg: {}"
.
format
(
errno2
,
err
))
...
@@ -1743,7 +2077,75 @@ class TdSuperTable:
...
@@ -1743,7 +2077,75 @@ class TdSuperTable:
return
[
v
[
0
]
for
v
in
qr
]
# list transformation, ref: https://stackoverflow.com/questions/643823/python-list-transformation
return
[
v
[
0
]
for
v
in
qr
]
# list transformation, ref: https://stackoverflow.com/questions/643823/python-list-transformation
def
hasRegTables
(
self
,
dbc
:
DbConn
):
def
hasRegTables
(
self
,
dbc
:
DbConn
):
return
dbc
.
query
(
"SELECT * FROM {}.{}"
.
format
(
self
.
_dbName
,
self
.
_stName
))
>
0
if
dbc
.
existsSuperTable
(
self
.
_stName
):
return
dbc
.
query
(
"SELECT * FROM {}.{}"
.
format
(
self
.
_dbName
,
self
.
_stName
))
>
0
else
:
return
False
def
hasStreamTables
(
self
,
dbc
:
DbConn
):
return
dbc
.
query
(
"show {}.stables like 'stream_tb%'"
.
format
(
self
.
_dbName
))
>
0
def
hasStreams
(
self
,
dbc
:
DbConn
):
return
dbc
.
query
(
"show streams"
)
>
0
def
hasTopics
(
self
,
dbc
:
DbConn
):
return
dbc
.
query
(
"show topics"
)
>
0
def
dropTopics
(
self
,
dbc
:
DbConn
,
dbname
=
None
,
stb_name
=
None
):
dbc
.
query
(
"show topics "
)
topics
=
dbc
.
getQueryResult
()
if
dbname
!=
None
and
stb_name
==
None
:
for
topic
in
topics
:
if
dbname
in
topic
[
0
]
and
topic
[
0
].
startswith
(
"database"
):
try
:
dbc
.
execute
(
'drop topic {}'
.
format
(
topic
[
0
]))
Logging
.
debug
(
"[OPS] topic {} is droping at {}"
.
format
(
topic
,
time
.
time
()))
except
taos
.
error
.
ProgrammingError
as
err
:
errno
=
Helper
.
convertErrno
(
err
.
errno
)
if
errno
in
[
0x03EB
]:
# Topic subscribed cannot be dropped
pass
# for subsript in subscriptions:
else
:
pass
pass
return
True
elif
dbname
!=
None
and
stb_name
!=
None
:
for
topic
in
topics
:
if
topic
[
0
].
startswith
(
self
.
_dbName
)
and
topic
[
0
].
endswith
(
'topic'
):
dbc
.
execute
(
'drop topic {}'
.
format
(
topic
[
0
]))
Logging
.
debug
(
"[OPS] topic {} is droping at {}"
.
format
(
topic
,
time
.
time
()))
return
True
else
:
return
True
pass
def
dropStreams
(
self
,
dbc
:
DbConn
):
dbc
.
query
(
"show streams "
)
Streams
=
dbc
.
getQueryResult
()
for
Stream
in
Streams
:
if
Stream
[
0
].
startswith
(
self
.
_dbName
):
dbc
.
execute
(
'drop stream {}'
.
format
(
Stream
[
0
]))
return
not
dbc
.
query
(
"show streams "
)
>
0
def
dropStreamTables
(
self
,
dbc
:
DbConn
):
dbc
.
query
(
"show {}.stables like 'stream_tb%'"
.
format
(
self
.
_dbName
))
StreamTables
=
dbc
.
getQueryResult
()
for
StreamTable
in
StreamTables
:
if
self
.
dropStreams
(
dbc
):
dbc
.
execute
(
'drop table {}.{}'
.
format
(
self
.
_dbName
,
StreamTable
[
0
]))
return
not
dbc
.
query
(
"show {}.stables like 'stream_tb%'"
.
format
(
self
.
_dbName
))
def
ensureRegTable
(
self
,
task
:
Optional
[
Task
],
dbc
:
DbConn
,
regTableName
:
str
):
def
ensureRegTable
(
self
,
task
:
Optional
[
Task
],
dbc
:
DbConn
,
regTableName
:
str
):
'''
'''
...
@@ -1838,10 +2240,46 @@ class TdSuperTable:
...
@@ -1838,10 +2240,46 @@ class TdSuperTable:
# Run the query against the regular table first
# Run the query against the regular table first
doAggr
=
(
Dice
.
throw
(
2
)
==
0
)
# 1 in 2 chance
doAggr
=
(
Dice
.
throw
(
2
)
==
0
)
# 1 in 2 chance
if
not
doAggr
:
# don't do aggregate query, just simple one
if
not
doAggr
:
# don't do aggregate query, just simple one
commonExpr
=
Dice
.
choice
([
'*'
,
'abs(speed)'
,
'acos(speed)'
,
'asin(speed)'
,
'atan(speed)'
,
'ceil(speed)'
,
'cos(speed)'
,
'cos(speed)'
,
'floor(speed)'
,
'log(speed,2)'
,
'pow(speed,2)'
,
'round(speed)'
,
'sin(speed)'
,
'sqrt(speed)'
,
'char_length(color)'
,
'concat(color,color)'
,
'concat_ws(" ", color,color," ")'
,
'length(color)'
,
'lower(color)'
,
'ltrim(color)'
,
'substr(color , 2)'
,
'upper(color)'
,
'cast(speed as double)'
,
'cast(ts as bigint)'
,
# 'TO_ISO8601(color)',
# 'TO_UNIXTIMESTAMP(ts)',
'now()'
,
'timediff(ts,now)'
,
'timezone()'
,
'TIMETRUNCATE(ts,1s)'
,
'TIMEZONE()'
,
'TODAY()'
,
'distinct(color)'
]
)
ret
.
append
(
SqlQuery
(
# reg table
ret
.
append
(
SqlQuery
(
# reg table
"select {} from {}.{}"
.
format
(
'*'
,
self
.
_dbName
,
rTbName
)))
"select {} from {}.{}"
.
format
(
commonExpr
,
self
.
_dbName
,
rTbName
)))
ret
.
append
(
SqlQuery
(
# super table
ret
.
append
(
SqlQuery
(
# super table
"select {} from {}.{}"
.
format
(
'*'
,
self
.
_dbName
,
self
.
getName
())))
"select {} from {}.{}"
.
format
(
commonExpr
,
self
.
_dbName
,
self
.
getName
())))
else
:
# Aggregate query
else
:
# Aggregate query
aggExpr
=
Dice
.
choice
([
aggExpr
=
Dice
.
choice
([
'count(*)'
,
'count(*)'
,
...
@@ -1857,17 +2295,34 @@ class TdSuperTable:
...
@@ -1857,17 +2295,34 @@ class TdSuperTable:
'top(speed, 50)'
,
# TODO: not supported?
'top(speed, 50)'
,
# TODO: not supported?
'bottom(speed, 50)'
,
# TODO: not supported?
'bottom(speed, 50)'
,
# TODO: not supported?
'apercentile(speed, 10)'
,
# TODO: TD-1316
'apercentile(speed, 10)'
,
# TODO: TD-1316
# 'last_row(speed
)', # TODO: commented out per TD-3231, we should re-create
'last_row(*
)'
,
# TODO: commented out per TD-3231, we should re-create
# Transformation Functions
# Transformation Functions
# 'diff(speed)', # TODO: no supported?!
# 'diff(speed)', # TODO: no supported?!
'spread(speed)'
'spread(speed)'
,
'elapsed(ts)'
,
'mode(speed)'
,
'bottom(speed,1)'
,
'top(speed,1)'
,
'tail(speed,1)'
,
'unique(color)'
,
'csum(speed)'
,
'DERIVATIVE(speed,1s,1)'
,
'diff(speed,1)'
,
'irate(speed)'
,
'mavg(speed,3)'
,
'sample(speed,5)'
,
'STATECOUNT(speed,"LT",1)'
,
'STATEDURATION(speed,"LT",1)'
,
'twa(speed)'
])
# TODO: add more from 'top'
])
# TODO: add more from 'top'
# if aggExpr not in ['stddev(speed)']: # STDDEV not valid for super tables?! (Done in TD-1049)
# if aggExpr not in ['stddev(speed)']: # STDDEV not valid for super tables?! (Done in TD-1049)
sql
=
"select {} from {}.{}"
.
format
(
aggExpr
,
self
.
_dbName
,
self
.
getName
())
sql
=
"select {} from {}.{}"
.
format
(
aggExpr
,
self
.
_dbName
,
self
.
getName
())
if
Dice
.
throw
(
3
)
==
0
:
# 1 in X chance
if
Dice
.
throw
(
3
)
==
0
:
# 1 in X chance
sql
=
sql
+
' GROUP BY color'
partion_expr
=
Dice
.
choice
([
'color'
,
'tbname'
])
sql
=
sql
+
' partition BY '
+
partion_expr
+
' order by '
+
partion_expr
Progress
.
emit
(
Progress
.
QUERY_GROUP_BY
)
Progress
.
emit
(
Progress
.
QUERY_GROUP_BY
)
# Logging.info("Executing GROUP-BY query: " + sql)
# Logging.info("Executing GROUP-BY query: " + sql)
ret
.
append
(
SqlQuery
(
sql
))
ret
.
append
(
SqlQuery
(
sql
))
...
@@ -1974,6 +2429,7 @@ class TaskDropSuperTable(StateTransitionTask):
...
@@ -1974,6 +2429,7 @@ class TaskDropSuperTable(StateTransitionTask):
isSuccess
=
False
isSuccess
=
False
Logging
.
debug
(
"[DB] Acceptable error when dropping a table"
)
Logging
.
debug
(
"[DB] Acceptable error when dropping a table"
)
continue
# try to delete next regular table
continue
# try to delete next regular table
if
(
not
tickOutput
):
if
(
not
tickOutput
):
tickOutput
=
True
# Print only one time
tickOutput
=
True
# Print only one time
...
@@ -1985,6 +2441,8 @@ class TaskDropSuperTable(StateTransitionTask):
...
@@ -1985,6 +2441,8 @@ class TaskDropSuperTable(StateTransitionTask):
# Drop the super table itself
# Drop the super table itself
tblName
=
self
.
_db
.
getFixedSuperTableName
()
tblName
=
self
.
_db
.
getFixedSuperTableName
()
self
.
execWtSql
(
wt
,
"drop table {}.{}"
.
format
(
self
.
_db
.
getName
(),
tblName
))
self
.
execWtSql
(
wt
,
"drop table {}.{}"
.
format
(
self
.
_db
.
getName
(),
tblName
))
class
TaskAlterTags
(
StateTransitionTask
):
class
TaskAlterTags
(
StateTransitionTask
):
...
@@ -2234,6 +2692,220 @@ class TaskAddData(StateTransitionTask):
...
@@ -2234,6 +2692,220 @@ class TaskAddData(StateTransitionTask):
self
.
activeTable
.
discard
(
i
)
# not raising an error, unlike remove
self
.
activeTable
.
discard
(
i
)
# not raising an error, unlike remove
class
TaskDeleteData
(
StateTransitionTask
):
# Track which table is being actively worked on
activeTable
:
Set
[
int
]
=
set
()
# We use these two files to record operations to DB, useful for power-off tests
fAddLogReady
=
None
# type: Optional[io.TextIOWrapper]
fAddLogDone
=
None
# type: Optional[io.TextIOWrapper]
@
classmethod
def
prepToRecordOps
(
cls
):
if
Config
.
getConfig
().
record_ops
:
if
(
cls
.
fAddLogReady
is
None
):
Logging
.
info
(
"Recording in a file operations to be performed..."
)
cls
.
fAddLogReady
=
open
(
"add_log_ready.txt"
,
"w"
)
if
(
cls
.
fAddLogDone
is
None
):
Logging
.
info
(
"Recording in a file operations completed..."
)
cls
.
fAddLogDone
=
open
(
"add_log_done.txt"
,
"w"
)
@
classmethod
def
getEndState
(
cls
):
return
StateHasData
()
@
classmethod
def
canBeginFrom
(
cls
,
state
:
AnyState
):
return
state
.
canDeleteData
()
def
_lockTableIfNeeded
(
self
,
fullTableName
,
extraMsg
=
''
):
if
Config
.
getConfig
().
verify_data
:
# Logging.info("Locking table: {}".format(fullTableName))
self
.
lockTable
(
fullTableName
)
# Logging.info("Table locked {}: {}".format(extraMsg, fullTableName))
# print("_w" + str(nextInt % 100), end="", flush=True) # Trace what was written
else
:
# Logging.info("Skipping locking table")
pass
def
_unlockTableIfNeeded
(
self
,
fullTableName
):
if
Config
.
getConfig
().
verify_data
:
# Logging.info("Unlocking table: {}".format(fullTableName))
self
.
unlockTable
(
fullTableName
)
# Logging.info("Table unlocked: {}".format(fullTableName))
else
:
pass
# Logging.info("Skipping unlocking table")
def
_deleteData
(
self
,
db
:
Database
,
dbc
,
regTableName
,
te
:
TaskExecutor
):
# implied: NOT in batches
numRecords
=
self
.
LARGE_NUMBER_OF_RECORDS
if
Config
.
getConfig
().
larger_data
else
self
.
SMALL_NUMBER_OF_RECORDS
del_Records
=
int
(
numRecords
/
5
)
if
Dice
.
throw
(
2
)
==
0
:
for
j
in
range
(
del_Records
):
# number of records per table
intToWrite
=
db
.
getNextInt
()
nextTick
=
db
.
getNextTick
()
# nextColor = db.getNextColor()
if
Config
.
getConfig
().
record_ops
:
self
.
prepToRecordOps
()
if
self
.
fAddLogReady
is
None
:
raise
CrashGenError
(
"Unexpected empty fAddLogReady"
)
self
.
fAddLogReady
.
write
(
"Ready to delete {} to {}
\n
"
.
format
(
intToWrite
,
regTableName
))
self
.
fAddLogReady
.
flush
()
os
.
fsync
(
self
.
fAddLogReady
.
fileno
())
# TODO: too ugly trying to lock the table reliably, refactor...
fullTableName
=
db
.
getName
()
+
'.'
+
regTableName
self
.
_lockTableIfNeeded
(
fullTableName
)
# so that we are verify read-back. TODO: deal with exceptions before unlock
try
:
sql
=
"delete from {} where ts = '{}' ;"
.
format
(
# removed: tags ('{}', {})
fullTableName
,
# ds.getFixedSuperTableName(),
# ds.getNextBinary(), ds.getNextFloat(),
nextTick
)
# print(sql)
# Logging.info("Adding data: {}".format(sql))
dbc
.
execute
(
sql
)
# Logging.info("Data added: {}".format(sql))
intWrote
=
intToWrite
# Quick hack, attach an update statement here. TODO: create an "update" task
if
(
not
Config
.
getConfig
().
use_shadow_db
)
and
Dice
.
throw
(
5
)
==
0
:
# 1 in N chance, plus not using shaddow DB
intToUpdate
=
db
.
getNextInt
()
# Updated, but should not succeed
# nextColor = db.getNextColor()
sql
=
"delete from {} where ts = '{}' ;"
.
format
(
# "INSERt" means "update" here
fullTableName
,
nextTick
)
# sql = "UPDATE {} set speed={}, color='{}' WHERE ts='{}'".format(
# fullTableName, db.getNextInt(), db.getNextColor(), nextTick)
dbc
.
execute
(
sql
)
intWrote
=
intToUpdate
# We updated, seems TDengine non-cluster accepts this.
except
:
# Any exception at all
self
.
_unlockTableIfNeeded
(
fullTableName
)
raise
# Now read it back and verify, we might encounter an error if table is dropped
if
Config
.
getConfig
().
verify_data
:
# only if command line asks for it
try
:
dbc
.
query
(
"SELECT * from {}.{} WHERE ts='{}'"
.
format
(
db
.
getName
(),
regTableName
,
nextTick
))
result
=
dbc
.
getQueryResult
()
if
len
(
result
)
==
0
:
# means data has been delete
print
(
"D1"
,
end
=
""
)
# DF means delete failed
else
:
print
(
"DF"
,
end
=
""
)
# DF means delete failed
except
taos
.
error
.
ProgrammingError
as
err
:
errno
=
Helper
.
convertErrno
(
err
.
errno
)
# if errno == CrashGenError.INVALID_EMPTY_RESULT: # empty result
# print("D1",end="") # D1 means delete data success and only 1 record
if
errno
in
[
0x218
,
0x362
,
0x2662
]:
# table doesn't exist
# do nothing
pass
else
:
# Re-throw otherwise
raise
finally
:
self
.
_unlockTableIfNeeded
(
fullTableName
)
# Quite ugly, refactor lock/unlock
# Done with read-back verification, unlock the table now
# Successfully wrote the data into the DB, let's record it somehow
te
.
recordDataMark
(
intWrote
)
else
:
# delete all datas and verify datas ,expected table is empty
if
Config
.
getConfig
().
record_ops
:
self
.
prepToRecordOps
()
if
self
.
fAddLogReady
is
None
:
raise
CrashGenError
(
"Unexpected empty fAddLogReady"
)
self
.
fAddLogReady
.
write
(
"Ready to delete {} to {}
\n
"
.
format
(
intToWrite
,
regTableName
))
self
.
fAddLogReady
.
flush
()
os
.
fsync
(
self
.
fAddLogReady
.
fileno
())
# TODO: too ugly trying to lock the table reliably, refactor...
fullTableName
=
db
.
getName
()
+
'.'
+
regTableName
self
.
_lockTableIfNeeded
(
fullTableName
)
# so that we are verify read-back. TODO: deal with exceptions before unlock
try
:
sql
=
"delete from {} ;"
.
format
(
# removed: tags ('{}', {})
fullTableName
)
# Logging.info("Adding data: {}".format(sql))
dbc
.
execute
(
sql
)
# Logging.info("Data added: {}".format(sql))
# Quick hack, attach an update statement here. TODO: create an "update" task
if
(
not
Config
.
getConfig
().
use_shadow_db
)
and
Dice
.
throw
(
5
)
==
0
:
# 1 in N chance, plus not using shaddow DB
sql
=
"delete from {} ;"
.
format
(
# "INSERt" means "update" here
fullTableName
)
dbc
.
execute
(
sql
)
except
:
# Any exception at all
self
.
_unlockTableIfNeeded
(
fullTableName
)
raise
# Now read it back and verify, we might encounter an error if table is dropped
if
Config
.
getConfig
().
verify_data
:
# only if command line asks for it
try
:
dbc
.
query
(
"SELECT * from {}.{} WHERE ts='{}'"
.
format
(
db
.
getName
(),
regTableName
,
nextTick
))
result
=
dbc
.
getQueryResult
()
if
len
(
result
)
==
0
:
# means data has been delete
print
(
"DA"
,
end
=
""
)
else
:
print
(
"DF"
,
end
=
""
)
# DF means delete failed
except
taos
.
error
.
ProgrammingError
as
err
:
errno
=
Helper
.
convertErrno
(
err
.
errno
)
# if errno == CrashGenError.INVALID_EMPTY_RESULT: # empty result
# print("Da",end="") # Da means delete data success and for all datas
if
errno
in
[
0x218
,
0x362
,
0x2662
]:
# table doesn't exist
# do nothing
pass
else
:
# Re-throw otherwise
raise
finally
:
self
.
_unlockTableIfNeeded
(
fullTableName
)
# Quite ugly, refactor lock/unlock
# Done with read-back verification, unlock the table now
if
Config
.
getConfig
().
record_ops
:
if
self
.
fAddLogDone
is
None
:
raise
CrashGenError
(
"Unexpected empty fAddLogDone"
)
self
.
fAddLogDone
.
write
(
"Wrote {} to {}
\n
"
.
format
(
intWrote
,
regTableName
))
self
.
fAddLogDone
.
flush
()
os
.
fsync
(
self
.
fAddLogDone
.
fileno
())
def
_executeInternal
(
self
,
te
:
TaskExecutor
,
wt
:
WorkerThread
):
# ds = self._dbManager # Quite DANGEROUS here, may result in multi-thread client access
db
=
self
.
_db
dbc
=
wt
.
getDbConn
()
numTables
=
self
.
LARGE_NUMBER_OF_TABLES
if
Config
.
getConfig
().
larger_data
else
self
.
SMALL_NUMBER_OF_TABLES
numRecords
=
self
.
LARGE_NUMBER_OF_RECORDS
if
Config
.
getConfig
().
larger_data
else
self
.
SMALL_NUMBER_OF_RECORDS
tblSeq
=
list
(
range
(
numTables
))
random
.
shuffle
(
tblSeq
)
# now we have random sequence
for
i
in
tblSeq
:
if
(
i
in
self
.
activeTable
):
# wow already active
# print("x", end="", flush=True) # concurrent insertion
Progress
.
emit
(
Progress
.
CONCURRENT_INSERTION
)
else
:
self
.
activeTable
.
add
(
i
)
# marking it active
dbName
=
db
.
getName
()
sTable
=
db
.
getFixedSuperTable
()
regTableName
=
self
.
getRegTableName
(
i
)
# "db.reg_table_{}".format(i)
fullTableName
=
dbName
+
'.'
+
regTableName
# self._lockTable(fullTableName) # "create table" below. Stop it if the table is "locked"
sTable
.
ensureRegTable
(
self
,
wt
.
getDbConn
(),
regTableName
)
# Ensure the table exists
# self._unlockTable(fullTableName)
self
.
_deleteData
(
db
,
dbc
,
regTableName
,
te
)
self
.
activeTable
.
discard
(
i
)
# not raising an error, unlike remove
class
ThreadStacks
:
# stack info for all threads
class
ThreadStacks
:
# stack info for all threads
def
__init__
(
self
):
def
__init__
(
self
):
...
@@ -2244,6 +2916,9 @@ class ThreadStacks: # stack info for all threads
...
@@ -2244,6 +2916,9 @@ class ThreadStacks: # stack info for all threads
shortTid
=
th
.
native_id
%
10000
#type: ignore
shortTid
=
th
.
native_id
%
10000
#type: ignore
self
.
_allStacks
[
shortTid
]
=
stack
# Was using th.native_id
self
.
_allStacks
[
shortTid
]
=
stack
# Was using th.native_id
def
record_current_time
(
self
,
current_time
):
self
.
current_time
=
current_time
def
print
(
self
,
filteredEndName
=
None
,
filterInternal
=
False
):
def
print
(
self
,
filteredEndName
=
None
,
filterInternal
=
False
):
for
shortTid
,
stack
in
self
.
_allStacks
.
items
():
# for each thread, stack frames top to bottom
for
shortTid
,
stack
in
self
.
_allStacks
.
items
():
# for each thread, stack frames top to bottom
lastFrame
=
stack
[
-
1
]
lastFrame
=
stack
[
-
1
]
...
@@ -2258,8 +2933,11 @@ class ThreadStacks: # stack info for all threads
...
@@ -2258,8 +2933,11 @@ class ThreadStacks: # stack info for all threads
continue
# ignore
continue
# ignore
# Now print
# Now print
print
(
"
\n
<----- Thread Info for LWP/ID: {} (most recent call last) <-----"
.
format
(
shortTid
))
print
(
"
\n
<----- Thread Info for LWP/ID: {} (most recent call last) <-----"
.
format
(
shortTid
))
lastSqlForThread
=
DbConn
.
fetchSqlForThread
(
shortTid
)
lastSqlForThread
=
DbConn
.
fetchSqlForThread
(
shortTid
)
print
(
"Last SQL statement attempted from thread {} is: {}"
.
format
(
shortTid
,
lastSqlForThread
))
last_sql_commit_time
=
DbConn
.
get_save_sql_time
(
shortTid
)
# time_cost = DbConn.get_time_cost()
print
(
"Last SQL statement attempted from thread {} ({:.4f} sec ago) is: {}"
.
format
(
shortTid
,
self
.
current_time
-
last_sql_commit_time
,
lastSqlForThread
))
stackFrame
=
0
stackFrame
=
0
for
frame
in
stack
:
# was using: reversed(stack)
for
frame
in
stack
:
# was using: reversed(stack)
# print(frame)
# print(frame)
...
@@ -2268,6 +2946,8 @@ class ThreadStacks: # stack info for all threads
...
@@ -2268,6 +2946,8 @@ class ThreadStacks: # stack info for all threads
print
(
" {}"
.
format
(
frame
.
line
))
print
(
" {}"
.
format
(
frame
.
line
))
stackFrame
+=
1
stackFrame
+=
1
print
(
"-----> End of Thread Info ----->
\n
"
)
print
(
"-----> End of Thread Info ----->
\n
"
)
if
self
.
current_time
-
last_sql_commit_time
>
100
:
# dead lock occured
print
(
"maybe dead locked of thread {} "
.
format
(
shortTid
))
class
ClientManager
:
class
ClientManager
:
def
__init__
(
self
):
def
__init__
(
self
):
...
@@ -2631,4 +3311,3 @@ class Container():
...
@@ -2631,4 +3311,3 @@ class Container():
return
return
self
.
_verifyValidProperty
(
name
)
self
.
_verifyValidProperty
(
name
)
self
.
_cargo
[
name
]
=
value
self
.
_cargo
[
name
]
=
value
tests/pytest/crash_gen/shared/db.py
浏览文件 @
f46f941c
...
@@ -26,10 +26,13 @@ class DbConn:
...
@@ -26,10 +26,13 @@ class DbConn:
TYPE_NATIVE
=
"native-c"
TYPE_NATIVE
=
"native-c"
TYPE_REST
=
"rest-api"
TYPE_REST
=
"rest-api"
TYPE_INVALID
=
"invalid"
TYPE_INVALID
=
"invalid"
# class variables
# class variables
lastSqlFromThreads
:
dict
[
int
,
str
]
=
{}
# stored by thread id, obtained from threading.current_thread().ident%10000
lastSqlFromThreads
:
dict
[
int
,
str
]
=
{}
# stored by thread id, obtained from threading.current_thread().ident%10000
spendThreads
:
dict
[
int
,
float
]
=
{}
# stored by thread id, obtained from threading.current_thread().ident%10000
current_time
:
dict
[
int
,
float
]
=
{}
# save current time
@
classmethod
@
classmethod
def
saveSqlForCurrentThread
(
cls
,
sql
:
str
):
def
saveSqlForCurrentThread
(
cls
,
sql
:
str
):
'''
'''
...
@@ -37,15 +40,56 @@ class DbConn:
...
@@ -37,15 +40,56 @@ class DbConn:
run into a dead-lock situation, we can pick out the deadlocked thread, and use
run into a dead-lock situation, we can pick out the deadlocked thread, and use
that information to find what what SQL statement is stuck.
that information to find what what SQL statement is stuck.
'''
'''
th
=
threading
.
current_thread
()
th
=
threading
.
current_thread
()
shortTid
=
th
.
native_id
%
10000
#type: ignore
shortTid
=
th
.
native_id
%
10000
#type: ignore
cls
.
lastSqlFromThreads
[
shortTid
]
=
sql
# Save this for later
cls
.
lastSqlFromThreads
[
shortTid
]
=
sql
# Save this for later
cls
.
record_save_sql_time
()
@
classmethod
@
classmethod
def
fetchSqlForThread
(
cls
,
shortTid
:
int
)
->
str
:
def
fetchSqlForThread
(
cls
,
shortTid
:
int
)
->
str
:
print
(
"======================="
)
if
shortTid
not
in
cls
.
lastSqlFromThreads
:
if
shortTid
not
in
cls
.
lastSqlFromThreads
:
raise
CrashGenError
(
"No last-attempted-SQL found for thread id: {}"
.
format
(
shortTid
))
raise
CrashGenError
(
"No last-attempted-SQL found for thread id: {}"
.
format
(
shortTid
))
return
cls
.
lastSqlFromThreads
[
shortTid
]
return
cls
.
lastSqlFromThreads
[
shortTid
]
@
classmethod
def
get_save_sql_time
(
cls
,
shortTid
:
int
):
'''
Let us save the last SQL statement on a per-thread basis, so that when later we
run into a dead-lock situation, we can pick out the deadlocked thread, and use
that information to find what what SQL statement is stuck.
'''
return
cls
.
current_time
[
shortTid
]
@
classmethod
def
record_save_sql_time
(
cls
):
'''
Let us save the last SQL statement on a per-thread basis, so that when later we
run into a dead-lock situation, we can pick out the deadlocked thread, and use
that information to find what what SQL statement is stuck.
'''
th
=
threading
.
current_thread
()
shortTid
=
th
.
native_id
%
10000
#type: ignore
cls
.
current_time
[
shortTid
]
=
float
(
time
.
time
())
# Save this for later
@
classmethod
def
sql_exec_spend
(
cls
,
cost
:
float
):
'''
Let us save the last SQL statement on a per-thread basis, so that when later we
run into a dead-lock situation, we can pick out the deadlocked thread, and use
that information to find what what SQL statement is stuck.
'''
th
=
threading
.
current_thread
()
shortTid
=
th
.
native_id
%
10000
#type: ignore
cls
.
spendThreads
[
shortTid
]
=
cost
# Save this for later
@
classmethod
def
get_time_cost
(
cls
)
->
float
:
th
=
threading
.
current_thread
()
shortTid
=
th
.
native_id
%
10000
#type: ignore
return
cls
.
spendThreads
.
get
(
shortTid
)
@
classmethod
@
classmethod
def
create
(
cls
,
connType
,
dbTarget
):
def
create
(
cls
,
connType
,
dbTarget
):
...
@@ -61,6 +105,7 @@ class DbConn:
...
@@ -61,6 +105,7 @@ class DbConn:
def
createNative
(
cls
,
dbTarget
)
->
DbConn
:
def
createNative
(
cls
,
dbTarget
)
->
DbConn
:
return
cls
.
create
(
cls
.
TYPE_NATIVE
,
dbTarget
)
return
cls
.
create
(
cls
.
TYPE_NATIVE
,
dbTarget
)
@
classmethod
@
classmethod
def
createRest
(
cls
,
dbTarget
)
->
DbConn
:
def
createRest
(
cls
,
dbTarget
)
->
DbConn
:
return
cls
.
create
(
cls
.
TYPE_REST
,
dbTarget
)
return
cls
.
create
(
cls
.
TYPE_REST
,
dbTarget
)
...
@@ -75,6 +120,7 @@ class DbConn:
...
@@ -75,6 +120,7 @@ class DbConn:
return
"[DbConn: type={}, target={}]"
.
format
(
self
.
_type
,
self
.
_dbTarget
)
return
"[DbConn: type={}, target={}]"
.
format
(
self
.
_type
,
self
.
_dbTarget
)
def
getLastSql
(
self
):
def
getLastSql
(
self
):
return
self
.
_lastSql
return
self
.
_lastSql
def
open
(
self
):
def
open
(
self
):
...
@@ -184,13 +230,19 @@ class DbConnRest(DbConn):
...
@@ -184,13 +230,19 @@ class DbConnRest(DbConn):
def
_doSql
(
self
,
sql
):
def
_doSql
(
self
,
sql
):
self
.
_lastSql
=
sql
# remember this, last SQL attempted
self
.
_lastSql
=
sql
# remember this, last SQL attempted
self
.
saveSqlForCurrentThread
(
sql
)
# Save in global structure too. #TODO: combine with above
self
.
saveSqlForCurrentThread
(
sql
)
# Save in global structure too. #TODO: combine with above
try
:
time_cost
=
-
1
time_start
=
time
.
time
()
try
:
r
=
requests
.
post
(
self
.
_url
,
r
=
requests
.
post
(
self
.
_url
,
data
=
sql
,
data
=
sql
,
auth
=
HTTPBasicAuth
(
'root'
,
'taosdata'
))
auth
=
HTTPBasicAuth
(
'root'
,
'taosdata'
))
except
:
except
:
print
(
"REST API Failure (TODO: more info here)"
)
print
(
"REST API Failure (TODO: more info here)"
)
self
.
sql_exec_spend
(
-
2
)
raise
raise
finally
:
time_cost
=
time
.
time
()
-
time_start
self
.
sql_exec_spend
(
time_cost
)
rj
=
r
.
json
()
rj
=
r
.
json
()
# Sanity check for the "Json Result"
# Sanity check for the "Json Result"
if
(
'status'
not
in
rj
):
if
(
'status'
not
in
rj
):
...
@@ -223,6 +275,8 @@ class DbConnRest(DbConn):
...
@@ -223,6 +275,8 @@ class DbConnRest(DbConn):
"[SQL-REST] Execution Result, nRows = {}, SQL = {}"
.
format
(
nRows
,
sql
))
"[SQL-REST] Execution Result, nRows = {}, SQL = {}"
.
format
(
nRows
,
sql
))
return
nRows
return
nRows
def
query
(
self
,
sql
):
# return rows affected
def
query
(
self
,
sql
):
# return rows affected
return
self
.
execute
(
sql
)
return
self
.
execute
(
sql
)
...
@@ -336,6 +390,7 @@ class MyTDSql:
...
@@ -336,6 +390,7 @@ class MyTDSql:
raise
raise
return
self
.
affectedRows
return
self
.
affectedRows
class
DbTarget
:
class
DbTarget
:
def
__init__
(
self
,
cfgPath
,
hostAddr
,
port
):
def
__init__
(
self
,
cfgPath
,
hostAddr
,
port
):
self
.
cfgPath
=
cfgPath
self
.
cfgPath
=
cfgPath
...
@@ -355,6 +410,7 @@ class DbConnNative(DbConn):
...
@@ -355,6 +410,7 @@ class DbConnNative(DbConn):
# _connInfoDisplayed = False # TODO: find another way to display this
# _connInfoDisplayed = False # TODO: find another way to display this
totalConnections
=
0
# Not private
totalConnections
=
0
# Not private
totalRequests
=
0
totalRequests
=
0
time_cost
=
-
1
def
__init__
(
self
,
dbTarget
):
def
__init__
(
self
,
dbTarget
):
super
().
__init__
(
dbTarget
)
super
().
__init__
(
dbTarget
)
...
@@ -413,8 +469,18 @@ class DbConnNative(DbConn):
...
@@ -413,8 +469,18 @@ class DbConnNative(DbConn):
"Cannot exec SQL unless db connection is open"
,
CrashGenError
.
DB_CONNECTION_NOT_OPEN
)
"Cannot exec SQL unless db connection is open"
,
CrashGenError
.
DB_CONNECTION_NOT_OPEN
)
Logging
.
debug
(
"[SQL] Executing SQL: {}"
.
format
(
sql
))
Logging
.
debug
(
"[SQL] Executing SQL: {}"
.
format
(
sql
))
self
.
_lastSql
=
sql
self
.
_lastSql
=
sql
time_cost
=
-
1
nRows
=
0
time_start
=
time
.
time
()
self
.
saveSqlForCurrentThread
(
sql
)
# Save in global structure too. #TODO: combine with above
self
.
saveSqlForCurrentThread
(
sql
)
# Save in global structure too. #TODO: combine with above
nRows
=
self
.
_tdSql
.
execute
(
sql
)
try
:
nRows
=
self
.
_tdSql
.
execute
(
sql
)
except
Exception
as
e
:
self
.
sql_exec_spend
(
-
2
)
finally
:
time_cost
=
time
.
time
()
-
time_start
self
.
sql_exec_spend
(
time_cost
)
cls
=
self
.
__class__
cls
=
self
.
__class__
cls
.
totalRequests
+=
1
cls
.
totalRequests
+=
1
Logging
.
debug
(
Logging
.
debug
(
...
@@ -494,4 +560,3 @@ class DbManager():
...
@@ -494,4 +560,3 @@ class DbManager():
self
.
_dbConn
.
close
()
self
.
_dbConn
.
close
()
self
.
_dbConn
=
None
self
.
_dbConn
=
None
Logging
.
debug
(
"DbManager closed DB connection..."
)
Logging
.
debug
(
"DbManager closed DB connection..."
)
tests/pytest/util/dnodes.py
浏览文件 @
f46f941c
...
@@ -162,7 +162,11 @@ class TDDnode:
...
@@ -162,7 +162,11 @@ class TDDnode:
def
setAsan
(
self
,
value
):
def
setAsan
(
self
,
value
):
self
.
asan
=
value
self
.
asan
=
value
if
value
:
if
value
:
self
.
execPath
=
os
.
path
.
abspath
(
self
.
path
+
"/tests/script/sh/exec.sh"
)
selfPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
if
(
"community"
in
selfPath
):
self
.
execPath
=
os
.
path
.
abspath
(
self
.
path
+
"/community/tests/script/sh/exec.sh"
)
else
:
self
.
execPath
=
os
.
path
.
abspath
(
self
.
path
+
"/tests/script/sh/exec.sh"
)
def
getDataSize
(
self
):
def
getDataSize
(
self
):
totalSize
=
0
totalSize
=
0
...
@@ -670,8 +674,13 @@ class TDDnodes:
...
@@ -670,8 +674,13 @@ class TDDnodes:
def
setAsan
(
self
,
value
):
def
setAsan
(
self
,
value
):
self
.
asan
=
value
self
.
asan
=
value
if
value
:
if
value
:
self
.
stopDnodesPath
=
os
.
path
.
abspath
(
self
.
path
+
"/tests/script/sh/stop_dnodes.sh"
)
selfPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
self
.
stopDnodesSigintPath
=
os
.
path
.
abspath
(
self
.
path
+
"/tests/script/sh/sigint_stop_dnodes.sh"
)
if
(
"community"
in
selfPath
):
self
.
stopDnodesPath
=
os
.
path
.
abspath
(
self
.
path
+
"/community/tests/script/sh/stop_dnodes.sh"
)
self
.
stopDnodesSigintPath
=
os
.
path
.
abspath
(
self
.
path
+
"/community/tests/script/sh/sigint_stop_dnodes.sh"
)
else
:
self
.
stopDnodesPath
=
os
.
path
.
abspath
(
self
.
path
+
"/tests/script/sh/stop_dnodes.sh"
)
self
.
stopDnodesSigintPath
=
os
.
path
.
abspath
(
self
.
path
+
"/tests/script/sh/sigint_stop_dnodes.sh"
)
tdLog
.
info
(
"run in address sanitizer mode"
)
tdLog
.
info
(
"run in address sanitizer mode"
)
def
setKillValgrind
(
self
,
value
):
def
setKillValgrind
(
self
,
value
):
...
...
tests/pytest/util/log.py
浏览文件 @
f46f941c
...
@@ -33,7 +33,7 @@ class TDLog:
...
@@ -33,7 +33,7 @@ class TDLog:
print
(
"
\033
[1;36m%s %s
\033
[0m"
%
(
datetime
.
datetime
.
now
(),
err
))
print
(
"
\033
[1;36m%s %s
\033
[0m"
%
(
datetime
.
datetime
.
now
(),
err
))
def
success
(
self
,
info
):
def
success
(
self
,
info
):
print
(
"
\033
[1;32m%s %s
\033
[0m"
%
(
datetime
.
datetime
.
now
(),
info
))
print
f
(
"
\033
[1;32m%s %s
\033
[0m"
%
(
datetime
.
datetime
.
now
(),
info
))
def
notice
(
self
,
err
):
def
notice
(
self
,
err
):
print
(
"
\033
[1;33m%s %s
\033
[0m"
%
(
datetime
.
datetime
.
now
(),
err
))
print
(
"
\033
[1;33m%s %s
\033
[0m"
%
(
datetime
.
datetime
.
now
(),
err
))
...
...
tests/script/sh/checkAsan.sh
浏览文件 @
f46f941c
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
set
+e
set
+e
#set -x
#set -x
unset
LD_PRELOAD
SCRIPT_DIR
=
`
dirname
$0
`
SCRIPT_DIR
=
`
dirname
$0
`
cd
$SCRIPT_DIR
/../
cd
$SCRIPT_DIR
/../
SCRIPT_DIR
=
`
pwd
`
SCRIPT_DIR
=
`
pwd
`
...
@@ -21,19 +22,24 @@ error_num=`cat ${LOG_DIR}/*.asan | grep "ERROR" | wc -l`
...
@@ -21,19 +22,24 @@ error_num=`cat ${LOG_DIR}/*.asan | grep "ERROR" | wc -l`
memory_leak
=
`
cat
${
LOG_DIR
}
/
*
.asan |
grep
"Direct leak"
|
wc
-l
`
memory_leak
=
`
cat
${
LOG_DIR
}
/
*
.asan |
grep
"Direct leak"
|
wc
-l
`
indirect_leak
=
`
cat
${
LOG_DIR
}
/
*
.asan |
grep
"Indirect leak"
|
wc
-l
`
indirect_leak
=
`
cat
${
LOG_DIR
}
/
*
.asan |
grep
"Indirect leak"
|
wc
-l
`
runtime_error
=
`
cat
${
LOG_DIR
}
/
*
.asan |
grep
"runtime error"
|
grep
-v
"trees.c:873"
|
wc
-l
`
runtime_error
=
`
cat
${
LOG_DIR
}
/
*
.asan |
grep
"runtime error"
|
grep
-v
"trees.c:873"
|
wc
-l
`
python_error
=
`
cat
${
LOG_DIR
}
/
*
.info |
grep
-w
"stack"
|
wc
-l
`
echo
-e
"
\0
33[44;32;1m"
asan error_num:
$error_num
"
\0
33[0m"
echo
-e
"
\0
33[44;32;1m"
asan error_num:
$error_num
"
\0
33[0m"
echo
-e
"
\0
33[44;32;1m"
asan memory_leak:
$memory_leak
"
\0
33[0m"
echo
-e
"
\0
33[44;32;1m"
asan memory_leak:
$memory_leak
"
\0
33[0m"
echo
-e
"
\0
33[44;32;1m"
asan indirect_leak:
$indirect_leak
"
\0
33[0m"
echo
-e
"
\0
33[44;32;1m"
asan indirect_leak:
$indirect_leak
"
\0
33[0m"
echo
-e
"
\0
33[44;32;1m"
asan runtime error:
$runtime_error
"
\0
33[0m"
echo
-e
"
\0
33[44;32;1m"
asan runtime error:
$runtime_error
"
\0
33[0m"
echo
-e
"
\0
33[44;32;1m"
asan python error:
$python_error
"
\0
33[0m"
let
"errors=
$error_num
+
$memory_leak
+
$indirect_leak
+
$runtime_error
"
let
"errors=
$error_num
+
$memory_leak
+
$indirect_leak
+
$runtime_error
+
$python_error
"
if
[
$errors
-eq
0
]
;
then
if
[
$errors
-eq
0
]
;
then
echo
-e
"
\0
33[44;32;1m"
no asan errors
"
\0
33[0m"
echo
-e
"
\0
33[44;32;1m"
no asan errors
"
\0
33[0m"
exit
0
exit
0
else
else
echo
-e
"
\0
33[44;31;1m"
asan total errors:
$errors
"
\0
33[0m"
echo
-e
"
\0
33[44;31;1m"
asan total errors:
$errors
"
\0
33[0m"
if
[
$python_error
-ne
0
]
;
then
cat
${
LOG_DIR
}
/
*
.info
fi
cat
${
LOG_DIR
}
/
*
.asan
cat
${
LOG_DIR
}
/
*
.asan
exit
1
exit
1
fi
fi
\ No newline at end of file
tests/script/sh/exec.sh
浏览文件 @
f46f941c
...
@@ -11,6 +11,7 @@
...
@@ -11,6 +11,7 @@
set
+e
set
+e
#set -x
#set -x
unset
LD_PRELOAD
UNAME_BIN
=
`
which
uname
`
UNAME_BIN
=
`
which
uname
`
OS_TYPE
=
`
$UNAME_BIN
`
OS_TYPE
=
`
$UNAME_BIN
`
...
...
tests/script/sh/sigint_stop_dnodes.sh
浏览文件 @
f46f941c
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
set
+e
set
+e
#set -x
#set -x
export
LD_PRELOAD
=
unset
LD_PRELOAD
UNAME_BIN
=
`
which
uname
`
UNAME_BIN
=
`
which
uname
`
OS_TYPE
=
`
$UNAME_BIN
`
OS_TYPE
=
`
$UNAME_BIN
`
...
...
tests/script/sh/stop_dnodes.sh
浏览文件 @
f46f941c
...
@@ -3,10 +3,10 @@
...
@@ -3,10 +3,10 @@
set
+e
set
+e
#set -x
#set -x
unset
LD_PRELOAD
UNAME_BIN
=
`
which
uname
`
UNAME_BIN
=
`
which
uname
`
OS_TYPE
=
`
$UNAME_BIN
`
OS_TYPE
=
`
$UNAME_BIN
`
export
LD_PRELOAD
=
PID
=
`
ps
-ef
|grep /usr/bin/taosd |
grep
-v
grep
|
awk
'{print $2}'
`
PID
=
`
ps
-ef
|grep /usr/bin/taosd |
grep
-v
grep
|
awk
'{print $2}'
`
if
[
-n
"
$PID
"
]
;
then
if
[
-n
"
$PID
"
]
;
then
echo
systemctl stop taosd
echo
systemctl stop taosd
...
...
tests/system-test/2-query/abs.py
浏览文件 @
f46f941c
...
@@ -204,18 +204,12 @@ class TDTestCase:
...
@@ -204,18 +204,12 @@ class TDTestCase:
row_check
.
append
(
elem
)
row_check
.
append
(
elem
)
auto_result
.
append
(
row_check
)
auto_result
.
append
(
row_check
)
check_status
=
True
tdSql
.
query
(
abs_query
)
for
row_index
,
row
in
enumerate
(
abs_result
):
for
row_index
,
row
in
enumerate
(
abs_result
):
for
col_index
,
elem
in
enumerate
(
row
):
for
col_index
,
elem
in
enumerate
(
row
):
if
auto_result
[
row_index
][
col_index
]
!=
elem
:
tdSql
.
checkData
(
row_index
,
col_index
,
auto_result
[
row_index
][
col_index
])
check_status
=
False
if
not
check_status
:
tdLog
.
notice
(
"abs function value has not as expected , sql is
\"
%s
\"
"
%
abs_query
)
sys
.
exit
(
1
)
else
:
tdLog
.
info
(
"abs value check pass , it work as expected ,sql is
\"
%s
\"
"
%
abs_query
)
def
test_errors
(
self
):
def
test_errors
(
self
):
dbname
=
"testdb"
dbname
=
"testdb"
...
@@ -466,19 +460,19 @@ class TDTestCase:
...
@@ -466,19 +460,19 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
1
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
5
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
0
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
self
.
check_result_auto
(
f
"select c1, c2, c3 , c4, c5 ,c6 from
{
dbname
}
.sub1_bound "
,
self
.
check_result_auto
(
f
"select c1, c2, c3 , c4, c5 ,c6 from
{
dbname
}
.sub1_bound "
,
f
"select abs(c1), abs(c2) ,abs(c3), abs(c4), abs(c5) ,abs(c6) from
{
dbname
}
.sub1_bound"
)
f
"select abs(c1), abs(c2) ,abs(c3), abs(c4), abs(c5) ,abs(c6) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/and_or_for_byte.py
浏览文件 @
f46f941c
...
@@ -426,19 +426,19 @@ class TDTestCase:
...
@@ -426,19 +426,19 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
1
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
5
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
0
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
self
.
check_function
(
"&"
,
False
,
f
"
{
dbname
}
.sub1_bound"
,
"c1"
,
"c2"
,
"c3"
,
"c4"
,
"c5"
,
"c6"
)
self
.
check_function
(
"&"
,
False
,
f
"
{
dbname
}
.sub1_bound"
,
"c1"
,
"c2"
,
"c3"
,
"c4"
,
"c5"
,
"c6"
)
self
.
check_function
(
"&"
,
False
,
f
"
{
dbname
}
.sub1_bound"
,
"abs(c1)"
,
"abs(c2)"
,
"abs(c3)"
,
"abs(c4)"
,
"abs(c5)"
,
"abs(c6)"
)
self
.
check_function
(
"&"
,
False
,
f
"
{
dbname
}
.sub1_bound"
,
"abs(c1)"
,
"abs(c2)"
,
"abs(c3)"
,
"abs(c4)"
,
"abs(c5)"
,
"abs(c6)"
)
...
...
tests/system-test/2-query/arccos.py
浏览文件 @
f46f941c
...
@@ -86,21 +86,12 @@ class TDTestCase:
...
@@ -86,21 +86,12 @@ class TDTestCase:
row_check
.
append
(
elem
)
row_check
.
append
(
elem
)
auto_result
.
append
(
row_check
)
auto_result
.
append
(
row_check
)
check_status
=
True
tdSql
.
query
(
pow_query
)
for
row_index
,
row
in
enumerate
(
pow_result
):
for
row_index
,
row
in
enumerate
(
pow_result
):
for
col_index
,
elem
in
enumerate
(
row
):
for
col_index
,
elem
in
enumerate
(
row
):
if
auto_result
[
row_index
][
col_index
]
==
None
and
not
(
auto_result
[
row_index
][
col_index
]
==
None
and
elem
==
None
):
check_status
=
False
tdSql
.
checkData
(
row_index
,
col_index
,
auto_result
[
row_index
][
col_index
])
elif
auto_result
[
row_index
][
col_index
]
!=
None
and
(
auto_result
[
row_index
][
col_index
]
-
elem
>
0.00000001
):
check_status
=
False
else
:
pass
if
not
check_status
:
tdLog
.
notice
(
"acos function value has not as expected , sql is
\"
%s
\"
"
%
pow_query
)
sys
.
exit
(
1
)
else
:
tdLog
.
info
(
"acos value check pass , it work as expected ,sql is
\"
%s
\"
"
%
pow_query
)
def
test_errors
(
self
,
dbname
=
"db"
):
def
test_errors
(
self
,
dbname
=
"db"
):
error_sql_lists
=
[
error_sql_lists
=
[
...
@@ -414,19 +405,19 @@ class TDTestCase:
...
@@ -414,19 +405,19 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
1
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
5
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
0
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
self
.
check_result_auto_acos
(
f
"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from
{
dbname
}
.sub1_bound "
,
f
"select acos(abs(c1)), acos(abs(c2)) ,acos(abs(c3)), acos(abs(c4)), acos(abs(c5)) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto_acos
(
f
"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from
{
dbname
}
.sub1_bound "
,
f
"select acos(abs(c1)), acos(abs(c2)) ,acos(abs(c3)), acos(abs(c4)), acos(abs(c5)) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/arcsin.py
浏览文件 @
f46f941c
...
@@ -86,21 +86,13 @@ class TDTestCase:
...
@@ -86,21 +86,13 @@ class TDTestCase:
row_check
.
append
(
elem
)
row_check
.
append
(
elem
)
auto_result
.
append
(
row_check
)
auto_result
.
append
(
row_check
)
check_status
=
True
tdSql
.
query
(
pow_query
)
for
row_index
,
row
in
enumerate
(
pow_result
):
for
row_index
,
row
in
enumerate
(
pow_result
):
for
col_index
,
elem
in
enumerate
(
row
):
for
col_index
,
elem
in
enumerate
(
row
):
if
auto_result
[
row_index
][
col_index
]
==
None
and
not
(
auto_result
[
row_index
][
col_index
]
==
None
and
elem
==
None
):
tdSql
.
checkData
(
row_index
,
col_index
,
auto_result
[
row_index
][
col_index
])
check_status
=
False
elif
auto_result
[
row_index
][
col_index
]
!=
None
and
(
auto_result
[
row_index
][
col_index
]
-
elem
>
0.00000001
):
check_status
=
False
else
:
pass
if
not
check_status
:
tdLog
.
notice
(
"asin function value has not as expected , sql is
\"
%s
\"
"
%
pow_query
)
sys
.
exit
(
1
)
else
:
tdLog
.
info
(
"asin value check pass , it work as expected ,sql is
\"
%s
\"
"
%
pow_query
)
def
test_errors
(
self
,
dbname
=
"db"
):
def
test_errors
(
self
,
dbname
=
"db"
):
error_sql_lists
=
[
error_sql_lists
=
[
...
@@ -414,19 +406,19 @@ class TDTestCase:
...
@@ -414,19 +406,19 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
1
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
5
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
0
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
self
.
check_result_auto_asin
(
f
"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from
{
dbname
}
.sub1_bound "
,
f
"select asin(abs(c1)), asin(abs(c2)) ,asin(abs(c3)), asin(abs(c4)), asin(abs(c5)) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto_asin
(
f
"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from
{
dbname
}
.sub1_bound "
,
f
"select asin(abs(c1)), asin(abs(c2)) ,asin(abs(c3)), asin(abs(c4)), asin(abs(c5)) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/arctan.py
浏览文件 @
f46f941c
...
@@ -84,22 +84,12 @@ class TDTestCase:
...
@@ -84,22 +84,12 @@ class TDTestCase:
row_check
.
append
(
elem
)
row_check
.
append
(
elem
)
auto_result
.
append
(
row_check
)
auto_result
.
append
(
row_check
)
check_status
=
True
tdSql
.
query
(
pow_query
)
for
row_index
,
row
in
enumerate
(
pow_result
):
for
row_index
,
row
in
enumerate
(
pow_result
):
for
col_index
,
elem
in
enumerate
(
row
):
for
col_index
,
elem
in
enumerate
(
row
):
if
auto_result
[
row_index
][
col_index
]
==
None
and
elem
:
tdSql
.
checkData
(
row_index
,
col_index
,
auto_result
[
row_index
][
col_index
])
check_status
=
False
elif
auto_result
[
row_index
][
col_index
]
!=
None
and
(
auto_result
[
row_index
][
col_index
]
-
elem
>
0.00000001
):
check_status
=
False
else
:
pass
if
not
check_status
:
tdLog
.
notice
(
"atan function value has not as expected , sql is
\"
%s
\"
"
%
pow_query
)
sys
.
exit
(
1
)
else
:
tdLog
.
info
(
"atan value check pass , it work as expected ,sql is
\"
%s
\"
"
%
pow_query
)
def
test_errors
(
self
,
dbname
=
"db"
):
def
test_errors
(
self
,
dbname
=
"db"
):
error_sql_lists
=
[
error_sql_lists
=
[
f
"select atan from
{
dbname
}
.t1"
,
f
"select atan from
{
dbname
}
.t1"
,
...
@@ -412,19 +402,19 @@ class TDTestCase:
...
@@ -412,19 +402,19 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
1
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
5
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
0
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
self
.
check_result_auto_atan
(
f
"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from
{
dbname
}
.sub1_bound "
,
f
"select atan(abs(c1)), atan(abs(c2)) ,atan(abs(c3)), atan(abs(c4)), atan(abs(c5)) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto_atan
(
f
"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from
{
dbname
}
.sub1_bound "
,
f
"select atan(abs(c1)), atan(abs(c2)) ,atan(abs(c3)), atan(abs(c4)), atan(abs(c5)) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/avg.py
浏览文件 @
f46f941c
...
@@ -114,16 +114,10 @@ class TDTestCase:
...
@@ -114,16 +114,10 @@ class TDTestCase:
avg_result
=
tdSql
.
getResult
(
origin_query
)
avg_result
=
tdSql
.
getResult
(
origin_query
)
origin_result
=
tdSql
.
getResult
(
check_query
)
origin_result
=
tdSql
.
getResult
(
check_query
)
check_status
=
True
tdSql
.
query
(
origin_query
)
for
row_index
,
row
in
enumerate
(
avg_result
):
for
row_index
,
row
in
enumerate
(
avg_result
):
for
col_index
,
elem
in
enumerate
(
row
):
for
col_index
,
elem
in
enumerate
(
row
):
if
avg_result
[
row_index
][
col_index
]
!=
origin_result
[
row_index
][
col_index
]:
tdSql
.
checkData
(
row_index
,
col_index
,
origin_result
[
row_index
][
col_index
])
check_status
=
False
if
not
check_status
:
tdLog
.
notice
(
"avg function value has not as expected , sql is
\"
%s
\"
"
%
origin_query
)
sys
.
exit
(
1
)
else
:
tdLog
.
info
(
"avg value check pass , it work as expected ,sql is
\"
%s
\"
"
%
check_query
)
def
test_errors
(
self
,
dbname
=
"db"
):
def
test_errors
(
self
,
dbname
=
"db"
):
error_sql_lists
=
[
error_sql_lists
=
[
...
@@ -378,33 +372,33 @@ class TDTestCase:
...
@@ -378,33 +372,33 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
1
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
5
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483645, 9223372036854775805, 32765, 125, 3.40E+37, 1.7e+307, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, 2147483645, 9223372036854775805, 32765, 125, 3.40E+37, 1.7e+307, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483644, 9223372036854775804, 32764, 124, 3.40E+37, 1.7e+307, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+10s
, 2147483644, 9223372036854775804, 32764, 124, 3.40E+37, 1.7e+307, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+15s
, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+20s
, 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+
1
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+
5
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
#self.check_avg(f"select avg(c1), avg(c2), avg(c3) , avg(c4), avg(c5) ,avg(c6) from {dbname}.sub1_bound " , f" select sum(c1)/count(c1), sum(c2)/count(c2) ,sum(c3)/count(c3), sum(c4)/count(c4), sum(c5)/count(c5) ,sum(c6)/count(c6) from {dbname}.sub1_bound ")
#self.check_avg(f"select avg(c1), avg(c2), avg(c3) , avg(c4), avg(c5) ,avg(c6) from {dbname}.sub1_bound " , f" select sum(c1)/count(c1), sum(c2)/count(c2) ,sum(c3)/count(c3), sum(c4)/count(c4), sum(c5)/count(c5) ,sum(c6)/count(c6) from {dbname}.sub1_bound ")
...
...
tests/system-test/2-query/ceil.py
浏览文件 @
f46f941c
...
@@ -85,16 +85,11 @@ class TDTestCase:
...
@@ -85,16 +85,11 @@ class TDTestCase:
row_check
.
append
(
elem
)
row_check
.
append
(
elem
)
auto_result
.
append
(
row_check
)
auto_result
.
append
(
row_check
)
check_status
=
True
tdSql
.
query
(
ceil_query
)
for
row_index
,
row
in
enumerate
(
ceil_result
):
for
row_index
,
row
in
enumerate
(
ceil_result
):
for
col_index
,
elem
in
enumerate
(
row
):
for
col_index
,
elem
in
enumerate
(
row
):
if
auto_result
[
row_index
][
col_index
]
!=
elem
:
tdSql
.
checkData
(
row_index
,
col_index
,
auto_result
[
row_index
][
col_index
])
check_status
=
False
if
not
check_status
:
tdLog
.
notice
(
"ceil function value has not as expected , sql is
\"
%s
\"
"
%
ceil_query
)
sys
.
exit
(
1
)
else
:
tdLog
.
info
(
"ceil value check pass , it work as expected ,sql is
\"
%s
\"
"
%
ceil_query
)
def
test_errors
(
self
,
dbname
=
"db"
):
def
test_errors
(
self
,
dbname
=
"db"
):
error_sql_lists
=
[
error_sql_lists
=
[
...
@@ -377,10 +372,10 @@ class TDTestCase:
...
@@ -377,10 +372,10 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
-5s
, 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
...
@@ -388,15 +383,15 @@ class TDTestCase:
...
@@ -388,15 +383,15 @@ class TDTestCase:
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+10s
, -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
5
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
self
.
check_result_auto
(
f
"select c1, c2, c3 , c4, c5 ,c6 from
{
dbname
}
.sub1_bound "
,
f
"select ceil(c1), ceil(c2) ,ceil(c3), ceil(c4), ceil(c5) ,ceil(c6) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto
(
f
"select c1, c2, c3 , c4, c5 ,c6 from
{
dbname
}
.sub1_bound "
,
f
"select ceil(c1), ceil(c2) ,ceil(c3), ceil(c4), ceil(c5) ,ceil(c6) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto
(
f
"select c1, c2, c3 , c3, c2 ,c1 from
{
dbname
}
.sub1_bound "
,
f
"select ceil(c1), ceil(c2) ,ceil(c3), ceil(c3), ceil(c2) ,ceil(c1) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto
(
f
"select c1, c2, c3 , c3, c2 ,c1 from
{
dbname
}
.sub1_bound "
,
f
"select ceil(c1), ceil(c2) ,ceil(c3), ceil(c3), ceil(c2) ,ceil(c1) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/cos.py
浏览文件 @
f46f941c
...
@@ -84,26 +84,10 @@ class TDTestCase:
...
@@ -84,26 +84,10 @@ class TDTestCase:
row_check
.
append
(
elem
)
row_check
.
append
(
elem
)
auto_result
.
append
(
row_check
)
auto_result
.
append
(
row_check
)
check_status
=
True
tdSql
.
query
(
pow_query
)
print
(
"========"
,
pow_query
,
origin_query
)
for
row_index
,
row
in
enumerate
(
pow_result
):
for
row_index
,
row
in
enumerate
(
pow_result
):
for
col_index
,
elem
in
enumerate
(
row
):
for
col_index
,
elem
in
enumerate
(
row
):
if
auto_result
[
row_index
][
col_index
]
==
None
and
elem
:
tdSql
.
checkData
(
row_index
,
col_index
,
auto_result
[
row_index
][
col_index
])
check_status
=
False
elif
auto_result
[
row_index
][
col_index
]
!=
None
and
((
auto_result
[
row_index
][
col_index
]
!=
elem
)
and
(
str
(
auto_result
[
row_index
][
col_index
])[:
6
]
!=
str
(
elem
)[:
6
]
)):
# elif auto_result[row_index][col_index] != None and (abs(auto_result[row_index][col_index] - elem) > 0.000001):
print
(
"====="
)
print
(
row_index
,
col_index
)
print
(
auto_result
[
row_index
][
col_index
],
elem
,
origin_result
[
row_index
][
col_index
])
check_status
=
False
else
:
pass
if
not
check_status
:
tdLog
.
notice
(
"cos function value has not as expected , sql is
\"
%s
\"
"
%
pow_query
)
sys
.
exit
(
1
)
else
:
tdLog
.
info
(
"cos value check pass , it work as expected ,sql is
\"
%s
\"
"
%
pow_query
)
def
test_errors
(
self
,
dbname
=
"db"
):
def
test_errors
(
self
,
dbname
=
"db"
):
error_sql_lists
=
[
error_sql_lists
=
[
...
@@ -413,16 +397,16 @@ class TDTestCase:
...
@@ -413,16 +397,16 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
1
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
5
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
# self.check_result_auto_cos( f"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from {dbname}.sub1_bound ", f"select cos(abs(c1)), cos(abs(c2)) ,cos(abs(c3)), cos(abs(c4)), cos(abs(c5)) from {dbname}.sub1_bound")
# self.check_result_auto_cos( f"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from {dbname}.sub1_bound ", f"select cos(abs(c1)), cos(abs(c2)) ,cos(abs(c3)), cos(abs(c4)), cos(abs(c5)) from {dbname}.sub1_bound")
...
...
tests/system-test/2-query/floor.py
浏览文件 @
f46f941c
...
@@ -85,16 +85,11 @@ class TDTestCase:
...
@@ -85,16 +85,11 @@ class TDTestCase:
row_check
.
append
(
elem
)
row_check
.
append
(
elem
)
auto_result
.
append
(
row_check
)
auto_result
.
append
(
row_check
)
check_status
=
True
tdSql
.
query
(
floor_query
)
for
row_index
,
row
in
enumerate
(
floor_result
):
for
row_index
,
row
in
enumerate
(
floor_result
):
for
col_index
,
elem
in
enumerate
(
row
):
for
col_index
,
elem
in
enumerate
(
row
):
if
auto_result
[
row_index
][
col_index
]
!=
elem
:
tdSql
.
checkData
(
row_index
,
col_index
,
auto_result
[
row_index
][
col_index
])
check_status
=
False
if
not
check_status
:
tdLog
.
notice
(
"floor function value has not as expected , sql is
\"
%s
\"
"
%
floor_query
)
sys
.
exit
(
1
)
else
:
tdLog
.
info
(
"floor value check pass , it work as expected ,sql is
\"
%s
\"
"
%
floor_query
)
def
test_errors
(
self
,
dbname
=
DBNAME
):
def
test_errors
(
self
,
dbname
=
DBNAME
):
error_sql_lists
=
[
error_sql_lists
=
[
...
@@ -388,10 +383,10 @@ class TDTestCase:
...
@@ -388,10 +383,10 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
-5s
, 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
...
@@ -399,15 +394,15 @@ class TDTestCase:
...
@@ -399,15 +394,15 @@ class TDTestCase:
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+10s
, -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
5
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
self
.
check_result_auto
(
f
"select c1, c2, c3 , c4, c5 ,c6 from
{
dbname
}
.sub1_bound "
,
f
"select floor(c1), floor(c2) ,floor(c3), floor(c4), floor(c5) ,floor(c6) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto
(
f
"select c1, c2, c3 , c4, c5 ,c6 from
{
dbname
}
.sub1_bound "
,
f
"select floor(c1), floor(c2) ,floor(c3), floor(c4), floor(c5) ,floor(c6) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto
(
f
"select c1, c2, c3 , c3, c2 ,c1 from
{
dbname
}
.sub1_bound "
,
f
"select floor(c1), floor(c2) ,floor(c3), floor(c3), floor(c2) ,floor(c1) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto
(
f
"select c1, c2, c3 , c3, c2 ,c1 from
{
dbname
}
.sub1_bound "
,
f
"select floor(c1), floor(c2) ,floor(c3), floor(c3), floor(c2) ,floor(c1) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/function_stateduration.py
浏览文件 @
f46f941c
...
@@ -364,10 +364,10 @@ class TDTestCase:
...
@@ -364,10 +364,10 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
-5s
, 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
...
@@ -375,15 +375,15 @@ class TDTestCase:
...
@@ -375,15 +375,15 @@ class TDTestCase:
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+10s
, -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
5
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
query
(
f
"select stateduration(c1,'GT',1,1s) from
{
dbname
}
.sub1_bound"
)
tdSql
.
query
(
f
"select stateduration(c1,'GT',1,1s) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/interp.py
浏览文件 @
f46f941c
...
@@ -18,6 +18,7 @@ class TDTestCase:
...
@@ -18,6 +18,7 @@ class TDTestCase:
def
run
(
self
):
def
run
(
self
):
dbname
=
"db"
dbname
=
"db"
tbname
=
"tb"
tbname
=
"tb"
tbname1
=
"tb1"
stbname
=
"stb"
stbname
=
"stb"
ctbname1
=
"ctb1"
ctbname1
=
"ctb1"
ctbname2
=
"ctb2"
ctbname2
=
"ctb2"
...
@@ -38,8 +39,6 @@ class TDTestCase:
...
@@ -38,8 +39,6 @@ class TDTestCase:
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname
}
values ('2020-02-01 00:00:10', 10, 10, 10, 10, 10.0, 10.0, true, 'varchar', 'nchar')"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname
}
values ('2020-02-01 00:00:10', 10, 10, 10, 10, 10.0, 10.0, true, 'varchar', 'nchar')"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname
}
values ('2020-02-01 00:00:15', 15, 15, 15, 15, 15.0, 15.0, true, 'varchar', 'nchar')"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname
}
values ('2020-02-01 00:00:15', 15, 15, 15, 15, 15.0, 15.0, true, 'varchar', 'nchar')"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname
}
(ts) values (now)"
)
tdLog
.
printNoPrefix
(
"==========step3:fill null"
)
tdLog
.
printNoPrefix
(
"==========step3:fill null"
)
## {. . .}
## {. . .}
...
@@ -247,7 +246,7 @@ class TDTestCase:
...
@@ -247,7 +246,7 @@ class TDTestCase:
## {. . .}
## {. . .}
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(next)"
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(next)"
)
tdSql
.
checkRows
(
1
3
)
tdSql
.
checkRows
(
1
2
)
tdSql
.
checkData
(
0
,
0
,
5
)
tdSql
.
checkData
(
0
,
0
,
5
)
tdSql
.
checkData
(
1
,
0
,
5
)
tdSql
.
checkData
(
1
,
0
,
5
)
tdSql
.
checkData
(
2
,
0
,
10
)
tdSql
.
checkData
(
2
,
0
,
10
)
...
@@ -297,21 +296,21 @@ class TDTestCase:
...
@@ -297,21 +296,21 @@ class TDTestCase:
## ..{.}
## ..{.}
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:13', '2020-02-01 00:00:17') every(1s) fill(next)"
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:13', '2020-02-01 00:00:17') every(1s) fill(next)"
)
tdSql
.
checkRows
(
5
)
tdSql
.
checkRows
(
3
)
tdSql
.
checkData
(
0
,
0
,
15
)
tdSql
.
checkData
(
0
,
0
,
15
)
tdSql
.
checkData
(
1
,
0
,
15
)
tdSql
.
checkData
(
1
,
0
,
15
)
tdSql
.
checkData
(
2
,
0
,
15
)
tdSql
.
checkData
(
2
,
0
,
15
)
## ... {}
## ... {}
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:16', '2020-02-01 00:00:19') every(1s) fill(next)"
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:16', '2020-02-01 00:00:19') every(1s) fill(next)"
)
tdSql
.
checkRows
(
4
)
tdSql
.
checkRows
(
0
)
tdLog
.
printNoPrefix
(
"==========step7:fill linear"
)
tdLog
.
printNoPrefix
(
"==========step7:fill linear"
)
## {. . .}
## {. . .}
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)"
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
1
2
)
tdSql
.
checkRows
(
1
1
)
tdSql
.
checkData
(
0
,
0
,
5
)
tdSql
.
checkData
(
0
,
0
,
5
)
tdSql
.
checkData
(
1
,
0
,
6
)
tdSql
.
checkData
(
1
,
0
,
6
)
tdSql
.
checkData
(
2
,
0
,
7
)
tdSql
.
checkData
(
2
,
0
,
7
)
...
@@ -354,7 +353,7 @@ class TDTestCase:
...
@@ -354,7 +353,7 @@ class TDTestCase:
## ..{.}
## ..{.}
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:13', '2020-02-01 00:00:17') every(1s) fill(linear)"
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:13', '2020-02-01 00:00:17') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
5
)
tdSql
.
checkRows
(
3
)
tdSql
.
checkData
(
0
,
0
,
13
)
tdSql
.
checkData
(
0
,
0
,
13
)
tdSql
.
checkData
(
1
,
0
,
14
)
tdSql
.
checkData
(
1
,
0
,
14
)
tdSql
.
checkData
(
2
,
0
,
15
)
tdSql
.
checkData
(
2
,
0
,
15
)
...
@@ -512,7 +511,7 @@ class TDTestCase:
...
@@ -512,7 +511,7 @@ class TDTestCase:
tdSql
.
checkData
(
8
,
0
,
'2020-02-01 00:00:12.000'
)
tdSql
.
checkData
(
8
,
0
,
'2020-02-01 00:00:12.000'
)
tdSql
.
query
(
f
"select _irowts,interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(next)"
)
tdSql
.
query
(
f
"select _irowts,interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(next)"
)
tdSql
.
checkRows
(
1
3
)
tdSql
.
checkRows
(
1
2
)
tdSql
.
checkCols
(
2
)
tdSql
.
checkCols
(
2
)
tdSql
.
checkData
(
0
,
0
,
'2020-02-01 00:00:04.000'
)
tdSql
.
checkData
(
0
,
0
,
'2020-02-01 00:00:04.000'
)
...
@@ -555,7 +554,7 @@ class TDTestCase:
...
@@ -555,7 +554,7 @@ class TDTestCase:
tdSql
.
checkData
(
8
,
0
,
'2020-02-01 00:00:12.000'
)
tdSql
.
checkData
(
8
,
0
,
'2020-02-01 00:00:12.000'
)
tdSql
.
query
(
f
"select _irowts,interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)"
)
tdSql
.
query
(
f
"select _irowts,interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
1
2
)
tdSql
.
checkRows
(
1
1
)
tdSql
.
checkCols
(
2
)
tdSql
.
checkCols
(
2
)
tdSql
.
checkData
(
0
,
0
,
'2020-02-01 00:00:05.000'
)
tdSql
.
checkData
(
0
,
0
,
'2020-02-01 00:00:05.000'
)
...
@@ -583,7 +582,7 @@ class TDTestCase:
...
@@ -583,7 +582,7 @@ class TDTestCase:
# multiple _irowts
# multiple _irowts
tdSql
.
query
(
f
"select interp(c0),_irowts from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)"
)
tdSql
.
query
(
f
"select interp(c0),_irowts from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
1
2
)
tdSql
.
checkRows
(
1
1
)
tdSql
.
checkCols
(
2
)
tdSql
.
checkCols
(
2
)
tdSql
.
checkData
(
0
,
1
,
'2020-02-01 00:00:05.000'
)
tdSql
.
checkData
(
0
,
1
,
'2020-02-01 00:00:05.000'
)
...
@@ -599,7 +598,7 @@ class TDTestCase:
...
@@ -599,7 +598,7 @@ class TDTestCase:
tdSql
.
checkData
(
10
,
1
,
'2020-02-01 00:00:15.000'
)
tdSql
.
checkData
(
10
,
1
,
'2020-02-01 00:00:15.000'
)
tdSql
.
query
(
f
"select _irowts, interp(c0), interp(c0), _irowts from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)"
)
tdSql
.
query
(
f
"select _irowts, interp(c0), interp(c0), _irowts from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
1
2
)
tdSql
.
checkRows
(
1
1
)
tdSql
.
checkCols
(
4
)
tdSql
.
checkCols
(
4
)
cols
=
(
0
,
3
)
cols
=
(
0
,
3
)
...
@@ -837,7 +836,944 @@ class TDTestCase:
...
@@ -837,7 +836,944 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
0
,
15
)
tdSql
.
checkData
(
0
,
0
,
15
)
tdSql
.
checkData
(
1
,
0
,
15
)
tdSql
.
checkData
(
1
,
0
,
15
)
tdLog
.
printNoPrefix
(
"==========step10:test multi-interp cases"
)
# test fill linear
## | {. | | .} |
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-01 00:00:05', '2020-02-11 00:00:05') every(1d) fill(linear)"
)
tdSql
.
checkRows
(
11
)
tdSql
.
checkData
(
0
,
0
,
5
)
tdSql
.
checkData
(
1
,
0
,
6
)
tdSql
.
checkData
(
2
,
0
,
7
)
tdSql
.
checkData
(
3
,
0
,
8
)
tdSql
.
checkData
(
4
,
0
,
9
)
tdSql
.
checkData
(
5
,
0
,
10
)
tdSql
.
checkData
(
6
,
0
,
11
)
tdSql
.
checkData
(
7
,
0
,
12
)
tdSql
.
checkData
(
8
,
0
,
13
)
tdSql
.
checkData
(
9
,
0
,
14
)
tdSql
.
checkData
(
10
,
0
,
15
)
## | . | {} | . |
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-03 00:00:05', '2020-02-07 00:00:05') every(1d) fill(linear)"
)
tdSql
.
checkRows
(
5
)
tdSql
.
checkData
(
0
,
0
,
7
)
tdSql
.
checkData
(
1
,
0
,
8
)
tdSql
.
checkData
(
2
,
0
,
9
)
tdSql
.
checkData
(
3
,
0
,
10
)
tdSql
.
checkData
(
4
,
0
,
11
)
## | {. | } | . |
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-01-31 00:00:05', '2020-02-05 00:00:05') every(1d) fill(linear)"
)
tdSql
.
checkRows
(
5
)
tdSql
.
checkData
(
0
,
0
,
5
)
tdSql
.
checkData
(
1
,
0
,
6
)
tdSql
.
checkData
(
2
,
0
,
7
)
tdSql
.
checkData
(
3
,
0
,
8
)
tdSql
.
checkData
(
4
,
0
,
9
)
## | . | { | .} |
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-10 00:00:05', '2020-02-15 00:00:05') every(1d) fill(linear)"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkData
(
0
,
0
,
14
)
tdSql
.
checkData
(
1
,
0
,
15
)
tdLog
.
printNoPrefix
(
"==========step10:test interp with null data"
)
tdSql
.
execute
(
f
'''create table if not exists
{
dbname
}
.
{
tbname1
}
(ts timestamp, c0 int, c1 int)
'''
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname1
}
values ('2020-02-02 00:00:00', 0, NULL)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname1
}
values ('2020-02-02 00:00:05', NULL, NULL)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname1
}
values ('2020-02-02 00:00:10', 10, 10)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname1
}
values ('2020-02-02 00:00:15', NULL, NULL)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname1
}
values ('2020-02-02 00:00:20', 20, NULL)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname1
}
values ('2020-02-02 00:00:25', NULL, NULL)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname1
}
values ('2020-02-02 00:00:30', 30, 30)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname1
}
values ('2020-02-02 00:00:35', 35, NULL)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname1
}
values ('2020-02-02 00:00:40', 40, 40)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname1
}
values ('2020-02-02 00:00:45', NULL, 45)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname1
}
values ('2020-02-02 00:00:50', 50, NULL)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname1
}
values ('2020-02-02 00:00:55', NULL, NULL)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
{
tbname1
}
values ('2020-02-02 00:01:00', 55, 60)"
)
# test fill linear
# check c0
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-01 23:59:59', '2020-02-02 00:00:00') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
0
,
0
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-01 23:59:59', '2020-02-02 00:00:03') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
4
)
tdSql
.
checkData
(
0
,
0
,
0
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-01 23:59:59', '2020-02-02 00:00:05') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
6
)
tdSql
.
checkData
(
0
,
0
,
0
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-01 23:59:59', '2020-02-02 00:00:08') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
9
)
tdSql
.
checkData
(
0
,
0
,
0
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
checkData
(
7
,
0
,
None
)
tdSql
.
checkData
(
8
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:01', '2020-02-02 00:00:03') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
3
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:03', '2020-02-02 00:00:08') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
6
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:05', '2020-02-02 00:00:10') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
6
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
10
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:05', '2020-02-02 00:00:15') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
11
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
10
)
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
checkData
(
7
,
0
,
None
)
tdSql
.
checkData
(
8
,
0
,
None
)
tdSql
.
checkData
(
9
,
0
,
None
)
tdSql
.
checkData
(
10
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:05', '2020-02-02 00:00:18') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
14
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
10
)
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
checkData
(
7
,
0
,
None
)
tdSql
.
checkData
(
8
,
0
,
None
)
tdSql
.
checkData
(
9
,
0
,
None
)
tdSql
.
checkData
(
10
,
0
,
None
)
tdSql
.
checkData
(
11
,
0
,
None
)
tdSql
.
checkData
(
12
,
0
,
None
)
tdSql
.
checkData
(
13
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:05', '2020-02-02 00:00:20') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
16
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
10
)
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
checkData
(
7
,
0
,
None
)
tdSql
.
checkData
(
8
,
0
,
None
)
tdSql
.
checkData
(
9
,
0
,
None
)
tdSql
.
checkData
(
10
,
0
,
None
)
tdSql
.
checkData
(
11
,
0
,
None
)
tdSql
.
checkData
(
12
,
0
,
None
)
tdSql
.
checkData
(
13
,
0
,
None
)
tdSql
.
checkData
(
14
,
0
,
None
)
tdSql
.
checkData
(
15
,
0
,
20
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:09', '2020-02-02 00:00:11') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
3
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
10
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:10', '2020-02-02 00:00:15') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
6
)
tdSql
.
checkData
(
0
,
0
,
10
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:12', '2020-02-02 00:00:13') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:12', '2020-02-02 00:00:15') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
4
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:12', '2020-02-02 00:00:18') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
7
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:30', '2020-02-02 00:00:40') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
11
)
tdSql
.
checkData
(
0
,
0
,
30
)
tdSql
.
checkData
(
1
,
0
,
31
)
tdSql
.
checkData
(
2
,
0
,
32
)
tdSql
.
checkData
(
3
,
0
,
33
)
tdSql
.
checkData
(
4
,
0
,
34
)
tdSql
.
checkData
(
5
,
0
,
35
)
tdSql
.
checkData
(
6
,
0
,
36
)
tdSql
.
checkData
(
7
,
0
,
37
)
tdSql
.
checkData
(
8
,
0
,
38
)
tdSql
.
checkData
(
9
,
0
,
39
)
tdSql
.
checkData
(
10
,
0
,
40
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:25', '2020-02-02 00:00:45') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
21
)
tdSql
.
checkData
(
5
,
0
,
30
)
tdSql
.
checkData
(
6
,
0
,
31
)
tdSql
.
checkData
(
7
,
0
,
32
)
tdSql
.
checkData
(
8
,
0
,
33
)
tdSql
.
checkData
(
9
,
0
,
34
)
tdSql
.
checkData
(
10
,
0
,
35
)
tdSql
.
checkData
(
11
,
0
,
36
)
tdSql
.
checkData
(
12
,
0
,
37
)
tdSql
.
checkData
(
13
,
0
,
38
)
tdSql
.
checkData
(
14
,
0
,
39
)
tdSql
.
checkData
(
15
,
0
,
40
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:20', '2020-02-02 00:00:40') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
21
)
tdSql
.
checkData
(
0
,
0
,
20
)
tdSql
.
checkData
(
10
,
0
,
30
)
tdSql
.
checkData
(
11
,
0
,
31
)
tdSql
.
checkData
(
12
,
0
,
32
)
tdSql
.
checkData
(
13
,
0
,
33
)
tdSql
.
checkData
(
14
,
0
,
34
)
tdSql
.
checkData
(
15
,
0
,
35
)
tdSql
.
checkData
(
16
,
0
,
36
)
tdSql
.
checkData
(
17
,
0
,
37
)
tdSql
.
checkData
(
18
,
0
,
38
)
tdSql
.
checkData
(
19
,
0
,
39
)
tdSql
.
checkData
(
20
,
0
,
40
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:30', '2020-02-02 00:00:50') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
21
)
tdSql
.
checkData
(
0
,
0
,
30
)
tdSql
.
checkData
(
1
,
0
,
31
)
tdSql
.
checkData
(
2
,
0
,
32
)
tdSql
.
checkData
(
3
,
0
,
33
)
tdSql
.
checkData
(
4
,
0
,
34
)
tdSql
.
checkData
(
5
,
0
,
35
)
tdSql
.
checkData
(
6
,
0
,
36
)
tdSql
.
checkData
(
7
,
0
,
37
)
tdSql
.
checkData
(
8
,
0
,
38
)
tdSql
.
checkData
(
9
,
0
,
39
)
tdSql
.
checkData
(
10
,
0
,
40
)
tdSql
.
checkData
(
20
,
0
,
50
)
tdSql
.
query
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:20', '2020-02-02 00:00:50') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
31
)
tdSql
.
checkData
(
0
,
0
,
20
)
tdSql
.
checkData
(
10
,
0
,
30
)
tdSql
.
checkData
(
11
,
0
,
31
)
tdSql
.
checkData
(
12
,
0
,
32
)
tdSql
.
checkData
(
13
,
0
,
33
)
tdSql
.
checkData
(
14
,
0
,
34
)
tdSql
.
checkData
(
15
,
0
,
35
)
tdSql
.
checkData
(
16
,
0
,
36
)
tdSql
.
checkData
(
17
,
0
,
37
)
tdSql
.
checkData
(
18
,
0
,
38
)
tdSql
.
checkData
(
19
,
0
,
39
)
tdSql
.
checkData
(
20
,
0
,
40
)
tdSql
.
checkData
(
30
,
0
,
50
)
# check c1
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-01 23:59:59', '2020-02-02 00:00:05') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
6
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:00:05') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
6
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:00:08') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
9
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
checkData
(
7
,
0
,
None
)
tdSql
.
checkData
(
8
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:00:10') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
11
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
checkData
(
7
,
0
,
None
)
tdSql
.
checkData
(
8
,
0
,
None
)
tdSql
.
checkData
(
9
,
0
,
None
)
tdSql
.
checkData
(
10
,
0
,
10
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:00:15') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
16
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
checkData
(
7
,
0
,
None
)
tdSql
.
checkData
(
8
,
0
,
None
)
tdSql
.
checkData
(
9
,
0
,
None
)
tdSql
.
checkData
(
10
,
0
,
10
)
tdSql
.
checkData
(
11
,
0
,
None
)
tdSql
.
checkData
(
12
,
0
,
None
)
tdSql
.
checkData
(
13
,
0
,
None
)
tdSql
.
checkData
(
14
,
0
,
None
)
tdSql
.
checkData
(
15
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:00:20') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
21
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
checkData
(
7
,
0
,
None
)
tdSql
.
checkData
(
8
,
0
,
None
)
tdSql
.
checkData
(
9
,
0
,
None
)
tdSql
.
checkData
(
10
,
0
,
10
)
tdSql
.
checkData
(
11
,
0
,
None
)
tdSql
.
checkData
(
12
,
0
,
None
)
tdSql
.
checkData
(
13
,
0
,
None
)
tdSql
.
checkData
(
14
,
0
,
None
)
tdSql
.
checkData
(
15
,
0
,
None
)
tdSql
.
checkData
(
16
,
0
,
None
)
tdSql
.
checkData
(
17
,
0
,
None
)
tdSql
.
checkData
(
18
,
0
,
None
)
tdSql
.
checkData
(
19
,
0
,
None
)
tdSql
.
checkData
(
20
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:00:25') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
26
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
checkData
(
7
,
0
,
None
)
tdSql
.
checkData
(
8
,
0
,
None
)
tdSql
.
checkData
(
9
,
0
,
None
)
tdSql
.
checkData
(
10
,
0
,
10
)
tdSql
.
checkData
(
11
,
0
,
None
)
tdSql
.
checkData
(
12
,
0
,
None
)
tdSql
.
checkData
(
13
,
0
,
None
)
tdSql
.
checkData
(
14
,
0
,
None
)
tdSql
.
checkData
(
15
,
0
,
None
)
tdSql
.
checkData
(
16
,
0
,
None
)
tdSql
.
checkData
(
17
,
0
,
None
)
tdSql
.
checkData
(
18
,
0
,
None
)
tdSql
.
checkData
(
19
,
0
,
None
)
tdSql
.
checkData
(
20
,
0
,
None
)
tdSql
.
checkData
(
21
,
0
,
None
)
tdSql
.
checkData
(
22
,
0
,
None
)
tdSql
.
checkData
(
23
,
0
,
None
)
tdSql
.
checkData
(
24
,
0
,
None
)
tdSql
.
checkData
(
25
,
0
,
None
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:00:30') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
31
)
tdSql
.
checkData
(
0
,
0
,
None
)
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
2
,
0
,
None
)
tdSql
.
checkData
(
3
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
checkData
(
7
,
0
,
None
)
tdSql
.
checkData
(
8
,
0
,
None
)
tdSql
.
checkData
(
9
,
0
,
None
)
tdSql
.
checkData
(
10
,
0
,
10
)
tdSql
.
checkData
(
11
,
0
,
None
)
tdSql
.
checkData
(
12
,
0
,
None
)
tdSql
.
checkData
(
13
,
0
,
None
)
tdSql
.
checkData
(
14
,
0
,
None
)
tdSql
.
checkData
(
15
,
0
,
None
)
tdSql
.
checkData
(
16
,
0
,
None
)
tdSql
.
checkData
(
17
,
0
,
None
)
tdSql
.
checkData
(
18
,
0
,
None
)
tdSql
.
checkData
(
19
,
0
,
None
)
tdSql
.
checkData
(
20
,
0
,
None
)
tdSql
.
checkData
(
21
,
0
,
None
)
tdSql
.
checkData
(
22
,
0
,
None
)
tdSql
.
checkData
(
23
,
0
,
None
)
tdSql
.
checkData
(
24
,
0
,
None
)
tdSql
.
checkData
(
25
,
0
,
None
)
tdSql
.
checkData
(
26
,
0
,
None
)
tdSql
.
checkData
(
27
,
0
,
None
)
tdSql
.
checkData
(
28
,
0
,
None
)
tdSql
.
checkData
(
29
,
0
,
None
)
tdSql
.
checkData
(
30
,
0
,
30
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:00:35') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
36
)
tdSql
.
checkData
(
10
,
0
,
10
)
tdSql
.
checkData
(
30
,
0
,
30
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:00:40') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
41
)
tdSql
.
checkData
(
10
,
0
,
10
)
tdSql
.
checkData
(
30
,
0
,
30
)
tdSql
.
checkData
(
40
,
0
,
40
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:00:45') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
46
)
tdSql
.
checkData
(
10
,
0
,
10
)
tdSql
.
checkData
(
30
,
0
,
30
)
tdSql
.
checkData
(
40
,
0
,
40
)
tdSql
.
checkData
(
41
,
0
,
41
)
tdSql
.
checkData
(
42
,
0
,
42
)
tdSql
.
checkData
(
43
,
0
,
43
)
tdSql
.
checkData
(
44
,
0
,
44
)
tdSql
.
checkData
(
45
,
0
,
45
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:00:50') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
51
)
tdSql
.
checkData
(
10
,
0
,
10
)
tdSql
.
checkData
(
30
,
0
,
30
)
tdSql
.
checkData
(
40
,
0
,
40
)
tdSql
.
checkData
(
41
,
0
,
41
)
tdSql
.
checkData
(
42
,
0
,
42
)
tdSql
.
checkData
(
43
,
0
,
43
)
tdSql
.
checkData
(
44
,
0
,
44
)
tdSql
.
checkData
(
45
,
0
,
45
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:00:55') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
56
)
tdSql
.
checkData
(
10
,
0
,
10
)
tdSql
.
checkData
(
30
,
0
,
30
)
tdSql
.
checkData
(
40
,
0
,
40
)
tdSql
.
checkData
(
41
,
0
,
41
)
tdSql
.
checkData
(
42
,
0
,
42
)
tdSql
.
checkData
(
43
,
0
,
43
)
tdSql
.
checkData
(
44
,
0
,
44
)
tdSql
.
checkData
(
45
,
0
,
45
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:01:00') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
61
)
tdSql
.
checkData
(
10
,
0
,
10
)
tdSql
.
checkData
(
30
,
0
,
30
)
tdSql
.
checkData
(
40
,
0
,
40
)
tdSql
.
checkData
(
41
,
0
,
41
)
tdSql
.
checkData
(
42
,
0
,
42
)
tdSql
.
checkData
(
43
,
0
,
43
)
tdSql
.
checkData
(
44
,
0
,
44
)
tdSql
.
checkData
(
45
,
0
,
45
)
tdSql
.
checkData
(
60
,
0
,
60
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:40', '2020-02-02 00:00:45') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
6
)
tdSql
.
checkData
(
0
,
0
,
40
)
tdSql
.
checkData
(
1
,
0
,
41
)
tdSql
.
checkData
(
2
,
0
,
42
)
tdSql
.
checkData
(
3
,
0
,
43
)
tdSql
.
checkData
(
4
,
0
,
44
)
tdSql
.
checkData
(
5
,
0
,
45
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:35', '2020-02-02 00:00:50') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
16
)
tdSql
.
checkData
(
5
,
0
,
40
)
tdSql
.
checkData
(
6
,
0
,
41
)
tdSql
.
checkData
(
7
,
0
,
42
)
tdSql
.
checkData
(
8
,
0
,
43
)
tdSql
.
checkData
(
9
,
0
,
44
)
tdSql
.
checkData
(
10
,
0
,
45
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:35', '2020-02-02 00:00:55') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
21
)
tdSql
.
checkData
(
5
,
0
,
40
)
tdSql
.
checkData
(
6
,
0
,
41
)
tdSql
.
checkData
(
7
,
0
,
42
)
tdSql
.
checkData
(
8
,
0
,
43
)
tdSql
.
checkData
(
9
,
0
,
44
)
tdSql
.
checkData
(
10
,
0
,
45
)
tdSql
.
query
(
f
"select interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:30', '2020-02-02 00:01:00') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
31
)
tdSql
.
checkData
(
0
,
0
,
30
)
tdSql
.
checkData
(
10
,
0
,
40
)
tdSql
.
checkData
(
11
,
0
,
41
)
tdSql
.
checkData
(
12
,
0
,
42
)
tdSql
.
checkData
(
13
,
0
,
43
)
tdSql
.
checkData
(
14
,
0
,
44
)
tdSql
.
checkData
(
15
,
0
,
45
)
tdSql
.
checkData
(
30
,
0
,
60
)
# two interps
tdSql
.
query
(
f
"select interp(c0),interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:01:00') every(1s) fill(linear)"
)
tdSql
.
checkRows
(
61
)
tdSql
.
checkCols
(
2
)
tdSql
.
checkData
(
0
,
0
,
0
)
#
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
#
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
checkData
(
9
,
0
,
None
)
tdSql
.
checkData
(
10
,
0
,
10
)
#
tdSql
.
checkData
(
11
,
0
,
None
)
tdSql
.
checkData
(
14
,
0
,
None
)
tdSql
.
checkData
(
15
,
0
,
None
)
#
tdSql
.
checkData
(
16
,
0
,
None
)
tdSql
.
checkData
(
19
,
0
,
None
)
tdSql
.
checkData
(
20
,
0
,
20
)
#
tdSql
.
checkData
(
21
,
0
,
None
)
tdSql
.
checkData
(
24
,
0
,
None
)
tdSql
.
checkData
(
25
,
0
,
None
)
#
tdSql
.
checkData
(
26
,
0
,
None
)
tdSql
.
checkData
(
29
,
0
,
None
)
tdSql
.
checkData
(
30
,
0
,
30
)
#
tdSql
.
checkData
(
31
,
0
,
31
)
tdSql
.
checkData
(
32
,
0
,
32
)
tdSql
.
checkData
(
33
,
0
,
33
)
tdSql
.
checkData
(
34
,
0
,
34
)
tdSql
.
checkData
(
35
,
0
,
35
)
#
tdSql
.
checkData
(
36
,
0
,
36
)
tdSql
.
checkData
(
37
,
0
,
37
)
tdSql
.
checkData
(
38
,
0
,
38
)
tdSql
.
checkData
(
39
,
0
,
39
)
tdSql
.
checkData
(
40
,
0
,
40
)
#
tdSql
.
checkData
(
41
,
0
,
None
)
tdSql
.
checkData
(
44
,
0
,
None
)
tdSql
.
checkData
(
45
,
0
,
None
)
#
tdSql
.
checkData
(
46
,
0
,
None
)
tdSql
.
checkData
(
49
,
0
,
None
)
tdSql
.
checkData
(
50
,
0
,
50
)
#
tdSql
.
checkData
(
51
,
0
,
None
)
tdSql
.
checkData
(
54
,
0
,
None
)
tdSql
.
checkData
(
55
,
0
,
None
)
#
tdSql
.
checkData
(
56
,
0
,
None
)
tdSql
.
checkData
(
59
,
0
,
None
)
tdSql
.
checkData
(
60
,
0
,
55
)
#
tdSql
.
checkData
(
0
,
1
,
None
)
#
tdSql
.
checkData
(
1
,
1
,
None
)
tdSql
.
checkData
(
4
,
1
,
None
)
tdSql
.
checkData
(
5
,
1
,
None
)
#
tdSql
.
checkData
(
6
,
1
,
None
)
tdSql
.
checkData
(
9
,
1
,
None
)
tdSql
.
checkData
(
10
,
1
,
10
)
#
tdSql
.
checkData
(
11
,
1
,
None
)
tdSql
.
checkData
(
14
,
1
,
None
)
tdSql
.
checkData
(
15
,
1
,
None
)
#
tdSql
.
checkData
(
16
,
1
,
None
)
tdSql
.
checkData
(
19
,
1
,
None
)
tdSql
.
checkData
(
20
,
1
,
None
)
#
tdSql
.
checkData
(
21
,
1
,
None
)
tdSql
.
checkData
(
24
,
1
,
None
)
tdSql
.
checkData
(
25
,
1
,
None
)
#
tdSql
.
checkData
(
26
,
1
,
None
)
tdSql
.
checkData
(
29
,
1
,
None
)
tdSql
.
checkData
(
30
,
1
,
30
)
#
tdSql
.
checkData
(
31
,
1
,
None
)
tdSql
.
checkData
(
34
,
1
,
None
)
tdSql
.
checkData
(
35
,
1
,
None
)
#
tdSql
.
checkData
(
36
,
1
,
None
)
tdSql
.
checkData
(
39
,
1
,
None
)
tdSql
.
checkData
(
40
,
1
,
40
)
#
tdSql
.
checkData
(
41
,
1
,
41
)
tdSql
.
checkData
(
42
,
1
,
42
)
tdSql
.
checkData
(
43
,
1
,
43
)
tdSql
.
checkData
(
44
,
1
,
44
)
tdSql
.
checkData
(
45
,
1
,
45
)
#
tdSql
.
checkData
(
46
,
1
,
None
)
tdSql
.
checkData
(
49
,
1
,
None
)
tdSql
.
checkData
(
50
,
1
,
None
)
#
tdSql
.
checkData
(
51
,
1
,
None
)
tdSql
.
checkData
(
54
,
1
,
None
)
tdSql
.
checkData
(
55
,
1
,
None
)
#
tdSql
.
checkData
(
56
,
1
,
None
)
tdSql
.
checkData
(
59
,
1
,
None
)
tdSql
.
checkData
(
60
,
1
,
60
)
#
# test fill null
tdSql
.
query
(
f
"select interp(c0),interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:01:00') every(1s) fill(null)"
)
tdSql
.
checkRows
(
61
)
tdSql
.
checkCols
(
2
)
tdSql
.
checkData
(
0
,
0
,
0
)
#
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
#
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
checkData
(
9
,
0
,
None
)
tdSql
.
checkData
(
10
,
0
,
10
)
#
tdSql
.
checkData
(
11
,
0
,
None
)
tdSql
.
checkData
(
14
,
0
,
None
)
tdSql
.
checkData
(
15
,
0
,
None
)
#
tdSql
.
checkData
(
16
,
0
,
None
)
tdSql
.
checkData
(
19
,
0
,
None
)
tdSql
.
checkData
(
20
,
0
,
20
)
#
tdSql
.
checkData
(
21
,
0
,
None
)
tdSql
.
checkData
(
24
,
0
,
None
)
tdSql
.
checkData
(
25
,
0
,
None
)
#
tdSql
.
checkData
(
26
,
0
,
None
)
tdSql
.
checkData
(
29
,
0
,
None
)
tdSql
.
checkData
(
30
,
0
,
30
)
#
tdSql
.
checkData
(
31
,
0
,
None
)
tdSql
.
checkData
(
34
,
0
,
None
)
tdSql
.
checkData
(
35
,
0
,
35
)
#
tdSql
.
checkData
(
36
,
0
,
None
)
tdSql
.
checkData
(
39
,
0
,
None
)
tdSql
.
checkData
(
40
,
0
,
40
)
#
tdSql
.
checkData
(
41
,
0
,
None
)
tdSql
.
checkData
(
44
,
0
,
None
)
tdSql
.
checkData
(
45
,
0
,
None
)
#
tdSql
.
checkData
(
46
,
0
,
None
)
tdSql
.
checkData
(
49
,
0
,
None
)
tdSql
.
checkData
(
50
,
0
,
50
)
#
tdSql
.
checkData
(
51
,
0
,
None
)
tdSql
.
checkData
(
54
,
0
,
None
)
tdSql
.
checkData
(
55
,
0
,
None
)
#
tdSql
.
checkData
(
56
,
0
,
None
)
tdSql
.
checkData
(
59
,
0
,
None
)
tdSql
.
checkData
(
60
,
0
,
55
)
#
tdSql
.
checkData
(
0
,
1
,
None
)
#
tdSql
.
checkData
(
1
,
1
,
None
)
tdSql
.
checkData
(
4
,
1
,
None
)
tdSql
.
checkData
(
5
,
1
,
None
)
#
tdSql
.
checkData
(
6
,
1
,
None
)
tdSql
.
checkData
(
9
,
1
,
None
)
tdSql
.
checkData
(
10
,
1
,
10
)
#
tdSql
.
checkData
(
11
,
1
,
None
)
tdSql
.
checkData
(
14
,
1
,
None
)
tdSql
.
checkData
(
15
,
1
,
None
)
#
tdSql
.
checkData
(
16
,
1
,
None
)
tdSql
.
checkData
(
19
,
1
,
None
)
tdSql
.
checkData
(
20
,
1
,
None
)
#
tdSql
.
checkData
(
21
,
1
,
None
)
tdSql
.
checkData
(
24
,
1
,
None
)
tdSql
.
checkData
(
25
,
1
,
None
)
#
tdSql
.
checkData
(
26
,
1
,
None
)
tdSql
.
checkData
(
29
,
1
,
None
)
tdSql
.
checkData
(
30
,
1
,
30
)
#
tdSql
.
checkData
(
31
,
1
,
None
)
tdSql
.
checkData
(
34
,
1
,
None
)
tdSql
.
checkData
(
35
,
1
,
None
)
#
tdSql
.
checkData
(
36
,
1
,
None
)
tdSql
.
checkData
(
39
,
1
,
None
)
tdSql
.
checkData
(
40
,
1
,
40
)
#
tdSql
.
checkData
(
41
,
1
,
None
)
tdSql
.
checkData
(
44
,
1
,
None
)
tdSql
.
checkData
(
45
,
1
,
45
)
#
tdSql
.
checkData
(
46
,
1
,
None
)
tdSql
.
checkData
(
49
,
1
,
None
)
tdSql
.
checkData
(
50
,
1
,
None
)
#
tdSql
.
checkData
(
51
,
1
,
None
)
tdSql
.
checkData
(
54
,
1
,
None
)
tdSql
.
checkData
(
55
,
1
,
None
)
#
tdSql
.
checkData
(
56
,
1
,
None
)
tdSql
.
checkData
(
59
,
1
,
None
)
tdSql
.
checkData
(
60
,
1
,
60
)
#
# test fill value
tdSql
.
query
(
f
"select interp(c0),interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:01:00') every(1s) fill(value, 123)"
)
tdSql
.
checkRows
(
61
)
tdSql
.
checkCols
(
2
)
tdSql
.
checkData
(
0
,
0
,
0
)
#
tdSql
.
checkData
(
1
,
0
,
123
)
tdSql
.
checkData
(
4
,
0
,
123
)
tdSql
.
checkData
(
5
,
0
,
None
)
#
tdSql
.
checkData
(
6
,
0
,
123
)
tdSql
.
checkData
(
9
,
0
,
123
)
tdSql
.
checkData
(
10
,
0
,
10
)
#
tdSql
.
checkData
(
11
,
0
,
123
)
tdSql
.
checkData
(
14
,
0
,
123
)
tdSql
.
checkData
(
15
,
0
,
None
)
#
tdSql
.
checkData
(
16
,
0
,
123
)
tdSql
.
checkData
(
19
,
0
,
123
)
tdSql
.
checkData
(
20
,
0
,
20
)
#
tdSql
.
checkData
(
21
,
0
,
123
)
tdSql
.
checkData
(
24
,
0
,
123
)
tdSql
.
checkData
(
25
,
0
,
None
)
#
tdSql
.
checkData
(
26
,
0
,
123
)
tdSql
.
checkData
(
29
,
0
,
123
)
tdSql
.
checkData
(
30
,
0
,
30
)
#
tdSql
.
checkData
(
31
,
0
,
123
)
tdSql
.
checkData
(
34
,
0
,
123
)
tdSql
.
checkData
(
35
,
0
,
35
)
#
tdSql
.
checkData
(
36
,
0
,
123
)
tdSql
.
checkData
(
39
,
0
,
123
)
tdSql
.
checkData
(
40
,
0
,
40
)
#
tdSql
.
checkData
(
41
,
0
,
123
)
tdSql
.
checkData
(
44
,
0
,
123
)
tdSql
.
checkData
(
45
,
0
,
None
)
#
tdSql
.
checkData
(
46
,
0
,
123
)
tdSql
.
checkData
(
49
,
0
,
123
)
tdSql
.
checkData
(
50
,
0
,
50
)
#
tdSql
.
checkData
(
51
,
0
,
123
)
tdSql
.
checkData
(
54
,
0
,
123
)
tdSql
.
checkData
(
55
,
0
,
None
)
#
tdSql
.
checkData
(
59
,
0
,
123
)
tdSql
.
checkData
(
60
,
0
,
55
)
#
tdSql
.
checkData
(
0
,
1
,
None
)
#
tdSql
.
checkData
(
1
,
1
,
123
)
tdSql
.
checkData
(
4
,
1
,
123
)
tdSql
.
checkData
(
5
,
1
,
None
)
#
tdSql
.
checkData
(
6
,
1
,
123
)
tdSql
.
checkData
(
9
,
1
,
123
)
tdSql
.
checkData
(
10
,
1
,
10
)
#
tdSql
.
checkData
(
11
,
1
,
123
)
tdSql
.
checkData
(
14
,
1
,
123
)
tdSql
.
checkData
(
15
,
1
,
None
)
#
tdSql
.
checkData
(
16
,
1
,
123
)
tdSql
.
checkData
(
19
,
1
,
123
)
tdSql
.
checkData
(
20
,
1
,
None
)
#
tdSql
.
checkData
(
21
,
1
,
123
)
tdSql
.
checkData
(
24
,
1
,
123
)
tdSql
.
checkData
(
25
,
1
,
None
)
#
tdSql
.
checkData
(
26
,
1
,
123
)
tdSql
.
checkData
(
29
,
1
,
123
)
tdSql
.
checkData
(
30
,
1
,
30
)
#
tdSql
.
checkData
(
31
,
1
,
123
)
tdSql
.
checkData
(
34
,
1
,
123
)
tdSql
.
checkData
(
35
,
1
,
None
)
#
tdSql
.
checkData
(
36
,
1
,
123
)
tdSql
.
checkData
(
39
,
1
,
123
)
tdSql
.
checkData
(
40
,
1
,
40
)
#
tdSql
.
checkData
(
41
,
1
,
123
)
tdSql
.
checkData
(
44
,
1
,
123
)
tdSql
.
checkData
(
45
,
1
,
45
)
#
tdSql
.
checkData
(
46
,
1
,
123
)
tdSql
.
checkData
(
49
,
1
,
123
)
tdSql
.
checkData
(
50
,
1
,
None
)
#
tdSql
.
checkData
(
51
,
1
,
123
)
tdSql
.
checkData
(
54
,
1
,
123
)
tdSql
.
checkData
(
55
,
1
,
None
)
#
tdSql
.
checkData
(
56
,
1
,
123
)
tdSql
.
checkData
(
59
,
1
,
123
)
tdSql
.
checkData
(
60
,
1
,
60
)
#
# test fill prev
tdSql
.
query
(
f
"select interp(c0),interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:01:00') every(1s) fill(prev)"
)
tdSql
.
checkRows
(
61
)
tdSql
.
checkCols
(
2
)
tdSql
.
checkData
(
0
,
0
,
0
)
#
tdSql
.
checkData
(
1
,
0
,
0
)
tdSql
.
checkData
(
4
,
0
,
0
)
tdSql
.
checkData
(
5
,
0
,
None
)
#
tdSql
.
checkData
(
6
,
0
,
None
)
tdSql
.
checkData
(
9
,
0
,
None
)
tdSql
.
checkData
(
10
,
0
,
10
)
#
tdSql
.
checkData
(
11
,
0
,
10
)
tdSql
.
checkData
(
14
,
0
,
10
)
tdSql
.
checkData
(
15
,
0
,
None
)
#
tdSql
.
checkData
(
16
,
0
,
None
)
tdSql
.
checkData
(
19
,
0
,
None
)
tdSql
.
checkData
(
20
,
0
,
20
)
#
tdSql
.
checkData
(
21
,
0
,
20
)
tdSql
.
checkData
(
24
,
0
,
20
)
tdSql
.
checkData
(
25
,
0
,
None
)
#
tdSql
.
checkData
(
26
,
0
,
None
)
tdSql
.
checkData
(
29
,
0
,
None
)
tdSql
.
checkData
(
30
,
0
,
30
)
#
tdSql
.
checkData
(
31
,
0
,
30
)
tdSql
.
checkData
(
34
,
0
,
30
)
tdSql
.
checkData
(
35
,
0
,
35
)
#
tdSql
.
checkData
(
36
,
0
,
35
)
tdSql
.
checkData
(
39
,
0
,
35
)
tdSql
.
checkData
(
40
,
0
,
40
)
#
tdSql
.
checkData
(
41
,
0
,
40
)
tdSql
.
checkData
(
44
,
0
,
40
)
tdSql
.
checkData
(
45
,
0
,
None
)
#
tdSql
.
checkData
(
46
,
0
,
None
)
tdSql
.
checkData
(
49
,
0
,
None
)
tdSql
.
checkData
(
50
,
0
,
50
)
#
tdSql
.
checkData
(
51
,
0
,
50
)
tdSql
.
checkData
(
54
,
0
,
50
)
tdSql
.
checkData
(
55
,
0
,
None
)
#
tdSql
.
checkData
(
56
,
0
,
None
)
tdSql
.
checkData
(
59
,
0
,
None
)
tdSql
.
checkData
(
60
,
0
,
55
)
#
tdSql
.
checkData
(
0
,
1
,
None
)
#
tdSql
.
checkData
(
1
,
1
,
None
)
tdSql
.
checkData
(
4
,
1
,
None
)
tdSql
.
checkData
(
5
,
1
,
None
)
#
tdSql
.
checkData
(
6
,
1
,
None
)
tdSql
.
checkData
(
9
,
1
,
None
)
tdSql
.
checkData
(
10
,
1
,
10
)
#
tdSql
.
checkData
(
11
,
1
,
10
)
tdSql
.
checkData
(
14
,
1
,
10
)
tdSql
.
checkData
(
15
,
1
,
None
)
#
tdSql
.
checkData
(
16
,
1
,
None
)
tdSql
.
checkData
(
19
,
1
,
None
)
tdSql
.
checkData
(
20
,
1
,
None
)
#
tdSql
.
checkData
(
21
,
1
,
None
)
tdSql
.
checkData
(
24
,
1
,
None
)
tdSql
.
checkData
(
25
,
1
,
None
)
#
tdSql
.
checkData
(
26
,
1
,
None
)
tdSql
.
checkData
(
29
,
1
,
None
)
tdSql
.
checkData
(
30
,
1
,
30
)
#
tdSql
.
checkData
(
31
,
1
,
30
)
tdSql
.
checkData
(
34
,
1
,
30
)
tdSql
.
checkData
(
35
,
1
,
None
)
#
tdSql
.
checkData
(
36
,
1
,
None
)
tdSql
.
checkData
(
39
,
1
,
None
)
tdSql
.
checkData
(
40
,
1
,
40
)
#
tdSql
.
checkData
(
41
,
1
,
40
)
tdSql
.
checkData
(
44
,
1
,
40
)
tdSql
.
checkData
(
45
,
1
,
45
)
#
tdSql
.
checkData
(
46
,
1
,
45
)
tdSql
.
checkData
(
49
,
1
,
45
)
tdSql
.
checkData
(
50
,
1
,
None
)
#
tdSql
.
checkData
(
51
,
1
,
None
)
tdSql
.
checkData
(
54
,
1
,
None
)
tdSql
.
checkData
(
55
,
1
,
None
)
#
tdSql
.
checkData
(
56
,
1
,
None
)
tdSql
.
checkData
(
59
,
1
,
None
)
tdSql
.
checkData
(
60
,
1
,
60
)
#
# test fill next
tdSql
.
query
(
f
"select interp(c0),interp(c1) from
{
dbname
}
.
{
tbname1
}
range('2020-02-02 00:00:00', '2020-02-02 00:01:00') every(1s) fill(next)"
)
tdSql
.
checkRows
(
61
)
tdSql
.
checkCols
(
2
)
tdSql
.
checkData
(
0
,
0
,
0
)
#
tdSql
.
checkData
(
1
,
0
,
None
)
tdSql
.
checkData
(
4
,
0
,
None
)
tdSql
.
checkData
(
5
,
0
,
None
)
#
tdSql
.
checkData
(
6
,
0
,
10
)
tdSql
.
checkData
(
9
,
0
,
10
)
tdSql
.
checkData
(
10
,
0
,
10
)
#
tdSql
.
checkData
(
11
,
0
,
None
)
tdSql
.
checkData
(
14
,
0
,
None
)
tdSql
.
checkData
(
15
,
0
,
None
)
#
tdSql
.
checkData
(
16
,
0
,
20
)
tdSql
.
checkData
(
19
,
0
,
20
)
tdSql
.
checkData
(
20
,
0
,
20
)
#
tdSql
.
checkData
(
21
,
0
,
None
)
tdSql
.
checkData
(
24
,
0
,
None
)
tdSql
.
checkData
(
25
,
0
,
None
)
#
tdSql
.
checkData
(
26
,
0
,
30
)
tdSql
.
checkData
(
29
,
0
,
30
)
tdSql
.
checkData
(
30
,
0
,
30
)
#
tdSql
.
checkData
(
31
,
0
,
35
)
tdSql
.
checkData
(
34
,
0
,
35
)
tdSql
.
checkData
(
35
,
0
,
35
)
#
tdSql
.
checkData
(
36
,
0
,
40
)
tdSql
.
checkData
(
39
,
0
,
40
)
tdSql
.
checkData
(
40
,
0
,
40
)
#
tdSql
.
checkData
(
41
,
0
,
None
)
tdSql
.
checkData
(
44
,
0
,
None
)
tdSql
.
checkData
(
45
,
0
,
None
)
#
tdSql
.
checkData
(
46
,
0
,
50
)
tdSql
.
checkData
(
49
,
0
,
50
)
tdSql
.
checkData
(
50
,
0
,
50
)
#
tdSql
.
checkData
(
51
,
0
,
None
)
tdSql
.
checkData
(
54
,
0
,
None
)
tdSql
.
checkData
(
55
,
0
,
None
)
#
tdSql
.
checkData
(
56
,
0
,
55
)
tdSql
.
checkData
(
59
,
0
,
55
)
tdSql
.
checkData
(
60
,
0
,
55
)
#
tdSql
.
checkData
(
0
,
1
,
None
)
#
tdSql
.
checkData
(
1
,
1
,
None
)
tdSql
.
checkData
(
4
,
1
,
None
)
tdSql
.
checkData
(
5
,
1
,
None
)
#
tdSql
.
checkData
(
6
,
1
,
10
)
tdSql
.
checkData
(
9
,
1
,
10
)
tdSql
.
checkData
(
10
,
1
,
10
)
#
tdSql
.
checkData
(
11
,
1
,
None
)
tdSql
.
checkData
(
14
,
1
,
None
)
tdSql
.
checkData
(
15
,
1
,
None
)
#
tdSql
.
checkData
(
16
,
1
,
None
)
tdSql
.
checkData
(
19
,
1
,
None
)
tdSql
.
checkData
(
20
,
1
,
None
)
#
tdSql
.
checkData
(
21
,
1
,
None
)
tdSql
.
checkData
(
24
,
1
,
None
)
tdSql
.
checkData
(
25
,
1
,
None
)
#
tdSql
.
checkData
(
26
,
1
,
30
)
tdSql
.
checkData
(
29
,
1
,
30
)
tdSql
.
checkData
(
30
,
1
,
30
)
#
tdSql
.
checkData
(
31
,
1
,
None
)
tdSql
.
checkData
(
34
,
1
,
None
)
tdSql
.
checkData
(
35
,
1
,
None
)
#
tdSql
.
checkData
(
36
,
1
,
40
)
tdSql
.
checkData
(
39
,
1
,
40
)
tdSql
.
checkData
(
40
,
1
,
40
)
#
tdSql
.
checkData
(
41
,
1
,
45
)
tdSql
.
checkData
(
44
,
1
,
45
)
tdSql
.
checkData
(
45
,
1
,
45
)
#
tdSql
.
checkData
(
46
,
1
,
None
)
tdSql
.
checkData
(
49
,
1
,
None
)
tdSql
.
checkData
(
50
,
1
,
None
)
#
tdSql
.
checkData
(
51
,
1
,
None
)
tdSql
.
checkData
(
54
,
1
,
None
)
tdSql
.
checkData
(
55
,
1
,
None
)
#
tdSql
.
checkData
(
56
,
1
,
60
)
tdSql
.
checkData
(
59
,
1
,
60
)
tdSql
.
checkData
(
60
,
1
,
60
)
#
tdLog
.
printNoPrefix
(
"==========step11:test multi-interp cases"
)
tdSql
.
query
(
f
"select interp(c0),interp(c1),interp(c2),interp(c3) from
{
dbname
}
.
{
tbname
}
range('2020-02-09 00:00:05', '2020-02-13 00:00:05') every(1d) fill(null)"
)
tdSql
.
query
(
f
"select interp(c0),interp(c1),interp(c2),interp(c3) from
{
dbname
}
.
{
tbname
}
range('2020-02-09 00:00:05', '2020-02-13 00:00:05') every(1d) fill(null)"
)
tdSql
.
checkRows
(
5
)
tdSql
.
checkRows
(
5
)
tdSql
.
checkCols
(
4
)
tdSql
.
checkCols
(
4
)
...
@@ -891,7 +1827,7 @@ class TDTestCase:
...
@@ -891,7 +1827,7 @@ class TDTestCase:
for
i
in
range
(
tdSql
.
queryCols
):
for
i
in
range
(
tdSql
.
queryCols
):
tdSql
.
checkData
(
0
,
i
,
13
)
tdSql
.
checkData
(
0
,
i
,
13
)
tdLog
.
printNoPrefix
(
"==========step1
1
:test error cases"
)
tdLog
.
printNoPrefix
(
"==========step1
2
:test error cases"
)
tdSql
.
error
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
"
)
tdSql
.
error
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
"
)
tdSql
.
error
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-10 00:00:05', '2020-02-15 00:00:05')"
)
tdSql
.
error
(
f
"select interp(c0) from
{
dbname
}
.
{
tbname
}
range('2020-02-10 00:00:05', '2020-02-15 00:00:05')"
)
...
@@ -914,7 +1850,7 @@ class TDTestCase:
...
@@ -914,7 +1850,7 @@ class TDTestCase:
tdSql
.
error
(
f
"select interp('abcd') from
{
dbname
}
.
{
tbname
}
range('2020-02-10 00:00:05', '2020-02-15 00:00:05') every(1d) fill(null)"
)
tdSql
.
error
(
f
"select interp('abcd') from
{
dbname
}
.
{
tbname
}
range('2020-02-10 00:00:05', '2020-02-15 00:00:05') every(1d) fill(null)"
)
tdSql
.
error
(
f
"select interp('中文字符') from
{
dbname
}
.
{
tbname
}
range('2020-02-10 00:00:05', '2020-02-15 00:00:05') every(1d) fill(null)"
)
tdSql
.
error
(
f
"select interp('中文字符') from
{
dbname
}
.
{
tbname
}
range('2020-02-10 00:00:05', '2020-02-15 00:00:05') every(1d) fill(null)"
)
tdLog
.
printNoPrefix
(
"==========step1
2
:stable cases"
)
tdLog
.
printNoPrefix
(
"==========step1
3
:stable cases"
)
#tdSql.query(f"select interp(c0) from {dbname}.{stbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(null)")
#tdSql.query(f"select interp(c0) from {dbname}.{stbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(null)")
#tdSql.checkRows(13)
#tdSql.checkRows(13)
...
...
tests/system-test/2-query/last_row.py
浏览文件 @
f46f941c
...
@@ -572,19 +572,19 @@ class TDTestCase:
...
@@ -572,19 +572,19 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
1
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
5
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
0
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
# check basic elem for table per row
# check basic elem for table per row
...
...
tests/system-test/2-query/log.py
浏览文件 @
f46f941c
...
@@ -91,7 +91,6 @@ class TDTestCase:
...
@@ -91,7 +91,6 @@ class TDTestCase:
elem
=
math
.
log
(
elem
,
base
)
elem
=
math
.
log
(
elem
,
base
)
elif
elem
<=
0
:
elif
elem
<=
0
:
elem
=
None
elem
=
None
row_check
.
append
(
elem
)
row_check
.
append
(
elem
)
auto_result
.
append
(
row_check
)
auto_result
.
append
(
row_check
)
...
@@ -519,19 +518,19 @@ class TDTestCase:
...
@@ -519,19 +518,19 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
1
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
5
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
0
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
self
.
check_result_auto_log
(
None
,
f
"select c1, c2, c3 , c4, c5 ,c6 from
{
dbname
}
.sub1_bound "
,
f
"select log(c1), log(c2) ,log(c3), log(c4), log(c5) ,log(c6) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto_log
(
None
,
f
"select c1, c2, c3 , c4, c5 ,c6 from
{
dbname
}
.sub1_bound "
,
f
"select log(c1), log(c2) ,log(c3), log(c4), log(c5) ,log(c6) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto_log
(
2
,
f
"select c1, c2, c3 , c4, c5 ,c6 from
{
dbname
}
.sub1_bound "
,
f
"select log(c1,2), log(c2,2) ,log(c3,2), log(c4,2), log(c5,2) ,log(c6,2) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto_log
(
2
,
f
"select c1, c2, c3 , c4, c5 ,c6 from
{
dbname
}
.sub1_bound "
,
f
"select log(c1,2), log(c2,2) ,log(c3,2), log(c4,2), log(c5,2) ,log(c6,2) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/pow.py
浏览文件 @
f46f941c
...
@@ -507,19 +507,19 @@ class TDTestCase:
...
@@ -507,19 +507,19 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
1
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
5
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
0
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
self
.
check_result_auto_pow
(
2
,
f
"select c1, c3 , c4, c5 from
{
dbname
}
.sub1_bound "
,
f
"select pow(c1,2), pow(c3,2), pow(c4,2), pow(c5,2) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto_pow
(
2
,
f
"select c1, c3 , c4, c5 from
{
dbname
}
.sub1_bound "
,
f
"select pow(c1,2), pow(c3,2), pow(c4,2), pow(c5,2) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto_pow
(
3
,
f
"select c1, c3 , c4, c5 from
{
dbname
}
.sub1_bound "
,
f
"select pow(c1,3), pow(c3,3), pow(c4,3), pow(c5,3) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto_pow
(
3
,
f
"select c1, c3 , c4, c5 from
{
dbname
}
.sub1_bound "
,
f
"select pow(c1,3), pow(c3,3), pow(c4,3), pow(c5,3) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/round.py
浏览文件 @
f46f941c
...
@@ -81,16 +81,12 @@ class TDTestCase:
...
@@ -81,16 +81,12 @@ class TDTestCase:
row_check
.
append
(
elem
)
row_check
.
append
(
elem
)
auto_result
.
append
(
row_check
)
auto_result
.
append
(
row_check
)
check_status
=
True
tdSql
.
query
(
round_query
)
for
row_index
,
row
in
enumerate
(
round_result
):
for
row_index
,
row
in
enumerate
(
round_result
):
for
col_index
,
elem
in
enumerate
(
row
):
for
col_index
,
elem
in
enumerate
(
row
):
if
auto_result
[
row_index
][
col_index
]
!=
elem
:
tdSql
.
checkData
(
row_index
,
col_index
,
auto_result
[
row_index
][
col_index
])
check_status
=
False
if
not
check_status
:
tdLog
.
notice
(
"round function value has not as expected , sql is
\"
%s
\"
"
%
round_query
)
sys
.
exit
(
1
)
else
:
tdLog
.
info
(
"round value check pass , it work as expected ,sql is
\"
%s
\"
"
%
round_query
)
def
test_errors
(
self
,
dbname
=
"db"
):
def
test_errors
(
self
,
dbname
=
"db"
):
error_sql_lists
=
[
error_sql_lists
=
[
...
@@ -388,10 +384,10 @@ class TDTestCase:
...
@@ -388,10 +384,10 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
-5s
, 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
...
@@ -399,15 +395,15 @@ class TDTestCase:
...
@@ -399,15 +395,15 @@ class TDTestCase:
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+10s
, -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
5
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
self
.
check_result_auto
(
f
"select c1, c2, c3 , c4, c5 ,c6 from
{
dbname
}
.sub1_bound "
,
f
"select round(c1), round(c2) ,round(c3), round(c4), round(c5) ,round(c6) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto
(
f
"select c1, c2, c3 , c4, c5 ,c6 from
{
dbname
}
.sub1_bound "
,
f
"select round(c1), round(c2) ,round(c3), round(c4), round(c5) ,round(c6) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto
(
f
"select c1, c2, c3 , c3, c2 ,c1 from
{
dbname
}
.sub1_bound "
,
f
"select round(c1), round(c2) ,round(c3), round(c3), round(c2) ,round(c1) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto
(
f
"select c1, c2, c3 , c3, c2 ,c1 from
{
dbname
}
.sub1_bound "
,
f
"select round(c1), round(c2) ,round(c3), round(c3), round(c2) ,round(c1) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/sin.py
浏览文件 @
f46f941c
...
@@ -394,19 +394,19 @@ class TDTestCase:
...
@@ -394,19 +394,19 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
1
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
5
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
0
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
self
.
check_result_auto_sin
(
f
"select abs(c1), abs(c2), abs(c3) , abs(c4) from
{
dbname
}
.sub1_bound "
,
f
"select sin(abs(c1)), sin(abs(c2)) ,sin(abs(c3)), sin(abs(c4)) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto_sin
(
f
"select abs(c1), abs(c2), abs(c3) , abs(c4) from
{
dbname
}
.sub1_bound "
,
f
"select sin(abs(c1)), sin(abs(c2)) ,sin(abs(c3)), sin(abs(c4)) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/sqrt.py
浏览文件 @
f46f941c
...
@@ -443,19 +443,19 @@ class TDTestCase:
...
@@ -443,19 +443,19 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
1
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
5
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
0
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
self
.
check_result_auto_sqrt
(
f
"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from
{
dbname
}
.sub1_bound "
,
f
"select sqrt(abs(c1)), sqrt(abs(c2)) ,sqrt(abs(c3)), sqrt(abs(c4)), sqrt(abs(c5)) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto_sqrt
(
f
"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from
{
dbname
}
.sub1_bound "
,
f
"select sqrt(abs(c1)), sqrt(abs(c2)) ,sqrt(abs(c3)), sqrt(abs(c4)), sqrt(abs(c5)) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/statecount.py
浏览文件 @
f46f941c
...
@@ -451,10 +451,10 @@ class TDTestCase:
...
@@ -451,10 +451,10 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
-5s
, 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
...
@@ -462,15 +462,15 @@ class TDTestCase:
...
@@ -462,15 +462,15 @@ class TDTestCase:
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+10s
, -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
5
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
query
(
f
"select statecount(c1,'GT',1) from
{
dbname
}
.sub1_bound"
)
tdSql
.
query
(
f
"select statecount(c1,'GT',1) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/tail.py
浏览文件 @
f46f941c
...
@@ -421,10 +421,10 @@ class TDTestCase:
...
@@ -421,10 +421,10 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
-5s
, 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
...
@@ -432,20 +432,20 @@ class TDTestCase:
...
@@ -432,20 +432,20 @@ class TDTestCase:
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+10s
, -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
5
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
query
(
f
"select tail(c2,
2
) from
{
dbname
}
.sub1_bound order by 1 desc"
)
tdSql
.
query
(
f
"select tail(c2,
1
) from
{
dbname
}
.sub1_bound order by 1 desc"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
0
,
9223372036854775803
)
tdSql
.
checkData
(
0
,
0
,
-
9223372036854775803
)
def
run
(
self
):
# sourcery skip: extract-duplicate-method, remove-redundant-fstring
def
run
(
self
):
# sourcery skip: extract-duplicate-method, remove-redundant-fstring
tdSql
.
prepare
()
tdSql
.
prepare
()
...
...
tests/system-test/2-query/tan.py
浏览文件 @
f46f941c
...
@@ -391,19 +391,19 @@ class TDTestCase:
...
@@ -391,19 +391,19 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
1
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-
5
s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
+5s
, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+1
0
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
self
.
check_result_auto_tan
(
f
"select abs(c1), abs(c2), abs(c3) , abs(c4) from
{
dbname
}
.sub1_bound "
,
f
"select tan(abs(c1)), tan(abs(c2)) ,tan(abs(c3)), tan(abs(c4)) from
{
dbname
}
.sub1_bound"
)
self
.
check_result_auto_tan
(
f
"select abs(c1), abs(c2), abs(c3) , abs(c4) from
{
dbname
}
.sub1_bound "
,
f
"select tan(abs(c1)), tan(abs(c2)) ,tan(abs(c3)), tan(abs(c4)) from
{
dbname
}
.sub1_bound"
)
...
...
tests/system-test/2-query/txt.txt
0 → 100644
浏览文件 @
f46f941c
abs.py: def check_boundary_values(self):
abs.py: self.check_boundary_values()
and_or_for_byte.py: def check_boundary_values(self, dbname="bound_test"):
and_or_for_byte.py: self.check_boundary_values()
arccos.py: def check_boundary_values(self, dbname="bound_test"):
arccos.py: self.check_boundary_values()
arcsin.py: def check_boundary_values(self, dbname="bound_test"):
arcsin.py: self.check_boundary_values()
arctan.py: def check_boundary_values(self, dbname="bound_test"):
arctan.py: self.check_boundary_values()
avg.py: def check_boundary_values(self, dbname="bound_test"):
avg.py: self.check_boundary_values()
ceil.py: def check_boundary_values(self, dbname="bound_test"):
ceil.py: self.check_boundary_values()
cos.py: def check_boundary_values(self, dbname="bound_test"):
cos.py: self.check_boundary_values()
floor.py: def check_boundary_values(self, dbname="bound_test"):
floor.py: self.check_boundary_values()
function_stateduration.py: def check_boundary_values(self, dbname="bound_test"):
function_stateduration.py: self.check_boundary_values()
last_row.py: def check_boundary_values(self, dbname="bound_test"):
last_row.py: self.check_boundary_values()
log.py: def check_boundary_values(self, dbname="bound_test"):
log.py: self.check_boundary_values()
pow.py: def check_boundary_values(self, dbname="bound_test"):
pow.py: self.check_boundary_values()
round.py: def check_boundary_values(self, dbname="bound_test"):
round.py: self.check_boundary_values()
sin.py: def check_boundary_values(self, dbname="testdb"):
sin.py: self.check_boundary_values()
sqrt.py: def check_boundary_values(self, dbname="bound_test"):
sqrt.py: self.check_boundary_values()
statecount.py: def check_boundary_values(self, dbname="bound_test"):
statecount.py: self.check_boundary_values()
tail.py: def check_boundary_values(self, dbname="bound_test"):
tail.py: self.check_boundary_values()
tan.py: def check_boundary_values(self, dbname="bound_test"):
tan.py: self.check_boundary_values()
unique.py: def check_boundary_values(self, dbname="bound_test"):
unique.py: self.check_boundary_values()
tests/system-test/2-query/unique.py
浏览文件 @
f46f941c
...
@@ -451,26 +451,26 @@ class TDTestCase:
...
@@ -451,26 +451,26 @@ class TDTestCase:
)
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
f
'create table
{
dbname
}
.sub1_bound using
{
dbname
}
.stb_bound tags ( 1 )'
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()-1
0
s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()
-5s
, 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+
1
s, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+
5
s, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+
2
s, 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+
10
s, 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+
3
s, -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+
20
s, -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
error
(
tdSql
.
error
(
f
"insert into
{
dbname
}
.sub1_bound values ( now()+
1
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
f
"insert into
{
dbname
}
.sub1_bound values ( now()+
30
s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
)
)
tdSql
.
query
(
f
"select unique(c2) from
{
dbname
}
.sub1_bound order by 1 desc"
)
tdSql
.
query
(
f
"select unique(c2) from
{
dbname
}
.sub1_bound order by 1 desc"
)
...
...
tests/system-test/test.sh
→
tests/system-test/
py
test.sh
浏览文件 @
f46f941c
...
@@ -45,13 +45,11 @@ declare -x SIM_DIR=$TOP_DIR/sim
...
@@ -45,13 +45,11 @@ declare -x SIM_DIR=$TOP_DIR/sim
PROGRAM
=
$BUILD_DIR
/build/bin/tsim
PROGRAM
=
$BUILD_DIR
/build/bin/tsim
PRG_DIR
=
$SIM_DIR
/tsim
PRG_DIR
=
$SIM_DIR
/tsim
ASAN_DIR
=
$SIM_DIR
/asan
ASAN_DIR
=
$SIM_DIR
/asan
SYSTEM_TEST_DIR
=
$TOP_DIR
/tests/system-test
chmod
-R
777
$PRG_DIR
chmod
-R
777
$PRG_DIR
echo
"------------------------------------------------------------------------"
echo
"------------------------------------------------------------------------"
echo
"Start TDengine Testing Case ..."
echo
"Start TDengine Testing Case ..."
echo
"BUILD_DIR:
$BUILD_DIR
"
echo
"BUILD_DIR:
$BUILD_DIR
"
echo
"SYSTEM_TEST_DIR :
$SYSTEM_TEST_DIR
"
echo
"SIM_DIR :
$SIM_DIR
"
echo
"SIM_DIR :
$SIM_DIR
"
echo
"CODE_DIR :
$CODE_DIR
"
echo
"CODE_DIR :
$CODE_DIR
"
echo
"ASAN_DIR :
$ASAN_DIR
"
echo
"ASAN_DIR :
$ASAN_DIR
"
...
@@ -61,23 +59,40 @@ rm -rf $SIM_DIR/*
...
@@ -61,23 +59,40 @@ rm -rf $SIM_DIR/*
mkdir
-p
$PRG_DIR
mkdir
-p
$PRG_DIR
mkdir
-p
$ASAN_DIR
mkdir
-p
$ASAN_DIR
cd
$
SYSTEM_TEST
_DIR
cd
$
CODE
_DIR
ulimit
-n
600000
ulimit
-n
600000
ulimit
-c
unlimited
ulimit
-c
unlimited
#sudo sysctl -w kernel.core_pattern=$TOP_DIR/core.%p.%e
#sudo sysctl -w kernel.core_pattern=$TOP_DIR/core.%p.%e
echo
"ExcuteCmd:"
$*
echo
"ExcuteCmd:"
$*
echo
"AsanDir:"
$ASAN_DIR
/psim.asan
AsanFile
=
$ASAN_DIR
/psim.info
echo
"AsanFile:"
$AsanFile
export
LD_PRELOAD
=
libasan.so.5
$*
-a
2>
$ASAN_DIR
/psim.asan
unset
LD_PRELOAD
result
=
$?
#export LD_PRELOAD=libasan.so.5
echo
"Execute result:"
$result
export
LD_PRELOAD
=
`
gcc
-print-file-name
=
libasan.so
`
echo
"Preload AsanSo:"
$?
if
[
$result
-eq
0
]
;
then
$CODE_DIR
/sh/checkAsan.sh
$*
-a
2>
$AsanFile
unset
LD_PRELOAD
AsanFileLen
=
`
cat
$AsanFile
|
wc
-l
`
while
[
$AsanFileLen
-lt
10
]
do
sleep
1
`
cat
$AsanFile
|
wc
-l
`
done
echo
"AsanFileLen:"
$AsanFileLen
AsanFileSuccessLen
=
`
grep
-w
successfully
$AsanFile
|
wc
-l
`
echo
"AsanFileSuccessLen:"
$AsanFileSuccessLen
if
[
$AsanFileSuccessLen
-gt
0
]
;
then
echo
"Execute script successfully and check asan"
$CODE_DIR
/../script/sh/checkAsan.sh
else
else
echo
"Execute script failure"
exit
1
exit
1
fi
fi
tests/system-test/test.py
浏览文件 @
f46f941c
...
@@ -555,5 +555,5 @@ if __name__ == "__main__":
...
@@ -555,5 +555,5 @@ if __name__ == "__main__":
conn
.
close
()
conn
.
close
()
if
asan
:
if
asan
:
tdDnodes
.
StopAllSigint
()
tdDnodes
.
StopAllSigint
()
tdLog
.
info
(
"
a
ddress sanitizer mode finished"
)
tdLog
.
info
(
"
A
ddress sanitizer mode finished"
)
sys
.
exit
(
0
)
sys
.
exit
(
0
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录