Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
210bee6b
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
210bee6b
编写于
7月 20, 2021
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' into feature/query
上级
8125b808
99ca6843
变更
71
展开全部
隐藏空白更改
内联
并排
Showing
71 changed file
with
4506 addition
and
2706 deletion
+4506
-2706
documentation20/cn/02.getting-started/docs.md
documentation20/cn/02.getting-started/docs.md
+3
-3
packaging/tools/install_client.sh
packaging/tools/install_client.sh
+7
-1
packaging/tools/makeclient.sh
packaging/tools/makeclient.sh
+13
-4
packaging/tools/makeclient_power.sh
packaging/tools/makeclient_power.sh
+47
-14
src/client/inc/tscUtil.h
src/client/inc/tscUtil.h
+12
-1
src/client/inc/tsclient.h
src/client/inc/tsclient.h
+56
-10
src/client/src/taos.def
src/client/src/taos.def
+5
-2
src/client/src/tscParseInsert.c
src/client/src/tscParseInsert.c
+606
-57
src/client/src/tscPrepare.c
src/client/src/tscPrepare.c
+1
-0
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+44
-6
src/client/src/tscServer.c
src/client/src/tscServer.c
+7
-6
src/client/src/tscSubquery.c
src/client/src/tscSubquery.c
+21
-25
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+169
-28
src/common/inc/tdataformat.h
src/common/inc/tdataformat.h
+201
-25
src/common/src/tdataformat.c
src/common/src/tdataformat.c
+87
-11
src/common/src/ttypes.c
src/common/src/ttypes.c
+21
-19
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetRowData.java
...src/main/java/com/taosdata/jdbc/TSDBResultSetRowData.java
+20
-0
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/Utils.java
...tor/jdbc/src/main/java/com/taosdata/jdbc/utils/Utils.java
+14
-3
src/connector/jdbc/src/test/java/com/taosdata/jdbc/utils/UtilsTest.java
...jdbc/src/test/java/com/taosdata/jdbc/utils/UtilsTest.java
+47
-5
src/cq/src/cqMain.c
src/cq/src/cqMain.c
+10
-8
src/inc/taos.h
src/inc/taos.h
+16
-15
src/inc/taosdef.h
src/inc/taosdef.h
+11
-4
src/inc/taoserror.h
src/inc/taoserror.h
+1
-0
src/inc/ttype.h
src/inc/ttype.h
+17
-3
src/kit/taosdemo/taosdemo.c
src/kit/taosdemo/taosdemo.c
+2043
-2008
src/mnode/src/mnodeTable.c
src/mnode/src/mnodeTable.c
+12
-0
src/plugins/http/inc/httpParser.h
src/plugins/http/inc/httpParser.h
+1
-0
src/plugins/http/src/httpParser.c
src/plugins/http/src/httpParser.c
+14
-1
src/query/inc/qExtbuffer.h
src/query/inc/qExtbuffer.h
+2
-2
src/query/inc/qUtil.h
src/query/inc/qUtil.h
+2
-1
src/query/src/qAggMain.c
src/query/src/qAggMain.c
+2
-2
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+2
-2
src/query/src/qTsbuf.c
src/query/src/qTsbuf.c
+9
-0
src/tsdb/inc/tsdbMemTable.h
src/tsdb/inc/tsdbMemTable.h
+6
-6
src/tsdb/inc/tsdbMeta.h
src/tsdb/inc/tsdbMeta.h
+2
-2
src/tsdb/src/tsdbCommit.c
src/tsdb/src/tsdbCommit.c
+12
-11
src/tsdb/src/tsdbMain.c
src/tsdb/src/tsdbMain.c
+14
-12
src/tsdb/src/tsdbMemTable.c
src/tsdb/src/tsdbMemTable.c
+81
-65
src/tsdb/src/tsdbMeta.c
src/tsdb/src/tsdbMeta.c
+1
-1
src/tsdb/src/tsdbRead.c
src/tsdb/src/tsdbRead.c
+185
-98
src/tsdb/tests/tsdbTests.cpp
src/tsdb/tests/tsdbTests.cpp
+2
-2
src/util/src/terror.c
src/util/src/terror.c
+1
-0
tests/examples/lua/luaconnector.so
tests/examples/lua/luaconnector.so
+0
-0
tests/perftest-scripts/perftest-query.sh
tests/perftest-scripts/perftest-query.sh
+32
-4
tests/pytest/fulltest.sh
tests/pytest/fulltest.sh
+2
-2
tests/pytest/query/nestedQuery/queryWithSpread.py
tests/pytest/query/nestedQuery/queryWithSpread.py
+46
-0
tests/pytest/query/nestquery_last_row.py
tests/pytest/query/nestquery_last_row.py
+38
-37
tests/pytest/query/query1970YearsAf.py
tests/pytest/query/query1970YearsAf.py
+4
-4
tests/pytest/query/queryPerformance.py
tests/pytest/query/queryPerformance.py
+2
-1
tests/pytest/table/max_table_length.py
tests/pytest/table/max_table_length.py
+1
-1
tests/pytest/tools/taosdemoAllTest/TD-4985/query-limit-offset.py
...ytest/tools/taosdemoAllTest/TD-4985/query-limit-offset.py
+27
-27
tests/pytest/tools/taosdemoAllTest/TD-5213/insertSigcolumnsNum4096.csv
...tools/taosdemoAllTest/TD-5213/insertSigcolumnsNum4096.csv
+10
-0
tests/pytest/tools/taosdemoAllTest/TD-5213/insertSigcolumnsNum4096.json
...ools/taosdemoAllTest/TD-5213/insertSigcolumnsNum4096.json
+112
-0
tests/pytest/tools/taosdemoAllTest/TD-5213/insertSigcolumnsNum4096.py
.../tools/taosdemoAllTest/TD-5213/insertSigcolumnsNum4096.py
+137
-0
tests/pytest/tools/taosdemoAllTest/taosdemoTestInsertWithJson.py
...ytest/tools/taosdemoAllTest/taosdemoTestInsertWithJson.py
+77
-77
tests/pytest/tools/taosdemoPerformance.py
tests/pytest/tools/taosdemoPerformance.py
+1
-2
tests/pytest/tools/taosdemoTest.py
tests/pytest/tools/taosdemoTest.py
+2
-2
tests/pytest/tools/taosdumpTest.py
tests/pytest/tools/taosdumpTest.py
+0
-1
tests/pytest/wal/sdbComp.py
tests/pytest/wal/sdbComp.py
+18
-18
tests/script/sh/cfg.sh
tests/script/sh/cfg.sh
+13
-5
tests/script/sh/clear.sh
tests/script/sh/clear.sh
+15
-7
tests/script/sh/deploy.sh
tests/script/sh/deploy.sh
+13
-5
tests/script/sh/exec-default.sh
tests/script/sh/exec-default.sh
+12
-4
tests/script/sh/exec-no-random-fail.sh
tests/script/sh/exec-no-random-fail.sh
+21
-13
tests/script/sh/exec-random-fail.sh
tests/script/sh/exec-random-fail.sh
+12
-4
tests/script/sh/exec.sh
tests/script/sh/exec.sh
+13
-4
tests/script/sh/exec_tarbitrator.sh
tests/script/sh/exec_tarbitrator.sh
+12
-4
tests/script/sh/move_dnode.sh
tests/script/sh/move_dnode.sh
+12
-3
tests/script/sh/mv_old_data.sh
tests/script/sh/mv_old_data.sh
+12
-3
tests/script/sh/stop_dnodes.sh
tests/script/sh/stop_dnodes.sh
+22
-10
tests/script/test.sh
tests/script/test.sh
+13
-5
未找到文件。
documentation20/cn/02.getting-started/docs.md
浏览文件 @
210bee6b
...
@@ -126,7 +126,7 @@ taos> source <filename>;
...
@@ -126,7 +126,7 @@ taos> source <filename>;
$
taosdemo
$
taosdemo
```
```
该命令将在数据库 test 下面自动创建一张超级表 meters,该超级表下有 1 万张表,表名为 "
t0" 到 "t
9999",每张表有 1 万条记录,每条记录有 (ts, current, voltage, phase) 四个字段,时间戳从 "2017-07-14 10:40:00 000" 到 "2017-07-14 10:40:09 999",每张表带有标签 location 和 groupdId,groupdId 被设置为 1 到 10, location 被设置为 "beijing" 或者 "shanghai"。
该命令将在数据库 test 下面自动创建一张超级表 meters,该超级表下有 1 万张表,表名为 "
d0" 到 "d
9999",每张表有 1 万条记录,每条记录有 (ts, current, voltage, phase) 四个字段,时间戳从 "2017-07-14 10:40:00 000" 到 "2017-07-14 10:40:09 999",每张表带有标签 location 和 groupdId,groupdId 被设置为 1 到 10, location 被设置为 "beijing" 或者 "shanghai"。
执行这条命令大概需要几分钟,最后共插入 1 亿条记录。
执行这条命令大概需要几分钟,最后共插入 1 亿条记录。
...
@@ -156,10 +156,10 @@ taos> select count(*) from test.meters where location="beijing";
...
@@ -156,10 +156,10 @@ taos> select count(*) from test.meters where location="beijing";
taos> select avg(current), max(voltage), min(phase) from test.meters where groupdId=10;
taos> select avg(current), max(voltage), min(phase) from test.meters where groupdId=10;
```
```
-
对表
t
10 按 10s 进行平均值、最大值和最小值聚合统计:
-
对表
d
10 按 10s 进行平均值、最大值和最小值聚合统计:
```
mysql
```
mysql
taos> select avg(current), max(voltage), min(phase) from test.
t
10 interval(10s);
taos> select avg(current), max(voltage), min(phase) from test.
d
10 interval(10s);
```
```
**Note:**
taosdemo 命令本身带有很多选项,配置表的数目、记录条数等等,请执行
`taosdemo --help`
详细列出。您可以设置不同参数进行体验。
**Note:**
taosdemo 命令本身带有很多选项,配置表的数目、记录条数等等,请执行
`taosdemo --help`
详细列出。您可以设置不同参数进行体验。
...
...
packaging/tools/install_client.sh
浏览文件 @
210bee6b
...
@@ -182,7 +182,13 @@ function install_jemalloc() {
...
@@ -182,7 +182,13 @@ function install_jemalloc() {
${
csudo
}
/usr/bin/install
-c
-d
/usr/local/share/man/man3
${
csudo
}
/usr/bin/install
-c
-d
/usr/local/share/man/man3
${
csudo
}
/usr/bin/install
-c
-m
644
${
jemalloc_dir
}
/share/man/man3/jemalloc.3 /usr/local/share/man/man3
${
csudo
}
/usr/bin/install
-c
-m
644
${
jemalloc_dir
}
/share/man/man3/jemalloc.3 /usr/local/share/man/man3
fi
fi
${
csudo
}
ldconfig
if
[
-d
/etc/ld.so.conf.d
]
;
then
${
csudo
}
echo
"/usr/local/lib"
>
/etc/ld.so.conf.d/jemalloc.conf
${
csudo
}
ldconfig
else
echo
"/etc/ld.so.conf.d not found!"
fi
fi
fi
}
}
...
...
packaging/tools/makeclient.sh
浏览文件 @
210bee6b
...
@@ -41,10 +41,10 @@ fi
...
@@ -41,10 +41,10 @@ fi
if
[
"
$osType
"
!=
"Darwin"
]
;
then
if
[
"
$osType
"
!=
"Darwin"
]
;
then
if
[
"
$pagMode
"
==
"lite"
]
;
then
if
[
"
$pagMode
"
==
"lite"
]
;
then
#strip ${build_dir}/bin/taosd
#strip ${build_dir}/bin/taosd
strip
${
build_dir
}
/bin/taos
strip
${
build_dir
}
/bin/taos
bin_files
=
"
${
build_dir
}
/bin/taos
${
script_dir
}
/remove_client.sh"
bin_files
=
"
${
build_dir
}
/bin/taos
${
script_dir
}
/remove_client.sh"
else
else
bin_files
=
"
${
build_dir
}
/bin/taos
${
build_dir
}
/bin/taosdump
${
build_dir
}
/bin/taosdemo
\
bin_files
=
"
${
build_dir
}
/bin/taos
${
build_dir
}
/bin/taosdump
${
build_dir
}
/bin/taosdemo
\
${
script_dir
}
/remove_client.sh
${
script_dir
}
/set_core.sh
${
script_dir
}
/get_client.sh
${
script_dir
}
/taosd-dump-cfg.gdb"
${
script_dir
}
/remove_client.sh
${
script_dir
}
/set_core.sh
${
script_dir
}
/get_client.sh
${
script_dir
}
/taosd-dump-cfg.gdb"
fi
fi
...
@@ -139,7 +139,7 @@ if [[ "$pagMode" != "lite" ]] && [[ "$cpuType" != "aarch32" ]]; then
...
@@ -139,7 +139,7 @@ if [[ "$pagMode" != "lite" ]] && [[ "$cpuType" != "aarch32" ]]; then
cp
-r
${
examples_dir
}
/C#
${
install_dir
}
/examples
cp
-r
${
examples_dir
}
/C#
${
install_dir
}
/examples
fi
fi
# Copy driver
# Copy driver
mkdir
-p
${
install_dir
}
/driver
mkdir
-p
${
install_dir
}
/driver
cp
${
lib_files
}
${
install_dir
}
/driver
cp
${
lib_files
}
${
install_dir
}
/driver
# Copy connector
# Copy connector
...
@@ -168,7 +168,7 @@ fi
...
@@ -168,7 +168,7 @@ fi
# exit 1
# exit 1
cd
${
release_dir
}
cd
${
release_dir
}
# install_dir has been distinguishes cluster from edege, so comments this code
# install_dir has been distinguishes cluster from edege, so comments this code
pkg_name
=
${
install_dir
}
-
${
osType
}
-
${
cpuType
}
pkg_name
=
${
install_dir
}
-
${
osType
}
-
${
cpuType
}
...
@@ -195,6 +195,15 @@ if [ "$pagMode" == "lite" ]; then
...
@@ -195,6 +195,15 @@ if [ "$pagMode" == "lite" ]; then
pkg_name
=
${
pkg_name
}
-Lite
pkg_name
=
${
pkg_name
}
-Lite
fi
fi
if
[
"
$verType
"
==
"beta"
]
;
then
pkg_name
=
${
pkg_name
}
-
${
verType
}
elif
[
"
$verType
"
==
"stable"
]
;
then
pkg_name
=
${
pkg_name
}
else
echo
"unknow verType, nor stable or beta"
exit
1
fi
if
[
"
$osType
"
!=
"Darwin"
]
;
then
if
[
"
$osType
"
!=
"Darwin"
]
;
then
tar
-zcv
-f
"
$(
basename
${
pkg_name
}
)
.tar.gz"
$(
basename
${
install_dir
}
)
--remove-files
||
:
tar
-zcv
-f
"
$(
basename
${
pkg_name
}
)
.tar.gz"
$(
basename
${
install_dir
}
)
--remove-files
||
:
else
else
...
...
packaging/tools/makeclient_power.sh
浏览文件 @
210bee6b
...
@@ -41,10 +41,10 @@ fi
...
@@ -41,10 +41,10 @@ fi
if
[
"
$osType
"
!=
"Darwin"
]
;
then
if
[
"
$osType
"
!=
"Darwin"
]
;
then
# if [ "$pagMode" == "lite" ]; then
# if [ "$pagMode" == "lite" ]; then
# strip ${build_dir}/bin/powerd
# strip ${build_dir}/bin/powerd
# strip ${build_dir}/bin/power
# strip ${build_dir}/bin/power
# bin_files="${build_dir}/bin/power ${script_dir}/remove_client_power.sh"
# bin_files="${build_dir}/bin/power ${script_dir}/remove_client_power.sh"
# else
# else
# bin_files="${build_dir}/bin/power ${build_dir}/bin/powerdemo ${script_dir}/remove_client_power.sh ${script_dir}/set_core.sh"
# bin_files="${build_dir}/bin/power ${build_dir}/bin/powerdemo ${script_dir}/remove_client_power.sh ${script_dir}/set_core.sh"
# fi
# fi
lib_files
=
"
${
build_dir
}
/lib/libtaos.so.
${
version
}
"
lib_files
=
"
${
build_dir
}
/lib/libtaos.so.
${
version
}
"
...
@@ -67,6 +67,39 @@ mkdir -p ${install_dir}
...
@@ -67,6 +67,39 @@ mkdir -p ${install_dir}
mkdir
-p
${
install_dir
}
/inc
&&
cp
${
header_files
}
${
install_dir
}
/inc
mkdir
-p
${
install_dir
}
/inc
&&
cp
${
header_files
}
${
install_dir
}
/inc
mkdir
-p
${
install_dir
}
/cfg
&&
cp
${
cfg_dir
}
/taos.cfg
${
install_dir
}
/cfg/taos.cfg
mkdir
-p
${
install_dir
}
/cfg
&&
cp
${
cfg_dir
}
/taos.cfg
${
install_dir
}
/cfg/taos.cfg
if
[
-f
${
build_dir
}
/bin/jemalloc-config
]
;
then
mkdir
-p
${
install_dir
}
/jemalloc/
{
bin,lib,lib/pkgconfig,include/jemalloc,share/doc/jemalloc,share/man/man3
}
cp
${
build_dir
}
/bin/jemalloc-config
${
install_dir
}
/jemalloc/bin
if
[
-f
${
build_dir
}
/bin/jemalloc.sh
]
;
then
cp
${
build_dir
}
/bin/jemalloc.sh
${
install_dir
}
/jemalloc/bin
fi
if
[
-f
${
build_dir
}
/bin/jeprof
]
;
then
cp
${
build_dir
}
/bin/jeprof
${
install_dir
}
/jemalloc/bin
fi
if
[
-f
${
build_dir
}
/include/jemalloc/jemalloc.h
]
;
then
cp
${
build_dir
}
/include/jemalloc/jemalloc.h
${
install_dir
}
/jemalloc/include/jemalloc
fi
if
[
-f
${
build_dir
}
/lib/libjemalloc.so.2
]
;
then
cp
${
build_dir
}
/lib/libjemalloc.so.2
${
install_dir
}
/jemalloc/lib
ln
-sf
libjemalloc.so.2
${
install_dir
}
/jemalloc/lib/libjemalloc.so
fi
if
[
-f
${
build_dir
}
/lib/libjemalloc.a
]
;
then
cp
${
build_dir
}
/lib/libjemalloc.a
${
install_dir
}
/jemalloc/lib
fi
if
[
-f
${
build_dir
}
/lib/libjemalloc_pic.a
]
;
then
cp
${
build_dir
}
/lib/libjemalloc_pic.a
${
install_dir
}
/jemalloc/lib
fi
if
[
-f
${
build_dir
}
/lib/pkgconfig/jemalloc.pc
]
;
then
cp
${
build_dir
}
/lib/pkgconfig/jemalloc.pc
${
install_dir
}
/jemalloc/lib/pkgconfig
fi
if
[
-f
${
build_dir
}
/share/doc/jemalloc/jemalloc.html
]
;
then
cp
${
build_dir
}
/share/doc/jemalloc/jemalloc.html
${
install_dir
}
/jemalloc/share/doc/jemalloc
fi
if
[
-f
${
build_dir
}
/share/man/man3/jemalloc.3
]
;
then
cp
${
build_dir
}
/share/man/man3/jemalloc.3
${
install_dir
}
/jemalloc/share/man/man3
fi
fi
sed
-i
'/dataDir/ {s/taos/power/g}'
${
install_dir
}
/cfg/taos.cfg
sed
-i
'/dataDir/ {s/taos/power/g}'
${
install_dir
}
/cfg/taos.cfg
sed
-i
'/logDir/ {s/taos/power/g}'
${
install_dir
}
/cfg/taos.cfg
sed
-i
'/logDir/ {s/taos/power/g}'
${
install_dir
}
/cfg/taos.cfg
sed
-i
"s/TDengine/PowerDB/g"
${
install_dir
}
/cfg/taos.cfg
sed
-i
"s/TDengine/PowerDB/g"
${
install_dir
}
/cfg/taos.cfg
...
@@ -77,11 +110,11 @@ if [ "$osType" != "Darwin" ]; then
...
@@ -77,11 +110,11 @@ if [ "$osType" != "Darwin" ]; then
strip
${
build_dir
}
/bin/taos
strip
${
build_dir
}
/bin/taos
cp
${
build_dir
}
/bin/taos
${
install_dir
}
/bin/power
cp
${
build_dir
}
/bin/taos
${
install_dir
}
/bin/power
cp
${
script_dir
}
/remove_power.sh
${
install_dir
}
/bin
cp
${
script_dir
}
/remove_power.sh
${
install_dir
}
/bin
else
else
cp
${
build_dir
}
/bin/taos
${
install_dir
}
/bin/power
cp
${
build_dir
}
/bin/taos
${
install_dir
}
/bin/power
cp
${
script_dir
}
/remove_power.sh
${
install_dir
}
/bin
cp
${
script_dir
}
/remove_power.sh
${
install_dir
}
/bin
cp
${
build_dir
}
/bin/taosdemo
${
install_dir
}
/bin/powerdemo
cp
${
build_dir
}
/bin/taosdemo
${
install_dir
}
/bin/powerdemo
cp
${
build_dir
}
/bin/taosdump
${
install_dir
}
/bin/powerdump
cp
${
build_dir
}
/bin/taosdump
${
install_dir
}
/bin/powerdump
cp
${
script_dir
}
/set_core.sh
${
install_dir
}
/bin
cp
${
script_dir
}
/set_core.sh
${
install_dir
}
/bin
cp
${
script_dir
}
/get_client.sh
${
install_dir
}
/bin
cp
${
script_dir
}
/get_client.sh
${
install_dir
}
/bin
cp
${
script_dir
}
/taosd-dump-cfg.gdb
${
install_dir
}
/bin
cp
${
script_dir
}
/taosd-dump-cfg.gdb
${
install_dir
}
/bin
...
@@ -158,15 +191,15 @@ if [[ "$pagMode" != "lite" ]] && [[ "$cpuType" != "aarch32" ]]; then
...
@@ -158,15 +191,15 @@ if [[ "$pagMode" != "lite" ]] && [[ "$cpuType" != "aarch32" ]]; then
cp
-r
${
examples_dir
}
/JDBC
${
install_dir
}
/examples
cp
-r
${
examples_dir
}
/JDBC
${
install_dir
}
/examples
cp
-r
${
examples_dir
}
/matlab
${
install_dir
}
/examples
cp
-r
${
examples_dir
}
/matlab
${
install_dir
}
/examples
sed
-i
'/password/ {s/taosdata/powerdb/g}'
${
install_dir
}
/examples/matlab/TDengineDemo.m
sed
-i
'/password/ {s/taosdata/powerdb/g}'
${
install_dir
}
/examples/matlab/TDengineDemo.m
cp
-r
${
examples_dir
}
/python
${
install_dir
}
/examples
cp
-r
${
examples_dir
}
/python
${
install_dir
}
/examples
sed
-i
'/password/ {s/taosdata/powerdb/g}'
${
install_dir
}
/examples/python/read_example.py
sed
-i
'/password/ {s/taosdata/powerdb/g}'
${
install_dir
}
/examples/python/read_example.py
cp
-r
${
examples_dir
}
/R
${
install_dir
}
/examples
cp
-r
${
examples_dir
}
/R
${
install_dir
}
/examples
sed
-i
'/password/ {s/taosdata/powerdb/g}'
${
install_dir
}
/examples/R/command.txt
sed
-i
'/password/ {s/taosdata/powerdb/g}'
${
install_dir
}
/examples/R/command.txt
cp
-r
${
examples_dir
}
/go
${
install_dir
}
/examples
cp
-r
${
examples_dir
}
/go
${
install_dir
}
/examples
sed
-i
'/root/ {s/taosdata/powerdb/g}'
${
install_dir
}
/examples/go/taosdemo.go
sed
-i
'/root/ {s/taosdata/powerdb/g}'
${
install_dir
}
/examples/go/taosdemo.go
fi
fi
# Copy driver
# Copy driver
mkdir
-p
${
install_dir
}
/driver
mkdir
-p
${
install_dir
}
/driver
cp
${
lib_files
}
${
install_dir
}
/driver
cp
${
lib_files
}
${
install_dir
}
/driver
# Copy connector
# Copy connector
...
@@ -188,11 +221,11 @@ if [[ "$pagMode" != "lite" ]] && [[ "$cpuType" != "aarch32" ]]; then
...
@@ -188,11 +221,11 @@ if [[ "$pagMode" != "lite" ]] && [[ "$cpuType" != "aarch32" ]]; then
echo
"WARNING: go connector not found, please check if want to use it!"
echo
"WARNING: go connector not found, please check if want to use it!"
fi
fi
cp
-r
${
connector_dir
}
/python
${
install_dir
}
/connector
cp
-r
${
connector_dir
}
/python
${
install_dir
}
/connector
sed
-i
'/password/ {s/taosdata/powerdb/g}'
${
install_dir
}
/connector/python/taos/cinterface.py
sed
-i
'/password/ {s/taosdata/powerdb/g}'
${
install_dir
}
/connector/python/taos/cinterface.py
sed
-i
'/password/ {s/taosdata/powerdb/g}'
${
install_dir
}
/connector/python/taos/subscription.py
sed
-i
'/password/ {s/taosdata/powerdb/g}'
${
install_dir
}
/connector/python/taos/subscription.py
sed
-i
'/self._password/ {s/taosdata/powerdb/g}'
${
install_dir
}
/connector/python/taos/connection.py
sed
-i
'/self._password/ {s/taosdata/powerdb/g}'
${
install_dir
}
/connector/python/taos/connection.py
fi
fi
# Copy release note
# Copy release note
...
@@ -200,7 +233,7 @@ fi
...
@@ -200,7 +233,7 @@ fi
# exit 1
# exit 1
cd
${
release_dir
}
cd
${
release_dir
}
if
[
"
$verMode
"
==
"cluster"
]
;
then
if
[
"
$verMode
"
==
"cluster"
]
;
then
pkg_name
=
${
install_dir
}
-
${
osType
}
-
${
cpuType
}
pkg_name
=
${
install_dir
}
-
${
osType
}
-
${
cpuType
}
...
@@ -217,8 +250,8 @@ fi
...
@@ -217,8 +250,8 @@ fi
if
[
"
$verType
"
==
"beta"
]
;
then
if
[
"
$verType
"
==
"beta"
]
;
then
pkg_name
=
${
pkg_name
}
-
${
verType
}
pkg_name
=
${
pkg_name
}
-
${
verType
}
elif
[
"
$verType
"
==
"stable"
]
;
then
elif
[
"
$verType
"
==
"stable"
]
;
then
pkg_name
=
${
pkg_name
}
pkg_name
=
${
pkg_name
}
else
else
echo
"unknow verType, nor stable or beta"
echo
"unknow verType, nor stable or beta"
exit
1
exit
1
...
...
src/client/inc/tscUtil.h
浏览文件 @
210bee6b
...
@@ -94,11 +94,22 @@ typedef struct SVgroupTableInfo {
...
@@ -94,11 +94,22 @@ typedef struct SVgroupTableInfo {
SArray
*
itemList
;
// SArray<STableIdInfo>
SArray
*
itemList
;
// SArray<STableIdInfo>
}
SVgroupTableInfo
;
}
SVgroupTableInfo
;
typedef
struct
SBlockKeyTuple
{
TSKEY
skey
;
void
*
payloadAddr
;
}
SBlockKeyTuple
;
typedef
struct
SBlockKeyInfo
{
int32_t
maxBytesAlloc
;
SBlockKeyTuple
*
pKeyTuple
;
}
SBlockKeyInfo
;
int32_t
converToStr
(
char
*
str
,
int
type
,
void
*
buf
,
int32_t
bufSize
,
int32_t
*
len
);
int32_t
converToStr
(
char
*
str
,
int
type
,
void
*
buf
,
int32_t
bufSize
,
int32_t
*
len
);
int32_t
tscCreateDataBlock
(
size_t
initialSize
,
int32_t
rowSize
,
int32_t
startOffset
,
SName
*
name
,
STableMeta
*
pTableMeta
,
STableDataBlocks
**
dataBlocks
);
int32_t
tscCreateDataBlock
(
size_t
initialSize
,
int32_t
rowSize
,
int32_t
startOffset
,
SName
*
name
,
STableMeta
*
pTableMeta
,
STableDataBlocks
**
dataBlocks
);
void
tscDestroyDataBlock
(
STableDataBlocks
*
pDataBlock
,
bool
removeMeta
);
void
tscDestroyDataBlock
(
STableDataBlocks
*
pDataBlock
,
bool
removeMeta
);
void
tscSortRemoveDataBlockDupRows
(
STableDataBlocks
*
dataBuf
);
void
tscSortRemoveDataBlockDupRowsRaw
(
STableDataBlocks
*
dataBuf
);
int
tscSortRemoveDataBlockDupRows
(
STableDataBlocks
*
dataBuf
,
SBlockKeyInfo
*
pBlkKeyInfo
);
void
tscDestroyBoundColumnInfo
(
SParsedDataColInfo
*
pColInfo
);
void
tscDestroyBoundColumnInfo
(
SParsedDataColInfo
*
pColInfo
);
void
doRetrieveSubqueryData
(
SSchedMsg
*
pMsg
);
void
doRetrieveSubqueryData
(
SSchedMsg
*
pMsg
);
...
...
src/client/inc/tsclient.h
浏览文件 @
210bee6b
...
@@ -88,13 +88,43 @@ typedef struct SBoundColumn {
...
@@ -88,13 +88,43 @@ typedef struct SBoundColumn {
int32_t
offset
;
// all column offset value
int32_t
offset
;
// all column offset value
}
SBoundColumn
;
}
SBoundColumn
;
typedef
struct
{
uint16_t
schemaColIdx
;
uint16_t
boundIdx
;
uint16_t
finalIdx
;
}
SBoundIdxInfo
;
typedef
enum
_COL_ORDER_STATUS
{
ORDER_STATUS_UNKNOWN
=
0
,
ORDER_STATUS_ORDERED
=
1
,
ORDER_STATUS_DISORDERED
=
2
,
}
EOrderStatus
;
typedef
struct
SParsedDataColInfo
{
typedef
struct
SParsedDataColInfo
{
int16_t
numOfCols
;
int16_t
numOfCols
;
int16_t
numOfBound
;
int16_t
numOfBound
;
int32_t
*
boundedColumns
;
int32_t
*
boundedColumns
;
// bounded column idx according to schema
SBoundColumn
*
cols
;
SBoundColumn
*
cols
;
SBoundIdxInfo
*
colIdxInfo
;
int8_t
orderStatus
;
// bounded columns:
}
SParsedDataColInfo
;
}
SParsedDataColInfo
;
#define IS_DATA_COL_ORDERED(s) ((s) == (int8_t)ORDER_STATUS_ORDERED)
typedef
struct
{
SSchema
*
pSchema
;
int16_t
sversion
;
int32_t
flen
;
uint16_t
nCols
;
void
*
buf
;
void
*
pDataBlock
;
SSubmitBlk
*
pSubmitBlk
;
}
SMemRowBuilder
;
typedef
struct
{
TDRowLenT
allNullLen
;
}
SMemRowHelper
;
typedef
struct
STableDataBlocks
{
typedef
struct
STableDataBlocks
{
SName
tableName
;
SName
tableName
;
int8_t
tsSource
;
// where does the UNIX timestamp come from, server or client
int8_t
tsSource
;
// where does the UNIX timestamp come from, server or client
...
@@ -109,12 +139,13 @@ typedef struct STableDataBlocks {
...
@@ -109,12 +139,13 @@ typedef struct STableDataBlocks {
STableMeta
*
pTableMeta
;
// the tableMeta of current table, the table meta will be used during submit, keep a ref to avoid to be removed from cache
STableMeta
*
pTableMeta
;
// the tableMeta of current table, the table meta will be used during submit, keep a ref to avoid to be removed from cache
char
*
pData
;
char
*
pData
;
SParsedDataColInfo
boundColumnInfo
;
SParsedDataColInfo
boundColumnInfo
;
// for parameter ('?') binding
// for parameter ('?') binding
uint32_t
numOfAllocedParams
;
uint32_t
numOfAllocedParams
;
uint32_t
numOfParams
;
uint32_t
numOfParams
;
SParamInfo
*
params
;
SParamInfo
*
params
;
SMemRowHelper
rowHelper
;
}
STableDataBlocks
;
}
STableDataBlocks
;
typedef
struct
{
typedef
struct
{
...
@@ -128,6 +159,7 @@ typedef struct SInsertStatementParam {
...
@@ -128,6 +159,7 @@ typedef struct SInsertStatementParam {
SHashObj
*
pTableBlockHashList
;
// data block for each table
SHashObj
*
pTableBlockHashList
;
// data block for each table
SArray
*
pDataBlocks
;
// SArray<STableDataBlocks*>. Merged submit block for each vgroup
SArray
*
pDataBlocks
;
// SArray<STableDataBlocks*>. Merged submit block for each vgroup
int8_t
schemaAttached
;
// denote if submit block is built with table schema or not
int8_t
schemaAttached
;
// denote if submit block is built with table schema or not
uint8_t
payloadType
;
// EPayloadType. 0: K-V payload for non-prepare insert, 1: rawPayload for prepare insert
STagData
tagData
;
// NOTE: pTagData->data is used as a variant length array
STagData
tagData
;
// NOTE: pTagData->data is used as a variant length array
int32_t
batchSize
;
// for parameter ('?') binding and batch processing
int32_t
batchSize
;
// for parameter ('?') binding and batch processing
...
@@ -139,6 +171,14 @@ typedef struct SInsertStatementParam {
...
@@ -139,6 +171,14 @@ typedef struct SInsertStatementParam {
char
*
sql
;
// current sql statement position
char
*
sql
;
// current sql statement position
}
SInsertStatementParam
;
}
SInsertStatementParam
;
typedef
enum
{
PAYLOAD_TYPE_KV
=
0
,
PAYLOAD_TYPE_RAW
=
1
,
}
EPayloadType
;
#define IS_RAW_PAYLOAD(t) \
(((int)(t)) == PAYLOAD_TYPE_RAW) // 0: K-V payload for non-prepare insert, 1: rawPayload for prepare insert
// TODO extract sql parser supporter
// TODO extract sql parser supporter
typedef
struct
{
typedef
struct
{
int
command
;
int
command
;
...
@@ -243,6 +283,7 @@ typedef struct SSqlObj {
...
@@ -243,6 +283,7 @@ typedef struct SSqlObj {
void
*
pStream
;
void
*
pStream
;
void
*
pSubscription
;
void
*
pSubscription
;
char
*
sqlstr
;
char
*
sqlstr
;
void
*
pBuf
;
// table meta buffer
char
parseRetry
;
char
parseRetry
;
char
retry
;
char
retry
;
char
maxRetry
;
char
maxRetry
;
...
@@ -382,12 +423,17 @@ extern int tscRefId;
...
@@ -382,12 +423,17 @@ extern int tscRefId;
extern
int
tscNumOfObj
;
// number of existed sqlObj in current process.
extern
int
tscNumOfObj
;
// number of existed sqlObj in current process.
extern
int
(
*
tscBuildMsg
[
TSDB_SQL_MAX
])(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
);
extern
int
(
*
tscBuildMsg
[
TSDB_SQL_MAX
])(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
);
void
tscBuildVgroupTableInfo
(
SSqlObj
*
pSql
,
STableMetaInfo
*
pTableMetaInfo
,
SArray
*
tables
);
void
tscBuildVgroupTableInfo
(
SSqlObj
*
pSql
,
STableMetaInfo
*
pTableMetaInfo
,
SArray
*
tables
);
int16_t
getNewResColId
(
SSqlCmd
*
pCmd
);
int16_t
getNewResColId
(
SSqlCmd
*
pCmd
);
int32_t
schemaIdxCompar
(
const
void
*
lhs
,
const
void
*
rhs
);
int32_t
boundIdxCompar
(
const
void
*
lhs
,
const
void
*
rhs
);
int
initSMemRowHelper
(
SMemRowHelper
*
pHelper
,
SSchema
*
pSSchema
,
uint16_t
nCols
,
uint16_t
allNullColsLen
);
int32_t
getExtendedRowSize
(
STableComInfo
*
tinfo
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
#endif
#endif
\ No newline at end of file
src/client/src/taos.def
浏览文件 @
210bee6b
...
@@ -7,11 +7,16 @@ taos_connect_auth
...
@@ -7,11 +7,16 @@ taos_connect_auth
taos_close
taos_close
taos_stmt_init
taos_stmt_init
taos_stmt_prepare
taos_stmt_prepare
taos_stmt_set_tbname_tags
taos_stmt_set_tbname
taos_stmt_is_insert
taos_stmt_num_params
taos_stmt_bind_param
taos_stmt_bind_param
taos_stmt_add_batch
taos_stmt_add_batch
taos_stmt_execute
taos_stmt_execute
taos_stmt_use_result
taos_stmt_use_result
taos_stmt_close
taos_stmt_close
taos_stmt_errstr
taos_query
taos_query
taos_fetch_row
taos_fetch_row
taos_result_precision
taos_result_precision
...
@@ -37,6 +42,4 @@ taos_consume
...
@@ -37,6 +42,4 @@ taos_consume
taos_unsubscribe
taos_unsubscribe
taos_open_stream
taos_open_stream
taos_close_stream
taos_close_stream
taos_fetch_block
taos_load_table_info
taos_load_table_info
src/client/src/tscParseInsert.c
浏览文件 @
210bee6b
此差异已折叠。
点击以展开。
src/client/src/tscPrepare.c
浏览文件 @
210bee6b
...
@@ -1806,6 +1806,7 @@ int taos_stmt_execute(TAOS_STMT* stmt) {
...
@@ -1806,6 +1806,7 @@ int taos_stmt_execute(TAOS_STMT* stmt) {
pStmt
->
last
=
STMT_EXECUTE
;
pStmt
->
last
=
STMT_EXECUTE
;
pStmt
->
pSql
->
cmd
.
insertParam
.
payloadType
=
PAYLOAD_TYPE_RAW
;
if
(
pStmt
->
multiTbInsert
)
{
if
(
pStmt
->
multiTbInsert
)
{
ret
=
insertBatchStmtExecute
(
pStmt
);
ret
=
insertBatchStmtExecute
(
pStmt
);
}
else
{
}
else
{
...
...
src/client/src/tscSQLParser.c
浏览文件 @
210bee6b
...
@@ -1396,12 +1396,16 @@ static bool validateTableColumnInfo(SArray* pFieldList, SSqlCmd* pCmd) {
...
@@ -1396,12 +1396,16 @@ static bool validateTableColumnInfo(SArray* pFieldList, SSqlCmd* pCmd) {
const
char
*
msg4
=
"invalid data type"
;
const
char
*
msg4
=
"invalid data type"
;
const
char
*
msg5
=
"invalid binary/nchar column length"
;
const
char
*
msg5
=
"invalid binary/nchar column length"
;
const
char
*
msg6
=
"invalid column name"
;
const
char
*
msg6
=
"invalid column name"
;
const
char
*
msg7
=
"too many columns"
;
// number of fields no less than 2
// number of fields no less than 2
size_t
numOfCols
=
taosArrayGetSize
(
pFieldList
);
size_t
numOfCols
=
taosArrayGetSize
(
pFieldList
);
if
(
numOfCols
<=
1
||
numOfCols
>
TSDB_MAX_COLUMNS
)
{
if
(
numOfCols
<=
1
)
{
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg
);
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg
);
return
false
;
return
false
;
}
else
if
(
numOfCols
>
TSDB_MAX_COLUMNS
)
{
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg7
);
return
false
;
}
}
// first column must be timestamp
// first column must be timestamp
...
@@ -1536,13 +1540,20 @@ bool validateOneTags(SSqlCmd* pCmd, TAOS_FIELD* pTagField) {
...
@@ -1536,13 +1540,20 @@ bool validateOneTags(SSqlCmd* pCmd, TAOS_FIELD* pTagField) {
const
char
*
msg4
=
"invalid tag name"
;
const
char
*
msg4
=
"invalid tag name"
;
const
char
*
msg5
=
"invalid binary/nchar tag length"
;
const
char
*
msg5
=
"invalid binary/nchar tag length"
;
const
char
*
msg6
=
"invalid data type in tags"
;
const
char
*
msg6
=
"invalid data type in tags"
;
const
char
*
msg7
=
"too many columns"
;
STableMetaInfo
*
pTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
pCmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
pCmd
,
0
);
STableMeta
*
pTableMeta
=
pTableMetaInfo
->
pTableMeta
;
STableMeta
*
pTableMeta
=
pTableMetaInfo
->
pTableMeta
;
int32_t
numOfTags
=
tscGetNumOfTags
(
pTableMeta
);
int32_t
numOfTags
=
tscGetNumOfTags
(
pTableMeta
);
int32_t
numOfCols
=
tscGetNumOfColumns
(
pTableMeta
);
int32_t
numOfCols
=
tscGetNumOfColumns
(
pTableMeta
);
// no more max columns
if
(
numOfTags
+
numOfCols
>=
TSDB_MAX_COLUMNS
)
{
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg7
);
return
false
;
}
// no more than 6 tags
// no more than 6 tags
if
(
numOfTags
==
TSDB_MAX_TAGS
)
{
if
(
numOfTags
==
TSDB_MAX_TAGS
)
{
char
msg
[
128
]
=
{
0
};
char
msg
[
128
]
=
{
0
};
...
@@ -5999,6 +6010,16 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -5999,6 +6010,16 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
return
invalidOperationMsg
(
pMsg
,
msg22
);
return
invalidOperationMsg
(
pMsg
,
msg22
);
}
}
SSchema
*
pSchema
=
(
SSchema
*
)
pTableMetaInfo
->
pTableMeta
->
schema
;
int16_t
numOfColumns
=
pTableMetaInfo
->
pTableMeta
->
tableInfo
.
numOfColumns
;
int16_t
i
;
uint32_t
nLen
=
0
;
for
(
i
=
0
;
i
<
numOfColumns
;
++
i
)
{
nLen
+=
pSchema
[
i
].
colId
!=
columnIndex
.
columnIndex
?
pSchema
[
i
].
bytes
:
pItem
->
bytes
;
}
if
(
nLen
>=
TSDB_MAX_BYTES_PER_ROW
)
{
return
invalidOperationMsg
(
pMsg
,
msg24
);
}
TAOS_FIELD
f
=
tscCreateField
(
pColSchema
->
type
,
name
.
z
,
pItem
->
bytes
);
TAOS_FIELD
f
=
tscCreateField
(
pColSchema
->
type
,
name
.
z
,
pItem
->
bytes
);
tscFieldInfoAppend
(
&
pQueryInfo
->
fieldsInfo
,
&
f
);
tscFieldInfoAppend
(
&
pQueryInfo
->
fieldsInfo
,
&
f
);
}
else
if
(
pAlterSQL
->
type
==
TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN
)
{
}
else
if
(
pAlterSQL
->
type
==
TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN
)
{
...
@@ -6040,6 +6061,17 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -6040,6 +6061,17 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
return
invalidOperationMsg
(
pMsg
,
msg22
);
return
invalidOperationMsg
(
pMsg
,
msg22
);
}
}
SSchema
*
pSchema
=
(
SSchema
*
)
pTableMetaInfo
->
pTableMeta
->
schema
;
int16_t
numOfColumns
=
pTableMetaInfo
->
pTableMeta
->
tableInfo
.
numOfColumns
;
int16_t
i
;
uint32_t
nLen
=
0
;
for
(
i
=
0
;
i
<
numOfColumns
;
++
i
)
{
nLen
+=
pSchema
[
i
].
colId
!=
columnIndex
.
columnIndex
?
pSchema
[
i
].
bytes
:
pItem
->
bytes
;
}
if
(
nLen
>=
TSDB_MAX_BYTES_PER_ROW
)
{
return
invalidOperationMsg
(
pMsg
,
msg24
);
}
TAOS_FIELD
f
=
tscCreateField
(
pColSchema
->
type
,
name
.
z
,
pItem
->
bytes
);
TAOS_FIELD
f
=
tscCreateField
(
pColSchema
->
type
,
name
.
z
,
pItem
->
bytes
);
tscFieldInfoAppend
(
&
pQueryInfo
->
fieldsInfo
,
&
f
);
tscFieldInfoAppend
(
&
pQueryInfo
->
fieldsInfo
,
&
f
);
}
}
...
@@ -8070,8 +8102,12 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -8070,8 +8102,12 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) {
uint32_t
maxSize
=
tscGetTableMetaMaxSize
();
uint32_t
maxSize
=
tscGetTableMetaMaxSize
();
char
name
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
char
name
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
char
buf
[
80
*
1024
]
=
{
0
};
assert
(
maxSize
<
80
*
TSDB_MAX_COLUMNS
);
assert
(
maxSize
<
80
*
1024
);
if
(
!
pSql
->
pBuf
)
{
if
(
NULL
==
(
pSql
->
pBuf
=
tcalloc
(
1
,
80
*
TSDB_MAX_COLUMNS
)))
{
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
}
pTableMeta
=
calloc
(
1
,
maxSize
);
pTableMeta
=
calloc
(
1
,
maxSize
);
plist
=
taosArrayInit
(
4
,
POINTER_BYTES
);
plist
=
taosArrayInit
(
4
,
POINTER_BYTES
);
...
@@ -8091,7 +8127,7 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -8091,7 +8127,7 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) {
if
(
pTableMeta
->
id
.
uid
>
0
)
{
if
(
pTableMeta
->
id
.
uid
>
0
)
{
if
(
pTableMeta
->
tableType
==
TSDB_CHILD_TABLE
)
{
if
(
pTableMeta
->
tableType
==
TSDB_CHILD_TABLE
)
{
code
=
tscCreateTableMetaFromSTableMeta
(
pTableMeta
,
name
,
b
uf
);
code
=
tscCreateTableMetaFromSTableMeta
(
pTableMeta
,
name
,
pSql
->
pB
uf
);
// create the child table meta from super table failed, try load it from mnode
// create the child table meta from super table failed, try load it from mnode
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
...
@@ -8287,7 +8323,9 @@ static int32_t doValidateSubquery(SSqlNode* pSqlNode, int32_t index, SSqlObj* pS
...
@@ -8287,7 +8323,9 @@ static int32_t doValidateSubquery(SSqlNode* pSqlNode, int32_t index, SSqlObj* pS
// union all is not support currently
// union all is not support currently
SSqlNode
*
p
=
taosArrayGetP
(
subInfo
->
pSubquery
,
0
);
SSqlNode
*
p
=
taosArrayGetP
(
subInfo
->
pSubquery
,
0
);
if
(
taosArrayGetSize
(
subInfo
->
pSubquery
)
>=
2
)
{
return
invalidOperationMsg
(
msgBuf
,
"not support union in subquery"
);
}
SQueryInfo
*
pSub
=
calloc
(
1
,
sizeof
(
SQueryInfo
));
SQueryInfo
*
pSub
=
calloc
(
1
,
sizeof
(
SQueryInfo
));
tscInitQueryInfo
(
pSub
);
tscInitQueryInfo
(
pSub
);
...
...
src/client/src/tscServer.c
浏览文件 @
210bee6b
...
@@ -2804,22 +2804,24 @@ int32_t tscGetTableMetaImpl(SSqlObj* pSql, STableMetaInfo *pTableMetaInfo, bool
...
@@ -2804,22 +2804,24 @@ int32_t tscGetTableMetaImpl(SSqlObj* pSql, STableMetaInfo *pTableMetaInfo, bool
taosHashGetClone
(
tscTableMetaInfo
,
name
,
len
,
NULL
,
pTableMetaInfo
->
pTableMeta
,
-
1
);
taosHashGetClone
(
tscTableMetaInfo
,
name
,
len
,
NULL
,
pTableMetaInfo
->
pTableMeta
,
-
1
);
// TODO resize the tableMeta
// TODO resize the tableMeta
char
buf
[
80
*
1024
]
=
{
0
};
assert
(
size
<
80
*
TSDB_MAX_COLUMNS
);
assert
(
size
<
80
*
1024
);
if
(
!
pSql
->
pBuf
)
{
if
(
NULL
==
(
pSql
->
pBuf
=
tcalloc
(
1
,
80
*
TSDB_MAX_COLUMNS
)))
{
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
}
STableMeta
*
pMeta
=
pTableMetaInfo
->
pTableMeta
;
STableMeta
*
pMeta
=
pTableMetaInfo
->
pTableMeta
;
if
(
pMeta
->
id
.
uid
>
0
)
{
if
(
pMeta
->
id
.
uid
>
0
)
{
// in case of child table, here only get the
// in case of child table, here only get the
if
(
pMeta
->
tableType
==
TSDB_CHILD_TABLE
)
{
if
(
pMeta
->
tableType
==
TSDB_CHILD_TABLE
)
{
int32_t
code
=
tscCreateTableMetaFromSTableMeta
(
pTableMetaInfo
->
pTableMeta
,
name
,
b
uf
);
int32_t
code
=
tscCreateTableMetaFromSTableMeta
(
pTableMetaInfo
->
pTableMeta
,
name
,
pSql
->
pB
uf
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
getTableMetaFromMnode
(
pSql
,
pTableMetaInfo
,
autocreate
);
return
getTableMetaFromMnode
(
pSql
,
pTableMetaInfo
,
autocreate
);
}
}
}
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
return
getTableMetaFromMnode
(
pSql
,
pTableMetaInfo
,
autocreate
);
return
getTableMetaFromMnode
(
pSql
,
pTableMetaInfo
,
autocreate
);
}
}
...
@@ -2934,7 +2936,6 @@ int tscGetSTableVgroupInfo(SSqlObj *pSql, SQueryInfo* pQueryInfo) {
...
@@ -2934,7 +2936,6 @@ int tscGetSTableVgroupInfo(SSqlObj *pSql, SQueryInfo* pQueryInfo) {
if
(
allVgroupInfoRetrieved
(
pQueryInfo
))
{
if
(
allVgroupInfoRetrieved
(
pQueryInfo
))
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
SSqlObj
*
pNew
=
calloc
(
1
,
sizeof
(
SSqlObj
));
SSqlObj
*
pNew
=
calloc
(
1
,
sizeof
(
SSqlObj
));
pNew
->
pTscObj
=
pSql
->
pTscObj
;
pNew
->
pTscObj
=
pSql
->
pTscObj
;
pNew
->
signature
=
pNew
;
pNew
->
signature
=
pNew
;
...
...
src/client/src/tscSubquery.c
浏览文件 @
210bee6b
...
@@ -712,6 +712,15 @@ static void updateQueryTimeRange(SQueryInfo* pQueryInfo, STimeWindow* win) {
...
@@ -712,6 +712,15 @@ static void updateQueryTimeRange(SQueryInfo* pQueryInfo, STimeWindow* win) {
pQueryInfo
->
window
=
*
win
;
pQueryInfo
->
window
=
*
win
;
}
}
int32_t
tagValCompar
(
const
void
*
p1
,
const
void
*
p2
)
{
const
STidTags
*
t1
=
(
const
STidTags
*
)
varDataVal
(
p1
);
const
STidTags
*
t2
=
(
const
STidTags
*
)
varDataVal
(
p2
);
__compar_fn_t
func
=
getComparFunc
(
t1
->
padding
,
0
);
return
func
(
t1
->
tag
,
t2
->
tag
);
}
int32_t
tidTagsCompar
(
const
void
*
p1
,
const
void
*
p2
)
{
int32_t
tidTagsCompar
(
const
void
*
p1
,
const
void
*
p2
)
{
const
STidTags
*
t1
=
(
const
STidTags
*
)
(
p1
);
const
STidTags
*
t1
=
(
const
STidTags
*
)
(
p1
);
const
STidTags
*
t2
=
(
const
STidTags
*
)
(
p2
);
const
STidTags
*
t2
=
(
const
STidTags
*
)
(
p2
);
...
@@ -720,28 +729,7 @@ int32_t tidTagsCompar(const void* p1, const void* p2) {
...
@@ -720,28 +729,7 @@ int32_t tidTagsCompar(const void* p1, const void* p2) {
return
(
t1
->
vgId
>
t2
->
vgId
)
?
1
:
-
1
;
return
(
t1
->
vgId
>
t2
->
vgId
)
?
1
:
-
1
;
}
}
tstr
*
tag1
=
(
tstr
*
)
t1
->
tag
;
return
tagValCompar
(
p1
,
p2
);
tstr
*
tag2
=
(
tstr
*
)
t2
->
tag
;
if
(
tag1
->
len
!=
tag2
->
len
)
{
return
(
tag1
->
len
>
tag2
->
len
)
?
1
:
-
1
;
}
return
strncmp
(
tag1
->
data
,
tag2
->
data
,
tag1
->
len
);
}
int32_t
tagValCompar
(
const
void
*
p1
,
const
void
*
p2
)
{
const
STidTags
*
t1
=
(
const
STidTags
*
)
varDataVal
(
p1
);
const
STidTags
*
t2
=
(
const
STidTags
*
)
varDataVal
(
p2
);
tstr
*
tag1
=
(
tstr
*
)
t1
->
tag
;
tstr
*
tag2
=
(
tstr
*
)
t2
->
tag
;
if
(
tag1
->
len
!=
tag2
->
len
)
{
return
(
tag1
->
len
>
tag2
->
len
)
?
1
:
-
1
;
}
return
memcmp
(
tag1
->
data
,
tag2
->
data
,
tag1
->
len
);
}
}
void
tscBuildVgroupTableInfo
(
SSqlObj
*
pSql
,
STableMetaInfo
*
pTableMetaInfo
,
SArray
*
tables
)
{
void
tscBuildVgroupTableInfo
(
SSqlObj
*
pSql
,
STableMetaInfo
*
pTableMetaInfo
,
SArray
*
tables
)
{
...
@@ -871,6 +859,12 @@ static bool checkForDuplicateTagVal(SSchema* pColSchema, SJoinSupporter* p1, SSq
...
@@ -871,6 +859,12 @@ static bool checkForDuplicateTagVal(SSchema* pColSchema, SJoinSupporter* p1, SSq
return
true
;
return
true
;
}
}
static
void
setTidTagType
(
SJoinSupporter
*
p
,
uint8_t
type
)
{
for
(
int32_t
i
=
0
;
i
<
p
->
num
;
++
i
)
{
STidTags
*
tag
=
(
STidTags
*
)
varDataVal
(
p
->
pIdTagList
+
i
*
p
->
tagSize
);
tag
->
padding
=
type
;
}
}
static
int32_t
getIntersectionOfTableTuple
(
SQueryInfo
*
pQueryInfo
,
SSqlObj
*
pParentSql
,
SArray
*
resList
)
{
static
int32_t
getIntersectionOfTableTuple
(
SQueryInfo
*
pQueryInfo
,
SSqlObj
*
pParentSql
,
SArray
*
resList
)
{
int16_t
joinNum
=
pParentSql
->
subState
.
numOfSub
;
int16_t
joinNum
=
pParentSql
->
subState
.
numOfSub
;
...
@@ -890,6 +884,8 @@ static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pPar
...
@@ -890,6 +884,8 @@ static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pPar
for
(
int32_t
i
=
0
;
i
<
joinNum
;
i
++
)
{
for
(
int32_t
i
=
0
;
i
<
joinNum
;
i
++
)
{
SJoinSupporter
*
p
=
pParentSql
->
pSubs
[
i
]
->
param
;
SJoinSupporter
*
p
=
pParentSql
->
pSubs
[
i
]
->
param
;
setTidTagType
(
p
,
pColSchema
->
type
);
ctxlist
[
i
].
p
=
p
;
ctxlist
[
i
].
p
=
p
;
ctxlist
[
i
].
res
=
taosArrayInit
(
p
->
num
,
size
);
ctxlist
[
i
].
res
=
taosArrayInit
(
p
->
num
,
size
);
...
@@ -2440,9 +2436,9 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
...
@@ -2440,9 +2436,9 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
tOrderDescriptor
*
pDesc
=
NULL
;
tOrderDescriptor
*
pDesc
=
NULL
;
pRes
->
qId
=
0x1
;
// hack the qhandle check
pRes
->
qId
=
0x1
;
// hack the qhandle check
const
uint32_t
nBufferSize
=
(
1u
<<
1
6u
);
// 64
KB
const
uint32_t
nBufferSize
=
(
1u
<<
1
8u
);
// 256
KB
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfo
(
pCmd
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
SSubqueryState
*
pState
=
&
pSql
->
subState
;
SSubqueryState
*
pState
=
&
pSql
->
subState
;
...
...
src/client/src/tscUtil.c
浏览文件 @
210bee6b
...
@@ -1487,6 +1487,7 @@ void tscFreeSqlObj(SSqlObj* pSql) {
...
@@ -1487,6 +1487,7 @@ void tscFreeSqlObj(SSqlObj* pSql) {
pSql
->
signature
=
NULL
;
pSql
->
signature
=
NULL
;
pSql
->
fp
=
NULL
;
pSql
->
fp
=
NULL
;
tfree
(
pSql
->
sqlstr
);
tfree
(
pSql
->
sqlstr
);
tfree
(
pSql
->
pBuf
);
tfree
(
pSql
->
pSubs
);
tfree
(
pSql
->
pSubs
);
pSql
->
subState
.
numOfSub
=
0
;
pSql
->
subState
.
numOfSub
=
0
;
...
@@ -1498,7 +1499,7 @@ void tscFreeSqlObj(SSqlObj* pSql) {
...
@@ -1498,7 +1499,7 @@ void tscFreeSqlObj(SSqlObj* pSql) {
memset
(
pCmd
->
payload
,
0
,
(
size_t
)
pCmd
->
allocSize
);
memset
(
pCmd
->
payload
,
0
,
(
size_t
)
pCmd
->
allocSize
);
tfree
(
pCmd
->
payload
);
tfree
(
pCmd
->
payload
);
pCmd
->
allocSize
=
0
;
pCmd
->
allocSize
=
0
;
tsem_destroy
(
&
pSql
->
rspSem
);
tsem_destroy
(
&
pSql
->
rspSem
);
memset
(
pSql
,
0
,
sizeof
(
*
pSql
));
memset
(
pSql
,
0
,
sizeof
(
*
pSql
));
free
(
pSql
);
free
(
pSql
);
...
@@ -1507,6 +1508,7 @@ void tscFreeSqlObj(SSqlObj* pSql) {
...
@@ -1507,6 +1508,7 @@ void tscFreeSqlObj(SSqlObj* pSql) {
void
tscDestroyBoundColumnInfo
(
SParsedDataColInfo
*
pColInfo
)
{
void
tscDestroyBoundColumnInfo
(
SParsedDataColInfo
*
pColInfo
)
{
tfree
(
pColInfo
->
boundedColumns
);
tfree
(
pColInfo
->
boundedColumns
);
tfree
(
pColInfo
->
cols
);
tfree
(
pColInfo
->
cols
);
tfree
(
pColInfo
->
colIdxInfo
);
}
}
void
tscDestroyDataBlock
(
STableDataBlocks
*
pDataBlock
,
bool
removeMeta
)
{
void
tscDestroyDataBlock
(
STableDataBlocks
*
pDataBlock
,
bool
removeMeta
)
{
...
@@ -1761,11 +1763,108 @@ int32_t tscGetDataBlockFromList(SHashObj* pHashList, int64_t id, int32_t size, i
...
@@ -1761,11 +1763,108 @@ int32_t tscGetDataBlockFromList(SHashObj* pHashList, int64_t id, int32_t size, i
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int
trimDataBlock
(
void
*
pDataBlock
,
STableDataBlocks
*
pTableDataBlock
,
bool
includeSchema
)
{
static
SMemRow
tdGenMemRowFromBuilder
(
SMemRowBuilder
*
pBuilder
)
{
SSchema
*
pSchema
=
pBuilder
->
pSchema
;
char
*
p
=
(
char
*
)
pBuilder
->
buf
;
int
toffset
=
0
;
uint16_t
nCols
=
pBuilder
->
nCols
;
uint8_t
memRowType
=
payloadType
(
p
);
uint16_t
nColsBound
=
payloadNCols
(
p
);
if
(
pBuilder
->
nCols
<=
0
||
nColsBound
<=
0
)
{
return
NULL
;
}
char
*
pVals
=
POINTER_SHIFT
(
p
,
payloadValuesOffset
(
p
));
SMemRow
*
memRow
=
(
SMemRow
)
pBuilder
->
pDataBlock
;
memRowSetType
(
memRow
,
memRowType
);
// ----------------- Raw payload structure for row:
/* |<------------ Head ------------->|<----------- body of column data tuple ------------------->|
* | |<----------------- flen ------------->|<--- value part --->|
* |SMemRowType| dataTLen | nCols | colId | colType | offset | ... | value |...|...|... |
* +-----------+----------+----------+--------------------------------------|--------------------|
* | uint8_t | uint32_t | uint16_t | int16_t | uint8_t | uint16_t | ... |.......|...|...|... |
* +-----------+----------+----------+--------------------------------------+--------------------|
* 1. offset in column data tuple starts from the value part in case of uint16_t overflow.
* 2. dataTLen: total length including the header and body.
*/
if
(
memRowType
==
SMEM_ROW_DATA
)
{
SDataRow
trow
=
(
SDataRow
)
memRowDataBody
(
memRow
);
dataRowSetLen
(
trow
,
(
TDRowLenT
)(
TD_DATA_ROW_HEAD_SIZE
+
pBuilder
->
flen
));
dataRowSetVersion
(
trow
,
pBuilder
->
sversion
);
p
=
(
char
*
)
payloadBody
(
pBuilder
->
buf
);
uint16_t
i
=
0
,
j
=
0
;
while
(
j
<
nCols
)
{
if
(
i
>=
nColsBound
)
{
break
;
}
int16_t
colId
=
payloadColId
(
p
);
if
(
colId
==
pSchema
[
j
].
colId
)
{
// ASSERT(payloadColType(p) == pSchema[j].type);
tdAppendColVal
(
trow
,
POINTER_SHIFT
(
pVals
,
payloadColOffset
(
p
)),
pSchema
[
j
].
type
,
toffset
);
toffset
+=
TYPE_BYTES
[
pSchema
[
j
].
type
];
p
=
payloadNextCol
(
p
);
++
i
;
++
j
;
}
else
if
(
colId
<
pSchema
[
j
].
colId
)
{
p
=
payloadNextCol
(
p
);
++
i
;
}
else
{
tdAppendColVal
(
trow
,
getNullValue
(
pSchema
[
j
].
type
),
pSchema
[
j
].
type
,
toffset
);
toffset
+=
TYPE_BYTES
[
pSchema
[
j
].
type
];
++
j
;
}
}
while
(
j
<
nCols
)
{
tdAppendColVal
(
trow
,
getNullValue
(
pSchema
[
j
].
type
),
pSchema
[
j
].
type
,
toffset
);
toffset
+=
TYPE_BYTES
[
pSchema
[
j
].
type
];
++
j
;
}
#if 0 // no need anymore
while (i < nColsBound) {
p = payloadNextCol(p);
++i;
}
#endif
}
else
if
(
memRowType
==
SMEM_ROW_KV
)
{
SKVRow
kvRow
=
(
SKVRow
)
memRowKvBody
(
memRow
);
kvRowSetLen
(
kvRow
,
(
TDRowLenT
)(
TD_KV_ROW_HEAD_SIZE
+
sizeof
(
SColIdx
)
*
nColsBound
));
kvRowSetNCols
(
kvRow
,
nColsBound
);
memRowSetKvVersion
(
memRow
,
pBuilder
->
sversion
);
p
=
(
char
*
)
payloadBody
(
pBuilder
->
buf
);
int
i
=
0
;
while
(
i
<
nColsBound
)
{
int16_t
colId
=
payloadColId
(
p
);
uint8_t
colType
=
payloadColType
(
p
);
tdAppendKvColVal
(
kvRow
,
POINTER_SHIFT
(
pVals
,
payloadColOffset
(
p
)),
colId
,
colType
,
toffset
);
toffset
+=
sizeof
(
SColIdx
);
p
=
payloadNextCol
(
p
);
++
i
;
}
}
else
{
ASSERT
(
0
);
}
int32_t
rowTLen
=
memRowTLen
(
memRow
);
pBuilder
->
pDataBlock
=
(
char
*
)
pBuilder
->
pDataBlock
+
rowTLen
;
// next row
pBuilder
->
pSubmitBlk
->
dataLen
+=
rowTLen
;
return
memRow
;
}
// Erase the empty space reserved for binary data
static
int
trimDataBlock
(
void
*
pDataBlock
,
STableDataBlocks
*
pTableDataBlock
,
SInsertStatementParam
*
insertParam
,
SBlockKeyTuple
*
blkKeyTuple
)
{
// TODO: optimize this function, handle the case while binary is not presented
// TODO: optimize this function, handle the case while binary is not presented
STableMeta
*
pTableMeta
=
pTableDataBlock
->
pTableMeta
;
STableMeta
*
pTableMeta
=
pTableDataBlock
->
pTableMeta
;
STableComInfo
tinfo
=
tscGetTableInfo
(
pTableMeta
);
STableComInfo
tinfo
=
tscGetTableInfo
(
pTableMeta
);
SSchema
*
pSchema
=
tscGetTableSchema
(
pTableMeta
);
SSchema
*
pSchema
=
tscGetTableSchema
(
pTableMeta
);
SSubmitBlk
*
pBlock
=
pDataBlock
;
SSubmitBlk
*
pBlock
=
pDataBlock
;
memcpy
(
pDataBlock
,
pTableDataBlock
->
pData
,
sizeof
(
SSubmitBlk
));
memcpy
(
pDataBlock
,
pTableDataBlock
->
pData
,
sizeof
(
SSubmitBlk
));
...
@@ -1774,7 +1873,7 @@ static int trimDataBlock(void* pDataBlock, STableDataBlocks* pTableDataBlock, bo
...
@@ -1774,7 +1873,7 @@ static int trimDataBlock(void* pDataBlock, STableDataBlocks* pTableDataBlock, bo
int32_t
flen
=
0
;
// original total length of row
int32_t
flen
=
0
;
// original total length of row
// schema needs to be included into the submit data block
// schema needs to be included into the submit data block
if
(
in
cludeSchema
)
{
if
(
in
sertParam
->
schemaAttached
)
{
int32_t
numOfCols
=
tscGetNumOfColumns
(
pTableDataBlock
->
pTableMeta
);
int32_t
numOfCols
=
tscGetNumOfColumns
(
pTableDataBlock
->
pTableMeta
);
for
(
int32_t
j
=
0
;
j
<
numOfCols
;
++
j
)
{
for
(
int32_t
j
=
0
;
j
<
numOfCols
;
++
j
)
{
STColumn
*
pCol
=
(
STColumn
*
)
pDataBlock
;
STColumn
*
pCol
=
(
STColumn
*
)
pDataBlock
;
...
@@ -1800,21 +1899,39 @@ static int trimDataBlock(void* pDataBlock, STableDataBlocks* pTableDataBlock, bo
...
@@ -1800,21 +1899,39 @@ static int trimDataBlock(void* pDataBlock, STableDataBlocks* pTableDataBlock, bo
char
*
p
=
pTableDataBlock
->
pData
+
sizeof
(
SSubmitBlk
);
char
*
p
=
pTableDataBlock
->
pData
+
sizeof
(
SSubmitBlk
);
pBlock
->
dataLen
=
0
;
pBlock
->
dataLen
=
0
;
int32_t
numOfRows
=
htons
(
pBlock
->
numOfRows
);
int32_t
numOfRows
=
htons
(
pBlock
->
numOfRows
);
for
(
int32_t
i
=
0
;
i
<
numOfRows
;
++
i
)
{
if
(
IS_RAW_PAYLOAD
(
insertParam
->
payloadType
))
{
SDataRow
trow
=
(
SDataRow
)
pDataBlock
;
for
(
int32_t
i
=
0
;
i
<
numOfRows
;
++
i
)
{
dataRowSetLen
(
trow
,
(
uint16_t
)(
TD_DATA_ROW_HEAD_SIZE
+
flen
));
SMemRow
memRow
=
(
SMemRow
)
pDataBlock
;
dataRowSetVersion
(
trow
,
pTableMeta
->
sversion
);
memRowSetType
(
memRow
,
SMEM_ROW_DATA
);
SDataRow
trow
=
memRowDataBody
(
memRow
);
int
toffset
=
0
;
dataRowSetLen
(
trow
,
(
uint16_t
)(
TD_DATA_ROW_HEAD_SIZE
+
flen
));
for
(
int32_t
j
=
0
;
j
<
tinfo
.
numOfColumns
;
j
++
)
{
dataRowSetVersion
(
trow
,
pTableMeta
->
sversion
);
tdAppendColVal
(
trow
,
p
,
pSchema
[
j
].
type
,
pSchema
[
j
].
bytes
,
toffset
);
toffset
+=
TYPE_BYTES
[
pSchema
[
j
].
type
];
int
toffset
=
0
;
p
+=
pSchema
[
j
].
bytes
;
for
(
int32_t
j
=
0
;
j
<
tinfo
.
numOfColumns
;
j
++
)
{
tdAppendColVal
(
trow
,
p
,
pSchema
[
j
].
type
,
toffset
);
toffset
+=
TYPE_BYTES
[
pSchema
[
j
].
type
];
p
+=
pSchema
[
j
].
bytes
;
}
pDataBlock
=
(
char
*
)
pDataBlock
+
memRowTLen
(
memRow
);
pBlock
->
dataLen
+=
memRowTLen
(
memRow
);
}
}
}
else
{
SMemRowBuilder
rowBuilder
;
rowBuilder
.
pSchema
=
pSchema
;
rowBuilder
.
sversion
=
pTableMeta
->
sversion
;
rowBuilder
.
flen
=
flen
;
rowBuilder
.
nCols
=
tinfo
.
numOfColumns
;
rowBuilder
.
pDataBlock
=
pDataBlock
;
rowBuilder
.
pSubmitBlk
=
pBlock
;
rowBuilder
.
buf
=
p
;
pDataBlock
=
(
char
*
)
pDataBlock
+
dataRowLen
(
trow
);
for
(
int32_t
i
=
0
;
i
<
numOfRows
;
++
i
)
{
pBlock
->
dataLen
+=
dataRowLen
(
trow
);
rowBuilder
.
buf
=
(
blkKeyTuple
+
i
)
->
payloadAddr
;
tdGenMemRowFromBuilder
(
&
rowBuilder
);
}
}
}
int32_t
len
=
pBlock
->
dataLen
+
pBlock
->
schemaLen
;
int32_t
len
=
pBlock
->
dataLen
+
pBlock
->
schemaLen
;
...
@@ -1825,7 +1942,7 @@ static int trimDataBlock(void* pDataBlock, STableDataBlocks* pTableDataBlock, bo
...
@@ -1825,7 +1942,7 @@ static int trimDataBlock(void* pDataBlock, STableDataBlocks* pTableDataBlock, bo
}
}
static
int32_t
getRowExpandSize
(
STableMeta
*
pTableMeta
)
{
static
int32_t
getRowExpandSize
(
STableMeta
*
pTableMeta
)
{
int32_t
result
=
TD_DATA_ROW
_HEAD_SIZE
;
int32_t
result
=
TD_MEM_ROW_DATA
_HEAD_SIZE
;
int32_t
columns
=
tscGetNumOfColumns
(
pTableMeta
);
int32_t
columns
=
tscGetNumOfColumns
(
pTableMeta
);
SSchema
*
pSchema
=
tscGetTableSchema
(
pTableMeta
);
SSchema
*
pSchema
=
tscGetTableSchema
(
pTableMeta
);
for
(
int32_t
i
=
0
;
i
<
columns
;
i
++
)
{
for
(
int32_t
i
=
0
;
i
<
columns
;
i
++
)
{
...
@@ -1861,13 +1978,17 @@ static void extractTableNameList(SInsertStatementParam *pInsertParam, bool freeB
...
@@ -1861,13 +1978,17 @@ static void extractTableNameList(SInsertStatementParam *pInsertParam, bool freeB
int32_t
tscMergeTableDataBlocks
(
SInsertStatementParam
*
pInsertParam
,
bool
freeBlockMap
)
{
int32_t
tscMergeTableDataBlocks
(
SInsertStatementParam
*
pInsertParam
,
bool
freeBlockMap
)
{
const
int
INSERT_HEAD_SIZE
=
sizeof
(
SMsgDesc
)
+
sizeof
(
SSubmitMsg
);
const
int
INSERT_HEAD_SIZE
=
sizeof
(
SMsgDesc
)
+
sizeof
(
SSubmitMsg
);
int
code
=
0
;
void
*
pVnodeDataBlockHashList
=
taosHashInit
(
128
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BIGINT
),
true
,
false
);
bool
isRawPayload
=
IS_RAW_PAYLOAD
(
pInsertParam
->
payloadType
);
SArray
*
pVnodeDataBlockList
=
taosArrayInit
(
8
,
POINTER_BYTES
);
void
*
pVnodeDataBlockHashList
=
taosHashInit
(
128
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BIGINT
),
true
,
false
);
SArray
*
pVnodeDataBlockList
=
taosArrayInit
(
8
,
POINTER_BYTES
);
STableDataBlocks
**
p
=
taosHashIterate
(
pInsertParam
->
pTableBlockHashList
,
NULL
);
STableDataBlocks
**
p
=
taosHashIterate
(
pInsertParam
->
pTableBlockHashList
,
NULL
);
STableDataBlocks
*
pOneTableBlock
=
*
p
;
STableDataBlocks
*
pOneTableBlock
=
*
p
;
SBlockKeyInfo
blkKeyInfo
=
{
0
};
// share by pOneTableBlock
while
(
pOneTableBlock
)
{
while
(
pOneTableBlock
)
{
SSubmitBlk
*
pBlocks
=
(
SSubmitBlk
*
)
pOneTableBlock
->
pData
;
SSubmitBlk
*
pBlocks
=
(
SSubmitBlk
*
)
pOneTableBlock
->
pData
;
if
(
pBlocks
->
numOfRows
>
0
)
{
if
(
pBlocks
->
numOfRows
>
0
)
{
...
@@ -1881,6 +2002,7 @@ int32_t tscMergeTableDataBlocks(SInsertStatementParam *pInsertParam, bool freeBl
...
@@ -1881,6 +2002,7 @@ int32_t tscMergeTableDataBlocks(SInsertStatementParam *pInsertParam, bool freeBl
tscError
(
"0x%"
PRIx64
" failed to prepare the data block buffer for merging table data, code:%d"
,
pInsertParam
->
objectId
,
ret
);
tscError
(
"0x%"
PRIx64
" failed to prepare the data block buffer for merging table data, code:%d"
,
pInsertParam
->
objectId
,
ret
);
taosHashCleanup
(
pVnodeDataBlockHashList
);
taosHashCleanup
(
pVnodeDataBlockHashList
);
tscDestroyBlockArrayList
(
pVnodeDataBlockList
);
tscDestroyBlockArrayList
(
pVnodeDataBlockList
);
tfree
(
blkKeyInfo
.
pKeyTuple
);
return
ret
;
return
ret
;
}
}
...
@@ -1901,17 +2023,35 @@ int32_t tscMergeTableDataBlocks(SInsertStatementParam *pInsertParam, bool freeBl
...
@@ -1901,17 +2023,35 @@ int32_t tscMergeTableDataBlocks(SInsertStatementParam *pInsertParam, bool freeBl
taosHashCleanup
(
pVnodeDataBlockHashList
);
taosHashCleanup
(
pVnodeDataBlockHashList
);
tscDestroyBlockArrayList
(
pVnodeDataBlockList
);
tscDestroyBlockArrayList
(
pVnodeDataBlockList
);
tfree
(
dataBuf
->
pData
);
tfree
(
dataBuf
->
pData
);
tfree
(
blkKeyInfo
.
pKeyTuple
);
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
}
}
}
tscSortRemoveDataBlockDupRows
(
pOneTableBlock
);
if
(
isRawPayload
)
{
char
*
ekey
=
(
char
*
)
pBlocks
->
data
+
pOneTableBlock
->
rowSize
*
(
pBlocks
->
numOfRows
-
1
);
tscSortRemoveDataBlockDupRowsRaw
(
pOneTableBlock
);
char
*
ekey
=
(
char
*
)
pBlocks
->
data
+
pOneTableBlock
->
rowSize
*
(
pBlocks
->
numOfRows
-
1
);
tscDebug
(
"0x%"
PRIx64
" name:%s, tid:%d rows:%d sversion:%d skey:%"
PRId64
", ekey:%"
PRId64
,
pInsertParam
->
objectId
,
tNameGetTableName
(
&
pOneTableBlock
->
tableName
),
tscDebug
(
"0x%"
PRIx64
" name:%s, tid:%d rows:%d sversion:%d skey:%"
PRId64
", ekey:%"
PRId64
,
pBlocks
->
tid
,
pBlocks
->
numOfRows
,
pBlocks
->
sversion
,
GET_INT64_VAL
(
pBlocks
->
data
),
GET_INT64_VAL
(
ekey
));
pInsertParam
->
objectId
,
tNameGetTableName
(
&
pOneTableBlock
->
tableName
),
pBlocks
->
tid
,
pBlocks
->
numOfRows
,
pBlocks
->
sversion
,
GET_INT64_VAL
(
pBlocks
->
data
),
GET_INT64_VAL
(
ekey
));
}
else
{
if
((
code
=
tscSortRemoveDataBlockDupRows
(
pOneTableBlock
,
&
blkKeyInfo
))
!=
0
)
{
taosHashCleanup
(
pVnodeDataBlockHashList
);
tscDestroyBlockArrayList
(
pVnodeDataBlockList
);
tfree
(
dataBuf
->
pData
);
tfree
(
blkKeyInfo
.
pKeyTuple
);
return
code
;
}
ASSERT
(
blkKeyInfo
.
pKeyTuple
!=
NULL
&&
pBlocks
->
numOfRows
>
0
);
SBlockKeyTuple
*
pLastKeyTuple
=
blkKeyInfo
.
pKeyTuple
+
pBlocks
->
numOfRows
-
1
;
tscDebug
(
"0x%"
PRIx64
" name:%s, tid:%d rows:%d sversion:%d skey:%"
PRId64
", ekey:%"
PRId64
,
pInsertParam
->
objectId
,
tNameGetTableName
(
&
pOneTableBlock
->
tableName
),
pBlocks
->
tid
,
pBlocks
->
numOfRows
,
pBlocks
->
sversion
,
blkKeyInfo
.
pKeyTuple
->
skey
,
pLastKeyTuple
->
skey
);
}
int32_t
len
=
pBlocks
->
numOfRows
*
(
pOneTableBlock
->
rowSize
+
expandSize
)
+
sizeof
(
STColumn
)
*
tscGetNumOfColumns
(
pOneTableBlock
->
pTableMeta
);
int32_t
len
=
pBlocks
->
numOfRows
*
(
pOneTableBlock
->
rowSize
+
expandSize
)
+
sizeof
(
STColumn
)
*
tscGetNumOfColumns
(
pOneTableBlock
->
pTableMeta
);
pBlocks
->
tid
=
htonl
(
pBlocks
->
tid
);
pBlocks
->
tid
=
htonl
(
pBlocks
->
tid
);
...
@@ -1921,7 +2061,7 @@ int32_t tscMergeTableDataBlocks(SInsertStatementParam *pInsertParam, bool freeBl
...
@@ -1921,7 +2061,7 @@ int32_t tscMergeTableDataBlocks(SInsertStatementParam *pInsertParam, bool freeBl
pBlocks
->
schemaLen
=
0
;
pBlocks
->
schemaLen
=
0
;
// erase the empty space reserved for binary data
// erase the empty space reserved for binary data
int32_t
finalLen
=
trimDataBlock
(
dataBuf
->
pData
+
dataBuf
->
size
,
pOneTableBlock
,
pInsertParam
->
schemaAttached
);
int32_t
finalLen
=
trimDataBlock
(
dataBuf
->
pData
+
dataBuf
->
size
,
pOneTableBlock
,
pInsertParam
,
blkKeyInfo
.
pKeyTuple
);
assert
(
finalLen
<=
len
);
assert
(
finalLen
<=
len
);
dataBuf
->
size
+=
(
finalLen
+
sizeof
(
SSubmitBlk
));
dataBuf
->
size
+=
(
finalLen
+
sizeof
(
SSubmitBlk
));
...
@@ -1949,6 +2089,7 @@ int32_t tscMergeTableDataBlocks(SInsertStatementParam *pInsertParam, bool freeBl
...
@@ -1949,6 +2089,7 @@ int32_t tscMergeTableDataBlocks(SInsertStatementParam *pInsertParam, bool freeBl
// free the table data blocks;
// free the table data blocks;
pInsertParam
->
pDataBlocks
=
pVnodeDataBlockList
;
pInsertParam
->
pDataBlocks
=
pVnodeDataBlockList
;
taosHashCleanup
(
pVnodeDataBlockHashList
);
taosHashCleanup
(
pVnodeDataBlockHashList
);
tfree
(
blkKeyInfo
.
pKeyTuple
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
...
src/common/inc/tdataformat.h
浏览文件 @
210bee6b
...
@@ -53,10 +53,10 @@ extern "C" {
...
@@ -53,10 +53,10 @@ extern "C" {
// ----------------- TSDB COLUMN DEFINITION
// ----------------- TSDB COLUMN DEFINITION
typedef
struct
{
typedef
struct
{
int8_t
type
;
// Column type
int8_t
type
;
// Column type
int16_t
colId
;
// column ID
int16_t
colId
;
// column ID
int16_t
bytes
;
// column bytes
u
int16_t
bytes
;
// column bytes
int16_t
offset
;
// point offset in SDataRow after the header part
uint16_t
offset
;
// point offset in SDataRow after the header part.
}
STColumn
;
}
STColumn
;
#define colType(col) ((col)->type)
#define colType(col) ((col)->type)
...
@@ -167,10 +167,11 @@ static FORCE_INLINE int tkeyComparFn(const void *tkey1, const void *tkey2) {
...
@@ -167,10 +167,11 @@ static FORCE_INLINE int tkeyComparFn(const void *tkey1, const void *tkey2) {
return
0
;
return
0
;
}
}
}
}
// ----------------- Data row structure
// ----------------- Data row structure
/* A data row, the format is like below:
/* A data row, the format is like below:
* |<--------------------
+
--------------------------- len ---------------------------------->|
* |<--------------------
-
--------------------------- len ---------------------------------->|
* |<-- Head -->|<--------- flen -------------->| |
* |<-- Head -->|<--------- flen -------------->| |
* +---------------------+---------------------------------+---------------------------------+
* +---------------------+---------------------------------+---------------------------------+
* | uint16_t | int16_t | | |
* | uint16_t | int16_t | | |
...
@@ -184,8 +185,8 @@ typedef void *SDataRow;
...
@@ -184,8 +185,8 @@ typedef void *SDataRow;
#define TD_DATA_ROW_HEAD_SIZE (sizeof(uint16_t) + sizeof(int16_t))
#define TD_DATA_ROW_HEAD_SIZE (sizeof(uint16_t) + sizeof(int16_t))
#define dataRowLen(r) (*(
uint16_t *)(r))
#define dataRowLen(r) (*(
TDRowLenT *)(r)) // 0~65535
#define dataRowVersion(r)
*(int16_t *)POINTER_SHIFT(r, sizeof(int16_t
))
#define dataRowVersion(r)
(*(int16_t *)POINTER_SHIFT(r, sizeof(int16_t)
))
#define dataRowTuple(r) POINTER_SHIFT(r, TD_DATA_ROW_HEAD_SIZE)
#define dataRowTuple(r) POINTER_SHIFT(r, TD_DATA_ROW_HEAD_SIZE)
#define dataRowTKey(r) (*(TKEY *)(dataRowTuple(r)))
#define dataRowTKey(r) (*(TKEY *)(dataRowTuple(r)))
#define dataRowKey(r) tdGetKey(dataRowTKey(r))
#define dataRowKey(r) tdGetKey(dataRowTKey(r))
...
@@ -201,20 +202,19 @@ void tdInitDataRow(SDataRow row, STSchema *pSchema);
...
@@ -201,20 +202,19 @@ void tdInitDataRow(SDataRow row, STSchema *pSchema);
SDataRow
tdDataRowDup
(
SDataRow
row
);
SDataRow
tdDataRowDup
(
SDataRow
row
);
// offset here not include dataRow header length
// offset here not include dataRow header length
static
FORCE_INLINE
int
tdAppendColVal
(
SDataRow
row
,
void
*
value
,
int8_t
type
,
int32_t
bytes
,
int32_t
offset
)
{
static
FORCE_INLINE
int
tdAppendColVal
(
SDataRow
row
,
const
void
*
value
,
int8_t
type
,
int32_t
offset
)
{
ASSERT
(
value
!=
NULL
);
ASSERT
(
value
!=
NULL
);
int32_t
toffset
=
offset
+
TD_DATA_ROW_HEAD_SIZE
;
int32_t
toffset
=
offset
+
TD_DATA_ROW_HEAD_SIZE
;
char
*
ptr
=
(
char
*
)
POINTER_SHIFT
(
row
,
dataRowLen
(
row
));
if
(
IS_VAR_DATA_TYPE
(
type
))
{
if
(
IS_VAR_DATA_TYPE
(
type
))
{
*
(
VarDataOffsetT
*
)
POINTER_SHIFT
(
row
,
toffset
)
=
dataRowLen
(
row
);
*
(
VarDataOffsetT
*
)
POINTER_SHIFT
(
row
,
toffset
)
=
dataRowLen
(
row
);
memcpy
(
ptr
,
value
,
varDataTLen
(
value
));
memcpy
(
POINTER_SHIFT
(
row
,
dataRowLen
(
row
))
,
value
,
varDataTLen
(
value
));
dataRowLen
(
row
)
+=
varDataTLen
(
value
);
dataRowLen
(
row
)
+=
varDataTLen
(
value
);
}
else
{
}
else
{
if
(
offset
==
0
)
{
if
(
offset
==
0
)
{
ASSERT
(
type
==
TSDB_DATA_TYPE_TIMESTAMP
);
ASSERT
(
type
==
TSDB_DATA_TYPE_TIMESTAMP
);
TKEY
tvalue
=
tdGetTKEY
(
*
(
TSKEY
*
)
value
);
TKEY
tvalue
=
tdGetTKEY
(
*
(
TSKEY
*
)
value
);
memcpy
(
POINTER_SHIFT
(
row
,
toffset
),
(
void
*
)(
&
tvalue
),
TYPE_BYTES
[
type
]);
memcpy
(
POINTER_SHIFT
(
row
,
toffset
),
(
const
void
*
)(
&
tvalue
),
TYPE_BYTES
[
type
]);
}
else
{
}
else
{
memcpy
(
POINTER_SHIFT
(
row
,
toffset
),
value
,
TYPE_BYTES
[
type
]);
memcpy
(
POINTER_SHIFT
(
row
,
toffset
),
value
,
TYPE_BYTES
[
type
]);
}
}
...
@@ -245,17 +245,21 @@ typedef struct SDataCol {
...
@@ -245,17 +245,21 @@ typedef struct SDataCol {
TSKEY
ts
;
// only used in last NULL column
TSKEY
ts
;
// only used in last NULL column
}
SDataCol
;
}
SDataCol
;
#define isAllRowsNull(pCol) ((pCol)->len == 0)
static
FORCE_INLINE
void
dataColReset
(
SDataCol
*
pDataCol
)
{
pDataCol
->
len
=
0
;
}
static
FORCE_INLINE
void
dataColReset
(
SDataCol
*
pDataCol
)
{
pDataCol
->
len
=
0
;
}
void
dataColInit
(
SDataCol
*
pDataCol
,
STColumn
*
pCol
,
void
**
pBuf
,
int
maxPoints
);
void
dataColInit
(
SDataCol
*
pDataCol
,
STColumn
*
pCol
,
void
**
pBuf
,
int
maxPoints
);
void
dataColAppendVal
(
SDataCol
*
pCol
,
void
*
value
,
int
numOfRows
,
int
maxPoints
);
void
dataColAppendVal
(
SDataCol
*
pCol
,
const
void
*
value
,
int
numOfRows
,
int
maxPoints
);
void
dataColSetOffset
(
SDataCol
*
pCol
,
int
nEle
);
void
dataColSetOffset
(
SDataCol
*
pCol
,
int
nEle
);
bool
isNEleNull
(
SDataCol
*
pCol
,
int
nEle
);
bool
isNEleNull
(
SDataCol
*
pCol
,
int
nEle
);
void
dataColSetNEleNull
(
SDataCol
*
pCol
,
int
nEle
,
int
maxPoints
);
void
dataColSetNEleNull
(
SDataCol
*
pCol
,
int
nEle
,
int
maxPoints
);
// Get the data pointer from a column-wised data
// Get the data pointer from a column-wised data
static
FORCE_INLINE
void
*
tdGetColDataOfRow
(
SDataCol
*
pCol
,
int
row
)
{
static
FORCE_INLINE
const
void
*
tdGetColDataOfRow
(
SDataCol
*
pCol
,
int
row
)
{
if
(
isAllRowsNull
(
pCol
))
{
return
getNullValue
(
pCol
->
type
);
}
if
(
IS_VAR_DATA_TYPE
(
pCol
->
type
))
{
if
(
IS_VAR_DATA_TYPE
(
pCol
->
type
))
{
return
POINTER_SHIFT
(
pCol
->
pData
,
pCol
->
dataOff
[
row
]);
return
POINTER_SHIFT
(
pCol
->
pData
,
pCol
->
dataOff
[
row
]);
}
else
{
}
else
{
...
@@ -287,7 +291,7 @@ typedef struct {
...
@@ -287,7 +291,7 @@ typedef struct {
}
SDataCols
;
}
SDataCols
;
#define keyCol(pCols) (&((pCols)->cols[0])) // Key column
#define keyCol(pCols) (&((pCols)->cols[0])) // Key column
#define dataColsTKeyAt(pCols, idx) ((TKEY *)(keyCol(pCols)->pData))[(idx)]
#define dataColsTKeyAt(pCols, idx) ((TKEY *)(keyCol(pCols)->pData))[(idx)]
// the idx row of column-wised data
#define dataColsKeyAt(pCols, idx) tdGetKey(dataColsTKeyAt(pCols, idx))
#define dataColsKeyAt(pCols, idx) tdGetKey(dataColsTKeyAt(pCols, idx))
static
FORCE_INLINE
TKEY
dataColsTKeyFirst
(
SDataCols
*
pCols
)
{
static
FORCE_INLINE
TKEY
dataColsTKeyFirst
(
SDataCols
*
pCols
)
{
if
(
pCols
->
numOfRows
)
{
if
(
pCols
->
numOfRows
)
{
...
@@ -331,13 +335,13 @@ void tdResetDataCols(SDataCols *pCols);
...
@@ -331,13 +335,13 @@ void tdResetDataCols(SDataCols *pCols);
int
tdInitDataCols
(
SDataCols
*
pCols
,
STSchema
*
pSchema
);
int
tdInitDataCols
(
SDataCols
*
pCols
,
STSchema
*
pSchema
);
SDataCols
*
tdDupDataCols
(
SDataCols
*
pCols
,
bool
keepData
);
SDataCols
*
tdDupDataCols
(
SDataCols
*
pCols
,
bool
keepData
);
SDataCols
*
tdFreeDataCols
(
SDataCols
*
pCols
);
SDataCols
*
tdFreeDataCols
(
SDataCols
*
pCols
);
void
tdAppendDataRowToDataCol
(
SDataRow
row
,
STSchema
*
pSchema
,
SDataCols
*
pCols
);
int
tdMergeDataCols
(
SDataCols
*
target
,
SDataCols
*
source
,
int
rowsToMerge
,
int
*
pOffset
);
int
tdMergeDataCols
(
SDataCols
*
target
,
SDataCols
*
source
,
int
rowsToMerge
,
int
*
pOffset
);
// ----------------- K-V data row structure
// ----------------- K-V data row structure
/*
/* |<-------------------------------------- len -------------------------------------------->|
* |<----- header ----->|<--------------------------- body -------------------------------->|
* +----------+----------+---------------------------------+---------------------------------+
* +----------+----------+---------------------------------+---------------------------------+
* |
int16_t | int16_t | | |
* |
u
int16_t | int16_t | | |
* +----------+----------+---------------------------------+---------------------------------+
* +----------+----------+---------------------------------+---------------------------------+
* | len | ncols | cols index | data part |
* | len | ncols | cols index | data part |
* +----------+----------+---------------------------------+---------------------------------+
* +----------+----------+---------------------------------+---------------------------------+
...
@@ -345,14 +349,14 @@ int tdMergeDataCols(SDataCols *target, SDataCols *source, int rowsToMerge
...
@@ -345,14 +349,14 @@ int tdMergeDataCols(SDataCols *target, SDataCols *source, int rowsToMerge
typedef
void
*
SKVRow
;
typedef
void
*
SKVRow
;
typedef
struct
{
typedef
struct
{
int16_t
colId
;
int16_t
colId
;
int16_t
offset
;
u
int16_t
offset
;
}
SColIdx
;
}
SColIdx
;
#define TD_KV_ROW_HEAD_SIZE (
2 *
sizeof(int16_t))
#define TD_KV_ROW_HEAD_SIZE (
sizeof(uint16_t) +
sizeof(int16_t))
#define kvRowLen(r) (*(
int16_t
*)(r))
#define kvRowLen(r) (*(
TDRowLenT
*)(r))
#define kvRowNCols(r) (*(int16_t *)POINTER_SHIFT(r, sizeof(int16_t)))
#define kvRowNCols(r) (*(int16_t *)POINTER_SHIFT(r, sizeof(
u
int16_t)))
#define kvRowSetLen(r, len) kvRowLen(r) = (len)
#define kvRowSetLen(r, len) kvRowLen(r) = (len)
#define kvRowSetNCols(r, n) kvRowNCols(r) = (n)
#define kvRowSetNCols(r, n) kvRowNCols(r) = (n)
#define kvRowColIdx(r) (SColIdx *)POINTER_SHIFT(r, TD_KV_ROW_HEAD_SIZE)
#define kvRowColIdx(r) (SColIdx *)POINTER_SHIFT(r, TD_KV_ROW_HEAD_SIZE)
...
@@ -362,6 +366,9 @@ typedef struct {
...
@@ -362,6 +366,9 @@ typedef struct {
#define kvRowColIdxAt(r, i) (kvRowColIdx(r) + (i))
#define kvRowColIdxAt(r, i) (kvRowColIdx(r) + (i))
#define kvRowFree(r) tfree(r)
#define kvRowFree(r) tfree(r)
#define kvRowEnd(r) POINTER_SHIFT(r, kvRowLen(r))
#define kvRowEnd(r) POINTER_SHIFT(r, kvRowLen(r))
#define kvRowTKey(r) (*(TKEY *)(kvRowValues(r)))
#define kvRowKey(r) tdGetKey(kvRowTKey(r))
#define kvRowDeleted(r) TKEY_IS_DELETED(kvRowTKey(r))
SKVRow
tdKVRowDup
(
SKVRow
row
);
SKVRow
tdKVRowDup
(
SKVRow
row
);
int
tdSetKVRowDataOfCol
(
SKVRow
*
orow
,
int16_t
colId
,
int8_t
type
,
void
*
value
);
int
tdSetKVRowDataOfCol
(
SKVRow
*
orow
,
int16_t
colId
,
int8_t
type
,
void
*
value
);
...
@@ -385,13 +392,44 @@ static FORCE_INLINE void *tdGetKVRowValOfCol(SKVRow row, int16_t colId) {
...
@@ -385,13 +392,44 @@ static FORCE_INLINE void *tdGetKVRowValOfCol(SKVRow row, int16_t colId) {
return
kvRowColVal
(
row
,
(
SColIdx
*
)
ret
);
return
kvRowColVal
(
row
,
(
SColIdx
*
)
ret
);
}
}
static
FORCE_INLINE
void
*
tdGetKVRowIdxOfCol
(
SKVRow
row
,
int16_t
colId
)
{
return
taosbsearch
(
&
colId
,
kvRowColIdx
(
row
),
kvRowNCols
(
row
),
sizeof
(
SColIdx
),
comparTagId
,
TD_EQ
);
}
// offset here not include kvRow header length
static
FORCE_INLINE
int
tdAppendKvColVal
(
SKVRow
row
,
const
void
*
value
,
int16_t
colId
,
int8_t
type
,
int32_t
offset
)
{
ASSERT
(
value
!=
NULL
);
int32_t
toffset
=
offset
+
TD_KV_ROW_HEAD_SIZE
;
SColIdx
*
pColIdx
=
(
SColIdx
*
)
POINTER_SHIFT
(
row
,
toffset
);
char
*
ptr
=
(
char
*
)
POINTER_SHIFT
(
row
,
kvRowLen
(
row
));
pColIdx
->
colId
=
colId
;
pColIdx
->
offset
=
kvRowLen
(
row
);
// offset of pColIdx including the TD_KV_ROW_HEAD_SIZE
if
(
IS_VAR_DATA_TYPE
(
type
))
{
memcpy
(
ptr
,
value
,
varDataTLen
(
value
));
kvRowLen
(
row
)
+=
varDataTLen
(
value
);
}
else
{
if
(
offset
==
0
)
{
ASSERT
(
type
==
TSDB_DATA_TYPE_TIMESTAMP
);
TKEY
tvalue
=
tdGetTKEY
(
*
(
TSKEY
*
)
value
);
memcpy
(
ptr
,
(
void
*
)(
&
tvalue
),
TYPE_BYTES
[
type
]);
}
else
{
memcpy
(
ptr
,
value
,
TYPE_BYTES
[
type
]);
}
kvRowLen
(
row
)
+=
TYPE_BYTES
[
type
];
}
return
0
;
}
// ----------------- K-V data row builder
// ----------------- K-V data row builder
typedef
struct
{
typedef
struct
{
int16_t
tCols
;
int16_t
tCols
;
int16_t
nCols
;
int16_t
nCols
;
SColIdx
*
pColIdx
;
SColIdx
*
pColIdx
;
int16_t
alloc
;
uint16_t
alloc
;
int16_t
size
;
uint16_t
size
;
void
*
buf
;
void
*
buf
;
}
SKVRowBuilder
;
}
SKVRowBuilder
;
...
@@ -427,8 +465,146 @@ static FORCE_INLINE int tdAddColToKVRow(SKVRowBuilder *pBuilder, int16_t colId,
...
@@ -427,8 +465,146 @@ static FORCE_INLINE int tdAddColToKVRow(SKVRowBuilder *pBuilder, int16_t colId,
return
0
;
return
0
;
}
}
// ----------------- SMemRow appended with sequential data row structure
/*
* |---------|------------------------------------------------- len ---------------------------------->|
* |<-------- Head ------>|<--------- flen -------------->| |
* |---------+---------------------+---------------------------------+---------------------------------+
* | uint8_t | uint16_t | int16_t | | |
* |---------+----------+----------+---------------------------------+---------------------------------+
* | flag | len | sversion | First part | Second part |
* +---------+----------+----------+---------------------------------+---------------------------------+
*
* NOTE: timestamp in this row structure is TKEY instead of TSKEY
*/
// ----------------- SMemRow appended with extended K-V data row structure
/* |--------------------|------------------------------------------------ len ---------------------------------->|
* |<------------- Head ------------>|<--------- flen -------------->| |
* |--------------------+----------+--------------------------------------------+---------------------------------+
* | uint8_t | int16_t | uint16_t | int16_t | | |
* |---------+----------+----------+----------+---------------------------------+---------------------------------+
* | flag | sversion | len | ncols | cols index | data part |
* |---------+----------+----------+----------+---------------------------------+---------------------------------+
*/
typedef
void
*
SMemRow
;
#define TD_MEM_ROW_TYPE_SIZE sizeof(uint8_t)
#define TD_MEM_ROW_KV_VER_SIZE sizeof(int16_t)
#define TD_MEM_ROW_KV_TYPE_VER_SIZE (TD_MEM_ROW_TYPE_SIZE + TD_MEM_ROW_KV_VER_SIZE)
#define TD_MEM_ROW_DATA_HEAD_SIZE (TD_MEM_ROW_TYPE_SIZE + TD_DATA_ROW_HEAD_SIZE)
// #define TD_MEM_ROW_KV_HEAD_SIZE (TD_MEM_ROW_TYPE_SIZE + TD_MEM_ROW_KV_VER_SIZE + TD_KV_ROW_HEAD_SIZE)
#define SMEM_ROW_DATA 0U // SDataRow
#define SMEM_ROW_KV 1U // SKVRow
#define memRowType(r) (*(uint8_t *)(r))
#define isDataRow(r) (SMEM_ROW_DATA == memRowType(r))
#define isKvRow(r) (SMEM_ROW_KV == memRowType(r))
#define memRowDataBody(r) POINTER_SHIFT(r, TD_MEM_ROW_TYPE_SIZE) // section after flag
#define memRowKvBody(r) \
POINTER_SHIFT(r, TD_MEM_ROW_KV_TYPE_VER_SIZE) // section after flag + sversion as to reuse SKVRow
#define memRowDataLen(r) (*(TDRowLenT *)memRowDataBody(r)) // 0~65535
#define memRowKvLen(r) (*(TDRowLenT *)memRowKvBody(r)) // 0~65535
#define memRowDataTLen(r) \
((TDRowTLenT)(memRowDataLen(r) + TD_MEM_ROW_TYPE_SIZE)) // using uint32_t/int32_t to store the TLen
#define memRowKvTLen(r) ((TDRowTLenT)(memRowKvLen(r) + TD_MEM_ROW_KV_TYPE_VER_SIZE))
#define memRowLen(r) (isDataRow(r) ? memRowDataLen(r) : memRowKvLen(r))
#define memRowTLen(r) (isDataRow(r) ? memRowDataTLen(r) : memRowKvTLen(r)) // using uint32_t/int32_t to store the TLen
#define memRowDataVersion(r) dataRowVersion(memRowDataBody(r))
#define memRowKvVersion(r) (*(int16_t *)POINTER_SHIFT(r, TD_MEM_ROW_TYPE_SIZE))
#define memRowVersion(r) (isDataRow(r) ? memRowDataVersion(r) : memRowKvVersion(r)) // schema version
#define memRowSetKvVersion(r, v) (memRowKvVersion(r) = (v))
#define memRowTuple(r) (isDataRow(r) ? dataRowTuple(memRowDataBody(r)) : kvRowValues(memRowKvBody(r)))
#define memRowTKey(r) (isDataRow(r) ? dataRowTKey(memRowDataBody(r)) : kvRowTKey(memRowKvBody(r)))
#define memRowKey(r) (isDataRow(r) ? dataRowKey(memRowDataBody(r)) : kvRowKey(memRowKvBody(r)))
#define memRowSetTKey(r, k) \
do { \
if (isDataRow(r)) { \
dataRowTKey(memRowDataBody(r)) = (k); \
} else { \
kvRowTKey(memRowKvBody(r)) = (k); \
} \
} while (0)
#define memRowSetType(r, t) (memRowType(r) = (t))
#define memRowSetLen(r, l) (isDataRow(r) ? memRowDataLen(r) = (l) : memRowKvLen(r) = (l))
#define memRowSetVersion(r, v) (isDataRow(r) ? dataRowSetVersion(memRowDataBody(r), v) : memRowKvSetVersion(r, v))
#define memRowCpy(dst, r) memcpy((dst), (r), memRowTLen(r))
#define memRowMaxBytesFromSchema(s) (schemaTLen(s) + TD_MEM_ROW_DATA_HEAD_SIZE)
#define memRowDeleted(r) TKEY_IS_DELETED(memRowTKey(r))
SMemRow
tdMemRowDup
(
SMemRow
row
);
void
tdAppendMemRowToDataCol
(
SMemRow
row
,
STSchema
*
pSchema
,
SDataCols
*
pCols
);
// NOTE: offset here including the header size
static
FORCE_INLINE
void
*
tdGetKvRowDataOfCol
(
void
*
row
,
int32_t
offset
)
{
return
POINTER_SHIFT
(
row
,
offset
);
}
// NOTE: offset here including the header size
static
FORCE_INLINE
void
*
tdGetMemRowDataOfCol
(
void
*
row
,
int8_t
type
,
int32_t
offset
)
{
if
(
isDataRow
(
row
))
{
return
tdGetRowDataOfCol
(
row
,
type
,
offset
);
}
else
if
(
isKvRow
(
row
))
{
return
tdGetKvRowDataOfCol
(
row
,
offset
);
}
else
{
ASSERT
(
0
);
}
return
NULL
;
}
// ----------------- Raw payload structure for row:
/* |<------------ Head ------------->|<----------- body of column data tuple ------------------->|
* | |<----------------- flen ------------->|<--- value part --->|
* |SMemRowType| dataTLen | nCols | colId | colType | offset | ... | value |...|...|... |
* +-----------+----------+----------+--------------------------------------|--------------------|
* | uint8_t | uint32_t | uint16_t | int16_t | uint8_t | uint16_t | ... |.......|...|...|... |
* +-----------+----------+----------+--------------------------------------+--------------------|
* 1. offset in column data tuple starts from the value part in case of uint16_t overflow.
* 2. dataTLen: total length including the header and body.
*/
#define PAYLOAD_NCOLS_LEN sizeof(uint16_t)
#define PAYLOAD_NCOLS_OFFSET (sizeof(uint8_t) + sizeof(TDRowTLenT))
#define PAYLOAD_HEADER_LEN (PAYLOAD_NCOLS_OFFSET + PAYLOAD_NCOLS_LEN)
#define PAYLOAD_ID_LEN sizeof(int16_t)
#define PAYLOAD_ID_TYPE_LEN (sizeof(int16_t) + sizeof(uint8_t))
#define PAYLOAD_COL_HEAD_LEN (PAYLOAD_ID_TYPE_LEN + sizeof(uint16_t))
#define PAYLOAD_PRIMARY_COL_LEN (PAYLOAD_ID_TYPE_LEN + sizeof(TSKEY))
#define payloadBody(r) POINTER_SHIFT(r, PAYLOAD_HEADER_LEN)
#define payloadType(r) (*(uint8_t *)(r))
#define payloadSetType(r, t) (payloadType(r) = (t))
#define payloadTLen(r) (*(TDRowTLenT *)POINTER_SHIFT(r, TD_MEM_ROW_TYPE_SIZE)) // including total header
#define payloadSetTLen(r, l) (payloadTLen(r) = (l))
#define payloadNCols(r) (*(TDRowLenT *)POINTER_SHIFT(r, PAYLOAD_NCOLS_OFFSET))
#define payloadSetNCols(r, n) (payloadNCols(r) = (n))
#define payloadValuesOffset(r) \
(PAYLOAD_HEADER_LEN + payloadNCols(r) * PAYLOAD_COL_HEAD_LEN) // avoid using the macro in loop
#define payloadValues(r) POINTER_SHIFT(r, payloadValuesOffset(r)) // avoid using the macro in loop
#define payloadColId(c) (*(int16_t *)(c))
#define payloadColType(c) (*(uint8_t *)POINTER_SHIFT(c, PAYLOAD_ID_LEN))
#define payloadColOffset(c) (*(uint16_t *)POINTER_SHIFT(c, PAYLOAD_ID_TYPE_LEN))
#define payloadColValue(c) POINTER_SHIFT(c, payloadColOffset(c))
#define payloadColSetId(c, i) (payloadColId(c) = (i))
#define payloadColSetType(c, t) (payloadColType(c) = (t))
#define payloadColSetOffset(c, o) (payloadColOffset(c) = (o))
#define payloadTSKey(r) (*(TSKEY *)POINTER_SHIFT(r, payloadValuesOffset(r)))
#define payloadTKey(r) (*(TKEY *)POINTER_SHIFT(r, payloadValuesOffset(r)))
#define payloadKey(r) tdGetKey(payloadTKey(r))
static
FORCE_INLINE
char
*
payloadNextCol
(
char
*
pCol
)
{
return
(
char
*
)
POINTER_SHIFT
(
pCol
,
PAYLOAD_COL_HEAD_LEN
);
}
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
#endif // _TD_DATA_FORMAT_H_
#endif // _TD_DATA_FORMAT_H_
\ No newline at end of file
src/common/src/tdataformat.c
浏览文件 @
210bee6b
...
@@ -198,6 +198,14 @@ SDataRow tdDataRowDup(SDataRow row) {
...
@@ -198,6 +198,14 @@ SDataRow tdDataRowDup(SDataRow row) {
return
trow
;
return
trow
;
}
}
SMemRow
tdMemRowDup
(
SMemRow
row
)
{
SMemRow
trow
=
malloc
(
memRowTLen
(
row
));
if
(
trow
==
NULL
)
return
NULL
;
memRowCpy
(
trow
,
row
);
return
trow
;
}
void
dataColInit
(
SDataCol
*
pDataCol
,
STColumn
*
pCol
,
void
**
pBuf
,
int
maxPoints
)
{
void
dataColInit
(
SDataCol
*
pDataCol
,
STColumn
*
pCol
,
void
**
pBuf
,
int
maxPoints
)
{
pDataCol
->
type
=
colType
(
pCol
);
pDataCol
->
type
=
colType
(
pCol
);
pDataCol
->
colId
=
colColId
(
pCol
);
pDataCol
->
colId
=
colColId
(
pCol
);
...
@@ -217,11 +225,22 @@ void dataColInit(SDataCol *pDataCol, STColumn *pCol, void **pBuf, int maxPoints)
...
@@ -217,11 +225,22 @@ void dataColInit(SDataCol *pDataCol, STColumn *pCol, void **pBuf, int maxPoints)
*
pBuf
=
POINTER_SHIFT
(
*
pBuf
,
pDataCol
->
spaceSize
);
*
pBuf
=
POINTER_SHIFT
(
*
pBuf
,
pDataCol
->
spaceSize
);
}
}
}
}
// value from timestamp should be TKEY here instead of TSKEY
// value from timestamp should be TKEY here instead of TSKEY
void
dataColAppendVal
(
SDataCol
*
pCol
,
void
*
value
,
int
numOfRows
,
int
maxPoints
)
{
void
dataColAppendVal
(
SDataCol
*
pCol
,
const
void
*
value
,
int
numOfRows
,
int
maxPoints
)
{
ASSERT
(
pCol
!=
NULL
&&
value
!=
NULL
);
ASSERT
(
pCol
!=
NULL
&&
value
!=
NULL
);
if
(
isAllRowsNull
(
pCol
))
{
if
(
isNull
(
value
,
pCol
->
type
))
{
// all null value yet, just return
return
;
}
if
(
numOfRows
>
0
)
{
// Find the first not null value, fill all previouse values as NULL
dataColSetNEleNull
(
pCol
,
numOfRows
,
maxPoints
);
}
}
if
(
IS_VAR_DATA_TYPE
(
pCol
->
type
))
{
if
(
IS_VAR_DATA_TYPE
(
pCol
->
type
))
{
// set offset
// set offset
pCol
->
dataOff
[
numOfRows
]
=
pCol
->
len
;
pCol
->
dataOff
[
numOfRows
]
=
pCol
->
len
;
...
@@ -243,7 +262,7 @@ bool isNEleNull(SDataCol *pCol, int nEle) {
...
@@ -243,7 +262,7 @@ bool isNEleNull(SDataCol *pCol, int nEle) {
return
true
;
return
true
;
}
}
void
dataColSetNullAt
(
SDataCol
*
pCol
,
int
index
)
{
FORCE_INLINE
void
dataColSetNullAt
(
SDataCol
*
pCol
,
int
index
)
{
if
(
IS_VAR_DATA_TYPE
(
pCol
->
type
))
{
if
(
IS_VAR_DATA_TYPE
(
pCol
->
type
))
{
pCol
->
dataOff
[
index
]
=
pCol
->
len
;
pCol
->
dataOff
[
index
]
=
pCol
->
len
;
char
*
ptr
=
POINTER_SHIFT
(
pCol
->
pData
,
pCol
->
len
);
char
*
ptr
=
POINTER_SHIFT
(
pCol
->
pData
,
pCol
->
len
);
...
@@ -399,8 +418,7 @@ void tdResetDataCols(SDataCols *pCols) {
...
@@ -399,8 +418,7 @@ void tdResetDataCols(SDataCols *pCols) {
}
}
}
}
}
}
static
void
tdAppendDataRowToDataCol
(
SDataRow
row
,
STSchema
*
pSchema
,
SDataCols
*
pCols
)
{
void
tdAppendDataRowToDataCol
(
SDataRow
row
,
STSchema
*
pSchema
,
SDataCols
*
pCols
)
{
ASSERT
(
pCols
->
numOfRows
==
0
||
dataColsKeyLast
(
pCols
)
<
dataRowKey
(
row
));
ASSERT
(
pCols
->
numOfRows
==
0
||
dataColsKeyLast
(
pCols
)
<
dataRowKey
(
row
));
int
rcol
=
0
;
int
rcol
=
0
;
...
@@ -419,7 +437,8 @@ void tdAppendDataRowToDataCol(SDataRow row, STSchema *pSchema, SDataCols *pCols)
...
@@ -419,7 +437,8 @@ void tdAppendDataRowToDataCol(SDataRow row, STSchema *pSchema, SDataCols *pCols)
while
(
dcol
<
pCols
->
numOfCols
)
{
while
(
dcol
<
pCols
->
numOfCols
)
{
SDataCol
*
pDataCol
=
&
(
pCols
->
cols
[
dcol
]);
SDataCol
*
pDataCol
=
&
(
pCols
->
cols
[
dcol
]);
if
(
rcol
>=
schemaNCols
(
pSchema
))
{
if
(
rcol
>=
schemaNCols
(
pSchema
))
{
dataColSetNullAt
(
pDataCol
,
pCols
->
numOfRows
);
// dataColSetNullAt(pDataCol, pCols->numOfRows);
dataColAppendVal
(
pDataCol
,
getNullValue
(
pDataCol
->
type
),
pCols
->
numOfRows
,
pCols
->
maxPoints
);
dcol
++
;
dcol
++
;
continue
;
continue
;
}
}
...
@@ -433,7 +452,8 @@ void tdAppendDataRowToDataCol(SDataRow row, STSchema *pSchema, SDataCols *pCols)
...
@@ -433,7 +452,8 @@ void tdAppendDataRowToDataCol(SDataRow row, STSchema *pSchema, SDataCols *pCols)
}
else
if
(
pRowCol
->
colId
<
pDataCol
->
colId
)
{
}
else
if
(
pRowCol
->
colId
<
pDataCol
->
colId
)
{
rcol
++
;
rcol
++
;
}
else
{
}
else
{
dataColSetNullAt
(
pDataCol
,
pCols
->
numOfRows
);
// dataColSetNullAt(pDataCol, pCols->numOfRows);
dataColAppendVal
(
pDataCol
,
getNullValue
(
pDataCol
->
type
),
pCols
->
numOfRows
,
pCols
->
maxPoints
);
dcol
++
;
dcol
++
;
}
}
}
}
...
@@ -441,6 +461,62 @@ void tdAppendDataRowToDataCol(SDataRow row, STSchema *pSchema, SDataCols *pCols)
...
@@ -441,6 +461,62 @@ void tdAppendDataRowToDataCol(SDataRow row, STSchema *pSchema, SDataCols *pCols)
pCols
->
numOfRows
++
;
pCols
->
numOfRows
++
;
}
}
static
void
tdAppendKvRowToDataCol
(
SKVRow
row
,
STSchema
*
pSchema
,
SDataCols
*
pCols
)
{
ASSERT
(
pCols
->
numOfRows
==
0
||
dataColsKeyLast
(
pCols
)
<
kvRowKey
(
row
));
int
rcol
=
0
;
int
dcol
=
0
;
if
(
kvRowDeleted
(
row
))
{
for
(;
dcol
<
pCols
->
numOfCols
;
dcol
++
)
{
SDataCol
*
pDataCol
=
&
(
pCols
->
cols
[
dcol
]);
if
(
dcol
==
0
)
{
dataColAppendVal
(
pDataCol
,
kvRowValues
(
row
),
pCols
->
numOfRows
,
pCols
->
maxPoints
);
}
else
{
dataColSetNullAt
(
pDataCol
,
pCols
->
numOfRows
);
}
}
}
else
{
int
nRowCols
=
kvRowNCols
(
row
);
while
(
dcol
<
pCols
->
numOfCols
)
{
SDataCol
*
pDataCol
=
&
(
pCols
->
cols
[
dcol
]);
if
(
rcol
>=
nRowCols
||
rcol
>=
schemaNCols
(
pSchema
))
{
// dataColSetNullAt(pDataCol, pCols->numOfRows);
dataColAppendVal
(
pDataCol
,
getNullValue
(
pDataCol
->
type
),
pCols
->
numOfRows
,
pCols
->
maxPoints
);
++
dcol
;
continue
;
}
SColIdx
*
colIdx
=
kvRowColIdxAt
(
row
,
rcol
);
if
(
colIdx
->
colId
==
pDataCol
->
colId
)
{
void
*
value
=
tdGetKvRowDataOfCol
(
row
,
colIdx
->
offset
);
dataColAppendVal
(
pDataCol
,
value
,
pCols
->
numOfRows
,
pCols
->
maxPoints
);
++
dcol
;
++
rcol
;
}
else
if
(
colIdx
->
colId
<
pDataCol
->
colId
)
{
++
rcol
;
}
else
{
// dataColSetNullAt(pDataCol, pCols->numOfRows);
dataColAppendVal
(
pDataCol
,
getNullValue
(
pDataCol
->
type
),
pCols
->
numOfRows
,
pCols
->
maxPoints
);
++
dcol
;
}
}
}
pCols
->
numOfRows
++
;
}
void
tdAppendMemRowToDataCol
(
SMemRow
row
,
STSchema
*
pSchema
,
SDataCols
*
pCols
)
{
if
(
isDataRow
(
row
))
{
tdAppendDataRowToDataCol
(
memRowDataBody
(
row
),
pSchema
,
pCols
);
}
else
if
(
isKvRow
(
row
))
{
tdAppendKvRowToDataCol
(
memRowKvBody
(
row
),
pSchema
,
pCols
);
}
else
{
ASSERT
(
0
);
}
}
int
tdMergeDataCols
(
SDataCols
*
target
,
SDataCols
*
source
,
int
rowsToMerge
,
int
*
pOffset
)
{
int
tdMergeDataCols
(
SDataCols
*
target
,
SDataCols
*
source
,
int
rowsToMerge
,
int
*
pOffset
)
{
ASSERT
(
rowsToMerge
>
0
&&
rowsToMerge
<=
source
->
numOfRows
);
ASSERT
(
rowsToMerge
>
0
&&
rowsToMerge
<=
source
->
numOfRows
);
ASSERT
(
target
->
numOfCols
==
source
->
numOfCols
);
ASSERT
(
target
->
numOfCols
==
source
->
numOfCols
);
...
@@ -563,7 +639,7 @@ int tdSetKVRowDataOfCol(SKVRow *orow, int16_t colId, int8_t type, void *value) {
...
@@ -563,7 +639,7 @@ int tdSetKVRowDataOfCol(SKVRow *orow, int16_t colId, int8_t type, void *value) {
nrow
=
malloc
(
kvRowLen
(
row
)
+
sizeof
(
SColIdx
)
+
diff
);
nrow
=
malloc
(
kvRowLen
(
row
)
+
sizeof
(
SColIdx
)
+
diff
);
if
(
nrow
==
NULL
)
return
-
1
;
if
(
nrow
==
NULL
)
return
-
1
;
kvRowSetLen
(
nrow
,
kvRowLen
(
row
)
+
(
int16_t
)
sizeof
(
SColIdx
)
+
diff
);
kvRowSetLen
(
nrow
,
kvRowLen
(
row
)
+
(
u
int16_t
)
sizeof
(
SColIdx
)
+
diff
);
kvRowSetNCols
(
nrow
,
kvRowNCols
(
row
)
+
1
);
kvRowSetNCols
(
nrow
,
kvRowNCols
(
row
)
+
1
);
if
(
ptr
==
NULL
)
{
if
(
ptr
==
NULL
)
{
...
@@ -605,8 +681,8 @@ int tdSetKVRowDataOfCol(SKVRow *orow, int16_t colId, int8_t type, void *value) {
...
@@ -605,8 +681,8 @@ int tdSetKVRowDataOfCol(SKVRow *orow, int16_t colId, int8_t type, void *value) {
if
(
varDataTLen
(
value
)
==
varDataTLen
(
pOldVal
))
{
// just update the column value in place
if
(
varDataTLen
(
value
)
==
varDataTLen
(
pOldVal
))
{
// just update the column value in place
memcpy
(
pOldVal
,
value
,
varDataTLen
(
value
));
memcpy
(
pOldVal
,
value
,
varDataTLen
(
value
));
}
else
{
// need to reallocate the memory
}
else
{
// need to reallocate the memory
int16_t
diff
=
varDataTLen
(
value
)
-
varDataTLen
(
pOldVal
);
u
int16_t
diff
=
varDataTLen
(
value
)
-
varDataTLen
(
pOldVal
);
int16_t
nlen
=
kvRowLen
(
row
)
+
diff
;
u
int16_t
nlen
=
kvRowLen
(
row
)
+
diff
;
ASSERT
(
nlen
>
0
);
ASSERT
(
nlen
>
0
);
nrow
=
malloc
(
nlen
);
nrow
=
malloc
(
nlen
);
if
(
nrow
==
NULL
)
return
-
1
;
if
(
nrow
==
NULL
)
return
-
1
;
...
@@ -708,4 +784,4 @@ SKVRow tdGetKVRowFromBuilder(SKVRowBuilder *pBuilder) {
...
@@ -708,4 +784,4 @@ SKVRow tdGetKVRowFromBuilder(SKVRowBuilder *pBuilder) {
memcpy
(
kvRowValues
(
row
),
pBuilder
->
buf
,
pBuilder
->
size
);
memcpy
(
kvRowValues
(
row
),
pBuilder
->
buf
,
pBuilder
->
size
);
return
row
;
return
row
;
}
}
\ No newline at end of file
src/common/src/ttypes.c
浏览文件 @
210bee6b
...
@@ -492,30 +492,32 @@ void setNullN(char *val, int32_t type, int32_t bytes, int32_t numOfElems) {
...
@@ -492,30 +492,32 @@ void setNullN(char *val, int32_t type, int32_t bytes, int32_t numOfElems) {
}
}
}
}
static
uint8_t
nullBool
=
TSDB_DATA_BOOL_NULL
;
static
uint8_t
nullBool
=
TSDB_DATA_BOOL_NULL
;
static
uint8_t
nullTinyInt
=
TSDB_DATA_TINYINT_NULL
;
static
uint8_t
nullTinyInt
=
TSDB_DATA_TINYINT_NULL
;
static
uint16_t
nullSmallInt
=
TSDB_DATA_SMALLINT_NULL
;
static
uint16_t
nullSmallInt
=
TSDB_DATA_SMALLINT_NULL
;
static
uint32_t
nullInt
=
TSDB_DATA_INT_NULL
;
static
uint32_t
nullInt
=
TSDB_DATA_INT_NULL
;
static
uint64_t
nullBigInt
=
TSDB_DATA_BIGINT_NULL
;
static
uint64_t
nullBigInt
=
TSDB_DATA_BIGINT_NULL
;
static
uint32_t
nullFloat
=
TSDB_DATA_FLOAT_NULL
;
static
uint32_t
nullFloat
=
TSDB_DATA_FLOAT_NULL
;
static
uint64_t
nullDouble
=
TSDB_DATA_DOUBLE_NULL
;
static
uint64_t
nullDouble
=
TSDB_DATA_DOUBLE_NULL
;
static
uint8_t
nullTinyIntu
=
TSDB_DATA_UTINYINT_NULL
;
static
uint8_t
nullTinyIntu
=
TSDB_DATA_UTINYINT_NULL
;
static
uint16_t
nullSmallIntu
=
TSDB_DATA_USMALLINT_NULL
;
static
uint16_t
nullSmallIntu
=
TSDB_DATA_USMALLINT_NULL
;
static
uint32_t
nullIntu
=
TSDB_DATA_UINT_NULL
;
static
uint32_t
nullIntu
=
TSDB_DATA_UINT_NULL
;
static
uint64_t
nullBigIntu
=
TSDB_DATA_UBIGINT_NULL
;
static
uint64_t
nullBigIntu
=
TSDB_DATA_UBIGINT_NULL
;
static
SBinaryNullT
nullBinary
=
{
1
,
TSDB_DATA_BINARY_NULL
};
static
union
{
static
SNCharNullT
nullNchar
=
{
4
,
TSDB_DATA_NCHAR_NULL
};
tstr
str
;
char
pad
[
sizeof
(
tstr
)
+
4
];
// static union {
}
nullBinary
=
{.
str
=
{.
len
=
1
}},
nullNchar
=
{.
str
=
{.
len
=
4
}};
// tstr str;
// char pad[sizeof(tstr) + 4];
static
void
*
nullValues
[]
=
{
// } nullBinary = {.str = {.len = 1}}, nullNchar = {.str = {.len = 4}};
static
const
void
*
nullValues
[]
=
{
&
nullBool
,
&
nullTinyInt
,
&
nullSmallInt
,
&
nullInt
,
&
nullBigInt
,
&
nullBool
,
&
nullTinyInt
,
&
nullSmallInt
,
&
nullInt
,
&
nullBigInt
,
&
nullFloat
,
&
nullDouble
,
&
nullBinary
,
&
nullBigInt
,
&
nullNchar
,
&
nullFloat
,
&
nullDouble
,
&
nullBinary
,
&
nullBigInt
,
&
nullNchar
,
&
nullTinyIntu
,
&
nullSmallIntu
,
&
nullIntu
,
&
nullBigIntu
,
&
nullTinyIntu
,
&
nullSmallIntu
,
&
nullIntu
,
&
nullBigIntu
,
};
};
void
*
getNullValue
(
int32_t
type
)
{
const
void
*
getNullValue
(
int32_t
type
)
{
assert
(
type
>=
TSDB_DATA_TYPE_BOOL
&&
type
<=
TSDB_DATA_TYPE_UBIGINT
);
assert
(
type
>=
TSDB_DATA_TYPE_BOOL
&&
type
<=
TSDB_DATA_TYPE_UBIGINT
);
return
nullValues
[
type
-
1
];
return
nullValues
[
type
-
1
];
}
}
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetRowData.java
浏览文件 @
210bee6b
...
@@ -19,6 +19,7 @@ import com.taosdata.jdbc.utils.NullType;
...
@@ -19,6 +19,7 @@ import com.taosdata.jdbc.utils.NullType;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.sql.SQLException
;
import
java.sql.SQLException
;
import
java.sql.Timestamp
;
import
java.sql.Timestamp
;
import
java.time.Instant
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Collections
;
...
@@ -463,6 +464,25 @@ public class TSDBResultSetRowData {
...
@@ -463,6 +464,25 @@ public class TSDBResultSetRowData {
data
.
set
(
col
,
tsObj
);
data
.
set
(
col
,
tsObj
);
}
}
/**
* this implementation is used for TDengine old version
*/
public
void
setTimestamp
(
int
col
,
long
ts
)
{
//TODO: this implementation contains logical error
// when precision is us the (long ts) is 16 digital number
// when precision is ms, the (long ts) is 13 digital number
// we need a JNI function like this:
// public void setTimestamp(int col, long epochSecond, long nanoAdjustment)
if
(
ts
<
1_0000_0000_0000_0L
)
{
data
.
set
(
col
,
new
Timestamp
(
ts
));
}
else
{
long
epochSec
=
ts
/
1000_000L
;
long
nanoAdjustment
=
ts
%
1000_000L
*
1000L
;
Timestamp
timestamp
=
Timestamp
.
from
(
Instant
.
ofEpochSecond
(
epochSec
,
nanoAdjustment
));
data
.
set
(
col
,
timestamp
);
}
}
public
Timestamp
getTimestamp
(
int
col
,
int
nativeType
)
{
public
Timestamp
getTimestamp
(
int
col
,
int
nativeType
)
{
Object
obj
=
data
.
get
(
col
-
1
);
Object
obj
=
data
.
get
(
col
-
1
);
if
(
obj
==
null
)
if
(
obj
==
null
)
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/Utils.java
浏览文件 @
210bee6b
...
@@ -5,7 +5,6 @@ import com.google.common.collect.RangeSet;
...
@@ -5,7 +5,6 @@ import com.google.common.collect.RangeSet;
import
com.google.common.collect.TreeRangeSet
;
import
com.google.common.collect.TreeRangeSet
;
import
com.taosdata.jdbc.enums.TimestampPrecision
;
import
com.taosdata.jdbc.enums.TimestampPrecision
;
import
java.nio.charset.Charset
;
import
java.nio.charset.StandardCharsets
;
import
java.nio.charset.StandardCharsets
;
import
java.sql.Date
;
import
java.sql.Date
;
import
java.sql.Time
;
import
java.sql.Time
;
...
@@ -110,15 +109,27 @@ public class Utils {
...
@@ -110,15 +109,27 @@ public class Utils {
return
rawSql
;
return
rawSql
;
// toLowerCase
// toLowerCase
String
preparedSql
=
rawSql
.
trim
().
toLowerCase
();
String
preparedSql
=
rawSql
.
trim
().
toLowerCase
();
String
[]
clause
=
new
String
[]{
"
values\\s*\\([\\s\\S]*?\\)"
,
"
tags\\s*\\([\\s\\S]*?\\)"
,
"where[\\s\\S]*"
};
String
[]
clause
=
new
String
[]{
"tags\\s*\\([\\s\\S]*?\\)"
,
"where[\\s\\S]*"
};
Map
<
Integer
,
Integer
>
placeholderPositions
=
new
HashMap
<>();
Map
<
Integer
,
Integer
>
placeholderPositions
=
new
HashMap
<>();
RangeSet
<
Integer
>
clauseRangeSet
=
TreeRangeSet
.
create
();
RangeSet
<
Integer
>
clauseRangeSet
=
TreeRangeSet
.
create
();
findPlaceholderPosition
(
preparedSql
,
placeholderPositions
);
findPlaceholderPosition
(
preparedSql
,
placeholderPositions
);
// find tags and where clause's position
findClauseRangeSet
(
preparedSql
,
clause
,
clauseRangeSet
);
findClauseRangeSet
(
preparedSql
,
clause
,
clauseRangeSet
);
// find values clause's position
findValuesClauseRangeSet
(
preparedSql
,
clauseRangeSet
);
return
transformSql
(
rawSql
,
parameters
,
placeholderPositions
,
clauseRangeSet
);
return
transformSql
(
rawSql
,
parameters
,
placeholderPositions
,
clauseRangeSet
);
}
}
private
static
void
findValuesClauseRangeSet
(
String
preparedSql
,
RangeSet
<
Integer
>
clauseRangeSet
)
{
Matcher
matcher
=
Pattern
.
compile
(
"(values|,)\\s*(\\([^)]*\\))"
).
matcher
(
preparedSql
);
while
(
matcher
.
find
())
{
int
start
=
matcher
.
start
(
2
);
int
end
=
matcher
.
end
(
2
);
clauseRangeSet
.
add
(
Range
.
closedOpen
(
start
,
end
));
}
}
private
static
void
findClauseRangeSet
(
String
preparedSql
,
String
[]
regexArr
,
RangeSet
<
Integer
>
clauseRangeSet
)
{
private
static
void
findClauseRangeSet
(
String
preparedSql
,
String
[]
regexArr
,
RangeSet
<
Integer
>
clauseRangeSet
)
{
clauseRangeSet
.
clear
();
clauseRangeSet
.
clear
();
for
(
String
regex
:
regexArr
)
{
for
(
String
regex
:
regexArr
)
{
...
@@ -126,7 +137,7 @@ public class Utils {
...
@@ -126,7 +137,7 @@ public class Utils {
while
(
matcher
.
find
())
{
while
(
matcher
.
find
())
{
int
start
=
matcher
.
start
();
int
start
=
matcher
.
start
();
int
end
=
matcher
.
end
();
int
end
=
matcher
.
end
();
clauseRangeSet
.
add
(
Range
.
closed
(
start
,
end
));
clauseRangeSet
.
add
(
Range
.
closed
Open
(
start
,
end
));
}
}
}
}
}
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/utils/UtilsTest.java
浏览文件 @
210bee6b
...
@@ -3,6 +3,8 @@ package com.taosdata.jdbc.utils;
...
@@ -3,6 +3,8 @@ package com.taosdata.jdbc.utils;
import
org.junit.Assert
;
import
org.junit.Assert
;
import
org.junit.Test
;
import
org.junit.Test
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
java.util.stream.Stream
;
import
java.util.stream.Stream
;
public
class
UtilsTest
{
public
class
UtilsTest
{
...
@@ -32,7 +34,7 @@ public class UtilsTest {
...
@@ -32,7 +34,7 @@ public class UtilsTest {
}
}
@Test
@Test
public
void
getNativeSqlReplaceQuestionMarks
()
{
public
void
lowerCase
()
{
// given
// given
String
nativeSql
=
"insert into ?.? (ts, temperature, humidity) using ?.? tags(?,?) values(now, ?, ?)"
;
String
nativeSql
=
"insert into ?.? (ts, temperature, humidity) using ?.? tags(?,?) values(now, ?, ?)"
;
Object
[]
parameters
=
Stream
.
of
(
"test"
,
"t1"
,
"test"
,
"weather"
,
"beijing"
,
1
,
12.2
,
4
).
toArray
();
Object
[]
parameters
=
Stream
.
of
(
"test"
,
"t1"
,
"test"
,
"weather"
,
"beijing"
,
1
,
12.2
,
4
).
toArray
();
...
@@ -46,7 +48,7 @@ public class UtilsTest {
...
@@ -46,7 +48,7 @@ public class UtilsTest {
}
}
@Test
@Test
public
void
getNativeSqlReplaceQuestionMarks2
()
{
public
void
upperCase
()
{
// given
// given
String
nativeSql
=
"INSERT INTO ? (TS,CURRENT,VOLTAGE,PHASE) USING METERS TAGS (?) VALUES (?,?,?,?)"
;
String
nativeSql
=
"INSERT INTO ? (TS,CURRENT,VOLTAGE,PHASE) USING METERS TAGS (?) VALUES (?,?,?,?)"
;
Object
[]
parameters
=
Stream
.
of
(
"d1"
,
1
,
123
,
3.14
,
220
,
4
).
toArray
();
Object
[]
parameters
=
Stream
.
of
(
"d1"
,
1
,
123
,
3.14
,
220
,
4
).
toArray
();
...
@@ -59,9 +61,49 @@ public class UtilsTest {
...
@@ -59,9 +61,49 @@ public class UtilsTest {
Assert
.
assertEquals
(
expected
,
actual
);
Assert
.
assertEquals
(
expected
,
actual
);
}
}
@Test
public
void
multiValues
()
{
// given
String
nativeSql
=
"INSERT INTO ? (TS,CURRENT,VOLTAGE,PHASE) USING METERS TAGS (?) VALUES (?,?,?,?),(?,?,?,?)"
;
Object
[]
parameters
=
Stream
.
of
(
"d1"
,
1
,
100
,
3.14
,
"abc"
,
4
,
200
,
3.1415
,
"xyz"
,
5
).
toArray
();
// when
String
actual
=
Utils
.
getNativeSql
(
nativeSql
,
parameters
);
// then
String
expected
=
"INSERT INTO d1 (TS,CURRENT,VOLTAGE,PHASE) USING METERS TAGS (1) VALUES (100,3.14,'abc',4),(200,3.1415,'xyz',5)"
;
Assert
.
assertEquals
(
expected
,
actual
);
}
@Test
public
void
lineTerminator
()
{
// given
String
nativeSql
=
"INSERT INTO ? (TS,CURRENT,VOLTAGE,PHASE) USING METERS TAGS (?) VALUES (?,?,\r\n?,?),(?,?,?,?)"
;
Object
[]
parameters
=
Stream
.
of
(
"d1"
,
1
,
100
,
3.14
,
"abc"
,
4
,
200
,
3.1415
,
"xyz"
,
5
).
toArray
();
// when
String
actual
=
Utils
.
getNativeSql
(
nativeSql
,
parameters
);
// then
String
expected
=
"INSERT INTO d1 (TS,CURRENT,VOLTAGE,PHASE) USING METERS TAGS (1) VALUES (100,3.14,\r\n'abc',4),(200,3.1415,'xyz',5)"
;
Assert
.
assertEquals
(
expected
,
actual
);
}
@Test
public
void
lineTerminatorAndMultiValues
()
{
String
nativeSql
=
"INSERT Into ? TAGS(?) VALUES(?,?,\r\n?,?),(?,? ,\r\n?,?) t? tags (?) Values (?,?,?\r\n,?),(?,?,?,?) t? Tags(?) values (?,?,?,?) , (?,?,?,?)"
;
Object
[]
parameters
=
Stream
.
of
(
"t1"
,
"abc"
,
100
,
1.1
,
"xxx"
,
"xxx"
,
200
,
2.2
,
"xxx"
,
"xxx"
,
2
,
"bcd"
,
300
,
3.3
,
"xxx"
,
"xxx"
,
400
,
4.4
,
"xxx"
,
"xxx"
,
3
,
"cde"
,
500
,
5.5
,
"xxx"
,
"xxx"
,
600
,
6.6
,
"xxx"
,
"xxx"
).
toArray
();
// when
String
actual
=
Utils
.
getNativeSql
(
nativeSql
,
parameters
);
// then
String
expected
=
"INSERT Into t1 TAGS('abc') VALUES(100,1.1,\r\n'xxx','xxx'),(200,2.2 ,\r\n'xxx','xxx') t2 tags ('bcd') Values (300,3.3,'xxx'\r\n,'xxx'),(400,4.4,'xxx','xxx') t3 Tags('cde') values (500,5.5,'xxx','xxx') , (600,6.6,'xxx','xxx')"
;
Assert
.
assertEquals
(
expected
,
actual
);
}
@Test
@Test
public
void
getNativeSqlR
eplaceNothing
()
{
public
void
r
eplaceNothing
()
{
// given
// given
String
nativeSql
=
"insert into test.t1 (ts, temperature, humidity) using test.weather tags('beijing',1) values(now, 12.2, 4)"
;
String
nativeSql
=
"insert into test.t1 (ts, temperature, humidity) using test.weather tags('beijing',1) values(now, 12.2, 4)"
;
...
@@ -73,7 +115,7 @@ public class UtilsTest {
...
@@ -73,7 +115,7 @@ public class UtilsTest {
}
}
@Test
@Test
public
void
getNativeSqlR
eplaceNothing2
()
{
public
void
r
eplaceNothing2
()
{
// given
// given
String
nativeSql
=
"insert into test.t1 (ts, temperature, humidity) using test.weather tags('beijing',1) values(now, 12.2, 4)"
;
String
nativeSql
=
"insert into test.t1 (ts, temperature, humidity) using test.weather tags('beijing',1) values(now, 12.2, 4)"
;
Object
[]
parameters
=
Stream
.
of
(
"test"
,
"t1"
,
"test"
,
"weather"
,
"beijing"
,
1
,
12.2
,
4
).
toArray
();
Object
[]
parameters
=
Stream
.
of
(
"test"
,
"t1"
,
"test"
,
"weather"
,
"beijing"
,
1
,
12.2
,
4
).
toArray
();
...
@@ -86,7 +128,7 @@ public class UtilsTest {
...
@@ -86,7 +128,7 @@ public class UtilsTest {
}
}
@Test
@Test
public
void
getNativeSqlR
eplaceNothing3
()
{
public
void
r
eplaceNothing3
()
{
// given
// given
String
nativeSql
=
"insert into ?.? (ts, temperature, humidity) using ?.? tags(?,?) values(now, ?, ?)"
;
String
nativeSql
=
"insert into ?.? (ts, temperature, humidity) using ?.? tags(?,?) values(now, ?, ?)"
;
...
...
src/cq/src/cqMain.c
浏览文件 @
210bee6b
...
@@ -476,21 +476,23 @@ static void cqProcessStreamRes(void *param, TAOS_RES *tres, TAOS_ROW row) {
...
@@ -476,21 +476,23 @@ static void cqProcessStreamRes(void *param, TAOS_RES *tres, TAOS_ROW row) {
cDebug
(
"vgId:%d, id:%d CQ:%s stream result is ready"
,
pContext
->
vgId
,
pObj
->
tid
,
pObj
->
sqlStr
);
cDebug
(
"vgId:%d, id:%d CQ:%s stream result is ready"
,
pContext
->
vgId
,
pObj
->
tid
,
pObj
->
sqlStr
);
int32_t
size
=
sizeof
(
SWalHead
)
+
sizeof
(
SSubmitMsg
)
+
sizeof
(
SSubmitBlk
)
+
TD_
DATA_ROW
_HEAD_SIZE
+
pObj
->
rowSize
;
int32_t
size
=
sizeof
(
SWalHead
)
+
sizeof
(
SSubmitMsg
)
+
sizeof
(
SSubmitBlk
)
+
TD_
MEM_ROW_DATA
_HEAD_SIZE
+
pObj
->
rowSize
;
char
*
buffer
=
calloc
(
size
,
1
);
char
*
buffer
=
calloc
(
size
,
1
);
SWalHead
*
pHead
=
(
SWalHead
*
)
buffer
;
SWalHead
*
pHead
=
(
SWalHead
*
)
buffer
;
SSubmitMsg
*
pMsg
=
(
SSubmitMsg
*
)
(
buffer
+
sizeof
(
SWalHead
));
SSubmitMsg
*
pMsg
=
(
SSubmitMsg
*
)
(
buffer
+
sizeof
(
SWalHead
));
SSubmitBlk
*
pBlk
=
(
SSubmitBlk
*
)
(
buffer
+
sizeof
(
SWalHead
)
+
sizeof
(
SSubmitMsg
));
SSubmitBlk
*
pBlk
=
(
SSubmitBlk
*
)
(
buffer
+
sizeof
(
SWalHead
)
+
sizeof
(
SSubmitMsg
));
SDataRow
trow
=
(
SDataRow
)
pBlk
->
data
;
SMemRow
trow
=
(
SMemRow
)
pBlk
->
data
;
tdInitDataRow
(
trow
,
pSchema
);
SDataRow
dataRow
=
(
SDataRow
)
memRowDataBody
(
trow
);
memRowSetType
(
trow
,
SMEM_ROW_DATA
);
tdInitDataRow
(
dataRow
,
pSchema
);
for
(
int32_t
i
=
0
;
i
<
pSchema
->
numOfCols
;
i
++
)
{
for
(
int32_t
i
=
0
;
i
<
pSchema
->
numOfCols
;
i
++
)
{
STColumn
*
c
=
pSchema
->
columns
+
i
;
STColumn
*
c
=
pSchema
->
columns
+
i
;
void
*
val
=
row
[
i
];
void
*
val
=
row
[
i
];
if
(
val
==
NULL
)
{
if
(
val
==
NULL
)
{
val
=
getNullValue
(
c
->
type
);
val
=
(
void
*
)
getNullValue
(
c
->
type
);
}
else
if
(
c
->
type
==
TSDB_DATA_TYPE_BINARY
)
{
}
else
if
(
c
->
type
==
TSDB_DATA_TYPE_BINARY
)
{
val
=
((
char
*
)
val
)
-
sizeof
(
VarDataLenT
);
val
=
((
char
*
)
val
)
-
sizeof
(
VarDataLenT
);
}
else
if
(
c
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
}
else
if
(
c
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
...
@@ -500,9 +502,9 @@ static void cqProcessStreamRes(void *param, TAOS_RES *tres, TAOS_ROW row) {
...
@@ -500,9 +502,9 @@ static void cqProcessStreamRes(void *param, TAOS_RES *tres, TAOS_ROW row) {
memcpy
((
char
*
)
val
+
sizeof
(
VarDataLenT
),
buf
,
len
);
memcpy
((
char
*
)
val
+
sizeof
(
VarDataLenT
),
buf
,
len
);
varDataLen
(
val
)
=
len
;
varDataLen
(
val
)
=
len
;
}
}
tdAppendColVal
(
trow
,
val
,
c
->
type
,
c
->
bytes
,
c
->
offset
);
tdAppendColVal
(
dataRow
,
val
,
c
->
type
,
c
->
offset
);
}
}
pBlk
->
dataLen
=
htonl
(
dataRow
Len
(
trow
));
pBlk
->
dataLen
=
htonl
(
memRowDataT
Len
(
trow
));
pBlk
->
schemaLen
=
0
;
pBlk
->
schemaLen
=
0
;
pBlk
->
uid
=
htobe64
(
pObj
->
uid
);
pBlk
->
uid
=
htobe64
(
pObj
->
uid
);
...
@@ -511,7 +513,7 @@ static void cqProcessStreamRes(void *param, TAOS_RES *tres, TAOS_ROW row) {
...
@@ -511,7 +513,7 @@ static void cqProcessStreamRes(void *param, TAOS_RES *tres, TAOS_ROW row) {
pBlk
->
sversion
=
htonl
(
pSchema
->
version
);
pBlk
->
sversion
=
htonl
(
pSchema
->
version
);
pBlk
->
padding
=
0
;
pBlk
->
padding
=
0
;
pHead
->
len
=
sizeof
(
SSubmitMsg
)
+
sizeof
(
SSubmitBlk
)
+
dataRow
Len
(
trow
);
pHead
->
len
=
sizeof
(
SSubmitMsg
)
+
sizeof
(
SSubmitBlk
)
+
memRowDataT
Len
(
trow
);
pMsg
->
header
.
vgId
=
htonl
(
pContext
->
vgId
);
pMsg
->
header
.
vgId
=
htonl
(
pContext
->
vgId
);
pMsg
->
header
.
contLen
=
htonl
(
pHead
->
len
);
pMsg
->
header
.
contLen
=
htonl
(
pHead
->
len
);
...
...
src/inc/taos.h
浏览文件 @
210bee6b
...
@@ -72,6 +72,7 @@ DLL_EXPORT int taos_init();
...
@@ -72,6 +72,7 @@ DLL_EXPORT int taos_init();
DLL_EXPORT
void
taos_cleanup
(
void
);
DLL_EXPORT
void
taos_cleanup
(
void
);
DLL_EXPORT
int
taos_options
(
TSDB_OPTION
option
,
const
void
*
arg
,
...);
DLL_EXPORT
int
taos_options
(
TSDB_OPTION
option
,
const
void
*
arg
,
...);
DLL_EXPORT
TAOS
*
taos_connect
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
pass
,
const
char
*
db
,
uint16_t
port
);
DLL_EXPORT
TAOS
*
taos_connect
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
pass
,
const
char
*
db
,
uint16_t
port
);
DLL_EXPORT
TAOS
*
taos_connect_auth
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
auth
,
const
char
*
db
,
uint16_t
port
);
DLL_EXPORT
void
taos_close
(
TAOS
*
taos
);
DLL_EXPORT
void
taos_close
(
TAOS
*
taos
);
const
char
*
taos_data_type
(
int
type
);
const
char
*
taos_data_type
(
int
type
);
...
@@ -110,21 +111,21 @@ typedef struct TAOS_MULTI_BIND {
...
@@ -110,21 +111,21 @@ typedef struct TAOS_MULTI_BIND {
}
TAOS_MULTI_BIND
;
}
TAOS_MULTI_BIND
;
TAOS_STMT
*
taos_stmt_init
(
TAOS
*
taos
);
DLL_EXPORT
TAOS_STMT
*
taos_stmt_init
(
TAOS
*
taos
);
int
taos_stmt_prepare
(
TAOS_STMT
*
stmt
,
const
char
*
sql
,
unsigned
long
length
);
DLL_EXPORT
int
taos_stmt_prepare
(
TAOS_STMT
*
stmt
,
const
char
*
sql
,
unsigned
long
length
);
int
taos_stmt_set_tbname_tags
(
TAOS_STMT
*
stmt
,
const
char
*
name
,
TAOS_BIND
*
tags
);
DLL_EXPORT
int
taos_stmt_set_tbname_tags
(
TAOS_STMT
*
stmt
,
const
char
*
name
,
TAOS_BIND
*
tags
);
int
taos_stmt_set_tbname
(
TAOS_STMT
*
stmt
,
const
char
*
name
);
DLL_EXPORT
int
taos_stmt_set_tbname
(
TAOS_STMT
*
stmt
,
const
char
*
name
);
int
taos_stmt_is_insert
(
TAOS_STMT
*
stmt
,
int
*
insert
);
DLL_EXPORT
int
taos_stmt_is_insert
(
TAOS_STMT
*
stmt
,
int
*
insert
);
int
taos_stmt_num_params
(
TAOS_STMT
*
stmt
,
int
*
nums
);
DLL_EXPORT
int
taos_stmt_num_params
(
TAOS_STMT
*
stmt
,
int
*
nums
);
int
taos_stmt_get_param
(
TAOS_STMT
*
stmt
,
int
idx
,
int
*
type
,
int
*
bytes
);
int
taos_stmt_get_param
(
TAOS_STMT
*
stmt
,
int
idx
,
int
*
type
,
int
*
bytes
);
int
taos_stmt_bind_param
(
TAOS_STMT
*
stmt
,
TAOS_BIND
*
bind
);
DLL_EXPORT
int
taos_stmt_bind_param
(
TAOS_STMT
*
stmt
,
TAOS_BIND
*
bind
);
int
taos_stmt_bind_param_batch
(
TAOS_STMT
*
stmt
,
TAOS_MULTI_BIND
*
bind
);
int
taos_stmt_bind_param_batch
(
TAOS_STMT
*
stmt
,
TAOS_MULTI_BIND
*
bind
);
int
taos_stmt_bind_single_param_batch
(
TAOS_STMT
*
stmt
,
TAOS_MULTI_BIND
*
bind
,
int
colIdx
);
int
taos_stmt_bind_single_param_batch
(
TAOS_STMT
*
stmt
,
TAOS_MULTI_BIND
*
bind
,
int
colIdx
);
int
taos_stmt_add_batch
(
TAOS_STMT
*
stmt
);
DLL_EXPORT
int
taos_stmt_add_batch
(
TAOS_STMT
*
stmt
);
int
taos_stmt_execute
(
TAOS_STMT
*
stmt
);
DLL_EXPORT
int
taos_stmt_execute
(
TAOS_STMT
*
stmt
);
TAOS_RES
*
taos_stmt_use_result
(
TAOS_STMT
*
stmt
);
DLL_EXPORT
TAOS_RES
*
taos_stmt_use_result
(
TAOS_STMT
*
stmt
);
int
taos_stmt_close
(
TAOS_STMT
*
stmt
);
DLL_EXPORT
int
taos_stmt_close
(
TAOS_STMT
*
stmt
);
char
*
taos_stmt_errstr
(
TAOS_STMT
*
stmt
);
DLL_EXPORT
char
*
taos_stmt_errstr
(
TAOS_STMT
*
stmt
);
DLL_EXPORT
TAOS_RES
*
taos_query
(
TAOS
*
taos
,
const
char
*
sql
);
DLL_EXPORT
TAOS_RES
*
taos_query
(
TAOS
*
taos
,
const
char
*
sql
);
DLL_EXPORT
TAOS_ROW
taos_fetch_row
(
TAOS_RES
*
res
);
DLL_EXPORT
TAOS_ROW
taos_fetch_row
(
TAOS_RES
*
res
);
...
@@ -139,10 +140,10 @@ DLL_EXPORT int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int n
...
@@ -139,10 +140,10 @@ DLL_EXPORT int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int n
DLL_EXPORT
void
taos_stop_query
(
TAOS_RES
*
res
);
DLL_EXPORT
void
taos_stop_query
(
TAOS_RES
*
res
);
DLL_EXPORT
bool
taos_is_null
(
TAOS_RES
*
res
,
int32_t
row
,
int32_t
col
);
DLL_EXPORT
bool
taos_is_null
(
TAOS_RES
*
res
,
int32_t
row
,
int32_t
col
);
int
taos_fetch_block
(
TAOS_RES
*
res
,
TAOS_ROW
*
rows
);
DLL_EXPORT
int
taos_fetch_block
(
TAOS_RES
*
res
,
TAOS_ROW
*
rows
);
int
taos_validate_sql
(
TAOS
*
taos
,
const
char
*
sql
);
DLL_EXPORT
int
taos_validate_sql
(
TAOS
*
taos
,
const
char
*
sql
);
int
*
taos_fetch_lengths
(
TAOS_RES
*
res
);
DLL_EXPORT
int
*
taos_fetch_lengths
(
TAOS_RES
*
res
);
// TAOS_RES *taos_list_tables(TAOS *mysql, const char *wild);
// TAOS_RES *taos_list_tables(TAOS *mysql, const char *wild);
// TAOS_RES *taos_list_dbs(TAOS *mysql, const char *wild);
// TAOS_RES *taos_list_dbs(TAOS *mysql, const char *wild);
...
...
src/inc/taosdef.h
浏览文件 @
210bee6b
...
@@ -180,7 +180,7 @@ do { \
...
@@ -180,7 +180,7 @@ do { \
// this is the length of its string representation, including the terminator zero
// this is the length of its string representation, including the terminator zero
#define TSDB_ACCT_ID_LEN 11
#define TSDB_ACCT_ID_LEN 11
#define TSDB_MAX_COLUMNS
1024
#define TSDB_MAX_COLUMNS
4096
#define TSDB_MIN_COLUMNS 2 //PRIMARY COLUMN(timestamp) + other columns
#define TSDB_MIN_COLUMNS 2 //PRIMARY COLUMN(timestamp) + other columns
#define TSDB_NODE_NAME_LEN 64
#define TSDB_NODE_NAME_LEN 64
...
@@ -199,7 +199,13 @@ do { \
...
@@ -199,7 +199,13 @@ do { \
#define TSDB_APPNAME_LEN TSDB_UNI_LEN
#define TSDB_APPNAME_LEN TSDB_UNI_LEN
#define TSDB_MAX_BYTES_PER_ROW 16384
/**
* In some scenarios uint16_t (0~65535) is used to store the row len.
* - Firstly, we use 65531(65535 - 4), as the SDataRow/SKVRow contains 4 bits header.
* - Secondly, if all cols are VarDataT type except primary key, we need 4 bits to store the offset, thus
* the final value is 65531-(4096-1)*4 = 49151.
*/
#define TSDB_MAX_BYTES_PER_ROW 49151
#define TSDB_MAX_TAGS_LEN 16384
#define TSDB_MAX_TAGS_LEN 16384
#define TSDB_MAX_TAGS 128
#define TSDB_MAX_TAGS 128
#define TSDB_MAX_TAG_CONDITIONS 1024
#define TSDB_MAX_TAG_CONDITIONS 1024
...
@@ -327,8 +333,9 @@ do { \
...
@@ -327,8 +333,9 @@ do { \
#define TSDB_MAX_JOIN_TABLE_NUM 10
#define TSDB_MAX_JOIN_TABLE_NUM 10
#define TSDB_MAX_UNION_CLAUSE 5
#define TSDB_MAX_UNION_CLAUSE 5
#define TSDB_MAX_BINARY_LEN (TSDB_MAX_BYTES_PER_ROW-TSDB_KEYSIZE)
#define TSDB_MAX_FIELD_LEN 16384
#define TSDB_MAX_NCHAR_LEN (TSDB_MAX_BYTES_PER_ROW-TSDB_KEYSIZE)
#define TSDB_MAX_BINARY_LEN (TSDB_MAX_FIELD_LEN-TSDB_KEYSIZE) // keep 16384
#define TSDB_MAX_NCHAR_LEN (TSDB_MAX_FIELD_LEN-TSDB_KEYSIZE) // keep 16384
#define PRIMARYKEY_TIMESTAMP_COL_INDEX 0
#define PRIMARYKEY_TIMESTAMP_COL_INDEX 0
#define TSDB_MAX_RPC_THREADS 5
#define TSDB_MAX_RPC_THREADS 5
...
...
src/inc/taoserror.h
浏览文件 @
210bee6b
...
@@ -174,6 +174,7 @@ int32_t* taosGetErrno();
...
@@ -174,6 +174,7 @@ int32_t* taosGetErrno();
#define TSDB_CODE_MND_FIELD_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x036C) //"Field does not exist")
#define TSDB_CODE_MND_FIELD_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x036C) //"Field does not exist")
#define TSDB_CODE_MND_INVALID_STABLE_NAME TAOS_DEF_ERROR_CODE(0, 0x036D) //"Super table does not exist")
#define TSDB_CODE_MND_INVALID_STABLE_NAME TAOS_DEF_ERROR_CODE(0, 0x036D) //"Super table does not exist")
#define TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG TAOS_DEF_ERROR_CODE(0, 0x036E) //"Invalid create table message")
#define TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG TAOS_DEF_ERROR_CODE(0, 0x036E) //"Invalid create table message")
#define TSDB_CODE_MND_EXCEED_MAX_ROW_BYTES TAOS_DEF_ERROR_CODE(0, 0x036F) //"Exceed max row bytes")
#define TSDB_CODE_MND_INVALID_FUNC_NAME TAOS_DEF_ERROR_CODE(0, 0x0370) //"Invalid func name")
#define TSDB_CODE_MND_INVALID_FUNC_NAME TAOS_DEF_ERROR_CODE(0, 0x0370) //"Invalid func name")
#define TSDB_CODE_MND_INVALID_FUNC_LEN TAOS_DEF_ERROR_CODE(0, 0x0371) //"Invalid func length")
#define TSDB_CODE_MND_INVALID_FUNC_LEN TAOS_DEF_ERROR_CODE(0, 0x0371) //"Invalid func length")
...
...
src/inc/ttype.h
浏览文件 @
210bee6b
...
@@ -10,14 +10,28 @@ extern "C" {
...
@@ -10,14 +10,28 @@ extern "C" {
#include "taosdef.h"
#include "taosdef.h"
// ----------------- For variable data types such as TSDB_DATA_TYPE_BINARY and TSDB_DATA_TYPE_NCHAR
// ----------------- For variable data types such as TSDB_DATA_TYPE_BINARY and TSDB_DATA_TYPE_NCHAR
typedef
int32_t
VarDataOffsetT
;
typedef
int32_t
VarDataOffsetT
;
typedef
int16_t
VarDataLenT
;
typedef
int16_t
VarDataLenT
;
// maxVarDataLen: 32767
typedef
uint16_t
TDRowLenT
;
// not including overhead: 0 ~ 65535
typedef
uint32_t
TDRowTLenT
;
// total length, including overhead
typedef
struct
tstr
{
typedef
struct
tstr
{
VarDataLenT
len
;
VarDataLenT
len
;
char
data
[];
char
data
[];
}
tstr
;
}
tstr
;
#pragma pack(push, 1)
typedef
struct
{
VarDataLenT
len
;
uint8_t
data
;
}
SBinaryNullT
;
typedef
struct
{
VarDataLenT
len
;
uint32_t
data
;
}
SNCharNullT
;
#pragma pack(pop)
#define VARSTR_HEADER_SIZE sizeof(VarDataLenT)
#define VARSTR_HEADER_SIZE sizeof(VarDataLenT)
#define varDataLen(v) ((VarDataLenT *)(v))[0]
#define varDataLen(v) ((VarDataLenT *)(v))[0]
...
@@ -180,7 +194,7 @@ bool isValidDataType(int32_t type);
...
@@ -180,7 +194,7 @@ bool isValidDataType(int32_t type);
void
setVardataNull
(
char
*
val
,
int32_t
type
);
void
setVardataNull
(
char
*
val
,
int32_t
type
);
void
setNull
(
char
*
val
,
int32_t
type
,
int32_t
bytes
);
void
setNull
(
char
*
val
,
int32_t
type
,
int32_t
bytes
);
void
setNullN
(
char
*
val
,
int32_t
type
,
int32_t
bytes
,
int32_t
numOfElems
);
void
setNullN
(
char
*
val
,
int32_t
type
,
int32_t
bytes
,
int32_t
numOfElems
);
void
*
getNullValue
(
int32_t
type
);
const
void
*
getNullValue
(
int32_t
type
);
void
assignVal
(
char
*
val
,
const
char
*
src
,
int32_t
len
,
int32_t
type
);
void
assignVal
(
char
*
val
,
const
char
*
src
,
int32_t
len
,
int32_t
type
);
void
tsDataSwap
(
void
*
pLeft
,
void
*
pRight
,
int32_t
type
,
int32_t
size
,
void
*
buf
);
void
tsDataSwap
(
void
*
pLeft
,
void
*
pRight
,
int32_t
type
,
int32_t
size
,
void
*
buf
);
...
...
src/kit/taosdemo/taosdemo.c
浏览文件 @
210bee6b
此差异已折叠。
点击以展开。
src/mnode/src/mnodeTable.c
浏览文件 @
210bee6b
...
@@ -1503,6 +1503,18 @@ static int32_t mnodeChangeSuperTableColumn(SMnodeMsg *pMsg) {
...
@@ -1503,6 +1503,18 @@ static int32_t mnodeChangeSuperTableColumn(SMnodeMsg *pMsg) {
return
TSDB_CODE_MND_FIELD_NOT_EXIST
;
return
TSDB_CODE_MND_FIELD_NOT_EXIST
;
}
}
// check exceed max row bytes
int32_t
i
;
uint32_t
nLen
=
0
;
for
(
i
=
0
;
i
<
pStable
->
numOfColumns
;
++
i
)
{
nLen
+=
(
pStable
->
schema
[
i
].
colId
==
col
)
?
pAlter
->
schema
[
0
].
bytes
:
pStable
->
schema
[
i
].
bytes
;
}
if
(
nLen
>
TSDB_MAX_BYTES_PER_ROW
)
{
mError
(
"msg:%p, app:%p stable:%s, change column, name:%s exceed max row bytes"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
pStable
->
info
.
tableId
,
name
);
return
TSDB_CODE_MND_EXCEED_MAX_ROW_BYTES
;
}
// update
// update
SSchema
*
schema
=
(
SSchema
*
)
(
pStable
->
schema
+
col
);
SSchema
*
schema
=
(
SSchema
*
)
(
pStable
->
schema
+
col
);
ASSERT
(
schema
->
type
==
TSDB_DATA_TYPE_BINARY
||
schema
->
type
==
TSDB_DATA_TYPE_NCHAR
);
ASSERT
(
schema
->
type
==
TSDB_DATA_TYPE_BINARY
||
schema
->
type
==
TSDB_DATA_TYPE_NCHAR
);
...
...
src/plugins/http/inc/httpParser.h
浏览文件 @
210bee6b
...
@@ -100,6 +100,7 @@ typedef enum HTTP_PARSER_STATE {
...
@@ -100,6 +100,7 @@ typedef enum HTTP_PARSER_STATE {
HTTP_PARSER_CHUNK
,
HTTP_PARSER_CHUNK
,
HTTP_PARSER_END
,
HTTP_PARSER_END
,
HTTP_PARSER_ERROR
,
HTTP_PARSER_ERROR
,
HTTP_PARSER_OPTIONAL_SP
}
HTTP_PARSER_STATE
;
}
HTTP_PARSER_STATE
;
typedef
enum
HTTP_AUTH_TYPE
{
typedef
enum
HTTP_AUTH_TYPE
{
...
...
src/plugins/http/src/httpParser.c
浏览文件 @
210bee6b
...
@@ -744,6 +744,15 @@ static int32_t httpParserOnSp(HttpParser *parser, HTTP_PARSER_STATE state, const
...
@@ -744,6 +744,15 @@ static int32_t httpParserOnSp(HttpParser *parser, HTTP_PARSER_STATE state, const
return
ok
;
return
ok
;
}
}
static
int32_t
httpParserOnOptionalSp
(
HttpParser
*
parser
,
HTTP_PARSER_STATE
state
,
const
char
c
,
int32_t
*
again
)
{
int32_t
ok
=
0
;
if
(
c
!=
' '
)
{
*
again
=
1
;
httpPopStack
(
parser
);
}
return
ok
;
}
static
int32_t
httpParserOnStatusCode
(
HttpParser
*
parser
,
HTTP_PARSER_STATE
state
,
const
char
c
,
int32_t
*
again
)
{
static
int32_t
httpParserOnStatusCode
(
HttpParser
*
parser
,
HTTP_PARSER_STATE
state
,
const
char
c
,
int32_t
*
again
)
{
HttpContext
*
pContext
=
parser
->
pContext
;
HttpContext
*
pContext
=
parser
->
pContext
;
int32_t
ok
=
0
;
int32_t
ok
=
0
;
...
@@ -867,7 +876,7 @@ static int32_t httpParserOnHeader(HttpParser *parser, HTTP_PARSER_STATE state, c
...
@@ -867,7 +876,7 @@ static int32_t httpParserOnHeader(HttpParser *parser, HTTP_PARSER_STATE state, c
}
}
httpPushStack
(
parser
,
HTTP_PARSER_CRLF
);
httpPushStack
(
parser
,
HTTP_PARSER_CRLF
);
httpPushStack
(
parser
,
HTTP_PARSER_HEADER_VAL
);
httpPushStack
(
parser
,
HTTP_PARSER_HEADER_VAL
);
httpPushStack
(
parser
,
HTTP_PARSER_SP
);
httpPushStack
(
parser
,
HTTP_PARSER_
OPTIONAL_
SP
);
httpPushStack
(
parser
,
HTTP_PARSER_HEADER_KEY
);
httpPushStack
(
parser
,
HTTP_PARSER_HEADER_KEY
);
break
;
break
;
}
}
...
@@ -1061,6 +1070,10 @@ static int32_t httpParseChar(HttpParser *parser, const char c, int32_t *again) {
...
@@ -1061,6 +1070,10 @@ static int32_t httpParseChar(HttpParser *parser, const char c, int32_t *again) {
ok
=
httpParserOnSp
(
parser
,
state
,
c
,
again
);
ok
=
httpParserOnSp
(
parser
,
state
,
c
,
again
);
break
;
break
;
}
}
if
(
state
==
HTTP_PARSER_OPTIONAL_SP
)
{
ok
=
httpParserOnOptionalSp
(
parser
,
state
,
c
,
again
);
break
;
}
if
(
state
==
HTTP_PARSER_STATUS_CODE
)
{
if
(
state
==
HTTP_PARSER_STATUS_CODE
)
{
ok
=
httpParserOnStatusCode
(
parser
,
state
,
c
,
again
);
ok
=
httpParserOnStatusCode
(
parser
,
state
,
c
,
again
);
break
;
break
;
...
...
src/query/inc/qExtbuffer.h
浏览文件 @
210bee6b
...
@@ -77,13 +77,13 @@ typedef struct tFilePagesItem {
...
@@ -77,13 +77,13 @@ typedef struct tFilePagesItem {
typedef
struct
SSchemaEx
{
typedef
struct
SSchemaEx
{
struct
SSchema
field
;
struct
SSchema
field
;
int
16
_t
offset
;
int
32
_t
offset
;
}
SSchemaEx
;
}
SSchemaEx
;
typedef
struct
SColumnModel
{
typedef
struct
SColumnModel
{
int32_t
capacity
;
int32_t
capacity
;
int32_t
numOfCols
;
int32_t
numOfCols
;
int
16
_t
rowSize
;
int
32
_t
rowSize
;
SSchemaEx
*
pFields
;
SSchemaEx
*
pFields
;
}
SColumnModel
;
}
SColumnModel
;
...
...
src/query/inc/qUtil.h
浏览文件 @
210bee6b
...
@@ -66,7 +66,8 @@ static FORCE_INLINE SResultRow *getResultRow(SResultRowInfo *pResultRowInfo, int
...
@@ -66,7 +66,8 @@ static FORCE_INLINE SResultRow *getResultRow(SResultRowInfo *pResultRowInfo, int
return
pResultRowInfo
->
pResult
[
slot
];
return
pResultRowInfo
->
pResult
[
slot
];
}
}
static
FORCE_INLINE
char
*
getPosInResultPage
(
SQueryAttr
*
pQueryAttr
,
tFilePage
*
page
,
int32_t
rowOffset
,
int16_t
offset
)
{
static
FORCE_INLINE
char
*
getPosInResultPage
(
SQueryAttr
*
pQueryAttr
,
tFilePage
*
page
,
int32_t
rowOffset
,
int32_t
offset
)
{
assert
(
rowOffset
>=
0
&&
pQueryAttr
!=
NULL
);
assert
(
rowOffset
>=
0
&&
pQueryAttr
!=
NULL
);
int32_t
numOfRows
=
(
int32_t
)
GET_ROW_PARAM_FOR_MULTIOUTPUT
(
pQueryAttr
,
pQueryAttr
->
topBotQuery
,
pQueryAttr
->
stableQuery
);
int32_t
numOfRows
=
(
int32_t
)
GET_ROW_PARAM_FOR_MULTIOUTPUT
(
pQueryAttr
,
pQueryAttr
->
topBotQuery
,
pQueryAttr
->
stableQuery
);
...
...
src/query/src/qAggMain.c
浏览文件 @
210bee6b
...
@@ -3982,7 +3982,7 @@ void blockInfo_func(SQLFunctionCtx* pCtx) {
...
@@ -3982,7 +3982,7 @@ void blockInfo_func(SQLFunctionCtx* pCtx) {
int32_t
len
=
*
(
int32_t
*
)
pCtx
->
pInput
;
int32_t
len
=
*
(
int32_t
*
)
pCtx
->
pInput
;
blockDistInfoFromBinary
((
char
*
)
pCtx
->
pInput
+
sizeof
(
int32_t
),
len
,
pDist
);
blockDistInfoFromBinary
((
char
*
)
pCtx
->
pInput
+
sizeof
(
int32_t
),
len
,
pDist
);
pDist
->
rowSize
=
(
int16_t
)
pCtx
->
param
[
0
].
i64
;
pDist
->
rowSize
=
(
uint16_t
)
pCtx
->
param
[
0
].
i64
;
memcpy
(
pCtx
->
pOutput
,
pCtx
->
pInput
,
sizeof
(
int32_t
)
+
len
);
memcpy
(
pCtx
->
pOutput
,
pCtx
->
pInput
,
sizeof
(
int32_t
)
+
len
);
...
@@ -4129,7 +4129,7 @@ void blockinfo_func_finalizer(SQLFunctionCtx* pCtx) {
...
@@ -4129,7 +4129,7 @@ void blockinfo_func_finalizer(SQLFunctionCtx* pCtx) {
SResultRowCellInfo
*
pResInfo
=
GET_RES_INFO
(
pCtx
);
SResultRowCellInfo
*
pResInfo
=
GET_RES_INFO
(
pCtx
);
STableBlockDist
*
pDist
=
(
STableBlockDist
*
)
GET_ROWCELL_INTERBUF
(
pResInfo
);
STableBlockDist
*
pDist
=
(
STableBlockDist
*
)
GET_ROWCELL_INTERBUF
(
pResInfo
);
pDist
->
rowSize
=
(
int16_t
)
pCtx
->
param
[
0
].
i64
;
pDist
->
rowSize
=
(
u
int16_t
)
pCtx
->
param
[
0
].
i64
;
generateBlockDistResult
(
pDist
,
pCtx
->
pOutput
);
generateBlockDistResult
(
pDist
,
pCtx
->
pOutput
);
// cannot set the numOfIteratedElems again since it is set during previous iteration
// cannot set the numOfIteratedElems again since it is set during previous iteration
...
...
src/query/src/qExecutor.c
浏览文件 @
210bee6b
...
@@ -3583,7 +3583,7 @@ void setResultRowOutputBufInitCtx(SQueryRuntimeEnv *pRuntimeEnv, SResultRow *pRe
...
@@ -3583,7 +3583,7 @@ void setResultRowOutputBufInitCtx(SQueryRuntimeEnv *pRuntimeEnv, SResultRow *pRe
// Note: pResult->pos[i]->num == 0, there is only fixed number of results for each group
// Note: pResult->pos[i]->num == 0, there is only fixed number of results for each group
tFilePage
*
bufPage
=
getResBufPage
(
pRuntimeEnv
->
pResultBuf
,
pResult
->
pageId
);
tFilePage
*
bufPage
=
getResBufPage
(
pRuntimeEnv
->
pResultBuf
,
pResult
->
pageId
);
int
16
_t
offset
=
0
;
int
32
_t
offset
=
0
;
for
(
int32_t
i
=
0
;
i
<
numOfOutput
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfOutput
;
++
i
)
{
pCtx
[
i
].
resultInfo
=
getResultCell
(
pResult
,
i
,
rowCellInfoOffset
);
pCtx
[
i
].
resultInfo
=
getResultCell
(
pResult
,
i
,
rowCellInfoOffset
);
...
@@ -3897,7 +3897,7 @@ static int32_t doCopyToSDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SGroupResInfo*
...
@@ -3897,7 +3897,7 @@ static int32_t doCopyToSDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SGroupResInfo*
tFilePage
*
page
=
getResBufPage
(
pRuntimeEnv
->
pResultBuf
,
pRow
->
pageId
);
tFilePage
*
page
=
getResBufPage
(
pRuntimeEnv
->
pResultBuf
,
pRow
->
pageId
);
int
16
_t
offset
=
0
;
int
32
_t
offset
=
0
;
for
(
int32_t
j
=
0
;
j
<
pBlock
->
info
.
numOfCols
;
++
j
)
{
for
(
int32_t
j
=
0
;
j
<
pBlock
->
info
.
numOfCols
;
++
j
)
{
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pBlock
->
pDataBlock
,
j
);
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pBlock
->
pDataBlock
,
j
);
int32_t
bytes
=
pColInfoData
->
info
.
bytes
;
int32_t
bytes
=
pColInfoData
->
info
.
bytes
;
...
...
src/query/src/qTsbuf.c
浏览文件 @
210bee6b
...
@@ -267,6 +267,10 @@ static void writeDataToDisk(STSBuf* pTSBuf) {
...
@@ -267,6 +267,10 @@ static void writeDataToDisk(STSBuf* pTSBuf) {
if
(
pBlock
->
tag
.
nType
==
TSDB_DATA_TYPE_BINARY
||
pBlock
->
tag
.
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pBlock
->
tag
.
nType
==
TSDB_DATA_TYPE_BINARY
||
pBlock
->
tag
.
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
metaLen
+=
(
int32_t
)
fwrite
(
&
pBlock
->
tag
.
nLen
,
1
,
sizeof
(
pBlock
->
tag
.
nLen
),
pTSBuf
->
f
);
metaLen
+=
(
int32_t
)
fwrite
(
&
pBlock
->
tag
.
nLen
,
1
,
sizeof
(
pBlock
->
tag
.
nLen
),
pTSBuf
->
f
);
metaLen
+=
(
int32_t
)
fwrite
(
pBlock
->
tag
.
pz
,
1
,
(
size_t
)
pBlock
->
tag
.
nLen
,
pTSBuf
->
f
);
metaLen
+=
(
int32_t
)
fwrite
(
pBlock
->
tag
.
pz
,
1
,
(
size_t
)
pBlock
->
tag
.
nLen
,
pTSBuf
->
f
);
}
else
if
(
pBlock
->
tag
.
nType
==
TSDB_DATA_TYPE_FLOAT
)
{
metaLen
+=
(
int32_t
)
fwrite
(
&
pBlock
->
tag
.
nLen
,
1
,
sizeof
(
pBlock
->
tag
.
nLen
),
pTSBuf
->
f
);
float
tfloat
=
(
float
)
pBlock
->
tag
.
dKey
;
metaLen
+=
(
int32_t
)
fwrite
(
&
tfloat
,
1
,
(
size_t
)
pBlock
->
tag
.
nLen
,
pTSBuf
->
f
);
}
else
if
(
pBlock
->
tag
.
nType
!=
TSDB_DATA_TYPE_NULL
)
{
}
else
if
(
pBlock
->
tag
.
nType
!=
TSDB_DATA_TYPE_NULL
)
{
metaLen
+=
(
int32_t
)
fwrite
(
&
pBlock
->
tag
.
nLen
,
1
,
sizeof
(
pBlock
->
tag
.
nLen
),
pTSBuf
->
f
);
metaLen
+=
(
int32_t
)
fwrite
(
&
pBlock
->
tag
.
nLen
,
1
,
sizeof
(
pBlock
->
tag
.
nLen
),
pTSBuf
->
f
);
metaLen
+=
(
int32_t
)
fwrite
(
&
pBlock
->
tag
.
i64
,
1
,
(
size_t
)
pBlock
->
tag
.
nLen
,
pTSBuf
->
f
);
metaLen
+=
(
int32_t
)
fwrite
(
&
pBlock
->
tag
.
i64
,
1
,
(
size_t
)
pBlock
->
tag
.
nLen
,
pTSBuf
->
f
);
...
@@ -351,6 +355,11 @@ STSBlock* readDataFromDisk(STSBuf* pTSBuf, int32_t order, bool decomp) {
...
@@ -351,6 +355,11 @@ STSBlock* readDataFromDisk(STSBuf* pTSBuf, int32_t order, bool decomp) {
sz
=
fread
(
pBlock
->
tag
.
pz
,
(
size_t
)
pBlock
->
tag
.
nLen
,
1
,
pTSBuf
->
f
);
sz
=
fread
(
pBlock
->
tag
.
pz
,
(
size_t
)
pBlock
->
tag
.
nLen
,
1
,
pTSBuf
->
f
);
UNUSED
(
sz
);
UNUSED
(
sz
);
}
else
if
(
pBlock
->
tag
.
nType
==
TSDB_DATA_TYPE_FLOAT
)
{
float
tfloat
=
0
;
sz
=
fread
(
&
tfloat
,
(
size_t
)
pBlock
->
tag
.
nLen
,
1
,
pTSBuf
->
f
);
pBlock
->
tag
.
dKey
=
(
double
)
tfloat
;
UNUSED
(
sz
);
}
else
if
(
pBlock
->
tag
.
nType
!=
TSDB_DATA_TYPE_NULL
)
{
//TODO check the return value
}
else
if
(
pBlock
->
tag
.
nType
!=
TSDB_DATA_TYPE_NULL
)
{
//TODO check the return value
sz
=
fread
(
&
pBlock
->
tag
.
i64
,
(
size_t
)
pBlock
->
tag
.
nLen
,
1
,
pTSBuf
->
f
);
sz
=
fread
(
&
pBlock
->
tag
.
i64
,
(
size_t
)
pBlock
->
tag
.
nLen
,
1
,
pTSBuf
->
f
);
UNUSED
(
sz
);
UNUSED
(
sz
);
...
...
src/tsdb/inc/tsdbMemTable.h
浏览文件 @
210bee6b
...
@@ -71,27 +71,27 @@ int tsdbLoadDataFromCache(STable* pTable, SSkipListIterator* pIter, TSKEY maxK
...
@@ -71,27 +71,27 @@ int tsdbLoadDataFromCache(STable* pTable, SSkipListIterator* pIter, TSKEY maxK
TKEY
*
filterKeys
,
int
nFilterKeys
,
bool
keepDup
,
SMergeInfo
*
pMergeInfo
);
TKEY
*
filterKeys
,
int
nFilterKeys
,
bool
keepDup
,
SMergeInfo
*
pMergeInfo
);
void
*
tsdbCommitData
(
STsdbRepo
*
pRepo
);
void
*
tsdbCommitData
(
STsdbRepo
*
pRepo
);
static
FORCE_INLINE
S
Data
Row
tsdbNextIterRow
(
SSkipListIterator
*
pIter
)
{
static
FORCE_INLINE
S
Mem
Row
tsdbNextIterRow
(
SSkipListIterator
*
pIter
)
{
if
(
pIter
==
NULL
)
return
NULL
;
if
(
pIter
==
NULL
)
return
NULL
;
SSkipListNode
*
node
=
tSkipListIterGet
(
pIter
);
SSkipListNode
*
node
=
tSkipListIterGet
(
pIter
);
if
(
node
==
NULL
)
return
NULL
;
if
(
node
==
NULL
)
return
NULL
;
return
(
S
Data
Row
)
SL_GET_NODE_DATA
(
node
);
return
(
S
Mem
Row
)
SL_GET_NODE_DATA
(
node
);
}
}
static
FORCE_INLINE
TSKEY
tsdbNextIterKey
(
SSkipListIterator
*
pIter
)
{
static
FORCE_INLINE
TSKEY
tsdbNextIterKey
(
SSkipListIterator
*
pIter
)
{
S
Data
Row
row
=
tsdbNextIterRow
(
pIter
);
S
Mem
Row
row
=
tsdbNextIterRow
(
pIter
);
if
(
row
==
NULL
)
return
TSDB_DATA_TIMESTAMP_NULL
;
if
(
row
==
NULL
)
return
TSDB_DATA_TIMESTAMP_NULL
;
return
data
RowKey
(
row
);
return
mem
RowKey
(
row
);
}
}
static
FORCE_INLINE
TKEY
tsdbNextIterTKey
(
SSkipListIterator
*
pIter
)
{
static
FORCE_INLINE
TKEY
tsdbNextIterTKey
(
SSkipListIterator
*
pIter
)
{
S
Data
Row
row
=
tsdbNextIterRow
(
pIter
);
S
Mem
Row
row
=
tsdbNextIterRow
(
pIter
);
if
(
row
==
NULL
)
return
TKEY_NULL
;
if
(
row
==
NULL
)
return
TKEY_NULL
;
return
data
RowTKey
(
row
);
return
mem
RowTKey
(
row
);
}
}
#endif
/* _TD_TSDB_MEMTABLE_H_ */
#endif
/* _TD_TSDB_MEMTABLE_H_ */
\ No newline at end of file
src/tsdb/inc/tsdbMeta.h
浏览文件 @
210bee6b
...
@@ -32,7 +32,7 @@ typedef struct STable {
...
@@ -32,7 +32,7 @@ typedef struct STable {
void
*
eventHandler
;
// TODO
void
*
eventHandler
;
// TODO
void
*
streamHandler
;
// TODO
void
*
streamHandler
;
// TODO
TSKEY
lastKey
;
TSKEY
lastKey
;
S
DataRow
lastRow
;
S
MemRow
lastRow
;
char
*
sql
;
char
*
sql
;
void
*
cqhandle
;
void
*
cqhandle
;
SRWLatch
latch
;
// TODO: implementa latch functions
SRWLatch
latch
;
// TODO: implementa latch functions
...
@@ -148,7 +148,7 @@ static FORCE_INLINE STSchema *tsdbGetTableTagSchema(STable *pTable) {
...
@@ -148,7 +148,7 @@ static FORCE_INLINE STSchema *tsdbGetTableTagSchema(STable *pTable) {
}
}
static
FORCE_INLINE
TSKEY
tsdbGetTableLastKeyImpl
(
STable
*
pTable
)
{
static
FORCE_INLINE
TSKEY
tsdbGetTableLastKeyImpl
(
STable
*
pTable
)
{
ASSERT
(
pTable
->
lastRow
==
NULL
||
pTable
->
lastKey
==
dataRowKey
(
pTable
->
lastRow
));
ASSERT
(
(
pTable
->
lastRow
==
NULL
)
||
(
pTable
->
lastKey
==
memRowKey
(
pTable
->
lastRow
)
));
return
pTable
->
lastKey
;
return
pTable
->
lastKey
;
}
}
...
...
src/tsdb/src/tsdbCommit.c
浏览文件 @
210bee6b
...
@@ -920,7 +920,8 @@ int tsdbWriteBlockImpl(STsdbRepo *pRepo, STable *pTable, SDFile *pDFile, SDataCo
...
@@ -920,7 +920,8 @@ int tsdbWriteBlockImpl(STsdbRepo *pRepo, STable *pTable, SDFile *pDFile, SDataCo
SDataCol
*
pDataCol
=
pDataCols
->
cols
+
ncol
;
SDataCol
*
pDataCol
=
pDataCols
->
cols
+
ncol
;
SBlockCol
*
pBlockCol
=
pBlockData
->
cols
+
nColsNotAllNull
;
SBlockCol
*
pBlockCol
=
pBlockData
->
cols
+
nColsNotAllNull
;
if
(
isNEleNull
(
pDataCol
,
rowsToWrite
))
{
// all data to commit are NULL, just ignore it
// if (isNEleNull(pDataCol, rowsToWrite)) { // all data to commit are NULL, just ignore it
if
(
isAllRowsNull
(
pDataCol
))
{
// all data to commit are NULL, just ignore it
continue
;
continue
;
}
}
...
@@ -1264,12 +1265,12 @@ static void tsdbLoadAndMergeFromCache(SDataCols *pDataCols, int *iter, SCommitIt
...
@@ -1264,12 +1265,12 @@ static void tsdbLoadAndMergeFromCache(SDataCols *pDataCols, int *iter, SCommitIt
while
(
true
)
{
while
(
true
)
{
key1
=
(
*
iter
>=
pDataCols
->
numOfRows
)
?
INT64_MAX
:
dataColsKeyAt
(
pDataCols
,
*
iter
);
key1
=
(
*
iter
>=
pDataCols
->
numOfRows
)
?
INT64_MAX
:
dataColsKeyAt
(
pDataCols
,
*
iter
);
bool
isRowDel
=
false
;
bool
isRowDel
=
false
;
S
Data
Row
row
=
tsdbNextIterRow
(
pCommitIter
->
pIter
);
S
Mem
Row
row
=
tsdbNextIterRow
(
pCommitIter
->
pIter
);
if
(
row
==
NULL
||
data
RowKey
(
row
)
>
maxKey
)
{
if
(
row
==
NULL
||
mem
RowKey
(
row
)
>
maxKey
)
{
key2
=
INT64_MAX
;
key2
=
INT64_MAX
;
}
else
{
}
else
{
key2
=
data
RowKey
(
row
);
key2
=
mem
RowKey
(
row
);
isRowDel
=
data
RowDeleted
(
row
);
isRowDel
=
mem
RowDeleted
(
row
);
}
}
if
(
key1
==
INT64_MAX
&&
key2
==
INT64_MAX
)
break
;
if
(
key1
==
INT64_MAX
&&
key2
==
INT64_MAX
)
break
;
...
@@ -1284,24 +1285,24 @@ static void tsdbLoadAndMergeFromCache(SDataCols *pDataCols, int *iter, SCommitIt
...
@@ -1284,24 +1285,24 @@ static void tsdbLoadAndMergeFromCache(SDataCols *pDataCols, int *iter, SCommitIt
(
*
iter
)
++
;
(
*
iter
)
++
;
}
else
if
(
key1
>
key2
)
{
}
else
if
(
key1
>
key2
)
{
if
(
!
isRowDel
)
{
if
(
!
isRowDel
)
{
if
(
pSchema
==
NULL
||
schemaVersion
(
pSchema
)
!=
data
RowVersion
(
row
))
{
if
(
pSchema
==
NULL
||
schemaVersion
(
pSchema
)
!=
mem
RowVersion
(
row
))
{
pSchema
=
tsdbGetTableSchemaImpl
(
pCommitIter
->
pTable
,
false
,
false
,
data
RowVersion
(
row
));
pSchema
=
tsdbGetTableSchemaImpl
(
pCommitIter
->
pTable
,
false
,
false
,
mem
RowVersion
(
row
));
ASSERT
(
pSchema
!=
NULL
);
ASSERT
(
pSchema
!=
NULL
);
}
}
tdAppend
Data
RowToDataCol
(
row
,
pSchema
,
pTarget
);
tdAppend
Mem
RowToDataCol
(
row
,
pSchema
,
pTarget
);
}
}
tSkipListIterNext
(
pCommitIter
->
pIter
);
tSkipListIterNext
(
pCommitIter
->
pIter
);
}
else
{
}
else
{
if
(
update
)
{
if
(
update
)
{
if
(
!
isRowDel
)
{
if
(
!
isRowDel
)
{
if
(
pSchema
==
NULL
||
schemaVersion
(
pSchema
)
!=
data
RowVersion
(
row
))
{
if
(
pSchema
==
NULL
||
schemaVersion
(
pSchema
)
!=
mem
RowVersion
(
row
))
{
pSchema
=
tsdbGetTableSchemaImpl
(
pCommitIter
->
pTable
,
false
,
false
,
data
RowVersion
(
row
));
pSchema
=
tsdbGetTableSchemaImpl
(
pCommitIter
->
pTable
,
false
,
false
,
mem
RowVersion
(
row
));
ASSERT
(
pSchema
!=
NULL
);
ASSERT
(
pSchema
!=
NULL
);
}
}
tdAppend
Data
RowToDataCol
(
row
,
pSchema
,
pTarget
);
tdAppend
Mem
RowToDataCol
(
row
,
pSchema
,
pTarget
);
}
}
}
else
{
}
else
{
ASSERT
(
!
isRowDel
);
ASSERT
(
!
isRowDel
);
...
...
src/tsdb/src/tsdbMain.c
浏览文件 @
210bee6b
...
@@ -641,7 +641,7 @@ static int tsdbRestoreLastColumns(STsdbRepo *pRepo, STable *pTable, SReadH* pRea
...
@@ -641,7 +641,7 @@ static int tsdbRestoreLastColumns(STsdbRepo *pRepo, STable *pTable, SReadH* pRea
int
numColumns
;
int
numColumns
;
int32_t
blockIdx
;
int32_t
blockIdx
;
SDataStatis
*
pBlockStatis
=
NULL
;
SDataStatis
*
pBlockStatis
=
NULL
;
S
DataRow
row
=
NULL
;
S
MemRow
row
=
NULL
;
// restore last column data with last schema
// restore last column data with last schema
int
err
=
0
;
int
err
=
0
;
...
@@ -657,13 +657,15 @@ static int tsdbRestoreLastColumns(STsdbRepo *pRepo, STable *pTable, SReadH* pRea
...
@@ -657,13 +657,15 @@ static int tsdbRestoreLastColumns(STsdbRepo *pRepo, STable *pTable, SReadH* pRea
}
}
}
}
row
=
taosTMalloc
(
data
RowMaxBytesFromSchema
(
pSchema
));
row
=
taosTMalloc
(
mem
RowMaxBytesFromSchema
(
pSchema
));
if
(
row
==
NULL
)
{
if
(
row
==
NULL
)
{
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
err
=
-
1
;
err
=
-
1
;
goto
out
;
goto
out
;
}
}
tdInitDataRow
(
row
,
pSchema
);
memRowSetType
(
row
,
SMEM_ROW_DATA
);
tdInitDataRow
(
memRowDataBody
(
row
),
pSchema
);
// first load block index info
// first load block index info
if
(
tsdbLoadBlockInfo
(
pReadh
,
NULL
)
<
0
)
{
if
(
tsdbLoadBlockInfo
(
pReadh
,
NULL
)
<
0
)
{
...
@@ -720,9 +722,9 @@ static int tsdbRestoreLastColumns(STsdbRepo *pRepo, STable *pTable, SReadH* pRea
...
@@ -720,9 +722,9 @@ static int tsdbRestoreLastColumns(STsdbRepo *pRepo, STable *pTable, SReadH* pRea
// OK,let's load row from backward to get not-null column
// OK,let's load row from backward to get not-null column
for
(
int32_t
rowId
=
pBlock
->
numOfRows
-
1
;
rowId
>=
0
;
rowId
--
)
{
for
(
int32_t
rowId
=
pBlock
->
numOfRows
-
1
;
rowId
>=
0
;
rowId
--
)
{
SDataCol
*
pDataCol
=
pReadh
->
pDCols
[
0
]
->
cols
+
i
;
SDataCol
*
pDataCol
=
pReadh
->
pDCols
[
0
]
->
cols
+
i
;
tdAppendColVal
(
row
,
tdGetColDataOfRow
(
pDataCol
,
rowId
),
pCol
->
type
,
pCol
->
bytes
,
pCol
->
offset
);
tdAppendColVal
(
memRowDataBody
(
row
),
tdGetColDataOfRow
(
pDataCol
,
rowId
),
pCol
->
type
,
pCol
->
offset
);
//SDataCol *pDataCol = readh.pDCols[0]->cols + j;
//SDataCol *pDataCol = readh.pDCols[0]->cols + j;
void
*
value
=
tdGetRowDataOfCol
(
row
,
(
int8_t
)
pCol
->
type
,
TD_DATA_ROW_HEAD_SIZE
+
pCol
->
offset
);
void
*
value
=
tdGetRowDataOfCol
(
memRowDataBody
(
row
)
,
(
int8_t
)
pCol
->
type
,
TD_DATA_ROW_HEAD_SIZE
+
pCol
->
offset
);
if
(
isNull
(
value
,
pCol
->
type
))
{
if
(
isNull
(
value
,
pCol
->
type
))
{
continue
;
continue
;
}
}
...
@@ -742,8 +744,8 @@ static int tsdbRestoreLastColumns(STsdbRepo *pRepo, STable *pTable, SReadH* pRea
...
@@ -742,8 +744,8 @@ static int tsdbRestoreLastColumns(STsdbRepo *pRepo, STable *pTable, SReadH* pRea
// save row ts(in column 0)
// save row ts(in column 0)
pDataCol
=
pReadh
->
pDCols
[
0
]
->
cols
+
0
;
pDataCol
=
pReadh
->
pDCols
[
0
]
->
cols
+
0
;
pCol
=
schemaColAt
(
pSchema
,
0
);
pCol
=
schemaColAt
(
pSchema
,
0
);
tdAppendColVal
(
row
,
tdGetColDataOfRow
(
pDataCol
,
rowId
),
pCol
->
type
,
pCol
->
bytes
,
pCol
->
offset
);
tdAppendColVal
(
memRowDataBody
(
row
),
tdGetColDataOfRow
(
pDataCol
,
rowId
),
pCol
->
type
,
pCol
->
offset
);
pLastCol
->
ts
=
data
RowKey
(
row
);
pLastCol
->
ts
=
mem
RowKey
(
row
);
pTable
->
restoreColumnNum
+=
1
;
pTable
->
restoreColumnNum
+=
1
;
...
@@ -779,18 +781,18 @@ static int tsdbRestoreLastRow(STsdbRepo *pRepo, STable *pTable, SReadH* pReadh,
...
@@ -779,18 +781,18 @@ static int tsdbRestoreLastRow(STsdbRepo *pRepo, STable *pTable, SReadH* pReadh,
// Get the data in row
// Get the data in row
STSchema
*
pSchema
=
tsdbGetTableSchema
(
pTable
);
STSchema
*
pSchema
=
tsdbGetTableSchema
(
pTable
);
pTable
->
lastRow
=
taosTMalloc
(
data
RowMaxBytesFromSchema
(
pSchema
));
pTable
->
lastRow
=
taosTMalloc
(
mem
RowMaxBytesFromSchema
(
pSchema
));
if
(
pTable
->
lastRow
==
NULL
)
{
if
(
pTable
->
lastRow
==
NULL
)
{
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
return
-
1
;
return
-
1
;
}
}
memRowSetType
(
pTable
->
lastRow
,
SMEM_ROW_DATA
);
tdInitDataRow
(
pTable
->
lastRow
,
pSchema
);
tdInitDataRow
(
memRowDataBody
(
pTable
->
lastRow
)
,
pSchema
);
for
(
int
icol
=
0
;
icol
<
schemaNCols
(
pSchema
);
icol
++
)
{
for
(
int
icol
=
0
;
icol
<
schemaNCols
(
pSchema
);
icol
++
)
{
STColumn
*
pCol
=
schemaColAt
(
pSchema
,
icol
);
STColumn
*
pCol
=
schemaColAt
(
pSchema
,
icol
);
SDataCol
*
pDataCol
=
pReadh
->
pDCols
[
0
]
->
cols
+
icol
;
SDataCol
*
pDataCol
=
pReadh
->
pDCols
[
0
]
->
cols
+
icol
;
tdAppendColVal
(
pTable
->
lastRow
,
tdGetColDataOfRow
(
pDataCol
,
pBlock
->
numOfRows
-
1
),
pCol
->
type
,
pCol
->
bytes
,
tdAppendColVal
(
memRowDataBody
(
pTable
->
lastRow
),
tdGetColDataOfRow
(
pDataCol
,
pBlock
->
numOfRows
-
1
),
pCol
->
type
,
pCol
->
offset
);
pCol
->
offset
);
}
}
return
0
;
return
0
;
...
...
src/tsdb/src/tsdbMemTable.c
浏览文件 @
210bee6b
...
@@ -21,7 +21,7 @@
...
@@ -21,7 +21,7 @@
typedef
struct
{
typedef
struct
{
int32_t
totalLen
;
int32_t
totalLen
;
int32_t
len
;
int32_t
len
;
S
DataRow
row
;
S
MemRow
row
;
}
SSubmitBlkIter
;
}
SSubmitBlkIter
;
typedef
struct
{
typedef
struct
{
...
@@ -36,20 +36,19 @@ static STableData *tsdbNewTableData(STsdbCfg *pCfg, STable *pTable);
...
@@ -36,20 +36,19 @@ static STableData *tsdbNewTableData(STsdbCfg *pCfg, STable *pTable);
static
void
tsdbFreeTableData
(
STableData
*
pTableData
);
static
void
tsdbFreeTableData
(
STableData
*
pTableData
);
static
char
*
tsdbGetTsTupleKey
(
const
void
*
data
);
static
char
*
tsdbGetTsTupleKey
(
const
void
*
data
);
static
int
tsdbAdjustMemMaxTables
(
SMemTable
*
pMemTable
,
int
maxTables
);
static
int
tsdbAdjustMemMaxTables
(
SMemTable
*
pMemTable
,
int
maxTables
);
static
int
tsdbAppendTableRowToCols
(
STable
*
pTable
,
SDataCols
*
pCols
,
STSchema
**
ppSchema
,
SData
Row
row
);
static
int
tsdbAppendTableRowToCols
(
STable
*
pTable
,
SDataCols
*
pCols
,
STSchema
**
ppSchema
,
SMem
Row
row
);
static
int
tsdbInitSubmitBlkIter
(
SSubmitBlk
*
pBlock
,
SSubmitBlkIter
*
pIter
);
static
int
tsdbInitSubmitBlkIter
(
SSubmitBlk
*
pBlock
,
SSubmitBlkIter
*
pIter
);
static
S
DataRow
tsdbGetSubmitBlkNext
(
SSubmitBlkIter
*
pIter
);
static
S
MemRow
tsdbGetSubmitBlkNext
(
SSubmitBlkIter
*
pIter
);
static
int
tsdbScanAndConvertSubmitMsg
(
STsdbRepo
*
pRepo
,
SSubmitMsg
*
pMsg
);
static
int
tsdbScanAndConvertSubmitMsg
(
STsdbRepo
*
pRepo
,
SSubmitMsg
*
pMsg
);
static
int
tsdbInsertDataToTable
(
STsdbRepo
*
pRepo
,
SSubmitBlk
*
pBlock
,
int32_t
*
affectedrows
);
static
int
tsdbInsertDataToTable
(
STsdbRepo
*
pRepo
,
SSubmitBlk
*
pBlock
,
int32_t
*
affectedrows
);
static
int
tsdbCopyRowToMem
(
STsdbRepo
*
pRepo
,
SData
Row
row
,
STable
*
pTable
,
void
**
ppRow
);
static
int
tsdbCopyRowToMem
(
STsdbRepo
*
pRepo
,
SMem
Row
row
,
STable
*
pTable
,
void
**
ppRow
);
static
int
tsdbInitSubmitMsgIter
(
SSubmitMsg
*
pMsg
,
SSubmitMsgIter
*
pIter
);
static
int
tsdbInitSubmitMsgIter
(
SSubmitMsg
*
pMsg
,
SSubmitMsgIter
*
pIter
);
static
int
tsdbGetSubmitMsgNext
(
SSubmitMsgIter
*
pIter
,
SSubmitBlk
**
pPBlock
);
static
int
tsdbGetSubmitMsgNext
(
SSubmitMsgIter
*
pIter
,
SSubmitBlk
**
pPBlock
);
static
int
tsdbCheckTableSchema
(
STsdbRepo
*
pRepo
,
SSubmitBlk
*
pBlock
,
STable
*
pTable
);
static
int
tsdbCheckTableSchema
(
STsdbRepo
*
pRepo
,
SSubmitBlk
*
pBlock
,
STable
*
pTable
);
static
int
tsdbInsertDataToTableImpl
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
void
**
rows
,
int
rowCounter
);
static
int
tsdbInsertDataToTableImpl
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
void
**
rows
,
int
rowCounter
);
static
void
tsdbFreeRows
(
STsdbRepo
*
pRepo
,
void
**
rows
,
int
rowCounter
);
static
void
tsdbFreeRows
(
STsdbRepo
*
pRepo
,
void
**
rows
,
int
rowCounter
);
static
int
tsdbUpdateTableLatestInfo
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
SDataRow
row
);
static
int
tsdbUpdateTableLatestInfo
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
SMemRow
row
);
static
FORCE_INLINE
int
tsdbCheckRowRange
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
SMemRow
row
,
TSKEY
minKey
,
TSKEY
maxKey
,
static
FORCE_INLINE
int
tsdbCheckRowRange
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
SDataRow
row
,
TSKEY
minKey
,
TSKEY
maxKey
,
TSKEY
now
);
TSKEY
now
);
int32_t
tsdbInsertData
(
STsdbRepo
*
repo
,
SSubmitMsg
*
pMsg
,
SShellSubmitRspMsg
*
pRsp
)
{
int32_t
tsdbInsertData
(
STsdbRepo
*
repo
,
SSubmitMsg
*
pMsg
,
SShellSubmitRspMsg
*
pRsp
)
{
...
@@ -354,7 +353,7 @@ int tsdbLoadDataFromCache(STable *pTable, SSkipListIterator *pIter, TSKEY maxKey
...
@@ -354,7 +353,7 @@ int tsdbLoadDataFromCache(STable *pTable, SSkipListIterator *pIter, TSKEY maxKey
TSKEY
fKey
=
0
;
TSKEY
fKey
=
0
;
bool
isRowDel
=
false
;
bool
isRowDel
=
false
;
int
filterIter
=
0
;
int
filterIter
=
0
;
S
DataRow
row
=
NULL
;
S
MemRow
row
=
NULL
;
SMergeInfo
mInfo
;
SMergeInfo
mInfo
;
if
(
pMergeInfo
==
NULL
)
pMergeInfo
=
&
mInfo
;
if
(
pMergeInfo
==
NULL
)
pMergeInfo
=
&
mInfo
;
...
@@ -365,12 +364,12 @@ int tsdbLoadDataFromCache(STable *pTable, SSkipListIterator *pIter, TSKEY maxKey
...
@@ -365,12 +364,12 @@ int tsdbLoadDataFromCache(STable *pTable, SSkipListIterator *pIter, TSKEY maxKey
if
(
pCols
)
tdResetDataCols
(
pCols
);
if
(
pCols
)
tdResetDataCols
(
pCols
);
row
=
tsdbNextIterRow
(
pIter
);
row
=
tsdbNextIterRow
(
pIter
);
if
(
row
==
NULL
||
data
RowKey
(
row
)
>
maxKey
)
{
if
(
row
==
NULL
||
mem
RowKey
(
row
)
>
maxKey
)
{
rowKey
=
INT64_MAX
;
rowKey
=
INT64_MAX
;
isRowDel
=
false
;
isRowDel
=
false
;
}
else
{
}
else
{
rowKey
=
data
RowKey
(
row
);
rowKey
=
mem
RowKey
(
row
);
isRowDel
=
data
RowDeleted
(
row
);
isRowDel
=
mem
RowDeleted
(
row
);
}
}
if
(
filterIter
>=
nFilterKeys
)
{
if
(
filterIter
>=
nFilterKeys
)
{
...
@@ -407,12 +406,12 @@ int tsdbLoadDataFromCache(STable *pTable, SSkipListIterator *pIter, TSKEY maxKey
...
@@ -407,12 +406,12 @@ int tsdbLoadDataFromCache(STable *pTable, SSkipListIterator *pIter, TSKEY maxKey
tSkipListIterNext
(
pIter
);
tSkipListIterNext
(
pIter
);
row
=
tsdbNextIterRow
(
pIter
);
row
=
tsdbNextIterRow
(
pIter
);
if
(
row
==
NULL
||
data
RowKey
(
row
)
>
maxKey
)
{
if
(
row
==
NULL
||
mem
RowKey
(
row
)
>
maxKey
)
{
rowKey
=
INT64_MAX
;
rowKey
=
INT64_MAX
;
isRowDel
=
false
;
isRowDel
=
false
;
}
else
{
}
else
{
rowKey
=
data
RowKey
(
row
);
rowKey
=
mem
RowKey
(
row
);
isRowDel
=
data
RowDeleted
(
row
);
isRowDel
=
mem
RowDeleted
(
row
);
}
}
}
else
{
}
else
{
if
(
isRowDel
)
{
if
(
isRowDel
)
{
...
@@ -437,12 +436,12 @@ int tsdbLoadDataFromCache(STable *pTable, SSkipListIterator *pIter, TSKEY maxKey
...
@@ -437,12 +436,12 @@ int tsdbLoadDataFromCache(STable *pTable, SSkipListIterator *pIter, TSKEY maxKey
tSkipListIterNext
(
pIter
);
tSkipListIterNext
(
pIter
);
row
=
tsdbNextIterRow
(
pIter
);
row
=
tsdbNextIterRow
(
pIter
);
if
(
row
==
NULL
||
data
RowKey
(
row
)
>
maxKey
)
{
if
(
row
==
NULL
||
mem
RowKey
(
row
)
>
maxKey
)
{
rowKey
=
INT64_MAX
;
rowKey
=
INT64_MAX
;
isRowDel
=
false
;
isRowDel
=
false
;
}
else
{
}
else
{
rowKey
=
data
RowKey
(
row
);
rowKey
=
mem
RowKey
(
row
);
isRowDel
=
data
RowDeleted
(
row
);
isRowDel
=
mem
RowDeleted
(
row
);
}
}
filterIter
++
;
filterIter
++
;
...
@@ -548,7 +547,7 @@ static void tsdbFreeTableData(STableData *pTableData) {
...
@@ -548,7 +547,7 @@ static void tsdbFreeTableData(STableData *pTableData) {
}
}
}
}
static
char
*
tsdbGetTsTupleKey
(
const
void
*
data
)
{
return
dataRowTuple
((
SData
Row
)
data
);
}
static
char
*
tsdbGetTsTupleKey
(
const
void
*
data
)
{
return
memRowTuple
((
SMem
Row
)
data
);
}
static
int
tsdbAdjustMemMaxTables
(
SMemTable
*
pMemTable
,
int
maxTables
)
{
static
int
tsdbAdjustMemMaxTables
(
SMemTable
*
pMemTable
,
int
maxTables
)
{
ASSERT
(
pMemTable
->
maxTables
<
maxTables
);
ASSERT
(
pMemTable
->
maxTables
<
maxTables
);
...
@@ -572,17 +571,17 @@ static int tsdbAdjustMemMaxTables(SMemTable *pMemTable, int maxTables) {
...
@@ -572,17 +571,17 @@ static int tsdbAdjustMemMaxTables(SMemTable *pMemTable, int maxTables) {
return
0
;
return
0
;
}
}
static
int
tsdbAppendTableRowToCols
(
STable
*
pTable
,
SDataCols
*
pCols
,
STSchema
**
ppSchema
,
S
Data
Row
row
)
{
static
int
tsdbAppendTableRowToCols
(
STable
*
pTable
,
SDataCols
*
pCols
,
STSchema
**
ppSchema
,
S
Mem
Row
row
)
{
if
(
pCols
)
{
if
(
pCols
)
{
if
(
*
ppSchema
==
NULL
||
schemaVersion
(
*
ppSchema
)
!=
data
RowVersion
(
row
))
{
if
(
*
ppSchema
==
NULL
||
schemaVersion
(
*
ppSchema
)
!=
mem
RowVersion
(
row
))
{
*
ppSchema
=
tsdbGetTableSchemaImpl
(
pTable
,
false
,
false
,
data
RowVersion
(
row
));
*
ppSchema
=
tsdbGetTableSchemaImpl
(
pTable
,
false
,
false
,
mem
RowVersion
(
row
));
if
(
*
ppSchema
==
NULL
)
{
if
(
*
ppSchema
==
NULL
)
{
ASSERT
(
false
);
ASSERT
(
false
);
return
-
1
;
return
-
1
;
}
}
}
}
tdAppend
Data
RowToDataCol
(
row
,
*
ppSchema
,
pCols
);
tdAppend
Mem
RowToDataCol
(
row
,
*
ppSchema
,
pCols
);
}
}
return
0
;
return
0
;
...
@@ -592,31 +591,32 @@ static int tsdbInitSubmitBlkIter(SSubmitBlk *pBlock, SSubmitBlkIter *pIter) {
...
@@ -592,31 +591,32 @@ static int tsdbInitSubmitBlkIter(SSubmitBlk *pBlock, SSubmitBlkIter *pIter) {
if
(
pBlock
->
dataLen
<=
0
)
return
-
1
;
if
(
pBlock
->
dataLen
<=
0
)
return
-
1
;
pIter
->
totalLen
=
pBlock
->
dataLen
;
pIter
->
totalLen
=
pBlock
->
dataLen
;
pIter
->
len
=
0
;
pIter
->
len
=
0
;
pIter
->
row
=
(
S
DataRow
)(
pBlock
->
data
+
pBlock
->
schemaLen
);
pIter
->
row
=
(
S
MemRow
)(
pBlock
->
data
+
pBlock
->
schemaLen
);
return
0
;
return
0
;
}
}
static
S
Data
Row
tsdbGetSubmitBlkNext
(
SSubmitBlkIter
*
pIter
)
{
static
S
Mem
Row
tsdbGetSubmitBlkNext
(
SSubmitBlkIter
*
pIter
)
{
S
DataRow
row
=
pIter
->
row
;
S
MemRow
row
=
pIter
->
row
;
// firstly, get current row
if
(
row
==
NULL
)
return
NULL
;
if
(
row
==
NULL
)
return
NULL
;
pIter
->
len
+=
dataRow
Len
(
row
);
pIter
->
len
+=
memRowT
Len
(
row
);
if
(
pIter
->
len
>=
pIter
->
totalLen
)
{
if
(
pIter
->
len
>=
pIter
->
totalLen
)
{
// reach the end
pIter
->
row
=
NULL
;
pIter
->
row
=
NULL
;
}
else
{
}
else
{
pIter
->
row
=
(
char
*
)
row
+
dataRowLen
(
row
);
pIter
->
row
=
(
char
*
)
row
+
memRowTLen
(
row
);
// secondly, move to next row
}
}
return
row
;
return
row
;
}
}
static
FORCE_INLINE
int
tsdbCheckRowRange
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
S
Data
Row
row
,
TSKEY
minKey
,
TSKEY
maxKey
,
static
FORCE_INLINE
int
tsdbCheckRowRange
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
S
Mem
Row
row
,
TSKEY
minKey
,
TSKEY
maxKey
,
TSKEY
now
)
{
TSKEY
now
)
{
if
(
dataRowKey
(
row
)
<
minKey
||
dataRowKey
(
row
)
>
maxKey
)
{
TSKEY
rowKey
=
memRowKey
(
row
);
if
(
rowKey
<
minKey
||
rowKey
>
maxKey
)
{
tsdbError
(
"vgId:%d table %s tid %d uid %"
PRIu64
" timestamp is out of range! now %"
PRId64
" minKey %"
PRId64
tsdbError
(
"vgId:%d table %s tid %d uid %"
PRIu64
" timestamp is out of range! now %"
PRId64
" minKey %"
PRId64
" maxKey %"
PRId64
" row key %"
PRId64
,
" maxKey %"
PRId64
" row key %"
PRId64
,
REPO_ID
(
pRepo
),
TABLE_CHAR_NAME
(
pTable
),
TABLE_TID
(
pTable
),
TABLE_UID
(
pTable
),
now
,
minKey
,
maxKey
,
REPO_ID
(
pRepo
),
TABLE_CHAR_NAME
(
pTable
),
TABLE_TID
(
pTable
),
TABLE_UID
(
pTable
),
now
,
minKey
,
maxKey
,
dataRowKey
(
row
)
);
rowKey
);
terrno
=
TSDB_CODE_TDB_TIMESTAMP_OUT_OF_RANGE
;
terrno
=
TSDB_CODE_TDB_TIMESTAMP_OUT_OF_RANGE
;
return
-
1
;
return
-
1
;
}
}
...
@@ -630,7 +630,7 @@ static int tsdbScanAndConvertSubmitMsg(STsdbRepo *pRepo, SSubmitMsg *pMsg) {
...
@@ -630,7 +630,7 @@ static int tsdbScanAndConvertSubmitMsg(STsdbRepo *pRepo, SSubmitMsg *pMsg) {
SSubmitMsgIter
msgIter
=
{
0
};
SSubmitMsgIter
msgIter
=
{
0
};
SSubmitBlk
*
pBlock
=
NULL
;
SSubmitBlk
*
pBlock
=
NULL
;
SSubmitBlkIter
blkIter
=
{
0
};
SSubmitBlkIter
blkIter
=
{
0
};
S
DataRow
row
=
NULL
;
S
MemRow
row
=
NULL
;
TSKEY
now
=
taosGetTimestamp
(
pRepo
->
config
.
precision
);
TSKEY
now
=
taosGetTimestamp
(
pRepo
->
config
.
precision
);
TSKEY
minKey
=
now
-
tsTickPerDay
[
pRepo
->
config
.
precision
]
*
pRepo
->
config
.
keep
;
TSKEY
minKey
=
now
-
tsTickPerDay
[
pRepo
->
config
.
precision
]
*
pRepo
->
config
.
keep
;
TSKEY
maxKey
=
now
+
tsTickPerDay
[
pRepo
->
config
.
precision
]
*
pRepo
->
config
.
daysPerFile
;
TSKEY
maxKey
=
now
+
tsTickPerDay
[
pRepo
->
config
.
precision
]
*
pRepo
->
config
.
daysPerFile
;
...
@@ -698,7 +698,7 @@ static int tsdbInsertDataToTable(STsdbRepo *pRepo, SSubmitBlk *pBlock, int32_t *
...
@@ -698,7 +698,7 @@ static int tsdbInsertDataToTable(STsdbRepo *pRepo, SSubmitBlk *pBlock, int32_t *
int64_t
points
=
0
;
int64_t
points
=
0
;
STable
*
pTable
=
NULL
;
STable
*
pTable
=
NULL
;
SSubmitBlkIter
blkIter
=
{
0
};
SSubmitBlkIter
blkIter
=
{
0
};
S
DataRow
row
=
NULL
;
S
MemRow
row
=
NULL
;
void
*
rows
[
TSDB_MAX_INSERT_BATCH
]
=
{
0
};
void
*
rows
[
TSDB_MAX_INSERT_BATCH
]
=
{
0
};
int
rowCounter
=
0
;
int
rowCounter
=
0
;
...
@@ -744,10 +744,10 @@ _err:
...
@@ -744,10 +744,10 @@ _err:
return
-
1
;
return
-
1
;
}
}
static
int
tsdbCopyRowToMem
(
STsdbRepo
*
pRepo
,
S
Data
Row
row
,
STable
*
pTable
,
void
**
ppRow
)
{
static
int
tsdbCopyRowToMem
(
STsdbRepo
*
pRepo
,
S
Mem
Row
row
,
STable
*
pTable
,
void
**
ppRow
)
{
STsdbCfg
*
pCfg
=
&
pRepo
->
config
;
STsdbCfg
*
pCfg
=
&
pRepo
->
config
;
TKEY
tkey
=
data
RowTKey
(
row
);
TKEY
tkey
=
mem
RowTKey
(
row
);
TSKEY
key
=
data
RowKey
(
row
);
TSKEY
key
=
mem
RowKey
(
row
);
bool
isRowDelete
=
TKEY_IS_DELETED
(
tkey
);
bool
isRowDelete
=
TKEY_IS_DELETED
(
tkey
);
if
(
isRowDelete
)
{
if
(
isRowDelete
)
{
...
@@ -765,15 +765,15 @@ static int tsdbCopyRowToMem(STsdbRepo *pRepo, SDataRow row, STable *pTable, void
...
@@ -765,15 +765,15 @@ static int tsdbCopyRowToMem(STsdbRepo *pRepo, SDataRow row, STable *pTable, void
}
}
}
}
void
*
pRow
=
tsdbAllocBytes
(
pRepo
,
dataRow
Len
(
row
));
void
*
pRow
=
tsdbAllocBytes
(
pRepo
,
memRowT
Len
(
row
));
if
(
pRow
==
NULL
)
{
if
(
pRow
==
NULL
)
{
tsdbError
(
"vgId:%d failed to insert row with key %"
PRId64
" to table %s while allocate %
d
bytes since %s"
,
tsdbError
(
"vgId:%d failed to insert row with key %"
PRId64
" to table %s while allocate %
"
PRIu32
"
bytes since %s"
,
REPO_ID
(
pRepo
),
key
,
TABLE_CHAR_NAME
(
pTable
),
dataRow
Len
(
row
),
tstrerror
(
terrno
));
REPO_ID
(
pRepo
),
key
,
TABLE_CHAR_NAME
(
pTable
),
memRowT
Len
(
row
),
tstrerror
(
terrno
));
return
-
1
;
return
-
1
;
}
}
data
RowCpy
(
pRow
,
row
);
mem
RowCpy
(
pRow
,
row
);
ppRow
[
0
]
=
pRow
;
ppRow
[
0
]
=
pRow
;
// save the memory address of data rows
tsdbTrace
(
"vgId:%d a row is %s table %s tid %d uid %"
PRIu64
" key %"
PRIu64
,
REPO_ID
(
pRepo
),
tsdbTrace
(
"vgId:%d a row is %s table %s tid %d uid %"
PRIu64
" key %"
PRIu64
,
REPO_ID
(
pRepo
),
isRowDelete
?
"deleted from"
:
"updated in"
,
TABLE_CHAR_NAME
(
pTable
),
TABLE_TID
(
pTable
),
TABLE_UID
(
pTable
),
isRowDelete
?
"deleted from"
:
"updated in"
,
TABLE_CHAR_NAME
(
pTable
),
TABLE_TID
(
pTable
),
TABLE_UID
(
pTable
),
...
@@ -932,13 +932,15 @@ static int tsdbInsertDataToTableImpl(STsdbRepo *pRepo, STable *pTable, void **ro
...
@@ -932,13 +932,15 @@ static int tsdbInsertDataToTableImpl(STsdbRepo *pRepo, STable *pTable, void **ro
int64_t
osize
=
SL_SIZE
(
pTableData
->
pData
);
int64_t
osize
=
SL_SIZE
(
pTableData
->
pData
);
tSkipListPutBatch
(
pTableData
->
pData
,
rows
,
rowCounter
);
tSkipListPutBatch
(
pTableData
->
pData
,
rows
,
rowCounter
);
int64_t
dsize
=
SL_SIZE
(
pTableData
->
pData
)
-
osize
;
int64_t
dsize
=
SL_SIZE
(
pTableData
->
pData
)
-
osize
;
TSKEY
keyFirstRow
=
memRowKey
(
rows
[
0
]);
TSKEY
keyLastRow
=
memRowKey
(
rows
[
rowCounter
-
1
]);
if
(
pMemTable
->
keyFirst
>
dataRowKey
(
rows
[
0
]))
pMemTable
->
keyFirst
=
dataRowKey
(
rows
[
0
])
;
if
(
pMemTable
->
keyFirst
>
keyFirstRow
)
pMemTable
->
keyFirst
=
keyFirstRow
;
if
(
pMemTable
->
keyLast
<
dataRowKey
(
rows
[
rowCounter
-
1
]))
pMemTable
->
keyLast
=
dataRowKey
(
rows
[
rowCounter
-
1
])
;
if
(
pMemTable
->
keyLast
<
keyLastRow
)
pMemTable
->
keyLast
=
keyLastRow
;
pMemTable
->
numOfRows
+=
dsize
;
pMemTable
->
numOfRows
+=
dsize
;
if
(
pTableData
->
keyFirst
>
dataRowKey
(
rows
[
0
]))
pTableData
->
keyFirst
=
dataRowKey
(
rows
[
0
])
;
if
(
pTableData
->
keyFirst
>
keyFirstRow
)
pTableData
->
keyFirst
=
keyFirstRow
;
if
(
pTableData
->
keyLast
<
dataRowKey
(
rows
[
rowCounter
-
1
]))
pTableData
->
keyLast
=
dataRowKey
(
rows
[
rowCounter
-
1
])
;
if
(
pTableData
->
keyLast
<
keyLastRow
)
pTableData
->
keyLast
=
keyLastRow
;
pTableData
->
numOfRows
+=
dsize
;
pTableData
->
numOfRows
+=
dsize
;
// update table latest info
// update table latest info
...
@@ -954,8 +956,8 @@ static void tsdbFreeRows(STsdbRepo *pRepo, void **rows, int rowCounter) {
...
@@ -954,8 +956,8 @@ static void tsdbFreeRows(STsdbRepo *pRepo, void **rows, int rowCounter) {
STsdbBufPool
*
pBufPool
=
pRepo
->
pPool
;
STsdbBufPool
*
pBufPool
=
pRepo
->
pPool
;
for
(
int
i
=
rowCounter
-
1
;
i
>=
0
;
--
i
)
{
for
(
int
i
=
rowCounter
-
1
;
i
>=
0
;
--
i
)
{
S
DataRow
row
=
(
SData
Row
)
rows
[
i
];
S
MemRow
row
=
(
SMem
Row
)
rows
[
i
];
int
bytes
=
(
int
)
dataRow
Len
(
row
);
int
bytes
=
(
int
)
memRowT
Len
(
row
);
if
(
pRepo
->
mem
->
extraBuffList
==
NULL
)
{
if
(
pRepo
->
mem
->
extraBuffList
==
NULL
)
{
STsdbBufBlock
*
pBufBlock
=
tsdbGetCurrBufBlock
(
pRepo
);
STsdbBufBlock
*
pBufBlock
=
tsdbGetCurrBufBlock
(
pRepo
);
...
@@ -988,21 +990,23 @@ static void tsdbFreeRows(STsdbRepo *pRepo, void **rows, int rowCounter) {
...
@@ -988,21 +990,23 @@ static void tsdbFreeRows(STsdbRepo *pRepo, void **rows, int rowCounter) {
}
}
}
}
static
void
updateTableLatestColumn
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
SDataRow
row
)
{
static
void
updateTableLatestColumn
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
SMemRow
row
)
{
tsdbDebug
(
"vgId:%d updateTableLatestColumn, %s row version:%d"
,
REPO_ID
(
pRepo
),
pTable
->
name
->
data
,
dataRowVersion
(
row
));
tsdbDebug
(
"vgId:%d updateTableLatestColumn, %s row version:%d"
,
REPO_ID
(
pRepo
),
pTable
->
name
->
data
,
memRowVersion
(
row
));
STSchema
*
pSchema
=
tsdbGetTableLatestSchema
(
pTable
);
STSchema
*
pSchema
=
tsdbGetTableLatestSchema
(
pTable
);
if
(
tsdbUpdateLastColSchema
(
pTable
,
pSchema
)
<
0
)
{
if
(
tsdbUpdateLastColSchema
(
pTable
,
pSchema
)
<
0
)
{
return
;
return
;
}
}
pSchema
=
tsdbGetTableSchemaByVersion
(
pTable
,
data
RowVersion
(
row
));
pSchema
=
tsdbGetTableSchemaByVersion
(
pTable
,
mem
RowVersion
(
row
));
if
(
pSchema
==
NULL
)
{
if
(
pSchema
==
NULL
)
{
return
;
return
;
}
}
SDataCol
*
pLatestCols
=
pTable
->
lastCols
;
SDataCol
*
pLatestCols
=
pTable
->
lastCols
;
bool
isDataRow
=
isDataRow
(
row
);
for
(
int16_t
j
=
0
;
j
<
schemaNCols
(
pSchema
);
j
++
)
{
for
(
int16_t
j
=
0
;
j
<
schemaNCols
(
pSchema
);
j
++
)
{
STColumn
*
pTCol
=
schemaColAt
(
pSchema
,
j
);
STColumn
*
pTCol
=
schemaColAt
(
pSchema
,
j
);
// ignore not exist colId
// ignore not exist colId
...
@@ -1010,9 +1014,21 @@ static void updateTableLatestColumn(STsdbRepo *pRepo, STable *pTable, SDataRow r
...
@@ -1010,9 +1014,21 @@ static void updateTableLatestColumn(STsdbRepo *pRepo, STable *pTable, SDataRow r
if
(
idx
==
-
1
)
{
if
(
idx
==
-
1
)
{
continue
;
continue
;
}
}
void
*
value
=
tdGetRowDataOfCol
(
row
,
(
int8_t
)
pTCol
->
type
,
TD_DATA_ROW_HEAD_SIZE
+
pSchema
->
columns
[
j
].
offset
);
void
*
value
=
NULL
;
if
(
isNull
(
value
,
pTCol
->
type
))
{
if
(
isDataRow
)
{
value
=
tdGetRowDataOfCol
(
memRowDataBody
(
row
),
(
int8_t
)
pTCol
->
type
,
TD_DATA_ROW_HEAD_SIZE
+
pSchema
->
columns
[
j
].
offset
);
}
else
{
// SKVRow
SColIdx
*
pColIdx
=
tdGetKVRowIdxOfCol
(
memRowKvBody
(
row
),
pTCol
->
colId
);
if
(
pColIdx
)
{
value
=
tdGetKvRowDataOfCol
(
memRowKvBody
(
row
),
pColIdx
->
offset
);
}
}
if
((
value
==
NULL
)
||
isNull
(
value
,
pTCol
->
type
))
{
continue
;
continue
;
}
}
...
@@ -1027,11 +1043,11 @@ static void updateTableLatestColumn(STsdbRepo *pRepo, STable *pTable, SDataRow r
...
@@ -1027,11 +1043,11 @@ static void updateTableLatestColumn(STsdbRepo *pRepo, STable *pTable, SDataRow r
memcpy
(
pDataCol
->
pData
,
value
,
pDataCol
->
bytes
);
memcpy
(
pDataCol
->
pData
,
value
,
pDataCol
->
bytes
);
//tsdbInfo("updateTableLatestColumn vgId:%d cache column %d for %d,%s", REPO_ID(pRepo), j, pDataCol->bytes, (char*)pDataCol->pData);
//tsdbInfo("updateTableLatestColumn vgId:%d cache column %d for %d,%s", REPO_ID(pRepo), j, pDataCol->bytes, (char*)pDataCol->pData);
pDataCol
->
ts
=
data
RowKey
(
row
);
pDataCol
->
ts
=
mem
RowKey
(
row
);
}
}
}
}
static
int
tsdbUpdateTableLatestInfo
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
S
Data
Row
row
)
{
static
int
tsdbUpdateTableLatestInfo
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
S
Mem
Row
row
)
{
STsdbCfg
*
pCfg
=
&
pRepo
->
config
;
STsdbCfg
*
pCfg
=
&
pRepo
->
config
;
// if cacheLastRow config has been reset, free the lastRow
// if cacheLastRow config has been reset, free the lastRow
...
@@ -1042,31 +1058,31 @@ static int tsdbUpdateTableLatestInfo(STsdbRepo *pRepo, STable *pTable, SDataRow
...
@@ -1042,31 +1058,31 @@ static int tsdbUpdateTableLatestInfo(STsdbRepo *pRepo, STable *pTable, SDataRow
TSDB_WUNLOCK_TABLE
(
pTable
);
TSDB_WUNLOCK_TABLE
(
pTable
);
}
}
if
(
tsdbGetTableLastKeyImpl
(
pTable
)
<
data
RowKey
(
row
))
{
if
(
tsdbGetTableLastKeyImpl
(
pTable
)
<
mem
RowKey
(
row
))
{
if
(
CACHE_LAST_ROW
(
pCfg
)
||
pTable
->
lastRow
!=
NULL
)
{
if
(
CACHE_LAST_ROW
(
pCfg
)
||
pTable
->
lastRow
!=
NULL
)
{
S
Data
Row
nrow
=
pTable
->
lastRow
;
S
Mem
Row
nrow
=
pTable
->
lastRow
;
if
(
taosTSizeof
(
nrow
)
<
dataRow
Len
(
row
))
{
if
(
taosTSizeof
(
nrow
)
<
memRowT
Len
(
row
))
{
S
Data
Row
orow
=
nrow
;
S
Mem
Row
orow
=
nrow
;
nrow
=
taosTMalloc
(
dataRow
Len
(
row
));
nrow
=
taosTMalloc
(
memRowT
Len
(
row
));
if
(
nrow
==
NULL
)
{
if
(
nrow
==
NULL
)
{
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
return
-
1
;
return
-
1
;
}
}
data
RowCpy
(
nrow
,
row
);
mem
RowCpy
(
nrow
,
row
);
TSDB_WLOCK_TABLE
(
pTable
);
TSDB_WLOCK_TABLE
(
pTable
);
pTable
->
lastKey
=
data
RowKey
(
row
);
pTable
->
lastKey
=
mem
RowKey
(
row
);
pTable
->
lastRow
=
nrow
;
pTable
->
lastRow
=
nrow
;
TSDB_WUNLOCK_TABLE
(
pTable
);
TSDB_WUNLOCK_TABLE
(
pTable
);
taosTZfree
(
orow
);
taosTZfree
(
orow
);
}
else
{
}
else
{
TSDB_WLOCK_TABLE
(
pTable
);
TSDB_WLOCK_TABLE
(
pTable
);
pTable
->
lastKey
=
data
RowKey
(
row
);
pTable
->
lastKey
=
mem
RowKey
(
row
);
data
RowCpy
(
nrow
,
row
);
mem
RowCpy
(
nrow
,
row
);
TSDB_WUNLOCK_TABLE
(
pTable
);
TSDB_WUNLOCK_TABLE
(
pTable
);
}
}
}
else
{
}
else
{
pTable
->
lastKey
=
data
RowKey
(
row
);
pTable
->
lastKey
=
mem
RowKey
(
row
);
}
}
if
(
CACHE_LAST_NULL_COLUMN
(
pCfg
))
{
if
(
CACHE_LAST_NULL_COLUMN
(
pCfg
))
{
...
...
src/tsdb/src/tsdbMeta.c
浏览文件 @
210bee6b
...
@@ -787,7 +787,7 @@ static char *getTagIndexKey(const void *pData) {
...
@@ -787,7 +787,7 @@ static char *getTagIndexKey(const void *pData) {
void
*
res
=
tdGetKVRowValOfCol
(
pTable
->
tagVal
,
pCol
->
colId
);
void
*
res
=
tdGetKVRowValOfCol
(
pTable
->
tagVal
,
pCol
->
colId
);
if
(
res
==
NULL
)
{
if
(
res
==
NULL
)
{
// treat the column as NULL if we cannot find it
// treat the column as NULL if we cannot find it
res
=
getNullValue
(
pCol
->
type
);
res
=
(
char
*
)
getNullValue
(
pCol
->
type
);
}
}
return
res
;
return
res
;
}
}
...
...
src/tsdb/src/tsdbRead.c
浏览文件 @
210bee6b
...
@@ -147,7 +147,7 @@ typedef struct STableGroupSupporter {
...
@@ -147,7 +147,7 @@ typedef struct STableGroupSupporter {
static
STimeWindow
updateLastrowForEachGroup
(
STableGroupInfo
*
groupList
);
static
STimeWindow
updateLastrowForEachGroup
(
STableGroupInfo
*
groupList
);
static
int32_t
checkForCachedLastRow
(
STsdbQueryHandle
*
pQueryHandle
,
STableGroupInfo
*
groupList
);
static
int32_t
checkForCachedLastRow
(
STsdbQueryHandle
*
pQueryHandle
,
STableGroupInfo
*
groupList
);
static
int32_t
checkForCachedLast
(
STsdbQueryHandle
*
pQueryHandle
);
static
int32_t
checkForCachedLast
(
STsdbQueryHandle
*
pQueryHandle
);
static
int32_t
tsdbGetCachedLastRow
(
STable
*
pTable
,
S
Data
Row
*
pRes
,
TSKEY
*
lastKey
);
static
int32_t
tsdbGetCachedLastRow
(
STable
*
pTable
,
S
Mem
Row
*
pRes
,
TSKEY
*
lastKey
);
static
void
changeQueryHandleForInterpQuery
(
TsdbQueryHandleT
pHandle
);
static
void
changeQueryHandleForInterpQuery
(
TsdbQueryHandleT
pHandle
);
static
void
doMergeTwoLevelData
(
STsdbQueryHandle
*
pQueryHandle
,
STableCheckInfo
*
pCheckInfo
,
SBlock
*
pBlock
);
static
void
doMergeTwoLevelData
(
STsdbQueryHandle
*
pQueryHandle
,
STableCheckInfo
*
pCheckInfo
,
SBlock
*
pBlock
);
...
@@ -734,8 +734,8 @@ static bool initTableMemIterator(STsdbQueryHandle* pHandle, STableCheckInfo* pCh
...
@@ -734,8 +734,8 @@ static bool initTableMemIterator(STsdbQueryHandle* pHandle, STableCheckInfo* pCh
SSkipListNode
*
node
=
tSkipListIterGet
(
pCheckInfo
->
iter
);
SSkipListNode
*
node
=
tSkipListIterGet
(
pCheckInfo
->
iter
);
assert
(
node
!=
NULL
);
assert
(
node
!=
NULL
);
S
DataRow
row
=
(
SData
Row
)
SL_GET_NODE_DATA
(
node
);
S
MemRow
row
=
(
SMem
Row
)
SL_GET_NODE_DATA
(
node
);
TSKEY
key
=
data
RowKey
(
row
);
// first timestamp in buffer
TSKEY
key
=
mem
RowKey
(
row
);
// first timestamp in buffer
tsdbDebug
(
"%p uid:%"
PRId64
", tid:%d check data in mem from skey:%"
PRId64
", order:%d, ts range in buf:%"
PRId64
tsdbDebug
(
"%p uid:%"
PRId64
", tid:%d check data in mem from skey:%"
PRId64
", order:%d, ts range in buf:%"
PRId64
"-%"
PRId64
", lastKey:%"
PRId64
", numOfRows:%"
PRId64
", 0x%"
PRIx64
,
"-%"
PRId64
", lastKey:%"
PRId64
", numOfRows:%"
PRId64
", 0x%"
PRIx64
,
pHandle
,
pCheckInfo
->
tableId
.
uid
,
pCheckInfo
->
tableId
.
tid
,
key
,
order
,
pMem
->
keyFirst
,
pMem
->
keyLast
,
pHandle
,
pCheckInfo
->
tableId
.
uid
,
pCheckInfo
->
tableId
.
tid
,
key
,
order
,
pMem
->
keyFirst
,
pMem
->
keyLast
,
...
@@ -756,8 +756,8 @@ static bool initTableMemIterator(STsdbQueryHandle* pHandle, STableCheckInfo* pCh
...
@@ -756,8 +756,8 @@ static bool initTableMemIterator(STsdbQueryHandle* pHandle, STableCheckInfo* pCh
SSkipListNode
*
node
=
tSkipListIterGet
(
pCheckInfo
->
iiter
);
SSkipListNode
*
node
=
tSkipListIterGet
(
pCheckInfo
->
iiter
);
assert
(
node
!=
NULL
);
assert
(
node
!=
NULL
);
S
DataRow
row
=
(
SData
Row
)
SL_GET_NODE_DATA
(
node
);
S
MemRow
row
=
(
SMem
Row
)
SL_GET_NODE_DATA
(
node
);
TSKEY
key
=
data
RowKey
(
row
);
// first timestamp in buffer
TSKEY
key
=
mem
RowKey
(
row
);
// first timestamp in buffer
tsdbDebug
(
"%p uid:%"
PRId64
", tid:%d check data in imem from skey:%"
PRId64
", order:%d, ts range in buf:%"
PRId64
tsdbDebug
(
"%p uid:%"
PRId64
", tid:%d check data in imem from skey:%"
PRId64
", order:%d, ts range in buf:%"
PRId64
"-%"
PRId64
", lastKey:%"
PRId64
", numOfRows:%"
PRId64
", 0x%"
PRIx64
,
"-%"
PRId64
", lastKey:%"
PRId64
", numOfRows:%"
PRId64
", 0x%"
PRIx64
,
pHandle
,
pCheckInfo
->
tableId
.
uid
,
pCheckInfo
->
tableId
.
tid
,
key
,
order
,
pIMem
->
keyFirst
,
pIMem
->
keyLast
,
pHandle
,
pCheckInfo
->
tableId
.
uid
,
pCheckInfo
->
tableId
.
tid
,
key
,
order
,
pIMem
->
keyFirst
,
pIMem
->
keyLast
,
...
@@ -781,19 +781,19 @@ static void destroyTableMemIterator(STableCheckInfo* pCheckInfo) {
...
@@ -781,19 +781,19 @@ static void destroyTableMemIterator(STableCheckInfo* pCheckInfo) {
tSkipListDestroyIter
(
pCheckInfo
->
iiter
);
tSkipListDestroyIter
(
pCheckInfo
->
iiter
);
}
}
static
S
Data
Row
getSDataRowInTableMem
(
STableCheckInfo
*
pCheckInfo
,
int32_t
order
,
int32_t
update
)
{
static
S
Mem
Row
getSDataRowInTableMem
(
STableCheckInfo
*
pCheckInfo
,
int32_t
order
,
int32_t
update
)
{
S
Data
Row
rmem
=
NULL
,
rimem
=
NULL
;
S
Mem
Row
rmem
=
NULL
,
rimem
=
NULL
;
if
(
pCheckInfo
->
iter
)
{
if
(
pCheckInfo
->
iter
)
{
SSkipListNode
*
node
=
tSkipListIterGet
(
pCheckInfo
->
iter
);
SSkipListNode
*
node
=
tSkipListIterGet
(
pCheckInfo
->
iter
);
if
(
node
!=
NULL
)
{
if
(
node
!=
NULL
)
{
rmem
=
(
S
Data
Row
)
SL_GET_NODE_DATA
(
node
);
rmem
=
(
S
Mem
Row
)
SL_GET_NODE_DATA
(
node
);
}
}
}
}
if
(
pCheckInfo
->
iiter
)
{
if
(
pCheckInfo
->
iiter
)
{
SSkipListNode
*
node
=
tSkipListIterGet
(
pCheckInfo
->
iiter
);
SSkipListNode
*
node
=
tSkipListIterGet
(
pCheckInfo
->
iiter
);
if
(
node
!=
NULL
)
{
if
(
node
!=
NULL
)
{
rimem
=
(
S
Data
Row
)
SL_GET_NODE_DATA
(
node
);
rimem
=
(
S
Mem
Row
)
SL_GET_NODE_DATA
(
node
);
}
}
}
}
...
@@ -811,8 +811,8 @@ static SDataRow getSDataRowInTableMem(STableCheckInfo* pCheckInfo, int32_t order
...
@@ -811,8 +811,8 @@ static SDataRow getSDataRowInTableMem(STableCheckInfo* pCheckInfo, int32_t order
return
rimem
;
return
rimem
;
}
}
TSKEY
r1
=
data
RowKey
(
rmem
);
TSKEY
r1
=
mem
RowKey
(
rmem
);
TSKEY
r2
=
data
RowKey
(
rimem
);
TSKEY
r2
=
mem
RowKey
(
rimem
);
if
(
r1
==
r2
)
{
// data ts are duplicated, ignore the data in mem
if
(
r1
==
r2
)
{
// data ts are duplicated, ignore the data in mem
if
(
!
update
)
{
if
(
!
update
)
{
...
@@ -891,12 +891,12 @@ static bool hasMoreDataInCache(STsdbQueryHandle* pHandle) {
...
@@ -891,12 +891,12 @@ static bool hasMoreDataInCache(STsdbQueryHandle* pHandle) {
initTableMemIterator
(
pHandle
,
pCheckInfo
);
initTableMemIterator
(
pHandle
,
pCheckInfo
);
}
}
S
Data
Row
row
=
getSDataRowInTableMem
(
pCheckInfo
,
pHandle
->
order
,
pCfg
->
update
);
S
Mem
Row
row
=
getSDataRowInTableMem
(
pCheckInfo
,
pHandle
->
order
,
pCfg
->
update
);
if
(
row
==
NULL
)
{
if
(
row
==
NULL
)
{
return
false
;
return
false
;
}
}
pCheckInfo
->
lastKey
=
data
RowKey
(
row
);
// first timestamp in buffer
pCheckInfo
->
lastKey
=
mem
RowKey
(
row
);
// first timestamp in buffer
tsdbDebug
(
"%p uid:%"
PRId64
", tid:%d check data in buffer from skey:%"
PRId64
", order:%d, 0x%"
PRIx64
,
pHandle
,
tsdbDebug
(
"%p uid:%"
PRId64
", tid:%d check data in buffer from skey:%"
PRId64
", order:%d, 0x%"
PRIx64
,
pHandle
,
pCheckInfo
->
tableId
.
uid
,
pCheckInfo
->
tableId
.
tid
,
pCheckInfo
->
lastKey
,
pHandle
->
order
,
pHandle
->
qId
);
pCheckInfo
->
tableId
.
uid
,
pCheckInfo
->
tableId
.
tid
,
pCheckInfo
->
lastKey
,
pHandle
->
order
,
pHandle
->
qId
);
...
@@ -1155,11 +1155,11 @@ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SBlock* p
...
@@ -1155,11 +1155,11 @@ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SBlock* p
int32_t
code
=
TSDB_CODE_SUCCESS
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
/*bool hasData = */
initTableMemIterator
(
pQueryHandle
,
pCheckInfo
);
/*bool hasData = */
initTableMemIterator
(
pQueryHandle
,
pCheckInfo
);
S
Data
Row
row
=
getSDataRowInTableMem
(
pCheckInfo
,
pQueryHandle
->
order
,
pCfg
->
update
);
S
Mem
Row
row
=
getSDataRowInTableMem
(
pCheckInfo
,
pQueryHandle
->
order
,
pCfg
->
update
);
assert
(
cur
->
pos
>=
0
&&
cur
->
pos
<=
binfo
.
rows
);
assert
(
cur
->
pos
>=
0
&&
cur
->
pos
<=
binfo
.
rows
);
TSKEY
key
=
(
row
!=
NULL
)
?
dataRowKey
(
row
)
:
TSKEY_INITIAL_VAL
;
TSKEY
key
=
(
row
!=
NULL
)
?
memRowKey
(
row
)
:
TSKEY_INITIAL_VAL
;
if
(
key
!=
TSKEY_INITIAL_VAL
)
{
if
(
key
!=
TSKEY_INITIAL_VAL
)
{
tsdbDebug
(
"%p key in mem:%"
PRId64
", 0x%"
PRIx64
,
pQueryHandle
,
key
,
pQueryHandle
->
qId
);
tsdbDebug
(
"%p key in mem:%"
PRId64
", 0x%"
PRIx64
,
pQueryHandle
,
key
,
pQueryHandle
->
qId
);
}
else
{
}
else
{
...
@@ -1401,7 +1401,7 @@ int32_t doCopyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity
...
@@ -1401,7 +1401,7 @@ int32_t doCopyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity
// todo refactor, only copy one-by-one
// todo refactor, only copy one-by-one
for
(
int32_t
k
=
start
;
k
<
num
+
start
;
++
k
)
{
for
(
int32_t
k
=
start
;
k
<
num
+
start
;
++
k
)
{
char
*
p
=
tdGetColDataOfRow
(
src
,
k
);
c
onst
c
har
*
p
=
tdGetColDataOfRow
(
src
,
k
);
memcpy
(
dst
,
p
,
varDataTLen
(
p
));
memcpy
(
dst
,
p
,
varDataTLen
(
p
));
dst
+=
bytes
;
dst
+=
bytes
;
}
}
...
@@ -1452,88 +1452,170 @@ int32_t doCopyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity
...
@@ -1452,88 +1452,170 @@ int32_t doCopyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity
return
numOfRows
+
num
;
return
numOfRows
+
num
;
}
}
static
void
copyOneRowFromMem
(
STsdbQueryHandle
*
pQueryHandle
,
int32_t
capacity
,
int32_t
numOfRows
,
S
Data
Row
row
,
static
void
copyOneRowFromMem
(
STsdbQueryHandle
*
pQueryHandle
,
int32_t
capacity
,
int32_t
numOfRows
,
S
Mem
Row
row
,
int32_t
numOfCols
,
STable
*
pTable
,
STSchema
*
pSchema
)
{
int32_t
numOfCols
,
STable
*
pTable
,
STSchema
*
pSchema
)
{
char
*
pData
=
NULL
;
char
*
pData
=
NULL
;
// the schema version info is embed
ed in SData
Row
// the schema version info is embed
ded in SDataRow, and use latest schema version for SKV
Row
int32_t
numOfRowCols
=
0
;
int32_t
numOfRowCols
=
0
;
if
(
pSchema
==
NULL
)
{
if
(
pSchema
==
NULL
)
{
pSchema
=
tsdbGetTableSchemaByVersion
(
pTable
,
data
RowVersion
(
row
));
pSchema
=
tsdbGetTableSchemaByVersion
(
pTable
,
mem
RowVersion
(
row
));
numOfRowCols
=
schemaNCols
(
pSchema
);
numOfRowCols
=
schemaNCols
(
pSchema
);
}
else
{
}
else
{
numOfRowCols
=
schemaNCols
(
pSchema
);
numOfRowCols
=
schemaNCols
(
pSchema
);
}
}
int32_t
i
=
0
,
j
=
0
;
while
(
i
<
numOfCols
&&
j
<
numOfRowCols
)
{
SColumnInfoData
*
pColInfo
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
i
);
if
(
pSchema
->
columns
[
j
].
colId
<
pColInfo
->
info
.
colId
)
{
j
++
;
continue
;
}
if
(
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
{
int32_t
i
=
0
;
pData
=
(
char
*
)
pColInfo
->
pData
+
numOfRows
*
pColInfo
->
info
.
bytes
;
}
else
{
if
(
isDataRow
(
row
))
{
pData
=
(
char
*
)
pColInfo
->
pData
+
(
capacity
-
numOfRows
-
1
)
*
pColInfo
->
info
.
bytes
;
SDataRow
dataRow
=
memRowDataBody
(
row
);
int32_t
j
=
0
;
while
(
i
<
numOfCols
&&
j
<
numOfRowCols
)
{
SColumnInfoData
*
pColInfo
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
i
);
if
(
pSchema
->
columns
[
j
].
colId
<
pColInfo
->
info
.
colId
)
{
j
++
;
continue
;
}
if
(
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
{
pData
=
(
char
*
)
pColInfo
->
pData
+
numOfRows
*
pColInfo
->
info
.
bytes
;
}
else
{
pData
=
(
char
*
)
pColInfo
->
pData
+
(
capacity
-
numOfRows
-
1
)
*
pColInfo
->
info
.
bytes
;
}
if
(
pSchema
->
columns
[
j
].
colId
==
pColInfo
->
info
.
colId
)
{
void
*
value
=
tdGetRowDataOfCol
(
dataRow
,
(
int8_t
)
pColInfo
->
info
.
type
,
TD_DATA_ROW_HEAD_SIZE
+
pSchema
->
columns
[
j
].
offset
);
switch
(
pColInfo
->
info
.
type
)
{
case
TSDB_DATA_TYPE_BINARY
:
case
TSDB_DATA_TYPE_NCHAR
:
memcpy
(
pData
,
value
,
varDataTLen
(
value
));
break
;
case
TSDB_DATA_TYPE_NULL
:
case
TSDB_DATA_TYPE_BOOL
:
case
TSDB_DATA_TYPE_TINYINT
:
case
TSDB_DATA_TYPE_UTINYINT
:
*
(
uint8_t
*
)
pData
=
*
(
uint8_t
*
)
value
;
break
;
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_USMALLINT
:
*
(
uint16_t
*
)
pData
=
*
(
uint16_t
*
)
value
;
break
;
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_UINT
:
*
(
uint32_t
*
)
pData
=
*
(
uint32_t
*
)
value
;
break
;
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_UBIGINT
:
*
(
uint64_t
*
)
pData
=
*
(
uint64_t
*
)
value
;
break
;
case
TSDB_DATA_TYPE_FLOAT
:
SET_FLOAT_PTR
(
pData
,
value
);
break
;
case
TSDB_DATA_TYPE_DOUBLE
:
SET_DOUBLE_PTR
(
pData
,
value
);
break
;
case
TSDB_DATA_TYPE_TIMESTAMP
:
if
(
pColInfo
->
info
.
colId
==
PRIMARYKEY_TIMESTAMP_COL_INDEX
)
{
*
(
TSKEY
*
)
pData
=
tdGetKey
(
*
(
TKEY
*
)
value
);
}
else
{
*
(
TSKEY
*
)
pData
=
*
(
TSKEY
*
)
value
;
}
break
;
default:
memcpy
(
pData
,
value
,
pColInfo
->
info
.
bytes
);
}
j
++
;
i
++
;
}
else
{
// pColInfo->info.colId < pSchema->columns[j].colId, it is a NULL data
if
(
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_BINARY
||
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_NCHAR
)
{
setVardataNull
(
pData
,
pColInfo
->
info
.
type
);
}
else
{
setNull
(
pData
,
pColInfo
->
info
.
type
,
pColInfo
->
info
.
bytes
);
}
i
++
;
}
}
}
}
else
if
(
isKvRow
(
row
))
{
SKVRow
kvRow
=
memRowKvBody
(
row
);
int32_t
k
=
0
;
int32_t
nKvRowCols
=
kvRowNCols
(
kvRow
);
if
(
pSchema
->
columns
[
j
].
colId
==
pColInfo
->
info
.
colId
)
{
while
(
i
<
numOfCols
&&
k
<
nKvRowCols
)
{
void
*
value
=
tdGetRowDataOfCol
(
row
,
(
int8_t
)
pColInfo
->
info
.
type
,
TD_DATA_ROW_HEAD_SIZE
+
pSchema
->
columns
[
j
].
offset
);
SColumnInfoData
*
pColInfo
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
i
);
switch
(
pColInfo
->
info
.
type
)
{
SColIdx
*
pColIdx
=
kvRowColIdxAt
(
kvRow
,
k
);
case
TSDB_DATA_TYPE_BINARY
:
case
TSDB_DATA_TYPE_NCHAR
:
if
(
pColIdx
->
colId
<
pColInfo
->
info
.
colId
)
{
memcpy
(
pData
,
value
,
varDataTLen
(
value
));
++
k
;
break
;
continue
;
case
TSDB_DATA_TYPE_NULL
:
case
TSDB_DATA_TYPE_BOOL
:
case
TSDB_DATA_TYPE_TINYINT
:
case
TSDB_DATA_TYPE_UTINYINT
:
*
(
uint8_t
*
)
pData
=
*
(
uint8_t
*
)
value
;
break
;
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_USMALLINT
:
*
(
uint16_t
*
)
pData
=
*
(
uint16_t
*
)
value
;
break
;
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_UINT
:
*
(
uint32_t
*
)
pData
=
*
(
uint32_t
*
)
value
;
break
;
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_UBIGINT
:
*
(
uint64_t
*
)
pData
=
*
(
uint64_t
*
)
value
;
break
;
case
TSDB_DATA_TYPE_FLOAT
:
SET_FLOAT_PTR
(
pData
,
value
);
break
;
case
TSDB_DATA_TYPE_DOUBLE
:
SET_DOUBLE_PTR
(
pData
,
value
);
break
;
case
TSDB_DATA_TYPE_TIMESTAMP
:
if
(
pColInfo
->
info
.
colId
==
PRIMARYKEY_TIMESTAMP_COL_INDEX
)
{
*
(
TSKEY
*
)
pData
=
tdGetKey
(
*
(
TKEY
*
)
value
);
}
else
{
*
(
TSKEY
*
)
pData
=
*
(
TSKEY
*
)
value
;
}
break
;
default:
memcpy
(
pData
,
value
,
pColInfo
->
info
.
bytes
);
}
}
j
++
;
if
(
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
{
i
++
;
pData
=
(
char
*
)
pColInfo
->
pData
+
numOfRows
*
pColInfo
->
info
.
bytes
;
}
else
{
// pColInfo->info.colId < pSchema->columns[j].colId, it is a NULL data
}
else
{
pData
=
(
char
*
)
pColInfo
->
pData
+
(
capacity
-
numOfRows
-
1
)
*
pColInfo
->
info
.
bytes
;
}
if
(
pColIdx
->
colId
==
pColInfo
->
info
.
colId
)
{
// offset of pColIdx for SKVRow including the TD_KV_ROW_HEAD_SIZE
void
*
value
=
tdGetKvRowDataOfCol
(
kvRow
,
pColIdx
->
offset
);
switch
(
pColInfo
->
info
.
type
)
{
case
TSDB_DATA_TYPE_BINARY
:
case
TSDB_DATA_TYPE_NCHAR
:
memcpy
(
pData
,
value
,
varDataTLen
(
value
));
break
;
case
TSDB_DATA_TYPE_NULL
:
case
TSDB_DATA_TYPE_BOOL
:
case
TSDB_DATA_TYPE_TINYINT
:
case
TSDB_DATA_TYPE_UTINYINT
:
*
(
uint8_t
*
)
pData
=
*
(
uint8_t
*
)
value
;
break
;
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_USMALLINT
:
*
(
uint16_t
*
)
pData
=
*
(
uint16_t
*
)
value
;
break
;
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_UINT
:
*
(
uint32_t
*
)
pData
=
*
(
uint32_t
*
)
value
;
break
;
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_UBIGINT
:
*
(
uint64_t
*
)
pData
=
*
(
uint64_t
*
)
value
;
break
;
case
TSDB_DATA_TYPE_FLOAT
:
SET_FLOAT_PTR
(
pData
,
value
);
break
;
case
TSDB_DATA_TYPE_DOUBLE
:
SET_DOUBLE_PTR
(
pData
,
value
);
break
;
case
TSDB_DATA_TYPE_TIMESTAMP
:
if
(
pColInfo
->
info
.
colId
==
PRIMARYKEY_TIMESTAMP_COL_INDEX
)
{
*
(
TSKEY
*
)
pData
=
tdGetKey
(
*
(
TKEY
*
)
value
);
}
else
{
*
(
TSKEY
*
)
pData
=
*
(
TSKEY
*
)
value
;
}
break
;
default:
memcpy
(
pData
,
value
,
pColInfo
->
info
.
bytes
);
}
++
k
;
++
i
;
continue
;
}
// If (pColInfo->info.colId < pColIdx->colId), it is NULL data
if
(
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_BINARY
||
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_BINARY
||
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_NCHAR
)
{
setVardataNull
(
pData
,
pColInfo
->
info
.
type
);
setVardataNull
(
pData
,
pColInfo
->
info
.
type
);
}
else
{
}
else
{
setNull
(
pData
,
pColInfo
->
info
.
type
,
pColInfo
->
info
.
bytes
);
setNull
(
pData
,
pColInfo
->
info
.
type
,
pColInfo
->
info
.
bytes
);
}
}
i
++
;
++
i
;
}
}
}
else
{
ASSERT
(
0
);
}
}
while
(
i
<
numOfCols
)
{
// the remain columns are all null data
while
(
i
<
numOfCols
)
{
// the remain columns are all null data
SColumnInfoData
*
pColInfo
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
i
);
SColumnInfoData
*
pColInfo
=
taosArrayGet
(
pQueryHandle
->
pColumns
,
i
);
if
(
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
{
if
(
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
{
pData
=
(
char
*
)
pColInfo
->
pData
+
numOfRows
*
pColInfo
->
info
.
bytes
;
pData
=
(
char
*
)
pColInfo
->
pData
+
numOfRows
*
pColInfo
->
info
.
bytes
;
...
@@ -1550,7 +1632,6 @@ static void copyOneRowFromMem(STsdbQueryHandle* pQueryHandle, int32_t capacity,
...
@@ -1550,7 +1632,6 @@ static void copyOneRowFromMem(STsdbQueryHandle* pQueryHandle, int32_t capacity,
i
++
;
i
++
;
}
}
}
}
static
void
moveDataToFront
(
STsdbQueryHandle
*
pQueryHandle
,
int32_t
numOfRows
,
int32_t
numOfCols
)
{
static
void
moveDataToFront
(
STsdbQueryHandle
*
pQueryHandle
,
int32_t
numOfRows
,
int32_t
numOfCols
)
{
if
(
numOfRows
==
0
||
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
{
if
(
numOfRows
==
0
||
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
{
return
;
return
;
...
@@ -1730,12 +1811,12 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo*
...
@@ -1730,12 +1811,12 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo*
}
else
if
(
pCheckInfo
->
iter
!=
NULL
||
pCheckInfo
->
iiter
!=
NULL
)
{
}
else
if
(
pCheckInfo
->
iter
!=
NULL
||
pCheckInfo
->
iiter
!=
NULL
)
{
SSkipListNode
*
node
=
NULL
;
SSkipListNode
*
node
=
NULL
;
do
{
do
{
S
Data
Row
row
=
getSDataRowInTableMem
(
pCheckInfo
,
pQueryHandle
->
order
,
pCfg
->
update
);
S
Mem
Row
row
=
getSDataRowInTableMem
(
pCheckInfo
,
pQueryHandle
->
order
,
pCfg
->
update
);
if
(
row
==
NULL
)
{
if
(
row
==
NULL
)
{
break
;
break
;
}
}
TSKEY
key
=
data
RowKey
(
row
);
TSKEY
key
=
mem
RowKey
(
row
);
if
((
key
>
pQueryHandle
->
window
.
ekey
&&
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
||
if
((
key
>
pQueryHandle
->
window
.
ekey
&&
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
||
(
key
<
pQueryHandle
->
window
.
ekey
&&
!
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
)))
{
(
key
<
pQueryHandle
->
window
.
ekey
&&
!
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
)))
{
break
;
break
;
...
@@ -1748,11 +1829,11 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo*
...
@@ -1748,11 +1829,11 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo*
if
((
key
<
tsArray
[
pos
]
&&
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
||
if
((
key
<
tsArray
[
pos
]
&&
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
||
(
key
>
tsArray
[
pos
]
&&
!
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
)))
{
(
key
>
tsArray
[
pos
]
&&
!
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
)))
{
if
(
rv
!=
data
RowVersion
(
row
))
{
if
(
rv
!=
mem
RowVersion
(
row
))
{
pSchema
=
tsdbGetTableSchemaByVersion
(
pTable
,
data
RowVersion
(
row
));
pSchema
=
tsdbGetTableSchemaByVersion
(
pTable
,
mem
RowVersion
(
row
));
rv
=
data
RowVersion
(
row
);
rv
=
mem
RowVersion
(
row
);
}
}
copyOneRowFromMem
(
pQueryHandle
,
pQueryHandle
->
outputCapacity
,
numOfRows
,
row
,
numOfCols
,
pTable
,
pSchema
);
copyOneRowFromMem
(
pQueryHandle
,
pQueryHandle
->
outputCapacity
,
numOfRows
,
row
,
numOfCols
,
pTable
,
pSchema
);
numOfRows
+=
1
;
numOfRows
+=
1
;
if
(
cur
->
win
.
skey
==
TSKEY_INITIAL_VAL
)
{
if
(
cur
->
win
.
skey
==
TSKEY_INITIAL_VAL
)
{
...
@@ -1766,11 +1847,11 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo*
...
@@ -1766,11 +1847,11 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo*
moveToNextRowInMem
(
pCheckInfo
);
moveToNextRowInMem
(
pCheckInfo
);
}
else
if
(
key
==
tsArray
[
pos
])
{
// data in buffer has the same timestamp of data in file block, ignore it
}
else
if
(
key
==
tsArray
[
pos
])
{
// data in buffer has the same timestamp of data in file block, ignore it
if
(
pCfg
->
update
)
{
if
(
pCfg
->
update
)
{
if
(
rv
!=
data
RowVersion
(
row
))
{
if
(
rv
!=
mem
RowVersion
(
row
))
{
pSchema
=
tsdbGetTableSchemaByVersion
(
pTable
,
data
RowVersion
(
row
));
pSchema
=
tsdbGetTableSchemaByVersion
(
pTable
,
mem
RowVersion
(
row
));
rv
=
data
RowVersion
(
row
);
rv
=
mem
RowVersion
(
row
);
}
}
copyOneRowFromMem
(
pQueryHandle
,
pQueryHandle
->
outputCapacity
,
numOfRows
,
row
,
numOfCols
,
pTable
,
pSchema
);
copyOneRowFromMem
(
pQueryHandle
,
pQueryHandle
->
outputCapacity
,
numOfRows
,
row
,
numOfCols
,
pTable
,
pSchema
);
numOfRows
+=
1
;
numOfRows
+=
1
;
if
(
cur
->
win
.
skey
==
TSKEY_INITIAL_VAL
)
{
if
(
cur
->
win
.
skey
==
TSKEY_INITIAL_VAL
)
{
...
@@ -1820,8 +1901,10 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo*
...
@@ -1820,8 +1901,10 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo*
* copy them all to result buffer, since it may be overlapped with file data block.
* copy them all to result buffer, since it may be overlapped with file data block.
*/
*/
if
(
node
==
NULL
||
if
(
node
==
NULL
||
((
dataRowKey
((
SDataRow
)
SL_GET_NODE_DATA
(
node
))
>
pQueryHandle
->
window
.
ekey
)
&&
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
||
((
memRowKey
((
SMemRow
)
SL_GET_NODE_DATA
(
node
))
>
pQueryHandle
->
window
.
ekey
)
&&
((
dataRowKey
((
SDataRow
)
SL_GET_NODE_DATA
(
node
))
<
pQueryHandle
->
window
.
ekey
)
&&
!
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
)))
{
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
||
((
memRowKey
((
SMemRow
)
SL_GET_NODE_DATA
(
node
))
<
pQueryHandle
->
window
.
ekey
)
&&
!
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
)))
{
// no data in cache or data in cache is greater than the ekey of time window, load data from file block
// no data in cache or data in cache is greater than the ekey of time window, load data from file block
if
(
cur
->
win
.
skey
==
TSKEY_INITIAL_VAL
)
{
if
(
cur
->
win
.
skey
==
TSKEY_INITIAL_VAL
)
{
cur
->
win
.
skey
=
tsArray
[
pos
];
cur
->
win
.
skey
=
tsArray
[
pos
];
...
@@ -2407,12 +2490,12 @@ static int tsdbReadRowsFromCache(STableCheckInfo* pCheckInfo, TSKEY maxKey, int
...
@@ -2407,12 +2490,12 @@ static int tsdbReadRowsFromCache(STableCheckInfo* pCheckInfo, TSKEY maxKey, int
STSchema
*
pSchema
=
NULL
;
STSchema
*
pSchema
=
NULL
;
do
{
do
{
S
Data
Row
row
=
getSDataRowInTableMem
(
pCheckInfo
,
pQueryHandle
->
order
,
pCfg
->
update
);
S
Mem
Row
row
=
getSDataRowInTableMem
(
pCheckInfo
,
pQueryHandle
->
order
,
pCfg
->
update
);
if
(
row
==
NULL
)
{
if
(
row
==
NULL
)
{
break
;
break
;
}
}
TSKEY
key
=
data
RowKey
(
row
);
TSKEY
key
=
mem
RowKey
(
row
);
if
((
key
>
maxKey
&&
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
||
(
key
<
maxKey
&&
!
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
)))
{
if
((
key
>
maxKey
&&
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
))
||
(
key
<
maxKey
&&
!
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
)))
{
tsdbDebug
(
"%p key:%"
PRIu64
" beyond qrange:%"
PRId64
" - %"
PRId64
", no more data in buffer"
,
pQueryHandle
,
key
,
pQueryHandle
->
window
.
skey
,
tsdbDebug
(
"%p key:%"
PRIu64
" beyond qrange:%"
PRId64
" - %"
PRId64
", no more data in buffer"
,
pQueryHandle
,
key
,
pQueryHandle
->
window
.
skey
,
pQueryHandle
->
window
.
ekey
);
pQueryHandle
->
window
.
ekey
);
...
@@ -2425,9 +2508,9 @@ static int tsdbReadRowsFromCache(STableCheckInfo* pCheckInfo, TSKEY maxKey, int
...
@@ -2425,9 +2508,9 @@ static int tsdbReadRowsFromCache(STableCheckInfo* pCheckInfo, TSKEY maxKey, int
}
}
win
->
ekey
=
key
;
win
->
ekey
=
key
;
if
(
rv
!=
data
RowVersion
(
row
))
{
if
(
rv
!=
mem
RowVersion
(
row
))
{
pSchema
=
tsdbGetTableSchemaByVersion
(
pTable
,
data
RowVersion
(
row
));
pSchema
=
tsdbGetTableSchemaByVersion
(
pTable
,
mem
RowVersion
(
row
));
rv
=
data
RowVersion
(
row
);
rv
=
mem
RowVersion
(
row
);
}
}
copyOneRowFromMem
(
pQueryHandle
,
maxRowsToRead
,
numOfRows
,
row
,
numOfCols
,
pTable
,
pSchema
);
copyOneRowFromMem
(
pQueryHandle
,
maxRowsToRead
,
numOfRows
,
row
,
numOfCols
,
pTable
,
pSchema
);
...
@@ -2544,7 +2627,7 @@ static bool loadCachedLastRow(STsdbQueryHandle* pQueryHandle) {
...
@@ -2544,7 +2627,7 @@ static bool loadCachedLastRow(STsdbQueryHandle* pQueryHandle) {
SQueryFilePos
*
cur
=
&
pQueryHandle
->
cur
;
SQueryFilePos
*
cur
=
&
pQueryHandle
->
cur
;
S
DataRow
pRow
=
NULL
;
S
MemRow
pRow
=
NULL
;
TSKEY
key
=
TSKEY_INITIAL_VAL
;
TSKEY
key
=
TSKEY_INITIAL_VAL
;
int32_t
step
=
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
)
?
1
:-
1
;
int32_t
step
=
ASCENDING_TRAVERSE
(
pQueryHandle
->
order
)
?
1
:-
1
;
...
@@ -2954,7 +3037,7 @@ bool tsdbGetExternalRow(TsdbQueryHandleT pHandle) {
...
@@ -2954,7 +3037,7 @@ bool tsdbGetExternalRow(TsdbQueryHandleT pHandle) {
* if lastRow == NULL, return TSDB_CODE_TDB_NO_CACHE_LAST_ROW
* if lastRow == NULL, return TSDB_CODE_TDB_NO_CACHE_LAST_ROW
* else set pRes and return TSDB_CODE_SUCCESS and save lastKey
* else set pRes and return TSDB_CODE_SUCCESS and save lastKey
*/
*/
int32_t
tsdbGetCachedLastRow
(
STable
*
pTable
,
S
Data
Row
*
pRes
,
TSKEY
*
lastKey
)
{
int32_t
tsdbGetCachedLastRow
(
STable
*
pTable
,
S
Mem
Row
*
pRes
,
TSKEY
*
lastKey
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
TSDB_RLOCK_TABLE
(
pTable
);
TSDB_RLOCK_TABLE
(
pTable
);
...
@@ -2965,7 +3048,7 @@ int32_t tsdbGetCachedLastRow(STable* pTable, SDataRow* pRes, TSKEY* lastKey) {
...
@@ -2965,7 +3048,7 @@ int32_t tsdbGetCachedLastRow(STable* pTable, SDataRow* pRes, TSKEY* lastKey) {
}
}
if
(
pRes
)
{
if
(
pRes
)
{
*
pRes
=
td
Data
RowDup
(
pTable
->
lastRow
);
*
pRes
=
td
Mem
RowDup
(
pTable
->
lastRow
);
if
(
*
pRes
==
NULL
)
{
if
(
*
pRes
==
NULL
)
{
code
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
code
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
}
}
...
@@ -3702,6 +3785,10 @@ static void* doFreeColumnInfoData(SArray* pColumnInfoData) {
...
@@ -3702,6 +3785,10 @@ static void* doFreeColumnInfoData(SArray* pColumnInfoData) {
}
}
static
void
*
destroyTableCheckInfo
(
SArray
*
pTableCheckInfo
)
{
static
void
*
destroyTableCheckInfo
(
SArray
*
pTableCheckInfo
)
{
if
(
pTableCheckInfo
==
NULL
)
{
return
NULL
;
}
size_t
size
=
taosArrayGetSize
(
pTableCheckInfo
);
size_t
size
=
taosArrayGetSize
(
pTableCheckInfo
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
STableCheckInfo
*
p
=
taosArrayGet
(
pTableCheckInfo
,
i
);
STableCheckInfo
*
p
=
taosArrayGet
(
pTableCheckInfo
,
i
);
...
...
src/tsdb/tests/tsdbTests.cpp
浏览文件 @
210bee6b
...
@@ -55,10 +55,10 @@ static int insertData(SInsertInfo *pInfo) {
...
@@ -55,10 +55,10 @@ static int insertData(SInsertInfo *pInfo) {
for
(
int
j
=
0
;
j
<
schemaNCols
(
pInfo
->
pSchema
);
j
++
)
{
for
(
int
j
=
0
;
j
<
schemaNCols
(
pInfo
->
pSchema
);
j
++
)
{
STColumn
*
pTCol
=
schemaColAt
(
pInfo
->
pSchema
,
j
);
STColumn
*
pTCol
=
schemaColAt
(
pInfo
->
pSchema
,
j
);
if
(
j
==
0
)
{
// Just for timestamp
if
(
j
==
0
)
{
// Just for timestamp
tdAppendColVal
(
row
,
(
void
*
)(
&
start_time
),
pTCol
->
type
,
pTCol
->
bytes
,
pTCol
->
offset
);
tdAppendColVal
(
row
,
(
void
*
)(
&
start_time
),
pTCol
->
type
,
pTCol
->
offset
);
}
else
{
// For int
}
else
{
// For int
int
val
=
10
;
int
val
=
10
;
tdAppendColVal
(
row
,
(
void
*
)(
&
val
),
pTCol
->
type
,
pTCol
->
bytes
,
pTCol
->
offset
);
tdAppendColVal
(
row
,
(
void
*
)(
&
val
),
pTCol
->
type
,
pTCol
->
offset
);
}
}
}
}
pBlock
->
dataLen
+=
dataRowLen
(
row
);
pBlock
->
dataLen
+=
dataRowLen
(
row
);
...
...
src/util/src/terror.c
浏览文件 @
210bee6b
...
@@ -183,6 +183,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_FIELD_ALREAY_EXIST, "Field already exists"
...
@@ -183,6 +183,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_FIELD_ALREAY_EXIST, "Field already exists"
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_FIELD_NOT_EXIST
,
"Field does not exist"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_FIELD_NOT_EXIST
,
"Field does not exist"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_STABLE_NAME
,
"Super table does not exist"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_STABLE_NAME
,
"Super table does not exist"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG
,
"Invalid create table message"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG
,
"Invalid create table message"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_EXCEED_MAX_ROW_BYTES
,
"Exceed max row bytes"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_FUNC_NAME
,
"Invalid func name"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_FUNC_NAME
,
"Invalid func name"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_FUNC_LEN
,
"Invalid func length"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_FUNC_LEN
,
"Invalid func length"
)
...
...
tests/examples/lua/luaconnector.so
0 → 100755
浏览文件 @
210bee6b
文件已添加
tests/perftest-scripts/perftest-query.sh
浏览文件 @
210bee6b
#!/bin/bash
#!/bin/bash
branch
=
if
[
x
$1
!=
x
]
;
then
branch
=
$1
echo
"Testing branch:
$branch
"
else
echo
"Please enter branch name as a parameter"
exit
1
fi
jemalloc
=
if
[
x
$2
!=
x
]
;
then
jemalloc
=
jemalloc
echo
"Building TDengine using jemalloc"
else
echo
"Building TDengine using glibc"
fi
today
=
`
date
+
"%Y%m%d"
`
today
=
`
date
+
"%Y%m%d"
`
WORK_DIR
=
/home/ubuntu/pxiao
WORK_DIR
=
/home/ubuntu/pxiao
PERFORMANCE_TEST_REPORT
=
$WORK_DIR
/TDengine/tests/performance-test-report-
$today
.log
PERFORMANCE_TEST_REPORT
=
$WORK_DIR
/TDengine/tests/performance-test-report-
$today
.log
...
@@ -40,8 +56,8 @@ function buildTDengine {
...
@@ -40,8 +56,8 @@ function buildTDengine {
git remote update
>
/dev/null
git remote update
>
/dev/null
git reset
--hard
HEAD
git reset
--hard
HEAD
git checkout
master
git checkout
$branch
REMOTE_COMMIT
=
`
git rev-parse
--short
remotes/origin/
master
`
REMOTE_COMMIT
=
`
git rev-parse
--short
remotes/origin/
$branch
`
LOCAL_COMMIT
=
`
git rev-parse
--short
@
`
LOCAL_COMMIT
=
`
git rev-parse
--short
@
`
echo
" LOCAL:
$LOCAL_COMMIT
"
echo
" LOCAL:
$LOCAL_COMMIT
"
...
@@ -53,9 +69,20 @@ function buildTDengine {
...
@@ -53,9 +69,20 @@ function buildTDengine {
git pull
>
/dev/null 2>&1
git pull
>
/dev/null 2>&1
LOCAL_COMMIT
=
`
git rev-parse
--short
@
`
LOCAL_COMMIT
=
`
git rev-parse
--short
@
`
if
[
$jemalloc
=
"jemalloc"
]
;
then
echo
"git submodule update --init --recursive"
git submodule update
--init
--recursive
fi
cd
debug
cd
debug
rm
-rf
*
rm
-rf
*
cmake ..
>
/dev/null
if
[
$jemalloc
=
"jemalloc"
]
;
then
echo
"cmake .. -DJEMALLOC_ENABLED=true > /dev/null"
cmake ..
-DJEMALLOC_ENABLED
=
true
>
/dev/null
else
cmake ..
>
/dev/null
fi
make
&&
make
install
>
/dev/null
make
&&
make
install
>
/dev/null
fi
fi
}
}
...
@@ -95,7 +122,8 @@ function sendReport {
...
@@ -95,7 +122,8 @@ function sendReport {
sed
-i
's/\x1b\[[0-9;]*m//g'
$PERFORMANCE_TEST_REPORT
sed
-i
's/\x1b\[[0-9;]*m//g'
$PERFORMANCE_TEST_REPORT
BODY_CONTENT
=
`
cat
$PERFORMANCE_TEST_REPORT
`
BODY_CONTENT
=
`
cat
$PERFORMANCE_TEST_REPORT
`
echo
-e
"From: <support@taosdata.com>
\n
to:
${
receiver
}
\n
subject: Query Performace Report
${
today
}
, commit ID:
${
LOCAL_COMMIT
}
\n\n
${
today
}
:
\n
${
BODY_CONTENT
}
"
|
\
echo
-e
"From: <support@taosdata.com>
\n
to:
${
receiver
}
\n
subject: Query Performace Report
${
branch
}
${
jemalloc
}
${
today
}
, commit ID:
${
LOCAL_COMMIT
}
\n\n
${
today
}
:
\n
${
BODY_CONTENT
}
"
|
\
(
cat
-
&&
uuencode
$PERFORMANCE_TEST_REPORT
performance-test-report-
$today
.log
)
|
\
(
cat
-
&&
uuencode
$PERFORMANCE_TEST_REPORT
performance-test-report-
$today
.log
)
|
\
/usr/sbin/ssmtp
"
${
receiver
}
"
&&
echo
"Report Sent!"
/usr/sbin/ssmtp
"
${
receiver
}
"
&&
echo
"Report Sent!"
}
}
...
...
tests/pytest/fulltest.sh
浏览文件 @
210bee6b
...
@@ -241,7 +241,7 @@ python3 ./test.py -f query/queryStateWindow.py
...
@@ -241,7 +241,7 @@ python3 ./test.py -f query/queryStateWindow.py
python3 ./test.py
-f
query/nestedQuery/queryWithOrderLimit.py
python3 ./test.py
-f
query/nestedQuery/queryWithOrderLimit.py
python3 ./test.py
-f
query/nestquery_last_row.py
python3 ./test.py
-f
query/nestquery_last_row.py
python3 ./test.py
-f
query/queryCnameDisplay.py
python3 ./test.py
-f
query/queryCnameDisplay.py
python3 test.py
-f
query/nestedQuery/queryWithSpread.py
#stream
#stream
python3 ./test.py
-f
stream/metric_1.py
python3 ./test.py
-f
stream/metric_1.py
...
@@ -352,7 +352,7 @@ python3 ./test.py -f alter/alter_debugFlag.py
...
@@ -352,7 +352,7 @@ python3 ./test.py -f alter/alter_debugFlag.py
python3 ./test.py
-f
query/queryBetweenAnd.py
python3 ./test.py
-f
query/queryBetweenAnd.py
python3 ./test.py
-f
tag_lite/alter_tag.py
python3 ./test.py
-f
tag_lite/alter_tag.py
python3 test.py
-f
tools/taosdemoAllTest/taosdemoTestInsertWithJson.py
#
python3 test.py -f tools/taosdemoAllTest/taosdemoTestInsertWithJson.py
python3 test.py
-f
tools/taosdemoAllTest/taosdemoTestQueryWithJson.py
python3 test.py
-f
tools/taosdemoAllTest/taosdemoTestQueryWithJson.py
python3 test.py
-f
tools/taosdemoAllTest/TD-4985/query-limit-offset.py
python3 test.py
-f
tools/taosdemoAllTest/TD-4985/query-limit-offset.py
python3 ./test.py
-f
tag_lite/drop_auto_create.py
python3 ./test.py
-f
tag_lite/drop_auto_create.py
...
...
tests/pytest/query/nestedQuery/queryWithSpread.py
0 → 100644
浏览文件 @
210bee6b
###################################################################
# Copyright (c) 2016 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
import
sys
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
def
run
(
self
):
tdSql
.
prepare
()
tdSql
.
execute
(
'create table stb (ts timestamp, speed int) tags(t1 int);'
)
for
i
in
range
(
10
):
tdSql
.
execute
(
f
'create table tb_
{
i
}
using stb tags(
{
i
}
);'
)
tdSql
.
execute
(
f
'insert into tb_
{
i
}
values(now, 0)'
)
tdSql
.
execute
(
f
'insert into tb_
{
i
}
values(now+10s,
{
i
}
)'
)
tdSql
.
query
(
'select max(col3) from (select spread(speed) as col3 from stb group by tbname);'
)
tdSql
.
checkData
(
0
,
0
,
'9.0'
)
tdSql
.
error
(
'select max(col3) from (select spread(col3) as col3 from stb group by tbname);'
)
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/pytest/query/nestquery_last_row.py
浏览文件 @
210bee6b
...
@@ -160,22 +160,23 @@ class TDTestCase:
...
@@ -160,22 +160,23 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
9
,
9.000000000
)
tdSql
.
checkData
(
0
,
9
,
9.000000000
)
tdSql
.
checkData
(
0
,
10
,
'2020-09-13 20:26:40.009'
)
tdSql
.
checkData
(
0
,
10
,
'2020-09-13 20:26:40.009'
)
# incorrect result, not support nest > 2
sql
=
'''select last_row(*) from
sql
=
'''select last_row(*) from
((select * from table_0) union all
((select * from table_0) union all
(select * from table_1) union all
(select * from table_1) union all
(select * from table_2));'''
(select * from table_2));'''
tdSql
.
query
(
sql
)
tdSql
.
error
(
sql
)
tdSql
.
checkRows
(
1
)
#
tdSql.checkRows(1)
tdSql
.
checkData
(
0
,
1
,
self
.
num
-
1
)
#
tdSql.checkData(0,1,self.num-1)
tdSql
.
checkData
(
0
,
2
,
self
.
num
-
1
)
#
tdSql.checkData(0,2,self.num-1)
tdSql
.
checkData
(
0
,
3
,
self
.
num
-
1
)
#
tdSql.checkData(0,3,self.num-1)
tdSql
.
checkData
(
0
,
4
,
self
.
num
-
1
)
#
tdSql.checkData(0,4,self.num-1)
tdSql
.
checkData
(
0
,
5
,
'False'
)
#
tdSql.checkData(0,5,'False')
tdSql
.
checkData
(
0
,
6
,
'binary.9'
)
#
tdSql.checkData(0,6,'binary.9')
tdSql
.
checkData
(
0
,
7
,
'nchar.9'
)
#
tdSql.checkData(0,7,'nchar.9')
tdSql
.
checkData
(
0
,
8
,
9.00000
)
#
tdSql.checkData(0,8,9.00000)
tdSql
.
checkData
(
0
,
9
,
9.000000000
)
#
tdSql.checkData(0,9,9.000000000)
tdSql
.
checkData
(
0
,
10
,
'2020-09-13 20:26:40.009'
)
#
tdSql.checkData(0,10,'2020-09-13 20:26:40.009')
# bug 5055
# bug 5055
# sql = '''select last_row(*) from
# sql = '''select last_row(*) from
...
@@ -189,18 +190,18 @@ class TDTestCase:
...
@@ -189,18 +190,18 @@ class TDTestCase:
((select last_row(*) from table_0) union all
((select last_row(*) from table_0) union all
(select last_row(*) from table_1) union all
(select last_row(*) from table_1) union all
(select last_row(*) from table_2));'''
(select last_row(*) from table_2));'''
tdSql
.
query
(
sql
)
tdSql
.
error
(
sql
)
tdSql
.
checkRows
(
1
)
#
tdSql.checkRows(1)
tdSql
.
checkData
(
0
,
1
,
self
.
num
-
1
)
#
tdSql.checkData(0,1,self.num-1)
tdSql
.
checkData
(
0
,
2
,
self
.
num
-
1
)
#
tdSql.checkData(0,2,self.num-1)
tdSql
.
checkData
(
0
,
3
,
self
.
num
-
1
)
#
tdSql.checkData(0,3,self.num-1)
tdSql
.
checkData
(
0
,
4
,
self
.
num
-
1
)
#
tdSql.checkData(0,4,self.num-1)
tdSql
.
checkData
(
0
,
5
,
'False'
)
#
tdSql.checkData(0,5,'False')
tdSql
.
checkData
(
0
,
6
,
'binary.9'
)
#
tdSql.checkData(0,6,'binary.9')
tdSql
.
checkData
(
0
,
7
,
'nchar.9'
)
#
tdSql.checkData(0,7,'nchar.9')
tdSql
.
checkData
(
0
,
8
,
9.00000
)
#
tdSql.checkData(0,8,9.00000)
tdSql
.
checkData
(
0
,
9
,
9.000000000
)
#
tdSql.checkData(0,9,9.000000000)
tdSql
.
checkData
(
0
,
10
,
'2020-09-13 20:26:40.009'
)
#
tdSql.checkData(0,10,'2020-09-13 20:26:40.009')
# bug 5055
# bug 5055
# sql = '''select last_row(*) from
# sql = '''select last_row(*) from
...
@@ -214,18 +215,18 @@ class TDTestCase:
...
@@ -214,18 +215,18 @@ class TDTestCase:
((select * from table_0 limit 5 offset 5) union all
((select * from table_0 limit 5 offset 5) union all
(select * from table_1 limit 5 offset 5) union all
(select * from table_1 limit 5 offset 5) union all
(select * from regular_table_1 limit 5 offset 5));'''
(select * from regular_table_1 limit 5 offset 5));'''
tdSql
.
query
(
sql
)
tdSql
.
error
(
sql
)
tdSql
.
checkRows
(
1
)
#
tdSql.checkRows(1)
tdSql
.
checkData
(
0
,
1
,
self
.
num
-
1
)
#
tdSql.checkData(0,1,self.num-1)
tdSql
.
checkData
(
0
,
2
,
self
.
num
-
1
)
#
tdSql.checkData(0,2,self.num-1)
tdSql
.
checkData
(
0
,
3
,
self
.
num
-
1
)
#
tdSql.checkData(0,3,self.num-1)
tdSql
.
checkData
(
0
,
4
,
self
.
num
-
1
)
#
tdSql.checkData(0,4,self.num-1)
tdSql
.
checkData
(
0
,
5
,
'False'
)
#
tdSql.checkData(0,5,'False')
tdSql
.
checkData
(
0
,
6
,
'binary.9'
)
#
tdSql.checkData(0,6,'binary.9')
tdSql
.
checkData
(
0
,
7
,
'nchar.9'
)
#
tdSql.checkData(0,7,'nchar.9')
tdSql
.
checkData
(
0
,
8
,
9.00000
)
#
tdSql.checkData(0,8,9.00000)
tdSql
.
checkData
(
0
,
9
,
9.000000000
)
#
tdSql.checkData(0,9,9.000000000)
tdSql
.
checkData
(
0
,
10
,
'2020-09-13 20:26:40.009'
)
#
tdSql.checkData(0,10,'2020-09-13 20:26:40.009')
sql
=
'''select last_row(*) from
sql
=
'''select last_row(*) from
...
@@ -260,4 +261,4 @@ class TDTestCase:
...
@@ -260,4 +261,4 @@ class TDTestCase:
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
\ No newline at end of file
tests/pytest/query/query1970YearsAf.py
浏览文件 @
210bee6b
...
@@ -187,19 +187,19 @@ class TDTestCase:
...
@@ -187,19 +187,19 @@ class TDTestCase:
"select * from t9 where t9.ts > '1969-12-31 22:00:00.000' and t9.ts <'1970-01-01 02:00:00.000' "
"select * from t9 where t9.ts > '1969-12-31 22:00:00.000' and t9.ts <'1970-01-01 02:00:00.000' "
)
)
tdSql
.
checkRows
(
719
)
tdSql
.
checkRows
(
719
)
tdSql
.
query
(
tdSql
.
query
(
"select * from t0,t1 where t0.ts=t1.ts and t1.ts >= '1970-01-01 00:00:00.000' "
"select * from t0,t1 where t0.ts=t1.ts and t1.ts >= '1970-01-01 00:00:00.000' "
)
)
tdSql
.
checkRows
(
680
)
tdSql
.
checkRows
(
680
)
tdSql
.
query
(
tdSql
.
query
(
"select diff(c
ol
1) from t0 where t0.ts >= '1970-01-01 00:00:00.000' "
"select diff(c1) from t0 where t0.ts >= '1970-01-01 00:00:00.000' "
)
)
tdSql
.
checkRows
(
679
)
tdSql
.
checkRows
(
679
)
tdSql
.
query
(
tdSql
.
query
(
"select t0,c
ol
1 from stb2 where stb2.ts < '1970-01-01 00:00:00.000' order by ts"
"select t0,c1 from stb2 where stb2.ts < '1970-01-01 00:00:00.000' order by ts"
)
)
tdSql
.
checkRows
(
43200
)
tdSql
.
checkRows
(
43200
)
...
...
tests/pytest/query/queryPerformance.py
浏览文件 @
210bee6b
...
@@ -73,10 +73,11 @@ class taosdemoQueryPerformace:
...
@@ -73,10 +73,11 @@ class taosdemoQueryPerformace:
sql
=
"select avg(f1), max(f2), min(f3) from meters where ts <= '2017-07-15 10:40:01.000' and ts <= '2017-07-15 14:00:40.000'"
sql
=
"select avg(f1), max(f2), min(f3) from meters where ts <= '2017-07-15 10:40:01.000' and ts <= '2017-07-15 14:00:40.000'"
tableid
=
8
tableid
=
8
cursor
.
execute
(
"create table if not exists %s%d using %s tags(%d,
\"
%s
\"
)"
%
(
self
.
tbPerfix
,
tableid
,
self
.
stbName
,
tableid
,
sql
))
cursor
.
execute
(
"create table if not exists %s%d using %s tags(%d,
\"
%s
\"
)"
%
(
self
.
tbPerfix
,
tableid
,
self
.
stbName
,
tableid
,
sql
))
sql
=
"select last(*) from meters"
sql
=
"select last(*) from meters"
tableid
=
9
tableid
=
9
cursor
.
execute
(
"create table if not exists %s%d using %s tags(%d, '%s')"
%
(
self
.
tbPerfix
,
tableid
,
self
.
stbName
,
tableid
,
sql
))
cursor
.
execute
(
"create table if not exists %s%d using %s tags(%d, '%s')"
%
(
self
.
tbPerfix
,
tableid
,
self
.
stbName
,
tableid
,
sql
))
cursor
.
close
()
cursor
.
close
()
def
query
(
self
):
def
query
(
self
):
...
...
tests/pytest/table/max_table_length.py
浏览文件 @
210bee6b
...
@@ -42,7 +42,7 @@ class TDTestCase:
...
@@ -42,7 +42,7 @@ class TDTestCase:
print
(
"==============step3"
)
print
(
"==============step3"
)
tdLog
.
info
(
"check int & binary"
)
tdLog
.
info
(
"check int & binary"
)
tdSql
.
error
(
"create table anal2 (ts timestamp ,i binary(16371),j int)"
)
#
tdSql.error("create table anal2 (ts timestamp ,i binary(16371),j int)")
tdSql
.
execute
(
"create table anal2 (ts timestamp ,i binary(16370),j int)"
)
tdSql
.
execute
(
"create table anal2 (ts timestamp ,i binary(16370),j int)"
)
tdSql
.
execute
(
"create table anal3 (ts timestamp ,i binary(16366), j int, k int)"
)
tdSql
.
execute
(
"create table anal3 (ts timestamp ,i binary(16366), j int, k int)"
)
...
...
tests/pytest/tools/taosdemoAllTest/TD-4985/query-limit-offset.py
浏览文件 @
210bee6b
...
@@ -23,7 +23,7 @@ class TDTestCase:
...
@@ -23,7 +23,7 @@ class TDTestCase:
def
init
(
self
,
conn
,
logSql
):
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
def
getBuildPath
(
self
):
def
getBuildPath
(
self
):
selfPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
selfPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
...
@@ -39,7 +39,7 @@ class TDTestCase:
...
@@ -39,7 +39,7 @@ class TDTestCase:
buildPath
=
root
[:
len
(
root
)
-
len
(
"/build/bin"
)]
buildPath
=
root
[:
len
(
root
)
-
len
(
"/build/bin"
)]
break
break
return
buildPath
return
buildPath
def
run
(
self
):
def
run
(
self
):
buildPath
=
self
.
getBuildPath
()
buildPath
=
self
.
getBuildPath
()
if
(
buildPath
==
""
):
if
(
buildPath
==
""
):
...
@@ -48,7 +48,7 @@ class TDTestCase:
...
@@ -48,7 +48,7 @@ class TDTestCase:
tdLog
.
info
(
"taosd found in %s"
%
buildPath
)
tdLog
.
info
(
"taosd found in %s"
%
buildPath
)
binPath
=
buildPath
+
"/build/bin/"
binPath
=
buildPath
+
"/build/bin/"
# insert: create one or mutiple tables per sql and insert multiple rows per sql
# insert: create one or mutiple tables per sql and insert multiple rows per sql
# test case for https://jira.taosdata.com:18080/browse/TD-4985
# test case for https://jira.taosdata.com:18080/browse/TD-4985
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/TD-4985/query-limit-offset.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/TD-4985/query-limit-offset.json -y "
%
binPath
)
tdSql
.
execute
(
"use db"
)
tdSql
.
execute
(
"use db"
)
...
@@ -56,27 +56,27 @@ class TDTestCase:
...
@@ -56,27 +56,27 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
0
,
10000
)
tdSql
.
checkData
(
0
,
0
,
10000
)
for
i
in
range
(
1000
):
for
i
in
range
(
1000
):
tdSql
.
execute
(
'''insert into stb00_9999 values(%d, %d, %d,'test99.%s')'''
tdSql
.
execute
(
'''insert into stb00_9999 values(%d, %d, %d,'test99.%s')'''
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
tdSql
.
execute
(
'''insert into stb00_8888 values(%d, %d, %d,'test98.%s')'''
tdSql
.
execute
(
'''insert into stb00_8888 values(%d, %d, %d,'test98.%s')'''
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
tdSql
.
execute
(
'''insert into stb00_7777 values(%d, %d, %d,'test97.%s')'''
tdSql
.
execute
(
'''insert into stb00_7777 values(%d, %d, %d,'test97.%s')'''
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
tdSql
.
execute
(
'''insert into stb00_6666 values(%d, %d, %d,'test96.%s')'''
tdSql
.
execute
(
'''insert into stb00_6666 values(%d, %d, %d,'test96.%s')'''
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
tdSql
.
execute
(
'''insert into stb00_5555 values(%d, %d, %d,'test95.%s')'''
tdSql
.
execute
(
'''insert into stb00_5555 values(%d, %d, %d,'test95.%s')'''
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
tdSql
.
execute
(
'''insert into stb00_4444 values(%d, %d, %d,'test94.%s')'''
tdSql
.
execute
(
'''insert into stb00_4444 values(%d, %d, %d,'test94.%s')'''
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
tdSql
.
execute
(
'''insert into stb00_3333 values(%d, %d, %d,'test93.%s')'''
tdSql
.
execute
(
'''insert into stb00_3333 values(%d, %d, %d,'test93.%s')'''
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
tdSql
.
execute
(
'''insert into stb00_2222 values(%d, %d, %d,'test92.%s')'''
tdSql
.
execute
(
'''insert into stb00_2222 values(%d, %d, %d,'test92.%s')'''
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
tdSql
.
execute
(
'''insert into stb00_1111 values(%d, %d, %d,'test91.%s')'''
tdSql
.
execute
(
'''insert into stb00_1111 values(%d, %d, %d,'test91.%s')'''
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
tdSql
.
execute
(
'''insert into stb00_100 values(%d, %d, %d,'test90.%s')'''
tdSql
.
execute
(
'''insert into stb00_100 values(%d, %d, %d,'test90.%s')'''
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
%
(
1600000000000
+
i
,
i
,
-
10000
+
i
,
i
))
tdSql
.
query
(
"select * from stb0 where c
ol
2 like 'test99%' "
)
tdSql
.
query
(
"select * from stb0 where c2 like 'test99%' "
)
tdSql
.
checkRows
(
1000
)
tdSql
.
checkRows
(
1000
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_9999' limit 10"
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_9999' limit 10"
)
tdSql
.
checkData
(
0
,
1
,
0
)
tdSql
.
checkData
(
0
,
1
,
0
)
...
@@ -86,7 +86,7 @@ class TDTestCase:
...
@@ -86,7 +86,7 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
query
(
"select * from stb0 where c
ol
2 like 'test98%' "
)
tdSql
.
query
(
"select * from stb0 where c2 like 'test98%' "
)
tdSql
.
checkRows
(
1000
)
tdSql
.
checkRows
(
1000
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_8888' limit 10"
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_8888' limit 10"
)
tdSql
.
checkData
(
0
,
1
,
0
)
tdSql
.
checkData
(
0
,
1
,
0
)
...
@@ -96,7 +96,7 @@ class TDTestCase:
...
@@ -96,7 +96,7 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
query
(
"select * from stb0 where c
ol
2 like 'test97%' "
)
tdSql
.
query
(
"select * from stb0 where c2 like 'test97%' "
)
tdSql
.
checkRows
(
1000
)
tdSql
.
checkRows
(
1000
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_7777' limit 10"
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_7777' limit 10"
)
tdSql
.
checkData
(
0
,
1
,
0
)
tdSql
.
checkData
(
0
,
1
,
0
)
...
@@ -106,7 +106,7 @@ class TDTestCase:
...
@@ -106,7 +106,7 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
query
(
"select * from stb0 where c
ol
2 like 'test96%' "
)
tdSql
.
query
(
"select * from stb0 where c2 like 'test96%' "
)
tdSql
.
checkRows
(
1000
)
tdSql
.
checkRows
(
1000
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_6666' limit 10"
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_6666' limit 10"
)
tdSql
.
checkData
(
0
,
1
,
0
)
tdSql
.
checkData
(
0
,
1
,
0
)
...
@@ -116,7 +116,7 @@ class TDTestCase:
...
@@ -116,7 +116,7 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
query
(
"select * from stb0 where c
ol
2 like 'test95%' "
)
tdSql
.
query
(
"select * from stb0 where c2 like 'test95%' "
)
tdSql
.
checkRows
(
1000
)
tdSql
.
checkRows
(
1000
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_5555' limit 10"
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_5555' limit 10"
)
tdSql
.
checkData
(
0
,
1
,
0
)
tdSql
.
checkData
(
0
,
1
,
0
)
...
@@ -126,7 +126,7 @@ class TDTestCase:
...
@@ -126,7 +126,7 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
query
(
"select * from stb0 where c
ol
2 like 'test94%' "
)
tdSql
.
query
(
"select * from stb0 where c2 like 'test94%' "
)
tdSql
.
checkRows
(
1000
)
tdSql
.
checkRows
(
1000
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_4444' limit 10"
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_4444' limit 10"
)
tdSql
.
checkData
(
0
,
1
,
0
)
tdSql
.
checkData
(
0
,
1
,
0
)
...
@@ -136,7 +136,7 @@ class TDTestCase:
...
@@ -136,7 +136,7 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
query
(
"select * from stb0 where c
ol
2 like 'test93%' "
)
tdSql
.
query
(
"select * from stb0 where c2 like 'test93%' "
)
tdSql
.
checkRows
(
1000
)
tdSql
.
checkRows
(
1000
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_3333' limit 100"
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_3333' limit 100"
)
tdSql
.
checkData
(
0
,
1
,
0
)
tdSql
.
checkData
(
0
,
1
,
0
)
...
@@ -146,7 +146,7 @@ class TDTestCase:
...
@@ -146,7 +146,7 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
query
(
"select * from stb0 where c
ol
2 like 'test92%' "
)
tdSql
.
query
(
"select * from stb0 where c2 like 'test92%' "
)
tdSql
.
checkRows
(
1000
)
tdSql
.
checkRows
(
1000
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_2222' limit 100"
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_2222' limit 100"
)
tdSql
.
checkData
(
0
,
1
,
0
)
tdSql
.
checkData
(
0
,
1
,
0
)
...
@@ -156,7 +156,7 @@ class TDTestCase:
...
@@ -156,7 +156,7 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
query
(
"select * from stb0 where c
ol
2 like 'test91%' "
)
tdSql
.
query
(
"select * from stb0 where c2 like 'test91%' "
)
tdSql
.
checkRows
(
1000
)
tdSql
.
checkRows
(
1000
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_1111' limit 100"
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_1111' limit 100"
)
tdSql
.
checkData
(
0
,
1
,
0
)
tdSql
.
checkData
(
0
,
1
,
0
)
...
@@ -166,7 +166,7 @@ class TDTestCase:
...
@@ -166,7 +166,7 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
0
,
1
,
5
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
1
,
1
,
6
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
query
(
"select * from stb0 where c
ol
2 like 'test90%' "
)
tdSql
.
query
(
"select * from stb0 where c2 like 'test90%' "
)
tdSql
.
checkRows
(
1000
)
tdSql
.
checkRows
(
1000
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_100' limit 100"
)
tdSql
.
query
(
"select * from stb0 where tbname like 'stb00_100' limit 100"
)
tdSql
.
checkData
(
0
,
1
,
0
)
tdSql
.
checkData
(
0
,
1
,
0
)
...
@@ -178,10 +178,10 @@ class TDTestCase:
...
@@ -178,10 +178,10 @@ class TDTestCase:
tdSql
.
checkData
(
2
,
1
,
7
)
tdSql
.
checkData
(
2
,
1
,
7
)
os
.
system
(
"rm -rf tools/taosdemoAllTest/TD-4985/query-limit-offset.py.sql"
)
os
.
system
(
"rm -rf tools/taosdemoAllTest/TD-4985/query-limit-offset.py.sql"
)
def
stop
(
self
):
def
stop
(
self
):
tdSql
.
close
()
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
...
...
tests/pytest/tools/taosdemoAllTest/TD-5213/insertSigcolumnsNum4096.csv
0 → 100755
浏览文件 @
210bee6b
0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
\ No newline at end of file
tests/pytest/tools/taosdemoAllTest/TD-5213/insertSigcolumnsNum4096.json
0 → 100755
浏览文件 @
210bee6b
{
"filetype"
:
"insert"
,
"cfgdir"
:
"/etc/taos"
,
"host"
:
"127.0.0.1"
,
"port"
:
6030
,
"user"
:
"root"
,
"password"
:
"taosdata"
,
"thread_count"
:
10
,
"thread_count_create_tbl"
:
10
,
"result_file"
:
"./insert_res.txt"
,
"confirm_parameter_prompt"
:
"no"
,
"insert_interval"
:
0
,
"interlace_rows"
:
10
,
"num_of_records_per_req"
:
1
,
"max_sql_len"
:
102400000
,
"databases"
:
[{
"dbinfo"
:
{
"name"
:
"db"
,
"drop"
:
"yes"
,
"replica"
:
1
,
"days"
:
10
,
"cache"
:
50
,
"blocks"
:
8
,
"precision"
:
"ms"
,
"keep"
:
365
,
"minRows"
:
100
,
"maxRows"
:
4096
,
"comp"
:
2
,
"walLevel"
:
1
,
"cachelast"
:
0
,
"quorum"
:
1
,
"fsync"
:
3000
,
"update"
:
0
},
"super_tables"
:
[{
"name"
:
"stb_old"
,
"child_table_exists"
:
"no"
,
"childtable_count"
:
10
,
"childtable_prefix"
:
"stb_old_"
,
"auto_create_table"
:
"no"
,
"batch_create_tbl_num"
:
5
,
"data_source"
:
"sample"
,
"insert_mode"
:
"taosc"
,
"insert_rows"
:
100
,
"childtable_limit"
:
0
,
"childtable_offset"
:
0
,
"multi_thread_write_one_tbl"
:
"no"
,
"interlace_rows"
:
0
,
"insert_interval"
:
0
,
"max_sql_len"
:
1024000
,
"disorder_ratio"
:
0
,
"disorder_range"
:
1000
,
"timestamp_step"
:
1
,
"start_timestamp"
:
"2020-10-01 00:00:00.000"
,
"sample_format"
:
"csv"
,
"sample_file"
:
"./tools/taosdemoAllTest/TD-5213/insertSigcolumnsNum4096.csv"
,
"tags_file"
:
""
,
"columns"
:
[{
"type"
:
"INT"
,
"count"
:
4000
},
{
"type"
:
"BINARY"
,
"len"
:
16
,
"count"
:
1
}],
"tags"
:
[{
"type"
:
"TINYINT"
,
"count"
:
2
},
{
"type"
:
"BINARY"
,
"len"
:
16
,
"count"
:
1
}]
},{
"name"
:
"stb_new"
,
"child_table_exists"
:
"no"
,
"childtable_count"
:
10
,
"childtable_prefix"
:
"stb_new_"
,
"auto_create_table"
:
"no"
,
"batch_create_tbl_num"
:
5
,
"data_source"
:
"rand"
,
"insert_mode"
:
"taosc"
,
"insert_rows"
:
100
,
"childtable_limit"
:
0
,
"childtable_offset"
:
0
,
"multi_thread_write_one_tbl"
:
"no"
,
"interlace_rows"
:
0
,
"insert_interval"
:
0
,
"max_sql_len"
:
1024000
,
"disorder_ratio"
:
0
,
"disorder_range"
:
1000
,
"timestamp_step"
:
1
,
"start_timestamp"
:
"2020-10-01 00:00:00.000"
,
"sample_format"
:
"csv"
,
"sample_file"
:
"./tools/taosdemoAllTest/sample.csv"
,
"tags_file"
:
""
,
"columns"
:
[{
"type"
:
"DOUBLE"
,
"count"
:
1020
}],
"tags"
:
[{
"type"
:
"TINYINT"
,
"count"
:
2
},
{
"type"
:
"BINARY"
,
"len"
:
16
,
"count"
:
1
}]
},{
"name"
:
"stb_int"
,
"child_table_exists"
:
"no"
,
"childtable_count"
:
10
,
"childtable_prefix"
:
"stb_int_"
,
"auto_create_table"
:
"no"
,
"batch_create_tbl_num"
:
5
,
"data_source"
:
"rand"
,
"insert_mode"
:
"taosc"
,
"insert_rows"
:
100
,
"childtable_limit"
:
0
,
"childtable_offset"
:
0
,
"multi_thread_write_one_tbl"
:
"no"
,
"interlace_rows"
:
0
,
"insert_interval"
:
0
,
"max_sql_len"
:
1024000
,
"disorder_ratio"
:
0
,
"disorder_range"
:
1000
,
"timestamp_step"
:
1
,
"start_timestamp"
:
"2020-10-01 00:00:00.000"
,
"sample_format"
:
"csv"
,
"sample_file"
:
"./tools/taosdemoAllTest/sample.csv"
,
"tags_file"
:
""
,
"columns"
:
[{
"type"
:
"int"
,
"count"
:
1020
}],
"tags"
:
[{
"type"
:
"TINYINT"
,
"count"
:
2
},
{
"type"
:
"BINARY"
,
"len"
:
16
,
"count"
:
1
}]
}]
}]
}
tests/pytest/tools/taosdemoAllTest/TD-5213/insertSigcolumnsNum4096.py
0 → 100755
浏览文件 @
210bee6b
###################################################################
# Copyright (c) 2016 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
import
sys
import
os
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
from
util.dnodes
import
*
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
def
getBuildPath
(
self
):
selfPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
if
(
"community"
in
selfPath
):
projPath
=
selfPath
[:
selfPath
.
find
(
"community"
)]
else
:
projPath
=
selfPath
[:
selfPath
.
find
(
"tests"
)]
for
root
,
dirs
,
files
in
os
.
walk
(
projPath
):
if
(
"taosd"
in
files
):
rootRealPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
root
))
if
(
"packaging"
not
in
rootRealPath
):
buildPath
=
root
[:
len
(
root
)
-
len
(
"/build/bin"
)]
break
return
buildPath
def
run
(
self
):
buildPath
=
self
.
getBuildPath
()
if
(
buildPath
==
""
):
tdLog
.
exit
(
"taosd not found!"
)
else
:
tdLog
.
info
(
"taosd found in %s"
%
buildPath
)
binPath
=
buildPath
+
"/build/bin/"
# insert: create one or mutiple tables per sql and insert multiple rows per sql
# test case for https://jira.taosdata.com:18080/browse/TD-5213
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/TD-5213/insertSigcolumnsNum4096.json -y "
%
binPath
)
tdSql
.
execute
(
"use db"
)
tdSql
.
query
(
"select count (tbname) from stb_old"
)
tdSql
.
checkData
(
0
,
0
,
10
)
# tdSql.query("select * from stb_old")
# tdSql.checkRows(10)
# tdSql.checkCols(1024)
# tdSql.query("select count (tbname) from stb_new")
# tdSql.checkData(0, 0, 10)
# tdSql.query("select * from stb_new")
# tdSql.checkRows(10)
# tdSql.checkCols(4096)
# tdLog.info("stop dnode to commit data to disk")
# tdDnodes.stop(1)
# tdDnodes.start(1)
#regular table
sql
=
"create table tb(ts timestamp, "
for
i
in
range
(
1022
):
sql
+=
"c%d binary(14), "
%
(
i
+
1
)
sql
+=
"c1023 binary(22))"
tdSql
.
execute
(
sql
)
for
i
in
range
(
4
):
sql
=
"insert into tb values(%d, "
for
j
in
range
(
1022
):
str
=
"'%s', "
%
self
.
get_random_string
(
14
)
sql
+=
str
sql
+=
"'%s')"
%
self
.
get_random_string
(
22
)
tdSql
.
execute
(
sql
%
(
self
.
ts
+
i
))
time
.
sleep
(
10
)
tdSql
.
query
(
"select count(*) from tb"
)
tdSql
.
checkData
(
0
,
0
,
4
)
tdDnodes
.
stop
(
1
)
tdDnodes
.
start
(
1
)
time
.
sleep
(
1
)
tdSql
.
query
(
"select count(*) from tb"
)
tdSql
.
checkData
(
0
,
0
,
4
)
sql
=
"create table tb1(ts timestamp, "
for
i
in
range
(
4094
):
sql
+=
"c%d binary(14), "
%
(
i
+
1
)
sql
+=
"c4095 binary(22))"
tdSql
.
execute
(
sql
)
for
i
in
range
(
4
):
sql
=
"insert into tb1 values(%d, "
for
j
in
range
(
4094
):
str
=
"'%s', "
%
self
.
get_random_string
(
14
)
sql
+=
str
sql
+=
"'%s')"
%
self
.
get_random_string
(
22
)
tdSql
.
execute
(
sql
%
(
self
.
ts
+
i
))
time
.
sleep
(
10
)
tdSql
.
query
(
"select count(*) from tb1"
)
tdSql
.
checkData
(
0
,
0
,
4
)
tdDnodes
.
stop
(
1
)
tdDnodes
.
start
(
1
)
time
.
sleep
(
1
)
tdSql
.
query
(
"select count(*) from tb1"
)
tdSql
.
checkData
(
0
,
0
,
4
)
#os.system("rm -rf tools/taosdemoAllTest/TD-5213/insertSigcolumnsNum4096.py.sql")
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/pytest/tools/taosdemoAllTest/taosdemoTestInsertWithJson.py
浏览文件 @
210bee6b
...
@@ -23,7 +23,7 @@ class TDTestCase:
...
@@ -23,7 +23,7 @@ class TDTestCase:
def
init
(
self
,
conn
,
logSql
):
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
def
getBuildPath
(
self
):
def
getBuildPath
(
self
):
selfPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
selfPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
...
@@ -39,7 +39,7 @@ class TDTestCase:
...
@@ -39,7 +39,7 @@ class TDTestCase:
buildPath
=
root
[:
len
(
root
)
-
len
(
"/build/bin"
)]
buildPath
=
root
[:
len
(
root
)
-
len
(
"/build/bin"
)]
break
break
return
buildPath
return
buildPath
def
run
(
self
):
def
run
(
self
):
buildPath
=
self
.
getBuildPath
()
buildPath
=
self
.
getBuildPath
()
if
(
buildPath
==
""
):
if
(
buildPath
==
""
):
...
@@ -48,7 +48,7 @@ class TDTestCase:
...
@@ -48,7 +48,7 @@ class TDTestCase:
tdLog
.
info
(
"taosd found in %s"
%
buildPath
)
tdLog
.
info
(
"taosd found in %s"
%
buildPath
)
binPath
=
buildPath
+
"/build/bin/"
binPath
=
buildPath
+
"/build/bin/"
# insert: create one or mutiple tables per sql and insert multiple rows per sql
# insert: create one or mutiple tables per sql and insert multiple rows per sql
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-1s1tnt1r.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-1s1tnt1r.json -y "
%
binPath
)
tdSql
.
execute
(
"use db"
)
tdSql
.
execute
(
"use db"
)
tdSql
.
query
(
"select count (tbname) from stb0"
)
tdSql
.
query
(
"select count (tbname) from stb0"
)
...
@@ -62,7 +62,7 @@ class TDTestCase:
...
@@ -62,7 +62,7 @@ class TDTestCase:
tdSql
.
query
(
"select count(*) from stb01_1"
)
tdSql
.
query
(
"select count(*) from stb01_1"
)
tdSql
.
checkData
(
0
,
0
,
200
)
tdSql
.
checkData
(
0
,
0
,
200
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
200000
)
tdSql
.
checkData
(
0
,
0
,
200000
)
# restful connector insert data
# restful connector insert data
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertRestful.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertRestful.json -y "
%
binPath
)
...
@@ -81,7 +81,7 @@ class TDTestCase:
...
@@ -81,7 +81,7 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
0
,
200
)
tdSql
.
checkData
(
0
,
0
,
200
)
# insert: create mutiple tables per sql and insert one rows per sql .
# insert: create mutiple tables per sql and insert one rows per sql .
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-1s1tntmr.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-1s1tntmr.json -y "
%
binPath
)
tdSql
.
execute
(
"use db"
)
tdSql
.
execute
(
"use db"
)
tdSql
.
query
(
"select count (tbname) from stb0"
)
tdSql
.
query
(
"select count (tbname) from stb0"
)
...
@@ -89,34 +89,34 @@ class TDTestCase:
...
@@ -89,34 +89,34 @@ class TDTestCase:
tdSql
.
query
(
"select count (tbname) from stb1"
)
tdSql
.
query
(
"select count (tbname) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
20
)
tdSql
.
checkData
(
0
,
0
,
20
)
tdSql
.
query
(
"select count(*) from stb00_0"
)
tdSql
.
query
(
"select count(*) from stb00_0"
)
tdSql
.
checkData
(
0
,
0
,
10000
)
tdSql
.
checkData
(
0
,
0
,
10000
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
checkData
(
0
,
0
,
100000
)
tdSql
.
checkData
(
0
,
0
,
100000
)
tdSql
.
query
(
"select count(*) from stb01_0"
)
tdSql
.
query
(
"select count(*) from stb01_0"
)
tdSql
.
checkData
(
0
,
0
,
20000
)
tdSql
.
checkData
(
0
,
0
,
20000
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
400000
)
tdSql
.
checkData
(
0
,
0
,
400000
)
# insert: using parament "insert_interval to controls spped of insert.
# insert: using parament "insert_interval to controls spped of insert.
# but We need to have accurate methods to control the speed, such as getting the speed value, checking the count and so on。
# but We need to have accurate methods to control the speed, such as getting the speed value, checking the count and so on。
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-interval-speed.json -y"
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-interval-speed.json -y"
%
binPath
)
tdSql
.
execute
(
"use db"
)
tdSql
.
execute
(
"use db"
)
tdSql
.
query
(
"show stables"
)
tdSql
.
query
(
"show stables"
)
tdSql
.
checkData
(
0
,
4
,
100
)
tdSql
.
checkData
(
0
,
4
,
100
)
tdSql
.
query
(
"select count(*) from stb00_0"
)
tdSql
.
query
(
"select count(*) from stb00_0"
)
tdSql
.
checkData
(
0
,
0
,
20000
)
tdSql
.
checkData
(
0
,
0
,
20000
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
checkData
(
0
,
0
,
2000000
)
tdSql
.
checkData
(
0
,
0
,
2000000
)
tdSql
.
query
(
"show stables"
)
tdSql
.
query
(
"show stables"
)
tdSql
.
checkData
(
1
,
4
,
100
)
tdSql
.
checkData
(
1
,
4
,
100
)
tdSql
.
query
(
"select count(*) from stb01_0"
)
tdSql
.
query
(
"select count(*) from stb01_0"
)
tdSql
.
checkData
(
0
,
0
,
20000
)
tdSql
.
checkData
(
0
,
0
,
20000
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
2000000
)
tdSql
.
checkData
(
0
,
0
,
2000000
)
# spend 2min30s for 3 testcases.
# spend 2min30s for 3 testcases.
# insert: drop and child_table_exists combination test
# insert: drop and child_table_exists combination test
# insert: using parament "childtable_offset and childtable_limit" to control table'offset point and offset
# insert: using parament "childtable_offset and childtable_limit" to control table'offset point and offset
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-nodbnodrop.json -y"
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-nodbnodrop.json -y"
%
binPath
)
tdSql
.
error
(
"show dbno.stables"
)
tdSql
.
error
(
"show dbno.stables"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-newdb.json -y"
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-newdb.json -y"
%
binPath
)
...
@@ -128,41 +128,41 @@ class TDTestCase:
...
@@ -128,41 +128,41 @@ class TDTestCase:
tdSql
.
query
(
"select count (tbname) from stb2"
)
tdSql
.
query
(
"select count (tbname) from stb2"
)
tdSql
.
checkData
(
0
,
0
,
7
)
tdSql
.
checkData
(
0
,
0
,
7
)
tdSql
.
query
(
"select count (tbname) from stb3"
)
tdSql
.
query
(
"select count (tbname) from stb3"
)
tdSql
.
checkData
(
0
,
0
,
8
)
tdSql
.
checkData
(
0
,
0
,
8
)
tdSql
.
query
(
"select count (tbname) from stb4"
)
tdSql
.
query
(
"select count (tbname) from stb4"
)
tdSql
.
checkData
(
0
,
0
,
8
)
tdSql
.
checkData
(
0
,
0
,
8
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-offset.json -y"
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-offset.json -y"
%
binPath
)
tdSql
.
execute
(
"use db"
)
tdSql
.
execute
(
"use db"
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
checkData
(
0
,
0
,
50
)
tdSql
.
checkData
(
0
,
0
,
50
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
240
)
tdSql
.
checkData
(
0
,
0
,
240
)
tdSql
.
query
(
"select count(*) from stb2"
)
tdSql
.
query
(
"select count(*) from stb2"
)
tdSql
.
checkData
(
0
,
0
,
220
)
tdSql
.
checkData
(
0
,
0
,
220
)
tdSql
.
query
(
"select count(*) from stb3"
)
tdSql
.
query
(
"select count(*) from stb3"
)
tdSql
.
checkData
(
0
,
0
,
180
)
tdSql
.
checkData
(
0
,
0
,
180
)
tdSql
.
query
(
"select count(*) from stb4"
)
tdSql
.
query
(
"select count(*) from stb4"
)
tdSql
.
checkData
(
0
,
0
,
160
)
tdSql
.
checkData
(
0
,
0
,
160
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-newtable.json -y"
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-newtable.json -y"
%
binPath
)
tdSql
.
execute
(
"use db"
)
tdSql
.
execute
(
"use db"
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
checkData
(
0
,
0
,
150
)
tdSql
.
checkData
(
0
,
0
,
150
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
360
)
tdSql
.
checkData
(
0
,
0
,
360
)
tdSql
.
query
(
"select count(*) from stb2"
)
tdSql
.
query
(
"select count(*) from stb2"
)
tdSql
.
checkData
(
0
,
0
,
360
)
tdSql
.
checkData
(
0
,
0
,
360
)
tdSql
.
query
(
"select count(*) from stb3"
)
tdSql
.
query
(
"select count(*) from stb3"
)
tdSql
.
checkData
(
0
,
0
,
340
)
tdSql
.
checkData
(
0
,
0
,
340
)
tdSql
.
query
(
"select count(*) from stb4"
)
tdSql
.
query
(
"select count(*) from stb4"
)
tdSql
.
checkData
(
0
,
0
,
400
)
tdSql
.
checkData
(
0
,
0
,
400
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-renewdb.json -y"
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-renewdb.json -y"
%
binPath
)
tdSql
.
execute
(
"use db"
)
tdSql
.
execute
(
"use db"
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
checkData
(
0
,
0
,
50
)
tdSql
.
checkData
(
0
,
0
,
50
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
120
)
tdSql
.
checkData
(
0
,
0
,
120
)
tdSql
.
query
(
"select count(*) from stb2"
)
tdSql
.
query
(
"select count(*) from stb2"
)
tdSql
.
checkData
(
0
,
0
,
140
)
tdSql
.
checkData
(
0
,
0
,
140
)
tdSql
.
query
(
"select count(*) from stb3"
)
tdSql
.
query
(
"select count(*) from stb3"
)
tdSql
.
checkData
(
0
,
0
,
160
)
tdSql
.
checkData
(
0
,
0
,
160
)
tdSql
.
query
(
"select count(*) from stb4"
)
tdSql
.
query
(
"select count(*) from stb4"
)
...
@@ -170,59 +170,59 @@ class TDTestCase:
...
@@ -170,59 +170,59 @@ class TDTestCase:
# insert: let parament in json file is illegal, it'll expect error.
# insert: let parament in json file is illegal, it'll expect error.
tdSql
.
execute
(
"drop database if exists db"
)
tdSql
.
execute
(
"drop database if exists db"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertColumnsAndTagNumLarge1024.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertColumnsAndTagNumLarge1024.json -y "
%
binPath
)
tdSql
.
error
(
"use db"
)
tdSql
.
error
(
"use db"
)
tdSql
.
execute
(
"drop database if exists db"
)
tdSql
.
execute
(
"drop database if exists db"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertSigcolumnsNum1024.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertSigcolumnsNum1024.json -y "
%
binPath
)
tdSql
.
error
(
"select * from db.stb0"
)
tdSql
.
error
(
"select * from db.stb0"
)
tdSql
.
execute
(
"drop database if exists db"
)
tdSql
.
execute
(
"drop database if exists db"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertColumnsAndTagNum1024.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertColumnsAndTagNum1024.json -y "
%
binPath
)
tdSql
.
query
(
"select count(*) from db.stb0"
)
tdSql
.
query
(
"select count(*) from db.stb0"
)
tdSql
.
checkData
(
0
,
0
,
10000
)
tdSql
.
checkData
(
0
,
0
,
10000
)
tdSql
.
execute
(
"drop database if exists db"
)
tdSql
.
execute
(
"drop database if exists db"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertInterlaceRowsLarge1M.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertInterlaceRowsLarge1M.json -y "
%
binPath
)
tdSql
.
query
(
"select count(*) from db.stb0"
)
tdSql
.
query
(
"select count(*) from db.stb0"
)
tdSql
.
checkRows
(
0
)
tdSql
.
checkRows
(
0
)
tdSql
.
execute
(
"drop database if exists db"
)
tdSql
.
execute
(
"drop database if exists db"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertColumnsNum0.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertColumnsNum0.json -y "
%
binPath
)
tdSql
.
execute
(
"use db"
)
tdSql
.
execute
(
"use db"
)
tdSql
.
query
(
"show stables like 'stb0%' "
)
tdSql
.
query
(
"show stables like 'stb0%' "
)
tdSql
.
checkData
(
0
,
2
,
11
)
tdSql
.
checkData
(
0
,
2
,
11
)
tdSql
.
execute
(
"drop database if exists db"
)
tdSql
.
execute
(
"drop database if exists db"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertTagsNumLarge128.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertTagsNumLarge128.json -y "
%
binPath
)
tdSql
.
error
(
"use db1"
)
tdSql
.
error
(
"use db1"
)
tdSql
.
execute
(
"drop database if exists db"
)
tdSql
.
execute
(
"drop database if exists db"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertBinaryLenLarge16374AllcolLar16384.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertBinaryLenLarge16374AllcolLar16384.json -y "
%
binPath
)
tdSql
.
query
(
"select count(*) from db.stb0"
)
tdSql
.
query
(
"select count(*) from db.stb0"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
"select count(*) from db.stb1"
)
tdSql
.
query
(
"select count(*) from db.stb1"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkRows
(
1
)
tdSql
.
error
(
"select * from db.stb3"
)
tdSql
.
error
(
"select * from db.stb3"
)
tdSql
.
error
(
"select * from db.stb2"
)
tdSql
.
error
(
"select * from db.stb2"
)
tdSql
.
execute
(
"drop database if exists db"
)
tdSql
.
execute
(
"drop database if exists db"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertNumOfrecordPerReq0.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertNumOfrecordPerReq0.json -y "
%
binPath
)
tdSql
.
error
(
"select count(*) from db.stb0"
)
tdSql
.
error
(
"select count(*) from db.stb0"
)
tdSql
.
execute
(
"drop database if exists db"
)
tdSql
.
execute
(
"drop database if exists db"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertNumOfrecordPerReqless0.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertNumOfrecordPerReqless0.json -y "
%
binPath
)
tdSql
.
error
(
"use db"
)
tdSql
.
error
(
"use db"
)
tdSql
.
execute
(
"drop database if exists db"
)
tdSql
.
execute
(
"drop database if exists db"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertChildTab0.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertChildTab0.json -y "
%
binPath
)
tdSql
.
error
(
"use db"
)
tdSql
.
error
(
"use db"
)
tdSql
.
execute
(
"drop database if exists db"
)
tdSql
.
execute
(
"drop database if exists db"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertChildTabLess0.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertChildTabLess0.json -y "
%
binPath
)
tdSql
.
error
(
"use db"
)
tdSql
.
error
(
"use db"
)
tdSql
.
execute
(
"drop database if exists blf"
)
tdSql
.
execute
(
"drop database if exists blf"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertTimestepMulRowsLargeint16.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertTimestepMulRowsLargeint16.json -y "
%
binPath
)
tdSql
.
execute
(
"use blf"
)
tdSql
.
execute
(
"use blf"
)
tdSql
.
query
(
"select ts from blf.p_0_topics_7 limit 262800,1"
)
tdSql
.
query
(
"select ts from blf.p_0_topics_7 limit 262800,1"
)
tdSql
.
checkData
(
0
,
0
,
"2020-03-31 12:00:00.000"
)
tdSql
.
checkData
(
0
,
0
,
"2020-03-31 12:00:00.000"
)
tdSql
.
query
(
"select first(ts) from blf.p_0_topics_2"
)
tdSql
.
query
(
"select first(ts) from blf.p_0_topics_2"
)
tdSql
.
checkData
(
0
,
0
,
"2019-10-01 00:00:00"
)
tdSql
.
checkData
(
0
,
0
,
"2019-10-01 00:00:00"
)
tdSql
.
query
(
"select last(ts) from blf.p_0_topics_6 "
)
tdSql
.
query
(
"select last(ts) from blf.p_0_topics_6 "
)
tdSql
.
checkData
(
0
,
0
,
"2020-09-29 23:59:00"
)
tdSql
.
checkData
(
0
,
0
,
"2020-09-29 23:59:00"
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertMaxNumPerReq.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insertMaxNumPerReq.json -y "
%
binPath
)
tdSql
.
execute
(
"use db"
)
tdSql
.
execute
(
"use db"
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
checkData
(
0
,
0
,
5000000
)
tdSql
.
checkData
(
0
,
0
,
5000000
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
query
(
"select count(*) from stb1"
)
...
@@ -230,7 +230,7 @@ class TDTestCase:
...
@@ -230,7 +230,7 @@ class TDTestCase:
# insert: timestamp and step
# insert: timestamp and step
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-timestep.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-timestep.json -y "
%
binPath
)
tdSql
.
execute
(
"use db"
)
tdSql
.
execute
(
"use db"
)
tdSql
.
query
(
"show stables"
)
tdSql
.
query
(
"show stables"
)
...
@@ -239,13 +239,13 @@ class TDTestCase:
...
@@ -239,13 +239,13 @@ class TDTestCase:
tdSql
.
query
(
"select count (tbname) from stb1"
)
tdSql
.
query
(
"select count (tbname) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
20
)
tdSql
.
checkData
(
0
,
0
,
20
)
tdSql
.
query
(
"select last(ts) from db.stb00_0"
)
tdSql
.
query
(
"select last(ts) from db.stb00_0"
)
tdSql
.
checkData
(
0
,
0
,
"2020-10-01 00:00:00.019000"
)
tdSql
.
checkData
(
0
,
0
,
"2020-10-01 00:00:00.019000"
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
checkData
(
0
,
0
,
200
)
tdSql
.
checkData
(
0
,
0
,
200
)
tdSql
.
query
(
"select last(ts) from db.stb01_0"
)
tdSql
.
query
(
"select last(ts) from db.stb01_0"
)
tdSql
.
checkData
(
0
,
0
,
"2020-11-01 00:00:00.190000"
)
tdSql
.
checkData
(
0
,
0
,
"2020-11-01 00:00:00.190000"
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
400
)
tdSql
.
checkData
(
0
,
0
,
400
)
# # insert: disorder_ratio
# # insert: disorder_ratio
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-disorder.json -g 2>&1 -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-disorder.json -g 2>&1 -y "
%
binPath
)
...
@@ -255,14 +255,14 @@ class TDTestCase:
...
@@ -255,14 +255,14 @@ class TDTestCase:
tdSql
.
query
(
"select count (tbname) from stb1"
)
tdSql
.
query
(
"select count (tbname) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
1
)
tdSql
.
checkData
(
0
,
0
,
1
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
query
(
"select count(*) from stb0"
)
tdSql
.
checkData
(
0
,
0
,
10
)
tdSql
.
checkData
(
0
,
0
,
10
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
query
(
"select count(*) from stb1"
)
tdSql
.
checkData
(
0
,
0
,
10
)
tdSql
.
checkData
(
0
,
0
,
10
)
# insert: sample json
# insert: sample json
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-sample.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-sample.json -y "
%
binPath
)
tdSql
.
execute
(
"use dbtest123"
)
tdSql
.
execute
(
"use dbtest123"
)
tdSql
.
query
(
"select c
ol
2 from stb0"
)
tdSql
.
query
(
"select c2 from stb0"
)
tdSql
.
checkData
(
0
,
0
,
2147483647
)
tdSql
.
checkData
(
0
,
0
,
2147483647
)
tdSql
.
query
(
"select * from stb1 where t1=-127"
)
tdSql
.
query
(
"select * from stb1 where t1=-127"
)
tdSql
.
checkRows
(
20
)
tdSql
.
checkRows
(
20
)
...
@@ -271,13 +271,13 @@ class TDTestCase:
...
@@ -271,13 +271,13 @@ class TDTestCase:
tdSql
.
query
(
"select * from stb1 where t2=126"
)
tdSql
.
query
(
"select * from stb1 where t2=126"
)
tdSql
.
checkRows
(
10
)
tdSql
.
checkRows
(
10
)
# insert: test interlace parament
# insert: test interlace parament
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-interlace-row.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f tools/taosdemoAllTest/insert-interlace-row.json -y "
%
binPath
)
tdSql
.
execute
(
"use db"
)
tdSql
.
execute
(
"use db"
)
tdSql
.
query
(
"select count (tbname) from stb0"
)
tdSql
.
query
(
"select count (tbname) from stb0"
)
tdSql
.
checkData
(
0
,
0
,
100
)
tdSql
.
checkData
(
0
,
0
,
100
)
tdSql
.
query
(
"select count (*) from stb0"
)
tdSql
.
query
(
"select count (*) from stb0"
)
tdSql
.
checkData
(
0
,
0
,
15000
)
tdSql
.
checkData
(
0
,
0
,
15000
)
# # insert: auto_create
# # insert: auto_create
...
@@ -317,10 +317,10 @@ class TDTestCase:
...
@@ -317,10 +317,10 @@ class TDTestCase:
tdSql
.
checkRows
(
20
)
tdSql
.
checkRows
(
20
)
os
.
system
(
"rm -rf ./insert_res.txt"
)
os
.
system
(
"rm -rf ./insert_res.txt"
)
os
.
system
(
"rm -rf tools/taosdemoAllTest/taosdemoTestInsertWithJson.py.sql"
)
os
.
system
(
"rm -rf tools/taosdemoAllTest/taosdemoTestInsertWithJson.py.sql"
)
def
stop
(
self
):
def
stop
(
self
):
tdSql
.
close
()
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
...
...
tests/pytest/tools/taosdemoPerformance.py
浏览文件 @
210bee6b
...
@@ -19,7 +19,6 @@ import json
...
@@ -19,7 +19,6 @@ import json
from
util.log
import
tdLog
from
util.log
import
tdLog
from
util.sql
import
tdSql
from
util.sql
import
tdSql
class
taosdemoPerformace
:
class
taosdemoPerformace
:
def
__init__
(
self
,
commitID
,
dbName
):
def
__init__
(
self
,
commitID
,
dbName
):
self
.
commitID
=
commitID
self
.
commitID
=
commitID
...
@@ -123,7 +122,7 @@ class taosdemoPerformace:
...
@@ -123,7 +122,7 @@ class taosdemoPerformace:
return
buildPath
return
buildPath
def
insertData
(
self
):
def
insertData
(
self
):
tdSql
.
prepare
()
buildPath
=
self
.
getBuildPath
()
buildPath
=
self
.
getBuildPath
()
if
(
buildPath
==
""
):
if
(
buildPath
==
""
):
tdLog
.
exit
(
"taosdemo not found!"
)
tdLog
.
exit
(
"taosdemo not found!"
)
...
...
tests/pytest/tools/taosdemoTest.py
浏览文件 @
210bee6b
...
@@ -59,11 +59,11 @@ class TDTestCase:
...
@@ -59,11 +59,11 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
0
,
self
.
numberOfTables
*
self
.
numberOfRecords
)
tdSql
.
checkData
(
0
,
0
,
self
.
numberOfTables
*
self
.
numberOfRecords
)
tdSql
.
query
(
tdSql
.
query
(
"select sum(c
ol
1) from test.meters interval(1h) sliding(30m)"
)
"select sum(c1) from test.meters interval(1h) sliding(30m)"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
tdSql
.
query
(
"select apercentile(c
ol
1, 1) from test.meters interval(100s)"
)
"select apercentile(c1, 1) from test.meters interval(100s)"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkRows
(
1
)
tdSql
.
error
(
"select loc, count(loc) from test.meters"
)
tdSql
.
error
(
"select loc, count(loc) from test.meters"
)
...
...
tests/pytest/tools/taosdumpTest.py
浏览文件 @
210bee6b
...
@@ -105,7 +105,6 @@ class TDTestCase:
...
@@ -105,7 +105,6 @@ class TDTestCase:
# 6--days,7--keep0,keep1,keep, 12--block,
# 6--days,7--keep0,keep1,keep, 12--block,
isCommunity
=
self
.
checkCommunity
()
isCommunity
=
self
.
checkCommunity
()
print
(
"iscommunity: %d"
%
isCommunity
)
print
(
"iscommunity: %d"
%
isCommunity
)
for
i
in
range
(
len
(
dbresult
)):
for
i
in
range
(
len
(
dbresult
)):
if
dbresult
[
i
][
0
]
==
'db'
:
if
dbresult
[
i
][
0
]
==
'db'
:
...
...
tests/pytest/wal/sdbComp.py
浏览文件 @
210bee6b
...
@@ -26,11 +26,11 @@ class TDTestCase:
...
@@ -26,11 +26,11 @@ class TDTestCase:
def
init
(
self
,
conn
,
logSql
):
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
def
getBuildPath
(
self
):
def
getBuildPath
(
self
):
global
selfPath
global
selfPath
selfPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
selfPath
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
if
(
"community"
in
selfPath
):
if
(
"community"
in
selfPath
):
projPath
=
selfPath
[:
selfPath
.
find
(
"community"
)]
projPath
=
selfPath
[:
selfPath
.
find
(
"community"
)]
else
:
else
:
...
@@ -43,7 +43,7 @@ class TDTestCase:
...
@@ -43,7 +43,7 @@ class TDTestCase:
buildPath
=
root
[:
len
(
root
)
-
len
(
"/build/bin"
)]
buildPath
=
root
[:
len
(
root
)
-
len
(
"/build/bin"
)]
break
break
return
buildPath
return
buildPath
def
run
(
self
):
def
run
(
self
):
# set path para
# set path para
...
@@ -62,9 +62,9 @@ class TDTestCase:
...
@@ -62,9 +62,9 @@ class TDTestCase:
os
.
system
(
"rm -rf %s/sim/dnode1/data/mnode_bak/"
%
testPath
)
os
.
system
(
"rm -rf %s/sim/dnode1/data/mnode_bak/"
%
testPath
)
tdSql
.
execute
(
"drop database if exists db2"
)
tdSql
.
execute
(
"drop database if exists db2"
)
os
.
system
(
"%staosdemo -f wal/insertDataDb1.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f wal/insertDataDb1.json -y "
%
binPath
)
tdSql
.
execute
(
"drop database if exists db1"
)
tdSql
.
execute
(
"drop database if exists db1"
)
os
.
system
(
"%staosdemo -f wal/insertDataDb2.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f wal/insertDataDb2.json -y "
%
binPath
)
tdSql
.
execute
(
"drop table if exists db2.stb0"
)
tdSql
.
execute
(
"drop table if exists db2.stb0"
)
os
.
system
(
"%staosdemo -f wal/insertDataDb2Newstab.json -y "
%
binPath
)
os
.
system
(
"%staosdemo -f wal/insertDataDb2Newstab.json -y "
%
binPath
)
query_pid1
=
int
(
subprocess
.
getstatusoutput
(
'ps aux|grep taosd |grep -v "grep"|awk
\'
{print $2}
\'
'
)[
1
])
query_pid1
=
int
(
subprocess
.
getstatusoutput
(
'ps aux|grep taosd |grep -v "grep"|awk
\'
{print $2}
\'
'
)[
1
])
print
(
query_pid1
)
print
(
query_pid1
)
...
@@ -72,14 +72,14 @@ class TDTestCase:
...
@@ -72,14 +72,14 @@ class TDTestCase:
tdSql
.
execute
(
"drop table if exists stb1_0"
)
tdSql
.
execute
(
"drop table if exists stb1_0"
)
tdSql
.
execute
(
"drop table if exists stb1_1"
)
tdSql
.
execute
(
"drop table if exists stb1_1"
)
tdSql
.
execute
(
"insert into stb0_0 values(1614218412000,8637,78.861045,'R','bf3')(1614218422000,8637,98.861045,'R','bf3')"
)
tdSql
.
execute
(
"insert into stb0_0 values(1614218412000,8637,78.861045,'R','bf3')(1614218422000,8637,98.861045,'R','bf3')"
)
tdSql
.
execute
(
"alter table db2.stb0 add column c
ol
4 int"
)
tdSql
.
execute
(
"alter table db2.stb0 add column c4 int"
)
tdSql
.
execute
(
"alter table db2.stb0 drop column c
ol
2"
)
tdSql
.
execute
(
"alter table db2.stb0 drop column c2"
)
tdSql
.
execute
(
"alter table db2.stb0 add tag t3 int;"
)
tdSql
.
execute
(
"alter table db2.stb0 add tag t3 int;"
)
tdSql
.
execute
(
"alter table db2.stb0 drop tag t1"
)
tdSql
.
execute
(
"alter table db2.stb0 drop tag t1"
)
tdSql
.
execute
(
"create table if not exists stb2_0 (ts timestamp, c
ol0 int, col
1 float) "
)
tdSql
.
execute
(
"create table if not exists stb2_0 (ts timestamp, c
0 int, c
1 float) "
)
tdSql
.
execute
(
"insert into stb2_0 values(1614218412000,8637,78.861045)"
)
tdSql
.
execute
(
"insert into stb2_0 values(1614218412000,8637,78.861045)"
)
tdSql
.
execute
(
"alter table stb2_0 add column c
ol
2 binary(4)"
)
tdSql
.
execute
(
"alter table stb2_0 add column c2 binary(4)"
)
tdSql
.
execute
(
"alter table stb2_0 drop column c
ol
1"
)
tdSql
.
execute
(
"alter table stb2_0 drop column c1"
)
tdSql
.
execute
(
"insert into stb2_0 values(1614218422000,8638,'R')"
)
tdSql
.
execute
(
"insert into stb2_0 values(1614218422000,8638,'R')"
)
# stop taosd and compact wal file
# stop taosd and compact wal file
...
@@ -87,9 +87,9 @@ class TDTestCase:
...
@@ -87,9 +87,9 @@ class TDTestCase:
sleep
(
10
)
sleep
(
10
)
os
.
system
(
"nohup %s/taosd --compact-mnode-wal -c %s/sim/dnode1/cfg/ & "
%
(
binPath
,
testPath
)
)
os
.
system
(
"nohup %s/taosd --compact-mnode-wal -c %s/sim/dnode1/cfg/ & "
%
(
binPath
,
testPath
)
)
sleep
(
5
)
sleep
(
5
)
assert
os
.
path
.
exists
(
walFilePath
)
,
"%s is not generated, compact didn't take effect "
%
walFilePath
assert
os
.
path
.
exists
(
walFilePath
)
,
"%s is not generated, compact didn't take effect "
%
walFilePath
# use new wal file to start taosd
# use new wal file to start taosd
tdDnodes
.
start
(
1
)
tdDnodes
.
start
(
1
)
sleep
(
5
)
sleep
(
5
)
tdSql
.
execute
(
"reset query cache"
)
tdSql
.
execute
(
"reset query cache"
)
...
@@ -108,14 +108,14 @@ class TDTestCase:
...
@@ -108,14 +108,14 @@ class TDTestCase:
tdSql
.
checkData
(
0
,
0
,
2
)
tdSql
.
checkData
(
0
,
0
,
2
)
tdSql
.
query
(
"select count(*) from stb2_0"
)
tdSql
.
query
(
"select count(*) from stb2_0"
)
tdSql
.
checkData
(
0
,
0
,
2
)
tdSql
.
checkData
(
0
,
0
,
2
)
# delete useless file
# delete useless file
testcaseFilename
=
os
.
path
.
split
(
__file__
)[
-
1
]
testcaseFilename
=
os
.
path
.
split
(
__file__
)[
-
1
]
os
.
system
(
"rm -rf ./insert_res.txt"
)
os
.
system
(
"rm -rf ./insert_res.txt"
)
os
.
system
(
"rm -rf wal/%s.sql"
%
testcaseFilename
)
os
.
system
(
"rm -rf wal/%s.sql"
%
testcaseFilename
)
def
stop
(
self
):
def
stop
(
self
):
tdSql
.
close
()
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
...
...
tests/script/sh/cfg.sh
浏览文件 @
210bee6b
#!/bin/bash
#!/bin/bash
if
[
$#
!=
6
]
;
then
if
[
$#
!=
6
]
;
then
echo
"argument list need input : "
echo
"argument list need input : "
echo
" -n nodeName"
echo
" -n nodeName"
echo
" -c configName"
echo
" -c configName"
...
@@ -8,10 +8,12 @@ if [ $# != 6 ]; then
...
@@ -8,10 +8,12 @@ if [ $# != 6 ]; then
exit
1
exit
1
fi
fi
UNAME_BIN
=
`
which
uname
`
OS_TYPE
=
`
$UNAME_BIN
`
NODE_NAME
=
NODE_NAME
=
CONFIG_NAME
=
CONFIG_NAME
=
CONFIG_VALUE
=
CONFIG_VALUE
=
while
getopts
"n:v:c:"
arg
while
getopts
"n:v:c:"
arg
do
do
case
$arg
in
case
$arg
in
n
)
n
)
...
@@ -43,10 +45,16 @@ fi
...
@@ -43,10 +45,16 @@ fi
TAOS_DIR
=
`
pwd
`
TAOS_DIR
=
`
pwd
`
TAOSD_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
`
TAOSD_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
`
if
[[
"
$OS_TYPE
"
!=
"Darwin"
]]
;
then
cut_opt
=
"--field="
else
cut_opt
=
"-f "
fi
if
[[
"
$TAOSD_DIR
"
==
*
"
$IN_TDINTERNAL
"
*
]]
;
then
if
[[
"
$TAOSD_DIR
"
==
*
"
$IN_TDINTERNAL
"
*
]]
;
then
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
--fields
=
2,3
`
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
${
cut_opt
}
2,3
`
else
else
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
--fields
=
2
`
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
${
cut_opt
}
2
`
fi
fi
BUILD_DIR
=
$TAOS_DIR
/
$BIN_DIR
/build
BUILD_DIR
=
$TAOS_DIR
/
$BIN_DIR
/build
...
@@ -56,7 +64,7 @@ SIM_DIR=$TAOS_DIR/sim
...
@@ -56,7 +64,7 @@ SIM_DIR=$TAOS_DIR/sim
NODE_DIR
=
$SIM_DIR
/
$NODE_NAME
NODE_DIR
=
$SIM_DIR
/
$NODE_NAME
TAOS_CFG
=
$NODE_DIR
/cfg/taos.cfg
TAOS_CFG
=
$NODE_DIR
/cfg/taos.cfg
TAOS_FLAG
=
$SIM_DIR
/tsim/flag
TAOS_FLAG
=
$SIM_DIR
/tsim/flag
if
[
-f
"
$TAOS_FLAG
"
]
;
then
if
[
-f
"
$TAOS_FLAG
"
]
;
then
TAOS_CFG
=
/etc/taos/taos.cfg
TAOS_CFG
=
/etc/taos/taos.cfg
fi
fi
...
...
tests/script/sh/clear.sh
浏览文件 @
210bee6b
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
echo
"Executing clear.sh"
echo
"Executing clear.sh"
if
[
$#
!=
6
]
;
then
if
[
$#
!=
6
]
;
then
echo
"argument list need input : "
echo
"argument list need input : "
echo
" -n nodeName"
echo
" -n nodeName"
echo
" -i nodeIp"
echo
" -i nodeIp"
...
@@ -10,10 +10,12 @@ if [ $# != 6 ]; then
...
@@ -10,10 +10,12 @@ if [ $# != 6 ]; then
exit
1
exit
1
fi
fi
UNAME_BIN
=
`
which
uname
`
OS_TYPE
=
`
$UNAME_BIN
`
NODE_NAME
=
NODE_NAME
=
NODE_IP
=
NODE_IP
=
MSATER_IP
=
MSATER_IP
=
while
getopts
"n:i:m:"
arg
while
getopts
"n:i:m:"
arg
do
do
case
$arg
in
case
$arg
in
n
)
n
)
...
@@ -34,7 +36,7 @@ done
...
@@ -34,7 +36,7 @@ done
SCRIPT_DIR
=
`
dirname
$0
`
SCRIPT_DIR
=
`
dirname
$0
`
cd
$SCRIPT_DIR
/../
cd
$SCRIPT_DIR
/../
SCRIPT_DIR
=
`
pwd
`
SCRIPT_DIR
=
`
pwd
`
echo
"SCRIPT_DIR:
$SCRIPT_DIR
"
echo
"SCRIPT_DIR:
$SCRIPT_DIR
"
IN_TDINTERNAL
=
"community"
IN_TDINTERNAL
=
"community"
if
[[
"
$SCRIPT_DIR
"
==
*
"
$IN_TDINTERNAL
"
*
]]
;
then
if
[[
"
$SCRIPT_DIR
"
==
*
"
$IN_TDINTERNAL
"
*
]]
;
then
...
@@ -46,10 +48,16 @@ fi
...
@@ -46,10 +48,16 @@ fi
TAOS_DIR
=
`
pwd
`
TAOS_DIR
=
`
pwd
`
TAOSD_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
`
TAOSD_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
`
if
[[
"
$OS_TYPE
"
!=
"Darwin"
]]
;
then
cut_opt
=
"--field="
else
cut_opt
=
"-f "
fi
if
[[
"
$TAOSD_DIR
"
==
*
"
$IN_TDINTERNAL
"
*
]]
;
then
if
[[
"
$TAOSD_DIR
"
==
*
"
$IN_TDINTERNAL
"
*
]]
;
then
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
--fields
=
2,3
`
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
${
cut_opt
}
2,3
`
else
else
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
--fields
=
2
`
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
${
cut_opt
}
2
`
fi
fi
BUILD_DIR
=
$TAOS_DIR
/
$BIN_DIR
/build
BUILD_DIR
=
$TAOS_DIR
/
$BIN_DIR
/build
...
@@ -88,7 +96,7 @@ TAOS_CFG=$NODE_DIR/cfg/taos.cfg
...
@@ -88,7 +96,7 @@ TAOS_CFG=$NODE_DIR/cfg/taos.cfg
touch
-f
$TAOS_CFG
touch
-f
$TAOS_CFG
TAOS_FLAG
=
$SIM_DIR
/tsim/flag
TAOS_FLAG
=
$SIM_DIR
/tsim/flag
if
[
-f
"
$TAOS_FLAG
"
]
;
then
if
[
-f
"
$TAOS_FLAG
"
]
;
then
TAOS_CFG
=
/etc/taos/taos.cfg
TAOS_CFG
=
/etc/taos/taos.cfg
DATA_DIR
=
/var/lib/taos
DATA_DIR
=
/var/lib/taos
LOG_DIR
=
/var/log/taos
LOG_DIR
=
/var/log/taos
...
@@ -98,7 +106,7 @@ if [ -f "$TAOS_FLAG" ] ; then
...
@@ -98,7 +106,7 @@ if [ -f "$TAOS_FLAG" ] ; then
sudo rm
-rf
$LOG_DIR
sudo rm
-rf
$LOG_DIR
fi
fi
echo
" "
>>
$TAOS_CFG
echo
" "
>>
$TAOS_CFG
echo
"masterIp
$MASTER_IP
"
>>
$TAOS_CFG
echo
"masterIp
$MASTER_IP
"
>>
$TAOS_CFG
echo
"dataDir
$DATA_DIR
"
>>
$TAOS_CFG
echo
"dataDir
$DATA_DIR
"
>>
$TAOS_CFG
echo
"logDir
$LOG_DIR
"
>>
$TAOS_CFG
echo
"logDir
$LOG_DIR
"
>>
$TAOS_CFG
...
...
tests/script/sh/deploy.sh
浏览文件 @
210bee6b
...
@@ -2,16 +2,18 @@
...
@@ -2,16 +2,18 @@
echo
"Executing deploy.sh"
echo
"Executing deploy.sh"
if
[
$#
!=
4
]
;
then
if
[
$#
!=
4
]
;
then
echo
"argument list need input : "
echo
"argument list need input : "
echo
" -n nodeName"
echo
" -n nodeName"
echo
" -i nodePort"
echo
" -i nodePort"
exit
1
exit
1
fi
fi
UNAME_BIN
=
`
which
uname
`
OS_TYPE
=
`
$UNAME_BIN
`
NODE_NAME
=
NODE_NAME
=
NODE
=
NODE
=
while
getopts
"n:i:"
arg
while
getopts
"n:i:"
arg
do
do
case
$arg
in
case
$arg
in
n
)
n
)
...
@@ -29,7 +31,7 @@ done
...
@@ -29,7 +31,7 @@ done
SCRIPT_DIR
=
`
dirname
$0
`
SCRIPT_DIR
=
`
dirname
$0
`
cd
$SCRIPT_DIR
/../
cd
$SCRIPT_DIR
/../
SCRIPT_DIR
=
`
pwd
`
SCRIPT_DIR
=
`
pwd
`
echo
"SCRIPT_DIR:
$SCRIPT_DIR
"
echo
"SCRIPT_DIR:
$SCRIPT_DIR
"
IN_TDINTERNAL
=
"community"
IN_TDINTERNAL
=
"community"
if
[[
"
$SCRIPT_DIR
"
==
*
"
$IN_TDINTERNAL
"
*
]]
;
then
if
[[
"
$SCRIPT_DIR
"
==
*
"
$IN_TDINTERNAL
"
*
]]
;
then
...
@@ -41,10 +43,16 @@ fi
...
@@ -41,10 +43,16 @@ fi
TAOS_DIR
=
`
pwd
`
TAOS_DIR
=
`
pwd
`
TAOSD_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
`
TAOSD_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
`
if
[[
"
$OS_TYPE
"
!=
"Darwin"
]]
;
then
cut_opt
=
"--field="
else
cut_opt
=
"-f "
fi
if
[[
"
$TAOSD_DIR
"
==
*
"
$IN_TDINTERNAL
"
*
]]
;
then
if
[[
"
$TAOSD_DIR
"
==
*
"
$IN_TDINTERNAL
"
*
]]
;
then
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
--fields
=
2,3
`
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
${
cut_opt
}
2,3
`
else
else
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
--fields
=
2
`
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
${
cut_opt
}
2
`
fi
fi
BUILD_DIR
=
$TAOS_DIR
/
$BIN_DIR
/build
BUILD_DIR
=
$TAOS_DIR
/
$BIN_DIR
/build
...
...
tests/script/sh/exec-default.sh
浏览文件 @
210bee6b
#!/bin/bash
#!/bin/bash
# if [ $# != 4 || $# != 5 ]; then
# if [ $# != 4 || $# != 5 ]; then
# echo "argument list need input : "
# echo "argument list need input : "
# echo " -n nodeName"
# echo " -n nodeName"
# echo " -s start/stop"
# echo " -s start/stop"
...
@@ -8,10 +8,12 @@
...
@@ -8,10 +8,12 @@
# exit 1
# exit 1
# fi
# fi
UNAME_BIN
=
`
which
uname
`
OS_TYPE
=
`
$UNAME_BIN
`
NODE_NAME
=
NODE_NAME
=
EXEC_OPTON
=
EXEC_OPTON
=
CLEAR_OPTION
=
"false"
CLEAR_OPTION
=
"false"
while
getopts
"n:s:u:x:ct"
arg
while
getopts
"n:s:u:x:ct"
arg
do
do
case
$arg
in
case
$arg
in
n
)
n
)
...
@@ -52,10 +54,16 @@ fi
...
@@ -52,10 +54,16 @@ fi
TAOS_DIR
=
`
pwd
`
TAOS_DIR
=
`
pwd
`
TAOSD_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
`
TAOSD_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
`
if
[[
"
$OS_TYPE
"
!=
"Darwin"
]]
;
then
cut_opt
=
"--field="
else
cut_opt
=
"-f "
fi
if
[[
"
$TAOSD_DIR
"
==
*
"
$IN_TDINTERNAL
"
*
]]
;
then
if
[[
"
$TAOSD_DIR
"
==
*
"
$IN_TDINTERNAL
"
*
]]
;
then
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
--fields
=
2,3
`
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
${
cut_opt
}
2,3
`
else
else
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
--fields
=
2
`
BIN_DIR
=
`
find
.
-name
"taosd"
|grep bin|head
-n1
|cut
-d
'/'
${
cut_opt
}
2
`
fi
fi
BUILD_DIR
=
$TAOS_DIR
/
$BIN_DIR
/build
BUILD_DIR
=
$TAOS_DIR
/
$BIN_DIR
/build
...
...
tests/script/sh/exec-no-random-fail.sh
浏览文件 @
210bee6b
此差异已折叠。
点击以展开。
tests/script/sh/exec-random-fail.sh
浏览文件 @
210bee6b
此差异已折叠。
点击以展开。
tests/script/sh/exec.sh
浏览文件 @
210bee6b
此差异已折叠。
点击以展开。
tests/script/sh/exec_tarbitrator.sh
浏览文件 @
210bee6b
此差异已折叠。
点击以展开。
tests/script/sh/move_dnode.sh
浏览文件 @
210bee6b
此差异已折叠。
点击以展开。
tests/script/sh/mv_old_data.sh
浏览文件 @
210bee6b
此差异已折叠。
点击以展开。
tests/script/sh/stop_dnodes.sh
浏览文件 @
210bee6b
此差异已折叠。
点击以展开。
tests/script/test.sh
浏览文件 @
210bee6b
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录