Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
c2da6d21
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c2da6d21
编写于
3月 26, 2021
作者:
W
wu champion
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' into test/TD-3433
上级
9db07982
f089bf04
变更
18
展开全部
隐藏空白更改
内联
并排
Showing
18 changed file
with
3431 addition
and
414 deletion
+3431
-414
Jenkinsfile
Jenkinsfile
+2
-2
documentation20/cn/10.cluster/docs.md
documentation20/cn/10.cluster/docs.md
+4
-3
src/client/inc/tscUtil.h
src/client/inc/tscUtil.h
+17
-0
src/client/inc/tsclient.h
src/client/inc/tsclient.h
+4
-4
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+249
-39
src/client/src/tscServer.c
src/client/src/tscServer.c
+28
-13
src/client/src/tscSubquery.c
src/client/src/tscSubquery.c
+436
-178
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+76
-8
src/common/src/tglobal.c
src/common/src/tglobal.c
+1
-1
src/inc/taosdef.h
src/inc/taosdef.h
+2
-2
src/kit/taosdemo/CMakeLists.txt
src/kit/taosdemo/CMakeLists.txt
+47
-0
src/kit/taosdemo/taosdemo.c
src/kit/taosdemo/taosdemo.c
+169
-134
src/rpc/src/rpcMain.c
src/rpc/src/rpcMain.c
+20
-9
src/tsdb/src/tsdbCommit.c
src/tsdb/src/tsdbCommit.c
+1
-1
tests/Jenkinsfile
tests/Jenkinsfile
+14
-13
tests/examples/c/asyncdemo.c
tests/examples/c/asyncdemo.c
+10
-0
tests/script/general/parser/join_multitables.sim
tests/script/general/parser/join_multitables.sim
+2326
-0
tests/test-all.sh
tests/test-all.sh
+25
-7
未找到文件。
Jenkinsfile
浏览文件 @
c2da6d21
...
...
@@ -39,14 +39,14 @@ def pre_test(){
sudo rmtaos || echo "taosd has not installed"
'''
sh
'''
killall -9 taosd ||echo "no taosd running"
killall -9 gdb || echo "no gdb running"
cd ${WKC}
git checkout develop
git reset --hard HEAD~10 >/dev/null
git pull >/dev/null
git fetch origin +refs/pull/${CHANGE_ID}/merge
git checkout -qf FETCH_HEAD
git --no-pager diff --name-only FETCH_HEAD $(git merge-base FETCH_HEAD develop)|grep -v -E '.*md|//src//connector|Jenkinsfile'
find ${WKC}/tests/pytest -name \'*\'.sql -exec rm -rf {} \\;
cd ${WK}
git reset --hard HEAD~10
...
...
documentation20/cn/10.cluster/docs.md
浏览文件 @
c2da6d21
...
...
@@ -111,9 +111,10 @@ taos>
**提示:**
-
任何已经加入集群在线的数据节点,都可以作为后续待加入节点的firstEP。
-
firstEp这个参数仅仅在该数据节点首次加入集群时有作用,加入集群后,该数据节点会保存最新的mnode的End Point列表,不再依赖这个参数。
-
两个没有配置firstEp参数的数据节点dnode启动后,会独立运行起来。这个时候,无法将其中一个数据节点加入到另外一个数据节点,形成集群。
**无法将两个独立的集群合并成为新的集群**
。
-
任何已经加入集群在线的数据节点,都可以作为后续待加入节点的 firstEP。
-
firstEp 这个参数仅仅在该数据节点首次加入集群时有作用,加入集群后,该数据节点会保存最新的 mnode 的 End Point 列表,不再依赖这个参数。
-
接下来,配置文件中的 firstEp 参数就主要在客户端连接的时候使用了,例如 taos shell 如果不加参数,会默认连接由 firstEp 指定的节点。
-
两个没有配置 firstEp 参数的数据节点 dnode 启动后,会独立运行起来。这个时候,无法将其中一个数据节点加入到另外一个数据节点,形成集群。
**无法将两个独立的集群合并成为新的集群**
。
## <a class="anchor" id="management"></a>数据节点管理
...
...
src/client/inc/tscUtil.h
浏览文件 @
c2da6d21
...
...
@@ -83,6 +83,22 @@ typedef struct SJoinSupporter {
SArray
*
pVgroupTables
;
}
SJoinSupporter
;
typedef
struct
SMergeCtx
{
SJoinSupporter
*
p
;
int32_t
idx
;
SArray
*
res
;
int8_t
compared
;
}
SMergeCtx
;
typedef
struct
SMergeTsCtx
{
SJoinSupporter
*
p
;
STSBuf
*
res
;
int64_t
numOfInput
;
int8_t
compared
;
}
SMergeTsCtx
;
typedef
struct
SVgroupTableInfo
{
SVgroupInfo
vgInfo
;
SArray
*
itemList
;
//SArray<STableIdInfo>
...
...
@@ -183,6 +199,7 @@ int32_t tscSqlExprCopy(SArray* dst, const SArray* src, uint64_t uid, bool deep
void
tscSqlExprInfoDestroy
(
SArray
*
pExprInfo
);
SColumn
*
tscColumnClone
(
const
SColumn
*
src
);
bool
tscColumnExists
(
SArray
*
pColumnList
,
SColumnIndex
*
pColIndex
);
SColumn
*
tscColumnListInsert
(
SArray
*
pColList
,
SColumnIndex
*
colIndex
);
SArray
*
tscColumnListClone
(
const
SArray
*
src
,
int16_t
tableIndex
);
void
tscColumnListDestroy
(
SArray
*
pColList
);
...
...
src/client/inc/tsclient.h
浏览文件 @
c2da6d21
...
...
@@ -142,15 +142,15 @@ typedef struct SCond {
}
SCond
;
typedef
struct
SJoinNode
{
char
tableName
[
TSDB_TABLE_FNAME_LEN
];
uint64_t
uid
;
int16_t
tagColId
;
SArray
*
tsJoin
;
SArray
*
tagJoin
;
}
SJoinNode
;
typedef
struct
SJoinInfo
{
bool
hasJoin
;
SJoinNode
left
;
SJoinNode
right
;
bool
hasJoin
;
SJoinNode
*
joinTables
[
TSDB_MAX_JOIN_TABLE_NUM
];
}
SJoinInfo
;
typedef
struct
STagCond
{
...
...
src/client/src/tscSQLParser.c
浏览文件 @
c2da6d21
...
...
@@ -977,12 +977,18 @@ int32_t parseSlidingClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SStrToken* pSl
int32_t
tscSetTableFullName
(
STableMetaInfo
*
pTableMetaInfo
,
SStrToken
*
pTableName
,
SSqlObj
*
pSql
)
{
const
char
*
msg1
=
"name too long"
;
const
char
*
msg2
=
"acctId too long"
;
const
char
*
msg3
=
"no acctId"
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
hasSpecifyDB
(
pTableName
))
{
// db has been specified in sql string so we ignore current db path
code
=
tNameSetAcctId
(
&
pTableMetaInfo
->
name
,
getAccountId
(
pSql
));
char
*
acctId
=
getAccountId
(
pSql
);
if
(
acctId
==
NULL
||
strlen
(
acctId
)
<=
0
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
code
=
tNameSetAcctId
(
&
pTableMetaInfo
->
name
,
acctId
);
if
(
code
!=
0
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
}
...
...
@@ -3353,24 +3359,26 @@ static int32_t getColumnQueryCondInfo(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSq
}
}
static
int32_t
g
etJoinCondInfo
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSqlExpr
*
pExpr
)
{
const
char
*
msg1
=
"invalid join query condition"
;
const
char
*
msg
2
=
"invalid table name in join query
"
;
static
int32_t
checkAndS
etJoinCondInfo
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSqlExpr
*
pExpr
)
{
int32_t
code
=
0
;
const
char
*
msg
1
=
"timestamp required for join tables
"
;
const
char
*
msg3
=
"type of join columns must be identical"
;
const
char
*
msg4
=
"invalid column name in join condition"
;
const
char
*
msg5
=
"only support one join tag for each table"
;
if
(
pExpr
==
NULL
)
{
return
TSDB_CODE_SUCCESS
;
}
if
(
!
tSqlExprIsParentOfLeaf
(
pExpr
))
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
code
=
checkAndSetJoinCondInfo
(
pCmd
,
pQueryInfo
,
pExpr
->
pLeft
);
if
(
code
)
{
return
code
;
}
return
checkAndSetJoinCondInfo
(
pCmd
,
pQueryInfo
,
pExpr
->
pRight
);
}
STagCond
*
pTagCond
=
&
pQueryInfo
->
tagCond
;
SJoinNode
*
pLeft
=
&
pTagCond
->
joinInfo
.
left
;
SJoinNode
*
pRight
=
&
pTagCond
->
joinInfo
.
right
;
SColumnIndex
index
=
COLUMN_INDEX_INITIALIZER
;
if
(
getColumnIndexByName
(
pCmd
,
&
pExpr
->
pLeft
->
colInfo
,
pQueryInfo
,
&
index
)
!=
TSDB_CODE_SUCCESS
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg4
);
...
...
@@ -3379,13 +3387,28 @@ static int32_t getJoinCondInfo(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlExpr*
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
index
.
tableIndex
);
SSchema
*
pTagSchema1
=
tscGetTableColumnSchema
(
pTableMetaInfo
->
pTableMeta
,
index
.
columnIndex
);
pLeft
->
uid
=
pTableMetaInfo
->
pTableMeta
->
id
.
uid
;
pLeft
->
tagColId
=
pTagSchema1
->
colId
;
assert
(
index
.
tableIndex
>=
0
&&
index
.
tableIndex
<
TSDB_MAX_JOIN_TABLE_NUM
);
int32_t
code
=
tNameExtractFullName
(
&
pTableMetaInfo
->
name
,
pLeft
->
tableName
)
;
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg
2
);
SJoinNode
**
leftNode
=
&
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
[
index
.
tableIndex
]
;
if
(
*
leftNode
==
NULL
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg
1
);
}
(
*
leftNode
)
->
uid
=
pTableMetaInfo
->
pTableMeta
->
id
.
uid
;
(
*
leftNode
)
->
tagColId
=
pTagSchema1
->
colId
;
if
(
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
index
.
columnIndex
=
index
.
columnIndex
-
tscGetNumOfColumns
(
pTableMetaInfo
->
pTableMeta
);
if
(
!
tscColumnExists
(
pTableMetaInfo
->
tagColList
,
&
index
))
{
tscColumnListInsert
(
pTableMetaInfo
->
tagColList
,
&
index
);
if
(
taosArrayGetSize
(
pTableMetaInfo
->
tagColList
)
>
1
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg5
);
}
}
}
int16_t
leftIdx
=
index
.
tableIndex
;
index
=
(
SColumnIndex
)
COLUMN_INDEX_INITIALIZER
;
if
(
getColumnIndexByName
(
pCmd
,
&
pExpr
->
pRight
->
colInfo
,
pQueryInfo
,
&
index
)
!=
TSDB_CODE_SUCCESS
)
{
...
...
@@ -3395,20 +3418,55 @@ static int32_t getJoinCondInfo(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlExpr*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
index
.
tableIndex
);
SSchema
*
pTagSchema2
=
tscGetTableColumnSchema
(
pTableMetaInfo
->
pTableMeta
,
index
.
columnIndex
);
pRight
->
uid
=
pTableMetaInfo
->
pTableMeta
->
id
.
uid
;
pRight
->
tagColId
=
pTagSchema2
->
colId
;
assert
(
index
.
tableIndex
>=
0
&&
index
.
tableIndex
<
TSDB_MAX_JOIN_TABLE_NUM
);
code
=
tNameExtractFullName
(
&
pTableMetaInfo
->
name
,
pRight
->
tableName
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
SJoinNode
**
rightNode
=
&
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
[
index
.
tableIndex
];
if
(
*
rightNode
==
NULL
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
}
(
*
rightNode
)
->
uid
=
pTableMetaInfo
->
pTableMeta
->
id
.
uid
;
(
*
rightNode
)
->
tagColId
=
pTagSchema2
->
colId
;
if
(
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
index
.
columnIndex
=
index
.
columnIndex
-
tscGetNumOfColumns
(
pTableMetaInfo
->
pTableMeta
);
if
(
!
tscColumnExists
(
pTableMetaInfo
->
tagColList
,
&
index
))
{
tscColumnListInsert
(
pTableMetaInfo
->
tagColList
,
&
index
);
if
(
taosArrayGetSize
(
pTableMetaInfo
->
tagColList
)
>
1
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg5
);
}
}
}
int16_t
rightIdx
=
index
.
tableIndex
;
if
(
pTagSchema1
->
type
!=
pTagSchema2
->
type
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
pTagCond
->
joinInfo
.
hasJoin
=
true
;
if
((
*
leftNode
)
->
tagJoin
==
NULL
)
{
(
*
leftNode
)
->
tagJoin
=
taosArrayInit
(
2
,
sizeof
(
int16_t
));
}
if
((
*
rightNode
)
->
tagJoin
==
NULL
)
{
(
*
rightNode
)
->
tagJoin
=
taosArrayInit
(
2
,
sizeof
(
int16_t
));
}
taosArrayPush
((
*
leftNode
)
->
tagJoin
,
&
rightIdx
);
taosArrayPush
((
*
rightNode
)
->
tagJoin
,
&
leftIdx
);
pQueryInfo
->
tagCond
.
joinInfo
.
hasJoin
=
true
;
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
getJoinCondInfo
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSqlExpr
*
pExpr
)
{
if
(
pExpr
==
NULL
)
{
return
TSDB_CODE_SUCCESS
;
}
return
checkAndSetJoinCondInfo
(
pCmd
,
pQueryInfo
,
pExpr
);
}
static
int32_t
validateSQLExpr
(
SSqlCmd
*
pCmd
,
tSqlExpr
*
pExpr
,
SQueryInfo
*
pQueryInfo
,
SColumnList
*
pList
,
...
...
@@ -3674,7 +3732,7 @@ static int32_t handleExprInQueryCond(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSql
const
char
*
msg1
=
"table query cannot use tags filter"
;
const
char
*
msg2
=
"illegal column name"
;
const
char
*
msg3
=
"only one query time range allowed"
;
const
char
*
msg4
=
"
only one join condition allowed
"
;
const
char
*
msg4
=
"
too many join tables
"
;
const
char
*
msg5
=
"not support ordinary column join"
;
const
char
*
msg6
=
"only one query condition on tbname allowed"
;
const
char
*
msg7
=
"only in/like allowed in filter table name"
;
...
...
@@ -3705,6 +3763,47 @@ static int32_t handleExprInQueryCond(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSql
TSDB_QUERY_SET_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_JOIN_QUERY
);
pCondExpr
->
tsJoin
=
true
;
assert
(
index
.
tableIndex
>=
0
&&
index
.
tableIndex
<
TSDB_MAX_JOIN_TABLE_NUM
);
SJoinNode
**
leftNode
=
&
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
[
index
.
tableIndex
];
if
(
*
leftNode
==
NULL
)
{
*
leftNode
=
calloc
(
1
,
sizeof
(
SJoinNode
));
if
(
*
leftNode
==
NULL
)
{
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
}
int16_t
leftIdx
=
index
.
tableIndex
;
SColumnIndex
index
=
COLUMN_INDEX_INITIALIZER
;
if
(
getColumnIndexByName
(
pCmd
,
&
pRight
->
colInfo
,
pQueryInfo
,
&
index
)
!=
TSDB_CODE_SUCCESS
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
}
if
(
index
.
tableIndex
<
0
||
index
.
tableIndex
>=
TSDB_MAX_JOIN_TABLE_NUM
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg4
);
}
SJoinNode
**
rightNode
=
&
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
[
index
.
tableIndex
];
if
(
*
rightNode
==
NULL
)
{
*
rightNode
=
calloc
(
1
,
sizeof
(
SJoinNode
));
if
(
*
rightNode
==
NULL
)
{
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
}
int16_t
rightIdx
=
index
.
tableIndex
;
if
((
*
leftNode
)
->
tsJoin
==
NULL
)
{
(
*
leftNode
)
->
tsJoin
=
taosArrayInit
(
2
,
sizeof
(
int16_t
));
}
if
((
*
rightNode
)
->
tsJoin
==
NULL
)
{
(
*
rightNode
)
->
tsJoin
=
taosArrayInit
(
2
,
sizeof
(
int16_t
));
}
taosArrayPush
((
*
leftNode
)
->
tsJoin
,
&
rightIdx
);
taosArrayPush
((
*
rightNode
)
->
tsJoin
,
&
leftIdx
);
/*
* to release expression, e.g., m1.ts = m2.ts,
* since this expression is used to set the join query type
...
...
@@ -3762,10 +3861,6 @@ static int32_t handleExprInQueryCond(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSql
return
TSDB_CODE_TSC_INVALID_SQL
;
}
if
(
pCondExpr
->
pJoinExpr
!=
NULL
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg4
);
}
pQueryInfo
->
type
|=
TSDB_QUERY_TYPE_JOIN_QUERY
;
ret
=
setExprToCond
(
&
pCondExpr
->
pJoinExpr
,
*
pExpr
,
NULL
,
parentOptr
,
pQueryInfo
->
msg
);
*
pExpr
=
NULL
;
...
...
@@ -3993,7 +4088,8 @@ static bool validateFilterExpr(SQueryInfo* pQueryInfo) {
static
int32_t
getTimeRangeFromExpr
(
SSqlCmd
*
pCmd
,
SQueryInfo
*
pQueryInfo
,
tSqlExpr
*
pExpr
)
{
const
char
*
msg0
=
"invalid timestamp"
;
const
char
*
msg1
=
"only one time stamp window allowed"
;
int32_t
code
=
0
;
if
(
pExpr
==
NULL
)
{
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -4003,8 +4099,11 @@ static int32_t getTimeRangeFromExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlE
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
}
getTimeRangeFromExpr
(
pCmd
,
pQueryInfo
,
pExpr
->
pLeft
);
code
=
getTimeRangeFromExpr
(
pCmd
,
pQueryInfo
,
pExpr
->
pLeft
);
if
(
code
)
{
return
code
;
}
return
getTimeRangeFromExpr
(
pCmd
,
pQueryInfo
,
pExpr
->
pRight
);
}
else
{
SColumnIndex
index
=
COLUMN_INDEX_INITIALIZER
;
...
...
@@ -4085,6 +4184,7 @@ static void cleanQueryExpr(SCondExpr* pCondExpr) {
}
}
/*
static void doAddJoinTagsColumnsIntoTagList(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondExpr* pCondExpr) {
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
if (QUERY_IS_JOIN_QUERY(pQueryInfo->type) && UTIL_TABLE_IS_SUPER_TABLE(pTableMetaInfo)) {
...
...
@@ -4107,6 +4207,7 @@ static void doAddJoinTagsColumnsIntoTagList(SSqlCmd* pCmd, SQueryInfo* pQueryInf
tscColumnListInsert(pTableMetaInfo->tagColList, &index);
}
}
*/
static
int32_t
validateTagCondExpr
(
SSqlCmd
*
pCmd
,
tExprNode
*
p
)
{
const
char
*
msg1
=
"invalid tag operator"
;
...
...
@@ -4250,6 +4351,102 @@ static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondE
return
ret
;
}
int32_t
validateJoinNodes
(
SQueryInfo
*
pQueryInfo
,
SSqlObj
*
pSql
)
{
const
char
*
msg1
=
"timestamp required for join tables"
;
const
char
*
msg2
=
"tag required for join stables"
;
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
SJoinNode
*
node
=
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
[
i
];
if
(
node
==
NULL
||
node
->
tsJoin
==
NULL
||
taosArrayGetSize
(
node
->
tsJoin
)
<=
0
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
&
pSql
->
cmd
),
msg1
);
}
}
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
if
(
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
SJoinNode
*
node
=
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
[
i
];
if
(
node
==
NULL
||
node
->
tagJoin
==
NULL
||
taosArrayGetSize
(
node
->
tagJoin
)
<=
0
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
&
pSql
->
cmd
),
msg2
);
}
}
}
return
TSDB_CODE_SUCCESS
;
}
void
mergeJoinNodesImpl
(
int8_t
*
r
,
int8_t
*
p
,
int16_t
*
tidx
,
SJoinNode
**
nodes
,
int32_t
type
)
{
SJoinNode
*
node
=
nodes
[
*
tidx
];
SArray
*
arr
=
(
type
==
0
)
?
node
->
tsJoin
:
node
->
tagJoin
;
size_t
size
=
taosArrayGetSize
(
arr
);
p
[
*
tidx
]
=
1
;
for
(
int32_t
j
=
0
;
j
<
size
;
j
++
)
{
int16_t
*
idx
=
taosArrayGet
(
arr
,
j
);
r
[
*
idx
]
=
1
;
if
(
p
[
*
idx
]
==
0
)
{
mergeJoinNodesImpl
(
r
,
p
,
idx
,
nodes
,
type
);
}
}
}
int32_t
mergeJoinNodes
(
SQueryInfo
*
pQueryInfo
,
SSqlObj
*
pSql
)
{
const
char
*
msg1
=
"not all join tables have same timestamp"
;
const
char
*
msg2
=
"not all join tables have same tag"
;
int8_t
r
[
TSDB_MAX_JOIN_TABLE_NUM
]
=
{
0
};
int8_t
p
[
TSDB_MAX_JOIN_TABLE_NUM
]
=
{
0
};
for
(
int16_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
mergeJoinNodesImpl
(
r
,
p
,
&
i
,
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
,
0
);
taosArrayClear
(
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
[
i
]
->
tsJoin
);
for
(
int32_t
j
=
0
;
j
<
TSDB_MAX_JOIN_TABLE_NUM
;
++
j
)
{
if
(
r
[
j
])
{
taosArrayPush
(
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
[
i
]
->
tsJoin
,
&
j
);
}
}
memset
(
r
,
0
,
sizeof
(
r
));
memset
(
p
,
0
,
sizeof
(
p
));
}
if
(
taosArrayGetSize
(
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
[
0
]
->
tsJoin
)
!=
pQueryInfo
->
numOfTables
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
&
pSql
->
cmd
),
msg1
);
}
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
if
(
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
for
(
int16_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
mergeJoinNodesImpl
(
r
,
p
,
&
i
,
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
,
1
);
taosArrayClear
(
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
[
i
]
->
tagJoin
);
for
(
int32_t
j
=
0
;
j
<
TSDB_MAX_JOIN_TABLE_NUM
;
++
j
)
{
if
(
r
[
j
])
{
taosArrayPush
(
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
[
i
]
->
tagJoin
,
&
j
);
}
}
memset
(
r
,
0
,
sizeof
(
r
));
memset
(
p
,
0
,
sizeof
(
p
));
}
if
(
taosArrayGetSize
(
pQueryInfo
->
tagCond
.
joinInfo
.
joinTables
[
0
]
->
tagJoin
)
!=
pQueryInfo
->
numOfTables
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
&
pSql
->
cmd
),
msg2
);
}
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
parseWhereClause
(
SQueryInfo
*
pQueryInfo
,
tSqlExpr
**
pExpr
,
SSqlObj
*
pSql
)
{
if
(
pExpr
==
NULL
)
{
return
TSDB_CODE_SUCCESS
;
...
...
@@ -4295,17 +4492,17 @@ int32_t parseWhereClause(SQueryInfo* pQueryInfo, tSqlExpr** pExpr, SSqlObj* pSql
// 4. get the table name query condition
if
((
ret
=
getTablenameCond
(
&
pSql
->
cmd
,
pQueryInfo
,
condExpr
.
pTableCond
,
&
sb
))
!=
TSDB_CODE_SUCCESS
)
{
return
ret
;
goto
PARSE_WHERE_EXIT
;
}
// 5. other column query condition
if
((
ret
=
getColumnQueryCondInfo
(
&
pSql
->
cmd
,
pQueryInfo
,
condExpr
.
pColumnCond
,
TK_AND
))
!=
TSDB_CODE_SUCCESS
)
{
return
ret
;
goto
PARSE_WHERE_EXIT
;
}
// 6. join condition
if
((
ret
=
getJoinCondInfo
(
&
pSql
->
cmd
,
pQueryInfo
,
condExpr
.
pJoinExpr
))
!=
TSDB_CODE_SUCCESS
)
{
return
ret
;
goto
PARSE_WHERE_EXIT
;
}
// 7. query condition for table name
...
...
@@ -4313,12 +4510,29 @@ int32_t parseWhereClause(SQueryInfo* pQueryInfo, tSqlExpr** pExpr, SSqlObj* pSql
ret
=
setTableCondForSTableQuery
(
&
pSql
->
cmd
,
pQueryInfo
,
getAccountId
(
pSql
),
condExpr
.
pTableCond
,
condExpr
.
tableCondIndex
,
&
sb
);
taosStringBuilderDestroy
(
&
sb
);
if
(
ret
)
{
goto
PARSE_WHERE_EXIT
;
}
if
(
!
validateFilterExpr
(
pQueryInfo
))
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
&
pSql
->
cmd
),
msg2
);
ret
=
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
&
pSql
->
cmd
),
msg2
);
goto
PARSE_WHERE_EXIT
;
}
//doAddJoinTagsColumnsIntoTagList(&pSql->cmd, pQueryInfo, &condExpr);
if
(
condExpr
.
tsJoin
)
{
ret
=
validateJoinNodes
(
pQueryInfo
,
pSql
);
if
(
ret
)
{
goto
PARSE_WHERE_EXIT
;
}
ret
=
mergeJoinNodes
(
pQueryInfo
,
pSql
);
if
(
ret
)
{
goto
PARSE_WHERE_EXIT
;
}
}
doAddJoinTagsColumnsIntoTagList
(
&
pSql
->
cmd
,
pQueryInfo
,
&
condExpr
);
PARSE_WHERE_EXIT:
cleanQueryExpr
(
&
condExpr
);
return
ret
;
...
...
@@ -6531,7 +6745,6 @@ int32_t doValidateSqlNode(SSqlObj* pSql, SQuerySqlNode* pQuerySqlNode, int32_t i
const
char
*
msg1
=
"point interpolation query needs timestamp"
;
const
char
*
msg2
=
"fill only available for interval query"
;
const
char
*
msg3
=
"start(end) time of query range required or time range too large"
;
const
char
*
msg4
=
"illegal number of tables in from clause"
;
const
char
*
msg5
=
"too many columns in selection clause"
;
const
char
*
msg6
=
"too many tables in from clause"
;
const
char
*
msg7
=
"invalid table alias name"
;
...
...
@@ -6568,14 +6781,11 @@ int32_t doValidateSqlNode(SSqlObj* pSql, SQuerySqlNode* pQuerySqlNode, int32_t i
}
size_t
fromSize
=
taosArrayGetSize
(
pQuerySqlNode
->
from
->
tableList
);
if
(
fromSize
>
TSDB_MAX_JOIN_TABLE_NUM
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg
4
);
if
(
fromSize
>
TSDB_MAX_JOIN_TABLE_NUM
*
2
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg
6
);
}
pQueryInfo
->
command
=
TSDB_SQL_SELECT
;
if
(
fromSize
>
2
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg6
);
}
// set all query tables, which are maybe more than one.
for
(
int32_t
i
=
0
;
i
<
fromSize
;
++
i
)
{
...
...
src/client/src/tscServer.c
浏览文件 @
c2da6d21
...
...
@@ -613,7 +613,7 @@ static int32_t tscEstimateQueryMsgSize(SSqlObj *pSql, int32_t clauseIndex) {
tableSerialize
+
sqlLen
+
4096
+
pQueryInfo
->
bufLen
;
}
static
char
*
doSerializeTableInfo
(
SQueryTableMsg
*
pQueryMsg
,
SSqlObj
*
pSql
,
char
*
pMsg
)
{
static
char
*
doSerializeTableInfo
(
SQueryTableMsg
*
pQueryMsg
,
SSqlObj
*
pSql
,
char
*
pMsg
,
int32_t
*
succeed
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetTableMetaInfoFromCmd
(
&
pSql
->
cmd
,
pSql
->
cmd
.
clauseIndex
,
0
);
TSKEY
dfltKey
=
htobe64
(
pQueryMsg
->
window
.
skey
);
...
...
@@ -626,9 +626,14 @@ static char *doSerializeTableInfo(SQueryTableMsg* pQueryMsg, SSqlObj *pSql, char
assert
(
index
>=
0
);
SVgroupInfo
*
pVgroupInfo
=
NULL
;
if
(
pTableMetaInfo
->
vgroupList
->
numOfVgroups
>
0
)
{
if
(
pTableMetaInfo
->
vgroupList
&&
pTableMetaInfo
->
vgroupList
->
numOfVgroups
>
0
)
{
assert
(
index
<
pTableMetaInfo
->
vgroupList
->
numOfVgroups
);
pVgroupInfo
=
&
pTableMetaInfo
->
vgroupList
->
vgroups
[
index
];
}
else
{
tscError
(
"%p No vgroup info found"
,
pSql
);
*
succeed
=
0
;
return
pMsg
;
}
vgId
=
pVgroupInfo
->
vgId
;
...
...
@@ -948,8 +953,13 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pQueryMsg
->
secondStageOutput
=
0
;
}
int32_t
succeed
=
1
;
// serialize the table info (sid, uid, tags)
pMsg
=
doSerializeTableInfo
(
pQueryMsg
,
pSql
,
pMsg
);
pMsg
=
doSerializeTableInfo
(
pQueryMsg
,
pSql
,
pMsg
,
&
succeed
);
if
(
succeed
==
0
)
{
return
TSDB_CODE_TSC_APP_ERROR
;
}
SSqlGroupbyExpr
*
pGroupbyExpr
=
&
pQueryInfo
->
groupbyExpr
;
if
(
pGroupbyExpr
->
numOfGroupCols
>
0
)
{
...
...
@@ -2081,19 +2091,24 @@ int tscProcessSTableVgroupRsp(SSqlObj *pSql) {
assert
(
pInfo
->
vgroupList
!=
NULL
);
pInfo
->
vgroupList
->
numOfVgroups
=
pVgroupMsg
->
numOfVgroups
;
for
(
int32_t
j
=
0
;
j
<
pInfo
->
vgroupList
->
numOfVgroups
;
++
j
)
{
//just init, no need to lock
SVgroupInfo
*
pVgroups
=
&
pInfo
->
vgroupList
->
vgroups
[
j
];
if
(
pInfo
->
vgroupList
->
numOfVgroups
<=
0
)
{
//tfree(pInfo->vgroupList);
tscError
(
"%p empty vgroup info"
,
pSql
);
}
else
{
for
(
int32_t
j
=
0
;
j
<
pInfo
->
vgroupList
->
numOfVgroups
;
++
j
)
{
//just init, no need to lock
SVgroupInfo
*
pVgroups
=
&
pInfo
->
vgroupList
->
vgroups
[
j
];
SVgroupMsg
*
vmsg
=
&
pVgroupMsg
->
vgroups
[
j
];
pVgroups
->
vgId
=
htonl
(
vmsg
->
vgId
);
pVgroups
->
numOfEps
=
vmsg
->
numOfEps
;
SVgroupMsg
*
vmsg
=
&
pVgroupMsg
->
vgroups
[
j
];
pVgroups
->
vgId
=
htonl
(
vmsg
->
vgId
);
pVgroups
->
numOfEps
=
vmsg
->
numOfEps
;
assert
(
pVgroups
->
numOfEps
>=
1
&&
pVgroups
->
vgId
>=
1
);
assert
(
pVgroups
->
numOfEps
>=
1
&&
pVgroups
->
vgId
>=
1
);
for
(
int32_t
k
=
0
;
k
<
pVgroups
->
numOfEps
;
++
k
)
{
pVgroups
->
epAddr
[
k
].
port
=
htons
(
vmsg
->
epAddr
[
k
].
port
);
pVgroups
->
epAddr
[
k
].
fqdn
=
strndup
(
vmsg
->
epAddr
[
k
].
fqdn
,
tListLen
(
vmsg
->
epAddr
[
k
].
fqdn
));
for
(
int32_t
k
=
0
;
k
<
pVgroups
->
numOfEps
;
++
k
)
{
pVgroups
->
epAddr
[
k
].
port
=
htons
(
vmsg
->
epAddr
[
k
].
port
);
pVgroups
->
epAddr
[
k
].
fqdn
=
strndup
(
vmsg
->
epAddr
[
k
].
fqdn
,
tListLen
(
vmsg
->
epAddr
[
k
].
fqdn
));
}
}
}
...
...
src/client/src/tscSubquery.c
浏览文件 @
c2da6d21
此差异已折叠。
点击以展开。
src/client/src/tscUtil.c
浏览文件 @
c2da6d21
...
...
@@ -1279,6 +1279,34 @@ int32_t tscSqlExprCopy(SArray* dst, const SArray* src, uint64_t uid, bool deepco
return
0
;
}
bool
tscColumnExists
(
SArray
*
pColumnList
,
SColumnIndex
*
pColIndex
)
{
// ignore the tbname columnIndex to be inserted into source list
if
(
pColIndex
->
columnIndex
<
0
)
{
return
false
;
}
size_t
numOfCols
=
taosArrayGetSize
(
pColumnList
);
int16_t
col
=
pColIndex
->
columnIndex
;
int32_t
i
=
0
;
while
(
i
<
numOfCols
)
{
SColumn
*
pCol
=
taosArrayGetP
(
pColumnList
,
i
);
if
((
pCol
->
colIndex
.
columnIndex
!=
col
)
||
(
pCol
->
colIndex
.
tableIndex
!=
pColIndex
->
tableIndex
))
{
++
i
;
continue
;
}
else
{
break
;
}
}
if
(
i
>=
numOfCols
||
numOfCols
==
0
)
{
return
false
;
}
return
true
;
}
SColumn
*
tscColumnListInsert
(
SArray
*
pColumnList
,
SColumnIndex
*
pColIndex
)
{
// ignore the tbname columnIndex to be inserted into source list
if
(
pColIndex
->
columnIndex
<
0
)
{
...
...
@@ -1583,7 +1611,25 @@ int32_t tscTagCondCopy(STagCond* dest, const STagCond* src) {
dest
->
tbnameCond
.
uid
=
src
->
tbnameCond
.
uid
;
dest
->
tbnameCond
.
len
=
src
->
tbnameCond
.
len
;
memcpy
(
&
dest
->
joinInfo
,
&
src
->
joinInfo
,
sizeof
(
SJoinInfo
));
dest
->
joinInfo
.
hasJoin
=
src
->
joinInfo
.
hasJoin
;
for
(
int32_t
i
=
0
;
i
<
TSDB_MAX_JOIN_TABLE_NUM
;
++
i
)
{
if
(
src
->
joinInfo
.
joinTables
[
i
])
{
dest
->
joinInfo
.
joinTables
[
i
]
=
calloc
(
1
,
sizeof
(
SJoinNode
));
memcpy
(
dest
->
joinInfo
.
joinTables
[
i
],
src
->
joinInfo
.
joinTables
[
i
],
sizeof
(
SJoinNode
));
if
(
src
->
joinInfo
.
joinTables
[
i
]
->
tsJoin
)
{
dest
->
joinInfo
.
joinTables
[
i
]
->
tsJoin
=
taosArrayDup
(
src
->
joinInfo
.
joinTables
[
i
]
->
tsJoin
);
}
if
(
src
->
joinInfo
.
joinTables
[
i
]
->
tagJoin
)
{
dest
->
joinInfo
.
joinTables
[
i
]
->
tagJoin
=
taosArrayDup
(
src
->
joinInfo
.
joinTables
[
i
]
->
tagJoin
);
}
}
}
dest
->
relType
=
src
->
relType
;
if
(
src
->
pCond
==
NULL
)
{
...
...
@@ -1629,6 +1675,23 @@ void tscTagCondRelease(STagCond* pTagCond) {
taosArrayDestroy
(
pTagCond
->
pCond
);
}
for
(
int32_t
i
=
0
;
i
<
TSDB_MAX_JOIN_TABLE_NUM
;
++
i
)
{
SJoinNode
*
node
=
pTagCond
->
joinInfo
.
joinTables
[
i
];
if
(
node
==
NULL
)
{
continue
;
}
if
(
node
->
tsJoin
!=
NULL
)
{
taosArrayDestroy
(
node
->
tsJoin
);
}
if
(
node
->
tagJoin
!=
NULL
)
{
taosArrayDestroy
(
node
->
tagJoin
);
}
tfree
(
node
);
}
memset
(
pTagCond
,
0
,
sizeof
(
STagCond
));
}
...
...
@@ -2318,16 +2381,21 @@ void tscDoQuery(SSqlObj* pSql) {
}
int16_t
tscGetJoinTagColIdByUid
(
STagCond
*
pTagCond
,
uint64_t
uid
)
{
if
(
pTagCond
->
joinInfo
.
left
.
uid
==
uid
)
{
return
pTagCond
->
joinInfo
.
left
.
tagColId
;
}
else
if
(
pTagCond
->
joinInfo
.
right
.
uid
==
uid
)
{
return
pTagCond
->
joinInfo
.
right
.
tagColId
;
}
else
{
assert
(
0
);
return
-
1
;
int32_t
i
=
0
;
while
(
i
<
TSDB_MAX_JOIN_TABLE_NUM
)
{
SJoinNode
*
node
=
pTagCond
->
joinInfo
.
joinTables
[
i
];
if
(
node
&&
node
->
uid
==
uid
)
{
return
node
->
tagColId
;
}
i
++
;
}
assert
(
0
);
return
-
1
;
}
int16_t
tscGetTagColIndexById
(
STableMeta
*
pTableMeta
,
int16_t
colId
)
{
int32_t
numOfTags
=
tscGetNumOfTags
(
pTableMeta
);
...
...
src/common/src/tglobal.c
浏览文件 @
c2da6d21
...
...
@@ -71,7 +71,7 @@ int32_t tsMaxBinaryDisplayWidth = 30;
int32_t
tsCompressMsgSize
=
-
1
;
// client
int32_t
tsMaxSQLStringLen
=
TSDB_MAX_SQL_LEN
;
int32_t
tsMaxSQLStringLen
=
TSDB_MAX_
ALLOWED_
SQL_LEN
;
int8_t
tsTscEnableRecordSql
=
0
;
// the maximum number of results for projection query on super table that are returned from
...
...
src/inc/taosdef.h
浏览文件 @
c2da6d21
...
...
@@ -259,7 +259,7 @@ do { \
#define TSDB_MIN_TABLES 4
#define TSDB_MAX_TABLES 10000000
#define TSDB_DEFAULT_TABLES 1000000
#define TSDB_TABLES_STEP 100
0
#define TSDB_TABLES_STEP 100
#define TSDB_MIN_DAYS_PER_FILE 1
#define TSDB_MAX_DAYS_PER_FILE 3650
...
...
@@ -317,7 +317,7 @@ do { \
#define TSDB_MAX_DB_QUORUM_OPTION 2
#define TSDB_DEFAULT_DB_QUORUM_OPTION 1
#define TSDB_MAX_JOIN_TABLE_NUM
5
#define TSDB_MAX_JOIN_TABLE_NUM
10
#define TSDB_MAX_UNION_CLAUSE 5
#define TSDB_MAX_BINARY_LEN (TSDB_MAX_BYTES_PER_ROW-TSDB_KEYSIZE)
...
...
src/kit/taosdemo/CMakeLists.txt
浏览文件 @
c2da6d21
...
...
@@ -3,6 +3,53 @@ PROJECT(TDengine)
INCLUDE_DIRECTORIES
(
${
TD_COMMUNITY_DIR
}
/src/client/inc
)
FIND_PACKAGE
(
Git
)
IF
(
GIT_FOUND
)
MESSAGE
(
"Git found"
)
EXECUTE_PROCESS
(
COMMAND
${
GIT_EXECUTABLE
}
log --pretty=oneline -n 1 ../src/kit/taosdemo/taosdemo.c
RESULT_VARIABLE RESULT
OUTPUT_VARIABLE TAOSDEMO_COMMIT
)
EXECUTE_PROCESS
(
COMMAND bash
"-c"
"echo '
${
TAOSDEMO_COMMIT
}
' | awk '{print $1}' | cut -c -9"
RESULT_VARIABLE RESULT
OUTPUT_VARIABLE TAOSDEMO_COMMIT_SHA1
)
EXECUTE_PROCESS
(
COMMAND
${
GIT_EXECUTABLE
}
status -z -s ../src/kit/taosdemo/taosdemo.c
RESULT_VARIABLE RESULT
OUTPUT_VARIABLE TAOSDEMO_STATUS
)
EXECUTE_PROCESS
(
COMMAND bash
"-c"
"echo '
${
TAOSDEMO_STATUS
}
' | awk '{print $1}'"
RESULT_VARIABLE RESULT
OUTPUT_VARIABLE TAOSDEMO_STATUS
)
MESSAGE
(
"taosdemo.c status: "
${
TAOSDEMO_STATUS
}
)
ELSE
()
MESSAGE
(
"Git not found"
)
SET
(
TAOSDEMO_COMMIT_SHA1
"unknown"
)
SET
(
TAOSDEMO_STATUS
"unknown"
)
ENDIF
(
GIT_FOUND
)
STRING
(
STRIP
${
TAOSDEMO_COMMIT_SHA1
}
TAOSDEMO_COMMIT_SHA1
)
MESSAGE
(
"taosdemo's latest commit in short is:"
${
TAOSDEMO_COMMIT_SHA1
}
)
STRING
(
STRIP
${
TAOSDEMO_STATUS
}
TAOSDEMO_STATUS
)
IF
(
TAOSDEMO_STATUS MATCHES
"M"
)
SET
(
TAOSDEMO_STATUS
"modified"
)
ELSE
()
SET
(
TAOSDEMO_STATUS
""
)
ENDIF
()
MESSAGE
(
"taosdemo's status is:"
${
TAOSDEMO_STATUS
}
)
ADD_DEFINITIONS
(
-DTAOSDEMO_COMMIT_SHA1=
"
${
TAOSDEMO_COMMIT_SHA1
}
"
)
ADD_DEFINITIONS
(
-DTAOSDEMO_STATUS=
"
${
TAOSDEMO_STATUS
}
"
)
MESSAGE
(
"VERNUMBER is:"
${
VERNUMBER
}
)
IF
(
VERNUMBER MATCHES
""
)
ADD_DEFINITIONS
(
-DTD_VERNUMBER=
"TDengie-version-unknown"
)
ELSE
()
ADD_DEFINITIONS
(
-DTD_VERNUMBER=
"
${
VERNUMBER
}
"
)
ENDIF
()
IF
(
TD_LINUX
)
AUX_SOURCE_DIRECTORY
(
. SRC
)
ADD_EXECUTABLE
(
taosdemo
${
SRC
}
)
...
...
src/kit/taosdemo/taosdemo.c
浏览文件 @
c2da6d21
此差异已折叠。
点击以展开。
src/rpc/src/rpcMain.c
浏览文件 @
c2da6d21
...
...
@@ -1017,6 +1017,13 @@ static SRpcConn *rpcProcessMsgHead(SRpcInfo *pRpc, SRecvInfo *pRecv, SRpcReqCont
return
pConn
;
}
static
void
doRpcReportBrokenLinkToServer
(
void
*
param
,
void
*
id
)
{
SRpcMsg
*
pRpcMsg
=
(
SRpcMsg
*
)(
param
);
SRpcConn
*
pConn
=
(
SRpcConn
*
)(
pRpcMsg
->
handle
);
SRpcInfo
*
pRpc
=
pConn
->
pRpc
;
(
*
(
pRpc
->
cfp
))(
pRpcMsg
,
NULL
);
free
(
pRpcMsg
);
}
static
void
rpcReportBrokenLinkToServer
(
SRpcConn
*
pConn
)
{
SRpcInfo
*
pRpc
=
pConn
->
pRpc
;
if
(
pConn
->
pReqMsg
==
NULL
)
return
;
...
...
@@ -1025,16 +1032,20 @@ static void rpcReportBrokenLinkToServer(SRpcConn *pConn) {
rpcAddRef
(
pRpc
);
tDebug
(
"%s, notify the server app, connection is gone"
,
pConn
->
info
);
SRpcMsg
rpcMsg
;
rpcMsg
.
pCont
=
pConn
->
pReqMsg
;
// pReqMsg is re-used to store the APP context from server
rpcMsg
.
contLen
=
pConn
->
reqMsgLen
;
// reqMsgLen is re-used to store the APP context length
rpcMsg
.
ahandle
=
pConn
->
ahandle
;
rpcMsg
.
handle
=
pConn
;
rpcMsg
.
msgType
=
pConn
->
inType
;
rpcMsg
.
code
=
TSDB_CODE_RPC_NETWORK_UNAVAIL
;
SRpcMsg
*
rpcMsg
=
malloc
(
sizeof
(
SRpcMsg
))
;
rpcMsg
->
pCont
=
pConn
->
pReqMsg
;
// pReqMsg is re-used to store the APP context from server
rpcMsg
->
contLen
=
pConn
->
reqMsgLen
;
// reqMsgLen is re-used to store the APP context length
rpcMsg
->
ahandle
=
pConn
->
ahandle
;
rpcMsg
->
handle
=
pConn
;
rpcMsg
->
msgType
=
pConn
->
inType
;
rpcMsg
->
code
=
TSDB_CODE_RPC_NETWORK_UNAVAIL
;
pConn
->
pReqMsg
=
NULL
;
pConn
->
reqMsgLen
=
0
;
if
(
pRpc
->
cfp
)
(
*
(
pRpc
->
cfp
))(
&
rpcMsg
,
NULL
);
if
(
pRpc
->
cfp
)
{
taosTmrStart
(
doRpcReportBrokenLinkToServer
,
0
,
rpcMsg
,
pRpc
->
tmrCtrl
);
}
else
{
free
(
rpcMsg
);
}
}
static
void
rpcProcessBrokenLink
(
SRpcConn
*
pConn
)
{
...
...
@@ -1051,7 +1062,7 @@ static void rpcProcessBrokenLink(SRpcConn *pConn) {
pConn
->
pReqMsg
=
NULL
;
taosTmrStart
(
rpcProcessConnError
,
0
,
pContext
,
pRpc
->
tmrCtrl
);
}
if
(
pConn
->
inType
)
rpcReportBrokenLinkToServer
(
pConn
);
rpcReleaseConn
(
pConn
);
...
...
src/tsdb/src/tsdbCommit.c
浏览文件 @
c2da6d21
...
...
@@ -17,7 +17,7 @@
#define TSDB_MAX_SUBBLOCKS 8
static
FORCE_INLINE
int
TSDB_KEY_FID
(
TSKEY
key
,
int32_t
days
,
int8_t
precision
)
{
if
(
key
<
0
)
{
return
(
int
)(
-
((
-
key
)
/
tsMsPerDay
[
precision
]
/
days
+
1
)
);
return
(
int
)(
(
key
+
1
)
/
tsMsPerDay
[
precision
]
/
days
+
1
);
}
else
{
return
(
int
)((
key
/
tsMsPerDay
[
precision
]
/
days
));
}
...
...
tests/Jenkinsfile
浏览文件 @
c2da6d21
def
pre_test
(){
catchError
(
buildResult:
'SUCCESS'
,
stageResult:
'FAILURE'
)
{
sh
'''
sudo rmtaos
'''
}
sh
'''
sudo rmtaos||echo 'no taosd installed'
'''
sh
'''
cd ${WKC}
git reset --hard
...
...
@@ -56,14 +55,8 @@ pipeline {
cd ${WKC}/tests
./test-all.sh b1
date'''
sh
'''
cd ${WKC}/tests
./test-all.sh full jdbc
date'''
sh
'''
cd ${WKC}/tests
./test-all.sh full unit
date'''
}
}
...
...
@@ -136,6 +129,10 @@ pipeline {
./test-all.sh b2
date
'''
sh
'''
cd ${WKC}/tests
./test-all.sh full unit
date'''
}
}
...
...
@@ -154,6 +151,10 @@ pipeline {
'''
}
sh
'''
cd ${WKC}/tests
./test-all.sh full jdbc
date'''
sh
'''
cd ${WKC}/tests/pytest
./valgrind-test.sh 2>&1 > mem-error-out.log
./handle_val_log.sh
...
...
tests/examples/c/asyncdemo.c
浏览文件 @
c2da6d21
...
...
@@ -163,6 +163,16 @@ int main(int argc, char *argv[])
getchar
();
while
(
1
)
{
if
(
tablesProcessed
<
numOfTables
)
{
printf
(
"wait for process finished
\n
"
);
sleep
(
1
);
continue
;
}
break
;
}
taos_close
(
taos
);
free
(
tableList
);
...
...
tests/script/general/parser/join_multitables.sim
0 → 100644
浏览文件 @
c2da6d21
此差异已折叠。
点击以展开。
tests/test-all.sh
浏览文件 @
c2da6d21
...
...
@@ -29,7 +29,25 @@ function dohavecore(){
proc
=
`
echo
$corefile
|cut
-d
"_"
-f3
`
if
[
-n
"
$corefile
"
]
;
then
echo
'taosd or taos has generated core'
tar
-zcPf
$corepath
'taos_'
`
date
"+%Y_%m_%d_%H_%M_%S"
`
.tar.gz /usr/local/taos/
if
[[
"
$tests_dir
"
==
*
"
$IN_TDINTERNAL
"
*
]]
&&
[[
$1
==
1
]]
;
then
cd
../../../
tar
-zcPf
$corepath
'taos_'
`
date
"+%Y_%m_%d_%H_%M_%S"
`
.tar.gz debug/build/bin/taosd debug/build/bin/tsim debug/build/lib/libtaos
*
so
*
if
[[
$2
==
1
]]
;
then
cp
-r
sim ~/sim_
`
date
"+%Y_%m_%d_%H:%M:%S"
`
rm
-rf
sim/case.log
else
cd
community
cp
-r
sim ~/sim_
`
date
"+%Y_%m_%d_%H:%M:%S"
`
rm
-rf
sim/case.log
fi
else
cd
../../
if
[[
$1
==
1
]]
;
then
tar
-zcPf
$corepath
'taos_'
`
date
"+%Y_%m_%d_%H_%M_%S"
`
.tar.gz debug/build/bin/taosd debug/build/bin/tsim debug/build/lib/libtaos
*
so
*
cp
-r
sim ~/sim_
`
date
"+%Y_%m_%d_%H:%M:%S"
`
rm
-rf
sim/case.log
fi
fi
if
[[
$1
==
1
]]
;
then
echo
'\n'
|gdb /usr/local/taos/bin/
$proc
$core_file
-ex
"bt 10"
-ex
quit
exit
8
...
...
@@ -100,14 +118,14 @@ function runSimCaseOneByOnefq {
cp
-r
../../sim ~/sim_
`
date
"+%Y_%m_%d_%H:%M:%S"
`
rm
-rf
../../sim/case.log
fi
dohavecore
$2
dohavecore
$2
1
if
[[
$2
==
1
]]
;
then
exit
8
fi
fi
end_time
=
`
date
+%s
`
echo
execution
time
of
$case
was
`
expr
$end_time
-
$start_time
`
s. |
tee
-a
out.log
dohavecore
$2
dohavecore
$2
1
fi
done
rm
-rf
../../../sim/case.log
...
...
@@ -175,7 +193,7 @@ function runPyCaseOneByOnefq() {
echo
'=====================log===================== '
cat
../../sim/case.log
rm
-rf
../../sim/case.log
dohavecore
$2
dohavecore
$2
2
if
[[
$2
==
1
]]
;
then
exit
8
fi
...
...
@@ -184,7 +202,7 @@ function runPyCaseOneByOnefq() {
else
$line
>
/dev/null 2>&1
fi
dohavecore
$2
dohavecore
$2
2
fi
done
rm
-rf
../../sim/case.log
...
...
@@ -211,15 +229,15 @@ if [ "$2" != "jdbc" ] && [ "$2" != "python" ] && [ "$2" != "unit" ]; then
echo
"### run TSIM b1 test ###"
runSimCaseOneByOnefq b1 0
runSimCaseOneByOnefq b4 0
runSimCaseOneByOnefq b5 0
runSimCaseOneByOnefq b6 0
runSimCaseOneByOnefq b7 0
elif
[
"
$1
"
==
"b2"
]
;
then
echo
"### run TSIM b2 test ###"
runSimCaseOneByOnefq b2 0
runSimCaseOneByOnefq b5 0
elif
[
"
$1
"
==
"b3"
]
;
then
echo
"### run TSIM b3 test ###"
runSimCaseOneByOnefq b3 0
runSimCaseOneByOnefq b6 0
elif
[
"
$1
"
==
"b1fq"
]
;
then
echo
"### run TSIM b1 test ###"
runSimCaseOneByOnefq b1 1
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录