Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
61d8ef38
T
TDengine
项目概览
taosdata
/
TDengine
接近 2 年 前同步成功
通知
1192
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看板
提交
61d8ef38
编写于
4月 01, 2022
作者:
L
Liu Jicong
浏览文件
操作
浏览文件
下载
差异文件
merge from 3.0
上级
9ebdee32
94759bb1
变更
96
展开全部
隐藏空白更改
内联
并排
Showing
96 changed file
with
5914 addition
and
3389 deletion
+5914
-3389
include/common/tcommon.h
include/common/tcommon.h
+2
-2
include/common/tmsg.h
include/common/tmsg.h
+1
-0
include/common/ttime.h
include/common/ttime.h
+2
-0
include/common/ttokendef.h
include/common/ttokendef.h
+101
-80
include/libs/command/command.h
include/libs/command/command.h
+5
-0
include/libs/nodes/cmdnodes.h
include/libs/nodes/cmdnodes.h
+12
-2
include/libs/nodes/nodes.h
include/libs/nodes/nodes.h
+23
-0
include/libs/nodes/plannodes.h
include/libs/nodes/plannodes.h
+1
-1
include/libs/nodes/querynodes.h
include/libs/nodes/querynodes.h
+1
-0
include/libs/qcom/query.h
include/libs/qcom/query.h
+6
-0
include/os/osMemory.h
include/os/osMemory.h
+1
-0
include/os/osProc.h
include/os/osProc.h
+3
-1
include/os/osTime.h
include/os/osTime.h
+8
-0
include/util/taoserror.h
include/util/taoserror.h
+3
-0
include/util/tdef.h
include/util/tdef.h
+12
-7
source/common/src/tmsg.c
source/common/src/tmsg.c
+2
-0
source/common/src/ttime.c
source/common/src/ttime.c
+40
-1
source/dnode/mgmt/dm/src/dmFile.c
source/dnode/mgmt/dm/src/dmFile.c
+1
-1
source/dnode/mgmt/main/src/dndExec.c
source/dnode/mgmt/main/src/dndExec.c
+39
-11
source/dnode/mgmt/vm/src/vmWorker.c
source/dnode/mgmt/vm/src/vmWorker.c
+1
-1
source/dnode/mnode/impl/src/mndDb.c
source/dnode/mnode/impl/src/mndDb.c
+2
-2
source/dnode/mnode/impl/src/mndInfoSchema.c
source/dnode/mnode/impl/src/mndInfoSchema.c
+1
-2
source/dnode/mnode/impl/src/mndStb.c
source/dnode/mnode/impl/src/mndStb.c
+0
-4
source/dnode/mnode/impl/test/sma/sma.cpp
source/dnode/mnode/impl/test/sma/sma.cpp
+4
-4
source/dnode/mnode/impl/test/topic/topic.cpp
source/dnode/mnode/impl/test/topic/topic.cpp
+4
-4
source/dnode/mnode/impl/test/user/user.cpp
source/dnode/mnode/impl/test/user/user.cpp
+4
-4
source/libs/catalog/inc/catalogInt.h
source/libs/catalog/inc/catalogInt.h
+19
-4
source/libs/catalog/src/catalog.c
source/libs/catalog/src/catalog.c
+117
-236
source/libs/catalog/src/catalogDbg.c
source/libs/catalog/src/catalogDbg.c
+222
-0
source/libs/catalog/test/catalogTests.cpp
source/libs/catalog/test/catalogTests.cpp
+45
-45
source/libs/command/inc/commandInt.h
source/libs/command/inc/commandInt.h
+99
-0
source/libs/command/src/explain.c
source/libs/command/src/explain.c
+687
-0
source/libs/executor/inc/executil.h
source/libs/executor/inc/executil.h
+17
-35
source/libs/executor/inc/executorimpl.h
source/libs/executor/inc/executorimpl.h
+2
-3
source/libs/executor/src/executil.c
source/libs/executor/src/executil.c
+55
-75
source/libs/executor/src/executorimpl.c
source/libs/executor/src/executorimpl.c
+109
-99
source/libs/index/inc/indexFstRegex.h
source/libs/index/inc/indexFstRegex.h
+4
-3
source/libs/index/inc/indexFstSparse.h
source/libs/index/inc/indexFstSparse.h
+3
-3
source/libs/index/src/index.c
source/libs/index/src/index.c
+1
-1
source/libs/index/src/indexCache.c
source/libs/index/src/indexCache.c
+2
-2
source/libs/index/src/indexFstCommon.c
source/libs/index/src/indexFstCommon.c
+1
-1
source/libs/index/src/indexFstRegex.c
source/libs/index/src/indexFstRegex.c
+30
-3
source/libs/index/src/indexFstSparse.c
source/libs/index/src/indexFstSparse.c
+17
-20
source/libs/nodes/inc/nodesUtil.h
source/libs/nodes/inc/nodesUtil.h
+10
-6
source/libs/nodes/src/nodesToSQLFuncs.c
source/libs/nodes/src/nodesToSQLFuncs.c
+145
-0
source/libs/nodes/src/nodesTraverseFuncs.c
source/libs/nodes/src/nodesTraverseFuncs.c
+2
-1
source/libs/nodes/src/nodesUtilFuncs.c
source/libs/nodes/src/nodesUtilFuncs.c
+65
-0
source/libs/parser/inc/parAst.h
source/libs/parser/inc/parAst.h
+17
-0
source/libs/parser/inc/parInsertData.h
source/libs/parser/inc/parInsertData.h
+0
-2
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+68
-8
source/libs/parser/src/parAstCreater.c
source/libs/parser/src/parAstCreater.c
+169
-52
source/libs/parser/src/parInsert.c
source/libs/parser/src/parInsert.c
+0
-7
source/libs/parser/src/parTokenizer.c
source/libs/parser/src/parTokenizer.c
+31
-29
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+58
-63
source/libs/parser/src/parUtil.c
source/libs/parser/src/parUtil.c
+6
-0
source/libs/parser/src/sql.c
source/libs/parser/src/sql.c
+2267
-2051
source/libs/planner/src/planLogicCreater.c
source/libs/planner/src/planLogicCreater.c
+1
-1
source/libs/qcom/CMakeLists.txt
source/libs/qcom/CMakeLists.txt
+1
-1
source/libs/qcom/inc/queryInt.h
source/libs/qcom/inc/queryInt.h
+0
-1
source/libs/scalar/inc/filterInt.h
source/libs/scalar/inc/filterInt.h
+0
-2
source/libs/scalar/src/sclfunc.c
source/libs/scalar/src/sclfunc.c
+7
-7
source/libs/scalar/src/sclvector.c
source/libs/scalar/src/sclvector.c
+7
-7
source/libs/scheduler/CMakeLists.txt
source/libs/scheduler/CMakeLists.txt
+1
-1
source/libs/scheduler/inc/schedulerInt.h
source/libs/scheduler/inc/schedulerInt.h
+4
-4
source/libs/scheduler/src/scheduler.c
source/libs/scheduler/src/scheduler.c
+72
-9
source/libs/tdb/src/db/tdbBtree.c
source/libs/tdb/src/db/tdbBtree.c
+315
-185
source/libs/tdb/src/db/tdbDb.c
source/libs/tdb/src/db/tdbDb.c
+3
-16
source/libs/tdb/src/db/tdbEnv.c
source/libs/tdb/src/db/tdbEnv.c
+103
-2
source/libs/tdb/src/db/tdbPCache.c
source/libs/tdb/src/db/tdbPCache.c
+3
-18
source/libs/tdb/src/db/tdbPager.c
source/libs/tdb/src/db/tdbPager.c
+53
-52
source/libs/tdb/src/db/tdbTxn.c
source/libs/tdb/src/db/tdbTxn.c
+24
-12
source/libs/tdb/src/inc/tdbBtree.h
source/libs/tdb/src/inc/tdbBtree.h
+1
-1
source/libs/tdb/src/inc/tdbEnv.h
source/libs/tdb/src/inc/tdbEnv.h
+9
-0
source/libs/tdb/src/inc/tdbInt.h
source/libs/tdb/src/inc/tdbInt.h
+0
-19
source/libs/tdb/src/inc/tdbOs.h
source/libs/tdb/src/inc/tdbOs.h
+7
-1
source/libs/tdb/src/inc/tdbPCache.h
source/libs/tdb/src/inc/tdbPCache.h
+12
-0
source/libs/tdb/src/inc/tdbPage.h
source/libs/tdb/src/inc/tdbPage.h
+1
-0
source/libs/tdb/src/inc/tdbPager.h
source/libs/tdb/src/inc/tdbPager.h
+16
-1
source/libs/tdb/src/inc/tdbTxn.h
source/libs/tdb/src/inc/tdbTxn.h
+0
-4
source/libs/tdb/src/inc/tdbUtil.h
source/libs/tdb/src/inc/tdbUtil.h
+2
-0
source/libs/tdb/test/tdbTest.cpp
source/libs/tdb/test/tdbTest.cpp
+15
-27
source/os/src/osFile.c
source/os/src/osFile.c
+1
-1
source/os/src/osMemory.c
source/os/src/osMemory.c
+29
-2
source/os/src/osProc.c
source/os/src/osProc.c
+12
-5
source/util/src/tcompare.c
source/util/src/tcompare.c
+1
-0
source/util/src/tconfig.c
source/util/src/tconfig.c
+1
-1
tests/script/jenkins/basic.txt
tests/script/jenkins/basic.txt
+2
-2
tests/script/runAllSimCases.sh
tests/script/runAllSimCases.sh
+21
-0
tests/script/tsim/db/alter_option.sim
tests/script/tsim/db/alter_option.sim
+6
-6
tests/script/tsim/db/basic6.sim
tests/script/tsim/db/basic6.sim
+4
-4
tests/script/tsim/parser/fourArithmetic-basic.sim
tests/script/tsim/parser/fourArithmetic-basic.sim
+31
-0
tests/script/tsim/parser/groupby-basic.sim
tests/script/tsim/parser/groupby-basic.sim
+23
-3
tests/script/tsim/query/interval-offset.sim
tests/script/tsim/query/interval-offset.sim
+90
-117
tests/script/tsim/query/scalarFunction.sim
tests/script/tsim/query/scalarFunction.sim
+1
-1
tests/script/tsim/tmq/multiTopic.sim
tests/script/tsim/tmq/multiTopic.sim
+224
-0
tests/script/tsim/tmq/oneTopic.sim
tests/script/tsim/tmq/oneTopic.sim
+264
-0
未找到文件。
include/common/tcommon.h
浏览文件 @
61d8ef38
...
...
@@ -209,8 +209,8 @@ typedef struct SGroupbyExpr {
}
SGroupbyExpr
;
enum
{
FUNC_PARAM_TYPE_VALUE
=
0
,
FUNC_PARAM_TYPE_COLUMN
,
FUNC_PARAM_TYPE_VALUE
=
0
x1
,
FUNC_PARAM_TYPE_COLUMN
=
0x2
,
};
typedef
struct
SFunctParam
{
...
...
include/common/tmsg.h
浏览文件 @
61d8ef38
...
...
@@ -524,6 +524,7 @@ typedef struct {
int8_t
walLevel
;
int8_t
quorum
;
int8_t
cacheLastRow
;
int8_t
replications
;
}
SAlterDbReq
;
int32_t
tSerializeSAlterDbReq
(
void
*
buf
,
int32_t
bufLen
,
SAlterDbReq
*
pReq
);
...
...
include/common/ttime.h
浏览文件 @
61d8ef38
...
...
@@ -60,8 +60,10 @@ int32_t parseNatualDuration(const char* token, int32_t tokenLen, int64_t* durati
int32_t
taosParseTime
(
const
char
*
timestr
,
int64_t
*
time
,
int32_t
len
,
int32_t
timePrec
,
int8_t
dayligth
);
void
deltaToUtcInitOnce
();
char
getPrecisionUnit
(
int32_t
precision
);
int64_t
convertTimePrecision
(
int64_t
time
,
int32_t
fromPrecision
,
int32_t
toPrecision
);
int64_t
convertTimeFromPrecisionToUnit
(
int64_t
time
,
int32_t
fromPrecision
,
char
toUnit
);
void
taosFormatUtcTime
(
char
*
buf
,
int32_t
bufLen
,
int64_t
time
,
int32_t
precision
);
...
...
include/common/ttokendef.h
浏览文件 @
61d8ef38
...
...
@@ -82,21 +82,21 @@
#define TK_SINGLE_STABLE 64
#define TK_STREAM_MODE 65
#define TK_RETENTIONS 66
#define TK_
TABLE
67
#define TK_
NK_LP
68
#define TK_NK_
R
P 69
#define TK_
STABLE
70
#define TK_
ADD
71
#define TK_
COLUMN
72
#define TK_
MODIFY
73
#define TK_
RENAME
74
#define TK_
TAG
75
#define TK_
SET
76
#define TK_
NK_EQ
77
#define TK_
USING
78
#define TK_
TAGS
79
#define TK_
NK_DOT
80
#define TK_NK_
COMMA
81
#define TK_
NK_COMMA
67
#define TK_
TABLE
68
#define TK_NK_
L
P 69
#define TK_
NK_RP
70
#define TK_
STABLE
71
#define TK_
ADD
72
#define TK_
COLUMN
73
#define TK_
MODIFY
74
#define TK_
RENAME
75
#define TK_
TAG
76
#define TK_
SET
77
#define TK_
NK_EQ
78
#define TK_
USING
79
#define TK_
TAGS
80
#define TK_NK_
DOT
81
#define TK_COMMENT 82
#define TK_BOOL 83
#define TK_TINYINT 84
...
...
@@ -131,69 +131,91 @@
#define TK_FUNCTIONS 113
#define TK_INDEXES 114
#define TK_FROM 115
#define TK_LIKE 116
#define TK_INDEX 117
#define TK_FULLTEXT 118
#define TK_FUNCTION 119
#define TK_INTERVAL 120
#define TK_TOPIC 121
#define TK_AS 122
#define TK_DESC 123
#define TK_DESCRIBE 124
#define TK_RESET 125
#define TK_QUERY 126
#define TK_EXPLAIN 127
#define TK_ANALYZE 128
#define TK_VERBOSE 129
#define TK_NK_BOOL 130
#define TK_RATIO 131
#define TK_NULL 132
#define TK_NK_VARIABLE 133
#define TK_NK_UNDERLINE 134
#define TK_ROWTS 135
#define TK_TBNAME 136
#define TK_QSTARTTS 137
#define TK_QENDTS 138
#define TK_WSTARTTS 139
#define TK_WENDTS 140
#define TK_WDURATION 141
#define TK_BETWEEN 142
#define TK_IS 143
#define TK_NK_LT 144
#define TK_NK_GT 145
#define TK_NK_LE 146
#define TK_NK_GE 147
#define TK_NK_NE 148
#define TK_MATCH 149
#define TK_NMATCH 150
#define TK_IN 151
#define TK_JOIN 152
#define TK_INNER 153
#define TK_SELECT 154
#define TK_DISTINCT 155
#define TK_WHERE 156
#define TK_PARTITION 157
#define TK_BY 158
#define TK_SESSION 159
#define TK_STATE_WINDOW 160
#define TK_SLIDING 161
#define TK_FILL 162
#define TK_VALUE 163
#define TK_NONE 164
#define TK_PREV 165
#define TK_LINEAR 166
#define TK_NEXT 167
#define TK_GROUP 168
#define TK_HAVING 169
#define TK_ORDER 170
#define TK_SLIMIT 171
#define TK_SOFFSET 172
#define TK_LIMIT 173
#define TK_OFFSET 174
#define TK_ASC 175
#define TK_NULLS 176
#define TK_FIRST 177
#define TK_LAST 178
#define TK_ACCOUNTS 116
#define TK_APPS 117
#define TK_CONNECTIONS 118
#define TK_LICENCE 119
#define TK_QUERIES 120
#define TK_SCORES 121
#define TK_TOPICS 122
#define TK_VARIABLES 123
#define TK_LIKE 124
#define TK_INDEX 125
#define TK_FULLTEXT 126
#define TK_FUNCTION 127
#define TK_INTERVAL 128
#define TK_TOPIC 129
#define TK_AS 130
#define TK_DESC 131
#define TK_DESCRIBE 132
#define TK_RESET 133
#define TK_QUERY 134
#define TK_EXPLAIN 135
#define TK_ANALYZE 136
#define TK_VERBOSE 137
#define TK_NK_BOOL 138
#define TK_RATIO 139
#define TK_COMPACT 140
#define TK_VNODES 141
#define TK_IN 142
#define TK_OUTPUTTYPE 143
#define TK_AGGREGATE 144
#define TK_BUFSIZE 145
#define TK_STREAM 146
#define TK_INTO 147
#define TK_KILL 148
#define TK_CONNECTION 149
#define TK_MERGE 150
#define TK_VGROUP 151
#define TK_REDISTRIBUTE 152
#define TK_SPLIT 153
#define TK_SYNCDB 154
#define TK_NULL 155
#define TK_NK_VARIABLE 156
#define TK_NK_UNDERLINE 157
#define TK_ROWTS 158
#define TK_TBNAME 159
#define TK_QSTARTTS 160
#define TK_QENDTS 161
#define TK_WSTARTTS 162
#define TK_WENDTS 163
#define TK_WDURATION 164
#define TK_BETWEEN 165
#define TK_IS 166
#define TK_NK_LT 167
#define TK_NK_GT 168
#define TK_NK_LE 169
#define TK_NK_GE 170
#define TK_NK_NE 171
#define TK_MATCH 172
#define TK_NMATCH 173
#define TK_JOIN 174
#define TK_INNER 175
#define TK_SELECT 176
#define TK_DISTINCT 177
#define TK_WHERE 178
#define TK_PARTITION 179
#define TK_BY 180
#define TK_SESSION 181
#define TK_STATE_WINDOW 182
#define TK_SLIDING 183
#define TK_FILL 184
#define TK_VALUE 185
#define TK_NONE 186
#define TK_PREV 187
#define TK_LINEAR 188
#define TK_NEXT 189
#define TK_GROUP 190
#define TK_HAVING 191
#define TK_ORDER 192
#define TK_SLIMIT 193
#define TK_SOFFSET 194
#define TK_LIMIT 195
#define TK_OFFSET 196
#define TK_ASC 197
#define TK_NULLS 198
#define TK_FIRST 199
#define TK_LAST 200
#define TK_NK_SPACE 300
#define TK_NK_COMMENT 301
...
...
@@ -207,10 +229,9 @@
#define TK_NK_COLON 500
#define TK_NK_BITNOT 501
#define TK_INSERT 502
#define TK_INTO 503
#define TK_NOW 504
#define TK_VALUES 507
#define TK_IMPORT 50
7
#define TK_IMPORT 50
9
#define TK_NK_SEMI 508
#define TK_NK_NIL 65535
...
...
include/libs/command/command.h
浏览文件 @
61d8ef38
...
...
@@ -15,5 +15,10 @@
#include "cmdnodes.h"
#include "tmsg.h"
#include "plannodes.h"
int32_t
qExecCommand
(
SNode
*
pStmt
,
SRetrieveTableRsp
**
pRsp
);
int32_t
qExecStaticExplain
(
SQueryPlan
*
pDag
,
SRetrieveTableRsp
**
pRsp
);
include/libs/nodes/cmdnodes.h
浏览文件 @
61d8ef38
...
...
@@ -38,7 +38,9 @@ typedef struct SDatabaseOptions {
int32_t
fsyncPeriod
;
int32_t
maxRowsPerBlock
;
int32_t
minRowsPerBlock
;
int32_t
keep
;
int32_t
keep0
;
int32_t
keep1
;
int32_t
keep2
;
int32_t
precision
;
int32_t
quorum
;
int32_t
replica
;
...
...
@@ -76,7 +78,9 @@ typedef struct SAlterDatabaseStmt {
typedef
struct
STableOptions
{
ENodeType
type
;
int32_t
keep
;
int32_t
keep0
;
int32_t
keep1
;
int32_t
keep2
;
int32_t
ttl
;
char
comments
[
TSDB_STB_COMMENT_LEN
];
SNodeList
*
pSma
;
...
...
@@ -193,6 +197,12 @@ typedef struct SShowStmt {
SNode
*
pTbNamePattern
;
// SValueNode
}
SShowStmt
;
typedef
struct
SShowCreatStmt
{
ENodeType
type
;
char
dbName
[
TSDB_DB_NAME_LEN
];
char
tableName
[
TSDB_TABLE_NAME_LEN
];
}
SShowCreatStmt
;
typedef
enum
EIndexType
{
INDEX_TYPE_SMA
=
1
,
INDEX_TYPE_FULLTEXT
...
...
include/libs/nodes/nodes.h
浏览文件 @
61d8ef38
...
...
@@ -103,6 +103,15 @@ typedef enum ENodeType {
QUERY_NODE_EXPLAIN_STMT
,
QUERY_NODE_DESCRIBE_STMT
,
QUERY_NODE_RESET_QUERY_CACHE_STMT
,
QUERY_NODE_COMPACT_STMT
,
QUERY_NODE_CREATE_FUNCTION_STMT
,
QUERY_NODE_DROP_FUNCTION_STMT
,
QUERY_NODE_CREATE_STREAM_STMT
,
QUERY_NODE_DROP_STREAM_STMT
,
QUERY_NODE_MERGE_VGROUP_STMT
,
QUERY_NODE_REDISTRIBUTE_VGROUP_STMT
,
QUERY_NODE_SPLIT_VGROUP_STMT
,
QUERY_NODE_SYNCDB_STMT
,
QUERY_NODE_SHOW_DATABASES_STMT
,
QUERY_NODE_SHOW_TABLES_STMT
,
QUERY_NODE_SHOW_STABLES_STMT
,
...
...
@@ -115,6 +124,18 @@ typedef enum ENodeType {
QUERY_NODE_SHOW_FUNCTIONS_STMT
,
QUERY_NODE_SHOW_INDEXES_STMT
,
QUERY_NODE_SHOW_STREAMS_STMT
,
QUERY_NODE_SHOW_APPS_STMT
,
QUERY_NODE_SHOW_CONNECTIONS_STMT
,
QUERY_NODE_SHOW_LICENCE_STMT
,
QUERY_NODE_SHOW_CREATE_DATABASE_STMT
,
QUERY_NODE_SHOW_CREATE_TABLE_STMT
,
QUERY_NODE_SHOW_CREATE_STABLE_STMT
,
QUERY_NODE_SHOW_QUERIES_STMT
,
QUERY_NODE_SHOW_SCORES_STMT
,
QUERY_NODE_SHOW_TOPICS_STMT
,
QUERY_NODE_SHOW_VARIABLE_STMT
,
QUERY_NODE_KILL_CONNECTION_STMT
,
QUERY_NODE_KILL_QUERY_STMT
,
// logic plan node
QUERY_NODE_LOGIC_PLAN_SCAN
,
...
...
@@ -215,6 +236,8 @@ int32_t nodesStringToNode(const char* pStr, SNode** pNode);
int32_t
nodesListToString
(
const
SNodeList
*
pList
,
bool
format
,
char
**
pStr
,
int32_t
*
pLen
);
int32_t
nodesStringToList
(
const
char
*
pStr
,
SNodeList
**
pList
);
int32_t
nodesNodeToSQL
(
SNode
*
pNode
,
char
*
buf
,
int32_t
bufSize
,
int32_t
*
len
);
#ifdef __cplusplus
}
#endif
...
...
include/libs/nodes/plannodes.h
浏览文件 @
61d8ef38
...
...
@@ -253,7 +253,7 @@ typedef struct SIntervalPhysiNode {
int64_t
sliding
;
int8_t
intervalUnit
;
int8_t
slidingUnit
;
uint8_t
precision
;
uint8_t
precision
;
SFillNode
*
pFill
;
}
SIntervalPhysiNode
;
...
...
include/libs/nodes/querynodes.h
浏览文件 @
61d8ef38
...
...
@@ -314,6 +314,7 @@ bool nodesIsTimeorderQuery(const SNode* pQuery);
bool
nodesIsTimelineQuery
(
const
SNode
*
pQuery
);
void
*
nodesGetValueFromNode
(
SValueNode
*
pNode
);
char
*
nodesGetStrValueFromNode
(
SValueNode
*
pNode
);
#ifdef __cplusplus
}
...
...
include/libs/qcom/query.h
浏览文件 @
61d8ef38
...
...
@@ -53,6 +53,7 @@ typedef struct SIndexMeta {
}
SIndexMeta
;
/*
* ASSERT(sizeof(SCTableMeta) == 24)
* ASSERT(tableType == TSDB_CHILD_TABLE)
...
...
@@ -235,6 +236,11 @@ extern int32_t (*queryProcessMsgRsp[TDMT_MAX])(void* output, char* msg, int32_t
} \
} while (0)
#define QRY_ERR_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { terrno = _code; return _code; } } while (0)
#define QRY_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { terrno = _code; } return _code; } while (0)
#define QRY_ERR_JRET(c) do { code = c; if (code != TSDB_CODE_SUCCESS) { terrno = code; goto _return; } } while (0)
#ifdef __cplusplus
}
#endif
...
...
include/os/osMemory.h
浏览文件 @
61d8ef38
...
...
@@ -32,6 +32,7 @@ extern "C" {
void
*
taosMemoryMalloc
(
int32_t
size
);
void
*
taosMemoryCalloc
(
int32_t
num
,
int32_t
size
);
void
*
taosMemoryRealloc
(
void
*
ptr
,
int32_t
size
);
void
*
taosMemoryStrDup
(
void
*
ptr
);
void
taosMemoryFree
(
const
void
*
ptr
);
int32_t
taosMemorySize
(
void
*
ptr
);
...
...
include/os/osProc.h
浏览文件 @
61d8ef38
...
...
@@ -21,9 +21,11 @@ extern "C" {
#endif
int32_t
taosNewProc
(
char
**
args
);
void
taosWaitProc
(
int32_t
pid
);
void
taosKillProc
(
int32_t
pid
);
bool
taosProcExist
(
int32_t
pid
);
void
taosSetProcName
(
int32_t
argc
,
char
**
argv
,
const
char
*
name
);
void
taosSetProcPath
(
int32_t
argc
,
char
**
argv
);
bool
taosProcExists
(
int32_t
pid
);
#ifdef __cplusplus
}
...
...
include/os/osTime.h
浏览文件 @
61d8ef38
...
...
@@ -46,6 +46,14 @@ extern "C" {
#define MILLISECOND_PER_DAY (MILLISECOND_PER_HOUR * 24)
#define MILLISECOND_PER_WEEK (MILLISECOND_PER_DAY * 7)
#define NANOSECOND_PER_USEC (1000L)
#define NANOSECOND_PER_MSEC (1000000L)
#define NANOSECOND_PER_SEC (1000000000L)
#define NANOSECOND_PER_MINUTE (NANOSECOND_PER_SEC * 60)
#define NANOSECOND_PER_HOUR (NANOSECOND_PER_MINUTE * 60)
#define NANOSECOND_PER_DAY (NANOSECOND_PER_HOUR * 24)
#define NANOSECOND_PER_WEEK (NANOSECOND_PER_DAY * 7)
int32_t
taosGetTimeOfDay
(
struct
timeval
*
tv
);
//@return timestamp in second
...
...
include/util/taoserror.h
浏览文件 @
61d8ef38
...
...
@@ -479,6 +479,9 @@ int32_t* taosGetErrno();
#define TSDB_CODE_PAR_INVALID_ENDPOINT TAOS_DEF_ERROR_CODE(0, 0x2613)
#define TSDB_CODE_PAR_EXPRIE_STATEMENT TAOS_DEF_ERROR_CODE(0, 0x2614)
#define TSDB_CODE_PAR_INTERVAL_VALUE_TOO_SMALL TAOS_DEF_ERROR_CODE(0, 0x2615)
#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_CORRESPONDING_STABLE_ERR TAOS_DEF_ERROR_CODE(0, 0x2618)
#ifdef __cplusplus
}
...
...
include/util/tdef.h
浏览文件 @
61d8ef38
...
...
@@ -224,6 +224,7 @@ typedef enum ELogicConditionType {
#define TSDB_APP_NAME_LEN TSDB_UNI_LEN
#define TSDB_STB_COMMENT_LEN 1024
/**
* In some scenarios uint16_t (0~65535) is used to store the row len.
* - Firstly, we use 65531(65535 - 4), as the SDataRow/SKVRow contains 4 bits header.
...
...
@@ -303,13 +304,13 @@ typedef enum ELogicConditionType {
#define TSDB_MAX_TOTAL_BLOCKS 10000
#define TSDB_DEFAULT_TOTAL_BLOCKS 6
#define TSDB_MIN_DAYS_PER_FILE
1
#define TSDB_MAX_DAYS_PER_FILE
3650
#define TSDB_DEFAULT_DAYS_PER_FILE
10
#define TSDB_MIN_DAYS_PER_FILE
(1 * 1440) // unit minute
#define TSDB_MAX_DAYS_PER_FILE
(3650 * 1440)
#define TSDB_DEFAULT_DAYS_PER_FILE
(10 * 1440)
#define TSDB_MIN_KEEP
1 // data in db to be reserved.
#define TSDB_MAX_KEEP
365000
// data in db to be reserved.
#define TSDB_DEFAULT_KEEP
3650
// ten years
#define TSDB_MIN_KEEP
(1 * 1440) // data in db to be reserved. unit minute
#define TSDB_MAX_KEEP
(365000 * 1440)
// data in db to be reserved.
#define TSDB_DEFAULT_KEEP
(3650 * 1440)
// ten years
#define TSDB_MIN_MIN_ROW_FBLOCK 10
#define TSDB_MAX_MIN_ROW_FBLOCK 1000
...
...
@@ -327,7 +328,7 @@ typedef enum ELogicConditionType {
#define TSDB_MAX_FSYNC_PERIOD 180000 // millisecond
#define TSDB_DEFAULT_FSYNC_PERIOD 3000 // three second
#define TSDB_MIN_WAL_LEVEL
0
#define TSDB_MIN_WAL_LEVEL
1
#define TSDB_MAX_WAL_LEVEL 2
#define TSDB_DEFAULT_WAL_LEVEL 1
...
...
@@ -388,6 +389,7 @@ typedef enum ELogicConditionType {
#define TSDB_DEFAULT_EXPLAIN_RATIO 0.001
#define TSDB_EXPLAIN_RESULT_ROW_SIZE 1024
#define TSDB_EXPLAIN_RESULT_COLUMN_NAME "QUERY PLAN"
#define TSDB_MAX_JOIN_TABLE_NUM 10
#define TSDB_MAX_UNION_CLAUSE 5
...
...
@@ -479,6 +481,9 @@ enum {
#define QND_VGID 1
#define VND_VGID 0
#define MAX_NUM_STR_SIZE 40
#ifdef __cplusplus
}
#endif
...
...
source/common/src/tmsg.c
浏览文件 @
61d8ef38
...
...
@@ -1629,6 +1629,7 @@ int32_t tSerializeSAlterDbReq(void *buf, int32_t bufLen, SAlterDbReq *pReq) {
if
(
tEncodeI8
(
&
encoder
,
pReq
->
walLevel
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
&
encoder
,
pReq
->
quorum
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
&
encoder
,
pReq
->
cacheLastRow
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
&
encoder
,
pReq
->
replications
)
<
0
)
return
-
1
;
tEndEncode
(
&
encoder
);
int32_t
tlen
=
encoder
.
pos
;
...
...
@@ -1650,6 +1651,7 @@ int32_t tDeserializeSAlterDbReq(void *buf, int32_t bufLen, SAlterDbReq *pReq) {
if
(
tDecodeI8
(
&
decoder
,
&
pReq
->
walLevel
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
&
decoder
,
&
pReq
->
quorum
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
&
decoder
,
&
pReq
->
cacheLastRow
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
&
decoder
,
&
pReq
->
replications
)
<
0
)
return
-
1
;
tEndDecode
(
&
decoder
);
tCoderClear
(
&
decoder
);
...
...
source/common/src/ttime.c
浏览文件 @
61d8ef38
...
...
@@ -361,6 +361,18 @@ int32_t parseLocaltimeDst(char* timestr, int64_t* time, int32_t timePrec) {
return
0
;
}
char
getPrecisionUnit
(
int32_t
precision
)
{
static
char
units
[
3
]
=
{
TIME_UNIT_MILLISECOND
,
TIME_UNIT_MICROSECOND
,
TIME_UNIT_NANOSECOND
};
switch
(
precision
)
{
case
TSDB_TIME_PRECISION_MILLI
:
case
TSDB_TIME_PRECISION_MICRO
:
case
TSDB_TIME_PRECISION_NANO
:
return
units
[
precision
];
default:
return
0
;
}
}
int64_t
convertTimePrecision
(
int64_t
time
,
int32_t
fromPrecision
,
int32_t
toPrecision
)
{
assert
(
fromPrecision
==
TSDB_TIME_PRECISION_MILLI
||
fromPrecision
==
TSDB_TIME_PRECISION_MICRO
||
fromPrecision
==
TSDB_TIME_PRECISION_NANO
);
...
...
@@ -370,6 +382,33 @@ int64_t convertTimePrecision(int64_t time, int32_t fromPrecision, int32_t toPrec
return
(
int64_t
)((
double
)
time
*
factors
[
fromPrecision
][
toPrecision
]);
}
int64_t
convertTimeFromPrecisionToUnit
(
int64_t
time
,
int32_t
fromPrecision
,
char
toUnit
)
{
assert
(
fromPrecision
==
TSDB_TIME_PRECISION_MILLI
||
fromPrecision
==
TSDB_TIME_PRECISION_MICRO
||
fromPrecision
==
TSDB_TIME_PRECISION_NANO
);
static
double
factors
[
3
]
=
{
1000000
.,
1000
.,
1
.};
switch
(
toUnit
)
{
case
's'
:
return
time
*
factors
[
fromPrecision
]
/
NANOSECOND_PER_SEC
;
case
'm'
:
return
time
*
factors
[
fromPrecision
]
/
NANOSECOND_PER_MINUTE
;
case
'h'
:
return
time
*
factors
[
fromPrecision
]
/
NANOSECOND_PER_HOUR
;
case
'd'
:
return
time
*
factors
[
fromPrecision
]
/
NANOSECOND_PER_DAY
;
case
'w'
:
return
time
*
factors
[
fromPrecision
]
/
NANOSECOND_PER_WEEK
;
case
'a'
:
return
time
*
factors
[
fromPrecision
]
/
NANOSECOND_PER_MSEC
;
case
'u'
:
return
time
*
factors
[
fromPrecision
]
/
NANOSECOND_PER_USEC
;
case
'b'
:
return
time
*
factors
[
fromPrecision
];
default:
{
return
-
1
;
}
}
}
static
int32_t
getDuration
(
int64_t
val
,
char
unit
,
int64_t
*
result
,
int32_t
timePrecision
)
{
switch
(
unit
)
{
case
's'
:
...
...
@@ -688,4 +727,4 @@ void taosFormatUtcTime(char* buf, int32_t bufLen, int64_t t, int32_t precision)
length
+=
(
int32_t
)
strftime
(
ts
+
length
,
40
-
length
,
"%z"
,
ptm
);
tstrncpy
(
buf
,
ts
,
bufLen
);
}
\ No newline at end of file
}
source/dnode/mgmt/dm/src/dmFile.c
浏览文件 @
61d8ef38
...
...
@@ -200,7 +200,7 @@ int32_t dmWriteFile(SDnodeMgmt *pMgmt) {
taosMemoryFree
(
content
);
char
realfile
[
PATH_MAX
];
snprintf
(
realfile
,
sizeof
(
realfile
),
"%s%s
m
node.json"
,
pMgmt
->
path
,
TD_DIRSEP
);
snprintf
(
realfile
,
sizeof
(
realfile
),
"%s%s
d
node.json"
,
pMgmt
->
path
,
TD_DIRSEP
);
if
(
taosRenameFile
(
file
,
realfile
)
!=
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
...
...
source/dnode/mgmt/main/src/dndExec.c
浏览文件 @
61d8ef38
...
...
@@ -20,9 +20,9 @@ static bool dndRequireNode(SMgmtWrapper *pWrapper) {
bool
required
=
false
;
int32_t
code
=
(
*
pWrapper
->
fp
.
requiredFp
)(
pWrapper
,
&
required
);
if
(
!
required
)
{
dDebug
(
"node:%s,
no need to start
"
,
pWrapper
->
name
);
dDebug
(
"node:%s,
does not require startup
"
,
pWrapper
->
name
);
}
else
{
dDebug
(
"node:%s, need
to start
"
,
pWrapper
->
name
);
dDebug
(
"node:%s, need
s to be started
"
,
pWrapper
->
name
);
}
return
required
;
}
...
...
@@ -255,17 +255,39 @@ static int32_t dndRunInParentProcess(SDnode *pDnode) {
while
(
1
)
{
if
(
pDnode
->
event
==
DND_EVENT_STOP
)
{
dInfo
(
"dnode is about to stop"
);
break
;
}
for
(
ENodeType
n
=
DNODE
+
1
;
n
<
NODE_MAX
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
if
(
!
pWrapper
->
required
)
continue
;
if
(
pDnode
->
ntype
==
NODE_MAX
)
continue
;
if
(
pWrapper
->
procId
>
0
&&
taosProcExist
(
pWrapper
->
procId
))
{
dInfo
(
"node:%s, send kill signal to the child process:%d"
,
pWrapper
->
name
,
pWrapper
->
procId
);
taosKillProc
(
pWrapper
->
procId
);
}
}
for
(
ENodeType
n
=
DNODE
+
1
;
n
<
NODE_MAX
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
if
(
!
pWrapper
->
required
)
continue
;
if
(
pDnode
->
ntype
==
NODE_MAX
)
continue
;
for
(
ENodeType
n
=
DNODE
+
1
;
n
<
NODE_MAX
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
if
(
!
pWrapper
->
required
)
continue
;
if
(
pDnode
->
ntype
==
NODE_MAX
)
continue
;
if
(
pWrapper
->
procId
<=
0
||
!
taosProcExists
(
pWrapper
->
procId
))
{
dInfo
(
"node:%s, process:%d is killed and needs to be restarted"
,
pWrapper
->
name
,
pWrapper
->
procId
);
dndNewProc
(
pWrapper
,
n
);
if
(
pWrapper
->
procId
>
0
&&
taosProcExist
(
pWrapper
->
procId
))
{
dInfo
(
"node:%s, wait for child process:%d to stop"
,
pWrapper
->
name
,
pWrapper
->
procId
);
taosWaitProc
(
pWrapper
->
procId
);
dInfo
(
"node:%s, child process:%d is stopped"
,
pWrapper
->
name
,
pWrapper
->
procId
);
}
}
break
;
}
else
{
for
(
ENodeType
n
=
DNODE
+
1
;
n
<
NODE_MAX
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
if
(
!
pWrapper
->
required
)
continue
;
if
(
pDnode
->
ntype
==
NODE_MAX
)
continue
;
if
(
pWrapper
->
procId
<=
0
||
!
taosProcExist
(
pWrapper
->
procId
))
{
dInfo
(
"node:%s, process:%d is killed and needs to be restarted"
,
pWrapper
->
name
,
pWrapper
->
procId
);
dndNewProc
(
pWrapper
,
n
);
}
}
}
...
...
@@ -279,6 +301,12 @@ static int32_t dndRunInChildProcess(SDnode *pDnode) {
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
pDnode
->
ntype
];
dInfo
(
"%s run in child process"
,
pWrapper
->
name
);
pWrapper
->
required
=
dndRequireNode
(
pWrapper
);
if
(
!
pWrapper
->
required
)
{
dError
(
"%s does not require startup"
,
pWrapper
->
name
);
return
-
1
;
}
SMsgCb
msgCb
=
dndCreateMsgcb
(
pWrapper
);
tmsgSetDefaultMsgCb
(
&
msgCb
);
pWrapper
->
procType
=
PROC_CHILD
;
...
...
source/dnode/mgmt/vm/src/vmWorker.c
浏览文件 @
61d8ef38
...
...
@@ -187,7 +187,7 @@ static int32_t vmPutNodeMsgToQueue(SVnodesMgmt *pMgmt, SNodeMsg *pMsg, EQueueTyp
SVnodeObj
*
pVnode
=
vmAcquireVnode
(
pMgmt
,
pHead
->
vgId
);
if
(
pVnode
==
NULL
)
{
dError
(
"vgId:%d, failed to write msg:%p to vnode-queue since %s"
,
pHead
->
vgId
,
pMsg
,
terrstr
());
return
-
1
;
return
terrno
;
}
int32_t
code
=
0
;
...
...
source/dnode/mnode/impl/src/mndDb.c
浏览文件 @
61d8ef38
...
...
@@ -1309,7 +1309,7 @@ static int32_t mndGetDbMeta(SNodeMsg *pReq, SShowObj *pShow, STableMetaRsp *pMet
cols
++
;
pShow
->
bytes
[
cols
]
=
2
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_
SMALL
INT
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_INT
;
strcpy
(
pSchema
[
cols
].
name
,
"days"
);
pSchema
[
cols
].
bytes
=
pShow
->
bytes
[
cols
];
cols
++
;
...
...
@@ -1444,7 +1444,7 @@ static void dumpDbInfoToPayload(char *data, SDbObj *pDb, SShowObj *pShow, int32_
cols
++
;
pWrite
=
getDataPosition
(
data
,
pShow
,
cols
,
rows
,
rowCapacity
);
*
(
int
16
_t
*
)
pWrite
=
pDb
->
cfg
.
daysPerFile
;
*
(
int
32
_t
*
)
pWrite
=
pDb
->
cfg
.
daysPerFile
;
cols
++
;
pWrite
=
getDataPosition
(
data
,
pShow
,
cols
,
rows
,
rowCapacity
);
...
...
source/dnode/mnode/impl/src/mndInfoSchema.c
浏览文件 @
61d8ef38
...
...
@@ -53,7 +53,7 @@ static const SInfosTableSchema userDBSchema[] = {
{.
name
=
"ntables"
,
.
bytes
=
8
,
.
type
=
TSDB_DATA_TYPE_BIGINT
},
{.
name
=
"replica"
,
.
bytes
=
2
,
.
type
=
TSDB_DATA_TYPE_SMALLINT
},
{.
name
=
"quorum"
,
.
bytes
=
2
,
.
type
=
TSDB_DATA_TYPE_SMALLINT
},
{.
name
=
"days"
,
.
bytes
=
2
,
.
type
=
TSDB_DATA_TYPE_SMALL
INT
},
{.
name
=
"days"
,
.
bytes
=
4
,
.
type
=
TSDB_DATA_TYPE_
INT
},
{.
name
=
"keep"
,
.
bytes
=
24
+
VARSTR_HEADER_SIZE
,
.
type
=
TSDB_DATA_TYPE_BINARY
},
{.
name
=
"cache"
,
.
bytes
=
4
,
.
type
=
TSDB_DATA_TYPE_INT
},
{.
name
=
"blocks"
,
.
bytes
=
4
,
.
type
=
TSDB_DATA_TYPE_INT
},
...
...
@@ -89,7 +89,6 @@ static const SInfosTableSchema userStbsSchema[] = {
{.
name
=
"create_time"
,
.
bytes
=
8
,
.
type
=
TSDB_DATA_TYPE_TIMESTAMP
},
{.
name
=
"columns"
,
.
bytes
=
4
,
.
type
=
TSDB_DATA_TYPE_INT
},
{.
name
=
"tags"
,
.
bytes
=
4
,
.
type
=
TSDB_DATA_TYPE_INT
},
{.
name
=
"tables"
,
.
bytes
=
4
,
.
type
=
TSDB_DATA_TYPE_INT
},
{.
name
=
"last_update"
,
.
bytes
=
8
,
.
type
=
TSDB_DATA_TYPE_TIMESTAMP
},
{.
name
=
"table_comment"
,
.
bytes
=
1024
+
VARSTR_HEADER_SIZE
,
.
type
=
TSDB_DATA_TYPE_INT
},
};
...
...
source/dnode/mnode/impl/src/mndStb.c
浏览文件 @
61d8ef38
...
...
@@ -1652,10 +1652,6 @@ static int32_t mndRetrieveStb(SNodeMsg *pReq, SShowObj *pShow, char *data, int32
*
(
int32_t
*
)
pWrite
=
pStb
->
numOfTags
;
cols
++
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
*
(
int32_t
*
)
pWrite
=
0
;
// number of tables
cols
++
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
*
(
int64_t
*
)
pWrite
=
pStb
->
updateTime
;
// number of tables
cols
++
;
...
...
source/dnode/mnode/impl/test/sma/sma.cpp
浏览文件 @
61d8ef38
...
...
@@ -42,10 +42,10 @@ void* MndTestSma::BuildCreateDbReq(const char* dbname, int32_t* pContLen) {
createReq
.
numOfVgroups
=
2
;
createReq
.
cacheBlockSize
=
16
;
createReq
.
totalBlocks
=
10
;
createReq
.
daysPerFile
=
10
;
createReq
.
daysToKeep0
=
3650
;
createReq
.
daysToKeep1
=
3650
;
createReq
.
daysToKeep2
=
3650
;
createReq
.
daysPerFile
=
10
*
1440
;
createReq
.
daysToKeep0
=
3650
*
1440
;
createReq
.
daysToKeep1
=
3650
*
1440
;
createReq
.
daysToKeep2
=
3650
*
1440
;
createReq
.
minRows
=
100
;
createReq
.
maxRows
=
4096
;
createReq
.
commitTime
=
3600
;
...
...
source/dnode/mnode/impl/test/topic/topic.cpp
浏览文件 @
61d8ef38
...
...
@@ -35,10 +35,10 @@ void* MndTestTopic::BuildCreateDbReq(const char* dbname, int32_t* pContLen) {
createReq
.
numOfVgroups
=
2
;
createReq
.
cacheBlockSize
=
16
;
createReq
.
totalBlocks
=
10
;
createReq
.
daysPerFile
=
10
;
createReq
.
daysToKeep0
=
3650
;
createReq
.
daysToKeep1
=
3650
;
createReq
.
daysToKeep2
=
3650
;
createReq
.
daysPerFile
=
10
*
1440
;
createReq
.
daysToKeep0
=
3650
*
1440
;
createReq
.
daysToKeep1
=
3650
*
1440
;
createReq
.
daysToKeep2
=
3650
*
1440
;
createReq
.
minRows
=
100
;
createReq
.
maxRows
=
4096
;
createReq
.
commitTime
=
3600
;
...
...
source/dnode/mnode/impl/test/user/user.cpp
浏览文件 @
61d8ef38
...
...
@@ -324,10 +324,10 @@ TEST_F(MndTestUser, 03_Alter_User) {
createReq
.
numOfVgroups
=
2
;
createReq
.
cacheBlockSize
=
16
;
createReq
.
totalBlocks
=
10
;
createReq
.
daysPerFile
=
10
;
createReq
.
daysToKeep0
=
3650
;
createReq
.
daysToKeep1
=
3650
;
createReq
.
daysToKeep2
=
3650
;
createReq
.
daysPerFile
=
10
*
1440
;
createReq
.
daysToKeep0
=
3650
*
1440
;
createReq
.
daysToKeep1
=
3650
*
1440
;
createReq
.
daysToKeep2
=
3650
*
1440
;
createReq
.
minRows
=
100
;
createReq
.
maxRows
=
4096
;
createReq
.
commitTime
=
3600
;
...
...
source/libs/catalog/inc/catalogInt.h
浏览文件 @
61d8ef38
...
...
@@ -112,7 +112,14 @@ typedef struct SCtgRuntimeStat {
}
SCtgRuntimeStat
;
typedef
struct
SCtgCacheStat
{
uint64_t
clusterNum
;
uint64_t
dbNum
;
uint64_t
tblNum
;
uint64_t
stblNum
;
uint64_t
vgHitNum
;
uint64_t
vgMissNum
;
uint64_t
tblHitNum
;
uint64_t
tblMissNum
;
}
SCtgCacheStat
;
typedef
struct
SCatalogStat
{
...
...
@@ -186,7 +193,7 @@ typedef struct SCatalogMgmt {
bool
exit
;
SRWLatch
lock
;
SCtgQueue
queue
;
TdThread
updateThread
;
TdThread
updateThread
;
SHashObj
*
pCluster
;
//key: clusterId, value: SCatalog*
SCatalogStat
stat
;
SCatalogCfg
cfg
;
...
...
@@ -204,8 +211,13 @@ typedef struct SCtgAction {
#define CTG_QUEUE_ADD() atomic_add_fetch_64(&gCtgMgmt.queue.qRemainNum, 1)
#define CTG_QUEUE_SUB() atomic_sub_fetch_64(&gCtgMgmt.queue.qRemainNum, 1)
#define CTG_STAT_ADD(n) atomic_add_fetch_64(&(n), 1)
#define CTG_STAT_SUB(n) atomic_sub_fetch_64(&(n), 1)
#define CTG_STAT_ADD(_item, _n) atomic_add_fetch_64(&(_item), _n)
#define CTG_STAT_SUB(_item, _n) atomic_sub_fetch_64(&(_item), _n)
#define CTG_STAT_GET(_item) atomic_load_64(&(_item))
#define CTG_RUNTIME_STAT_ADD(item, n) (CTG_STAT_ADD(gCtgMgmt.stat.runtime.item, n))
#define CTG_CACHE_STAT_ADD(item, n) (CTG_STAT_ADD(gCtgMgmt.stat.cache.item, n))
#define CTG_CACHE_STAT_SUB(item, n) (CTG_STAT_SUB(gCtgMgmt.stat.cache.item, n))
#define CTG_IS_META_NULL(type) ((type) == META_TYPE_NULL_TABLE)
#define CTG_IS_META_CTABLE(type) ((type) == META_TYPE_CTABLE)
...
...
@@ -291,6 +303,9 @@ typedef struct SCtgAction {
#define CTG_API_ENTER() do { CTG_API_DEBUG("CTG API enter %s", __FUNCTION__); CTG_LOCK(CTG_READ, &gCtgMgmt.lock); if (atomic_load_8((int8_t*)&gCtgMgmt.exit)) { CTG_API_LEAVE(TSDB_CODE_CTG_OUT_OF_SERVICE); } } while (0)
extern
void
ctgdShowTableMeta
(
SCatalog
*
pCtg
,
const
char
*
tbName
,
STableMeta
*
p
);
extern
void
ctgdShowClusterCache
(
SCatalog
*
pCtg
);
extern
int32_t
ctgdShowCacheInfo
(
void
);
#ifdef __cplusplus
}
...
...
source/libs/catalog/src/catalog.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/catalog/src/catalogDbg.c
0 → 100644
浏览文件 @
61d8ef38
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "trpc.h"
#include "query.h"
#include "tname.h"
#include "catalogInt.h"
extern
SCatalogMgmt
gCtgMgmt
;
SCtgDebug
gCTGDebug
=
{
0
};
int32_t
ctgdEnableDebug
(
char
*
option
)
{
if
(
0
==
strcasecmp
(
option
,
"lock"
))
{
gCTGDebug
.
lockEnable
=
true
;
qDebug
(
"lock debug enabled"
);
return
TSDB_CODE_SUCCESS
;
}
if
(
0
==
strcasecmp
(
option
,
"cache"
))
{
gCTGDebug
.
cacheEnable
=
true
;
qDebug
(
"cache debug enabled"
);
return
TSDB_CODE_SUCCESS
;
}
if
(
0
==
strcasecmp
(
option
,
"api"
))
{
gCTGDebug
.
apiEnable
=
true
;
qDebug
(
"api debug enabled"
);
return
TSDB_CODE_SUCCESS
;
}
if
(
0
==
strcasecmp
(
option
,
"meta"
))
{
gCTGDebug
.
metaEnable
=
true
;
qDebug
(
"api debug enabled"
);
return
TSDB_CODE_SUCCESS
;
}
qError
(
"invalid debug option:%s"
,
option
);
return
TSDB_CODE_CTG_INTERNAL_ERROR
;
}
int32_t
ctgdGetStatNum
(
char
*
option
,
void
*
res
)
{
if
(
0
==
strcasecmp
(
option
,
"runtime.qDoneNum"
))
{
*
(
uint64_t
*
)
res
=
atomic_load_64
(
&
gCtgMgmt
.
stat
.
runtime
.
qDoneNum
);
return
TSDB_CODE_SUCCESS
;
}
qError
(
"invalid stat option:%s"
,
option
);
return
TSDB_CODE_CTG_INTERNAL_ERROR
;
}
int32_t
ctgdGetTbMetaNum
(
SCtgDBCache
*
dbCache
)
{
return
dbCache
->
tbCache
.
metaCache
?
(
int32_t
)
taosHashGetSize
(
dbCache
->
tbCache
.
metaCache
)
:
0
;
}
int32_t
ctgdGetStbNum
(
SCtgDBCache
*
dbCache
)
{
return
dbCache
->
tbCache
.
stbCache
?
(
int32_t
)
taosHashGetSize
(
dbCache
->
tbCache
.
stbCache
)
:
0
;
}
int32_t
ctgdGetRentNum
(
SCtgRentMgmt
*
rent
)
{
int32_t
num
=
0
;
for
(
uint16_t
i
=
0
;
i
<
rent
->
slotNum
;
++
i
)
{
SCtgRentSlot
*
slot
=
&
rent
->
slots
[
i
];
if
(
NULL
==
slot
->
meta
)
{
continue
;
}
num
+=
taosArrayGetSize
(
slot
->
meta
);
}
return
num
;
}
int32_t
ctgdGetClusterCacheNum
(
SCatalog
*
pCtg
,
int32_t
type
)
{
if
(
NULL
==
pCtg
||
NULL
==
pCtg
->
dbCache
)
{
return
0
;
}
switch
(
type
)
{
case
CTG_DBG_DB_NUM
:
return
(
int32_t
)
taosHashGetSize
(
pCtg
->
dbCache
);
case
CTG_DBG_DB_RENT_NUM
:
return
ctgdGetRentNum
(
&
pCtg
->
dbRent
);
case
CTG_DBG_STB_RENT_NUM
:
return
ctgdGetRentNum
(
&
pCtg
->
stbRent
);
default:
break
;
}
SCtgDBCache
*
dbCache
=
NULL
;
int32_t
num
=
0
;
void
*
pIter
=
taosHashIterate
(
pCtg
->
dbCache
,
NULL
);
while
(
pIter
)
{
dbCache
=
(
SCtgDBCache
*
)
pIter
;
switch
(
type
)
{
case
CTG_DBG_META_NUM
:
num
+=
ctgdGetTbMetaNum
(
dbCache
);
break
;
case
CTG_DBG_STB_NUM
:
num
+=
ctgdGetStbNum
(
dbCache
);
break
;
default:
ctgError
(
"invalid type:%d"
,
type
);
break
;
}
pIter
=
taosHashIterate
(
pCtg
->
dbCache
,
pIter
);
}
return
num
;
}
void
ctgdShowTableMeta
(
SCatalog
*
pCtg
,
const
char
*
tbName
,
STableMeta
*
p
)
{
if
(
!
gCTGDebug
.
metaEnable
)
{
return
;
}
STableComInfo
*
c
=
&
p
->
tableInfo
;
if
(
TSDB_CHILD_TABLE
==
p
->
tableType
)
{
ctgDebug
(
"table [%s] meta: type:%d, vgId:%d, uid:%"
PRIx64
",suid:%"
PRIx64
,
tbName
,
p
->
tableType
,
p
->
vgId
,
p
->
uid
,
p
->
suid
);
return
;
}
else
{
ctgDebug
(
"table [%s] meta: type:%d, vgId:%d, uid:%"
PRIx64
",suid:%"
PRIx64
",sv:%d, tv:%d, tagNum:%d, precision:%d, colNum:%d, rowSize:%d"
,
tbName
,
p
->
tableType
,
p
->
vgId
,
p
->
uid
,
p
->
suid
,
p
->
sversion
,
p
->
tversion
,
c
->
numOfTags
,
c
->
precision
,
c
->
numOfColumns
,
c
->
rowSize
);
}
int32_t
colNum
=
c
->
numOfColumns
+
c
->
numOfTags
;
for
(
int32_t
i
=
0
;
i
<
colNum
;
++
i
)
{
SSchema
*
s
=
&
p
->
schema
[
i
];
ctgDebug
(
"[%d] name:%s, type:%d, colId:%d, bytes:%d"
,
i
,
s
->
name
,
s
->
type
,
s
->
colId
,
s
->
bytes
);
}
}
void
ctgdShowDBCache
(
SCatalog
*
pCtg
,
SHashObj
*
dbHash
)
{
if
(
NULL
==
dbHash
||
!
gCTGDebug
.
cacheEnable
)
{
return
;
}
int32_t
i
=
0
;
SCtgDBCache
*
dbCache
=
NULL
;
void
*
pIter
=
taosHashIterate
(
dbHash
,
NULL
);
while
(
pIter
)
{
char
*
dbFName
=
NULL
;
size_t
len
=
0
;
dbCache
=
(
SCtgDBCache
*
)
pIter
;
dbFName
=
taosHashGetKey
(
pIter
,
&
len
);
int32_t
metaNum
=
dbCache
->
tbCache
.
metaCache
?
taosHashGetSize
(
dbCache
->
tbCache
.
metaCache
)
:
0
;
int32_t
stbNum
=
dbCache
->
tbCache
.
stbCache
?
taosHashGetSize
(
dbCache
->
tbCache
.
stbCache
)
:
0
;
int32_t
vgVersion
=
CTG_DEFAULT_INVALID_VERSION
;
int32_t
hashMethod
=
-
1
;
int32_t
vgNum
=
0
;
if
(
dbCache
->
vgInfo
)
{
vgVersion
=
dbCache
->
vgInfo
->
vgVersion
;
hashMethod
=
dbCache
->
vgInfo
->
hashMethod
;
if
(
dbCache
->
vgInfo
->
vgHash
)
{
vgNum
=
taosHashGetSize
(
dbCache
->
vgInfo
->
vgHash
);
}
}
ctgDebug
(
"[%d] db [%.*s][%"
PRIx64
"] %s: metaNum:%d, stbNum:%d, vgVersion:%d, hashMethod:%d, vgNum:%d"
,
i
,
(
int32_t
)
len
,
dbFName
,
dbCache
->
dbId
,
dbCache
->
deleted
?
"deleted"
:
""
,
metaNum
,
stbNum
,
vgVersion
,
hashMethod
,
vgNum
);
pIter
=
taosHashIterate
(
dbHash
,
pIter
);
}
}
void
ctgdShowClusterCache
(
SCatalog
*
pCtg
)
{
if
(
!
gCTGDebug
.
cacheEnable
||
NULL
==
pCtg
)
{
return
;
}
ctgDebug
(
"## cluster %"
PRIx64
" %p cache Info BEGIN ##"
,
pCtg
->
clusterId
,
pCtg
);
ctgDebug
(
"db:%d meta:%d stb:%d dbRent:%d stbRent:%d"
,
ctgdGetClusterCacheNum
(
pCtg
,
CTG_DBG_DB_NUM
),
ctgdGetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
),
ctgdGetClusterCacheNum
(
pCtg
,
CTG_DBG_STB_NUM
),
ctgdGetClusterCacheNum
(
pCtg
,
CTG_DBG_DB_RENT_NUM
),
ctgdGetClusterCacheNum
(
pCtg
,
CTG_DBG_STB_RENT_NUM
));
ctgdShowDBCache
(
pCtg
,
pCtg
->
dbCache
);
ctgDebug
(
"## cluster %"
PRIx64
" %p cache Info END ##"
,
pCtg
->
clusterId
,
pCtg
);
}
int32_t
ctgdShowCacheInfo
(
void
)
{
if
(
!
gCTGDebug
.
cacheEnable
)
{
return
TSDB_CODE_CTG_OUT_OF_SERVICE
;
}
CTG_API_ENTER
();
SCatalog
*
pCtg
=
NULL
;
void
*
pIter
=
taosHashIterate
(
gCtgMgmt
.
pCluster
,
NULL
);
while
(
pIter
)
{
pCtg
=
*
(
SCatalog
**
)
pIter
;
if
(
pCtg
)
{
ctgdShowClusterCache
(
pCtg
);
}
pIter
=
taosHashIterate
(
gCtgMgmt
.
pCluster
,
pIter
);
}
CTG_API_LEAVE
(
TSDB_CODE_SUCCESS
);
}
source/libs/catalog/test/catalogTests.cpp
浏览文件 @
61d8ef38
...
...
@@ -38,11 +38,11 @@
namespace
{
extern
"C"
int32_t
ctgGetTableMetaFromCache
(
struct
SCatalog
*
pCatalog
,
const
SName
*
pTableName
,
STableMeta
**
pTableMeta
,
int32_t
*
exist
,
int32_t
flag
,
uint64_t
*
dbId
);
extern
"C"
int32_t
ctg
Dbg
GetClusterCacheNum
(
struct
SCatalog
*
pCatalog
,
int32_t
type
);
bool
*
inCache
,
int32_t
flag
,
uint64_t
*
dbId
);
extern
"C"
int32_t
ctg
d
GetClusterCacheNum
(
struct
SCatalog
*
pCatalog
,
int32_t
type
);
extern
"C"
int32_t
ctgActUpdateTbl
(
SCtgMetaAction
*
action
);
extern
"C"
int32_t
ctg
Dbg
EnableDebug
(
char
*
option
);
extern
"C"
int32_t
ctg
Dbg
GetStatNum
(
char
*
option
,
void
*
res
);
extern
"C"
int32_t
ctg
d
EnableDebug
(
char
*
option
);
extern
"C"
int32_t
ctg
d
GetStatNum
(
char
*
option
,
void
*
res
);
void
ctgTestSetRspTableMeta
();
void
ctgTestSetRspCTableMeta
();
...
...
@@ -140,9 +140,9 @@ void ctgTestInitLogFile() {
qDebugFlag
=
159
;
strcpy
(
tsLogDir
,
"/var/log/taos"
);
ctg
Dbg
EnableDebug
(
"api"
);
ctg
Dbg
EnableDebug
(
"meta"
);
ctg
Dbg
EnableDebug
(
"cache"
);
ctg
d
EnableDebug
(
"api"
);
ctg
d
EnableDebug
(
"meta"
);
ctg
d
EnableDebug
(
"cache"
);
if
(
taosInitLog
(
defaultLogFileNamePrefix
,
maxLogFileNum
)
<
0
)
{
printf
(
"failed to open log file in directory:%s
\n
"
,
tsLogDir
);
...
...
@@ -786,15 +786,15 @@ void *ctgTestGetCtableMetaThread(void *param) {
int32_t
code
=
0
;
int32_t
n
=
0
;
STableMeta
*
tbMeta
=
NULL
;
int32_t
exist
=
0
;
bool
inCache
=
false
;
SName
cn
=
{.
type
=
TSDB_TABLE_NAME_T
,
.
acctId
=
1
};
strcpy
(
cn
.
dbname
,
"db1"
);
strcpy
(
cn
.
tname
,
ctgTestCTablename
);
while
(
!
ctgTestStop
)
{
code
=
ctgGetTableMetaFromCache
(
pCtg
,
&
cn
,
&
tbMeta
,
&
exist
,
0
,
NULL
);
if
(
code
||
0
==
exist
)
{
code
=
ctgGetTableMetaFromCache
(
pCtg
,
&
cn
,
&
tbMeta
,
&
inCache
,
0
,
NULL
);
if
(
code
||
!
inCache
)
{
assert
(
0
);
}
...
...
@@ -879,7 +879,7 @@ TEST(tableMeta, normalTable) {
ASSERT_EQ
(
vgInfo
.
vgId
,
8
);
ASSERT_EQ
(
vgInfo
.
epSet
.
numOfEps
,
3
);
while
(
0
==
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_DB_NUM
))
{
while
(
0
==
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_DB_NUM
))
{
taosMsleep
(
50
);
}
...
...
@@ -899,7 +899,7 @@ TEST(tableMeta, normalTable) {
ASSERT_EQ
(
tableMeta
->
tableInfo
.
rowSize
,
12
);
while
(
true
)
{
uint32_t
n
=
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
uint32_t
n
=
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
if
(
0
==
n
)
{
taosMsleep
(
50
);
}
else
{
...
...
@@ -994,7 +994,7 @@ TEST(tableMeta, childTableCase) {
ASSERT_EQ
(
tableMeta
->
tableInfo
.
rowSize
,
12
);
while
(
true
)
{
uint32_t
n
=
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
uint32_t
n
=
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
if
(
0
==
n
)
{
taosMsleep
(
50
);
}
else
{
...
...
@@ -1103,7 +1103,7 @@ TEST(tableMeta, superTableCase) {
ASSERT_EQ
(
tableMeta
->
tableInfo
.
rowSize
,
12
);
while
(
true
)
{
uint32_t
n
=
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
uint32_t
n
=
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
if
(
0
==
n
)
{
taosMsleep
(
50
);
}
else
{
...
...
@@ -1130,7 +1130,7 @@ TEST(tableMeta, superTableCase) {
ASSERT_EQ
(
tableMeta
->
tableInfo
.
rowSize
,
12
);
while
(
true
)
{
uint32_t
n
=
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
uint32_t
n
=
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
if
(
2
!=
n
)
{
taosMsleep
(
50
);
}
else
{
...
...
@@ -1228,7 +1228,7 @@ TEST(tableMeta, rmStbMeta) {
ASSERT_EQ
(
tableMeta
->
tableInfo
.
rowSize
,
12
);
while
(
true
)
{
uint32_t
n
=
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
uint32_t
n
=
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
if
(
0
==
n
)
{
taosMsleep
(
50
);
}
else
{
...
...
@@ -1241,8 +1241,8 @@ TEST(tableMeta, rmStbMeta) {
ASSERT_EQ
(
code
,
0
);
while
(
true
)
{
int32_t
n
=
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
int32_t
m
=
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_STB_RENT_NUM
);
int32_t
n
=
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
int32_t
m
=
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_STB_RENT_NUM
);
if
(
n
||
m
)
{
taosMsleep
(
50
);
}
else
{
...
...
@@ -1251,11 +1251,11 @@ TEST(tableMeta, rmStbMeta) {
}
ASSERT_EQ
(
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_DB_NUM
),
1
);
ASSERT_EQ
(
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
),
0
);
ASSERT_EQ
(
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_STB_NUM
),
0
);
ASSERT_EQ
(
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_DB_RENT_NUM
),
1
);
ASSERT_EQ
(
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_STB_RENT_NUM
),
0
);
ASSERT_EQ
(
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_DB_NUM
),
1
);
ASSERT_EQ
(
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
),
0
);
ASSERT_EQ
(
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_STB_NUM
),
0
);
ASSERT_EQ
(
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_DB_RENT_NUM
),
1
);
ASSERT_EQ
(
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_STB_RENT_NUM
),
0
);
catalogDestroy
();
memset
(
&
gCtgMgmt
,
0
,
sizeof
(
gCtgMgmt
));
...
...
@@ -1298,7 +1298,7 @@ TEST(tableMeta, updateStbMeta) {
ASSERT_EQ
(
tableMeta
->
tableInfo
.
rowSize
,
12
);
while
(
true
)
{
uint32_t
n
=
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
uint32_t
n
=
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
);
if
(
0
==
n
)
{
taosMsleep
(
50
);
}
else
{
...
...
@@ -1318,7 +1318,7 @@ TEST(tableMeta, updateStbMeta) {
while
(
true
)
{
uint64_t
n
=
0
;
ctg
Dbg
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
ctg
d
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
if
(
n
!=
3
)
{
taosMsleep
(
50
);
}
else
{
...
...
@@ -1326,11 +1326,11 @@ TEST(tableMeta, updateStbMeta) {
}
}
ASSERT_EQ
(
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_DB_NUM
),
1
);
ASSERT_EQ
(
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
),
1
);
ASSERT_EQ
(
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_STB_NUM
),
1
);
ASSERT_EQ
(
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_DB_RENT_NUM
),
1
);
ASSERT_EQ
(
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_STB_RENT_NUM
),
1
);
ASSERT_EQ
(
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_DB_NUM
),
1
);
ASSERT_EQ
(
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
),
1
);
ASSERT_EQ
(
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_STB_NUM
),
1
);
ASSERT_EQ
(
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_DB_RENT_NUM
),
1
);
ASSERT_EQ
(
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_STB_RENT_NUM
),
1
);
code
=
catalogGetTableMeta
(
pCtg
,
mockPointer
,
(
const
SEpSet
*
)
mockPointer
,
&
n
,
&
tableMeta
);
ASSERT_EQ
(
code
,
0
);
...
...
@@ -1388,7 +1388,7 @@ TEST(refreshGetMeta, normal2normal) {
while
(
true
)
{
uint64_t
n
=
0
;
ctg
Dbg
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
ctg
d
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
if
(
n
>
0
)
{
break
;
}
...
...
@@ -1409,7 +1409,7 @@ TEST(refreshGetMeta, normal2normal) {
ASSERT_EQ
(
tableMeta
->
tableInfo
.
rowSize
,
12
);
taosMemoryFreeClear
(
tableMeta
);
while
(
0
==
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
))
{
while
(
0
==
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
))
{
taosMsleep
(
50
);
}
...
...
@@ -1467,7 +1467,7 @@ TEST(refreshGetMeta, normal2notexist) {
while
(
true
)
{
uint64_t
n
=
0
;
ctg
Dbg
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
ctg
d
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
if
(
n
>
0
)
{
break
;
}
...
...
@@ -1488,7 +1488,7 @@ TEST(refreshGetMeta, normal2notexist) {
ASSERT_EQ
(
tableMeta
->
tableInfo
.
rowSize
,
12
);
taosMemoryFreeClear
(
tableMeta
);
while
(
0
==
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
))
{
while
(
0
==
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
))
{
taosMsleep
(
50
);
}
...
...
@@ -1541,7 +1541,7 @@ TEST(refreshGetMeta, normal2child) {
while
(
true
)
{
uint64_t
n
=
0
;
ctg
Dbg
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
ctg
d
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
if
(
n
>
0
)
{
break
;
}
...
...
@@ -1562,7 +1562,7 @@ TEST(refreshGetMeta, normal2child) {
ASSERT_EQ
(
tableMeta
->
tableInfo
.
rowSize
,
12
);
taosMemoryFreeClear
(
tableMeta
);
while
(
0
==
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
))
{
while
(
0
==
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
))
{
taosMsleep
(
50
);
}
...
...
@@ -1625,7 +1625,7 @@ TEST(refreshGetMeta, stable2child) {
while
(
true
)
{
uint64_t
n
=
0
;
ctg
Dbg
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
ctg
d
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
if
(
n
>
0
)
{
break
;
}
...
...
@@ -1647,7 +1647,7 @@ TEST(refreshGetMeta, stable2child) {
ASSERT_EQ
(
tableMeta
->
tableInfo
.
rowSize
,
12
);
taosMemoryFreeClear
(
tableMeta
);
while
(
0
==
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
))
{
while
(
0
==
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
))
{
taosMsleep
(
50
);
}
...
...
@@ -1710,7 +1710,7 @@ TEST(refreshGetMeta, stable2stable) {
while
(
true
)
{
uint64_t
n
=
0
;
ctg
Dbg
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
ctg
d
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
if
(
n
>
0
)
{
break
;
}
...
...
@@ -1732,7 +1732,7 @@ TEST(refreshGetMeta, stable2stable) {
ASSERT_EQ
(
tableMeta
->
tableInfo
.
rowSize
,
12
);
taosMemoryFreeClear
(
tableMeta
);
while
(
0
==
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
))
{
while
(
0
==
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
))
{
taosMsleep
(
50
);
}
...
...
@@ -1798,7 +1798,7 @@ TEST(refreshGetMeta, child2stable) {
while
(
true
)
{
uint64_t
n
=
0
;
ctg
Dbg
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
ctg
d
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
if
(
n
>
0
)
{
break
;
}
...
...
@@ -1818,7 +1818,7 @@ TEST(refreshGetMeta, child2stable) {
ASSERT_EQ
(
tableMeta
->
tableInfo
.
rowSize
,
12
);
taosMemoryFreeClear
(
tableMeta
);
while
(
2
!=
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
))
{
while
(
2
!=
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
))
{
taosMsleep
(
50
);
}
...
...
@@ -2015,7 +2015,7 @@ TEST(dbVgroup, getSetDbVgroupCase) {
while
(
true
)
{
uint64_t
n
=
0
;
ctg
Dbg
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
ctg
d
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
if
(
n
>
0
)
{
break
;
}
...
...
@@ -2041,7 +2041,7 @@ TEST(dbVgroup, getSetDbVgroupCase) {
while
(
true
)
{
uint64_t
n
=
0
;
ctg
Dbg
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
ctg
d
GetStatNum
(
"runtime.qDoneNum"
,
(
void
*
)
&
n
);
if
(
n
!=
3
)
{
taosMsleep
(
50
);
}
else
{
...
...
@@ -2266,7 +2266,7 @@ TEST(rentTest, allRent) {
ASSERT_EQ
(
tableMeta
->
tableInfo
.
precision
,
1
);
ASSERT_EQ
(
tableMeta
->
tableInfo
.
rowSize
,
12
);
while
(
ctg
Dbg
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
)
<
i
)
{
while
(
ctg
d
GetClusterCacheNum
(
pCtg
,
CTG_DBG_META_NUM
)
<
i
)
{
taosMsleep
(
50
);
}
...
...
source/libs/command/inc/commandInt.h
0 → 100644
浏览文件 @
61d8ef38
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _TD_QUERY_INT_H_
#define _TD_QUERY_INT_H_
#ifdef __cplusplus
extern
"C"
{
#endif
#include "nodes.h"
#include "plannodes.h"
#include "ttime.h"
#define EXPLAIN_MAX_GROUP_NUM 100
//newline area
#define EXPLAIN_TAG_SCAN_FORMAT "Tag Scan on %s columns=%d width=%d"
#define EXPLAIN_TBL_SCAN_FORMAT "Table Scan on %s columns=%d width=%d"
#define EXPLAIN_SYSTBL_SCAN_FORMAT "System Table Scan on %s columns=%d width=%d"
#define EXPLAIN_PROJECTION_FORMAT "Projection columns=%d width=%d"
#define EXPLAIN_JOIN_FORMAT "%s between %d tables width=%d"
#define EXPLAIN_AGG_FORMAT "Aggragate functions=%d"
#define EXPLAIN_EXCHANGE_FORMAT "Data Exchange %d:1 width=%d"
#define EXPLAIN_SORT_FORMAT "Sort on %d Column(s) width=%d"
#define EXPLAIN_INTERVAL_FORMAT "Interval on Column %s functions=%d interval=%" PRId64 "%c offset=%" PRId64 "%c sliding=%" PRId64 "%c width=%d"
#define EXPLAIN_SESSION_FORMAT "Session gap=%" PRId64 " functions=%d width=%d"
#define EXPLAIN_ORDER_FORMAT "Order: %s"
#define EXPLAIN_FILTER_FORMAT "Filter: "
#define EXPLAIN_FILL_FORMAT "Fill: %s"
#define EXPLAIN_ON_CONDITIONS_FORMAT "Join Cond: "
#define EXPLAIN_TIMERANGE_FORMAT "Time Range: [%" PRId64 ", %" PRId64 "]"
//append area
#define EXPLAIN_GROUPS_FORMAT " groups=%d"
#define EXPLAIN_WIDTH_FORMAT " width=%d"
#define EXPLAIN_LOOPS_FORMAT " loops=%d"
#define EXPLAIN_REVERSE_FORMAT " reverse=%d"
typedef
struct
SExplainGroup
{
int32_t
nodeNum
;
SSubplan
*
plan
;
void
*
execInfo
;
//TODO
}
SExplainGroup
;
typedef
struct
SExplainResNode
{
SNodeList
*
pChildren
;
SPhysiNode
*
pNode
;
void
*
pExecInfo
;
}
SExplainResNode
;
typedef
struct
SQueryExplainRowInfo
{
int32_t
level
;
int32_t
len
;
char
*
buf
;
}
SQueryExplainRowInfo
;
typedef
struct
SExplainCtx
{
int32_t
totalSize
;
bool
verbose
;
char
*
tbuf
;
SArray
*
rows
;
SHashObj
*
groupHash
;
}
SExplainCtx
;
#define EXPLAIN_ORDER_STRING(_order) ((TSDB_ORDER_ASC == _order) ? "Ascending" : "Descending")
#define EXPLAIN_JOIN_STRING(_type) ((JOIN_TYPE_INNER == _type) ? "Inner join" : "Join")
#define INVERAL_TIME_FROM_PRECISION_TO_UNIT(_t, _u, _p) (((_u) == 'n' || (_u) == 'y') ? (_t) : (convertTimeFromPrecisionToUnit(_t, _p, _u)))
#define EXPLAIN_ROW_NEW(level, ...) \
do { \
if (isVerboseLine) { \
tlen = snprintf(tbuf + VARSTR_HEADER_SIZE, TSDB_EXPLAIN_RESULT_ROW_SIZE, "%*s", (level) * 2 + 3, ""); \
} else { \
tlen = snprintf(tbuf + VARSTR_HEADER_SIZE, TSDB_EXPLAIN_RESULT_ROW_SIZE, "%*s%s", (level) * 2, "", "-> "); \
} \
tlen += snprintf(tbuf + VARSTR_HEADER_SIZE + tlen, TSDB_EXPLAIN_RESULT_ROW_SIZE - tlen, __VA_ARGS__); \
} while (0)
#define EXPLAIN_ROW_APPEND(...) tlen += snprintf(tbuf + VARSTR_HEADER_SIZE + tlen, TSDB_EXPLAIN_RESULT_ROW_SIZE - tlen, __VA_ARGS__)
#define EXPLAIN_ROW_END() do { varDataSetLen(tbuf, tlen); tlen += VARSTR_HEADER_SIZE; isVerboseLine = true; } while (0)
#ifdef __cplusplus
}
#endif
#endif
/*_TD_QUERY_INT_H_*/
source/libs/command/src/explain.c
0 → 100644
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/executor/inc/executil.h
浏览文件 @
61d8ef38
...
...
@@ -73,27 +73,12 @@ typedef struct SResultRowPosition {
}
SResultRowPosition
;
typedef
struct
SResultRowInfo
{
SList
*
pRows
;
SResultRowPosition
*
pPosition
;
SResultRow
**
pResult
;
// result list
int32_t
size
;
// number of result set
int32_t
capacity
;
// max capacity
int32_t
curPos
;
// current active result row index of pResult list
}
SResultRowInfo
;
typedef
struct
SResultRowPool
{
int32_t
elemSize
;
int32_t
blockSize
;
int32_t
numOfElemPerBlock
;
struct
{
int32_t
blockIndex
;
int32_t
pos
;
}
position
;
SArray
*
pData
;
// SArray<void*>
}
SResultRowPool
;
struct
STaskAttr
;
struct
STaskRuntimeEnv
;
struct
SUdfInfo
;
...
...
@@ -109,25 +94,33 @@ void resetResultRowInfo(struct STaskRuntimeEnv* pRuntimeEnv, SResultRowInfo*
int32_t
numOfClosedResultRows
(
SResultRowInfo
*
pResultRowInfo
);
void
closeAllResultRows
(
SResultRowInfo
*
pResultRowInfo
);
int32_t
initResultRow
(
SResultRow
*
pResultRow
);
void
closeResultRow
(
SResultRowInfo
*
pResultRowInfo
,
int32_t
slot
);
bool
isResultRowClosed
(
SResultRowInfo
*
pResultRowInfo
,
int32_t
slot
);
void
clearResultRow
(
struct
STaskRuntimeEnv
*
pRuntimeEnv
,
SResultRow
*
pResultRow
);
void
initResultRow
(
SResultRow
*
pResultRow
);
void
closeResultRow
(
SResultRow
*
pResultRow
);
bool
isResultRowClosed
(
SResultRow
*
pResultRow
);
struct
SResultRowEntryInfo
*
getResultCell
(
const
SResultRow
*
pRow
,
int32_t
index
,
int32_t
*
offset
);
void
*
destroyQueryFuncExpr
(
SExprInfo
*
pExprInfo
,
int32_t
numOfExpr
);
int32_t
getRowNumForMultioutput
(
struct
STaskAttr
*
pQueryAttr
,
bool
topBottomQuery
,
bool
stable
);
static
FORCE_INLINE
SResultRow
*
getResultRow
(
SResultRowInfo
*
pResultRowInfo
,
int32_t
slot
)
{
assert
(
pResultRowInfo
!=
NULL
&&
slot
>=
0
&&
slot
<
pResultRowInfo
->
size
);
return
pResultRowInfo
->
pResult
[
slot
];
static
FORCE_INLINE
SResultRow
*
getResultRow
(
SDiskbasedBuf
*
pBuf
,
SResultRowInfo
*
pResultRowInfo
,
int32_t
slot
)
{
ASSERT
(
pResultRowInfo
!=
NULL
&&
slot
>=
0
&&
slot
<
pResultRowInfo
->
size
);
SResultRowPosition
*
pos
=
&
pResultRowInfo
->
pPosition
[
slot
];
SFilePage
*
bufPage
=
(
SFilePage
*
)
getBufPage
(
pBuf
,
pos
->
pageId
);
SResultRow
*
pRow
=
(
SResultRow
*
)((
char
*
)
bufPage
+
pos
->
offset
);
return
pRow
;
}
static
FORCE_INLINE
SResultRow
*
getResultRowByPos
(
SDiskbasedBuf
*
pBuf
,
SResultRowPosition
*
pos
)
{
SFilePage
*
bufPage
=
(
SFilePage
*
)
getBufPage
(
pBuf
,
pos
->
pageId
);
SResultRow
*
pRow
=
(
SResultRow
*
)((
char
*
)
bufPage
+
pos
->
offset
);
return
pRow
;
}
static
FORCE_INLINE
char
*
getPosInResultPage
(
struct
STaskAttr
*
pQueryAttr
,
SFilePage
*
page
,
int32_t
rowOffset
,
int32_t
offset
)
{
assert
(
rowOffset
>=
0
&&
pQueryAttr
!=
NULL
);
ASSERT
(
0
);
// int32_t numOfRows = (int32_t)getRowNumForMultioutput(pQueryAttr, pQueryAttr->topBotQuery, pQueryAttr->stableQuery);
// return ((char *)page->data) + rowOffset + offset * numOfRows;
}
...
...
@@ -139,22 +132,11 @@ static FORCE_INLINE char* getPosInResultPage_rv(SFilePage* page, int32_t rowOffs
return
(
char
*
)
page
+
rowOffset
+
offset
*
numOfRows
;
}
//bool isNullOperator(SColumnFilterElem *pFilter, const char* minval, const char* maxval, int16_t type);
//bool notNullOperator(SColumnFilterElem *pFilter, const char* minval, const char* maxval, int16_t type);
__filter_func_t
getFilterOperator
(
int32_t
lowerOptr
,
int32_t
upperOptr
);
SResultRow
*
getNewResultRow
(
SResultRowPool
*
p
);
typedef
struct
{
SArray
*
pResult
;
// SArray<SResPair>
int32_t
colId
;
}
SStddevInterResult
;
void
interResToBinary
(
SBufferWriter
*
bw
,
SArray
*
pRes
,
int32_t
tagLen
);
SArray
*
interResFromBinary
(
const
char
*
data
,
int32_t
len
);
void
freeInterResult
(
void
*
param
);
void
initGroupResInfo
(
SGroupResInfo
*
pGroupResInfo
,
SResultRowInfo
*
pResultInfo
);
void
initMultiResInfoFromArrayList
(
SGroupResInfo
*
pGroupResInfo
,
SArray
*
pArrayList
);
...
...
source/libs/executor/inc/executorimpl.h
浏览文件 @
61d8ef38
...
...
@@ -69,7 +69,7 @@ enum {
typedef
struct
SResultRowCell
{
uint64_t
groupId
;
SResultRow
*
pRow
;
SResultRow
Position
pos
;
}
SResultRowCell
;
/**
...
...
@@ -277,8 +277,6 @@ typedef struct STaskRuntimeEnv {
char
*
keyBuf
;
// window key buffer
// The window result objects pool, all the resultRow Objects are allocated and managed by this object.
char
**
prevRow
;
SResultRowPool
*
pool
;
SArray
*
prevResult
;
// intermediate result, SArray<SInterResult>
STSBuf
*
pTsBuf
;
// timestamp filter list
STSCursor
cur
;
...
...
@@ -364,6 +362,7 @@ typedef struct SSourceDataInfo {
int32_t
index
;
SRetrieveTableRsp
*
pRsp
;
uint64_t
totalRows
;
int32_t
code
;
EX_SOURCE_STATUS
status
;
}
SSourceDataInfo
;
...
...
source/libs/executor/src/executil.c
浏览文件 @
61d8ef38
...
...
@@ -53,15 +53,13 @@ int32_t getOutputInterResultBufSize(STaskAttr* pQueryAttr) {
int32_t
initResultRowInfo
(
SResultRowInfo
*
pResultRowInfo
,
int32_t
size
)
{
pResultRowInfo
->
size
=
0
;
pResultRowInfo
->
curPos
=
-
1
;
pResultRowInfo
->
curPos
=
-
1
;
pResultRowInfo
->
capacity
=
size
;
pResultRowInfo
->
pResult
=
taosMemoryCalloc
(
pResultRowInfo
->
capacity
,
POINTER_BYTES
);
pResultRowInfo
->
pPosition
=
taosMemoryCalloc
(
pResultRowInfo
->
capacity
,
sizeof
(
SResultRowPosition
));
if
(
pResultRowInfo
->
pResult
==
NULL
||
pResultRowInfo
->
pPosition
==
NULL
)
{
if
(
pResultRowInfo
->
pPosition
==
NULL
)
{
return
TSDB_CODE_QRY_OUT_OF_MEMORY
;
}
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -71,17 +69,17 @@ void cleanupResultRowInfo(SResultRowInfo *pResultRowInfo) {
}
if
(
pResultRowInfo
->
capacity
==
0
)
{
assert
(
pResultRowInfo
->
pResult
==
NULL
);
//
assert(pResultRowInfo->pResult == NULL);
return
;
}
for
(
int32_t
i
=
0
;
i
<
pResultRowInfo
->
size
;
++
i
)
{
if
(
pResultRowInfo
->
pResult
[
i
])
{
taosMemoryFreeClear
(
pResultRowInfo
->
pResult
[
i
]
->
key
);
}
//
if (pResultRowInfo->pResult[i]) {
//
taosMemoryFreeClear(pResultRowInfo->pResult[i]->key);
//
}
}
taosMemoryFreeClear
(
pResultRowInfo
->
p
Result
);
taosMemoryFreeClear
(
pResultRowInfo
->
p
Position
);
}
void
resetResultRowInfo
(
STaskRuntimeEnv
*
pRuntimeEnv
,
SResultRowInfo
*
pResultRowInfo
)
{
...
...
@@ -90,8 +88,8 @@ void resetResultRowInfo(STaskRuntimeEnv *pRuntimeEnv, SResultRowInfo *pResultRow
}
for
(
int32_t
i
=
0
;
i
<
pResultRowInfo
->
size
;
++
i
)
{
SResultRow
*
pWindowRes
=
pResultRowInfo
->
pResult
[
i
];
clearResultRow
(
pRuntimeEnv
,
pWindowRes
);
//
SResultRow *pWindowRes = pResultRowInfo->pResult[i];
//
clearResultRow(pRuntimeEnv, pWindowRes);
int32_t
groupIndex
=
0
;
int64_t
uid
=
0
;
...
...
@@ -101,14 +99,13 @@ void resetResultRowInfo(STaskRuntimeEnv *pRuntimeEnv, SResultRowInfo *pResultRow
}
pResultRowInfo
->
size
=
0
;
pResultRowInfo
->
curPos
=
-
1
;
}
int32_t
numOfClosedResultRows
(
SResultRowInfo
*
pResultRowInfo
)
{
int32_t
i
=
0
;
while
(
i
<
pResultRowInfo
->
size
&&
pResultRowInfo
->
pResult
[
i
]
->
closed
)
{
++
i
;
}
//
while (i < pResultRowInfo->size && pResultRowInfo->pResult[i]->closed) {
//
++i;
//
}
return
i
;
}
...
...
@@ -117,21 +114,22 @@ void closeAllResultRows(SResultRowInfo *pResultRowInfo) {
assert
(
pResultRowInfo
->
size
>=
0
&&
pResultRowInfo
->
capacity
>=
pResultRowInfo
->
size
);
for
(
int32_t
i
=
0
;
i
<
pResultRowInfo
->
size
;
++
i
)
{
SResultRow
*
pRow
=
pResultRowInfo
->
pResult
[
i
];
if
(
pRow
->
closed
)
{
continue
;
}
// ASSERT(0);
// SResultRow* pRow = pResultRowInfo->pResult[i];
// if (pRow->closed) {
// continue;
// }
pRow
->
closed
=
true
;
//
pRow->closed = true;
}
}
bool
isResultRowClosed
(
SResultRow
Info
*
pResultRowInfo
,
int32_t
slot
)
{
return
(
getResultRow
(
pResultRowInfo
,
slot
)
->
closed
==
true
);
bool
isResultRowClosed
(
SResultRow
*
pRow
)
{
return
(
pRow
->
closed
==
true
);
}
void
closeResultRow
(
SResultRow
Info
*
pResultRowInfo
,
int32_t
slot
)
{
getResultRow
(
pResultRowInfo
,
slot
)
->
closed
=
true
;
void
closeResultRow
(
SResultRow
*
pResultRow
)
{
pResultRow
->
closed
=
true
;
}
void
clearResultRow
(
STaskRuntimeEnv
*
pRuntimeEnv
,
SResultRow
*
pResultRow
)
{
...
...
@@ -181,29 +179,6 @@ size_t getResultRowSize(SqlFunctionCtx* pCtx, int32_t numOfOutput) {
return
rowSize
;
}
SResultRow
*
getNewResultRow
(
SResultRowPool
*
p
)
{
if
(
p
==
NULL
)
{
return
NULL
;
}
void
*
ptr
=
NULL
;
if
(
p
->
position
.
pos
==
0
)
{
ptr
=
taosMemoryCalloc
(
1
,
p
->
blockSize
);
taosArrayPush
(
p
->
pData
,
&
ptr
);
}
else
{
size_t
last
=
taosArrayGetSize
(
p
->
pData
);
void
**
pBlock
=
taosArrayGet
(
p
->
pData
,
last
-
1
);
ptr
=
((
char
*
)
(
*
pBlock
))
+
p
->
elemSize
*
p
->
position
.
pos
;
}
p
->
position
.
pos
=
(
p
->
position
.
pos
+
1
)
%
p
->
numOfElemPerBlock
;
initResultRow
(
ptr
);
return
ptr
;
}
void
cleanupGroupResInfo
(
SGroupResInfo
*
pGroupResInfo
)
{
assert
(
pGroupResInfo
!=
NULL
);
...
...
@@ -261,8 +236,9 @@ int32_t getNumOfTotalRes(SGroupResInfo* pGroupResInfo) {
return
(
int32_t
)
taosArrayGetSize
(
pGroupResInfo
->
pRows
);
}
static
int64_t
getNumOfResultWindowRes
(
STaskRuntimeEnv
*
pRuntimeEnv
,
SResultRow
*
pResultRow
,
int32_t
*
rowCellInfoOffset
)
{
static
int64_t
getNumOfResultWindowRes
(
STaskRuntimeEnv
*
pRuntimeEnv
,
SResultRow
Position
*
pos
,
int32_t
*
rowCellInfoOffset
)
{
STaskAttr
*
pQueryAttr
=
pRuntimeEnv
->
pQueryAttr
;
ASSERT
(
0
);
for
(
int32_t
j
=
0
;
j
<
pQueryAttr
->
numOfOutput
;
++
j
)
{
int32_t
functionId
=
0
;
//pQueryAttr->pExpr1[j].base.functionId;
...
...
@@ -305,25 +281,26 @@ static int32_t tableResultComparFn(const void *pLeft, const void *pRight, void *
return
-
1
;
}
ASSERT
(
0
);
STableQueryInfo
**
pList
=
supporter
->
pTableQueryInfo
;
SResultRow
*
pWindowRes1
=
pList
[
left
]
->
resInfo
.
pResult
[
leftPos
];
//
SResultRow* pWindowRes1 = pList[left]->resInfo.pResult[leftPos];
// SResultRow * pWindowRes1 = getResultRow(&(pList[left]->resInfo), leftPos);
TSKEY
leftTimestamp
=
pWindowRes1
->
win
.
skey
;
//
TSKEY leftTimestamp = pWindowRes1->win.skey;
// SResultRowInfo *pWindowResInfo2 = &(pList[right]->resInfo);
// SResultRow * pWindowRes2 = getResultRow(pWindowResInfo2, rightPos);
SResultRow
*
pWindowRes2
=
pList
[
right
]
->
resInfo
.
pResult
[
rightPos
];
TSKEY
rightTimestamp
=
pWindowRes2
->
win
.
skey
;
//
SResultRow* pWindowRes2 = pList[right]->resInfo.pResult[rightPos];
//
TSKEY rightTimestamp = pWindowRes2->win.skey;
if
(
leftTimestamp
==
rightTimestamp
)
{
//
if (leftTimestamp == rightTimestamp) {
return
0
;
}
//
}
if
(
supporter
->
order
==
TSDB_ORDER_ASC
)
{
return
(
leftTimestamp
>
rightTimestamp
)
?
1
:-
1
;
}
else
{
return
(
leftTimestamp
<
rightTimestamp
)
?
1
:-
1
;
}
//
if (supporter->order == TSDB_ORDER_ASC) {
//
return (leftTimestamp > rightTimestamp)? 1:-1;
//
} else {
//
return (leftTimestamp < rightTimestamp)? 1:-1;
//
}
}
int32_t
tsAscOrder
(
const
void
*
p1
,
const
void
*
p2
)
{
...
...
@@ -331,11 +308,12 @@ int32_t tsAscOrder(const void* p1, const void* p2) {
SResultRowCell
*
pc2
=
(
SResultRowCell
*
)
p2
;
if
(
pc1
->
groupId
==
pc2
->
groupId
)
{
if
(
pc1
->
pRow
->
win
.
skey
==
pc2
->
pRow
->
win
.
skey
)
{
return
0
;
}
else
{
return
(
pc1
->
pRow
->
win
.
skey
<
pc2
->
pRow
->
win
.
skey
)
?
-
1
:
1
;
}
ASSERT
(
0
);
// if (pc1->pRow->win.skey == pc2->pRow->win.skey) {
// return 0;
// } else {
// return (pc1->pRow->win.skey < pc2->pRow->win.skey)? -1:1;
// }
}
else
{
return
(
pc1
->
groupId
<
pc2
->
groupId
)
?
-
1
:
1
;
}
...
...
@@ -346,11 +324,12 @@ int32_t tsDescOrder(const void* p1, const void* p2) {
SResultRowCell
*
pc2
=
(
SResultRowCell
*
)
p2
;
if
(
pc1
->
groupId
==
pc2
->
groupId
)
{
if
(
pc1
->
pRow
->
win
.
skey
==
pc2
->
pRow
->
win
.
skey
)
{
return
0
;
}
else
{
return
(
pc1
->
pRow
->
win
.
skey
<
pc2
->
pRow
->
win
.
skey
)
?
1
:-
1
;
}
ASSERT
(
0
);
// if (pc1->pRow->win.skey == pc2->pRow->win.skey) {
// return 0;
// } else {
// return (pc1->pRow->win.skey < pc2->pRow->win.skey)? 1:-1;
// }
}
else
{
return
(
pc1
->
groupId
<
pc2
->
groupId
)
?
-
1
:
1
;
}
...
...
@@ -384,13 +363,13 @@ static int32_t mergeIntoGroupResultImplRv(STaskRuntimeEnv *pRuntimeEnv, SGroupRe
break
;
}
int64_t
num
=
getNumOfResultWindowRes
(
pRuntimeEnv
,
pResultRowCell
->
pRow
,
rowCellInfoOffset
);
int64_t
num
=
getNumOfResultWindowRes
(
pRuntimeEnv
,
&
pResultRowCell
->
pos
,
rowCellInfoOffset
);
if
(
num
<=
0
)
{
continue
;
}
taosArrayPush
(
pGroupResInfo
->
pRows
,
&
pResultRowCell
->
p
Row
);
pResultRowCell
->
pRow
->
numOfRows
=
(
uint32_t
)
num
;
taosArrayPush
(
pGroupResInfo
->
pRows
,
&
pResultRowCell
->
p
os
);
//
pResultRowCell->pRow->numOfRows = (uint32_t) num;
}
return
TSDB_CODE_SUCCESS
;
...
...
@@ -449,9 +428,10 @@ static UNUSED_FUNC int32_t mergeIntoGroupResultImpl(STaskRuntimeEnv *pRuntimeEnv
int32_t
tableIndex
=
tMergeTreeGetChosenIndex
(
pTree
);
SResultRowInfo
*
pWindowResInfo
=
&
pTableQueryInfoList
[
tableIndex
]
->
resInfo
;
SResultRow
*
pWindowRes
=
getResultRow
(
pWindowResInfo
,
cs
.
rowIndex
[
tableIndex
]);
ASSERT
(
0
);
SResultRow
*
pWindowRes
=
NULL
;
//getResultRow(pBuf, pWindowResInfo, cs.rowIndex[tableIndex]);
int64_t
num
=
getNumOfResultWindowRes
(
pRuntimeEnv
,
pWindowRes
,
rowCellInfoOffset
);
int64_t
num
=
0
;
//
getNumOfResultWindowRes(pRuntimeEnv, pWindowRes, rowCellInfoOffset);
if
(
num
<=
0
)
{
cs
.
rowIndex
[
tableIndex
]
+=
1
;
...
...
source/libs/executor/src/executorimpl.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/index/inc/indexFstRegex.h
浏览文件 @
61d8ef38
...
...
@@ -63,9 +63,10 @@ typedef struct {
FstRegex
*
regexCreate
(
const
char
*
str
);
void
regexSetup
(
FstRegex
*
regex
,
uint32_t
size
,
const
char
*
str
);
// uint32_t regexStart()
uint32_t
regexAutomStart
(
FstRegex
*
regex
);
bool
regexAutomIsMatch
(
FstRegex
*
regex
,
uint32_t
state
);
bool
regexAutomCanMatch
(
FstRegex
*
regex
,
uint32_t
state
,
bool
null
);
bool
regexAutomAccept
(
FstRegex
*
regex
,
uint32_t
state
,
uint8_t
byte
,
uint32_t
*
result
);
#ifdef __cplusplus
}
...
...
source/libs/index/inc/indexFstSparse.h
浏览文件 @
61d8ef38
...
...
@@ -23,9 +23,9 @@ extern "C" {
#endif
typedef
struct
FstSparseSet
{
SArray
*
dense
;
SArray
*
sparse
;
int32_t
size
;
uint32_t
*
dense
;
uint32_t
*
sparse
;
int32_t
size
;
}
FstSparseSet
;
FstSparseSet
*
sparSetCreate
(
int32_t
sz
);
...
...
source/libs/index/src/index.c
浏览文件 @
61d8ef38
...
...
@@ -27,7 +27,7 @@
#endif
#define INDEX_NUM_OF_THREADS 4
#define INDEX_QUEUE_SIZE 200
#define INDEX_QUEUE_SIZE
200
void
*
indexQhandle
=
NULL
;
...
...
source/libs/index/src/indexCache.c
浏览文件 @
61d8ef38
...
...
@@ -21,8 +21,8 @@
#define MAX_INDEX_KEY_LEN 256 // test only, change later
#define MEM_TERM_LIMIT 10 * 10000
#define MEM_THRESHOLD 1024 * 1024
#define MEM_TERM_LIMIT
10 * 10000
#define MEM_THRESHOLD
1024 * 1024
#define MEM_ESTIMATE_RADIO 1.5
static
void
indexMemRef
(
MemTable
*
tbl
);
...
...
source/libs/index/src/indexFstCommon.c
浏览文件 @
61d8ef38
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
YAML:9:25: error: unknown key 'AlignConsecutiveMacros'
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
...
...
source/libs/index/src/indexFstRegex.c
浏览文件 @
61d8ef38
...
...
@@ -14,6 +14,7 @@
*/
#include "indexFstRegex.h"
#include "indexFstDfa.h"
#include "indexFstSparse.h"
FstRegex
*
regexCreate
(
const
char
*
str
)
{
...
...
@@ -26,9 +27,35 @@ FstRegex *regexCreate(const char *str) {
memcpy
(
orig
,
str
,
sz
);
regex
->
orig
=
orig
;
// construct insts based on str
SArray
*
insts
=
NULL
;
FstDfaBuilder
*
builder
=
dfaBuilderCreate
(
insts
);
regex
->
dfa
=
dfaBuilderBuild
(
builder
);
return
regex
;
}
void
regexSetup
(
FstRegex
*
regex
,
uint32_t
size
,
const
char
*
str
)
{
// return
// return;
uint32_t
regexAutomStart
(
FstRegex
*
regex
)
{
///// no nothing
return
0
;
}
bool
regexAutomIsMatch
(
FstRegex
*
regex
,
uint32_t
state
)
{
if
(
regex
->
dfa
!=
NULL
&&
dfaIsMatch
(
regex
->
dfa
,
state
))
{
return
true
;
}
else
{
return
false
;
}
}
bool
regexAutomCanMatch
(
FstRegex
*
regex
,
uint32_t
state
,
bool
null
)
{
// make frame happy
return
null
;
}
bool
regexAutomAccept
(
FstRegex
*
regex
,
uint32_t
state
,
uint8_t
byte
,
uint32_t
*
result
)
{
if
(
regex
->
dfa
==
NULL
)
{
return
false
;
}
return
dfaAccept
(
regex
->
dfa
,
state
,
byte
,
result
);
}
source/libs/index/src/indexSparse.c
→
source/libs/index/src/index
Fst
Sparse.c
浏览文件 @
61d8ef38
...
...
@@ -21,47 +21,44 @@ FstSparseSet *sparSetCreate(int32_t sz) {
return
NULL
;
}
ss
->
dense
=
taosArrayInit
(
sz
,
sizeof
(
uint32_t
));
ss
->
sparse
=
taosArrayInit
(
sz
,
sizeof
(
uint32_t
));
ss
->
size
=
sz
;
ss
->
dense
=
(
uint32_t
*
)
taosMemoryCalloc
(
sz
,
sizeof
(
uint32_t
));
ss
->
sparse
=
(
uint32_t
*
)
taosMemoryCalloc
(
sz
,
sizeof
(
uint32_t
));
ss
->
size
=
0
;
return
ss
;
}
void
sparSetDestroy
(
FstSparseSet
*
ss
)
{
if
(
ss
==
NULL
)
{
return
;
}
taos
ArrayDestroy
(
ss
->
dense
);
taos
ArrayDestroy
(
ss
->
sparse
);
taos
MemoryFree
(
ss
->
dense
);
taos
MemoryFree
(
ss
->
sparse
);
taosMemoryFree
(
ss
);
}
uint32_t
sparSetLen
(
FstSparseSet
*
ss
)
{
return
ss
==
NULL
?
0
:
ss
->
size
;
}
uint32_t
sparSetLen
(
FstSparseSet
*
ss
)
{
// Get occupied size
return
ss
==
NULL
?
0
:
ss
->
size
;
}
uint32_t
sparSetAdd
(
FstSparseSet
*
ss
,
uint32_t
ip
)
{
if
(
ss
==
NULL
)
{
return
0
;
}
uint32_t
i
=
ss
->
size
;
taosArraySet
(
ss
->
dense
,
i
,
&
ip
)
;
taosArraySet
(
ss
->
sparse
,
ip
,
&
i
)
;
ss
->
dense
[
i
]
=
ip
;
ss
->
sparse
[
ip
]
=
i
;
ss
->
size
+=
1
;
return
i
;
}
uint32_t
sparSetGet
(
FstSparseSet
*
ss
,
uint32_t
i
)
{
if
(
i
>=
taosArrayGetSize
(
ss
->
dense
))
{
return
0
;
}
uint32_t
*
v
=
taosArrayGet
(
ss
->
dense
,
i
);
return
*
v
;
// check later
return
ss
->
dense
[
i
];
}
bool
sparSetContains
(
FstSparseSet
*
ss
,
uint32_t
ip
)
{
if
(
ip
>=
taosArrayGetSize
(
ss
->
sparse
))
{
return
false
;
}
uint32_t
i
=
*
(
uint32_t
*
)
taosArrayGet
(
ss
->
sparse
,
ip
);
if
(
i
>=
taosArrayGetSize
(
ss
->
dense
))
{
uint32_t
i
=
ss
->
sparse
[
ip
];
if
(
i
<
ss
->
size
&&
ss
->
dense
[
i
]
==
ip
)
{
return
true
;
}
else
{
return
false
;
}
uint32_t
v
=
*
(
uint32_t
*
)
taosArrayGet
(
ss
->
dense
,
i
);
return
v
==
ip
;
}
void
sparSetClear
(
FstSparseSet
*
ss
)
{
if
(
ss
==
NULL
)
{
...
...
source/libs/nodes/inc/nodesUtil.h
浏览文件 @
61d8ef38
...
...
@@ -20,12 +20,16 @@
extern
"C"
{
#endif
#define nodesFatal(param, ...) qFatal("NODES: " param, __VA_ARGS__)
#define nodesError(param, ...) qError("NODES: " param, __VA_ARGS__)
#define nodesWarn(param, ...) qWarn("NODES: " param, __VA_ARGS__)
#define nodesInfo(param, ...) qInfo("NODES: " param, __VA_ARGS__)
#define nodesDebug(param, ...) qDebug("NODES: " param, __VA_ARGS__)
#define nodesTrace(param, ...) qTrace("NODES: " param, __VA_ARGS__)
#define nodesFatal(...) qFatal("NODES: " __VA_ARGS__)
#define nodesError(...) qError("NODES: " __VA_ARGS__)
#define nodesWarn(...) qWarn("NODES: " __VA_ARGS__)
#define nodesInfo(...) qInfo("NODES: " __VA_ARGS__)
#define nodesDebug(...) qDebug("NODES: " __VA_ARGS__)
#define nodesTrace(...) qTrace("NODES: " __VA_ARGS__)
#define NODES_ERR_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { terrno = _code; return _code; } } while (0)
#define NODES_RET(c) do { int32_t _code = c; if (_code != TSDB_CODE_SUCCESS) { terrno = _code; } return _code; } while (0)
#define NODES_ERR_JRET(c) do { code = c; if (code != TSDB_CODE_SUCCESS) { terrno = code; goto _return; } } while (0)
#ifdef __cplusplus
}
...
...
source/libs/nodes/src/nodesToSQLFuncs.c
0 → 100644
浏览文件 @
61d8ef38
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "cmdnodes.h"
#include "nodesUtil.h"
#include "plannodes.h"
#include "querynodes.h"
#include "taos.h"
#include "taoserror.h"
#include "thash.h"
char
*
gOperatorStr
[]
=
{
NULL
,
"+"
,
"-"
,
"*"
,
"/"
,
"%"
,
"&"
,
"|"
,
">"
,
">="
,
"<"
,
"<="
,
"="
,
"<>"
,
"IN"
,
"NOT IN"
,
"LIKE"
,
"NOT LIKE"
,
"MATCH"
,
"NMATCH"
,
"IS NULL"
,
"IS NOT NULL"
,
"IS TRUE"
,
"IS FALSE"
,
"IS UNKNOWN"
,
"IS NOT TRUE"
,
"IS NOT FALSE"
,
"IS NOT UNKNOWN"
};
char
*
gLogicConditionStr
[]
=
{
"AND"
,
"OR"
,
"NOT"
};
int32_t
nodesNodeToSQL
(
SNode
*
pNode
,
char
*
buf
,
int32_t
bufSize
,
int32_t
*
len
)
{
switch
(
pNode
->
type
)
{
case
QUERY_NODE_COLUMN
:
{
SColumnNode
*
colNode
=
(
SColumnNode
*
)
pNode
;
if
(
colNode
->
dbName
[
0
])
{
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
"`%s`."
,
colNode
->
dbName
);
}
if
(
colNode
->
tableAlias
[
0
])
{
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
"`%s`."
,
colNode
->
tableAlias
);
}
else
if
(
colNode
->
tableName
[
0
])
{
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
"`%s`."
,
colNode
->
tableName
);
}
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
"`%s`"
,
colNode
->
colName
);
return
TSDB_CODE_SUCCESS
;
}
case
QUERY_NODE_VALUE
:{
SValueNode
*
colNode
=
(
SValueNode
*
)
pNode
;
char
*
t
=
nodesGetStrValueFromNode
(
colNode
);
if
(
NULL
==
t
)
{
nodesError
(
"fail to get str value from valueNode"
);
NODES_ERR_RET
(
TSDB_CODE_QRY_APP_ERROR
);
}
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
"%s"
,
t
);
taosMemoryFree
(
t
);
return
TSDB_CODE_SUCCESS
;
}
case
QUERY_NODE_OPERATOR
:
{
SOperatorNode
*
pOpNode
=
(
SOperatorNode
*
)
pNode
;
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
"("
);
if
(
pOpNode
->
pLeft
)
{
NODES_ERR_RET
(
nodesNodeToSQL
(
pOpNode
->
pLeft
,
buf
,
bufSize
,
len
));
}
if
(
pOpNode
->
opType
>=
(
sizeof
(
gOperatorStr
)
/
sizeof
(
gOperatorStr
[
0
])))
{
nodesError
(
"unknown operation type:%d"
,
pOpNode
->
opType
);
NODES_ERR_RET
(
TSDB_CODE_QRY_APP_ERROR
);
}
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
" %s "
,
gOperatorStr
[
pOpNode
->
opType
]);
if
(
pOpNode
->
pRight
)
{
NODES_ERR_RET
(
nodesNodeToSQL
(
pOpNode
->
pRight
,
buf
,
bufSize
,
len
));
}
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
")"
);
return
TSDB_CODE_SUCCESS
;
}
case
QUERY_NODE_LOGIC_CONDITION
:{
SLogicConditionNode
*
pLogicNode
=
(
SLogicConditionNode
*
)
pNode
;
SNode
*
node
=
NULL
;
bool
first
=
true
;
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
"("
);
FOREACH
(
node
,
pLogicNode
->
pParameterList
)
{
if
(
!
first
)
{
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
" %s "
,
gLogicConditionStr
[
pLogicNode
->
condType
]);
}
NODES_ERR_RET
(
nodesNodeToSQL
(
node
,
buf
,
bufSize
,
len
));
first
=
false
;
}
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
")"
);
return
TSDB_CODE_SUCCESS
;
}
case
QUERY_NODE_FUNCTION
:{
SFunctionNode
*
pFuncNode
=
(
SFunctionNode
*
)
pNode
;
SNode
*
node
=
NULL
;
bool
first
=
true
;
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
"%s("
,
pFuncNode
->
functionName
);
FOREACH
(
node
,
pFuncNode
->
pParameterList
)
{
if
(
!
first
)
{
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
", "
);
}
NODES_ERR_RET
(
nodesNodeToSQL
(
node
,
buf
,
bufSize
,
len
));
first
=
false
;
}
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
")"
);
return
TSDB_CODE_SUCCESS
;
}
case
QUERY_NODE_NODE_LIST
:{
SNodeListNode
*
pListNode
=
(
SNodeListNode
*
)
pNode
;
SNode
*
node
=
NULL
;
bool
first
=
true
;
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
"("
);
FOREACH
(
node
,
pListNode
->
pNodeList
)
{
if
(
!
first
)
{
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
", "
);
}
NODES_ERR_RET
(
nodesNodeToSQL
(
node
,
buf
,
bufSize
,
len
));
first
=
false
;
}
*
len
+=
snprintf
(
buf
+
*
len
,
bufSize
-
*
len
,
")"
);
return
TSDB_CODE_SUCCESS
;
}
default:
break
;
}
nodesError
(
"nodesNodeToSQL unknown node = %s"
,
nodesNodeName
(
pNode
->
type
));
NODES_RET
(
TSDB_CODE_QRY_APP_ERROR
);
}
source/libs/nodes/src/nodesTraverseFuncs.c
浏览文件 @
61d8ef38
...
...
@@ -17,7 +17,8 @@
typedef
enum
ETraversalOrder
{
TRAVERSAL_PREORDER
=
1
,
TRAVERSAL_POSTORDER
TRAVERSAL_INORDER
,
TRAVERSAL_POSTORDER
,
}
ETraversalOrder
;
static
EDealRes
walkList
(
SNodeList
*
pNodeList
,
ETraversalOrder
order
,
FNodeWalker
walker
,
void
*
pContext
);
...
...
source/libs/nodes/src/nodesUtilFuncs.c
浏览文件 @
61d8ef38
...
...
@@ -790,6 +790,71 @@ void* nodesGetValueFromNode(SValueNode *pNode) {
return
NULL
;
}
char
*
nodesGetStrValueFromNode
(
SValueNode
*
pNode
)
{
switch
(
pNode
->
node
.
resType
.
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
{
void
*
buf
=
taosMemoryMalloc
(
MAX_NUM_STR_SIZE
);
if
(
NULL
==
buf
)
{
return
NULL
;
}
sprintf
(
buf
,
"%s"
,
pNode
->
datum
.
b
?
"true"
:
"false"
);
return
buf
;
}
case
TSDB_DATA_TYPE_TINYINT
:
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_TIMESTAMP
:
{
void
*
buf
=
taosMemoryMalloc
(
MAX_NUM_STR_SIZE
);
if
(
NULL
==
buf
)
{
return
NULL
;
}
sprintf
(
buf
,
"%"
PRId64
,
pNode
->
datum
.
i
);
return
buf
;
}
case
TSDB_DATA_TYPE_UTINYINT
:
case
TSDB_DATA_TYPE_USMALLINT
:
case
TSDB_DATA_TYPE_UINT
:
case
TSDB_DATA_TYPE_UBIGINT
:
{
void
*
buf
=
taosMemoryMalloc
(
MAX_NUM_STR_SIZE
);
if
(
NULL
==
buf
)
{
return
NULL
;
}
sprintf
(
buf
,
"%"
PRIu64
,
pNode
->
datum
.
u
);
return
buf
;
}
case
TSDB_DATA_TYPE_FLOAT
:
case
TSDB_DATA_TYPE_DOUBLE
:
{
void
*
buf
=
taosMemoryMalloc
(
MAX_NUM_STR_SIZE
);
if
(
NULL
==
buf
)
{
return
NULL
;
}
sprintf
(
buf
,
"%e"
,
pNode
->
datum
.
d
);
return
buf
;
}
case
TSDB_DATA_TYPE_NCHAR
:
case
TSDB_DATA_TYPE_VARCHAR
:
case
TSDB_DATA_TYPE_VARBINARY
:
{
int32_t
bufSize
=
varDataLen
(
pNode
->
datum
.
p
)
+
2
+
1
;
void
*
buf
=
taosMemoryMalloc
(
bufSize
);
if
(
NULL
==
buf
)
{
return
NULL
;
}
snprintf
(
buf
,
bufSize
,
"'%s'"
,
varDataVal
(
pNode
->
datum
.
p
));
return
buf
;
}
default:
break
;
}
return
NULL
;
}
bool
nodesIsExprNode
(
const
SNode
*
pNode
)
{
ENodeType
type
=
nodeType
(
pNode
);
return
(
QUERY_NODE_COLUMN
==
type
||
QUERY_NODE_VALUE
==
type
||
QUERY_NODE_OPERATOR
==
type
||
QUERY_NODE_FUNCTION
==
type
);
...
...
source/libs/parser/inc/parAst.h
浏览文件 @
61d8ef38
...
...
@@ -71,6 +71,7 @@ typedef enum ETableOptionType {
typedef
struct
SAlterOption
{
int32_t
type
;
SToken
val
;
SNodeList
*
pKeep
;
}
SAlterOption
;
extern
SToken
nil_token
;
...
...
@@ -121,6 +122,8 @@ SNode* createSetOperator(SAstCreateContext* pCxt, ESetOperatorType type, SNode*
SNode
*
createDefaultDatabaseOptions
(
SAstCreateContext
*
pCxt
);
SNode
*
createDefaultAlterDatabaseOptions
(
SAstCreateContext
*
pCxt
);
SNode
*
setDatabaseOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
EDatabaseOptionType
type
,
const
SToken
*
pVal
);
SNode
*
setDatabaseKeepOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SNodeList
*
pKeep
);
SNode
*
setDatabaseAlterOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SAlterOption
*
pAlterOption
);
SNode
*
createCreateDatabaseStmt
(
SAstCreateContext
*
pCxt
,
bool
ignoreExists
,
SToken
*
pDbName
,
SNode
*
pOptions
);
SNode
*
createDropDatabaseStmt
(
SAstCreateContext
*
pCxt
,
bool
ignoreNotExists
,
SToken
*
pDbName
);
SNode
*
createAlterDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
,
SNode
*
pOptions
);
...
...
@@ -129,6 +132,8 @@ SNode* createDefaultAlterTableOptions(SAstCreateContext* pCxt);
SNode
*
setTableOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
ETableOptionType
type
,
const
SToken
*
pVal
);
SNode
*
setTableSmaOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SNodeList
*
pSma
);
SNode
*
setTableRollupOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SNodeList
*
pFuncs
);
SNode
*
setTableKeepOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SNodeList
*
pKeep
);
SNode
*
setTableAlterOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SAlterOption
*
pAlterOption
);
SNode
*
createColumnDefNode
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pColName
,
SDataType
dataType
,
const
SToken
*
pComment
);
SDataType
createDataType
(
uint8_t
type
);
SDataType
createVarLenDataType
(
uint8_t
type
,
const
SToken
*
pLen
);
...
...
@@ -145,6 +150,8 @@ SNode* createAlterTableRenameCol(SAstCreateContext* pCxt, SNode* pRealTable, int
SNode
*
createAlterTableSetTag
(
SAstCreateContext
*
pCxt
,
SNode
*
pRealTable
,
const
SToken
*
pTagName
,
SNode
*
pVal
);
SNode
*
createUseDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
);
SNode
*
createShowStmt
(
SAstCreateContext
*
pCxt
,
ENodeType
type
,
SNode
*
pDbName
,
SNode
*
pTbNamePattern
);
SNode
*
createShowCreateDatabaseStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pDbName
);
SNode
*
createShowCreateTableStmt
(
SAstCreateContext
*
pCxt
,
ENodeType
type
,
SNode
*
pRealTable
);
SNode
*
createCreateUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
,
const
SToken
*
pPassword
);
SNode
*
createAlterUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
,
int8_t
alterType
,
const
SToken
*
pVal
);
SNode
*
createDropUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
);
...
...
@@ -165,6 +172,16 @@ SNode* setExplainRatio(SAstCreateContext* pCxt, SNode* pOptions, const SToken* p
SNode
*
createExplainStmt
(
SAstCreateContext
*
pCxt
,
bool
analyze
,
SNode
*
pOptions
,
SNode
*
pQuery
);
SNode
*
createDescribeStmt
(
SAstCreateContext
*
pCxt
,
SNode
*
pRealTable
);
SNode
*
createResetQueryCacheStmt
(
SAstCreateContext
*
pCxt
);
SNode
*
createCompactStmt
(
SAstCreateContext
*
pCxt
,
SNodeList
*
pVgroups
);
SNode
*
createCreateFunctionStmt
(
SAstCreateContext
*
pCxt
,
bool
aggFunc
,
const
SToken
*
pFuncName
,
const
SToken
*
pLibPath
,
SDataType
dataType
,
int32_t
bufSize
);
SNode
*
createDropFunctionStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pFuncName
);
SNode
*
createCreateStreamStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pStreamName
,
const
SToken
*
pTableName
,
SNode
*
pQuery
);
SNode
*
createDropStreamStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pStreamName
);
SNode
*
createKillStmt
(
SAstCreateContext
*
pCxt
,
ENodeType
type
,
const
SToken
*
pId
);
SNode
*
createMergeVgroupStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pVgId1
,
const
SToken
*
pVgId2
);
SNode
*
createRedistributeVgroupStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pVgId
,
SNodeList
*
pDnodes
);
SNode
*
createSplitVgroupStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pVgId
);
SNode
*
createSyncdbStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pDbName
);
#ifdef __cplusplus
}
...
...
source/libs/parser/inc/parInsertData.h
浏览文件 @
61d8ef38
...
...
@@ -78,8 +78,6 @@ typedef struct STableDataBlocks {
char
*
pData
;
bool
cloned
;
STagData
tagData
;
char
tableName
[
TSDB_TABLE_NAME_LEN
];
char
dbFName
[
TSDB_DB_FNAME_LEN
];
SParsedDataColInfo
boundColumnInfo
;
SRowBuilder
rowBuilder
;
...
...
source/libs/parser/inc/sql.y
浏览文件 @
61d8ef38
...
...
@@ -137,7 +137,7 @@ db_options(A) ::= db_options(B) DAYS NK_INTEGER(C).
db_options(A) ::= db_options(B) FSYNC NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_FSYNC, &C); }
db_options(A) ::= db_options(B) MAXROWS NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_MAXROWS, &C); }
db_options(A) ::= db_options(B) MINROWS NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_MINROWS, &C); }
db_options(A) ::= db_options(B) KEEP
NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP, &
C); }
db_options(A) ::= db_options(B) KEEP
integer_list(C). { A = setDatabaseKeepOption(pCxt, B,
C); }
db_options(A) ::= db_options(B) PRECISION NK_STRING(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_PRECISION, &C); }
db_options(A) ::= db_options(B) QUORUM NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_QUORUM, &C); }
db_options(A) ::= db_options(B) REPLICA NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_REPLICA, &C); }
...
...
@@ -148,17 +148,23 @@ db_options(A) ::= db_options(B) SINGLE_STABLE NK_INTEGER(C).
db_options(A) ::= db_options(B) STREAM_MODE NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_STREAM_MODE, &C); }
db_options(A) ::= db_options(B) RETENTIONS NK_STRING(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_RETENTIONS, &C); }
alter_db_options(A) ::= alter_db_option(B). { A = createDefaultAlterDatabaseOptions(pCxt); A = setDatabase
Option(pCxt, A, B.type, &B.val
); }
alter_db_options(A) ::= alter_db_options(B) alter_db_option(C). { A = setDatabase
Option(pCxt, B, C.type, &C.val
); }
alter_db_options(A) ::= alter_db_option(B). { A = createDefaultAlterDatabaseOptions(pCxt); A = setDatabase
AlterOption(pCxt, A, &B
); }
alter_db_options(A) ::= alter_db_options(B) alter_db_option(C). { A = setDatabase
AlterOption(pCxt, B, &C
); }
%type alter_db_option { SAlterOption }
%destructor alter_db_option { }
alter_db_option(A) ::= BLOCKS NK_INTEGER(B). { A.type = DB_OPTION_BLOCKS; A.val = B; }
alter_db_option(A) ::= FSYNC NK_INTEGER(B). { A.type = DB_OPTION_FSYNC; A.val = B; }
alter_db_option(A) ::= KEEP
NK_INTEGER(B). { A.type = DB_OPTION_KEEP; A.val
= B; }
alter_db_option(A) ::= KEEP
integer_list(B). { A.type = DB_OPTION_KEEP; A.pKeep
= B; }
alter_db_option(A) ::= WAL NK_INTEGER(B). { A.type = DB_OPTION_WAL; A.val = B; }
alter_db_option(A) ::= QUORUM NK_INTEGER(B). { A.type = DB_OPTION_QUORUM; A.val = B; }
alter_db_option(A) ::= CACHELAST NK_INTEGER(B). { A.type = DB_OPTION_CACHELAST; A.val = B; }
alter_db_option(A) ::= REPLICA NK_INTEGER(B). { A.type = DB_OPTION_REPLICA; A.val = B; }
%type integer_list { SNodeList* }
%destructor integer_list { nodesDestroyList($$); }
integer_list(A) ::= NK_INTEGER(B). { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B)); }
integer_list(A) ::= integer_list(B) NK_COMMA NK_INTEGER(C). { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C)); }
/************************************************ create/drop table/stable ********************************************/
cmd ::= CREATE TABLE not_exists_opt(A) full_table_name(B)
...
...
@@ -259,20 +265,20 @@ tags_def(A) ::= TAGS NK_LP column_def_list(B) NK_RP.
table_options(A) ::= . { A = createDefaultTableOptions(pCxt); }
table_options(A) ::= table_options(B) COMMENT NK_STRING(C). { A = setTableOption(pCxt, B, TABLE_OPTION_COMMENT, &C); }
table_options(A) ::= table_options(B) KEEP
NK_INTEGER(C). { A = setTableOption(pCxt, B, TABLE_OPTION_KEEP, &
C); }
table_options(A) ::= table_options(B) KEEP
integer_list(C). { A = setTableKeepOption(pCxt, B,
C); }
table_options(A) ::= table_options(B) TTL NK_INTEGER(C). { A = setTableOption(pCxt, B, TABLE_OPTION_TTL, &C); }
table_options(A) ::= table_options(B) SMA NK_LP col_name_list(C) NK_RP. { A = setTableSmaOption(pCxt, B, C); }
table_options(A) ::= table_options(B) ROLLUP NK_LP func_name_list(C) NK_RP. { A = setTableRollupOption(pCxt, B, C); }
table_options(A) ::= table_options(B) FILE_FACTOR NK_FLOAT(C). { A = setTableOption(pCxt, B, TABLE_OPTION_FILE_FACTOR, &C); }
table_options(A) ::= table_options(B) DELAY NK_INTEGER(C). { A = setTableOption(pCxt, B, TABLE_OPTION_DELAY, &C); }
alter_table_options(A) ::= alter_table_option(B). { A = createDefaultAlterTableOptions(pCxt); A = setTable
Option(pCxt, A, B.type, &B.val
); }
alter_table_options(A) ::= alter_table_options(B) alter_table_option(C). { A = setTable
Option(pCxt, B, C.type, &C.val
); }
alter_table_options(A) ::= alter_table_option(B). { A = createDefaultAlterTableOptions(pCxt); A = setTable
AlterOption(pCxt, A, &B
); }
alter_table_options(A) ::= alter_table_options(B) alter_table_option(C). { A = setTable
AlterOption(pCxt, B, &C
); }
%type alter_table_option { SAlterOption }
%destructor alter_table_option { }
alter_table_option(A) ::= COMMENT NK_STRING(B). { A.type = TABLE_OPTION_COMMENT; A.val = B; }
alter_table_option(A) ::= KEEP
NK_INTEGER(B). { A.type = TABLE_OPTION_KEEP; A.val
= B; }
alter_table_option(A) ::= KEEP
integer_list(B). { A.type = TABLE_OPTION_KEEP; A.pKeep
= B; }
alter_table_option(A) ::= TTL NK_INTEGER(B). { A.type = TABLE_OPTION_TTL; A.val = B; }
%type col_name_list { SNodeList* }
...
...
@@ -295,6 +301,17 @@ cmd ::= SHOW QNODES.
cmd ::= SHOW FUNCTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_FUNCTIONS_STMT, NULL, NULL); }
cmd ::= SHOW INDEXES FROM table_name_cond(A) from_db_opt(B). { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, A, B); }
cmd ::= SHOW STREAMS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_STREAMS_STMT, NULL, NULL); }
cmd ::= SHOW ACCOUNTS. { pCxt->valid = false; generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
cmd ::= SHOW APPS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_APPS_STMT, NULL, NULL); }
cmd ::= SHOW CONNECTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT, NULL, NULL); }
cmd ::= SHOW LICENCE. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCE_STMT, NULL, NULL); }
cmd ::= SHOW CREATE DATABASE db_name(A). { pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &A); }
cmd ::= SHOW CREATE TABLE full_table_name(A). { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, A); }
cmd ::= SHOW CREATE STABLE full_table_name(A). { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, A); }
cmd ::= SHOW QUERIES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT, NULL, NULL); }
cmd ::= SHOW SCORES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT, NULL, NULL); }
cmd ::= SHOW TOPICS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT, NULL, NULL); }
cmd ::= SHOW VARIABLES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_VARIABLE_STMT, NULL, NULL); }
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); }
...
...
@@ -358,6 +375,45 @@ explain_options(A) ::= .
explain_options(A) ::= explain_options(B) VERBOSE NK_BOOL(C). { A = setExplainVerbose(pCxt, B, &C); }
explain_options(A) ::= explain_options(B) RATIO NK_FLOAT(C). { A = setExplainRatio(pCxt, B, &C); }
/************************************************ compact *************************************************************/
cmd ::= COMPACT VNODES IN NK_LP integer_list(A) NK_RP. { pCxt->pRootNode = createCompactStmt(pCxt, A); }
/************************************************ create/drop function ************************************************/
cmd ::= CREATE agg_func_opt(A) FUNCTION function_name(B)
AS NK_STRING(C) OUTPUTTYPE type_name(D) bufsize_opt(E). { pCxt->pRootNode = createCreateFunctionStmt(pCxt, A, &B, &C, D, E); }
cmd ::= DROP FUNCTION function_name(A). { pCxt->pRootNode = createDropFunctionStmt(pCxt, &A); }
%type agg_func_opt { bool }
%destructor agg_func_opt { }
agg_func_opt(A) ::= . { A = false; }
agg_func_opt(A) ::= AGGREGATE. { A = true; }
%type bufsize_opt { int32_t }
%destructor bufsize_opt { }
bufsize_opt(A) ::= . { A = 0; }
bufsize_opt(A) ::= BUFSIZE NK_INTEGER(B). { A = strtol(B.z, NULL, 10); }
/************************************************ create/drop stream **************************************************/
cmd ::= CREATE STREAM stream_name(A) INTO table_name(B) AS query_expression(C). { pCxt->pRootNode = createCreateStreamStmt(pCxt, &A, &B, C); }
cmd ::= DROP STREAM stream_name(A). { pCxt->pRootNode = createDropStreamStmt(pCxt, &A); }
/************************************************ kill connection/query ***********************************************/
cmd ::= KILL CONNECTION NK_INTEGER(A). { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &A); }
cmd ::= KILL QUERY NK_INTEGER(A). { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_QUERY_STMT, &A); }
/************************************************ merge/redistribute/ vgroup ******************************************/
cmd ::= MERGE VGROUP NK_INTEGER(A) NK_INTEGER(B). { pCxt->pRootNode = createMergeVgroupStmt(pCxt, &A, &B); }
cmd ::= REDISTRIBUTE VGROUP NK_INTEGER(A) dnode_list(B). { pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &A, B); }
cmd ::= SPLIT VGROUP NK_INTEGER(A). { pCxt->pRootNode = createSplitVgroupStmt(pCxt, &A); }
%type dnode_list { SNodeList* }
%destructor dnode_list { nodesDestroyList($$); }
dnode_list(A) ::= DNODE NK_INTEGER(B). { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B)); }
dnode_list(A) ::= dnode_list(B) DNODE NK_INTEGER(C). { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C)); }
/************************************************ syncdb **************************************************************/
cmd ::= SYNCDB db_name(A) REPLICA. { pCxt->pRootNode = createSyncdbStmt(pCxt, &A); }
/************************************************ select **************************************************************/
cmd ::= query_expression(A). { pCxt->pRootNode = A; }
...
...
@@ -436,6 +492,10 @@ index_name(A) ::= NK_ID(B).
%destructor topic_name { }
topic_name(A) ::= NK_ID(B). { A = B; }
%type stream_name { SToken }
%destructor stream_name { }
stream_name(A) ::= NK_ID(B). { A = B; }
/************************************************ expression **********************************************************/
expression(A) ::= literal(B). { A = B; }
//expression(A) ::= NK_QUESTION(B). { A = B; }
...
...
source/libs/parser/src/parAstCreater.c
浏览文件 @
61d8ef38
...
...
@@ -138,18 +138,6 @@ static SDatabaseOptions* setDbMinRows(SAstCreateContext* pCxt, SDatabaseOptions*
return
pOptions
;
}
static
SDatabaseOptions
*
setDbKeep
(
SAstCreateContext
*
pCxt
,
SDatabaseOptions
*
pOptions
,
const
SToken
*
pVal
)
{
int64_t
val
=
strtol
(
pVal
->
z
,
NULL
,
10
);
if
(
val
<
TSDB_MIN_KEEP
||
val
>
TSDB_MAX_KEEP
)
{
snprintf
(
pCxt
->
pQueryCxt
->
pMsg
,
pCxt
->
pQueryCxt
->
msgLen
,
"invalid db option keep: %"
PRId64
" valid range: [%d, %d]"
,
val
,
TSDB_MIN_KEEP
,
TSDB_MAX_KEEP
);
pCxt
->
valid
=
false
;
return
pOptions
;
}
pOptions
->
keep
=
val
;
return
pOptions
;
}
static
SDatabaseOptions
*
setDbPrecision
(
SAstCreateContext
*
pCxt
,
SDatabaseOptions
*
pOptions
,
const
SToken
*
pVal
)
{
char
val
[
10
]
=
{
0
};
trimString
(
pVal
->
z
,
pVal
->
n
,
val
,
sizeof
(
val
));
...
...
@@ -180,9 +168,9 @@ static SDatabaseOptions* setDbQuorum(SAstCreateContext* pCxt, SDatabaseOptions*
static
SDatabaseOptions
*
setDbReplica
(
SAstCreateContext
*
pCxt
,
SDatabaseOptions
*
pOptions
,
const
SToken
*
pVal
)
{
int64_t
val
=
strtol
(
pVal
->
z
,
NULL
,
10
);
if
(
val
<
TSDB_MIN_DB_REPLICA_OPTION
||
val
>
TSDB_MAX_DB_REPLICA_OPTION
)
{
if
(
!
(
val
==
TSDB_MIN_DB_REPLICA_OPTION
||
val
==
TSDB_MAX_DB_REPLICA_OPTION
)
)
{
snprintf
(
pCxt
->
pQueryCxt
->
pMsg
,
pCxt
->
pQueryCxt
->
msgLen
,
"invalid db option replications: %"
PRId64
"
valid range: [%d, %d]"
,
val
,
TSDB_MIN_DB_REPLICA_OPTION
,
TSDB_MAX_DB_REPLICA_OPTION
);
"invalid db option replications: %"
PRId64
"
, only 1, 3 allowed"
,
val
);
pCxt
->
valid
=
false
;
return
pOptions
;
}
...
...
@@ -291,7 +279,6 @@ static void initSetDatabaseOptionFp() {
setDbOptionFuncs
[
DB_OPTION_FSYNC
]
=
setDbFsync
;
setDbOptionFuncs
[
DB_OPTION_MAXROWS
]
=
setDbMaxRows
;
setDbOptionFuncs
[
DB_OPTION_MINROWS
]
=
setDbMinRows
;
setDbOptionFuncs
[
DB_OPTION_KEEP
]
=
setDbKeep
;
setDbOptionFuncs
[
DB_OPTION_PRECISION
]
=
setDbPrecision
;
setDbOptionFuncs
[
DB_OPTION_QUORUM
]
=
setDbQuorum
;
setDbOptionFuncs
[
DB_OPTION_REPLICA
]
=
setDbReplica
;
...
...
@@ -303,18 +290,6 @@ static void initSetDatabaseOptionFp() {
setDbOptionFuncs
[
DB_OPTION_RETENTIONS
]
=
setDbRetentions
;
}
static
STableOptions
*
setTableKeep
(
SAstCreateContext
*
pCxt
,
STableOptions
*
pOptions
,
const
SToken
*
pVal
)
{
int64_t
val
=
strtol
(
pVal
->
z
,
NULL
,
10
);
if
(
val
<
TSDB_MIN_KEEP
||
val
>
TSDB_MAX_KEEP
)
{
snprintf
(
pCxt
->
pQueryCxt
->
pMsg
,
pCxt
->
pQueryCxt
->
msgLen
,
"invalid table option keep: %"
PRId64
" valid range: [%d, %d]"
,
val
,
TSDB_MIN_KEEP
,
TSDB_MAX_KEEP
);
pCxt
->
valid
=
false
;
return
pOptions
;
}
pOptions
->
keep
=
val
;
return
pOptions
;
}
static
STableOptions
*
setTableTtl
(
SAstCreateContext
*
pCxt
,
STableOptions
*
pOptions
,
const
SToken
*
pVal
)
{
int64_t
val
=
strtol
(
pVal
->
z
,
NULL
,
10
);
if
(
val
<
TSDB_MIN_DB_TTL_OPTION
)
{
...
...
@@ -363,7 +338,6 @@ static STableOptions* setTableDelay(SAstCreateContext* pCxt, STableOptions* pOpt
}
static
void
initSetTableOptionFp
()
{
setTableOptionFuncs
[
TABLE_OPTION_KEEP
]
=
setTableKeep
;
setTableOptionFuncs
[
TABLE_OPTION_TTL
]
=
setTableTtl
;
setTableOptionFuncs
[
TABLE_OPTION_COMMENT
]
=
setTableComment
;
setTableOptionFuncs
[
TABLE_OPTION_FILE_FACTOR
]
=
setTableFileFactor
;
...
...
@@ -397,7 +371,9 @@ static bool checkUserName(SAstCreateContext* pCxt, SToken* pUserName) {
pCxt
->
valid
=
false
;
}
}
trimEscape
(
pUserName
);
if
(
pCxt
->
valid
)
{
trimEscape
(
pUserName
);
}
return
pCxt
->
valid
;
}
...
...
@@ -472,45 +448,50 @@ static bool checkPort(SAstCreateContext* pCxt, const SToken* pPortToken, int32_t
static
bool
checkDbName
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
,
bool
query
)
{
if
(
NULL
==
pDbName
)
{
pCxt
->
valid
=
(
query
?
NULL
!=
pCxt
->
pQueryCxt
->
db
:
true
);
if
(
!
pCxt
->
valid
)
{
snprintf
(
pCxt
->
pQueryCxt
->
pMsg
,
pCxt
->
pQueryCxt
->
msgLen
,
"db not specified"
)
;
if
(
query
&&
NULL
==
pCxt
->
pQueryCxt
->
db
)
{
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_DB_NOT_SPECIFIED
);
pCxt
->
valid
=
false
;
}
}
else
{
pCxt
->
valid
=
pDbName
->
n
<
TSDB_DB_NAME_LEN
?
true
:
false
;
if
(
pDbName
->
n
>=
TSDB_DB_NAME_LEN
)
{
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_IDENTIFIER_NAME
,
pDbName
->
z
);
pCxt
->
valid
=
false
;
}
}
if
(
pCxt
->
valid
)
{
trimEscape
(
pDbName
);
}
trimEscape
(
pDbName
);
return
pCxt
->
valid
;
}
static
bool
checkTableName
(
SAstCreateContext
*
pCxt
,
SToken
*
pTableName
)
{
if
(
NULL
==
pTableName
)
{
pCxt
->
valid
=
true
;
}
else
{
pCxt
->
valid
=
pTableName
->
n
<
TSDB_TABLE_NAME_LEN
?
true
:
false
;
if
(
NULL
!=
pTableName
&&
pTableName
->
n
>=
TSDB_TABLE_NAME_LEN
)
{
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_IDENTIFIER_NAME
,
pTableName
->
z
)
;
pCxt
->
valid
=
false
;
return
false
;
}
trimEscape
(
pTableName
);
return
pCxt
->
valid
;
return
true
;
}
static
bool
checkColumnName
(
SAstCreateContext
*
pCxt
,
SToken
*
pColumnName
)
{
if
(
NULL
==
pColumnName
)
{
pCxt
->
valid
=
true
;
}
else
{
pCxt
->
valid
=
pColumnName
->
n
<
TSDB_COL_NAME_LEN
?
true
:
false
;
if
(
NULL
!=
pColumnName
&&
pColumnName
->
n
>=
TSDB_COL_NAME_LEN
)
{
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_IDENTIFIER_NAME
,
pColumnName
->
z
)
;
pCxt
->
valid
=
false
;
return
false
;
}
trimEscape
(
pColumnName
);
return
pCxt
->
valid
;
return
true
;
}
static
bool
checkIndexName
(
SAstCreateContext
*
pCxt
,
SToken
*
pIndexName
)
{
if
(
NULL
==
pIndexName
)
{
if
(
NULL
!=
pIndexName
&&
pIndexName
->
n
>=
TSDB_INDEX_NAME_LEN
)
{
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_IDENTIFIER_NAME
,
pIndexName
->
z
);
pCxt
->
valid
=
false
;
}
else
{
pCxt
->
valid
=
pIndexName
->
n
<
TSDB_INDEX_NAME_LEN
?
true
:
false
;
return
false
;
}
trimEscape
(
pIndexName
);
return
pCxt
->
valid
;
return
true
;
}
SNode
*
createRawExprNode
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pToken
,
SNode
*
pNode
)
{
...
...
@@ -885,7 +866,9 @@ SNode* createDefaultDatabaseOptions(SAstCreateContext* pCxt) {
pOptions
->
fsyncPeriod
=
TSDB_DEFAULT_FSYNC_PERIOD
;
pOptions
->
maxRowsPerBlock
=
TSDB_DEFAULT_MAX_ROW_FBLOCK
;
pOptions
->
minRowsPerBlock
=
TSDB_DEFAULT_MIN_ROW_FBLOCK
;
pOptions
->
keep
=
TSDB_DEFAULT_KEEP
;
pOptions
->
keep0
=
TSDB_DEFAULT_KEEP
;
pOptions
->
keep1
=
TSDB_DEFAULT_KEEP
;
pOptions
->
keep2
=
TSDB_DEFAULT_KEEP
;
pOptions
->
precision
=
TSDB_TIME_PRECISION_MILLI
;
pOptions
->
quorum
=
TSDB_DEFAULT_DB_QUORUM_OPTION
;
pOptions
->
replica
=
TSDB_DEFAULT_DB_REPLICA_OPTION
;
...
...
@@ -908,7 +891,9 @@ SNode* createDefaultAlterDatabaseOptions(SAstCreateContext* pCxt) {
pOptions
->
fsyncPeriod
=
-
1
;
pOptions
->
maxRowsPerBlock
=
-
1
;
pOptions
->
minRowsPerBlock
=
-
1
;
pOptions
->
keep
=
-
1
;
pOptions
->
keep0
=
-
1
;
pOptions
->
keep1
=
-
1
;
pOptions
->
keep2
=
-
1
;
pOptions
->
precision
=
-
1
;
pOptions
->
quorum
=
-
1
;
pOptions
->
replica
=
-
1
;
...
...
@@ -924,6 +909,48 @@ SNode* setDatabaseOption(SAstCreateContext* pCxt, SNode* pOptions, EDatabaseOpti
return
(
SNode
*
)
setDbOptionFuncs
[
type
](
pCxt
,
(
SDatabaseOptions
*
)
pOptions
,
pVal
);
}
static
bool
checkAndSetKeepOption
(
SAstCreateContext
*
pCxt
,
SNodeList
*
pKeep
,
int32_t
*
pKeep0
,
int32_t
*
pKeep1
,
int32_t
*
pKeep2
)
{
int32_t
numOfKeep
=
LIST_LENGTH
(
pKeep
);
if
(
numOfKeep
>
3
||
numOfKeep
<
1
)
{
snprintf
(
pCxt
->
pQueryCxt
->
pMsg
,
pCxt
->
pQueryCxt
->
msgLen
,
"invalid number of keep options"
);
return
false
;
}
int32_t
daysToKeep0
=
strtol
(((
SValueNode
*
)
nodesListGetNode
(
pKeep
,
0
))
->
literal
,
NULL
,
10
);
int32_t
daysToKeep1
=
numOfKeep
>
1
?
strtol
(((
SValueNode
*
)
nodesListGetNode
(
pKeep
,
1
))
->
literal
,
NULL
,
10
)
:
daysToKeep0
;
int32_t
daysToKeep2
=
numOfKeep
>
2
?
strtol
(((
SValueNode
*
)
nodesListGetNode
(
pKeep
,
2
))
->
literal
,
NULL
,
10
)
:
daysToKeep1
;
if
(
daysToKeep0
<
TSDB_MIN_KEEP
||
daysToKeep1
<
TSDB_MIN_KEEP
||
daysToKeep2
<
TSDB_MIN_KEEP
||
daysToKeep0
>
TSDB_MAX_KEEP
||
daysToKeep1
>
TSDB_MAX_KEEP
||
daysToKeep2
>
TSDB_MAX_KEEP
)
{
snprintf
(
pCxt
->
pQueryCxt
->
pMsg
,
pCxt
->
pQueryCxt
->
msgLen
,
"invalid option keep: %d, %d, %d valid range: [%d, %d]"
,
daysToKeep0
,
daysToKeep1
,
daysToKeep2
,
TSDB_MIN_KEEP
,
TSDB_MAX_KEEP
);
return
false
;
}
if
(
!
((
daysToKeep0
<=
daysToKeep1
)
&&
(
daysToKeep1
<=
daysToKeep2
)))
{
snprintf
(
pCxt
->
pQueryCxt
->
pMsg
,
pCxt
->
pQueryCxt
->
msgLen
,
"invalid keep value, should be keep0 <= keep1 <= keep2"
);
return
false
;
}
*
pKeep0
=
daysToKeep0
;
*
pKeep1
=
daysToKeep1
;
*
pKeep2
=
daysToKeep2
;
return
true
;
}
SNode
*
setDatabaseKeepOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SNodeList
*
pKeep
)
{
SDatabaseOptions
*
pOp
=
(
SDatabaseOptions
*
)
pOptions
;
pCxt
->
valid
=
checkAndSetKeepOption
(
pCxt
,
pKeep
,
&
pOp
->
keep0
,
&
pOp
->
keep1
,
&
pOp
->
keep2
);
return
pOptions
;
}
SNode
*
setDatabaseAlterOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SAlterOption
*
pAlterOption
)
{
if
(
DB_OPTION_KEEP
==
pAlterOption
->
type
)
{
return
setDatabaseKeepOption
(
pCxt
,
pOptions
,
pAlterOption
->
pKeep
);
}
else
{
return
setDatabaseOption
(
pCxt
,
pOptions
,
pAlterOption
->
type
,
&
pAlterOption
->
val
);
}
}
SNode
*
createCreateDatabaseStmt
(
SAstCreateContext
*
pCxt
,
bool
ignoreExists
,
SToken
*
pDbName
,
SNode
*
pOptions
)
{
if
(
!
checkDbName
(
pCxt
,
pDbName
,
false
))
{
return
NULL
;
...
...
@@ -961,7 +988,9 @@ SNode* createAlterDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName, SNode*
SNode
*
createDefaultTableOptions
(
SAstCreateContext
*
pCxt
)
{
STableOptions
*
pOptions
=
nodesMakeNode
(
QUERY_NODE_TABLE_OPTIONS
);
CHECK_OUT_OF_MEM
(
pOptions
);
pOptions
->
keep
=
TSDB_DEFAULT_KEEP
;
pOptions
->
keep0
=
TSDB_DEFAULT_KEEP
;
pOptions
->
keep1
=
TSDB_DEFAULT_KEEP
;
pOptions
->
keep2
=
TSDB_DEFAULT_KEEP
;
pOptions
->
ttl
=
TSDB_DEFAULT_DB_TTL_OPTION
;
pOptions
->
filesFactor
=
TSDB_DEFAULT_DB_FILE_FACTOR
;
pOptions
->
delay
=
TSDB_DEFAULT_DB_DELAY
;
...
...
@@ -971,7 +1000,9 @@ SNode* createDefaultTableOptions(SAstCreateContext* pCxt) {
SNode
*
createDefaultAlterTableOptions
(
SAstCreateContext
*
pCxt
)
{
STableOptions
*
pOptions
=
nodesMakeNode
(
QUERY_NODE_TABLE_OPTIONS
);
CHECK_OUT_OF_MEM
(
pOptions
);
pOptions
->
keep
=
-
1
;
pOptions
->
keep0
=
-
1
;
pOptions
->
keep1
=
-
1
;
pOptions
->
keep2
=
-
1
;
pOptions
->
ttl
=
-
1
;
pOptions
->
filesFactor
=
-
1
;
pOptions
->
delay
=
-
1
;
...
...
@@ -997,6 +1028,20 @@ SNode* setTableRollupOption(SAstCreateContext* pCxt, SNode* pOptions, SNodeList*
return
pOptions
;
}
SNode
*
setTableKeepOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SNodeList
*
pKeep
)
{
STableOptions
*
pOp
=
(
STableOptions
*
)
pOptions
;
pCxt
->
valid
=
checkAndSetKeepOption
(
pCxt
,
pKeep
,
&
pOp
->
keep0
,
&
pOp
->
keep1
,
&
pOp
->
keep2
);
return
pOptions
;
}
SNode
*
setTableAlterOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
SAlterOption
*
pAlterOption
)
{
if
(
TABLE_OPTION_KEEP
==
pAlterOption
->
type
)
{
return
setTableKeepOption
(
pCxt
,
pOptions
,
pAlterOption
->
pKeep
);
}
else
{
return
setTableOption
(
pCxt
,
pOptions
,
pAlterOption
->
type
,
&
pAlterOption
->
val
);
}
}
SNode
*
createColumnDefNode
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pColName
,
SDataType
dataType
,
const
SToken
*
pComment
)
{
SColumnDefNode
*
pCol
=
(
SColumnDefNode
*
)
nodesMakeNode
(
QUERY_NODE_COLUMN_DEF
);
CHECK_OUT_OF_MEM
(
pCol
);
...
...
@@ -1176,6 +1221,18 @@ SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type, SNode* pDbName, S
return
(
SNode
*
)
pStmt
;
}
SNode
*
createShowCreateDatabaseStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pDbName
)
{
SNode
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_SHOW_CREATE_DATABASE_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
return
pStmt
;
}
SNode
*
createShowCreateTableStmt
(
SAstCreateContext
*
pCxt
,
ENodeType
type
,
SNode
*
pRealTable
)
{
SNode
*
pStmt
=
nodesMakeNode
(
type
);
CHECK_OUT_OF_MEM
(
pStmt
);
return
pStmt
;
}
SNode
*
createCreateUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
,
const
SToken
*
pPassword
)
{
char
password
[
TSDB_USET_PASSWORD_LEN
]
=
{
0
};
if
(
!
checkUserName
(
pCxt
,
pUserName
)
||
!
checkPassword
(
pCxt
,
pPassword
,
password
))
{
...
...
@@ -1388,3 +1445,63 @@ SNode* createResetQueryCacheStmt(SAstCreateContext* pCxt) {
CHECK_OUT_OF_MEM
(
pStmt
);
return
pStmt
;
}
SNode
*
createCompactStmt
(
SAstCreateContext
*
pCxt
,
SNodeList
*
pVgroups
)
{
SNode
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_COMPACT_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
return
pStmt
;
}
SNode
*
createCreateFunctionStmt
(
SAstCreateContext
*
pCxt
,
bool
aggFunc
,
const
SToken
*
pFuncName
,
const
SToken
*
pLibPath
,
SDataType
dataType
,
int32_t
bufSize
)
{
SNode
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_CREATE_FUNCTION_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
return
pStmt
;
}
SNode
*
createDropFunctionStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pFuncName
)
{
SNode
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_DROP_FUNCTION_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
return
pStmt
;
}
SNode
*
createCreateStreamStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pStreamName
,
const
SToken
*
pTableName
,
SNode
*
pQuery
)
{
SNode
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_CREATE_STREAM_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
return
pStmt
;
}
SNode
*
createDropStreamStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pStreamName
)
{
SNode
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_DROP_STREAM_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
return
pStmt
;
}
SNode
*
createKillStmt
(
SAstCreateContext
*
pCxt
,
ENodeType
type
,
const
SToken
*
pId
)
{
SNode
*
pStmt
=
nodesMakeNode
(
type
);
CHECK_OUT_OF_MEM
(
pStmt
);
return
pStmt
;
}
SNode
*
createMergeVgroupStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pVgId1
,
const
SToken
*
pVgId2
)
{
SNode
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_MERGE_VGROUP_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
return
pStmt
;
}
SNode
*
createRedistributeVgroupStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pVgId
,
SNodeList
*
pDnodes
)
{
SNode
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_REDISTRIBUTE_VGROUP_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
return
pStmt
;
}
SNode
*
createSplitVgroupStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pVgId
)
{
SNode
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_SPLIT_VGROUP_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
return
pStmt
;
}
SNode
*
createSyncdbStmt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pDbName
)
{
SNode
*
pStmt
=
nodesMakeNode
(
QUERY_NODE_SYNCDB_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
return
pStmt
;
}
source/libs/parser/src/parInsert.c
浏览文件 @
61d8ef38
...
...
@@ -52,8 +52,6 @@ typedef struct SInsertParseContext {
SParseContext
*
pComCxt
;
// input
char
*
pSql
;
// input
SMsgBuf
msg
;
// input
char
dbFName
[
TSDB_DB_FNAME_LEN
];
char
tableName
[
TSDB_TABLE_NAME_LEN
];
STableMeta
*
pTableMeta
;
// each table
SParsedDataColInfo
tags
;
// each table
SKVRowBuilder
tagsBuilder
;
// each table
...
...
@@ -231,9 +229,6 @@ static int32_t getTableMeta(SInsertParseContext* pCxt, SToken* pTname) {
SVgroupInfo
vg
;
CHECK_CODE
(
catalogGetTableHashVgroup
(
pBasicCtx
->
pCatalog
,
pBasicCtx
->
pTransporter
,
&
pBasicCtx
->
mgmtEpSet
,
&
name
,
&
vg
));
CHECK_CODE
(
taosHashPut
(
pCxt
->
pVgroupsHashObj
,
(
const
char
*
)
&
vg
.
vgId
,
sizeof
(
vg
.
vgId
),
(
char
*
)
&
vg
,
sizeof
(
vg
)));
pCxt
->
pTableMeta
->
vgId
=
vg
.
vgId
;
// todo remove
strcpy
(
pCxt
->
tableName
,
name
.
tname
);
tNameGetFullDbName
(
&
name
,
pCxt
->
dbFName
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -977,8 +972,6 @@ static int32_t parseInsertBody(SInsertParseContext* pCxt) {
STableDataBlocks
*
dataBuf
=
NULL
;
CHECK_CODE
(
getDataBlockFromList
(
pCxt
->
pTableBlockHashObj
,
pCxt
->
pTableMeta
->
uid
,
TSDB_DEFAULT_PAYLOAD_SIZE
,
sizeof
(
SSubmitBlk
),
getTableInfo
(
pCxt
->
pTableMeta
).
rowSize
,
pCxt
->
pTableMeta
,
&
dataBuf
,
NULL
));
strcpy
(
dataBuf
->
tableName
,
pCxt
->
tableName
);
strcpy
(
dataBuf
->
dbFName
,
pCxt
->
dbFName
);
if
(
TK_NK_LP
==
sToken
.
type
)
{
// pSql -> field1_name, ...)
...
...
source/libs/parser/src/parTokenizer.c
浏览文件 @
61d8ef38
...
...
@@ -29,10 +29,14 @@ typedef struct SKeyword {
// keywords in sql string
static
SKeyword
keywordTable
[]
=
{
{
"ACCOUNT"
,
TK_ACCOUNT
},
{
"ACCOUNTS"
,
TK_ACCOUNTS
},
{
"ADD"
,
TK_ADD
},
{
"AGGREGATE"
,
TK_AGGREGATE
},
{
"ALL"
,
TK_ALL
},
{
"ALTER"
,
TK_ALTER
},
{
"ANALYZE"
,
TK_ANALYZE
},
{
"AND"
,
TK_AND
},
{
"APPS"
,
TK_APPS
},
{
"AS"
,
TK_AS
},
{
"ASC"
,
TK_ASC
},
{
"BETWEEN"
,
TK_BETWEEN
},
...
...
@@ -40,15 +44,22 @@ static SKeyword keywordTable[] = {
{
"BIGINT"
,
TK_BIGINT
},
{
"BLOCKS"
,
TK_BLOCKS
},
{
"BOOL"
,
TK_BOOL
},
{
"BUFSIZE"
,
TK_BUFSIZE
},
{
"BY"
,
TK_BY
},
{
"CACHE"
,
TK_CACHE
},
{
"CACHELAST"
,
TK_CACHELAST
},
{
"COLUMN"
,
TK_COLUMN
},
{
"COMMENT"
,
TK_COMMENT
},
{
"COMP"
,
TK_COMP
},
{
"COMPACT"
,
TK_COMPACT
},
{
"CONNS"
,
TK_CONNS
},
{
"CONNECTION"
,
TK_CONNECTION
},
{
"CONNECTIONS"
,
TK_CONNECTIONS
},
{
"CREATE"
,
TK_CREATE
},
{
"DATABASE"
,
TK_DATABASE
},
{
"DATABASES"
,
TK_DATABASES
},
{
"DAYS"
,
TK_DAYS
},
{
"DBS"
,
TK_DBS
},
{
"DELAY"
,
TK_DELAY
},
{
"DESC"
,
TK_DESC
},
{
"DESCRIBE"
,
TK_DESCRIBE
},
...
...
@@ -83,14 +94,18 @@ static SKeyword keywordTable[] = {
{
"JOIN"
,
TK_JOIN
},
{
"JSON"
,
TK_JSON
},
{
"KEEP"
,
TK_KEEP
},
{
"KILL"
,
TK_KILL
},
{
"LICENCE"
,
TK_LICENCE
},
{
"LIKE"
,
TK_LIKE
},
{
"LIMIT"
,
TK_LIMIT
},
{
"LINEAR"
,
TK_LINEAR
},
{
"LOCAL"
,
TK_LOCAL
},
{
"MATCH"
,
TK_MATCH
},
{
"MAXROWS"
,
TK_MAXROWS
},
{
"MINROWS"
,
TK_MINROWS
},
{
"MINUS"
,
TK_MINUS
},
{
"MNODES"
,
TK_MNODES
},
{
"MODIFY"
,
TK_MODIFY
},
{
"MODULES"
,
TK_MODULES
},
{
"NCHAR"
,
TK_NCHAR
},
{
"NMATCH"
,
TK_NMATCH
},
...
...
@@ -102,9 +117,11 @@ static SKeyword keywordTable[] = {
{
"ON"
,
TK_ON
},
{
"OR"
,
TK_OR
},
{
"ORDER"
,
TK_ORDER
},
{
"OUTPUTTYPE"
,
TK_OUTPUTTYPE
},
{
"PARTITION"
,
TK_PARTITION
},
{
"PASS"
,
TK_PASS
},
{
"PORT"
,
TK_PORT
},
{
"PPS"
,
TK_PPS
},
{
"PRECISION"
,
TK_PRECISION
},
{
"PRIVILEGE"
,
TK_PRIVILEGE
},
{
"PREV"
,
TK_PREV
},
...
...
@@ -112,6 +129,8 @@ static SKeyword keywordTable[] = {
{
"QNODE"
,
TK_QNODE
},
{
"QNODES"
,
TK_QNODES
},
{
"QSTARTTS"
,
TK_QSTARTTS
},
{
"QTIME"
,
TK_QTIME
},
{
"QUERIES"
,
TK_QUERIES
},
{
"QUERY"
,
TK_QUERY
},
{
"QUORUM"
,
TK_QUORUM
},
{
"RATIO"
,
TK_RATIO
},
...
...
@@ -120,8 +139,10 @@ static SKeyword keywordTable[] = {
{
"RETENTIONS"
,
TK_RETENTIONS
},
{
"ROLLUP"
,
TK_ROLLUP
},
{
"ROWTS"
,
TK_ROWTS
},
{
"SCORES"
,
TK_SCORES
},
{
"SELECT"
,
TK_SELECT
},
{
"SESSION"
,
TK_SESSION
},
{
"SET"
,
TK_SET
},
{
"SHOW"
,
TK_SHOW
},
{
"SINGLE_STABLE"
,
TK_SINGLE_STABLE
},
{
"SLIDING"
,
TK_SLIDING
},
...
...
@@ -131,16 +152,23 @@ static SKeyword keywordTable[] = {
{
"SOFFSET"
,
TK_SOFFSET
},
{
"STABLE"
,
TK_STABLE
},
{
"STABLES"
,
TK_STABLES
},
{
"STATE"
,
TK_STATE
},
{
"STATE_WINDOW"
,
TK_STATE_WINDOW
},
{
"STORAGE"
,
TK_STORAGE
},
{
"STREAM"
,
TK_STREAM
},
{
"STREAMS"
,
TK_STREAMS
},
{
"STREAM_MODE"
,
TK_STREAM_MODE
},
{
"SYNCDB"
,
TK_SYNCDB
},
{
"TABLE"
,
TK_TABLE
},
{
"TABLES"
,
TK_TABLES
},
{
"TAG"
,
TK_TAG
},
{
"TAGS"
,
TK_TAGS
},
{
"TBNAME"
,
TK_TBNAME
},
{
"TIMESTAMP"
,
TK_TIMESTAMP
},
{
"TINYINT"
,
TK_TINYINT
},
{
"TOPIC"
,
TK_TOPIC
},
{
"TOPICS"
,
TK_TOPICS
},
{
"TSERIES"
,
TK_TSERIES
},
{
"TTL"
,
TK_TTL
},
{
"UNION"
,
TK_UNION
},
{
"UNSIGNED"
,
TK_UNSIGNED
},
...
...
@@ -150,8 +178,10 @@ static SKeyword keywordTable[] = {
{
"USING"
,
TK_USING
},
{
"VALUES"
,
TK_VALUES
},
{
"VARCHAR"
,
TK_VARCHAR
},
{
"VARIABLES"
,
TK_VARIABLES
},
{
"VERBOSE"
,
TK_VERBOSE
},
{
"VGROUPS"
,
TK_VGROUPS
},
{
"VNODES"
,
TK_VNODES
},
{
"WAL"
,
TK_WAL
},
{
"WDURATION"
,
TK_WDURATION
},
{
"WENDTS"
,
TK_WENDTS
},
...
...
@@ -182,22 +212,8 @@ static SKeyword keywordTable[] = {
// {"UMINUS", TK_UMINUS},
// {"UPLUS", TK_UPLUS},
// {"BITNOT", TK_BITNOT},
// {"ACCOUNTS", TK_ACCOUNTS},
// {"QUERIES", TK_QUERIES},
// {"CONNECTIONS", TK_CONNECTIONS},
// {"VARIABLES", TK_VARIABLES},
// {"SCORES", TK_SCORES},
// {"GRANTS", TK_GRANTS},
// {"DOT", TK_DOT},
// {"SYNCDB", TK_SYNCDB},
// {"LOCAL", TK_LOCAL},
// {"PPS", TK_PPS},
// {"TSERIES", TK_TSERIES},
// {"DBS", TK_DBS},
// {"STORAGE", TK_STORAGE},
// {"QTIME", TK_QTIME},
// {"CONNS", TK_CONNS},
// {"STATE", TK_STATE},
// {"CTIME", TK_CTIME},
// {"LP", TK_LP},
// {"RP", TK_RP},
...
...
@@ -205,15 +221,8 @@ static SKeyword keywordTable[] = {
// {"EVERY", TK_EVERY},
// {"VARIABLE", TK_VARIABLE},
// {"UPDATE", TK_UPDATE},
// {"ADD", TK_ADD},
// {"COLUMN", TK_COLUMN},
// {"TAG", TK_TAG},
// {"CHANGE", TK_CHANGE},
// {"SET", TK_SET},
// {"KILL", TK_KILL},
// {"CONNECTION", TK_CONNECTION},
// {"COLON", TK_COLON},
// {"STREAM", TK_STREAM},
// {"ABORT", TK_ABORT},
// {"AFTER", TK_AFTER},
// {"ATTACH", TK_ATTACH},
...
...
@@ -244,14 +253,7 @@ static SKeyword keywordTable[] = {
// {"TRIGGER", TK_TRIGGER},
// {"VIEW", TK_VIEW},
// {"SEMI", TK_SEMI},
// {"VNODES", TK_VNODES},
// {"PARTITIONS", TK_PARTITIONS},
// {"TOPICS", TK_TOPICS},
// {"COMPACT", TK_COMPACT},
// {"MODIFY", TK_MODIFY},
// {"OUTPUTTYPE", TK_OUTPUTTYPE},
// {"AGGREGATE", TK_AGGREGATE},
// {"BUFSIZE", TK_BUFSIZE},
// {"PARTITIONS", TK_PARTITIONS},
// {"MODE", TK_MODE},
};
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
61d8ef38
...
...
@@ -240,7 +240,11 @@ static void setColumnInfoByExpr(const STableNode* pTable, SExprNode* pExpr, SCol
if
(
NULL
!=
pTable
)
{
strcpy
(
pCol
->
tableAlias
,
pTable
->
tableAlias
);
}
else
if
(
QUERY_NODE_COLUMN
==
nodeType
(
pExpr
))
{
strcpy
(
pCol
->
tableAlias
,
((
SColumnNode
*
)
pExpr
)
->
tableAlias
);
SColumnNode
*
pProjCol
=
(
SColumnNode
*
)
pExpr
;
strcpy
(
pCol
->
tableAlias
,
pProjCol
->
tableAlias
);
pCol
->
tableId
=
pProjCol
->
tableId
;
pCol
->
colId
=
pProjCol
->
colId
;
pCol
->
colType
=
pProjCol
->
colType
;
}
strcpy
(
pCol
->
colName
,
pExpr
->
aliasName
);
pCol
->
node
.
resType
=
pExpr
->
resType
;
...
...
@@ -956,9 +960,9 @@ static int32_t buildCreateDbReq(STranslateContext* pCxt, SCreateDatabaseStmt* pS
pReq
->
cacheBlockSize
=
pStmt
->
pOptions
->
cacheBlockSize
;
pReq
->
totalBlocks
=
pStmt
->
pOptions
->
numOfBlocks
;
pReq
->
daysPerFile
=
pStmt
->
pOptions
->
daysPerFile
;
pReq
->
daysToKeep0
=
pStmt
->
pOptions
->
keep
;
pReq
->
daysToKeep1
=
-
1
;
pReq
->
daysToKeep2
=
-
1
;
pReq
->
daysToKeep0
=
pStmt
->
pOptions
->
keep
0
;
pReq
->
daysToKeep1
=
pStmt
->
pOptions
->
keep
1
;
pReq
->
daysToKeep2
=
pStmt
->
pOptions
->
keep2
;
pReq
->
minRows
=
pStmt
->
pOptions
->
minRowsPerBlock
;
pReq
->
maxRows
=
pStmt
->
pOptions
->
maxRowsPerBlock
;
pReq
->
commitTime
=
-
1
;
...
...
@@ -1041,13 +1045,14 @@ static void buildAlterDbReq(STranslateContext* pCxt, SAlterDatabaseStmt* pStmt,
tNameSetDbName
(
&
name
,
pCxt
->
pParseCxt
->
acctId
,
pStmt
->
dbName
,
strlen
(
pStmt
->
dbName
));
tNameGetFullDbName
(
&
name
,
pReq
->
db
);
pReq
->
totalBlocks
=
pStmt
->
pOptions
->
numOfBlocks
;
pReq
->
daysToKeep0
=
pStmt
->
pOptions
->
keep
;
pReq
->
daysToKeep1
=
-
1
;
pReq
->
daysToKeep2
=
-
1
;
pReq
->
daysToKeep0
=
pStmt
->
pOptions
->
keep
0
;
pReq
->
daysToKeep1
=
pStmt
->
pOptions
->
keep
1
;
pReq
->
daysToKeep2
=
pStmt
->
pOptions
->
keep2
;
pReq
->
fsyncPeriod
=
pStmt
->
pOptions
->
fsyncPeriod
;
pReq
->
walLevel
=
pStmt
->
pOptions
->
walLevel
;
pReq
->
quorum
=
pStmt
->
pOptions
->
quorum
;
pReq
->
cacheLastRow
=
pStmt
->
pOptions
->
cachelast
;
pReq
->
replications
=
pStmt
->
pOptions
->
replica
;
return
;
}
...
...
@@ -1094,10 +1099,6 @@ static int32_t columnDefNodeToField(SNodeList* pList, SArray** pArray) {
}
static
int32_t
columnNodeToField
(
SNodeList
*
pList
,
SArray
**
pArray
)
{
if
(
NULL
==
pList
)
{
return
TSDB_CODE_SUCCESS
;
}
*
pArray
=
taosArrayInit
(
LIST_LENGTH
(
pList
),
sizeof
(
SField
));
SNode
*
pNode
;
FOREACH
(
pNode
,
pList
)
{
...
...
@@ -1119,7 +1120,7 @@ static const SColumnDefNode* findColDef(const SNodeList* pCols, const SColumnNod
return
NULL
;
}
static
int32_t
checkCreateTable
(
STranslateContext
*
pCxt
,
SCreateTableStmt
*
pStmt
)
{
static
int32_t
checkCreate
Super
Table
(
STranslateContext
*
pCxt
,
SCreateTableStmt
*
pStmt
)
{
if
(
NULL
!=
pStmt
->
pOptions
->
pSma
)
{
SNode
*
pNode
=
NULL
;
FOREACH
(
pNode
,
pStmt
->
pOptions
->
pSma
)
{
...
...
@@ -1148,7 +1149,7 @@ static int32_t getAggregationMethod(SNodeList* pFuncs) {
}
static
int32_t
translateCreateSuperTable
(
STranslateContext
*
pCxt
,
SCreateTableStmt
*
pStmt
)
{
int32_t
code
=
checkCreateTable
(
pCxt
,
pStmt
);
int32_t
code
=
checkCreate
Super
Table
(
pCxt
,
pStmt
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
return
code
;
}
...
...
@@ -1160,10 +1161,15 @@ static int32_t translateCreateSuperTable(STranslateContext* pCxt, SCreateTableSt
createReq
.
delay
=
pStmt
->
pOptions
->
delay
;
columnDefNodeToField
(
pStmt
->
pCols
,
&
createReq
.
pColumns
);
columnDefNodeToField
(
pStmt
->
pTags
,
&
createReq
.
pTags
);
columnNodeToField
(
pStmt
->
pOptions
->
pSma
,
&
createReq
.
pSmas
);
createReq
.
numOfColumns
=
LIST_LENGTH
(
pStmt
->
pCols
);
createReq
.
numOfTags
=
LIST_LENGTH
(
pStmt
->
pTags
);
createReq
.
numOfSmas
=
LIST_LENGTH
(
pStmt
->
pOptions
->
pSma
);
if
(
NULL
==
pStmt
->
pOptions
->
pSma
)
{
columnDefNodeToField
(
pStmt
->
pCols
,
&
createReq
.
pSmas
);
createReq
.
numOfSmas
=
createReq
.
numOfColumns
;
}
else
{
columnNodeToField
(
pStmt
->
pOptions
->
pSma
,
&
createReq
.
pSmas
);
createReq
.
numOfSmas
=
LIST_LENGTH
(
pStmt
->
pOptions
->
pSma
);
}
SName
tableName
=
{
.
type
=
TSDB_TABLE_NAME_T
,
.
acctId
=
pCxt
->
pParseCxt
->
acctId
};
strcpy
(
tableName
.
dbname
,
pStmt
->
dbName
);
...
...
@@ -1469,20 +1475,20 @@ static int32_t translateAlterDnode(STranslateContext* pCxt, SAlterDnodeStmt* pSt
static
int32_t
nodeTypeToShowType
(
ENodeType
nt
)
{
switch
(
nt
)
{
case
QUERY_NODE_SHOW_
DATABASE
S_STMT
:
return
TSDB_MGMT_TABLE_DB
;
case
QUERY_NODE_SHOW_
STABLE
S_STMT
:
return
TSDB_MGMT_TABLE_
STB
;
case
QUERY_NODE_SHOW_
USERS
_STMT
:
return
TSDB_MGMT_TABLE_USER
;
case
QUERY_NODE_SHOW_
DNOD
ES_STMT
:
return
TSDB_MGMT_TABLE_
DNODE
;
case
QUERY_NODE_SHOW_
VGROUP
S_STMT
:
return
TSDB_MGMT_TABLE_VGROUP
;
case
QUERY_NODE_SHOW_
MNODE
S_STMT
:
return
TSDB_MGMT_TABLE_MNODE
;
case
QUERY_NODE_SHOW_
QNODES
_STMT
:
return
TSDB_MGMT_TABLE_
QNODE
;
case
QUERY_NODE_SHOW_
APP
S_STMT
:
return
0
;
// todo
case
QUERY_NODE_SHOW_
CONNECTION
S_STMT
:
return
TSDB_MGMT_TABLE_
CONNS
;
case
QUERY_NODE_SHOW_
LICENCE
_STMT
:
return
0
;
// todo
case
QUERY_NODE_SHOW_
QUERI
ES_STMT
:
return
TSDB_MGMT_TABLE_
QUERIES
;
case
QUERY_NODE_SHOW_
SCORE
S_STMT
:
return
0
;
// todo
case
QUERY_NODE_SHOW_
TOPIC
S_STMT
:
return
0
;
// todo
case
QUERY_NODE_SHOW_
VARIABLE
_STMT
:
return
TSDB_MGMT_TABLE_
VARIABLES
;
default:
break
;
}
...
...
@@ -1508,30 +1514,6 @@ static int32_t translateShow(STranslateContext* pCxt, SShowStmt* pStmt) {
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
translateShowTables
(
STranslateContext
*
pCxt
)
{
SVShowTablesReq
*
pShowReq
=
taosMemoryCalloc
(
1
,
sizeof
(
SVShowTablesReq
));
SArray
*
array
=
NULL
;
int32_t
code
=
getDBVgInfo
(
pCxt
,
pCxt
->
pParseCxt
->
db
,
&
array
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
return
code
;
}
SVgroupInfo
*
info
=
taosArrayGet
(
array
,
0
);
pShowReq
->
head
.
vgId
=
htonl
(
info
->
vgId
);
pCxt
->
pCmdMsg
=
taosMemoryMalloc
(
sizeof
(
SCmdMsgInfo
));
if
(
NULL
==
pCxt
->
pCmdMsg
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pCxt
->
pCmdMsg
->
epSet
=
info
->
epSet
;
pCxt
->
pCmdMsg
->
msgType
=
TDMT_VND_SHOW_TABLES
;
pCxt
->
pCmdMsg
->
msgLen
=
sizeof
(
SVShowTablesReq
);
pCxt
->
pCmdMsg
->
pMsg
=
pShowReq
;
pCxt
->
pCmdMsg
->
pExtension
=
array
;
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
getSmaIndexDstVgId
(
STranslateContext
*
pCxt
,
char
*
pTableName
,
int32_t
*
pVgId
)
{
SVgroupInfo
vg
=
{
0
};
int32_t
code
=
getTableHashVgroup
(
pCxt
,
pCxt
->
pParseCxt
->
db
,
pTableName
,
&
vg
);
...
...
@@ -1867,17 +1849,19 @@ static int32_t translateQuery(STranslateContext* pCxt, SNode* pNode) {
case
QUERY_NODE_ALTER_DNODE_STMT
:
code
=
translateAlterDnode
(
pCxt
,
(
SAlterDnodeStmt
*
)
pNode
);
break
;
case
QUERY_NODE_SHOW_
DATABASE
S_STMT
:
case
QUERY_NODE_SHOW_
STABLE
S_STMT
:
case
QUERY_NODE_SHOW_
USERS
_STMT
:
case
QUERY_NODE_SHOW_
DNOD
ES_STMT
:
case
QUERY_NODE_SHOW_
VGROUP
S_STMT
:
case
QUERY_NODE_SHOW_
MNODE
S_STMT
:
case
QUERY_NODE_SHOW_
QNODES
_STMT
:
case
QUERY_NODE_SHOW_
APP
S_STMT
:
case
QUERY_NODE_SHOW_
CONNECTION
S_STMT
:
case
QUERY_NODE_SHOW_
LICENCE
_STMT
:
case
QUERY_NODE_SHOW_
QUERI
ES_STMT
:
case
QUERY_NODE_SHOW_
SCORE
S_STMT
:
case
QUERY_NODE_SHOW_
TOPIC
S_STMT
:
case
QUERY_NODE_SHOW_
VARIABLE
_STMT
:
code
=
translateShow
(
pCxt
,
(
SShowStmt
*
)
pNode
);
break
;
case
QUERY_NODE_SHOW_TABLES_STMT
:
code
=
translateShowTables
(
pCxt
);
case
QUERY_NODE_SHOW_CREATE_DATABASE_STMT
:
case
QUERY_NODE_SHOW_CREATE_TABLE_STMT
:
case
QUERY_NODE_SHOW_CREATE_STABLE_STMT
:
// todo
break
;
case
QUERY_NODE_CREATE_INDEX_STMT
:
code
=
translateCreateIndex
(
pCxt
,
(
SCreateIndexStmt
*
)
pNode
);
...
...
@@ -1952,6 +1936,7 @@ static int32_t extractExplainResultSchema(int32_t* numOfCols, SSchema** pSchema)
}
(
*
pSchema
)[
0
].
type
=
TSDB_DATA_TYPE_BINARY
;
(
*
pSchema
)[
0
].
bytes
=
TSDB_EXPLAIN_RESULT_ROW_SIZE
;
strcpy
((
*
pSchema
)[
0
].
name
,
TSDB_EXPLAIN_RESULT_COLUMN_NAME
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -2447,9 +2432,19 @@ static int32_t buildKVRowForAllTags(STranslateContext* pCxt, SCreateSubTableClau
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
checkCreateSubTable
(
STranslateContext
*
pCxt
,
SCreateSubTableClause
*
pStmt
)
{
if
(
0
!=
strcmp
(
pStmt
->
dbName
,
pStmt
->
useDbName
))
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_CORRESPONDING_STABLE_ERR
);;
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
rewriteCreateSubTable
(
STranslateContext
*
pCxt
,
SCreateSubTableClause
*
pStmt
,
SHashObj
*
pVgroupHashmap
)
{
int32_t
code
=
checkCreateSubTable
(
pCxt
,
pStmt
);
STableMeta
*
pSuperTableMeta
=
NULL
;
int32_t
code
=
getTableMeta
(
pCxt
,
pStmt
->
useDbName
,
pStmt
->
useTableName
,
&
pSuperTableMeta
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
getTableMeta
(
pCxt
,
pStmt
->
useDbName
,
pStmt
->
useTableName
,
&
pSuperTableMeta
);
}
SKVRowBuilder
kvRowBuilder
=
{
0
};
if
(
TSDB_CODE_SUCCESS
==
code
)
{
...
...
source/libs/parser/src/parUtil.c
浏览文件 @
61d8ef38
...
...
@@ -61,6 +61,12 @@ static char* getSyntaxErrFormat(int32_t errCode) {
return
"This statement is no longer supported"
;
case
TSDB_CODE_PAR_INTERVAL_VALUE_TOO_SMALL
:
return
"This interval value is too small : %s"
;
case
TSDB_CODE_PAR_DB_NOT_SPECIFIED
:
return
"db not specified"
;
case
TSDB_CODE_PAR_INVALID_IDENTIFIER_NAME
:
return
"Invalid identifier name : %s"
;
case
TSDB_CODE_PAR_CORRESPONDING_STABLE_ERR
:
return
"corresponding super table not in this db"
;
case
TSDB_CODE_OUT_OF_MEMORY
:
return
"Out of memory"
;
default:
...
...
source/libs/parser/src/sql.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/planner/src/planLogicCreater.c
浏览文件 @
61d8ef38
...
...
@@ -288,7 +288,7 @@ static int32_t createJoinLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSelect
// set the output
if
(
TSDB_CODE_SUCCESS
==
code
)
{
pJoin
->
node
.
pTargets
=
nodesCloneList
(
pLeft
->
pTargets
);
if
(
NULL
==
pJoin
->
pOnCondition
s
)
{
if
(
NULL
==
pJoin
->
node
.
pTarget
s
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
...
...
source/libs/qcom/CMakeLists.txt
浏览文件 @
61d8ef38
...
...
@@ -8,7 +8,7 @@ target_include_directories(
target_link_libraries
(
qcom
PRIVATE os util transport
PRIVATE os util transport
nodes
)
if
(
${
BUILD_TEST
}
)
...
...
source/libs/qcom/inc/queryInt.h
浏览文件 @
61d8ef38
...
...
@@ -21,7 +21,6 @@ extern "C" {
#endif
#ifdef __cplusplus
}
#endif
...
...
source/libs/scalar/inc/filterInt.h
浏览文件 @
61d8ef38
...
...
@@ -36,8 +36,6 @@ extern "C" {
#define FILTER_DUMMY_EMPTY_OPTR 127
#define MAX_NUM_STR_SIZE 40
#define FILTER_RM_UNIT_MIN_ROWS 100
enum
{
...
...
source/libs/scalar/src/sclfunc.c
浏览文件 @
61d8ef38
...
...
@@ -23,7 +23,7 @@ int32_t absFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
colDataSetNull_f
(
pOutputData
->
nullbitmap
,
i
);
continue
;
}
out
[
i
]
=
(
in
[
i
]
>
0
)
?
in
[
i
]
:
-
in
[
i
];
out
[
i
]
=
(
in
[
i
]
>
=
0
)
?
in
[
i
]
:
-
in
[
i
];
}
break
;
}
...
...
@@ -36,7 +36,7 @@ int32_t absFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
colDataSetNull_f
(
pOutputData
->
nullbitmap
,
i
);
continue
;
}
out
[
i
]
=
(
in
[
i
]
>
0
)
?
in
[
i
]
:
-
in
[
i
];
out
[
i
]
=
(
in
[
i
]
>
=
0
)
?
in
[
i
]
:
-
in
[
i
];
}
break
;
}
...
...
@@ -49,7 +49,7 @@ int32_t absFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
colDataSetNull_f
(
pOutputData
->
nullbitmap
,
i
);
continue
;
}
out
[
i
]
=
(
in
[
i
]
>
0
)
?
in
[
i
]
:
-
in
[
i
];
out
[
i
]
=
(
in
[
i
]
>
=
0
)
?
in
[
i
]
:
-
in
[
i
];
}
break
;
}
...
...
@@ -62,7 +62,7 @@ int32_t absFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
colDataSetNull_f
(
pOutputData
->
nullbitmap
,
i
);
continue
;
}
out
[
i
]
=
(
in
[
i
]
>
0
)
?
in
[
i
]
:
-
in
[
i
];
out
[
i
]
=
(
in
[
i
]
>
=
0
)
?
in
[
i
]
:
-
in
[
i
];
}
break
;
}
...
...
@@ -75,7 +75,7 @@ int32_t absFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
colDataSetNull_f
(
pOutputData
->
nullbitmap
,
i
);
continue
;
}
out
[
i
]
=
(
in
[
i
]
>
0
)
?
in
[
i
]
:
-
in
[
i
];
out
[
i
]
=
(
in
[
i
]
>
=
0
)
?
in
[
i
]
:
-
in
[
i
];
}
break
;
}
...
...
@@ -88,7 +88,7 @@ int32_t absFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
colDataSetNull_f
(
pOutputData
->
nullbitmap
,
i
);
continue
;
}
out
[
i
]
=
(
in
[
i
]
>
0
)
?
in
[
i
]
:
-
in
[
i
];
out
[
i
]
=
(
in
[
i
]
>
=
0
)
?
in
[
i
]
:
-
in
[
i
];
}
break
;
}
...
...
@@ -407,4 +407,4 @@ int32_t winEndTsFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *p
ASSERT
(
inputNum
==
1
);
colDataAppendInt64
(
pOutput
->
columnData
,
pOutput
->
numOfRows
,
(
int64_t
*
)
colDataGetData
(
pInput
->
columnData
,
4
));
return
TSDB_CODE_SUCCESS
;
}
\ No newline at end of file
}
source/libs/scalar/src/sclvector.c
浏览文件 @
61d8ef38
...
...
@@ -720,7 +720,7 @@ void vectorMathRemainder(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam
double
lx
=
getVectorDoubleValueFnLeft
(
pLeftCol
->
pData
,
i
);
double
rx
=
getVectorDoubleValueFnRight
(
pRightCol
->
pData
,
i
);
if
(
compareDoubleVal
(
&
zero
,
&
rx
))
{
if
(
isnan
(
lx
)
||
isinf
(
lx
)
||
isnan
(
rx
)
||
isinf
(
rx
))
{
colDataAppend
(
pOutputCol
,
i
,
NULL
,
true
);
continue
;
}
...
...
@@ -729,7 +729,7 @@ void vectorMathRemainder(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam
}
}
else
if
(
pLeft
->
numOfRows
==
1
)
{
double
lx
=
getVectorDoubleValueFnLeft
(
pLeftCol
->
pData
,
0
);
if
(
colDataIsNull_f
(
pLeftCol
->
nullbitmap
,
0
))
{
// Set pLeft->numOfRows NULL value
if
(
colDataIsNull_f
(
pLeftCol
->
nullbitmap
,
0
)
||
isnan
(
lx
)
||
isinf
(
lx
)
)
{
// Set pLeft->numOfRows NULL value
// TODO set numOfRows NULL value
}
else
{
for
(;
i
>=
0
&&
i
<
pRight
->
numOfRows
;
i
+=
step
,
output
+=
1
)
{
...
...
@@ -739,7 +739,7 @@ void vectorMathRemainder(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam
}
double
rx
=
getVectorDoubleValueFnRight
(
pRightCol
->
pData
,
i
);
if
(
compareDoubleVal
(
&
zero
,
&
rx
))
{
if
(
isnan
(
rx
)
||
isinf
(
rx
)
||
FLT_EQUAL
(
rx
,
0
))
{
colDataAppend
(
pOutputCol
,
i
,
NULL
,
true
);
continue
;
}
...
...
@@ -749,17 +749,17 @@ void vectorMathRemainder(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam
}
}
else
if
(
pRight
->
numOfRows
==
1
)
{
double
rx
=
getVectorDoubleValueFnRight
(
pRightCol
->
pData
,
0
);
if
(
colDataIsNull_f
(
pRightCol
->
nullbitmap
,
0
))
{
// Set pLeft->numOfRows NULL value
if
(
colDataIsNull_f
(
pRightCol
->
nullbitmap
,
0
)
||
FLT_EQUAL
(
rx
,
0
)
)
{
// Set pLeft->numOfRows NULL value
// TODO set numOfRows NULL value
}
else
{
for
(;
i
>=
0
&&
i
<
pLeft
->
numOfRows
;
i
+=
step
,
output
+=
1
)
{
if
(
colDataIsNull_f
(
p
Righ
tCol
->
nullbitmap
,
i
))
{
if
(
colDataIsNull_f
(
p
Lef
tCol
->
nullbitmap
,
i
))
{
colDataAppend
(
pOutputCol
,
i
,
NULL
,
true
);
continue
;
}
double
lx
=
getVectorDoubleValueFnLeft
(
p
Righ
tCol
->
pData
,
i
);
if
(
compareDoubleVal
(
&
zero
,
&
lx
))
{
double
lx
=
getVectorDoubleValueFnLeft
(
p
Lef
tCol
->
pData
,
i
);
if
(
isnan
(
lx
)
||
isinf
(
lx
))
{
colDataAppend
(
pOutputCol
,
i
,
NULL
,
true
);
continue
;
}
...
...
source/libs/scheduler/CMakeLists.txt
浏览文件 @
61d8ef38
...
...
@@ -9,7 +9,7 @@ target_include_directories(
target_link_libraries
(
scheduler
PUBLIC os util nodes planner qcom common catalog transport
PUBLIC os util nodes planner qcom common catalog transport
command
)
if
(
${
BUILD_TEST
}
)
...
...
source/libs/scheduler/inc/schedulerInt.h
浏览文件 @
61d8ef38
...
...
@@ -142,10 +142,10 @@ typedef struct SSchTask {
}
SSchTask
;
typedef
struct
SSchJobAttr
{
bool
needFetch
;
bool
syncSchedule
;
bool
queryJob
;
bool
needFlowCtrl
;
EExplainMode
explainMode
;
bool
syncSchedule
;
bool
queryJob
;
bool
needFlowCtrl
;
}
SSchJobAttr
;
typedef
struct
SSchJob
{
...
...
source/libs/scheduler/src/scheduler.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/src/db/tdbBtree.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/src/db/tdbDb.c
浏览文件 @
61d8ef38
...
...
@@ -49,6 +49,8 @@ int tdbDbOpen(const char *fname, int keyLen, int valLen, FKeyComparator keyCmprF
if
(
ret
<
0
)
{
return
-
1
;
}
tdbEnvAddPager
(
pEnv
,
pPager
);
}
ASSERT
(
pPager
!=
NULL
);
...
...
@@ -74,22 +76,7 @@ int tdbDbDrop(TDB *pDb) {
}
int
tdbDbInsert
(
TDB
*
pDb
,
const
void
*
pKey
,
int
keyLen
,
const
void
*
pVal
,
int
valLen
)
{
SBTC
btc
;
SBTC
*
pCur
;
int
ret
;
pCur
=
&
btc
;
ret
=
tdbBtcOpen
(
pCur
,
pDb
->
pBt
);
if
(
ret
<
0
)
{
return
-
1
;
}
ret
=
tdbBtCursorInsert
(
pCur
,
pKey
,
keyLen
,
pVal
,
valLen
);
if
(
ret
<
0
)
{
return
-
1
;
}
return
0
;
return
tdbBtreeInsert
(
pDb
->
pBt
,
pKey
,
keyLen
,
pVal
,
valLen
);
}
int
tdbDbGet
(
TDB
*
pDb
,
const
void
*
pKey
,
int
kLen
,
void
**
ppVal
,
int
*
vLen
)
{
...
...
source/libs/tdb/src/db/tdbEnv.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/src/db/tdbPCache.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/src/db/tdbPager.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/src/db/tdbTxn.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbBtree.h
浏览文件 @
61d8ef38
...
...
@@ -40,7 +40,7 @@ struct SBTC {
// SBTree
int
tdbBtreeOpen
(
int
keyLen
,
int
valLen
,
SPager
*
pFile
,
FKeyComparator
kcmpr
,
SBTree
**
ppBt
);
int
tdbBtreeClose
(
SBTree
*
pBt
);
int
tdbBt
CursorInsert
(
SBTC
*
pCur
,
const
void
*
pKey
,
int
kLen
,
const
void
*
pVal
,
int
vLen
);
int
tdbBt
reeInsert
(
SBTree
*
pBt
,
const
void
*
pKey
,
int
kLen
,
const
void
*
pVal
,
int
vLen
);
int
tdbBtreeGet
(
SBTree
*
pBt
,
const
void
*
pKey
,
int
kLen
,
void
**
ppVal
,
int
*
vLen
);
int
tdbBtreePGet
(
SBTree
*
pBt
,
const
void
*
pKey
,
int
kLen
,
void
**
ppKey
,
int
*
pkLen
,
void
**
ppVal
,
int
*
vLen
);
...
...
source/libs/tdb/src/inc/tdbEnv.h
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbInt.h
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbOs.h
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbPCache.h
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbPage.h
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbPager.h
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbTxn.h
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbUtil.h
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/libs/tdb/test/tdbTest.cpp
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/os/src/osFile.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/os/src/osMemory.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/os/src/osProc.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/util/src/tcompare.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
source/util/src/tconfig.c
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
tests/script/jenkins/basic.txt
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
tests/script/runAllSimCases.sh
0 → 100755
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
tests/script/tsim/db/alter_option.sim
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
tests/script/tsim/db/basic6.sim
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
tests/script/tsim/parser/fourArithmetic-basic.sim
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
tests/script/tsim/parser/groupby-basic.sim
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
tests/script/tsim/query/interval-offset.sim
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
tests/script/tsim/query/scalarFunction.sim
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
tests/script/tsim/tmq/multiTopic.sim
0 → 100644
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
tests/script/tsim/tmq/oneTopic.sim
0 → 100644
浏览文件 @
61d8ef38
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录