Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
c7eaa2a7
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
c7eaa2a7
编写于
5月 06, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.0' of
https://github.com/taosdata/TDengine
into feature/vnode_refact1
上级
90284027
6acf688b
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
236 addition
and
59 deletion
+236
-59
include/util/taoserror.h
include/util/taoserror.h
+8
-0
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+112
-12
source/libs/parser/src/parUtil.c
source/libs/parser/src/parUtil.c
+17
-1
source/libs/planner/src/planLogicCreater.c
source/libs/planner/src/planLogicCreater.c
+5
-0
source/libs/planner/src/planOptimizer.c
source/libs/planner/src/planOptimizer.c
+35
-4
source/libs/planner/test/planOptimizeTest.cpp
source/libs/planner/test/planOptimizeTest.cpp
+14
-4
source/libs/scheduler/src/scheduler.c
source/libs/scheduler/src/scheduler.c
+23
-19
source/util/src/terror.c
source/util/src/terror.c
+3
-0
tests/script/tsim/query/explain.sim
tests/script/tsim/query/explain.sim
+8
-8
tests/script/tsim/query/session.sim
tests/script/tsim/query/session.sim
+9
-9
tests/script/tsim/table/basic1.sim
tests/script/tsim/table/basic1.sim
+2
-2
未找到文件。
include/util/taoserror.h
浏览文件 @
c7eaa2a7
...
...
@@ -621,6 +621,14 @@ int32_t* taosGetErrno();
#define TSDB_CODE_PAR_INVALID_TOPIC_QUERY TAOS_DEF_ERROR_CODE(0, 0x2639)
#define TSDB_CODE_PAR_INVALID_DROP_STABLE TAOS_DEF_ERROR_CODE(0, 0x263A)
#define TSDB_CODE_PAR_INVALID_FILL_TIME_RANGE TAOS_DEF_ERROR_CODE(0, 0x263B)
#define TSDB_CODE_PAR_DUPLICATED_COLUMN TAOS_DEF_ERROR_CODE(0, 0x263C)
#define TSDB_CODE_PAR_INVALID_TAGS_LENGTH TAOS_DEF_ERROR_CODE(0, 0x263D)
#define TSDB_CODE_PAR_INVALID_ROW_LENGTH TAOS_DEF_ERROR_CODE(0, 0x263E)
#define TSDB_CODE_PAR_INVALID_COLUMNS_NUM TAOS_DEF_ERROR_CODE(0, 0x263F)
#define TSDB_CODE_PAR_TOO_MANY_COLUMNS TAOS_DEF_ERROR_CODE(0, 0x2640)
#define TSDB_CODE_PAR_INVALID_FIRST_COLUMN TAOS_DEF_ERROR_CODE(0, 0x2641)
#define TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN TAOS_DEF_ERROR_CODE(0, 0x2642)
#define TSDB_CODE_PAR_INVALID_TAGS_NUM TAOS_DEF_ERROR_CODE(0, 0x2643)
//planner
#define TSDB_CODE_PLAN_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x2700)
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
c7eaa2a7
...
...
@@ -2174,17 +2174,6 @@ static int32_t checkTableSmaOption(STranslateContext* pCxt, SCreateTableStmt* pS
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
checkTableTags
(
STranslateContext
*
pCxt
,
SCreateTableStmt
*
pStmt
)
{
SNode
*
pNode
;
FOREACH
(
pNode
,
pStmt
->
pTags
)
{
SColumnDefNode
*
pCol
=
(
SColumnDefNode
*
)
pNode
;
if
(
pCol
->
dataType
.
type
==
TSDB_DATA_TYPE_JSON
&&
LIST_LENGTH
(
pStmt
->
pTags
)
>
1
)
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_ONLY_ONE_JSON_TAG
);
}
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
checkTableRollupOption
(
STranslateContext
*
pCxt
,
SNodeList
*
pFuncs
)
{
if
(
NULL
==
pFuncs
)
{
return
TSDB_CODE_SUCCESS
;
...
...
@@ -2196,6 +2185,113 @@ static int32_t checkTableRollupOption(STranslateContext* pCxt, SNodeList* pFuncs
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
checkTableTagsSchema
(
STranslateContext
*
pCxt
,
SHashObj
*
pHash
,
SNodeList
*
pTags
)
{
int32_t
ntags
=
LIST_LENGTH
(
pTags
);
if
(
0
==
ntags
)
{
return
TSDB_CODE_SUCCESS
;
}
else
if
(
ntags
>
TSDB_MAX_TAGS
)
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_TAGS_NUM
);
}
int32_t
code
=
TSDB_CODE_SUCCESS
;
int32_t
tagsSize
=
0
;
SNode
*
pNode
=
NULL
;
FOREACH
(
pNode
,
pTags
)
{
SColumnDefNode
*
pTag
=
(
SColumnDefNode
*
)
pNode
;
int32_t
len
=
strlen
(
pTag
->
colName
);
if
(
NULL
!=
taosHashGet
(
pHash
,
pTag
->
colName
,
len
))
{
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_DUPLICATED_COLUMN
);
}
if
(
TSDB_CODE_SUCCESS
==
code
&&
pTag
->
dataType
.
type
==
TSDB_DATA_TYPE_JSON
&&
ntags
>
1
)
{
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_ONLY_ONE_JSON_TAG
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
((
TSDB_DATA_TYPE_VARCHAR
==
pTag
->
dataType
.
type
&&
pTag
->
dataType
.
bytes
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pTag
->
dataType
.
type
&&
pTag
->
dataType
.
bytes
>
TSDB_MAX_NCHAR_LEN
))
{
code
=
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
taosHashPut
(
pHash
,
pTag
->
colName
,
len
,
&
pTag
,
POINTER_BYTES
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
tagsSize
+=
pTag
->
dataType
.
bytes
;
}
else
{
break
;
}
}
if
(
TSDB_CODE_SUCCESS
==
code
&&
tagsSize
>
TSDB_MAX_TAGS_LEN
)
{
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_TAGS_LENGTH
,
TSDB_MAX_TAGS_LEN
);
}
return
code
;
}
static
int32_t
checkTableColsSchema
(
STranslateContext
*
pCxt
,
SHashObj
*
pHash
,
SNodeList
*
pCols
)
{
int32_t
ncols
=
LIST_LENGTH
(
pCols
);
if
(
ncols
<
TSDB_MIN_COLUMNS
)
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_COLUMNS_NUM
);
}
else
if
(
ncols
>
TSDB_MAX_COLUMNS
)
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_TOO_MANY_COLUMNS
);
}
int32_t
code
=
TSDB_CODE_SUCCESS
;
bool
first
=
true
;
int32_t
rowSize
=
0
;
SNode
*
pNode
=
NULL
;
FOREACH
(
pNode
,
pCols
)
{
SColumnDefNode
*
pCol
=
(
SColumnDefNode
*
)
pNode
;
if
(
first
)
{
first
=
false
;
if
(
TSDB_DATA_TYPE_TIMESTAMP
!=
pCol
->
dataType
.
type
)
{
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_FIRST_COLUMN
);
}
}
int32_t
len
=
strlen
(
pCol
->
colName
);
if
(
TSDB_CODE_SUCCESS
==
code
&&
NULL
!=
taosHashGet
(
pHash
,
pCol
->
colName
,
len
))
{
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_DUPLICATED_COLUMN
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
((
TSDB_DATA_TYPE_VARCHAR
==
pCol
->
dataType
.
type
&&
pCol
->
dataType
.
bytes
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pCol
->
dataType
.
type
&&
pCol
->
dataType
.
bytes
>
TSDB_MAX_NCHAR_LEN
))
{
code
=
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
taosHashPut
(
pHash
,
pCol
->
colName
,
len
,
&
pCol
,
POINTER_BYTES
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
rowSize
+=
pCol
->
dataType
.
bytes
;
}
else
{
break
;
}
}
if
(
TSDB_CODE_SUCCESS
==
code
&&
rowSize
>
TSDB_MAX_BYTES_PER_ROW
)
{
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_ROW_LENGTH
,
TSDB_MAX_BYTES_PER_ROW
);
}
return
code
;
}
static
int32_t
checkTableSchema
(
STranslateContext
*
pCxt
,
SCreateTableStmt
*
pStmt
)
{
SHashObj
*
pHash
=
taosHashInit
(
LIST_LENGTH
(
pStmt
->
pTags
)
+
LIST_LENGTH
(
pStmt
->
pCols
),
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
false
,
HASH_NO_LOCK
);
if
(
NULL
==
pHash
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
int32_t
code
=
checkTableTagsSchema
(
pCxt
,
pHash
,
pStmt
->
pTags
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkTableColsSchema
(
pCxt
,
pHash
,
pStmt
->
pCols
);
}
taosHashCleanup
(
pHash
);
return
code
;
}
static
int32_t
checkCreateTable
(
STranslateContext
*
pCxt
,
SCreateTableStmt
*
pStmt
)
{
int32_t
code
=
checkRangeOption
(
pCxt
,
"delay"
,
pStmt
->
pOptions
->
delay
,
TSDB_MIN_ROLLUP_DELAY
,
TSDB_MAX_ROLLUP_DELAY
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
...
...
@@ -2211,7 +2307,7 @@ static int32_t checkCreateTable(STranslateContext* pCxt, SCreateTableStmt* pStmt
code
=
checkTableSmaOption
(
pCxt
,
pStmt
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
checkTable
Tags
(
pCxt
,
pStmt
);
code
=
checkTable
Schema
(
pCxt
,
pStmt
);
}
return
code
;
}
...
...
@@ -3838,6 +3934,10 @@ static int32_t buildDropTableVgroupHashmap(STranslateContext* pCxt, SDropTableCl
goto
over
;
}
if
(
TSDB_CODE_PAR_TABLE_NOT_EXIST
==
code
&&
pClause
->
ignoreNotExists
)
{
code
=
TSDB_CODE_SUCCESS
;
}
*
pIsSuperTable
=
false
;
SVgroupInfo
info
=
{
0
};
...
...
source/libs/parser/src/parUtil.c
浏览文件 @
c7eaa2a7
...
...
@@ -129,7 +129,23 @@ static char* getSyntaxErrFormat(int32_t errCode) {
case
TSDB_CODE_PAR_INVALID_DROP_STABLE
:
return
"Cannot drop super table in batch"
;
case
TSDB_CODE_PAR_INVALID_FILL_TIME_RANGE
:
return
"start(end) time of query range required or time range too large"
;
return
"Start(end) time of query range required or time range too large"
;
case
TSDB_CODE_PAR_DUPLICATED_COLUMN
:
return
"Duplicated column names"
;
case
TSDB_CODE_PAR_INVALID_TAGS_LENGTH
:
return
"Tags length exceeds max length %d"
;
case
TSDB_CODE_PAR_INVALID_ROW_LENGTH
:
return
"Row length exceeds max length %d"
;
case
TSDB_CODE_PAR_INVALID_COLUMNS_NUM
:
return
"Illegal number of columns"
;
case
TSDB_CODE_PAR_TOO_MANY_COLUMNS
:
return
"Too many columns"
;
case
TSDB_CODE_PAR_INVALID_FIRST_COLUMN
:
return
"First column must be timestamp"
;
case
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
:
return
"Invalid binary/nchar column length"
;
case
TSDB_CODE_PAR_INVALID_TAGS_NUM
:
return
"Invalid number of tag columns"
;
case
TSDB_CODE_OUT_OF_MEMORY
:
return
"Out of memory"
;
default:
...
...
source/libs/planner/src/planLogicCreater.c
浏览文件 @
c7eaa2a7
...
...
@@ -277,6 +277,11 @@ static int32_t createScanLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSelect
code
=
nodesCollectFuncs
(
pSelect
,
SQL_CLAUSE_FROM
,
fmIsScanPseudoColumnFunc
,
&
pScan
->
pScanPseudoCols
);
}
// rewrite the expression in subsequent clauses
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
rewriteExprForSelect
(
pScan
->
pScanPseudoCols
,
pSelect
,
SQL_CLAUSE_FROM
);
}
pScan
->
scanType
=
getScanType
(
pCxt
,
pScan
->
pScanPseudoCols
,
pScan
->
pScanCols
,
pScan
->
pMeta
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
...
...
source/libs/planner/src/planOptimizer.c
浏览文件 @
c7eaa2a7
...
...
@@ -123,14 +123,40 @@ static SNodeList* osdGetAllFuncs(SLogicNode* pNode) {
return
NULL
;
}
static
bool
needOptimizeDataRequire
(
const
SFunctionNode
*
pFunc
)
{
if
(
!
fmIsSpecialDataRequiredFunc
(
pFunc
->
funcId
))
{
return
false
;
}
SNode
*
pPara
=
NULL
;
FOREACH
(
pPara
,
pFunc
->
pParameterList
)
{
if
(
QUERY_NODE_COLUMN
!=
nodeType
(
pPara
)
&&
QUERY_NODE_VALUE
!=
nodeType
(
pPara
))
{
return
false
;
}
}
return
true
;
}
static
bool
needOptimizeDynamicScan
(
const
SFunctionNode
*
pFunc
)
{
if
(
!
fmIsDynamicScanOptimizedFunc
(
pFunc
->
funcId
))
{
return
false
;
}
SNode
*
pPara
=
NULL
;
FOREACH
(
pPara
,
pFunc
->
pParameterList
)
{
if
(
QUERY_NODE_COLUMN
!=
nodeType
(
pPara
)
&&
QUERY_NODE_VALUE
!=
nodeType
(
pPara
))
{
return
false
;
}
}
return
true
;
}
static
int32_t
osdGetRelatedFuncs
(
SScanLogicNode
*
pScan
,
SNodeList
**
pSdrFuncs
,
SNodeList
**
pDsoFuncs
)
{
SNodeList
*
pAllFuncs
=
osdGetAllFuncs
(
pScan
->
node
.
pParent
);
SNode
*
pFunc
=
NULL
;
FOREACH
(
pFunc
,
pAllFuncs
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
fmIsSpecialDataRequiredFunc
(((
SFunctionNode
*
)
pFunc
)
->
funcId
))
{
if
(
needOptimizeDataRequire
((
SFunctionNode
*
)
pFunc
))
{
code
=
nodesListMakeStrictAppend
(
pSdrFuncs
,
nodesCloneNode
(
pFunc
));
}
else
if
(
fmIsDynamicScanOptimizedFunc
(((
SFunctionNode
*
)
pFunc
)
->
funcId
))
{
}
else
if
(
needOptimizeDynamicScan
((
SFunctionNode
*
)
pFunc
))
{
code
=
nodesListMakeStrictAppend
(
pDsoFuncs
,
nodesCloneNode
(
pFunc
));
}
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
...
...
@@ -541,9 +567,14 @@ static bool cpdIsPrimaryKeyEqualCond(SJoinLogicNode* pJoin, SNode* pCond) {
if
(
QUERY_NODE_OPERATOR
!=
nodeType
(
pCond
))
{
return
false
;
}
SNodeList
*
pLeftCols
=
((
SLogicNode
*
)
nodesListGetNode
(
pJoin
->
node
.
pChildren
,
0
))
->
pTargets
;
SNodeList
*
pRightCols
=
((
SLogicNode
*
)
nodesListGetNode
(
pJoin
->
node
.
pChildren
,
1
))
->
pTargets
;
SOperatorNode
*
pOper
=
(
SOperatorNode
*
)
pJoin
->
pOnConditions
;
if
(
OP_TYPE_EQUAL
!=
pOper
->
opType
)
{
return
false
;
}
SNodeList
*
pLeftCols
=
((
SLogicNode
*
)
nodesListGetNode
(
pJoin
->
node
.
pChildren
,
0
))
->
pTargets
;
SNodeList
*
pRightCols
=
((
SLogicNode
*
)
nodesListGetNode
(
pJoin
->
node
.
pChildren
,
1
))
->
pTargets
;
if
(
cpdIsPrimaryKey
(
pOper
->
pLeft
,
pLeftCols
))
{
return
cpdIsPrimaryKey
(
pOper
->
pRight
,
pRightCols
);
}
else
if
(
cpdIsPrimaryKey
(
pOper
->
pLeft
,
pRightCols
))
{
...
...
source/libs/planner/test/planOptimizeTest.cpp
浏览文件 @
c7eaa2a7
...
...
@@ -20,11 +20,21 @@ using namespace std;
class
PlanOptimizeTest
:
public
PlannerTestBase
{};
TEST_F
(
PlanOptimizeTest
,
optimizeScanData
)
{
useDb
(
"root"
,
"test"
);
run
(
"SELECT COUNT(*) FROM t1"
);
run
(
"SELECT COUNT(c1) FROM t1"
);
run
(
"SELECT COUNT(CAST(c1 AS BIGINT)) FROM t1"
);
}
TEST_F
(
PlanOptimizeTest
,
orderByPrimaryKey
)
{
useDb
(
"root"
,
"test"
);
run
(
"
select * from t1 order by
ts"
);
run
(
"
select * from t1 order by ts desc
"
);
run
(
"
select c1 from t1 order by
ts"
);
run
(
"
select c1 from t1 order by ts desc
"
);
run
(
"
SELECT * FROM t1 ORDER BY
ts"
);
run
(
"
SELECT * FROM t1 ORDER BY ts DESC
"
);
run
(
"
SELECT c1 FROM t1 ORDER BY
ts"
);
run
(
"
SELECT c1 FROM t1 ORDER BY ts DESC
"
);
}
source/libs/scheduler/src/scheduler.c
浏览文件 @
c7eaa2a7
...
...
@@ -22,7 +22,7 @@
#include "trpc.h"
SSchedulerMgmt
schMgmt
=
{
.
jobRef
=
-
1
,
.
jobRef
=
-
1
,
};
FORCE_INLINE
SSchJob
*
schAcquireJob
(
int64_t
refId
)
{
return
(
SSchJob
*
)
taosAcquireRef
(
schMgmt
.
jobRef
,
refId
);
}
...
...
@@ -72,7 +72,7 @@ int32_t schInitTask(SSchJob *pJob, SSchTask *pTask, SSubplan *pPlan, SSchLevel *
int32_t
schInitJob
(
SSchJob
**
pSchJob
,
SQueryPlan
*
pDag
,
void
*
transport
,
SArray
*
pNodeList
,
const
char
*
sql
,
int64_t
startTs
,
bool
syncSchedule
)
{
int32_t
code
=
0
;
int64_t
refId
=
-
1
;
int64_t
refId
=
-
1
;
SSchJob
*
pJob
=
taosMemoryCalloc
(
1
,
sizeof
(
SSchJob
));
if
(
NULL
==
pJob
)
{
qError
(
"QID:%"
PRIx64
" calloc %d failed"
,
pDag
->
queryId
,
(
int32_t
)
sizeof
(
SSchJob
));
...
...
@@ -124,7 +124,7 @@ int32_t schInitJob(SSchJob **pSchJob, SQueryPlan *pDag, void *transport, SArray
}
atomic_add_fetch_32
(
&
schMgmt
.
jobNum
,
1
);
if
(
NULL
==
schAcquireJob
(
refId
))
{
SCH_JOB_ELOG
(
"schAcquireJob job failed, refId:%"
PRIx64
,
refId
);
SCH_ERR_JRET
(
TSDB_CODE_SCH_STATUS_ERROR
);
...
...
@@ -1085,19 +1085,22 @@ int32_t schHandleResponseMsg(SSchJob *pJob, SSchTask *pTask, int32_t msgType, ch
case
TDMT_VND_CREATE_TABLE_RSP
:
{
SVCreateTbBatchRsp
batchRsp
=
{
0
};
if
(
msg
)
{
SCH_ERR_JRET
(
tDeserializeSVCreateTbBatchRsp
(
msg
,
msgSize
,
&
batchRsp
));
if
(
batchRsp
.
pArray
)
{
int32_t
num
=
taosArrayGetSize
(
batchRsp
.
pArray
);
for
(
int32_t
i
=
0
;
i
<
num
;
++
i
)
{
SVCreateTbRsp
*
rsp
=
taosArrayGet
(
batchRsp
.
pArray
,
i
);
SCoder
coder
=
{
0
};
tCoderInit
(
&
coder
,
TD_LITTLE_ENDIAN
,
msg
,
msgSize
,
TD_DECODER
);
code
=
tDecodeSVCreateTbBatchRsp
(
&
coder
,
&
batchRsp
);
if
(
TSDB_CODE_SUCCESS
==
code
&&
batchRsp
.
nRsps
>
0
)
{
for
(
int32_t
i
=
0
;
i
<
batchRsp
.
nRsps
;
++
i
)
{
SVCreateTbRsp
*
rsp
=
batchRsp
.
pRsps
+
i
;
if
(
NEED_CLIENT_HANDLE_ERROR
(
rsp
->
code
))
{
t
aosArrayDestroy
(
batchRsp
.
pArray
);
t
CoderClear
(
&
coder
);
SCH_ERR_JRET
(
rsp
->
code
);
}
else
if
(
TSDB_CODE_SUCCESS
!=
rsp
->
code
)
{
code
=
rsp
->
code
;
}
}
taosArrayDestroy
(
batchRsp
.
pArray
);
}
tCoderClear
(
&
coder
);
SCH_ERR_JRET
(
code
);
}
SCH_ERR_JRET
(
rspCode
);
...
...
@@ -1110,13 +1113,14 @@ int32_t schHandleResponseMsg(SSchJob *pJob, SSchTask *pTask, int32_t msgType, ch
SCoder
coder
=
{
0
};
tCoderInit
(
&
coder
,
TD_LITTLE_ENDIAN
,
msg
,
msgSize
,
TD_DECODER
);
code
=
tDecodeSVDropTbBatchRsp
(
&
coder
,
&
batchRsp
);
if
(
TSDB_CODE_SUCCESS
==
code
&&
batchRsp
.
pArray
)
{
int32_t
num
=
taosArrayGetSize
(
batchRsp
.
pArray
);
for
(
int32_t
i
=
0
;
i
<
num
;
++
i
)
{
SVDropTbRsp
*
rsp
=
taosArrayGet
(
batchRsp
.
pArray
,
i
);
if
(
TSDB_CODE_SUCCESS
==
code
&&
batchRsp
.
nRsps
>
0
)
{
for
(
int32_t
i
=
0
;
i
<
batchRsp
.
nRsps
;
++
i
)
{
SVDropTbRsp
*
rsp
=
batchRsp
.
pRsps
+
i
;
if
(
NEED_CLIENT_HANDLE_ERROR
(
rsp
->
code
))
{
tCoderClear
(
&
coder
);
SCH_ERR_JRET
(
rsp
->
code
);
}
else
if
(
TSDB_CODE_SUCCESS
!=
rsp
->
code
)
{
code
=
rsp
->
code
;
}
}
}
...
...
@@ -2282,10 +2286,10 @@ int32_t schCancelJob(SSchJob *pJob) {
}
void
schCloseJobRef
(
void
)
{
if
(
!
atomic_load_8
((
int8_t
*
)
&
schMgmt
.
exit
))
{
if
(
!
atomic_load_8
((
int8_t
*
)
&
schMgmt
.
exit
))
{
return
;
}
SCH_LOCK
(
SCH_WRITE
,
&
schMgmt
.
lock
);
if
(
atomic_load_32
(
&
schMgmt
.
jobNum
)
<=
0
&&
schMgmt
.
jobRef
>=
0
)
{
taosCloseRef
(
schMgmt
.
jobRef
);
...
...
@@ -2791,8 +2795,8 @@ void schedulerFreeTaskList(SArray *taskList) {
}
void
schedulerDestroy
(
void
)
{
atomic_store_8
((
int8_t
*
)
&
schMgmt
.
exit
,
1
);
atomic_store_8
((
int8_t
*
)
&
schMgmt
.
exit
,
1
);
if
(
schMgmt
.
jobRef
>=
0
)
{
SSchJob
*
pJob
=
taosIterateRef
(
schMgmt
.
jobRef
,
0
);
int64_t
refId
=
0
;
...
...
source/util/src/terror.c
浏览文件 @
c7eaa2a7
...
...
@@ -443,6 +443,9 @@ TAOS_DEFINE_ERROR(TSDB_CODE_SCH_STATUS_ERROR, "scheduler status erro
TAOS_DEFINE_ERROR
(
TSDB_CODE_SCH_INTERNAL_ERROR
,
"scheduler internal error"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_QW_MSG_ERROR
,
"Invalid msg order"
)
// parser
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_TABLE_NOT_EXIST
,
"Table does not exist"
)
//planner
TAOS_DEFINE_ERROR
(
TSDB_CODE_PLAN_INTERNAL_ERROR
,
"planner internal error"
)
...
...
tests/script/tsim/query/explain.sim
浏览文件 @
c7eaa2a7
...
...
@@ -25,15 +25,15 @@ sql insert into tb3 values (now, 3, "Hash (cost=229.20..229.20 rows=101 width=2
sql create table tb4 using st1 tags(4);
sql insert into tb4 values (now, 4, "Bitmap Heap Scan on tenk1 t1 (cost=5.07..229.20 rows=101 width=244) (actual time=0.080..0.526 rows=100 loops=1)");
sql create table tb1 using st2 tags(1);
sql insert into tb1 values (now, 1, "Hash Join (cost=230.47..713.98 rows=101 width=488) (actual time=0.711..7.427 rows=100 loops=1)");
#
sql create table tb1 using st2 tags(1);
#
sql insert into tb1 values (now, 1, "Hash Join (cost=230.47..713.98 rows=101 width=488) (actual time=0.711..7.427 rows=100 loops=1)");
sql create table tb2 using st2 tags(2);
sql insert into tb2 values (now, 2, "Seq Scan on tenk2 t2 (cost=0.00..445.00 rows=10000 width=244) (actual time=0.007..2.583 rows=10000 loops=1)");
sql create table tb3 using st2 tags(3);
sql insert into tb3 values (now, 3, "Hash (cost=229.20..229.20 rows=101 width=244) (actual time=0.659..0.659 rows=100 loops=1)");
sql create table tb4 using st2 tags(4);
sql insert into tb4 values (now, 4, "Bitmap Heap Scan on tenk1 t1 (cost=5.07..229.20 rows=101 width=244) (actual time=0.080..0.526 rows=100 loops=1)");
#
sql create table tb2 using st2 tags(2);
#
sql insert into tb2 values (now, 2, "Seq Scan on tenk2 t2 (cost=0.00..445.00 rows=10000 width=244) (actual time=0.007..2.583 rows=10000 loops=1)");
#
sql create table tb3 using st2 tags(3);
#
sql insert into tb3 values (now, 3, "Hash (cost=229.20..229.20 rows=101 width=244) (actual time=0.659..0.659 rows=100 loops=1)");
#
sql create table tb4 using st2 tags(4);
#
sql insert into tb4 values (now, 4, "Bitmap Heap Scan on tenk1 t1 (cost=5.07..229.20 rows=101 width=244) (actual time=0.080..0.526 rows=100 loops=1)");
print ======== step2
...
...
tests/script/tsim/query/session.sim
浏览文件 @
c7eaa2a7
...
...
@@ -65,6 +65,15 @@ sql INSERT INTO dev_002 VALUES('2020-05-13 10:00:00.031', 5)
sql INSERT INTO dev_002 VALUES('2020-05-13 10:00:00.036', 6)
sql INSERT INTO dev_002 VALUES('2020-05-13 10:00:00.51', 7)
# vnode does not return the precision of the table
print ====> create database d1 precision 'us'
sql create database d1 precision 'us'
sql use d1
sql create table dev_001 (ts timestamp ,i timestamp ,j int)
sql insert into dev_001 values(1623046993681000,now,1)(1623046993681001,now+1s,2)(1623046993681002,now+2s,3)(1623046993681004,now+5s,4)
sql create table secondts(ts timestamp,t2 timestamp,i int)
sql insert into secondts values(1623046993681000,now,1)(1623046993681001,now+1s,2)(1623046993681002,now+2s,3)(1623046993681004,now+5s,4)
$loop_test = 0
loop_test_pos:
...
...
@@ -288,15 +297,6 @@ sql_error sql select count(*) from dev_001 session(ts,0s)
sql_error select count(*) from dev_001 session(i,1y)
sql_error select count(*) from dev_001 session(ts,1d) where ts <'2020-05-20 0:0:0'
# vnode does not return the precision of the table
print ====> create database d1 precision 'us'
sql create database d1 precision 'us'
sql use d1
sql create table dev_001 (ts timestamp ,i timestamp ,j int)
sql insert into dev_001 values(1623046993681000,now,1)(1623046993681001,now+1s,2)(1623046993681002,now+2s,3)(1623046993681004,now+5s,4)
sql create table secondts(ts timestamp,t2 timestamp,i int)
sql insert into secondts values(1623046993681000,now,1)(1623046993681001,now+1s,2)(1623046993681002,now+2s,3)(1623046993681004,now+5s,4)
#print ====> select count(*) from dev_001 session(ts,1u)
#sql select _wstartts, count(*) from dev_001 session(ts,1u)
#print rows: $rows
...
...
tests/script/tsim/table/basic1.sim
浏览文件 @
c7eaa2a7
...
...
@@ -91,9 +91,9 @@ print =============== create normal table
sql create database ndb
sql use ndb
sql create table nt0 (ts timestamp, i int)
sql create table if not exists nt0 (ts timestamp, i int)
#
sql create table if not exists nt0 (ts timestamp, i int)
sql create table nt1 (ts timestamp, i int)
sql create table if not exists nt1 (ts timestamp, i int)
#
sql create table if not exists nt1 (ts timestamp, i int)
sql create table if not exists nt3 (ts timestamp, i int)
sql show tables
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录