Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
72bd7798
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
“bf5a3e106bd90fb9a96b55373945e2ffac9b2592”上不存在“tests/script/http/httpTestSqlUtc.c”
提交
72bd7798
编写于
7月 20, 2022
作者:
J
jiacy-jcy
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.0' into 3.0test/jcy
上级
578a23d2
763c95a0
变更
55
展开全部
隐藏空白更改
内联
并排
Showing
55 changed file
with
2577 addition
and
2244 deletion
+2577
-2244
include/common/tcommon.h
include/common/tcommon.h
+1
-1
include/libs/stream/tstream.h
include/libs/stream/tstream.h
+7
-0
include/util/taoserror.h
include/util/taoserror.h
+7
-18
include/util/tarray.h
include/util/tarray.h
+8
-0
packaging/deb/DEBIAN/preinst
packaging/deb/DEBIAN/preinst
+1
-1
packaging/deb/DEBIAN/prerm
packaging/deb/DEBIAN/prerm
+2
-2
packaging/deb/makedeb.sh
packaging/deb/makedeb.sh
+2
-2
packaging/rpm/tdengine.spec
packaging/rpm/tdengine.spec
+2
-2
packaging/tools/install.sh
packaging/tools/install.sh
+4
-4
packaging/tools/install_client.sh
packaging/tools/install_client.sh
+9
-7
packaging/tools/make_install.sh
packaging/tools/make_install.sh
+4
-4
packaging/tools/makepkg.sh
packaging/tools/makepkg.sh
+1
-1
packaging/tools/post.sh
packaging/tools/post.sh
+7
-7
packaging/tools/remove.sh
packaging/tools/remove.sh
+3
-3
source/dnode/mnode/impl/src/mndConsumer.c
source/dnode/mnode/impl/src/mndConsumer.c
+1
-1
source/dnode/mnode/impl/src/mndTrans.c
source/dnode/mnode/impl/src/mndTrans.c
+5
-1
source/dnode/vnode/src/inc/vnodeInt.h
source/dnode/vnode/src/inc/vnodeInt.h
+1
-1
source/dnode/vnode/src/meta/metaTable.c
source/dnode/vnode/src/meta/metaTable.c
+5
-8
source/dnode/vnode/src/tq/tqExec.c
source/dnode/vnode/src/tq/tqExec.c
+14
-10
source/dnode/vnode/src/tq/tqRead.c
source/dnode/vnode/src/tq/tqRead.c
+1
-0
source/dnode/vnode/src/tq/tqSink.c
source/dnode/vnode/src/tq/tqSink.c
+2
-0
source/dnode/vnode/src/vnd/vnodeSvr.c
source/dnode/vnode/src/vnd/vnodeSvr.c
+10
-1
source/libs/executor/src/executil.c
source/libs/executor/src/executil.c
+3
-23
source/libs/executor/src/executor.c
source/libs/executor/src/executor.c
+24
-7
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+52
-26
source/libs/executor/src/tfill.c
source/libs/executor/src/tfill.c
+3
-2
source/libs/function/src/builtins.c
source/libs/function/src/builtins.c
+11
-9
source/libs/function/src/builtinsimpl.c
source/libs/function/src/builtinsimpl.c
+8
-8
source/libs/nodes/src/nodesCodeFuncs.c
source/libs/nodes/src/nodesCodeFuncs.c
+3
-0
source/libs/nodes/src/nodesUtilFuncs.c
source/libs/nodes/src/nodesUtilFuncs.c
+3
-1
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+8
-8
source/libs/parser/src/parAstCreater.c
source/libs/parser/src/parAstCreater.c
+13
-2
source/libs/parser/src/parAstParser.c
source/libs/parser/src/parAstParser.c
+2
-2
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+87
-42
source/libs/parser/src/parUtil.c
source/libs/parser/src/parUtil.c
+1
-27
source/libs/parser/src/sql.c
source/libs/parser/src/sql.c
+1831
-1858
source/libs/parser/test/mockCatalog.cpp
source/libs/parser/test/mockCatalog.cpp
+0
-40
source/libs/parser/test/parInitialATest.cpp
source/libs/parser/test/parInitialATest.cpp
+250
-64
source/libs/parser/test/parInitialCTest.cpp
source/libs/parser/test/parInitialCTest.cpp
+9
-9
source/libs/parser/test/parTestUtil.cpp
source/libs/parser/test/parTestUtil.cpp
+1
-1
source/libs/planner/src/planOptimizer.c
source/libs/planner/src/planOptimizer.c
+34
-1
source/libs/scalar/src/filter.c
source/libs/scalar/src/filter.c
+4
-0
source/libs/stream/inc/streamInc.h
source/libs/stream/inc/streamInc.h
+1
-1
source/libs/stream/src/streamData.c
source/libs/stream/src/streamData.c
+57
-4
source/libs/stream/src/streamExec.c
source/libs/stream/src/streamExec.c
+17
-12
source/libs/sync/src/syncReplication.c
source/libs/sync/src/syncReplication.c
+2
-0
source/libs/wal/src/walRead.c
source/libs/wal/src/walRead.c
+7
-5
source/util/src/tarray.c
source/util/src/tarray.c
+40
-0
source/util/src/terror.c
source/util/src/terror.c
+2
-12
tests/parallel_test/container_build.sh
tests/parallel_test/container_build.sh
+1
-1
tests/pytest/crash_gen/crash_gen_main.py
tests/pytest/crash_gen/crash_gen_main.py
+1
-1
tests/script/tsim/valgrind/checkError1.sim
tests/script/tsim/valgrind/checkError1.sim
+2
-1
tests/system-test/7-tmq/subscribeDb4.py
tests/system-test/7-tmq/subscribeDb4.py
+1
-1
tools/taos-tools
tools/taos-tools
+1
-1
tools/taosws-rs
tools/taosws-rs
+1
-1
未找到文件。
include/common/tcommon.h
浏览文件 @
72bd7798
...
@@ -54,12 +54,12 @@ enum {
...
@@ -54,12 +54,12 @@ enum {
enum
{
enum
{
STREAM_INPUT__DATA_SUBMIT
=
1
,
STREAM_INPUT__DATA_SUBMIT
=
1
,
STREAM_INPUT__DATA_BLOCK
,
STREAM_INPUT__DATA_BLOCK
,
STREAM_INPUT__MERGED_SUBMIT
,
// STREAM_INPUT__TABLE_SCAN,
// STREAM_INPUT__TABLE_SCAN,
STREAM_INPUT__TQ_SCAN
,
STREAM_INPUT__TQ_SCAN
,
STREAM_INPUT__DATA_RETRIEVE
,
STREAM_INPUT__DATA_RETRIEVE
,
STREAM_INPUT__GET_RES
,
STREAM_INPUT__GET_RES
,
STREAM_INPUT__CHECKPOINT
,
STREAM_INPUT__CHECKPOINT
,
STREAM_INPUT__DROP
,
};
};
typedef
enum
EStreamType
{
typedef
enum
EStreamType
{
...
...
include/libs/stream/tstream.h
浏览文件 @
72bd7798
...
@@ -77,6 +77,13 @@ typedef struct {
...
@@ -77,6 +77,13 @@ typedef struct {
SSubmitReq
*
data
;
SSubmitReq
*
data
;
}
SStreamDataSubmit
;
}
SStreamDataSubmit
;
typedef
struct
{
int8_t
type
;
int64_t
ver
;
SArray
*
dataRefs
;
// SArray<int32_t*>
SArray
*
reqs
;
// SArray<SSubmitReq*>
}
SStreamMergedSubmit
;
typedef
struct
{
typedef
struct
{
int8_t
type
;
int8_t
type
;
...
...
include/util/taoserror.h
浏览文件 @
72bd7798
...
@@ -493,10 +493,11 @@ int32_t* taosGetErrno();
...
@@ -493,10 +493,11 @@ int32_t* taosGetErrno();
//parser
//parser
#define TSDB_CODE_PAR_SYNTAX_ERROR TAOS_DEF_ERROR_CODE(0, 0x2600)
#define TSDB_CODE_PAR_SYNTAX_ERROR TAOS_DEF_ERROR_CODE(0, 0x2600)
#define TSDB_CODE_PAR_INVALID_COLUMN TAOS_DEF_ERROR_CODE(0, 0x2601)
#define TSDB_CODE_PAR_INCOMPLETE_SQL TAOS_DEF_ERROR_CODE(0, 0x2601)
#define TSDB_CODE_PAR_TABLE_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x2602)
#define TSDB_CODE_PAR_INVALID_COLUMN TAOS_DEF_ERROR_CODE(0, 0x2602)
#define TSDB_CODE_PAR_AMBIGUOUS_COLUMN TAOS_DEF_ERROR_CODE(0, 0x2603)
#define TSDB_CODE_PAR_TABLE_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x2603)
#define TSDB_CODE_PAR_WRONG_VALUE_TYPE TAOS_DEF_ERROR_CODE(0, 0x2604)
#define TSDB_CODE_PAR_AMBIGUOUS_COLUMN TAOS_DEF_ERROR_CODE(0, 0x2604)
#define TSDB_CODE_PAR_WRONG_VALUE_TYPE TAOS_DEF_ERROR_CODE(0, 0x2605)
#define TSDB_CODE_PAR_ILLEGAL_USE_AGG_FUNCTION TAOS_DEF_ERROR_CODE(0, 0x2608)
#define TSDB_CODE_PAR_ILLEGAL_USE_AGG_FUNCTION TAOS_DEF_ERROR_CODE(0, 0x2608)
#define TSDB_CODE_PAR_WRONG_NUMBER_OF_SELECT TAOS_DEF_ERROR_CODE(0, 0x2609)
#define TSDB_CODE_PAR_WRONG_NUMBER_OF_SELECT TAOS_DEF_ERROR_CODE(0, 0x2609)
#define TSDB_CODE_PAR_GROUPBY_LACK_EXPRESSION TAOS_DEF_ERROR_CODE(0, 0x260A)
#define TSDB_CODE_PAR_GROUPBY_LACK_EXPRESSION TAOS_DEF_ERROR_CODE(0, 0x260A)
...
@@ -504,7 +505,6 @@ int32_t* taosGetErrno();
...
@@ -504,7 +505,6 @@ int32_t* taosGetErrno();
#define TSDB_CODE_PAR_NOT_SINGLE_GROUP TAOS_DEF_ERROR_CODE(0, 0x260C)
#define TSDB_CODE_PAR_NOT_SINGLE_GROUP TAOS_DEF_ERROR_CODE(0, 0x260C)
#define TSDB_CODE_PAR_TAGS_NOT_MATCHED TAOS_DEF_ERROR_CODE(0, 0x260D)
#define TSDB_CODE_PAR_TAGS_NOT_MATCHED TAOS_DEF_ERROR_CODE(0, 0x260D)
#define TSDB_CODE_PAR_INVALID_TAG_NAME TAOS_DEF_ERROR_CODE(0, 0x260E)
#define TSDB_CODE_PAR_INVALID_TAG_NAME TAOS_DEF_ERROR_CODE(0, 0x260E)
#define TSDB_CODE_PAR_INCOMPLETE_SQL TAOS_DEF_ERROR_CODE(0, 0x260F)
#define TSDB_CODE_PAR_NAME_OR_PASSWD_TOO_LONG TAOS_DEF_ERROR_CODE(0, 0x2610)
#define TSDB_CODE_PAR_NAME_OR_PASSWD_TOO_LONG TAOS_DEF_ERROR_CODE(0, 0x2610)
#define TSDB_CODE_PAR_PASSWD_EMPTY TAOS_DEF_ERROR_CODE(0, 0x2611)
#define TSDB_CODE_PAR_PASSWD_EMPTY TAOS_DEF_ERROR_CODE(0, 0x2611)
#define TSDB_CODE_PAR_INVALID_PORT TAOS_DEF_ERROR_CODE(0, 0x2612)
#define TSDB_CODE_PAR_INVALID_PORT TAOS_DEF_ERROR_CODE(0, 0x2612)
...
@@ -514,19 +514,9 @@ int32_t* taosGetErrno();
...
@@ -514,19 +514,9 @@ int32_t* taosGetErrno();
#define TSDB_CODE_PAR_DB_NOT_SPECIFIED TAOS_DEF_ERROR_CODE(0, 0x2616)
#define TSDB_CODE_PAR_DB_NOT_SPECIFIED TAOS_DEF_ERROR_CODE(0, 0x2616)
#define TSDB_CODE_PAR_INVALID_IDENTIFIER_NAME TAOS_DEF_ERROR_CODE(0, 0x2617)
#define TSDB_CODE_PAR_INVALID_IDENTIFIER_NAME TAOS_DEF_ERROR_CODE(0, 0x2617)
#define TSDB_CODE_PAR_CORRESPONDING_STABLE_ERR TAOS_DEF_ERROR_CODE(0, 0x2618)
#define TSDB_CODE_PAR_CORRESPONDING_STABLE_ERR TAOS_DEF_ERROR_CODE(0, 0x2618)
#define TSDB_CODE_PAR_INVALID_RANGE_OPTION TAOS_DEF_ERROR_CODE(0, 0x2619)
#define TSDB_CODE_PAR_INVALID_DB_OPTION TAOS_DEF_ERROR_CODE(0, 0x2619)
#define TSDB_CODE_PAR_INVALID_STR_OPTION TAOS_DEF_ERROR_CODE(0, 0x261A)
#define TSDB_CODE_PAR_INVALID_TABLE_OPTION TAOS_DEF_ERROR_CODE(0, 0x261A)
#define TSDB_CODE_PAR_INVALID_ENUM_OPTION TAOS_DEF_ERROR_CODE(0, 0x261B)
#define TSDB_CODE_PAR_INVALID_KEEP_NUM TAOS_DEF_ERROR_CODE(0, 0x261D)
#define TSDB_CODE_PAR_INVALID_KEEP_ORDER TAOS_DEF_ERROR_CODE(0, 0x261E)
#define TSDB_CODE_PAR_INVALID_KEEP_VALUE TAOS_DEF_ERROR_CODE(0, 0x261F)
#define TSDB_CODE_PAR_INVALID_COMMENT_OPTION TAOS_DEF_ERROR_CODE(0, 0x2620)
#define TSDB_CODE_PAR_INVALID_F_RANGE_OPTION TAOS_DEF_ERROR_CODE(0, 0x2621)
#define TSDB_CODE_PAR_INVALID_ROLLUP_OPTION TAOS_DEF_ERROR_CODE(0, 0x2622)
#define TSDB_CODE_PAR_INVALID_RETENTIONS_OPTION TAOS_DEF_ERROR_CODE(0, 0x2623)
#define TSDB_CODE_PAR_GROUPBY_WINDOW_COEXIST TAOS_DEF_ERROR_CODE(0, 0x2624)
#define TSDB_CODE_PAR_GROUPBY_WINDOW_COEXIST TAOS_DEF_ERROR_CODE(0, 0x2624)
#define TSDB_CODE_PAR_INVALID_OPTION_UNIT TAOS_DEF_ERROR_CODE(0, 0x2625)
#define TSDB_CODE_PAR_INVALID_KEEP_UNIT TAOS_DEF_ERROR_CODE(0, 0x2626)
#define TSDB_CODE_PAR_AGG_FUNC_NESTING TAOS_DEF_ERROR_CODE(0, 0x2627)
#define TSDB_CODE_PAR_AGG_FUNC_NESTING TAOS_DEF_ERROR_CODE(0, 0x2627)
#define TSDB_CODE_PAR_INVALID_STATE_WIN_TYPE TAOS_DEF_ERROR_CODE(0, 0x2628)
#define TSDB_CODE_PAR_INVALID_STATE_WIN_TYPE TAOS_DEF_ERROR_CODE(0, 0x2628)
#define TSDB_CODE_PAR_INVALID_STATE_WIN_COL TAOS_DEF_ERROR_CODE(0, 0x2629)
#define TSDB_CODE_PAR_INVALID_STATE_WIN_COL TAOS_DEF_ERROR_CODE(0, 0x2629)
...
@@ -580,7 +570,6 @@ int32_t* taosGetErrno();
...
@@ -580,7 +570,6 @@ int32_t* taosGetErrno();
#define TSDB_CODE_PAR_WINDOW_NOT_ALLOWED_FUNC TAOS_DEF_ERROR_CODE(0, 0x2659)
#define TSDB_CODE_PAR_WINDOW_NOT_ALLOWED_FUNC TAOS_DEF_ERROR_CODE(0, 0x2659)
#define TSDB_CODE_PAR_STREAM_NOT_ALLOWED_FUNC TAOS_DEF_ERROR_CODE(0, 0x265A)
#define TSDB_CODE_PAR_STREAM_NOT_ALLOWED_FUNC TAOS_DEF_ERROR_CODE(0, 0x265A)
#define TSDB_CODE_PAR_GROUP_BY_NOT_ALLOWED_FUNC TAOS_DEF_ERROR_CODE(0, 0x265B)
#define TSDB_CODE_PAR_GROUP_BY_NOT_ALLOWED_FUNC TAOS_DEF_ERROR_CODE(0, 0x265B)
#define TSDB_CODE_PAR_INVALID_TABLE_OPTION TAOS_DEF_ERROR_CODE(0, 0x265C)
#define TSDB_CODE_PAR_INVALID_INTERP_CLAUSE TAOS_DEF_ERROR_CODE(0, 0x265D)
#define TSDB_CODE_PAR_INVALID_INTERP_CLAUSE TAOS_DEF_ERROR_CODE(0, 0x265D)
#define TSDB_CODE_PAR_NO_VALID_FUNC_IN_WIN TAOS_DEF_ERROR_CODE(0, 0x265E)
#define TSDB_CODE_PAR_NO_VALID_FUNC_IN_WIN TAOS_DEF_ERROR_CODE(0, 0x265E)
#define TSDB_CODE_PAR_ONLY_SUPPORT_SINGLE_TABLE TAOS_DEF_ERROR_CODE(0, 0x265F)
#define TSDB_CODE_PAR_ONLY_SUPPORT_SINGLE_TABLE TAOS_DEF_ERROR_CODE(0, 0x265F)
...
...
include/util/tarray.h
浏览文件 @
72bd7798
...
@@ -87,6 +87,14 @@ void taosArrayRemoveBatch(SArray* pArray, const int32_t* pData, int32_t numOfEle
...
@@ -87,6 +87,14 @@ void taosArrayRemoveBatch(SArray* pArray, const int32_t* pData, int32_t numOfEle
*/
*/
void
taosArrayRemoveDuplicate
(
SArray
*
pArray
,
__compar_fn_t
comparFn
,
void
(
*
fp
)(
void
*
));
void
taosArrayRemoveDuplicate
(
SArray
*
pArray
,
__compar_fn_t
comparFn
,
void
(
*
fp
)(
void
*
));
/**
*
* @param pArray
* @param comparFn
* @param fp
*/
void
taosArrayRemoveDuplicateP
(
SArray
*
pArray
,
__compar_fn_t
comparFn
,
void
(
*
fp
)(
void
*
));
/**
/**
* add all element from the source array list into the destination
* add all element from the source array list into the destination
* @param pArray
* @param pArray
...
...
packaging/deb/DEBIAN/preinst
浏览文件 @
72bd7798
...
@@ -38,4 +38,4 @@ fi
...
@@ -38,4 +38,4 @@ fi
# there can not libtaos.so*, otherwise ln -s error
# there can not libtaos.so*, otherwise ln -s error
${
csudo
}
rm
-f
${
install_main_dir
}
/driver/libtaos.
*
||
:
${
csudo
}
rm
-f
${
install_main_dir
}
/driver/libtaos.
*
||
:
${
csudo
}
rm
-f
${
install_main_dir
}
/driver/libtaosws.
*
||
:
[
-f
${
install_main_dir
}
/driver/libtaosws.so
]
&&
${
csudo
}
rm
-f
${
install_main_dir
}
/driver/libtaosws.so
||
:
packaging/deb/DEBIAN/prerm
浏览文件 @
72bd7798
...
@@ -32,9 +32,9 @@ else
...
@@ -32,9 +32,9 @@ else
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosdef.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosdef.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taoserror.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taoserror.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosudf.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosudf.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosws.h
||
:
[
-f
${
inc_link_dir
}
/taosws.h
]
&&
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosws.h
||
:
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaosws.
*
||
:
[
-f
${
lib_link_dir
}
/libtaosws.so
]
&&
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaosws.so
||
:
${
csudo
}
rm
-f
${
log_link_dir
}
||
:
${
csudo
}
rm
-f
${
log_link_dir
}
||
:
${
csudo
}
rm
-f
${
data_link_dir
}
||
:
${
csudo
}
rm
-f
${
data_link_dir
}
||
:
...
...
packaging/deb/makedeb.sh
浏览文件 @
72bd7798
...
@@ -68,12 +68,12 @@ fi
...
@@ -68,12 +68,12 @@ fi
cp
${
compile_dir
}
/build/bin/taos
${
pkg_dir
}${
install_home_path
}
/bin
cp
${
compile_dir
}
/build/bin/taos
${
pkg_dir
}${
install_home_path
}
/bin
cp
${
compile_dir
}
/build/lib/
${
libfile
}
${
pkg_dir
}${
install_home_path
}
/driver
cp
${
compile_dir
}
/build/lib/
${
libfile
}
${
pkg_dir
}${
install_home_path
}
/driver
cp
${
compile_dir
}
/build/lib/
${
wslibfile
}
${
pkg_dir
}${
install_home_path
}
/driver
||
:
[
-f
${
compile_dir
}
/build/lib/
${
wslibfile
}
]
&&
cp
${
compile_dir
}
/build/lib/
${
wslibfile
}
${
pkg_dir
}${
install_home_path
}
/driver
||
:
cp
${
compile_dir
}
/../include/client/taos.h
${
pkg_dir
}${
install_home_path
}
/include
cp
${
compile_dir
}
/../include/client/taos.h
${
pkg_dir
}${
install_home_path
}
/include
cp
${
compile_dir
}
/../include/common/taosdef.h
${
pkg_dir
}${
install_home_path
}
/include
cp
${
compile_dir
}
/../include/common/taosdef.h
${
pkg_dir
}${
install_home_path
}
/include
cp
${
compile_dir
}
/../include/util/taoserror.h
${
pkg_dir
}${
install_home_path
}
/include
cp
${
compile_dir
}
/../include/util/taoserror.h
${
pkg_dir
}${
install_home_path
}
/include
cp
${
compile_dir
}
/../include/libs/function/taosudf.h
${
pkg_dir
}${
install_home_path
}
/include
cp
${
compile_dir
}
/../include/libs/function/taosudf.h
${
pkg_dir
}${
install_home_path
}
/include
cp
${
compile_dir
}
/build/include/taosws.h
${
pkg_dir
}${
install_home_path
}
/include
||
:
[
-f
${
compile_dir
}
/build/include/taosws.h
]
&&
cp
${
compile_dir
}
/build/include/taosws.h
${
pkg_dir
}${
install_home_path
}
/include
||
:
cp
-r
${
top_dir
}
/examples/
*
${
pkg_dir
}${
install_home_path
}
/examples
cp
-r
${
top_dir
}
/examples/
*
${
pkg_dir
}${
install_home_path
}
/examples
#cp -r ${top_dir}/src/connector/python ${pkg_dir}${install_home_path}/connector
#cp -r ${top_dir}/src/connector/python ${pkg_dir}${install_home_path}/connector
#cp -r ${top_dir}/src/connector/go ${pkg_dir}${install_home_path}/connector
#cp -r ${top_dir}/src/connector/go ${pkg_dir}${install_home_path}/connector
...
...
packaging/rpm/tdengine.spec
浏览文件 @
72bd7798
...
@@ -75,12 +75,12 @@ if [ -f %{_compiledir}/build/bin/taosadapter ]; then
...
@@ -75,12 +75,12 @@ if [ -f %{_compiledir}/build/bin/taosadapter ]; then
cp %{_compiledir}/build/bin/taosadapter %{buildroot}%{homepath}/bin ||:
cp %{_compiledir}/build/bin/taosadapter %{buildroot}%{homepath}/bin ||:
fi
fi
cp %{_compiledir}/build/lib/${libfile} %{buildroot}%{homepath}/driver
cp %{_compiledir}/build/lib/${libfile} %{buildroot}%{homepath}/driver
cp %{_compiledir}/build/lib/${wslibfile} %{buildroot}%{homepath}/driver ||:
[ -f %{_compiledir}/build/lib/${wslibfile} ] &&
cp %{_compiledir}/build/lib/${wslibfile} %{buildroot}%{homepath}/driver ||:
cp %{_compiledir}/../include/client/taos.h %{buildroot}%{homepath}/include
cp %{_compiledir}/../include/client/taos.h %{buildroot}%{homepath}/include
cp %{_compiledir}/../include/common/taosdef.h %{buildroot}%{homepath}/include
cp %{_compiledir}/../include/common/taosdef.h %{buildroot}%{homepath}/include
cp %{_compiledir}/../include/util/taoserror.h %{buildroot}%{homepath}/include
cp %{_compiledir}/../include/util/taoserror.h %{buildroot}%{homepath}/include
cp %{_compiledir}/../include/libs/function/taosudf.h %{buildroot}%{homepath}/include
cp %{_compiledir}/../include/libs/function/taosudf.h %{buildroot}%{homepath}/include
cp %{_compiledir}/build/include/taosws.h %{buildroot}%{homepath}/include ||:
[ -f %{_compiledir}/build/include/taosws.h ] &&
cp %{_compiledir}/build/include/taosws.h %{buildroot}%{homepath}/include ||:
#cp -r %{_compiledir}/../src/connector/python %{buildroot}%{homepath}/connector
#cp -r %{_compiledir}/../src/connector/python %{buildroot}%{homepath}/connector
#cp -r %{_compiledir}/../src/connector/go %{buildroot}%{homepath}/connector
#cp -r %{_compiledir}/../src/connector/go %{buildroot}%{homepath}/connector
#cp -r %{_compiledir}/../src/connector/nodejs %{buildroot}%{homepath}/connector
#cp -r %{_compiledir}/../src/connector/nodejs %{buildroot}%{homepath}/connector
...
...
packaging/tools/install.sh
浏览文件 @
72bd7798
...
@@ -229,13 +229,13 @@ function install_lib() {
...
@@ -229,13 +229,13 @@ function install_lib() {
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaos.
*
${
lib_link_dir
}
/libtaos.so.1
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaos.
*
${
lib_link_dir
}
/libtaos.so.1
${
csudo
}
ln
-s
${
lib_link_dir
}
/libtaos.so.1
${
lib_link_dir
}
/libtaos.so
${
csudo
}
ln
-s
${
lib_link_dir
}
/libtaos.so.1
${
lib_link_dir
}
/libtaos.so
[
-f
${
install_main_dir
}
/driver/libtaosws.so
]
&&
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaosws.so
${
lib_link_dir
}
/libtaosws.so
||
:
[
-f
${
install_main_dir
}
/driver/libtaosws.so
]
&&
${
csudo
}
ln
-s
f
${
install_main_dir
}
/driver/libtaosws.so
${
lib_link_dir
}
/libtaosws.so
||
:
if
[[
-d
${
lib64_link_dir
}
&&
!
-e
${
lib64_link_dir
}
/libtaos.so
]]
;
then
if
[[
-d
${
lib64_link_dir
}
&&
!
-e
${
lib64_link_dir
}
/libtaos.so
]]
;
then
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaos.
*
${
lib64_link_dir
}
/libtaos.so.1
||
:
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaos.
*
${
lib64_link_dir
}
/libtaos.so.1
||
:
${
csudo
}
ln
-s
${
lib64_link_dir
}
/libtaos.so.1
${
lib64_link_dir
}
/libtaos.so
||
:
${
csudo
}
ln
-s
${
lib64_link_dir
}
/libtaos.so.1
${
lib64_link_dir
}
/libtaos.so
||
:
${
csudo
}
ln
-s
${
install_main_dir
}
/libtaosws.so
${
lib64_link_dir
}
/libtaosws.so
||
:
[
-f
${
install_main_dir
}
/libtaosws.so
]
&&
${
csudo
}
ln
-sf
${
install_main_dir
}
/libtaosws.so
${
lib64_link_dir
}
/libtaosws.so
||
:
fi
fi
${
csudo
}
ldconfig
${
csudo
}
ldconfig
...
@@ -320,7 +320,7 @@ function install_jemalloc() {
...
@@ -320,7 +320,7 @@ function install_jemalloc() {
function
install_header
()
{
function
install_header
()
{
${
csudo
}
rm
-f
${
inc_link_dir
}
/taos.h
${
inc_link_dir
}
/taosdef.h
${
inc_link_dir
}
/taoserror.h
${
inc_link_dir
}
/taosudf.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taos.h
${
inc_link_dir
}
/taosdef.h
${
inc_link_dir
}
/taoserror.h
${
inc_link_dir
}
/taosudf.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosws.h
||
:
[
-f
${
inc_link_dir
}
/taosws.h
]
&&
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosws.h
||
:
${
csudo
}
cp
-f
${
script_dir
}
/inc/
*
${
install_main_dir
}
/include
&&
${
csudo
}
chmod
644
${
install_main_dir
}
/include/
*
${
csudo
}
cp
-f
${
script_dir
}
/inc/
*
${
install_main_dir
}
/include
&&
${
csudo
}
chmod
644
${
install_main_dir
}
/include/
*
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taos.h
${
inc_link_dir
}
/taos.h
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taos.h
${
inc_link_dir
}
/taos.h
...
@@ -328,7 +328,7 @@ function install_header() {
...
@@ -328,7 +328,7 @@ function install_header() {
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taoserror.h
${
inc_link_dir
}
/taoserror.h
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taoserror.h
${
inc_link_dir
}
/taoserror.h
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taosudf.h
${
inc_link_dir
}
/taosudf.h
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taosudf.h
${
inc_link_dir
}
/taosudf.h
[
-f
${
install_main_dir
}
/include/taosws.h
]
&&
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taosws.h
${
inc_link_dir
}
/taosws.h
||
:
[
-f
${
install_main_dir
}
/include/taosws.h
]
&&
${
csudo
}
ln
-s
f
${
install_main_dir
}
/include/taosws.h
${
inc_link_dir
}
/taosws.h
||
:
}
}
function
add_newHostname_to_hosts
()
{
function
add_newHostname_to_hosts
()
{
...
...
packaging/tools/install_client.sh
浏览文件 @
72bd7798
...
@@ -116,7 +116,8 @@ function install_bin() {
...
@@ -116,7 +116,8 @@ function install_bin() {
function
clean_lib
()
{
function
clean_lib
()
{
sudo rm
-f
/usr/lib/libtaos.
*
||
:
sudo rm
-f
/usr/lib/libtaos.
*
||
:
sudo rm
-f
/usr/lib/libtaosws.
*
||
:
[
-f
/usr/lib/libtaosws.so
]
&&
sudo rm
-f
/usr/lib/libtaosws.so
||
:
[
-f
/usr/lib64/libtaosws.so
]
&&
sudo rm
-f
/usr/lib64/libtaosws.so
||
:
sudo rm
-rf
${
lib_dir
}
||
:
sudo rm
-rf
${
lib_dir
}
||
:
}
}
...
@@ -125,8 +126,9 @@ function install_lib() {
...
@@ -125,8 +126,9 @@ function install_lib() {
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaosws.
*
||
:
[
-f
${
lib_link_dir
}
/libtaosws.so
]
&&
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaosws.so
||
:
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaosws.
*
||
:
[
-f
${
lib64_link_dir
}
/libtaosws.so
]
&&
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaosws.so
||
:
#${csudo}rm -rf ${v15_java_app_dir} || :
#${csudo}rm -rf ${v15_java_app_dir} || :
${
csudo
}
cp
-rf
${
script_dir
}
/driver/
*
${
install_main_dir
}
/driver
&&
${
csudo
}
chmod
777
${
install_main_dir
}
/driver/
*
${
csudo
}
cp
-rf
${
script_dir
}
/driver/
*
${
install_main_dir
}
/driver
&&
${
csudo
}
chmod
777
${
install_main_dir
}
/driver/
*
...
@@ -135,19 +137,19 @@ function install_lib() {
...
@@ -135,19 +137,19 @@ function install_lib() {
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaos.
*
${
lib_link_dir
}
/libtaos.so.1
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaos.
*
${
lib_link_dir
}
/libtaos.so.1
${
csudo
}
ln
-s
${
lib_link_dir
}
/libtaos.so.1
${
lib_link_dir
}
/libtaos.so
${
csudo
}
ln
-s
${
lib_link_dir
}
/libtaos.so.1
${
lib_link_dir
}
/libtaos.so
[
-f
${
install_main_dir
}
/driver/libtaosws.so
]
&&
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaosws.so
${
lib_link_dir
}
/libtaosws.so
[
-f
${
install_main_dir
}
/driver/libtaosws.so
]
&&
${
csudo
}
ln
-s
f
${
install_main_dir
}
/driver/libtaosws.so
${
lib_link_dir
}
/libtaosws.so
||
:
if
[
-d
"
${
lib64_link_dir
}
"
]
;
then
if
[
-d
"
${
lib64_link_dir
}
"
]
;
then
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaos.
*
${
lib64_link_dir
}
/libtaos.so.1
||
:
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaos.
*
${
lib64_link_dir
}
/libtaos.so.1
||
:
${
csudo
}
ln
-s
${
lib64_link_dir
}
/libtaos.so.1
${
lib64_link_dir
}
/libtaos.so
||
:
${
csudo
}
ln
-s
${
lib64_link_dir
}
/libtaos.so.1
${
lib64_link_dir
}
/libtaos.so
||
:
[
-f
${
install_main_dir
}
/driver/libtaosws.so
]
&&
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaosws.so
${
lib64_link_dir
}
/libtaosws.so
||
:
[
-f
${
install_main_dir
}
/driver/libtaosws.so
]
&&
${
csudo
}
ln
-s
f
${
install_main_dir
}
/driver/libtaosws.so
${
lib64_link_dir
}
/libtaosws.so
||
:
fi
fi
else
else
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaos.
*
${
lib_link_dir
}
/libtaos.1.dylib
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaos.
*
${
lib_link_dir
}
/libtaos.1.dylib
${
csudo
}
ln
-s
${
lib_link_dir
}
/libtaos.1.dylib
${
lib_link_dir
}
/libtaos.dylib
${
csudo
}
ln
-s
${
lib_link_dir
}
/libtaos.1.dylib
${
lib_link_dir
}
/libtaos.dylib
[
-f
${
install_main_dir
}
/driver/libtaosws.dylib
]
&&
${
csudo
}
ln
-s
${
install_main_dir
}
/driver/libtaosws.dylib
${
lib_link_dir
}
/libtaosws.dylib
[
-f
${
install_main_dir
}
/driver/libtaosws.dylib
]
&&
${
csudo
}
ln
-s
f
${
install_main_dir
}
/driver/libtaosws.dylib
${
lib_link_dir
}
/libtaosws.dylib
||
:
fi
fi
if
[
"
$osType
"
!=
"Darwin"
]
;
then
if
[
"
$osType
"
!=
"Darwin"
]
;
then
...
@@ -165,7 +167,7 @@ function install_header() {
...
@@ -165,7 +167,7 @@ function install_header() {
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taoserror.h
${
inc_link_dir
}
/taoserror.h
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taoserror.h
${
inc_link_dir
}
/taoserror.h
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taosudf.h
${
inc_link_dir
}
/taosudf.h
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taosudf.h
${
inc_link_dir
}
/taosudf.h
[
-f
${
install_main_dir
}
/include/taosws.h
]
&&
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taosws.h
${
inc_link_dir
}
/taos.h
[
-f
${
install_main_dir
}
/include/taosws.h
]
&&
${
csudo
}
ln
-s
f
${
install_main_dir
}
/include/taosws.h
${
inc_link_dir
}
/taosws.h
||
:
}
}
function
install_jemalloc
()
{
function
install_jemalloc
()
{
...
...
packaging/tools/make_install.sh
浏览文件 @
72bd7798
...
@@ -294,10 +294,10 @@ function install_avro() {
...
@@ -294,10 +294,10 @@ function install_avro() {
function
install_lib
()
{
function
install_lib
()
{
# Remove links
# Remove links
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaosws.
*
||
:
[
-f
${
lib_link_dir
}
/libtaosws.so
]
&&
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaosws.so
||
:
if
[
"
$osType
"
!=
"Darwin"
]
;
then
if
[
"
$osType
"
!=
"Darwin"
]
;
then
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaosws.
*
||
:
[
-f
${
lib64_link_dir
}
/libtaosws.so
]
&&
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaosws.so
||
:
fi
fi
if
[
"
$osType
"
!=
"Darwin"
]
;
then
if
[
"
$osType
"
!=
"Darwin"
]
;
then
...
@@ -362,13 +362,13 @@ function install_header() {
...
@@ -362,13 +362,13 @@ function install_header() {
if
[
"
$osType
"
!=
"Darwin"
]
;
then
if
[
"
$osType
"
!=
"Darwin"
]
;
then
${
csudo
}
rm
-f
${
inc_link_dir
}
/taos.h
${
inc_link_dir
}
/taosdef.h
${
inc_link_dir
}
/taoserror.h
${
inc_link_dir
}
/taosudf.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taos.h
${
inc_link_dir
}
/taosdef.h
${
inc_link_dir
}
/taoserror.h
${
inc_link_dir
}
/taosudf.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosws.h
||
:
[
-f
${
inc_link_dir
}
/taosws.h
]
&&
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosws.h
||
:
${
csudo
}
cp
-f
${
source_dir
}
/include/client/taos.h
${
source_dir
}
/include/common/taosdef.h
${
source_dir
}
/include/util/taoserror.h
${
source_dir
}
/include/libs/function/taosudf.h
\
${
csudo
}
cp
-f
${
source_dir
}
/include/client/taos.h
${
source_dir
}
/include/common/taosdef.h
${
source_dir
}
/include/util/taoserror.h
${
source_dir
}
/include/libs/function/taosudf.h
\
${
install_main_dir
}
/include
&&
${
csudo
}
chmod
644
${
install_main_dir
}
/include/
*
${
install_main_dir
}
/include
&&
${
csudo
}
chmod
644
${
install_main_dir
}
/include/
*
if
[
-f
${
binary_dir
}
/build/include/taosws.h
]
;
then
if
[
-f
${
binary_dir
}
/build/include/taosws.h
]
;
then
${
csudo
}
cp
-f
${
binary_dir
}
/build/include/taosws.h
${
install_main_dir
}
/include
&&
${
csudo
}
chmod
644
${
install_main_dir
}
/include/taosws.h
||
:
${
csudo
}
cp
-f
${
binary_dir
}
/build/include/taosws.h
${
install_main_dir
}
/include
&&
${
csudo
}
chmod
644
${
install_main_dir
}
/include/taosws.h
||
:
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taosws.h
${
inc_link_dir
}
/taosws.h
||
:
${
csudo
}
ln
-s
f
${
install_main_dir
}
/include/taosws.h
${
inc_link_dir
}
/taosws.h
||
:
fi
fi
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taos.h
${
inc_link_dir
}
/taos.h
${
csudo
}
ln
-s
${
install_main_dir
}
/include/taos.h
${
inc_link_dir
}
/taos.h
...
...
packaging/tools/makepkg.sh
浏览文件 @
72bd7798
...
@@ -93,7 +93,7 @@ else
...
@@ -93,7 +93,7 @@ else
fi
fi
lib_files
=
"
${
build_dir
}
/lib/libtaos.so.
${
version
}
"
lib_files
=
"
${
build_dir
}
/lib/libtaos.so.
${
version
}
"
wslib_files
=
"
${
build_dir
}
/lib/libtaosws.so
.
"
wslib_files
=
"
${
build_dir
}
/lib/libtaosws.so"
header_files
=
"
${
code_dir
}
/include/client/taos.h
${
code_dir
}
/include/common/taosdef.h
${
code_dir
}
/include/util/taoserror.h
${
code_dir
}
/include/libs/function/taosudf.h"
header_files
=
"
${
code_dir
}
/include/client/taos.h
${
code_dir
}
/include/common/taosdef.h
${
code_dir
}
/include/util/taoserror.h
${
code_dir
}
/include/libs/function/taosudf.h"
wsheader_files
=
"
${
build_dir
}
/include/taosws.h"
wsheader_files
=
"
${
build_dir
}
/include/taosws.h"
...
...
packaging/tools/post.sh
浏览文件 @
72bd7798
...
@@ -82,33 +82,33 @@ function kill_taosd() {
...
@@ -82,33 +82,33 @@ function kill_taosd() {
function
install_include
()
{
function
install_include
()
{
${
csudo
}
rm
-f
${
inc_link_dir
}
/taos.h
${
inc_link_dir
}
/taosdef.h
${
inc_link_dir
}
/taoserror.h
${
inc_link_dir
}
/taosudf.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taos.h
${
inc_link_dir
}
/taosdef.h
${
inc_link_dir
}
/taoserror.h
${
inc_link_dir
}
/taosudf.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosws.h
[
-f
${
inc_link_dir
}
/taosws.h
]
&&
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosws.h
||
:
${
csudo
}
ln
-s
${
inc_dir
}
/taos.h
${
inc_link_dir
}
/taos.h
${
csudo
}
ln
-s
${
inc_dir
}
/taos.h
${
inc_link_dir
}
/taos.h
${
csudo
}
ln
-s
${
inc_dir
}
/taosdef.h
${
inc_link_dir
}
/taosdef.h
${
csudo
}
ln
-s
${
inc_dir
}
/taosdef.h
${
inc_link_dir
}
/taosdef.h
${
csudo
}
ln
-s
${
inc_dir
}
/taoserror.h
${
inc_link_dir
}
/taoserror.h
${
csudo
}
ln
-s
${
inc_dir
}
/taoserror.h
${
inc_link_dir
}
/taoserror.h
${
csudo
}
ln
-s
${
inc_dir
}
/taosudf.h
${
inc_link_dir
}
/taosudf.h
${
csudo
}
ln
-s
${
inc_dir
}
/taosudf.h
${
inc_link_dir
}
/taosudf.h
[
-f
${
inc_dir
}
/taosws.h
]
&&
${
csudo
}
ln
-s
${
inc_dir
}
/taosudf.h
${
inc_link_dir
}
/taosudf
.h
||
:
[
-f
${
inc_dir
}
/taosws.h
]
&&
${
csudo
}
ln
-s
f
${
inc_dir
}
/taosws.h
${
inc_link_dir
}
/taosws
.h
||
:
}
}
function
install_lib
()
{
function
install_lib
()
{
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaos
*
||
:
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaos
*
||
:
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaos
*
||
:
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaos
*
||
:
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaosws
*
||
:
[
-f
${
lib_link_dir
}
/libtaosws.so
]
&&
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaosws.so
||
:
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaosws
*
||
:
[
-f
${
lib64_link_dir
}
/libtaosws.so
]
&&
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaosws.so
||
:
${
csudo
}
ln
-s
${
lib_dir
}
/libtaos.
*
${
lib_link_dir
}
/libtaos.so.1
${
csudo
}
ln
-s
${
lib_dir
}
/libtaos.
*
${
lib_link_dir
}
/libtaos.so.1
${
csudo
}
ln
-s
${
lib_link_dir
}
/libtaos.so.1
${
lib_link_dir
}
/libtaos.so
${
csudo
}
ln
-s
${
lib_link_dir
}
/libtaos.so.1
${
lib_link_dir
}
/libtaos.so
[
-f
${
lib_dir
}
/libtaosws.so
]
${
csudo
}
ln
-s
${
lib_dir
}
/libtaosws.so
${
lib_link_dir
}
/libtaosws.so
[
-f
${
lib_dir
}
/libtaosws.so
]
&&
${
csudo
}
ln
-sf
${
lib_dir
}
/libtaosws.so
${
lib_link_dir
}
/libtaosws.so
||
:
if
[[
-d
${
lib64_link_dir
}
&&
!
-e
${
lib64_link_dir
}
/libtaos.so
]]
;
then
if
[[
-d
${
lib64_link_dir
}
&&
!
-e
${
lib64_link_dir
}
/libtaos.so
]]
;
then
${
csudo
}
ln
-s
${
lib_dir
}
/libtaos.
*
${
lib64_link_dir
}
/libtaos.so.1
||
:
${
csudo
}
ln
-s
${
lib_dir
}
/libtaos.
*
${
lib64_link_dir
}
/libtaos.so.1
||
:
${
csudo
}
ln
-s
${
lib64_link_dir
}
/libtaos.so.1
${
lib64_link_dir
}
/libtaos.so
||
:
${
csudo
}
ln
-s
${
lib64_link_dir
}
/libtaos.so.1
${
lib64_link_dir
}
/libtaos.so
||
:
[
-f
f
${
lib_dir
}
/libtaosws.so
]
&&
${
csudo
}
ln
-s
${
lib_dir
}
/libtaosws.so
${
lib64_link_dir
}
/libtaosws.so
||
:
[
-f
${
lib_dir
}
/libtaosws.so
]
&&
${
csudo
}
ln
-sf
${
lib_dir
}
/libtaosws.so
${
lib64_link_dir
}
/libtaosws.so
||
:
fi
fi
${
csudo
}
ldconfig
${
csudo
}
ldconfig
...
...
packaging/tools/remove.sh
浏览文件 @
72bd7798
...
@@ -102,10 +102,10 @@ function clean_local_bin() {
...
@@ -102,10 +102,10 @@ function clean_local_bin() {
function
clean_lib
()
{
function
clean_lib
()
{
# Remove link
# Remove link
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaosws.
*
||
:
[
-f
${
lib_link_dir
}
/libtaosws.so
]
&&
${
csudo
}
rm
-f
${
lib_link_dir
}
/libtaosws.so
||
:
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaos.
*
||
:
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaosws.
*
||
:
[
-f
${
lib64_link_dir
}
/libtaosws.so
]
&&
${
csudo
}
rm
-f
${
lib64_link_dir
}
/libtaosws.so
||
:
#${csudo}rm -rf ${v15_java_app_dir} || :
#${csudo}rm -rf ${v15_java_app_dir} || :
}
}
...
@@ -116,7 +116,7 @@ function clean_header() {
...
@@ -116,7 +116,7 @@ function clean_header() {
${
csudo
}
rm
-f
${
inc_link_dir
}
/taoserror.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taoserror.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosudf.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosudf.h
||
:
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosws.h
||
:
[
-f
${
inc_link_dir
}
/taosws.h
]
&&
${
csudo
}
rm
-f
${
inc_link_dir
}
/taosws.h
||
:
}
}
function
clean_config
()
{
function
clean_config
()
{
...
...
source/dnode/mnode/impl/src/mndConsumer.c
浏览文件 @
72bd7798
...
@@ -452,7 +452,7 @@ static int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) {
...
@@ -452,7 +452,7 @@ static int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) {
int32_t
code
=
-
1
;
int32_t
code
=
-
1
;
SArray
*
newSub
=
subscribe
.
topicNames
;
SArray
*
newSub
=
subscribe
.
topicNames
;
taosArraySortString
(
newSub
,
taosArrayCompareString
);
taosArraySortString
(
newSub
,
taosArrayCompareString
);
taosArrayRemoveDuplicate
(
newSub
,
taosArrayCompareString
,
taosMemoryFree
);
taosArrayRemoveDuplicate
P
(
newSub
,
taosArrayCompareString
,
taosMemoryFree
);
int32_t
newTopicNum
=
taosArrayGetSize
(
newSub
);
int32_t
newTopicNum
=
taosArrayGetSize
(
newSub
);
// check topic existance
// check topic existance
...
...
source/dnode/mnode/impl/src/mndTrans.c
浏览文件 @
72bd7798
...
@@ -708,9 +708,13 @@ int32_t mndSetRpcInfoForDbTrans(SMnode *pMnode, SRpcMsg *pMsg, EOperType oper, c
...
@@ -708,9 +708,13 @@ int32_t mndSetRpcInfoForDbTrans(SMnode *pMnode, SRpcMsg *pMsg, EOperType oper, c
if
(
pTrans
->
oper
==
oper
)
{
if
(
pTrans
->
oper
==
oper
)
{
if
(
strcasecmp
(
dbname
,
pTrans
->
dbname1
)
==
0
)
{
if
(
strcasecmp
(
dbname
,
pTrans
->
dbname1
)
==
0
)
{
mDebug
(
"trans:%d, db:%s oper:%d matched with input"
,
pTrans
->
id
,
dbname
,
oper
);
mDebug
(
"trans:%d, db:%s oper:%d matched with input"
,
pTrans
->
id
,
dbname
,
oper
);
if
(
taosArrayPush
(
pTrans
->
pRpcArray
,
&
pMsg
->
info
)
!=
NULL
)
{
if
(
pTrans
->
pRpcArray
==
NULL
)
{
pTrans
->
pRpcArray
=
taosArrayInit
(
1
,
sizeof
(
SRpcHandleInfo
));
}
if
(
pTrans
->
pRpcArray
!=
NULL
&&
taosArrayPush
(
pTrans
->
pRpcArray
,
&
pMsg
->
info
)
!=
NULL
)
{
code
=
0
;
code
=
0
;
}
}
sdbRelease
(
pMnode
->
pSdb
,
pTrans
);
sdbRelease
(
pMnode
->
pSdb
,
pTrans
);
break
;
break
;
}
}
...
...
source/dnode/vnode/src/inc/vnodeInt.h
浏览文件 @
72bd7798
...
@@ -91,7 +91,7 @@ int metaBegin(SMeta* pMeta);
...
@@ -91,7 +91,7 @@ int metaBegin(SMeta* pMeta);
int
metaCommit
(
SMeta
*
pMeta
);
int
metaCommit
(
SMeta
*
pMeta
);
int
metaCreateSTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateStbReq
*
pReq
);
int
metaCreateSTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateStbReq
*
pReq
);
int
metaAlterSTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateStbReq
*
pReq
);
int
metaAlterSTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateStbReq
*
pReq
);
int
metaDropSTable
(
SMeta
*
pMeta
,
int64_t
verison
,
SVDropStbReq
*
pReq
);
int
metaDropSTable
(
SMeta
*
pMeta
,
int64_t
verison
,
SVDropStbReq
*
pReq
,
SArray
*
tbUidList
);
int
metaCreateTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateTbReq
*
pReq
);
int
metaCreateTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateTbReq
*
pReq
);
int
metaDropTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVDropTbReq
*
pReq
,
SArray
*
tbUids
);
int
metaDropTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVDropTbReq
*
pReq
,
SArray
*
tbUids
);
int
metaTtlDropTable
(
SMeta
*
pMeta
,
int64_t
ttl
,
SArray
*
tbUids
);
int
metaTtlDropTable
(
SMeta
*
pMeta
,
int64_t
ttl
,
SArray
*
tbUids
);
...
...
source/dnode/vnode/src/meta/metaTable.c
浏览文件 @
72bd7798
...
@@ -212,7 +212,7 @@ _err:
...
@@ -212,7 +212,7 @@ _err:
return
-
1
;
return
-
1
;
}
}
int
metaDropSTable
(
SMeta
*
pMeta
,
int64_t
verison
,
SVDropStbReq
*
pReq
)
{
int
metaDropSTable
(
SMeta
*
pMeta
,
int64_t
verison
,
SVDropStbReq
*
pReq
,
SArray
*
tbUidList
)
{
void
*
pKey
=
NULL
;
void
*
pKey
=
NULL
;
int
nKey
=
0
;
int
nKey
=
0
;
void
*
pData
=
NULL
;
void
*
pData
=
NULL
;
...
@@ -228,8 +228,7 @@ int metaDropSTable(SMeta *pMeta, int64_t verison, SVDropStbReq *pReq) {
...
@@ -228,8 +228,7 @@ int metaDropSTable(SMeta *pMeta, int64_t verison, SVDropStbReq *pReq) {
}
}
// drop all child tables
// drop all child tables
TBC
*
pCtbIdxc
=
NULL
;
TBC
*
pCtbIdxc
=
NULL
;
SArray
*
pArray
=
taosArrayInit
(
8
,
sizeof
(
tb_uid_t
));
tdbTbcOpen
(
pMeta
->
pCtbIdx
,
&
pCtbIdxc
,
&
pMeta
->
txn
);
tdbTbcOpen
(
pMeta
->
pCtbIdx
,
&
pCtbIdxc
,
&
pMeta
->
txn
);
rc
=
tdbTbcMoveTo
(
pCtbIdxc
,
&
(
SCtbIdxKey
){.
suid
=
pReq
->
suid
,
.
uid
=
INT64_MIN
},
sizeof
(
SCtbIdxKey
),
&
c
);
rc
=
tdbTbcMoveTo
(
pCtbIdxc
,
&
(
SCtbIdxKey
){.
suid
=
pReq
->
suid
,
.
uid
=
INT64_MIN
},
sizeof
(
SCtbIdxKey
),
&
c
);
...
@@ -249,20 +248,18 @@ int metaDropSTable(SMeta *pMeta, int64_t verison, SVDropStbReq *pReq) {
...
@@ -249,20 +248,18 @@ int metaDropSTable(SMeta *pMeta, int64_t verison, SVDropStbReq *pReq) {
break
;
break
;
}
}
taosArrayPush
(
pArray
,
&
(((
SCtbIdxKey
*
)
pKey
)
->
uid
));
taosArrayPush
(
tbUidList
,
&
(((
SCtbIdxKey
*
)
pKey
)
->
uid
));
}
}
tdbTbcClose
(
pCtbIdxc
);
tdbTbcClose
(
pCtbIdxc
);
metaWLock
(
pMeta
);
metaWLock
(
pMeta
);
for
(
int32_t
iChild
=
0
;
iChild
<
taosArrayGetSize
(
pArray
);
iChild
++
)
{
for
(
int32_t
iChild
=
0
;
iChild
<
taosArrayGetSize
(
tbUidList
);
iChild
++
)
{
tb_uid_t
uid
=
*
(
tb_uid_t
*
)
taosArrayGet
(
pArray
,
iChild
);
tb_uid_t
uid
=
*
(
tb_uid_t
*
)
taosArrayGet
(
tbUidList
,
iChild
);
metaDropTableByUid
(
pMeta
,
uid
,
NULL
);
metaDropTableByUid
(
pMeta
,
uid
,
NULL
);
}
}
taosArrayDestroy
(
pArray
);
// drop super table
// drop super table
_drop_super_table:
_drop_super_table:
tdbTbGet
(
pMeta
->
pUidIdx
,
&
pReq
->
suid
,
sizeof
(
tb_uid_t
),
&
pData
,
&
nData
);
tdbTbGet
(
pMeta
->
pUidIdx
,
&
pReq
->
suid
,
sizeof
(
tb_uid_t
),
&
pData
,
&
nData
);
...
...
source/dnode/vnode/src/tq/tqExec.c
浏览文件 @
72bd7798
...
@@ -49,8 +49,8 @@ static int32_t tqAddBlockSchemaToRsp(const STqExecHandle* pExec, int32_t workerI
...
@@ -49,8 +49,8 @@ static int32_t tqAddBlockSchemaToRsp(const STqExecHandle* pExec, int32_t workerI
static
int32_t
tqAddTbNameToRsp
(
const
STQ
*
pTq
,
int64_t
uid
,
SMqDataRsp
*
pRsp
)
{
static
int32_t
tqAddTbNameToRsp
(
const
STQ
*
pTq
,
int64_t
uid
,
SMqDataRsp
*
pRsp
)
{
SMetaReader
mr
=
{
0
};
SMetaReader
mr
=
{
0
};
metaReaderInit
(
&
mr
,
pTq
->
pVnode
->
pMeta
,
0
);
metaReaderInit
(
&
mr
,
pTq
->
pVnode
->
pMeta
,
0
);
// TODO add reference to gurantee success
if
(
metaGetTableEntryByUid
(
&
mr
,
uid
)
<
0
)
{
if
(
metaGetTableEntryByUid
(
&
mr
,
uid
)
<
0
)
{
ASSERT
(
0
);
return
-
1
;
return
-
1
;
}
}
char
*
tbName
=
strdup
(
mr
.
me
.
name
);
char
*
tbName
=
strdup
(
mr
.
me
.
name
);
...
@@ -87,16 +87,18 @@ int64_t tqScan(STQ* pTq, const STqHandle* pHandle, SMqDataRsp* pRsp, STqOffsetVa
...
@@ -87,16 +87,18 @@ int64_t tqScan(STQ* pTq, const STqHandle* pHandle, SMqDataRsp* pRsp, STqOffsetVa
tqDebug
(
"task execute end, get %p"
,
pDataBlock
);
tqDebug
(
"task execute end, get %p"
,
pDataBlock
);
if
(
pDataBlock
!=
NULL
)
{
if
(
pDataBlock
!=
NULL
)
{
tqAddBlockDataToRsp
(
pDataBlock
,
pRsp
,
pExec
->
numOfCols
);
pRsp
->
blockNum
++
;
if
(
pRsp
->
withTbName
)
{
if
(
pRsp
->
withTbName
)
{
if
(
pOffset
->
type
==
TMQ_OFFSET__LOG
)
{
if
(
pOffset
->
type
==
TMQ_OFFSET__LOG
)
{
int64_t
uid
=
pExec
->
pExecReader
[
0
]
->
msgIter
.
uid
;
int64_t
uid
=
pExec
->
pExecReader
[
0
]
->
msgIter
.
uid
;
tqAddTbNameToRsp
(
pTq
,
uid
,
pRsp
);
if
(
tqAddTbNameToRsp
(
pTq
,
uid
,
pRsp
)
<
0
)
{
continue
;
}
}
else
{
}
else
{
pRsp
->
withTbName
=
0
;
pRsp
->
withTbName
=
0
;
}
}
}
}
tqAddBlockDataToRsp
(
pDataBlock
,
pRsp
,
pExec
->
numOfCols
);
pRsp
->
blockNum
++
;
if
(
pOffset
->
type
==
TMQ_OFFSET__LOG
)
{
if
(
pOffset
->
type
==
TMQ_OFFSET__LOG
)
{
continue
;
continue
;
}
else
{
}
else
{
...
@@ -193,13 +195,14 @@ int32_t tqLogScanExec(STQ* pTq, STqExecHandle* pExec, SSubmitReq* pReq, SMqDataR
...
@@ -193,13 +195,14 @@ int32_t tqLogScanExec(STQ* pTq, STqExecHandle* pExec, SSubmitReq* pReq, SMqDataR
SSDataBlock
block
=
{
0
};
SSDataBlock
block
=
{
0
};
if
(
tqRetrieveDataBlock
(
&
block
,
pReader
)
<
0
)
{
if
(
tqRetrieveDataBlock
(
&
block
,
pReader
)
<
0
)
{
if
(
terrno
==
TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND
)
continue
;
if
(
terrno
==
TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND
)
continue
;
ASSERT
(
0
);
}
}
tqAddBlockDataToRsp
(
&
block
,
pRsp
,
taosArrayGetSize
(
block
.
pDataBlock
));
if
(
pRsp
->
withTbName
)
{
if
(
pRsp
->
withTbName
)
{
int64_t
uid
=
pExec
->
pExecReader
[
workerId
]
->
msgIter
.
uid
;
int64_t
uid
=
pExec
->
pExecReader
[
workerId
]
->
msgIter
.
uid
;
tqAddTbNameToRsp
(
pTq
,
uid
,
pRsp
);
if
(
tqAddTbNameToRsp
(
pTq
,
uid
,
pRsp
)
<
0
)
{
continue
;
}
}
}
tqAddBlockDataToRsp
(
&
block
,
pRsp
,
taosArrayGetSize
(
block
.
pDataBlock
));
tqAddBlockSchemaToRsp
(
pExec
,
workerId
,
pRsp
);
tqAddBlockSchemaToRsp
(
pExec
,
workerId
,
pRsp
);
pRsp
->
blockNum
++
;
pRsp
->
blockNum
++
;
}
}
...
@@ -211,13 +214,14 @@ int32_t tqLogScanExec(STQ* pTq, STqExecHandle* pExec, SSubmitReq* pReq, SMqDataR
...
@@ -211,13 +214,14 @@ int32_t tqLogScanExec(STQ* pTq, STqExecHandle* pExec, SSubmitReq* pReq, SMqDataR
SSDataBlock
block
=
{
0
};
SSDataBlock
block
=
{
0
};
if
(
tqRetrieveDataBlock
(
&
block
,
pReader
)
<
0
)
{
if
(
tqRetrieveDataBlock
(
&
block
,
pReader
)
<
0
)
{
if
(
terrno
==
TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND
)
continue
;
if
(
terrno
==
TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND
)
continue
;
ASSERT
(
0
);
}
}
tqAddBlockDataToRsp
(
&
block
,
pRsp
,
taosArrayGetSize
(
block
.
pDataBlock
));
if
(
pRsp
->
withTbName
)
{
if
(
pRsp
->
withTbName
)
{
int64_t
uid
=
pExec
->
pExecReader
[
workerId
]
->
msgIter
.
uid
;
int64_t
uid
=
pExec
->
pExecReader
[
workerId
]
->
msgIter
.
uid
;
tqAddTbNameToRsp
(
pTq
,
uid
,
pRsp
);
if
(
tqAddTbNameToRsp
(
pTq
,
uid
,
pRsp
)
<
0
)
{
continue
;
}
}
}
tqAddBlockDataToRsp
(
&
block
,
pRsp
,
taosArrayGetSize
(
block
.
pDataBlock
));
tqAddBlockSchemaToRsp
(
pExec
,
workerId
,
pRsp
);
tqAddBlockSchemaToRsp
(
pExec
,
workerId
,
pRsp
);
pRsp
->
blockNum
++
;
pRsp
->
blockNum
++
;
}
}
...
...
source/dnode/vnode/src/tq/tqRead.c
浏览文件 @
72bd7798
...
@@ -299,6 +299,7 @@ int32_t tqRetrieveDataBlock(SSDataBlock* pBlock, STqReader* pReader) {
...
@@ -299,6 +299,7 @@ int32_t tqRetrieveDataBlock(SSDataBlock* pBlock, STqReader* pReader) {
}
}
if
(
blockDataEnsureCapacity
(
pBlock
,
pReader
->
msgIter
.
numOfRows
)
<
0
)
{
if
(
blockDataEnsureCapacity
(
pBlock
,
pReader
->
msgIter
.
numOfRows
)
<
0
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
FAIL
;
goto
FAIL
;
}
}
...
...
source/dnode/vnode/src/tq/tqSink.c
浏览文件 @
72bd7798
...
@@ -178,6 +178,8 @@ void tqTableSink(SStreamTask* pTask, void* vnode, int64_t ver, void* data) {
...
@@ -178,6 +178,8 @@ void tqTableSink(SStreamTask* pTask, void* vnode, int64_t ver, void* data) {
const
SArray
*
pRes
=
(
const
SArray
*
)
data
;
const
SArray
*
pRes
=
(
const
SArray
*
)
data
;
SVnode
*
pVnode
=
(
SVnode
*
)
vnode
;
SVnode
*
pVnode
=
(
SVnode
*
)
vnode
;
tqDebug
(
"task write into table, vgId %d, block num: %d"
,
pVnode
->
config
.
vgId
,
(
int32_t
)
pRes
->
size
);
ASSERT
(
pTask
->
tbSink
.
pTSchema
);
ASSERT
(
pTask
->
tbSink
.
pTSchema
);
SSubmitReq
*
pReq
=
tdBlockToSubmit
(
pRes
,
pTask
->
tbSink
.
pTSchema
,
true
,
pTask
->
tbSink
.
stbUid
,
SSubmitReq
*
pReq
=
tdBlockToSubmit
(
pRes
,
pTask
->
tbSink
.
pTSchema
,
true
,
pTask
->
tbSink
.
stbUid
,
pTask
->
tbSink
.
stbFullName
,
pVnode
->
config
.
vgId
);
pTask
->
tbSink
.
stbFullName
,
pVnode
->
config
.
vgId
);
...
...
source/dnode/vnode/src/vnd/vnodeSvr.c
浏览文件 @
72bd7798
...
@@ -557,6 +557,7 @@ static int32_t vnodeProcessDropStbReq(SVnode *pVnode, int64_t version, void *pRe
...
@@ -557,6 +557,7 @@ static int32_t vnodeProcessDropStbReq(SVnode *pVnode, int64_t version, void *pRe
SVDropStbReq
req
=
{
0
};
SVDropStbReq
req
=
{
0
};
int32_t
rcode
=
TSDB_CODE_SUCCESS
;
int32_t
rcode
=
TSDB_CODE_SUCCESS
;
SDecoder
decoder
=
{
0
};
SDecoder
decoder
=
{
0
};
SArray
*
tbUidList
=
NULL
;
pRsp
->
msgType
=
TDMT_VND_CREATE_STB_RSP
;
pRsp
->
msgType
=
TDMT_VND_CREATE_STB_RSP
;
pRsp
->
pCont
=
NULL
;
pRsp
->
pCont
=
NULL
;
...
@@ -570,7 +571,14 @@ static int32_t vnodeProcessDropStbReq(SVnode *pVnode, int64_t version, void *pRe
...
@@ -570,7 +571,14 @@ static int32_t vnodeProcessDropStbReq(SVnode *pVnode, int64_t version, void *pRe
}
}
// process request
// process request
if
(
metaDropSTable
(
pVnode
->
pMeta
,
version
,
&
req
)
<
0
)
{
tbUidList
=
taosArrayInit
(
8
,
sizeof
(
int64_t
));
if
(
tbUidList
==
NULL
)
goto
_exit
;
if
(
metaDropSTable
(
pVnode
->
pMeta
,
version
,
&
req
,
tbUidList
)
<
0
)
{
rcode
=
terrno
;
goto
_exit
;
}
if
(
tqUpdateTbUidList
(
pVnode
->
pTq
,
tbUidList
,
false
)
<
0
)
{
rcode
=
terrno
;
rcode
=
terrno
;
goto
_exit
;
goto
_exit
;
}
}
...
@@ -582,6 +590,7 @@ static int32_t vnodeProcessDropStbReq(SVnode *pVnode, int64_t version, void *pRe
...
@@ -582,6 +590,7 @@ static int32_t vnodeProcessDropStbReq(SVnode *pVnode, int64_t version, void *pRe
// return rsp
// return rsp
_exit:
_exit:
if
(
tbUidList
)
taosArrayDestroy
(
tbUidList
);
pRsp
->
code
=
rcode
;
pRsp
->
code
=
rcode
;
tDecoderClear
(
&
decoder
);
tDecoderClear
(
&
decoder
);
return
0
;
return
0
;
...
...
source/libs/executor/src/executil.c
浏览文件 @
72bd7798
...
@@ -842,30 +842,10 @@ static void getInitialStartTimeWindow(SInterval* pInterval, TSKEY ts, STimeWindo
...
@@ -842,30 +842,10 @@ static void getInitialStartTimeWindow(SInterval* pInterval, TSKEY ts, STimeWindo
}
}
static
STimeWindow
doCalculateTimeWindow
(
int64_t
ts
,
SInterval
*
pInterval
)
{
static
STimeWindow
doCalculateTimeWindow
(
int64_t
ts
,
SInterval
*
pInterval
)
{
STimeWindow
w
=
{
0
};
STimeWindow
w
=
{
0
};
if
(
pInterval
->
intervalUnit
==
'n'
||
pInterval
->
intervalUnit
==
'y'
)
{
w
.
skey
=
taosTimeTruncate
(
ts
,
pInterval
,
pInterval
->
precision
);
w
.
ekey
=
taosTimeAdd
(
w
.
skey
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
)
-
1
;
}
else
{
int64_t
st
=
w
.
skey
;
if
(
pInterval
->
offset
>
0
)
{
st
=
taosTimeAdd
(
st
,
pInterval
->
offset
,
pInterval
->
offsetUnit
,
pInterval
->
precision
);
}
if
(
st
>
ts
)
{
st
-=
((
st
-
ts
+
pInterval
->
sliding
-
1
)
/
pInterval
->
sliding
)
*
pInterval
->
sliding
;
}
int64_t
et
=
st
+
pInterval
->
interval
-
1
;
if
(
et
<
ts
)
{
st
+=
((
ts
-
et
+
pInterval
->
sliding
-
1
)
/
pInterval
->
sliding
)
*
pInterval
->
sliding
;
}
w
.
skey
=
st
;
w
.
ekey
=
taosTimeAdd
(
w
.
skey
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
)
-
1
;
}
w
.
skey
=
taosTimeTruncate
(
ts
,
pInterval
,
pInterval
->
precision
);
w
.
ekey
=
taosTimeAdd
(
w
.
skey
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
)
-
1
;
return
w
;
return
w
;
}
}
...
...
source/libs/executor/src/executor.c
浏览文件 @
72bd7798
...
@@ -42,17 +42,32 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t nu
...
@@ -42,17 +42,32 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t nu
// TODO: if a block was set but not consumed,
// TODO: if a block was set but not consumed,
// prevent setting a different type of block
// prevent setting a different type of block
pInfo
->
blockType
=
type
;
pInfo
->
validBlockIndex
=
0
;
taosArrayClear
(
pInfo
->
pBlockLists
);
if
(
type
==
STREAM_INPUT__DATA_SUBMIT
)
{
if
(
tqReaderSetDataMsg
(
pInfo
->
tqReader
,
input
,
0
)
<
0
)
{
if
(
type
==
STREAM_INPUT__MERGED_SUBMIT
)
{
qError
(
"submit msg messed up when initing stream block, %s"
PRIx64
,
id
);
ASSERT
(
numOfBlocks
>
1
);
return
TSDB_CODE_QRY_APP_ERROR
;
for
(
int32_t
i
=
0
;
i
<
numOfBlocks
;
i
++
)
{
SSubmitReq
*
pReq
=
*
(
void
**
)
POINTER_SHIFT
(
input
,
i
*
sizeof
(
void
*
));
taosArrayPush
(
pInfo
->
pBlockLists
,
&
pReq
);
}
}
pInfo
->
blockType
=
STREAM_INPUT__DATA_SUBMIT
;
}
else
if
(
type
==
STREAM_INPUT__DATA_SUBMIT
)
{
/*if (tqReaderSetDataMsg(pInfo->tqReader, input, 0) < 0) {*/
/*qError("submit msg messed up when initing stream block, %s" PRIx64, id);*/
/*return TSDB_CODE_QRY_APP_ERROR;*/
/*}*/
ASSERT
(
numOfBlocks
==
1
);
/*if (numOfBlocks == 1) {*/
taosArrayPush
(
pInfo
->
pBlockLists
,
&
input
);
pInfo
->
blockType
=
STREAM_INPUT__DATA_SUBMIT
;
/*} else {*/
/*}*/
}
else
if
(
type
==
STREAM_INPUT__DATA_BLOCK
)
{
}
else
if
(
type
==
STREAM_INPUT__DATA_BLOCK
)
{
for
(
int32_t
i
=
0
;
i
<
numOfBlocks
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfBlocks
;
++
i
)
{
SSDataBlock
*
pDataBlock
=
&
((
SSDataBlock
*
)
input
)[
i
];
SSDataBlock
*
pDataBlock
=
&
((
SSDataBlock
*
)
input
)[
i
];
// TODO optimize
SSDataBlock
*
p
=
createOneDataBlock
(
pDataBlock
,
false
);
SSDataBlock
*
p
=
createOneDataBlock
(
pDataBlock
,
false
);
p
->
info
=
pDataBlock
->
info
;
p
->
info
=
pDataBlock
->
info
;
...
@@ -60,6 +75,7 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t nu
...
@@ -60,6 +75,7 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t nu
taosArrayAddAll
(
p
->
pDataBlock
,
pDataBlock
->
pDataBlock
);
taosArrayAddAll
(
p
->
pDataBlock
,
pDataBlock
->
pDataBlock
);
taosArrayPush
(
pInfo
->
pBlockLists
,
&
p
);
taosArrayPush
(
pInfo
->
pBlockLists
,
&
p
);
}
}
pInfo
->
blockType
=
STREAM_INPUT__DATA_BLOCK
;
}
else
{
}
else
{
ASSERT
(
0
);
ASSERT
(
0
);
}
}
...
@@ -167,7 +183,8 @@ qTaskInfo_t qCreateStreamExecTaskInfo(void* msg, SReadHandle* readers) {
...
@@ -167,7 +183,8 @@ qTaskInfo_t qCreateStreamExecTaskInfo(void* msg, SReadHandle* readers) {
return
pTaskInfo
;
return
pTaskInfo
;
}
}
static
SArray
*
filterQualifiedChildTables
(
const
SStreamScanInfo
*
pScanInfo
,
const
SArray
*
tableIdList
,
const
char
*
idstr
)
{
static
SArray
*
filterQualifiedChildTables
(
const
SStreamScanInfo
*
pScanInfo
,
const
SArray
*
tableIdList
,
const
char
*
idstr
)
{
SArray
*
qa
=
taosArrayInit
(
4
,
sizeof
(
tb_uid_t
));
SArray
*
qa
=
taosArrayInit
(
4
,
sizeof
(
tb_uid_t
));
// let's discard the tables those are not created according to the queried super table.
// let's discard the tables those are not created according to the queried super table.
...
...
source/libs/executor/src/scanoperator.c
浏览文件 @
72bd7798
...
@@ -1392,24 +1392,49 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) {
...
@@ -1392,24 +1392,49 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) {
}
}
SDataBlockInfo
*
pBlockInfo
=
&
pInfo
->
pRes
->
info
;
SDataBlockInfo
*
pBlockInfo
=
&
pInfo
->
pRes
->
info
;
blockDataCleanup
(
pInfo
->
pRes
);
while
(
tqNextDataBlock
(
pInfo
->
tqReader
))
{
int32_t
totBlockNum
=
taosArrayGetSize
(
pInfo
->
pBlockLists
);
SSDataBlock
block
=
{
0
};
// todo refactor
while
(
1
)
{
int32_t
code
=
tqRetrieveDataBlock
(
&
block
,
pInfo
->
tqReader
);
if
(
pInfo
->
tqReader
->
pMsg
==
NULL
)
{
if
(
pInfo
->
validBlockIndex
>=
totBlockNum
)
{
return
NULL
;
}
if
(
code
!=
TSDB_CODE_SUCCESS
||
block
.
info
.
rows
==
0
)
{
int32_t
current
=
pInfo
->
validBlockIndex
++
;
pTaskInfo
->
code
=
code
;
SSubmitReq
*
pSubmit
=
taosArrayGetP
(
pInfo
->
pBlockLists
,
current
);
return
NULL
;
if
(
tqReaderSetDataMsg
(
pInfo
->
tqReader
,
pSubmit
,
0
)
<
0
)
{
qError
(
"submit msg messed up when initing stream submit block %p, current %d, total %d"
,
pSubmit
,
current
,
totBlockNum
);
pInfo
->
tqReader
->
pMsg
=
NULL
;
continue
;
}
}
}
setBlockIntoRes
(
pInfo
,
&
block
);
blockDataCleanup
(
pInfo
->
pRes
);
while
(
tqNextDataBlock
(
pInfo
->
tqReader
))
{
SSDataBlock
block
=
{
0
};
int32_t
code
=
tqRetrieveDataBlock
(
&
block
,
pInfo
->
tqReader
);
if
(
code
!=
TSDB_CODE_SUCCESS
||
block
.
info
.
rows
==
0
)
{
continue
;
}
setBlockIntoRes
(
pInfo
,
&
block
);
if
(
pBlockInfo
->
rows
>
0
)
{
break
;
}
}
if
(
pBlockInfo
->
rows
>
0
)
{
if
(
pBlockInfo
->
rows
>
0
)
{
break
;
break
;
}
else
{
pInfo
->
tqReader
->
pMsg
=
NULL
;
continue
;
}
}
/*blockDataCleanup(pInfo->pRes);*/
}
}
// record the scan action.
// record the scan action.
...
@@ -2557,30 +2582,30 @@ typedef struct STableMergeScanInfo {
...
@@ -2557,30 +2582,30 @@ typedef struct STableMergeScanInfo {
SArray
*
pSortInfo
;
SArray
*
pSortInfo
;
SSortHandle
*
pSortHandle
;
SSortHandle
*
pSortHandle
;
SSDataBlock
*
pSortInputBlock
;
SSDataBlock
*
pSortInputBlock
;
int64_t
startTs
;
// sort start time
int64_t
startTs
;
// sort start time
SArray
*
sortSourceParams
;
SArray
*
sortSourceParams
;
SFileBlockLoadRecorder
readRecorder
;
SFileBlockLoadRecorder
readRecorder
;
int64_t
numOfRows
;
int64_t
numOfRows
;
SScanInfo
scanInfo
;
SScanInfo
scanInfo
;
int32_t
scanTimes
;
int32_t
scanTimes
;
SNode
*
pFilterNode
;
// filter info, which is push down by optimizer
SNode
*
pFilterNode
;
// filter info, which is push down by optimizer
SqlFunctionCtx
*
pCtx
;
// which belongs to the direct upstream operator operator query context
SqlFunctionCtx
*
pCtx
;
// which belongs to the direct upstream operator operator query context
SResultRowInfo
*
pResultRowInfo
;
SResultRowInfo
*
pResultRowInfo
;
int32_t
*
rowEntryInfoOffset
;
int32_t
*
rowEntryInfoOffset
;
SExprInfo
*
pExpr
;
SExprInfo
*
pExpr
;
SSDataBlock
*
pResBlock
;
SSDataBlock
*
pResBlock
;
SArray
*
pColMatchInfo
;
SArray
*
pColMatchInfo
;
int32_t
numOfOutput
;
int32_t
numOfOutput
;
SExprInfo
*
pPseudoExpr
;
SExprInfo
*
pPseudoExpr
;
int32_t
numOfPseudoExpr
;
int32_t
numOfPseudoExpr
;
SqlFunctionCtx
*
pPseudoCtx
;
SqlFunctionCtx
*
pPseudoCtx
;
SQueryTableDataCond
cond
;
SQueryTableDataCond
cond
;
int32_t
scanFlag
;
// table scan flag to denote if it is a repeat/reverse/main scan
int32_t
scanFlag
;
// table scan flag to denote if it is a repeat/reverse/main scan
int32_t
dataBlockLoadFlag
;
int32_t
dataBlockLoadFlag
;
// if the upstream is an interval operator, the interval info is also kept here to get the time
// if the upstream is an interval operator, the interval info is also kept here to get the time
// window to check if current data block needs to be loaded.
// window to check if current data block needs to be loaded.
SInterval
interval
;
SInterval
interval
;
...
@@ -2588,7 +2613,8 @@ typedef struct STableMergeScanInfo {
...
@@ -2588,7 +2613,8 @@ typedef struct STableMergeScanInfo {
}
STableMergeScanInfo
;
}
STableMergeScanInfo
;
int32_t
createScanTableListInfo
(
SScanPhysiNode
*
pScanNode
,
SNodeList
*
pGroupTags
,
bool
groupSort
,
SReadHandle
*
pHandle
,
int32_t
createScanTableListInfo
(
SScanPhysiNode
*
pScanNode
,
SNodeList
*
pGroupTags
,
bool
groupSort
,
SReadHandle
*
pHandle
,
STableListInfo
*
pTableListInfo
,
SNode
*
pTagCond
,
SNode
*
pTagIndexCond
,
const
char
*
idStr
)
{
STableListInfo
*
pTableListInfo
,
SNode
*
pTagCond
,
SNode
*
pTagIndexCond
,
const
char
*
idStr
)
{
int32_t
code
=
getTableList
(
pHandle
->
meta
,
pHandle
->
vnode
,
pScanNode
,
pTagCond
,
pTagIndexCond
,
pTableListInfo
);
int32_t
code
=
getTableList
(
pHandle
->
meta
,
pHandle
->
vnode
,
pScanNode
,
pTagCond
,
pTagIndexCond
,
pTableListInfo
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
code
;
return
code
;
...
...
source/libs/executor/src/tfill.c
浏览文件 @
72bd7798
...
@@ -544,8 +544,9 @@ bool taosFillHasMoreResults(SFillInfo* pFillInfo) {
...
@@ -544,8 +544,9 @@ bool taosFillHasMoreResults(SFillInfo* pFillInfo) {
return
true
;
return
true
;
}
}
if
(
pFillInfo
->
numOfTotal
>
0
&&
(((
pFillInfo
->
end
>
pFillInfo
->
start
)
&&
FILL_IS_ASC_FILL
(
pFillInfo
))
||
bool
ascFill
=
FILL_IS_ASC_FILL
(
pFillInfo
);
(
pFillInfo
->
end
<
pFillInfo
->
start
&&
!
FILL_IS_ASC_FILL
(
pFillInfo
))))
{
if
(
pFillInfo
->
numOfTotal
>
0
&&
(((
pFillInfo
->
end
>
pFillInfo
->
start
)
&&
ascFill
)
||
(
pFillInfo
->
end
<
pFillInfo
->
start
&&
!
ascFill
)))
{
return
getNumOfResultsAfterFillGap
(
pFillInfo
,
pFillInfo
->
end
,
4096
)
>
0
;
return
getNumOfResultsAfterFillGap
(
pFillInfo
,
pFillInfo
->
end
,
4096
)
>
0
;
}
}
...
...
source/libs/function/src/builtins.c
浏览文件 @
72bd7798
...
@@ -192,9 +192,9 @@ static bool validateTimezoneFormat(const SValueNode* pVal) {
...
@@ -192,9 +192,9 @@ static bool validateTimezoneFormat(const SValueNode* pVal) {
}
}
void
static
addTimezoneParam
(
SNodeList
*
pList
)
{
void
static
addTimezoneParam
(
SNodeList
*
pList
)
{
char
buf
[
6
]
=
{
0
};
char
buf
[
6
]
=
{
0
};
time_t
t
=
taosTime
(
NULL
);
time_t
t
=
taosTime
(
NULL
);
struct
tm
tmInfo
;
struct
tm
tmInfo
;
taosLocalTime
(
&
t
,
&
tmInfo
);
taosLocalTime
(
&
t
,
&
tmInfo
);
strftime
(
buf
,
sizeof
(
buf
),
"%z"
,
&
tmInfo
);
strftime
(
buf
,
sizeof
(
buf
),
"%z"
,
&
tmInfo
);
int32_t
len
=
(
int32_t
)
strlen
(
buf
);
int32_t
len
=
(
int32_t
)
strlen
(
buf
);
...
@@ -976,7 +976,7 @@ static int32_t translateHistogram(SFunctionNode* pFunc, char* pErrBuf, int32_t l
...
@@ -976,7 +976,7 @@ static int32_t translateHistogram(SFunctionNode* pFunc, char* pErrBuf, int32_t l
// param1 ~ param3
// param1 ~ param3
if
(((
SExprNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
1
))
->
resType
.
type
!=
TSDB_DATA_TYPE_BINARY
||
if
(((
SExprNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
1
))
->
resType
.
type
!=
TSDB_DATA_TYPE_BINARY
||
((
SExprNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
2
))
->
resType
.
type
!=
TSDB_DATA_TYPE_BINARY
||
((
SExprNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
2
))
->
resType
.
type
!=
TSDB_DATA_TYPE_BINARY
||
((
SExprNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
3
))
->
resType
.
type
!=
TSDB_DATA_TYPE_BIGINT
)
{
!
IS_INTEGER_TYPE
(((
SExprNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
3
))
->
resType
.
type
)
)
{
return
invaildFuncParaTypeErrMsg
(
pErrBuf
,
len
,
pFunc
->
functionName
);
return
invaildFuncParaTypeErrMsg
(
pErrBuf
,
len
,
pFunc
->
functionName
);
}
}
...
@@ -1034,7 +1034,7 @@ static int32_t translateHistogramImpl(SFunctionNode* pFunc, char* pErrBuf, int32
...
@@ -1034,7 +1034,7 @@ static int32_t translateHistogramImpl(SFunctionNode* pFunc, char* pErrBuf, int32
// param1 ~ param3
// param1 ~ param3
if
(((
SExprNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
1
))
->
resType
.
type
!=
TSDB_DATA_TYPE_BINARY
||
if
(((
SExprNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
1
))
->
resType
.
type
!=
TSDB_DATA_TYPE_BINARY
||
((
SExprNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
2
))
->
resType
.
type
!=
TSDB_DATA_TYPE_BINARY
||
((
SExprNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
2
))
->
resType
.
type
!=
TSDB_DATA_TYPE_BINARY
||
((
SExprNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
3
))
->
resType
.
type
!=
TSDB_DATA_TYPE_BIGINT
)
{
!
IS_INTEGER_TYPE
(((
SExprNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
3
))
->
resType
.
type
)
)
{
return
invaildFuncParaTypeErrMsg
(
pErrBuf
,
len
,
pFunc
->
functionName
);
return
invaildFuncParaTypeErrMsg
(
pErrBuf
,
len
,
pFunc
->
functionName
);
}
}
...
@@ -1133,9 +1133,10 @@ static bool validateStateOper(const SValueNode* pVal) {
...
@@ -1133,9 +1133,10 @@ static bool validateStateOper(const SValueNode* pVal) {
if
(
TSDB_DATA_TYPE_BINARY
!=
pVal
->
node
.
resType
.
type
)
{
if
(
TSDB_DATA_TYPE_BINARY
!=
pVal
->
node
.
resType
.
type
)
{
return
false
;
return
false
;
}
}
return
(
0
==
strncasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"GT"
,
2
)
||
0
==
strncasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"GE"
,
2
)
||
return
(
0
==
strncasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"LT"
,
2
)
||
0
==
strncasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"LE"
,
2
)
||
0
==
strncasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"GT"
,
2
)
||
0
==
strncasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"GE"
,
2
)
||
0
==
strncasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"EQ"
,
2
)
||
0
==
strncasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"NE"
,
2
));
0
==
strncasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"LT"
,
2
)
||
0
==
strncasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"LE"
,
2
)
||
0
==
strncasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"EQ"
,
2
)
||
0
==
strncasecmp
(
varDataVal
(
pVal
->
datum
.
p
),
"NE"
,
2
));
}
}
static
int32_t
translateStateCount
(
SFunctionNode
*
pFunc
,
char
*
pErrBuf
,
int32_t
len
)
{
static
int32_t
translateStateCount
(
SFunctionNode
*
pFunc
,
char
*
pErrBuf
,
int32_t
len
)
{
...
@@ -1348,7 +1349,8 @@ static int32_t translateTail(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
...
@@ -1348,7 +1349,8 @@ static int32_t translateTail(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
SValueNode
*
pValue
=
(
SValueNode
*
)
pParamNode
;
SValueNode
*
pValue
=
(
SValueNode
*
)
pParamNode
;
if
(
pValue
->
datum
.
i
<
((
i
>
1
)
?
0
:
1
)
||
pValue
->
datum
.
i
>
100
)
{
if
((
IS_SIGNED_NUMERIC_TYPE
(
pValue
->
node
.
resType
.
type
)
?
pValue
->
datum
.
i
:
pValue
->
datum
.
u
)
<
((
i
>
1
)
?
0
:
1
)
||
(
IS_SIGNED_NUMERIC_TYPE
(
pValue
->
node
.
resType
.
type
)
?
pValue
->
datum
.
i
:
pValue
->
datum
.
u
)
>
100
)
{
return
buildFuncErrMsg
(
pErrBuf
,
len
,
TSDB_CODE_FUNC_FUNTION_ERROR
,
return
buildFuncErrMsg
(
pErrBuf
,
len
,
TSDB_CODE_FUNC_FUNTION_ERROR
,
"TAIL function second parameter should be in range [1, 100], "
"TAIL function second parameter should be in range [1, 100], "
"third parameter should be in range [0, 100]"
);
"third parameter should be in range [0, 100]"
);
...
...
source/libs/function/src/builtinsimpl.c
浏览文件 @
72bd7798
...
@@ -80,7 +80,7 @@ typedef struct STopBotRes {
...
@@ -80,7 +80,7 @@ typedef struct STopBotRes {
}
STopBotRes
;
}
STopBotRes
;
typedef
struct
SFirstLastRes
{
typedef
struct
SFirstLastRes
{
bool
hasResult
;
bool
hasResult
;
// used for last_row function only, isNullRes in SResultRowEntry can not be passed to downstream.So,
// used for last_row function only, isNullRes in SResultRowEntry can not be passed to downstream.So,
// this attribute is required
// this attribute is required
bool
isNull
;
bool
isNull
;
...
@@ -2380,7 +2380,8 @@ int32_t percentileFunction(SqlFunctionCtx* pCtx) {
...
@@ -2380,7 +2380,8 @@ int32_t percentileFunction(SqlFunctionCtx* pCtx) {
int32_t
percentileFinalize
(
SqlFunctionCtx
*
pCtx
,
SSDataBlock
*
pBlock
)
{
int32_t
percentileFinalize
(
SqlFunctionCtx
*
pCtx
,
SSDataBlock
*
pBlock
)
{
SVariant
*
pVal
=
&
pCtx
->
param
[
1
].
param
;
SVariant
*
pVal
=
&
pCtx
->
param
[
1
].
param
;
double
v
=
(
pVal
->
nType
==
TSDB_DATA_TYPE_BIGINT
)
?
pVal
->
i
:
pVal
->
d
;
double
v
=
(
IS_SIGNED_NUMERIC_TYPE
(
pVal
->
nType
)
?
pVal
->
i
:
(
IS_UNSIGNED_NUMERIC_TYPE
(
pVal
->
nType
)
?
pVal
->
u
:
pVal
->
d
));
SResultRowEntryInfo
*
pResInfo
=
GET_RES_INFO
(
pCtx
);
SResultRowEntryInfo
*
pResInfo
=
GET_RES_INFO
(
pCtx
);
SPercentileInfo
*
ppInfo
=
(
SPercentileInfo
*
)
GET_ROWCELL_INTERBUF
(
pResInfo
);
SPercentileInfo
*
ppInfo
=
(
SPercentileInfo
*
)
GET_ROWCELL_INTERBUF
(
pResInfo
);
...
@@ -2439,7 +2440,8 @@ bool apercentileFunctionSetup(SqlFunctionCtx* pCtx, SResultRowEntryInfo* pResult
...
@@ -2439,7 +2440,8 @@ bool apercentileFunctionSetup(SqlFunctionCtx* pCtx, SResultRowEntryInfo* pResult
SAPercentileInfo
*
pInfo
=
GET_ROWCELL_INTERBUF
(
pResultInfo
);
SAPercentileInfo
*
pInfo
=
GET_ROWCELL_INTERBUF
(
pResultInfo
);
SVariant
*
pVal
=
&
pCtx
->
param
[
1
].
param
;
SVariant
*
pVal
=
&
pCtx
->
param
[
1
].
param
;
pInfo
->
percent
=
(
pVal
->
nType
==
TSDB_DATA_TYPE_BIGINT
)
?
pVal
->
i
:
pVal
->
d
;
pInfo
->
percent
=
(
IS_SIGNED_NUMERIC_TYPE
(
pVal
->
nType
)
?
pVal
->
i
:
(
IS_UNSIGNED_NUMERIC_TYPE
(
pVal
->
nType
)
?
pVal
->
u
:
pVal
->
d
));
if
(
pCtx
->
numOfParams
==
2
)
{
if
(
pCtx
->
numOfParams
==
2
)
{
pInfo
->
algo
=
APERCT_ALGO_DEFAULT
;
pInfo
->
algo
=
APERCT_ALGO_DEFAULT
;
...
@@ -2640,9 +2642,7 @@ int32_t apercentileCombine(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx)
...
@@ -2640,9 +2642,7 @@ int32_t apercentileCombine(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx)
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
getFirstLastInfoSize
(
int32_t
resBytes
)
{
int32_t
getFirstLastInfoSize
(
int32_t
resBytes
)
{
return
sizeof
(
SFirstLastRes
)
+
resBytes
;
}
return
sizeof
(
SFirstLastRes
)
+
resBytes
;
}
bool
getFirstLastFuncEnv
(
SFunctionNode
*
pFunc
,
SFuncExecEnv
*
pEnv
)
{
bool
getFirstLastFuncEnv
(
SFunctionNode
*
pFunc
,
SFuncExecEnv
*
pEnv
)
{
SColumnNode
*
pNode
=
(
SColumnNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
0
);
SColumnNode
*
pNode
=
(
SColumnNode
*
)
nodesListGetNode
(
pFunc
->
pParameterList
,
0
);
...
@@ -2968,7 +2968,7 @@ int32_t firstLastPartialFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
...
@@ -2968,7 +2968,7 @@ int32_t firstLastPartialFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
return
1
;
return
1
;
}
}
//todo rewrite:
//
todo rewrite:
int32_t
lastCombine
(
SqlFunctionCtx
*
pDestCtx
,
SqlFunctionCtx
*
pSourceCtx
)
{
int32_t
lastCombine
(
SqlFunctionCtx
*
pDestCtx
,
SqlFunctionCtx
*
pSourceCtx
)
{
SResultRowEntryInfo
*
pDResInfo
=
GET_RES_INFO
(
pDestCtx
);
SResultRowEntryInfo
*
pDResInfo
=
GET_RES_INFO
(
pDestCtx
);
char
*
pDBuf
=
GET_ROWCELL_INTERBUF
(
pDResInfo
);
char
*
pDBuf
=
GET_ROWCELL_INTERBUF
(
pDResInfo
);
...
@@ -2986,7 +2986,7 @@ int32_t lastCombine(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx) {
...
@@ -2986,7 +2986,7 @@ int32_t lastCombine(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
void
doSaveLastrow
(
SqlFunctionCtx
*
pCtx
,
char
*
pData
,
int32_t
rowIndex
,
int64_t
cts
,
SFirstLastRes
*
pInfo
)
{
static
void
doSaveLastrow
(
SqlFunctionCtx
*
pCtx
,
char
*
pData
,
int32_t
rowIndex
,
int64_t
cts
,
SFirstLastRes
*
pInfo
)
{
SInputColumnInfoData
*
pInput
=
&
pCtx
->
input
;
SInputColumnInfoData
*
pInput
=
&
pCtx
->
input
;
SColumnInfoData
*
pInputCol
=
pInput
->
pData
[
0
];
SColumnInfoData
*
pInputCol
=
pInput
->
pData
[
0
];
...
...
source/libs/nodes/src/nodesCodeFuncs.c
浏览文件 @
72bd7798
...
@@ -159,6 +159,8 @@ const char* nodesNodeName(ENodeType type) {
...
@@ -159,6 +159,8 @@ const char* nodesNodeName(ENodeType type) {
return
"ShowStreamsStmt"
;
return
"ShowStreamsStmt"
;
case
QUERY_NODE_SHOW_TABLES_STMT
:
case
QUERY_NODE_SHOW_TABLES_STMT
:
return
"ShowTablesStmt"
;
return
"ShowTablesStmt"
;
case
QUERY_NODE_SHOW_TAGS_STMT
:
return
"ShowTagsStmt"
;
case
QUERY_NODE_SHOW_USERS_STMT
:
case
QUERY_NODE_SHOW_USERS_STMT
:
return
"ShowUsersStmt"
;
return
"ShowUsersStmt"
;
case
QUERY_NODE_SHOW_LICENCE_STMT
:
case
QUERY_NODE_SHOW_LICENCE_STMT
:
...
@@ -4295,6 +4297,7 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
...
@@ -4295,6 +4297,7 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
return
alterDnodeStmtToJson
(
pObj
,
pJson
);
return
alterDnodeStmtToJson
(
pObj
,
pJson
);
case
QUERY_NODE_SHOW_DATABASES_STMT
:
case
QUERY_NODE_SHOW_DATABASES_STMT
:
case
QUERY_NODE_SHOW_TABLES_STMT
:
case
QUERY_NODE_SHOW_TABLES_STMT
:
case
QUERY_NODE_SHOW_TAGS_STMT
:
break
;
break
;
case
QUERY_NODE_CREATE_TOPIC_STMT
:
case
QUERY_NODE_CREATE_TOPIC_STMT
:
return
createTopicStmtToJson
(
pObj
,
pJson
);
return
createTopicStmtToJson
(
pObj
,
pJson
);
...
...
source/libs/nodes/src/nodesUtilFuncs.c
浏览文件 @
72bd7798
...
@@ -216,6 +216,7 @@ SNode* nodesMakeNode(ENodeType type) {
...
@@ -216,6 +216,7 @@ SNode* nodesMakeNode(ENodeType type) {
case
QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT
:
case
QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT
:
case
QUERY_NODE_SHOW_TRANSACTIONS_STMT
:
case
QUERY_NODE_SHOW_TRANSACTIONS_STMT
:
case
QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT
:
case
QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT
:
case
QUERY_NODE_SHOW_TAGS_STMT
:
return
makeNode
(
type
,
sizeof
(
SShowStmt
));
return
makeNode
(
type
,
sizeof
(
SShowStmt
));
case
QUERY_NODE_SHOW_DNODE_VARIABLES_STMT
:
case
QUERY_NODE_SHOW_DNODE_VARIABLES_STMT
:
return
makeNode
(
type
,
sizeof
(
SShowDnodeVariablesStmt
));
return
makeNode
(
type
,
sizeof
(
SShowDnodeVariablesStmt
));
...
@@ -678,7 +679,8 @@ void nodesDestroyNode(SNode* pNode) {
...
@@ -678,7 +679,8 @@ void nodesDestroyNode(SNode* pNode) {
case
QUERY_NODE_SHOW_VARIABLES_STMT
:
case
QUERY_NODE_SHOW_VARIABLES_STMT
:
case
QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT
:
case
QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT
:
case
QUERY_NODE_SHOW_TRANSACTIONS_STMT
:
case
QUERY_NODE_SHOW_TRANSACTIONS_STMT
:
case
QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT
:
{
case
QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT
:
case
QUERY_NODE_SHOW_TAGS_STMT
:
{
SShowStmt
*
pStmt
=
(
SShowStmt
*
)
pNode
;
SShowStmt
*
pStmt
=
(
SShowStmt
*
)
pNode
;
nodesDestroyNode
(
pStmt
->
pDbName
);
nodesDestroyNode
(
pStmt
->
pDbName
);
nodesDestroyNode
(
pStmt
->
pTbName
);
nodesDestroyNode
(
pStmt
->
pTbName
);
...
...
source/libs/parser/inc/sql.y
浏览文件 @
72bd7798
...
@@ -82,7 +82,6 @@ alter_account_option ::= STATE literal.
...
@@ -82,7 +82,6 @@ alter_account_option ::= STATE literal.
/************************************************ create/alter/drop user **********************************************/
/************************************************ create/alter/drop user **********************************************/
cmd ::= CREATE USER user_name(A) PASS NK_STRING(B) sysinfo_opt(C). { pCxt->pRootNode = createCreateUserStmt(pCxt, &A, &B, C); }
cmd ::= CREATE USER user_name(A) PASS NK_STRING(B) sysinfo_opt(C). { pCxt->pRootNode = createCreateUserStmt(pCxt, &A, &B, C); }
cmd ::= ALTER USER user_name(A) PASS NK_STRING(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_PASSWD, &B); }
cmd ::= ALTER USER user_name(A) PASS NK_STRING(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_PASSWD, &B); }
//cmd ::= ALTER USER user_name(A) PRIVILEGE NK_STRING(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_PRIVILEGES, &B); }
cmd ::= ALTER USER user_name(A) ENABLE NK_INTEGER(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_ENABLE, &B); }
cmd ::= ALTER USER user_name(A) ENABLE NK_INTEGER(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_ENABLE, &B); }
cmd ::= ALTER USER user_name(A) SYSINFO NK_INTEGER(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_SYSINFO, &B); }
cmd ::= ALTER USER user_name(A) SYSINFO NK_INTEGER(B). { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, TSDB_ALTER_USER_SYSINFO, &B); }
cmd ::= DROP USER user_name(A). { pCxt->pRootNode = createDropUserStmt(pCxt, &A); }
cmd ::= DROP USER user_name(A). { pCxt->pRootNode = createDropUserStmt(pCxt, &A); }
...
@@ -198,15 +197,15 @@ alter_db_options(A) ::= alter_db_options(B) alter_db_option(C).
...
@@ -198,15 +197,15 @@ alter_db_options(A) ::= alter_db_options(B) alter_db_option(C).
%type alter_db_option { SAlterOption }
%type alter_db_option { SAlterOption }
%destructor alter_db_option { }
%destructor alter_db_option { }
alter_db_option(A) ::= BUFFER NK_INTEGER(B). { A.type = DB_OPTION_BUFFER; A.val = B; }
//
alter_db_option(A) ::= BUFFER NK_INTEGER(B). { A.type = DB_OPTION_BUFFER; A.val = B; }
alter_db_option(A) ::= CACHEMODEL NK_STRING(B). { A.type = DB_OPTION_CACHEMODEL; A.val = B; }
alter_db_option(A) ::= CACHEMODEL NK_STRING(B). { A.type = DB_OPTION_CACHEMODEL; A.val = B; }
alter_db_option(A) ::= CACHESIZE NK_INTEGER(B). { A.type = DB_OPTION_CACHESIZE; A.val = B; }
alter_db_option(A) ::= CACHESIZE NK_INTEGER(B). { A.type = DB_OPTION_CACHESIZE; A.val = B; }
alter_db_option(A) ::= FSYNC NK_INTEGER(B). { A.type = DB_OPTION_FSYNC; A.val = B; }
alter_db_option(A) ::= FSYNC NK_INTEGER(B). { A.type = DB_OPTION_FSYNC; A.val = B; }
alter_db_option(A) ::= KEEP integer_list(B). { A.type = DB_OPTION_KEEP; A.pList = B; }
alter_db_option(A) ::= KEEP integer_list(B). { A.type = DB_OPTION_KEEP; A.pList = B; }
alter_db_option(A) ::= KEEP variable_list(B). { A.type = DB_OPTION_KEEP; A.pList = B; }
alter_db_option(A) ::= KEEP variable_list(B). { A.type = DB_OPTION_KEEP; A.pList = B; }
alter_db_option(A) ::= PAGES NK_INTEGER(B). { A.type = DB_OPTION_PAGES; A.val = B; }
//
alter_db_option(A) ::= PAGES NK_INTEGER(B). { A.type = DB_OPTION_PAGES; A.val = B; }
alter_db_option(A) ::= REPLICA NK_INTEGER(B). { A.type = DB_OPTION_REPLICA; A.val = B; }
//
alter_db_option(A) ::= REPLICA NK_INTEGER(B). { A.type = DB_OPTION_REPLICA; A.val = B; }
alter_db_option(A) ::= STRICT NK_INTEGER(B).
{ A.type = DB_OPTION_STRICT; A.val = B; }
//alter_db_option(A) ::= STRICT NK_STRING(B).
{ A.type = DB_OPTION_STRICT; A.val = B; }
alter_db_option(A) ::= WAL NK_INTEGER(B). { A.type = DB_OPTION_WAL; A.val = B; }
alter_db_option(A) ::= WAL NK_INTEGER(B). { A.type = DB_OPTION_WAL; A.val = B; }
%type integer_list { SNodeList* }
%type integer_list { SNodeList* }
...
@@ -394,6 +393,7 @@ cmd ::= SHOW TRANSACTIONS.
...
@@ -394,6 +393,7 @@ cmd ::= SHOW TRANSACTIONS.
cmd ::= SHOW TABLE DISTRIBUTED full_table_name(A). { pCxt->pRootNode = createShowTableDistributedStmt(pCxt, A); }
cmd ::= SHOW TABLE DISTRIBUTED full_table_name(A). { pCxt->pRootNode = createShowTableDistributedStmt(pCxt, A); }
cmd ::= SHOW CONSUMERS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); }
cmd ::= SHOW CONSUMERS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); }
cmd ::= SHOW SUBSCRIPTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); }
cmd ::= SHOW SUBSCRIPTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); }
cmd ::= SHOW TAGS FROM table_name_cond(A) from_db_opt(B). { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, B, A, OP_TYPE_EQUAL); }
db_name_cond_opt(A) ::= . { A = createDefaultDatabaseCondValue(pCxt); }
db_name_cond_opt(A) ::= . { A = createDefaultDatabaseCondValue(pCxt); }
db_name_cond_opt(A) ::= db_name(B) NK_DOT. { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
db_name_cond_opt(A) ::= db_name(B) NK_DOT. { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
...
@@ -525,7 +525,7 @@ cmd ::= INSERT INTO full_table_name(A)
...
@@ -525,7 +525,7 @@ cmd ::= INSERT INTO full_table_name(A)
cmd ::= INSERT INTO full_table_name(A) query_expression(B). { pCxt->pRootNode = createInsertStmt(pCxt, A, NULL, B); }
cmd ::= INSERT INTO full_table_name(A) query_expression(B). { pCxt->pRootNode = createInsertStmt(pCxt, A, NULL, B); }
/************************************************ literal *************************************************************/
/************************************************ literal *************************************************************/
literal(A) ::= NK_INTEGER(B). { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B)); }
literal(A) ::= NK_INTEGER(B). { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_
U
BIGINT, &B)); }
literal(A) ::= NK_FLOAT(B). { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B)); }
literal(A) ::= NK_FLOAT(B). { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B)); }
literal(A) ::= NK_STRING(B). { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B)); }
literal(A) ::= NK_STRING(B). { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B)); }
literal(A) ::= NK_BOOL(B). { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B)); }
literal(A) ::= NK_BOOL(B). { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B)); }
...
@@ -536,8 +536,8 @@ literal(A) ::= NK_QUESTION(B).
...
@@ -536,8 +536,8 @@ literal(A) ::= NK_QUESTION(B).
duration_literal(A) ::= NK_VARIABLE(B). { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
duration_literal(A) ::= NK_VARIABLE(B). { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
signed(A) ::= NK_INTEGER(B). { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
signed(A) ::= NK_INTEGER(B). { A = createValueNode(pCxt, TSDB_DATA_TYPE_
U
BIGINT, &B); }
signed(A) ::= NK_PLUS NK_INTEGER(B). { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
signed(A) ::= NK_PLUS NK_INTEGER(B). { A = createValueNode(pCxt, TSDB_DATA_TYPE_
U
BIGINT, &B); }
signed(A) ::= NK_MINUS(B) NK_INTEGER(C). {
signed(A) ::= NK_MINUS(B) NK_INTEGER(C). {
SToken t = B;
SToken t = B;
t.n = (C.z + C.n) - B.z;
t.n = (C.z + C.n) - B.z;
...
...
source/libs/parser/src/parAstCreater.c
浏览文件 @
72bd7798
...
@@ -393,9 +393,16 @@ SNode* createOperatorNode(SAstCreateContext* pCxt, EOperatorType type, SNode* pL
...
@@ -393,9 +393,16 @@ SNode* createOperatorNode(SAstCreateContext* pCxt, EOperatorType type, SNode* pL
SValueNode
*
pVal
=
(
SValueNode
*
)
pLeft
;
SValueNode
*
pVal
=
(
SValueNode
*
)
pLeft
;
char
*
pNewLiteral
=
taosMemoryCalloc
(
1
,
strlen
(
pVal
->
literal
)
+
2
);
char
*
pNewLiteral
=
taosMemoryCalloc
(
1
,
strlen
(
pVal
->
literal
)
+
2
);
CHECK_OUT_OF_MEM
(
pNewLiteral
);
CHECK_OUT_OF_MEM
(
pNewLiteral
);
sprintf
(
pNewLiteral
,
"-%s"
,
pVal
->
literal
);
if
(
'+'
==
pVal
->
literal
[
0
])
{
sprintf
(
pNewLiteral
,
"-%s"
,
pVal
->
literal
+
1
);
}
else
if
(
'-'
==
pVal
->
literal
[
0
])
{
sprintf
(
pNewLiteral
,
"%s"
,
pVal
->
literal
+
1
);
}
else
{
sprintf
(
pNewLiteral
,
"-%s"
,
pVal
->
literal
);
}
taosMemoryFree
(
pVal
->
literal
);
taosMemoryFree
(
pVal
->
literal
);
pVal
->
literal
=
pNewLiteral
;
pVal
->
literal
=
pNewLiteral
;
pVal
->
node
.
resType
.
type
=
TSDB_DATA_TYPE_BIGINT
;
return
pLeft
;
return
pLeft
;
}
}
SOperatorNode
*
op
=
(
SOperatorNode
*
)
nodesMakeNode
(
QUERY_NODE_OPERATOR
);
SOperatorNode
*
op
=
(
SOperatorNode
*
)
nodesMakeNode
(
QUERY_NODE_OPERATOR
);
...
@@ -1343,7 +1350,11 @@ SNode* createAlterDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode, const
...
@@ -1343,7 +1350,11 @@ SNode* createAlterDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode, const
CHECK_PARSER_STATUS
(
pCxt
);
CHECK_PARSER_STATUS
(
pCxt
);
SAlterDnodeStmt
*
pStmt
=
(
SAlterDnodeStmt
*
)
nodesMakeNode
(
QUERY_NODE_ALTER_DNODE_STMT
);
SAlterDnodeStmt
*
pStmt
=
(
SAlterDnodeStmt
*
)
nodesMakeNode
(
QUERY_NODE_ALTER_DNODE_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
CHECK_OUT_OF_MEM
(
pStmt
);
pStmt
->
dnodeId
=
taosStr2Int32
(
pDnode
->
z
,
NULL
,
10
);
if
(
NULL
!=
pDnode
)
{
pStmt
->
dnodeId
=
taosStr2Int32
(
pDnode
->
z
,
NULL
,
10
);
}
else
{
pStmt
->
dnodeId
=
-
1
;
}
trimString
(
pConfig
->
z
,
pConfig
->
n
,
pStmt
->
config
,
sizeof
(
pStmt
->
config
));
trimString
(
pConfig
->
z
,
pConfig
->
n
,
pStmt
->
config
,
sizeof
(
pStmt
->
config
));
if
(
NULL
!=
pValue
)
{
if
(
NULL
!=
pValue
)
{
trimString
(
pValue
->
z
,
pValue
->
n
,
pStmt
->
value
,
sizeof
(
pStmt
->
value
));
trimString
(
pValue
->
z
,
pValue
->
n
,
pStmt
->
value
,
sizeof
(
pStmt
->
value
));
...
...
source/libs/parser/src/parAstParser.c
浏览文件 @
72bd7798
...
@@ -372,8 +372,8 @@ static int32_t collectMetaKeyFromShowTables(SCollectMetaKeyCxt* pCxt, SShowStmt*
...
@@ -372,8 +372,8 @@ static int32_t collectMetaKeyFromShowTables(SCollectMetaKeyCxt* pCxt, SShowStmt*
}
}
static
int32_t
collectMetaKeyFromShowTags
(
SCollectMetaKeyCxt
*
pCxt
,
SShowStmt
*
pStmt
)
{
static
int32_t
collectMetaKeyFromShowTags
(
SCollectMetaKeyCxt
*
pCxt
,
SShowStmt
*
pStmt
)
{
int32_t
code
=
reserveTableMetaInCache
(
pCxt
->
pParseCxt
->
acctId
,
TSDB_INFORMATION_SCHEMA_DB
,
int32_t
code
=
reserveTableMetaInCache
(
pCxt
->
pParseCxt
->
acctId
,
TSDB_INFORMATION_SCHEMA_DB
,
TSDB_INS_TABLE_USER_TAGS
,
TSDB_INS_TABLE_USER_TAGS
,
pCxt
->
pMetaCache
);
pCxt
->
pMetaCache
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
(
NULL
!=
pStmt
->
pDbName
)
{
if
(
NULL
!=
pStmt
->
pDbName
)
{
code
=
reserveDbVgInfoInCache
(
pCxt
->
pParseCxt
->
acctId
,
((
SValueNode
*
)
pStmt
->
pDbName
)
->
literal
,
pCxt
->
pMetaCache
);
code
=
reserveDbVgInfoInCache
(
pCxt
->
pParseCxt
->
acctId
,
((
SValueNode
*
)
pStmt
->
pDbName
)
->
literal
,
pCxt
->
pMetaCache
);
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
72bd7798
此差异已折叠。
点击以展开。
source/libs/parser/src/parUtil.c
浏览文件 @
72bd7798
...
@@ -67,32 +67,8 @@ static char* getSyntaxErrFormat(int32_t errCode) {
...
@@ -67,32 +67,8 @@ static char* getSyntaxErrFormat(int32_t errCode) {
return
"Invalid identifier name: %s"
;
return
"Invalid identifier name: %s"
;
case
TSDB_CODE_PAR_CORRESPONDING_STABLE_ERR
:
case
TSDB_CODE_PAR_CORRESPONDING_STABLE_ERR
:
return
"Corresponding super table not in this db"
;
return
"Corresponding super table not in this db"
;
case
TSDB_CODE_PAR_INVALID_RANGE_OPTION
:
return
"Invalid option %s: %"
PRId64
" valid range: [%d, %d]"
;
case
TSDB_CODE_PAR_INVALID_STR_OPTION
:
return
"Invalid option %s: %s"
;
case
TSDB_CODE_PAR_INVALID_ENUM_OPTION
:
return
"Invalid option %s: %"
PRId64
", only %d, %d allowed"
;
case
TSDB_CODE_PAR_INVALID_KEEP_NUM
:
return
"Invalid number of keep options"
;
case
TSDB_CODE_PAR_INVALID_KEEP_ORDER
:
return
"Invalid keep value, should be keep0 <= keep1 <= keep2"
;
case
TSDB_CODE_PAR_INVALID_KEEP_VALUE
:
return
"Invalid option keep: %"
PRId64
", %"
PRId64
", %"
PRId64
" valid range: [%dm, %dm]"
;
case
TSDB_CODE_PAR_INVALID_COMMENT_OPTION
:
return
"Invalid option comment, length cannot exceed %d"
;
case
TSDB_CODE_PAR_INVALID_F_RANGE_OPTION
:
return
"Invalid option %s: %f valid range: [%d, %d]"
;
case
TSDB_CODE_PAR_INVALID_ROLLUP_OPTION
:
return
"Invalid option rollup: only one function is allowed"
;
case
TSDB_CODE_PAR_INVALID_RETENTIONS_OPTION
:
return
"Invalid option retentions"
;
case
TSDB_CODE_PAR_GROUPBY_WINDOW_COEXIST
:
case
TSDB_CODE_PAR_GROUPBY_WINDOW_COEXIST
:
return
"GROUP BY and WINDOW-clause can't be used together"
;
return
"GROUP BY and WINDOW-clause can't be used together"
;
case
TSDB_CODE_PAR_INVALID_OPTION_UNIT
:
return
"Invalid option %s unit: %c, only %c, %c, %c allowed"
;
case
TSDB_CODE_PAR_INVALID_KEEP_UNIT
:
return
"Invalid option keep unit: %c, only m, h, d allowed"
;
case
TSDB_CODE_PAR_AGG_FUNC_NESTING
:
case
TSDB_CODE_PAR_AGG_FUNC_NESTING
:
return
"Aggregate functions do not support nesting"
;
return
"Aggregate functions do not support nesting"
;
case
TSDB_CODE_PAR_INVALID_STATE_WIN_TYPE
:
case
TSDB_CODE_PAR_INVALID_STATE_WIN_TYPE
:
...
@@ -194,8 +170,6 @@ static char* getSyntaxErrFormat(int32_t errCode) {
...
@@ -194,8 +170,6 @@ static char* getSyntaxErrFormat(int32_t errCode) {
return
"%s function is not supported in stream query"
;
return
"%s function is not supported in stream query"
;
case
TSDB_CODE_PAR_GROUP_BY_NOT_ALLOWED_FUNC
:
case
TSDB_CODE_PAR_GROUP_BY_NOT_ALLOWED_FUNC
:
return
"%s function is not supported in group query"
;
return
"%s function is not supported in group query"
;
case
TSDB_CODE_PAR_INVALID_TABLE_OPTION
:
return
"Invalid option %s"
;
case
TSDB_CODE_PAR_INVALID_INTERP_CLAUSE
:
case
TSDB_CODE_PAR_INVALID_INTERP_CLAUSE
:
return
"Invalid usage of RANGE clause, EVERY clause or FILL clause"
;
return
"Invalid usage of RANGE clause, EVERY clause or FILL clause"
;
case
TSDB_CODE_PAR_NO_VALID_FUNC_IN_WIN
:
case
TSDB_CODE_PAR_NO_VALID_FUNC_IN_WIN
:
...
@@ -389,7 +363,7 @@ int32_t parseJsontoTagData(const char* json, SArray* pTagVals, STag** ppTag, voi
...
@@ -389,7 +363,7 @@ int32_t parseJsontoTagData(const char* json, SArray* pTagVals, STag** ppTag, voi
continue
;
continue
;
}
}
STagVal
val
=
{
0
};
STagVal
val
=
{
0
};
// strcpy(val.colName, colName);
// strcpy(val.colName, colName);
val
.
pKey
=
jsonKey
;
val
.
pKey
=
jsonKey
;
taosHashPut
(
keyHash
,
jsonKey
,
keyLen
,
&
keyLen
,
taosHashPut
(
keyHash
,
jsonKey
,
keyLen
,
&
keyLen
,
CHAR_BYTES
);
// add key to hash to remove dumplicate, value is useless
CHAR_BYTES
);
// add key to hash to remove dumplicate, value is useless
...
...
source/libs/parser/src/sql.c
浏览文件 @
72bd7798
此差异已折叠。
点击以展开。
source/libs/parser/test/mockCatalog.cpp
浏览文件 @
72bd7798
...
@@ -328,46 +328,6 @@ void initMetaDataEnv() {
...
@@ -328,46 +328,6 @@ void initMetaDataEnv() {
stub
.
set
(
catalogGetTableIndex
,
__catalogGetTableIndex
);
stub
.
set
(
catalogGetTableIndex
,
__catalogGetTableIndex
);
stub
.
set
(
catalogGetDnodeList
,
__catalogGetDnodeList
);
stub
.
set
(
catalogGetDnodeList
,
__catalogGetDnodeList
);
stub
.
set
(
catalogRefreshGetTableCfg
,
__catalogRefreshGetTableCfg
);
stub
.
set
(
catalogRefreshGetTableCfg
,
__catalogRefreshGetTableCfg
);
// {
// AddrAny any("libcatalog.so");
// std::map<std::string,void*> result;
// any.get_global_func_addr_dynsym("^catalogGetHandle$", result);
// for (const auto& f : result) {
// stub.set(f.second, __catalogGetHandle);
// }
// }
// {
// AddrAny any("libcatalog.so");
// std::map<std::string,void*> result;
// any.get_global_func_addr_dynsym("^catalogGetTableMeta$", result);
// for (const auto& f : result) {
// stub.set(f.second, __catalogGetTableMeta);
// }
// }
// {
// AddrAny any("libcatalog.so");
// std::map<std::string,void*> result;
// any.get_global_func_addr_dynsym("^catalogGetTableHashVgroup$", result);
// for (const auto& f : result) {
// stub.set(f.second, __catalogGetTableHashVgroup);
// }
// }
// {
// AddrAny any("libcatalog.so");
// std::map<std::string,void*> result;
// any.get_global_func_addr_dynsym("^catalogGetTableDistVgInfo$", result);
// for (const auto& f : result) {
// stub.set(f.second, __catalogGetTableDistVgInfo);
// }
// }
// {
// AddrAny any("libcatalog.so");
// std::map<std::string,void*> result;
// any.get_global_func_addr_dynsym("^catalogGetDBVgVersion$", result);
// for (const auto& f : result) {
// stub.set(f.second, __catalogGetDBVgVersion);
// }
// }
}
}
void
generateMetaData
()
{
void
generateMetaData
()
{
...
...
source/libs/parser/test/parInitialATest.cpp
浏览文件 @
72bd7798
...
@@ -27,22 +27,217 @@ TEST_F(ParserInitialATest, alterAccount) {
...
@@ -27,22 +27,217 @@ TEST_F(ParserInitialATest, alterAccount) {
run
(
"ALTER ACCOUNT ac_wxy PASS '123456'"
,
TSDB_CODE_PAR_EXPRIE_STATEMENT
,
PARSER_STAGE_PARSE
);
run
(
"ALTER ACCOUNT ac_wxy PASS '123456'"
,
TSDB_CODE_PAR_EXPRIE_STATEMENT
,
PARSER_STAGE_PARSE
);
}
}
/*
* ALTER DNODE dnode_id 'config' ['value']
* ALTER ALL DNODES 'config' ['value']
*/
TEST_F
(
ParserInitialATest
,
alterDnode
)
{
TEST_F
(
ParserInitialATest
,
alterDnode
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
SMCfgDnodeReq
expect
=
{
0
};
auto
clearCfgDnodeReq
=
[
&
]()
{
memset
(
&
expect
,
0
,
sizeof
(
SMCfgDnodeReq
));
};
auto
setCfgDnodeReq
=
[
&
](
int32_t
dnodeId
,
const
char
*
pConfig
,
const
char
*
pValue
=
nullptr
)
{
expect
.
dnodeId
=
dnodeId
;
strcpy
(
expect
.
config
,
pConfig
);
if
(
nullptr
!=
pValue
)
{
strcpy
(
expect
.
value
,
pValue
);
}
};
setCheckDdlFunc
([
&
](
const
SQuery
*
pQuery
,
ParserStage
stage
)
{
ASSERT_EQ
(
nodeType
(
pQuery
->
pRoot
),
QUERY_NODE_ALTER_DNODE_STMT
);
SMCfgDnodeReq
req
=
{
0
};
ASSERT_EQ
(
tDeserializeSMCfgDnodeReq
(
pQuery
->
pCmdMsg
->
pMsg
,
pQuery
->
pCmdMsg
->
msgLen
,
&
req
),
TSDB_CODE_SUCCESS
);
ASSERT_EQ
(
req
.
dnodeId
,
expect
.
dnodeId
);
ASSERT_EQ
(
std
::
string
(
req
.
config
),
std
::
string
(
expect
.
config
));
ASSERT_EQ
(
std
::
string
(
req
.
value
),
std
::
string
(
expect
.
value
));
});
setCfgDnodeReq
(
1
,
"resetLog"
);
run
(
"ALTER DNODE 1 'resetLog'"
);
run
(
"ALTER DNODE 1 'resetLog'"
);
clearCfgDnodeReq
();
setCfgDnodeReq
(
2
,
"debugFlag"
,
"134"
);
run
(
"ALTER DNODE 2 'debugFlag' '134'"
);
clearCfgDnodeReq
();
run
(
"ALTER DNODE 1 'debugFlag' '134'"
);
setCfgDnodeReq
(
-
1
,
"resetQueryCache"
);
run
(
"ALTER ALL DNODES 'resetQueryCache'"
);
clearCfgDnodeReq
();
setCfgDnodeReq
(
-
1
,
"qDebugflag"
,
"135"
);
run
(
"ALTER ALL DNODES 'qDebugflag' '135'"
);
clearCfgDnodeReq
();
}
}
/*
* ALTER DATABASE db_name [alter_database_options]
*
* alter_database_options:
* alter_database_option ...
*
* alter_database_option: {
* BUFFER int_value -- todo: range [3, 16384], default 96, unit MB
* | CACHEMODEL {'none' | 'last_row' | 'last_value' | 'both'} -- default 'none'
* | CACHESIZE int_value -- range [1, 65536], default 1, unit MB
* | FSYNC int_value -- rang [0, 180000], default 3000, unit ms
* | KEEP {int_value | duration_value} -- rang [1, 365000], default 3650, unit day
* | PAGES int_value -- todo: rang [64, +oo), default 256, unit page
* | REPLICA int_value -- todo: enum 1, 3, default 1, unit replica
* | STRICT {'off' | 'on'} -- todo: default 'off'
* | WAL int_value -- enum 1, 2, default 1
* }
*/
TEST_F
(
ParserInitialATest
,
alterDatabase
)
{
TEST_F
(
ParserInitialATest
,
alterDatabase
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"ALTER DATABASE test CACHEMODEL 'last_row' FSYNC 200 WAL 1"
);
SAlterDbReq
expect
=
{
0
};
auto
clearAlterDbReq
=
[
&
]()
{
memset
(
&
expect
,
0
,
sizeof
(
SAlterDbReq
));
};
auto
initAlterDb
=
[
&
](
const
char
*
pDb
)
{
snprintf
(
expect
.
db
,
sizeof
(
expect
.
db
),
"0.%s"
,
pDb
);
expect
.
buffer
=
-
1
;
expect
.
pageSize
=
-
1
;
expect
.
pages
=
-
1
;
expect
.
daysPerFile
=
-
1
;
expect
.
daysToKeep0
=
-
1
;
expect
.
daysToKeep1
=
-
1
;
expect
.
daysToKeep2
=
-
1
;
expect
.
fsyncPeriod
=
-
1
;
expect
.
walLevel
=
-
1
;
expect
.
strict
=
-
1
;
expect
.
cacheLast
=
-
1
;
expect
.
cacheLastSize
=
-
1
;
expect
.
replications
=
-
1
;
};
auto
setAlterDbBuffer
=
[
&
](
int32_t
buffer
)
{
expect
.
buffer
=
buffer
;
};
auto
setAlterDbPageSize
=
[
&
](
int32_t
pageSize
)
{
expect
.
pageSize
=
pageSize
;
};
auto
setAlterDbPages
=
[
&
](
int32_t
pages
)
{
expect
.
pages
=
pages
;
};
auto
setAlterDbCacheSize
=
[
&
](
int32_t
cacheSize
)
{
expect
.
cacheLastSize
=
cacheSize
;
};
auto
setAlterDbDuration
=
[
&
](
int32_t
duration
)
{
expect
.
daysPerFile
=
duration
;
};
auto
setAlterDbKeep
=
[
&
](
int32_t
daysToKeep0
,
int32_t
daysToKeep1
=
-
1
,
int32_t
daysToKeep2
=
-
1
)
{
expect
.
daysToKeep0
=
daysToKeep0
;
expect
.
daysToKeep1
=
(
-
1
==
daysToKeep1
?
expect
.
daysToKeep0
:
daysToKeep1
);
expect
.
daysToKeep2
=
(
-
1
==
daysToKeep1
?
expect
.
daysToKeep1
:
daysToKeep2
);
};
auto
setAlterDbFsync
=
[
&
](
int32_t
fsync
)
{
expect
.
fsyncPeriod
=
fsync
;
};
auto
setAlterDbWal
=
[
&
](
int8_t
wal
)
{
expect
.
walLevel
=
wal
;
};
auto
setAlterDbStrict
=
[
&
](
int8_t
strict
)
{
expect
.
strict
=
strict
;
};
auto
setAlterDbCacheModel
=
[
&
](
int8_t
cacheModel
)
{
expect
.
cacheLast
=
cacheModel
;
};
auto
setAlterDbReplica
=
[
&
](
int8_t
replications
)
{
expect
.
replications
=
replications
;
};
setCheckDdlFunc
([
&
](
const
SQuery
*
pQuery
,
ParserStage
stage
)
{
ASSERT_EQ
(
nodeType
(
pQuery
->
pRoot
),
QUERY_NODE_ALTER_DATABASE_STMT
);
SAlterDbReq
req
=
{
0
};
ASSERT_EQ
(
tDeserializeSAlterDbReq
(
pQuery
->
pCmdMsg
->
pMsg
,
pQuery
->
pCmdMsg
->
msgLen
,
&
req
),
TSDB_CODE_SUCCESS
);
ASSERT_EQ
(
std
::
string
(
req
.
db
),
std
::
string
(
expect
.
db
));
ASSERT_EQ
(
req
.
buffer
,
expect
.
buffer
);
ASSERT_EQ
(
req
.
pageSize
,
expect
.
pageSize
);
ASSERT_EQ
(
req
.
pages
,
expect
.
pages
);
ASSERT_EQ
(
req
.
cacheLastSize
,
expect
.
cacheLastSize
);
ASSERT_EQ
(
req
.
daysToKeep0
,
expect
.
daysToKeep0
);
ASSERT_EQ
(
req
.
daysToKeep1
,
expect
.
daysToKeep1
);
ASSERT_EQ
(
req
.
daysToKeep2
,
expect
.
daysToKeep2
);
ASSERT_EQ
(
req
.
fsyncPeriod
,
expect
.
fsyncPeriod
);
ASSERT_EQ
(
req
.
walLevel
,
expect
.
walLevel
);
ASSERT_EQ
(
req
.
strict
,
expect
.
strict
);
ASSERT_EQ
(
req
.
cacheLast
,
expect
.
cacheLast
);
ASSERT_EQ
(
req
.
replications
,
expect
.
replications
);
});
const
int32_t
MINUTE_PER_DAY
=
MILLISECOND_PER_DAY
/
MILLISECOND_PER_MINUTE
;
const
int32_t
MINUTE_PER_HOUR
=
MILLISECOND_PER_HOUR
/
MILLISECOND_PER_MINUTE
;
initAlterDb
(
"test"
);
setAlterDbCacheSize
(
32
);
setAlterDbKeep
(
10
*
MINUTE_PER_DAY
);
setAlterDbFsync
(
200
);
setAlterDbWal
(
1
);
setAlterDbCacheModel
(
TSDB_CACHE_MODEL_LAST_ROW
);
run
(
"ALTER DATABASE test CACHEMODEL 'last_row' CACHESIZE 32 FSYNC 200 KEEP 10 WAL 1"
);
clearAlterDbReq
();
initAlterDb
(
"test"
);
setAlterDbCacheModel
(
TSDB_CACHE_MODEL_NONE
);
run
(
"ALTER DATABASE test CACHEMODEL 'none'"
);
setAlterDbCacheModel
(
TSDB_CACHE_MODEL_LAST_ROW
);
run
(
"ALTER DATABASE test CACHEMODEL 'last_row'"
);
setAlterDbCacheModel
(
TSDB_CACHE_MODEL_LAST_VALUE
);
run
(
"ALTER DATABASE test CACHEMODEL 'last_value'"
);
setAlterDbCacheModel
(
TSDB_CACHE_MODEL_BOTH
);
run
(
"ALTER DATABASE test CACHEMODEL 'both'"
);
clearAlterDbReq
();
initAlterDb
(
"test"
);
setAlterDbCacheSize
(
1
);
run
(
"ALTER DATABASE test CACHESIZE 1"
);
setAlterDbCacheSize
(
64
);
run
(
"ALTER DATABASE test CACHESIZE 64"
);
setAlterDbCacheSize
(
65536
);
run
(
"ALTER DATABASE test CACHESIZE 65536"
);
clearAlterDbReq
();
initAlterDb
(
"test"
);
setAlterDbFsync
(
0
);
run
(
"ALTER DATABASE test FSYNC 0"
);
setAlterDbFsync
(
1000
);
run
(
"ALTER DATABASE test FSYNC 1000"
);
setAlterDbFsync
(
180000
);
run
(
"ALTER DATABASE test FSYNC 180000"
);
clearAlterDbReq
();
initAlterDb
(
"test"
);
setAlterDbKeep
(
1
*
MINUTE_PER_DAY
);
run
(
"ALTER DATABASE test KEEP 1"
);
setAlterDbKeep
(
30
*
MINUTE_PER_DAY
);
run
(
"ALTER DATABASE test KEEP 30"
);
setAlterDbKeep
(
365000
*
MINUTE_PER_DAY
);
run
(
"ALTER DATABASE test KEEP 365000"
);
setAlterDbKeep
(
1440
);
run
(
"ALTER DATABASE test KEEP 1440m"
);
setAlterDbKeep
(
14400
);
run
(
"ALTER DATABASE test KEEP 14400m"
);
setAlterDbKeep
(
525600000
);
run
(
"ALTER DATABASE test KEEP 525600000m"
);
setAlterDbKeep
(
5
*
MINUTE_PER_DAY
,
35
*
MINUTE_PER_DAY
,
500
*
MINUTE_PER_DAY
);
run
(
"ALTER DATABASE test KEEP 5,35,500"
);
setAlterDbKeep
(
14400
,
2400
*
MINUTE_PER_HOUR
,
1500
*
MINUTE_PER_DAY
);
run
(
"ALTER DATABASE test KEEP 14400m,2400h,1500d"
);
clearAlterDbReq
();
initAlterDb
(
"test"
);
setAlterDbWal
(
1
);
run
(
"ALTER DATABASE test WAL 1"
);
setAlterDbWal
(
2
);
run
(
"ALTER DATABASE test WAL 2"
);
clearAlterDbReq
();
}
TEST_F
(
ParserInitialATest
,
alterDatabaseSemanticCheck
)
{
useDb
(
"root"
,
"test"
);
run
(
"ALTER DATABASE test KEEP 2400"
);
run
(
"ALTER DATABASE test CACHEMODEL 'other'"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
run
(
"ALTER DATABASE test CACHESIZE 0"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
run
(
"ALTER DATABASE test CACHESIZE 65537"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
// The syntax limits it to only positive numbers
run
(
"ALTER DATABASE test FSYNC -1"
,
TSDB_CODE_PAR_SYNTAX_ERROR
,
PARSER_STAGE_PARSE
);
run
(
"ALTER DATABASE test FSYNC 180001"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
run
(
"ALTER DATABASE test KEEP 0"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
run
(
"ALTER DATABASE test KEEP 365001"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
run
(
"ALTER DATABASE test KEEP 1000000000s"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
run
(
"ALTER DATABASE test KEEP 1w"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
run
(
"ALTER DATABASE test WAL 0"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
run
(
"ALTER DATABASE test WAL 3"
,
TSDB_CODE_PAR_INVALID_DB_OPTION
);
// Regardless of the specific sentence
run
(
"ALTER DATABASE db WAL 0 # td-14436"
,
TSDB_CODE_PAR_SYNTAX_ERROR
,
PARSER_STAGE_PARSE
);
}
}
/*
* ALTER LOCAL dnode_id 'config' ['value']
*/
TEST_F
(
ParserInitialATest
,
alterLocal
)
{
TEST_F
(
ParserInitialATest
,
alterLocal
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
...
@@ -53,7 +248,7 @@ TEST_F(ParserInitialATest, alterLocal) {
...
@@ -53,7 +248,7 @@ TEST_F(ParserInitialATest, alterLocal) {
expect
.
second
.
clear
();
expect
.
second
.
clear
();
};
};
auto
setAlterLocal
Func
=
[
&
](
const
char
*
pConfig
,
const
char
*
pValue
=
nullptr
)
{
auto
setAlterLocal
=
[
&
](
const
char
*
pConfig
,
const
char
*
pValue
=
nullptr
)
{
expect
.
first
.
assign
(
pConfig
);
expect
.
first
.
assign
(
pConfig
);
if
(
nullptr
!=
pValue
)
{
if
(
nullptr
!=
pValue
)
{
expect
.
second
.
assign
(
pValue
);
expect
.
second
.
assign
(
pValue
);
...
@@ -68,38 +263,37 @@ TEST_F(ParserInitialATest, alterLocal) {
...
@@ -68,38 +263,37 @@ TEST_F(ParserInitialATest, alterLocal) {
ASSERT_EQ
(
string
(
pStmt
->
value
),
expect
.
second
);
ASSERT_EQ
(
string
(
pStmt
->
value
),
expect
.
second
);
});
});
setAlterLocal
Func
(
"resetlog"
);
setAlterLocal
(
"resetlog"
);
run
(
"ALTER LOCAL 'resetlog'"
);
run
(
"ALTER LOCAL 'resetlog'"
);
clearAlterLocal
();
clearAlterLocal
();
setAlterLocal
Func
(
"querypolicy"
,
"2"
);
setAlterLocal
(
"querypolicy"
,
"2"
);
run
(
"ALTER LOCAL 'querypolicy' '2'"
);
run
(
"ALTER LOCAL 'querypolicy' '2'"
);
clearAlterLocal
();
clearAlterLocal
();
}
}
/*
/*
* ALTER TABLE [db_name.]tb_name alter_table_clause
* ALTER
S
TABLE [db_name.]tb_name alter_table_clause
*
*
* alter_table_clause: {
* alter_table_clause: {
* alter_table_options
* alter_table_options
* | ADD COLUMN col_name column_type
* | ADD COLUMN col_name column_type
* | DROP COLUMN col_name
* | DROP COLUMN col_name
* | MODIFY COLUMN col_name column_type
* | MODIFY COLUMN col_name column_type
* | RENAME COLUMN old_col_name new_col_name
* | RENAME COLUMN old_col_name new_col_name -- normal table
* | ADD TAG tag_name tag_type
* | ADD TAG tag_name tag_type -- super table
* | DROP TAG tag_name
* | DROP TAG tag_name -- super table
* | MODIFY TAG tag_name tag_type
* | MODIFY TAG tag_name tag_type -- super table
* | RENAME TAG old_tag_name new_tag_name
* | RENAME TAG old_tag_name new_tag_name -- super table
* | SET TAG tag_name = new_tag_value
* | SET TAG tag_name = new_tag_value -- child table
* | ADD {FULLTEXT | SMA} INDEX index_name (col_name [, col_name] ...) [index_option]
* }
* }
*
*
* alter_table_options:
* alter_table_options:
* alter_table_option ...
* alter_table_option ...
*
*
* alter_table_option: {
* alter_table_option: {
*
TTL valu
e
*
TTL int_value -- child/normal tabl
e
*
| COMMENT 'string_value'
* | COMMENT 'string_value'
* }
* }
*/
*/
TEST_F
(
ParserInitialATest
,
alterSTable
)
{
TEST_F
(
ParserInitialATest
,
alterSTable
)
{
...
@@ -112,14 +306,12 @@ TEST_F(ParserInitialATest, alterSTable) {
...
@@ -112,14 +306,12 @@ TEST_F(ParserInitialATest, alterSTable) {
memset
(
&
expect
,
0
,
sizeof
(
SMAlterStbReq
));
memset
(
&
expect
,
0
,
sizeof
(
SMAlterStbReq
));
};
};
auto
setAlterStbReqFunc
=
[
&
](
const
char
*
pTbname
,
int8_t
alterType
,
int32_t
numOfFields
=
0
,
auto
setAlterStbReq
=
[
&
](
const
char
*
pTbname
,
int8_t
alterType
,
int32_t
numOfFields
=
0
,
const
char
*
pField1Name
=
nullptr
,
int8_t
field1Type
=
0
,
int32_t
field1Bytes
=
0
,
const
char
*
pField1Name
=
nullptr
,
int8_t
field1Type
=
0
,
int32_t
field1Bytes
=
0
,
const
char
*
pField2Name
=
nullptr
,
const
char
*
pComment
=
nullptr
,
const
char
*
pField2Name
=
nullptr
,
const
char
*
pComment
=
nullptr
)
{
int32_t
ttl
=
TSDB_DEFAULT_TABLE_TTL
)
{
int32_t
len
=
snprintf
(
expect
.
name
,
sizeof
(
expect
.
name
),
"0.test.%s"
,
pTbname
);
int32_t
len
=
snprintf
(
expect
.
name
,
sizeof
(
expect
.
name
),
"0.test.%s"
,
pTbname
);
expect
.
name
[
len
]
=
'\0'
;
expect
.
name
[
len
]
=
'\0'
;
expect
.
alterType
=
alterType
;
expect
.
alterType
=
alterType
;
// expect.ttl = ttl;
if
(
nullptr
!=
pComment
)
{
if
(
nullptr
!=
pComment
)
{
expect
.
comment
=
strdup
(
pComment
);
expect
.
comment
=
strdup
(
pComment
);
expect
.
commentLen
=
strlen
(
pComment
);
expect
.
commentLen
=
strlen
(
pComment
);
...
@@ -178,59 +370,47 @@ TEST_F(ParserInitialATest, alterSTable) {
...
@@ -178,59 +370,47 @@ TEST_F(ParserInitialATest, alterSTable) {
tFreeSMAltertbReq
(
&
req
);
tFreeSMAltertbReq
(
&
req
);
});
});
// setAlterStbReqFunc("st1", TSDB_ALTER_TABLE_UPDATE_OPTIONS, 0, nullptr, 0, 0, nullptr, nullptr, 10);
setAlterStbReq
(
"st1"
,
TSDB_ALTER_TABLE_UPDATE_OPTIONS
,
0
,
nullptr
,
0
,
0
,
nullptr
,
"test"
);
// run("ALTER STABLE st1 TTL 10");
// clearAlterStbReq();
setAlterStbReqFunc
(
"st1"
,
TSDB_ALTER_TABLE_UPDATE_OPTIONS
,
0
,
nullptr
,
0
,
0
,
nullptr
,
"test"
);
run
(
"ALTER STABLE st1 COMMENT 'test'"
);
run
(
"ALTER STABLE st1 COMMENT 'test'"
);
clearAlterStbReq
();
clearAlterStbReq
();
setAlterStbReq
Func
(
"st1"
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
1
,
"cc1"
,
TSDB_DATA_TYPE_BIGINT
);
setAlterStbReq
(
"st1"
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
1
,
"cc1"
,
TSDB_DATA_TYPE_BIGINT
);
run
(
"ALTER STABLE st1 ADD COLUMN cc1 BIGINT"
);
run
(
"ALTER STABLE st1 ADD COLUMN cc1 BIGINT"
);
clearAlterStbReq
();
clearAlterStbReq
();
setAlterStbReq
Func
(
"st1"
,
TSDB_ALTER_TABLE_DROP_COLUMN
,
1
,
"c1"
);
setAlterStbReq
(
"st1"
,
TSDB_ALTER_TABLE_DROP_COLUMN
,
1
,
"c1"
);
run
(
"ALTER STABLE st1 DROP COLUMN c1"
);
run
(
"ALTER STABLE st1 DROP COLUMN c1"
);
clearAlterStbReq
();
clearAlterStbReq
();
setAlterStbReqFunc
(
"st1"
,
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
,
1
,
"c2"
,
TSDB_DATA_TYPE_VARCHAR
,
setAlterStbReq
(
"st1"
,
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
,
1
,
"c2"
,
TSDB_DATA_TYPE_VARCHAR
,
30
+
VARSTR_HEADER_SIZE
);
30
+
VARSTR_HEADER_SIZE
);
run
(
"ALTER STABLE st1 MODIFY COLUMN c2 VARCHAR(30)"
);
run
(
"ALTER STABLE st1 MODIFY COLUMN c2 VARCHAR(30)"
);
clearAlterStbReq
();
clearAlterStbReq
();
// setAlterStbReqFunc("st1", TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, 2, "c1", 0, 0, "cc1");
setAlterStbReq
(
"st1"
,
TSDB_ALTER_TABLE_ADD_TAG
,
1
,
"tag11"
,
TSDB_DATA_TYPE_BIGINT
);
// run("ALTER STABLE st1 RENAME COLUMN c1 cc1");
setAlterStbReqFunc
(
"st1"
,
TSDB_ALTER_TABLE_ADD_TAG
,
1
,
"tag11"
,
TSDB_DATA_TYPE_BIGINT
);
run
(
"ALTER STABLE st1 ADD TAG tag11 BIGINT"
);
run
(
"ALTER STABLE st1 ADD TAG tag11 BIGINT"
);
clearAlterStbReq
();
clearAlterStbReq
();
setAlterStbReq
Func
(
"st1"
,
TSDB_ALTER_TABLE_DROP_TAG
,
1
,
"tag1"
);
setAlterStbReq
(
"st1"
,
TSDB_ALTER_TABLE_DROP_TAG
,
1
,
"tag1"
);
run
(
"ALTER STABLE st1 DROP TAG tag1"
);
run
(
"ALTER STABLE st1 DROP TAG tag1"
);
clearAlterStbReq
();
clearAlterStbReq
();
setAlterStbReqFunc
(
"st1"
,
TSDB_ALTER_TABLE_UPDATE_TAG_BYTES
,
1
,
"tag2"
,
TSDB_DATA_TYPE_VARCHAR
,
setAlterStbReq
(
"st1"
,
TSDB_ALTER_TABLE_UPDATE_TAG_BYTES
,
1
,
"tag2"
,
TSDB_DATA_TYPE_VARCHAR
,
30
+
VARSTR_HEADER_SIZE
);
30
+
VARSTR_HEADER_SIZE
);
run
(
"ALTER STABLE st1 MODIFY TAG tag2 VARCHAR(30)"
);
run
(
"ALTER STABLE st1 MODIFY TAG tag2 VARCHAR(30)"
);
clearAlterStbReq
();
clearAlterStbReq
();
setAlterStbReq
Func
(
"st1"
,
TSDB_ALTER_TABLE_UPDATE_TAG_NAME
,
2
,
"tag1"
,
0
,
0
,
"tag11"
);
setAlterStbReq
(
"st1"
,
TSDB_ALTER_TABLE_UPDATE_TAG_NAME
,
2
,
"tag1"
,
0
,
0
,
"tag11"
);
run
(
"ALTER STABLE st1 RENAME TAG tag1 tag11"
);
run
(
"ALTER STABLE st1 RENAME TAG tag1 tag11"
);
clearAlterStbReq
();
clearAlterStbReq
();
// todo
// ADD {FULLTEXT | SMA} INDEX index_name (col_name [, col_name] ...) [index_option]
}
}
TEST_F
(
ParserInitialATest
,
alterSTableSemanticCheck
)
{
TEST_F
(
ParserInitialATest
,
alterSTableSemanticCheck
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"ALTER STABLE st1 RENAME COLUMN c1 cc1"
,
TSDB_CODE_PAR_INVALID_ALTER_TABLE
);
run
(
"ALTER STABLE st1 RENAME COLUMN c1 cc1"
,
TSDB_CODE_PAR_INVALID_ALTER_TABLE
);
run
(
"ALTER STABLE st1 MODIFY COLUMN c2 NCHAR(10)"
,
TSDB_CODE_PAR_INVALID_MODIFY_COL
);
run
(
"ALTER STABLE st1 MODIFY COLUMN c2 NCHAR(10)"
,
TSDB_CODE_PAR_INVALID_MODIFY_COL
);
run
(
"ALTER STABLE st1 MODIFY TAG tag2 NCHAR(10)"
,
TSDB_CODE_PAR_INVALID_MODIFY_COL
);
run
(
"ALTER STABLE st1 MODIFY TAG tag2 NCHAR(10)"
,
TSDB_CODE_PAR_INVALID_MODIFY_COL
);
run
(
"ALTER STABLE st1 SET TAG tag1 = 10"
,
TSDB_CODE_PAR_INVALID_ALTER_TABLE
);
run
(
"ALTER STABLE st1 TTL 10"
,
TSDB_CODE_PAR_INVALID_ALTER_TABLE
);
}
}
TEST_F
(
ParserInitialATest
,
alterTable
)
{
TEST_F
(
ParserInitialATest
,
alterTable
)
{
...
@@ -246,8 +426,8 @@ TEST_F(ParserInitialATest, alterTable) {
...
@@ -246,8 +426,8 @@ TEST_F(ParserInitialATest, alterTable) {
memset
(
&
expect
,
0
,
sizeof
(
SVAlterTbReq
));
memset
(
&
expect
,
0
,
sizeof
(
SVAlterTbReq
));
};
};
auto
setAlter
ColFunc
=
[
&
](
const
char
*
pTbname
,
int8_t
alterType
,
const
char
*
pColName
,
int8_t
dataType
=
0
,
auto
setAlter
TableCol
=
[
&
](
const
char
*
pTbname
,
int8_t
alterType
,
const
char
*
pColName
,
int8_t
dataType
=
0
,
int32_t
dataBytes
=
0
,
const
char
*
pNewColName
=
nullptr
)
{
int32_t
dataBytes
=
0
,
const
char
*
pNewColName
=
nullptr
)
{
expect
.
tbName
=
strdup
(
pTbname
);
expect
.
tbName
=
strdup
(
pTbname
);
expect
.
action
=
alterType
;
expect
.
action
=
alterType
;
expect
.
colName
=
strdup
(
pColName
);
expect
.
colName
=
strdup
(
pColName
);
...
@@ -269,7 +449,7 @@ TEST_F(ParserInitialATest, alterTable) {
...
@@ -269,7 +449,7 @@ TEST_F(ParserInitialATest, alterTable) {
}
}
};
};
auto
setAlterTa
gFunc
=
[
&
](
const
char
*
pTbname
,
const
char
*
pTagName
,
uint8_t
*
pNewVal
,
uint32_t
bytes
)
{
auto
setAlterTa
bleTag
=
[
&
](
const
char
*
pTbname
,
const
char
*
pTagName
,
uint8_t
*
pNewVal
,
uint32_t
bytes
)
{
expect
.
tbName
=
strdup
(
pTbname
);
expect
.
tbName
=
strdup
(
pTbname
);
expect
.
action
=
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
;
expect
.
action
=
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
;
expect
.
tagName
=
strdup
(
pTagName
);
expect
.
tagName
=
strdup
(
pTagName
);
...
@@ -279,7 +459,7 @@ TEST_F(ParserInitialATest, alterTable) {
...
@@ -279,7 +459,7 @@ TEST_F(ParserInitialATest, alterTable) {
expect
.
pTagVal
=
pNewVal
;
expect
.
pTagVal
=
pNewVal
;
};
};
auto
setAlter
OptionsFunc
=
[
&
](
const
char
*
pTbname
,
int32_t
ttl
,
char
*
pComment
=
nullptr
)
{
auto
setAlter
TableOptions
=
[
&
](
const
char
*
pTbname
,
int32_t
ttl
,
char
*
pComment
=
nullptr
)
{
expect
.
tbName
=
strdup
(
pTbname
);
expect
.
tbName
=
strdup
(
pTbname
);
expect
.
action
=
TSDB_ALTER_TABLE_UPDATE_OPTIONS
;
expect
.
action
=
TSDB_ALTER_TABLE_UPDATE_OPTIONS
;
if
(
-
1
!=
ttl
)
{
if
(
-
1
!=
ttl
)
{
...
@@ -335,47 +515,56 @@ TEST_F(ParserInitialATest, alterTable) {
...
@@ -335,47 +515,56 @@ TEST_F(ParserInitialATest, alterTable) {
tDecoderClear
(
&
coder
);
tDecoderClear
(
&
coder
);
});
});
setAlter
OptionsFunc
(
"t1"
,
10
,
nullptr
);
setAlter
TableOptions
(
"t1"
,
10
,
nullptr
);
run
(
"ALTER TABLE t1 TTL 10"
);
run
(
"ALTER TABLE t1 TTL 10"
);
clearAlterTbReq
();
clearAlterTbReq
();
setAlter
OptionsFunc
(
"t1"
,
-
1
,
(
char
*
)
"test"
);
setAlter
TableOptions
(
"t1"
,
-
1
,
(
char
*
)
"test"
);
run
(
"ALTER TABLE t1 COMMENT 'test'"
);
run
(
"ALTER TABLE t1 COMMENT 'test'"
);
clearAlterTbReq
();
clearAlterTbReq
();
setAlter
ColFunc
(
"t1"
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
"cc1"
,
TSDB_DATA_TYPE_BIGINT
);
setAlter
TableCol
(
"t1"
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
"cc1"
,
TSDB_DATA_TYPE_BIGINT
);
run
(
"ALTER TABLE t1 ADD COLUMN cc1 BIGINT"
);
run
(
"ALTER TABLE t1 ADD COLUMN cc1 BIGINT"
);
clearAlterTbReq
();
clearAlterTbReq
();
setAlter
ColFunc
(
"t1"
,
TSDB_ALTER_TABLE_DROP_COLUMN
,
"c1"
);
setAlter
TableCol
(
"t1"
,
TSDB_ALTER_TABLE_DROP_COLUMN
,
"c1"
);
run
(
"ALTER TABLE t1 DROP COLUMN c1"
);
run
(
"ALTER TABLE t1 DROP COLUMN c1"
);
clearAlterTbReq
();
clearAlterTbReq
();
setAlter
ColFunc
(
"t1"
,
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
,
"c2"
,
TSDB_DATA_TYPE_VARCHAR
,
30
+
VARSTR_HEADER_SIZE
);
setAlter
TableCol
(
"t1"
,
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
,
"c2"
,
TSDB_DATA_TYPE_VARCHAR
,
30
+
VARSTR_HEADER_SIZE
);
run
(
"ALTER TABLE t1 MODIFY COLUMN c2 VARCHAR(30)"
);
run
(
"ALTER TABLE t1 MODIFY COLUMN c2 VARCHAR(30)"
);
clearAlterTbReq
();
clearAlterTbReq
();
setAlter
ColFunc
(
"t1"
,
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
,
"c1"
,
0
,
0
,
"cc1"
);
setAlter
TableCol
(
"t1"
,
TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
,
"c1"
,
0
,
0
,
"cc1"
);
run
(
"ALTER TABLE t1 RENAME COLUMN c1 cc1"
);
run
(
"ALTER TABLE t1 RENAME COLUMN c1 cc1"
);
clearAlterTbReq
();
clearAlterTbReq
();
int32_t
val
=
10
;
int32_t
val
=
10
;
setAlterTa
gFunc
(
"st1s1"
,
"tag1"
,
(
uint8_t
*
)
&
val
,
sizeof
(
val
));
setAlterTa
bleTag
(
"st1s1"
,
"tag1"
,
(
uint8_t
*
)
&
val
,
sizeof
(
val
));
run
(
"ALTER TABLE st1s1 SET TAG tag1=10"
);
run
(
"ALTER TABLE st1s1 SET TAG tag1=10"
);
clearAlterTbReq
();
clearAlterTbReq
();
// todo
// ADD {FULLTEXT | SMA} INDEX index_name (col_name [, col_name] ...) [index_option]
}
}
TEST_F
(
ParserInitialATest
,
alterTableSemanticCheck
)
{
TEST_F
(
ParserInitialATest
,
alterTableSemanticCheck
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"ALTER TABLE st1s1 RENAME COLUMN c1 cc1"
,
TSDB_CODE_PAR_INVALID_ALTER_TABLE
);
run
(
"ALTER TABLE st1s1 RENAME COLUMN c1 cc1"
,
TSDB_CODE_PAR_INVALID_ALTER_TABLE
);
run
(
"ALTER TABLE st1s1 ADD TAG tag11 BIGINT"
,
TSDB_CODE_PAR_INVALID_ALTER_TABLE
);
run
(
"ALTER TABLE st1s1 DROP TAG tag1"
,
TSDB_CODE_PAR_INVALID_ALTER_TABLE
);
run
(
"ALTER TABLE st1s1 MODIFY TAG tag2 VARCHAR(30)"
,
TSDB_CODE_PAR_INVALID_ALTER_TABLE
);
run
(
"ALTER TABLE st1s1 RENAME TAG tag1 tag11"
,
TSDB_CODE_PAR_INVALID_ALTER_TABLE
);
run
(
"ALTER TABLE st1s1 SET TAG tag2 = '123456789012345678901'"
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
);
run
(
"ALTER TABLE st1s1 SET TAG tag2 = '123456789012345678901'"
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
);
}
}
/*
* ALTER USER user_name PASS str_value
*
* alter_user_clause: {
* PASS str_value
* | ENABLE int_value
* | SYSINFO int_value
* }
*/
TEST_F
(
ParserInitialATest
,
alterUser
)
{
TEST_F
(
ParserInitialATest
,
alterUser
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
...
@@ -423,6 +612,9 @@ TEST_F(ParserInitialATest, alterUser) {
...
@@ -423,6 +612,9 @@ TEST_F(ParserInitialATest, alterUser) {
clearAlterUserReq
();
clearAlterUserReq
();
}
}
/*
* BALANCE VGROUP
*/
TEST_F
(
ParserInitialATest
,
balanceVgroup
)
{
TEST_F
(
ParserInitialATest
,
balanceVgroup
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
...
@@ -436,10 +628,4 @@ TEST_F(ParserInitialATest, balanceVgroup) {
...
@@ -436,10 +628,4 @@ TEST_F(ParserInitialATest, balanceVgroup) {
run
(
"BALANCE VGROUP"
);
run
(
"BALANCE VGROUP"
);
}
}
TEST_F
(
ParserInitialATest
,
bug001
)
{
useDb
(
"root"
,
"test"
);
run
(
"ALTER DATABASE db WAL 0 # td-14436"
,
TSDB_CODE_PAR_SYNTAX_ERROR
,
PARSER_STAGE_PARSE
);
}
}
// namespace ParserTest
}
// namespace ParserTest
\ No newline at end of file
source/libs/parser/test/parInitialCTest.cpp
浏览文件 @
72bd7798
...
@@ -236,12 +236,12 @@ TEST_F(ParserInitialCTest, createDatabase) {
...
@@ -236,12 +236,12 @@ TEST_F(ParserInitialCTest, createDatabase) {
TEST_F
(
ParserInitialCTest
,
createDatabaseSemanticCheck
)
{
TEST_F
(
ParserInitialCTest
,
createDatabaseSemanticCheck
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"create database db2 retentions 0s:1d"
,
TSDB_CODE_PAR_INVALID_
RETENTIONS
_OPTION
);
run
(
"create database db2 retentions 0s:1d"
,
TSDB_CODE_PAR_INVALID_
DB
_OPTION
);
run
(
"create database db2 retentions 10s:0d"
,
TSDB_CODE_PAR_INVALID_
RETENTIONS
_OPTION
);
run
(
"create database db2 retentions 10s:0d"
,
TSDB_CODE_PAR_INVALID_
DB
_OPTION
);
run
(
"create database db2 retentions 1w:1d"
,
TSDB_CODE_PAR_INVALID_
RETENTIONS
_OPTION
);
run
(
"create database db2 retentions 1w:1d"
,
TSDB_CODE_PAR_INVALID_
DB
_OPTION
);
run
(
"create database db2 retentions 1w:1n"
,
TSDB_CODE_PAR_INVALID_
RETENTIONS
_OPTION
);
run
(
"create database db2 retentions 1w:1n"
,
TSDB_CODE_PAR_INVALID_
DB
_OPTION
);
run
(
"create database db2 retentions 15s:7d,15m:21d,10m:500d"
,
TSDB_CODE_PAR_INVALID_
RETENTIONS
_OPTION
);
run
(
"create database db2 retentions 15s:7d,15m:21d,10m:500d"
,
TSDB_CODE_PAR_INVALID_
DB
_OPTION
);
run
(
"create database db2 retentions 15s:7d,5m:21d,10m:10d"
,
TSDB_CODE_PAR_INVALID_
RETENTIONS
_OPTION
);
run
(
"create database db2 retentions 15s:7d,5m:21d,10m:10d"
,
TSDB_CODE_PAR_INVALID_
DB
_OPTION
);
}
}
TEST_F
(
ParserInitialCTest
,
createDnode
)
{
TEST_F
(
ParserInitialCTest
,
createDnode
)
{
...
@@ -514,13 +514,13 @@ TEST_F(ParserInitialCTest, createStableSemanticCheck) {
...
@@ -514,13 +514,13 @@ TEST_F(ParserInitialCTest, createStableSemanticCheck) {
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"CREATE STABLE rollup_db.stb2 (ts TIMESTAMP, c1 INT) TAGS (tag1 INT) ROLLUP(CEIL)"
,
run
(
"CREATE STABLE rollup_db.stb2 (ts TIMESTAMP, c1 INT) TAGS (tag1 INT) ROLLUP(CEIL)"
,
TSDB_CODE_PAR_INVALID_
ROLLUP
_OPTION
);
TSDB_CODE_PAR_INVALID_
TABLE
_OPTION
);
run
(
"CREATE STABLE rollup_db.stb2 (ts TIMESTAMP, c1 INT) TAGS (tag1 INT) ROLLUP(MAX) MAX_DELAY 0s WATERMARK 1m"
,
run
(
"CREATE STABLE rollup_db.stb2 (ts TIMESTAMP, c1 INT) TAGS (tag1 INT) ROLLUP(MAX) MAX_DELAY 0s WATERMARK 1m"
,
TSDB_CODE_PAR_INVALID_
RANG
E_OPTION
);
TSDB_CODE_PAR_INVALID_
TABL
E_OPTION
);
run
(
"CREATE STABLE rollup_db.stb2 (ts TIMESTAMP, c1 INT) TAGS (tag1 INT) ROLLUP(MAX) MAX_DELAY 10s WATERMARK 18m"
,
run
(
"CREATE STABLE rollup_db.stb2 (ts TIMESTAMP, c1 INT) TAGS (tag1 INT) ROLLUP(MAX) MAX_DELAY 10s WATERMARK 18m"
,
TSDB_CODE_PAR_INVALID_
RANG
E_OPTION
);
TSDB_CODE_PAR_INVALID_
TABL
E_OPTION
);
}
}
TEST_F
(
ParserInitialCTest
,
createStream
)
{
TEST_F
(
ParserInitialCTest
,
createStream
)
{
...
...
source/libs/parser/test/parTestUtil.cpp
浏览文件 @
72bd7798
...
@@ -192,7 +192,7 @@ class ParserTestBaseImpl {
...
@@ -192,7 +192,7 @@ class ParserTestBaseImpl {
void
setParseContext
(
const
string
&
sql
,
SParseContext
*
pCxt
,
bool
async
=
false
)
{
void
setParseContext
(
const
string
&
sql
,
SParseContext
*
pCxt
,
bool
async
=
false
)
{
stmtEnv_
.
sql_
=
sql
;
stmtEnv_
.
sql_
=
sql
;
transform
(
stmtEnv_
.
sql_
.
begin
(),
stmtEnv_
.
sql_
.
end
(),
stmtEnv_
.
sql_
.
begin
(),
::
tolower
);
strtolower
((
char
*
)
stmtEnv_
.
sql_
.
c_str
(),
sql
.
c_str
()
);
pCxt
->
acctId
=
atoi
(
caseEnv_
.
acctId_
.
c_str
());
pCxt
->
acctId
=
atoi
(
caseEnv_
.
acctId_
.
c_str
());
pCxt
->
db
=
caseEnv_
.
db_
.
c_str
();
pCxt
->
db
=
caseEnv_
.
db_
.
c_str
();
...
...
source/libs/planner/src/planOptimizer.c
浏览文件 @
72bd7798
...
@@ -1378,6 +1378,22 @@ static bool planOptNodeListHasCol(SNodeList* pKeys) {
...
@@ -1378,6 +1378,22 @@ static bool planOptNodeListHasCol(SNodeList* pKeys) {
return
hasCol
;
return
hasCol
;
}
}
static
EDealRes
partTagsOptHasTbname
(
SNode
*
pNode
,
void
*
pContext
)
{
if
(
QUERY_NODE_COLUMN
==
nodeType
(
pNode
))
{
if
(
COLUMN_TYPE_TBNAME
==
((
SColumnNode
*
)
pNode
)
->
colType
)
{
*
(
bool
*
)
pContext
=
true
;
return
DEAL_RES_END
;
}
}
return
DEAL_RES_CONTINUE
;
}
static
bool
planOptNodeListHasTbname
(
SNodeList
*
pKeys
)
{
bool
hasCol
=
false
;
nodesWalkExprs
(
pKeys
,
partTagsOptHasTbname
,
&
hasCol
);
return
hasCol
;
}
static
bool
partTagsIsOptimizableNode
(
SLogicNode
*
pNode
)
{
static
bool
partTagsIsOptimizableNode
(
SLogicNode
*
pNode
)
{
return
((
QUERY_NODE_LOGIC_PLAN_PARTITION
==
nodeType
(
pNode
)
||
return
((
QUERY_NODE_LOGIC_PLAN_PARTITION
==
nodeType
(
pNode
)
||
(
QUERY_NODE_LOGIC_PLAN_AGG
==
nodeType
(
pNode
)
&&
NULL
!=
((
SAggLogicNode
*
)
pNode
)
->
pGroupKeys
&&
(
QUERY_NODE_LOGIC_PLAN_AGG
==
nodeType
(
pNode
)
&&
NULL
!=
((
SAggLogicNode
*
)
pNode
)
->
pGroupKeys
&&
...
@@ -2129,7 +2145,8 @@ static bool tagScanMayBeOptimized(SLogicNode* pNode) {
...
@@ -2129,7 +2145,8 @@ static bool tagScanMayBeOptimized(SLogicNode* pNode) {
}
}
SAggLogicNode
*
pAgg
=
(
SAggLogicNode
*
)(
pNode
->
pParent
);
SAggLogicNode
*
pAgg
=
(
SAggLogicNode
*
)(
pNode
->
pParent
);
if
(
NULL
==
pAgg
->
pGroupKeys
||
NULL
!=
pAgg
->
pAggFuncs
||
planOptNodeListHasCol
(
pAgg
->
pGroupKeys
))
{
if
(
NULL
==
pAgg
->
pGroupKeys
||
NULL
!=
pAgg
->
pAggFuncs
||
planOptNodeListHasCol
(
pAgg
->
pGroupKeys
)
||
!
planOptNodeListHasTbname
(
pAgg
->
pGroupKeys
))
{
return
false
;
return
false
;
}
}
...
@@ -2143,6 +2160,22 @@ static int32_t tagScanOptimize(SOptimizeContext* pCxt, SLogicSubplan* pLogicSubp
...
@@ -2143,6 +2160,22 @@ static int32_t tagScanOptimize(SOptimizeContext* pCxt, SLogicSubplan* pLogicSubp
}
}
pScanNode
->
scanType
=
SCAN_TYPE_TAG
;
pScanNode
->
scanType
=
SCAN_TYPE_TAG
;
SNode
*
pTarget
=
NULL
;
FOREACH
(
pTarget
,
pScanNode
->
node
.
pTargets
)
{
if
(
PRIMARYKEY_TIMESTAMP_COL_ID
==
((
SColumnNode
*
)(
pTarget
))
->
colId
)
{
ERASE_NODE
(
pScanNode
->
node
.
pTargets
);
break
;
}
}
NODES_DESTORY_LIST
(
pScanNode
->
pScanCols
);
SLogicNode
*
pAgg
=
pScanNode
->
node
.
pParent
;
int32_t
code
=
replaceLogicNode
(
pLogicSubplan
,
pAgg
,
(
SLogicNode
*
)
pScanNode
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
NODES_CLEAR_LIST
(
pAgg
->
pChildren
);
}
nodesDestroyNode
((
SNode
*
)
pAgg
);
pCxt
->
optimized
=
true
;
pCxt
->
optimized
=
true
;
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
...
source/libs/scalar/src/filter.c
浏览文件 @
72bd7798
...
@@ -3682,6 +3682,10 @@ EDealRes fltReviseRewriter(SNode** pNode, void* pContext) {
...
@@ -3682,6 +3682,10 @@ EDealRes fltReviseRewriter(SNode** pNode, void* pContext) {
if
(
OP_TYPE_IN
!=
node
->
opType
)
{
if
(
OP_TYPE_IN
!=
node
->
opType
)
{
SColumnNode
*
refNode
=
(
SColumnNode
*
)
node
->
pLeft
;
SColumnNode
*
refNode
=
(
SColumnNode
*
)
node
->
pLeft
;
SValueNode
*
valueNode
=
(
SValueNode
*
)
node
->
pRight
;
SValueNode
*
valueNode
=
(
SValueNode
*
)
node
->
pRight
;
if
(
FILTER_GET_FLAG
(
stat
->
info
->
options
,
FLT_OPTION_TIMESTAMP
)
&&
TSDB_DATA_TYPE_UBIGINT
==
valueNode
->
node
.
resType
.
type
&&
valueNode
->
datum
.
u
<=
INT64_MAX
)
{
valueNode
->
node
.
resType
.
type
=
TSDB_DATA_TYPE_BIGINT
;
}
int32_t
type
=
vectorGetConvertType
(
refNode
->
node
.
resType
.
type
,
valueNode
->
node
.
resType
.
type
);
int32_t
type
=
vectorGetConvertType
(
refNode
->
node
.
resType
.
type
,
valueNode
->
node
.
resType
.
type
);
if
(
0
!=
type
&&
type
!=
refNode
->
node
.
resType
.
type
)
{
if
(
0
!=
type
&&
type
!=
refNode
->
node
.
resType
.
type
)
{
stat
->
scalarMode
=
true
;
stat
->
scalarMode
=
true
;
...
...
source/libs/stream/inc/streamInc.h
浏览文件 @
72bd7798
...
@@ -44,7 +44,7 @@ int32_t streamBroadcastToChildren(SStreamTask* pTask, const SSDataBlock* pBlock)
...
@@ -44,7 +44,7 @@ int32_t streamBroadcastToChildren(SStreamTask* pTask, const SSDataBlock* pBlock)
int32_t
tEncodeStreamRetrieveReq
(
SEncoder
*
pEncoder
,
const
SStreamRetrieveReq
*
pReq
);
int32_t
tEncodeStreamRetrieveReq
(
SEncoder
*
pEncoder
,
const
SStreamRetrieveReq
*
pReq
);
int32_t
streamAppendQueueItem
(
SStreamQueueItem
*
dst
,
SStreamQueueItem
*
elem
);
SStreamQueueItem
*
streamAppendQueueItem
(
SStreamQueueItem
*
dst
,
SStreamQueueItem
*
elem
);
void
streamFreeQitem
(
SStreamQueueItem
*
data
);
void
streamFreeQitem
(
SStreamQueueItem
*
data
);
#ifdef __cplusplus
#ifdef __cplusplus
...
...
source/libs/stream/src/streamData.c
浏览文件 @
72bd7798
...
@@ -77,6 +77,28 @@ FAIL:
...
@@ -77,6 +77,28 @@ FAIL:
return
NULL
;
return
NULL
;
}
}
SStreamMergedSubmit
*
streamMergedSubmitNew
()
{
SStreamMergedSubmit
*
pMerged
=
(
SStreamMergedSubmit
*
)
taosAllocateQitem
(
sizeof
(
SStreamMergedSubmit
),
DEF_QITEM
);
if
(
pMerged
==
NULL
)
return
NULL
;
pMerged
->
reqs
=
taosArrayInit
(
0
,
sizeof
(
void
*
));
pMerged
->
dataRefs
=
taosArrayInit
(
0
,
sizeof
(
void
*
));
if
(
pMerged
->
dataRefs
==
NULL
||
pMerged
->
reqs
==
NULL
)
goto
FAIL
;
pMerged
->
type
=
STREAM_INPUT__MERGED_SUBMIT
;
return
pMerged
;
FAIL:
if
(
pMerged
->
reqs
)
taosArrayDestroy
(
pMerged
->
reqs
);
if
(
pMerged
->
dataRefs
)
taosArrayDestroy
(
pMerged
->
dataRefs
);
taosFreeQitem
(
pMerged
);
return
NULL
;
}
int32_t
streamMergeSubmit
(
SStreamMergedSubmit
*
pMerged
,
SStreamDataSubmit
*
pSubmit
)
{
taosArrayPush
(
pMerged
->
dataRefs
,
&
pSubmit
->
dataRef
);
taosArrayPush
(
pMerged
->
reqs
,
&
pSubmit
->
data
);
pMerged
->
ver
=
pSubmit
->
ver
;
return
0
;
}
static
FORCE_INLINE
void
streamDataSubmitRefInc
(
SStreamDataSubmit
*
pDataSubmit
)
{
static
FORCE_INLINE
void
streamDataSubmitRefInc
(
SStreamDataSubmit
*
pDataSubmit
)
{
atomic_add_fetch_32
(
pDataSubmit
->
dataRef
,
1
);
atomic_add_fetch_32
(
pDataSubmit
->
dataRef
,
1
);
}
}
...
@@ -100,15 +122,31 @@ void streamDataSubmitRefDec(SStreamDataSubmit* pDataSubmit) {
...
@@ -100,15 +122,31 @@ void streamDataSubmitRefDec(SStreamDataSubmit* pDataSubmit) {
}
}
}
}
int32_t
streamAppendQueueItem
(
SStreamQueueItem
*
dst
,
SStreamQueueItem
*
elem
)
{
SStreamQueueItem
*
streamAppendQueueItem
(
SStreamQueueItem
*
dst
,
SStreamQueueItem
*
elem
)
{
ASSERT
(
elem
);
ASSERT
(
elem
);
if
(
dst
->
type
==
elem
->
type
&&
dst
->
type
==
STREAM_INPUT__DATA_BLOCK
)
{
if
(
dst
->
type
==
STREAM_INPUT__DATA_BLOCK
&&
elem
->
type
==
STREAM_INPUT__DATA_BLOCK
)
{
SStreamDataBlock
*
pBlock
=
(
SStreamDataBlock
*
)
dst
;
SStreamDataBlock
*
pBlock
=
(
SStreamDataBlock
*
)
dst
;
SStreamDataBlock
*
pBlockSrc
=
(
SStreamDataBlock
*
)
elem
;
SStreamDataBlock
*
pBlockSrc
=
(
SStreamDataBlock
*
)
elem
;
taosArrayAddAll
(
pBlock
->
blocks
,
pBlockSrc
->
blocks
);
taosArrayAddAll
(
pBlock
->
blocks
,
pBlockSrc
->
blocks
);
return
0
;
taosArrayDestroy
(
pBlockSrc
->
blocks
);
taosFreeQitem
(
elem
);
return
dst
;
}
else
if
(
dst
->
type
==
STREAM_INPUT__MERGED_SUBMIT
&&
elem
->
type
==
STREAM_INPUT__DATA_SUBMIT
)
{
SStreamMergedSubmit
*
pMerged
=
(
SStreamMergedSubmit
*
)
dst
;
SStreamDataSubmit
*
pBlockSrc
=
(
SStreamDataSubmit
*
)
elem
;
streamMergeSubmit
(
pMerged
,
pBlockSrc
);
taosFreeQitem
(
elem
);
return
dst
;
}
else
if
(
dst
->
type
==
STREAM_INPUT__DATA_SUBMIT
&&
elem
->
type
==
STREAM_INPUT__DATA_SUBMIT
)
{
SStreamMergedSubmit
*
pMerged
=
streamMergedSubmitNew
();
ASSERT
(
pMerged
);
streamMergeSubmit
(
pMerged
,
(
SStreamDataSubmit
*
)
dst
);
streamMergeSubmit
(
pMerged
,
(
SStreamDataSubmit
*
)
elem
);
taosFreeQitem
(
dst
);
taosFreeQitem
(
elem
);
return
(
SStreamQueueItem
*
)
pMerged
;
}
else
{
}
else
{
return
-
1
;
return
NULL
;
}
}
}
}
...
@@ -123,5 +161,20 @@ void streamFreeQitem(SStreamQueueItem* data) {
...
@@ -123,5 +161,20 @@ void streamFreeQitem(SStreamQueueItem* data) {
}
else
if
(
type
==
STREAM_INPUT__DATA_SUBMIT
)
{
}
else
if
(
type
==
STREAM_INPUT__DATA_SUBMIT
)
{
streamDataSubmitRefDec
((
SStreamDataSubmit
*
)
data
);
streamDataSubmitRefDec
((
SStreamDataSubmit
*
)
data
);
taosFreeQitem
(
data
);
taosFreeQitem
(
data
);
}
else
if
(
type
==
STREAM_INPUT__MERGED_SUBMIT
)
{
SStreamMergedSubmit
*
pMerge
=
(
SStreamMergedSubmit
*
)
data
;
int32_t
sz
=
taosArrayGetSize
(
pMerge
->
reqs
);
for
(
int32_t
i
=
0
;
i
<
sz
;
i
++
)
{
int32_t
*
ref
=
taosArrayGetP
(
pMerge
->
dataRefs
,
i
);
(
*
ref
)
--
;
if
(
*
ref
==
0
)
{
void
*
data
=
taosArrayGetP
(
pMerge
->
reqs
,
i
);
taosMemoryFree
(
data
);
taosMemoryFree
(
ref
);
}
}
taosArrayDestroy
(
pMerge
->
reqs
);
taosArrayDestroy
(
pMerge
->
dataRefs
);
taosFreeQitem
(
pMerge
);
}
}
}
}
source/libs/stream/src/streamExec.c
浏览文件 @
72bd7798
...
@@ -33,9 +33,13 @@ static int32_t streamTaskExecImpl(SStreamTask* pTask, void* data, SArray* pRes)
...
@@ -33,9 +33,13 @@ static int32_t streamTaskExecImpl(SStreamTask* pTask, void* data, SArray* pRes)
SArray
*
blocks
=
pBlock
->
blocks
;
SArray
*
blocks
=
pBlock
->
blocks
;
qDebug
(
"task %d %p set ssdata input"
,
pTask
->
taskId
,
pTask
);
qDebug
(
"task %d %p set ssdata input"
,
pTask
->
taskId
,
pTask
);
qSetMultiStreamInput
(
exec
,
blocks
->
pData
,
blocks
->
size
,
STREAM_INPUT__DATA_BLOCK
,
false
);
qSetMultiStreamInput
(
exec
,
blocks
->
pData
,
blocks
->
size
,
STREAM_INPUT__DATA_BLOCK
,
false
);
}
else
if
(
pItem
->
type
==
STREAM_INPUT__DROP
)
{
}
else
if
(
pItem
->
type
==
STREAM_INPUT__MERGED_SUBMIT
)
{
// TODO exec drop
SStreamMergedSubmit
*
pMerged
=
(
SStreamMergedSubmit
*
)
data
;
return
0
;
SArray
*
blocks
=
pMerged
->
reqs
;
qDebug
(
"task %d %p set submit input (merged), batch num: %d"
,
pTask
->
taskId
,
pTask
,
(
int32_t
)
blocks
->
size
);
qSetMultiStreamInput
(
exec
,
blocks
->
pData
,
blocks
->
size
,
STREAM_INPUT__MERGED_SUBMIT
,
false
);
}
else
{
ASSERT
(
0
);
}
}
// exec
// exec
...
@@ -144,7 +148,7 @@ int32_t streamPipelineExec(SStreamTask* pTask, int32_t batchNum) {
...
@@ -144,7 +148,7 @@ int32_t streamPipelineExec(SStreamTask* pTask, int32_t batchNum) {
static
SArray
*
streamExecForQall
(
SStreamTask
*
pTask
,
SArray
*
pRes
)
{
static
SArray
*
streamExecForQall
(
SStreamTask
*
pTask
,
SArray
*
pRes
)
{
while
(
1
)
{
while
(
1
)
{
int32_t
cnt
=
0
;
int32_t
cnt
=
1
;
void
*
data
=
NULL
;
void
*
data
=
NULL
;
while
(
1
)
{
while
(
1
)
{
SStreamQueueItem
*
qItem
=
streamQueueNextItem
(
pTask
->
inputQueue
);
SStreamQueueItem
*
qItem
=
streamQueueNextItem
(
pTask
->
inputQueue
);
...
@@ -155,24 +159,23 @@ static SArray* streamExecForQall(SStreamTask* pTask, SArray* pRes) {
...
@@ -155,24 +159,23 @@ static SArray* streamExecForQall(SStreamTask* pTask, SArray* pRes) {
if
(
data
==
NULL
)
{
if
(
data
==
NULL
)
{
data
=
qItem
;
data
=
qItem
;
streamQueueProcessSuccess
(
pTask
->
inputQueue
);
streamQueueProcessSuccess
(
pTask
->
inputQueue
);
if
(
qItem
->
type
==
STREAM_INPUT__DATA_BLOCK
)
{
/*if (qItem->type == STREAM_INPUT__DATA_BLOCK) {*/
/*streamUpdateVer(pTask, (SStreamDataBlock*)qItem);*/
/*streamUpdateVer(pTask, (SStreamDataBlock*)qItem);*/
}
else
{
/*}*/
break
;
}
}
else
{
}
else
{
if
(
streamAppendQueueItem
(
data
,
qItem
)
<
0
)
{
void
*
newRet
;
if
((
newRet
=
streamAppendQueueItem
(
data
,
qItem
))
==
NULL
)
{
streamQueueProcessFail
(
pTask
->
inputQueue
);
streamQueueProcessFail
(
pTask
->
inputQueue
);
break
;
break
;
}
else
{
}
else
{
cnt
++
;
cnt
++
;
data
=
newRet
;
/*streamUpdateVer(pTask, (SStreamDataBlock*)qItem);*/
/*streamUpdateVer(pTask, (SStreamDataBlock*)qItem);*/
streamQueueProcessSuccess
(
pTask
->
inputQueue
);
streamQueueProcessSuccess
(
pTask
->
inputQueue
);
taosArrayDestroy
(((
SStreamDataBlock
*
)
qItem
)
->
blocks
);
taosFreeQitem
(
qItem
);
}
}
}
}
}
}
if
(
pTask
->
taskStatus
==
TASK_STATUS__DROPPING
)
{
if
(
pTask
->
taskStatus
==
TASK_STATUS__DROPPING
)
{
if
(
data
)
streamFreeQitem
(
data
);
if
(
data
)
streamFreeQitem
(
data
);
taosArrayDestroyEx
(
pRes
,
(
FDelete
)
blockDataFreeRes
);
taosArrayDestroyEx
(
pRes
,
(
FDelete
)
blockDataFreeRes
);
...
@@ -194,6 +197,7 @@ static SArray* streamExecForQall(SStreamTask* pTask, SArray* pRes) {
...
@@ -194,6 +197,7 @@ static SArray* streamExecForQall(SStreamTask* pTask, SArray* pRes) {
if
(
taosArrayGetSize
(
pRes
)
!=
0
)
{
if
(
taosArrayGetSize
(
pRes
)
!=
0
)
{
SStreamDataBlock
*
qRes
=
taosAllocateQitem
(
sizeof
(
SStreamDataBlock
),
DEF_QITEM
);
SStreamDataBlock
*
qRes
=
taosAllocateQitem
(
sizeof
(
SStreamDataBlock
),
DEF_QITEM
);
if
(
qRes
==
NULL
)
{
if
(
qRes
==
NULL
)
{
// TODO log failed ver
streamQueueProcessFail
(
pTask
->
inputQueue
);
streamQueueProcessFail
(
pTask
->
inputQueue
);
taosArrayDestroy
(
pRes
);
taosArrayDestroy
(
pRes
);
return
NULL
;
return
NULL
;
...
@@ -201,6 +205,7 @@ static SArray* streamExecForQall(SStreamTask* pTask, SArray* pRes) {
...
@@ -201,6 +205,7 @@ static SArray* streamExecForQall(SStreamTask* pTask, SArray* pRes) {
qRes
->
type
=
STREAM_INPUT__DATA_BLOCK
;
qRes
->
type
=
STREAM_INPUT__DATA_BLOCK
;
qRes
->
blocks
=
pRes
;
qRes
->
blocks
=
pRes
;
if
(
streamTaskOutput
(
pTask
,
qRes
)
<
0
)
{
if
(
streamTaskOutput
(
pTask
,
qRes
)
<
0
)
{
// TODO log failed ver
/*streamQueueProcessFail(pTask->inputQueue);*/
/*streamQueueProcessFail(pTask->inputQueue);*/
taosArrayDestroyEx
(
pRes
,
(
FDelete
)
blockDataFreeRes
);
taosArrayDestroyEx
(
pRes
,
(
FDelete
)
blockDataFreeRes
);
taosFreeQitem
(
qRes
);
taosFreeQitem
(
qRes
);
...
...
source/libs/sync/src/syncReplication.c
浏览文件 @
72bd7798
...
@@ -306,6 +306,8 @@ int32_t syncNodeReplicate(SSyncNode* pSyncNode) {
...
@@ -306,6 +306,8 @@ int32_t syncNodeReplicate(SSyncNode* pSyncNode) {
break
;
break
;
}
}
syncNodeRestartHeartbeatTimer
(
pSyncNode
);
return
ret
;
return
ret
;
}
}
...
...
source/libs/wal/src/walRead.c
浏览文件 @
72bd7798
...
@@ -417,7 +417,7 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver) {
...
@@ -417,7 +417,7 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver) {
}
}
if
(
ver
>
pRead
->
pWal
->
vers
.
lastVer
||
ver
<
pRead
->
pWal
->
vers
.
firstVer
)
{
if
(
ver
>
pRead
->
pWal
->
vers
.
lastVer
||
ver
<
pRead
->
pWal
->
vers
.
firstVer
)
{
w
Error
(
"vgId:%d, invalid index:%"
PRId64
", first index:%"
PRId64
", last index:%"
PRId64
,
pRead
->
pWal
->
cfg
.
vgId
,
w
Debug
(
"vgId:%d, invalid index:%"
PRId64
", first index:%"
PRId64
", last index:%"
PRId64
,
pRead
->
pWal
->
cfg
.
vgId
,
ver
,
pRead
->
pWal
->
vers
.
firstVer
,
pRead
->
pWal
->
vers
.
lastVer
);
ver
,
pRead
->
pWal
->
vers
.
firstVer
,
pRead
->
pWal
->
vers
.
lastVer
);
terrno
=
TSDB_CODE_WAL_LOG_NOT_EXIST
;
terrno
=
TSDB_CODE_WAL_LOG_NOT_EXIST
;
return
-
1
;
return
-
1
;
...
@@ -425,7 +425,7 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver) {
...
@@ -425,7 +425,7 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver) {
if
(
pRead
->
curInvalid
||
pRead
->
curVersion
!=
ver
)
{
if
(
pRead
->
curInvalid
||
pRead
->
curVersion
!=
ver
)
{
if
(
walReadSeekVer
(
pRead
,
ver
)
<
0
)
{
if
(
walReadSeekVer
(
pRead
,
ver
)
<
0
)
{
wError
(
"vgId:%d, unexpected wal log index:%"
PRId64
", since %s"
,
pRead
->
pWal
->
cfg
.
vgId
,
ver
,
terrstr
());
wError
(
"vgId:%d, unexpected wal log
,
index:%"
PRId64
", since %s"
,
pRead
->
pWal
->
cfg
.
vgId
,
ver
,
terrstr
());
return
-
1
;
return
-
1
;
}
}
seeked
=
true
;
seeked
=
true
;
...
@@ -452,7 +452,8 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver) {
...
@@ -452,7 +452,8 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver) {
contLen
=
walValidHeadCksum
(
pRead
->
pHead
);
contLen
=
walValidHeadCksum
(
pRead
->
pHead
);
if
(
contLen
!=
0
)
{
if
(
contLen
!=
0
)
{
wError
(
"vgId:%d, unexpected wal log index:%"
PRId64
", since head checksum not passed"
,
pRead
->
pWal
->
cfg
.
vgId
,
ver
);
wError
(
"vgId:%d, unexpected wal log, index:%"
PRId64
", since head checksum not passed"
,
pRead
->
pWal
->
cfg
.
vgId
,
ver
);
terrno
=
TSDB_CODE_WAL_FILE_CORRUPTED
;
terrno
=
TSDB_CODE_WAL_FILE_CORRUPTED
;
return
-
1
;
return
-
1
;
}
}
...
@@ -479,7 +480,7 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver) {
...
@@ -479,7 +480,7 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver) {
}
}
if
(
pRead
->
pHead
->
head
.
version
!=
ver
)
{
if
(
pRead
->
pHead
->
head
.
version
!=
ver
)
{
wError
(
"vgId:%d, unexpected wal log index:%"
PRId64
", read request index:%"
PRId64
,
pRead
->
pWal
->
cfg
.
vgId
,
wError
(
"vgId:%d, unexpected wal log
,
index:%"
PRId64
", read request index:%"
PRId64
,
pRead
->
pWal
->
cfg
.
vgId
,
pRead
->
pHead
->
head
.
version
,
ver
);
pRead
->
pHead
->
head
.
version
,
ver
);
pRead
->
curInvalid
=
1
;
pRead
->
curInvalid
=
1
;
terrno
=
TSDB_CODE_WAL_FILE_CORRUPTED
;
terrno
=
TSDB_CODE_WAL_FILE_CORRUPTED
;
...
@@ -489,7 +490,8 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver) {
...
@@ -489,7 +490,8 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver) {
contLen
=
walValidBodyCksum
(
pRead
->
pHead
);
contLen
=
walValidBodyCksum
(
pRead
->
pHead
);
if
(
contLen
!=
0
)
{
if
(
contLen
!=
0
)
{
wError
(
"vgId:%d, unexpected wal log index:%"
PRId64
", since body checksum not passed"
,
pRead
->
pWal
->
cfg
.
vgId
,
ver
);
wError
(
"vgId:%d, unexpected wal log, index:%"
PRId64
", since body checksum not passed"
,
pRead
->
pWal
->
cfg
.
vgId
,
ver
);
pRead
->
curInvalid
=
1
;
pRead
->
curInvalid
=
1
;
terrno
=
TSDB_CODE_WAL_FILE_CORRUPTED
;
terrno
=
TSDB_CODE_WAL_FILE_CORRUPTED
;
ASSERT
(
0
);
ASSERT
(
0
);
...
...
source/util/src/tarray.c
浏览文件 @
72bd7798
...
@@ -173,6 +173,46 @@ void taosArrayRemoveDuplicate(SArray* pArray, __compar_fn_t comparFn, void (*fp)
...
@@ -173,6 +173,46 @@ void taosArrayRemoveDuplicate(SArray* pArray, __compar_fn_t comparFn, void (*fp)
pArray
->
size
=
pos
+
1
;
pArray
->
size
=
pos
+
1
;
}
}
void
taosArrayRemoveDuplicateP
(
SArray
*
pArray
,
__compar_fn_t
comparFn
,
void
(
*
fp
)(
void
*
))
{
assert
(
pArray
);
size_t
size
=
pArray
->
size
;
if
(
size
<=
1
)
{
return
;
}
int32_t
pos
=
0
;
for
(
int32_t
i
=
1
;
i
<
size
;
++
i
)
{
char
*
p1
=
taosArrayGet
(
pArray
,
pos
);
char
*
p2
=
taosArrayGet
(
pArray
,
i
);
if
(
comparFn
(
p1
,
p2
)
==
0
)
{
// do nothing
}
else
{
if
(
pos
+
1
!=
i
)
{
void
*
p
=
taosArrayGet
(
pArray
,
pos
+
1
);
if
(
fp
!=
NULL
)
{
fp
(
p
);
}
taosArraySet
(
pArray
,
pos
+
1
,
p2
);
pos
+=
1
;
}
else
{
pos
+=
1
;
}
}
}
if
(
fp
!=
NULL
)
{
for
(
int32_t
i
=
pos
+
1
;
i
<
pArray
->
size
;
++
i
)
{
void
*
p
=
taosArrayGetP
(
pArray
,
i
);
fp
(
p
);
}
}
pArray
->
size
=
pos
+
1
;
}
void
*
taosArrayAddAll
(
SArray
*
pArray
,
const
SArray
*
pInput
)
{
void
*
taosArrayAddAll
(
SArray
*
pArray
,
const
SArray
*
pInput
)
{
if
(
pInput
)
{
if
(
pInput
)
{
return
taosArrayAddBatch
(
pArray
,
pInput
->
pData
,
(
int32_t
)
taosArrayGetSize
(
pInput
));
return
taosArrayAddBatch
(
pArray
,
pInput
->
pData
,
(
int32_t
)
taosArrayGetSize
(
pInput
));
...
...
source/util/src/terror.c
浏览文件 @
72bd7798
...
@@ -501,19 +501,9 @@ TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INTER_VALUE_TOO_SMALL, "Interval too small")
...
@@ -501,19 +501,9 @@ TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INTER_VALUE_TOO_SMALL, "Interval too small")
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_DB_NOT_SPECIFIED
,
"Database not specified"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_DB_NOT_SPECIFIED
,
"Database not specified"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_IDENTIFIER_NAME
,
"Invalid identifier name"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_IDENTIFIER_NAME
,
"Invalid identifier name"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_CORRESPONDING_STABLE_ERR
,
"Corresponding super table not in this db"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_CORRESPONDING_STABLE_ERR
,
"Corresponding super table not in this db"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_RANGE_OPTION
,
"Invalid option"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_DB_OPTION
,
"Invalid database option"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_STR_OPTION
,
"Invalid option"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_TABLE_OPTION
,
"Invalid table option"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_ENUM_OPTION
,
"Invalid option"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_KEEP_NUM
,
"Invalid number of keep options"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_KEEP_ORDER
,
"Invalid keep value, should be keep0 <= keep1 <= keep2"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_KEEP_VALUE
,
"Invalid option keep"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_COMMENT_OPTION
,
"Invalid option comment"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_F_RANGE_OPTION
,
"Invalid option"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_ROLLUP_OPTION
,
"Invalid option rollup: only one function is allowed"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_RETENTIONS_OPTION
,
"Invalid option retentions"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_GROUPBY_WINDOW_COEXIST
,
"GROUP BY and WINDOW-clause can't be used together"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_GROUPBY_WINDOW_COEXIST
,
"GROUP BY and WINDOW-clause can't be used together"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_OPTION_UNIT
,
"Invalid option unit: only m, h, d allowed"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_KEEP_UNIT
,
"Invalid option keep unit: only m, h, d allowed"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_AGG_FUNC_NESTING
,
"Aggregate functions do not support nesting"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_AGG_FUNC_NESTING
,
"Aggregate functions do not support nesting"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_STATE_WIN_TYPE
,
"Only support STATE_WINDOW on integer/bool/varchar column"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_STATE_WIN_TYPE
,
"Only support STATE_WINDOW on integer/bool/varchar column"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_STATE_WIN_COL
,
"Not support STATE_WINDOW on tag column"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INVALID_STATE_WIN_COL
,
"Not support STATE_WINDOW on tag column"
)
...
...
tests/parallel_test/container_build.sh
浏览文件 @
72bd7798
...
@@ -52,7 +52,7 @@ fi
...
@@ -52,7 +52,7 @@ fi
docker run
\
docker run
\
-v
$REP_MOUNT_PARAM
\
-v
$REP_MOUNT_PARAM
\
--rm
--ulimit
core
=
-1
taos_test:v1.0 sh
-c
"cd
$REP_DIR
;rm -rf debug;mkdir -p debug;cd debug;cmake .. -DBUILD_HTTP=false -DBUILD_TOOLS=true;make -j
$THREAD_COUNT
"
--rm
--ulimit
core
=
-1
taos_test:v1.0 sh
-c
"cd
$REP_DIR
;rm -rf debug;mkdir -p debug;cd debug;cmake .. -DBUILD_HTTP=false -DBUILD_TOOLS=true
-DWEBSOCKET=true
;make -j
$THREAD_COUNT
"
ret
=
$?
ret
=
$?
exit
$ret
exit
$ret
...
...
tests/pytest/crash_gen/crash_gen_main.py
浏览文件 @
72bd7798
...
@@ -1326,7 +1326,7 @@ class Task():
...
@@ -1326,7 +1326,7 @@ class Task():
0x03A1
,
# STable [does] not exist
0x03A1
,
# STable [does] not exist
0x03AA
,
# Tag already exists
0x03AA
,
# Tag already exists
0x0603
,
# Table already exists
0x0603
,
# Table already exists
0x260
2
,
# Table does not exist
0x260
3
,
# Table does not exist
0x260d
,
# Tags number not matched
0x260d
,
# Tags number not matched
...
...
tests/script/tsim/valgrind/checkError1.sim
浏览文件 @
72bd7798
...
@@ -7,6 +7,7 @@ system sh/exec.sh -n dnode1 -s start -v
...
@@ -7,6 +7,7 @@ system sh/exec.sh -n dnode1 -s start -v
system sh/exec.sh -n dnode2 -s start -v
system sh/exec.sh -n dnode2 -s start -v
sql connect
sql connect
print =============== step1: create alter drop show user
print =============== step1: create alter drop show user
sql create user u1 pass 'taosdata'
sql create user u1 pass 'taosdata'
sql show users
sql show users
...
@@ -158,4 +159,4 @@ endi
...
@@ -158,4 +159,4 @@ endi
if $system_content == $null then
if $system_content == $null then
return -1
return -1
endi
endi
\ No newline at end of file
tests/system-test/7-tmq/subscribeDb4.py
浏览文件 @
72bd7798
...
@@ -88,7 +88,7 @@ class TDTestCase:
...
@@ -88,7 +88,7 @@ class TDTestCase:
tmqCom
.
startTmqSimProcess
(
self
.
pollDelay
,
self
.
paraDict
[
"dbName"
],
self
.
showMsg
,
self
.
showRow
,
self
.
cdbName
)
tmqCom
.
startTmqSimProcess
(
self
.
pollDelay
,
self
.
paraDict
[
"dbName"
],
self
.
showMsg
,
self
.
showRow
,
self
.
cdbName
)
tdLog
.
info
(
"After waiting for a period of time, drop one stable"
)
tdLog
.
info
(
"After waiting for a period of time, drop one stable"
)
time
.
sleep
(
10
)
time
.
sleep
(
3
)
tdSql
.
execute
(
"drop table %s.%s"
%
(
self
.
paraDict
[
'dbName'
],
self
.
paraDict
[
'stbName'
]))
tdSql
.
execute
(
"drop table %s.%s"
%
(
self
.
paraDict
[
'dbName'
],
self
.
paraDict
[
'stbName'
]))
tdLog
.
info
(
"wait result from consumer, then check it"
)
tdLog
.
info
(
"wait result from consumer, then check it"
)
...
...
taos-tools
@
2b75339b
比较
0b8a3373
...
2b75339b
Subproject commit
0b8a3373bb7548f8106d13e7d3b0a988d3c4d48a
Subproject commit
2b75339b8b5c239619d1f09970d03075c58140dd
taosws-rs
@
d8cf0e7e
比较
c5fded26
...
d8cf0e7e
Subproject commit
c5fded266d3b10508e38bf3285bb7ecf798bc343
Subproject commit
d8cf0e7e067d193cfaf3e920b6ec6cbb9b9f4165
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录