Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
aa016b65
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看板
提交
aa016b65
编写于
7月 11, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.0' of
https://github.com/taosdata/TDengine
into feat/tsdb_snapshot
上级
ed4ed51a
65c318db
变更
21
展开全部
显示空白变更内容
内联
并排
Showing
21 changed file
with
3367 addition
and
3228 deletion
+3367
-3228
include/common/tmsg.h
include/common/tmsg.h
+12
-5
include/common/tmsgdef.h
include/common/tmsgdef.h
+1
-0
include/common/ttokendef.h
include/common/ttokendef.h
+196
-195
include/libs/nodes/cmdnodes.h
include/libs/nodes/cmdnodes.h
+5
-0
include/libs/nodes/nodes.h
include/libs/nodes/nodes.h
+1
-0
source/common/src/tmsg.c
source/common/src/tmsg.c
+25
-0
source/dnode/vnode/src/tsdb/tsdbRead.c
source/dnode/vnode/src/tsdb/tsdbRead.c
+5
-0
source/libs/executor/inc/executorimpl.h
source/libs/executor/inc/executorimpl.h
+1
-0
source/libs/executor/src/executorimpl.c
source/libs/executor/src/executorimpl.c
+16
-10
source/libs/executor/src/sortoperator.c
source/libs/executor/src/sortoperator.c
+2
-2
source/libs/executor/src/tfill.c
source/libs/executor/src/tfill.c
+4
-1
source/libs/function/src/functionMgt.c
source/libs/function/src/functionMgt.c
+1
-1
source/libs/nodes/src/nodesUtilFuncs.c
source/libs/nodes/src/nodesUtilFuncs.c
+3
-0
source/libs/parser/inc/parAst.h
source/libs/parser/inc/parAst.h
+1
-0
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+6
-1
source/libs/parser/src/parAstCreater.c
source/libs/parser/src/parAstCreater.c
+21
-1
source/libs/parser/src/parTokenizer.c
source/libs/parser/src/parTokenizer.c
+1
-0
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+15
-12
source/libs/parser/src/sql.c
source/libs/parser/src/sql.c
+3020
-2996
source/libs/parser/test/parSelectTest.cpp
source/libs/parser/test/parSelectTest.cpp
+12
-4
source/libs/parser/test/parShowToUse.cpp
source/libs/parser/test/parShowToUse.cpp
+19
-0
未找到文件。
include/common/tmsg.h
浏览文件 @
aa016b65
...
@@ -56,9 +56,9 @@ extern int32_t tMsgDict[];
...
@@ -56,9 +56,9 @@ extern int32_t tMsgDict[];
#define TMSG_SEG_CODE(TYPE) (((TYPE)&0xff00) >> 8)
#define TMSG_SEG_CODE(TYPE) (((TYPE)&0xff00) >> 8)
#define TMSG_SEG_SEQ(TYPE) ((TYPE)&0xff)
#define TMSG_SEG_SEQ(TYPE) ((TYPE)&0xff)
#define TMSG_INFO(TYPE) \
#define TMSG_INFO(TYPE) \
((TYPE) >= 0 &&
\
((TYPE) >= 0 &&
((TYPE) < TDMT_DND_MAX_MSG || (TYPE) < TDMT_MND_MAX_MSG || (TYPE) < TDMT_VND_MAX_MSG ||
\
((TYPE) < TDMT_DND_MAX_MSG || (TYPE) < TDMT_MND_MAX_MSG || (TYPE) < TDMT_VND_MAX_MSG || (TYPE) < TDMT_SCH
_MAX_MSG || \
(TYPE) < TDMT_SCH_MAX_MSG || (TYPE) < TDMT_STREAM_MAX_MSG || (TYPE) < TDMT_MON
_MAX_MSG || \
(TYPE) < TDMT_STREAM_MAX_MSG || (TYPE) < TDMT_MON_MAX_MSG || (TYPE) < TDMT_SYNC_MAX_MSG))
\
(TYPE) < TDMT_SYNC_MAX_MSG))
\
? tMsgInfo[tMsgDict[TMSG_SEG_CODE(TYPE)] + TMSG_SEG_SEQ(TYPE)] \
? tMsgInfo[tMsgDict[TMSG_SEG_CODE(TYPE)] + TMSG_SEG_SEQ(TYPE)] \
: 0
: 0
#define TMSG_INDEX(TYPE) (tMsgDict[TMSG_SEG_CODE(TYPE)] + TMSG_SEG_SEQ(TYPE))
#define TMSG_INDEX(TYPE) (tMsgDict[TMSG_SEG_CODE(TYPE)] + TMSG_SEG_SEQ(TYPE))
...
@@ -815,6 +815,13 @@ typedef struct {
...
@@ -815,6 +815,13 @@ typedef struct {
int32_t
tSerializeSDbCfgReq
(
void
*
buf
,
int32_t
bufLen
,
SDbCfgReq
*
pReq
);
int32_t
tSerializeSDbCfgReq
(
void
*
buf
,
int32_t
bufLen
,
SDbCfgReq
*
pReq
);
int32_t
tDeserializeSDbCfgReq
(
void
*
buf
,
int32_t
bufLen
,
SDbCfgReq
*
pReq
);
int32_t
tDeserializeSDbCfgReq
(
void
*
buf
,
int32_t
bufLen
,
SDbCfgReq
*
pReq
);
typedef
struct
{
char
db
[
TSDB_DB_FNAME_LEN
];
}
STrimDbReq
;
int32_t
tSerializeSTrimDbReq
(
void
*
buf
,
int32_t
bufLen
,
STrimDbReq
*
pReq
);
int32_t
tDeserializeSTrimDbReq
(
void
*
buf
,
int32_t
bufLen
,
STrimDbReq
*
pReq
);
typedef
struct
{
typedef
struct
{
int32_t
numOfVgroups
;
int32_t
numOfVgroups
;
int32_t
numOfStables
;
int32_t
numOfStables
;
...
...
include/common/tmsgdef.h
浏览文件 @
aa016b65
...
@@ -116,6 +116,7 @@ enum {
...
@@ -116,6 +116,7 @@ enum {
TD_DEF_MSG_TYPE
(
TDMT_MND_ALTER_DB
,
"alter-db"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_ALTER_DB
,
"alter-db"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_SYNC_DB
,
"sync-db"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_SYNC_DB
,
"sync-db"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_COMPACT_DB
,
"compact-db"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_COMPACT_DB
,
"compact-db"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_TRIM_DB
,
"trim-db"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_GET_DB_CFG
,
"get-db-cfg"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_GET_DB_CFG
,
"get-db-cfg"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_VGROUP_LIST
,
"vgroup-list"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_VGROUP_LIST
,
"vgroup-list"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_CREATE_FUNC
,
"create-func"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_CREATE_FUNC
,
"create-func"
,
NULL
,
NULL
)
...
...
include/common/ttokendef.h
浏览文件 @
aa016b65
...
@@ -74,201 +74,202 @@
...
@@ -74,201 +74,202 @@
#define TK_DATABASE 56
#define TK_DATABASE 56
#define TK_USE 57
#define TK_USE 57
#define TK_FLUSH 58
#define TK_FLUSH 58
#define TK_IF 59
#define TK_TRIM 59
#define TK_NOT 60
#define TK_IF 60
#define TK_EXISTS 61
#define TK_NOT 61
#define TK_BUFFER 62
#define TK_EXISTS 62
#define TK_CACHELAST 63
#define TK_BUFFER 63
#define TK_CACHELASTSIZE 64
#define TK_CACHELAST 64
#define TK_COMP 65
#define TK_CACHELASTSIZE 65
#define TK_DURATION 66
#define TK_COMP 66
#define TK_NK_VARIABLE 67
#define TK_DURATION 67
#define TK_FSYNC 68
#define TK_NK_VARIABLE 68
#define TK_MAXROWS 69
#define TK_FSYNC 69
#define TK_MINROWS 70
#define TK_MAXROWS 70
#define TK_KEEP 71
#define TK_MINROWS 71
#define TK_PAGES 72
#define TK_KEEP 72
#define TK_PAGESIZE 73
#define TK_PAGES 73
#define TK_PRECISION 74
#define TK_PAGESIZE 74
#define TK_REPLICA 75
#define TK_PRECISION 75
#define TK_STRICT 76
#define TK_REPLICA 76
#define TK_WAL 77
#define TK_STRICT 77
#define TK_VGROUPS 78
#define TK_WAL 78
#define TK_SINGLE_STABLE 79
#define TK_VGROUPS 79
#define TK_RETENTIONS 80
#define TK_SINGLE_STABLE 80
#define TK_SCHEMALESS 81
#define TK_RETENTIONS 81
#define TK_NK_COLON 82
#define TK_SCHEMALESS 82
#define TK_TABLE 83
#define TK_NK_COLON 83
#define TK_NK_LP 84
#define TK_TABLE 84
#define TK_NK_RP 85
#define TK_NK_LP 85
#define TK_STABLE 86
#define TK_NK_RP 86
#define TK_ADD 87
#define TK_STABLE 87
#define TK_COLUMN 88
#define TK_ADD 88
#define TK_MODIFY 89
#define TK_COLUMN 89
#define TK_RENAME 90
#define TK_MODIFY 90
#define TK_TAG 91
#define TK_RENAME 91
#define TK_SET 92
#define TK_TAG 92
#define TK_NK_EQ 93
#define TK_SET 93
#define TK_USING 94
#define TK_NK_EQ 94
#define TK_TAGS 95
#define TK_USING 95
#define TK_COMMENT 96
#define TK_TAGS 96
#define TK_BOOL 97
#define TK_COMMENT 97
#define TK_TINYINT 98
#define TK_BOOL 98
#define TK_SMALLINT 99
#define TK_TINYINT 99
#define TK_INT 100
#define TK_SMALLINT 100
#define TK_INTEGER 101
#define TK_INT 101
#define TK_BIGINT 102
#define TK_INTEGER 102
#define TK_FLOAT 103
#define TK_BIGINT 103
#define TK_DOUBLE 104
#define TK_FLOAT 104
#define TK_BINARY 105
#define TK_DOUBLE 105
#define TK_TIMESTAMP 106
#define TK_BINARY 106
#define TK_NCHAR 107
#define TK_TIMESTAMP 107
#define TK_UNSIGNED 108
#define TK_NCHAR 108
#define TK_JSON 109
#define TK_UNSIGNED 109
#define TK_VARCHAR 110
#define TK_JSON 110
#define TK_MEDIUMBLOB 111
#define TK_VARCHAR 111
#define TK_BLOB 112
#define TK_MEDIUMBLOB 112
#define TK_VARBINARY 113
#define TK_BLOB 113
#define TK_DECIMAL 114
#define TK_VARBINARY 114
#define TK_MAX_DELAY 115
#define TK_DECIMAL 115
#define TK_WATERMARK 116
#define TK_MAX_DELAY 116
#define TK_ROLLUP 117
#define TK_WATERMARK 117
#define TK_TTL 118
#define TK_ROLLUP 118
#define TK_SMA 119
#define TK_TTL 119
#define TK_FIRST 120
#define TK_SMA 120
#define TK_LAST 121
#define TK_FIRST 121
#define TK_SHOW 122
#define TK_LAST 122
#define TK_DATABASES 123
#define TK_SHOW 123
#define TK_TABLES 124
#define TK_DATABASES 124
#define TK_STABLES 125
#define TK_TABLES 125
#define TK_MNODES 126
#define TK_STABLES 126
#define TK_MODULES 127
#define TK_MNODES 127
#define TK_QNODES 128
#define TK_MODULES 128
#define TK_FUNCTIONS 129
#define TK_QNODES 129
#define TK_INDEXES 130
#define TK_FUNCTIONS 130
#define TK_ACCOUNTS 131
#define TK_INDEXES 131
#define TK_APPS 132
#define TK_ACCOUNTS 132
#define TK_CONNECTIONS 133
#define TK_APPS 133
#define TK_LICENCE 134
#define TK_CONNECTIONS 134
#define TK_GRANTS 135
#define TK_LICENCE 135
#define TK_QUERIES 136
#define TK_GRANTS 136
#define TK_SCORES 137
#define TK_QUERIES 137
#define TK_TOPICS 138
#define TK_SCORES 138
#define TK_VARIABLES 139
#define TK_TOPICS 139
#define TK_BNODES 140
#define TK_VARIABLES 140
#define TK_SNODES 141
#define TK_BNODES 141
#define TK_CLUSTER 142
#define TK_SNODES 142
#define TK_TRANSACTIONS 143
#define TK_CLUSTER 143
#define TK_DISTRIBUTED 144
#define TK_TRANSACTIONS 144
#define TK_CONSUMERS 145
#define TK_DISTRIBUTED 145
#define TK_SUBSCRIPTIONS 146
#define TK_CONSUMERS 146
#define TK_LIKE 147
#define TK_SUBSCRIPTIONS 147
#define TK_INDEX 148
#define TK_LIKE 148
#define TK_FUNCTION 149
#define TK_INDEX 149
#define TK_INTERVAL 150
#define TK_FUNCTION 150
#define TK_TOPIC 151
#define TK_INTERVAL 151
#define TK_AS 152
#define TK_TOPIC 152
#define TK_WITH 153
#define TK_AS 153
#define TK_META 154
#define TK_WITH 154
#define TK_CONSUMER 155
#define TK_META 155
#define TK_GROUP 156
#define TK_CONSUMER 156
#define TK_DESC 157
#define TK_GROUP 157
#define TK_DESCRIBE 158
#define TK_DESC 158
#define TK_RESET 159
#define TK_DESCRIBE 159
#define TK_QUERY 160
#define TK_RESET 160
#define TK_CACHE 161
#define TK_QUERY 161
#define TK_EXPLAIN 162
#define TK_CACHE 162
#define TK_ANALYZE 163
#define TK_EXPLAIN 163
#define TK_VERBOSE 164
#define TK_ANALYZE 164
#define TK_NK_BOOL 165
#define TK_VERBOSE 165
#define TK_RATIO 166
#define TK_NK_BOOL 166
#define TK_NK_FLOAT 167
#define TK_RATIO 167
#define TK_COMPACT 168
#define TK_NK_FLOAT 168
#define TK_VNODES 169
#define TK_COMPACT 169
#define TK_IN 170
#define TK_VNODES 170
#define TK_OUTPUTTYPE 171
#define TK_IN 171
#define TK_AGGREGATE 172
#define TK_OUTPUTTYPE 172
#define TK_BUFSIZE 173
#define TK_AGGREGATE 173
#define TK_STREAM 174
#define TK_BUFSIZE 174
#define TK_INTO 175
#define TK_STREAM 175
#define TK_TRIGGER 176
#define TK_INTO 176
#define TK_AT_ONCE 177
#define TK_TRIGGER 177
#define TK_WINDOW_CLOSE 178
#define TK_AT_ONCE 178
#define TK_IGNORE 179
#define TK_WINDOW_CLOSE 179
#define TK_EXPIRED 180
#define TK_IGNORE 180
#define TK_KILL 181
#define TK_EXPIRED 181
#define TK_CONNECTION 182
#define TK_KILL 182
#define TK_TRANSACTION 183
#define TK_CONNECTION 183
#define TK_BALANCE 184
#define TK_TRANSACTION 184
#define TK_VGROUP 185
#define TK_BALANCE 185
#define TK_MERGE 186
#define TK_VGROUP 186
#define TK_REDISTRIBUTE 187
#define TK_MERGE 187
#define TK_SPLIT 188
#define TK_REDISTRIBUTE 188
#define TK_SYNCDB 189
#define TK_SPLIT 189
#define TK_DELETE 190
#define TK_SYNCDB 190
#define TK_INSERT 191
#define TK_DELETE 191
#define TK_NULL 192
#define TK_INSERT 192
#define TK_NK_QUESTION 193
#define TK_NULL 193
#define TK_NK_ARROW 194
#define TK_NK_QUESTION 194
#define TK_ROWTS 195
#define TK_NK_ARROW 195
#define TK_TBNAME 196
#define TK_ROWTS 196
#define TK_QSTARTTS 197
#define TK_TBNAME 197
#define TK_QENDTS 198
#define TK_QSTARTTS 198
#define TK_WSTARTTS 199
#define TK_QENDTS 199
#define TK_WENDTS 200
#define TK_WSTARTTS 200
#define TK_WDURATION 201
#define TK_WENDTS 201
#define TK_CAST 202
#define TK_WDURATION 202
#define TK_NOW 203
#define TK_CAST 203
#define TK_TODAY 204
#define TK_NOW 204
#define TK_TIMEZONE 205
#define TK_TODAY 205
#define TK_CLIENT_VERSION 206
#define TK_TIMEZONE 206
#define TK_SERVER_VERSION 207
#define TK_CLIENT_VERSION 207
#define TK_SERVER_STATUS 208
#define TK_SERVER_VERSION 208
#define TK_CURRENT_USER 209
#define TK_SERVER_STATUS 209
#define TK_COUNT 210
#define TK_CURRENT_USER 210
#define TK_LAST_ROW 211
#define TK_COUNT 211
#define TK_BETWEEN 212
#define TK_LAST_ROW 212
#define TK_IS 213
#define TK_BETWEEN 213
#define TK_NK_LT 214
#define TK_IS 214
#define TK_NK_GT 215
#define TK_NK_LT 215
#define TK_NK_LE 216
#define TK_NK_GT 216
#define TK_NK_GE 217
#define TK_NK_LE 217
#define TK_NK_NE 218
#define TK_NK_GE 218
#define TK_MATCH 219
#define TK_NK_NE 219
#define TK_NMATCH 220
#define TK_MATCH 220
#define TK_CONTAINS 221
#define TK_NMATCH 221
#define TK_JOIN 222
#define TK_CONTAINS 222
#define TK_INNER 223
#define TK_JOIN 223
#define TK_SELECT 224
#define TK_INNER 224
#define TK_DISTINCT 225
#define TK_SELECT 225
#define TK_WHERE 226
#define TK_DISTINCT 226
#define TK_PARTITION 227
#define TK_WHERE 227
#define TK_BY 228
#define TK_PARTITION 228
#define TK_SESSION 229
#define TK_BY 229
#define TK_STATE_WINDOW 230
#define TK_SESSION 230
#define TK_SLIDING 231
#define TK_STATE_WINDOW 231
#define TK_FILL 232
#define TK_SLIDING 232
#define TK_VALUE 233
#define TK_FILL 233
#define TK_NONE 234
#define TK_VALUE 234
#define TK_PREV 235
#define TK_NONE 235
#define TK_LINEAR 236
#define TK_PREV 236
#define TK_NEXT 237
#define TK_LINEAR 237
#define TK_HAVING 238
#define TK_NEXT 238
#define TK_RANGE 239
#define TK_HAVING 239
#define TK_EVERY 240
#define TK_RANGE 240
#define TK_ORDER 241
#define TK_EVERY 241
#define TK_SLIMIT 242
#define TK_ORDER 242
#define TK_SOFFSET 243
#define TK_SLIMIT 243
#define TK_LIMIT 244
#define TK_SOFFSET 244
#define TK_OFFSET 245
#define TK_LIMIT 245
#define TK_ASC 246
#define TK_OFFSET 246
#define TK_NULLS 247
#define TK_ASC 247
#define TK_ID 248
#define TK_NULLS 248
#define TK_NK_BITNOT 249
#define TK_ID 249
#define TK_VALUES 250
#define TK_NK_BITNOT 250
#define TK_IMPORT 251
#define TK_VALUES 251
#define TK_NK_SEMI 252
#define TK_IMPORT 252
#define TK_FILE 253
#define TK_NK_SEMI 253
#define TK_FILE 254
#define TK_NK_SPACE 300
#define TK_NK_SPACE 300
#define TK_NK_COMMENT 301
#define TK_NK_COMMENT 301
...
...
include/libs/nodes/cmdnodes.h
浏览文件 @
aa016b65
...
@@ -103,6 +103,11 @@ typedef struct SFlushDatabaseStmt {
...
@@ -103,6 +103,11 @@ typedef struct SFlushDatabaseStmt {
char
dbName
[
TSDB_DB_NAME_LEN
];
char
dbName
[
TSDB_DB_NAME_LEN
];
}
SFlushDatabaseStmt
;
}
SFlushDatabaseStmt
;
typedef
struct
STrimDatabaseStmt
{
ENodeType
type
;
char
dbName
[
TSDB_DB_NAME_LEN
];
}
STrimDatabaseStmt
;
typedef
struct
STableOptions
{
typedef
struct
STableOptions
{
ENodeType
type
;
ENodeType
type
;
bool
commentNull
;
bool
commentNull
;
...
...
include/libs/nodes/nodes.h
浏览文件 @
aa016b65
...
@@ -112,6 +112,7 @@ typedef enum ENodeType {
...
@@ -112,6 +112,7 @@ typedef enum ENodeType {
QUERY_NODE_DROP_DATABASE_STMT
,
QUERY_NODE_DROP_DATABASE_STMT
,
QUERY_NODE_ALTER_DATABASE_STMT
,
QUERY_NODE_ALTER_DATABASE_STMT
,
QUERY_NODE_FLUSH_DATABASE_STMT
,
QUERY_NODE_FLUSH_DATABASE_STMT
,
QUERY_NODE_TRIM_DATABASE_STMT
,
QUERY_NODE_CREATE_TABLE_STMT
,
QUERY_NODE_CREATE_TABLE_STMT
,
QUERY_NODE_CREATE_SUBTABLE_CLAUSE
,
QUERY_NODE_CREATE_SUBTABLE_CLAUSE
,
QUERY_NODE_CREATE_MULTI_TABLE_STMT
,
QUERY_NODE_CREATE_MULTI_TABLE_STMT
,
...
...
source/common/src/tmsg.c
浏览文件 @
aa016b65
...
@@ -2647,6 +2647,31 @@ int32_t tDeserializeSDbCfgReq(void *buf, int32_t bufLen, SDbCfgReq *pReq) {
...
@@ -2647,6 +2647,31 @@ int32_t tDeserializeSDbCfgReq(void *buf, int32_t bufLen, SDbCfgReq *pReq) {
return
0
;
return
0
;
}
}
int32_t
tSerializeSTrimDbReq
(
void
*
buf
,
int32_t
bufLen
,
STrimDbReq
*
pReq
)
{
SEncoder
encoder
=
{
0
};
tEncoderInit
(
&
encoder
,
buf
,
bufLen
);
if
(
tStartEncode
(
&
encoder
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
&
encoder
,
pReq
->
db
)
<
0
)
return
-
1
;
tEndEncode
(
&
encoder
);
int32_t
tlen
=
encoder
.
pos
;
tEncoderClear
(
&
encoder
);
return
tlen
;
}
int32_t
tDeserializeSTrimDbReq
(
void
*
buf
,
int32_t
bufLen
,
STrimDbReq
*
pReq
)
{
SDecoder
decoder
=
{
0
};
tDecoderInit
(
&
decoder
,
buf
,
bufLen
);
if
(
tStartDecode
(
&
decoder
)
<
0
)
return
-
1
;
if
(
tDecodeCStrTo
(
&
decoder
,
pReq
->
db
)
<
0
)
return
-
1
;
tEndDecode
(
&
decoder
);
tDecoderClear
(
&
decoder
);
return
0
;
}
int32_t
tSerializeSDbCfgRsp
(
void
*
buf
,
int32_t
bufLen
,
const
SDbCfgRsp
*
pRsp
)
{
int32_t
tSerializeSDbCfgRsp
(
void
*
buf
,
int32_t
bufLen
,
const
SDbCfgRsp
*
pRsp
)
{
SEncoder
encoder
=
{
0
};
SEncoder
encoder
=
{
0
};
tEncoderInit
(
&
encoder
,
buf
,
bufLen
);
tEncoderInit
(
&
encoder
,
buf
,
bufLen
);
...
...
source/dnode/vnode/src/tsdb/tsdbRead.c
浏览文件 @
aa016b65
...
@@ -323,6 +323,11 @@ static bool filesetIteratorNext(SFilesetIter* pIter, STsdbReader* pReader) {
...
@@ -323,6 +323,11 @@ static bool filesetIteratorNext(SFilesetIter* pIter, STsdbReader* pReader) {
if
((
asc
&&
(
win
.
ekey
<
pReader
->
window
.
skey
))
||
((
!
asc
)
&&
(
win
.
skey
>
pReader
->
window
.
ekey
)))
{
if
((
asc
&&
(
win
.
ekey
<
pReader
->
window
.
skey
))
||
((
!
asc
)
&&
(
win
.
skey
>
pReader
->
window
.
ekey
)))
{
pIter
->
index
+=
step
;
pIter
->
index
+=
step
;
if
((
asc
&&
pIter
->
index
>=
pIter
->
numOfFiles
)
||
((
!
asc
)
&&
pIter
->
index
<
0
))
{
return
false
;
}
continue
;
continue
;
}
}
...
...
source/libs/executor/inc/executorimpl.h
浏览文件 @
aa016b65
...
@@ -551,6 +551,7 @@ typedef struct SFillOperatorInfo {
...
@@ -551,6 +551,7 @@ typedef struct SFillOperatorInfo {
bool
multigroupResult
;
bool
multigroupResult
;
STimeWindow
win
;
STimeWindow
win
;
SNode
*
pCondition
;
SNode
*
pCondition
;
SArray
*
pColMatchColInfo
;
}
SFillOperatorInfo
;
}
SFillOperatorInfo
;
typedef
struct
SGroupbyOperatorInfo
{
typedef
struct
SGroupbyOperatorInfo
{
...
...
source/libs/executor/src/executorimpl.c
浏览文件 @
aa016b65
...
@@ -4001,11 +4001,16 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode*
...
@@ -4001,11 +4001,16 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode*
QUERY_NODE_PHYSICAL_PLAN_MERGE_ALIGNED_INTERVAL
==
downstream
->
operatorType
QUERY_NODE_PHYSICAL_PLAN_MERGE_ALIGNED_INTERVAL
==
downstream
->
operatorType
?
&
((
SMergeAlignedIntervalAggOperatorInfo
*
)
downstream
->
info
)
->
intervalAggOperatorInfo
->
interval
?
&
((
SMergeAlignedIntervalAggOperatorInfo
*
)
downstream
->
info
)
->
intervalAggOperatorInfo
->
interval
:
&
((
SIntervalAggOperatorInfo
*
)
downstream
->
info
)
->
interval
;
:
&
((
SIntervalAggOperatorInfo
*
)
downstream
->
info
)
->
interval
;
int32_t
type
=
convertFillType
(
pPhyFillNode
->
mode
);
int32_t
type
=
convertFillType
(
pPhyFillNode
->
mode
);
SResultInfo
*
pResultInfo
=
&
pOperator
->
resultInfo
;
SResultInfo
*
pResultInfo
=
&
pOperator
->
resultInfo
;
initResultSizeInfo
(
pOperator
,
4096
);
initResultSizeInfo
(
pOperator
,
4096
);
int32_t
numOfOutputCols
=
0
;
SArray
*
pColMatchColInfo
=
extractColMatchInfo
(
pPhyFillNode
->
pTargets
,
pPhyFillNode
->
node
.
pOutputDataBlockDesc
,
&
numOfOutputCols
,
COL_MATCH_FROM_SLOT_ID
);
int32_t
code
=
initFillInfo
(
pInfo
,
pExprInfo
,
num
,
(
SNodeListNode
*
)
pPhyFillNode
->
pValues
,
pPhyFillNode
->
timeRange
,
int32_t
code
=
initFillInfo
(
pInfo
,
pExprInfo
,
num
,
(
SNodeListNode
*
)
pPhyFillNode
->
pValues
,
pPhyFillNode
->
timeRange
,
pResultInfo
->
capacity
,
pTaskInfo
->
id
.
str
,
pInterval
,
type
);
pResultInfo
->
capacity
,
pTaskInfo
->
id
.
str
,
pInterval
,
type
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
...
@@ -4015,6 +4020,7 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode*
...
@@ -4015,6 +4020,7 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode*
pInfo
->
pRes
=
pResBlock
;
pInfo
->
pRes
=
pResBlock
;
pInfo
->
multigroupResult
=
multigroupResult
;
pInfo
->
multigroupResult
=
multigroupResult
;
pInfo
->
pCondition
=
pPhyFillNode
->
node
.
pConditions
;
pInfo
->
pCondition
=
pPhyFillNode
->
node
.
pConditions
;
pInfo
->
pColMatchColInfo
=
pColMatchColInfo
;
pOperator
->
name
=
"FillOperator"
;
pOperator
->
name
=
"FillOperator"
;
pOperator
->
blocking
=
false
;
pOperator
->
blocking
=
false
;
pOperator
->
status
=
OP_NOT_OPENED
;
pOperator
->
status
=
OP_NOT_OPENED
;
...
...
source/libs/executor/src/sortoperator.c
浏览文件 @
aa016b65
...
@@ -217,6 +217,7 @@ SSDataBlock* doSort(SOperatorInfo* pOperator) {
...
@@ -217,6 +217,7 @@ SSDataBlock* doSort(SOperatorInfo* pOperator) {
doSetOperatorCompleted
(
pOperator
);
doSetOperatorCompleted
(
pOperator
);
break
;
break
;
}
}
if
(
blockDataGetNumOfRows
(
pBlock
)
>
0
)
{
if
(
blockDataGetNumOfRows
(
pBlock
)
>
0
)
{
break
;
break
;
}
}
...
@@ -601,8 +602,7 @@ SSDataBlock* getMultiwaySortedBlockData(SSortHandle* pHandle, SSDataBlock* pData
...
@@ -601,8 +602,7 @@ SSDataBlock* getMultiwaySortedBlockData(SSortHandle* pHandle, SSDataBlock* pData
break
;
break
;
}
}
if
(
pInfo
->
groupSort
)
if
(
pInfo
->
groupSort
)
{
{
uint64_t
tupleGroupId
=
tsortGetGroupId
(
pTupleHandle
);
uint64_t
tupleGroupId
=
tsortGetGroupId
(
pTupleHandle
);
if
(
!
pInfo
->
hasGroupId
)
{
if
(
!
pInfo
->
hasGroupId
)
{
pInfo
->
groupId
=
tupleGroupId
;
pInfo
->
groupId
=
tupleGroupId
;
...
...
source/libs/executor/src/tfill.c
浏览文件 @
aa016b65
...
@@ -50,8 +50,11 @@ static void setTagsValue(SFillInfo* pFillInfo, void** data, int32_t genRows) {
...
@@ -50,8 +50,11 @@ static void setTagsValue(SFillInfo* pFillInfo, void** data, int32_t genRows) {
static
void
setNullRow
(
SSDataBlock
*
pBlock
,
int32_t
numOfCol
,
int32_t
rowIndex
)
{
static
void
setNullRow
(
SSDataBlock
*
pBlock
,
int32_t
numOfCol
,
int32_t
rowIndex
)
{
// the first are always the timestamp column, so start from the second column.
// the first are always the timestamp column, so start from the second column.
for
(
int32_t
i
=
1
;
i
<
taosArrayGetSize
(
pBlock
->
pDataBlock
);
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
pBlock
->
pDataBlock
);
++
i
)
{
SColumnInfoData
*
p
=
taosArrayGet
(
pBlock
->
pDataBlock
,
i
);
SColumnInfoData
*
p
=
taosArrayGet
(
pBlock
->
pDataBlock
,
i
);
if
(
p
->
info
.
type
==
TSDB_DATA_TYPE_TIMESTAMP
&&
i
==
0
)
{
continue
;
}
colDataAppendNULL
(
p
,
rowIndex
);
colDataAppendNULL
(
p
,
rowIndex
);
}
}
}
}
...
...
source/libs/function/src/functionMgt.c
浏览文件 @
aa016b65
...
@@ -139,7 +139,7 @@ bool fmIsAggFunc(int32_t funcId) { return isSpecificClassifyFunc(funcId, FUNC_MG
...
@@ -139,7 +139,7 @@ bool fmIsAggFunc(int32_t funcId) { return isSpecificClassifyFunc(funcId, FUNC_MG
bool
fmIsScalarFunc
(
int32_t
funcId
)
{
return
isSpecificClassifyFunc
(
funcId
,
FUNC_MGT_SCALAR_FUNC
);
}
bool
fmIsScalarFunc
(
int32_t
funcId
)
{
return
isSpecificClassifyFunc
(
funcId
,
FUNC_MGT_SCALAR_FUNC
);
}
bool
fmIsVectorFunc
(
int32_t
funcId
)
{
return
!
fmIsScalarFunc
(
funcId
)
&&
!
fmIs
Scan
PseudoColumnFunc
(
funcId
);
}
bool
fmIsVectorFunc
(
int32_t
funcId
)
{
return
!
fmIsScalarFunc
(
funcId
)
&&
!
fmIsPseudoColumnFunc
(
funcId
);
}
bool
fmIsSelectFunc
(
int32_t
funcId
)
{
return
isSpecificClassifyFunc
(
funcId
,
FUNC_MGT_SELECT_FUNC
);
}
bool
fmIsSelectFunc
(
int32_t
funcId
)
{
return
isSpecificClassifyFunc
(
funcId
,
FUNC_MGT_SELECT_FUNC
);
}
...
...
source/libs/nodes/src/nodesUtilFuncs.c
浏览文件 @
aa016b65
...
@@ -105,6 +105,8 @@ SNode* nodesMakeNode(ENodeType type) {
...
@@ -105,6 +105,8 @@ SNode* nodesMakeNode(ENodeType type) {
return
makeNode
(
type
,
sizeof
(
SAlterDatabaseStmt
));
return
makeNode
(
type
,
sizeof
(
SAlterDatabaseStmt
));
case
QUERY_NODE_FLUSH_DATABASE_STMT
:
case
QUERY_NODE_FLUSH_DATABASE_STMT
:
return
makeNode
(
type
,
sizeof
(
SFlushDatabaseStmt
));
return
makeNode
(
type
,
sizeof
(
SFlushDatabaseStmt
));
case
QUERY_NODE_TRIM_DATABASE_STMT
:
return
makeNode
(
type
,
sizeof
(
STrimDatabaseStmt
));
case
QUERY_NODE_CREATE_TABLE_STMT
:
case
QUERY_NODE_CREATE_TABLE_STMT
:
return
makeNode
(
type
,
sizeof
(
SCreateTableStmt
));
return
makeNode
(
type
,
sizeof
(
SCreateTableStmt
));
case
QUERY_NODE_CREATE_SUBTABLE_CLAUSE
:
case
QUERY_NODE_CREATE_SUBTABLE_CLAUSE
:
...
@@ -548,6 +550,7 @@ void nodesDestroyNode(SNode* pNode) {
...
@@ -548,6 +550,7 @@ void nodesDestroyNode(SNode* pNode) {
nodesDestroyNode
((
SNode
*
)((
SAlterDatabaseStmt
*
)
pNode
)
->
pOptions
);
nodesDestroyNode
((
SNode
*
)((
SAlterDatabaseStmt
*
)
pNode
)
->
pOptions
);
break
;
break
;
case
QUERY_NODE_FLUSH_DATABASE_STMT
:
// no pointer field
case
QUERY_NODE_FLUSH_DATABASE_STMT
:
// no pointer field
case
QUERY_NODE_TRIM_DATABASE_STMT
:
// no pointer field
break
;
break
;
case
QUERY_NODE_CREATE_TABLE_STMT
:
{
case
QUERY_NODE_CREATE_TABLE_STMT
:
{
SCreateTableStmt
*
pStmt
=
(
SCreateTableStmt
*
)
pNode
;
SCreateTableStmt
*
pStmt
=
(
SCreateTableStmt
*
)
pNode
;
...
...
source/libs/parser/inc/parAst.h
浏览文件 @
aa016b65
...
@@ -137,6 +137,7 @@ SNode* createCreateDatabaseStmt(SAstCreateContext* pCxt, bool ignoreExists, STok
...
@@ -137,6 +137,7 @@ SNode* createCreateDatabaseStmt(SAstCreateContext* pCxt, bool ignoreExists, STok
SNode
*
createDropDatabaseStmt
(
SAstCreateContext
*
pCxt
,
bool
ignoreNotExists
,
SToken
*
pDbName
);
SNode
*
createDropDatabaseStmt
(
SAstCreateContext
*
pCxt
,
bool
ignoreNotExists
,
SToken
*
pDbName
);
SNode
*
createAlterDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
,
SNode
*
pOptions
);
SNode
*
createAlterDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
,
SNode
*
pOptions
);
SNode
*
createFlushDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
);
SNode
*
createFlushDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
);
SNode
*
createTrimDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
);
SNode
*
createDefaultTableOptions
(
SAstCreateContext
*
pCxt
);
SNode
*
createDefaultTableOptions
(
SAstCreateContext
*
pCxt
);
SNode
*
createAlterTableOptions
(
SAstCreateContext
*
pCxt
);
SNode
*
createAlterTableOptions
(
SAstCreateContext
*
pCxt
);
SNode
*
setTableOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
ETableOptionType
type
,
void
*
pVal
);
SNode
*
setTableOption
(
SAstCreateContext
*
pCxt
,
SNode
*
pOptions
,
ETableOptionType
type
,
void
*
pVal
);
...
...
source/libs/parser/inc/sql.y
浏览文件 @
aa016b65
...
@@ -158,6 +158,7 @@ cmd ::= DROP DATABASE exists_opt(A) db_name(B).
...
@@ -158,6 +158,7 @@ cmd ::= DROP DATABASE exists_opt(A) db_name(B).
cmd ::= USE db_name(A). { pCxt->pRootNode = createUseDatabaseStmt(pCxt, &A); }
cmd ::= USE db_name(A). { pCxt->pRootNode = createUseDatabaseStmt(pCxt, &A); }
cmd ::= ALTER DATABASE db_name(A) alter_db_options(B). { pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &A, B); }
cmd ::= ALTER DATABASE db_name(A) alter_db_options(B). { pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &A, B); }
cmd ::= FLUSH DATABASE db_name(A). { pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &A); }
cmd ::= FLUSH DATABASE db_name(A). { pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &A); }
cmd ::= TRIM DATABASE db_name(A). { pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &A); }
%type not_exists_opt { bool }
%type not_exists_opt { bool }
%destructor not_exists_opt { }
%destructor not_exists_opt { }
...
@@ -934,7 +935,11 @@ query_expression_body(A) ::=
...
@@ -934,7 +935,11 @@ query_expression_body(A) ::=
query_primary(A) ::= query_specification(B). { A = B; }
query_primary(A) ::= query_specification(B). { A = B; }
query_primary(A) ::=
query_primary(A) ::=
NK_LP query_expression_body(B)
NK_LP query_expression_body(B)
order_by_clause_opt slimit_clause_opt limit_clause_opt NK_RP. { A = B; }
order_by_clause_opt(C) slimit_clause_opt(D) limit_clause_opt(E) NK_RP. {
A = addOrderByClause(pCxt, B, C);
A = addSlimitClause(pCxt, A, D);
A = addLimitClause(pCxt, A, E);
}
%type order_by_clause_opt { SNodeList* }
%type order_by_clause_opt { SNodeList* }
%destructor order_by_clause_opt { nodesDestroyList($$); }
%destructor order_by_clause_opt { nodesDestroyList($$); }
...
...
source/libs/parser/src/parAstCreater.c
浏览文件 @
aa016b65
...
@@ -665,6 +665,9 @@ SNode* addHavingClause(SAstCreateContext* pCxt, SNode* pStmt, SNode* pHaving) {
...
@@ -665,6 +665,9 @@ SNode* addHavingClause(SAstCreateContext* pCxt, SNode* pStmt, SNode* pHaving) {
SNode
*
addOrderByClause
(
SAstCreateContext
*
pCxt
,
SNode
*
pStmt
,
SNodeList
*
pOrderByList
)
{
SNode
*
addOrderByClause
(
SAstCreateContext
*
pCxt
,
SNode
*
pStmt
,
SNodeList
*
pOrderByList
)
{
CHECK_PARSER_STATUS
(
pCxt
);
CHECK_PARSER_STATUS
(
pCxt
);
if
(
NULL
==
pOrderByList
)
{
return
pStmt
;
}
if
(
QUERY_NODE_SELECT_STMT
==
nodeType
(
pStmt
))
{
if
(
QUERY_NODE_SELECT_STMT
==
nodeType
(
pStmt
))
{
((
SSelectStmt
*
)
pStmt
)
->
pOrderByList
=
pOrderByList
;
((
SSelectStmt
*
)
pStmt
)
->
pOrderByList
=
pOrderByList
;
}
else
{
}
else
{
...
@@ -675,6 +678,9 @@ SNode* addOrderByClause(SAstCreateContext* pCxt, SNode* pStmt, SNodeList* pOrder
...
@@ -675,6 +678,9 @@ SNode* addOrderByClause(SAstCreateContext* pCxt, SNode* pStmt, SNodeList* pOrder
SNode
*
addSlimitClause
(
SAstCreateContext
*
pCxt
,
SNode
*
pStmt
,
SNode
*
pSlimit
)
{
SNode
*
addSlimitClause
(
SAstCreateContext
*
pCxt
,
SNode
*
pStmt
,
SNode
*
pSlimit
)
{
CHECK_PARSER_STATUS
(
pCxt
);
CHECK_PARSER_STATUS
(
pCxt
);
if
(
NULL
==
pSlimit
)
{
return
pStmt
;
}
if
(
QUERY_NODE_SELECT_STMT
==
nodeType
(
pStmt
))
{
if
(
QUERY_NODE_SELECT_STMT
==
nodeType
(
pStmt
))
{
((
SSelectStmt
*
)
pStmt
)
->
pSlimit
=
(
SLimitNode
*
)
pSlimit
;
((
SSelectStmt
*
)
pStmt
)
->
pSlimit
=
(
SLimitNode
*
)
pSlimit
;
}
}
...
@@ -683,6 +689,9 @@ SNode* addSlimitClause(SAstCreateContext* pCxt, SNode* pStmt, SNode* pSlimit) {
...
@@ -683,6 +689,9 @@ SNode* addSlimitClause(SAstCreateContext* pCxt, SNode* pStmt, SNode* pSlimit) {
SNode
*
addLimitClause
(
SAstCreateContext
*
pCxt
,
SNode
*
pStmt
,
SNode
*
pLimit
)
{
SNode
*
addLimitClause
(
SAstCreateContext
*
pCxt
,
SNode
*
pStmt
,
SNode
*
pLimit
)
{
CHECK_PARSER_STATUS
(
pCxt
);
CHECK_PARSER_STATUS
(
pCxt
);
if
(
NULL
==
pLimit
)
{
return
pStmt
;
}
if
(
QUERY_NODE_SELECT_STMT
==
nodeType
(
pStmt
))
{
if
(
QUERY_NODE_SELECT_STMT
==
nodeType
(
pStmt
))
{
((
SSelectStmt
*
)
pStmt
)
->
pLimit
=
(
SLimitNode
*
)
pLimit
;
((
SSelectStmt
*
)
pStmt
)
->
pLimit
=
(
SLimitNode
*
)
pLimit
;
}
else
{
}
else
{
...
@@ -922,7 +931,18 @@ SNode* createFlushDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName) {
...
@@ -922,7 +931,18 @@ SNode* createFlushDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName) {
if
(
!
checkDbName
(
pCxt
,
pDbName
,
false
))
{
if
(
!
checkDbName
(
pCxt
,
pDbName
,
false
))
{
return
NULL
;
return
NULL
;
}
}
SAlterDatabaseStmt
*
pStmt
=
(
SAlterDatabaseStmt
*
)
nodesMakeNode
(
QUERY_NODE_FLUSH_DATABASE_STMT
);
SFlushDatabaseStmt
*
pStmt
=
(
SFlushDatabaseStmt
*
)
nodesMakeNode
(
QUERY_NODE_FLUSH_DATABASE_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
COPY_STRING_FORM_ID_TOKEN
(
pStmt
->
dbName
,
pDbName
);
return
(
SNode
*
)
pStmt
;
}
SNode
*
createTrimDatabaseStmt
(
SAstCreateContext
*
pCxt
,
SToken
*
pDbName
)
{
CHECK_PARSER_STATUS
(
pCxt
);
if
(
!
checkDbName
(
pCxt
,
pDbName
,
false
))
{
return
NULL
;
}
STrimDatabaseStmt
*
pStmt
=
(
STrimDatabaseStmt
*
)
nodesMakeNode
(
QUERY_NODE_TRIM_DATABASE_STMT
);
CHECK_OUT_OF_MEM
(
pStmt
);
CHECK_OUT_OF_MEM
(
pStmt
);
COPY_STRING_FORM_ID_TOKEN
(
pStmt
->
dbName
,
pDbName
);
COPY_STRING_FORM_ID_TOKEN
(
pStmt
->
dbName
,
pDbName
);
return
(
SNode
*
)
pStmt
;
return
(
SNode
*
)
pStmt
;
...
...
source/libs/parser/src/parTokenizer.c
浏览文件 @
aa016b65
...
@@ -216,6 +216,7 @@ static SKeyword keywordTable[] = {
...
@@ -216,6 +216,7 @@ static SKeyword keywordTable[] = {
{
"TRANSACTION"
,
TK_TRANSACTION
},
{
"TRANSACTION"
,
TK_TRANSACTION
},
{
"TRANSACTIONS"
,
TK_TRANSACTIONS
},
{
"TRANSACTIONS"
,
TK_TRANSACTIONS
},
{
"TRIGGER"
,
TK_TRIGGER
},
{
"TRIGGER"
,
TK_TRIGGER
},
{
"TRIM"
,
TK_TRIM
},
{
"TSERIES"
,
TK_TSERIES
},
{
"TSERIES"
,
TK_TSERIES
},
{
"TTL"
,
TK_TTL
},
{
"TTL"
,
TK_TTL
},
{
"UNION"
,
TK_UNION
},
{
"UNION"
,
TK_UNION
},
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
aa016b65
...
@@ -1189,7 +1189,7 @@ static void setFuncClassification(SNode* pCurrStmt, SFunctionNode* pFunc) {
...
@@ -1189,7 +1189,7 @@ static void setFuncClassification(SNode* pCurrStmt, SFunctionNode* pFunc) {
if
(
fmIsSelectFunc
(
pFunc
->
funcId
))
{
if
(
fmIsSelectFunc
(
pFunc
->
funcId
))
{
pSelect
->
hasSelectFunc
=
true
;
pSelect
->
hasSelectFunc
=
true
;
++
(
pSelect
->
selectFuncNum
);
++
(
pSelect
->
selectFuncNum
);
}
else
if
(
fmIs
AggFunc
(
pFunc
->
funcId
)
||
fmIsIndefiniteRows
Func
(
pFunc
->
funcId
))
{
}
else
if
(
fmIs
Vector
Func
(
pFunc
->
funcId
))
{
pSelect
->
hasOtherVectorFunc
=
true
;
pSelect
->
hasOtherVectorFunc
=
true
;
}
}
pSelect
->
hasUniqueFunc
=
pSelect
->
hasUniqueFunc
?
true
:
(
FUNCTION_TYPE_UNIQUE
==
pFunc
->
funcType
);
pSelect
->
hasUniqueFunc
=
pSelect
->
hasUniqueFunc
?
true
:
(
FUNCTION_TYPE_UNIQUE
==
pFunc
->
funcType
);
...
@@ -1514,18 +1514,11 @@ static int32_t rewriteColsToSelectValFunc(STranslateContext* pCxt, SSelectStmt*
...
@@ -1514,18 +1514,11 @@ static int32_t rewriteColsToSelectValFunc(STranslateContext* pCxt, SSelectStmt*
typedef
struct
CheckAggColCoexistCxt
{
typedef
struct
CheckAggColCoexistCxt
{
STranslateContext
*
pTranslateCxt
;
STranslateContext
*
pTranslateCxt
;
bool
existCol
;
bool
existCol
;
int32_t
selectFuncNum
;
bool
existOtherVectorFunc
;
}
CheckAggColCoexistCxt
;
}
CheckAggColCoexistCxt
;
static
EDealRes
doCheckAggColCoexist
(
SNode
**
pNode
,
void
*
pContext
)
{
static
EDealRes
doCheckAggColCoexist
(
SNode
**
pNode
,
void
*
pContext
)
{
CheckAggColCoexistCxt
*
pCxt
=
(
CheckAggColCoexistCxt
*
)
pContext
;
CheckAggColCoexistCxt
*
pCxt
=
(
CheckAggColCoexistCxt
*
)
pContext
;
if
(
isVectorFunc
(
*
pNode
))
{
if
(
isVectorFunc
(
*
pNode
))
{
if
(
isSelectFunc
(
*
pNode
))
{
++
(
pCxt
->
selectFuncNum
);
}
else
{
pCxt
->
existOtherVectorFunc
=
true
;
}
return
DEAL_RES_IGNORE_CHILD
;
return
DEAL_RES_IGNORE_CHILD
;
}
}
SNode
*
pPartKey
=
NULL
;
SNode
*
pPartKey
=
NULL
;
...
@@ -1542,16 +1535,15 @@ static EDealRes doCheckAggColCoexist(SNode** pNode, void* pContext) {
...
@@ -1542,16 +1535,15 @@ static EDealRes doCheckAggColCoexist(SNode** pNode, void* pContext) {
static
int32_t
checkAggColCoexist
(
STranslateContext
*
pCxt
,
SSelectStmt
*
pSelect
)
{
static
int32_t
checkAggColCoexist
(
STranslateContext
*
pCxt
,
SSelectStmt
*
pSelect
)
{
if
(
NULL
!=
pSelect
->
pGroupByList
||
NULL
!=
pSelect
->
pWindow
||
if
(
NULL
!=
pSelect
->
pGroupByList
||
NULL
!=
pSelect
->
pWindow
||
(
!
pSelect
->
hasAggFuncs
&&
!
pSelect
->
hasIndefiniteRowsFunc
))
{
(
!
pSelect
->
hasAggFuncs
&&
!
pSelect
->
hasIndefiniteRowsFunc
&&
!
pSelect
->
hasInterpFunc
))
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
CheckAggColCoexistCxt
cxt
=
{
CheckAggColCoexistCxt
cxt
=
{.
pTranslateCxt
=
pCxt
,
.
existCol
=
false
};
.
pTranslateCxt
=
pCxt
,
.
existCol
=
false
,
.
selectFuncNum
=
0
,
.
existOtherVectorFunc
=
false
};
nodesRewriteExprs
(
pSelect
->
pProjectionList
,
doCheckAggColCoexist
,
&
cxt
);
nodesRewriteExprs
(
pSelect
->
pProjectionList
,
doCheckAggColCoexist
,
&
cxt
);
if
(
!
pSelect
->
isDistinct
)
{
if
(
!
pSelect
->
isDistinct
)
{
nodesRewriteExprs
(
pSelect
->
pOrderByList
,
doCheckAggColCoexist
,
&
cxt
);
nodesRewriteExprs
(
pSelect
->
pOrderByList
,
doCheckAggColCoexist
,
&
cxt
);
}
}
if
(
1
==
cxt
.
selectFuncNum
&&
!
cxt
.
exist
OtherVectorFunc
)
{
if
(
1
==
pSelect
->
selectFuncNum
&&
!
pSelect
->
has
OtherVectorFunc
)
{
return
rewriteColsToSelectValFunc
(
pCxt
,
pSelect
);
return
rewriteColsToSelectValFunc
(
pCxt
,
pSelect
);
}
}
if
(
cxt
.
existCol
)
{
if
(
cxt
.
existCol
)
{
...
@@ -3152,6 +3144,14 @@ static int32_t translateAlterDatabase(STranslateContext* pCxt, SAlterDatabaseStm
...
@@ -3152,6 +3144,14 @@ static int32_t translateAlterDatabase(STranslateContext* pCxt, SAlterDatabaseStm
return
buildCmdMsg
(
pCxt
,
TDMT_MND_ALTER_DB
,
(
FSerializeFunc
)
tSerializeSAlterDbReq
,
&
alterReq
);
return
buildCmdMsg
(
pCxt
,
TDMT_MND_ALTER_DB
,
(
FSerializeFunc
)
tSerializeSAlterDbReq
,
&
alterReq
);
}
}
static
int32_t
translateTrimDatabase
(
STranslateContext
*
pCxt
,
STrimDatabaseStmt
*
pStmt
)
{
STrimDbReq
req
=
{
0
};
SName
name
=
{
0
};
tNameSetDbName
(
&
name
,
pCxt
->
pParseCxt
->
acctId
,
pStmt
->
dbName
,
strlen
(
pStmt
->
dbName
));
tNameGetFullDbName
(
&
name
,
req
.
db
);
return
buildCmdMsg
(
pCxt
,
TDMT_MND_TRIM_DB
,
(
FSerializeFunc
)
tSerializeSTrimDbReq
,
&
req
);
}
static
int32_t
columnDefNodeToField
(
SNodeList
*
pList
,
SArray
**
pArray
)
{
static
int32_t
columnDefNodeToField
(
SNodeList
*
pList
,
SArray
**
pArray
)
{
*
pArray
=
taosArrayInit
(
LIST_LENGTH
(
pList
),
sizeof
(
SField
));
*
pArray
=
taosArrayInit
(
LIST_LENGTH
(
pList
),
sizeof
(
SField
));
SNode
*
pNode
;
SNode
*
pNode
;
...
@@ -4584,6 +4584,9 @@ static int32_t translateQuery(STranslateContext* pCxt, SNode* pNode) {
...
@@ -4584,6 +4584,9 @@ static int32_t translateQuery(STranslateContext* pCxt, SNode* pNode) {
case
QUERY_NODE_ALTER_DATABASE_STMT
:
case
QUERY_NODE_ALTER_DATABASE_STMT
:
code
=
translateAlterDatabase
(
pCxt
,
(
SAlterDatabaseStmt
*
)
pNode
);
code
=
translateAlterDatabase
(
pCxt
,
(
SAlterDatabaseStmt
*
)
pNode
);
break
;
break
;
case
QUERY_NODE_TRIM_DATABASE_STMT
:
code
=
translateTrimDatabase
(
pCxt
,
(
STrimDatabaseStmt
*
)
pNode
);
break
;
case
QUERY_NODE_CREATE_TABLE_STMT
:
case
QUERY_NODE_CREATE_TABLE_STMT
:
code
=
translateCreateSuperTable
(
pCxt
,
(
SCreateTableStmt
*
)
pNode
);
code
=
translateCreateSuperTable
(
pCxt
,
(
SCreateTableStmt
*
)
pNode
);
break
;
break
;
...
...
source/libs/parser/src/sql.c
浏览文件 @
aa016b65
此差异已折叠。
点击以展开。
source/libs/parser/test/parSelectTest.cpp
浏览文件 @
aa016b65
...
@@ -245,13 +245,21 @@ TEST_F(ParserSelectTest, orderBy) {
...
@@ -245,13 +245,21 @@ TEST_F(ParserSelectTest, orderBy) {
TEST_F
(
ParserSelectTest
,
distinct
)
{
TEST_F
(
ParserSelectTest
,
distinct
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
//
run("SELECT distinct c1, c2 FROM t1 WHERE c1 > 0 order by c1");
run
(
"SELECT distinct c1, c2 FROM t1 WHERE c1 > 0 order by c1"
);
//
run("SELECT distinct c1 + 10, c2 FROM t1 WHERE c1 > 0 order by c1 + 10, c2");
run
(
"SELECT distinct c1 + 10, c2 FROM t1 WHERE c1 > 0 order by c1 + 10, c2"
);
//
run("SELECT distinct c1 + 10 cc1, c2 cc2 FROM t1 WHERE c1 > 0 order by cc1, c2");
run
(
"SELECT distinct c1 + 10 cc1, c2 cc2 FROM t1 WHERE c1 > 0 order by cc1, c2"
);
// run("SELECT distinct COUNT(c2) FROM t1 WHERE c1 > 0 GROUP BY c1 order by COUNT(c2)");
run
(
"SELECT distinct COUNT(c2) FROM t1 WHERE c1 > 0 GROUP BY c1 order by COUNT(c2)"
);
}
TEST_F
(
ParserSelectTest
,
limit
)
{
useDb
(
"root"
,
"test"
);
run
(
"SELECT c1, c2 FROM t1 LIMIT 10"
);
run
(
"(SELECT c1, c2 FROM t1 LIMIT 10)"
);
}
}
// INTERVAL(interval_val [, interval_offset]) [SLIDING (sliding_val)] [FILL(fill_mod_and_val)]
// INTERVAL(interval_val [, interval_offset]) [SLIDING (sliding_val)] [FILL(fill_mod_and_val)]
...
...
source/libs/parser/test/parShowToUse.cpp
浏览文件 @
aa016b65
...
@@ -222,6 +222,25 @@ TEST_F(ParserShowToUseTest, splitVgroup) {
...
@@ -222,6 +222,25 @@ TEST_F(ParserShowToUseTest, splitVgroup) {
run
(
"SPLIT VGROUP 15"
);
run
(
"SPLIT VGROUP 15"
);
}
}
TEST_F
(
ParserShowToUseTest
,
trimDatabase
)
{
useDb
(
"root"
,
"test"
);
STrimDbReq
expect
=
{
0
};
auto
setTrimDbReq
=
[
&
](
const
char
*
pDb
)
{
snprintf
(
expect
.
db
,
sizeof
(
expect
.
db
),
"0.%s"
,
pDb
);
};
setCheckDdlFunc
([
&
](
const
SQuery
*
pQuery
,
ParserStage
stage
)
{
ASSERT_EQ
(
nodeType
(
pQuery
->
pRoot
),
QUERY_NODE_TRIM_DATABASE_STMT
);
ASSERT_EQ
(
pQuery
->
pCmdMsg
->
msgType
,
TDMT_MND_TRIM_DB
);
STrimDbReq
req
=
{
0
};
ASSERT_EQ
(
tDeserializeSTrimDbReq
(
pQuery
->
pCmdMsg
->
pMsg
,
pQuery
->
pCmdMsg
->
msgLen
,
&
req
),
TSDB_CODE_SUCCESS
);
ASSERT_EQ
(
std
::
string
(
req
.
db
),
std
::
string
(
expect
.
db
));
});
setTrimDbReq
(
"wxy_db"
);
run
(
"TRIM DATABASE wxy_db"
);
}
TEST_F
(
ParserShowToUseTest
,
useDatabase
)
{
TEST_F
(
ParserShowToUseTest
,
useDatabase
)
{
useDb
(
"root"
,
"test"
);
useDb
(
"root"
,
"test"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录