other: merge 3.0 branch to resolve conflict.
This commit is contained in:
commit
fd9e520865
|
@ -3,12 +3,6 @@ cmake_minimum_required(VERSION 3.16)
|
||||||
if (NOT DEFINED TD_GRANT)
|
if (NOT DEFINED TD_GRANT)
|
||||||
SET(TD_GRANT FALSE)
|
SET(TD_GRANT FALSE)
|
||||||
endif()
|
endif()
|
||||||
if (NOT DEFINED TD_USB_DONGLE)
|
|
||||||
SET(TD_USB_DONGLE FALSE)
|
|
||||||
endif()
|
|
||||||
IF (TD_GRANT)
|
|
||||||
ADD_DEFINITIONS(-D_GRANT)
|
|
||||||
ENDIF ()
|
|
||||||
|
|
||||||
IF ("${BUILD_TOOLS}" STREQUAL "")
|
IF ("${BUILD_TOOLS}" STREQUAL "")
|
||||||
IF (TD_LINUX)
|
IF (TD_LINUX)
|
||||||
|
|
|
@ -171,60 +171,69 @@
|
||||||
#define TK_BUFSIZE 153
|
#define TK_BUFSIZE 153
|
||||||
#define TK_STREAM 154
|
#define TK_STREAM 154
|
||||||
#define TK_INTO 155
|
#define TK_INTO 155
|
||||||
#define TK_KILL 156
|
#define TK_TRIGGER 156
|
||||||
#define TK_CONNECTION 157
|
#define TK_AT_ONCE 157
|
||||||
#define TK_MERGE 158
|
#define TK_WINDOW_CLOSE 158
|
||||||
#define TK_VGROUP 159
|
#define TK_WATERMARK 159
|
||||||
#define TK_REDISTRIBUTE 160
|
#define TK_KILL 160
|
||||||
#define TK_SPLIT 161
|
#define TK_CONNECTION 161
|
||||||
#define TK_SYNCDB 162
|
#define TK_MERGE 162
|
||||||
#define TK_NULL 163
|
#define TK_VGROUP 163
|
||||||
#define TK_FIRST 164
|
#define TK_REDISTRIBUTE 164
|
||||||
#define TK_LAST 165
|
#define TK_SPLIT 165
|
||||||
#define TK_NOW 166
|
#define TK_SYNCDB 166
|
||||||
#define TK_TODAY 167
|
#define TK_NULL 167
|
||||||
#define TK_CAST 168
|
#define TK_NK_QUESTION 168
|
||||||
#define TK_ROWTS 169
|
#define TK_NK_ARROW 169
|
||||||
#define TK_TBNAME 170
|
#define TK_ROWTS 170
|
||||||
#define TK_QSTARTTS 171
|
#define TK_TBNAME 171
|
||||||
#define TK_QENDTS 172
|
#define TK_QSTARTTS 172
|
||||||
#define TK_WSTARTTS 173
|
#define TK_QENDTS 173
|
||||||
#define TK_WENDTS 174
|
#define TK_WSTARTTS 174
|
||||||
#define TK_WDURATION 175
|
#define TK_WENDTS 175
|
||||||
#define TK_BETWEEN 176
|
#define TK_WDURATION 176
|
||||||
#define TK_IS 177
|
#define TK_CAST 177
|
||||||
#define TK_NK_LT 178
|
#define TK_NOW 178
|
||||||
#define TK_NK_GT 179
|
#define TK_TODAY 179
|
||||||
#define TK_NK_LE 180
|
#define TK_COUNT 180
|
||||||
#define TK_NK_GE 181
|
#define TK_FIRST 181
|
||||||
#define TK_NK_NE 182
|
#define TK_LAST 182
|
||||||
#define TK_MATCH 183
|
#define TK_LAST_ROW 183
|
||||||
#define TK_NMATCH 184
|
#define TK_BETWEEN 184
|
||||||
#define TK_JOIN 185
|
#define TK_IS 185
|
||||||
#define TK_INNER 186
|
#define TK_NK_LT 186
|
||||||
#define TK_SELECT 187
|
#define TK_NK_GT 187
|
||||||
#define TK_DISTINCT 188
|
#define TK_NK_LE 188
|
||||||
#define TK_WHERE 189
|
#define TK_NK_GE 189
|
||||||
#define TK_PARTITION 190
|
#define TK_NK_NE 190
|
||||||
#define TK_BY 191
|
#define TK_MATCH 191
|
||||||
#define TK_SESSION 192
|
#define TK_NMATCH 192
|
||||||
#define TK_STATE_WINDOW 193
|
#define TK_CONTAINS 193
|
||||||
#define TK_SLIDING 194
|
#define TK_JOIN 194
|
||||||
#define TK_FILL 195
|
#define TK_INNER 195
|
||||||
#define TK_VALUE 196
|
#define TK_SELECT 196
|
||||||
#define TK_NONE 197
|
#define TK_DISTINCT 197
|
||||||
#define TK_PREV 198
|
#define TK_WHERE 198
|
||||||
#define TK_LINEAR 199
|
#define TK_PARTITION 199
|
||||||
#define TK_NEXT 200
|
#define TK_BY 200
|
||||||
#define TK_GROUP 201
|
#define TK_SESSION 201
|
||||||
#define TK_HAVING 202
|
#define TK_STATE_WINDOW 202
|
||||||
#define TK_ORDER 203
|
#define TK_SLIDING 203
|
||||||
#define TK_SLIMIT 204
|
#define TK_FILL 204
|
||||||
#define TK_SOFFSET 205
|
#define TK_VALUE 205
|
||||||
#define TK_LIMIT 206
|
#define TK_NONE 206
|
||||||
#define TK_OFFSET 207
|
#define TK_PREV 207
|
||||||
#define TK_ASC 208
|
#define TK_LINEAR 208
|
||||||
#define TK_NULLS 209
|
#define TK_NEXT 209
|
||||||
|
#define TK_GROUP 210
|
||||||
|
#define TK_HAVING 211
|
||||||
|
#define TK_ORDER 212
|
||||||
|
#define TK_SLIMIT 213
|
||||||
|
#define TK_SOFFSET 214
|
||||||
|
#define TK_LIMIT 215
|
||||||
|
#define TK_OFFSET 216
|
||||||
|
#define TK_ASC 217
|
||||||
|
#define TK_NULLS 218
|
||||||
|
|
||||||
#define TK_NK_SPACE 300
|
#define TK_NK_SPACE 300
|
||||||
#define TK_NK_COMMENT 301
|
#define TK_NK_COMMENT 301
|
||||||
|
@ -233,7 +242,6 @@
|
||||||
#define TK_NK_OCT 304 // oct number
|
#define TK_NK_OCT 304 // oct number
|
||||||
#define TK_NK_BIN 305 // bin format data 0b111
|
#define TK_NK_BIN 305 // bin format data 0b111
|
||||||
#define TK_NK_FILE 306
|
#define TK_NK_FILE 306
|
||||||
#define TK_NK_QUESTION 307 // denoting the placeholder of "?",when invoking statement bind query
|
|
||||||
|
|
||||||
#define TK_NK_BITNOT 501
|
#define TK_NK_BITNOT 501
|
||||||
#define TK_INSERT 502
|
#define TK_INSERT 502
|
||||||
|
|
|
@ -137,6 +137,7 @@ bool fmIsWindowPseudoColumnFunc(int32_t funcId);
|
||||||
bool fmIsWindowClauseFunc(int32_t funcId);
|
bool fmIsWindowClauseFunc(int32_t funcId);
|
||||||
bool fmIsSpecialDataRequiredFunc(int32_t funcId);
|
bool fmIsSpecialDataRequiredFunc(int32_t funcId);
|
||||||
bool fmIsDynamicScanOptimizedFunc(int32_t funcId);
|
bool fmIsDynamicScanOptimizedFunc(int32_t funcId);
|
||||||
|
bool fmIsMultiResFunc(int32_t funcId);
|
||||||
|
|
||||||
typedef enum EFuncDataRequired {
|
typedef enum EFuncDataRequired {
|
||||||
FUNC_DATA_REQUIRED_DATA_LOAD = 1,
|
FUNC_DATA_REQUIRED_DATA_LOAD = 1,
|
||||||
|
|
|
@ -272,6 +272,33 @@ typedef struct SKillStmt {
|
||||||
int32_t targetId;
|
int32_t targetId;
|
||||||
} SKillStmt;
|
} SKillStmt;
|
||||||
|
|
||||||
|
typedef enum EStreamTriggerType {
|
||||||
|
STREAM_TRIGGER_AT_ONCE = 1,
|
||||||
|
STREAM_TRIGGER_WINDOW_CLOSE
|
||||||
|
} EStreamTriggerType;
|
||||||
|
|
||||||
|
typedef struct SStreamOptions {
|
||||||
|
ENodeType type;
|
||||||
|
EStreamTriggerType triggerType;
|
||||||
|
SNode* pWatermark;
|
||||||
|
} SStreamOptions;
|
||||||
|
|
||||||
|
typedef struct SCreateStreamStmt {
|
||||||
|
ENodeType type;
|
||||||
|
char streamName[TSDB_TABLE_NAME_LEN];
|
||||||
|
char targetDbName[TSDB_DB_NAME_LEN];
|
||||||
|
char targetTabName[TSDB_TABLE_NAME_LEN];
|
||||||
|
bool ignoreExists;
|
||||||
|
SStreamOptions* pOptions;
|
||||||
|
SNode* pQuery;
|
||||||
|
} SCreateStreamStmt;
|
||||||
|
|
||||||
|
typedef struct SDropStreamStmt {
|
||||||
|
ENodeType type;
|
||||||
|
char streamName[TSDB_TABLE_NAME_LEN];
|
||||||
|
bool ignoreNotExists;
|
||||||
|
} SDropStreamStmt;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -80,6 +80,7 @@ typedef enum ENodeType {
|
||||||
QUERY_NODE_TABLE_OPTIONS,
|
QUERY_NODE_TABLE_OPTIONS,
|
||||||
QUERY_NODE_INDEX_OPTIONS,
|
QUERY_NODE_INDEX_OPTIONS,
|
||||||
QUERY_NODE_EXPLAIN_OPTIONS,
|
QUERY_NODE_EXPLAIN_OPTIONS,
|
||||||
|
QUERY_NODE_STREAM_OPTIONS,
|
||||||
|
|
||||||
// Statement nodes are used in parser and planner module.
|
// Statement nodes are used in parser and planner module.
|
||||||
QUERY_NODE_SET_OPERATOR,
|
QUERY_NODE_SET_OPERATOR,
|
||||||
|
@ -151,6 +152,12 @@ typedef enum ENodeType {
|
||||||
QUERY_NODE_SHOW_CONNECTIONS_STMT,
|
QUERY_NODE_SHOW_CONNECTIONS_STMT,
|
||||||
QUERY_NODE_SHOW_QUERIES_STMT,
|
QUERY_NODE_SHOW_QUERIES_STMT,
|
||||||
QUERY_NODE_SHOW_VNODES_STMT,
|
QUERY_NODE_SHOW_VNODES_STMT,
|
||||||
|
QUERY_NODE_SHOW_APPS_STMT,
|
||||||
|
QUERY_NODE_SHOW_SCORES_STMT,
|
||||||
|
QUERY_NODE_SHOW_VARIABLE_STMT,
|
||||||
|
QUERY_NODE_SHOW_CREATE_DATABASE_STMT,
|
||||||
|
QUERY_NODE_SHOW_CREATE_TABLE_STMT,
|
||||||
|
QUERY_NODE_SHOW_CREATE_STABLE_STMT,
|
||||||
QUERY_NODE_KILL_CONNECTION_STMT,
|
QUERY_NODE_KILL_CONNECTION_STMT,
|
||||||
QUERY_NODE_KILL_QUERY_STMT,
|
QUERY_NODE_KILL_QUERY_STMT,
|
||||||
|
|
||||||
|
|
|
@ -662,7 +662,7 @@ TEST(testCase, agg_query_tables) {
|
||||||
TAOS_RES* pRes = taos_query(pConn, "use abc1");
|
TAOS_RES* pRes = taos_query(pConn, "use abc1");
|
||||||
taos_free_result(pRes);
|
taos_free_result(pRes);
|
||||||
|
|
||||||
pRes = taos_query(pConn, "select * from test_block_raw.all_type");
|
pRes = taos_query(pConn, "select count(*) from tu");
|
||||||
if (taos_errno(pRes) != 0) {
|
if (taos_errno(pRes) != 0) {
|
||||||
printf("failed to select from table, reason:%s\n", taos_errstr(pRes));
|
printf("failed to select from table, reason:%s\n", taos_errstr(pRes));
|
||||||
taos_free_result(pRes);
|
taos_free_result(pRes);
|
||||||
|
@ -674,9 +674,6 @@ TEST(testCase, agg_query_tables) {
|
||||||
int32_t numOfFields = taos_num_fields(pRes);
|
int32_t numOfFields = taos_num_fields(pRes);
|
||||||
|
|
||||||
int32_t n = 0;
|
int32_t n = 0;
|
||||||
void* data = NULL;
|
|
||||||
int32_t code = taos_fetch_raw_block(pRes, &n, &data);
|
|
||||||
|
|
||||||
char str[512] = {0};
|
char str[512] = {0};
|
||||||
while ((pRow = taos_fetch_row(pRes)) != NULL) {
|
while ((pRow = taos_fetch_row(pRes)) != NULL) {
|
||||||
int32_t* length = taos_fetch_lengths(pRes);
|
int32_t* length = taos_fetch_lengths(pRes);
|
||||||
|
|
|
@ -377,7 +377,7 @@ tDataTypeDescriptor tDataTypes[15] = {
|
||||||
getStatics_i64},
|
getStatics_i64},
|
||||||
{TSDB_DATA_TYPE_FLOAT, 5, FLOAT_BYTES, "FLOAT", 0, 0, tsCompressFloat, tsDecompressFloat, getStatics_f},
|
{TSDB_DATA_TYPE_FLOAT, 5, FLOAT_BYTES, "FLOAT", 0, 0, tsCompressFloat, tsDecompressFloat, getStatics_f},
|
||||||
{TSDB_DATA_TYPE_DOUBLE, 6, DOUBLE_BYTES, "DOUBLE", 0, 0, tsCompressDouble, tsDecompressDouble, getStatics_d},
|
{TSDB_DATA_TYPE_DOUBLE, 6, DOUBLE_BYTES, "DOUBLE", 0, 0, tsCompressDouble, tsDecompressDouble, getStatics_d},
|
||||||
{TSDB_DATA_TYPE_BINARY, 6, 0, "BINARY", 0, 0, tsCompressString, tsDecompressString, getStatics_bin},
|
{TSDB_DATA_TYPE_VARCHAR, 6, 0, "VARCHAR", 0, 0, tsCompressString, tsDecompressString, getStatics_bin},
|
||||||
{TSDB_DATA_TYPE_TIMESTAMP, 9, LONG_BYTES, "TIMESTAMP", INT64_MIN, INT64_MAX, tsCompressTimestamp,
|
{TSDB_DATA_TYPE_TIMESTAMP, 9, LONG_BYTES, "TIMESTAMP", INT64_MIN, INT64_MAX, tsCompressTimestamp,
|
||||||
tsDecompressTimestamp, getStatics_i64},
|
tsDecompressTimestamp, getStatics_i64},
|
||||||
{TSDB_DATA_TYPE_NCHAR, 5, 8, "NCHAR", 0, 0, tsCompressString, tsDecompressString, getStatics_nchr},
|
{TSDB_DATA_TYPE_NCHAR, 5, 8, "NCHAR", 0, 0, tsCompressString, tsDecompressString, getStatics_nchr},
|
||||||
|
@ -402,7 +402,7 @@ char tTokenTypeSwitcher[13] = {
|
||||||
TSDB_DATA_TYPE_DOUBLE, // TK_DOUBLE
|
TSDB_DATA_TYPE_DOUBLE, // TK_DOUBLE
|
||||||
TSDB_DATA_TYPE_BINARY, // TK_STRING
|
TSDB_DATA_TYPE_BINARY, // TK_STRING
|
||||||
TSDB_DATA_TYPE_BIGINT, // TK_TIMESTAMP
|
TSDB_DATA_TYPE_BIGINT, // TK_TIMESTAMP
|
||||||
TSDB_DATA_TYPE_BINARY, // TK_BINARY
|
TSDB_DATA_TYPE_VARCHAR, // TK_BINARY
|
||||||
TSDB_DATA_TYPE_NCHAR, // TK_NCHAR
|
TSDB_DATA_TYPE_NCHAR, // TK_NCHAR
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -7,11 +7,3 @@ target_include_directories(
|
||||||
dnode
|
dnode
|
||||||
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc"
|
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc"
|
||||||
)
|
)
|
||||||
|
|
||||||
IF (TD_GRANT)
|
|
||||||
TARGET_LINK_LIBRARIES(dnode grant)
|
|
||||||
ENDIF ()
|
|
||||||
IF (TD_USB_DONGLE)
|
|
||||||
TARGET_LINK_LIBRARIES(dnode usb_dongle)
|
|
||||||
else()
|
|
||||||
ENDIF ()
|
|
|
@ -91,9 +91,9 @@ static void vmGenerateVnodeCfg(SCreateVnodeReq *pCreate, SVnodeCfg *pCfg) {
|
||||||
pCfg->keep = pCreate->daysToKeep0;
|
pCfg->keep = pCreate->daysToKeep0;
|
||||||
pCfg->streamMode = pCreate->streamMode;
|
pCfg->streamMode = pCreate->streamMode;
|
||||||
pCfg->isWeak = true;
|
pCfg->isWeak = true;
|
||||||
pCfg->tsdbCfg.keep = pCreate->daysToKeep0;
|
|
||||||
pCfg->tsdbCfg.keep1 = pCreate->daysToKeep2;
|
|
||||||
pCfg->tsdbCfg.keep2 = pCreate->daysToKeep0;
|
pCfg->tsdbCfg.keep2 = pCreate->daysToKeep0;
|
||||||
|
pCfg->tsdbCfg.keep0 = pCreate->daysToKeep2;
|
||||||
|
pCfg->tsdbCfg.keep1 = pCreate->daysToKeep0;
|
||||||
pCfg->tsdbCfg.lruCacheSize = pCreate->cacheBlockSize;
|
pCfg->tsdbCfg.lruCacheSize = pCreate->cacheBlockSize;
|
||||||
pCfg->tsdbCfg.retentions = pCreate->pRetensions;
|
pCfg->tsdbCfg.retentions = pCreate->pRetensions;
|
||||||
pCfg->metaCfg.lruSize = pCreate->cacheBlockSize;
|
pCfg->metaCfg.lruSize = pCreate->cacheBlockSize;
|
||||||
|
@ -121,6 +121,8 @@ static void vmGenerateWrapperCfg(SVnodesMgmt *pMgmt, SCreateVnodeReq *pCreate, S
|
||||||
int32_t vmProcessCreateVnodeReq(SVnodesMgmt *pMgmt, SNodeMsg *pMsg) {
|
int32_t vmProcessCreateVnodeReq(SVnodesMgmt *pMgmt, SNodeMsg *pMsg) {
|
||||||
SRpcMsg *pReq = &pMsg->rpcMsg;
|
SRpcMsg *pReq = &pMsg->rpcMsg;
|
||||||
SCreateVnodeReq createReq = {0};
|
SCreateVnodeReq createReq = {0};
|
||||||
|
char path[TSDB_FILENAME_LEN];
|
||||||
|
|
||||||
if (tDeserializeSCreateVnodeReq(pReq->pCont, pReq->contLen, &createReq) != 0) {
|
if (tDeserializeSCreateVnodeReq(pReq->pCont, pReq->contLen, &createReq) != 0) {
|
||||||
terrno = TSDB_CODE_INVALID_MSG;
|
terrno = TSDB_CODE_INVALID_MSG;
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -143,6 +145,14 @@ int32_t vmProcessCreateVnodeReq(SVnodesMgmt *pMgmt, SNodeMsg *pMsg) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// create vnode
|
||||||
|
snprintf(path, TSDB_FILENAME_LEN, "vnode%svnode%d", TD_DIRSEP, vnodeCfg.vgId);
|
||||||
|
if (vnodeCreate(path, &vnodeCfg, pMgmt->pTfs) < 0) {
|
||||||
|
tFreeSCreateVnodeReq(&createReq);
|
||||||
|
dError("vgId:%d, failed to create vnode since %s", createReq.vgId, terrstr());
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
SMsgCb msgCb = pMgmt->pDnode->data.msgCb;
|
SMsgCb msgCb = pMgmt->pDnode->data.msgCb;
|
||||||
msgCb.pWrapper = pMgmt->pWrapper;
|
msgCb.pWrapper = pMgmt->pWrapper;
|
||||||
msgCb.queueFps[QUERY_QUEUE] = vmPutMsgToQueryQueue;
|
msgCb.queueFps[QUERY_QUEUE] = vmPutMsgToQueryQueue;
|
||||||
|
|
|
@ -12,8 +12,8 @@ target_link_libraries(
|
||||||
IF (TD_GRANT)
|
IF (TD_GRANT)
|
||||||
TARGET_LINK_LIBRARIES(mnode grant)
|
TARGET_LINK_LIBRARIES(mnode grant)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
IF (TD_USB_DONGLE)
|
IF (TD_GRANT)
|
||||||
TARGET_LINK_LIBRARIES(mnode usb_dongle)
|
ADD_DEFINITIONS(-D_GRANT)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
if(${BUILD_TEST})
|
if(${BUILD_TEST})
|
||||||
|
|
|
@ -27,7 +27,7 @@ void mndCleanupDb(SMnode *pMnode);
|
||||||
SDbObj *mndAcquireDb(SMnode *pMnode, const char *db);
|
SDbObj *mndAcquireDb(SMnode *pMnode, const char *db);
|
||||||
void mndReleaseDb(SMnode *pMnode, SDbObj *pDb);
|
void mndReleaseDb(SMnode *pMnode, SDbObj *pDb);
|
||||||
int32_t mndValidateDbInfo(SMnode *pMnode, SDbVgVersion *pDbs, int32_t numOfDbs, void **ppRsp, int32_t *pRspLen);
|
int32_t mndValidateDbInfo(SMnode *pMnode, SDbVgVersion *pDbs, int32_t numOfDbs, void **ppRsp, int32_t *pRspLen);
|
||||||
char *mnGetDbStr(char *src);
|
char *mndGetDbStr(char *src);
|
||||||
int32_t mndExtractDbInfo(SMnode *pMnode, SDbObj *pDb, SUseDbRsp *pRsp, const SUseDbReq *pReq);
|
int32_t mndExtractDbInfo(SMnode *pMnode, SDbObj *pDb, SUseDbRsp *pRsp, const SUseDbReq *pReq);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -1342,7 +1342,7 @@ SYNC_DB_OVER:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *mnGetDbStr(char *src) {
|
char *mndGetDbStr(char *src) {
|
||||||
char *pos = strstr(src, TS_PATH_DELIMITER);
|
char *pos = strstr(src, TS_PATH_DELIMITER);
|
||||||
if (pos != NULL) ++pos;
|
if (pos != NULL) ++pos;
|
||||||
|
|
||||||
|
@ -1357,7 +1357,7 @@ static void dumpDbInfoData(SSDataBlock* pBlock, SDbObj *pDb, SShowObj *pShow, in
|
||||||
int32_t cols = 0;
|
int32_t cols = 0;
|
||||||
|
|
||||||
char* buf = taosMemoryMalloc(pShow->bytes[cols]);
|
char* buf = taosMemoryMalloc(pShow->bytes[cols]);
|
||||||
char *name = mnGetDbStr(pDb->name);
|
char *name = mndGetDbStr(pDb->name);
|
||||||
if (name != NULL) {
|
if (name != NULL) {
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(buf, name, pShow->bytes[cols]);
|
STR_WITH_MAXSIZE_TO_VARSTR(buf, name, pShow->bytes[cols]);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -82,7 +82,7 @@ static const SInfosTableSchema userDBSchema[] = {
|
||||||
{.name = "blocks", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
|
{.name = "blocks", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
|
||||||
{.name = "minrows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
|
{.name = "minrows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
|
||||||
{.name = "maxrows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
|
{.name = "maxrows", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
|
||||||
{.name = "wallevel", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
|
{.name = "wal", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
|
||||||
{.name = "fsync", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
|
{.name = "fsync", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
|
||||||
{.name = "comp", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
|
{.name = "comp", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
|
||||||
{.name = "cachelast", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
|
{.name = "cachelast", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT},
|
||||||
|
@ -95,11 +95,13 @@ static const SInfosTableSchema userDBSchema[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const SInfosTableSchema userFuncSchema[] = {
|
static const SInfosTableSchema userFuncSchema[] = {
|
||||||
{.name = "name", .bytes = 32, .type = TSDB_DATA_TYPE_VARCHAR},
|
{.name = "name", .bytes = TSDB_FUNC_NAME_LEN - 1 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
|
||||||
|
{.name = "comment", .bytes = PATH_MAX - 1 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
|
||||||
|
{.name = "aggregate", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
|
||||||
|
{.name = "comment", .bytes = TSDB_TYPE_STR_MAX_LEN - 1 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR},
|
||||||
{.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
|
{.name = "create_time", .bytes = 8, .type = TSDB_DATA_TYPE_TIMESTAMP},
|
||||||
{.name = "ntables", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
|
{.name = "code_len", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
|
||||||
{.name = "precision", .bytes = 2, .type = TSDB_DATA_TYPE_VARCHAR},
|
{.name = "bufsize", .bytes = 4, .type = TSDB_DATA_TYPE_INT},
|
||||||
{.name = "status", .bytes = 10, .type = TSDB_DATA_TYPE_VARCHAR},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const SInfosTableSchema userIdxSchema[] = {
|
static const SInfosTableSchema userIdxSchema[] = {
|
||||||
|
|
|
@ -131,6 +131,13 @@ static int32_t mndProcessRetrieveSysTableReq(SNodeMsg *pReq) {
|
||||||
req.type = retrieveReq.type;
|
req.type = retrieveReq.type;
|
||||||
strncpy(req.db, retrieveReq.db, tListLen(req.db));
|
strncpy(req.db, retrieveReq.db, tListLen(req.db));
|
||||||
|
|
||||||
|
STableMetaRsp *pMeta = (STableMetaRsp *)taosHashGet(pMnode->infosMeta, retrieveReq.tb, strlen(retrieveReq.tb) + 1);
|
||||||
|
if (pMeta == NULL) {
|
||||||
|
terrno = TSDB_CODE_MND_INVALID_INFOS_TBL;
|
||||||
|
mError("failed to process show-retrieve req:%p since %s", pShow, terrstr());
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
pShow = mndCreateShowObj(pMnode, &req);
|
pShow = mndCreateShowObj(pMnode, &req);
|
||||||
if (pShow == NULL) {
|
if (pShow == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
@ -138,7 +145,7 @@ static int32_t mndProcessRetrieveSysTableReq(SNodeMsg *pReq) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pShow->pMeta = (STableMetaRsp *)taosHashGet(pMnode->infosMeta, retrieveReq.tb, strlen(retrieveReq.tb) + 1);
|
pShow->pMeta = pMeta;
|
||||||
pShow->numOfColumns = pShow->pMeta->numOfColumns;
|
pShow->numOfColumns = pShow->pMeta->numOfColumns;
|
||||||
int32_t offset = 0;
|
int32_t offset = 0;
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ static void mndTransSendRpcRsp(SMnode *pMnode, STrans *pTrans);
|
||||||
static int32_t mndProcessTransReq(SNodeMsg *pReq);
|
static int32_t mndProcessTransReq(SNodeMsg *pReq);
|
||||||
static int32_t mndProcessKillTransReq(SNodeMsg *pReq);
|
static int32_t mndProcessKillTransReq(SNodeMsg *pReq);
|
||||||
|
|
||||||
static int32_t mndRetrieveTrans(SNodeMsg *pReq, SShowObj *pShow, char *data, int32_t rows);
|
static int32_t mndRetrieveTrans(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
||||||
static void mndCancelGetNextTrans(SMnode *pMnode, void *pIter);
|
static void mndCancelGetNextTrans(SMnode *pMnode, void *pIter);
|
||||||
|
|
||||||
int32_t mndInitTrans(SMnode *pMnode) {
|
int32_t mndInitTrans(SMnode *pMnode) {
|
||||||
|
@ -73,7 +73,7 @@ int32_t mndInitTrans(SMnode *pMnode) {
|
||||||
mndSetMsgHandle(pMnode, TDMT_MND_TRANS_TIMER, mndProcessTransReq);
|
mndSetMsgHandle(pMnode, TDMT_MND_TRANS_TIMER, mndProcessTransReq);
|
||||||
mndSetMsgHandle(pMnode, TDMT_MND_KILL_TRANS, mndProcessKillTransReq);
|
mndSetMsgHandle(pMnode, TDMT_MND_KILL_TRANS, mndProcessKillTransReq);
|
||||||
|
|
||||||
// mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_TRANS, mndRetrieveTrans);
|
mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_TRANS, mndRetrieveTrans);
|
||||||
mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_TRANS, mndCancelGetNextTrans);
|
mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_TRANS, mndCancelGetNextTrans);
|
||||||
return sdbSetTable(pMnode->pSdb, table);
|
return sdbSetTable(pMnode->pSdb, table);
|
||||||
}
|
}
|
||||||
|
@ -1259,7 +1259,7 @@ void mndTransPullup(SMnode *pMnode) {
|
||||||
sdbWriteFile(pMnode->pSdb);
|
sdbWriteFile(pMnode->pSdb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mndRetrieveTrans(SNodeMsg *pReq, SShowObj *pShow, char *data, int32_t rows) {
|
static int32_t mndRetrieveTrans(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
|
||||||
SMnode *pMnode = pReq->pNode;
|
SMnode *pMnode = pReq->pNode;
|
||||||
SSdb *pSdb = pMnode->pSdb;
|
SSdb *pSdb = pMnode->pSdb;
|
||||||
int32_t numOfRows = 0;
|
int32_t numOfRows = 0;
|
||||||
|
@ -1273,34 +1273,34 @@ static int32_t mndRetrieveTrans(SNodeMsg *pReq, SShowObj *pShow, char *data, int
|
||||||
|
|
||||||
cols = 0;
|
cols = 0;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
*(int32_t *)pWrite = pTrans->id;
|
colDataAppend(pColInfo, numOfRows, (const char *)&pTrans->id, false);
|
||||||
cols++;
|
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
*(int64_t *)pWrite = pTrans->createdTime;
|
colDataAppend(pColInfo, numOfRows, (const char *)&pTrans->createdTime, false);
|
||||||
cols++;
|
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
char stage[TSDB_TRANS_STAGE_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
STR_TO_VARSTR(pWrite, mndTransStr(pTrans->stage));
|
STR_WITH_MAXSIZE_TO_VARSTR(stage, mndTransStr(pTrans->stage), pShow->bytes[cols]);
|
||||||
cols++;
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
|
colDataAppend(pColInfo, numOfRows, (const char *)stage, false);
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
char dbname[TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
char *name = mnGetDbStr(pTrans->dbname);
|
STR_WITH_MAXSIZE_TO_VARSTR(dbname, mndGetDbStr(pTrans->dbname), pShow->bytes[cols]);
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, name, pShow->bytes[cols]);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
cols++;
|
colDataAppend(pColInfo, numOfRows, (const char *)dbname, false);
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
char transType[TSDB_TRANS_TYPE_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
STR_TO_VARSTR(pWrite, mndTransType(pTrans->transType));
|
STR_WITH_MAXSIZE_TO_VARSTR(dbname, mndTransType(pTrans->transType), pShow->bytes[cols]);
|
||||||
cols++;
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
|
colDataAppend(pColInfo, numOfRows, (const char *)transType, false);
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
*(int64_t *)pWrite = pTrans->lastExecTime;
|
colDataAppend(pColInfo, numOfRows, (const char *)&pTrans->lastExecTime, false);
|
||||||
cols++;
|
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
char lastError[TSDB_TRANS_ERROR_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
STR_TO_VARSTR(pWrite, pTrans->lastError);
|
STR_WITH_MAXSIZE_TO_VARSTR(dbname, pTrans->lastError, pShow->bytes[cols]);
|
||||||
cols++;
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
|
colDataAppend(pColInfo, numOfRows, (const char *)lastError, false);
|
||||||
|
|
||||||
numOfRows++;
|
numOfRows++;
|
||||||
sdbRelease(pSdb, pTrans);
|
sdbRelease(pSdb, pTrans);
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
#add_subdirectory(user)
|
|
||||||
add_subdirectory(acct)
|
add_subdirectory(acct)
|
||||||
#add_subdirectory(trans)
|
|
||||||
#add_subdirectory(qnode)
|
|
||||||
#add_subdirectory(snode)
|
|
||||||
add_subdirectory(bnode)
|
add_subdirectory(bnode)
|
||||||
#add_subdirectory(show)
|
add_subdirectory(db)
|
||||||
#add_subdirectory(profile)
|
add_subdirectory(dnode)
|
||||||
#add_subdirectory(dnode)
|
add_subdirectory(func)
|
||||||
#add_subdirectory(mnode)
|
add_subdirectory(mnode)
|
||||||
#add_subdirectory(db)
|
add_subdirectory(profile)
|
||||||
#add_subdirectory(stb)
|
add_subdirectory(qnode)
|
||||||
#add_subdirectory(sma)
|
add_subdirectory(show)
|
||||||
#add_subdirectory(func)
|
add_subdirectory(sma)
|
||||||
#add_subdirectory(topic)
|
add_subdirectory(snode)
|
||||||
|
add_subdirectory(stb)
|
||||||
|
add_subdirectory(topic)
|
||||||
|
add_subdirectory(trans)
|
||||||
|
add_subdirectory(user)
|
||||||
|
|
|
@ -5,7 +5,7 @@ target_link_libraries(
|
||||||
PUBLIC sut
|
PUBLIC sut
|
||||||
)
|
)
|
||||||
|
|
||||||
#add_test(
|
add_test(
|
||||||
# NAME mnode_test_db
|
NAME dbTest
|
||||||
# COMMAND mnode_test_db
|
COMMAND dbTest
|
||||||
#)
|
)
|
||||||
|
|
|
@ -26,29 +26,8 @@ class MndTestDb : public ::testing::Test {
|
||||||
Testbase MndTestDb::test;
|
Testbase MndTestDb::test;
|
||||||
|
|
||||||
TEST_F(MndTestDb, 01_ShowDb) {
|
TEST_F(MndTestDb, 01_ShowDb) {
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DB, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DB, "user_databases", "");
|
||||||
CHECK_META("show databases", 17);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN - 1 + VARSTR_HEADER_SIZE, "name");
|
|
||||||
CHECK_SCHEMA(1, TSDB_DATA_TYPE_TIMESTAMP, 8, "create_time");
|
|
||||||
CHECK_SCHEMA(2, TSDB_DATA_TYPE_SMALLINT, 2, "vgroups");
|
|
||||||
CHECK_SCHEMA(3, TSDB_DATA_TYPE_INT, 4, "ntables");
|
|
||||||
CHECK_SCHEMA(4, TSDB_DATA_TYPE_SMALLINT, 2, "replica");
|
|
||||||
CHECK_SCHEMA(5, TSDB_DATA_TYPE_SMALLINT, 2, "quorum");
|
|
||||||
CHECK_SCHEMA(6, TSDB_DATA_TYPE_SMALLINT, 2, "days");
|
|
||||||
CHECK_SCHEMA(7, TSDB_DATA_TYPE_BINARY, 24 + VARSTR_HEADER_SIZE, "keep0,keep1,keep2");
|
|
||||||
CHECK_SCHEMA(8, TSDB_DATA_TYPE_INT, 4, "cache");
|
|
||||||
CHECK_SCHEMA(9, TSDB_DATA_TYPE_INT, 4, "blocks");
|
|
||||||
CHECK_SCHEMA(10, TSDB_DATA_TYPE_INT, 4, "minrows");
|
|
||||||
CHECK_SCHEMA(11, TSDB_DATA_TYPE_INT, 4, "maxrows");
|
|
||||||
CHECK_SCHEMA(12, TSDB_DATA_TYPE_TINYINT, 1, "wallevel");
|
|
||||||
CHECK_SCHEMA(13, TSDB_DATA_TYPE_INT, 4, "fsync");
|
|
||||||
CHECK_SCHEMA(14, TSDB_DATA_TYPE_TINYINT, 1, "comp");
|
|
||||||
CHECK_SCHEMA(15, TSDB_DATA_TYPE_TINYINT, 1, "cachelast");
|
|
||||||
CHECK_SCHEMA(16, TSDB_DATA_TYPE_BINARY, 3 + VARSTR_HEADER_SIZE, "precision");
|
|
||||||
// CHECK_SCHEMA(17, TSDB_DATA_TYPE_TINYINT, 1, "update");
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestDb, 02_Create_Alter_Drop_Db) {
|
TEST_F(MndTestDb, 02_Create_Alter_Drop_Db) {
|
||||||
|
@ -58,7 +37,7 @@ TEST_F(MndTestDb, 02_Create_Alter_Drop_Db) {
|
||||||
createReq.numOfVgroups = 2;
|
createReq.numOfVgroups = 2;
|
||||||
createReq.cacheBlockSize = 16;
|
createReq.cacheBlockSize = 16;
|
||||||
createReq.totalBlocks = 10;
|
createReq.totalBlocks = 10;
|
||||||
createReq.daysPerFile = 10;
|
createReq.daysPerFile = 1000;
|
||||||
createReq.daysToKeep0 = 3650;
|
createReq.daysToKeep0 = 3650;
|
||||||
createReq.daysToKeep1 = 3650;
|
createReq.daysToKeep1 = 3650;
|
||||||
createReq.daysToKeep2 = 3650;
|
createReq.daysToKeep2 = 3650;
|
||||||
|
@ -66,6 +45,7 @@ TEST_F(MndTestDb, 02_Create_Alter_Drop_Db) {
|
||||||
createReq.maxRows = 4096;
|
createReq.maxRows = 4096;
|
||||||
createReq.commitTime = 3600;
|
createReq.commitTime = 3600;
|
||||||
createReq.fsyncPeriod = 3000;
|
createReq.fsyncPeriod = 3000;
|
||||||
|
createReq.ttl = 0;
|
||||||
createReq.walLevel = 1;
|
createReq.walLevel = 1;
|
||||||
createReq.precision = 0;
|
createReq.precision = 0;
|
||||||
createReq.compression = 2;
|
createReq.compression = 2;
|
||||||
|
@ -74,6 +54,9 @@ TEST_F(MndTestDb, 02_Create_Alter_Drop_Db) {
|
||||||
createReq.update = 0;
|
createReq.update = 0;
|
||||||
createReq.cacheLastRow = 0;
|
createReq.cacheLastRow = 0;
|
||||||
createReq.ignoreExist = 1;
|
createReq.ignoreExist = 1;
|
||||||
|
createReq.streamMode = 0;
|
||||||
|
createReq.singleSTable = 0;
|
||||||
|
createReq.numOfRetensions = 0;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDbReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDbReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
|
@ -84,47 +67,11 @@ TEST_F(MndTestDb, 02_Create_Alter_Drop_Db) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DB, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DB, "user_databases", "");
|
||||||
CHECK_META("show databases", 17);
|
EXPECT_EQ(test.GetShowRows(), 3);
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
test.SendShowReq(TSDB_MGMT_TABLE_VGROUP, "vgroups", "1.d1");
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
|
||||||
CheckBinary("d1", TSDB_DB_NAME_LEN - 1);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckInt16(2); // vgroups
|
|
||||||
CheckInt32(0); // ntables
|
|
||||||
CheckInt16(1); // replica
|
|
||||||
CheckInt16(1); // quorum
|
|
||||||
CheckInt16(10); // days
|
|
||||||
CheckBinary("3650,3650,3650", 24); // days
|
|
||||||
CheckInt32(16); // cache
|
|
||||||
CheckInt32(10); // blocks
|
|
||||||
CheckInt32(100); // minrows
|
|
||||||
CheckInt32(4096); // maxrows
|
|
||||||
CheckInt8(1); // wallevel
|
|
||||||
CheckInt32(3000); // fsync
|
|
||||||
CheckInt8(2); // comp
|
|
||||||
CheckInt8(0); // cachelast
|
|
||||||
CheckBinary("ms", 3); // precision
|
|
||||||
CheckInt8(0); // update
|
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_VGROUP, "1.d1");
|
|
||||||
CHECK_META("show vgroups", 4);
|
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_INT, 4, "vgId");
|
|
||||||
CHECK_SCHEMA(1, TSDB_DATA_TYPE_INT, 4, "tables");
|
|
||||||
CHECK_SCHEMA(2, TSDB_DATA_TYPE_SMALLINT, 2, "v1_dnode");
|
|
||||||
CHECK_SCHEMA(3, TSDB_DATA_TYPE_BINARY, 9 + VARSTR_HEADER_SIZE, "v1_status");
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
CheckInt32(2);
|
|
||||||
CheckInt32(3);
|
|
||||||
IgnoreInt32();
|
|
||||||
IgnoreInt32();
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckBinary("master", 9);
|
|
||||||
CheckBinary("master", 9);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
SAlterDbReq alterdbReq = {0};
|
SAlterDbReq alterdbReq = {0};
|
||||||
|
@ -147,55 +94,14 @@ TEST_F(MndTestDb, 02_Create_Alter_Drop_Db) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DB, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DB, "user_databases", "");
|
||||||
test.SendShowRetrieveReq();
|
EXPECT_EQ(test.GetShowRows(), 3);
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
|
||||||
CheckBinary("d1", TSDB_DB_NAME_LEN - 1);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckInt16(2); // vgroups
|
|
||||||
CheckInt32(0); // tables
|
|
||||||
CheckInt16(1); // replica
|
|
||||||
CheckInt16(2); // quorum
|
|
||||||
CheckInt16(10); // days
|
|
||||||
CheckBinary("300,400,500", 24); // days
|
|
||||||
CheckInt32(16); // cache
|
|
||||||
CheckInt32(12); // blocks
|
|
||||||
CheckInt32(100); // minrows
|
|
||||||
CheckInt32(4096); // maxrows
|
|
||||||
CheckInt8(2); // wallevel
|
|
||||||
CheckInt32(4000); // fsync
|
|
||||||
CheckInt8(2); // comp
|
|
||||||
CheckInt8(1); // cachelast
|
|
||||||
CheckBinary("ms", 3); // precision
|
|
||||||
CheckInt8(0); // update
|
|
||||||
|
|
||||||
// restart
|
// restart
|
||||||
test.Restart();
|
test.Restart();
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DB, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DB, "user_databases", "");
|
||||||
CHECK_META("show databases", 17);
|
EXPECT_EQ(test.GetShowRows(), 3);
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
|
||||||
|
|
||||||
CheckBinary("d1", TSDB_DB_NAME_LEN - 1);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckInt16(2); // vgroups
|
|
||||||
CheckInt32(0); // tables
|
|
||||||
CheckInt16(1); // replica
|
|
||||||
CheckInt16(2); // quorum
|
|
||||||
CheckInt16(10); // days
|
|
||||||
CheckBinary("300,400,500", 24); // days
|
|
||||||
CheckInt32(16); // cache
|
|
||||||
CheckInt32(12); // blocks
|
|
||||||
CheckInt32(100); // minrows
|
|
||||||
CheckInt32(4096); // maxrows
|
|
||||||
CheckInt8(2); // wallevel
|
|
||||||
CheckInt32(4000); // fsync
|
|
||||||
CheckInt8(2); // comp
|
|
||||||
CheckInt8(1); // cachelast
|
|
||||||
CheckBinary("ms", 3); // precision
|
|
||||||
CheckInt8(0); // update
|
|
||||||
|
|
||||||
{
|
{
|
||||||
SDropDbReq dropdbReq = {0};
|
SDropDbReq dropdbReq = {0};
|
||||||
|
@ -214,11 +120,8 @@ TEST_F(MndTestDb, 02_Create_Alter_Drop_Db) {
|
||||||
EXPECT_STREQ(dropdbRsp.db, "1.d1");
|
EXPECT_STREQ(dropdbRsp.db, "1.d1");
|
||||||
}
|
}
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DB, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DB, "user_databases", "");
|
||||||
CHECK_META("show databases", 17);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestDb, 03_Create_Use_Restart_Use_Db) {
|
TEST_F(MndTestDb, 03_Create_Use_Restart_Use_Db) {
|
||||||
|
@ -228,7 +131,7 @@ TEST_F(MndTestDb, 03_Create_Use_Restart_Use_Db) {
|
||||||
createReq.numOfVgroups = 2;
|
createReq.numOfVgroups = 2;
|
||||||
createReq.cacheBlockSize = 16;
|
createReq.cacheBlockSize = 16;
|
||||||
createReq.totalBlocks = 10;
|
createReq.totalBlocks = 10;
|
||||||
createReq.daysPerFile = 10;
|
createReq.daysPerFile = 1000;
|
||||||
createReq.daysToKeep0 = 3650;
|
createReq.daysToKeep0 = 3650;
|
||||||
createReq.daysToKeep1 = 3650;
|
createReq.daysToKeep1 = 3650;
|
||||||
createReq.daysToKeep2 = 3650;
|
createReq.daysToKeep2 = 3650;
|
||||||
|
@ -236,6 +139,7 @@ TEST_F(MndTestDb, 03_Create_Use_Restart_Use_Db) {
|
||||||
createReq.maxRows = 4096;
|
createReq.maxRows = 4096;
|
||||||
createReq.commitTime = 3600;
|
createReq.commitTime = 3600;
|
||||||
createReq.fsyncPeriod = 3000;
|
createReq.fsyncPeriod = 3000;
|
||||||
|
createReq.ttl = 0;
|
||||||
createReq.walLevel = 1;
|
createReq.walLevel = 1;
|
||||||
createReq.precision = 0;
|
createReq.precision = 0;
|
||||||
createReq.compression = 2;
|
createReq.compression = 2;
|
||||||
|
@ -244,6 +148,9 @@ TEST_F(MndTestDb, 03_Create_Use_Restart_Use_Db) {
|
||||||
createReq.update = 0;
|
createReq.update = 0;
|
||||||
createReq.cacheLastRow = 0;
|
createReq.cacheLastRow = 0;
|
||||||
createReq.ignoreExist = 1;
|
createReq.ignoreExist = 1;
|
||||||
|
createReq.streamMode = 0;
|
||||||
|
createReq.singleSTable = 0;
|
||||||
|
createReq.numOfRetensions = 0;
|
||||||
|
|
||||||
int32_t contLen = tSerializeSCreateDbReq(NULL, 0, &createReq);
|
int32_t contLen = tSerializeSCreateDbReq(NULL, 0, &createReq);
|
||||||
void* pReq = rpcMallocCont(contLen);
|
void* pReq = rpcMallocCont(contLen);
|
||||||
|
@ -254,12 +161,8 @@ TEST_F(MndTestDb, 03_Create_Use_Restart_Use_Db) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DB, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DB, "user_databases", "");
|
||||||
CHECK_META("show databases", 17);
|
EXPECT_EQ(test.GetShowRows(), 3);
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
|
||||||
CheckBinary("d2", TSDB_DB_NAME_LEN - 1);
|
|
||||||
|
|
||||||
uint64_t d2_uid = 0;
|
uint64_t d2_uid = 0;
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ target_link_libraries(
|
||||||
PUBLIC sut
|
PUBLIC sut
|
||||||
)
|
)
|
||||||
|
|
||||||
#add_test(
|
add_test(
|
||||||
# NAME mnode_test_dnode
|
NAME mdnodeTest
|
||||||
# COMMAND mnode_test_dnode
|
COMMAND mdnodeTest
|
||||||
#)
|
)
|
||||||
|
|
|
@ -51,27 +51,8 @@ TestServer MndTestDnode::server4;
|
||||||
TestServer MndTestDnode::server5;
|
TestServer MndTestDnode::server5;
|
||||||
|
|
||||||
TEST_F(MndTestDnode, 01_ShowDnode) {
|
TEST_F(MndTestDnode, 01_ShowDnode) {
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DNODE, "dnodes", "");
|
||||||
CHECK_META("show dnodes", 7);
|
|
||||||
|
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_SMALLINT, 2, "id");
|
|
||||||
CHECK_SCHEMA(1, TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN + VARSTR_HEADER_SIZE, "endpoint");
|
|
||||||
CHECK_SCHEMA(2, TSDB_DATA_TYPE_SMALLINT, 2, "vnodes");
|
|
||||||
CHECK_SCHEMA(3, TSDB_DATA_TYPE_SMALLINT, 2, "support_vnodes");
|
|
||||||
CHECK_SCHEMA(4, TSDB_DATA_TYPE_BINARY, 10 + VARSTR_HEADER_SIZE, "status");
|
|
||||||
CHECK_SCHEMA(5, TSDB_DATA_TYPE_TIMESTAMP, 8, "create_time");
|
|
||||||
CHECK_SCHEMA(6, TSDB_DATA_TYPE_BINARY, 24 + VARSTR_HEADER_SIZE, "offline_reason");
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckBinary("localhost:9023", TSDB_EP_LEN);
|
|
||||||
CheckInt16(0);
|
|
||||||
CheckInt16(16);
|
|
||||||
CheckBinary("ready", 10);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("", 24);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestDnode, 02_ConfigDnode) {
|
TEST_F(MndTestDnode, 02_ConfigDnode) {
|
||||||
|
@ -162,25 +143,8 @@ TEST_F(MndTestDnode, 03_Create_Dnode) {
|
||||||
|
|
||||||
taosMsleep(1300);
|
taosMsleep(1300);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DNODE, "dnodes", "");
|
||||||
CHECK_META("show dnodes", 7);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckInt16(2);
|
|
||||||
CheckBinary("localhost:9023", TSDB_EP_LEN);
|
|
||||||
CheckBinary("localhost:9024", TSDB_EP_LEN);
|
|
||||||
CheckInt16(0);
|
|
||||||
CheckInt16(0);
|
|
||||||
CheckInt16(16);
|
|
||||||
CheckInt16(16);
|
|
||||||
CheckBinary("ready", 10);
|
|
||||||
CheckBinary("ready", 10);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("", 24);
|
|
||||||
CheckBinary("", 24);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestDnode, 04_Drop_Dnode) {
|
TEST_F(MndTestDnode, 04_Drop_Dnode) {
|
||||||
|
@ -236,19 +200,9 @@ TEST_F(MndTestDnode, 04_Drop_Dnode) {
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_MND_DNODE_NOT_EXIST);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_MND_DNODE_NOT_EXIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DNODE, "dnodes", "");
|
||||||
CHECK_META("show dnodes", 7);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckBinary("localhost:9023", TSDB_EP_LEN);
|
|
||||||
CheckInt16(0);
|
|
||||||
CheckInt16(16);
|
|
||||||
CheckBinary("ready", 10);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("", 24);
|
|
||||||
|
|
||||||
taosMsleep(2000);
|
taosMsleep(2000);
|
||||||
server2.Stop();
|
server2.Stop();
|
||||||
server2.DoStart();
|
server2.DoStart();
|
||||||
|
@ -298,40 +252,9 @@ TEST_F(MndTestDnode, 05_Create_Drop_Restart_Dnode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
taosMsleep(1300);
|
taosMsleep(1300);
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DNODE, "dnodes", "");
|
||||||
CHECK_META("show dnodes", 7);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 4);
|
EXPECT_EQ(test.GetShowRows(), 4);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckInt16(3);
|
|
||||||
CheckInt16(4);
|
|
||||||
CheckInt16(5);
|
|
||||||
CheckBinary("localhost:9023", TSDB_EP_LEN);
|
|
||||||
CheckBinary("localhost:9025", TSDB_EP_LEN);
|
|
||||||
CheckBinary("localhost:9026", TSDB_EP_LEN);
|
|
||||||
CheckBinary("localhost:9027", TSDB_EP_LEN);
|
|
||||||
CheckInt16(0);
|
|
||||||
CheckInt16(0);
|
|
||||||
CheckInt16(0);
|
|
||||||
CheckInt16(0);
|
|
||||||
CheckInt16(16);
|
|
||||||
CheckInt16(16);
|
|
||||||
CheckInt16(16);
|
|
||||||
CheckInt16(16);
|
|
||||||
CheckBinary("ready", 10);
|
|
||||||
CheckBinary("ready", 10);
|
|
||||||
CheckBinary("ready", 10);
|
|
||||||
CheckBinary("ready", 10);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("", 24);
|
|
||||||
CheckBinary("", 24);
|
|
||||||
CheckBinary("", 24);
|
|
||||||
CheckBinary("", 24);
|
|
||||||
|
|
||||||
// restart
|
// restart
|
||||||
uInfo("stop all server");
|
uInfo("stop all server");
|
||||||
test.Restart();
|
test.Restart();
|
||||||
|
@ -341,37 +264,6 @@ TEST_F(MndTestDnode, 05_Create_Drop_Restart_Dnode) {
|
||||||
server5.Restart();
|
server5.Restart();
|
||||||
|
|
||||||
taosMsleep(1300);
|
taosMsleep(1300);
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DNODE, "dnodes", "");
|
||||||
CHECK_META("show dnodes", 7);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 4);
|
EXPECT_EQ(test.GetShowRows(), 4);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckInt16(3);
|
|
||||||
CheckInt16(4);
|
|
||||||
CheckInt16(5);
|
|
||||||
CheckBinary("localhost:9023", TSDB_EP_LEN);
|
|
||||||
CheckBinary("localhost:9025", TSDB_EP_LEN);
|
|
||||||
CheckBinary("localhost:9026", TSDB_EP_LEN);
|
|
||||||
CheckBinary("localhost:9027", TSDB_EP_LEN);
|
|
||||||
CheckInt16(0);
|
|
||||||
CheckInt16(0);
|
|
||||||
CheckInt16(0);
|
|
||||||
CheckInt16(0);
|
|
||||||
CheckInt16(16);
|
|
||||||
CheckInt16(16);
|
|
||||||
CheckInt16(16);
|
|
||||||
CheckInt16(16);
|
|
||||||
CheckBinary("ready", 10);
|
|
||||||
CheckBinary("ready", 10);
|
|
||||||
CheckBinary("ready", 10);
|
|
||||||
CheckBinary("ready", 10);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("", 24);
|
|
||||||
CheckBinary("", 24);
|
|
||||||
CheckBinary("", 24);
|
|
||||||
CheckBinary("", 24);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
aux_source_directory(. FUNC_SRC)
|
aux_source_directory(. MNODE_FUNC_TEST_SRC)
|
||||||
add_executable(mnode_test_func ${FUNC_SRC})
|
add_executable(funcTest ${MNODE_FUNC_TEST_SRC})
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
mnode_test_func
|
funcTest
|
||||||
PUBLIC sut
|
PUBLIC sut
|
||||||
)
|
)
|
||||||
|
|
||||||
add_test(
|
add_test(
|
||||||
NAME mnode_test_func
|
NAME funcTest
|
||||||
COMMAND mnode_test_func
|
COMMAND funcTest
|
||||||
)
|
)
|
||||||
|
|
|
@ -26,18 +26,7 @@ class MndTestFunc : public ::testing::Test {
|
||||||
Testbase MndTestFunc::test;
|
Testbase MndTestFunc::test;
|
||||||
|
|
||||||
TEST_F(MndTestFunc, 01_Show_Func) {
|
TEST_F(MndTestFunc, 01_Show_Func) {
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_FUNC, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_FUNC, "user_functions", "");
|
||||||
CHECK_META("show functions", 7);
|
|
||||||
|
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_BINARY, TSDB_FUNC_NAME_LEN + VARSTR_HEADER_SIZE, "name");
|
|
||||||
CHECK_SCHEMA(1, TSDB_DATA_TYPE_BINARY, PATH_MAX + VARSTR_HEADER_SIZE, "comment");
|
|
||||||
CHECK_SCHEMA(2, TSDB_DATA_TYPE_INT, 4, "aggregate");
|
|
||||||
CHECK_SCHEMA(3, TSDB_DATA_TYPE_BINARY, TSDB_TYPE_STR_MAX_LEN + VARSTR_HEADER_SIZE, "outputtype");
|
|
||||||
CHECK_SCHEMA(4, TSDB_DATA_TYPE_TIMESTAMP, 8, "create_time");
|
|
||||||
CHECK_SCHEMA(5, TSDB_DATA_TYPE_INT, 4, "code_len");
|
|
||||||
CHECK_SCHEMA(6, TSDB_DATA_TYPE_INT, 4, "bufsize");
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 0);
|
EXPECT_EQ(test.GetShowRows(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,19 +183,8 @@ TEST_F(MndTestFunc, 02_Create_Func) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_FUNC, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_FUNC, "user_functions", "");
|
||||||
CHECK_META("show functions", 7);
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
CheckBinary("f1", TSDB_FUNC_NAME_LEN);
|
|
||||||
CheckBinaryByte('m', TSDB_FUNC_COMMENT_LEN);
|
|
||||||
CheckInt32(0);
|
|
||||||
CheckBinary("SMALLINT", TSDB_TYPE_STR_MAX_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckInt32(TSDB_FUNC_CODE_LEN);
|
|
||||||
CheckInt32(4);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestFunc, 03_Retrieve_Func) {
|
TEST_F(MndTestFunc, 03_Retrieve_Func) {
|
||||||
|
@ -331,10 +309,7 @@ TEST_F(MndTestFunc, 03_Retrieve_Func) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_FUNC, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_FUNC, "user_functions", "");
|
||||||
CHECK_META("show functions", 7);
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -529,20 +504,12 @@ TEST_F(MndTestFunc, 04_Drop_Func) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_FUNC, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_FUNC, "user_functions", "");
|
||||||
CHECK_META("show functions", 7);
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
// restart
|
// restart
|
||||||
test.Restart();
|
test.Restart();
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_FUNC, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_FUNC, "user_functions", "");
|
||||||
CHECK_META("show functions", 7);
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
CheckBinary("f2", TSDB_FUNC_NAME_LEN);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
aux_source_directory(. MTEST_SRC)
|
aux_source_directory(. MNODE_MNODE_TEST_SRC)
|
||||||
add_executable(mnode_test_mnode ${MTEST_SRC})
|
add_executable(mmnodeTest ${MNODE_MNODE_TEST_SRC})
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
mnode_test_mnode
|
mmnodeTest
|
||||||
PUBLIC sut
|
PUBLIC sut
|
||||||
)
|
)
|
||||||
|
|
||||||
add_test(
|
add_test(
|
||||||
NAME mnode_test_mnode
|
NAME mmnodeTest
|
||||||
COMMAND mnode_test_mnode
|
COMMAND mmnodeTest
|
||||||
)
|
)
|
||||||
|
|
|
@ -39,23 +39,8 @@ Testbase MndTestMnode::test;
|
||||||
TestServer MndTestMnode::server2;
|
TestServer MndTestMnode::server2;
|
||||||
|
|
||||||
TEST_F(MndTestMnode, 01_ShowDnode) {
|
TEST_F(MndTestMnode, 01_ShowDnode) {
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_MNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_MNODE, "mnodes", "");
|
||||||
CHECK_META("show mnodes", 5);
|
|
||||||
|
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_SMALLINT, 2, "id");
|
|
||||||
CHECK_SCHEMA(1, TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN + VARSTR_HEADER_SIZE, "endpoint");
|
|
||||||
CHECK_SCHEMA(2, TSDB_DATA_TYPE_BINARY, 12 + VARSTR_HEADER_SIZE, "role");
|
|
||||||
CHECK_SCHEMA(3, TSDB_DATA_TYPE_TIMESTAMP, 8, "create_time");
|
|
||||||
CHECK_SCHEMA(4, TSDB_DATA_TYPE_TIMESTAMP, 8, "role_time");
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckBinary("localhost:9028", TSDB_EP_LEN);
|
|
||||||
CheckBinary("master", 12);
|
|
||||||
CheckTimestamp();
|
|
||||||
IgnoreTimestamp();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestMnode, 02_Create_Mnode_Invalid_Id) {
|
TEST_F(MndTestMnode, 02_Create_Mnode_Invalid_Id) {
|
||||||
|
@ -104,8 +89,7 @@ TEST_F(MndTestMnode, 04_Create_Mnode) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
taosMsleep(1300);
|
taosMsleep(1300);
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DNODE, "dnodes", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,20 +106,8 @@ TEST_F(MndTestMnode, 04_Create_Mnode) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_MNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_MNODE, "mnodes", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckInt16(2);
|
|
||||||
CheckBinary("localhost:9028", TSDB_EP_LEN);
|
|
||||||
CheckBinary("localhost:9029", TSDB_EP_LEN);
|
|
||||||
CheckBinary("master", 12);
|
|
||||||
CheckBinary("slave", 12);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
IgnoreTimestamp();
|
|
||||||
IgnoreTimestamp();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -151,15 +123,8 @@ TEST_F(MndTestMnode, 04_Create_Mnode) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_MNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_MNODE, "mnodes", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckBinary("localhost:9028", TSDB_EP_LEN);
|
|
||||||
CheckBinary("master", 12);
|
|
||||||
CheckTimestamp();
|
|
||||||
IgnoreTimestamp();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
aux_source_directory(. PROFILE_SRC)
|
aux_source_directory(. MNODE_PROFILE_TEST_SRC)
|
||||||
add_executable(mnode_test_profile ${PROFILE_SRC})
|
add_executable(profileTest ${MNODE_PROFILE_TEST_SRC})
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
mnode_test_profile
|
profileTest
|
||||||
PUBLIC sut
|
PUBLIC sut
|
||||||
)
|
)
|
||||||
|
|
||||||
add_test(
|
add_test(
|
||||||
NAME mnode_test_profile
|
NAME profileTest
|
||||||
COMMAND mnode_test_profile
|
COMMAND profileTest
|
||||||
)
|
)
|
||||||
|
|
|
@ -46,7 +46,7 @@ TEST_F(MndTestProfile, 01_ConnectMsg) {
|
||||||
|
|
||||||
EXPECT_EQ(connectRsp.acctId, 1);
|
EXPECT_EQ(connectRsp.acctId, 1);
|
||||||
EXPECT_GT(connectRsp.clusterId, 0);
|
EXPECT_GT(connectRsp.clusterId, 0);
|
||||||
EXPECT_EQ(connectRsp.connId, 1);
|
EXPECT_NE(connectRsp.connId, 0);
|
||||||
EXPECT_EQ(connectRsp.superUser, 1);
|
EXPECT_EQ(connectRsp.superUser, 1);
|
||||||
|
|
||||||
EXPECT_EQ(connectRsp.epSet.inUse, 0);
|
EXPECT_EQ(connectRsp.epSet.inUse, 0);
|
||||||
|
@ -74,32 +74,16 @@ TEST_F(MndTestProfile, 02_ConnectMsg_InvalidDB) {
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestProfile, 03_ConnectMsg_Show) {
|
TEST_F(MndTestProfile, 03_ConnectMsg_Show) {
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_CONNS, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_CONNS, "connections", "");
|
||||||
CHECK_META("show connections", 7);
|
EXPECT_EQ(test.GetShowRows(), 0);
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_INT, 4, "connId");
|
|
||||||
CHECK_SCHEMA(1, TSDB_DATA_TYPE_BINARY, TSDB_USER_LEN + VARSTR_HEADER_SIZE, "user");
|
|
||||||
CHECK_SCHEMA(2, TSDB_DATA_TYPE_BINARY, TSDB_APP_NAME_LEN + VARSTR_HEADER_SIZE, "program");
|
|
||||||
CHECK_SCHEMA(3, TSDB_DATA_TYPE_INT, 4, "pid");
|
|
||||||
CHECK_SCHEMA(4, TSDB_DATA_TYPE_BINARY, TSDB_IPv4ADDR_LEN + 6 + VARSTR_HEADER_SIZE, "ip:port");
|
|
||||||
CHECK_SCHEMA(5, TSDB_DATA_TYPE_TIMESTAMP, 8, "login_time");
|
|
||||||
CHECK_SCHEMA(6, TSDB_DATA_TYPE_TIMESTAMP, 8, "last_access");
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
|
||||||
CheckInt32(1);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("mnode_test_profile", TSDB_APP_NAME_LEN);
|
|
||||||
CheckInt32(1234);
|
|
||||||
IgnoreBinary(TSDB_IPv4ADDR_LEN + 6);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestProfile, 04_HeartBeatMsg) {
|
TEST_F(MndTestProfile, 04_HeartBeatMsg) {
|
||||||
SClientHbBatchReq batchReq = {0};
|
SClientHbBatchReq batchReq = {0};
|
||||||
batchReq.reqs = taosArrayInit(0, sizeof(SClientHbReq));
|
batchReq.reqs = taosArrayInit(0, sizeof(SClientHbReq));
|
||||||
SClientHbReq req = {0};
|
SClientHbReq req = {0};
|
||||||
req.connKey = {.connId = 123, .hbType = CONN_TYPE__TMQ};
|
req.connKey.tscRid = 123;
|
||||||
|
req.connKey.connType = CONN_TYPE__TMQ;
|
||||||
req.info = taosHashInit(64, hbKeyHashFunc, 1, HASH_ENTRY_LOCK);
|
req.info = taosHashInit(64, hbKeyHashFunc, 1, HASH_ENTRY_LOCK);
|
||||||
SKv kv = {0};
|
SKv kv = {0};
|
||||||
kv.key = 123;
|
kv.key = 123;
|
||||||
|
@ -311,24 +295,6 @@ TEST_F(MndTestProfile, 08_KillQueryMsg_InvalidConn) {
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestProfile, 09_KillQueryMsg) {
|
TEST_F(MndTestProfile, 09_KillQueryMsg) {
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_QUERIES, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_QUERIES, "queries", "");
|
||||||
CHECK_META("show queries", 14);
|
|
||||||
|
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_INT, 4, "queryId");
|
|
||||||
CHECK_SCHEMA(1, TSDB_DATA_TYPE_INT, 4, "connId");
|
|
||||||
CHECK_SCHEMA(2, TSDB_DATA_TYPE_BINARY, TSDB_USER_LEN + VARSTR_HEADER_SIZE, "user");
|
|
||||||
CHECK_SCHEMA(3, TSDB_DATA_TYPE_BINARY, TSDB_IPv4ADDR_LEN + 6 + VARSTR_HEADER_SIZE, "ip:port");
|
|
||||||
CHECK_SCHEMA(4, TSDB_DATA_TYPE_BINARY, 22 + VARSTR_HEADER_SIZE, "qid");
|
|
||||||
CHECK_SCHEMA(5, TSDB_DATA_TYPE_TIMESTAMP, 8, "created_time");
|
|
||||||
CHECK_SCHEMA(6, TSDB_DATA_TYPE_BIGINT, 8, "time");
|
|
||||||
CHECK_SCHEMA(7, TSDB_DATA_TYPE_BINARY, 18 + VARSTR_HEADER_SIZE, "sql_obj_id");
|
|
||||||
CHECK_SCHEMA(8, TSDB_DATA_TYPE_INT, 4, "pid");
|
|
||||||
CHECK_SCHEMA(9, TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN + VARSTR_HEADER_SIZE, "ep");
|
|
||||||
CHECK_SCHEMA(10, TSDB_DATA_TYPE_BOOL, 1, "stable_query");
|
|
||||||
CHECK_SCHEMA(11, TSDB_DATA_TYPE_INT, 4, "sub_queries");
|
|
||||||
CHECK_SCHEMA(12, TSDB_DATA_TYPE_BINARY, TSDB_SHOW_SUBQUERY_LEN + VARSTR_HEADER_SIZE, "sub_query_info");
|
|
||||||
CHECK_SCHEMA(13, TSDB_DATA_TYPE_BINARY, TSDB_SHOW_SQL_LEN + VARSTR_HEADER_SIZE, "sql");
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 0);
|
EXPECT_EQ(test.GetShowRows(), 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
aux_source_directory(. QTEST_SRC)
|
aux_source_directory(. MNODE_QNODE_TEST_SRC)
|
||||||
add_executable(mnode_test_qnode ${QTEST_SRC})
|
add_executable(mqnodeTest ${MNODE_QNODE_TEST_SRC})
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
mnode_test_qnode
|
mqnodeTest
|
||||||
PUBLIC sut
|
PUBLIC sut
|
||||||
)
|
)
|
||||||
|
|
||||||
add_test(
|
add_test(
|
||||||
NAME mnode_test_qnode
|
NAME mqnodeTest
|
||||||
COMMAND mnode_test_qnode
|
COMMAND mqnodeTest
|
||||||
)
|
)
|
||||||
|
|
|
@ -39,14 +39,7 @@ Testbase MndTestQnode::test;
|
||||||
TestServer MndTestQnode::server2;
|
TestServer MndTestQnode::server2;
|
||||||
|
|
||||||
TEST_F(MndTestQnode, 01_Show_Qnode) {
|
TEST_F(MndTestQnode, 01_Show_Qnode) {
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_QNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_QNODE, "qnodes", "");
|
||||||
CHECK_META("show qnodes", 3);
|
|
||||||
|
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_SMALLINT, 2, "id");
|
|
||||||
CHECK_SCHEMA(1, TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN + VARSTR_HEADER_SIZE, "endpoint");
|
|
||||||
CHECK_SCHEMA(2, TSDB_DATA_TYPE_TIMESTAMP, 8, "create_time");
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 0);
|
EXPECT_EQ(test.GetShowRows(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,14 +69,8 @@ TEST_F(MndTestQnode, 02_Create_Qnode) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_QNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_QNODE, "qnodes", "");
|
||||||
CHECK_META("show qnodes", 3);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckBinary("localhost:9014", TSDB_EP_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -115,8 +102,7 @@ TEST_F(MndTestQnode, 03_Drop_Qnode) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
taosMsleep(1300);
|
taosMsleep(1300);
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DNODE, "dnodes", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,16 +118,8 @@ TEST_F(MndTestQnode, 03_Drop_Qnode) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_QNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_QNODE, "qnodes", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckInt16(2);
|
|
||||||
CheckBinary("localhost:9014", TSDB_EP_LEN);
|
|
||||||
CheckBinary("localhost:9015", TSDB_EP_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -156,13 +134,8 @@ TEST_F(MndTestQnode, 03_Drop_Qnode) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_QNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_QNODE, "qnodes", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckBinary("localhost:9014", TSDB_EP_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
aux_source_directory(. SHOW_SRC)
|
aux_source_directory(. MNODE_SHOW_TEST_SRC)
|
||||||
add_executable(mnode_test_show ${SHOW_SRC})
|
add_executable(showTest ${MNODE_SHOW_TEST_SRC})
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
mnode_test_show
|
showTest
|
||||||
PUBLIC sut
|
PUBLIC sut
|
||||||
)
|
)
|
||||||
|
|
||||||
add_test(
|
add_test(
|
||||||
NAME mnode_test_show
|
NAME showTest
|
||||||
COMMAND mnode_test_show
|
COMMAND showTest
|
||||||
)
|
)
|
||||||
|
|
|
@ -34,9 +34,9 @@ TEST_F(MndTestShow, 01_ShowMsg_InvalidMsgMax) {
|
||||||
tSerializeSShowReq(pReq, contLen, &showReq);
|
tSerializeSShowReq(pReq, contLen, &showReq);
|
||||||
tFreeSShowReq(&showReq);
|
tFreeSShowReq(&showReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_SHOW, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_SYSTABLE_RETRIEVE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_MND_INVALID_MSG_TYPE);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_INVALID_MSG);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestShow, 02_ShowMsg_InvalidMsgStart) {
|
TEST_F(MndTestShow, 02_ShowMsg_InvalidMsgStart) {
|
||||||
|
@ -48,9 +48,9 @@ TEST_F(MndTestShow, 02_ShowMsg_InvalidMsgStart) {
|
||||||
tSerializeSShowReq(pReq, contLen, &showReq);
|
tSerializeSShowReq(pReq, contLen, &showReq);
|
||||||
tFreeSShowReq(&showReq);
|
tFreeSShowReq(&showReq);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_SHOW, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_SYSTABLE_RETRIEVE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_MND_INVALID_MSG_TYPE);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_INVALID_MSG);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestShow, 03_ShowMsg_Conn) {
|
TEST_F(MndTestShow, 03_ShowMsg_Conn) {
|
||||||
|
@ -67,42 +67,11 @@ TEST_F(MndTestShow, 03_ShowMsg_Conn) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_CONNS, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_CONNS, "connections", "");
|
||||||
|
// EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
STableMetaRsp* pMeta = test.GetShowMeta();
|
|
||||||
EXPECT_STREQ(pMeta->tbName, "show connections");
|
|
||||||
EXPECT_EQ(pMeta->numOfTags, 0);
|
|
||||||
EXPECT_EQ(pMeta->numOfColumns, 7);
|
|
||||||
EXPECT_EQ(pMeta->precision, 0);
|
|
||||||
EXPECT_EQ(pMeta->tableType, 0);
|
|
||||||
EXPECT_EQ(pMeta->update, 0);
|
|
||||||
EXPECT_EQ(pMeta->sversion, 0);
|
|
||||||
EXPECT_EQ(pMeta->tversion, 0);
|
|
||||||
EXPECT_EQ(pMeta->tuid, 0);
|
|
||||||
EXPECT_EQ(pMeta->suid, 0);
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
|
|
||||||
SRetrieveTableRsp* pRetrieveRsp = test.GetRetrieveRsp();
|
|
||||||
EXPECT_EQ(pRetrieveRsp->numOfRows, 1);
|
|
||||||
EXPECT_EQ(pRetrieveRsp->useconds, 0);
|
|
||||||
EXPECT_EQ(pRetrieveRsp->completed, 1);
|
|
||||||
EXPECT_EQ(pRetrieveRsp->precision, TSDB_TIME_PRECISION_MILLI);
|
|
||||||
EXPECT_EQ(pRetrieveRsp->compressed, 0);
|
|
||||||
EXPECT_EQ(pRetrieveRsp->compLen, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestShow, 04_ShowMsg_Cluster) {
|
TEST_F(MndTestShow, 04_ShowMsg_Cluster) {
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_CLUSTER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_CLUSTER, "cluster", "");
|
||||||
CHECK_META( "show cluster", 3);
|
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_BIGINT, 8, "id");
|
|
||||||
CHECK_SCHEMA(1, TSDB_DATA_TYPE_BINARY, TSDB_CLUSTER_ID_LEN + VARSTR_HEADER_SIZE, "name");
|
|
||||||
CHECK_SCHEMA(2, TSDB_DATA_TYPE_TIMESTAMP, 8, "create_time");
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
IgnoreInt64();
|
|
||||||
IgnoreBinary(TSDB_CLUSTER_ID_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
}
|
}
|
|
@ -1,11 +1,11 @@
|
||||||
aux_source_directory(. SMA_SRC)
|
aux_source_directory(. MNODE_SMA_TEST_SRC)
|
||||||
add_executable(mnode_test_sma ${SMA_SRC})
|
add_executable(smaTest ${MNODE_SMA_TEST_SRC})
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
mnode_test_sma
|
smaTest
|
||||||
PUBLIC sut
|
PUBLIC sut
|
||||||
)
|
)
|
||||||
|
|
||||||
add_test(
|
add_test(
|
||||||
NAME mnode_test_sma
|
NAME smaTest
|
||||||
COMMAND mnode_test_sma
|
COMMAND smaTest
|
||||||
)
|
)
|
||||||
|
|
|
@ -207,7 +207,7 @@ TEST_F(MndTestSma, 01_Create_Show_Meta_Drop_Restart_Stb) {
|
||||||
pReq = BuildCreateStbReq(stbname, &contLen);
|
pReq = BuildCreateStbReq(stbname, &contLen);
|
||||||
pRsp = test.SendReq(TDMT_MND_CREATE_STB, pReq, contLen);
|
pRsp = test.SendReq(TDMT_MND_CREATE_STB, pReq, contLen);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_STB, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_STB, "user_stables",dbname);
|
||||||
test.SendShowRetrieveReq();
|
test.SendShowRetrieveReq();
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
}
|
}
|
||||||
|
@ -216,7 +216,7 @@ TEST_F(MndTestSma, 01_Create_Show_Meta_Drop_Restart_Stb) {
|
||||||
pReq = BuildCreateTSmaReq(smaname, stbname, 0, "expr", "tagsFilter", "sql", "ast", &contLen);
|
pReq = BuildCreateTSmaReq(smaname, stbname, 0, "expr", "tagsFilter", "sql", "ast", &contLen);
|
||||||
pRsp = test.SendReq(TDMT_MND_CREATE_SMA, pReq, contLen);
|
pRsp = test.SendReq(TDMT_MND_CREATE_SMA, pReq, contLen);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_INDEX, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_INDEX, dbname);
|
||||||
test.SendShowRetrieveReq();
|
test.SendShowRetrieveReq();
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
}
|
}
|
||||||
|
@ -225,7 +225,7 @@ TEST_F(MndTestSma, 01_Create_Show_Meta_Drop_Restart_Stb) {
|
||||||
test.Restart();
|
test.Restart();
|
||||||
|
|
||||||
{
|
{
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_INDEX, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_INDEX, dbname);
|
||||||
CHECK_META("show indexes", 3);
|
CHECK_META("show indexes", 3);
|
||||||
test.SendShowRetrieveReq();
|
test.SendShowRetrieveReq();
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
@ -239,7 +239,7 @@ TEST_F(MndTestSma, 01_Create_Show_Meta_Drop_Restart_Stb) {
|
||||||
pReq = BuildDropTSmaReq(smaname, 0, &contLen);
|
pReq = BuildDropTSmaReq(smaname, 0, &contLen);
|
||||||
pRsp = test.SendReq(TDMT_MND_DROP_SMA, pReq, contLen);
|
pRsp = test.SendReq(TDMT_MND_DROP_SMA, pReq, contLen);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_INDEX, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_INDEX, dbname);
|
||||||
test.SendShowRetrieveReq();
|
test.SendShowRetrieveReq();
|
||||||
EXPECT_EQ(test.GetShowRows(), 0);
|
EXPECT_EQ(test.GetShowRows(), 0);
|
||||||
}
|
}
|
||||||
|
@ -263,10 +263,8 @@ TEST_F(MndTestSma, 02_Create_Show_Meta_Drop_Restart_BSma) {
|
||||||
pReq = BuildCreateBSmaStbReq(stbname, &contLen);
|
pReq = BuildCreateBSmaStbReq(stbname, &contLen);
|
||||||
pRsp = test.SendReq(TDMT_MND_CREATE_STB, pReq, contLen);
|
pRsp = test.SendReq(TDMT_MND_CREATE_STB, pReq, contLen);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_STB, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_STB, "user_stables",dbname);
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
// CheckBinary("bsmastb", TSDB_TABLE_NAME_LEN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test.Restart();
|
test.Restart();
|
||||||
|
@ -281,8 +279,7 @@ TEST_F(MndTestSma, 02_Create_Show_Meta_Drop_Restart_BSma) {
|
||||||
pReq = BuildDropStbReq(stbname, &contLen);
|
pReq = BuildDropStbReq(stbname, &contLen);
|
||||||
pRsp = test.SendReq(TDMT_MND_DROP_STB, pReq, contLen);
|
pRsp = test.SendReq(TDMT_MND_DROP_STB, pReq, contLen);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_STB, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_STB, "user_stables",dbname);
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 0);
|
EXPECT_EQ(test.GetShowRows(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
aux_source_directory(. STEST_SRC)
|
aux_source_directory(. MNODE_SNODE_TEST_SRC)
|
||||||
add_executable(mnode_test_snode ${STEST_SRC})
|
add_executable(msnodeTest ${MNODE_SNODE_TEST_SRC})
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
mnode_test_snode
|
msnodeTest
|
||||||
PUBLIC sut
|
PUBLIC sut
|
||||||
)
|
)
|
||||||
|
|
||||||
add_test(
|
add_test(
|
||||||
NAME mnode_test_snode
|
NAME msnodeTest
|
||||||
COMMAND mnode_test_snode
|
COMMAND msnodeTest
|
||||||
)
|
)
|
||||||
|
|
|
@ -39,14 +39,7 @@ Testbase MndTestSnode::test;
|
||||||
TestServer MndTestSnode::server2;
|
TestServer MndTestSnode::server2;
|
||||||
|
|
||||||
TEST_F(MndTestSnode, 01_Show_Snode) {
|
TEST_F(MndTestSnode, 01_Show_Snode) {
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_SNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_SNODE, "snodes", "");
|
||||||
CHECK_META("show snodes", 3);
|
|
||||||
|
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_SMALLINT, 2, "id");
|
|
||||||
CHECK_SCHEMA(1, TSDB_DATA_TYPE_BINARY, TSDB_EP_LEN + VARSTR_HEADER_SIZE, "endpoint");
|
|
||||||
CHECK_SCHEMA(2, TSDB_DATA_TYPE_TIMESTAMP, 8, "create_time");
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 0);
|
EXPECT_EQ(test.GetShowRows(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,14 +69,8 @@ TEST_F(MndTestSnode, 02_Create_Snode) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_SNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_SNODE, "snodes", "");
|
||||||
CHECK_META("show snodes", 3);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckBinary("localhost:9016", TSDB_EP_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -115,8 +102,7 @@ TEST_F(MndTestSnode, 03_Drop_Snode) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
taosMsleep(1300);
|
taosMsleep(1300);
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DNODE, "dnodes", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,16 +118,8 @@ TEST_F(MndTestSnode, 03_Drop_Snode) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_SNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_SNODE, "snodes", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckInt16(2);
|
|
||||||
CheckBinary("localhost:9016", TSDB_EP_LEN);
|
|
||||||
CheckBinary("localhost:9017", TSDB_EP_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -156,13 +134,8 @@ TEST_F(MndTestSnode, 03_Drop_Snode) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_SNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_SNODE, "snodes", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
CheckInt16(1);
|
|
||||||
CheckBinary("localhost:9016", TSDB_EP_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,7 +5,7 @@ target_link_libraries(
|
||||||
PUBLIC sut
|
PUBLIC sut
|
||||||
)
|
)
|
||||||
|
|
||||||
#add_test(
|
add_test(
|
||||||
# NAME mnode_test_stb
|
NAME stbTest
|
||||||
# COMMAND mnode_test_stb
|
COMMAND stbTest
|
||||||
#)
|
)
|
||||||
|
|
|
@ -43,7 +43,7 @@ void* MndTestStb::BuildCreateDbReq(const char* dbname, int32_t* pContLen) {
|
||||||
createReq.numOfVgroups = 2;
|
createReq.numOfVgroups = 2;
|
||||||
createReq.cacheBlockSize = 16;
|
createReq.cacheBlockSize = 16;
|
||||||
createReq.totalBlocks = 10;
|
createReq.totalBlocks = 10;
|
||||||
createReq.daysPerFile = 10;
|
createReq.daysPerFile = 1000;
|
||||||
createReq.daysToKeep0 = 3650;
|
createReq.daysToKeep0 = 3650;
|
||||||
createReq.daysToKeep1 = 3650;
|
createReq.daysToKeep1 = 3650;
|
||||||
createReq.daysToKeep2 = 3650;
|
createReq.daysToKeep2 = 3650;
|
||||||
|
@ -314,19 +314,8 @@ TEST_F(MndTestStb, 01_Create_Show_Meta_Drop_Restart_Stb) {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_STB, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_STB, "user_stables", dbname);
|
||||||
CHECK_META("show stables", 4);
|
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_BINARY, TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE, "name");
|
|
||||||
CHECK_SCHEMA(1, TSDB_DATA_TYPE_TIMESTAMP, 8, "create_time");
|
|
||||||
CHECK_SCHEMA(2, TSDB_DATA_TYPE_INT, 4, "columns");
|
|
||||||
CHECK_SCHEMA(3, TSDB_DATA_TYPE_INT, 4, "tags");
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
CheckBinary("stb", TSDB_TABLE_NAME_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckInt32(2);
|
|
||||||
CheckInt32(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----- meta ------
|
// ----- meta ------
|
||||||
|
@ -407,15 +396,8 @@ TEST_F(MndTestStb, 01_Create_Show_Meta_Drop_Restart_Stb) {
|
||||||
test.Restart();
|
test.Restart();
|
||||||
|
|
||||||
{
|
{
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_STB, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_STB, "user_stables", dbname);
|
||||||
CHECK_META("show stables", 4);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
CheckBinary("stb", TSDB_TABLE_NAME_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckInt32(2);
|
|
||||||
CheckInt32(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -432,9 +414,7 @@ TEST_F(MndTestStb, 01_Create_Show_Meta_Drop_Restart_Stb) {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_STB, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_STB, "user_stables", dbname);
|
||||||
CHECK_META("show stables", 4);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 0);
|
EXPECT_EQ(test.GetShowRows(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -496,13 +476,7 @@ TEST_F(MndTestStb, 02_Alter_Stb_AddTag) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_STB, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_STB, "user_stables", dbname);
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
|
||||||
CheckBinary("stb", TSDB_TABLE_NAME_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckInt32(2);
|
|
||||||
CheckInt32(4);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -542,13 +516,8 @@ TEST_F(MndTestStb, 03_Alter_Stb_DropTag) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_STB, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_STB, "user_stables", dbname);
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
CheckBinary("stb", TSDB_TABLE_NAME_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckInt32(2);
|
|
||||||
CheckInt32(2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -611,13 +580,8 @@ TEST_F(MndTestStb, 04_Alter_Stb_AlterTagName) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_STB, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_STB, "user_stables", dbname);
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
CheckBinary("stb", TSDB_TABLE_NAME_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckInt32(2);
|
|
||||||
CheckInt32(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -668,13 +632,8 @@ TEST_F(MndTestStb, 05_Alter_Stb_AlterTagBytes) {
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_ALTER_STB, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_ALTER_STB, pReq, contLen);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_STB, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_STB, "user_stables", dbname);
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
CheckBinary("stb", TSDB_TABLE_NAME_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckInt32(2);
|
|
||||||
CheckInt32(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -734,13 +693,8 @@ TEST_F(MndTestStb, 06_Alter_Stb_AddColumn) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_STB, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_STB, "user_stables", dbname);
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
CheckBinary("stb", TSDB_TABLE_NAME_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckInt32(3);
|
|
||||||
CheckInt32(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -799,13 +753,8 @@ TEST_F(MndTestStb, 07_Alter_Stb_DropColumn) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_STB, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_STB, "user_stables", dbname);
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
CheckBinary("stb", TSDB_TABLE_NAME_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckInt32(2);
|
|
||||||
CheckInt32(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -862,13 +811,8 @@ TEST_F(MndTestStb, 08_Alter_Stb_AlterTagBytes) {
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_ALTER_STB, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_ALTER_STB, pReq, contLen);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_STB, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_STB, "user_stables", dbname);
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
CheckBinary("stb", TSDB_TABLE_NAME_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckInt32(2);
|
|
||||||
CheckInt32(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
aux_source_directory(. TOPIC_SRC)
|
aux_source_directory(. MNODE_TOPIC_TEST_SRC)
|
||||||
add_executable(mnode_test_topic ${TOPIC_SRC})
|
add_executable(topicTest ${MNODE_TOPIC_TEST_SRC})
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
mnode_test_topic
|
topicTest
|
||||||
PUBLIC sut
|
PUBLIC sut
|
||||||
)
|
)
|
||||||
|
|
||||||
add_test(
|
add_test(
|
||||||
NAME mnode_test_topic
|
NAME topicTest
|
||||||
COMMAND mnode_test_topic
|
COMMAND topicTest
|
||||||
)
|
)
|
||||||
|
|
|
@ -101,7 +101,7 @@ TEST_F(MndTestTopic, 01_Create_Topic) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
{ test.SendShowMetaReq(TSDB_MGMT_TABLE_TOPICS, ""); }
|
{ test.SendShowReq(TSDB_MGMT_TABLE_TOPICS, ""); }
|
||||||
|
|
||||||
{
|
{
|
||||||
int32_t contLen = 0;
|
int32_t contLen = 0;
|
||||||
|
@ -128,7 +128,7 @@ TEST_F(MndTestTopic, 01_Create_Topic) {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_TOPICS, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_TOPICS, dbname);
|
||||||
CHECK_META("show topics", 3);
|
CHECK_META("show topics", 3);
|
||||||
|
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_BINARY, TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE, "name");
|
CHECK_SCHEMA(0, TSDB_DATA_TYPE_BINARY, TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE, "name");
|
||||||
|
@ -145,7 +145,7 @@ TEST_F(MndTestTopic, 01_Create_Topic) {
|
||||||
// restart
|
// restart
|
||||||
test.Restart();
|
test.Restart();
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_TOPICS, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_TOPICS, dbname);
|
||||||
test.SendShowRetrieveReq();
|
test.SendShowRetrieveReq();
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ TEST_F(MndTestTopic, 01_Create_Topic) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_MND_TOPIC_NOT_EXIST);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_MND_TOPIC_NOT_EXIST);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_TOPICS, dbname);
|
test.SendShowReq(TSDB_MGMT_TABLE_TOPICS, dbname);
|
||||||
test.SendShowRetrieveReq();
|
test.SendShowRetrieveReq();
|
||||||
EXPECT_EQ(test.GetShowRows(), 0);
|
EXPECT_EQ(test.GetShowRows(), 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
aux_source_directory(. TRANS_SRC)
|
aux_source_directory(. MNODE_TRANS_TEST_SRC)
|
||||||
add_executable(mnode_test_trans ${TRANS_SRC})
|
add_executable(transTest ${MNODE_TRANS_TEST_SRC})
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
mnode_test_trans
|
transTest
|
||||||
PUBLIC sut
|
PUBLIC sut
|
||||||
)
|
)
|
||||||
|
|
||||||
add_test(
|
add_test(
|
||||||
NAME mnode_test_trans
|
NAME transTest
|
||||||
COMMAND mnode_test_trans
|
COMMAND transTest
|
||||||
)
|
)
|
||||||
|
|
|
@ -65,18 +65,7 @@ TestServer MndTestTrans::server2;
|
||||||
|
|
||||||
TEST_F(MndTestTrans, 00_Create_User_Crash) {
|
TEST_F(MndTestTrans, 00_Create_User_Crash) {
|
||||||
{
|
{
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_TRANS, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_TRANS, "trans", "");
|
||||||
CHECK_META("show trans", 7);
|
|
||||||
|
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_INT, 4, "id");
|
|
||||||
CHECK_SCHEMA(1, TSDB_DATA_TYPE_TIMESTAMP, 8, "create_time");
|
|
||||||
CHECK_SCHEMA(2, TSDB_DATA_TYPE_BINARY, TSDB_TRANS_STAGE_LEN + VARSTR_HEADER_SIZE, "stage");
|
|
||||||
CHECK_SCHEMA(3, TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN - 1 + VARSTR_HEADER_SIZE, "db");
|
|
||||||
CHECK_SCHEMA(4, TSDB_DATA_TYPE_BINARY, TSDB_TRANS_TYPE_LEN + VARSTR_HEADER_SIZE, "type");
|
|
||||||
CHECK_SCHEMA(5, TSDB_DATA_TYPE_TIMESTAMP, 8, "last_exec_time");
|
|
||||||
CHECK_SCHEMA(6, TSDB_DATA_TYPE_BINARY, TSDB_TRANS_ERROR_LEN - 1 + VARSTR_HEADER_SIZE, "last_error");
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 0);
|
EXPECT_EQ(test.GetShowRows(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,26 +98,13 @@ TEST_F(MndTestTrans, 01_Create_User_Crash) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
CHECK_META("show users", 4);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
|
|
||||||
KillThenRestartServer();
|
KillThenRestartServer();
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
CHECK_META("show users", 4);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
|
|
||||||
CheckBinary("u1", TSDB_USER_LEN);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("normal", 10);
|
|
||||||
CheckBinary("super", 10);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestTrans, 02_Create_Qnode1_Crash) {
|
TEST_F(MndTestTrans, 02_Create_Qnode1_Crash) {
|
||||||
|
@ -144,9 +120,7 @@ TEST_F(MndTestTrans, 02_Create_Qnode1_Crash) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_QNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_QNODE, "qnodes", "");
|
||||||
CHECK_META("show qnodes", 3);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,9 +137,7 @@ TEST_F(MndTestTrans, 02_Create_Qnode1_Crash) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_MND_QNODE_ALREADY_EXIST);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_MND_QNODE_ALREADY_EXIST);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_QNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_QNODE, "qnodes", "");
|
||||||
CHECK_META("show qnodes", 3);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -185,8 +157,7 @@ TEST_F(MndTestTrans, 03_Create_Qnode2_Crash) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
taosMsleep(1300);
|
taosMsleep(1300);
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_DNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_DNODE, "dnodes", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,18 +179,8 @@ TEST_F(MndTestTrans, 03_Create_Qnode2_Crash) {
|
||||||
|
|
||||||
{
|
{
|
||||||
// show trans
|
// show trans
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_TRANS, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_TRANS, "trans", "");
|
||||||
CHECK_META("show trans", 7);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
CheckInt32(4);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("undoAction", TSDB_TRANS_STAGE_LEN);
|
|
||||||
CheckBinary("", TSDB_DB_NAME_LEN - 1);
|
|
||||||
CheckBinary("create-qnode", TSDB_TRANS_TYPE_LEN);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("Unable to establish connection", TSDB_TRANS_ERROR_LEN - 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// kill trans
|
// kill trans
|
||||||
|
@ -238,8 +199,7 @@ TEST_F(MndTestTrans, 03_Create_Qnode2_Crash) {
|
||||||
|
|
||||||
// show trans
|
// show trans
|
||||||
{
|
{
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_TRANS, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_TRANS, "trans", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 0);
|
EXPECT_EQ(test.GetShowRows(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,11 +218,9 @@ TEST_F(MndTestTrans, 03_Create_Qnode2_Crash) {
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_RPC_NETWORK_UNAVAIL);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_RPC_NETWORK_UNAVAIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
uInfo("======== kill and restart server")
|
uInfo("======== kill and restart server") KillThenRestartServer();
|
||||||
KillThenRestartServer();
|
|
||||||
|
|
||||||
uInfo("======== server2 start")
|
uInfo("======== server2 start") server2.DoStart();
|
||||||
server2.DoStart();
|
|
||||||
|
|
||||||
uInfo("======== server2 started")
|
uInfo("======== server2 started")
|
||||||
|
|
||||||
|
@ -286,14 +244,11 @@ TEST_F(MndTestTrans, 03_Create_Qnode2_Crash) {
|
||||||
|
|
||||||
ASSERT_NE(retry, retryMax);
|
ASSERT_NE(retry, retryMax);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_QNODE, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_QNODE, "qnodes", "");
|
||||||
CHECK_META("show qnodes", 3);
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// create db
|
// create db
|
||||||
// partial create stb
|
// partial create stb
|
||||||
// drop db failed
|
// drop db failed
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
aux_source_directory(. USER_SRC)
|
aux_source_directory(. MNODE_USER_TEST_SRC)
|
||||||
add_executable(mnode_test_user ${USER_SRC})
|
add_executable(userTest ${MNODE_USER_TEST_SRC})
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
mnode_test_user
|
userTest
|
||||||
PUBLIC sut
|
PUBLIC sut
|
||||||
)
|
)
|
||||||
|
|
||||||
add_test(
|
add_test(
|
||||||
NAME mnode_test_user
|
NAME userTest
|
||||||
COMMAND mnode_test_user
|
COMMAND userTest
|
||||||
)
|
)
|
||||||
|
|
|
@ -26,21 +26,8 @@ class MndTestUser : public ::testing::Test {
|
||||||
Testbase MndTestUser::test;
|
Testbase MndTestUser::test;
|
||||||
|
|
||||||
TEST_F(MndTestUser, 01_Show_User) {
|
TEST_F(MndTestUser, 01_Show_User) {
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
CHECK_META("show users", 4);
|
|
||||||
|
|
||||||
CHECK_SCHEMA(0, TSDB_DATA_TYPE_BINARY, TSDB_USER_LEN + VARSTR_HEADER_SIZE, "name");
|
|
||||||
CHECK_SCHEMA(1, TSDB_DATA_TYPE_BINARY, 10 + VARSTR_HEADER_SIZE, "privilege");
|
|
||||||
CHECK_SCHEMA(2, TSDB_DATA_TYPE_TIMESTAMP, 8, "create_time");
|
|
||||||
CHECK_SCHEMA(3, TSDB_DATA_TYPE_BINARY, TSDB_USER_LEN + VARSTR_HEADER_SIZE, "account");
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("super", 10);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(MndTestUser, 02_Create_User) {
|
TEST_F(MndTestUser, 02_Create_User) {
|
||||||
|
@ -99,18 +86,8 @@ TEST_F(MndTestUser, 02_Create_User) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
|
|
||||||
CheckBinary("u1", TSDB_USER_LEN);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("normal", 10);
|
|
||||||
CheckBinary("super", 10);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -125,8 +102,7 @@ TEST_F(MndTestUser, 02_Create_User) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,18 +120,8 @@ TEST_F(MndTestUser, 02_Create_User) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("u2", TSDB_USER_LEN);
|
|
||||||
CheckBinary("super", 10);
|
|
||||||
CheckBinary("super", 10);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -170,8 +136,7 @@ TEST_F(MndTestUser, 02_Create_User) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -191,8 +156,7 @@ TEST_F(MndTestUser, 03_Alter_User) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -437,8 +401,7 @@ TEST_F(MndTestUser, 03_Alter_User) {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -497,10 +460,7 @@ TEST_F(MndTestUser, 05_Drop_User) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
CHECK_META("show users", 4);
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 1);
|
EXPECT_EQ(test.GetShowRows(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -533,25 +493,9 @@ TEST_F(MndTestUser, 06_Create_Drop_Alter_User) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
CHECK_META("show users", 4);
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 3);
|
EXPECT_EQ(test.GetShowRows(), 3);
|
||||||
|
|
||||||
CheckBinary("u1", TSDB_USER_LEN);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("u2", TSDB_USER_LEN);
|
|
||||||
CheckBinary("normal", 10);
|
|
||||||
CheckBinary("super", 10);
|
|
||||||
CheckBinary("normal", 10);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
SAlterUserReq alterReq = {0};
|
SAlterUserReq alterReq = {0};
|
||||||
alterReq.alterType = TSDB_ALTER_USER_PASSWD;
|
alterReq.alterType = TSDB_ALTER_USER_PASSWD;
|
||||||
|
@ -567,25 +511,8 @@ TEST_F(MndTestUser, 06_Create_Drop_Alter_User) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
CHECK_META("show users", 4);
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 3);
|
EXPECT_EQ(test.GetShowRows(), 3);
|
||||||
|
|
||||||
CheckBinary("u1", TSDB_USER_LEN);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("u2", TSDB_USER_LEN);
|
|
||||||
CheckBinary("normal", 10);
|
|
||||||
CheckBinary("super", 10);
|
|
||||||
CheckBinary("normal", 10);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
SDropUserReq dropReq = {0};
|
SDropUserReq dropReq = {0};
|
||||||
strcpy(dropReq.user, "u1");
|
strcpy(dropReq.user, "u1");
|
||||||
|
@ -599,37 +526,13 @@ TEST_F(MndTestUser, 06_Create_Drop_Alter_User) {
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
CHECK_META("show users", 4);
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("u2", TSDB_USER_LEN);
|
|
||||||
CheckBinary("super", 10);
|
|
||||||
CheckBinary("normal", 10);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
|
|
||||||
// restart
|
// restart
|
||||||
test.Restart();
|
test.Restart();
|
||||||
|
|
||||||
taosMsleep(1000);
|
taosMsleep(1000);
|
||||||
test.SendShowMetaReq(TSDB_MGMT_TABLE_USER, "");
|
test.SendShowReq(TSDB_MGMT_TABLE_USER, "user_users", "");
|
||||||
CHECK_META("show users", 4);
|
|
||||||
|
|
||||||
test.SendShowRetrieveReq();
|
|
||||||
EXPECT_EQ(test.GetShowRows(), 2);
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("u2", TSDB_USER_LEN);
|
|
||||||
CheckBinary("super", 10);
|
|
||||||
CheckBinary("normal", 10);
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckTimestamp();
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
CheckBinary("root", TSDB_USER_LEN);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,13 +4,13 @@ target_sources(
|
||||||
vnode
|
vnode
|
||||||
PRIVATE
|
PRIVATE
|
||||||
# vnode
|
# vnode
|
||||||
|
"src/vnd/vnodeOpen.c"
|
||||||
"src/vnd/vnodeArenaMAImpl.c"
|
"src/vnd/vnodeArenaMAImpl.c"
|
||||||
"src/vnd/vnodeBufferPool.c"
|
"src/vnd/vnodeBufferPool.c"
|
||||||
# "src/vnd/vnodeBufferPool2.c"
|
# "src/vnd/vnodeBufferPool2.c"
|
||||||
"src/vnd/vnodeCfg.c"
|
"src/vnd/vnodeCfg.c"
|
||||||
"src/vnd/vnodeCommit.c"
|
"src/vnd/vnodeCommit.c"
|
||||||
"src/vnd/vnodeInt.c"
|
"src/vnd/vnodeInt.c"
|
||||||
"src/vnd/vnodeMain.c"
|
|
||||||
"src/vnd/vnodeQuery.c"
|
"src/vnd/vnodeQuery.c"
|
||||||
"src/vnd/vnodeStateMgr.c"
|
"src/vnd/vnodeStateMgr.c"
|
||||||
"src/vnd/vnodeWrite.c"
|
"src/vnd/vnodeWrite.c"
|
||||||
|
|
|
@ -42,11 +42,12 @@ typedef struct STsdbCfg STsdbCfg; // todo: remove
|
||||||
typedef struct STqCfg STqCfg; // todo: remove
|
typedef struct STqCfg STqCfg; // todo: remove
|
||||||
typedef struct SVnodeCfg SVnodeCfg;
|
typedef struct SVnodeCfg SVnodeCfg;
|
||||||
|
|
||||||
int vnodeInit();
|
int vnodeInit(int nthreads);
|
||||||
void vnodeCleanup();
|
void vnodeCleanup();
|
||||||
|
int vnodeCreate(const char *path, SVnodeCfg *pCfg, STfs *pTfs);
|
||||||
|
void vnodeDestroy(const char *path);
|
||||||
SVnode *vnodeOpen(const char *path, const SVnodeCfg *pVnodeCfg);
|
SVnode *vnodeOpen(const char *path, const SVnodeCfg *pVnodeCfg);
|
||||||
void vnodeClose(SVnode *pVnode);
|
void vnodeClose(SVnode *pVnode);
|
||||||
void vnodeDestroy(const char *path);
|
|
||||||
void vnodePreprocessWriteReqs(SVnode *pVnode, SArray *pMsgs);
|
void vnodePreprocessWriteReqs(SVnode *pVnode, SArray *pMsgs);
|
||||||
int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp);
|
int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp);
|
||||||
int vnodeProcessCMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp);
|
int vnodeProcessCMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp);
|
||||||
|
@ -122,12 +123,12 @@ struct STsdbCfg {
|
||||||
int8_t precision;
|
int8_t precision;
|
||||||
int8_t update;
|
int8_t update;
|
||||||
int8_t compression;
|
int8_t compression;
|
||||||
int32_t daysPerFile;
|
int32_t days;
|
||||||
int32_t minRowsPerFileBlock;
|
int32_t minRows;
|
||||||
int32_t maxRowsPerFileBlock;
|
int32_t maxRows;
|
||||||
int32_t keep;
|
|
||||||
int32_t keep1;
|
|
||||||
int32_t keep2;
|
int32_t keep2;
|
||||||
|
int32_t keep0;
|
||||||
|
int32_t keep1;
|
||||||
uint64_t lruCacheSize;
|
uint64_t lruCacheSize;
|
||||||
SArray *retentions;
|
SArray *retentions;
|
||||||
};
|
};
|
||||||
|
|
|
@ -30,6 +30,8 @@ extern "C" {
|
||||||
#define vTrace(...) do { if (vDebugFlag & DEBUG_TRACE) { taosPrintLog("VND ", DEBUG_TRACE, vDebugFlag, __VA_ARGS__); }} while(0)
|
#define vTrace(...) do { if (vDebugFlag & DEBUG_TRACE) { taosPrintLog("VND ", DEBUG_TRACE, vDebugFlag, __VA_ARGS__); }} while(0)
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
// vnodeCfg ====================
|
||||||
|
|
||||||
// vnodeModule ====================
|
// vnodeModule ====================
|
||||||
int vnodeScheduleTask(int (*execute)(void*), void* arg);
|
int vnodeScheduleTask(int (*execute)(void*), void* arg);
|
||||||
|
|
||||||
|
@ -38,6 +40,11 @@ int vnodeQueryOpen(SVnode* pVnode);
|
||||||
void vnodeQueryClose(SVnode* pVnode);
|
void vnodeQueryClose(SVnode* pVnode);
|
||||||
int vnodeGetTableMeta(SVnode* pVnode, SRpcMsg* pMsg);
|
int vnodeGetTableMeta(SVnode* pVnode, SRpcMsg* pMsg);
|
||||||
|
|
||||||
|
// vnodeCommit ====================
|
||||||
|
int vnodeSaveInfo(const char* dir, const SVnodeInfo* pCfg);
|
||||||
|
int vnodeCommitInfo(const char* dir, const SVnodeInfo* pInfo);
|
||||||
|
int vnodeLoadInfo(const char* dir, SVnodeInfo* pInfo);
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
// SVBufPool
|
// SVBufPool
|
||||||
int vnodeOpenBufPool(SVnode* pVnode);
|
int vnodeOpenBufPool(SVnode* pVnode);
|
||||||
|
@ -75,9 +82,9 @@ void vmaFree(SVMemAllocator* pVMA, void* ptr);
|
||||||
bool vmaIsFull(SVMemAllocator* pVMA);
|
bool vmaIsFull(SVMemAllocator* pVMA);
|
||||||
|
|
||||||
// vnodeCfg.h
|
// vnodeCfg.h
|
||||||
extern const SVnodeCfg defaultVnodeOptions;
|
extern const SVnodeCfg vnodeCfgDefault;
|
||||||
|
|
||||||
int vnodeValidateOptions(const SVnodeCfg*);
|
int vnodeCheckCfg(const SVnodeCfg*);
|
||||||
void vnodeOptionsCopy(SVnodeCfg* pDest, const SVnodeCfg* pSrc);
|
void vnodeOptionsCopy(SVnodeCfg* pDest, const SVnodeCfg* pSrc);
|
||||||
|
|
||||||
// For commit
|
// For commit
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "tdbInt.h"
|
#include "tdbInt.h"
|
||||||
#include "tfs.h"
|
#include "tfs.h"
|
||||||
#include "tglobal.h"
|
#include "tglobal.h"
|
||||||
|
#include "tjson.h"
|
||||||
#include "tlist.h"
|
#include "tlist.h"
|
||||||
#include "tlockfree.h"
|
#include "tlockfree.h"
|
||||||
#include "tlosertree.h"
|
#include "tlosertree.h"
|
||||||
|
@ -43,6 +44,7 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef struct SVnodeInfo SVnodeInfo;
|
||||||
typedef struct SMeta SMeta;
|
typedef struct SMeta SMeta;
|
||||||
typedef struct STsdb STsdb;
|
typedef struct STsdb STsdb;
|
||||||
typedef struct STQ STQ;
|
typedef struct STQ STQ;
|
||||||
|
@ -72,6 +74,11 @@ struct SVState {
|
||||||
int64_t applied;
|
int64_t applied;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SVnodeInfo {
|
||||||
|
SVnodeCfg config;
|
||||||
|
SVState state;
|
||||||
|
};
|
||||||
|
|
||||||
struct SVnode {
|
struct SVnode {
|
||||||
int32_t vgId;
|
int32_t vgId;
|
||||||
char* path;
|
char* path;
|
||||||
|
|
|
@ -55,7 +55,7 @@ typedef struct {
|
||||||
#define TSDB_COMMIT_BUF(ch) TSDB_READ_BUF(&((ch)->readh))
|
#define TSDB_COMMIT_BUF(ch) TSDB_READ_BUF(&((ch)->readh))
|
||||||
#define TSDB_COMMIT_COMP_BUF(ch) TSDB_READ_COMP_BUF(&((ch)->readh))
|
#define TSDB_COMMIT_COMP_BUF(ch) TSDB_READ_COMP_BUF(&((ch)->readh))
|
||||||
#define TSDB_COMMIT_EXBUF(ch) TSDB_READ_EXBUF(&((ch)->readh))
|
#define TSDB_COMMIT_EXBUF(ch) TSDB_READ_EXBUF(&((ch)->readh))
|
||||||
#define TSDB_COMMIT_DEFAULT_ROWS(ch) TSDB_DEFAULT_BLOCK_ROWS(TSDB_COMMIT_REPO(ch)->config.maxRowsPerFileBlock)
|
#define TSDB_COMMIT_DEFAULT_ROWS(ch) TSDB_DEFAULT_BLOCK_ROWS(TSDB_COMMIT_REPO(ch)->config.maxRows)
|
||||||
#define TSDB_COMMIT_TXN_VERSION(ch) FS_TXN_VERSION(REPO_FS(TSDB_COMMIT_REPO(ch)))
|
#define TSDB_COMMIT_TXN_VERSION(ch) FS_TXN_VERSION(REPO_FS(TSDB_COMMIT_REPO(ch)))
|
||||||
|
|
||||||
static void tsdbStartCommit(STsdb *pRepo);
|
static void tsdbStartCommit(STsdb *pRepo);
|
||||||
|
@ -217,14 +217,14 @@ void tsdbGetRtnSnap(STsdb *pRepo, SRtn *pRtn) {
|
||||||
TSKEY minKey, midKey, maxKey, now;
|
TSKEY minKey, midKey, maxKey, now;
|
||||||
|
|
||||||
now = taosGetTimestamp(pCfg->precision);
|
now = taosGetTimestamp(pCfg->precision);
|
||||||
minKey = now - pCfg->keep * tsTickPerDay[pCfg->precision];
|
minKey = now - pCfg->keep2 * tsTickPerDay[pCfg->precision];
|
||||||
midKey = now - pCfg->keep2 * tsTickPerDay[pCfg->precision];
|
midKey = now - pCfg->keep1 * tsTickPerDay[pCfg->precision];
|
||||||
maxKey = now - pCfg->keep1 * tsTickPerDay[pCfg->precision];
|
maxKey = now - pCfg->keep0 * tsTickPerDay[pCfg->precision];
|
||||||
|
|
||||||
pRtn->minKey = minKey;
|
pRtn->minKey = minKey;
|
||||||
pRtn->minFid = (int)(TSDB_KEY_FID(minKey, pCfg->daysPerFile, pCfg->precision));
|
pRtn->minFid = (int)(TSDB_KEY_FID(minKey, pCfg->days, pCfg->precision));
|
||||||
pRtn->midFid = (int)(TSDB_KEY_FID(midKey, pCfg->daysPerFile, pCfg->precision));
|
pRtn->midFid = (int)(TSDB_KEY_FID(midKey, pCfg->days, pCfg->precision));
|
||||||
pRtn->maxFid = (int)(TSDB_KEY_FID(maxKey, pCfg->daysPerFile, pCfg->precision));
|
pRtn->maxFid = (int)(TSDB_KEY_FID(maxKey, pCfg->days, pCfg->precision));
|
||||||
tsdbDebug("vgId:%d now:%" PRId64 " minKey:%" PRId64 " minFid:%d, midFid:%d, maxFid:%d", REPO_ID(pRepo), now, minKey,
|
tsdbDebug("vgId:%d now:%" PRId64 " minKey:%" PRId64 " minFid:%d, midFid:%d, maxFid:%d", REPO_ID(pRepo), now, minKey,
|
||||||
pRtn->minFid, pRtn->midFid, pRtn->maxFid);
|
pRtn->minFid, pRtn->midFid, pRtn->maxFid);
|
||||||
}
|
}
|
||||||
|
@ -286,7 +286,7 @@ static int tsdbInitCommitH(SCommitH *pCommith, STsdb *pRepo) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pCommith->pDataCols = tdNewDataCols(0, pCfg->maxRowsPerFileBlock);
|
pCommith->pDataCols = tdNewDataCols(0, pCfg->maxRows);
|
||||||
if (pCommith->pDataCols == NULL) {
|
if (pCommith->pDataCols == NULL) {
|
||||||
terrno = TSDB_CODE_TDB_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_TDB_OUT_OF_MEMORY;
|
||||||
tsdbDestroyCommitH(pCommith);
|
tsdbDestroyCommitH(pCommith);
|
||||||
|
@ -319,7 +319,7 @@ static int tsdbNextCommitFid(SCommitH *pCommith) {
|
||||||
if (nextKey == TSDB_DATA_TIMESTAMP_NULL) {
|
if (nextKey == TSDB_DATA_TIMESTAMP_NULL) {
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
int tfid = (int)(TSDB_KEY_FID(nextKey, pCfg->daysPerFile, pCfg->precision));
|
int tfid = (int)(TSDB_KEY_FID(nextKey, pCfg->days, pCfg->precision));
|
||||||
if (fid == TSDB_IVLD_FID || fid > tfid) {
|
if (fid == TSDB_IVLD_FID || fid > tfid) {
|
||||||
fid = tfid;
|
fid = tfid;
|
||||||
}
|
}
|
||||||
|
@ -346,7 +346,7 @@ static int tsdbCommitToFile(SCommitH *pCommith, SDFileSet *pSet, int fid) {
|
||||||
ASSERT(pSet == NULL || pSet->fid == fid);
|
ASSERT(pSet == NULL || pSet->fid == fid);
|
||||||
|
|
||||||
tsdbResetCommitFile(pCommith);
|
tsdbResetCommitFile(pCommith);
|
||||||
tsdbGetFidKeyRange(pCfg->daysPerFile, pCfg->precision, fid, &(pCommith->minKey), &(pCommith->maxKey));
|
tsdbGetFidKeyRange(pCfg->days, pCfg->precision, fid, &(pCommith->minKey), &(pCommith->maxKey));
|
||||||
|
|
||||||
// Set and open files
|
// Set and open files
|
||||||
if (tsdbSetAndOpenCommitFile(pCommith, pSet, fid) < 0) {
|
if (tsdbSetAndOpenCommitFile(pCommith, pSet, fid) < 0) {
|
||||||
|
@ -1210,8 +1210,8 @@ int tsdbWriteBlockImpl(STsdb *pRepo, STable *pTable, SDFile *pDFile, SDFile *pDF
|
||||||
int64_t offset = 0, offsetAggr = 0;
|
int64_t offset = 0, offsetAggr = 0;
|
||||||
int rowsToWrite = pDataCols->numOfRows;
|
int rowsToWrite = pDataCols->numOfRows;
|
||||||
|
|
||||||
ASSERT(rowsToWrite > 0 && rowsToWrite <= pCfg->maxRowsPerFileBlock);
|
ASSERT(rowsToWrite > 0 && rowsToWrite <= pCfg->maxRows);
|
||||||
ASSERT((!isLast) || rowsToWrite < pCfg->minRowsPerFileBlock);
|
ASSERT((!isLast) || rowsToWrite < pCfg->minRows);
|
||||||
|
|
||||||
// Make buffer space
|
// Make buffer space
|
||||||
if (tsdbMakeRoom(ppBuf, tsdbBlockStatisSize(pDataCols->numOfCols, SBlockVerLatest)) < 0) {
|
if (tsdbMakeRoom(ppBuf, tsdbBlockStatisSize(pDataCols->numOfCols, SBlockVerLatest)) < 0) {
|
||||||
|
@ -1460,7 +1460,7 @@ static int tsdbCommitMemData(SCommitH *pCommith, SCommitIter *pIter, TSKEY keyLi
|
||||||
|
|
||||||
if (pCommith->pDataCols->numOfRows <= 0) break;
|
if (pCommith->pDataCols->numOfRows <= 0) break;
|
||||||
|
|
||||||
if (toData || pCommith->pDataCols->numOfRows >= pCfg->minRowsPerFileBlock) {
|
if (toData || pCommith->pDataCols->numOfRows >= pCfg->minRows) {
|
||||||
pDFile = TSDB_COMMIT_DATA_FILE(pCommith);
|
pDFile = TSDB_COMMIT_DATA_FILE(pCommith);
|
||||||
isLast = false;
|
isLast = false;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1619,7 +1619,7 @@ static int tsdbMergeBlockData(SCommitH *pCommith, SCommitIter *pIter, SDataCols
|
||||||
if (pCommith->pDataCols->numOfRows == 0) break;
|
if (pCommith->pDataCols->numOfRows == 0) break;
|
||||||
|
|
||||||
if (isLastOneBlock) {
|
if (isLastOneBlock) {
|
||||||
if (pCommith->pDataCols->numOfRows < pCfg->minRowsPerFileBlock) {
|
if (pCommith->pDataCols->numOfRows < pCfg->minRows) {
|
||||||
pDFile = TSDB_COMMIT_LAST_FILE(pCommith);
|
pDFile = TSDB_COMMIT_LAST_FILE(pCommith);
|
||||||
isLast = true;
|
isLast = true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1667,7 +1667,8 @@ static void tsdbLoadAndMergeFromCache(SDataCols *pDataCols, int *iter, SCommitIt
|
||||||
if (tdGetColDataOfRow(&sVal, pDataCols->cols + i, *iter, pDataCols->bitmapMode) < 0) {
|
if (tdGetColDataOfRow(&sVal, pDataCols->cols + i, *iter, pDataCols->bitmapMode) < 0) {
|
||||||
TASSERT(0);
|
TASSERT(0);
|
||||||
}
|
}
|
||||||
tdAppendValToDataCol(pTarget->cols + i, sVal.valType, sVal.val, pTarget->numOfRows, pTarget->maxPoints, pTarget->bitmapMode);
|
tdAppendValToDataCol(pTarget->cols + i, sVal.valType, sVal.val, pTarget->numOfRows, pTarget->maxPoints,
|
||||||
|
pTarget->bitmapMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
++pTarget->numOfRows;
|
++pTarget->numOfRows;
|
||||||
|
@ -1774,11 +1775,11 @@ static bool tsdbCanAddSubBlock(SCommitH *pCommith, SBlock *pBlock, SMergeInfo *p
|
||||||
|
|
||||||
ASSERT(mergeRows > 0);
|
ASSERT(mergeRows > 0);
|
||||||
|
|
||||||
if (pBlock->numOfSubBlocks < TSDB_MAX_SUBBLOCKS && pInfo->nOperations <= pCfg->maxRowsPerFileBlock) {
|
if (pBlock->numOfSubBlocks < TSDB_MAX_SUBBLOCKS && pInfo->nOperations <= pCfg->maxRows) {
|
||||||
if (pBlock->last) {
|
if (pBlock->last) {
|
||||||
if (pCommith->isLFileSame && mergeRows < pCfg->minRowsPerFileBlock) return true;
|
if (pCommith->isLFileSame && mergeRows < pCfg->minRows) return true;
|
||||||
} else {
|
} else {
|
||||||
if (pCommith->isDFileSame && mergeRows <= pCfg->maxRowsPerFileBlock) return true;
|
if (pCommith->isDFileSame && mergeRows <= pCfg->maxRows) return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -190,8 +190,8 @@ static int tsdbAddDFileSetToStatus(SFSStatus *pStatus, const SDFileSet *pSet) {
|
||||||
|
|
||||||
// ================== STsdbFS
|
// ================== STsdbFS
|
||||||
STsdbFS *tsdbNewFS(const STsdbCfg *pCfg) {
|
STsdbFS *tsdbNewFS(const STsdbCfg *pCfg) {
|
||||||
int keep = pCfg->keep;
|
int keep = pCfg->keep2;
|
||||||
int days = pCfg->daysPerFile;
|
int days = pCfg->days;
|
||||||
int maxFSet = TSDB_MAX_FSETS(keep, days);
|
int maxFSet = TSDB_MAX_FSETS(keep, days);
|
||||||
STsdbFS *pfs;
|
STsdbFS *pfs;
|
||||||
|
|
||||||
|
|
|
@ -19,9 +19,9 @@ static int tsdbScanAndConvertSubmitMsg(STsdb *pTsdb, SSubmitReq *pMsg);
|
||||||
static int tsdbMemTableInsertTbData(STsdb *pRepo, SSubmitBlk *pBlock, int32_t *pAffectedRows);
|
static int tsdbMemTableInsertTbData(STsdb *pRepo, SSubmitBlk *pBlock, int32_t *pAffectedRows);
|
||||||
static STbData *tsdbNewTbData(tb_uid_t uid);
|
static STbData *tsdbNewTbData(tb_uid_t uid);
|
||||||
static void tsdbFreeTbData(STbData *pTbData);
|
static void tsdbFreeTbData(STbData *pTbData);
|
||||||
static char * tsdbGetTsTupleKey(const void *data);
|
static char *tsdbGetTsTupleKey(const void *data);
|
||||||
static int tsdbTbDataComp(const void *arg1, const void *arg2);
|
static int tsdbTbDataComp(const void *arg1, const void *arg2);
|
||||||
static char * tsdbTbDataGetUid(const void *arg);
|
static char *tsdbTbDataGetUid(const void *arg);
|
||||||
static int tsdbAppendTableRowToCols(STable *pTable, SDataCols *pCols, STSchema **ppSchema, STSRow *row);
|
static int tsdbAppendTableRowToCols(STable *pTable, SDataCols *pCols, STSchema **ppSchema, STSRow *row);
|
||||||
|
|
||||||
STsdbMemTable *tsdbNewMemTable(STsdb *pTsdb) {
|
STsdbMemTable *tsdbNewMemTable(STsdb *pTsdb) {
|
||||||
|
@ -74,7 +74,7 @@ void tsdbFreeMemTable(STsdb *pTsdb, STsdbMemTable *pMemTable) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int tsdbMemTableInsert(STsdb *pTsdb, STsdbMemTable *pMemTable, SSubmitReq *pMsg, SSubmitRsp *pRsp) {
|
int tsdbMemTableInsert(STsdb *pTsdb, STsdbMemTable *pMemTable, SSubmitReq *pMsg, SSubmitRsp *pRsp) {
|
||||||
SSubmitBlk * pBlock = NULL;
|
SSubmitBlk *pBlock = NULL;
|
||||||
SSubmitMsgIter msgIter = {0};
|
SSubmitMsgIter msgIter = {0};
|
||||||
int32_t affectedrows = 0, numOfRows = 0;
|
int32_t affectedrows = 0, numOfRows = 0;
|
||||||
|
|
||||||
|
@ -119,12 +119,12 @@ int tsdbLoadDataFromCache(STable *pTable, SSkipListIterator *pIter, TSKEY maxKey
|
||||||
TKEY *filterKeys, int nFilterKeys, bool keepDup, SMergeInfo *pMergeInfo) {
|
TKEY *filterKeys, int nFilterKeys, bool keepDup, SMergeInfo *pMergeInfo) {
|
||||||
ASSERT(maxRowsToRead > 0 && nFilterKeys >= 0);
|
ASSERT(maxRowsToRead > 0 && nFilterKeys >= 0);
|
||||||
if (pIter == NULL) return 0;
|
if (pIter == NULL) return 0;
|
||||||
STSchema * pSchema = NULL;
|
STSchema *pSchema = NULL;
|
||||||
TSKEY rowKey = 0;
|
TSKEY rowKey = 0;
|
||||||
TSKEY fKey = 0;
|
TSKEY fKey = 0;
|
||||||
bool isRowDel = false;
|
bool isRowDel = false;
|
||||||
int filterIter = 0;
|
int filterIter = 0;
|
||||||
STSRow * row = NULL;
|
STSRow *row = NULL;
|
||||||
SMergeInfo mInfo;
|
SMergeInfo mInfo;
|
||||||
|
|
||||||
if (pMergeInfo == NULL) pMergeInfo = &mInfo;
|
if (pMergeInfo == NULL) pMergeInfo = &mInfo;
|
||||||
|
@ -259,12 +259,12 @@ static int tsdbScanAndConvertSubmitMsg(STsdb *pTsdb, SSubmitReq *pMsg) {
|
||||||
ASSERT(pMsg != NULL);
|
ASSERT(pMsg != NULL);
|
||||||
// STsdbMeta * pMeta = pTsdb->tsdbMeta;
|
// STsdbMeta * pMeta = pTsdb->tsdbMeta;
|
||||||
SSubmitMsgIter msgIter = {0};
|
SSubmitMsgIter msgIter = {0};
|
||||||
SSubmitBlk * pBlock = NULL;
|
SSubmitBlk *pBlock = NULL;
|
||||||
SSubmitBlkIter blkIter = {0};
|
SSubmitBlkIter blkIter = {0};
|
||||||
STSRow * row = NULL;
|
STSRow *row = NULL;
|
||||||
TSKEY now = taosGetTimestamp(pTsdb->config.precision);
|
TSKEY now = taosGetTimestamp(pTsdb->config.precision);
|
||||||
TSKEY minKey = now - tsTickPerDay[pTsdb->config.precision] * pTsdb->config.keep;
|
TSKEY minKey = now - tsTickPerDay[pTsdb->config.precision] * pTsdb->config.keep2;
|
||||||
TSKEY maxKey = now + tsTickPerDay[pTsdb->config.precision] * pTsdb->config.daysPerFile;
|
TSKEY maxKey = now + tsTickPerDay[pTsdb->config.precision] * pTsdb->config.days;
|
||||||
|
|
||||||
terrno = TSDB_CODE_SUCCESS;
|
terrno = TSDB_CODE_SUCCESS;
|
||||||
pMsg->length = htonl(pMsg->length);
|
pMsg->length = htonl(pMsg->length);
|
||||||
|
@ -332,9 +332,9 @@ static int tsdbMemTableInsertTbData(STsdb *pTsdb, SSubmitBlk *pBlock, int32_t *p
|
||||||
// STable *pTable = NULL;
|
// STable *pTable = NULL;
|
||||||
SSubmitBlkIter blkIter = {0};
|
SSubmitBlkIter blkIter = {0};
|
||||||
STsdbMemTable *pMemTable = pTsdb->mem;
|
STsdbMemTable *pMemTable = pTsdb->mem;
|
||||||
void * tptr;
|
void *tptr;
|
||||||
STbData * pTbData;
|
STbData *pTbData;
|
||||||
STSRow * row;
|
STSRow *row;
|
||||||
TSKEY keyMin;
|
TSKEY keyMin;
|
||||||
TSKEY keyMax;
|
TSKEY keyMax;
|
||||||
|
|
||||||
|
|
|
@ -17,12 +17,12 @@
|
||||||
|
|
||||||
const STsdbCfg defautlTsdbOptions = {.precision = 0,
|
const STsdbCfg defautlTsdbOptions = {.precision = 0,
|
||||||
.lruCacheSize = 0,
|
.lruCacheSize = 0,
|
||||||
.daysPerFile = 10,
|
.days = 10,
|
||||||
.minRowsPerFileBlock = 100,
|
.minRows = 100,
|
||||||
.maxRowsPerFileBlock = 4096,
|
.maxRows = 4096,
|
||||||
.keep = 3650,
|
|
||||||
.keep1 = 3650,
|
|
||||||
.keep2 = 3650,
|
.keep2 = 3650,
|
||||||
|
.keep0 = 3650,
|
||||||
|
.keep1 = 3650,
|
||||||
.update = 0,
|
.update = 0,
|
||||||
.compression = TWO_STAGE_COMP};
|
.compression = TWO_STAGE_COMP};
|
||||||
|
|
||||||
|
|
|
@ -314,7 +314,7 @@ static int64_t getEarliestValidTimestamp(STsdb* pTsdb) {
|
||||||
STsdbCfg* pCfg = &pTsdb->config;
|
STsdbCfg* pCfg = &pTsdb->config;
|
||||||
|
|
||||||
int64_t now = taosGetTimestamp(pCfg->precision);
|
int64_t now = taosGetTimestamp(pCfg->precision);
|
||||||
return now - (tsTickPerDay[pCfg->precision] * pCfg->keep) + 1; // needs to add one tick
|
return now - (tsTickPerDay[pCfg->precision] * pCfg->keep2) + 1; // needs to add one tick
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setQueryTimewindow(STsdbReadHandle* pTsdbReadHandle, STsdbQueryCond* pCond) {
|
static void setQueryTimewindow(STsdbReadHandle* pTsdbReadHandle, STsdbQueryCond* pCond) {
|
||||||
|
@ -404,7 +404,7 @@ static STsdbReadHandle* tsdbQueryTablesImpl(STsdb* tsdb, STsdbQueryCond* pCond,
|
||||||
pReadHandle->defaultLoadColumn = getDefaultLoadColumns(pReadHandle, true);
|
pReadHandle->defaultLoadColumn = getDefaultLoadColumns(pReadHandle, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
pReadHandle->pDataCols = tdNewDataCols(1000, pReadHandle->pTsdb->config.maxRowsPerFileBlock);
|
pReadHandle->pDataCols = tdNewDataCols(1000, pReadHandle->pTsdb->config.maxRows);
|
||||||
if (pReadHandle->pDataCols == NULL) {
|
if (pReadHandle->pDataCols == NULL) {
|
||||||
tsdbError("%p failed to malloc buf for pDataCols, %s", pReadHandle, pReadHandle->idStr);
|
tsdbError("%p failed to malloc buf for pDataCols, %s", pReadHandle, pReadHandle->idStr);
|
||||||
terrno = TSDB_CODE_TDB_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_TDB_OUT_OF_MEMORY;
|
||||||
|
@ -2199,7 +2199,7 @@ static int32_t getFirstFileDataBlock(STsdbReadHandle* pTsdbReadHandle, bool* exi
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
tsdbGetFidKeyRange(pCfg->daysPerFile, pCfg->precision, pTsdbReadHandle->pFileGroup->fid, &win.skey, &win.ekey);
|
tsdbGetFidKeyRange(pCfg->days, pCfg->precision, pTsdbReadHandle->pFileGroup->fid, &win.skey, &win.ekey);
|
||||||
|
|
||||||
// current file are not overlapped with query time window, ignore remain files
|
// current file are not overlapped with query time window, ignore remain files
|
||||||
if ((ASCENDING_TRAVERSE(pTsdbReadHandle->order) && win.skey > pTsdbReadHandle->window.ekey) ||
|
if ((ASCENDING_TRAVERSE(pTsdbReadHandle->order) && win.skey > pTsdbReadHandle->window.ekey) ||
|
||||||
|
@ -2295,7 +2295,7 @@ int32_t tsdbGetFileBlocksDistInfo(tsdbReaderT* queryHandle, STableBlockDistInfo*
|
||||||
// find the start data block in file
|
// find the start data block in file
|
||||||
pTsdbReadHandle->locateStart = true;
|
pTsdbReadHandle->locateStart = true;
|
||||||
STsdbCfg* pCfg = &pTsdbReadHandle->pTsdb->config;
|
STsdbCfg* pCfg = &pTsdbReadHandle->pTsdb->config;
|
||||||
int32_t fid = getFileIdFromKey(pTsdbReadHandle->window.skey, pCfg->daysPerFile, pCfg->precision);
|
int32_t fid = getFileIdFromKey(pTsdbReadHandle->window.skey, pCfg->days, pCfg->precision);
|
||||||
|
|
||||||
tsdbRLockFS(pFileHandle);
|
tsdbRLockFS(pFileHandle);
|
||||||
tsdbFSIterInit(&pTsdbReadHandle->fileIter, pFileHandle, pTsdbReadHandle->order);
|
tsdbFSIterInit(&pTsdbReadHandle->fileIter, pFileHandle, pTsdbReadHandle->order);
|
||||||
|
@ -2321,7 +2321,7 @@ int32_t tsdbGetFileBlocksDistInfo(tsdbReaderT* queryHandle, STableBlockDistInfo*
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
tsdbGetFidKeyRange(pCfg->daysPerFile, pCfg->precision, pTsdbReadHandle->pFileGroup->fid, &win.skey, &win.ekey);
|
tsdbGetFidKeyRange(pCfg->days, pCfg->precision, pTsdbReadHandle->pFileGroup->fid, &win.skey, &win.ekey);
|
||||||
|
|
||||||
// current file are not overlapped with query time window, ignore remain files
|
// current file are not overlapped with query time window, ignore remain files
|
||||||
if ((ascTraverse && win.skey > pTsdbReadHandle->window.ekey) ||
|
if ((ascTraverse && win.skey > pTsdbReadHandle->window.ekey) ||
|
||||||
|
@ -2396,7 +2396,7 @@ static int32_t getDataBlocksInFiles(STsdbReadHandle* pTsdbReadHandle, bool* exis
|
||||||
if (!pTsdbReadHandle->locateStart) {
|
if (!pTsdbReadHandle->locateStart) {
|
||||||
pTsdbReadHandle->locateStart = true;
|
pTsdbReadHandle->locateStart = true;
|
||||||
STsdbCfg* pCfg = &pTsdbReadHandle->pTsdb->config;
|
STsdbCfg* pCfg = &pTsdbReadHandle->pTsdb->config;
|
||||||
int32_t fid = getFileIdFromKey(pTsdbReadHandle->window.skey, pCfg->daysPerFile, pCfg->precision);
|
int32_t fid = getFileIdFromKey(pTsdbReadHandle->window.skey, pCfg->days, pCfg->precision);
|
||||||
|
|
||||||
tsdbRLockFS(pFileHandle);
|
tsdbRLockFS(pFileHandle);
|
||||||
tsdbFSIterInit(&pTsdbReadHandle->fileIter, pFileHandle, pTsdbReadHandle->order);
|
tsdbFSIterInit(&pTsdbReadHandle->fileIter, pFileHandle, pTsdbReadHandle->order);
|
||||||
|
|
|
@ -43,14 +43,14 @@ int tsdbInitReadH(SReadH *pReadh, STsdb *pRepo) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pReadh->pDCols[0] = tdNewDataCols(0, pCfg->maxRowsPerFileBlock);
|
pReadh->pDCols[0] = tdNewDataCols(0, pCfg->maxRows);
|
||||||
if (pReadh->pDCols[0] == NULL) {
|
if (pReadh->pDCols[0] == NULL) {
|
||||||
terrno = TSDB_CODE_TDB_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_TDB_OUT_OF_MEMORY;
|
||||||
tsdbDestroyReadH(pReadh);
|
tsdbDestroyReadH(pReadh);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pReadh->pDCols[1] = tdNewDataCols(0, pCfg->maxRowsPerFileBlock);
|
pReadh->pDCols[1] = tdNewDataCols(0, pCfg->maxRows);
|
||||||
if (pReadh->pDCols[1] == NULL) {
|
if (pReadh->pDCols[1] == NULL) {
|
||||||
terrno = TSDB_CODE_TDB_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_TDB_OUT_OF_MEMORY;
|
||||||
tsdbDestroyReadH(pReadh);
|
tsdbDestroyReadH(pReadh);
|
||||||
|
@ -276,8 +276,8 @@ int tsdbLoadBlockData(SReadH *pReadh, SBlock *pBlock, SBlockInfo *pBlkInfo) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tsdbLoadBlockDataCols(SReadH *pReadh, SBlock *pBlock, SBlockInfo *pBlkInfo, const int16_t *colIds,
|
int tsdbLoadBlockDataCols(SReadH *pReadh, SBlock *pBlock, SBlockInfo *pBlkInfo, const int16_t *colIds, int numOfColsIds,
|
||||||
int numOfColsIds, bool mergeBitmap) {
|
bool mergeBitmap) {
|
||||||
ASSERT(pBlock->numOfSubBlocks > 0);
|
ASSERT(pBlock->numOfSubBlocks > 0);
|
||||||
int8_t update = pReadh->pRepo->config.update;
|
int8_t update = pReadh->pRepo->config.update;
|
||||||
|
|
||||||
|
@ -513,7 +513,7 @@ static int tsdbLoadBlockDataImpl(SReadH *pReadh, SBlock *pBlock, SDataCols *pDat
|
||||||
|
|
||||||
tdResetDataCols(pDataCols);
|
tdResetDataCols(pDataCols);
|
||||||
|
|
||||||
if(tsdbIsSupBlock(pBlock)) {
|
if (tsdbIsSupBlock(pBlock)) {
|
||||||
tdDataColsSetBitmapI(pDataCols);
|
tdDataColsSetBitmapI(pDataCols);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -606,9 +606,10 @@ static int tsdbLoadBlockDataImpl(SReadH *pReadh, SBlock *pBlock, SDataCols *pDat
|
||||||
if (tsdbMakeRoom((void **)(&TSDB_READ_COMP_BUF(pReadh)), zsize) < 0) return -1;
|
if (tsdbMakeRoom((void **)(&TSDB_READ_COMP_BUF(pReadh)), zsize) < 0) return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tsdbCheckAndDecodeColumnData(pDataCol, POINTER_SHIFT(pBlockData, tsize + toffset), tlen, pBlockCol->blen,
|
if (tsdbCheckAndDecodeColumnData(pDataCol, POINTER_SHIFT(pBlockData, tsize + toffset), tlen,
|
||||||
pBlock->algorithm, pBlock->numOfRows, tLenBitmap, pDataCols->maxPoints,
|
pBlockCol ? pBlockCol->blen : 0, pBlock->algorithm, pBlock->numOfRows,
|
||||||
TSDB_READ_COMP_BUF(pReadh), (int)taosTSizeof(TSDB_READ_COMP_BUF(pReadh))) < 0) {
|
tLenBitmap, pDataCols->maxPoints, TSDB_READ_COMP_BUF(pReadh),
|
||||||
|
(int)taosTSizeof(TSDB_READ_COMP_BUF(pReadh))) < 0) {
|
||||||
tsdbError("vgId:%d file %s is broken at column %d block offset %" PRId64 " column offset %u",
|
tsdbError("vgId:%d file %s is broken at column %d block offset %" PRId64 " column offset %u",
|
||||||
TSDB_READ_REPO_ID(pReadh), TSDB_FILE_FULL_NAME(pDFile), tcolId, (int64_t)pBlock->offset, toffset);
|
TSDB_READ_REPO_ID(pReadh), TSDB_FILE_FULL_NAME(pDFile), tcolId, (int64_t)pBlock->offset, toffset);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -710,7 +711,7 @@ static int tsdbLoadBlockDataColsImpl(SReadH *pReadh, SBlock *pBlock, SDataCols *
|
||||||
|
|
||||||
tdResetDataCols(pDataCols);
|
tdResetDataCols(pDataCols);
|
||||||
|
|
||||||
if(tsdbIsSupBlock(pBlock)) {
|
if (tsdbIsSupBlock(pBlock)) {
|
||||||
tdDataColsSetBitmapI(pDataCols);
|
tdDataColsSetBitmapI(pDataCols);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -747,6 +748,7 @@ static int tsdbLoadBlockDataColsImpl(SReadH *pReadh, SBlock *pBlock, SDataCols *
|
||||||
if (colId == PRIMARYKEY_TIMESTAMP_COL_ID) { // load the key row
|
if (colId == PRIMARYKEY_TIMESTAMP_COL_ID) { // load the key row
|
||||||
blockCol.colId = colId;
|
blockCol.colId = colId;
|
||||||
TD_SET_COL_ROWS_NORM(&blockCol); // default is NORM for the primary key column
|
TD_SET_COL_ROWS_NORM(&blockCol); // default is NORM for the primary key column
|
||||||
|
blockCol.blen = 0;
|
||||||
blockCol.len = pBlock->keyLen;
|
blockCol.len = pBlock->keyLen;
|
||||||
blockCol.type = pDataCol->type;
|
blockCol.type = pDataCol->type;
|
||||||
blockCol.offset = TSDB_KEY_COL_OFFSET;
|
blockCol.offset = TSDB_KEY_COL_OFFSET;
|
||||||
|
@ -836,7 +838,7 @@ static int tsdbLoadColData(SReadH *pReadh, SDFile *pDFile, SBlock *pBlock, SBloc
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tsdbCheckAndDecodeColumnData(pDataCol, pReadh->pBuf, pBlockCol->len, pBlockCol->blen, pBlock->algorithm,
|
if (tsdbCheckAndDecodeColumnData(pDataCol, pReadh->pBuf, pBlockCol->len, pBlockCol->blen, pBlock->algorithm,
|
||||||
pBlock->numOfRows, tLenBitmap, pCfg->maxRowsPerFileBlock, pReadh->pCBuf,
|
pBlock->numOfRows, tLenBitmap, pCfg->maxRows, pReadh->pCBuf,
|
||||||
(int32_t)taosTSizeof(pReadh->pCBuf)) < 0) {
|
(int32_t)taosTSizeof(pReadh->pCBuf)) < 0) {
|
||||||
tsdbError("vgId:%d file %s is broken at column %d offset %" PRId64, REPO_ID(pRepo), TSDB_FILE_FULL_NAME(pDFile),
|
tsdbError("vgId:%d file %s is broken at column %d offset %" PRId64, REPO_ID(pRepo), TSDB_FILE_FULL_NAME(pDFile),
|
||||||
pBlockCol->colId, offset);
|
pBlockCol->colId, offset);
|
||||||
|
|
|
@ -106,7 +106,8 @@ struct SSmaStat {
|
||||||
|
|
||||||
// expired window
|
// expired window
|
||||||
static int32_t tsdbUpdateExpiredWindowImpl(STsdb *pTsdb, SSubmitReq *pMsg, int64_t version);
|
static int32_t tsdbUpdateExpiredWindowImpl(STsdb *pTsdb, SSubmitReq *pMsg, int64_t version);
|
||||||
static int32_t tsdbSetExpiredWindow(STsdb *pTsdb, SHashObj *pItemsHash, int64_t indexUid, int64_t winSKey, int64_t version);
|
static int32_t tsdbSetExpiredWindow(STsdb *pTsdb, SHashObj *pItemsHash, int64_t indexUid, int64_t winSKey,
|
||||||
|
int64_t version);
|
||||||
static int32_t tsdbInitSmaStat(SSmaStat **pSmaStat);
|
static int32_t tsdbInitSmaStat(SSmaStat **pSmaStat);
|
||||||
static void *tsdbFreeSmaStatItem(SSmaStatItem *pSmaStatItem);
|
static void *tsdbFreeSmaStatItem(SSmaStatItem *pSmaStatItem);
|
||||||
static int32_t tsdbDestroySmaState(SSmaStat *pSmaStat);
|
static int32_t tsdbDestroySmaState(SSmaStat *pSmaStat);
|
||||||
|
@ -544,7 +545,8 @@ static int32_t tsdbCheckAndInitSmaEnv(STsdb *pTsdb, int8_t smaType) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int32_t tsdbSetExpiredWindow(STsdb *pTsdb, SHashObj *pItemsHash, int64_t indexUid, int64_t winSKey, int64_t version) {
|
static int32_t tsdbSetExpiredWindow(STsdb *pTsdb, SHashObj *pItemsHash, int64_t indexUid, int64_t winSKey,
|
||||||
|
int64_t version) {
|
||||||
SSmaStatItem *pItem = taosHashGet(pItemsHash, &indexUid, sizeof(indexUid));
|
SSmaStatItem *pItem = taosHashGet(pItemsHash, &indexUid, sizeof(indexUid));
|
||||||
if (pItem == NULL) {
|
if (pItem == NULL) {
|
||||||
// TODO: use TSDB_SMA_STAT_EXPIRED and update by stream computing later
|
// TODO: use TSDB_SMA_STAT_EXPIRED and update by stream computing later
|
||||||
|
@ -946,7 +948,7 @@ static int32_t tsdbSetTSmaDataFile(STSmaWriteH *pSmaH, int64_t indexUid, int32_t
|
||||||
*/
|
*/
|
||||||
static int32_t tsdbGetTSmaDays(STsdb *pTsdb, int64_t interval, int32_t storageLevel) {
|
static int32_t tsdbGetTSmaDays(STsdb *pTsdb, int64_t interval, int32_t storageLevel) {
|
||||||
STsdbCfg *pCfg = REPO_CFG(pTsdb);
|
STsdbCfg *pCfg = REPO_CFG(pTsdb);
|
||||||
int32_t daysPerFile = pCfg->daysPerFile;
|
int32_t daysPerFile = pCfg->days;
|
||||||
|
|
||||||
if (storageLevel == SMA_STORAGE_LEVEL_TSDB) {
|
if (storageLevel == SMA_STORAGE_LEVEL_TSDB) {
|
||||||
int32_t days = SMA_STORAGE_TSDB_TIMES * (interval / tsTickPerDay[pCfg->precision]);
|
int32_t days = SMA_STORAGE_TSDB_TIMES * (interval / tsTickPerDay[pCfg->precision]);
|
||||||
|
|
|
@ -15,14 +15,15 @@
|
||||||
|
|
||||||
#include "vnodeInt.h"
|
#include "vnodeInt.h"
|
||||||
|
|
||||||
const SVnodeCfg defaultVnodeOptions = {
|
const SVnodeCfg vnodeCfgDefault = {
|
||||||
.wsize = 96 * 1024 * 1024, .ssize = 1 * 1024 * 1024, .lsize = 1024, .walCfg = {.level = TAOS_WAL_WRITE}}; /* TODO */
|
.wsize = 96 * 1024 * 1024, .ssize = 1 * 1024 * 1024, .lsize = 1024, .walCfg = {.level = TAOS_WAL_WRITE}};
|
||||||
|
|
||||||
int vnodeValidateOptions(const SVnodeCfg *pVnodeOptions) {
|
int vnodeCheckCfg(const SVnodeCfg *pCfg) {
|
||||||
// TODO
|
// TODO
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 1 //======================================================================
|
||||||
void vnodeOptionsCopy(SVnodeCfg *pDest, const SVnodeCfg *pSrc) {
|
void vnodeOptionsCopy(SVnodeCfg *pDest, const SVnodeCfg *pSrc) {
|
||||||
memcpy((void *)pDest, (void *)pSrc, sizeof(SVnodeCfg));
|
memcpy((void *)pDest, (void *)pSrc, sizeof(SVnodeCfg));
|
||||||
}
|
}
|
||||||
|
@ -46,3 +47,5 @@ int vnodeValidateTableHash(SVnodeCfg *pVnodeOptions, char *tableFName) {
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -15,11 +15,128 @@
|
||||||
|
|
||||||
#include "vnodeInt.h"
|
#include "vnodeInt.h"
|
||||||
|
|
||||||
|
#define VND_INFO_FNAME "vnode.json"
|
||||||
|
#define VND_INFO_FNAME_TMP "vnode_tmp.json"
|
||||||
|
|
||||||
|
static int vnodeEncodeInfo(const SVnodeInfo *pInfo, char **ppData);
|
||||||
|
static int vnodeDecodeInfo(uint8_t *pData, SVnodeInfo *pInfo);
|
||||||
static int vnodeStartCommit(SVnode *pVnode);
|
static int vnodeStartCommit(SVnode *pVnode);
|
||||||
static int vnodeEndCommit(SVnode *pVnode);
|
static int vnodeEndCommit(SVnode *pVnode);
|
||||||
static int vnodeCommit(void *arg);
|
static int vnodeCommit(void *arg);
|
||||||
static void vnodeWaitCommit(SVnode *pVnode);
|
static void vnodeWaitCommit(SVnode *pVnode);
|
||||||
|
|
||||||
|
int vnodeSaveInfo(const char *dir, const SVnodeInfo *pInfo) {
|
||||||
|
char fname[TSDB_FILENAME_LEN];
|
||||||
|
TdFilePtr pFile;
|
||||||
|
char *data;
|
||||||
|
|
||||||
|
snprintf(fname, TSDB_FILENAME_LEN, "%s%s%s", dir, TD_DIRSEP, VND_INFO_FNAME_TMP);
|
||||||
|
|
||||||
|
// encode info
|
||||||
|
data = NULL;
|
||||||
|
|
||||||
|
if (vnodeEncodeInfo(pInfo, &data) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// save info to a vnode_tmp.json
|
||||||
|
pFile = taosOpenFile(fname, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC);
|
||||||
|
if (pFile == NULL) {
|
||||||
|
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (taosWriteFile(pFile, data, strlen(data)) < 0) {
|
||||||
|
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (taosFsyncFile(pFile) < 0) {
|
||||||
|
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
taosCloseFile(&pFile);
|
||||||
|
|
||||||
|
// free info binary
|
||||||
|
taosMemoryFree(data);
|
||||||
|
|
||||||
|
vInfo("vgId: %d vnode info is saved, fname: %s", pInfo->config.vgId, fname);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
_err:
|
||||||
|
taosCloseFile(&pFile);
|
||||||
|
taosMemoryFree(data);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int vnodeCommitInfo(const char *dir, const SVnodeInfo *pInfo) {
|
||||||
|
char fname[TSDB_FILENAME_LEN];
|
||||||
|
char tfname[TSDB_FILENAME_LEN];
|
||||||
|
|
||||||
|
snprintf(fname, TSDB_FILENAME_LEN, "%s%s%s", dir, TD_DIRSEP, VND_INFO_FNAME);
|
||||||
|
snprintf(tfname, TSDB_FILENAME_LEN, "%s%s%s", dir, TD_DIRSEP, VND_INFO_FNAME_TMP);
|
||||||
|
|
||||||
|
if (taosRenameFile(tfname, fname) < 0) {
|
||||||
|
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
vInfo("vgId: %d vnode info is committed", pInfo->config.vgId);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int vnodeLoadInfo(const char *dir, SVnodeInfo *pInfo) {
|
||||||
|
char fname[TSDB_FILENAME_LEN];
|
||||||
|
TdFilePtr pFile = NULL;
|
||||||
|
char *pData = NULL;
|
||||||
|
int64_t size;
|
||||||
|
|
||||||
|
snprintf(fname, TSDB_FILENAME_LEN, "%s%s%s", dir, TD_DIRSEP, VND_INFO_FNAME);
|
||||||
|
|
||||||
|
// read info
|
||||||
|
pFile = taosOpenFile(fname, TD_FILE_READ);
|
||||||
|
if (pFile == NULL) {
|
||||||
|
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (taosFStatFile(pFile, &size, NULL) < 0) {
|
||||||
|
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
pData = taosMemoryMalloc(size);
|
||||||
|
if (pData == NULL) {
|
||||||
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (taosReadFile(pFile, pData, size) < 0) {
|
||||||
|
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
taosCloseFile(&pFile);
|
||||||
|
|
||||||
|
// decode info
|
||||||
|
if (vnodeDecodeInfo(pData, pInfo) < 0) {
|
||||||
|
taosMemoryFree(pData);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
taosMemoryFree(pData);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
_err:
|
||||||
|
taosCloseFile(&pFile);
|
||||||
|
taosMemoryFree(pData);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int vnodeAsyncCommit(SVnode *pVnode) {
|
int vnodeAsyncCommit(SVnode *pVnode) {
|
||||||
vnodeWaitCommit(pVnode);
|
vnodeWaitCommit(pVnode);
|
||||||
|
|
||||||
|
@ -61,3 +178,132 @@ static int vnodeEndCommit(SVnode *pVnode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static FORCE_INLINE void vnodeWaitCommit(SVnode *pVnode) { tsem_wait(&pVnode->canCommit); }
|
static FORCE_INLINE void vnodeWaitCommit(SVnode *pVnode) { tsem_wait(&pVnode->canCommit); }
|
||||||
|
|
||||||
|
static int vnodeEncodeConfig(const void *pObj, SJson *pJson) {
|
||||||
|
const SVnodeCfg *pCfg = (SVnodeCfg *)pObj;
|
||||||
|
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "vgId", pCfg->vgId) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "dbId", pCfg->dbId) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "wsize", pCfg->wsize) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "ssize", pCfg->ssize) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "lsize", pCfg->lsize) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "isHeap", pCfg->isHeapAllocator) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "ttl", pCfg->ttl) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "keep", pCfg->keep) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "streamMode", pCfg->streamMode) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "isWeak", pCfg->isWeak) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "precision", pCfg->tsdbCfg.precision) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "update", pCfg->tsdbCfg.update) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "compression", pCfg->tsdbCfg.compression) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "daysPerFile", pCfg->tsdbCfg.days) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "minRows", pCfg->tsdbCfg.minRows) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "maxRows", pCfg->tsdbCfg.maxRows) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "keep0", pCfg->tsdbCfg.keep0) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "keep1", pCfg->tsdbCfg.keep1) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "keep2", pCfg->tsdbCfg.keep2) < 0) return -1;
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "lruCacheSize", pCfg->tsdbCfg.lruCacheSize) < 0) return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int vnodeDecodeConfig(const SJson *pJson, void *pObj) {
|
||||||
|
SVnodeCfg *pCfg = (SVnodeCfg *)pObj;
|
||||||
|
|
||||||
|
if (tjsonGetNumberValue(pJson, "vgId", pCfg->vgId) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "dbId", pCfg->dbId) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "wsize", pCfg->wsize) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "ssize", pCfg->ssize) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "lsize", pCfg->lsize) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "isHeap", pCfg->isHeapAllocator) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "ttl", pCfg->ttl) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "keep", pCfg->keep) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "streamMode", pCfg->streamMode) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "isWeak", pCfg->isWeak) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "precision", pCfg->tsdbCfg.precision) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "update", pCfg->tsdbCfg.update) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "compression", pCfg->tsdbCfg.compression) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "daysPerFile", pCfg->tsdbCfg.days) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "minRows", pCfg->tsdbCfg.minRows) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "maxRows", pCfg->tsdbCfg.maxRows) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "keep0", pCfg->tsdbCfg.keep0) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "keep1", pCfg->tsdbCfg.keep1) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "keep2", pCfg->tsdbCfg.keep2) < 0) return -1;
|
||||||
|
if (tjsonGetNumberValue(pJson, "lruCacheSize", pCfg->tsdbCfg.lruCacheSize) < 0) return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int vnodeEncodeState(const void *pObj, SJson *pJson) {
|
||||||
|
const SVState *pState = (SVState *)pObj;
|
||||||
|
|
||||||
|
if (tjsonAddIntegerToObject(pJson, "commit version", pState->committed) < 0) return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int vnodeDecodeState(const SJson *pJson, void *pObj) {
|
||||||
|
SVState *pState = (SVState *)pObj;
|
||||||
|
|
||||||
|
if (tjsonGetNumberValue(pJson, "commit version", pState->committed) < 0) return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int vnodeEncodeInfo(const SVnodeInfo *pInfo, char **ppData) {
|
||||||
|
SJson *pJson;
|
||||||
|
char *pData;
|
||||||
|
|
||||||
|
*ppData = NULL;
|
||||||
|
|
||||||
|
pJson = tjsonCreateObject();
|
||||||
|
if (pJson == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tjsonAddObject(pJson, "config", vnodeEncodeConfig, (void *)&pInfo->config) < 0) {
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tjsonAddObject(pJson, "state", vnodeEncodeState, (void *)&pInfo->state) < 0) {
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
pData = tjsonToString(pJson);
|
||||||
|
if (pData == NULL) {
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
tjsonDelete(pJson);
|
||||||
|
|
||||||
|
*ppData = pData;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
_err:
|
||||||
|
tjsonDelete(pJson);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int vnodeDecodeInfo(uint8_t *pData, SVnodeInfo *pInfo) {
|
||||||
|
SJson *pJson = NULL;
|
||||||
|
|
||||||
|
pJson = tjsonCreateObject();
|
||||||
|
if (pJson == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tjsonToObject(pJson, "config", vnodeDecodeConfig, (void *)&pInfo->config) < 0) {
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tjsonToObject(pJson, "state", vnodeDecodeState, (void *)&pInfo->state) < 0) {
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
|
tjsonDelete(pJson);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
_err:
|
||||||
|
tjsonDelete(pJson);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
|
@ -20,11 +20,42 @@ static void vnodeFree(SVnode *pVnode);
|
||||||
static int vnodeOpenImpl(SVnode *pVnode);
|
static int vnodeOpenImpl(SVnode *pVnode);
|
||||||
static void vnodeCloseImpl(SVnode *pVnode);
|
static void vnodeCloseImpl(SVnode *pVnode);
|
||||||
|
|
||||||
|
int vnodeCreate(const char *path, SVnodeCfg *pCfg, STfs *pTfs) {
|
||||||
|
SVnodeInfo info = {0};
|
||||||
|
char dir[TSDB_FILENAME_LEN];
|
||||||
|
|
||||||
|
// TODO: check if directory exists
|
||||||
|
|
||||||
|
// check config
|
||||||
|
if (vnodeCheckCfg(pCfg) < 0) {
|
||||||
|
vError("vgId: %d failed to create vnode since: %s", pCfg->vgId, tstrerror(terrno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create vnode env
|
||||||
|
if (tfsMkdir(pTfs, path) < 0) {
|
||||||
|
vError("vgId: %d failed to create vnode since: %s", pCfg->vgId, tstrerror(terrno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(dir, TSDB_FILENAME_LEN, "%s%s%s", tfsGetPrimaryPath(pTfs), TD_DIRSEP, path);
|
||||||
|
info.config = *pCfg;
|
||||||
|
|
||||||
|
if (vnodeSaveInfo(dir, &info) < 0 || vnodeCommitInfo(dir, &info) < 0) {
|
||||||
|
vError("vgId: %d failed to save vnode config since %s", pCfg->vgId, tstrerror(terrno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
vInfo("vgId: %d vnode is created", pCfg->vgId);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
SVnode *vnodeOpen(const char *path, const SVnodeCfg *pVnodeCfg) {
|
SVnode *vnodeOpen(const char *path, const SVnodeCfg *pVnodeCfg) {
|
||||||
SVnode *pVnode = NULL;
|
SVnode *pVnode = NULL;
|
||||||
|
|
||||||
// Set default options
|
// Set default options
|
||||||
SVnodeCfg cfg = defaultVnodeOptions;
|
SVnodeCfg cfg = vnodeCfgDefault;
|
||||||
if (pVnodeCfg != NULL) {
|
if (pVnodeCfg != NULL) {
|
||||||
cfg.vgId = pVnodeCfg->vgId;
|
cfg.vgId = pVnodeCfg->vgId;
|
||||||
cfg.msgCb = pVnodeCfg->msgCb;
|
cfg.msgCb = pVnodeCfg->msgCb;
|
||||||
|
@ -36,7 +67,7 @@ SVnode *vnodeOpen(const char *path, const SVnodeCfg *pVnodeCfg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate options
|
// Validate options
|
||||||
if (vnodeValidateOptions(&cfg) < 0) {
|
if (vnodeCheckCfg(&cfg) < 0) {
|
||||||
// TODO
|
// TODO
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
|
@ -20,9 +20,9 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
#include "tsort.h"
|
|
||||||
#include "tcommon.h"
|
#include "tcommon.h"
|
||||||
#include "tlosertree.h"
|
#include "tlosertree.h"
|
||||||
|
#include "tsort.h"
|
||||||
#include "ttszip.h"
|
#include "ttszip.h"
|
||||||
#include "tvariant.h"
|
#include "tvariant.h"
|
||||||
|
|
||||||
|
@ -35,8 +35,8 @@ extern "C" {
|
||||||
#include "tarray.h"
|
#include "tarray.h"
|
||||||
#include "thash.h"
|
#include "thash.h"
|
||||||
#include "tlockfree.h"
|
#include "tlockfree.h"
|
||||||
#include "tpagedbuf.h"
|
|
||||||
#include "tmsg.h"
|
#include "tmsg.h"
|
||||||
|
#include "tpagedbuf.h"
|
||||||
|
|
||||||
typedef int32_t (*__block_search_fn_t)(char* data, int32_t num, int64_t key, int32_t order);
|
typedef int32_t (*__block_search_fn_t)(char* data, int32_t num, int64_t key, int32_t order);
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ typedef struct STaskAttr {
|
||||||
int32_t resultRowSize;
|
int32_t resultRowSize;
|
||||||
int32_t tagLen; // tag value length of current query
|
int32_t tagLen; // tag value length of current query
|
||||||
|
|
||||||
SExprInfo *pExpr1;
|
SExprInfo* pExpr1;
|
||||||
SColumnInfo* tagColList;
|
SColumnInfo* tagColList;
|
||||||
int32_t numOfFilterCols;
|
int32_t numOfFilterCols;
|
||||||
int64_t* fillVal;
|
int64_t* fillVal;
|
||||||
|
@ -187,13 +187,15 @@ struct SOperatorInfo;
|
||||||
struct SAggSupporter;
|
struct SAggSupporter;
|
||||||
struct SOptrBasicInfo;
|
struct SOptrBasicInfo;
|
||||||
|
|
||||||
typedef void (*__optr_encode_fn_t)(struct SOperatorInfo* pOperator, struct SAggSupporter *pSup, struct SOptrBasicInfo *pInfo, char **result, int32_t *length);
|
typedef void (*__optr_encode_fn_t)(struct SOperatorInfo* pOperator, struct SAggSupporter* pSup,
|
||||||
typedef bool (*__optr_decode_fn_t)(struct SOperatorInfo* pOperator, struct SAggSupporter *pSup, struct SOptrBasicInfo *pInfo, char *result, int32_t length);
|
struct SOptrBasicInfo* pInfo, char** result, int32_t* length);
|
||||||
|
typedef bool (*__optr_decode_fn_t)(struct SOperatorInfo* pOperator, struct SAggSupporter* pSup,
|
||||||
|
struct SOptrBasicInfo* pInfo, char* result, int32_t length);
|
||||||
|
|
||||||
typedef int32_t (*__optr_open_fn_t)(struct SOperatorInfo* pOptr);
|
typedef int32_t (*__optr_open_fn_t)(struct SOperatorInfo* pOptr);
|
||||||
typedef SSDataBlock* (*__optr_fn_t)(struct SOperatorInfo* pOptr, bool* newgroup);
|
typedef SSDataBlock* (*__optr_fn_t)(struct SOperatorInfo* pOptr, bool* newgroup);
|
||||||
typedef void (*__optr_close_fn_t)(void* param, int32_t num);
|
typedef void (*__optr_close_fn_t)(void* param, int32_t num);
|
||||||
typedef int32_t (*__optr_get_explain_fn_t)(struct SOperatorInfo* pOptr, void **pOptrExplain);
|
typedef int32_t (*__optr_get_explain_fn_t)(struct SOperatorInfo* pOptr, void** pOptrExplain);
|
||||||
|
|
||||||
typedef struct STaskIdInfo {
|
typedef struct STaskIdInfo {
|
||||||
uint64_t queryId; // this is also a request id
|
uint64_t queryId; // this is also a request id
|
||||||
|
@ -218,6 +220,7 @@ typedef struct SExecTaskInfo {
|
||||||
} SExecTaskInfo;
|
} SExecTaskInfo;
|
||||||
|
|
||||||
typedef struct STaskRuntimeEnv {
|
typedef struct STaskRuntimeEnv {
|
||||||
|
|
||||||
jmp_buf env;
|
jmp_buf env;
|
||||||
STaskAttr* pQueryAttr;
|
STaskAttr* pQueryAttr;
|
||||||
uint32_t status; // query status
|
uint32_t status; // query status
|
||||||
|
@ -293,9 +296,9 @@ typedef enum {
|
||||||
} EX_SOURCE_STATUS;
|
} EX_SOURCE_STATUS;
|
||||||
|
|
||||||
typedef struct SSourceDataInfo {
|
typedef struct SSourceDataInfo {
|
||||||
struct SExchangeInfo *pEx;
|
struct SExchangeInfo* pEx;
|
||||||
int32_t index;
|
int32_t index;
|
||||||
SRetrieveTableRsp *pRsp;
|
SRetrieveTableRsp* pRsp;
|
||||||
uint64_t totalRows;
|
uint64_t totalRows;
|
||||||
int32_t code;
|
int32_t code;
|
||||||
EX_SOURCE_STATUS status;
|
EX_SOURCE_STATUS status;
|
||||||
|
@ -344,6 +347,7 @@ typedef struct STableScanInfo {
|
||||||
int32_t numOfOutput;
|
int32_t numOfOutput;
|
||||||
int64_t elapsedTime;
|
int64_t elapsedTime;
|
||||||
int32_t prevGroupId; // previous table group id
|
int32_t prevGroupId; // previous table group id
|
||||||
|
|
||||||
int32_t scanFlag; // table scan flag to denote if it is a repeat/reverse/main scan
|
int32_t scanFlag; // table scan flag to denote if it is a repeat/reverse/main scan
|
||||||
int32_t dataBlockLoadFlag;
|
int32_t dataBlockLoadFlag;
|
||||||
} STableScanInfo;
|
} STableScanInfo;
|
||||||
|
@ -373,20 +377,20 @@ typedef struct SSysTableScanInfo {
|
||||||
void* readHandle;
|
void* readHandle;
|
||||||
};
|
};
|
||||||
|
|
||||||
SRetrieveMetaTableRsp *pRsp;
|
SRetrieveMetaTableRsp* pRsp;
|
||||||
SRetrieveTableReq req;
|
SRetrieveTableReq req;
|
||||||
SEpSet epSet;
|
SEpSet epSet;
|
||||||
tsem_t ready;
|
tsem_t ready;
|
||||||
|
|
||||||
int32_t accountId;
|
int32_t accountId;
|
||||||
bool showRewrite;
|
bool showRewrite;
|
||||||
SNode *pCondition; // db_name filter condition, to discard data that are not in current database
|
SNode* pCondition; // db_name filter condition, to discard data that are not in current database
|
||||||
void *pCur; // cursor for iterate the local table meta store.
|
void* pCur; // cursor for iterate the local table meta store.
|
||||||
SArray *scanCols; // SArray<int16_t> scan column id list
|
SArray* scanCols; // SArray<int16_t> scan column id list
|
||||||
|
|
||||||
int32_t type; // show type, TODO remove it
|
int32_t type; // show type, TODO remove it
|
||||||
SName name;
|
SName name;
|
||||||
SSDataBlock *pRes;
|
SSDataBlock* pRes;
|
||||||
int32_t capacity;
|
int32_t capacity;
|
||||||
int64_t numOfBlocks; // extract basic running information.
|
int64_t numOfBlocks; // extract basic running information.
|
||||||
SLoadRemoteDataInfo loadInfo;
|
SLoadRemoteDataInfo loadInfo;
|
||||||
|
@ -400,13 +404,13 @@ typedef struct SOptrBasicInfo {
|
||||||
int32_t capacity; // TODO remove it
|
int32_t capacity; // TODO remove it
|
||||||
} SOptrBasicInfo;
|
} SOptrBasicInfo;
|
||||||
|
|
||||||
//TODO move the resultrowsiz together with SOptrBasicInfo:rowCellInfoOffset
|
// TODO move the resultrowsiz together with SOptrBasicInfo:rowCellInfoOffset
|
||||||
typedef struct SAggSupporter {
|
typedef struct SAggSupporter {
|
||||||
SHashObj* pResultRowHashTable; // quick locate the window object for each result
|
SHashObj* pResultRowHashTable; // quick locate the window object for each result
|
||||||
SHashObj* pResultRowListSet; // used to check if current ResultRowInfo has ResultRow object or not
|
SHashObj* pResultRowListSet; // used to check if current ResultRowInfo has ResultRow object or not
|
||||||
SArray* pResultRowArrayList; // The array list that contains the Result rows
|
SArray* pResultRowArrayList; // The array list that contains the Result rows
|
||||||
char* keyBuf; // window key buffer
|
char* keyBuf; // window key buffer
|
||||||
SDiskbasedBuf *pResultBuf; // query result buffer based on blocked-wised disk file
|
SDiskbasedBuf* pResultBuf; // query result buffer based on blocked-wised disk file
|
||||||
int32_t resultRowSize; // the result buffer size for each result row, with the meta data size for each row
|
int32_t resultRowSize; // the result buffer size for each result row, with the meta data size for each row
|
||||||
} SAggSupporter;
|
} SAggSupporter;
|
||||||
|
|
||||||
|
@ -417,12 +421,12 @@ typedef struct STableIntervalOperatorInfo {
|
||||||
int32_t primaryTsIndex; // primary time stamp slot id from result of downstream operator.
|
int32_t primaryTsIndex; // primary time stamp slot id from result of downstream operator.
|
||||||
STimeWindow win; // query time range
|
STimeWindow win; // query time range
|
||||||
bool timeWindowInterpo; // interpolation needed or not
|
bool timeWindowInterpo; // interpolation needed or not
|
||||||
char **pRow; // previous row/tuple of already processed datablock
|
char** pRow; // previous row/tuple of already processed datablock
|
||||||
SAggSupporter aggSup; // aggregate supporter
|
SAggSupporter aggSup; // aggregate supporter
|
||||||
STableQueryInfo *pCurrent; // current tableQueryInfo struct
|
STableQueryInfo* pCurrent; // current tableQueryInfo struct
|
||||||
int32_t order; // current SSDataBlock scan order
|
int32_t order; // current SSDataBlock scan order
|
||||||
EOPTR_EXEC_MODEL execModel; // operator execution model [batch model|stream model]
|
EOPTR_EXEC_MODEL execModel; // operator execution model [batch model|stream model]
|
||||||
SArray *pUpdatedWindow; // updated time window due to the input data block from the downstream operator.
|
SArray* pUpdatedWindow; // updated time window due to the input data block from the downstream operator.
|
||||||
SColumnInfoData timeWindowData; // query time window info for scalar function execution.
|
SColumnInfoData timeWindowData; // query time window info for scalar function execution.
|
||||||
} STableIntervalOperatorInfo;
|
} STableIntervalOperatorInfo;
|
||||||
|
|
||||||
|
@ -444,8 +448,8 @@ typedef struct SAggOperatorInfo {
|
||||||
typedef struct SProjectOperatorInfo {
|
typedef struct SProjectOperatorInfo {
|
||||||
SOptrBasicInfo binfo;
|
SOptrBasicInfo binfo;
|
||||||
SAggSupporter aggSup;
|
SAggSupporter aggSup;
|
||||||
SSDataBlock *existDataBlock;
|
SSDataBlock* existDataBlock;
|
||||||
SArray *pPseudoColInfo;
|
SArray* pPseudoColInfo;
|
||||||
SLimit limit;
|
SLimit limit;
|
||||||
SLimit slimit;
|
SLimit slimit;
|
||||||
|
|
||||||
|
@ -469,7 +473,7 @@ typedef struct SFillOperatorInfo {
|
||||||
} SFillOperatorInfo;
|
} SFillOperatorInfo;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *pData;
|
char* pData;
|
||||||
bool isNull;
|
bool isNull;
|
||||||
int16_t type;
|
int16_t type;
|
||||||
int32_t bytes;
|
int32_t bytes;
|
||||||
|
@ -486,14 +490,14 @@ typedef struct SGroupbyOperatorInfo {
|
||||||
SGroupResInfo groupResInfo;
|
SGroupResInfo groupResInfo;
|
||||||
SAggSupporter aggSup;
|
SAggSupporter aggSup;
|
||||||
SExprInfo* pScalarExprInfo;
|
SExprInfo* pScalarExprInfo;
|
||||||
int32_t numOfScalarExpr;// the number of scalar expression in group operator
|
int32_t numOfScalarExpr; // the number of scalar expression in group operator
|
||||||
SqlFunctionCtx*pScalarFuncCtx;
|
SqlFunctionCtx* pScalarFuncCtx;
|
||||||
} SGroupbyOperatorInfo;
|
} SGroupbyOperatorInfo;
|
||||||
|
|
||||||
typedef struct SDataGroupInfo {
|
typedef struct SDataGroupInfo {
|
||||||
uint64_t groupId;
|
uint64_t groupId;
|
||||||
int64_t numOfRows;
|
int64_t numOfRows;
|
||||||
SArray *pPageList;
|
SArray* pPageList;
|
||||||
} SDataGroupInfo;
|
} SDataGroupInfo;
|
||||||
|
|
||||||
// The sort in partition may be needed later.
|
// The sort in partition may be needed later.
|
||||||
|
@ -545,10 +549,11 @@ typedef struct SStateWindowOperatorInfo {
|
||||||
bool hasKey;
|
bool hasKey;
|
||||||
SStateKeys stateKey;
|
SStateKeys stateKey;
|
||||||
SColumnInfoData timeWindowData; // query time window info for scalar function execution.
|
SColumnInfoData timeWindowData; // query time window info for scalar function execution.
|
||||||
// bool reptScan;
|
// bool reptScan;
|
||||||
} SStateWindowOperatorInfo;
|
} SStateWindowOperatorInfo;
|
||||||
|
|
||||||
typedef struct SSortedMergeOperatorInfo {
|
typedef struct SSortedMergeOperatorInfo {
|
||||||
|
|
||||||
SOptrBasicInfo binfo;
|
SOptrBasicInfo binfo;
|
||||||
SArray* pSortInfo;
|
SArray* pSortInfo;
|
||||||
int32_t numOfSources;
|
int32_t numOfSources;
|
||||||
|
@ -566,9 +571,9 @@ typedef struct SSortedMergeOperatorInfo {
|
||||||
|
|
||||||
typedef struct SSortOperatorInfo {
|
typedef struct SSortOperatorInfo {
|
||||||
uint32_t sortBufSize; // max buffer size for in-memory sort
|
uint32_t sortBufSize; // max buffer size for in-memory sort
|
||||||
SSDataBlock *pDataBlock;
|
SSDataBlock* pDataBlock;
|
||||||
SArray* pSortInfo;
|
SArray* pSortInfo;
|
||||||
SSortHandle *pSortHandle;
|
SSortHandle* pSortHandle;
|
||||||
SArray* inputSlotMap; // for index map from table scan output
|
SArray* inputSlotMap; // for index map from table scan output
|
||||||
int32_t bufPageSize;
|
int32_t bufPageSize;
|
||||||
int32_t numOfRowsInRes;
|
int32_t numOfRowsInRes;
|
||||||
|
@ -581,6 +586,10 @@ typedef struct SSortOperatorInfo {
|
||||||
uint64_t totalElapsed; // total elapsed time
|
uint64_t totalElapsed; // total elapsed time
|
||||||
} SSortOperatorInfo;
|
} SSortOperatorInfo;
|
||||||
|
|
||||||
|
typedef struct STagFilterOperatorInfo {
|
||||||
|
SOptrBasicInfo binfo;
|
||||||
|
} STagFilterOperatorInfo;
|
||||||
|
|
||||||
typedef struct SJoinOperatorInfo {
|
typedef struct SJoinOperatorInfo {
|
||||||
SSDataBlock *pRes;
|
SSDataBlock *pRes;
|
||||||
int32_t joinType;
|
int32_t joinType;
|
||||||
|
@ -601,19 +610,24 @@ void operatorDummyCloseFn(void* param, int32_t numOfCols);
|
||||||
int32_t appendDownstream(SOperatorInfo* p, SOperatorInfo** pDownstream, int32_t num);
|
int32_t appendDownstream(SOperatorInfo* p, SOperatorInfo** pDownstream, int32_t num);
|
||||||
int32_t initAggInfo(SOptrBasicInfo* pBasicInfo, SAggSupporter* pAggSup, SExprInfo* pExprInfo, int32_t numOfCols,
|
int32_t initAggInfo(SOptrBasicInfo* pBasicInfo, SAggSupporter* pAggSup, SExprInfo* pExprInfo, int32_t numOfCols,
|
||||||
int32_t numOfRows, SSDataBlock* pResultBlock, size_t keyBufSize, const char* pkey);
|
int32_t numOfRows, SSDataBlock* pResultBlock, size_t keyBufSize, const char* pkey);
|
||||||
void toSDatablock(SSDataBlock* pBlock, int32_t rowCapacity, SGroupResInfo* pGroupResInfo, SExprInfo* pExprInfo, SDiskbasedBuf* pBuf, int32_t* rowCellOffset);
|
void toSDatablock(SSDataBlock* pBlock, int32_t rowCapacity, SGroupResInfo* pGroupResInfo, SExprInfo* pExprInfo,
|
||||||
void finalizeMultiTupleQueryResult(SqlFunctionCtx* pCtx, int32_t numOfOutput, SDiskbasedBuf* pBuf, SResultRowInfo* pResultRowInfo, int32_t* rowCellInfoOffset);
|
SDiskbasedBuf* pBuf, int32_t* rowCellOffset);
|
||||||
void doApplyFunctions(SqlFunctionCtx* pCtx, STimeWindow* pWin, SColumnInfoData* pTimeWindowData, int32_t offset, int32_t forwardStep, TSKEY* tsCol, int32_t numOfTotal, int32_t numOfOutput, int32_t order);
|
void finalizeMultiTupleQueryResult(SqlFunctionCtx* pCtx, int32_t numOfOutput, SDiskbasedBuf* pBuf,
|
||||||
int32_t setGroupResultOutputBuf(SOptrBasicInfo* binfo, int32_t numOfCols, char* pData, int16_t type, int16_t bytes, int32_t groupId, SDiskbasedBuf* pBuf, SExecTaskInfo* pTaskInfo, SAggSupporter* pAggSup);
|
SResultRowInfo* pResultRowInfo, int32_t* rowCellInfoOffset);
|
||||||
|
void doApplyFunctions(SqlFunctionCtx* pCtx, STimeWindow* pWin, SColumnInfoData* pTimeWindowData, int32_t offset,
|
||||||
|
int32_t forwardStep, TSKEY* tsCol, int32_t numOfTotal, int32_t numOfOutput, int32_t order);
|
||||||
|
int32_t setGroupResultOutputBuf(SOptrBasicInfo* binfo, int32_t numOfCols, char* pData, int16_t type, int16_t bytes,
|
||||||
|
int32_t groupId, SDiskbasedBuf* pBuf, SExecTaskInfo* pTaskInfo, SAggSupporter* pAggSup);
|
||||||
void doDestroyBasicInfo(SOptrBasicInfo* pInfo, int32_t numOfOutput);
|
void doDestroyBasicInfo(SOptrBasicInfo* pInfo, int32_t numOfOutput);
|
||||||
int32_t setSDataBlockFromFetchRsp(SSDataBlock* pRes, SLoadRemoteDataInfo* pLoadInfo, int32_t numOfRows,
|
int32_t setSDataBlockFromFetchRsp(SSDataBlock* pRes, SLoadRemoteDataInfo* pLoadInfo, int32_t numOfRows, char* pData,
|
||||||
char* pData, int32_t compLen, int32_t numOfOutput, int64_t startTs,
|
int32_t compLen, int32_t numOfOutput, int64_t startTs, uint64_t* total,
|
||||||
uint64_t* total, SArray* pColList);
|
SArray* pColList);
|
||||||
void doSetOperatorCompleted(SOperatorInfo* pOperator);
|
void doSetOperatorCompleted(SOperatorInfo* pOperator);
|
||||||
void doFilter(const SNode* pFilterNode, SSDataBlock* pBlock);
|
void doFilter(const SNode* pFilterNode, SSDataBlock* pBlock);
|
||||||
SqlFunctionCtx* createSqlFunctionCtx(SExprInfo* pExprInfo, int32_t numOfOutput, int32_t** rowCellInfoOffset);
|
SqlFunctionCtx* createSqlFunctionCtx(SExprInfo* pExprInfo, int32_t numOfOutput, int32_t** rowCellInfoOffset);
|
||||||
|
|
||||||
SOperatorInfo* createExchangeOperatorInfo(const SNodeList* pSources, SSDataBlock* pBlock, SExecTaskInfo* pTaskInfo);
|
SOperatorInfo* createExchangeOperatorInfo(const SNodeList* pSources, SSDataBlock* pBlock, SExecTaskInfo* pTaskInfo);
|
||||||
|
|
||||||
SOperatorInfo* createTableScanOperatorInfo(void* pTsdbReadHandle, int32_t order, int32_t numOfCols, int32_t dataLoadFlag, int32_t repeatTime,
|
SOperatorInfo* createTableScanOperatorInfo(void* pTsdbReadHandle, int32_t order, int32_t numOfCols, int32_t dataLoadFlag, int32_t repeatTime,
|
||||||
int32_t reverseTime, SArray* pColMatchInfo, SSDataBlock* pResBlock, SNode* pCondition, SExecTaskInfo* pTaskInfo);
|
int32_t reverseTime, SArray* pColMatchInfo, SSDataBlock* pResBlock, SNode* pCondition, SExecTaskInfo* pTaskInfo);
|
||||||
SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols, SSDataBlock* pResultBlock, SExprInfo* pScalarExprInfo,
|
SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols, SSDataBlock* pResultBlock, SExprInfo* pScalarExprInfo,
|
||||||
|
@ -624,23 +638,34 @@ SOperatorInfo* createProjectOperatorInfo(SOperatorInfo* downstream, SExprInfo* p
|
||||||
SOperatorInfo *createSortOperatorInfo(SOperatorInfo* downstream, SSDataBlock* pResBlock, SArray* pSortInfo, SArray* pIndexMap, SExecTaskInfo* pTaskInfo);
|
SOperatorInfo *createSortOperatorInfo(SOperatorInfo* downstream, SSDataBlock* pResBlock, SArray* pSortInfo, SArray* pIndexMap, SExecTaskInfo* pTaskInfo);
|
||||||
|
|
||||||
SOperatorInfo* createSortedMergeOperatorInfo(SOperatorInfo** downstream, int32_t numOfDownstream, SExprInfo* pExprInfo, int32_t num, SArray* pSortInfo, SArray* pGroupInfo, SExecTaskInfo* pTaskInfo);
|
SOperatorInfo* createSortedMergeOperatorInfo(SOperatorInfo** downstream, int32_t numOfDownstream, SExprInfo* pExprInfo, int32_t num, SArray* pSortInfo, SArray* pGroupInfo, SExecTaskInfo* pTaskInfo);
|
||||||
|
|
||||||
SOperatorInfo* createSysTableScanOperatorInfo(void* pSysTableReadHandle, SSDataBlock* pResBlock, const SName* pName,
|
SOperatorInfo* createSysTableScanOperatorInfo(void* pSysTableReadHandle, SSDataBlock* pResBlock, const SName* pName,
|
||||||
SNode* pCondition, SEpSet epset, SArray* colList, SExecTaskInfo* pTaskInfo, bool showRewrite, int32_t accountId);
|
SNode* pCondition, SEpSet epset, SArray* colList,
|
||||||
SOperatorInfo* createIntervalOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols, SSDataBlock* pResBlock, SInterval* pInterval, int32_t primaryTsSlot,
|
SExecTaskInfo* pTaskInfo, bool showRewrite, int32_t accountId);
|
||||||
|
SOperatorInfo* createIntervalOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols,
|
||||||
|
SSDataBlock* pResBlock, SInterval* pInterval, int32_t primaryTsSlot,
|
||||||
const STableGroupInfo* pTableGroupInfo, SExecTaskInfo* pTaskInfo);
|
const STableGroupInfo* pTableGroupInfo, SExecTaskInfo* pTaskInfo);
|
||||||
SOperatorInfo* createSessionAggOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols, SSDataBlock* pResBlock, int64_t gap, SExecTaskInfo* pTaskInfo);
|
SOperatorInfo* createSessionAggOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols,
|
||||||
SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols, SSDataBlock* pResultBlock, SArray* pGroupColList,
|
SSDataBlock* pResBlock, int64_t gap, SExecTaskInfo* pTaskInfo);
|
||||||
SNode* pCondition, SExprInfo* pScalarExprInfo, int32_t numOfScalarExpr, SExecTaskInfo* pTaskInfo, const STableGroupInfo* pTableGroupInfo);
|
SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols,
|
||||||
|
SSDataBlock* pResultBlock, SArray* pGroupColList, SNode* pCondition,
|
||||||
|
SExprInfo* pScalarExprInfo, int32_t numOfScalarExpr, SExecTaskInfo* pTaskInfo,
|
||||||
|
const STableGroupInfo* pTableGroupInfo);
|
||||||
SOperatorInfo* createDataBlockInfoScanOperator(void* dataReader, SExecTaskInfo* pTaskInfo);
|
SOperatorInfo* createDataBlockInfoScanOperator(void* dataReader, SExecTaskInfo* pTaskInfo);
|
||||||
SOperatorInfo* createStreamScanOperatorInfo(void* streamReadHandle, SSDataBlock* pResBlock, SArray* pColList, SArray* pTableIdList, SExecTaskInfo* pTaskInfo);
|
SOperatorInfo* createStreamScanOperatorInfo(void* streamReadHandle, SSDataBlock* pResBlock, SArray* pColList,
|
||||||
|
SArray* pTableIdList, SExecTaskInfo* pTaskInfo);
|
||||||
|
|
||||||
SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExpr, int32_t numOfCols, SInterval* pInterval, SSDataBlock* pResBlock,
|
SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExpr, int32_t numOfCols,
|
||||||
int32_t fillType, char* fillVal, bool multigroupResult, SExecTaskInfo* pTaskInfo);
|
SInterval* pInterval, SSDataBlock* pResBlock, int32_t fillType, char* fillVal,
|
||||||
SOperatorInfo* createStatewindowOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExpr, int32_t numOfCols, SSDataBlock* pResBlock, SExecTaskInfo* pTaskInfo);
|
bool multigroupResult, SExecTaskInfo* pTaskInfo);
|
||||||
|
SOperatorInfo* createStatewindowOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExpr, int32_t numOfCols,
|
||||||
|
SSDataBlock* pResBlock, SExecTaskInfo* pTaskInfo);
|
||||||
|
|
||||||
SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols, SSDataBlock* pResultBlock, SArray* pGroupColList,
|
SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols,
|
||||||
SExecTaskInfo* pTaskInfo, const STableGroupInfo* pTableGroupInfo);
|
SSDataBlock* pResultBlock, SArray* pGroupColList, SExecTaskInfo* pTaskInfo,
|
||||||
SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols, SSDataBlock* pResultBlock, SExecTaskInfo* pTaskInfo);
|
const STableGroupInfo* pTableGroupInfo);
|
||||||
|
SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SExprInfo* pExprInfo, int32_t numOfCols,
|
||||||
|
SSDataBlock* pResultBlock, SExecTaskInfo* pTaskInfo);
|
||||||
|
|
||||||
SOperatorInfo* createJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, SExprInfo* pExprInfo, int32_t numOfCols, SSDataBlock* pResBlock, SNode* pOnCondition, SExecTaskInfo* pTaskInfo);
|
SOperatorInfo* createJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, SExprInfo* pExprInfo, int32_t numOfCols, SSDataBlock* pResBlock, SNode* pOnCondition, SExecTaskInfo* pTaskInfo);
|
||||||
|
|
||||||
|
@ -651,7 +676,8 @@ SOperatorInfo* createMultiTableTimeIntervalOperatorInfo(STaskRuntimeEnv* pRuntim
|
||||||
SOperatorInfo* createTagScanOperatorInfo(SReaderHandle* pReaderHandle, SExprInfo* pExpr, int32_t numOfOutput);
|
SOperatorInfo* createTagScanOperatorInfo(SReaderHandle* pReaderHandle, SExprInfo* pExpr, int32_t numOfOutput);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBlock* pSrcBlock, SqlFunctionCtx* pCtx, int32_t numOfOutput, SArray* pPseudoList);
|
void projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBlock* pSrcBlock, SqlFunctionCtx* pCtx,
|
||||||
|
int32_t numOfOutput, SArray* pPseudoList);
|
||||||
|
|
||||||
void setInputDataBlock(SOperatorInfo* pOperator, SqlFunctionCtx* pCtx, SSDataBlock* pBlock, int32_t order);
|
void setInputDataBlock(SOperatorInfo* pOperator, SqlFunctionCtx* pCtx, SSDataBlock* pBlock, int32_t order);
|
||||||
|
|
||||||
|
@ -675,11 +701,15 @@ int32_t getMaximumIdleDurationSec();
|
||||||
|
|
||||||
void doInvokeUdf(struct SUdfInfo* pUdfInfo, SqlFunctionCtx* pCtx, int32_t idx, int32_t type);
|
void doInvokeUdf(struct SUdfInfo* pUdfInfo, SqlFunctionCtx* pCtx, int32_t idx, int32_t type);
|
||||||
void setTaskStatus(SExecTaskInfo* pTaskInfo, int8_t status);
|
void setTaskStatus(SExecTaskInfo* pTaskInfo, int8_t status);
|
||||||
int32_t createExecTaskInfoImpl(SSubplan* pPlan, SExecTaskInfo** pTaskInfo, SReadHandle* pHandle, uint64_t taskId, EOPTR_EXEC_MODEL model);
|
int32_t createExecTaskInfoImpl(SSubplan* pPlan, SExecTaskInfo** pTaskInfo, SReadHandle* pHandle, uint64_t taskId,
|
||||||
int32_t getOperatorExplainExecInfo(SOperatorInfo *operatorInfo, SExplainExecInfo **pRes, int32_t *capacity, int32_t *resNum);
|
EOPTR_EXEC_MODEL model);
|
||||||
|
int32_t getOperatorExplainExecInfo(SOperatorInfo* operatorInfo, SExplainExecInfo** pRes, int32_t* capacity,
|
||||||
|
int32_t* resNum);
|
||||||
|
|
||||||
bool aggDecodeResultRow(SOperatorInfo* pOperator, SAggSupporter *pSup, SOptrBasicInfo *pInfo, char* result, int32_t length);
|
bool aggDecodeResultRow(SOperatorInfo* pOperator, SAggSupporter* pSup, SOptrBasicInfo* pInfo, char* result,
|
||||||
void aggEncodeResultRow(SOperatorInfo* pOperator, SAggSupporter *pSup, SOptrBasicInfo *pInfo, char **result, int32_t *length);
|
int32_t length);
|
||||||
|
void aggEncodeResultRow(SOperatorInfo* pOperator, SAggSupporter* pSup, SOptrBasicInfo* pInfo, char** result,
|
||||||
|
int32_t* length);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3
|
||||||
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "filter.h"
|
||||||
|
#include "tglobal.h"
|
||||||
|
|
||||||
|
typedef enum { SFLT_NOT_INDEX, SFLT_COARSE_INDEX, SFLT_ACCURATE_INDEX } SIdxFltStatus;
|
||||||
|
|
||||||
|
SIdxFltStatus idxGetFltStatus(SNode *pFilterNode);
|
||||||
|
// construct tag filter operator later
|
||||||
|
int32_t doFilterTag(const SNode *pFilterNode, SArray *resutl);
|
|
@ -0,0 +1,198 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3
|
||||||
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "indexoperator.h"
|
||||||
|
#include "executorimpl.h"
|
||||||
|
#include "nodes.h"
|
||||||
|
|
||||||
|
typedef struct SIFCtx {
|
||||||
|
int32_t code;
|
||||||
|
SHashObj *pRes; /* element is SScalarParam */
|
||||||
|
} SIFCtx;
|
||||||
|
|
||||||
|
typedef struct SIFParam {
|
||||||
|
SArray * result;
|
||||||
|
SHashObj *pFilter;
|
||||||
|
} SIFParam;
|
||||||
|
// construct tag filter operator later
|
||||||
|
static void destroyTagFilterOperatorInfo(void *param) {
|
||||||
|
STagFilterOperatorInfo *pInfo = (STagFilterOperatorInfo *)param;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sifFreeParam(SIFParam *param) {
|
||||||
|
if (param == NULL) return;
|
||||||
|
taosArrayDestroy(param->result);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t sifInitOperParams(SIFParam *params, SOperatorNode *node, SIFCtx *ctx) {
|
||||||
|
int32_t code = 0;
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
static int32_t sifExecFunction(SFunctionNode *node, SIFCtx *ctx, SIFParam *output) {
|
||||||
|
qError("index-filter not support buildin function");
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
static int32_t sifExecOper(SOperatorNode *node, SIFCtx *ctx, SIFParam *output) {
|
||||||
|
SIFParam *params = NULL;
|
||||||
|
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t sifExecLogic(SLogicConditionNode *node, SIFCtx *ctx, SIFParam *output) { return TSDB_CODE_SUCCESS; }
|
||||||
|
|
||||||
|
static EDealRes sifWalkFunction(SNode *pNode, void *context) {
|
||||||
|
// impl later
|
||||||
|
SFunctionNode *node = (SFunctionNode *)pNode;
|
||||||
|
SIFParam output = {0};
|
||||||
|
|
||||||
|
SIFCtx *ctx = context;
|
||||||
|
ctx->code = sifExecFunction(node, ctx, &output);
|
||||||
|
if (ctx->code != TSDB_CODE_SUCCESS) {
|
||||||
|
return DEAL_RES_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (taosHashPut(ctx->pRes, &pNode, POINTER_BYTES, &output, sizeof(output))) {
|
||||||
|
ctx->code = TSDB_CODE_QRY_OUT_OF_MEMORY;
|
||||||
|
return DEAL_RES_ERROR;
|
||||||
|
}
|
||||||
|
return DEAL_RES_CONTINUE;
|
||||||
|
}
|
||||||
|
static EDealRes sifWalkLogic(SNode *pNode, void *context) {
|
||||||
|
SLogicConditionNode *node = (SLogicConditionNode *)pNode;
|
||||||
|
SIFParam output = {0};
|
||||||
|
|
||||||
|
SIFCtx *ctx = context;
|
||||||
|
ctx->code = sifExecLogic(node, ctx, &output);
|
||||||
|
if (ctx->code) {
|
||||||
|
return DEAL_RES_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (taosHashPut(ctx->pRes, &pNode, POINTER_BYTES, &output, sizeof(output))) {
|
||||||
|
ctx->code = TSDB_CODE_QRY_OUT_OF_MEMORY;
|
||||||
|
return DEAL_RES_ERROR;
|
||||||
|
}
|
||||||
|
return DEAL_RES_CONTINUE;
|
||||||
|
}
|
||||||
|
static EDealRes sifWalkOper(SNode *pNode, void *context) {
|
||||||
|
SOperatorNode *node = (SOperatorNode *)pNode;
|
||||||
|
SIFParam output = {0};
|
||||||
|
|
||||||
|
SIFCtx *ctx = context;
|
||||||
|
ctx->code = sifExecOper(node, ctx, &output);
|
||||||
|
if (ctx->code) {
|
||||||
|
return DEAL_RES_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (taosHashPut(ctx->pRes, &pNode, POINTER_BYTES, &output, sizeof(output))) {
|
||||||
|
ctx->code = TSDB_CODE_QRY_OUT_OF_MEMORY;
|
||||||
|
return DEAL_RES_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return DEAL_RES_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
EDealRes sifCalcWalker(SNode *node, void *context) {
|
||||||
|
if (QUERY_NODE_VALUE == nodeType(node) || QUERY_NODE_NODE_LIST == nodeType(node) ||
|
||||||
|
QUERY_NODE_COLUMN == nodeType(node)) {
|
||||||
|
return DEAL_RES_CONTINUE;
|
||||||
|
}
|
||||||
|
SIFCtx *ctx = (SIFCtx *)context;
|
||||||
|
if (QUERY_NODE_FUNCTION == nodeType(node)) {
|
||||||
|
return sifWalkFunction(node, ctx);
|
||||||
|
}
|
||||||
|
if (QUERY_NODE_LOGIC_CONDITION == nodeType(node)) {
|
||||||
|
return sifWalkLogic(node, ctx);
|
||||||
|
}
|
||||||
|
if (QUERY_NODE_OPERATOR == nodeType(node)) {
|
||||||
|
return sifWalkOper(node, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
qError("invalid node type for index filter calculating, type:%d", nodeType(node));
|
||||||
|
ctx->code = TSDB_CODE_QRY_INVALID_INPUT;
|
||||||
|
return DEAL_RES_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sifFreeRes(SHashObj *res) {
|
||||||
|
void *pIter = taosHashIterate(res, NULL);
|
||||||
|
while (pIter) {
|
||||||
|
SIFParam *p = pIter;
|
||||||
|
if (p) {
|
||||||
|
sifFreeParam(p);
|
||||||
|
}
|
||||||
|
pIter = taosHashIterate(res, pIter);
|
||||||
|
}
|
||||||
|
taosHashCleanup(res);
|
||||||
|
}
|
||||||
|
static int32_t sifCalculate(SNode *pNode, SIFParam *pDst) {
|
||||||
|
if (pNode == NULL || pDst == NULL) {
|
||||||
|
return TSDB_CODE_QRY_INVALID_INPUT;
|
||||||
|
}
|
||||||
|
int32_t code = 0;
|
||||||
|
SIFCtx ctx = {.code = 0};
|
||||||
|
ctx.pRes = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK);
|
||||||
|
if (NULL == ctx.pRes) {
|
||||||
|
qError("index-filter failed to taosHashInit");
|
||||||
|
return TSDB_CODE_QRY_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
nodesWalkExprPostOrder(pNode, sifCalcWalker, &ctx);
|
||||||
|
if (ctx.code != TSDB_CODE_SUCCESS) {
|
||||||
|
return ctx.code;
|
||||||
|
}
|
||||||
|
if (pDst) {
|
||||||
|
SIFParam *res = (SIFParam *)taosHashGet(ctx.pRes, (void *)&pNode, POINTER_BYTES);
|
||||||
|
if (res == NULL) {
|
||||||
|
qError("no valid res in hash, node:(%p), type(%d)", (void *)&pNode, nodeType(pNode));
|
||||||
|
return TSDB_CODE_QRY_APP_ERROR;
|
||||||
|
}
|
||||||
|
taosArrayAddAll(pDst->result, res->result);
|
||||||
|
|
||||||
|
sifFreeParam(res);
|
||||||
|
taosHashRemove(ctx.pRes, (void *)&pNode, POINTER_BYTES);
|
||||||
|
}
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t doFilterTag(const SNode *pFilterNode, SArray *result) {
|
||||||
|
if (pFilterNode == NULL) {
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
SFilterInfo *filter = NULL;
|
||||||
|
// todo move to the initialization function
|
||||||
|
int32_t code = filterInitFromNode((SNode *)pFilterNode, &filter, 0);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
SIFParam param = {0};
|
||||||
|
code = sifCalculate((SNode *)pFilterNode, ¶m);
|
||||||
|
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
taosArrayAddAll(result, param.result);
|
||||||
|
sifFreeParam(¶m);
|
||||||
|
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
SIdxFltStatus idxGetFltStatus(SNode *pFilterNode) {
|
||||||
|
if (pFilterNode == NULL) {
|
||||||
|
return SFLT_NOT_INDEX;
|
||||||
|
}
|
||||||
|
// impl later
|
||||||
|
return SFLT_ACCURATE_INDEX;
|
||||||
|
}
|
|
@ -37,6 +37,7 @@ extern "C" {
|
||||||
#define FUNC_MGT_WINDOW_PC_FUNC FUNC_MGT_FUNC_CLASSIFICATION_MASK(8)
|
#define FUNC_MGT_WINDOW_PC_FUNC FUNC_MGT_FUNC_CLASSIFICATION_MASK(8)
|
||||||
#define FUNC_MGT_SPECIAL_DATA_REQUIRED FUNC_MGT_FUNC_CLASSIFICATION_MASK(9)
|
#define FUNC_MGT_SPECIAL_DATA_REQUIRED FUNC_MGT_FUNC_CLASSIFICATION_MASK(9)
|
||||||
#define FUNC_MGT_DYNAMIC_SCAN_OPTIMIZED FUNC_MGT_FUNC_CLASSIFICATION_MASK(10)
|
#define FUNC_MGT_DYNAMIC_SCAN_OPTIMIZED FUNC_MGT_FUNC_CLASSIFICATION_MASK(10)
|
||||||
|
#define FUNC_MGT_MULTI_RES_FUNC FUNC_MGT_FUNC_CLASSIFICATION_MASK(11)
|
||||||
|
|
||||||
#define FUNC_MGT_TEST_MASK(val, mask) (((val) & (mask)) != 0)
|
#define FUNC_MGT_TEST_MASK(val, mask) (((val) & (mask)) != 0)
|
||||||
|
|
||||||
|
|
|
@ -203,9 +203,9 @@ static int32_t translateLastRow(SFunctionNode* pFunc, char* pErrBuf, int32_t len
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t translateFirstLast(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
|
static int32_t translateFirstLast(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
|
||||||
// first(*)/first(col_list) has been rewritten as first(col)
|
// first(col_list) will be rewritten as first(col)
|
||||||
if (1 != LIST_LENGTH(pFunc->pParameterList)) {
|
if (1 != LIST_LENGTH(pFunc->pParameterList)) {
|
||||||
return invaildFuncParaNumErrMsg(pErrBuf, len, pFunc->functionName);
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
SNode* pPara = nodesListGetNode(pFunc->pParameterList, 0);
|
SNode* pPara = nodesListGetNode(pFunc->pParameterList, 0);
|
||||||
|
@ -370,6 +370,20 @@ static int32_t translateTimeDiff(SFunctionNode* pFunc, char* pErrBuf, int32_t le
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t translateToJson(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
|
||||||
|
if (1 != LIST_LENGTH(pFunc->pParameterList)) {
|
||||||
|
return invaildFuncParaNumErrMsg(pErrBuf, len, pFunc->functionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
SExprNode* pPara = nodesListGetNode(pFunc->pParameterList, 0);
|
||||||
|
if (QUERY_NODE_VALUE != nodeType(pPara) || (!IS_VAR_DATA_TYPE(pPara->resType.type))) {
|
||||||
|
return invaildFuncParaTypeErrMsg(pErrBuf, len, pFunc->functionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
pFunc->node.resType = (SDataType) { .bytes = tDataTypes[TSDB_DATA_TYPE_JSON].bytes, .type = TSDB_DATA_TYPE_JSON};
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
||||||
{
|
{
|
||||||
.name = "count",
|
.name = "count",
|
||||||
|
@ -475,7 +489,7 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
||||||
{
|
{
|
||||||
.name = "last_row",
|
.name = "last_row",
|
||||||
.type = FUNCTION_TYPE_LAST_ROW,
|
.type = FUNCTION_TYPE_LAST_ROW,
|
||||||
.classification = FUNC_MGT_AGG_FUNC,
|
.classification = FUNC_MGT_AGG_FUNC | FUNC_MGT_MULTI_RES_FUNC,
|
||||||
.translateFunc = translateLastRow,
|
.translateFunc = translateLastRow,
|
||||||
.getEnvFunc = getMinmaxFuncEnv,
|
.getEnvFunc = getMinmaxFuncEnv,
|
||||||
.initFunc = maxFunctionSetup,
|
.initFunc = maxFunctionSetup,
|
||||||
|
@ -485,7 +499,7 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
||||||
{
|
{
|
||||||
.name = "first",
|
.name = "first",
|
||||||
.type = FUNCTION_TYPE_FIRST,
|
.type = FUNCTION_TYPE_FIRST,
|
||||||
.classification = FUNC_MGT_AGG_FUNC,
|
.classification = FUNC_MGT_AGG_FUNC | FUNC_MGT_MULTI_RES_FUNC,
|
||||||
.translateFunc = translateFirstLast,
|
.translateFunc = translateFirstLast,
|
||||||
.getEnvFunc = getFirstLastFuncEnv,
|
.getEnvFunc = getFirstLastFuncEnv,
|
||||||
.initFunc = functionSetup,
|
.initFunc = functionSetup,
|
||||||
|
@ -495,7 +509,7 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
||||||
{
|
{
|
||||||
.name = "last",
|
.name = "last",
|
||||||
.type = FUNCTION_TYPE_LAST,
|
.type = FUNCTION_TYPE_LAST,
|
||||||
.classification = FUNC_MGT_AGG_FUNC,
|
.classification = FUNC_MGT_AGG_FUNC | FUNC_MGT_MULTI_RES_FUNC,
|
||||||
.translateFunc = translateFirstLast,
|
.translateFunc = translateFirstLast,
|
||||||
.getEnvFunc = getFirstLastFuncEnv,
|
.getEnvFunc = getFirstLastFuncEnv,
|
||||||
.initFunc = functionSetup,
|
.initFunc = functionSetup,
|
||||||
|
@ -871,6 +885,16 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
||||||
.initFunc = NULL,
|
.initFunc = NULL,
|
||||||
.sprocessFunc = winDurFunction,
|
.sprocessFunc = winDurFunction,
|
||||||
.finalizeFunc = NULL
|
.finalizeFunc = NULL
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "to_json",
|
||||||
|
.type = FUNCTION_TYPE_TO_JSON,
|
||||||
|
.classification = FUNC_MGT_SCALAR_FUNC,
|
||||||
|
.translateFunc = translateToJson,
|
||||||
|
.getEnvFunc = NULL,
|
||||||
|
.initFunc = NULL,
|
||||||
|
.sprocessFunc = NULL,
|
||||||
|
.finalizeFunc = NULL
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -138,6 +138,10 @@ bool fmIsDynamicScanOptimizedFunc(int32_t funcId) {
|
||||||
return isSpecificClassifyFunc(funcId, FUNC_MGT_DYNAMIC_SCAN_OPTIMIZED);
|
return isSpecificClassifyFunc(funcId, FUNC_MGT_DYNAMIC_SCAN_OPTIMIZED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool fmIsMultiResFunc(int32_t funcId) {
|
||||||
|
return isSpecificClassifyFunc(funcId, FUNC_MGT_MULTI_RES_FUNC);
|
||||||
|
}
|
||||||
|
|
||||||
void fmFuncMgtDestroy() {
|
void fmFuncMgtDestroy() {
|
||||||
void* m = gFunMgtService.pFuncNameHashTable;
|
void* m = gFunMgtService.pFuncNameHashTable;
|
||||||
if (m != NULL && atomic_val_compare_exchange_ptr((void**)&gFunMgtService.pFuncNameHashTable, m, 0) == m) {
|
if (m != NULL && atomic_val_compare_exchange_ptr((void**)&gFunMgtService.pFuncNameHashTable, m, 0) == m) {
|
||||||
|
|
|
@ -84,6 +84,8 @@ SNodeptr nodesMakeNode(ENodeType type) {
|
||||||
return makeNode(type, sizeof(SIndexOptions));
|
return makeNode(type, sizeof(SIndexOptions));
|
||||||
case QUERY_NODE_EXPLAIN_OPTIONS:
|
case QUERY_NODE_EXPLAIN_OPTIONS:
|
||||||
return makeNode(type, sizeof(SExplainOptions));
|
return makeNode(type, sizeof(SExplainOptions));
|
||||||
|
case QUERY_NODE_STREAM_OPTIONS:
|
||||||
|
return makeNode(type, sizeof(SStreamOptions));
|
||||||
case QUERY_NODE_SET_OPERATOR:
|
case QUERY_NODE_SET_OPERATOR:
|
||||||
return makeNode(type, sizeof(SSetOperator));
|
return makeNode(type, sizeof(SSetOperator));
|
||||||
case QUERY_NODE_SELECT_STMT:
|
case QUERY_NODE_SELECT_STMT:
|
||||||
|
@ -146,6 +148,19 @@ SNodeptr nodesMakeNode(ENodeType type) {
|
||||||
return makeNode(type, sizeof(SDescribeStmt));
|
return makeNode(type, sizeof(SDescribeStmt));
|
||||||
case QUERY_NODE_RESET_QUERY_CACHE_STMT:
|
case QUERY_NODE_RESET_QUERY_CACHE_STMT:
|
||||||
return makeNode(type, sizeof(SNode));
|
return makeNode(type, sizeof(SNode));
|
||||||
|
case QUERY_NODE_COMPACT_STMT:
|
||||||
|
case QUERY_NODE_CREATE_FUNCTION_STMT:
|
||||||
|
case QUERY_NODE_DROP_FUNCTION_STMT:
|
||||||
|
break;
|
||||||
|
case QUERY_NODE_CREATE_STREAM_STMT:
|
||||||
|
return makeNode(type, sizeof(SCreateStreamStmt));
|
||||||
|
case QUERY_NODE_DROP_STREAM_STMT:
|
||||||
|
return makeNode(type, sizeof(SDropStreamStmt));
|
||||||
|
case QUERY_NODE_MERGE_VGROUP_STMT:
|
||||||
|
case QUERY_NODE_REDISTRIBUTE_VGROUP_STMT:
|
||||||
|
case QUERY_NODE_SPLIT_VGROUP_STMT:
|
||||||
|
case QUERY_NODE_SYNCDB_STMT:
|
||||||
|
break;
|
||||||
case QUERY_NODE_SHOW_DNODES_STMT:
|
case QUERY_NODE_SHOW_DNODES_STMT:
|
||||||
case QUERY_NODE_SHOW_MNODES_STMT:
|
case QUERY_NODE_SHOW_MNODES_STMT:
|
||||||
case QUERY_NODE_SHOW_MODULES_STMT:
|
case QUERY_NODE_SHOW_MODULES_STMT:
|
||||||
|
@ -169,7 +184,16 @@ SNodeptr nodesMakeNode(ENodeType type) {
|
||||||
case QUERY_NODE_SHOW_CONFIGS_STMT:
|
case QUERY_NODE_SHOW_CONFIGS_STMT:
|
||||||
case QUERY_NODE_SHOW_QUERIES_STMT:
|
case QUERY_NODE_SHOW_QUERIES_STMT:
|
||||||
case QUERY_NODE_SHOW_VNODES_STMT:
|
case QUERY_NODE_SHOW_VNODES_STMT:
|
||||||
|
case QUERY_NODE_SHOW_APPS_STMT:
|
||||||
|
case QUERY_NODE_SHOW_SCORES_STMT:
|
||||||
|
case QUERY_NODE_SHOW_VARIABLE_STMT:
|
||||||
|
case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
|
||||||
|
case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
|
||||||
|
case QUERY_NODE_SHOW_CREATE_STABLE_STMT:
|
||||||
return makeNode(type, sizeof(SShowStmt));
|
return makeNode(type, sizeof(SShowStmt));
|
||||||
|
case QUERY_NODE_KILL_CONNECTION_STMT:
|
||||||
|
case QUERY_NODE_KILL_QUERY_STMT:
|
||||||
|
return makeNode(type, sizeof(SKillStmt));
|
||||||
case QUERY_NODE_LOGIC_PLAN_SCAN:
|
case QUERY_NODE_LOGIC_PLAN_SCAN:
|
||||||
return makeNode(type, sizeof(SScanLogicNode));
|
return makeNode(type, sizeof(SScanLogicNode));
|
||||||
case QUERY_NODE_LOGIC_PLAN_JOIN:
|
case QUERY_NODE_LOGIC_PLAN_JOIN:
|
||||||
|
@ -675,6 +699,7 @@ int32_t nodesListAppend(SNodeList* pList, SNodeptr pNode) {
|
||||||
if (NULL != pList->pTail) {
|
if (NULL != pList->pTail) {
|
||||||
pList->pTail->pNext = p;
|
pList->pTail->pNext = p;
|
||||||
}
|
}
|
||||||
|
p->pPrev = pList->pTail;
|
||||||
pList->pTail = p;
|
pList->pTail = p;
|
||||||
++(pList->length);
|
++(pList->length);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
|
|
@ -86,6 +86,7 @@ SNode* createColumnNode(SAstCreateContext* pCxt, SToken* pTableAlias, SToken* pC
|
||||||
SNode* createValueNode(SAstCreateContext* pCxt, int32_t dataType, const SToken* pLiteral);
|
SNode* createValueNode(SAstCreateContext* pCxt, int32_t dataType, const SToken* pLiteral);
|
||||||
SNode* createDurationValueNode(SAstCreateContext* pCxt, const SToken* pLiteral);
|
SNode* createDurationValueNode(SAstCreateContext* pCxt, const SToken* pLiteral);
|
||||||
SNode* createDefaultDatabaseCondValue(SAstCreateContext* pCxt);
|
SNode* createDefaultDatabaseCondValue(SAstCreateContext* pCxt);
|
||||||
|
SNode* createPlaceholderValueNode(SAstCreateContext* pCxt);
|
||||||
SNode* setProjectionAlias(SAstCreateContext* pCxt, SNode* pNode, const SToken* pAlias);
|
SNode* setProjectionAlias(SAstCreateContext* pCxt, SNode* pNode, const SToken* pAlias);
|
||||||
SNode* createLogicConditionNode(SAstCreateContext* pCxt, ELogicConditionType type, SNode* pParam1, SNode* pParam2);
|
SNode* createLogicConditionNode(SAstCreateContext* pCxt, ELogicConditionType type, SNode* pParam1, SNode* pParam2);
|
||||||
SNode* createOperatorNode(SAstCreateContext* pCxt, EOperatorType type, SNode* pLeft, SNode* pRight);
|
SNode* createOperatorNode(SAstCreateContext* pCxt, EOperatorType type, SNode* pLeft, SNode* pRight);
|
||||||
|
@ -166,8 +167,9 @@ SNode* createResetQueryCacheStmt(SAstCreateContext* pCxt);
|
||||||
SNode* createCompactStmt(SAstCreateContext* pCxt, SNodeList* pVgroups);
|
SNode* createCompactStmt(SAstCreateContext* pCxt, SNodeList* pVgroups);
|
||||||
SNode* createCreateFunctionStmt(SAstCreateContext* pCxt, bool aggFunc, const SToken* pFuncName, const SToken* pLibPath, SDataType dataType, int32_t bufSize);
|
SNode* createCreateFunctionStmt(SAstCreateContext* pCxt, bool aggFunc, const SToken* pFuncName, const SToken* pLibPath, SDataType dataType, int32_t bufSize);
|
||||||
SNode* createDropFunctionStmt(SAstCreateContext* pCxt, const SToken* pFuncName);
|
SNode* createDropFunctionStmt(SAstCreateContext* pCxt, const SToken* pFuncName);
|
||||||
SNode* createCreateStreamStmt(SAstCreateContext* pCxt, const SToken* pStreamName, const SToken* pTableName, SNode* pQuery);
|
SNode* createStreamOptions(SAstCreateContext* pCxt);
|
||||||
SNode* createDropStreamStmt(SAstCreateContext* pCxt, const SToken* pStreamName);
|
SNode* createCreateStreamStmt(SAstCreateContext* pCxt, bool ignoreExists, const SToken* pStreamName, SNode* pRealTable, SNode* pOptions, SNode* pQuery);
|
||||||
|
SNode* createDropStreamStmt(SAstCreateContext* pCxt, bool ignoreNotExists, const SToken* pStreamName);
|
||||||
SNode* createKillStmt(SAstCreateContext* pCxt, ENodeType type, const SToken* pId);
|
SNode* createKillStmt(SAstCreateContext* pCxt, ENodeType type, const SToken* pId);
|
||||||
SNode* createMergeVgroupStmt(SAstCreateContext* pCxt, const SToken* pVgId1, const SToken* pVgId2);
|
SNode* createMergeVgroupStmt(SAstCreateContext* pCxt, const SToken* pVgId1, const SToken* pVgId2);
|
||||||
SNode* createRedistributeVgroupStmt(SAstCreateContext* pCxt, const SToken* pVgId, SNodeList* pDnodes);
|
SNode* createRedistributeVgroupStmt(SAstCreateContext* pCxt, const SToken* pVgId, SNodeList* pDnodes);
|
||||||
|
|
|
@ -293,6 +293,7 @@ tags_def(A) ::= TAGS NK_LP column_def_list(B) NK_RP.
|
||||||
table_options(A) ::= . { A = createTableOptions(pCxt); }
|
table_options(A) ::= . { A = createTableOptions(pCxt); }
|
||||||
table_options(A) ::= table_options(B) COMMENT NK_STRING(C). { ((STableOptions*)B)->pComments = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C); A = B; }
|
table_options(A) ::= table_options(B) COMMENT NK_STRING(C). { ((STableOptions*)B)->pComments = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C); A = B; }
|
||||||
table_options(A) ::= table_options(B) KEEP integer_list(C). { ((STableOptions*)B)->pKeep = C; A = B; }
|
table_options(A) ::= table_options(B) KEEP integer_list(C). { ((STableOptions*)B)->pKeep = C; A = B; }
|
||||||
|
table_options(A) ::= table_options(B) KEEP variable_list(C). { ((STableOptions*)B)->pKeep = C; A = B; }
|
||||||
table_options(A) ::= table_options(B) TTL NK_INTEGER(C). { ((STableOptions*)B)->pTtl = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
|
table_options(A) ::= table_options(B) TTL NK_INTEGER(C). { ((STableOptions*)B)->pTtl = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C); A = B; }
|
||||||
table_options(A) ::= table_options(B) SMA NK_LP col_name_list(C) NK_RP. { ((STableOptions*)B)->pSma = C; A = B; }
|
table_options(A) ::= table_options(B) SMA NK_LP col_name_list(C) NK_RP. { ((STableOptions*)B)->pSma = C; A = B; }
|
||||||
table_options(A) ::= table_options(B) ROLLUP NK_LP func_name_list(C) NK_RP. { ((STableOptions*)B)->pFuncs = C; A = B; }
|
table_options(A) ::= table_options(B) ROLLUP NK_LP func_name_list(C) NK_RP. { ((STableOptions*)B)->pFuncs = C; A = B; }
|
||||||
|
@ -306,6 +307,7 @@ alter_table_options(A) ::= alter_table_options(B) alter_table_option(C).
|
||||||
%destructor alter_table_option { }
|
%destructor alter_table_option { }
|
||||||
alter_table_option(A) ::= COMMENT NK_STRING(B). { A.type = TABLE_OPTION_COMMENT; A.pVal = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
|
alter_table_option(A) ::= COMMENT NK_STRING(B). { A.type = TABLE_OPTION_COMMENT; A.pVal = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
|
||||||
alter_table_option(A) ::= KEEP integer_list(B). { A.type = TABLE_OPTION_KEEP; A.pList = B; }
|
alter_table_option(A) ::= KEEP integer_list(B). { A.type = TABLE_OPTION_KEEP; A.pList = B; }
|
||||||
|
alter_table_option(A) ::= KEEP variable_list(B). { A.type = TABLE_OPTION_KEEP; A.pList = B; }
|
||||||
alter_table_option(A) ::= TTL NK_INTEGER(B). { A.type = TABLE_OPTION_TTL; A.pVal = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
|
alter_table_option(A) ::= TTL NK_INTEGER(B). { A.type = TABLE_OPTION_TTL; A.pVal = (SValueNode*)createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
|
||||||
|
|
||||||
%type col_name_list { SNodeList* }
|
%type col_name_list { SNodeList* }
|
||||||
|
@ -424,8 +426,17 @@ bufsize_opt(A) ::= .
|
||||||
bufsize_opt(A) ::= BUFSIZE NK_INTEGER(B). { A = strtol(B.z, NULL, 10); }
|
bufsize_opt(A) ::= BUFSIZE NK_INTEGER(B). { A = strtol(B.z, NULL, 10); }
|
||||||
|
|
||||||
/************************************************ create/drop stream **************************************************/
|
/************************************************ create/drop stream **************************************************/
|
||||||
cmd ::= CREATE STREAM stream_name(A) INTO table_name(B) AS query_expression(C). { pCxt->pRootNode = createCreateStreamStmt(pCxt, &A, &B, C); }
|
cmd ::= CREATE STREAM not_exists_opt(E) stream_name(A)
|
||||||
cmd ::= DROP STREAM stream_name(A). { pCxt->pRootNode = createDropStreamStmt(pCxt, &A); }
|
stream_options(B) into_opt(C) AS query_expression(D). { pCxt->pRootNode = createCreateStreamStmt(pCxt, E, &A, B, C, D); }
|
||||||
|
cmd ::= DROP STREAM exists_opt(A) stream_name(B). { pCxt->pRootNode = createDropStreamStmt(pCxt, A, &B); }
|
||||||
|
|
||||||
|
into_opt(A) ::= . { A = NULL; }
|
||||||
|
into_opt(A) ::= INTO full_table_name(B). { A = B; }
|
||||||
|
|
||||||
|
stream_options(A) ::= . { A = createStreamOptions(pCxt); }
|
||||||
|
stream_options(A) ::= stream_options(B) TRIGGER AT_ONCE. { ((SStreamOptions*)B)->triggerType = STREAM_TRIGGER_AT_ONCE; A = B; }
|
||||||
|
stream_options(A) ::= stream_options(B) TRIGGER WINDOW_CLOSE. { ((SStreamOptions*)B)->triggerType = STREAM_TRIGGER_WINDOW_CLOSE; A = B; }
|
||||||
|
stream_options(A) ::= stream_options(B) WATERMARK duration_literal(C). { ((SStreamOptions*)B)->pWatermark = releaseRawExprNode(pCxt, C); A = B; }
|
||||||
|
|
||||||
/************************************************ kill connection/query ***********************************************/
|
/************************************************ kill connection/query ***********************************************/
|
||||||
cmd ::= KILL CONNECTION NK_INTEGER(A). { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &A); }
|
cmd ::= KILL CONNECTION NK_INTEGER(A). { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &A); }
|
||||||
|
@ -455,6 +466,7 @@ literal(A) ::= NK_BOOL(B).
|
||||||
literal(A) ::= TIMESTAMP(B) NK_STRING(C). { A = createRawExprNodeExt(pCxt, &B, &C, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &C)); }
|
literal(A) ::= TIMESTAMP(B) NK_STRING(C). { A = createRawExprNodeExt(pCxt, &B, &C, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &C)); }
|
||||||
literal(A) ::= duration_literal(B). { A = B; }
|
literal(A) ::= duration_literal(B). { A = B; }
|
||||||
literal(A) ::= NULL(B). { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, NULL)); }
|
literal(A) ::= NULL(B). { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, NULL)); }
|
||||||
|
literal(A) ::= NK_QUESTION(B). { A = createRawExprNode(pCxt, &B, createPlaceholderValueNode(pCxt)); }
|
||||||
|
|
||||||
duration_literal(A) ::= NK_VARIABLE(B). { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
|
duration_literal(A) ::= NK_VARIABLE(B). { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
|
||||||
|
|
||||||
|
@ -501,10 +513,6 @@ column_name(A) ::= NK_ID(B).
|
||||||
%type function_name { SToken }
|
%type function_name { SToken }
|
||||||
%destructor function_name { }
|
%destructor function_name { }
|
||||||
function_name(A) ::= NK_ID(B). { A = B; }
|
function_name(A) ::= NK_ID(B). { A = B; }
|
||||||
function_name(A) ::= FIRST(B). { A = B; }
|
|
||||||
function_name(A) ::= LAST(B). { A = B; }
|
|
||||||
function_name(A) ::= NOW(B). { A = B; }
|
|
||||||
function_name(A) ::= TODAY(B). { A = B; }
|
|
||||||
|
|
||||||
%type table_alias { SToken }
|
%type table_alias { SToken }
|
||||||
%destructor table_alias { }
|
%destructor table_alias { }
|
||||||
|
@ -532,13 +540,9 @@ stream_name(A) ::= NK_ID(B).
|
||||||
|
|
||||||
/************************************************ expression **********************************************************/
|
/************************************************ expression **********************************************************/
|
||||||
expression(A) ::= literal(B). { A = B; }
|
expression(A) ::= literal(B). { A = B; }
|
||||||
//expression(A) ::= NK_QUESTION(B). { A = B; }
|
|
||||||
expression(A) ::= pseudo_column(B). { A = B; }
|
expression(A) ::= pseudo_column(B). { A = B; }
|
||||||
expression(A) ::= column_reference(B). { A = B; }
|
expression(A) ::= column_reference(B). { A = B; }
|
||||||
expression(A) ::= function_name(B) NK_LP expression_list(C) NK_RP(D). { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
|
expression(A) ::= function_expression(B). { A = B; }
|
||||||
expression(A) ::= function_name(B) NK_LP NK_STAR(C) NK_RP(D). { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, createNodeList(pCxt, createColumnNode(pCxt, NULL, &C)))); }
|
|
||||||
expression(A) ::= function_name(B) NK_LP NK_RP(D). { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNodeNoParam(pCxt, &B)); }
|
|
||||||
expression(A) ::= CAST(B) NK_LP expression(C) AS type_name(D) NK_RP(E). { A = createRawExprNodeExt(pCxt, &B, &E, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, C), D)); }
|
|
||||||
//expression(A) ::= case_expression(B). { A = B; }
|
//expression(A) ::= case_expression(B). { A = B; }
|
||||||
expression(A) ::= subquery(B). { A = B; }
|
expression(A) ::= subquery(B). { A = B; }
|
||||||
expression(A) ::= NK_LP(B) expression(C) NK_RP(D). { A = createRawExprNodeExt(pCxt, &B, &D, releaseRawExprNode(pCxt, C)); }
|
expression(A) ::= NK_LP(B) expression(C) NK_RP(D). { A = createRawExprNodeExt(pCxt, &B, &D, releaseRawExprNode(pCxt, C)); }
|
||||||
|
@ -575,6 +579,10 @@ expression(A) ::= expression(B) NK_REM expression(C).
|
||||||
SToken e = getTokenFromRawExprNode(pCxt, C);
|
SToken e = getTokenFromRawExprNode(pCxt, C);
|
||||||
A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MOD, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
|
A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MOD, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
|
||||||
}
|
}
|
||||||
|
expression(A) ::= column_reference(B) NK_ARROW NK_STRING(C). {
|
||||||
|
SToken s = getTokenFromRawExprNode(pCxt, B);
|
||||||
|
A = createRawExprNodeExt(pCxt, &s, &C, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, B), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C)));
|
||||||
|
}
|
||||||
|
|
||||||
%type expression_list { SNodeList* }
|
%type expression_list { SNodeList* }
|
||||||
%destructor expression_list { nodesDestroyList($$); }
|
%destructor expression_list { nodesDestroyList($$); }
|
||||||
|
@ -584,8 +592,6 @@ expression_list(A) ::= expression_list(B) NK_COMMA expression(C).
|
||||||
column_reference(A) ::= column_name(B). { A = createRawExprNode(pCxt, &B, createColumnNode(pCxt, NULL, &B)); }
|
column_reference(A) ::= column_name(B). { A = createRawExprNode(pCxt, &B, createColumnNode(pCxt, NULL, &B)); }
|
||||||
column_reference(A) ::= table_name(B) NK_DOT column_name(C). { A = createRawExprNodeExt(pCxt, &B, &C, createColumnNode(pCxt, &B, &C)); }
|
column_reference(A) ::= table_name(B) NK_DOT column_name(C). { A = createRawExprNodeExt(pCxt, &B, &C, createColumnNode(pCxt, &B, &C)); }
|
||||||
|
|
||||||
//pseudo_column(A) ::= NOW(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
|
||||||
//pseudo_column(A) ::= TODAY(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
|
||||||
pseudo_column(A) ::= ROWTS(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
pseudo_column(A) ::= ROWTS(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
||||||
pseudo_column(A) ::= TBNAME(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
pseudo_column(A) ::= TBNAME(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
||||||
pseudo_column(A) ::= QSTARTTS(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
pseudo_column(A) ::= QSTARTTS(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
||||||
|
@ -594,6 +600,36 @@ pseudo_column(A) ::= WSTARTTS(B).
|
||||||
pseudo_column(A) ::= WENDTS(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
pseudo_column(A) ::= WENDTS(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
||||||
pseudo_column(A) ::= WDURATION(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
pseudo_column(A) ::= WDURATION(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
||||||
|
|
||||||
|
function_expression(A) ::= function_name(B) NK_LP expression_list(C) NK_RP(D). { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
|
||||||
|
function_expression(A) ::= star_func(B) NK_LP star_func_para_list(C) NK_RP(D). { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
|
||||||
|
function_expression(A) ::= CAST(B) NK_LP expression(C) AS type_name(D) NK_RP(E). { A = createRawExprNodeExt(pCxt, &B, &E, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, C), D)); }
|
||||||
|
function_expression(A) ::= noarg_func(B) NK_LP NK_RP(C). { A = createRawExprNodeExt(pCxt, &B, &C, createFunctionNode(pCxt, &B, NULL)); }
|
||||||
|
|
||||||
|
%type noarg_func { SToken }
|
||||||
|
%destructor noarg_func { }
|
||||||
|
noarg_func(A) ::= NOW(B). { A = B; }
|
||||||
|
noarg_func(A) ::= TODAY(B). { A = B; }
|
||||||
|
|
||||||
|
%type star_func { SToken }
|
||||||
|
%destructor star_func { }
|
||||||
|
star_func(A) ::= COUNT(B). { A = B; }
|
||||||
|
star_func(A) ::= FIRST(B). { A = B; }
|
||||||
|
star_func(A) ::= LAST(B). { A = B; }
|
||||||
|
star_func(A) ::= LAST_ROW(B). { A = B; }
|
||||||
|
|
||||||
|
%type star_func_para_list { SNodeList* }
|
||||||
|
%destructor star_func_para_list { nodesDestroyList($$); }
|
||||||
|
star_func_para_list(A) ::= NK_STAR(B). { A = createNodeList(pCxt, createColumnNode(pCxt, NULL, &B)); }
|
||||||
|
star_func_para_list(A) ::= other_para_list(B). { A = B; }
|
||||||
|
|
||||||
|
%type other_para_list { SNodeList* }
|
||||||
|
%destructor other_para_list { nodesDestroyList($$); }
|
||||||
|
other_para_list(A) ::= star_func_para(B). { A = createNodeList(pCxt, B); }
|
||||||
|
other_para_list(A) ::= other_para_list(B) NK_COMMA star_func_para(C). { A = addNodeToList(pCxt, B, C); }
|
||||||
|
|
||||||
|
star_func_para(A) ::= expression(B). { A = releaseRawExprNode(pCxt, B); }
|
||||||
|
star_func_para(A) ::= table_name(B) NK_DOT NK_STAR(C). { A = createColumnNode(pCxt, &B, &C); }
|
||||||
|
|
||||||
/************************************************ predicate ***********************************************************/
|
/************************************************ predicate ***********************************************************/
|
||||||
predicate(A) ::= expression(B) compare_op(C) expression(D). {
|
predicate(A) ::= expression(B) compare_op(C) expression(D). {
|
||||||
SToken s = getTokenFromRawExprNode(pCxt, B);
|
SToken s = getTokenFromRawExprNode(pCxt, B);
|
||||||
|
@ -637,6 +673,7 @@ compare_op(A) ::= LIKE.
|
||||||
compare_op(A) ::= NOT LIKE. { A = OP_TYPE_NOT_LIKE; }
|
compare_op(A) ::= NOT LIKE. { A = OP_TYPE_NOT_LIKE; }
|
||||||
compare_op(A) ::= MATCH. { A = OP_TYPE_MATCH; }
|
compare_op(A) ::= MATCH. { A = OP_TYPE_MATCH; }
|
||||||
compare_op(A) ::= NMATCH. { A = OP_TYPE_NMATCH; }
|
compare_op(A) ::= NMATCH. { A = OP_TYPE_NMATCH; }
|
||||||
|
compare_op(A) ::= CONTAINS. { A = OP_TYPE_JSON_CONTAINS; }
|
||||||
|
|
||||||
%type in_op { EOperatorType }
|
%type in_op { EOperatorType }
|
||||||
%destructor in_op { }
|
%destructor in_op { }
|
||||||
|
|
|
@ -305,6 +305,13 @@ SNode* createDefaultDatabaseCondValue(SAstCreateContext* pCxt) {
|
||||||
return (SNode*)val;
|
return (SNode*)val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SNode* createPlaceholderValueNode(SAstCreateContext* pCxt) {
|
||||||
|
SValueNode* val = (SValueNode*)nodesMakeNode(QUERY_NODE_VALUE);
|
||||||
|
CHECK_OUT_OF_MEM(val);
|
||||||
|
// todo
|
||||||
|
return (SNode*)val;
|
||||||
|
}
|
||||||
|
|
||||||
SNode* createLogicConditionNode(SAstCreateContext* pCxt, ELogicConditionType type, SNode* pParam1, SNode* pParam2) {
|
SNode* createLogicConditionNode(SAstCreateContext* pCxt, ELogicConditionType type, SNode* pParam1, SNode* pParam2) {
|
||||||
SLogicConditionNode* cond = (SLogicConditionNode*)nodesMakeNode(QUERY_NODE_LOGIC_CONDITION);
|
SLogicConditionNode* cond = (SLogicConditionNode*)nodesMakeNode(QUERY_NODE_LOGIC_CONDITION);
|
||||||
CHECK_OUT_OF_MEM(cond);
|
CHECK_OUT_OF_MEM(cond);
|
||||||
|
@ -944,6 +951,18 @@ SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type, SNode* pDbName, S
|
||||||
return (SNode*)pStmt;
|
return (SNode*)pStmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SNode* createShowCreateDatabaseStmt(SAstCreateContext* pCxt, const SToken* pDbName) {
|
||||||
|
SNode* pStmt = nodesMakeNode(QUERY_NODE_SHOW_CREATE_DATABASE_STMT);
|
||||||
|
CHECK_OUT_OF_MEM(pStmt);
|
||||||
|
return pStmt;
|
||||||
|
}
|
||||||
|
|
||||||
|
SNode* createShowCreateTableStmt(SAstCreateContext* pCxt, ENodeType type, SNode* pRealTable) {
|
||||||
|
SNode* pStmt = nodesMakeNode(type);
|
||||||
|
CHECK_OUT_OF_MEM(pStmt);
|
||||||
|
return pStmt;
|
||||||
|
}
|
||||||
|
|
||||||
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword) {
|
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword) {
|
||||||
char password[TSDB_USET_PASSWORD_LEN] = {0};
|
char password[TSDB_USET_PASSWORD_LEN] = {0};
|
||||||
if (!checkUserName(pCxt, pUserName) || !checkPassword(pCxt, pPassword, password)) {
|
if (!checkUserName(pCxt, pUserName) || !checkPassword(pCxt, pPassword, password)) {
|
||||||
|
@ -1175,16 +1194,34 @@ SNode* createDropFunctionStmt(SAstCreateContext* pCxt, const SToken* pFuncName)
|
||||||
return pStmt;
|
return pStmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
SNode* createCreateStreamStmt(SAstCreateContext* pCxt, const SToken* pStreamName, const SToken* pTableName, SNode* pQuery) {
|
SNode* createStreamOptions(SAstCreateContext* pCxt) {
|
||||||
SNode* pStmt = nodesMakeNode(QUERY_NODE_CREATE_STREAM_STMT);
|
SStreamOptions* pOptions = nodesMakeNode(QUERY_NODE_STREAM_OPTIONS);
|
||||||
CHECK_OUT_OF_MEM(pStmt);
|
CHECK_OUT_OF_MEM(pOptions);
|
||||||
return pStmt;
|
pOptions->triggerType = STREAM_TRIGGER_AT_ONCE;
|
||||||
|
return (SNode*)pOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
SNode* createDropStreamStmt(SAstCreateContext* pCxt, const SToken* pStreamName) {
|
SNode* createCreateStreamStmt(SAstCreateContext* pCxt, bool ignoreExists, const SToken* pStreamName, SNode* pRealTable, SNode* pOptions, SNode* pQuery) {
|
||||||
SNode* pStmt = nodesMakeNode(QUERY_NODE_DROP_STREAM_STMT);
|
SCreateStreamStmt* pStmt = nodesMakeNode(QUERY_NODE_CREATE_STREAM_STMT);
|
||||||
CHECK_OUT_OF_MEM(pStmt);
|
CHECK_OUT_OF_MEM(pStmt);
|
||||||
return pStmt;
|
strncpy(pStmt->streamName, pStreamName->z, pStreamName->n);
|
||||||
|
if (NULL != pRealTable) {
|
||||||
|
strcpy(pStmt->targetDbName, ((SRealTableNode*)pRealTable)->table.dbName);
|
||||||
|
strcpy(pStmt->targetTabName, ((SRealTableNode*)pRealTable)->table.tableName);
|
||||||
|
nodesDestroyNode(pRealTable);
|
||||||
|
}
|
||||||
|
pStmt->ignoreExists = ignoreExists;
|
||||||
|
pStmt->pOptions = (SStreamOptions*)pOptions;
|
||||||
|
pStmt->pQuery = pQuery;
|
||||||
|
return (SNode*)pStmt;
|
||||||
|
}
|
||||||
|
|
||||||
|
SNode* createDropStreamStmt(SAstCreateContext* pCxt, bool ignoreNotExists, const SToken* pStreamName) {
|
||||||
|
SDropStreamStmt* pStmt = nodesMakeNode(QUERY_NODE_DROP_STREAM_STMT);
|
||||||
|
CHECK_OUT_OF_MEM(pStmt);
|
||||||
|
strncpy(pStmt->streamName, pStreamName->z, pStreamName->n);
|
||||||
|
pStmt->ignoreNotExists = ignoreNotExists;
|
||||||
|
return (SNode*)pStmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
SNode* createKillStmt(SAstCreateContext* pCxt, ENodeType type, const SToken* pId) {
|
SNode* createKillStmt(SAstCreateContext* pCxt, ENodeType type, const SToken* pId) {
|
||||||
|
|
|
@ -39,6 +39,7 @@ static SKeyword keywordTable[] = {
|
||||||
{"APPS", TK_APPS},
|
{"APPS", TK_APPS},
|
||||||
{"AS", TK_AS},
|
{"AS", TK_AS},
|
||||||
{"ASC", TK_ASC},
|
{"ASC", TK_ASC},
|
||||||
|
{"AT_ONCE", TK_AT_ONCE},
|
||||||
{"BETWEEN", TK_BETWEEN},
|
{"BETWEEN", TK_BETWEEN},
|
||||||
{"BINARY", TK_BINARY},
|
{"BINARY", TK_BINARY},
|
||||||
{"BIGINT", TK_BIGINT},
|
{"BIGINT", TK_BIGINT},
|
||||||
|
@ -50,6 +51,7 @@ static SKeyword keywordTable[] = {
|
||||||
{"BY", TK_BY},
|
{"BY", TK_BY},
|
||||||
{"CACHE", TK_CACHE},
|
{"CACHE", TK_CACHE},
|
||||||
{"CACHELAST", TK_CACHELAST},
|
{"CACHELAST", TK_CACHELAST},
|
||||||
|
{"CAST", TK_CAST},
|
||||||
{"COLUMN", TK_COLUMN},
|
{"COLUMN", TK_COLUMN},
|
||||||
{"COMMENT", TK_COMMENT},
|
{"COMMENT", TK_COMMENT},
|
||||||
{"COMP", TK_COMP},
|
{"COMP", TK_COMP},
|
||||||
|
@ -57,6 +59,7 @@ static SKeyword keywordTable[] = {
|
||||||
{"CONNS", TK_CONNS},
|
{"CONNS", TK_CONNS},
|
||||||
{"CONNECTION", TK_CONNECTION},
|
{"CONNECTION", TK_CONNECTION},
|
||||||
{"CONNECTIONS", TK_CONNECTIONS},
|
{"CONNECTIONS", TK_CONNECTIONS},
|
||||||
|
{"COUNT", TK_COUNT},
|
||||||
{"CREATE", TK_CREATE},
|
{"CREATE", TK_CREATE},
|
||||||
{"DATABASE", TK_DATABASE},
|
{"DATABASE", TK_DATABASE},
|
||||||
{"DATABASES", TK_DATABASES},
|
{"DATABASES", TK_DATABASES},
|
||||||
|
@ -100,6 +103,7 @@ static SKeyword keywordTable[] = {
|
||||||
{"KEEP", TK_KEEP},
|
{"KEEP", TK_KEEP},
|
||||||
{"KILL", TK_KILL},
|
{"KILL", TK_KILL},
|
||||||
{"LAST", TK_LAST},
|
{"LAST", TK_LAST},
|
||||||
|
{"LAST_ROW", TK_LAST_ROW},
|
||||||
{"LICENCE", TK_LICENCE},
|
{"LICENCE", TK_LICENCE},
|
||||||
{"LIKE", TK_LIKE},
|
{"LIKE", TK_LIKE},
|
||||||
{"LIMIT", TK_LIMIT},
|
{"LIMIT", TK_LIMIT},
|
||||||
|
@ -132,10 +136,8 @@ static SKeyword keywordTable[] = {
|
||||||
{"PRECISION", TK_PRECISION},
|
{"PRECISION", TK_PRECISION},
|
||||||
{"PRIVILEGE", TK_PRIVILEGE},
|
{"PRIVILEGE", TK_PRIVILEGE},
|
||||||
{"PREV", TK_PREV},
|
{"PREV", TK_PREV},
|
||||||
{"_QENDTS", TK_QENDTS},
|
|
||||||
{"QNODE", TK_QNODE},
|
{"QNODE", TK_QNODE},
|
||||||
{"QNODES", TK_QNODES},
|
{"QNODES", TK_QNODES},
|
||||||
{"_QSTARTTS", TK_QSTARTTS},
|
|
||||||
{"QTIME", TK_QTIME},
|
{"QTIME", TK_QTIME},
|
||||||
{"QUERIES", TK_QUERIES},
|
{"QUERIES", TK_QUERIES},
|
||||||
{"QUERY", TK_QUERY},
|
{"QUERY", TK_QUERY},
|
||||||
|
@ -145,7 +147,6 @@ static SKeyword keywordTable[] = {
|
||||||
{"RESET", TK_RESET},
|
{"RESET", TK_RESET},
|
||||||
{"RETENTIONS", TK_RETENTIONS},
|
{"RETENTIONS", TK_RETENTIONS},
|
||||||
{"ROLLUP", TK_ROLLUP},
|
{"ROLLUP", TK_ROLLUP},
|
||||||
{"_ROWTS", TK_ROWTS},
|
|
||||||
{"SCORES", TK_SCORES},
|
{"SCORES", TK_SCORES},
|
||||||
{"SELECT", TK_SELECT},
|
{"SELECT", TK_SELECT},
|
||||||
{"SESSION", TK_SESSION},
|
{"SESSION", TK_SESSION},
|
||||||
|
@ -178,6 +179,7 @@ static SKeyword keywordTable[] = {
|
||||||
{"TODAY", TK_TODAY},
|
{"TODAY", TK_TODAY},
|
||||||
{"TOPIC", TK_TOPIC},
|
{"TOPIC", TK_TOPIC},
|
||||||
{"TOPICS", TK_TOPICS},
|
{"TOPICS", TK_TOPICS},
|
||||||
|
{"TRIGGER", TK_TRIGGER},
|
||||||
{"TSERIES", TK_TSERIES},
|
{"TSERIES", TK_TSERIES},
|
||||||
{"TTL", TK_TTL},
|
{"TTL", TK_TTL},
|
||||||
{"UNION", TK_UNION},
|
{"UNION", TK_UNION},
|
||||||
|
@ -194,9 +196,14 @@ static SKeyword keywordTable[] = {
|
||||||
{"VGROUPS", TK_VGROUPS},
|
{"VGROUPS", TK_VGROUPS},
|
||||||
{"VNODES", TK_VNODES},
|
{"VNODES", TK_VNODES},
|
||||||
{"WAL", TK_WAL},
|
{"WAL", TK_WAL},
|
||||||
|
{"WATERMARK", TK_WATERMARK},
|
||||||
|
{"WHERE", TK_WHERE},
|
||||||
|
{"WINDOW_CLOSE", TK_WINDOW_CLOSE},
|
||||||
|
{"_QENDTS", TK_QENDTS},
|
||||||
|
{"_QSTARTTS", TK_QSTARTTS},
|
||||||
|
{"_ROWTS", TK_ROWTS},
|
||||||
{"_WDURATION", TK_WDURATION},
|
{"_WDURATION", TK_WDURATION},
|
||||||
{"_WENDTS", TK_WENDTS},
|
{"_WENDTS", TK_WENDTS},
|
||||||
{"WHERE", TK_WHERE},
|
|
||||||
{"_WSTARTTS", TK_WSTARTTS},
|
{"_WSTARTTS", TK_WSTARTTS},
|
||||||
// {"ID", TK_ID},
|
// {"ID", TK_ID},
|
||||||
// {"STRING", TK_STRING},
|
// {"STRING", TK_STRING},
|
||||||
|
@ -260,7 +267,6 @@ static SKeyword keywordTable[] = {
|
||||||
// {"RESTRICT", TK_RESTRICT},
|
// {"RESTRICT", TK_RESTRICT},
|
||||||
// {"ROW", TK_ROW},
|
// {"ROW", TK_ROW},
|
||||||
// {"STATEMENT", TK_STATEMENT},
|
// {"STATEMENT", TK_STATEMENT},
|
||||||
// {"TRIGGER", TK_TRIGGER},
|
|
||||||
// {"VIEW", TK_VIEW},
|
// {"VIEW", TK_VIEW},
|
||||||
// {"SEMI", TK_SEMI},
|
// {"SEMI", TK_SEMI},
|
||||||
// {"PARTITIONS", TK_PARTITIONS},
|
// {"PARTITIONS", TK_PARTITIONS},
|
||||||
|
@ -345,6 +351,9 @@ uint32_t tGetToken(const char* z, uint32_t* tokenId) {
|
||||||
}
|
}
|
||||||
*tokenId = TK_NK_COMMENT;
|
*tokenId = TK_NK_COMMENT;
|
||||||
return i;
|
return i;
|
||||||
|
} else if (z[1] == '>') {
|
||||||
|
*tokenId = TK_NK_ARROW;
|
||||||
|
return 2;
|
||||||
}
|
}
|
||||||
*tokenId = TK_NK_MINUS;
|
*tokenId = TK_NK_MINUS;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -770,92 +770,165 @@ static int32_t createAllColumns(STranslateContext* pCxt, SNodeList** pCols) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isFirstLastFunc(SFunctionNode* pFunc) {
|
static bool isMultiResFunc(SNode* pNode) {
|
||||||
return (FUNCTION_TYPE_FIRST == pFunc->funcType || FUNCTION_TYPE_LAST == pFunc->funcType);
|
if (QUERY_NODE_FUNCTION != nodeType(pNode) || !fmIsMultiResFunc(((SFunctionNode*)pNode)->funcId)) {
|
||||||
}
|
|
||||||
|
|
||||||
static bool isFirstLastStar(SNode* pNode) {
|
|
||||||
if (QUERY_NODE_FUNCTION != nodeType(pNode) || !isFirstLastFunc((SFunctionNode*)pNode)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
SNodeList* pParameterList = ((SFunctionNode*)pNode)->pParameterList;
|
SNodeList* pParameterList = ((SFunctionNode*)pNode)->pParameterList;
|
||||||
if (LIST_LENGTH(pParameterList) != 1) {
|
if (LIST_LENGTH(pParameterList) > 1) {
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
SNode* pParam = nodesListGetNode(pParameterList, 0);
|
SNode* pParam = nodesListGetNode(pParameterList, 0);
|
||||||
return (QUERY_NODE_COLUMN == nodeType(pParam) ? 0 == strcmp(((SColumnNode*)pParam)->colName, "*") : false);
|
return (QUERY_NODE_COLUMN == nodeType(pParam) ? 0 == strcmp(((SColumnNode*)pParam)->colName, "*") : false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static SNode* createFirstLastFunc(SFunctionNode* pSrcFunc, SColumnNode* pCol) {
|
static SNode* createMultiResFunc(SFunctionNode* pSrcFunc, SExprNode* pExpr) {
|
||||||
SFunctionNode* pFunc = nodesMakeNode(QUERY_NODE_FUNCTION);
|
SFunctionNode* pFunc = nodesMakeNode(QUERY_NODE_FUNCTION);
|
||||||
if (NULL == pFunc) {
|
if (NULL == pFunc) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
pFunc->pParameterList = nodesMakeList();
|
pFunc->pParameterList = nodesMakeList();
|
||||||
if (NULL == pFunc->pParameterList || TSDB_CODE_SUCCESS != nodesListAppend(pFunc->pParameterList, pCol)) {
|
if (NULL == pFunc->pParameterList || TSDB_CODE_SUCCESS != nodesListStrictAppend(pFunc->pParameterList, nodesCloneNode(pExpr))) {
|
||||||
nodesDestroyNode(pFunc);
|
nodesDestroyNode(pFunc);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pFunc->node.resType = pCol->node.resType;
|
pFunc->node.resType = pExpr->resType;
|
||||||
pFunc->funcId = pSrcFunc->funcId;
|
pFunc->funcId = pSrcFunc->funcId;
|
||||||
pFunc->funcType = pSrcFunc->funcType;
|
pFunc->funcType = pSrcFunc->funcType;
|
||||||
strcpy(pFunc->functionName, pSrcFunc->functionName);
|
strcpy(pFunc->functionName, pSrcFunc->functionName);
|
||||||
snprintf(pFunc->node.aliasName, sizeof(pFunc->node.aliasName),
|
char buf[TSDB_FUNC_NAME_LEN + TSDB_TABLE_NAME_LEN + TSDB_COL_NAME_LEN];
|
||||||
(FUNCTION_TYPE_FIRST == pSrcFunc->funcType ? "first(%s)" : "last(%s)"), pCol->colName);
|
int32_t len = 0;
|
||||||
|
if (QUERY_NODE_COLUMN == nodeType(pExpr)) {
|
||||||
|
SColumnNode* pCol = (SColumnNode*)pExpr;
|
||||||
|
len = snprintf(buf, sizeof(buf), "%s(%s.%s)", pSrcFunc->functionName, pCol->tableAlias, pCol->colName);
|
||||||
|
} else {
|
||||||
|
len = snprintf(buf, sizeof(buf), "%s(%s)", pSrcFunc->functionName, pExpr->aliasName);
|
||||||
|
}
|
||||||
|
strncpy(pFunc->node.aliasName, buf, TMIN(len, sizeof(pFunc->node.aliasName) - 1));
|
||||||
|
|
||||||
return (SNode*)pFunc;
|
return (SNode*)pFunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t createFirstLastAllCols(STranslateContext* pCxt, SFunctionNode* pSrcFunc, SNodeList** pOutput) {
|
static int32_t findTable(STranslateContext* pCxt, const char* pTableAlias, STableNode** pOutput) {
|
||||||
SNodeList* pCols = NULL;
|
|
||||||
if (TSDB_CODE_SUCCESS != createAllColumns(pCxt, &pCols)) {
|
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
SNodeList* pFuncs = nodesMakeList();
|
|
||||||
if (NULL == pFuncs) {
|
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
SNode* pCol = NULL;
|
|
||||||
FOREACH(pCol, pCols) {
|
|
||||||
if (TSDB_CODE_SUCCESS != nodesListStrictAppend(pFuncs, createFirstLastFunc(pSrcFunc, (SColumnNode*)pCol))) {
|
|
||||||
nodesDestroyNode(pFuncs);
|
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*pOutput = pFuncs;
|
|
||||||
return TSDB_CODE_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool isTableStar(SNode* pNode) {
|
|
||||||
return (QUERY_NODE_COLUMN == nodeType(pNode)) && (0 == strcmp(((SColumnNode*)pNode)->colName, "*"));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t createTableAllCols(STranslateContext* pCxt, SColumnNode* pCol, SNodeList** pOutput) {
|
|
||||||
*pOutput = nodesMakeList();
|
|
||||||
if (NULL == *pOutput) {
|
|
||||||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_OUT_OF_MEMORY);
|
|
||||||
}
|
|
||||||
bool foundTable = false;
|
|
||||||
SArray* pTables = taosArrayGetP(pCxt->pNsLevel, pCxt->currLevel);
|
SArray* pTables = taosArrayGetP(pCxt->pNsLevel, pCxt->currLevel);
|
||||||
size_t nums = taosArrayGetSize(pTables);
|
size_t nums = taosArrayGetSize(pTables);
|
||||||
for (size_t i = 0; i < nums; ++i) {
|
for (size_t i = 0; i < nums; ++i) {
|
||||||
STableNode* pTable = taosArrayGetP(pTables, i);
|
STableNode* pTable = taosArrayGetP(pTables, i);
|
||||||
if (0 == strcmp(pTable->tableAlias, pCol->tableAlias)) {
|
if (NULL == pTableAlias || 0 == strcmp(pTable->tableAlias, pTableAlias)) {
|
||||||
int32_t code = createColumnNodeByTable(pCxt, pTable, *pOutput);
|
*pOutput = pTable;
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
return TSDB_CODE_SUCCESS;
|
||||||
return code;
|
|
||||||
}
|
}
|
||||||
foundTable = true;
|
}
|
||||||
|
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_TABLE_NOT_EXIST, pTableAlias);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t createTableAllCols(STranslateContext* pCxt, SColumnNode* pCol, SNodeList** pOutput) {
|
||||||
|
STableNode* pTable = NULL;
|
||||||
|
int32_t code = findTable(pCxt, pCol->tableAlias, &pTable);
|
||||||
|
if (TSDB_CODE_SUCCESS == code && NULL == *pOutput) {
|
||||||
|
*pOutput = nodesMakeList();
|
||||||
|
if (NULL == *pOutput) {
|
||||||
|
code = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_OUT_OF_MEMORY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = createColumnNodeByTable(pCxt, pTable, *pOutput);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool isStar(SNode* pNode) {
|
||||||
|
return (QUERY_NODE_COLUMN == nodeType(pNode)) && ('\0' == ((SColumnNode*)pNode)->tableAlias[0]) && (0 == strcmp(((SColumnNode*)pNode)->colName, "*"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool isTableStar(SNode* pNode) {
|
||||||
|
return (QUERY_NODE_COLUMN == nodeType(pNode)) && ('\0' != ((SColumnNode*)pNode)->tableAlias[0]) && (0 == strcmp(((SColumnNode*)pNode)->colName, "*"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t createMultiResFuncsParas(STranslateContext* pCxt, SNodeList* pSrcParas, SNodeList** pOutput) {
|
||||||
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
|
|
||||||
|
SNodeList* pExprs = NULL;
|
||||||
|
SNode* pPara = NULL;
|
||||||
|
FOREACH(pPara, pSrcParas) {
|
||||||
|
if (isStar(pPara)) {
|
||||||
|
code = createAllColumns(pCxt, &pExprs);
|
||||||
|
// The syntax definition ensures that * and other parameters do not appear at the same time
|
||||||
|
break;
|
||||||
|
} else if (isTableStar(pPara)) {
|
||||||
|
code = createTableAllCols(pCxt, (SColumnNode*)pPara, &pExprs);
|
||||||
|
} else {
|
||||||
|
code = nodesListMakeStrictAppend(&pExprs, nodesCloneNode(pPara));
|
||||||
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!foundTable) {
|
|
||||||
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_TABLE_NOT_EXIST, pCol->tableAlias);
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
*pOutput = pExprs;
|
||||||
|
} else {
|
||||||
|
nodesDestroyList(pExprs);
|
||||||
}
|
}
|
||||||
return TSDB_CODE_SUCCESS;
|
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t createMultiResFuncs(SFunctionNode* pSrcFunc, SNodeList* pExprs, SNodeList** pOutput) {
|
||||||
|
SNodeList* pFuncs = nodesMakeList();
|
||||||
|
if (NULL == pFuncs) {
|
||||||
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
|
SNode* pExpr = NULL;
|
||||||
|
FOREACH(pExpr, pExprs) {
|
||||||
|
code = nodesListStrictAppend(pFuncs, createMultiResFunc(pSrcFunc, (SExprNode*)pExpr));
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
*pOutput = pFuncs;
|
||||||
|
} else {
|
||||||
|
nodesDestroyList(pFuncs);
|
||||||
|
}
|
||||||
|
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t createMultiResFuncsFromStar(STranslateContext* pCxt, SFunctionNode* pSrcFunc, SNodeList** pOutput) {
|
||||||
|
SNodeList* pExprs = NULL;
|
||||||
|
int32_t code = createMultiResFuncsParas(pCxt, pSrcFunc->pParameterList, &pExprs);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = createMultiResFuncs(pSrcFunc, pExprs, pOutput);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
nodesDestroyList(pExprs);
|
||||||
|
}
|
||||||
|
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool isCountStar(SNode* pNode) {
|
||||||
|
if (QUERY_NODE_FUNCTION != nodeType(pNode) || 1 != LIST_LENGTH(((SFunctionNode*)pNode)->pParameterList)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
SNode* pPara = nodesListGetNode(((SFunctionNode*)pNode)->pParameterList, 0);
|
||||||
|
return (QUERY_NODE_COLUMN == nodeType(pPara) && 0 == strcmp(((SColumnNode*)pPara)->colName, "*"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t rewriteCountStar(STranslateContext* pCxt, SFunctionNode* pCount) {
|
||||||
|
SColumnNode* pCol = nodesListGetNode(pCount->pParameterList, 0);
|
||||||
|
STableNode* pTable = NULL;
|
||||||
|
int32_t code = findTable(pCxt, ('\0' == pCol->tableAlias[0] ? NULL : pCol->tableAlias), &pTable);
|
||||||
|
if (TSDB_CODE_SUCCESS == code && QUERY_NODE_REAL_TABLE == nodeType(pTable)) {
|
||||||
|
setColumnInfoBySchema((SRealTableNode*)pTable, ((SRealTableNode*)pTable)->pMeta->schema, false, pCol);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t translateStar(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
static int32_t translateStar(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
||||||
|
@ -864,9 +937,9 @@ static int32_t translateStar(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
||||||
} else {
|
} else {
|
||||||
SNode* pNode = NULL;
|
SNode* pNode = NULL;
|
||||||
WHERE_EACH(pNode, pSelect->pProjectionList) {
|
WHERE_EACH(pNode, pSelect->pProjectionList) {
|
||||||
if (isFirstLastStar(pNode)) {
|
if (isMultiResFunc(pNode)) {
|
||||||
SNodeList* pFuncs = NULL;
|
SNodeList* pFuncs = NULL;
|
||||||
if (TSDB_CODE_SUCCESS != createFirstLastAllCols(pCxt, (SFunctionNode*)pNode, &pFuncs)) {
|
if (TSDB_CODE_SUCCESS != createMultiResFuncsFromStar(pCxt, (SFunctionNode*)pNode, &pFuncs)) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
INSERT_LIST(pSelect->pProjectionList, pFuncs);
|
INSERT_LIST(pSelect->pProjectionList, pFuncs);
|
||||||
|
@ -880,6 +953,11 @@ static int32_t translateStar(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
||||||
INSERT_LIST(pSelect->pProjectionList, pCols);
|
INSERT_LIST(pSelect->pProjectionList, pCols);
|
||||||
ERASE_NODE(pSelect->pProjectionList);
|
ERASE_NODE(pSelect->pProjectionList);
|
||||||
continue;
|
continue;
|
||||||
|
} else if (isCountStar(pNode)) {
|
||||||
|
int32_t code = rewriteCountStar(pCxt, (SFunctionNode*)pNode);
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
WHERE_NEXT;
|
WHERE_NEXT;
|
||||||
}
|
}
|
||||||
|
@ -2067,6 +2145,46 @@ static int32_t translateKillQuery(STranslateContext* pCxt, SKillStmt* pStmt) {
|
||||||
return buildCmdMsg(pCxt, TDMT_MND_KILL_QUERY, (FSerializeFunc)tSerializeSKillQueryReq, &killReq);
|
return buildCmdMsg(pCxt, TDMT_MND_KILL_QUERY, (FSerializeFunc)tSerializeSKillQueryReq, &killReq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t translateCreateStream(STranslateContext* pCxt, SCreateStreamStmt* pStmt) {
|
||||||
|
SCMCreateStreamReq createReq = {0};
|
||||||
|
|
||||||
|
createReq.igExists = pStmt->ignoreExists;
|
||||||
|
|
||||||
|
SName name = {.type = TSDB_TABLE_NAME_T, .acctId = pCxt->pParseCxt->acctId};
|
||||||
|
strcpy(name.dbname, pCxt->pParseCxt->db);
|
||||||
|
strcpy(name.tname, pStmt->streamName);
|
||||||
|
tNameExtractFullName(&name, createReq.name);
|
||||||
|
|
||||||
|
if ('\0' != pStmt->targetTabName[0]) {
|
||||||
|
strcpy(name.dbname, pStmt->targetDbName);
|
||||||
|
strcpy(name.tname, pStmt->targetTabName);
|
||||||
|
tNameExtractFullName(&name, createReq.outputSTbName);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t code = translateQuery(pCxt, pStmt->pQuery);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = nodesNodeToString(pStmt->pQuery, false, &createReq.ast, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
createReq.sql = strdup(pCxt->pParseCxt->pSql);
|
||||||
|
if (NULL == createReq.sql) {
|
||||||
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = buildCmdMsg(pCxt, TDMT_MND_CREATE_STREAM, (FSerializeFunc)tSerializeSCMCreateStreamReq, &createReq);
|
||||||
|
}
|
||||||
|
|
||||||
|
tFreeSCMCreateStreamReq(&createReq);
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t translateDropStream(STranslateContext* pCxt, SDropStreamStmt* pStmt) {
|
||||||
|
// todo
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t translateQuery(STranslateContext* pCxt, SNode* pNode) {
|
static int32_t translateQuery(STranslateContext* pCxt, SNode* pNode) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
|
@ -2160,6 +2278,12 @@ static int32_t translateQuery(STranslateContext* pCxt, SNode* pNode) {
|
||||||
case QUERY_NODE_KILL_QUERY_STMT:
|
case QUERY_NODE_KILL_QUERY_STMT:
|
||||||
code = translateKillQuery(pCxt, (SKillStmt*)pNode);
|
code = translateKillQuery(pCxt, (SKillStmt*)pNode);
|
||||||
break;
|
break;
|
||||||
|
case QUERY_NODE_CREATE_STREAM_STMT:
|
||||||
|
code = translateCreateStream(pCxt, (SCreateStreamStmt*)pNode);
|
||||||
|
break;
|
||||||
|
case QUERY_NODE_DROP_STREAM_STMT:
|
||||||
|
code = translateDropStream(pCxt, (SDropStreamStmt*)pNode);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -264,7 +264,7 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ftToString(int16_t colid, int16_t numOfColumns) const {
|
std::string ftToString(int16_t colid, int16_t numOfColumns) const {
|
||||||
return (0 == colid ? "column" : (colid <= numOfColumns ? "tag" : "column"));
|
return (0 == colid ? "column" : (colid < numOfColumns ? "column" : "tag"));
|
||||||
}
|
}
|
||||||
|
|
||||||
STableMeta* getTableSchemaMeta(const std::string& db, const std::string& tbname) const {
|
STableMeta* getTableSchemaMeta(const std::string& db, const std::string& tbname) const {
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include "parserTestUtil.h"
|
||||||
#include "parInt.h"
|
#include "parInt.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
@ -44,7 +45,7 @@ protected:
|
||||||
query_ = nullptr;
|
query_ = nullptr;
|
||||||
bool res = runImpl(parseCode, translateCode);
|
bool res = runImpl(parseCode, translateCode);
|
||||||
qDestroyQuery(query_);
|
qDestroyQuery(query_);
|
||||||
if (1/*!res*/) {
|
if (!res || g_isDump) {
|
||||||
dump();
|
dump();
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
@ -57,7 +58,7 @@ private:
|
||||||
int32_t code = parse(&cxt_, &query_);
|
int32_t code = parse(&cxt_, &query_);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
parseErrStr_ = string("code:") + tstrerror(code) + string(", msg:") + errMagBuf_;
|
parseErrStr_ = string("code:") + tstrerror(code) + string(", msg:") + errMagBuf_;
|
||||||
return (terrno == parseCode);
|
return (code == parseCode);
|
||||||
}
|
}
|
||||||
if (TSDB_CODE_SUCCESS != parseCode) {
|
if (TSDB_CODE_SUCCESS != parseCode) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -66,7 +67,7 @@ private:
|
||||||
code = translate(&cxt_, query_);
|
code = translate(&cxt_, query_);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
translateErrStr_ = string("code:") + tstrerror(code) + string(", msg:") + errMagBuf_;
|
translateErrStr_ = string("code:") + tstrerror(code) + string(", msg:") + errMagBuf_;
|
||||||
return (terrno == translateCode);
|
return (code == translateCode);
|
||||||
}
|
}
|
||||||
translatedAstStr_ = toString(query_->pRoot);
|
translatedAstStr_ = toString(query_->pRoot);
|
||||||
code = calculateConstant(&cxt_, query_);
|
code = calculateConstant(&cxt_, query_);
|
||||||
|
@ -243,6 +244,19 @@ TEST_F(ParserTest, selectPseudoColumn) {
|
||||||
ASSERT_TRUE(run());
|
ASSERT_TRUE(run());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(ParserTest, selectMultiResFunc) {
|
||||||
|
setDatabase("root", "test");
|
||||||
|
|
||||||
|
// bind("SELECT last(*), first(*), last_row(*) FROM t1");
|
||||||
|
// ASSERT_TRUE(run());
|
||||||
|
|
||||||
|
bind("SELECT last(c1, c2), first(t1.*), last_row(c3) FROM t1");
|
||||||
|
ASSERT_TRUE(run());
|
||||||
|
|
||||||
|
bind("SELECT last(t2.*), first(t1.c1, t2.*), last_row(t1.*, t2.*) FROM st1s1 t1, st1s2 t2 where t1.ts = t2.ts");
|
||||||
|
ASSERT_TRUE(run());
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(ParserTest, selectClause) {
|
TEST_F(ParserTest, selectClause) {
|
||||||
setDatabase("root", "test");
|
setDatabase("root", "test");
|
||||||
|
|
||||||
|
@ -726,6 +740,22 @@ TEST_F(ParserTest, dropTopic) {
|
||||||
ASSERT_TRUE(run());
|
ASSERT_TRUE(run());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(ParserTest, createStream) {
|
||||||
|
setDatabase("root", "test");
|
||||||
|
|
||||||
|
bind("create stream s1 as select * from t1");
|
||||||
|
ASSERT_TRUE(run());
|
||||||
|
|
||||||
|
bind("create stream if not exists s1 as select * from t1");
|
||||||
|
ASSERT_TRUE(run());
|
||||||
|
|
||||||
|
bind("create stream s1 into st1 as select * from t1");
|
||||||
|
ASSERT_TRUE(run());
|
||||||
|
|
||||||
|
bind("create stream if not exists s1 trigger window_close watermark 10s into st1 as select * from t1");
|
||||||
|
ASSERT_TRUE(run());
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(ParserTest, explain) {
|
TEST_F(ParserTest, explain) {
|
||||||
setDatabase("root", "test");
|
setDatabase("root", "test");
|
||||||
|
|
||||||
|
|
|
@ -15,12 +15,16 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include <getopt.h>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
#include "mockCatalog.h"
|
#include "mockCatalog.h"
|
||||||
|
#include "parserTestUtil.h"
|
||||||
#include "parToken.h"
|
#include "parToken.h"
|
||||||
#include "functionMgt.h"
|
#include "functionMgt.h"
|
||||||
|
|
||||||
|
bool g_isDump = false;
|
||||||
|
|
||||||
class ParserEnv : public testing::Environment {
|
class ParserEnv : public testing::Environment {
|
||||||
public:
|
public:
|
||||||
virtual void SetUp() {
|
virtual void SetUp() {
|
||||||
|
@ -38,8 +42,27 @@ public:
|
||||||
virtual ~ParserEnv() {}
|
virtual ~ParserEnv() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void parseArg(int argc, char* argv[]) {
|
||||||
|
int opt = 0;
|
||||||
|
const char *optstring = "";
|
||||||
|
static struct option long_options[] = {
|
||||||
|
{"dump", no_argument, NULL, 'd'},
|
||||||
|
{0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
while ((opt = getopt_long(argc, argv, optstring, long_options, NULL)) != -1) {
|
||||||
|
switch (opt) {
|
||||||
|
case 'd':
|
||||||
|
g_isDump = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
testing::AddGlobalTestEnvironment(new ParserEnv());
|
testing::AddGlobalTestEnvironment(new ParserEnv());
|
||||||
testing::InitGoogleTest(&argc, argv);
|
testing::InitGoogleTest(&argc, argv);
|
||||||
|
parseArg(argc, argv);
|
||||||
return RUN_ALL_TESTS();
|
return RUN_ALL_TESTS();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3
|
||||||
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern bool g_isDump;
|
|
@ -196,14 +196,14 @@ TEST_F(PlannerTest, selectGroupBy) {
|
||||||
bind("SELECT count(*) FROM t1");
|
bind("SELECT count(*) FROM t1");
|
||||||
ASSERT_TRUE(run());
|
ASSERT_TRUE(run());
|
||||||
|
|
||||||
// bind("SELECT c1, max(c3), min(c2), count(*) FROM t1 GROUP BY c1");
|
bind("SELECT c1, max(c3), min(c3), count(*) FROM t1 GROUP BY c1");
|
||||||
// ASSERT_TRUE(run());
|
ASSERT_TRUE(run());
|
||||||
|
|
||||||
// bind("SELECT c1 + c3, c1 + count(*) FROM t1 where c2 = 'abc' GROUP BY c1, c3");
|
bind("SELECT c1 + c3, c1 + count(*) FROM t1 where c2 = 'abc' GROUP BY c1, c3");
|
||||||
// ASSERT_TRUE(run());
|
ASSERT_TRUE(run());
|
||||||
|
|
||||||
// bind("SELECT c1 + c3, sum(c4 * c5) FROM t1 where concat(c2, 'wwww') = 'abcwww' GROUP BY c1 + c3");
|
bind("SELECT c1 + c3, sum(c4 * c5) FROM t1 where concat(c2, 'wwww') = 'abcwww' GROUP BY c1 + c3");
|
||||||
// ASSERT_TRUE(run());
|
ASSERT_TRUE(run());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(PlannerTest, selectSubquery) {
|
TEST_F(PlannerTest, selectSubquery) {
|
||||||
|
|
|
@ -14,12 +14,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catalog.h"
|
#include "catalog.h"
|
||||||
|
#include "command.h"
|
||||||
#include "query.h"
|
#include "query.h"
|
||||||
#include "schedulerInt.h"
|
#include "schedulerInt.h"
|
||||||
#include "tmsg.h"
|
#include "tmsg.h"
|
||||||
#include "tref.h"
|
#include "tref.h"
|
||||||
#include "trpc.h"
|
#include "trpc.h"
|
||||||
#include "command.h"
|
|
||||||
|
|
||||||
SSchedulerMgmt schMgmt = {0};
|
SSchedulerMgmt schMgmt = {0};
|
||||||
|
|
||||||
|
@ -141,7 +141,6 @@ _return:
|
||||||
SCH_RET(code);
|
SCH_RET(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void schFreeRpcCtx(SRpcCtx *pCtx) {
|
void schFreeRpcCtx(SRpcCtx *pCtx) {
|
||||||
if (NULL == pCtx) {
|
if (NULL == pCtx) {
|
||||||
return;
|
return;
|
||||||
|
@ -1254,7 +1253,8 @@ int32_t schGetTaskFromTaskList(SHashObj *pTaskList, uint64_t taskId, SSchTask **
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t schUpdateTaskExecNodeHandle(SSchTask *pTask, void *handle, int32_t rspCode) {
|
int32_t schUpdateTaskExecNodeHandle(SSchTask *pTask, void *handle, int32_t rspCode) {
|
||||||
if (rspCode || NULL == pTask->execNodes || taosArrayGetSize(pTask->execNodes) > 1 || taosArrayGetSize(pTask->execNodes) <= 0) {
|
if (rspCode || NULL == pTask->execNodes || taosArrayGetSize(pTask->execNodes) > 1 ||
|
||||||
|
taosArrayGetSize(pTask->execNodes) <= 0) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1264,7 +1264,6 @@ int32_t schUpdateTaskExecNodeHandle(SSchTask *pTask, void *handle, int32_t rspCo
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t schHandleCallback(void *param, const SDataBuf *pMsg, int32_t msgType, int32_t rspCode) {
|
int32_t schHandleCallback(void *param, const SDataBuf *pMsg, int32_t msgType, int32_t rspCode) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
SSchTaskCallbackParam *pParam = (SSchTaskCallbackParam *)param;
|
SSchTaskCallbackParam *pParam = (SSchTaskCallbackParam *)param;
|
||||||
|
@ -1282,13 +1281,15 @@ int32_t schHandleCallback(void *param, const SDataBuf *pMsg, int32_t msgType, in
|
||||||
if (TDMT_VND_EXPLAIN_RSP == msgType) {
|
if (TDMT_VND_EXPLAIN_RSP == msgType) {
|
||||||
schGetTaskFromTaskList(pJob->succTasks, pParam->taskId, &pTask);
|
schGetTaskFromTaskList(pJob->succTasks, pParam->taskId, &pTask);
|
||||||
} else {
|
} else {
|
||||||
SCH_JOB_ELOG("task not found in execTask list, refId:%" PRIx64 ", taskId:%" PRIx64, pParam->refId, pParam->taskId);
|
SCH_JOB_ELOG("task not found in execTask list, refId:%" PRIx64 ", taskId:%" PRIx64, pParam->refId,
|
||||||
|
pParam->taskId);
|
||||||
SCH_ERR_JRET(TSDB_CODE_SCH_INTERNAL_ERROR);
|
SCH_ERR_JRET(TSDB_CODE_SCH_INTERNAL_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL == pTask) {
|
if (NULL == pTask) {
|
||||||
SCH_JOB_ELOG("task not found in execList & succList, refId:%" PRIx64 ", taskId:%" PRIx64, pParam->refId, pParam->taskId);
|
SCH_JOB_ELOG("task not found in execList & succList, refId:%" PRIx64 ", taskId:%" PRIx64, pParam->refId,
|
||||||
|
pParam->taskId);
|
||||||
SCH_ERR_JRET(TSDB_CODE_SCH_INTERNAL_ERROR);
|
SCH_ERR_JRET(TSDB_CODE_SCH_INTERNAL_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2682,7 +2683,6 @@ int32_t schedulerGetTasksStatus(int64_t job, SArray *pSub) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t scheduleCancelJob(int64_t job) {
|
int32_t scheduleCancelJob(int64_t job) {
|
||||||
SSchJob *pJob = schAcquireJob(job);
|
SSchJob *pJob = schAcquireJob(job);
|
||||||
if (NULL == pJob) {
|
if (NULL == pJob) {
|
||||||
|
@ -2734,15 +2734,17 @@ void schedulerFreeTaskList(SArray *taskList) {
|
||||||
void schedulerDestroy(void) {
|
void schedulerDestroy(void) {
|
||||||
if (schMgmt.jobRef) {
|
if (schMgmt.jobRef) {
|
||||||
SSchJob *pJob = taosIterateRef(schMgmt.jobRef, 0);
|
SSchJob *pJob = taosIterateRef(schMgmt.jobRef, 0);
|
||||||
|
int64_t refId = 0;
|
||||||
|
|
||||||
while (pJob) {
|
while (pJob) {
|
||||||
|
refId = pJob->refId;
|
||||||
|
|
||||||
taosRemoveRef(schMgmt.jobRef, pJob->refId);
|
taosRemoveRef(schMgmt.jobRef, pJob->refId);
|
||||||
|
|
||||||
pJob = taosIterateRef(schMgmt.jobRef, pJob->refId);
|
pJob = taosIterateRef(schMgmt.jobRef, refId);
|
||||||
}
|
}
|
||||||
|
|
||||||
taosCloseRef(schMgmt.jobRef);
|
taosCloseRef(schMgmt.jobRef);
|
||||||
schMgmt.jobRef = 0;
|
schMgmt.jobRef = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/bash
|
!/bin/bash
|
||||||
|
|
||||||
##################################################
|
##################################################
|
||||||
#
|
#
|
||||||
|
@ -8,14 +8,74 @@
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
#set -x
|
#set -x
|
||||||
|
VALGRIND=0
|
||||||
|
LOG_BK_DIR=/data/valgrind_log_backup # 192.168.0.203
|
||||||
|
while getopts "v:r" arg
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
v)
|
||||||
|
VALGRIND=1
|
||||||
|
;;
|
||||||
|
r)
|
||||||
|
LOG_BK_DIR=$(echo $OPTARG)
|
||||||
|
;;
|
||||||
|
?) #unknow option
|
||||||
|
echo "unkonw argument"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "VALGRIND: $VALGRIND, LOG_BK_DIR: $LOG_BK_DIR"
|
||||||
|
|
||||||
|
CURRENT_DIR=`pwd`
|
||||||
|
TSIM_LOG_DIR=$CURRENT_DIR/../../sim/tsim/log
|
||||||
|
TAOSD_LOG_DIR=$CURRENT_DIR/../../sim
|
||||||
|
|
||||||
|
echo "tsim log dir: $TSIM_LOG_DIR"
|
||||||
|
echo "taosd log dir: $TAOSD_LOG_DIR"
|
||||||
|
|
||||||
|
if [[ $VALGRIND -eq 1 ]]; then
|
||||||
|
if [ -d ${LOG_BK_DIR} ]; then
|
||||||
|
rm -rf ${LOG_BK_DIR}/*
|
||||||
|
else
|
||||||
|
mkdir -p $LOG_BK_DIR/
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
while read line
|
while read line
|
||||||
do
|
do
|
||||||
firstChar=`echo ${line:0:1}`
|
firstChar=`echo ${line:0:1}`
|
||||||
if [[ -n "$line" ]] && [[ $firstChar != "#" ]]; then
|
if [[ -n "$line" ]] && [[ $firstChar != "#" ]]; then
|
||||||
|
if [[ $VALGRIND -eq 1 ]]; then
|
||||||
|
echo "======== $line -v ========"
|
||||||
|
$line -v
|
||||||
|
|
||||||
|
# move all valgrind log files of the sim case to valgrind back dir
|
||||||
|
# get current sim case name for
|
||||||
|
result=`echo ${line%sim*}`
|
||||||
|
result=`echo ${result#*/}`
|
||||||
|
result=`echo ${result#*/}`
|
||||||
|
result=`echo ${result////-}`
|
||||||
|
tsimLogFile=valgrind-${result}sim.log
|
||||||
|
|
||||||
|
echo "cp ${TSIM_LOG_DIR}/valgrind-tsim.log ${LOG_BK_DIR}/${tsimLogFile} "
|
||||||
|
cp ${TSIM_LOG_DIR}/valgrind-tsim.log ${LOG_BK_DIR}/${tsimLogFile}
|
||||||
|
cp ${TAOSD_LOG_DIR}/dnode1/log/valgrind*.log ${LOG_BK_DIR}/ ||:
|
||||||
|
cp ${TAOSD_LOG_DIR}/dnode2/log/valgrind*.log ${LOG_BK_DIR}/ ||:
|
||||||
|
cp ${TAOSD_LOG_DIR}/dnode3/log/valgrind*.log ${LOG_BK_DIR}/ ||:
|
||||||
|
cp ${TAOSD_LOG_DIR}/dnode4/log/valgrind*.log ${LOG_BK_DIR}/ ||:
|
||||||
|
cp ${TAOSD_LOG_DIR}/dnode5/log/valgrind*.log ${LOG_BK_DIR}/ ||:
|
||||||
|
cp ${TAOSD_LOG_DIR}/dnode6/log/valgrind*.log ${LOG_BK_DIR}/ ||:
|
||||||
|
cp ${TAOSD_LOG_DIR}/dnode7/log/valgrind*.log ${LOG_BK_DIR}/ ||:
|
||||||
|
cp ${TAOSD_LOG_DIR}/dnode8/log/valgrind*.log ${LOG_BK_DIR}/ ||:
|
||||||
|
cp ${TAOSD_LOG_DIR}/dnode9/log/valgrind*.log ${LOG_BK_DIR}/ ||:
|
||||||
|
|
||||||
|
else
|
||||||
echo "======== $line ========"
|
echo "======== $line ========"
|
||||||
$line
|
$line
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
done < ./jenkins/basic.txt
|
done < ./jenkins/basic.txt
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -97,13 +97,14 @@ if [ "$CLEAR_OPTION" = "clear" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$EXEC_OPTON" = "start" ]; then
|
if [ "$EXEC_OPTON" = "start" ]; then
|
||||||
echo "ExcuteCmd:" $EXE_DIR/taosd -c $CFG_DIR
|
#echo "ExcuteCmd:" $EXE_DIR/taosd -c $CFG_DIR
|
||||||
|
|
||||||
if [ "$VALGRIND_OPTION" = "true" ]; then
|
if [ "$VALGRIND_OPTION" = "true" ]; then
|
||||||
TT=`date +%s`
|
TT=`date +%s`
|
||||||
mkdir ${LOG_DIR}/${TT}
|
#mkdir ${LOG_DIR}/${TT}
|
||||||
nohup valgrind --log-file=${LOG_DIR}/${TT}/valgrind.log --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 &
|
echo "nohup valgrind --log-file=${LOG_DIR}/valgrind-taosd-${TT}.log --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 &"
|
||||||
|
nohup valgrind --log-file=${LOG_DIR}/valgrind-taosd-${TT}.log --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 &
|
||||||
else
|
else
|
||||||
|
echo "nohup $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 &"
|
||||||
nohup $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 &
|
nohup $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 &
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -126,7 +126,7 @@ if [ -n "$FILE_NAME" ]; then
|
||||||
echo "------------------------------------------------------------------------"
|
echo "------------------------------------------------------------------------"
|
||||||
if [ $VALGRIND -eq 1 ]; then
|
if [ $VALGRIND -eq 1 ]; then
|
||||||
echo valgrind --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes --log-file=${CODE_DIR}/../script/valgrind.log $PROGRAM -c $CFG_DIR -f $FILE_NAME -v
|
echo valgrind --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes --log-file=${CODE_DIR}/../script/valgrind.log $PROGRAM -c $CFG_DIR -f $FILE_NAME -v
|
||||||
valgrind --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes --log-file=${CODE_DIR}/../script/valgrind.log $PROGRAM -c $CFG_DIR -f $FILE_NAME -v
|
valgrind --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes --log-file=${LOG_DIR}/valgrind-tsim.log $PROGRAM -c $CFG_DIR -f $FILE_NAME -v
|
||||||
else
|
else
|
||||||
if [[ $MULTIPROCESS -eq 1 ]];then
|
if [[ $MULTIPROCESS -eq 1 ]];then
|
||||||
echo "ExcuteCmd(multiprocess):" $PROGRAM -m -c $CFG_DIR -f $FILE_NAME
|
echo "ExcuteCmd(multiprocess):" $PROGRAM -m -c $CFG_DIR -f $FILE_NAME
|
||||||
|
|
|
@ -537,4 +537,4 @@ endi
|
||||||
#endi
|
#endi
|
||||||
|
|
||||||
|
|
||||||
#system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 1
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
$loop_cnt = 0
|
$loop_cnt = 0
|
||||||
|
@ -12,6 +10,7 @@ check_dnode_ready:
|
||||||
print ====> dnode not ready!
|
print ====> dnode not ready!
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
print ===> $rows $data00 $data01 $data02 $data03 $data04 $data05
|
print ===> $rows $data00 $data01 $data02 $data03 $data04 $data05
|
||||||
if $data00 != 1 then
|
if $data00 != 1 then
|
||||||
|
@ -23,108 +22,410 @@ endi
|
||||||
|
|
||||||
sql connect
|
sql connect
|
||||||
|
|
||||||
$dbPrefix = db
|
print =============== create database
|
||||||
$tbPrefix = ctb
|
sql create database db
|
||||||
$mtPrefix = stb
|
|
||||||
$tbNum = 10
|
|
||||||
$rowNum = 20
|
|
||||||
$totalNum = 200
|
|
||||||
|
|
||||||
print =============== step1
|
|
||||||
$i = 0
|
|
||||||
$db = $dbPrefix . $i
|
|
||||||
$mt = $mtPrefix . $i
|
|
||||||
|
|
||||||
sql drop database $db -x step1
|
|
||||||
step1:
|
|
||||||
sql create database $db
|
|
||||||
sql use $db
|
|
||||||
sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int)
|
|
||||||
|
|
||||||
$i = 0
|
|
||||||
while $i < $tbNum
|
|
||||||
$tb = $tbPrefix . $i
|
|
||||||
sql create table $tb using $mt tags( $i )
|
|
||||||
|
|
||||||
$x = 0
|
|
||||||
while $x < $rowNum
|
|
||||||
$cc = $x * 60000
|
|
||||||
$ms = 1601481600000 + $cc
|
|
||||||
|
|
||||||
sql insert into $tb values ($ms , $x )
|
|
||||||
$x = $x + 1
|
|
||||||
endw
|
|
||||||
|
|
||||||
$i = $i + 1
|
|
||||||
endw
|
|
||||||
|
|
||||||
sleep 100
|
|
||||||
|
|
||||||
print =============== step2
|
|
||||||
$i = 1
|
|
||||||
$tb = $tbPrefix . $i
|
|
||||||
|
|
||||||
sql select stddev(tbcol) from $tb
|
|
||||||
print ===> $data00
|
|
||||||
if $data00 != 5.766281297 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
print =============== step3
|
|
||||||
$cc = 4 * 60000
|
|
||||||
$ms = 1601481600000 + $cc
|
|
||||||
|
|
||||||
print ===> select stddev(tbcol) from $tb where ts <= $ms
|
|
||||||
sql select stddev(tbcol) from $tb where ts <= $ms
|
|
||||||
print ====> $data00 $data01 $data02 $data03 $data04 $data05
|
|
||||||
if $data00 != 1.414213562 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
print =============== step4
|
|
||||||
sql select stddev(tbcol) as b from $tb
|
|
||||||
print ===> $data00
|
|
||||||
if $data00 != 5.766281297 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
print =============== step5
|
|
||||||
sql select _wstartts, stddev(tbcol) as b from $tb interval(1m)
|
|
||||||
print ===> $data01
|
|
||||||
if $data01 != 0.000000000 then
|
|
||||||
print expect 0.000000000, actual: $data01
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
sql select _wstartts, stddev(tbcol) as b from $tb interval(1d)
|
|
||||||
print ===> $data01
|
|
||||||
if $data01 != 5.766281297 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
print =============== step6
|
|
||||||
$cc = 4 * 60000
|
|
||||||
$ms = 1601481600000 + $cc
|
|
||||||
|
|
||||||
print select _wstartts, stddev(tbcol) as b from $tb where ts <= $ms interval(1m)
|
|
||||||
sql select _wstartts, stddev(tbcol) as b from $tb where ts <= $ms interval(1m)
|
|
||||||
print ===> $data01
|
|
||||||
if $data01 != 0.000000000 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
print $data00 , $data10 , $data20 , $data30 , $data40 , $data50 , $data60
|
|
||||||
|
|
||||||
if $rows != 5 then
|
|
||||||
print expect 5, actual: $rows
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
print =============== clear
|
|
||||||
sql drop database $db
|
|
||||||
sql show databases
|
sql show databases
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql use db
|
||||||
|
|
||||||
|
print =============== create super table and child table
|
||||||
|
sql create table stb1 (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp) tags (t1 int)
|
||||||
|
sql show stables
|
||||||
|
print $rows $data00 $data01 $data02
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
sql create table ct1 using stb1 tags ( 1 )
|
||||||
|
sql create table ct2 using stb1 tags ( 2 )
|
||||||
|
sql create table ct3 using stb1 tags ( 3 )
|
||||||
|
sql create table ct4 using stb1 tags ( 4 )
|
||||||
|
sql show tables
|
||||||
|
print $rows $data00 $data10 $data20
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql create table t1 (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
|
||||||
|
|
||||||
|
print =============== insert data into child table ct1 (s)
|
||||||
|
sql insert into ct1 values ( '2022-01-01 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now+1a )
|
||||||
|
sql insert into ct1 values ( '2022-01-01 01:01:06.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now+2a )
|
||||||
|
sql insert into ct1 values ( '2022-01-01 01:01:10.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now+3a )
|
||||||
|
sql insert into ct1 values ( '2022-01-01 01:01:16.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now+4a )
|
||||||
|
sql insert into ct1 values ( '2022-01-01 01:01:20.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now+5a )
|
||||||
|
sql insert into ct1 values ( '2022-01-01 01:01:26.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now+6a )
|
||||||
|
sql insert into ct1 values ( '2022-01-01 01:01:30.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", now+7a )
|
||||||
|
sql insert into ct1 values ( '2022-01-01 01:01:36.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", now+8a )
|
||||||
|
|
||||||
|
print =============== insert data into child table ct4 (y)
|
||||||
|
sql insert into ct4 values ( '2019-01-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
|
||||||
|
sql insert into ct4 values ( '2019-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now+1a )
|
||||||
|
sql insert into ct4 values ( '2019-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now+2a )
|
||||||
|
sql insert into ct4 values ( '2020-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now+3a )
|
||||||
|
sql insert into ct4 values ( '2020-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now+4a )
|
||||||
|
sql insert into ct4 values ( '2020-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now+5a )
|
||||||
|
sql insert into ct4 values ( '2020-12-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
|
||||||
|
sql insert into ct4 values ( '2021-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now+6a )
|
||||||
|
sql insert into ct4 values ( '2021-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
|
||||||
|
sql insert into ct4 values ( '2021-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
|
||||||
|
sql insert into ct4 values ( '2022-02-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
|
||||||
|
sql insert into ct4 values ( '2022-05-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
|
||||||
|
|
||||||
|
print =============== insert data into child table t1
|
||||||
|
sql insert into t1 values ( '2020-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now+1a )
|
||||||
|
sql insert into t1 values ( '2020-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now+2a )
|
||||||
|
sql insert into t1 values ( '2021-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now+3a )
|
||||||
|
sql insert into t1 values ( '2021-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now+4a )
|
||||||
|
sql insert into t1 values ( '2021-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now+5a )
|
||||||
|
sql insert into t1 values ( '2022-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now+6a )
|
||||||
|
sql insert into t1 values ( '2022-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
|
||||||
|
sql insert into t1 values ( '2022-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
|
||||||
|
sql insert into t1 values ( '2022-12-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
|
||||||
|
|
||||||
|
print ================ start query ======================
|
||||||
|
|
||||||
|
print =============== step1
|
||||||
|
print =====sql : select stddev(c1) as b from ct4
|
||||||
|
sql select stddev(c1) as b from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c1) as b from t1
|
||||||
|
sql select stddev(c1) as b from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select _wstartts, stddev(c1) as b from ct4 interval(1y)
|
||||||
|
sql select _wstartts, stddev(c1) as b from ct4 interval(1y)
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select _wstartts, stddev(c1) as b from t1 interval(1y)
|
||||||
|
sql select _wstartts, stddev(c1) as b from t1 interval(1y)
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====select _wstartts, stddev(c1) as b from ct4 where c1 <= 6 interval(180d)
|
||||||
|
sql select _wstartts, stddev(c1) as b from ct4 where c1 <= 6 interval(180d)
|
||||||
|
# print ===> $rows
|
||||||
|
# if $rows != 3 then
|
||||||
|
# return -1
|
||||||
|
# endi
|
||||||
|
|
||||||
|
print =====select _wstartts, stddev(c1) as b from t1 where c1 <= 6 interval(180d)
|
||||||
|
sql select _wstartts, stddev(c1) as b from t1 where c1 <= 6 interval(180d)
|
||||||
|
# print ===> $rows
|
||||||
|
# if $rows != 3 then
|
||||||
|
# return -1
|
||||||
|
# endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c1) a1, sum(c1) b1 from ct4
|
||||||
|
sql select stddev(c1) a1, sum(c1) b1 from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c1) a1, sum(c1) b1 from t1
|
||||||
|
sql select stddev(c1) a1, sum(c1) b1 from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c1)+sum(c1) b1 from ct4
|
||||||
|
sql select stddev(c1)+sum(c1) b1 from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c1)+sum(c1) b1 from t1
|
||||||
|
sql select stddev(c1)+sum(c1) b1 from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c2) from ct4
|
||||||
|
sql select stddev(c2) from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c2) from t1
|
||||||
|
sql select stddev(c2) from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c3) from ct4
|
||||||
|
sql select stddev(c3) from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c3) from t1
|
||||||
|
sql select stddev(c3) from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c4) from ct4
|
||||||
|
sql select stddev(c4) from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c4) from t1
|
||||||
|
sql select stddev(c4) from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c5) from ct4
|
||||||
|
sql select stddev(c5) from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c5) from t1
|
||||||
|
sql select stddev(c5) from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c6) from ct4
|
||||||
|
sql select stddev(c6) from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c6) from t1
|
||||||
|
sql select stddev(c6) from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c7) from ct4
|
||||||
|
sql_error select stddev(c7) from ct4
|
||||||
|
# print ===> $rows
|
||||||
|
# if $rows != 1 then
|
||||||
|
# return -1
|
||||||
|
# endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c7) from t1
|
||||||
|
sql_error select stddev(c7) from t1
|
||||||
|
# print ===> $rows
|
||||||
|
# if $rows != 1 then
|
||||||
|
# return -1
|
||||||
|
# endi
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
print =============== stop and restart taosd
|
||||||
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
|
$loop_cnt = 0
|
||||||
|
check_dnode_ready_0:
|
||||||
|
$loop_cnt = $loop_cnt + 1
|
||||||
|
sleep 200
|
||||||
|
if $loop_cnt == 10 then
|
||||||
|
print ====> dnode not ready!
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql show dnodes
|
||||||
|
print ===> $rows $data00 $data01 $data02 $data03 $data04 $data05
|
||||||
|
if $data00 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data04 != ready then
|
||||||
|
goto check_dnode_ready_0
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =============== step2 after wal
|
||||||
|
print =====sql : select stddev(c1) as b from ct4
|
||||||
|
sql select stddev(c1) as b from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c1) as b from t1
|
||||||
|
sql select stddev(c1) as b from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select _wstartts, stddev(c1) as b from ct4 interval(1y)
|
||||||
|
sql select _wstartts, stddev(c1) as b from ct4 interval(1y)
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select _wstartts, stddev(c1) as b from t1 interval(1y)
|
||||||
|
sql select _wstartts, stddev(c1) as b from t1 interval(1y)
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====select _wstartts, stddev(c1) as b from ct4 where c1 <= 6 interval(180d)
|
||||||
|
sql select _wstartts, stddev(c1) as b from ct4 where c1 <= 6 interval(180d)
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====select _wstartts, stddev(c1) as b from t1 where c1 <= 6 interval(180d)
|
||||||
|
sql select _wstartts, stddev(c1) as b from t1 where c1 <= 6 interval(180d)
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c1) a1, sum(c1) b1 from ct4
|
||||||
|
sql select stddev(c1) a1, sum(c1) b1 from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c1) a1, sum(c1) b1 from t1
|
||||||
|
sql select stddev(c1) a1, sum(c1) b1 from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c1)+sum(c1) b1 from ct4
|
||||||
|
sql select stddev(c1)+sum(c1) b1 from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c1)+sum(c1) b1 from t1
|
||||||
|
sql select stddev(c1)+sum(c1) b1 from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c2) from ct4
|
||||||
|
sql select stddev(c2) from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c2) from t1
|
||||||
|
sql select stddev(c2) from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c3) from ct4
|
||||||
|
sql select stddev(c3) from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c3) from t1
|
||||||
|
sql select stddev(c3) from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c4) from ct4
|
||||||
|
sql select stddev(c4) from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c4) from t1
|
||||||
|
sql select stddev(c4) from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c5) from ct4
|
||||||
|
sql select stddev(c5) from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c5) from t1
|
||||||
|
sql select stddev(c5) from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c6) from ct4
|
||||||
|
sql select stddev(c6) from ct4
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c6) from t1
|
||||||
|
sql select stddev(c6) from t1
|
||||||
|
print ===> $rows
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c7) from ct4
|
||||||
|
sql_error select stddev(c7) from ct4
|
||||||
|
# print ===> $rows
|
||||||
|
# if $rows != 1 then
|
||||||
|
# return -1
|
||||||
|
# endi
|
||||||
|
|
||||||
|
print =====sql : select stddev(c7) from t1
|
||||||
|
sql_error select stddev(c7) from t1
|
||||||
|
# print ===> $rows
|
||||||
|
# if $rows != 1 then
|
||||||
|
# return -1
|
||||||
|
# endi
|
||||||
|
|
||||||
|
print =============== clear
|
||||||
|
sql drop database db
|
||||||
|
sql show databases
|
||||||
|
if $rows != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
Loading…
Reference in New Issue