Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
c0074588
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
c0074588
编写于
6月 18, 2022
作者:
X
Xiaoyu Wang
提交者:
GitHub
6月 18, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #13984 from taosdata/feature/3.0_debug_wxy
feat: sql command 'show table distributed'
上级
96782388
22d1422b
变更
17
显示空白变更内容
内联
并排
Showing
17 changed file
with
2701 addition
and
2574 deletion
+2701
-2574
include/common/ttokendef.h
include/common/ttokendef.h
+99
-98
include/libs/function/functionMgt.h
include/libs/function/functionMgt.h
+2
-1
include/libs/nodes/cmdnodes.h
include/libs/nodes/cmdnodes.h
+10
-3
include/libs/nodes/nodes.h
include/libs/nodes/nodes.h
+2
-0
include/libs/nodes/plannodes.h
include/libs/nodes/plannodes.h
+18
-16
source/libs/function/src/builtins.c
source/libs/function/src/builtins.c
+11
-0
source/libs/nodes/src/nodesCodeFuncs.c
source/libs/nodes/src/nodesCodeFuncs.c
+4
-0
source/libs/nodes/src/nodesUtilFuncs.c
source/libs/nodes/src/nodesUtilFuncs.c
+17
-7
source/libs/parser/inc/parAst.h
source/libs/parser/inc/parAst.h
+4
-1
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+25
-24
source/libs/parser/src/parAstCreater.c
source/libs/parser/src/parAstCreater.c
+22
-2
source/libs/parser/src/parTokenizer.c
source/libs/parser/src/parTokenizer.c
+1
-2
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+59
-8
source/libs/parser/src/sql.c
source/libs/parser/src/sql.c
+2399
-2396
source/libs/planner/src/planLogicCreater.c
source/libs/planner/src/planLogicCreater.c
+5
-1
source/libs/planner/src/planPhysiCreater.c
source/libs/planner/src/planPhysiCreater.c
+19
-15
source/libs/planner/test/planOtherTest.cpp
source/libs/planner/test/planOtherTest.cpp
+4
-0
未找到文件。
include/common/ttokendef.h
浏览文件 @
c0074588
...
@@ -156,104 +156,105 @@
...
@@ -156,104 +156,105 @@
#define TK_SNODES 138
#define TK_SNODES 138
#define TK_CLUSTER 139
#define TK_CLUSTER 139
#define TK_TRANSACTIONS 140
#define TK_TRANSACTIONS 140
#define TK_LIKE 141
#define TK_DISTRIBUTED 141
#define TK_INDEX 142
#define TK_LIKE 142
#define TK_FULLTEXT 143
#define TK_INDEX 143
#define TK_FUNCTION 144
#define TK_FULLTEXT 144
#define TK_INTERVAL 145
#define TK_FUNCTION 145
#define TK_TOPIC 146
#define TK_INTERVAL 146
#define TK_AS 147
#define TK_TOPIC 147
#define TK_CONSUMER 148
#define TK_AS 148
#define TK_GROUP 149
#define TK_CONSUMER 149
#define TK_DESC 150
#define TK_GROUP 150
#define TK_DESCRIBE 151
#define TK_DESC 151
#define TK_RESET 152
#define TK_DESCRIBE 152
#define TK_QUERY 153
#define TK_RESET 153
#define TK_CACHE 154
#define TK_QUERY 154
#define TK_EXPLAIN 155
#define TK_CACHE 155
#define TK_ANALYZE 156
#define TK_EXPLAIN 156
#define TK_VERBOSE 157
#define TK_ANALYZE 157
#define TK_NK_BOOL 158
#define TK_VERBOSE 158
#define TK_RATIO 159
#define TK_NK_BOOL 159
#define TK_NK_FLOAT 160
#define TK_RATIO 160
#define TK_COMPACT 161
#define TK_NK_FLOAT 161
#define TK_VNODES 162
#define TK_COMPACT 162
#define TK_IN 163
#define TK_VNODES 163
#define TK_OUTPUTTYPE 164
#define TK_IN 164
#define TK_AGGREGATE 165
#define TK_OUTPUTTYPE 165
#define TK_BUFSIZE 166
#define TK_AGGREGATE 166
#define TK_STREAM 167
#define TK_BUFSIZE 167
#define TK_INTO 168
#define TK_STREAM 168
#define TK_TRIGGER 169
#define TK_INTO 169
#define TK_AT_ONCE 170
#define TK_TRIGGER 170
#define TK_WINDOW_CLOSE 171
#define TK_AT_ONCE 171
#define TK_KILL 172
#define TK_WINDOW_CLOSE 172
#define TK_CONNECTION 173
#define TK_KILL 173
#define TK_TRANSACTION 174
#define TK_CONNECTION 174
#define TK_BALANCE 175
#define TK_TRANSACTION 175
#define TK_VGROUP 176
#define TK_BALANCE 176
#define TK_MERGE 177
#define TK_VGROUP 177
#define TK_REDISTRIBUTE 178
#define TK_MERGE 178
#define TK_SPLIT 179
#define TK_REDISTRIBUTE 179
#define TK_SYNCDB 180
#define TK_SPLIT 180
#define TK_DELETE 181
#define TK_SYNCDB 181
#define TK_NULL 182
#define TK_DELETE 182
#define TK_NK_QUESTION 183
#define TK_NULL 183
#define TK_NK_ARROW 184
#define TK_NK_QUESTION 184
#define TK_ROWTS 185
#define TK_NK_ARROW 185
#define TK_TBNAME 186
#define TK_ROWTS 186
#define TK_QSTARTTS 187
#define TK_TBNAME 187
#define TK_QENDTS 188
#define TK_QSTARTTS 188
#define TK_WSTARTTS 189
#define TK_QENDTS 189
#define TK_WENDTS 190
#define TK_WSTARTTS 190
#define TK_WDURATION 191
#define TK_WENDTS 191
#define TK_CAST 192
#define TK_WDURATION 192
#define TK_NOW 193
#define TK_CAST 193
#define TK_TODAY 194
#define TK_NOW 194
#define TK_TIMEZONE 195
#define TK_TODAY 195
#define TK_COUNT 196
#define TK_TIMEZONE 196
#define TK_LAST_ROW 197
#define TK_COUNT 197
#define TK_BETWEEN 198
#define TK_LAST_ROW 198
#define TK_IS 199
#define TK_BETWEEN 199
#define TK_NK_LT 200
#define TK_IS 200
#define TK_NK_GT 201
#define TK_NK_LT 201
#define TK_NK_LE 202
#define TK_NK_GT 202
#define TK_NK_GE 203
#define TK_NK_LE 203
#define TK_NK_NE 204
#define TK_NK_GE 204
#define TK_MATCH 205
#define TK_NK_NE 205
#define TK_NMATCH 206
#define TK_MATCH 206
#define TK_CONTAINS 207
#define TK_NMATCH 207
#define TK_JOIN 208
#define TK_CONTAINS 208
#define TK_INNER 209
#define TK_JOIN 209
#define TK_SELECT 210
#define TK_INNER 210
#define TK_DISTINCT 211
#define TK_SELECT 211
#define TK_WHERE 212
#define TK_DISTINCT 212
#define TK_PARTITION 213
#define TK_WHERE 213
#define TK_BY 214
#define TK_PARTITION 214
#define TK_SESSION 215
#define TK_BY 215
#define TK_STATE_WINDOW 216
#define TK_SESSION 216
#define TK_SLIDING 217
#define TK_STATE_WINDOW 217
#define TK_FILL 218
#define TK_SLIDING 218
#define TK_VALUE 219
#define TK_FILL 219
#define TK_NONE 220
#define TK_VALUE 220
#define TK_PREV 221
#define TK_NONE 221
#define TK_LINEAR 222
#define TK_PREV 222
#define TK_NEXT 223
#define TK_LINEAR 223
#define TK_HAVING 224
#define TK_NEXT 224
#define TK_ORDER 225
#define TK_HAVING 225
#define TK_SLIMIT 226
#define TK_ORDER 226
#define TK_SOFFSET 227
#define TK_SLIMIT 227
#define TK_LIMIT 228
#define TK_SOFFSET 228
#define TK_OFFSET 229
#define TK_LIMIT 229
#define TK_ASC 230
#define TK_OFFSET 230
#define TK_NULLS 231
#define TK_ASC 231
#define TK_ID 232
#define TK_NULLS 232
#define TK_NK_BITNOT 233
#define TK_ID 233
#define TK_INSERT 234
#define TK_NK_BITNOT 234
#define TK_VALUES 235
#define TK_INSERT 235
#define TK_IMPORT 236
#define TK_VALUES 236
#define TK_NK_SEMI 237
#define TK_IMPORT 237
#define TK_FILE 238
#define TK_NK_SEMI 238
#define TK_FILE 239
#define TK_NK_SPACE 300
#define TK_NK_SPACE 300
#define TK_NK_COMMENT 301
#define TK_NK_COMMENT 301
...
...
include/libs/function/functionMgt.h
浏览文件 @
c0074588
...
@@ -122,6 +122,7 @@ typedef enum EFunctionType {
...
@@ -122,6 +122,7 @@ typedef enum EFunctionType {
// internal function
// internal function
FUNCTION_TYPE_SELECT_VALUE
,
FUNCTION_TYPE_SELECT_VALUE
,
FUNCTION_TYPE_BLOCK_DIST
,
// block distribution aggregate function
FUNCTION_TYPE_BLOCK_DIST
,
// block distribution aggregate function
FUNCTION_TYPE_BLOCK_DIST_INFO
,
// block distribution pseudo column function
// distributed splitting functions
// distributed splitting functions
FUNCTION_TYPE_APERCENTILE_PARTIAL
=
4000
,
FUNCTION_TYPE_APERCENTILE_PARTIAL
=
4000
,
...
...
include/libs/nodes/cmdnodes.h
浏览文件 @
c0074588
...
@@ -205,7 +205,8 @@ typedef struct SAlterDnodeStmt {
...
@@ -205,7 +205,8 @@ typedef struct SAlterDnodeStmt {
typedef
struct
SShowStmt
{
typedef
struct
SShowStmt
{
ENodeType
type
;
ENodeType
type
;
SNode
*
pDbName
;
// SValueNode
SNode
*
pDbName
;
// SValueNode
SNode
*
pTbNamePattern
;
// SValueNode
SNode
*
pTbName
;
// SValueNode
EOperatorType
tableCondType
;
}
SShowStmt
;
}
SShowStmt
;
typedef
struct
SShowCreateDatabaseStmt
{
typedef
struct
SShowCreateDatabaseStmt
{
...
@@ -221,6 +222,12 @@ typedef struct SShowCreateTableStmt {
...
@@ -221,6 +222,12 @@ typedef struct SShowCreateTableStmt {
STableMeta
*
pMeta
;
STableMeta
*
pMeta
;
}
SShowCreateTableStmt
;
}
SShowCreateTableStmt
;
typedef
struct
SShowTableDistributedStmt
{
ENodeType
type
;
char
dbName
[
TSDB_DB_NAME_LEN
];
char
tableName
[
TSDB_TABLE_NAME_LEN
];
}
SShowTableDistributedStmt
;
typedef
enum
EIndexType
{
INDEX_TYPE_SMA
=
1
,
INDEX_TYPE_FULLTEXT
}
EIndexType
;
typedef
enum
EIndexType
{
INDEX_TYPE_SMA
=
1
,
INDEX_TYPE_FULLTEXT
}
EIndexType
;
typedef
struct
SIndexOptions
{
typedef
struct
SIndexOptions
{
...
...
include/libs/nodes/nodes.h
浏览文件 @
c0074588
...
@@ -185,6 +185,7 @@ typedef enum ENodeType {
...
@@ -185,6 +185,7 @@ typedef enum ENodeType {
QUERY_NODE_SHOW_CREATE_TABLE_STMT
,
QUERY_NODE_SHOW_CREATE_TABLE_STMT
,
QUERY_NODE_SHOW_CREATE_STABLE_STMT
,
QUERY_NODE_SHOW_CREATE_STABLE_STMT
,
QUERY_NODE_SHOW_TRANSACTIONS_STMT
,
QUERY_NODE_SHOW_TRANSACTIONS_STMT
,
QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT
,
QUERY_NODE_KILL_CONNECTION_STMT
,
QUERY_NODE_KILL_CONNECTION_STMT
,
QUERY_NODE_KILL_QUERY_STMT
,
QUERY_NODE_KILL_QUERY_STMT
,
QUERY_NODE_KILL_TRANSACTION_STMT
,
QUERY_NODE_KILL_TRANSACTION_STMT
,
...
@@ -214,6 +215,7 @@ typedef enum ENodeType {
...
@@ -214,6 +215,7 @@ typedef enum ENodeType {
QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN
,
QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN
,
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
,
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
,
QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN
,
QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN
,
QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN
,
QUERY_NODE_PHYSICAL_PLAN_PROJECT
,
QUERY_NODE_PHYSICAL_PLAN_PROJECT
,
QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN
,
QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN
,
QUERY_NODE_PHYSICAL_PLAN_HASH_AGG
,
QUERY_NODE_PHYSICAL_PLAN_HASH_AGG
,
...
...
include/libs/nodes/plannodes.h
浏览文件 @
c0074588
...
@@ -39,7 +39,8 @@ typedef enum EScanType {
...
@@ -39,7 +39,8 @@ typedef enum EScanType {
SCAN_TYPE_TABLE
,
SCAN_TYPE_TABLE
,
SCAN_TYPE_SYSTEM_TABLE
,
SCAN_TYPE_SYSTEM_TABLE
,
SCAN_TYPE_STREAM
,
SCAN_TYPE_STREAM
,
SCAN_TYPE_TABLE_MERGE
SCAN_TYPE_TABLE_MERGE
,
SCAN_TYPE_BLOCK_INFO
}
EScanType
;
}
EScanType
;
typedef
struct
SScanLogicNode
{
typedef
struct
SScanLogicNode
{
...
@@ -247,6 +248,7 @@ typedef struct SScanPhysiNode {
...
@@ -247,6 +248,7 @@ typedef struct SScanPhysiNode {
}
SScanPhysiNode
;
}
SScanPhysiNode
;
typedef
SScanPhysiNode
STagScanPhysiNode
;
typedef
SScanPhysiNode
STagScanPhysiNode
;
typedef
SScanPhysiNode
SBlockDistScanPhysiNode
;
typedef
struct
SSystemTableScanPhysiNode
{
typedef
struct
SSystemTableScanPhysiNode
{
SScanPhysiNode
scan
;
SScanPhysiNode
scan
;
...
...
source/libs/function/src/builtins.c
浏览文件 @
c0074588
...
@@ -1508,6 +1508,11 @@ static int32_t translateBlockDistFunc(SFunctionNode* pFunc, char* pErrBuf, int32
...
@@ -1508,6 +1508,11 @@ static int32_t translateBlockDistFunc(SFunctionNode* pFunc, char* pErrBuf, int32
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
translateBlockDistInfoFunc
(
SFunctionNode
*
pFunc
,
char
*
pErrBuf
,
int32_t
len
)
{
pFunc
->
node
.
resType
=
(
SDataType
){.
bytes
=
128
,
.
type
=
TSDB_DATA_TYPE_VARCHAR
};
return
TSDB_CODE_SUCCESS
;
}
static
bool
getBlockDistFuncEnv
(
SFunctionNode
*
UNUSED_PARAM
(
pFunc
),
SFuncExecEnv
*
pEnv
)
{
static
bool
getBlockDistFuncEnv
(
SFunctionNode
*
UNUSED_PARAM
(
pFunc
),
SFuncExecEnv
*
pEnv
)
{
pEnv
->
calcMemSize
=
sizeof
(
STableBlockDistInfo
);
pEnv
->
calcMemSize
=
sizeof
(
STableBlockDistInfo
);
return
true
;
return
true
;
...
@@ -2520,6 +2525,12 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
...
@@ -2520,6 +2525,12 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
.
getEnvFunc
=
getBlockDistFuncEnv
,
.
getEnvFunc
=
getBlockDistFuncEnv
,
.
processFunc
=
blockDistFunction
,
.
processFunc
=
blockDistFunction
,
.
finalizeFunc
=
blockDistFinalize
.
finalizeFunc
=
blockDistFinalize
},
{
.
name
=
"_block_dist_info"
,
.
type
=
FUNCTION_TYPE_BLOCK_DIST_INFO
,
.
classification
=
FUNC_MGT_PSEUDO_COLUMN_FUNC
|
FUNC_MGT_SCAN_PC_FUNC
,
.
translateFunc
=
translateBlockDistInfoFunc
,
}
}
};
};
// clang-format on
// clang-format on
...
...
source/libs/nodes/src/nodesCodeFuncs.c
浏览文件 @
c0074588
...
@@ -216,6 +216,8 @@ const char* nodesNodeName(ENodeType type) {
...
@@ -216,6 +216,8 @@ const char* nodesNodeName(ENodeType type) {
return
"PhysiSreamScan"
;
return
"PhysiSreamScan"
;
case
QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN
:
return
"PhysiSystemTableScan"
;
return
"PhysiSystemTableScan"
;
case
QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN
:
return
"PhysiBlockDistScan"
;
case
QUERY_NODE_PHYSICAL_PLAN_PROJECT
:
case
QUERY_NODE_PHYSICAL_PLAN_PROJECT
:
return
"PhysiProject"
;
return
"PhysiProject"
;
case
QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN
:
case
QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN
:
...
@@ -3971,6 +3973,7 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
...
@@ -3971,6 +3973,7 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
case
QUERY_NODE_LOGIC_PLAN
:
case
QUERY_NODE_LOGIC_PLAN
:
return
logicPlanToJson
(
pObj
,
pJson
);
return
logicPlanToJson
(
pObj
,
pJson
);
case
QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN
:
return
physiTagScanNodeToJson
(
pObj
,
pJson
);
return
physiTagScanNodeToJson
(
pObj
,
pJson
);
case
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN
:
...
@@ -4106,6 +4109,7 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
...
@@ -4106,6 +4109,7 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
case
QUERY_NODE_LOGIC_PLAN
:
case
QUERY_NODE_LOGIC_PLAN
:
return
jsonToLogicPlan
(
pJson
,
pObj
);
return
jsonToLogicPlan
(
pJson
,
pObj
);
case
QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN
:
return
jsonToPhysiTagScanNode
(
pJson
,
pObj
);
return
jsonToPhysiTagScanNode
(
pJson
,
pObj
);
case
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN
:
...
...
source/libs/nodes/src/nodesUtilFuncs.c
浏览文件 @
c0074588
...
@@ -215,6 +215,8 @@ SNode* nodesMakeNode(ENodeType type) {
...
@@ -215,6 +215,8 @@ SNode* nodesMakeNode(ENodeType type) {
case
QUERY_NODE_SHOW_CREATE_TABLE_STMT
:
case
QUERY_NODE_SHOW_CREATE_TABLE_STMT
:
case
QUERY_NODE_SHOW_CREATE_STABLE_STMT
:
case
QUERY_NODE_SHOW_CREATE_STABLE_STMT
:
return
makeNode
(
type
,
sizeof
(
SShowCreateTableStmt
));
return
makeNode
(
type
,
sizeof
(
SShowCreateTableStmt
));
case
QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT
:
return
makeNode
(
type
,
sizeof
(
SShowTableDistributedStmt
));
case
QUERY_NODE_KILL_QUERY_STMT
:
case
QUERY_NODE_KILL_QUERY_STMT
:
return
makeNode
(
type
,
sizeof
(
SKillQueryStmt
));
return
makeNode
(
type
,
sizeof
(
SKillQueryStmt
));
case
QUERY_NODE_KILL_TRANSACTION_STMT
:
case
QUERY_NODE_KILL_TRANSACTION_STMT
:
...
@@ -264,6 +266,8 @@ SNode* nodesMakeNode(ENodeType type) {
...
@@ -264,6 +266,8 @@ SNode* nodesMakeNode(ENodeType type) {
return
makeNode
(
type
,
sizeof
(
SStreamScanPhysiNode
));
return
makeNode
(
type
,
sizeof
(
SStreamScanPhysiNode
));
case
QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN
:
return
makeNode
(
type
,
sizeof
(
SSystemTableScanPhysiNode
));
return
makeNode
(
type
,
sizeof
(
SSystemTableScanPhysiNode
));
case
QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN
:
return
makeNode
(
type
,
sizeof
(
SBlockDistScanPhysiNode
));
case
QUERY_NODE_PHYSICAL_PLAN_PROJECT
:
case
QUERY_NODE_PHYSICAL_PLAN_PROJECT
:
return
makeNode
(
type
,
sizeof
(
SProjectPhysiNode
));
return
makeNode
(
type
,
sizeof
(
SProjectPhysiNode
));
case
QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN
:
case
QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN
:
...
@@ -628,15 +632,20 @@ void nodesDestroyNode(SNode* pNode) {
...
@@ -628,15 +632,20 @@ void nodesDestroyNode(SNode* pNode) {
case
QUERY_NODE_SHOW_APPS_STMT
:
case
QUERY_NODE_SHOW_APPS_STMT
:
case
QUERY_NODE_SHOW_SCORES_STMT
:
case
QUERY_NODE_SHOW_SCORES_STMT
:
case
QUERY_NODE_SHOW_VARIABLE_STMT
:
case
QUERY_NODE_SHOW_VARIABLE_STMT
:
case
QUERY_NODE_SHOW_CREATE_DATABASE_STMT
:
case
QUERY_NODE_SHOW_CREATE_TABLE_STMT
:
case
QUERY_NODE_SHOW_CREATE_STABLE_STMT
:
case
QUERY_NODE_SHOW_TRANSACTIONS_STMT
:
{
case
QUERY_NODE_SHOW_TRANSACTIONS_STMT
:
{
SShowStmt
*
pStmt
=
(
SShowStmt
*
)
pNode
;
SShowStmt
*
pStmt
=
(
SShowStmt
*
)
pNode
;
nodesDestroyNode
(
pStmt
->
pDbName
);
nodesDestroyNode
(
pStmt
->
pDbName
);
nodesDestroyNode
(
pStmt
->
pTbName
Pattern
);
nodesDestroyNode
(
pStmt
->
pTbName
);
break
;
break
;
}
}
case
QUERY_NODE_SHOW_CREATE_DATABASE_STMT
:
taosMemoryFreeClear
(((
SShowCreateDatabaseStmt
*
)
pNode
)
->
pCfg
);
break
;
case
QUERY_NODE_SHOW_CREATE_TABLE_STMT
:
case
QUERY_NODE_SHOW_CREATE_STABLE_STMT
:
taosMemoryFreeClear
(((
SShowCreateTableStmt
*
)
pNode
)
->
pMeta
);
break
;
case
QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT
:
// no pointer field
case
QUERY_NODE_KILL_CONNECTION_STMT
:
// no pointer field
case
QUERY_NODE_KILL_CONNECTION_STMT
:
// no pointer field
case
QUERY_NODE_KILL_QUERY_STMT
:
// no pointer field
case
QUERY_NODE_KILL_QUERY_STMT
:
// no pointer field
case
QUERY_NODE_KILL_TRANSACTION_STMT
:
// no pointer field
case
QUERY_NODE_KILL_TRANSACTION_STMT
:
// no pointer field
...
@@ -752,6 +761,7 @@ void nodesDestroyNode(SNode* pNode) {
...
@@ -752,6 +761,7 @@ void nodesDestroyNode(SNode* pNode) {
case
QUERY_NODE_PHYSICAL_PLAN_TABLE_SEQ_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_TABLE_SEQ_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN
:
case
QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN
:
destroyScanPhysiNode
((
SScanPhysiNode
*
)
pNode
);
destroyScanPhysiNode
((
SScanPhysiNode
*
)
pNode
);
break
;
break
;
case
QUERY_NODE_PHYSICAL_PLAN_PROJECT
:
{
case
QUERY_NODE_PHYSICAL_PLAN_PROJECT
:
{
...
...
source/libs/parser/inc/parAst.h
浏览文件 @
c0074588
...
@@ -151,9 +151,12 @@ SNode* createAlterTableRenameCol(SAstCreateContext* pCxt, SNode* pRealTable, int
...
@@ -151,9 +151,12 @@ SNode* createAlterTableRenameCol(SAstCreateContext* pCxt, SNode* pRealTable, int
SToken
*
pNewColName
);
SToken
*
pNewColName
);
SNode
*
createAlterTableSetTag
(
SAstCreateContext
*
pCxt
,
SNode
*
pRealTable
,
SToken
*
pTagName
,
SNode
*
pVal
);
SNode
*
createAlterTableSetTag
(
SAstCreateContext
*
pCxt
,
SNode
*
pRealTable
,
SToken
*
pTagName
,
SNode
*
pVal
);
SNode
*
createUseDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
);
SNode
*
createUseDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
);
SNode
*
createShowStmt
(
SAstCreateContext
*
pCxt
,
ENodeType
type
,
SNode
*
pDbName
,
SNode
*
pTbNamePattern
);
SNode
*
createShowStmt
(
SAstCreateContext
*
pCxt
,
ENodeType
type
);
SNode
*
createShowStmtWithCond
(
SAstCreateContext
*
pCxt
,
ENodeType
type
,
SNode
*
pDbName
,
SNode
*
pTbName
,
EOperatorType
tableCondType
);
SNode
*
createShowCreateDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
);
SNode
*
createShowCreateDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
);
SNode
*
createShowCreateTableStmt
(
SAstCreateContext
*
pCxt
,
ENodeType
type
,
SNode
*
pRealTable
);
SNode
*
createShowCreateTableStmt
(
SAstCreateContext
*
pCxt
,
ENodeType
type
,
SNode
*
pRealTable
);
SNode
*
createShowTableDistributedStmt
(
SAstCreateContext
*
pCxt
,
SNode
*
pRealTable
);
SNode
*
createCreateUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
,
const
SToken
*
pPassword
);
SNode
*
createCreateUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
,
const
SToken
*
pPassword
);
SNode
*
createAlterUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
,
int8_t
alterType
,
const
SToken
*
pVal
);
SNode
*
createAlterUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
,
int8_t
alterType
,
const
SToken
*
pVal
);
SNode
*
createDropUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
);
SNode
*
createDropUserStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pUserName
);
...
...
source/libs/parser/inc/sql.y
浏览文件 @
c0074588
...
@@ -350,34 +350,35 @@ col_name_list(A) ::= col_name_list(B) NK_COMMA col_name(C).
...
@@ -350,34 +350,35 @@ col_name_list(A) ::= col_name_list(B) NK_COMMA col_name(C).
col_name(A) ::= column_name(B). { A = createColumnNode(pCxt, NULL, &B); }
col_name(A) ::= column_name(B). { A = createColumnNode(pCxt, NULL, &B); }
/************************************************ show ****************************************************************/
/************************************************ show ****************************************************************/
cmd ::= SHOW DNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT
, NULL, NULL
); }
cmd ::= SHOW DNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT); }
cmd ::= SHOW USERS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USERS_STMT
, NULL, NULL
); }
cmd ::= SHOW USERS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USERS_STMT); }
cmd ::= SHOW DATABASES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT
, NULL, NULL
); }
cmd ::= SHOW DATABASES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT); }
cmd ::= SHOW db_name_cond_opt(A) TABLES like_pattern_opt(B). { pCxt->pRootNode = createShowStmt
(pCxt, QUERY_NODE_SHOW_TABLES_STMT, A, B
); }
cmd ::= SHOW db_name_cond_opt(A) TABLES like_pattern_opt(B). { pCxt->pRootNode = createShowStmt
WithCond(pCxt, QUERY_NODE_SHOW_TABLES_STMT, A, B, OP_TYPE_LIKE
); }
cmd ::= SHOW db_name_cond_opt(A) STABLES like_pattern_opt(B). { pCxt->pRootNode = createShowStmt
(pCxt, QUERY_NODE_SHOW_STABLES_STMT, A, B
); }
cmd ::= SHOW db_name_cond_opt(A) STABLES like_pattern_opt(B). { pCxt->pRootNode = createShowStmt
WithCond(pCxt, QUERY_NODE_SHOW_STABLES_STMT, A, B, OP_TYPE_LIKE
); }
cmd ::= SHOW db_name_cond_opt(A) VGROUPS. { pCxt->pRootNode = createShowStmt
(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, A, NULL
); }
cmd ::= SHOW db_name_cond_opt(A) VGROUPS. { pCxt->pRootNode = createShowStmt
WithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, A, NULL, OP_TYPE_LIKE
); }
cmd ::= SHOW MNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MNODES_STMT
, NULL, NULL
); }
cmd ::= SHOW MNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MNODES_STMT); }
cmd ::= SHOW MODULES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MODULES_STMT
, NULL, NULL
); }
cmd ::= SHOW MODULES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MODULES_STMT); }
cmd ::= SHOW QNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QNODES_STMT
, NULL, NULL
); }
cmd ::= SHOW QNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QNODES_STMT); }
cmd ::= SHOW FUNCTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_FUNCTIONS_STMT
, NULL, NULL
); }
cmd ::= SHOW FUNCTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_FUNCTIONS_STMT); }
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 INDEXES FROM table_name_cond(A) from_db_opt(B). { pCxt->pRootNode = createShowStmt
WithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, B, A, OP_TYPE_EQUAL
); }
cmd ::= SHOW STREAMS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_STREAMS_STMT
, NULL, NULL
); }
cmd ::= SHOW STREAMS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_STREAMS_STMT); }
cmd ::= SHOW ACCOUNTS. { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
cmd ::= SHOW ACCOUNTS. { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
cmd ::= SHOW APPS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_APPS_STMT
, NULL, NULL
); }
cmd ::= SHOW APPS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_APPS_STMT); }
cmd ::= SHOW CONNECTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT
, NULL, NULL
); }
cmd ::= SHOW CONNECTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); }
cmd ::= SHOW LICENCE. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCE_STMT
, NULL, NULL
); }
cmd ::= SHOW LICENCE. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCE_STMT); }
cmd ::= SHOW GRANTS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCE_STMT
, NULL, NULL
); }
cmd ::= SHOW GRANTS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCE_STMT); }
cmd ::= SHOW CREATE DATABASE db_name(A). { pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &A); }
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 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 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 QUERIES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); }
cmd ::= SHOW SCORES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT, NULL, NULL); }
cmd ::= SHOW SCORES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT); }
cmd ::= SHOW TOPICS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT, NULL, NULL); }
cmd ::= SHOW TOPICS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT); }
cmd ::= SHOW VARIABLES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_VARIABLE_STMT, NULL, NULL); }
cmd ::= SHOW VARIABLES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_VARIABLE_STMT); }
cmd ::= SHOW BNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT, NULL, NULL); }
cmd ::= SHOW BNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT); }
cmd ::= SHOW SNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT, NULL, NULL); }
cmd ::= SHOW SNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT); }
cmd ::= SHOW CLUSTER. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_STMT, NULL, NULL); }
cmd ::= SHOW CLUSTER. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_STMT); }
cmd ::= SHOW TRANSACTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TRANSACTIONS_STMT, NULL, NULL); }
cmd ::= SHOW TRANSACTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TRANSACTIONS_STMT); }
cmd ::= SHOW TABLE DISTRIBUTED full_table_name(A). { pCxt->pRootNode = createShowTableDistributedStmt(pCxt, A); }
db_name_cond_opt(A) ::= . { A = createDefaultDatabaseCondValue(pCxt); }
db_name_cond_opt(A) ::= . { A = createDefaultDatabaseCondValue(pCxt); }
db_name_cond_opt(A) ::= db_name(B) NK_DOT. { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
db_name_cond_opt(A) ::= db_name(B) NK_DOT. { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
...
...
source/libs/parser/src/parAstCreater.c
浏览文件 @
c0074588
...
@@ -1100,7 +1100,15 @@ static bool needDbShowStmt(ENodeType type) {
...
@@ -1100,7 +1100,15 @@ static bool needDbShowStmt(ENodeType type) {
QUERY_NODE_SHOW_VGROUPS_STMT
==
type
;
QUERY_NODE_SHOW_VGROUPS_STMT
==
type
;
}
}
SNode
*
createShowStmt
(
SAstCreateContext
*
pCxt
,
ENodeType
type
,
SNode
*
pDbName
,
SNode
*
pTbNamePattern
)
{
SNode
*
createShowStmt
(
SAstCreateContext
*
pCxt
,
ENodeType
type
)
{
CHECK_PARSER_STATUS
(
pCxt
);
SShowStmt
*
pStmt
=
(
SShowStmt
*
)
nodesMakeNode
(
type
);
CHECK_OUT_OF_MEM
(
pStmt
);
return
(
SNode
*
)
pStmt
;
}
SNode
*
createShowStmtWithCond
(
SAstCreateContext
*
pCxt
,
ENodeType
type
,
SNode
*
pDbName
,
SNode
*
pTbName
,
EOperatorType
tableCondType
)
{
CHECK_PARSER_STATUS
(
pCxt
);
CHECK_PARSER_STATUS
(
pCxt
);
if
(
needDbShowStmt
(
type
)
&&
NULL
==
pDbName
&&
NULL
==
pCxt
->
pQueryCxt
->
db
)
{
if
(
needDbShowStmt
(
type
)
&&
NULL
==
pDbName
&&
NULL
==
pCxt
->
pQueryCxt
->
db
)
{
snprintf
(
pCxt
->
pQueryCxt
->
pMsg
,
pCxt
->
pQueryCxt
->
msgLen
,
"db not specified"
);
snprintf
(
pCxt
->
pQueryCxt
->
pMsg
,
pCxt
->
pQueryCxt
->
msgLen
,
"db not specified"
);
...
@@ -1110,7 +1118,8 @@ SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type, SNode* pDbName, S
...
@@ -1110,7 +1118,8 @@ SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type, SNode* pDbName, S
SShowStmt
*
pStmt
=
(
SShowStmt
*
)
nodesMakeNode
(
type
);
SShowStmt
*
pStmt
=
(
SShowStmt
*
)
nodesMakeNode
(
type
);
CHECK_OUT_OF_MEM
(
pStmt
);
CHECK_OUT_OF_MEM
(
pStmt
);
pStmt
->
pDbName
=
pDbName
;
pStmt
->
pDbName
=
pDbName
;
pStmt
->
pTbNamePattern
=
pTbNamePattern
;
pStmt
->
pTbName
=
pTbName
;
pStmt
->
tableCondType
=
tableCondType
;
return
(
SNode
*
)
pStmt
;
return
(
SNode
*
)
pStmt
;
}
}
...
@@ -1131,6 +1140,17 @@ SNode* createShowCreateTableStmt(SAstCreateContext* pCxt, ENodeType type, SNode*
...
@@ -1131,6 +1140,17 @@ SNode* createShowCreateTableStmt(SAstCreateContext* pCxt, ENodeType type, SNode*
CHECK_OUT_OF_MEM
(
pStmt
);
CHECK_OUT_OF_MEM
(
pStmt
);
strcpy
(
pStmt
->
dbName
,
((
SRealTableNode
*
)
pRealTable
)
->
table
.
dbName
);
strcpy
(
pStmt
->
dbName
,
((
SRealTableNode
*
)
pRealTable
)
->
table
.
dbName
);
strcpy
(
pStmt
->
tableName
,
((
SRealTableNode
*
)
pRealTable
)
->
table
.
tableName
);
strcpy
(
pStmt
->
tableName
,
((
SRealTableNode
*
)
pRealTable
)
->
table
.
tableName
);
nodesDestroyNode
(
pRealTable
);
return
(
SNode
*
)
pStmt
;
}
SNode
*
createShowTableDistributedStmt
(
SAstCreateContext
*
pCxt
,
SNode
*
pRealTable
)
{
CHECK_PARSER_STATUS
(
pCxt
);
SShowTableDistributedStmt
*
pStmt
=
(
SShowTableDistributedStmt
*
)
nodesMakeNode
(
QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
strcpy
(
pStmt
->
dbName
,
((
SRealTableNode
*
)
pRealTable
)
->
table
.
dbName
);
strcpy
(
pStmt
->
tableName
,
((
SRealTableNode
*
)
pRealTable
)
->
table
.
tableName
);
nodesDestroyNode
(
pRealTable
);
return
(
SNode
*
)
pStmt
;
return
(
SNode
*
)
pStmt
;
}
}
...
...
source/libs/parser/src/parTokenizer.c
浏览文件 @
c0074588
...
@@ -68,12 +68,12 @@ static SKeyword keywordTable[] = {
...
@@ -68,12 +68,12 @@ static SKeyword keywordTable[] = {
{
"CONTAINS"
,
TK_CONTAINS
},
{
"CONTAINS"
,
TK_CONTAINS
},
{
"DATABASE"
,
TK_DATABASE
},
{
"DATABASE"
,
TK_DATABASE
},
{
"DATABASES"
,
TK_DATABASES
},
{
"DATABASES"
,
TK_DATABASES
},
// {"DAYS", TK_DAYS},
{
"DBS"
,
TK_DBS
},
{
"DBS"
,
TK_DBS
},
{
"DELETE"
,
TK_DELETE
},
{
"DELETE"
,
TK_DELETE
},
{
"DESC"
,
TK_DESC
},
{
"DESC"
,
TK_DESC
},
{
"DESCRIBE"
,
TK_DESCRIBE
},
{
"DESCRIBE"
,
TK_DESCRIBE
},
{
"DISTINCT"
,
TK_DISTINCT
},
{
"DISTINCT"
,
TK_DISTINCT
},
{
"DISTRIBUTED"
,
TK_DISTRIBUTED
},
{
"DNODE"
,
TK_DNODE
},
{
"DNODE"
,
TK_DNODE
},
{
"DNODES"
,
TK_DNODES
},
{
"DNODES"
,
TK_DNODES
},
{
"DOUBLE"
,
TK_DOUBLE
},
{
"DOUBLE"
,
TK_DOUBLE
},
...
@@ -81,7 +81,6 @@ static SKeyword keywordTable[] = {
...
@@ -81,7 +81,6 @@ static SKeyword keywordTable[] = {
{
"DURATION"
,
TK_DURATION
},
{
"DURATION"
,
TK_DURATION
},
{
"EXISTS"
,
TK_EXISTS
},
{
"EXISTS"
,
TK_EXISTS
},
{
"EXPLAIN"
,
TK_EXPLAIN
},
{
"EXPLAIN"
,
TK_EXPLAIN
},
// {"FILE_FACTOR", TK_FILE_FACTOR},
{
"FILL"
,
TK_FILL
},
{
"FILL"
,
TK_FILL
},
{
"FIRST"
,
TK_FIRST
},
{
"FIRST"
,
TK_FIRST
},
{
"FLOAT"
,
TK_FLOAT
},
{
"FLOAT"
,
TK_FLOAT
},
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
c0074588
...
@@ -4534,28 +4534,36 @@ static const char* getSysTableName(ENodeType type) {
...
@@ -4534,28 +4534,36 @@ static const char* getSysTableName(ENodeType type) {
return
NULL
;
return
NULL
;
}
}
static
int32_t
createS
electStmtForShow
(
ENodeType
showTyp
e
,
SSelectStmt
**
pStmt
)
{
static
int32_t
createS
impleSelectStmt
(
const
char
*
pDb
,
const
char
*
pTabl
e
,
SSelectStmt
**
pStmt
)
{
SSelectStmt
*
pSelect
=
(
SSelectStmt
*
)
nodesMakeNode
(
QUERY_NODE_SELECT_STMT
);
SSelectStmt
*
pSelect
=
(
SSelectStmt
*
)
nodesMakeNode
(
QUERY_NODE_SELECT_STMT
);
if
(
NULL
==
pSelect
)
{
if
(
NULL
==
pSelect
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
sprintf
(
pSelect
->
stmtName
,
"%p"
,
pSelect
);
sprintf
(
pSelect
->
stmtName
,
"%p"
,
pSelect
);
SRealTableNode
*
pTable
=
(
SRealTableNode
*
)
nodesMakeNode
(
QUERY_NODE_REAL_TABLE
);
SRealTableNode
*
p
Real
Table
=
(
SRealTableNode
*
)
nodesMakeNode
(
QUERY_NODE_REAL_TABLE
);
if
(
NULL
==
pTable
)
{
if
(
NULL
==
p
Real
Table
)
{
nodesDestroyNode
((
SNode
*
)
pSelect
);
nodesDestroyNode
((
SNode
*
)
pSelect
);
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
strcpy
(
p
Table
->
table
.
dbName
,
getSysDbName
(
showType
)
);
strcpy
(
p
RealTable
->
table
.
dbName
,
pDb
);
strcpy
(
p
Table
->
table
.
tableName
,
getSysTableName
(
showType
)
);
strcpy
(
p
RealTable
->
table
.
tableName
,
pTable
);
strcpy
(
p
Table
->
table
.
tableAlias
,
pTable
->
table
.
tableNam
e
);
strcpy
(
p
RealTable
->
table
.
tableAlias
,
pTabl
e
);
pSelect
->
pFromTable
=
(
SNode
*
)
pTable
;
pSelect
->
pFromTable
=
(
SNode
*
)
p
Real
Table
;
*
pStmt
=
pSelect
;
*
pStmt
=
pSelect
;
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
int32_t
createSelectStmtForShow
(
ENodeType
showType
,
SSelectStmt
**
pStmt
)
{
return
createSimpleSelectStmt
(
getSysDbName
(
showType
),
getSysTableName
(
showType
),
pStmt
);
}
static
int32_t
createSelectStmtForShowTableDist
(
SShowTableDistributedStmt
*
pStmt
,
SSelectStmt
**
pOutput
)
{
return
createSimpleSelectStmt
(
pStmt
->
dbName
,
pStmt
->
tableName
,
pOutput
);
}
static
int32_t
createOperatorNode
(
EOperatorType
opType
,
const
char
*
pColName
,
SNode
*
pRight
,
SNode
**
pOp
)
{
static
int32_t
createOperatorNode
(
EOperatorType
opType
,
const
char
*
pColName
,
SNode
*
pRight
,
SNode
**
pOp
)
{
if
(
NULL
==
pRight
)
{
if
(
NULL
==
pRight
)
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
...
@@ -4609,7 +4617,7 @@ static int32_t createShowCondition(const SShowStmt* pShow, SSelectStmt* pSelect)
...
@@ -4609,7 +4617,7 @@ static int32_t createShowCondition(const SShowStmt* pShow, SSelectStmt* pSelect)
SNode
*
pTbCond
=
NULL
;
SNode
*
pTbCond
=
NULL
;
if
(
TSDB_CODE_SUCCESS
!=
createOperatorNode
(
OP_TYPE_EQUAL
,
"db_name"
,
pShow
->
pDbName
,
&
pDbCond
)
||
if
(
TSDB_CODE_SUCCESS
!=
createOperatorNode
(
OP_TYPE_EQUAL
,
"db_name"
,
pShow
->
pDbName
,
&
pDbCond
)
||
TSDB_CODE_SUCCESS
!=
TSDB_CODE_SUCCESS
!=
createOperatorNode
(
OP_TYPE_LIKE
,
getTbNameColName
(
nodeType
(
pShow
)),
pShow
->
pTbNamePattern
,
&
pTbCond
))
{
createOperatorNode
(
pShow
->
tableCondType
,
getTbNameColName
(
nodeType
(
pShow
)),
pShow
->
pTbName
,
&
pTbCond
))
{
nodesDestroyNode
(
pDbCond
);
nodesDestroyNode
(
pDbCond
);
nodesDestroyNode
(
pTbCond
);
nodesDestroyNode
(
pTbCond
);
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
...
@@ -4646,6 +4654,46 @@ static int32_t rewriteShow(STranslateContext* pCxt, SQuery* pQuery) {
...
@@ -4646,6 +4654,46 @@ static int32_t rewriteShow(STranslateContext* pCxt, SQuery* pQuery) {
return
code
;
return
code
;
}
}
static
SNode
*
createBlockDistInfoFunc
()
{
SFunctionNode
*
pFunc
=
(
SFunctionNode
*
)
nodesMakeNode
(
QUERY_NODE_FUNCTION
);
if
(
NULL
==
pFunc
)
{
return
NULL
;
}
strcpy
(
pFunc
->
functionName
,
"_block_dist_info"
);
strcpy
(
pFunc
->
node
.
aliasName
,
"_block_dist_info"
);
return
(
SNode
*
)
pFunc
;
}
static
SNode
*
createBlockDistFunc
()
{
SFunctionNode
*
pFunc
=
(
SFunctionNode
*
)
nodesMakeNode
(
QUERY_NODE_FUNCTION
);
if
(
NULL
==
pFunc
)
{
return
NULL
;
}
strcpy
(
pFunc
->
functionName
,
"_block_dist"
);
strcpy
(
pFunc
->
node
.
aliasName
,
"_block_dist"
);
if
(
TSDB_CODE_SUCCESS
!=
nodesListMakeStrictAppend
(
&
pFunc
->
pParameterList
,
createBlockDistInfoFunc
()))
{
nodesDestroyNode
((
SNode
*
)
pFunc
);
return
NULL
;
}
return
(
SNode
*
)
pFunc
;
}
static
int32_t
rewriteShowTableDist
(
STranslateContext
*
pCxt
,
SQuery
*
pQuery
)
{
SSelectStmt
*
pStmt
=
NULL
;
int32_t
code
=
createSelectStmtForShowTableDist
((
SShowTableDistributedStmt
*
)
pQuery
->
pRoot
,
&
pStmt
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
nodesListMakeStrictAppend
(
&
pStmt
->
pProjectionList
,
createBlockDistFunc
());
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
pQuery
->
showRewrite
=
true
;
nodesDestroyNode
(
pQuery
->
pRoot
);
pQuery
->
pRoot
=
(
SNode
*
)
pStmt
;
}
return
code
;
}
typedef
struct
SVgroupCreateTableBatch
{
typedef
struct
SVgroupCreateTableBatch
{
SVCreateTbBatchReq
req
;
SVCreateTbBatchReq
req
;
SVgroupInfo
info
;
SVgroupInfo
info
;
...
@@ -5584,6 +5632,9 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
...
@@ -5584,6 +5632,9 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
case
QUERY_NODE_SHOW_APPS_STMT
:
case
QUERY_NODE_SHOW_APPS_STMT
:
code
=
rewriteShow
(
pCxt
,
pQuery
);
code
=
rewriteShow
(
pCxt
,
pQuery
);
break
;
break
;
case
QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT
:
code
=
rewriteShowTableDist
(
pCxt
,
pQuery
);
break
;
case
QUERY_NODE_CREATE_TABLE_STMT
:
case
QUERY_NODE_CREATE_TABLE_STMT
:
if
(
NULL
==
((
SCreateTableStmt
*
)
pQuery
->
pRoot
)
->
pTags
)
{
if
(
NULL
==
((
SCreateTableStmt
*
)
pQuery
->
pRoot
)
->
pTags
)
{
code
=
rewriteCreateTable
(
pCxt
,
pQuery
);
code
=
rewriteCreateTable
(
pCxt
,
pQuery
);
...
...
source/libs/parser/src/sql.c
浏览文件 @
c0074588
因为 它太大了无法显示 source diff 。你可以改为
查看blob
。
source/libs/planner/src/planLogicCreater.c
浏览文件 @
c0074588
...
@@ -156,7 +156,11 @@ static EScanType getScanType(SLogicPlanContext* pCxt, SNodeList* pScanPseudoCols
...
@@ -156,7 +156,11 @@ static EScanType getScanType(SLogicPlanContext* pCxt, SNodeList* pScanPseudoCols
if
(
NULL
==
pScanCols
)
{
if
(
NULL
==
pScanCols
)
{
// select count(*) from t
// select count(*) from t
return
NULL
==
pScanPseudoCols
?
SCAN_TYPE_TABLE
:
SCAN_TYPE_TAG
;
return
NULL
==
pScanPseudoCols
?
SCAN_TYPE_TABLE
:
((
FUNCTION_TYPE_BLOCK_DIST_INFO
==
((
SFunctionNode
*
)
nodesListGetNode
(
pScanPseudoCols
,
0
))
->
funcType
)
?
SCAN_TYPE_BLOCK_INFO
:
SCAN_TYPE_TAG
);
}
}
if
(
TSDB_SYSTEM_TABLE
==
tableType
)
{
if
(
TSDB_SYSTEM_TABLE
==
tableType
)
{
...
...
source/libs/planner/src/planPhysiCreater.c
浏览文件 @
c0074588
...
@@ -450,34 +450,37 @@ static void vgroupInfoToNodeAddr(const SVgroupInfo* vg, SQueryNodeAddr* pNodeAdd
...
@@ -450,34 +450,37 @@ static void vgroupInfoToNodeAddr(const SVgroupInfo* vg, SQueryNodeAddr* pNodeAdd
pNodeAddr
->
epSet
=
vg
->
epSet
;
pNodeAddr
->
epSet
=
vg
->
epSet
;
}
}
static
int32_t
createTagScanPhysiNode
(
SPhysiPlanContext
*
pCxt
,
SSubplan
*
pSubplan
,
SScanLogicNode
*
pScanLogicNode
,
SPhysiNode
**
pPhyNode
)
{
STagScanPhysiNode
*
pTagScan
=
(
STagScanPhysiNode
*
)
makePhysiNode
(
pCxt
,
(
SLogicNode
*
)
pScanLogicNode
,
QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN
);
if
(
NULL
==
pTagScan
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
vgroupInfoToNodeAddr
(
pScanLogicNode
->
pVgroupList
->
vgroups
,
&
pSubplan
->
execNode
);
SQueryNodeLoad
node
=
{.
addr
=
pSubplan
->
execNode
,
.
load
=
0
};
taosArrayPush
(
pCxt
->
pExecNodeList
,
&
node
);
return
createScanPhysiNodeFinalize
(
pCxt
,
pSubplan
,
pScanLogicNode
,
(
SScanPhysiNode
*
)
pTagScan
,
pPhyNode
);
}
static
ENodeType
getScanOperatorType
(
EScanType
scanType
)
{
static
ENodeType
getScanOperatorType
(
EScanType
scanType
)
{
switch
(
scanType
)
{
switch
(
scanType
)
{
case
SCAN_TYPE_TAG
:
return
QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN
;
case
SCAN_TYPE_TABLE
:
case
SCAN_TYPE_TABLE
:
return
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
;
return
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
;
case
SCAN_TYPE_STREAM
:
case
SCAN_TYPE_STREAM
:
return
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
;
return
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
;
case
SCAN_TYPE_TABLE_MERGE
:
case
SCAN_TYPE_TABLE_MERGE
:
// return QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN;
return
QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN
;
return
QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN
;
case
SCAN_TYPE_BLOCK_INFO
:
return
QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN
;
default:
default:
break
;
break
;
}
}
return
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
;
return
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
;
}
}
static
int32_t
createSimpleScanPhysiNode
(
SPhysiPlanContext
*
pCxt
,
SSubplan
*
pSubplan
,
SScanLogicNode
*
pScanLogicNode
,
SPhysiNode
**
pPhyNode
)
{
SScanPhysiNode
*
pScan
=
(
SScanPhysiNode
*
)
makePhysiNode
(
pCxt
,
(
SLogicNode
*
)
pScanLogicNode
,
getScanOperatorType
(
pScanLogicNode
->
scanType
));
if
(
NULL
==
pScan
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
vgroupInfoToNodeAddr
(
pScanLogicNode
->
pVgroupList
->
vgroups
,
&
pSubplan
->
execNode
);
SQueryNodeLoad
node
=
{.
addr
=
pSubplan
->
execNode
,
.
load
=
0
};
taosArrayPush
(
pCxt
->
pExecNodeList
,
&
node
);
return
createScanPhysiNodeFinalize
(
pCxt
,
pSubplan
,
pScanLogicNode
,
pScan
,
pPhyNode
);
}
static
int32_t
createTableScanPhysiNode
(
SPhysiPlanContext
*
pCxt
,
SSubplan
*
pSubplan
,
SScanLogicNode
*
pScanLogicNode
,
static
int32_t
createTableScanPhysiNode
(
SPhysiPlanContext
*
pCxt
,
SSubplan
*
pSubplan
,
SScanLogicNode
*
pScanLogicNode
,
SPhysiNode
**
pPhyNode
)
{
SPhysiNode
**
pPhyNode
)
{
STableScanPhysiNode
*
pTableScan
=
(
STableScanPhysiNode
*
)
makePhysiNode
(
pCxt
,
(
SLogicNode
*
)
pScanLogicNode
,
STableScanPhysiNode
*
pTableScan
=
(
STableScanPhysiNode
*
)
makePhysiNode
(
pCxt
,
(
SLogicNode
*
)
pScanLogicNode
,
...
@@ -558,7 +561,8 @@ static int32_t createScanPhysiNode(SPhysiPlanContext* pCxt, SSubplan* pSubplan,
...
@@ -558,7 +561,8 @@ static int32_t createScanPhysiNode(SPhysiPlanContext* pCxt, SSubplan* pSubplan,
SPhysiNode
**
pPhyNode
)
{
SPhysiNode
**
pPhyNode
)
{
switch
(
pScanLogicNode
->
scanType
)
{
switch
(
pScanLogicNode
->
scanType
)
{
case
SCAN_TYPE_TAG
:
case
SCAN_TYPE_TAG
:
return
createTagScanPhysiNode
(
pCxt
,
pSubplan
,
pScanLogicNode
,
pPhyNode
);
case
SCAN_TYPE_BLOCK_INFO
:
return
createSimpleScanPhysiNode
(
pCxt
,
pSubplan
,
pScanLogicNode
,
pPhyNode
);
case
SCAN_TYPE_TABLE
:
case
SCAN_TYPE_TABLE
:
return
createTableScanPhysiNode
(
pCxt
,
pSubplan
,
pScanLogicNode
,
pPhyNode
);
return
createTableScanPhysiNode
(
pCxt
,
pSubplan
,
pScanLogicNode
,
pPhyNode
);
case
SCAN_TYPE_SYSTEM_TABLE
:
case
SCAN_TYPE_SYSTEM_TABLE
:
...
...
source/libs/planner/test/planOtherTest.cpp
浏览文件 @
c0074588
...
@@ -70,6 +70,10 @@ TEST_F(PlanOtherTest, show) {
...
@@ -70,6 +70,10 @@ TEST_F(PlanOtherTest, show) {
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
run
(
"SHOW DATABASES"
);
run
(
"SHOW DATABASES"
);
run
(
"SHOW TABLE DISTRIBUTED t1"
);
run
(
"SHOW TABLE DISTRIBUTED st1"
);
}
}
TEST_F
(
PlanOtherTest
,
delete
)
{
TEST_F
(
PlanOtherTest
,
delete
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录