Merge branch '3.0' into feature/stream
This commit is contained in:
commit
739e7ae76f
|
@ -2,7 +2,7 @@
|
|||
# taos-tools
|
||||
ExternalProject_Add(taos-tools
|
||||
GIT_REPOSITORY https://github.com/taosdata/taos-tools.git
|
||||
GIT_TAG 2460442
|
||||
GIT_TAG 212c34d
|
||||
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taos-tools"
|
||||
BINARY_DIR ""
|
||||
#BUILD_IN_SOURCE TRUE
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# taosws-rs
|
||||
ExternalProject_Add(taosws-rs
|
||||
GIT_REPOSITORY https://github.com/taosdata/taos-connector-rust.git
|
||||
GIT_TAG 7a54d21
|
||||
GIT_TAG b91b39c
|
||||
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taosws-rs"
|
||||
BINARY_DIR ""
|
||||
#BUILD_IN_SOURCE TRUE
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
sidebar_label: 支持的数据类型
|
||||
title: 支持的数据类型
|
||||
sidebar_label: 数据类型
|
||||
title: 数据类型
|
||||
description: "TDengine 支持的数据类型: 时间戳、浮点型、JSON 类型等"
|
||||
---
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
sidebar_label: 数据库管理
|
||||
title: 数据库管理
|
||||
sidebar_label: 数据库
|
||||
title: 数据库
|
||||
description: "创建、删除数据库,查看、修改数据库参数"
|
||||
---
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: 表管理
|
||||
title: 表
|
||||
sidebar_label: 表
|
||||
description: 对表的各种管理操作
|
||||
---
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
sidebar_label: 超级表管理
|
||||
title: 超级表 STable 管理
|
||||
sidebar_label: 超级表
|
||||
title: 超级表
|
||||
description: 对超级表的各种管理操作
|
||||
---
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
sidebar_label: 时序数据特色查询
|
||||
title: 时序数据特色查询
|
||||
sidebar_label: 特色查询
|
||||
title: 特色查询
|
||||
description: TDengine 提供的时序数据特有的查询功能
|
||||
---
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
sidebar_label: JSON 类型使用说明
|
||||
title: JSON 类型使用说明
|
||||
sidebar_label: JSON 类型
|
||||
title: JSON 类型
|
||||
description: 对 JSON 类型如何使用的详细说明
|
||||
---
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: 转义字符说明
|
||||
title: 转义字符
|
||||
sidebar_label: 转义字符
|
||||
description: TDengine 中使用转义字符的详细规则
|
||||
---
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
sidebar_label: 命名与边界限制
|
||||
title: 命名与边界限制
|
||||
sidebar_label: 命名与边界
|
||||
title: 命名与边界
|
||||
description: 合法字符集和命名中的限制规则
|
||||
---
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
sidebar_label: 保留关键字
|
||||
title: TDengine 保留关键字
|
||||
title: 保留关键字
|
||||
description: TDengine 保留关键字的详细列表
|
||||
---
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
sidebar_label: 元数据
|
||||
title: 存储元数据的 Information_Schema 数据库
|
||||
title: 元数据
|
||||
description: Information_Schema 数据库中存储了系统中所有的元数据信息
|
||||
---
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
sidebar_label: 统计数据
|
||||
title: 存储统计数据的 Performance_Schema 数据库
|
||||
title: 统计数据
|
||||
description: Performance_Schema 数据库中存储了系统中的各种统计信息
|
||||
---
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
sidebar_label: SHOW 命令
|
||||
title: 使用 SHOW 命令查看系统元数据
|
||||
title: SHOW 命令
|
||||
description: SHOW 命令的完整列表
|
||||
---
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
sidebar_label: 自定义函数
|
||||
title: 用户自定义函数
|
||||
title: 自定义函数
|
||||
description: 使用 UDF 的详细指南
|
||||
---
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
sidebar_label: 索引
|
||||
title: 使用索引
|
||||
title: 索引
|
||||
description: 索引功能的使用细节
|
||||
---
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
sidebar_label: 3.0 版本语法变更
|
||||
title: 3.0 版本语法变更
|
||||
sidebar_label: 语法变更
|
||||
title: 语法变更
|
||||
description: "TDengine 3.0 版本的语法变更说明"
|
||||
---
|
||||
|
||||
|
|
|
@ -784,6 +784,7 @@ typedef struct {
|
|||
int64_t walRetentionSize;
|
||||
int32_t walRollPeriod;
|
||||
int64_t walSegmentSize;
|
||||
int32_t sstTrigger;
|
||||
} SCreateDbReq;
|
||||
|
||||
int32_t tSerializeSCreateDbReq(void* buf, int32_t bufLen, SCreateDbReq* pReq);
|
||||
|
@ -805,6 +806,7 @@ typedef struct {
|
|||
int8_t strict;
|
||||
int8_t cacheLast;
|
||||
int8_t replications;
|
||||
int32_t sstTrigger;
|
||||
} SAlterDbReq;
|
||||
|
||||
int32_t tSerializeSAlterDbReq(void* buf, int32_t bufLen, SAlterDbReq* pReq);
|
||||
|
@ -2069,9 +2071,9 @@ int32_t tDeserializeSVCreateTbBatchRsp(void* buf, int32_t bufLen, SVCreateTbBatc
|
|||
|
||||
// TDMT_VND_DROP_TABLE =================
|
||||
typedef struct {
|
||||
char* name;
|
||||
uint64_t suid; // for tmq in wal format
|
||||
int8_t igNotExists;
|
||||
char* name;
|
||||
uint64_t suid; // for tmq in wal format
|
||||
int8_t igNotExists;
|
||||
} SVDropTbReq;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -102,224 +102,225 @@
|
|||
#define TK_WAL_RETENTION_SIZE 84
|
||||
#define TK_WAL_ROLL_PERIOD 85
|
||||
#define TK_WAL_SEGMENT_SIZE 86
|
||||
#define TK_NK_COLON 87
|
||||
#define TK_TABLE 88
|
||||
#define TK_NK_LP 89
|
||||
#define TK_NK_RP 90
|
||||
#define TK_STABLE 91
|
||||
#define TK_ADD 92
|
||||
#define TK_COLUMN 93
|
||||
#define TK_MODIFY 94
|
||||
#define TK_RENAME 95
|
||||
#define TK_TAG 96
|
||||
#define TK_SET 97
|
||||
#define TK_NK_EQ 98
|
||||
#define TK_USING 99
|
||||
#define TK_TAGS 100
|
||||
#define TK_COMMENT 101
|
||||
#define TK_BOOL 102
|
||||
#define TK_TINYINT 103
|
||||
#define TK_SMALLINT 104
|
||||
#define TK_INT 105
|
||||
#define TK_INTEGER 106
|
||||
#define TK_BIGINT 107
|
||||
#define TK_FLOAT 108
|
||||
#define TK_DOUBLE 109
|
||||
#define TK_BINARY 110
|
||||
#define TK_TIMESTAMP 111
|
||||
#define TK_NCHAR 112
|
||||
#define TK_UNSIGNED 113
|
||||
#define TK_JSON 114
|
||||
#define TK_VARCHAR 115
|
||||
#define TK_MEDIUMBLOB 116
|
||||
#define TK_BLOB 117
|
||||
#define TK_VARBINARY 118
|
||||
#define TK_DECIMAL 119
|
||||
#define TK_MAX_DELAY 120
|
||||
#define TK_WATERMARK 121
|
||||
#define TK_ROLLUP 122
|
||||
#define TK_TTL 123
|
||||
#define TK_SMA 124
|
||||
#define TK_FIRST 125
|
||||
#define TK_LAST 126
|
||||
#define TK_SHOW 127
|
||||
#define TK_DATABASES 128
|
||||
#define TK_TABLES 129
|
||||
#define TK_STABLES 130
|
||||
#define TK_MNODES 131
|
||||
#define TK_MODULES 132
|
||||
#define TK_QNODES 133
|
||||
#define TK_FUNCTIONS 134
|
||||
#define TK_INDEXES 135
|
||||
#define TK_ACCOUNTS 136
|
||||
#define TK_APPS 137
|
||||
#define TK_CONNECTIONS 138
|
||||
#define TK_LICENCES 139
|
||||
#define TK_GRANTS 140
|
||||
#define TK_QUERIES 141
|
||||
#define TK_SCORES 142
|
||||
#define TK_TOPICS 143
|
||||
#define TK_VARIABLES 144
|
||||
#define TK_BNODES 145
|
||||
#define TK_SNODES 146
|
||||
#define TK_CLUSTER 147
|
||||
#define TK_TRANSACTIONS 148
|
||||
#define TK_DISTRIBUTED 149
|
||||
#define TK_CONSUMERS 150
|
||||
#define TK_SUBSCRIPTIONS 151
|
||||
#define TK_LIKE 152
|
||||
#define TK_INDEX 153
|
||||
#define TK_FUNCTION 154
|
||||
#define TK_INTERVAL 155
|
||||
#define TK_TOPIC 156
|
||||
#define TK_AS 157
|
||||
#define TK_WITH 158
|
||||
#define TK_META 159
|
||||
#define TK_CONSUMER 160
|
||||
#define TK_GROUP 161
|
||||
#define TK_DESC 162
|
||||
#define TK_DESCRIBE 163
|
||||
#define TK_RESET 164
|
||||
#define TK_QUERY 165
|
||||
#define TK_CACHE 166
|
||||
#define TK_EXPLAIN 167
|
||||
#define TK_ANALYZE 168
|
||||
#define TK_VERBOSE 169
|
||||
#define TK_NK_BOOL 170
|
||||
#define TK_RATIO 171
|
||||
#define TK_NK_FLOAT 172
|
||||
#define TK_OUTPUTTYPE 173
|
||||
#define TK_AGGREGATE 174
|
||||
#define TK_BUFSIZE 175
|
||||
#define TK_STREAM 176
|
||||
#define TK_INTO 177
|
||||
#define TK_TRIGGER 178
|
||||
#define TK_AT_ONCE 179
|
||||
#define TK_WINDOW_CLOSE 180
|
||||
#define TK_IGNORE 181
|
||||
#define TK_EXPIRED 182
|
||||
#define TK_KILL 183
|
||||
#define TK_CONNECTION 184
|
||||
#define TK_TRANSACTION 185
|
||||
#define TK_BALANCE 186
|
||||
#define TK_VGROUP 187
|
||||
#define TK_MERGE 188
|
||||
#define TK_REDISTRIBUTE 189
|
||||
#define TK_SPLIT 190
|
||||
#define TK_DELETE 191
|
||||
#define TK_INSERT 192
|
||||
#define TK_NULL 193
|
||||
#define TK_NK_QUESTION 194
|
||||
#define TK_NK_ARROW 195
|
||||
#define TK_ROWTS 196
|
||||
#define TK_TBNAME 197
|
||||
#define TK_QSTART 198
|
||||
#define TK_QEND 199
|
||||
#define TK_QDURATION 200
|
||||
#define TK_WSTART 201
|
||||
#define TK_WEND 202
|
||||
#define TK_WDURATION 203
|
||||
#define TK_CAST 204
|
||||
#define TK_NOW 205
|
||||
#define TK_TODAY 206
|
||||
#define TK_TIMEZONE 207
|
||||
#define TK_CLIENT_VERSION 208
|
||||
#define TK_SERVER_VERSION 209
|
||||
#define TK_SERVER_STATUS 210
|
||||
#define TK_CURRENT_USER 211
|
||||
#define TK_COUNT 212
|
||||
#define TK_LAST_ROW 213
|
||||
#define TK_BETWEEN 214
|
||||
#define TK_IS 215
|
||||
#define TK_NK_LT 216
|
||||
#define TK_NK_GT 217
|
||||
#define TK_NK_LE 218
|
||||
#define TK_NK_GE 219
|
||||
#define TK_NK_NE 220
|
||||
#define TK_MATCH 221
|
||||
#define TK_NMATCH 222
|
||||
#define TK_CONTAINS 223
|
||||
#define TK_IN 224
|
||||
#define TK_JOIN 225
|
||||
#define TK_INNER 226
|
||||
#define TK_SELECT 227
|
||||
#define TK_DISTINCT 228
|
||||
#define TK_WHERE 229
|
||||
#define TK_PARTITION 230
|
||||
#define TK_BY 231
|
||||
#define TK_SESSION 232
|
||||
#define TK_STATE_WINDOW 233
|
||||
#define TK_SLIDING 234
|
||||
#define TK_FILL 235
|
||||
#define TK_VALUE 236
|
||||
#define TK_NONE 237
|
||||
#define TK_PREV 238
|
||||
#define TK_LINEAR 239
|
||||
#define TK_NEXT 240
|
||||
#define TK_HAVING 241
|
||||
#define TK_RANGE 242
|
||||
#define TK_EVERY 243
|
||||
#define TK_ORDER 244
|
||||
#define TK_SLIMIT 245
|
||||
#define TK_SOFFSET 246
|
||||
#define TK_LIMIT 247
|
||||
#define TK_OFFSET 248
|
||||
#define TK_ASC 249
|
||||
#define TK_NULLS 250
|
||||
#define TK_ABORT 251
|
||||
#define TK_AFTER 252
|
||||
#define TK_ATTACH 253
|
||||
#define TK_BEFORE 254
|
||||
#define TK_BEGIN 255
|
||||
#define TK_BITAND 256
|
||||
#define TK_BITNOT 257
|
||||
#define TK_BITOR 258
|
||||
#define TK_BLOCKS 259
|
||||
#define TK_CHANGE 260
|
||||
#define TK_COMMA 261
|
||||
#define TK_COMPACT 262
|
||||
#define TK_CONCAT 263
|
||||
#define TK_CONFLICT 264
|
||||
#define TK_COPY 265
|
||||
#define TK_DEFERRED 266
|
||||
#define TK_DELIMITERS 267
|
||||
#define TK_DETACH 268
|
||||
#define TK_DIVIDE 269
|
||||
#define TK_DOT 270
|
||||
#define TK_EACH 271
|
||||
#define TK_END 272
|
||||
#define TK_FAIL 273
|
||||
#define TK_FILE 274
|
||||
#define TK_FOR 275
|
||||
#define TK_GLOB 276
|
||||
#define TK_ID 277
|
||||
#define TK_IMMEDIATE 278
|
||||
#define TK_IMPORT 279
|
||||
#define TK_INITIALLY 280
|
||||
#define TK_INSTEAD 281
|
||||
#define TK_ISNULL 282
|
||||
#define TK_KEY 283
|
||||
#define TK_NK_BITNOT 284
|
||||
#define TK_NK_SEMI 285
|
||||
#define TK_NOTNULL 286
|
||||
#define TK_OF 287
|
||||
#define TK_PLUS 288
|
||||
#define TK_PRIVILEGE 289
|
||||
#define TK_RAISE 290
|
||||
#define TK_REPLACE 291
|
||||
#define TK_RESTRICT 292
|
||||
#define TK_ROW 293
|
||||
#define TK_SEMI 294
|
||||
#define TK_STAR 295
|
||||
#define TK_STATEMENT 296
|
||||
#define TK_STRING 297
|
||||
#define TK_TIMES 298
|
||||
#define TK_UPDATE 299
|
||||
#define TK_VALUES 300
|
||||
#define TK_VARIABLE 301
|
||||
#define TK_VIEW 302
|
||||
#define TK_VNODES 303
|
||||
#define TK_WAL 304
|
||||
#define TK_SST_TRIGGER 87
|
||||
#define TK_NK_COLON 88
|
||||
#define TK_TABLE 89
|
||||
#define TK_NK_LP 90
|
||||
#define TK_NK_RP 91
|
||||
#define TK_STABLE 92
|
||||
#define TK_ADD 93
|
||||
#define TK_COLUMN 94
|
||||
#define TK_MODIFY 95
|
||||
#define TK_RENAME 96
|
||||
#define TK_TAG 97
|
||||
#define TK_SET 98
|
||||
#define TK_NK_EQ 99
|
||||
#define TK_USING 100
|
||||
#define TK_TAGS 101
|
||||
#define TK_COMMENT 102
|
||||
#define TK_BOOL 103
|
||||
#define TK_TINYINT 104
|
||||
#define TK_SMALLINT 105
|
||||
#define TK_INT 106
|
||||
#define TK_INTEGER 107
|
||||
#define TK_BIGINT 108
|
||||
#define TK_FLOAT 109
|
||||
#define TK_DOUBLE 110
|
||||
#define TK_BINARY 111
|
||||
#define TK_TIMESTAMP 112
|
||||
#define TK_NCHAR 113
|
||||
#define TK_UNSIGNED 114
|
||||
#define TK_JSON 115
|
||||
#define TK_VARCHAR 116
|
||||
#define TK_MEDIUMBLOB 117
|
||||
#define TK_BLOB 118
|
||||
#define TK_VARBINARY 119
|
||||
#define TK_DECIMAL 120
|
||||
#define TK_MAX_DELAY 121
|
||||
#define TK_WATERMARK 122
|
||||
#define TK_ROLLUP 123
|
||||
#define TK_TTL 124
|
||||
#define TK_SMA 125
|
||||
#define TK_FIRST 126
|
||||
#define TK_LAST 127
|
||||
#define TK_SHOW 128
|
||||
#define TK_DATABASES 129
|
||||
#define TK_TABLES 130
|
||||
#define TK_STABLES 131
|
||||
#define TK_MNODES 132
|
||||
#define TK_MODULES 133
|
||||
#define TK_QNODES 134
|
||||
#define TK_FUNCTIONS 135
|
||||
#define TK_INDEXES 136
|
||||
#define TK_ACCOUNTS 137
|
||||
#define TK_APPS 138
|
||||
#define TK_CONNECTIONS 139
|
||||
#define TK_LICENCES 140
|
||||
#define TK_GRANTS 141
|
||||
#define TK_QUERIES 142
|
||||
#define TK_SCORES 143
|
||||
#define TK_TOPICS 144
|
||||
#define TK_VARIABLES 145
|
||||
#define TK_BNODES 146
|
||||
#define TK_SNODES 147
|
||||
#define TK_CLUSTER 148
|
||||
#define TK_TRANSACTIONS 149
|
||||
#define TK_DISTRIBUTED 150
|
||||
#define TK_CONSUMERS 151
|
||||
#define TK_SUBSCRIPTIONS 152
|
||||
#define TK_VNODES 153
|
||||
#define TK_LIKE 154
|
||||
#define TK_INDEX 155
|
||||
#define TK_FUNCTION 156
|
||||
#define TK_INTERVAL 157
|
||||
#define TK_TOPIC 158
|
||||
#define TK_AS 159
|
||||
#define TK_WITH 160
|
||||
#define TK_META 161
|
||||
#define TK_CONSUMER 162
|
||||
#define TK_GROUP 163
|
||||
#define TK_DESC 164
|
||||
#define TK_DESCRIBE 165
|
||||
#define TK_RESET 166
|
||||
#define TK_QUERY 167
|
||||
#define TK_CACHE 168
|
||||
#define TK_EXPLAIN 169
|
||||
#define TK_ANALYZE 170
|
||||
#define TK_VERBOSE 171
|
||||
#define TK_NK_BOOL 172
|
||||
#define TK_RATIO 173
|
||||
#define TK_NK_FLOAT 174
|
||||
#define TK_OUTPUTTYPE 175
|
||||
#define TK_AGGREGATE 176
|
||||
#define TK_BUFSIZE 177
|
||||
#define TK_STREAM 178
|
||||
#define TK_INTO 179
|
||||
#define TK_TRIGGER 180
|
||||
#define TK_AT_ONCE 181
|
||||
#define TK_WINDOW_CLOSE 182
|
||||
#define TK_IGNORE 183
|
||||
#define TK_EXPIRED 184
|
||||
#define TK_KILL 185
|
||||
#define TK_CONNECTION 186
|
||||
#define TK_TRANSACTION 187
|
||||
#define TK_BALANCE 188
|
||||
#define TK_VGROUP 189
|
||||
#define TK_MERGE 190
|
||||
#define TK_REDISTRIBUTE 191
|
||||
#define TK_SPLIT 192
|
||||
#define TK_DELETE 193
|
||||
#define TK_INSERT 194
|
||||
#define TK_NULL 195
|
||||
#define TK_NK_QUESTION 196
|
||||
#define TK_NK_ARROW 197
|
||||
#define TK_ROWTS 198
|
||||
#define TK_TBNAME 199
|
||||
#define TK_QSTART 200
|
||||
#define TK_QEND 201
|
||||
#define TK_QDURATION 202
|
||||
#define TK_WSTART 203
|
||||
#define TK_WEND 204
|
||||
#define TK_WDURATION 205
|
||||
#define TK_CAST 206
|
||||
#define TK_NOW 207
|
||||
#define TK_TODAY 208
|
||||
#define TK_TIMEZONE 209
|
||||
#define TK_CLIENT_VERSION 210
|
||||
#define TK_SERVER_VERSION 211
|
||||
#define TK_SERVER_STATUS 212
|
||||
#define TK_CURRENT_USER 213
|
||||
#define TK_COUNT 214
|
||||
#define TK_LAST_ROW 215
|
||||
#define TK_BETWEEN 216
|
||||
#define TK_IS 217
|
||||
#define TK_NK_LT 218
|
||||
#define TK_NK_GT 219
|
||||
#define TK_NK_LE 220
|
||||
#define TK_NK_GE 221
|
||||
#define TK_NK_NE 222
|
||||
#define TK_MATCH 223
|
||||
#define TK_NMATCH 224
|
||||
#define TK_CONTAINS 225
|
||||
#define TK_IN 226
|
||||
#define TK_JOIN 227
|
||||
#define TK_INNER 228
|
||||
#define TK_SELECT 229
|
||||
#define TK_DISTINCT 230
|
||||
#define TK_WHERE 231
|
||||
#define TK_PARTITION 232
|
||||
#define TK_BY 233
|
||||
#define TK_SESSION 234
|
||||
#define TK_STATE_WINDOW 235
|
||||
#define TK_SLIDING 236
|
||||
#define TK_FILL 237
|
||||
#define TK_VALUE 238
|
||||
#define TK_NONE 239
|
||||
#define TK_PREV 240
|
||||
#define TK_LINEAR 241
|
||||
#define TK_NEXT 242
|
||||
#define TK_HAVING 243
|
||||
#define TK_RANGE 244
|
||||
#define TK_EVERY 245
|
||||
#define TK_ORDER 246
|
||||
#define TK_SLIMIT 247
|
||||
#define TK_SOFFSET 248
|
||||
#define TK_LIMIT 249
|
||||
#define TK_OFFSET 250
|
||||
#define TK_ASC 251
|
||||
#define TK_NULLS 252
|
||||
#define TK_ABORT 253
|
||||
#define TK_AFTER 254
|
||||
#define TK_ATTACH 255
|
||||
#define TK_BEFORE 256
|
||||
#define TK_BEGIN 257
|
||||
#define TK_BITAND 258
|
||||
#define TK_BITNOT 259
|
||||
#define TK_BITOR 260
|
||||
#define TK_BLOCKS 261
|
||||
#define TK_CHANGE 262
|
||||
#define TK_COMMA 263
|
||||
#define TK_COMPACT 264
|
||||
#define TK_CONCAT 265
|
||||
#define TK_CONFLICT 266
|
||||
#define TK_COPY 267
|
||||
#define TK_DEFERRED 268
|
||||
#define TK_DELIMITERS 269
|
||||
#define TK_DETACH 270
|
||||
#define TK_DIVIDE 271
|
||||
#define TK_DOT 272
|
||||
#define TK_EACH 273
|
||||
#define TK_END 274
|
||||
#define TK_FAIL 275
|
||||
#define TK_FILE 276
|
||||
#define TK_FOR 277
|
||||
#define TK_GLOB 278
|
||||
#define TK_ID 279
|
||||
#define TK_IMMEDIATE 280
|
||||
#define TK_IMPORT 281
|
||||
#define TK_INITIALLY 282
|
||||
#define TK_INSTEAD 283
|
||||
#define TK_ISNULL 284
|
||||
#define TK_KEY 285
|
||||
#define TK_NK_BITNOT 286
|
||||
#define TK_NK_SEMI 287
|
||||
#define TK_NOTNULL 288
|
||||
#define TK_OF 289
|
||||
#define TK_PLUS 290
|
||||
#define TK_PRIVILEGE 291
|
||||
#define TK_RAISE 292
|
||||
#define TK_REPLACE 293
|
||||
#define TK_RESTRICT 294
|
||||
#define TK_ROW 295
|
||||
#define TK_SEMI 296
|
||||
#define TK_STAR 297
|
||||
#define TK_STATEMENT 298
|
||||
#define TK_STRING 299
|
||||
#define TK_TIMES 300
|
||||
#define TK_UPDATE 301
|
||||
#define TK_VALUES 302
|
||||
#define TK_VARIABLE 303
|
||||
#define TK_VIEW 304
|
||||
#define TK_WAL 305
|
||||
|
||||
#define TK_NK_SPACE 300
|
||||
#define TK_NK_COMMENT 301
|
||||
|
|
|
@ -78,6 +78,10 @@ typedef struct SDatabaseOptions {
|
|||
int32_t walRetentionSize;
|
||||
int32_t walRollPeriod;
|
||||
int32_t walSegmentSize;
|
||||
bool walRetentionPeriodIsSet;
|
||||
bool walRetentionSizeIsSet;
|
||||
bool walRollPeriodIsSet;
|
||||
int32_t sstTrigger;
|
||||
} SDatabaseOptions;
|
||||
|
||||
typedef struct SCreateDatabaseStmt {
|
||||
|
@ -268,6 +272,12 @@ typedef struct SShowDnodeVariablesStmt {
|
|||
SNode* pDnodeId;
|
||||
} SShowDnodeVariablesStmt;
|
||||
|
||||
typedef struct SShowVnodesStmt {
|
||||
ENodeType type;
|
||||
SNode* pDnodeId;
|
||||
SNode* pDnodeEndpoint;
|
||||
} SShowVnodesStmt;
|
||||
|
||||
typedef enum EIndexType { INDEX_TYPE_SMA = 1, INDEX_TYPE_FULLTEXT } EIndexType;
|
||||
|
||||
typedef struct SIndexOptions {
|
||||
|
|
|
@ -183,12 +183,12 @@ typedef enum ENodeType {
|
|||
QUERY_NODE_SHOW_DNODE_VARIABLES_STMT,
|
||||
QUERY_NODE_SHOW_TRANSACTIONS_STMT,
|
||||
QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT,
|
||||
QUERY_NODE_SHOW_VNODES_STMT,
|
||||
QUERY_NODE_SHOW_CREATE_DATABASE_STMT,
|
||||
QUERY_NODE_SHOW_CREATE_TABLE_STMT,
|
||||
QUERY_NODE_SHOW_CREATE_STABLE_STMT,
|
||||
QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT,
|
||||
QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT,
|
||||
QUERY_NODE_SHOW_VNODES_STMT,
|
||||
QUERY_NODE_SHOW_SCORES_STMT,
|
||||
QUERY_NODE_KILL_CONNECTION_STMT,
|
||||
QUERY_NODE_KILL_QUERY_STMT,
|
||||
|
|
|
@ -56,6 +56,7 @@ void taosRemoveDir(const char *dirname);
|
|||
bool taosDirExist(const char *dirname);
|
||||
int32_t taosMkDir(const char *dirname);
|
||||
int32_t taosMulMkDir(const char *dirname);
|
||||
int32_t taosMulModeMkDir(const char *dirname, int mode);
|
||||
void taosRemoveOldFiles(const char *dirname, int32_t keepDays);
|
||||
int32_t taosExpandDir(const char *dirname, char *outname, int32_t maxlen);
|
||||
int32_t taosRealPath(char *dirname, char *realPath, int32_t maxlen);
|
||||
|
|
|
@ -359,15 +359,21 @@ typedef enum ELogicConditionType {
|
|||
#define TSDB_DB_SCHEMALESS_ON 1
|
||||
#define TSDB_DB_SCHEMALESS_OFF 0
|
||||
#define TSDB_DEFAULT_DB_SCHEMALESS TSDB_DB_SCHEMALESS_OFF
|
||||
#define TSDB_MIN_SST_TRIGGER 1
|
||||
#define TSDB_MAX_SST_TRIGGER 128
|
||||
#define TSDB_DEFAULT_SST_TRIGGER 8
|
||||
|
||||
#define TSDB_DB_MIN_WAL_RETENTION_PERIOD -1
|
||||
#define TSDB_DEFAULT_DB_WAL_RETENTION_PERIOD (24 * 60 * 60 * 4)
|
||||
#define TSDB_DB_MIN_WAL_RETENTION_SIZE -1
|
||||
#define TSDB_DEFAULT_DB_WAL_RETENTION_SIZE -1
|
||||
#define TSDB_DB_MIN_WAL_ROLL_PERIOD 0
|
||||
#define TSDB_DEFAULT_DB_WAL_ROLL_PERIOD (24 * 60 * 60 * 1)
|
||||
#define TSDB_DB_MIN_WAL_SEGMENT_SIZE 0
|
||||
#define TSDB_DEFAULT_DB_WAL_SEGMENT_SIZE 0
|
||||
#define TSDB_DB_MIN_WAL_RETENTION_PERIOD -1
|
||||
#define TSDB_REP_DEF_DB_WAL_RET_PERIOD 0
|
||||
#define TSDB_REPS_DEF_DB_WAL_RET_PERIOD (24 * 60 * 60 * 4)
|
||||
#define TSDB_DB_MIN_WAL_RETENTION_SIZE -1
|
||||
#define TSDB_REP_DEF_DB_WAL_RET_SIZE 0
|
||||
#define TSDB_REPS_DEF_DB_WAL_RET_SIZE -1
|
||||
#define TSDB_DB_MIN_WAL_ROLL_PERIOD 0
|
||||
#define TSDB_REP_DEF_DB_WAL_ROLL_PERIOD 0
|
||||
#define TSDB_REPS_DEF_DB_WAL_ROLL_PERIOD (24 * 60 * 60 * 1)
|
||||
#define TSDB_DB_MIN_WAL_SEGMENT_SIZE 0
|
||||
#define TSDB_DEFAULT_DB_WAL_SEGMENT_SIZE 0
|
||||
|
||||
#define TSDB_MIN_ROLLUP_MAX_DELAY 1 // unit millisecond
|
||||
#define TSDB_MAX_ROLLUP_MAX_DELAY (15 * 60 * 1000)
|
||||
|
@ -386,7 +392,7 @@ typedef enum ELogicConditionType {
|
|||
|
||||
#define TSDB_DEFAULT_EXPLAIN_VERBOSE false
|
||||
|
||||
#define TSDB_EXPLAIN_RESULT_ROW_SIZE (16*1024)
|
||||
#define TSDB_EXPLAIN_RESULT_ROW_SIZE (16 * 1024)
|
||||
#define TSDB_EXPLAIN_RESULT_COLUMN_NAME "QUERY_PLAN"
|
||||
|
||||
#define TSDB_MAX_FIELD_LEN 16384
|
||||
|
|
|
@ -45,6 +45,7 @@ mkdir -p ${pkg_dir}${install_home_path}/include
|
|||
mkdir -p ${pkg_dir}${install_home_path}/script
|
||||
|
||||
cp ${compile_dir}/../packaging/cfg/taos.cfg ${pkg_dir}${install_home_path}/cfg
|
||||
cp ${compile_dir}/../packaging/cfg/taosd.service ${pkg_dir}${install_home_path}/cfg
|
||||
if [ -f "${compile_dir}/test/cfg/taosadapter.toml" ]; then
|
||||
cp ${compile_dir}/test/cfg/taosadapter.toml ${pkg_dir}${install_home_path}/cfg || :
|
||||
fi
|
||||
|
|
|
@ -537,7 +537,7 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) {
|
|||
|
||||
code = smlSendMetaMsg(info, &pName, pColumns, pTags, pTableMeta, action);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
uError("SML:0x%" PRIx64 " smlSendMetaMsg failed. can not create %s", info->id, superTable);
|
||||
uError("SML:0x%" PRIx64 " smlSendMetaMsg failed. can not create %s", info->id, pName.tname);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
@ -555,7 +555,7 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) {
|
|||
|
||||
code = catalogGetSTableMeta(info->pCatalog, &conn, &pName, &pTableMeta);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
uError("SML:0x%" PRIx64 " catalogGetSTableMeta failed. super table name %s", info->id, (char *)superTable);
|
||||
uError("SML:0x%" PRIx64 " catalogGetSTableMeta failed. super table name %s", info->id, pName.tname);
|
||||
goto end;
|
||||
}
|
||||
|
||||
|
@ -563,12 +563,12 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) {
|
|||
code = smlCheckMeta(&(pTableMeta->schema[pTableMeta->tableInfo.numOfColumns]), pTableMeta->tableInfo.numOfTags,
|
||||
sTableData->tags, true);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
uError("SML:0x%" PRIx64 " check tag failed. super table name %s", info->id, (char *)superTable);
|
||||
uError("SML:0x%" PRIx64 " check tag failed. super table name %s", info->id, pName.tname);
|
||||
goto end;
|
||||
}
|
||||
code = smlCheckMeta(&(pTableMeta->schema[0]), pTableMeta->tableInfo.numOfColumns, sTableData->cols, false);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
uError("SML:0x%" PRIx64 " check cols failed. super table name %s", info->id, (char *)superTable);
|
||||
uError("SML:0x%" PRIx64 " check cols failed. super table name %s", info->id, pName.tname);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
@ -1559,7 +1559,7 @@ cleanup:
|
|||
|
||||
/************* TSDB_SML_JSON_PROTOCOL function start **************/
|
||||
static int32_t smlJsonCreateSring(const char **output, char *input, int32_t inputLen) {
|
||||
*output = (const char *)taosMemoryMalloc(inputLen);
|
||||
*output = (const char *)taosMemoryCalloc(1, inputLen);
|
||||
if (*output == NULL) {
|
||||
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||
}
|
||||
|
@ -2450,9 +2450,11 @@ static void smlInsertCallback(void *param, void *res, int32_t code) {
|
|||
uDebug("SML:0x%" PRIx64 " result. code:%d, msg:%s", info->id, pRequest->code, pRequest->msgBuf);
|
||||
// lock
|
||||
taosThreadSpinLock(&info->params->lock);
|
||||
info->params->request->body.resInfo.numOfRows += rows;
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
info->params->request->code = code;
|
||||
info->params->request->body.resInfo.numOfRows += rows;
|
||||
}else{
|
||||
info->params->request->body.resInfo.numOfRows += info->affectedRows;
|
||||
}
|
||||
taosThreadSpinUnlock(&info->params->lock);
|
||||
// unlock
|
||||
|
|
|
@ -256,6 +256,13 @@ static const SSysDbTableSchema subscriptionSchema[] = {
|
|||
{.name = "consumer_id", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
|
||||
};
|
||||
|
||||
static const SSysDbTableSchema vnodesSchema[] = {
|
||||
{.name = "dnode_id", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
|
||||
{.name = "dnode_endpoint", .bytes = TSDB_EP_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
|
||||
{.name = "vgroup_id", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
|
||||
{.name = "status", .bytes = 20 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_BINARY, .sysInfo = true},
|
||||
};
|
||||
|
||||
static const SSysTableMeta infosMeta[] = {
|
||||
{TSDB_INS_TABLE_DNODES, dnodesSchema, tListLen(dnodesSchema), true},
|
||||
{TSDB_INS_TABLE_MNODES, mnodesSchema, tListLen(mnodesSchema), true},
|
||||
|
@ -279,6 +286,7 @@ static const SSysTableMeta infosMeta[] = {
|
|||
{TSDB_INS_TABLE_TOPICS, topicSchema, tListLen(topicSchema), false},
|
||||
{TSDB_INS_TABLE_SUBSCRIPTIONS, subscriptionSchema, tListLen(subscriptionSchema), false},
|
||||
{TSDB_INS_TABLE_STREAMS, streamSchema, tListLen(streamSchema), false},
|
||||
{TSDB_INS_TABLE_VNODES, vnodesSchema, tListLen(vnodesSchema), true},
|
||||
};
|
||||
|
||||
static const SSysDbTableSchema connectionsSchema[] = {
|
||||
|
|
|
@ -1133,7 +1133,7 @@ int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDi
|
|||
|
||||
taosSetAllDebugFlag(cfgGetItem(pCfg, "debugFlag")->i32, false);
|
||||
|
||||
if (taosMulMkDir(tsLogDir) != 0) {
|
||||
if (taosMulModeMkDir(tsLogDir, 0777) != 0) {
|
||||
uError("failed to create dir:%s since %s", tsLogDir, terrstr());
|
||||
cfgCleanup(pCfg);
|
||||
return -1;
|
||||
|
|
|
@ -2024,6 +2024,7 @@ int32_t tSerializeSCreateDbReq(void *buf, int32_t bufLen, SCreateDbReq *pReq) {
|
|||
if (tEncodeI64(&encoder, pReq->walRetentionSize) < 0) return -1;
|
||||
if (tEncodeI32(&encoder, pReq->walRollPeriod) < 0) return -1;
|
||||
if (tEncodeI64(&encoder, pReq->walSegmentSize) < 0) return -1;
|
||||
if (tEncodeI32(&encoder, pReq->sstTrigger) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pReq->ignoreExist) < 0) return -1;
|
||||
if (tEncodeI32(&encoder, pReq->numOfRetensions) < 0) return -1;
|
||||
for (int32_t i = 0; i < pReq->numOfRetensions; ++i) {
|
||||
|
@ -2070,6 +2071,7 @@ int32_t tDeserializeSCreateDbReq(void *buf, int32_t bufLen, SCreateDbReq *pReq)
|
|||
if (tDecodeI64(&decoder, &pReq->walRetentionSize) < 0) return -1;
|
||||
if (tDecodeI32(&decoder, &pReq->walRollPeriod) < 0) return -1;
|
||||
if (tDecodeI64(&decoder, &pReq->walSegmentSize) < 0) return -1;
|
||||
if (tDecodeI32(&decoder, &pReq->sstTrigger) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &pReq->ignoreExist) < 0) return -1;
|
||||
if (tDecodeI32(&decoder, &pReq->numOfRetensions) < 0) return -1;
|
||||
pReq->pRetensions = taosArrayInit(pReq->numOfRetensions, sizeof(SRetention));
|
||||
|
@ -2120,6 +2122,7 @@ int32_t tSerializeSAlterDbReq(void *buf, int32_t bufLen, SAlterDbReq *pReq) {
|
|||
if (tEncodeI8(&encoder, pReq->strict) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pReq->cacheLast) < 0) return -1;
|
||||
if (tEncodeI8(&encoder, pReq->replications) < 0) return -1;
|
||||
if (tEncodeI32(&encoder, pReq->sstTrigger) < 0) return -1;
|
||||
tEndEncode(&encoder);
|
||||
|
||||
int32_t tlen = encoder.pos;
|
||||
|
@ -2146,6 +2149,7 @@ int32_t tDeserializeSAlterDbReq(void *buf, int32_t bufLen, SAlterDbReq *pReq) {
|
|||
if (tDecodeI8(&decoder, &pReq->strict) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &pReq->cacheLast) < 0) return -1;
|
||||
if (tDecodeI8(&decoder, &pReq->replications) < 0) return -1;
|
||||
if (tDecodeI32(&decoder, &pReq->sstTrigger) < 0) return -1;
|
||||
tEndDecode(&decoder);
|
||||
|
||||
tDecoderClear(&decoder);
|
||||
|
|
|
@ -358,10 +358,10 @@ static void mndSetDefaultDbCfg(SDbCfg *pCfg) {
|
|||
if (pCfg->numOfRetensions < 0) pCfg->numOfRetensions = 0;
|
||||
if (pCfg->schemaless < 0) pCfg->schemaless = TSDB_DB_SCHEMALESS_OFF;
|
||||
if (pCfg->walRetentionPeriod < 0 && pCfg->walRetentionPeriod != -1)
|
||||
pCfg->walRetentionPeriod = TSDB_DEFAULT_DB_WAL_RETENTION_PERIOD;
|
||||
pCfg->walRetentionPeriod = TSDB_REPS_DEF_DB_WAL_RET_PERIOD;
|
||||
if (pCfg->walRetentionSize < 0 && pCfg->walRetentionSize != -1)
|
||||
pCfg->walRetentionSize = TSDB_DEFAULT_DB_WAL_RETENTION_SIZE;
|
||||
if (pCfg->walRollPeriod < 0) pCfg->walRollPeriod = TSDB_DEFAULT_DB_WAL_ROLL_PERIOD;
|
||||
pCfg->walRetentionSize = TSDB_REPS_DEF_DB_WAL_RET_SIZE;
|
||||
if (pCfg->walRollPeriod < 0) pCfg->walRollPeriod = TSDB_REPS_DEF_DB_WAL_ROLL_PERIOD;
|
||||
if (pCfg->walSegmentSize < 0) pCfg->walSegmentSize = TSDB_DEFAULT_DB_WAL_SEGMENT_SIZE;
|
||||
}
|
||||
|
||||
|
|
|
@ -184,9 +184,9 @@ static int32_t doAppendRowFromFileBlock(SSDataBlock* pResBlock, STsdbReader* pR
|
|||
static void setComposedBlockFlag(STsdbReader* pReader, bool composed);
|
||||
static bool hasBeenDropped(const SArray* pDelList, int32_t* index, TSDBKEY* pKey, int32_t order);
|
||||
|
||||
static void doMergeMemTableMultiRows(TSDBROW* pRow, uint64_t uid, SIterInfo* pIter, SArray* pDelList, STSRow** pTSRow,
|
||||
static int32_t doMergeMemTableMultiRows(TSDBROW* pRow, uint64_t uid, SIterInfo* pIter, SArray* pDelList, STSRow** pTSRow,
|
||||
STsdbReader* pReader, bool* freeTSRow);
|
||||
static void doMergeMemIMemRows(TSDBROW* pRow, TSDBROW* piRow, STableBlockScanInfo* pBlockScanInfo, STsdbReader* pReader,
|
||||
static int32_t doMergeMemIMemRows(TSDBROW* pRow, TSDBROW* piRow, STableBlockScanInfo* pBlockScanInfo, STsdbReader* pReader,
|
||||
STSRow** pTSRow);
|
||||
static int32_t mergeRowsInFileBlocks(SBlockData* pBlockData, STableBlockScanInfo* pBlockScanInfo, int64_t key, STsdbReader* pReader);
|
||||
|
||||
|
@ -1395,7 +1395,11 @@ static int32_t doMergeBufAndFileRows(STsdbReader* pReader, STableBlockScanInfo*
|
|||
}
|
||||
}
|
||||
|
||||
tRowMergerGetRow(&merge, &pTSRow);
|
||||
int32_t code = tRowMergerGetRow(&merge, &pTSRow);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return code;
|
||||
}
|
||||
|
||||
doAppendRowFromTSRow(pReader->pResBlock, pReader, pTSRow, pBlockScanInfo->uid);
|
||||
|
||||
taosMemoryFree(pTSRow);
|
||||
|
@ -1422,7 +1426,11 @@ static int32_t doMergeFileBlockAndLastBlock(SLastBlockReader* pLastBlockReader,
|
|||
doMergeRowsInFileBlocks(pBlockData, pBlockScanInfo, pReader, &merge);
|
||||
}
|
||||
|
||||
tRowMergerGetRow(&merge, &pTSRow);
|
||||
int32_t code = tRowMergerGetRow(&merge, &pTSRow);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return code;
|
||||
}
|
||||
|
||||
doAppendRowFromTSRow(pReader->pResBlock, pReader, pTSRow, pBlockScanInfo->uid);
|
||||
|
||||
taosMemoryFree(pTSRow);
|
||||
|
@ -1456,12 +1464,16 @@ static int32_t mergeFileBlockAndLastBlock(STsdbReader* pReader, SLastBlockReader
|
|||
doMergeRowsInFileBlocks(pBlockData, pBlockScanInfo, pReader, &merge);
|
||||
doMergeRowsInLastBlock(pLastBlockReader, pBlockScanInfo, ts, &merge);
|
||||
|
||||
tRowMergerGetRow(&merge, &pTSRow);
|
||||
int32_t code = tRowMergerGetRow(&merge, &pTSRow);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return code;
|
||||
}
|
||||
|
||||
doAppendRowFromTSRow(pReader->pResBlock, pReader, pTSRow, pBlockScanInfo->uid);
|
||||
|
||||
taosMemoryFree(pTSRow);
|
||||
tRowMergerClear(&merge);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
return code;
|
||||
} else {
|
||||
ASSERT(0);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
@ -1618,12 +1630,16 @@ static int32_t doMergeMultiLevelRows(STsdbReader* pReader, STableBlockScanInfo*
|
|||
}
|
||||
}
|
||||
|
||||
tRowMergerGetRow(&merge, &pTSRow);
|
||||
int32_t code = tRowMergerGetRow(&merge, &pTSRow);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return code;
|
||||
}
|
||||
|
||||
doAppendRowFromTSRow(pReader->pResBlock, pReader, pTSRow, pBlockScanInfo->uid);
|
||||
|
||||
taosMemoryFree(pTSRow);
|
||||
tRowMergerClear(&merge);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
return code;
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
@ -1907,7 +1923,11 @@ int32_t mergeRowsInFileBlocks(SBlockData* pBlockData, STableBlockScanInfo* pBloc
|
|||
|
||||
tRowMergerInit(&merge, &fRow, pReader->pSchema);
|
||||
doMergeRowsInFileBlocks(pBlockData, pBlockScanInfo, pReader, &merge);
|
||||
tRowMergerGetRow(&merge, &pTSRow);
|
||||
int32_t code = tRowMergerGetRow(&merge, &pTSRow);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return code;
|
||||
}
|
||||
|
||||
doAppendRowFromTSRow(pReader->pResBlock, pReader, pTSRow, pBlockScanInfo->uid);
|
||||
|
||||
taosMemoryFree(pTSRow);
|
||||
|
@ -3026,8 +3046,8 @@ int32_t doMergeRowsInLastBlock(SLastBlockReader* pLastBlockReader, STableBlockSc
|
|||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
void doMergeMemTableMultiRows(TSDBROW* pRow, uint64_t uid, SIterInfo* pIter, SArray* pDelList, STSRow** pTSRow,
|
||||
STsdbReader* pReader, bool* freeTSRow) {
|
||||
int32_t doMergeMemTableMultiRows(TSDBROW* pRow, uint64_t uid, SIterInfo* pIter, SArray* pDelList, STSRow** pTSRow,
|
||||
STsdbReader* pReader, bool* freeTSRow) {
|
||||
TSDBROW* pNextRow = NULL;
|
||||
TSDBROW current = *pRow;
|
||||
|
||||
|
@ -3037,19 +3057,19 @@ void doMergeMemTableMultiRows(TSDBROW* pRow, uint64_t uid, SIterInfo* pIter, SAr
|
|||
if (!pIter->hasVal) {
|
||||
*pTSRow = current.pTSRow;
|
||||
*freeTSRow = false;
|
||||
return;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else { // has next point in mem/imem
|
||||
pNextRow = getValidMemRow(pIter, pDelList, pReader);
|
||||
if (pNextRow == NULL) {
|
||||
*pTSRow = current.pTSRow;
|
||||
*freeTSRow = false;
|
||||
return;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
if (current.pTSRow->ts != pNextRow->pTSRow->ts) {
|
||||
*pTSRow = current.pTSRow;
|
||||
*freeTSRow = false;
|
||||
return;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3069,13 +3089,17 @@ void doMergeMemTableMultiRows(TSDBROW* pRow, uint64_t uid, SIterInfo* pIter, SAr
|
|||
tRowMergerAdd(&merge, pNextRow, pTSchema1);
|
||||
|
||||
doMergeRowsInBuf(pIter, uid, current.pTSRow->ts, pDelList, &merge, pReader);
|
||||
tRowMergerGetRow(&merge, pTSRow);
|
||||
tRowMergerClear(&merge);
|
||||
int32_t code = tRowMergerGetRow(&merge, pTSRow);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return code;
|
||||
}
|
||||
|
||||
tRowMergerClear(&merge);
|
||||
*freeTSRow = true;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
void doMergeMemIMemRows(TSDBROW* pRow, TSDBROW* piRow, STableBlockScanInfo* pBlockScanInfo, STsdbReader* pReader,
|
||||
int32_t doMergeMemIMemRows(TSDBROW* pRow, TSDBROW* piRow, STableBlockScanInfo* pBlockScanInfo, STsdbReader* pReader,
|
||||
STSRow** pTSRow) {
|
||||
SRowMerger merge = {0};
|
||||
|
||||
|
@ -3100,7 +3124,8 @@ void doMergeMemIMemRows(TSDBROW* pRow, TSDBROW* piRow, STableBlockScanInfo* pBlo
|
|||
doMergeRowsInBuf(&pBlockScanInfo->iiter, pBlockScanInfo->uid, k.ts, pBlockScanInfo->delSkyline, &merge, pReader);
|
||||
}
|
||||
|
||||
tRowMergerGetRow(&merge, pTSRow);
|
||||
int32_t code = tRowMergerGetRow(&merge, pTSRow);
|
||||
return code;
|
||||
}
|
||||
|
||||
int32_t tsdbGetNextRowInMem(STableBlockScanInfo* pBlockScanInfo, STsdbReader* pReader, STSRow** pTSRow, int64_t endKey,
|
||||
|
@ -3130,28 +3155,30 @@ int32_t tsdbGetNextRowInMem(STableBlockScanInfo* pBlockScanInfo, STsdbReader* pR
|
|||
TSDBKEY k = TSDBROW_KEY(pRow);
|
||||
TSDBKEY ik = TSDBROW_KEY(piRow);
|
||||
|
||||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
if (ik.ts != k.ts) {
|
||||
if (((ik.ts < k.ts) && asc) || ((ik.ts > k.ts) && (!asc))) { // ik.ts < k.ts
|
||||
doMergeMemTableMultiRows(piRow, uid, &pBlockScanInfo->iiter, pDelList, pTSRow, pReader, freeTSRow);
|
||||
code = doMergeMemTableMultiRows(piRow, uid, &pBlockScanInfo->iiter, pDelList, pTSRow, pReader, freeTSRow);
|
||||
} else if (((k.ts < ik.ts) && asc) || ((k.ts > ik.ts) && (!asc))) {
|
||||
doMergeMemTableMultiRows(pRow, uid, &pBlockScanInfo->iter, pDelList, pTSRow, pReader, freeTSRow);
|
||||
code = doMergeMemTableMultiRows(pRow, uid, &pBlockScanInfo->iter, pDelList, pTSRow, pReader, freeTSRow);
|
||||
}
|
||||
} else { // ik.ts == k.ts
|
||||
doMergeMemIMemRows(pRow, piRow, pBlockScanInfo, pReader, pTSRow);
|
||||
*freeTSRow = true;
|
||||
code = doMergeMemIMemRows(pRow, piRow, pBlockScanInfo, pReader, pTSRow);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
return code;
|
||||
}
|
||||
|
||||
if (pBlockScanInfo->iter.hasVal && pRow != NULL) {
|
||||
doMergeMemTableMultiRows(pRow, pBlockScanInfo->uid, &pBlockScanInfo->iter, pDelList, pTSRow, pReader, freeTSRow);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
return doMergeMemTableMultiRows(pRow, pBlockScanInfo->uid, &pBlockScanInfo->iter, pDelList, pTSRow, pReader, freeTSRow);
|
||||
}
|
||||
|
||||
if (pBlockScanInfo->iiter.hasVal && piRow != NULL) {
|
||||
doMergeMemTableMultiRows(piRow, uid, &pBlockScanInfo->iiter, pDelList, pTSRow, pReader, freeTSRow);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
return doMergeMemTableMultiRows(piRow, uid, &pBlockScanInfo->iiter, pDelList, pTSRow, pReader, freeTSRow);
|
||||
}
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
|
|
@ -2039,7 +2039,7 @@ int32_t tsdbCmprColData(SColData *pColData, int8_t cmprAlg, SBlockCol *pBlockCol
|
|||
size += pBlockCol->szOffset;
|
||||
|
||||
// value
|
||||
if (pColData->flag != (HAS_NULL | HAS_NONE)) {
|
||||
if ((pColData->flag != (HAS_NULL | HAS_NONE)) && pColData->nData) {
|
||||
code = tsdbCmprData((uint8_t *)pColData->pData, pColData->nData, pColData->type, cmprAlg, ppOut, nOut + size,
|
||||
&pBlockCol->szValue, ppBuf);
|
||||
if (code) goto _exit;
|
||||
|
|
|
@ -496,6 +496,7 @@ static int32_t vnodeProcessCreateTbReq(SVnode *pVnode, int64_t version, void *pR
|
|||
// loop to create table
|
||||
for (int32_t iReq = 0; iReq < req.nReqs; iReq++) {
|
||||
pCreateReq = req.pReqs + iReq;
|
||||
memset(&cRsp, 0, sizeof(cRsp));
|
||||
|
||||
if ((terrno = grantCheck(TSDB_GRANT_TIMESERIES)) < 0) {
|
||||
rcode = -1;
|
||||
|
|
|
@ -938,15 +938,17 @@ SArray* extractColMatchInfo(SNodeList* pNodeList, SDataBlockDescNode* pOutputNod
|
|||
|
||||
for (int32_t i = 0; i < numOfCols; ++i) {
|
||||
STargetNode* pNode = (STargetNode*)nodesListGetNode(pNodeList, i);
|
||||
SColumnNode* pColNode = (SColumnNode*)pNode->pExpr;
|
||||
if (nodeType(pNode->pExpr) == QUERY_NODE_COLUMN) {
|
||||
SColumnNode* pColNode = (SColumnNode*)pNode->pExpr;
|
||||
|
||||
SColMatchInfo c = {0};
|
||||
c.output = true;
|
||||
c.colId = pColNode->colId;
|
||||
c.srcSlotId = pColNode->slotId;
|
||||
c.matchType = type;
|
||||
c.targetSlotId = pNode->slotId;
|
||||
taosArrayPush(pList, &c);
|
||||
SColMatchInfo c = {0};
|
||||
c.output = true;
|
||||
c.colId = pColNode->colId;
|
||||
c.srcSlotId = pColNode->slotId;
|
||||
c.matchType = type;
|
||||
c.targetSlotId = pNode->slotId;
|
||||
taosArrayPush(pList, &c);
|
||||
}
|
||||
}
|
||||
|
||||
*numOfOutputCols = 0;
|
||||
|
|
|
@ -263,8 +263,6 @@ SResultRow* doSetResultOutBufByKey(SDiskbasedBuf* pResultBuf, SResultRowInfo* pR
|
|||
ASSERT(pSup->resultRowSize > 0);
|
||||
pResult = getNewResultRow(pResultBuf, &pSup->currentPageId, pSup->resultRowSize);
|
||||
|
||||
initResultRow(pResult);
|
||||
|
||||
// add a new result set for a new group
|
||||
SResultRowPosition pos = {.pageId = pResult->pageId, .offset = pResult->offset};
|
||||
tSimpleHashPut(pSup->pResultRowHashTable, pSup->keyBuf, GET_RES_WINDOW_KEY_LEN(bytes), &pos,
|
||||
|
@ -817,13 +815,6 @@ void setBlockSMAInfo(SqlFunctionCtx* pCtx, SExprInfo* pExprInfo, SSDataBlock* pB
|
|||
} else {
|
||||
pInput->colDataAggIsSet = false;
|
||||
}
|
||||
|
||||
// set the statistics data for primary time stamp column
|
||||
// if (pCtx->functionId == FUNCTION_SPREAD && pColumn->colId == PRIMARYKEY_TIMESTAMP_COL_ID) {
|
||||
// pCtx->isAggSet = true;
|
||||
// pCtx->agg.min = pBlock->info.window.skey;
|
||||
// pCtx->agg.max = pBlock->info.window.ekey;
|
||||
// }
|
||||
}
|
||||
|
||||
bool isTaskKilled(SExecTaskInfo* pTaskInfo) {
|
||||
|
@ -860,146 +851,6 @@ STimeWindow getAlignQueryTimeWindow(SInterval* pInterval, int32_t precision, int
|
|||
return win;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static int32_t updateBlockLoadStatus(STaskAttr* pQuery, int32_t status) {
|
||||
|
||||
bool hasFirstLastFunc = false;
|
||||
bool hasOtherFunc = false;
|
||||
|
||||
if (status == BLK_DATA_DATA_LOAD || status == BLK_DATA_FILTEROUT) {
|
||||
return status;
|
||||
}
|
||||
|
||||
for (int32_t i = 0; i < pQuery->numOfOutput; ++i) {
|
||||
int32_t functionId = getExprFunctionId(&pQuery->pExpr1[i]);
|
||||
|
||||
if (functionId == FUNCTION_TS || functionId == FUNCTION_TS_DUMMY || functionId == FUNCTION_TAG ||
|
||||
functionId == FUNCTION_TAG_DUMMY) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (functionId == FUNCTION_FIRST_DST || functionId == FUNCTION_LAST_DST) {
|
||||
hasFirstLastFunc = true;
|
||||
} else {
|
||||
hasOtherFunc = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (hasFirstLastFunc && status == BLK_DATA_NOT_LOAD) {
|
||||
if (!hasOtherFunc) {
|
||||
return BLK_DATA_FILTEROUT;
|
||||
} else {
|
||||
return BLK_DATA_DATA_LOAD;
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// static void updateDataCheckOrder(SQInfo *pQInfo, SQueryTableReq* pQueryMsg, bool stableQuery) {
|
||||
// STaskAttr* pQueryAttr = pQInfo->runtimeEnv.pQueryAttr;
|
||||
//
|
||||
// // in case of point-interpolation query, use asc order scan
|
||||
// char msg[] = "QInfo:0x%"PRIx64" scan order changed for %s query, old:%d, new:%d, qrange exchanged, old qrange:%"
|
||||
// PRId64
|
||||
// "-%" PRId64 ", new qrange:%" PRId64 "-%" PRId64;
|
||||
//
|
||||
// // todo handle the case the the order irrelevant query type mixed up with order critical query type
|
||||
// // descending order query for last_row query
|
||||
// if (isFirstLastRowQuery(pQueryAttr)) {
|
||||
// //qDebug("QInfo:0x%"PRIx64" scan order changed for last_row query, old:%d, new:%d", pQInfo->qId,
|
||||
// pQueryAttr->order.order, TSDB_ORDER_ASC);
|
||||
//
|
||||
// pQueryAttr->order.order = TSDB_ORDER_ASC;
|
||||
// if (pQueryAttr->window.skey > pQueryAttr->window.ekey) {
|
||||
// TSWAP(pQueryAttr->window.skey, pQueryAttr->window.ekey);
|
||||
// }
|
||||
//
|
||||
// pQueryAttr->needReverseScan = false;
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (pQueryAttr->groupbyColumn && pQueryAttr->order.order == TSDB_ORDER_DESC) {
|
||||
// pQueryAttr->order.order = TSDB_ORDER_ASC;
|
||||
// if (pQueryAttr->window.skey > pQueryAttr->window.ekey) {
|
||||
// TSWAP(pQueryAttr->window.skey, pQueryAttr->window.ekey);
|
||||
// }
|
||||
//
|
||||
// pQueryAttr->needReverseScan = false;
|
||||
// doUpdateLastKey(pQueryAttr);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (pQueryAttr->pointInterpQuery && pQueryAttr->interval.interval == 0) {
|
||||
// if (!QUERY_IS_ASC_QUERY(pQueryAttr)) {
|
||||
// //qDebug(msg, pQInfo->qId, "interp", pQueryAttr->order.order, TSDB_ORDER_ASC, pQueryAttr->window.skey,
|
||||
// pQueryAttr->window.ekey, pQueryAttr->window.ekey, pQueryAttr->window.skey); TSWAP(pQueryAttr->window.skey,
|
||||
// pQueryAttr->window.ekey, TSKEY);
|
||||
// }
|
||||
//
|
||||
// pQueryAttr->order.order = TSDB_ORDER_ASC;
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (pQueryAttr->interval.interval == 0) {
|
||||
// if (onlyFirstQuery(pQueryAttr)) {
|
||||
// if (!QUERY_IS_ASC_QUERY(pQueryAttr)) {
|
||||
// //qDebug(msg, pQInfo->qId, "only-first", pQueryAttr->order.order, TSDB_ORDER_ASC, pQueryAttr->window.skey,
|
||||
//// pQueryAttr->window.ekey, pQueryAttr->window.ekey, pQueryAttr->window.skey);
|
||||
//
|
||||
// TSWAP(pQueryAttr->window.skey, pQueryAttr->window.ekey);
|
||||
// doUpdateLastKey(pQueryAttr);
|
||||
// }
|
||||
//
|
||||
// pQueryAttr->order.order = TSDB_ORDER_ASC;
|
||||
// pQueryAttr->needReverseScan = false;
|
||||
// } else if (onlyLastQuery(pQueryAttr) && notContainSessionOrStateWindow(pQueryAttr)) {
|
||||
// if (QUERY_IS_ASC_QUERY(pQueryAttr)) {
|
||||
// //qDebug(msg, pQInfo->qId, "only-last", pQueryAttr->order.order, TSDB_ORDER_DESC, pQueryAttr->window.skey,
|
||||
//// pQueryAttr->window.ekey, pQueryAttr->window.ekey, pQueryAttr->window.skey);
|
||||
//
|
||||
// TSWAP(pQueryAttr->window.skey, pQueryAttr->window.ekey);
|
||||
// doUpdateLastKey(pQueryAttr);
|
||||
// }
|
||||
//
|
||||
// pQueryAttr->order.order = TSDB_ORDER_DESC;
|
||||
// pQueryAttr->needReverseScan = false;
|
||||
// }
|
||||
//
|
||||
// } else { // interval query
|
||||
// if (stableQuery) {
|
||||
// if (onlyFirstQuery(pQueryAttr)) {
|
||||
// if (!QUERY_IS_ASC_QUERY(pQueryAttr)) {
|
||||
// //qDebug(msg, pQInfo->qId, "only-first stable", pQueryAttr->order.order, TSDB_ORDER_ASC,
|
||||
//// pQueryAttr->window.skey, pQueryAttr->window.ekey, pQueryAttr->window.ekey,
|
||||
/// pQueryAttr->window.skey);
|
||||
//
|
||||
// TSWAP(pQueryAttr->window.skey, pQueryAttr->window.ekey);
|
||||
// doUpdateLastKey(pQueryAttr);
|
||||
// }
|
||||
//
|
||||
// pQueryAttr->order.order = TSDB_ORDER_ASC;
|
||||
// pQueryAttr->needReverseScan = false;
|
||||
// } else if (onlyLastQuery(pQueryAttr)) {
|
||||
// if (QUERY_IS_ASC_QUERY(pQueryAttr)) {
|
||||
// //qDebug(msg, pQInfo->qId, "only-last stable", pQueryAttr->order.order, TSDB_ORDER_DESC,
|
||||
//// pQueryAttr->window.skey, pQueryAttr->window.ekey, pQueryAttr->window.ekey,
|
||||
/// pQueryAttr->window.skey);
|
||||
//
|
||||
// TSWAP(pQueryAttr->window.skey, pQueryAttr->window.ekey);
|
||||
// doUpdateLastKey(pQueryAttr);
|
||||
// }
|
||||
//
|
||||
// pQueryAttr->order.order = TSDB_ORDER_DESC;
|
||||
// pQueryAttr->needReverseScan = false;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
#if 0
|
||||
static bool overlapWithTimeWindow(STaskAttr* pQueryAttr, SDataBlockInfo* pBlockInfo) {
|
||||
STimeWindow w = {0};
|
||||
|
@ -1225,24 +1076,6 @@ static void updateTableQueryInfoForReverseScan(STableQueryInfo* pTableQueryInfo)
|
|||
if (pTableQueryInfo == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
// TSWAP(pTableQueryInfo->win.skey, pTableQueryInfo->win.ekey);
|
||||
// pTableQueryInfo->lastKey = pTableQueryInfo->win.skey;
|
||||
|
||||
// SWITCH_ORDER(pTableQueryInfo->cur.order);
|
||||
// pTableQueryInfo->cur.vgroupIndex = -1;
|
||||
|
||||
// set the index to be the end slot of result rows array
|
||||
// SResultRowInfo* pResultRowInfo = &pTableQueryInfo->resInfo;
|
||||
// if (pResultRowInfo->size > 0) {
|
||||
// pResultRowInfo->curPos = pResultRowInfo->size - 1;
|
||||
// } else {
|
||||
// pResultRowInfo->curPos = -1;
|
||||
// }
|
||||
}
|
||||
|
||||
void initResultRow(SResultRow* pResultRow) {
|
||||
// pResultRow->pEntryInfo = (struct SResultRowEntryInfo*)((char*)pResultRow + sizeof(SResultRow));
|
||||
}
|
||||
|
||||
void setTaskStatus(SExecTaskInfo* pTaskInfo, int8_t status) {
|
||||
|
@ -1255,15 +1088,6 @@ void setTaskStatus(SExecTaskInfo* pTaskInfo, int8_t status) {
|
|||
}
|
||||
}
|
||||
|
||||
void destroyTableQueryInfoImpl(STableQueryInfo* pTableQueryInfo) {
|
||||
if (pTableQueryInfo == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
// taosVariantDestroy(&pTableQueryInfo->tag);
|
||||
// cleanupResultRowInfo(&pTableQueryInfo->resInfo);
|
||||
}
|
||||
|
||||
void setResultRowInitCtx(SResultRow* pResult, SqlFunctionCtx* pCtx, int32_t numOfOutput, int32_t* rowEntryInfoOffset) {
|
||||
bool init = false;
|
||||
for (int32_t i = 0; i < numOfOutput; ++i) {
|
||||
|
@ -3022,7 +2846,6 @@ int32_t aggDecodeResultRow(SOperatorInfo* pOperator, char* result) {
|
|||
resultRow->offset = pOffset;
|
||||
offset += valueLen;
|
||||
|
||||
initResultRow(resultRow);
|
||||
pInfo->resultRowInfo.cur = (SResultRowPosition){.pageId = resultRow->pageId, .offset = resultRow->offset};
|
||||
// releaseBufPage(pSup->pResultBuf, getBufPage(pSup->pResultBuf, pageId));
|
||||
}
|
||||
|
|
|
@ -3873,7 +3873,6 @@ static int32_t setWindowOutputBuf(SResultWindowInfo* pWinInfo, SResultRow** pRes
|
|||
if (*pResult == NULL) {
|
||||
return TSDB_CODE_OUT_OF_MEMORY;
|
||||
}
|
||||
initResultRow(*pResult);
|
||||
|
||||
// add a new result set for a new group
|
||||
pWinInfo->pos.pageId = (*pResult)->pageId;
|
||||
|
|
|
@ -59,7 +59,8 @@ typedef enum EDatabaseOptionType {
|
|||
DB_OPTION_WAL_RETENTION_PERIOD,
|
||||
DB_OPTION_WAL_RETENTION_SIZE,
|
||||
DB_OPTION_WAL_ROLL_PERIOD,
|
||||
DB_OPTION_WAL_SEGMENT_SIZE
|
||||
DB_OPTION_WAL_SEGMENT_SIZE,
|
||||
DB_OPTION_SST_TRIGGER
|
||||
} EDatabaseOptionType;
|
||||
|
||||
typedef enum ETableOptionType {
|
||||
|
@ -170,6 +171,7 @@ SNode* createShowCreateDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName);
|
|||
SNode* createShowCreateTableStmt(SAstCreateContext* pCxt, ENodeType type, SNode* pRealTable);
|
||||
SNode* createShowTableDistributedStmt(SAstCreateContext* pCxt, SNode* pRealTable);
|
||||
SNode* createShowDnodeVariablesStmt(SAstCreateContext* pCxt, SNode* pDnodeId);
|
||||
SNode* createShowVnodesStmt(SAstCreateContext* pCxt, SNode* pDnodeId, SNode* pDnodeEndpoint);
|
||||
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo);
|
||||
SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t alterType, const SToken* pVal);
|
||||
SNode* createDropUserStmt(SAstCreateContext* pCxt, SToken* pUserName);
|
||||
|
|
|
@ -207,6 +207,7 @@ db_options(A) ::= db_options(B) WAL_RETENTION_SIZE NK_MINUS(D) NK_INTEGER(C).
|
|||
}
|
||||
db_options(A) ::= db_options(B) WAL_ROLL_PERIOD NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_ROLL_PERIOD, &C); }
|
||||
db_options(A) ::= db_options(B) WAL_SEGMENT_SIZE NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_SEGMENT_SIZE, &C); }
|
||||
db_options(A) ::= db_options(B) SST_TRIGGER NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_SST_TRIGGER, &C); }
|
||||
|
||||
alter_db_options(A) ::= alter_db_option(B). { A = createAlterDatabaseOptions(pCxt); A = setAlterDatabaseOption(pCxt, A, &B); }
|
||||
alter_db_options(A) ::= alter_db_options(B) alter_db_option(C). { A = setAlterDatabaseOption(pCxt, B, &C); }
|
||||
|
@ -223,6 +224,7 @@ alter_db_option(A) ::= KEEP variable_list(B).
|
|||
//alter_db_option(A) ::= REPLICA NK_INTEGER(B). { A.type = DB_OPTION_REPLICA; A.val = B; }
|
||||
//alter_db_option(A) ::= STRICT NK_STRING(B). { A.type = DB_OPTION_STRICT; A.val = B; }
|
||||
alter_db_option(A) ::= WAL_LEVEL NK_INTEGER(B). { A.type = DB_OPTION_WAL; A.val = B; }
|
||||
alter_db_option(A) ::= SST_TRIGGER NK_INTEGER(B). { A.type = DB_OPTION_SST_TRIGGER; A.val = B; }
|
||||
|
||||
%type integer_list { SNodeList* }
|
||||
%destructor integer_list { nodesDestroyList($$); }
|
||||
|
@ -410,6 +412,8 @@ cmd ::= SHOW TABLE DISTRIBUTED full_table_name(A).
|
|||
cmd ::= SHOW CONSUMERS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); }
|
||||
cmd ::= SHOW SUBSCRIPTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); }
|
||||
cmd ::= SHOW TAGS FROM table_name_cond(A) from_db_opt(B). { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, B, A, OP_TYPE_EQUAL); }
|
||||
cmd ::= SHOW VNODES NK_INTEGER(A). { pCxt->pRootNode = createShowVnodesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A), NULL); }
|
||||
cmd ::= SHOW VNODES NK_STRING(A). { pCxt->pRootNode = createShowVnodesStmt(pCxt, NULL, createValueNode(pCxt, TSDB_DATA_TYPE_VARCHAR, &A)); }
|
||||
|
||||
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); }
|
||||
|
@ -997,4 +1001,4 @@ null_ordering_opt(A) ::= NULLS LAST.
|
|||
|
||||
%fallback ABORT AFTER ATTACH BEFORE BEGIN BITAND BITNOT BITOR BLOCKS CHANGE COMMA COMPACT CONCAT CONFLICT COPY DEFERRED DELIMITERS DETACH DIVIDE DOT EACH END FAIL
|
||||
FILE FOR GLOB ID IMMEDIATE IMPORT INITIALLY INSTEAD ISNULL KEY NK_BITNOT NK_SEMI NOTNULL OF PLUS PRIVILEGE RAISE REPLACE RESTRICT ROW SEMI STAR STATEMENT STRING
|
||||
TIMES UPDATE VALUES VARIABLE VIEW VNODES WAL.
|
||||
TIMES UPDATE VALUES VARIABLE VIEW WAL.
|
||||
|
|
|
@ -795,6 +795,20 @@ SNode* createSetOperator(SAstCreateContext* pCxt, ESetOperatorType type, SNode*
|
|||
return (SNode*)setOp;
|
||||
}
|
||||
|
||||
static void updateWalOptionsDefault(SDatabaseOptions* pOptions) {
|
||||
if (!pOptions->walRetentionPeriodIsSet) {
|
||||
pOptions->walRetentionPeriod =
|
||||
pOptions->replica > 1 ? TSDB_REPS_DEF_DB_WAL_RET_PERIOD : TSDB_REP_DEF_DB_WAL_RET_PERIOD;
|
||||
}
|
||||
if (!pOptions->walRetentionSizeIsSet) {
|
||||
pOptions->walRetentionSize = pOptions->replica > 1 ? TSDB_REPS_DEF_DB_WAL_RET_SIZE : TSDB_REP_DEF_DB_WAL_RET_SIZE;
|
||||
}
|
||||
if (!pOptions->walRollPeriodIsSet) {
|
||||
pOptions->walRollPeriod =
|
||||
pOptions->replica > 1 ? TSDB_REPS_DEF_DB_WAL_ROLL_PERIOD : TSDB_REP_DEF_DB_WAL_ROLL_PERIOD;
|
||||
}
|
||||
}
|
||||
|
||||
SNode* createDefaultDatabaseOptions(SAstCreateContext* pCxt) {
|
||||
CHECK_PARSER_STATUS(pCxt);
|
||||
SDatabaseOptions* pOptions = (SDatabaseOptions*)nodesMakeNode(QUERY_NODE_DATABASE_OPTIONS);
|
||||
|
@ -819,10 +833,9 @@ SNode* createDefaultDatabaseOptions(SAstCreateContext* pCxt) {
|
|||
pOptions->numOfVgroups = TSDB_DEFAULT_VN_PER_DB;
|
||||
pOptions->singleStable = TSDB_DEFAULT_DB_SINGLE_STABLE;
|
||||
pOptions->schemaless = TSDB_DEFAULT_DB_SCHEMALESS;
|
||||
pOptions->walRetentionPeriod = TSDB_DEFAULT_DB_WAL_RETENTION_PERIOD;
|
||||
pOptions->walRetentionSize = TSDB_DEFAULT_DB_WAL_RETENTION_SIZE;
|
||||
pOptions->walRollPeriod = TSDB_DEFAULT_DB_WAL_ROLL_PERIOD;
|
||||
updateWalOptionsDefault(pOptions);
|
||||
pOptions->walSegmentSize = TSDB_DEFAULT_DB_WAL_SEGMENT_SIZE;
|
||||
pOptions->sstTrigger = TSDB_DEFAULT_SST_TRIGGER;
|
||||
return (SNode*)pOptions;
|
||||
}
|
||||
|
||||
|
@ -854,83 +867,92 @@ SNode* createAlterDatabaseOptions(SAstCreateContext* pCxt) {
|
|||
pOptions->walRetentionSize = -1;
|
||||
pOptions->walRollPeriod = -1;
|
||||
pOptions->walSegmentSize = -1;
|
||||
pOptions->sstTrigger = -1;
|
||||
return (SNode*)pOptions;
|
||||
}
|
||||
|
||||
SNode* setDatabaseOption(SAstCreateContext* pCxt, SNode* pOptions, EDatabaseOptionType type, void* pVal) {
|
||||
CHECK_PARSER_STATUS(pCxt);
|
||||
SDatabaseOptions* pDbOptions = (SDatabaseOptions*)pOptions;
|
||||
switch (type) {
|
||||
case DB_OPTION_BUFFER:
|
||||
((SDatabaseOptions*)pOptions)->buffer = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->buffer = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
break;
|
||||
case DB_OPTION_CACHEMODEL:
|
||||
COPY_STRING_FORM_STR_TOKEN(((SDatabaseOptions*)pOptions)->cacheModelStr, (SToken*)pVal);
|
||||
COPY_STRING_FORM_STR_TOKEN(pDbOptions->cacheModelStr, (SToken*)pVal);
|
||||
break;
|
||||
case DB_OPTION_CACHESIZE:
|
||||
((SDatabaseOptions*)pOptions)->cacheLastSize = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->cacheLastSize = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
break;
|
||||
case DB_OPTION_COMP:
|
||||
((SDatabaseOptions*)pOptions)->compressionLevel = taosStr2Int8(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->compressionLevel = taosStr2Int8(((SToken*)pVal)->z, NULL, 10);
|
||||
break;
|
||||
case DB_OPTION_DAYS: {
|
||||
SToken* pToken = pVal;
|
||||
if (TK_NK_INTEGER == pToken->type) {
|
||||
((SDatabaseOptions*)pOptions)->daysPerFile = taosStr2Int32(pToken->z, NULL, 10) * 1440;
|
||||
pDbOptions->daysPerFile = taosStr2Int32(pToken->z, NULL, 10) * 1440;
|
||||
} else {
|
||||
((SDatabaseOptions*)pOptions)->pDaysPerFile = (SValueNode*)createDurationValueNode(pCxt, pToken);
|
||||
pDbOptions->pDaysPerFile = (SValueNode*)createDurationValueNode(pCxt, pToken);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DB_OPTION_FSYNC:
|
||||
((SDatabaseOptions*)pOptions)->fsyncPeriod = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->fsyncPeriod = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
break;
|
||||
case DB_OPTION_MAXROWS:
|
||||
((SDatabaseOptions*)pOptions)->maxRowsPerBlock = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->maxRowsPerBlock = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
break;
|
||||
case DB_OPTION_MINROWS:
|
||||
((SDatabaseOptions*)pOptions)->minRowsPerBlock = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->minRowsPerBlock = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
break;
|
||||
case DB_OPTION_KEEP:
|
||||
((SDatabaseOptions*)pOptions)->pKeep = pVal;
|
||||
pDbOptions->pKeep = pVal;
|
||||
break;
|
||||
case DB_OPTION_PAGES:
|
||||
((SDatabaseOptions*)pOptions)->pages = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->pages = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
break;
|
||||
case DB_OPTION_PAGESIZE:
|
||||
((SDatabaseOptions*)pOptions)->pagesize = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->pagesize = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
break;
|
||||
case DB_OPTION_PRECISION:
|
||||
COPY_STRING_FORM_STR_TOKEN(((SDatabaseOptions*)pOptions)->precisionStr, (SToken*)pVal);
|
||||
COPY_STRING_FORM_STR_TOKEN(pDbOptions->precisionStr, (SToken*)pVal);
|
||||
break;
|
||||
case DB_OPTION_REPLICA:
|
||||
((SDatabaseOptions*)pOptions)->replica = taosStr2Int8(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->replica = taosStr2Int8(((SToken*)pVal)->z, NULL, 10);
|
||||
updateWalOptionsDefault(pDbOptions);
|
||||
break;
|
||||
case DB_OPTION_STRICT:
|
||||
COPY_STRING_FORM_STR_TOKEN(((SDatabaseOptions*)pOptions)->strictStr, (SToken*)pVal);
|
||||
COPY_STRING_FORM_STR_TOKEN(pDbOptions->strictStr, (SToken*)pVal);
|
||||
break;
|
||||
case DB_OPTION_WAL:
|
||||
((SDatabaseOptions*)pOptions)->walLevel = taosStr2Int8(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->walLevel = taosStr2Int8(((SToken*)pVal)->z, NULL, 10);
|
||||
break;
|
||||
case DB_OPTION_VGROUPS:
|
||||
((SDatabaseOptions*)pOptions)->numOfVgroups = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->numOfVgroups = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
break;
|
||||
case DB_OPTION_SINGLE_STABLE:
|
||||
((SDatabaseOptions*)pOptions)->singleStable = taosStr2Int8(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->singleStable = taosStr2Int8(((SToken*)pVal)->z, NULL, 10);
|
||||
break;
|
||||
case DB_OPTION_RETENTIONS:
|
||||
((SDatabaseOptions*)pOptions)->pRetentions = pVal;
|
||||
pDbOptions->pRetentions = pVal;
|
||||
break;
|
||||
case DB_OPTION_WAL_RETENTION_PERIOD:
|
||||
((SDatabaseOptions*)pOptions)->walRetentionPeriod = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->walRetentionPeriod = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->walRetentionPeriodIsSet = true;
|
||||
break;
|
||||
case DB_OPTION_WAL_RETENTION_SIZE:
|
||||
((SDatabaseOptions*)pOptions)->walRetentionSize = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->walRetentionSize = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->walRetentionSizeIsSet = true;
|
||||
break;
|
||||
case DB_OPTION_WAL_ROLL_PERIOD:
|
||||
((SDatabaseOptions*)pOptions)->walRollPeriod = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->walRollPeriod = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->walRollPeriodIsSet = true;
|
||||
break;
|
||||
case DB_OPTION_WAL_SEGMENT_SIZE:
|
||||
((SDatabaseOptions*)pOptions)->walSegmentSize = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
pDbOptions->walSegmentSize = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
break;
|
||||
case DB_OPTION_SST_TRIGGER:
|
||||
pDbOptions->sstTrigger = taosStr2Int32(((SToken*)pVal)->z, NULL, 10);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -1317,6 +1339,15 @@ SNode* createShowDnodeVariablesStmt(SAstCreateContext* pCxt, SNode* pDnodeId) {
|
|||
return (SNode*)pStmt;
|
||||
}
|
||||
|
||||
SNode* createShowVnodesStmt(SAstCreateContext* pCxt, SNode* pDnodeId, SNode* pDnodeEndpoint) {
|
||||
CHECK_PARSER_STATUS(pCxt);
|
||||
SShowVnodesStmt* pStmt = (SShowVnodesStmt*)nodesMakeNode(QUERY_NODE_SHOW_VNODES_STMT);
|
||||
CHECK_OUT_OF_MEM(pStmt);
|
||||
pStmt->pDnodeId = pDnodeId;
|
||||
pStmt->pDnodeEndpoint = pDnodeEndpoint;
|
||||
return (SNode*)pStmt;
|
||||
}
|
||||
|
||||
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo) {
|
||||
CHECK_PARSER_STATUS(pCxt);
|
||||
char password[TSDB_USET_PASSWORD_LEN] = {0};
|
||||
|
|
|
@ -464,6 +464,11 @@ static int32_t collectMetaKeyFromShowDnodeVariables(SCollectMetaKeyCxt* pCxt, SS
|
|||
return code;
|
||||
}
|
||||
|
||||
static int32_t collectMetaKeyFromShowVnodes(SCollectMetaKeyCxt* pCxt, SShowVnodesStmt* pStmt) {
|
||||
return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VNODES,
|
||||
pCxt->pMetaCache);
|
||||
}
|
||||
|
||||
static int32_t collectMetaKeyFromShowCreateDatabase(SCollectMetaKeyCxt* pCxt, SShowCreateDatabaseStmt* pStmt) {
|
||||
return reserveDbCfgInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pCxt->pMetaCache);
|
||||
}
|
||||
|
@ -604,6 +609,8 @@ static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) {
|
|||
return collectMetaKeyFromShowVariables(pCxt, (SShowStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
|
||||
return collectMetaKeyFromShowDnodeVariables(pCxt, (SShowDnodeVariablesStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_VNODES_STMT:
|
||||
return collectMetaKeyFromShowVnodes(pCxt, (SShowVnodesStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
|
||||
return collectMetaKeyFromShowCreateDatabase(pCxt, (SShowCreateDatabaseStmt*)pStmt);
|
||||
case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
|
||||
|
|
|
@ -2312,7 +2312,7 @@ static int32_t smlBoundColumnData(SArray* cols, SParsedDataColInfo* pColList, SS
|
|||
SToken sToken = {.n = kv->keyLen, .z = (char*)kv->key};
|
||||
col_id_t t = lastColIdx + 1;
|
||||
col_id_t index = ((t == 0 && !isTag) ? 0 : findCol(&sToken, t, nCols, pSchema));
|
||||
uDebug("SML, index:%d, t:%d, ncols:%d, kv->name:%s", index, t, nCols, kv->key);
|
||||
uDebug("SML, index:%d, t:%d, ncols:%d", index, t, nCols);
|
||||
if (index < 0 && t > 0) {
|
||||
index = findCol(&sToken, 0, t, pSchema);
|
||||
isOrdered = false;
|
||||
|
@ -2533,9 +2533,7 @@ int32_t smlBindData(void* handle, SArray* tags, SArray* colsSchema, SArray* cols
|
|||
if (p) kv = *p;
|
||||
}
|
||||
|
||||
if (!kv || kv->length == 0) {
|
||||
MemRowAppend(&pBuf, NULL, 0, ¶m);
|
||||
} else {
|
||||
if (kv){
|
||||
int32_t colLen = kv->length;
|
||||
if (pColSchema->type == TSDB_DATA_TYPE_TIMESTAMP) {
|
||||
// uError("SML:data before:%" PRId64 ", precision:%d", kv->i, pTableMeta->tableInfo.precision);
|
||||
|
@ -2548,6 +2546,8 @@ int32_t smlBindData(void* handle, SArray* tags, SArray* colsSchema, SArray* cols
|
|||
} else {
|
||||
MemRowAppend(&pBuf, &(kv->value), colLen, ¶m);
|
||||
}
|
||||
}else{
|
||||
pBuilder->hasNone = true;
|
||||
}
|
||||
|
||||
if (PRIMARYKEY_TIMESTAMP_COL_ID == pColSchema->colId) {
|
||||
|
|
|
@ -187,6 +187,7 @@ static SKeyword keywordTable[] = {
|
|||
{"SNODES", TK_SNODES},
|
||||
{"SOFFSET", TK_SOFFSET},
|
||||
{"SPLIT", TK_SPLIT},
|
||||
{"SST_TRIGGER", TK_SST_TRIGGER},
|
||||
{"STABLE", TK_STABLE},
|
||||
{"STABLES", TK_STABLES},
|
||||
{"STATE", TK_STATE},
|
||||
|
@ -228,6 +229,7 @@ static SKeyword keywordTable[] = {
|
|||
{"VERBOSE", TK_VERBOSE},
|
||||
{"VGROUP", TK_VGROUP},
|
||||
{"VGROUPS", TK_VGROUPS},
|
||||
{"VNODES", TK_VNODES},
|
||||
{"WAL_FSYNC_PERIOD", TK_WAL_FSYNC_PERIOD},
|
||||
{"WAL_LEVEL", TK_WAL_LEVEL},
|
||||
{"WAL_RETENTION_PERIOD", TK_WAL_RETENTION_PERIOD},
|
||||
|
|
|
@ -245,6 +245,12 @@ static const SSysTableShowAdapter sysTableShowAdapter[] = {
|
|||
.numOfShowCols = 1,
|
||||
.pShowCols = {"*"}
|
||||
},
|
||||
{ .showType = QUERY_NODE_SHOW_VNODES_STMT,
|
||||
.pDbName = TSDB_INFORMATION_SCHEMA_DB,
|
||||
.pTableName = TSDB_INS_TABLE_VNODES,
|
||||
.numOfShowCols = 1,
|
||||
.pShowCols = {"*"}
|
||||
},
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
@ -3476,6 +3482,7 @@ static int32_t buildCreateDbReq(STranslateContext* pCxt, SCreateDatabaseStmt* pS
|
|||
pReq->walRetentionSize = pStmt->pOptions->walRetentionSize;
|
||||
pReq->walRollPeriod = pStmt->pOptions->walRollPeriod;
|
||||
pReq->walSegmentSize = pStmt->pOptions->walSegmentSize;
|
||||
pReq->sstTrigger = pStmt->pOptions->sstTrigger;
|
||||
pReq->ignoreExist = pStmt->ignoreExists;
|
||||
return buildCreateDbRetentions(pStmt->pOptions->pRetentions, pReq);
|
||||
}
|
||||
|
@ -3760,6 +3767,9 @@ static int32_t checkDatabaseOptions(STranslateContext* pCxt, const char* pDbName
|
|||
code =
|
||||
checkDbRangeOption(pCxt, "walSegmentSize", pOptions->walSegmentSize, TSDB_DB_MIN_WAL_SEGMENT_SIZE, INT32_MAX);
|
||||
}
|
||||
if (TSDB_CODE_SUCCESS == code) {
|
||||
code = checkDbRangeOption(pCxt, "sstTrigger", pOptions->sstTrigger, TSDB_MIN_SST_TRIGGER, TSDB_MAX_SST_TRIGGER);
|
||||
}
|
||||
if (TSDB_CODE_SUCCESS == code) {
|
||||
code = checkOptionsDependency(pCxt, pDbName, pOptions);
|
||||
}
|
||||
|
@ -3833,6 +3843,7 @@ static void buildAlterDbReq(STranslateContext* pCxt, SAlterDatabaseStmt* pStmt,
|
|||
pReq->cacheLast = pStmt->pOptions->cacheModel;
|
||||
pReq->cacheLastSize = pStmt->pOptions->cacheLastSize;
|
||||
pReq->replications = pStmt->pOptions->replica;
|
||||
pReq->sstTrigger = pStmt->pOptions->sstTrigger;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -5837,6 +5848,25 @@ static int32_t rewriteShowDnodeVariables(STranslateContext* pCxt, SQuery* pQuery
|
|||
return code;
|
||||
}
|
||||
|
||||
static int32_t rewriteShowVnodes(STranslateContext* pCxt, SQuery* pQuery) {
|
||||
SShowVnodesStmt* pShow = (SShowVnodesStmt*)(pQuery->pRoot);
|
||||
SSelectStmt* pStmt = NULL;
|
||||
int32_t code = createSelectStmtForShow(QUERY_NODE_SHOW_VNODES_STMT, &pStmt);
|
||||
if (TSDB_CODE_SUCCESS == code) {
|
||||
if (NULL != pShow->pDnodeId) {
|
||||
code = createOperatorNode(OP_TYPE_EQUAL, "dnode_id", pShow->pDnodeId, &pStmt->pWhere);
|
||||
} else {
|
||||
code = createOperatorNode(OP_TYPE_EQUAL, "dnode_endpoint", pShow->pDnodeEndpoint, &pStmt->pWhere);
|
||||
}
|
||||
}
|
||||
if (TSDB_CODE_SUCCESS == code) {
|
||||
pQuery->showRewrite = true;
|
||||
nodesDestroyNode(pQuery->pRoot);
|
||||
pQuery->pRoot = (SNode*)pStmt;
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
static SNode* createBlockDistInfoFunc() {
|
||||
SFunctionNode* pFunc = (SFunctionNode*)nodesMakeNode(QUERY_NODE_FUNCTION);
|
||||
if (NULL == pFunc) {
|
||||
|
@ -6408,7 +6438,8 @@ typedef struct SVgroupDropTableBatch {
|
|||
char dbName[TSDB_DB_NAME_LEN];
|
||||
} SVgroupDropTableBatch;
|
||||
|
||||
static void addDropTbReqIntoVgroup(SHashObj* pVgroupHashmap, SDropTableClause* pClause, SVgroupInfo* pVgInfo, uint64_t suid) {
|
||||
static void addDropTbReqIntoVgroup(SHashObj* pVgroupHashmap, SDropTableClause* pClause, SVgroupInfo* pVgInfo,
|
||||
uint64_t suid) {
|
||||
SVDropTbReq req = {.name = pClause->tableName, .suid = suid, .igNotExists = pClause->ignoreNotExists};
|
||||
SVgroupDropTableBatch* pTableBatch = taosHashGet(pVgroupHashmap, &pVgInfo->vgId, sizeof(pVgInfo->vgId));
|
||||
if (NULL == pTableBatch) {
|
||||
|
@ -6946,6 +6977,9 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
|
|||
case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
|
||||
code = rewriteShowDnodeVariables(pCxt, pQuery);
|
||||
break;
|
||||
case QUERY_NODE_SHOW_VNODES_STMT:
|
||||
code = rewriteShowVnodes(pCxt, pQuery);
|
||||
break;
|
||||
case QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT:
|
||||
code = rewriteShowTableDist(pCxt, pQuery);
|
||||
break;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -32,100 +32,59 @@
|
|||
namespace {
|
||||
|
||||
void generateInformationSchema(MockCatalogService* mcs) {
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_DNODES, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("endpoint", TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MNODES, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("endpoint", TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MODULES, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("endpoint", TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_QNODES, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("endpoint", TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_DATABASES, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("name", TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_FUNCTIONS, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("name", TSDB_DATA_TYPE_BINARY, TSDB_FUNC_NAME_LEN);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_INDEXES, TSDB_SYSTEM_TABLE, 3)
|
||||
.addColumn("index_name", TSDB_DATA_TYPE_BINARY, TSDB_TABLE_NAME_LEN)
|
||||
.addColumn("db_name", TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN)
|
||||
.addColumn("table_name", TSDB_DATA_TYPE_BINARY, TSDB_TABLE_NAME_LEN);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_STABLES, TSDB_SYSTEM_TABLE, 2)
|
||||
.addColumn("db_name", TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN)
|
||||
.addColumn("stable_name", TSDB_DATA_TYPE_BINARY, TSDB_TABLE_NAME_LEN);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TABLES, TSDB_SYSTEM_TABLE, 2)
|
||||
.addColumn("db_name", TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN)
|
||||
.addColumn("table_name", TSDB_DATA_TYPE_BINARY, TSDB_TABLE_NAME_LEN);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TABLE_DISTRIBUTED, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("db_name", TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_USERS, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("name", TSDB_DATA_TYPE_BINARY, TSDB_USER_LEN);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VGROUPS, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("db_name", TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_CONFIGS, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("name", TSDB_DATA_TYPE_BINARY, TSDB_CONFIG_OPTION_LEN);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_DNODE_VARIABLES, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("dnode_id", TSDB_DATA_TYPE_INT);
|
||||
builder.done();
|
||||
}
|
||||
{
|
||||
ITableBuilder& builder =
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_CLUSTER, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("name", TSDB_DATA_TYPE_BINARY, TSDB_CLUSTER_ID_LEN);
|
||||
builder.done();
|
||||
}
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_DNODES, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("endpoint", TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MNODES, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("endpoint", TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MODULES, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("endpoint", TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_QNODES, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("endpoint", TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_DATABASES, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("name", TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_FUNCTIONS, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("name", TSDB_DATA_TYPE_BINARY, TSDB_FUNC_NAME_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_INDEXES, TSDB_SYSTEM_TABLE, 3)
|
||||
.addColumn("index_name", TSDB_DATA_TYPE_BINARY, TSDB_TABLE_NAME_LEN)
|
||||
.addColumn("db_name", TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN)
|
||||
.addColumn("table_name", TSDB_DATA_TYPE_BINARY, TSDB_TABLE_NAME_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_STABLES, TSDB_SYSTEM_TABLE, 2)
|
||||
.addColumn("db_name", TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN)
|
||||
.addColumn("stable_name", TSDB_DATA_TYPE_BINARY, TSDB_TABLE_NAME_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TABLES, TSDB_SYSTEM_TABLE, 2)
|
||||
.addColumn("db_name", TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN)
|
||||
.addColumn("table_name", TSDB_DATA_TYPE_BINARY, TSDB_TABLE_NAME_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TABLE_DISTRIBUTED, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("db_name", TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_USERS, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("name", TSDB_DATA_TYPE_BINARY, TSDB_USER_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VGROUPS, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("db_name", TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_CONFIGS, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("name", TSDB_DATA_TYPE_BINARY, TSDB_CONFIG_OPTION_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_DNODE_VARIABLES, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("dnode_id", TSDB_DATA_TYPE_INT)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_CLUSTER, TSDB_SYSTEM_TABLE, 1)
|
||||
.addColumn("name", TSDB_DATA_TYPE_BINARY, TSDB_CLUSTER_ID_LEN)
|
||||
.done();
|
||||
mcs->createTableBuilder(TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_VNODES, TSDB_SYSTEM_TABLE, 2)
|
||||
.addColumn("dnode_id", TSDB_DATA_TYPE_INT)
|
||||
.addColumn("dnode_endpoint", TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN)
|
||||
.done();
|
||||
}
|
||||
|
||||
void generatePerformanceSchema(MockCatalogService* mcs) {
|
||||
|
|
|
@ -88,6 +88,7 @@ TEST_F(ParserInitialATest, alterDnode) {
|
|||
* | REPLICA int_value -- todo: enum 1, 3, default 1, unit replica
|
||||
* | STRICT {'off' | 'on'} -- todo: default 'off'
|
||||
* | WAL_LEVEL int_value -- enum 1, 2, default 1
|
||||
* | SST_TRIGGER int_value -- rang [1, 128], default 8
|
||||
* }
|
||||
*/
|
||||
TEST_F(ParserInitialATest, alterDatabase) {
|
||||
|
@ -112,6 +113,7 @@ TEST_F(ParserInitialATest, alterDatabase) {
|
|||
expect.cacheLast = -1;
|
||||
expect.cacheLastSize = -1;
|
||||
expect.replications = -1;
|
||||
expect.sstTrigger = -1;
|
||||
};
|
||||
auto setAlterDbBuffer = [&](int32_t buffer) { expect.buffer = buffer; };
|
||||
auto setAlterDbPageSize = [&](int32_t pageSize) { expect.pageSize = pageSize; };
|
||||
|
@ -128,6 +130,7 @@ TEST_F(ParserInitialATest, alterDatabase) {
|
|||
auto setAlterDbStrict = [&](int8_t strict) { expect.strict = strict; };
|
||||
auto setAlterDbCacheModel = [&](int8_t cacheModel) { expect.cacheLast = cacheModel; };
|
||||
auto setAlterDbReplica = [&](int8_t replications) { expect.replications = replications; };
|
||||
auto setAlterDbSstTrigger = [&](int8_t sstTrigger) { expect.sstTrigger = sstTrigger; };
|
||||
|
||||
setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) {
|
||||
ASSERT_EQ(nodeType(pQuery->pRoot), QUERY_NODE_ALTER_DATABASE_STMT);
|
||||
|
@ -146,6 +149,7 @@ TEST_F(ParserInitialATest, alterDatabase) {
|
|||
ASSERT_EQ(req.strict, expect.strict);
|
||||
ASSERT_EQ(req.cacheLast, expect.cacheLast);
|
||||
ASSERT_EQ(req.replications, expect.replications);
|
||||
ASSERT_EQ(req.sstTrigger, expect.sstTrigger);
|
||||
});
|
||||
|
||||
const int32_t MINUTE_PER_DAY = MILLISECOND_PER_DAY / MILLISECOND_PER_MINUTE;
|
||||
|
@ -157,7 +161,8 @@ TEST_F(ParserInitialATest, alterDatabase) {
|
|||
setAlterDbFsync(200);
|
||||
setAlterDbWal(1);
|
||||
setAlterDbCacheModel(TSDB_CACHE_MODEL_LAST_ROW);
|
||||
run("ALTER DATABASE test CACHEMODEL 'last_row' CACHESIZE 32 WAL_FSYNC_PERIOD 200 KEEP 10 WAL_LEVEL 1");
|
||||
setAlterDbSstTrigger(20);
|
||||
run("ALTER DATABASE test CACHEMODEL 'last_row' CACHESIZE 32 WAL_FSYNC_PERIOD 200 KEEP 10 WAL_LEVEL 1 SST_TRIGGER 20");
|
||||
clearAlterDbReq();
|
||||
|
||||
initAlterDb("test");
|
||||
|
@ -231,6 +236,8 @@ TEST_F(ParserInitialATest, alterDatabaseSemanticCheck) {
|
|||
run("ALTER DATABASE test KEEP 1w", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("ALTER DATABASE test WAL_LEVEL 0", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("ALTER DATABASE test WAL_LEVEL 3", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("ALTER DATABASE test SST_TRIGGER 0", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
run("ALTER DATABASE test SST_TRIGGER 129", TSDB_CODE_PAR_INVALID_DB_OPTION);
|
||||
// Regardless of the specific sentence
|
||||
run("ALTER DATABASE db WAL_LEVEL 0 # td-14436", TSDB_CODE_PAR_SYNTAX_ERROR, PARSER_STAGE_PARSE);
|
||||
}
|
||||
|
|
|
@ -111,10 +111,11 @@ TEST_F(ParserInitialCTest, createDatabase) {
|
|||
expect.numOfVgroups = TSDB_DEFAULT_VN_PER_DB;
|
||||
expect.numOfStables = TSDB_DEFAULT_DB_SINGLE_STABLE;
|
||||
expect.schemaless = TSDB_DEFAULT_DB_SCHEMALESS;
|
||||
expect.walRetentionPeriod = TSDB_DEFAULT_DB_WAL_RETENTION_PERIOD;
|
||||
expect.walRetentionSize = TSDB_DEFAULT_DB_WAL_RETENTION_SIZE;
|
||||
expect.walRollPeriod = TSDB_DEFAULT_DB_WAL_ROLL_PERIOD;
|
||||
expect.walRetentionPeriod = TSDB_REP_DEF_DB_WAL_RET_PERIOD;
|
||||
expect.walRetentionSize = TSDB_REP_DEF_DB_WAL_RET_SIZE;
|
||||
expect.walRollPeriod = TSDB_REP_DEF_DB_WAL_ROLL_PERIOD;
|
||||
expect.walSegmentSize = TSDB_DEFAULT_DB_WAL_SEGMENT_SIZE;
|
||||
expect.sstTrigger = TSDB_DEFAULT_SST_TRIGGER;
|
||||
};
|
||||
|
||||
auto setDbBufferFunc = [&](int32_t buffer) { expect.buffer = buffer; };
|
||||
|
@ -155,6 +156,7 @@ TEST_F(ParserInitialCTest, createDatabase) {
|
|||
auto setDbWalRetentionSize = [&](int32_t walRetentionSize) { expect.walRetentionSize = walRetentionSize; };
|
||||
auto setDbWalRollPeriod = [&](int32_t walRollPeriod) { expect.walRollPeriod = walRollPeriod; };
|
||||
auto setDbWalSegmentSize = [&](int32_t walSegmentSize) { expect.walSegmentSize = walSegmentSize; };
|
||||
auto setDbSstTrigger = [&](int32_t sstTrigger) { expect.sstTrigger = sstTrigger; };
|
||||
|
||||
setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) {
|
||||
ASSERT_EQ(nodeType(pQuery->pRoot), QUERY_NODE_CREATE_DATABASE_STMT);
|
||||
|
@ -185,7 +187,7 @@ TEST_F(ParserInitialCTest, createDatabase) {
|
|||
ASSERT_EQ(req.walRetentionSize, expect.walRetentionSize);
|
||||
ASSERT_EQ(req.walRollPeriod, expect.walRollPeriod);
|
||||
ASSERT_EQ(req.walSegmentSize, expect.walSegmentSize);
|
||||
// ASSERT_EQ(req.schemaless, expect.schemaless);
|
||||
ASSERT_EQ(req.sstTrigger, expect.sstTrigger);
|
||||
ASSERT_EQ(req.ignoreExist, expect.ignoreExist);
|
||||
ASSERT_EQ(req.numOfRetensions, expect.numOfRetensions);
|
||||
if (expect.numOfRetensions > 0) {
|
||||
|
@ -233,6 +235,7 @@ TEST_F(ParserInitialCTest, createDatabase) {
|
|||
setDbWalRetentionSize(-1);
|
||||
setDbWalRollPeriod(10);
|
||||
setDbWalSegmentSize(20);
|
||||
setDbSstTrigger(16);
|
||||
run("CREATE DATABASE IF NOT EXISTS wxy_db "
|
||||
"BUFFER 64 "
|
||||
"CACHEMODEL 'last_value' "
|
||||
|
@ -256,7 +259,8 @@ TEST_F(ParserInitialCTest, createDatabase) {
|
|||
"WAL_RETENTION_PERIOD -1 "
|
||||
"WAL_RETENTION_SIZE -1 "
|
||||
"WAL_ROLL_PERIOD 10 "
|
||||
"WAL_SEGMENT_SIZE 20");
|
||||
"WAL_SEGMENT_SIZE 20 "
|
||||
"SST_TRIGGER 16");
|
||||
clearCreateDbReq();
|
||||
|
||||
setCreateDbReqFunc("wxy_db", 1);
|
||||
|
@ -266,6 +270,14 @@ TEST_F(ParserInitialCTest, createDatabase) {
|
|||
"DURATION 100m "
|
||||
"KEEP 1440m,300h,400d ");
|
||||
clearCreateDbReq();
|
||||
|
||||
setCreateDbReqFunc("wxy_db", 1);
|
||||
setDbReplicaFunc(3);
|
||||
setDbWalRetentionPeriod(TSDB_REPS_DEF_DB_WAL_RET_PERIOD);
|
||||
setDbWalRetentionSize(TSDB_REPS_DEF_DB_WAL_RET_SIZE);
|
||||
setDbWalRollPeriod(TSDB_REPS_DEF_DB_WAL_ROLL_PERIOD);
|
||||
run("CREATE DATABASE IF NOT EXISTS wxy_db REPLICA 3");
|
||||
clearCreateDbReq();
|
||||
}
|
||||
|
||||
TEST_F(ParserInitialCTest, createDatabaseSemanticCheck) {
|
||||
|
|
|
@ -218,7 +218,13 @@ TEST_F(ParserShowToUseTest, showVgroups) {
|
|||
run("SHOW test.vgroups");
|
||||
}
|
||||
|
||||
// todo SHOW vnodes
|
||||
TEST_F(ParserShowToUseTest, showVnodes) {
|
||||
useDb("root", "test");
|
||||
|
||||
run("SHOW VNODES 1");
|
||||
|
||||
run("SHOW VNODES 'node1:7030'");
|
||||
}
|
||||
|
||||
TEST_F(ParserShowToUseTest, splitVgroup) {
|
||||
useDb("root", "test");
|
||||
|
|
|
@ -160,6 +160,66 @@ int32_t taosMulMkDir(const char *dirname) {
|
|||
return code;
|
||||
}
|
||||
|
||||
int32_t taosMulModeMkDir(const char *dirname, int mode) {
|
||||
if (dirname == NULL) return -1;
|
||||
char temp[1024];
|
||||
char *pos = temp;
|
||||
int32_t code = 0;
|
||||
#ifdef WINDOWS
|
||||
taosRealPath(dirname, temp, sizeof(temp));
|
||||
if (temp[1] == ':') pos += 3;
|
||||
#else
|
||||
strcpy(temp, dirname);
|
||||
#endif
|
||||
|
||||
if (taosDirExist(temp)) {
|
||||
chmod(temp, mode);
|
||||
return code;
|
||||
}
|
||||
|
||||
if (strncmp(temp, TD_DIRSEP, 1) == 0) {
|
||||
pos += 1;
|
||||
} else if (strncmp(temp, "." TD_DIRSEP, 2) == 0) {
|
||||
pos += 2;
|
||||
}
|
||||
|
||||
for (; *pos != '\0'; pos++) {
|
||||
if (*pos == TD_DIRSEP[0]) {
|
||||
*pos = '\0';
|
||||
#ifdef WINDOWS
|
||||
code = _mkdir(temp, mode);
|
||||
#else
|
||||
code = mkdir(temp, mode);
|
||||
#endif
|
||||
if (code < 0 && errno != EEXIST) {
|
||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
return code;
|
||||
}
|
||||
*pos = TD_DIRSEP[0];
|
||||
}
|
||||
}
|
||||
|
||||
if (*(pos - 1) != TD_DIRSEP[0]) {
|
||||
#ifdef WINDOWS
|
||||
code = _mkdir(temp, mode);
|
||||
#else
|
||||
code = mkdir(temp, mode);
|
||||
#endif
|
||||
if (code < 0 && errno != EEXIST) {
|
||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
if (code < 0 && errno == EEXIST) {
|
||||
chmod(temp, mode);
|
||||
return 0;
|
||||
}
|
||||
|
||||
chmod(temp, mode);
|
||||
return code;
|
||||
}
|
||||
|
||||
void taosRemoveOldFiles(const char *dirname, int32_t keepDays) {
|
||||
TdDirPtr pDir = taosOpenDir(dirname);
|
||||
if (pDir == NULL) return;
|
||||
|
|
|
@ -134,7 +134,6 @@ class TDTestCase:
|
|||
os.system("%s -i ./taosdumptest/tmp -y" % binPath)
|
||||
|
||||
tdSql.execute("use test")
|
||||
tdSql.error("show vnodes '' ")
|
||||
tdSql.query("show stables")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.checkData(0, 0, 'stb')
|
||||
|
|
|
@ -53,7 +53,7 @@ class TDTestCase:
|
|||
tdSql.query(f"select * from {dbname}.t_0799064f5487946e5d22164a822acfc8 order by _ts")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.checkData(0, 3, "kk")
|
||||
tdSql.checkData(1, 3, None)
|
||||
tdSql.checkData(1, 3, "")
|
||||
|
||||
|
||||
tdSql.query(f"select distinct tbname from {dbname}.`sys.if.bytes.out`")
|
||||
|
|
|
@ -63,6 +63,7 @@ int smlProcess_influx_Test() {
|
|||
printf("%s result:%s\n", __FUNCTION__, taos_errstr(pRes));
|
||||
int code = taos_errno(pRes);
|
||||
taos_free_result(pRes);
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
|
@ -1100,34 +1101,91 @@ int sml_add_tag_col_Test() {
|
|||
return code;
|
||||
}
|
||||
|
||||
int smlProcess_18784_Test() {
|
||||
TAOS *taos = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||
|
||||
TAOS_RES *pRes = taos_query(taos, "create database if not exists sml_db schemaless 1");
|
||||
taos_free_result(pRes);
|
||||
|
||||
pRes = taos_query(taos, "use sml_db");
|
||||
taos_free_result(pRes);
|
||||
|
||||
const char *sql[] = {
|
||||
"disk,device=sdc inodes_used=176059i,total=1081101176832i 1661943960000000000",
|
||||
"disk,device=sdc inodes_free=66932805i 1661943960000000000",
|
||||
};
|
||||
pRes = taos_schemaless_insert(taos, (char **)sql, sizeof(sql) / sizeof(sql[0]), TSDB_SML_LINE_PROTOCOL, 0);
|
||||
printf("%s result:%s, rows:%d\n", __FUNCTION__, taos_errstr(pRes), taos_affected_rows(pRes));
|
||||
int code = taos_errno(pRes);
|
||||
ASSERT(!code);
|
||||
ASSERT(taos_affected_rows(pRes) == 2);
|
||||
taos_free_result(pRes);
|
||||
|
||||
pRes = taos_query(taos, "select * from disk");
|
||||
ASSERT(pRes);
|
||||
int fieldNum = taos_field_count(pRes);
|
||||
ASSERT(fieldNum == 5);
|
||||
printf("fieldNum:%d\n", fieldNum);
|
||||
TAOS_ROW row = NULL;
|
||||
int32_t rowIndex = 0;
|
||||
while((row = taos_fetch_row(pRes)) != NULL) {
|
||||
int64_t ts = *(int64_t*)row[0];
|
||||
int64_t used = *(int64_t*)row[1];
|
||||
int64_t total = *(int64_t*)row[2];
|
||||
int64_t freed = *(int64_t*)row[3];
|
||||
if(rowIndex == 0){
|
||||
ASSERT(ts == 1661943960000);
|
||||
ASSERT(used == 176059);
|
||||
ASSERT(total == 1081101176832);
|
||||
ASSERT(freed == 66932805);
|
||||
// ASSERT_EQ(latitude, 24.5208);
|
||||
// ASSERT_EQ(longitude, 28.09377);
|
||||
// ASSERT_EQ(elevation, 428);
|
||||
// ASSERT_EQ(velocity, 0);
|
||||
// ASSERT_EQ(heading, 304);
|
||||
// ASSERT_EQ(grade, 0);
|
||||
// ASSERT_EQ(fuel_consumption, 25);
|
||||
}else{
|
||||
// ASSERT(0);
|
||||
}
|
||||
rowIndex++;
|
||||
}
|
||||
taos_free_result(pRes);
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int ret = 0;
|
||||
ret = smlProcess_influx_Test();
|
||||
if(ret) return ret;
|
||||
ASSERT(!ret);
|
||||
ret = smlProcess_telnet_Test();
|
||||
if(ret) return ret;
|
||||
ASSERT(!ret);
|
||||
ret = smlProcess_json1_Test();
|
||||
if(ret) return ret;
|
||||
ASSERT(!ret);
|
||||
ret = smlProcess_json2_Test();
|
||||
if(ret) return ret;
|
||||
ASSERT(!ret);
|
||||
ret = smlProcess_json3_Test();
|
||||
if(ret) return ret;
|
||||
ASSERT(!ret);
|
||||
ret = smlProcess_json4_Test();
|
||||
if(ret) return ret;
|
||||
ASSERT(!ret);
|
||||
ret = sml_TD15662_Test();
|
||||
if(ret) return ret;
|
||||
ASSERT(!ret);
|
||||
ret = sml_TD15742_Test();
|
||||
if(ret) return ret;
|
||||
ASSERT(!ret);
|
||||
ret = sml_16384_Test();
|
||||
if(ret) return ret;
|
||||
ASSERT(!ret);
|
||||
ret = sml_oom_Test();
|
||||
if(ret) return ret;
|
||||
ASSERT(!ret);
|
||||
ret = sml_16368_Test();
|
||||
if(ret) return ret;
|
||||
ASSERT(!ret);
|
||||
ret = sml_dup_time_Test();
|
||||
if(ret) return ret;
|
||||
ASSERT(!ret);
|
||||
ret = sml_16960_Test();
|
||||
if(ret) return ret;
|
||||
ASSERT(!ret);
|
||||
ret = sml_add_tag_col_Test();
|
||||
ASSERT(!ret);
|
||||
ret = smlProcess_18784_Test();
|
||||
ASSERT(!ret);
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue