Merge remote-tracking branch 'origin/develop' into feature/crash_gen
This commit is contained in:
commit
9f834bbfc9
|
@ -48,7 +48,7 @@ ELSEIF (TD_WINDOWS_64)
|
|||
IF (NOT TD_GODLL)
|
||||
SET_TARGET_PROPERTIES(taos PROPERTIES LINK_FLAGS /DEF:${TD_COMMUNITY_DIR}/src/client/src/taos.def)
|
||||
ENDIF ()
|
||||
TARGET_LINK_LIBRARIES(taos trpc)
|
||||
TARGET_LINK_LIBRARIES(taos trpc tutil)
|
||||
|
||||
ELSEIF (TD_DARWIN_64)
|
||||
SET(CMAKE_MACOSX_RPATH 1)
|
||||
|
|
|
@ -120,7 +120,7 @@ void tscCreateLocalReducer(tExtMemBuffer **pMemBuffer, int32_t numOfBuffer, tOrd
|
|||
|
||||
void tscDestroyLocalReducer(SSqlObj *pSql);
|
||||
|
||||
int32_t tscDoLocalreduce(SSqlObj *pSql);
|
||||
int32_t tscDoLocalMerge(SSqlObj *pSql);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -29,8 +29,8 @@ void tscSetupOutputColumnIndex(SSqlObj* pSql);
|
|||
int32_t tscLaunchSecondPhaseSubqueries(SSqlObj* pSql);
|
||||
void tscJoinQueryCallback(void* param, TAOS_RES* tres, int code);
|
||||
|
||||
SJoinSubquerySupporter* tscCreateJoinSupporter(SSqlObj* pSql, SSubqueryState* pState, int32_t index);
|
||||
void tscDestroyJoinSupporter(SJoinSubquerySupporter* pSupporter);
|
||||
SJoinSupporter* tscCreateJoinSupporter(SSqlObj* pSql, SSubqueryState* pState, int32_t index);
|
||||
void tscDestroyJoinSupporter(SJoinSupporter* pSupporter);
|
||||
|
||||
int32_t tscHandleMasterJoinQuery(SSqlObj* pSql);
|
||||
|
||||
|
@ -38,6 +38,9 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql);
|
|||
|
||||
int32_t tscHandleMultivnodeInsert(SSqlObj *pSql);
|
||||
|
||||
void tscBuildResFromSubqueries(SSqlObj *pSql);
|
||||
void **doSetResultRowData(SSqlObj *pSql, bool finalResult);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -51,22 +51,38 @@ typedef struct SParsedDataColInfo {
|
|||
bool hasVal[TSDB_MAX_COLUMNS];
|
||||
} SParsedDataColInfo;
|
||||
|
||||
typedef struct SJoinSubquerySupporter {
|
||||
typedef struct STidTags {
|
||||
int64_t uid;
|
||||
int32_t tid;
|
||||
int32_t vgId;
|
||||
char tag[];
|
||||
} STidTags;
|
||||
|
||||
typedef struct SJoinSupporter {
|
||||
SSubqueryState* pState;
|
||||
SSqlObj* pObj; // parent SqlObj
|
||||
int32_t subqueryIndex; // index of sub query
|
||||
int64_t interval; // interval time
|
||||
SLimitVal limit; // limit info
|
||||
uint64_t uid; // query meter uid
|
||||
SArray* colList; // previous query information
|
||||
SArray* exprsInfo;
|
||||
SArray* colList; // previous query information, no need to use this attribute, and the corresponding attribution
|
||||
SArray* exprList;
|
||||
SFieldInfo fieldsInfo;
|
||||
STagCond tagCond;
|
||||
SSqlGroupbyExpr groupbyExpr;
|
||||
struct STSBuf* pTSBuf; // the TSBuf struct that holds the compressed timestamp array
|
||||
FILE* f; // temporary file in order to create TSBuf
|
||||
char path[PATH_MAX]; // temporary file path
|
||||
} SJoinSubquerySupporter;
|
||||
char path[PATH_MAX]; // temporary file path, todo dynamic allocate memory
|
||||
int32_t tagSize; // the length of each in the first filter stage
|
||||
char* pIdTagList; // result of first stage tags
|
||||
int32_t totalLen;
|
||||
int32_t num;
|
||||
} SJoinSupporter;
|
||||
|
||||
typedef struct SVgroupTableInfo {
|
||||
SCMVgroupInfo vgInfo;
|
||||
SArray* itemList; //SArray<STableIdInfo>
|
||||
} SVgroupTableInfo;
|
||||
|
||||
int32_t tscCreateDataBlock(size_t initialSize, int32_t rowSize, int32_t startOffset, const char* name,
|
||||
STableMeta* pTableMeta, STableDataBlocks** dataBlocks);
|
||||
|
@ -87,7 +103,7 @@ int32_t tscGetDataBlockFromList(void* pHashList, SDataBlockList* pDataBlockList,
|
|||
int32_t startOffset, int32_t rowSize, const char* tableId, STableMeta* pTableMeta,
|
||||
STableDataBlocks** dataBlocks);
|
||||
|
||||
UNUSED_FUNC STableIdInfo* tscGetMeterSidInfo(SVnodeSidList* pSidList, int32_t idx);
|
||||
//UNUSED_FUNC STableIdInfo* tscGetMeterSidInfo(SVnodeSidList* pSidList, int32_t idx);
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -120,7 +136,7 @@ void addRequiredTagColumn(STableMetaInfo* pTableMetaInfo, SColumnIndex* index);
|
|||
int32_t tscSetTableId(STableMetaInfo* pTableMetaInfo, SSQLToken* pzTableName, SSqlObj* pSql);
|
||||
void tscClearInterpInfo(SQueryInfo* pQueryInfo);
|
||||
|
||||
bool tscIsInsertOrImportData(char* sqlstr);
|
||||
bool tscIsInsertData(char* sqlstr);
|
||||
|
||||
/* use for keep current db info temporarily, for handle table with db prefix */
|
||||
// todo remove it
|
||||
|
@ -160,7 +176,7 @@ SSqlExpr* tscSqlExprUpdate(SQueryInfo* pQueryInfo, int32_t index, int16_t functi
|
|||
int32_t tscSqlExprNumOfExprs(SQueryInfo* pQueryInfo);
|
||||
|
||||
SSqlExpr* tscSqlExprGet(SQueryInfo* pQueryInfo, int32_t index);
|
||||
SArray* tscSqlExprCopy(const SArray* src, uint64_t uid, bool deepcopy);
|
||||
void tscSqlExprCopy(SArray* dst, const SArray* src, uint64_t uid, bool deepcopy);
|
||||
void tscSqlExprInfoDestroy(SArray* pExprInfo);
|
||||
|
||||
SColumn* tscColumnClone(const SColumn* src);
|
||||
|
@ -190,7 +206,6 @@ bool tscShouldFreeHeatBeat(SSqlObj* pHb);
|
|||
void tscCleanSqlCmd(SSqlCmd* pCmd);
|
||||
bool tscShouldBeFreed(SSqlObj* pSql);
|
||||
|
||||
void tscClearAllTableMetaInfo(SQueryInfo* pQueryInfo, const char* address, bool removeFromCache);
|
||||
STableMetaInfo* tscGetTableMetaInfoFromCmd(SSqlCmd *pCmd, int32_t subClauseIndex, int32_t tableIndex);
|
||||
STableMetaInfo* tscGetMetaInfo(SQueryInfo *pQueryInfo, int32_t tableIndex);
|
||||
|
||||
|
@ -204,7 +219,10 @@ STableMetaInfo* tscAddTableMetaInfo(SQueryInfo* pQueryInfo, const char* name, ST
|
|||
|
||||
STableMetaInfo* tscAddEmptyMetaInfo(SQueryInfo *pQueryInfo);
|
||||
int32_t tscAddSubqueryInfo(SSqlCmd *pCmd);
|
||||
|
||||
void tscFreeQueryInfo(SSqlCmd* pCmd);
|
||||
void tscInitQueryInfo(SQueryInfo* pQueryInfo);
|
||||
|
||||
void tscClearSubqueryInfo(SSqlCmd* pCmd);
|
||||
|
||||
int tscGetSTableVgroupInfo(SSqlObj* pSql, int32_t clauseIndex);
|
||||
|
|
|
@ -45,8 +45,6 @@ enum {
|
|||
DATA_FROM_DATA_FILE = 2,
|
||||
};
|
||||
|
||||
typedef SCMSTableVgroupRspMsg SVgroupsInfo;
|
||||
|
||||
typedef struct STableComInfo {
|
||||
uint8_t numOfTags;
|
||||
uint8_t precision;
|
||||
|
@ -69,12 +67,13 @@ typedef struct STableMeta {
|
|||
} STableMeta;
|
||||
|
||||
typedef struct STableMetaInfo {
|
||||
STableMeta * pTableMeta; // table meta, cached in client side and acquried by name
|
||||
STableMeta * pTableMeta; // table meta, cached in client side and acquired by name
|
||||
SVgroupsInfo *vgroupList;
|
||||
SArray *pVgroupTables; // SArray<SVgroupTableInfo>
|
||||
|
||||
/*
|
||||
* 1. keep the vnode index during the multi-vnode super table projection query
|
||||
* 2. keep the vnode index for multi-vnode insertion
|
||||
* 1. keep the vgroup index during the multi-vnode super table projection query
|
||||
* 2. keep the vgroup index for multi-vnode insertion
|
||||
*/
|
||||
int32_t vgroupIndex;
|
||||
char name[TSDB_TABLE_ID_LEN]; // (super) table name
|
||||
|
@ -102,7 +101,7 @@ typedef struct SColumnIndex {
|
|||
|
||||
typedef struct SFieldSupInfo {
|
||||
bool visible;
|
||||
SArithExprInfo *pArithExprInfo;
|
||||
SExprInfo *pArithExprInfo;
|
||||
SSqlExpr * pSqlExpr;
|
||||
} SFieldSupInfo;
|
||||
|
||||
|
@ -206,7 +205,7 @@ typedef struct SQueryInfo {
|
|||
|
||||
SArray * colList; // SArray<SColumn*>
|
||||
SFieldInfo fieldsInfo;
|
||||
SArray * exprsInfo; // SArray<SSqlExpr*>
|
||||
SArray * exprList; // SArray<SSqlExpr*>
|
||||
SLimitVal limit;
|
||||
SLimitVal slimit;
|
||||
STagCond tagCond;
|
||||
|
@ -382,7 +381,6 @@ int32_t tscCreateResPointerInfo(SSqlRes *pRes, SQueryInfo *pQueryInfo);
|
|||
void tscDestroyResPointerInfo(SSqlRes *pRes);
|
||||
|
||||
void tscResetSqlCmdObj(SSqlCmd *pCmd);
|
||||
void tscFreeResData(SSqlObj *pSql);
|
||||
|
||||
/**
|
||||
* free query result of the sql object
|
||||
|
@ -395,7 +393,7 @@ void tscFreeSqlResult(SSqlObj *pSql);
|
|||
* Note: this function is multi-thread safe.
|
||||
* @param pObj
|
||||
*/
|
||||
void tscFreeSqlObjPartial(SSqlObj *pObj);
|
||||
void tscPartiallyFreeSqlObj(SSqlObj *pObj);
|
||||
|
||||
/**
|
||||
* free sql object, release allocated resource
|
||||
|
@ -423,7 +421,7 @@ int32_t tscInvalidSQLErrMsg(char *msg, const char *additionalInfo, const char *s
|
|||
|
||||
void tscQueueAsyncFreeResult(SSqlObj *pSql);
|
||||
int32_t tscToSQLCmd(SSqlObj *pSql, struct SSqlInfo *pInfo);
|
||||
char * tscGetResultColumnChr(SSqlRes *pRes, SQueryInfo *pQueryInfo, int32_t column);
|
||||
char * tscGetResultColumnChr(SSqlRes *pRes, SQueryInfo *pQueryInfo, int32_t column, int16_t bytes);
|
||||
|
||||
extern void * pVnodeConn;
|
||||
extern void * tscCacheHandle;
|
||||
|
|
|
@ -14,17 +14,18 @@
|
|||
*/
|
||||
|
||||
#include "os.h"
|
||||
#include "tutil.h"
|
||||
|
||||
#include "tnote.h"
|
||||
#include "trpc.h"
|
||||
#include "tscLog.h"
|
||||
#include "tscProfile.h"
|
||||
#include "tscSubquery.h"
|
||||
#include "tscSecondaryMerge.h"
|
||||
#include "tscUtil.h"
|
||||
#include "tsclient.h"
|
||||
#include "tsocket.h"
|
||||
#include "tutil.h"
|
||||
#include "tnote.h"
|
||||
#include "tsched.h"
|
||||
#include "tschemautil.h"
|
||||
#include "tsclient.h"
|
||||
|
||||
static void tscProcessFetchRow(SSchedMsg *pMsg);
|
||||
static void tscAsyncQueryRowsForNextVnode(void *param, TAOS_RES *tres, int numOfRows);
|
||||
|
@ -145,7 +146,7 @@ static void tscAsyncFetchRowsProxy(void *param, TAOS_RES *tres, int numOfRows) {
|
|||
}
|
||||
|
||||
// local reducer has handle this situation during super table non-projection query.
|
||||
if (pCmd->command != TSDB_SQL_RETRIEVE_METRIC) {
|
||||
if (pCmd->command != TSDB_SQL_RETRIEVE_LOCALMERGE) {
|
||||
pRes->numOfTotalInCurrentClause += pRes->numOfRows;
|
||||
}
|
||||
|
||||
|
@ -175,7 +176,7 @@ static void tscProcessAsyncRetrieveImpl(void *param, TAOS_RES *tres, int numOfRo
|
|||
}
|
||||
|
||||
pSql->fp = fp;
|
||||
if (pCmd->command != TSDB_SQL_RETRIEVE_METRIC && pCmd->command < TSDB_SQL_LOCAL) {
|
||||
if (pCmd->command != TSDB_SQL_RETRIEVE_LOCALMERGE && pCmd->command < TSDB_SQL_LOCAL) {
|
||||
pCmd->command = (pCmd->command > TSDB_SQL_MGMT) ? TSDB_SQL_RETRIEVE : TSDB_SQL_FETCH;
|
||||
}
|
||||
tscProcessSql(pSql);
|
||||
|
@ -220,12 +221,17 @@ void taos_fetch_rows_a(TAOS_RES *taosa, void (*fp)(void *, TAOS_RES *, int), voi
|
|||
pSql->param = param;
|
||||
tscResetForNextRetrieve(pRes);
|
||||
|
||||
if (pCmd->command != TSDB_SQL_RETRIEVE_METRIC && pCmd->command < TSDB_SQL_LOCAL) {
|
||||
// handle the sub queries of join query
|
||||
if (pCmd->command == TSDB_SQL_METRIC_JOIN_RETRIEVE) {
|
||||
tscFetchDatablockFromSubquery(pSql);
|
||||
} else {
|
||||
if (pCmd->command != TSDB_SQL_RETRIEVE_LOCALMERGE && pCmd->command < TSDB_SQL_LOCAL) {
|
||||
pCmd->command = (pCmd->command > TSDB_SQL_MGMT) ? TSDB_SQL_RETRIEVE : TSDB_SQL_FETCH;
|
||||
}
|
||||
|
||||
tscProcessSql(pSql);
|
||||
}
|
||||
}
|
||||
|
||||
void taos_fetch_row_a(TAOS_RES *taosa, void (*fp)(void *, TAOS_RES *, TAOS_ROW), void *param) {
|
||||
SSqlObj *pSql = (SSqlObj *)taosa;
|
||||
|
@ -251,7 +257,7 @@ void taos_fetch_row_a(TAOS_RES *taosa, void (*fp)(void *, TAOS_RES *, TAOS_ROW),
|
|||
tscResetForNextRetrieve(pRes);
|
||||
pSql->fp = tscAsyncFetchSingleRowProxy;
|
||||
|
||||
if (pCmd->command != TSDB_SQL_RETRIEVE_METRIC && pCmd->command < TSDB_SQL_LOCAL) {
|
||||
if (pCmd->command != TSDB_SQL_RETRIEVE_LOCALMERGE && pCmd->command < TSDB_SQL_LOCAL) {
|
||||
pCmd->command = (pCmd->command > TSDB_SQL_MGMT) ? TSDB_SQL_RETRIEVE : TSDB_SQL_FETCH;
|
||||
}
|
||||
|
||||
|
@ -311,7 +317,7 @@ void tscProcessFetchRow(SSchedMsg *pMsg) {
|
|||
SFieldSupInfo* pSup = taosArrayGet(pQueryInfo->fieldsInfo.pSupportInfo, i);
|
||||
|
||||
if (pSup->pSqlExpr != NULL) {
|
||||
pRes->tsrow[i] = tscGetResultColumnChr(pRes, pQueryInfo, i);
|
||||
pRes->tsrow[i] = tscGetResultColumnChr(pRes, pQueryInfo, i, pSup->pSqlExpr->resBytes);
|
||||
} else {
|
||||
// todo add
|
||||
}
|
||||
|
|
|
@ -153,7 +153,7 @@ typedef struct SRateInfo {
|
|||
|
||||
|
||||
int32_t getResultDataInfo(int32_t dataType, int32_t dataBytes, int32_t functionId, int32_t param, int16_t *type,
|
||||
int16_t *bytes, int16_t *intermediateResBytes, int16_t extLength, bool isSuperTable) {
|
||||
int16_t *bytes, int16_t *interResBytes, int16_t extLength, bool isSuperTable) {
|
||||
if (!isValidDataType(dataType, dataBytes)) {
|
||||
tscError("Illegal data type %d or data type length %d", dataType, dataBytes);
|
||||
return TSDB_CODE_INVALID_SQL;
|
||||
|
@ -164,28 +164,35 @@ int32_t getResultDataInfo(int32_t dataType, int32_t dataBytes, int32_t functionI
|
|||
functionId == TSDB_FUNC_TAG || functionId == TSDB_FUNC_INTERP) {
|
||||
*type = (int16_t)dataType;
|
||||
*bytes = (int16_t)dataBytes;
|
||||
*intermediateResBytes = *bytes + sizeof(SResultInfo);
|
||||
*interResBytes = *bytes + sizeof(SResultInfo);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
if (functionId == TSDB_FUNC_TID_TAG) { // todo use struct
|
||||
*type = TSDB_DATA_TYPE_BINARY;
|
||||
*bytes = dataBytes + sizeof(int64_t) + sizeof(int32_t) + sizeof(int32_t); // (uid, tid) + VGID + TAGSIZE
|
||||
*interResBytes = *bytes;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
if (functionId == TSDB_FUNC_COUNT) {
|
||||
*type = TSDB_DATA_TYPE_BIGINT;
|
||||
*bytes = sizeof(int64_t);
|
||||
*intermediateResBytes = *bytes;
|
||||
*interResBytes = *bytes;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
if (functionId == TSDB_FUNC_ARITHM) {
|
||||
*type = TSDB_DATA_TYPE_DOUBLE;
|
||||
*bytes = sizeof(double);
|
||||
*intermediateResBytes = *bytes;
|
||||
*interResBytes = *bytes;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
if (functionId == TSDB_FUNC_TS_COMP) {
|
||||
*type = TSDB_DATA_TYPE_BINARY;
|
||||
*bytes = sizeof(int32_t); // this results is compressed ts data
|
||||
*intermediateResBytes = POINTER_BYTES;
|
||||
*interResBytes = POINTER_BYTES;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -193,54 +200,54 @@ int32_t getResultDataInfo(int32_t dataType, int32_t dataBytes, int32_t functionI
|
|||
if (functionId == TSDB_FUNC_MIN || functionId == TSDB_FUNC_MAX) {
|
||||
*type = TSDB_DATA_TYPE_BINARY;
|
||||
*bytes = dataBytes + DATA_SET_FLAG_SIZE;
|
||||
*intermediateResBytes = *bytes;
|
||||
*interResBytes = *bytes;
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else if (functionId == TSDB_FUNC_SUM) {
|
||||
*type = TSDB_DATA_TYPE_BINARY;
|
||||
*bytes = sizeof(SSumInfo);
|
||||
*intermediateResBytes = *bytes;
|
||||
*interResBytes = *bytes;
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else if (functionId == TSDB_FUNC_AVG) {
|
||||
*type = TSDB_DATA_TYPE_BINARY;
|
||||
*bytes = sizeof(SAvgInfo);
|
||||
*intermediateResBytes = *bytes;
|
||||
*interResBytes = *bytes;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
||||
} else if (functionId >= TSDB_FUNC_RATE && functionId <= TSDB_FUNC_AVG_IRATE) {
|
||||
*type = TSDB_DATA_TYPE_DOUBLE;
|
||||
*bytes = sizeof(SRateInfo);
|
||||
*intermediateResBytes = sizeof(SRateInfo);
|
||||
*interResBytes = sizeof(SRateInfo);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else if (functionId == TSDB_FUNC_TOP || functionId == TSDB_FUNC_BOTTOM) {
|
||||
*type = TSDB_DATA_TYPE_BINARY;
|
||||
*bytes = sizeof(STopBotInfo) + (sizeof(tValuePair) + POINTER_BYTES + extLength) * param;
|
||||
*intermediateResBytes = *bytes;
|
||||
*interResBytes = *bytes;
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else if (functionId == TSDB_FUNC_SPREAD) {
|
||||
*type = TSDB_DATA_TYPE_BINARY;
|
||||
*bytes = sizeof(SSpreadInfo);
|
||||
*intermediateResBytes = *bytes;
|
||||
*interResBytes = *bytes;
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else if (functionId == TSDB_FUNC_APERCT) {
|
||||
*type = TSDB_DATA_TYPE_BINARY;
|
||||
*bytes = sizeof(SHistBin) * (MAX_HISTOGRAM_BIN + 1) + sizeof(SHistogramInfo) + sizeof(SAPercentileInfo);
|
||||
*intermediateResBytes = *bytes;
|
||||
*interResBytes = *bytes;
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else if (functionId == TSDB_FUNC_LAST_ROW) {
|
||||
*type = TSDB_DATA_TYPE_BINARY;
|
||||
*bytes = sizeof(SLastrowInfo) + dataBytes;
|
||||
*intermediateResBytes = *bytes;
|
||||
*interResBytes = *bytes;
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else if (functionId == TSDB_FUNC_TWA) {
|
||||
*type = TSDB_DATA_TYPE_DOUBLE;
|
||||
*bytes = sizeof(STwaInfo);
|
||||
*intermediateResBytes = *bytes;
|
||||
*interResBytes = *bytes;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
@ -253,57 +260,57 @@ int32_t getResultDataInfo(int32_t dataType, int32_t dataBytes, int32_t functionI
|
|||
}
|
||||
|
||||
*bytes = sizeof(int64_t);
|
||||
*intermediateResBytes = sizeof(SSumInfo);
|
||||
*interResBytes = sizeof(SSumInfo);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else if (functionId == TSDB_FUNC_APERCT) {
|
||||
*type = TSDB_DATA_TYPE_DOUBLE;
|
||||
*bytes = sizeof(double);
|
||||
*intermediateResBytes =
|
||||
*interResBytes =
|
||||
sizeof(SAPercentileInfo) + sizeof(SHistogramInfo) + sizeof(SHistBin) * (MAX_HISTOGRAM_BIN + 1);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else if (functionId == TSDB_FUNC_TWA) {
|
||||
*type = TSDB_DATA_TYPE_DOUBLE;
|
||||
*bytes = sizeof(double);
|
||||
*intermediateResBytes = sizeof(STwaInfo);
|
||||
*interResBytes = sizeof(STwaInfo);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
if (functionId == TSDB_FUNC_AVG) {
|
||||
*type = TSDB_DATA_TYPE_DOUBLE;
|
||||
*bytes = sizeof(double);
|
||||
*intermediateResBytes = sizeof(SAvgInfo);
|
||||
*interResBytes = sizeof(SAvgInfo);
|
||||
} else if (functionId >= TSDB_FUNC_RATE && functionId <= TSDB_FUNC_AVG_IRATE) {
|
||||
*type = TSDB_DATA_TYPE_DOUBLE;
|
||||
*bytes = sizeof(double);
|
||||
*intermediateResBytes = sizeof(SRateInfo);
|
||||
*interResBytes = sizeof(SRateInfo);
|
||||
} else if (functionId == TSDB_FUNC_STDDEV) {
|
||||
*type = TSDB_DATA_TYPE_DOUBLE;
|
||||
*bytes = sizeof(double);
|
||||
*intermediateResBytes = sizeof(SStddevInfo);
|
||||
*interResBytes = sizeof(SStddevInfo);
|
||||
} else if (functionId == TSDB_FUNC_MIN || functionId == TSDB_FUNC_MAX) {
|
||||
*type = (int16_t)dataType;
|
||||
*bytes = (int16_t)dataBytes;
|
||||
*intermediateResBytes = dataBytes + DATA_SET_FLAG_SIZE;
|
||||
*interResBytes = dataBytes + DATA_SET_FLAG_SIZE;
|
||||
} else if (functionId == TSDB_FUNC_FIRST || functionId == TSDB_FUNC_LAST) {
|
||||
*type = (int16_t)dataType;
|
||||
*bytes = (int16_t)dataBytes;
|
||||
*intermediateResBytes = dataBytes + sizeof(SResultInfo);
|
||||
*interResBytes = dataBytes + sizeof(SResultInfo);
|
||||
} else if (functionId == TSDB_FUNC_SPREAD) {
|
||||
*type = (int16_t)TSDB_DATA_TYPE_DOUBLE;
|
||||
*bytes = sizeof(double);
|
||||
*intermediateResBytes = sizeof(SSpreadInfo);
|
||||
*interResBytes = sizeof(SSpreadInfo);
|
||||
} else if (functionId == TSDB_FUNC_PERCT) {
|
||||
*type = (int16_t)TSDB_DATA_TYPE_DOUBLE;
|
||||
*bytes = (int16_t)sizeof(double);
|
||||
*intermediateResBytes = (int16_t)sizeof(double);
|
||||
*interResBytes = (int16_t)sizeof(double);
|
||||
} else if (functionId == TSDB_FUNC_LEASTSQR) {
|
||||
*type = TSDB_DATA_TYPE_BINARY;
|
||||
*bytes = TSDB_AVG_FUNCTION_INTER_BUFFER_SIZE; // string
|
||||
*intermediateResBytes = *bytes + sizeof(SResultInfo);
|
||||
*interResBytes = *bytes + sizeof(SResultInfo);
|
||||
} else if (functionId == TSDB_FUNC_FIRST_DST || functionId == TSDB_FUNC_LAST_DST) {
|
||||
*type = TSDB_DATA_TYPE_BINARY;
|
||||
*bytes = dataBytes + sizeof(SFirstLastInfo);
|
||||
*intermediateResBytes = *bytes;
|
||||
*interResBytes = *bytes;
|
||||
} else if (functionId == TSDB_FUNC_TOP || functionId == TSDB_FUNC_BOTTOM) {
|
||||
*type = (int16_t)dataType;
|
||||
*bytes = (int16_t)dataBytes;
|
||||
|
@ -311,11 +318,11 @@ int32_t getResultDataInfo(int32_t dataType, int32_t dataBytes, int32_t functionI
|
|||
size_t size = sizeof(STopBotInfo) + (sizeof(tValuePair) + POINTER_BYTES + extLength) * param;
|
||||
|
||||
// the output column may be larger than sizeof(STopBotInfo)
|
||||
*intermediateResBytes = size;
|
||||
*interResBytes = size;
|
||||
} else if (functionId == TSDB_FUNC_LAST_ROW) {
|
||||
*type = (int16_t)dataType;
|
||||
*bytes = (int16_t)dataBytes;
|
||||
*intermediateResBytes = dataBytes + sizeof(SLastrowInfo);
|
||||
*interResBytes = dataBytes + sizeof(SLastrowInfo);
|
||||
} else {
|
||||
return TSDB_CODE_INVALID_SQL;
|
||||
}
|
||||
|
@ -1837,6 +1844,7 @@ static void last_row_function(SQLFunctionCtx *pCtx) {
|
|||
assignVal(pCtx->aOutputBuf, pData, pCtx->inputBytes, pCtx->inputType);
|
||||
|
||||
SResultInfo *pResInfo = GET_RES_INFO(pCtx);
|
||||
pResInfo->hasResult = DATA_SET_FLAG;
|
||||
|
||||
SLastrowInfo *pInfo = (SLastrowInfo *)pResInfo->interResultBuf;
|
||||
pInfo->ts = pCtx->param[0].i64Key;
|
||||
|
@ -1856,14 +1864,17 @@ static void last_row_function(SQLFunctionCtx *pCtx) {
|
|||
|
||||
static void last_row_finalizer(SQLFunctionCtx *pCtx) {
|
||||
// do nothing at the first stage
|
||||
if (pCtx->currentStage == SECONDARY_STAGE_MERGE) {
|
||||
SResultInfo *pResInfo = GET_RES_INFO(pCtx);
|
||||
if (pCtx->currentStage == SECONDARY_STAGE_MERGE) {
|
||||
if (pResInfo->hasResult != DATA_SET_FLAG) {
|
||||
setNull(pCtx->aOutputBuf, pCtx->outputType, pCtx->outputBytes);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
// do nothing
|
||||
if (pResInfo->hasResult != DATA_SET_FLAG) {
|
||||
setNull(pCtx->aOutputBuf, pCtx->outputType, pCtx->outputBytes);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
GET_RES_INFO(pCtx)->numOfRes = 1;
|
||||
|
@ -2974,11 +2985,28 @@ static void tag_project_function_f(SQLFunctionCtx *pCtx, int32_t index) {
|
|||
*/
|
||||
static void tag_function(SQLFunctionCtx *pCtx) {
|
||||
SET_VAL(pCtx, 1, 1);
|
||||
tVariantDump(&pCtx->tag, pCtx->aOutputBuf, pCtx->tag.nType);
|
||||
|
||||
char* output = pCtx->aOutputBuf;
|
||||
|
||||
// todo refactor to dump length presented string(var string)
|
||||
if (pCtx->tag.nType == TSDB_DATA_TYPE_BINARY || pCtx->tag.nType == TSDB_DATA_TYPE_NCHAR) {
|
||||
*(int16_t*) output = pCtx->tag.nLen;
|
||||
output += VARSTR_HEADER_SIZE;
|
||||
}
|
||||
|
||||
tVariantDump(&pCtx->tag, output, pCtx->tag.nType);
|
||||
}
|
||||
|
||||
static void tag_function_f(SQLFunctionCtx *pCtx, int32_t index) {
|
||||
SET_VAL(pCtx, 1, 1);
|
||||
|
||||
char* output = pCtx->aOutputBuf;
|
||||
|
||||
// todo refactor to dump length presented string(var string)
|
||||
if (pCtx->tag.nType == TSDB_DATA_TYPE_BINARY || pCtx->tag.nType == TSDB_DATA_TYPE_NCHAR) {
|
||||
*(int16_t*) output = pCtx->tag.nLen;
|
||||
output += VARSTR_HEADER_SIZE;
|
||||
}
|
||||
tVariantDump(&pCtx->tag, pCtx->aOutputBuf, pCtx->tag.nType);
|
||||
}
|
||||
|
||||
|
@ -4836,7 +4864,7 @@ SQLAggFuncElem aAggs[] = {{
|
|||
"apercentile",
|
||||
TSDB_FUNC_APERCT,
|
||||
TSDB_FUNC_APERCT,
|
||||
TSDB_FUNCSTATE_SO | TSDB_FUNCSTATE_STREAM | TSDB_FUNCSTATE_OF | TSDB_FUNCSTATE_METRIC,
|
||||
TSDB_FUNCSTATE_SO | TSDB_FUNCSTATE_STREAM | TSDB_FUNCSTATE_OF | TSDB_FUNCSTATE_STABLE,
|
||||
apercentile_function_setup,
|
||||
apercentile_function,
|
||||
apercentile_function_f,
|
||||
|
@ -4881,7 +4909,7 @@ SQLAggFuncElem aAggs[] = {{
|
|||
"last_row",
|
||||
TSDB_FUNC_LAST_ROW,
|
||||
TSDB_FUNC_LAST_ROW,
|
||||
TSDB_FUNCSTATE_SO | TSDB_FUNCSTATE_OF | TSDB_FUNCSTATE_METRIC | TSDB_FUNCSTATE_NEED_TS |
|
||||
TSDB_FUNCSTATE_SO | TSDB_FUNCSTATE_OF | TSDB_FUNCSTATE_STABLE | TSDB_FUNCSTATE_NEED_TS |
|
||||
TSDB_FUNCSTATE_SELECTIVITY,
|
||||
first_last_function_setup,
|
||||
last_row_function,
|
||||
|
@ -4897,7 +4925,7 @@ SQLAggFuncElem aAggs[] = {{
|
|||
"top",
|
||||
TSDB_FUNC_TOP,
|
||||
TSDB_FUNC_TOP,
|
||||
TSDB_FUNCSTATE_MO | TSDB_FUNCSTATE_METRIC | TSDB_FUNCSTATE_OF | TSDB_FUNCSTATE_NEED_TS |
|
||||
TSDB_FUNCSTATE_MO | TSDB_FUNCSTATE_STABLE | TSDB_FUNCSTATE_OF | TSDB_FUNCSTATE_NEED_TS |
|
||||
TSDB_FUNCSTATE_SELECTIVITY,
|
||||
top_bottom_function_setup,
|
||||
top_function,
|
||||
|
@ -4913,7 +4941,7 @@ SQLAggFuncElem aAggs[] = {{
|
|||
"bottom",
|
||||
TSDB_FUNC_BOTTOM,
|
||||
TSDB_FUNC_BOTTOM,
|
||||
TSDB_FUNCSTATE_MO | TSDB_FUNCSTATE_METRIC | TSDB_FUNCSTATE_OF | TSDB_FUNCSTATE_NEED_TS |
|
||||
TSDB_FUNCSTATE_MO | TSDB_FUNCSTATE_STABLE | TSDB_FUNCSTATE_OF | TSDB_FUNCSTATE_NEED_TS |
|
||||
TSDB_FUNCSTATE_SELECTIVITY,
|
||||
top_bottom_function_setup,
|
||||
bottom_function,
|
||||
|
@ -5079,7 +5107,7 @@ SQLAggFuncElem aAggs[] = {{
|
|||
"arithmetic",
|
||||
TSDB_FUNC_ARITHM,
|
||||
TSDB_FUNC_ARITHM,
|
||||
TSDB_FUNCSTATE_MO | TSDB_FUNCSTATE_METRIC | TSDB_FUNCSTATE_NEED_TS,
|
||||
TSDB_FUNCSTATE_MO | TSDB_FUNCSTATE_STABLE | TSDB_FUNCSTATE_NEED_TS,
|
||||
function_setup,
|
||||
arithmetic_function,
|
||||
arithmetic_function_f,
|
||||
|
@ -5140,7 +5168,7 @@ SQLAggFuncElem aAggs[] = {{
|
|||
"interp",
|
||||
TSDB_FUNC_INTERP,
|
||||
TSDB_FUNC_INTERP,
|
||||
TSDB_FUNCSTATE_SO | TSDB_FUNCSTATE_OF | TSDB_FUNCSTATE_METRIC | TSDB_FUNCSTATE_NEED_TS,
|
||||
TSDB_FUNCSTATE_SO | TSDB_FUNCSTATE_OF | TSDB_FUNCSTATE_STABLE | TSDB_FUNCSTATE_NEED_TS,
|
||||
function_setup,
|
||||
interp_function,
|
||||
do_sum_f, // todo filter handle
|
||||
|
@ -5239,4 +5267,19 @@ SQLAggFuncElem aAggs[] = {{
|
|||
sumrate_func_merge,
|
||||
sumrate_func_second_merge,
|
||||
data_req_load_info,
|
||||
},
|
||||
{
|
||||
// 34
|
||||
"tid_tag", // return table id and the corresponding tags for join match
|
||||
TSDB_FUNC_TID_TAG,
|
||||
TSDB_FUNC_TID_TAG,
|
||||
TSDB_FUNCSTATE_MO,
|
||||
function_setup,
|
||||
noop1,
|
||||
noop2,
|
||||
no_next_step,
|
||||
noop1,
|
||||
noop1,
|
||||
noop1,
|
||||
data_req_load_info,
|
||||
}};
|
||||
|
|
|
@ -131,26 +131,32 @@ static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
|
|||
|
||||
for (int32_t i = 0; i < numOfRows; ++i) {
|
||||
TAOS_FIELD *pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, 0);
|
||||
strncpy(pRes->data + tscFieldInfoGetOffset(pQueryInfo, 0) * totalNumOfRows + pField->bytes * i, pSchema[i].name,
|
||||
TSDB_COL_NAME_LEN);
|
||||
char* dst = pRes->data + tscFieldInfoGetOffset(pQueryInfo, 0) * totalNumOfRows + pField->bytes * i;
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(dst, pSchema[i].name, TSDB_COL_NAME_LEN);
|
||||
|
||||
char *type = tDataTypeDesc[pSchema[i].type].aName;
|
||||
|
||||
pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, 1);
|
||||
strncpy(pRes->data + tscFieldInfoGetOffset(pQueryInfo, 1) * totalNumOfRows + pField->bytes * i, type, pField->bytes);
|
||||
dst = pRes->data + tscFieldInfoGetOffset(pQueryInfo, 1) * totalNumOfRows + pField->bytes * i;
|
||||
|
||||
STR_TO_VARSTR(dst, type);
|
||||
|
||||
int32_t bytes = pSchema[i].bytes;
|
||||
if (pSchema[i].type == TSDB_DATA_TYPE_BINARY || pSchema[i].type == TSDB_DATA_TYPE_NCHAR) {
|
||||
bytes -= VARSTR_HEADER_SIZE;
|
||||
|
||||
if (pSchema[i].type == TSDB_DATA_TYPE_NCHAR) {
|
||||
bytes = bytes / TSDB_NCHAR_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, 2);
|
||||
*(int32_t *)(pRes->data + tscFieldInfoGetOffset(pQueryInfo, 2) * totalNumOfRows + pField->bytes * i) = bytes;
|
||||
|
||||
pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, 3);
|
||||
if (i >= tscGetNumOfColumns(pMeta) && tscGetNumOfTags(pMeta) != 0) {
|
||||
strncpy(pRes->data + tscFieldInfoGetOffset(pQueryInfo, 3) * totalNumOfRows + pField->bytes * i, "tag",
|
||||
strlen("tag") + 1);
|
||||
char* output = pRes->data + tscFieldInfoGetOffset(pQueryInfo, 3) * totalNumOfRows + pField->bytes * i;
|
||||
STR_WITH_SIZE_TO_VARSTR(output, "TAG", 3);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -163,13 +169,15 @@ static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
|
|||
for (int32_t i = numOfRows; i < totalNumOfRows; ++i) {
|
||||
// field name
|
||||
TAOS_FIELD *pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, 0);
|
||||
strncpy(pRes->data + tscFieldInfoGetOffset(pQueryInfo, 0) * totalNumOfRows + pField->bytes * i, pSchema[i].name,
|
||||
TSDB_COL_NAME_LEN);
|
||||
char* output = pRes->data + tscFieldInfoGetOffset(pQueryInfo, 0) * totalNumOfRows + pField->bytes * i;
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(output, pSchema[i].name, TSDB_COL_NAME_LEN);
|
||||
|
||||
// type name
|
||||
pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, 1);
|
||||
char *type = tDataTypeDesc[pSchema[i].type].aName;
|
||||
strncpy(pRes->data + tscFieldInfoGetOffset(pQueryInfo, 1) * totalNumOfRows + pField->bytes * i, type, pField->bytes);
|
||||
|
||||
output = pRes->data + tscFieldInfoGetOffset(pQueryInfo, 1) * totalNumOfRows + pField->bytes * i;
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(output, type, pField->bytes);
|
||||
|
||||
// type length
|
||||
int32_t bytes = pSchema[i].bytes;
|
||||
|
@ -183,49 +191,7 @@ static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
|
|||
// tag value
|
||||
pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, 3);
|
||||
char *target = pRes->data + tscFieldInfoGetOffset(pQueryInfo, 3) * totalNumOfRows + pField->bytes * i;
|
||||
|
||||
if (isNull(pTagValue, pSchema[i].type)) {
|
||||
sprintf(target, "%s", TSDB_DATA_NULL_STR);
|
||||
} else {
|
||||
switch (pSchema[i].type) {
|
||||
case TSDB_DATA_TYPE_BINARY:
|
||||
/* binary are not null-terminated string */
|
||||
strncpy(target, pTagValue, pSchema[i].bytes);
|
||||
break;
|
||||
case TSDB_DATA_TYPE_NCHAR:
|
||||
taosUcs4ToMbs(pTagValue, pSchema[i].bytes, target);
|
||||
break;
|
||||
case TSDB_DATA_TYPE_FLOAT: {
|
||||
float fv = 0;
|
||||
fv = GET_FLOAT_VAL(pTagValue);
|
||||
sprintf(target, "%f", fv);
|
||||
} break;
|
||||
case TSDB_DATA_TYPE_DOUBLE: {
|
||||
double dv = 0;
|
||||
dv = GET_DOUBLE_VAL(pTagValue);
|
||||
sprintf(target, "%lf", dv);
|
||||
} break;
|
||||
case TSDB_DATA_TYPE_TINYINT:
|
||||
sprintf(target, "%d", *(int8_t *)pTagValue);
|
||||
break;
|
||||
case TSDB_DATA_TYPE_SMALLINT:
|
||||
sprintf(target, "%d", *(int16_t *)pTagValue);
|
||||
break;
|
||||
case TSDB_DATA_TYPE_INT:
|
||||
sprintf(target, "%d", *(int32_t *)pTagValue);
|
||||
break;
|
||||
case TSDB_DATA_TYPE_BIGINT:
|
||||
sprintf(target, "%" PRId64 "", *(int64_t *)pTagValue);
|
||||
break;
|
||||
case TSDB_DATA_TYPE_BOOL: {
|
||||
char *val = (*((int8_t *)pTagValue) == 0) ? "false" : "true";
|
||||
sprintf(target, "%s", val);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
STR_WITH_SIZE_TO_VARSTR(target, "TAG", 3);
|
||||
|
||||
pTagValue += pSchema[i].bytes;
|
||||
}
|
||||
|
@ -233,7 +199,7 @@ static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int32_t tscBuildMeterSchemaResultFields(SSqlObj *pSql, int32_t numOfCols, int32_t typeColLength,
|
||||
static int32_t tscBuildTableSchemaResultFields(SSqlObj *pSql, int32_t numOfCols, int32_t typeColLength,
|
||||
int32_t noteColLength) {
|
||||
int32_t rowLen = 0;
|
||||
SColumnIndex index = {0};
|
||||
|
@ -243,14 +209,14 @@ static int32_t tscBuildMeterSchemaResultFields(SSqlObj *pSql, int32_t numOfCols,
|
|||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
pQueryInfo->order.order = TSDB_ORDER_ASC;
|
||||
|
||||
TAOS_FIELD f = {.type = TSDB_DATA_TYPE_BINARY, .bytes = TSDB_COL_NAME_LEN};
|
||||
TAOS_FIELD f = {.type = TSDB_DATA_TYPE_BINARY, .bytes = TSDB_COL_NAME_LEN + VARSTR_HEADER_SIZE};
|
||||
strncpy(f.name, "Field", TSDB_COL_NAME_LEN);
|
||||
|
||||
SFieldSupInfo* pInfo = tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &f);
|
||||
pInfo->pSqlExpr = tscSqlExprAppend(pQueryInfo, TSDB_FUNC_TS_DUMMY, &index, TSDB_DATA_TYPE_BINARY, TSDB_COL_NAME_LEN,
|
||||
TSDB_COL_NAME_LEN, false);
|
||||
pInfo->pSqlExpr = tscSqlExprAppend(pQueryInfo, TSDB_FUNC_TS_DUMMY, &index, TSDB_DATA_TYPE_BINARY,
|
||||
TSDB_COL_NAME_LEN + VARSTR_HEADER_SIZE, TSDB_COL_NAME_LEN, false);
|
||||
|
||||
rowLen += TSDB_COL_NAME_LEN;
|
||||
rowLen += (TSDB_COL_NAME_LEN + VARSTR_HEADER_SIZE);
|
||||
|
||||
f.bytes = typeColLength;
|
||||
f.type = TSDB_DATA_TYPE_BINARY;
|
||||
|
@ -289,137 +255,24 @@ static int32_t tscProcessDescribeTable(SSqlObj *pSql) {
|
|||
|
||||
assert(tscGetMetaInfo(pQueryInfo, 0)->pTableMeta != NULL);
|
||||
|
||||
const int32_t NUM_OF_DESCRIBE_TABLE_COLUMNS = 4;
|
||||
const int32_t NUM_OF_DESC_TABLE_COLUMNS = 4;
|
||||
const int32_t TYPE_COLUMN_LENGTH = 16;
|
||||
const int32_t NOTE_COLUMN_MIN_LENGTH = 8;
|
||||
|
||||
int32_t note_field_length = tscMaxLengthOfTagsFields(pSql);
|
||||
if (note_field_length == 0) {
|
||||
note_field_length = NOTE_COLUMN_MIN_LENGTH;
|
||||
int32_t noteFieldLen = tscMaxLengthOfTagsFields(pSql);
|
||||
if (noteFieldLen == 0) {
|
||||
noteFieldLen = NOTE_COLUMN_MIN_LENGTH;
|
||||
}
|
||||
|
||||
int32_t rowLen =
|
||||
tscBuildMeterSchemaResultFields(pSql, NUM_OF_DESCRIBE_TABLE_COLUMNS, TYPE_COLUMN_LENGTH, note_field_length);
|
||||
int32_t rowLen = tscBuildTableSchemaResultFields(pSql, NUM_OF_DESC_TABLE_COLUMNS, TYPE_COLUMN_LENGTH, noteFieldLen);
|
||||
tscFieldInfoUpdateOffset(pQueryInfo);
|
||||
return tscSetValueToResObj(pSql, rowLen);
|
||||
}
|
||||
|
||||
// todo add order support
|
||||
static int tscBuildMetricTagProjectionResult(SSqlObj *pSql) {
|
||||
#if 0
|
||||
// the result structure has been completed in sql parse, so we
|
||||
// only need to reorganize the results in the column format
|
||||
SSqlCmd * pCmd = &pSql->cmd;
|
||||
SSqlRes * pRes = &pSql->res;
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, 0);
|
||||
|
||||
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||
|
||||
SSuperTableMeta *pMetricMeta = pTableMetaInfo->pMetricMeta;
|
||||
SSchema * pSchema = tscGetTableTagSchema(pTableMetaInfo->pTableMeta);
|
||||
|
||||
int32_t vOffset[TSDB_MAX_COLUMNS] = {0};
|
||||
|
||||
for (int32_t f = 1; f < pTableMetaInfo->numOfTags; ++f) {
|
||||
int16_t tagColumnIndex = pTableMetaInfo->tagColumnIndex[f - 1];
|
||||
if (tagColumnIndex == -1) {
|
||||
vOffset[f] = vOffset[f - 1] + TSDB_TABLE_NAME_LEN;
|
||||
} else {
|
||||
vOffset[f] = vOffset[f - 1] + pSchema[tagColumnIndex].bytes;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t totalNumOfResults = pMetricMeta->numOfTables;
|
||||
int32_t rowLen = tscGetResRowLength(pQueryInfo->exprsInfo);
|
||||
|
||||
tscInitResObjForLocalQuery(pSql, totalNumOfResults, rowLen);
|
||||
|
||||
int32_t rowIdx = 0;
|
||||
for (int32_t i = 0; i < pMetricMeta->numOfVnodes; ++i) {
|
||||
SVnodeSidList *pSidList = (SVnodeSidList *)((char *)pMetricMeta + pMetricMeta->list[i]);
|
||||
|
||||
for (int32_t j = 0; j < pSidList->numOfSids; ++j) {
|
||||
STableIdInfo *pSidExt = tscGetMeterSidInfo(pSidList, j);
|
||||
|
||||
for (int32_t k = 0; k < pQueryInfo->fieldsInfo.numOfOutput; ++k) {
|
||||
SColIndex *pColIndex = &tscSqlExprGet(pQueryInfo, k)->colInfo;
|
||||
int16_t offsetId = pColIndex->colIdx;
|
||||
|
||||
assert((pColIndex->flag & TSDB_COL_TAG) != 0);
|
||||
assert(0);
|
||||
|
||||
char * val = NULL;//pSidExt->tags + vOffset[offsetId];
|
||||
TAOS_FIELD *pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, k);
|
||||
|
||||
memcpy(pRes->data + tscFieldInfoGetOffset(pQueryInfo, k) * totalNumOfResults + pField->bytes * rowIdx, val,
|
||||
(size_t)pField->bytes);
|
||||
}
|
||||
rowIdx++;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tscBuildMetricTagSqlFunctionResult(SSqlObj *pSql) {
|
||||
// SSqlCmd *pCmd = &pSql->cmd;
|
||||
// SSqlRes *pRes = &pSql->res;
|
||||
|
||||
// SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(pCmd, 0);
|
||||
#if 0
|
||||
SSuperTableMeta *pMetricMeta = tscGetMetaInfo(pQueryInfo, 0)->pMetricMeta;
|
||||
int32_t totalNumOfResults = 1; // count function only produce one result
|
||||
int32_t rowLen = tscGetResRowLength(pQueryInfo->exprsInfo);
|
||||
|
||||
tscInitResObjForLocalQuery(pSql, totalNumOfResults, rowLen);
|
||||
|
||||
int32_t rowIdx = 0;
|
||||
for (int32_t i = 0; i < totalNumOfResults; ++i) {
|
||||
for (int32_t k = 0; k < pQueryInfo->fieldsInfo.numOfOutput; ++k) {
|
||||
SSqlExpr *pExpr = tscSqlExprGet(pQueryInfo, i);
|
||||
|
||||
if (pExpr->colInfo.colIdx == -1 && pExpr->functionId == TSDB_FUNC_COUNT) {
|
||||
TAOS_FIELD *pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, k);
|
||||
|
||||
memcpy(pRes->data + tscFieldInfoGetOffset(pQueryInfo, i) * totalNumOfResults + pField->bytes * rowIdx,
|
||||
&pMetricMeta->numOfTables, sizeof(pMetricMeta->numOfTables));
|
||||
} else {
|
||||
tscError("not support operations");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
rowIdx++;
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tscProcessQueryTags(SSqlObj *pSql) {
|
||||
SSqlCmd *pCmd = &pSql->cmd;
|
||||
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(pCmd, 0);
|
||||
|
||||
STableMeta *pTableMeta = tscGetMetaInfo(pQueryInfo, 0)->pTableMeta;
|
||||
if (pTableMeta == NULL || tscGetNumOfTags(pTableMeta) == 0 || tscGetNumOfColumns(pTableMeta) == 0) {
|
||||
strcpy(pCmd->payload, "invalid table");
|
||||
pSql->res.code = TSDB_CODE_INVALID_TABLE;
|
||||
return pSql->res.code;
|
||||
}
|
||||
|
||||
SSqlExpr *pExpr = taosArrayGetP(pQueryInfo->exprsInfo, 0);
|
||||
if (pExpr->functionId == TSDB_FUNC_COUNT) {
|
||||
return tscBuildMetricTagSqlFunctionResult(pSql);
|
||||
} else {
|
||||
return tscBuildMetricTagProjectionResult(pSql);
|
||||
}
|
||||
}
|
||||
|
||||
static void tscProcessCurrentUser(SSqlObj *pSql) {
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprsInfo, 0);
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
tscSetLocalQueryResult(pSql, pSql->pTscObj->user, pExpr->aliasName, TSDB_USER_LEN);
|
||||
}
|
||||
|
||||
|
@ -434,7 +287,7 @@ static void tscProcessCurrentDB(SSqlObj *pSql) {
|
|||
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprsInfo, 0);
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
tscSetLocalQueryResult(pSql, db, pExpr->aliasName, TSDB_DB_NAME_LEN);
|
||||
}
|
||||
|
||||
|
@ -442,14 +295,14 @@ static void tscProcessServerVer(SSqlObj *pSql) {
|
|||
const char* v = pSql->pTscObj->sversion;
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprsInfo, 0);
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
tscSetLocalQueryResult(pSql, v, pExpr->aliasName, tListLen(pSql->pTscObj->sversion));
|
||||
}
|
||||
|
||||
static void tscProcessClientVer(SSqlObj *pSql) {
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprsInfo, 0);
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
tscSetLocalQueryResult(pSql, version, pExpr->aliasName, strlen(version));
|
||||
}
|
||||
|
||||
|
@ -469,7 +322,7 @@ static void tscProcessServStatus(SSqlObj *pSql) {
|
|||
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprsInfo, 0);
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
tscSetLocalQueryResult(pSql, "1", pExpr->aliasName, 2);
|
||||
}
|
||||
|
||||
|
@ -491,7 +344,7 @@ void tscSetLocalQueryResult(SSqlObj *pSql, const char *val, const char *columnNa
|
|||
|
||||
TAOS_FIELD *pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, 0);
|
||||
SFieldSupInfo* pInfo = tscFieldInfoGetSupp(&pQueryInfo->fieldsInfo, 0);
|
||||
pInfo->pSqlExpr = taosArrayGetP(pQueryInfo->exprsInfo, 0);
|
||||
pInfo->pSqlExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
|
||||
strncpy(pRes->data, val, pField->bytes);
|
||||
}
|
||||
|
@ -503,8 +356,6 @@ int tscProcessLocalCmd(SSqlObj *pSql) {
|
|||
pSql->res.code = (uint8_t)taosCfgDynamicOptions(pCmd->payload);
|
||||
} else if (pCmd->command == TSDB_SQL_DESCRIBE_TABLE) {
|
||||
pSql->res.code = (uint8_t)tscProcessDescribeTable(pSql);
|
||||
} else if (pCmd->command == TSDB_SQL_RETRIEVE_TAGS) {
|
||||
pSql->res.code = (uint8_t)tscProcessQueryTags(pSql);
|
||||
} else if (pCmd->command == TSDB_SQL_RETRIEVE_EMPTY_RESULT) {
|
||||
/*
|
||||
* set the qhandle to be 1 in order to pass the qhandle check, and to call partial release function to
|
||||
|
|
|
@ -305,32 +305,37 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SSQLToken *pToken, char *payload,
|
|||
case TSDB_DATA_TYPE_BINARY:
|
||||
// binary data cannot be null-terminated char string, otherwise the last char of the string is lost
|
||||
if (pToken->type == TK_NULL) {
|
||||
*(int16_t*) payload = sizeof(int8_t);
|
||||
payload += VARSTR_HEADER_SIZE;
|
||||
|
||||
*payload = TSDB_DATA_BINARY_NULL;
|
||||
} else { // too long values will return invalid sql, not be truncated automatically
|
||||
if (pToken->n > pSchema->bytes) {
|
||||
return tscInvalidSQLErrMsg(msg, "string data overflow", pToken->z);
|
||||
}
|
||||
|
||||
strncpy(payload, pToken->z, pToken->n);
|
||||
|
||||
if (pToken->n < pSchema->bytes) {
|
||||
payload[pToken->n] = 0; // add the null-terminated char if the length of the string is shorter than the available space
|
||||
}
|
||||
STR_WITH_SIZE_TO_VARSTR(payload, pToken->z, pToken->n);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case TSDB_DATA_TYPE_NCHAR:
|
||||
if (pToken->type == TK_NULL) {
|
||||
*(int16_t*) payload = sizeof(int32_t);
|
||||
payload += VARSTR_HEADER_SIZE;
|
||||
|
||||
*(uint32_t*) payload = TSDB_DATA_NCHAR_NULL;
|
||||
} else {
|
||||
// if the converted output len is over than pColumnModel->bytes, return error: 'Argument list too long'
|
||||
if (!taosMbsToUcs4(pToken->z, pToken->n, payload, pSchema->bytes)) {
|
||||
int32_t resLen = -1;
|
||||
if (!taosMbsToUcs4(pToken->z, pToken->n, payload + VARSTR_HEADER_SIZE, pSchema->bytes, &resLen)) {
|
||||
char buf[512] = {0};
|
||||
snprintf(buf, 512, "%s", strerror(errno));
|
||||
|
||||
return tscInvalidSQLErrMsg(msg, buf, pToken->z);
|
||||
}
|
||||
|
||||
*(uint16_t*)payload = (uint16_t) (resLen * TSDB_NCHAR_SIZE);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1301,13 +1306,13 @@ int tsParseSql(SSqlObj *pSql, bool initialParse) {
|
|||
char* p = pSql->sqlstr;
|
||||
pSql->sqlstr = NULL;
|
||||
|
||||
tscFreeSqlObjPartial(pSql);
|
||||
tscPartiallyFreeSqlObj(pSql);
|
||||
pSql->sqlstr = p;
|
||||
} else {
|
||||
tscTrace("continue parse sql: %s", pSql->cmd.curSql);
|
||||
}
|
||||
|
||||
if (tscIsInsertOrImportData(pSql->sqlstr)) {
|
||||
if (tscIsInsertData(pSql->sqlstr)) {
|
||||
/*
|
||||
* Set the fp before parse the sql string, in case of getTableMeta failed, in which
|
||||
* the error handle callback function can rightfully restore the user-defined callback function (fp).
|
||||
|
|
|
@ -300,7 +300,7 @@ static int doBindParam(char* data, SParamInfo* param, TAOS_BIND* bind) {
|
|||
break;
|
||||
|
||||
case TSDB_DATA_TYPE_NCHAR:
|
||||
if (!taosMbsToUcs4(bind->buffer, *bind->length, data + param->offset, param->bytes)) {
|
||||
if (!taosMbsToUcs4(bind->buffer, *bind->length, data + param->offset, param->bytes, NULL)) {
|
||||
return TSDB_CODE_INVALID_VALUE;
|
||||
}
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
@ -455,7 +455,7 @@ static int insertStmtExecute(STscStmt* stmt) {
|
|||
|
||||
// tscTrace("%p SQL result:%d, %s pObj:%p", pSql, pRes->code, taos_errstr(taos), pObj);
|
||||
if (pRes->code != TSDB_CODE_SUCCESS) {
|
||||
tscFreeSqlObjPartial(pSql);
|
||||
tscPartiallyFreeSqlObj(pSql);
|
||||
}
|
||||
|
||||
return pRes->code;
|
||||
|
@ -510,7 +510,7 @@ int taos_stmt_prepare(TAOS_STMT* stmt, const char* sql, unsigned long length) {
|
|||
strtolower(sqlstr, sqlstr);
|
||||
|
||||
pStmt->pSql->sqlstr = sqlstr;
|
||||
if (tscIsInsertOrImportData(sqlstr)) {
|
||||
if (tscIsInsertData(sqlstr)) {
|
||||
pStmt->isInsert = true;
|
||||
return insertStmtPrepare(pStmt);
|
||||
}
|
||||
|
|
|
@ -105,7 +105,7 @@ static int32_t getColumnIndexByName(const SSQLToken* pToken, SQueryInfo* pQueryI
|
|||
static int32_t getTableIndexByName(SSQLToken* pToken, SQueryInfo* pQueryInfo, SColumnIndex* pIndex);
|
||||
static int32_t optrToString(tSQLExpr* pExpr, char** exprString);
|
||||
|
||||
static int32_t getMeterIndex(SSQLToken* pTableToken, SQueryInfo* pQueryInfo, SColumnIndex* pIndex);
|
||||
static int32_t getTableIndexImpl(SSQLToken* pTableToken, SQueryInfo* pQueryInfo, SColumnIndex* pIndex);
|
||||
static int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo);
|
||||
static int32_t doLocalQueryProcess(SQueryInfo* pQueryInfo, SQuerySQL* pQuerySql);
|
||||
static int32_t tscCheckCreateDbParams(SSqlCmd* pCmd, SCMCreateDbMsg* pCreate);
|
||||
|
@ -292,8 +292,8 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
break;
|
||||
}
|
||||
|
||||
case TSDB_SQL_CREATE_DNODE: { // todo parse hostname
|
||||
const char* msg = "invalid ip address";
|
||||
case TSDB_SQL_CREATE_DNODE: { // todo hostname
|
||||
const char* msg = "invalid host name (ip address)";
|
||||
|
||||
if (pInfo->pDCLInfo->nTokens > 1) {
|
||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg);
|
||||
|
@ -360,14 +360,10 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
}
|
||||
|
||||
case TSDB_SQL_CFG_DNODE: {
|
||||
const char* msg1 = "invalid ip address";
|
||||
const char* msg2 = "invalid configure options or values";
|
||||
|
||||
/* validate the ip address */
|
||||
tDCLSQL* pDCL = pInfo->pDCLInfo;
|
||||
if (!validateIpAddress(pDCL->a[0].z, pDCL->a[0].n)) {
|
||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
|
||||
}
|
||||
|
||||
/* validate the parameter names and options */
|
||||
if (validateDNodeConfig(pDCL) != TSDB_CODE_SUCCESS) {
|
||||
|
@ -1172,7 +1168,7 @@ int32_t parseSelectClause(SSqlCmd* pCmd, int32_t clauseIndex, tSQLExprList* pSel
|
|||
tExprNode* pNode = NULL;
|
||||
SArray* colList = taosArrayInit(10, sizeof(SColIndex));
|
||||
|
||||
int32_t ret = exprTreeFromSqlExpr(&pNode, pItem->pNode, pQueryInfo->exprsInfo, pQueryInfo, colList);
|
||||
int32_t ret = exprTreeFromSqlExpr(&pNode, pItem->pNode, pQueryInfo->exprList, pQueryInfo, colList);
|
||||
if (ret != TSDB_CODE_SUCCESS) {
|
||||
tExprTreeDestroy(&pNode, NULL);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, "invalid arithmetic expression in select clause");
|
||||
|
@ -1208,7 +1204,7 @@ int32_t parseSelectClause(SSqlCmd* pCmd, int32_t clauseIndex, tSQLExprList* pSel
|
|||
SFieldSupInfo* pInfo = tscFieldInfoGetSupp(&pQueryInfo->fieldsInfo, slot);
|
||||
|
||||
if (pInfo->pSqlExpr == NULL) {
|
||||
SArithExprInfo* pFuncExpr = calloc(1, sizeof(SArithExprInfo));
|
||||
SExprInfo* pFuncExpr = calloc(1, sizeof(SExprInfo));
|
||||
pInfo->pArithExprInfo = pFuncExpr;
|
||||
|
||||
// arithmetic expression always return result in the format of double float
|
||||
|
@ -1219,7 +1215,7 @@ int32_t parseSelectClause(SSqlCmd* pCmd, int32_t clauseIndex, tSQLExprList* pSel
|
|||
tExprNode* pNode = NULL;
|
||||
// SArray* colList = taosArrayInit(10, sizeof(SColIndex));
|
||||
|
||||
int32_t ret = exprTreeFromSqlExpr(&pNode, pItem->pNode, pQueryInfo->exprsInfo, pQueryInfo, NULL);
|
||||
int32_t ret = exprTreeFromSqlExpr(&pNode, pItem->pNode, pQueryInfo->exprList, pQueryInfo, NULL);
|
||||
if (ret != TSDB_CODE_SUCCESS) {
|
||||
tExprTreeDestroy(&pNode, NULL);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, "invalid expression in select clause");
|
||||
|
@ -1265,14 +1261,6 @@ int32_t parseSelectClause(SSqlCmd* pCmd, int32_t clauseIndex, tSQLExprList* pSel
|
|||
|
||||
if (isSTable) {
|
||||
pQueryInfo->type |= TSDB_QUERY_TYPE_STABLE_QUERY;
|
||||
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||
int32_t numOfCols = tscGetNumOfColumns(pTableMetaInfo->pTableMeta);
|
||||
|
||||
if (tscQueryTags(pQueryInfo)) { // local handle the metric tag query
|
||||
pCmd->count = numOfCols; // the number of meter schema, tricky.
|
||||
pQueryInfo->command = TSDB_SQL_RETRIEVE_TAGS;
|
||||
}
|
||||
|
||||
/*
|
||||
* transfer sql functions that need secondary merge into another format
|
||||
* in dealing with metric queries such as: count/first/last
|
||||
|
@ -1322,11 +1310,11 @@ SSqlExpr* doAddProjectCol(SQueryInfo* pQueryInfo, int32_t outputIndex, int32_t c
|
|||
if (functionId == TSDB_FUNC_TAGPRJ) {
|
||||
index.columnIndex = colIndex - tscGetNumOfColumns(pTableMeta);
|
||||
|
||||
addRequiredTagColumn(pTableMetaInfo, &index);
|
||||
tscColumnListInsert(pTableMetaInfo->tagColList, &index);
|
||||
pQueryInfo->type = TSDB_QUERY_TYPE_STABLE_QUERY;
|
||||
} else {
|
||||
index.columnIndex = colIndex;
|
||||
pQueryInfo->type = TSDB_QUERY_TYPE_PROJECTION_QUERY;
|
||||
pQueryInfo->type |= TSDB_QUERY_TYPE_PROJECTION_QUERY;
|
||||
}
|
||||
|
||||
return tscSqlExprAppend(pQueryInfo, functionId, &index, pSchema->type, pSchema->bytes,
|
||||
|
@ -1334,7 +1322,7 @@ SSqlExpr* doAddProjectCol(SQueryInfo* pQueryInfo, int32_t outputIndex, int32_t c
|
|||
}
|
||||
|
||||
void addRequiredTagColumn(STableMetaInfo* pTableMetaInfo, SColumnIndex* index) {
|
||||
tscColumnListInsert(pTableMetaInfo->tagColList, index);
|
||||
|
||||
}
|
||||
|
||||
static void addProjectQueryCol(SQueryInfo* pQueryInfo, int32_t startPos, SColumnIndex* pIndex, tSQLExprItem* pItem) {
|
||||
|
@ -1375,7 +1363,7 @@ void tscAddSpecialColumnForSelect(SQueryInfo* pQueryInfo, int32_t outputColIndex
|
|||
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, pIndex->tableIndex);
|
||||
|
||||
if (TSDB_COL_IS_TAG(flag)) {
|
||||
addRequiredTagColumn(pTableMetaInfo, pIndex);
|
||||
tscColumnListInsert(pTableMetaInfo->tagColList, pIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1439,7 +1427,7 @@ int32_t addProjectionExprAndResultField(SQueryInfo* pQueryInfo, tSQLExprItem* pI
|
|||
}
|
||||
|
||||
if (index.columnIndex == TSDB_TBNAME_COLUMN_INDEX) {
|
||||
SSchema colSchema = {.type = TSDB_DATA_TYPE_BINARY, .bytes = TSDB_TABLE_NAME_LEN};
|
||||
SSchema colSchema = {.type = TSDB_DATA_TYPE_BINARY, .bytes = TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE};
|
||||
strcpy(colSchema.name, TSQL_TBNAME_L);
|
||||
|
||||
pQueryInfo->type = TSDB_QUERY_TYPE_STABLE_QUERY;
|
||||
|
@ -1549,7 +1537,7 @@ int32_t addExprAndResultField(SQueryInfo* pQueryInfo, int32_t colIndex, tSQLExpr
|
|||
int32_t size = tDataTypeDesc[TSDB_DATA_TYPE_BIGINT].nSize;
|
||||
pExpr = tscSqlExprAppend(pQueryInfo, functionID, &index, TSDB_DATA_TYPE_BIGINT, size, size, false);
|
||||
} else {
|
||||
// count the number of meters created according to the metric
|
||||
// count the number of meters created according to the super table
|
||||
if (getColumnIndexByName(pToken, pQueryInfo, &index) != TSDB_CODE_SUCCESS) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg3);
|
||||
}
|
||||
|
@ -2003,7 +1991,7 @@ int32_t doGetColumnIndexByName(SSQLToken* pToken, SQueryInfo* pQueryInfo, SColum
|
|||
}
|
||||
}
|
||||
|
||||
int32_t getMeterIndex(SSQLToken* pTableToken, SQueryInfo* pQueryInfo, SColumnIndex* pIndex) {
|
||||
int32_t getTableIndexImpl(SSQLToken* pTableToken, SQueryInfo* pQueryInfo, SColumnIndex* pIndex) {
|
||||
if (pTableToken->n == 0) { // only one table and no table name prefix in column name
|
||||
if (pQueryInfo->numOfTables == 1) {
|
||||
pIndex->tableIndex = 0;
|
||||
|
@ -2036,7 +2024,7 @@ int32_t getTableIndexByName(SSQLToken* pToken, SQueryInfo* pQueryInfo, SColumnIn
|
|||
SSQLToken tableToken = {0};
|
||||
extractTableNameFromToken(pToken, &tableToken);
|
||||
|
||||
if (getMeterIndex(&tableToken, pQueryInfo, pIndex) != TSDB_CODE_SUCCESS) {
|
||||
if (getTableIndexImpl(&tableToken, pQueryInfo, pIndex) != TSDB_CODE_SUCCESS) {
|
||||
return TSDB_CODE_INVALID_SQL;
|
||||
}
|
||||
|
||||
|
@ -2343,7 +2331,7 @@ bool hasUnsupportFunctionsForSTableQuery(SQueryInfo* pQueryInfo) {
|
|||
size_t size = tscSqlExprNumOfExprs(pQueryInfo);
|
||||
for (int32_t i = 0; i < size; ++i) {
|
||||
int32_t functionId = tscSqlExprGet(pQueryInfo, i)->functionId;
|
||||
if ((aAggs[functionId].nStatus & TSDB_FUNCSTATE_METRIC) == 0) {
|
||||
if ((aAggs[functionId].nStatus & TSDB_FUNCSTATE_STABLE) == 0) {
|
||||
invalidSqlErrMsg(pQueryInfo->msg, msg3);
|
||||
return true;
|
||||
}
|
||||
|
@ -2372,6 +2360,7 @@ bool hasUnsupportFunctionsForSTableQuery(SQueryInfo* pQueryInfo) {
|
|||
|
||||
static bool functionCompatibleCheck(SQueryInfo* pQueryInfo) {
|
||||
int32_t startIdx = 0;
|
||||
|
||||
SSqlExpr* pExpr = tscSqlExprGet(pQueryInfo, startIdx);
|
||||
int32_t functionID = pExpr->functionId;
|
||||
|
||||
|
@ -2387,14 +2376,14 @@ static bool functionCompatibleCheck(SQueryInfo* pQueryInfo) {
|
|||
size_t size = tscSqlExprNumOfExprs(pQueryInfo);
|
||||
|
||||
for (int32_t i = startIdx + 1; i < size; ++i) {
|
||||
SSqlExpr* pExpr = tscSqlExprGet(pQueryInfo, i);
|
||||
SSqlExpr* pExpr1 = tscSqlExprGet(pQueryInfo, i);
|
||||
|
||||
int16_t functionId = pExpr->functionId;
|
||||
int16_t functionId = pExpr1->functionId;
|
||||
if (functionId == TSDB_FUNC_TAGPRJ || functionId == TSDB_FUNC_TAG || functionId == TSDB_FUNC_TS) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (functionId == TSDB_FUNC_PRJ && pExpr->colInfo.colId == PRIMARYKEY_TIMESTAMP_COL_INDEX) {
|
||||
if (functionId == TSDB_FUNC_PRJ && pExpr1->colInfo.colId == PRIMARYKEY_TIMESTAMP_COL_INDEX) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -2533,12 +2522,11 @@ int32_t parseGroupbyClause(SQueryInfo* pQueryInfo, tVariantList* pList, SSqlCmd*
|
|||
relIndex -= numOfCols;
|
||||
}
|
||||
|
||||
SColIndex colIndex = {
|
||||
.colIndex = relIndex, .flag = TSDB_COL_TAG, .colId = pSchema->colId,
|
||||
};
|
||||
|
||||
SColIndex colIndex = { .colIndex = relIndex, .flag = TSDB_COL_TAG, .colId = pSchema->colId, };
|
||||
taosArrayPush(pGroupExpr->columnInfo, &colIndex);
|
||||
addRequiredTagColumn(pTableMetaInfo, &index);
|
||||
|
||||
index.columnIndex = relIndex;
|
||||
tscColumnListInsert(pTableMetaInfo->tagColList, &index);
|
||||
} else {
|
||||
// check if the column type is valid, here only support the bool/tinyint/smallint/bigint group by
|
||||
if (pSchema->type > TSDB_DATA_TYPE_BINARY) {
|
||||
|
@ -3200,7 +3188,6 @@ static bool validateJoinExprNode(SQueryInfo* pQueryInfo, tSQLExpr* pExpr, SColum
|
|||
const char* msg3 = "join column must have same type";
|
||||
const char* msg4 = "self join is not allowed";
|
||||
const char* msg5 = "join table must be the same type(table to table, super table to super table)";
|
||||
const char* msg6 = "tags in join condition not support binary/nchar types";
|
||||
|
||||
tSQLExpr* pRight = pExpr->pRight;
|
||||
|
||||
|
@ -3235,9 +3222,6 @@ static bool validateJoinExprNode(SQueryInfo* pQueryInfo, tSQLExpr* pExpr, SColum
|
|||
} else if (pLeftIndex->tableIndex == rightIndex.tableIndex) {
|
||||
invalidSqlErrMsg(pQueryInfo->msg, msg4);
|
||||
return false;
|
||||
} else if (leftType == TSDB_DATA_TYPE_BINARY || leftType == TSDB_DATA_TYPE_NCHAR) {
|
||||
invalidSqlErrMsg(pQueryInfo->msg, msg6);
|
||||
return false;
|
||||
}
|
||||
|
||||
// table to table/ super table to super table are allowed
|
||||
|
@ -3307,7 +3291,7 @@ static int32_t handleExprInQueryCond(SQueryInfo* pQueryInfo, tSQLExpr** pExpr, S
|
|||
|
||||
// set join query condition
|
||||
if (pRight->nSQLOptr == TK_ID) { // no need to keep the timestamp join condition
|
||||
pQueryInfo->type |= TSDB_QUERY_TYPE_JOIN_QUERY;
|
||||
TSDB_QUERY_SET_TYPE(pQueryInfo->type, TSDB_QUERY_TYPE_JOIN_QUERY);
|
||||
pCondExpr->tsJoin = true;
|
||||
|
||||
/*
|
||||
|
@ -3728,14 +3712,14 @@ static void doAddJoinTagsColumnsIntoTagList(SQueryInfo* pQueryInfo, SCondExpr* p
|
|||
getColumnIndexByName(&pCondExpr->pJoinExpr->pLeft->colInfo, pQueryInfo, &index);
|
||||
pTableMetaInfo = tscGetMetaInfo(pQueryInfo, index.tableIndex);
|
||||
|
||||
// int32_t columnInfo = index.columnIndex - tscGetNumOfColumns(pTableMetaInfo->pTableMeta);
|
||||
addRequiredTagColumn(pTableMetaInfo, &index);
|
||||
index.columnIndex = index.columnIndex - tscGetNumOfColumns(pTableMetaInfo->pTableMeta);
|
||||
tscColumnListInsert(pTableMetaInfo->tagColList, &index);
|
||||
|
||||
getColumnIndexByName(&pCondExpr->pJoinExpr->pRight->colInfo, pQueryInfo, &index);
|
||||
pTableMetaInfo = tscGetMetaInfo(pQueryInfo, index.tableIndex);
|
||||
|
||||
// columnInfo = index.columnIndex - tscGetNumOfColumns(pTableMetaInfo->pTableMeta);
|
||||
addRequiredTagColumn(pTableMetaInfo, &index);
|
||||
index.columnIndex = index.columnIndex - tscGetNumOfColumns(pTableMetaInfo->pTableMeta);
|
||||
tscColumnListInsert(pTableMetaInfo->tagColList, &index);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3771,7 +3755,7 @@ static int32_t getTagQueryCondExpr(SQueryInfo* pQueryInfo, SCondExpr* pCondExpr,
|
|||
for(int32_t j = 0; j < num; ++j) {
|
||||
SColIndex* pIndex = taosArrayGet(colList, j);
|
||||
SColumnIndex index = {.tableIndex = i, .columnIndex = pIndex->colIndex - numOfCols};
|
||||
addRequiredTagColumn(pTableMetaInfo, &index);
|
||||
tscColumnListInsert(pTableMetaInfo->tagColList, &index);
|
||||
}
|
||||
|
||||
tsSetSTableQueryCond(&pQueryInfo->tagCond, uid, &bw);
|
||||
|
@ -4053,8 +4037,6 @@ int32_t parseFillClause(SQueryInfo* pQueryInfo, SQuerySQL* pQuerySQL) {
|
|||
}
|
||||
}
|
||||
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprsInfo);
|
||||
|
||||
if ((pFillToken->nExpr < size) ||
|
||||
((pFillToken->nExpr - 1 < size) && (tscIsPointInterpQuery(pQueryInfo)))) {
|
||||
tVariantListItem* lastItem = &pFillToken->a[pFillToken->nExpr - 1];
|
||||
|
@ -4088,7 +4070,7 @@ static void setDefaultOrderInfo(SQueryInfo* pQueryInfo) {
|
|||
pQueryInfo->order.orderColId = -1;
|
||||
}
|
||||
|
||||
/* for metric query, set default ascending order for group output */
|
||||
/* for super table query, set default ascending order for group output */
|
||||
if (UTIL_TABLE_IS_SUPERTABLE(pTableMetaInfo)) {
|
||||
pQueryInfo->groupbyExpr.orderType = TSDB_ORDER_ASC;
|
||||
}
|
||||
|
@ -4136,7 +4118,7 @@ int32_t parseOrderbyClause(SQueryInfo* pQueryInfo, SQuerySQL* pQuerySql, SSchema
|
|||
SSQLToken columnName = {pVar->nLen, pVar->nType, pVar->pz};
|
||||
SColumnIndex index = {0};
|
||||
|
||||
if (UTIL_TABLE_IS_SUPERTABLE(pTableMetaInfo)) { // metric query
|
||||
if (UTIL_TABLE_IS_SUPERTABLE(pTableMetaInfo)) { // super table query
|
||||
if (getColumnIndexByName(&columnName, pQueryInfo, &index) != TSDB_CODE_SUCCESS) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg1);
|
||||
}
|
||||
|
@ -4251,6 +4233,21 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
const char* msg5 = "only support add one tag";
|
||||
const char* msg6 = "column can only be modified by super table";
|
||||
|
||||
const char* msg7 = "no tags can be dropped";
|
||||
const char* msg8 = "only support one tag";
|
||||
const char* msg9 = "tag name too long";
|
||||
|
||||
const char* msg10 = "invalid tag name";
|
||||
const char* msg11 = "primary tag cannot be dropped";
|
||||
const char* msg12 = "update normal column not supported";
|
||||
const char* msg13 = "invalid tag value";
|
||||
const char* msg14 = "tag value too long";
|
||||
|
||||
const char* msg15 = "no columns can be dropped";
|
||||
const char* msg16 = "only support one column";
|
||||
const char* msg17 = "invalid column name";
|
||||
const char* msg18 = "primary timestamp column cannot be dropped";
|
||||
|
||||
SSqlCmd* pCmd = &pSql->cmd;
|
||||
SAlterTableSQL* pAlterSQL = pInfo->pAlterInfo;
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(pCmd, 0);
|
||||
|
@ -4296,24 +4293,18 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
|
||||
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &pFieldList->p[0]);
|
||||
} else if (pAlterSQL->type == TSDB_ALTER_TABLE_DROP_TAG_COLUMN) {
|
||||
const char* msg1 = "no tags can be dropped";
|
||||
const char* msg2 = "only support one tag";
|
||||
const char* msg3 = "tag name too long";
|
||||
const char* msg4 = "illegal tag name";
|
||||
const char* msg5 = "primary tag cannot be dropped";
|
||||
|
||||
if (tscGetNumOfTags(pTableMeta) == 1) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg1);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg7);
|
||||
}
|
||||
|
||||
// numOfTags == 1
|
||||
if (pAlterSQL->varList->nExpr > 1) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg2);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg8);
|
||||
}
|
||||
|
||||
tVariantListItem* pItem = &pAlterSQL->varList->a[0];
|
||||
if (pItem->pVar.nLen > TSDB_COL_NAME_LEN) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg3);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg9);
|
||||
}
|
||||
|
||||
SColumnIndex index = COLUMN_INDEX_INITIALIZER;
|
||||
|
@ -4324,9 +4315,9 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
}
|
||||
|
||||
if (index.columnIndex < tscGetNumOfColumns(pTableMeta)) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg4);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg10);
|
||||
} else if (index.columnIndex == 0) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg5);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg11);
|
||||
}
|
||||
|
||||
char name1[128] = {0};
|
||||
|
@ -4335,9 +4326,6 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
TAOS_FIELD f = tscCreateField(TSDB_DATA_TYPE_INT, name1, tDataTypeDesc[TSDB_DATA_TYPE_INT].nSize);
|
||||
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &f);
|
||||
} else if (pAlterSQL->type == TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN) {
|
||||
const char* msg1 = "tag name too long";
|
||||
const char* msg2 = "invalid tag name";
|
||||
|
||||
tVariantList* pVarList = pAlterSQL->varList;
|
||||
if (pVarList->nExpr > 2) {
|
||||
return TSDB_CODE_INVALID_SQL;
|
||||
|
@ -4347,11 +4335,11 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
tVariantListItem* pDstItem = &pAlterSQL->varList->a[1];
|
||||
|
||||
if (pSrcItem->pVar.nLen >= TSDB_COL_NAME_LEN || pDstItem->pVar.nLen >= TSDB_COL_NAME_LEN) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg1);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg9);
|
||||
}
|
||||
|
||||
if (pSrcItem->pVar.nType != TSDB_DATA_TYPE_BINARY || pDstItem->pVar.nType != TSDB_DATA_TYPE_BINARY) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg2);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg10);
|
||||
}
|
||||
|
||||
SColumnIndex srcIndex = COLUMN_INDEX_INITIALIZER;
|
||||
|
@ -4377,10 +4365,6 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
f = tscCreateField(TSDB_DATA_TYPE_INT, name, tDataTypeDesc[TSDB_DATA_TYPE_INT].nSize);
|
||||
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &f);
|
||||
} else if (pAlterSQL->type == TSDB_ALTER_TABLE_UPDATE_TAG_VAL) {
|
||||
const char* msg1 = "invalid tag value";
|
||||
const char* msg2 = "update normal column not supported";
|
||||
const char* msg3 = "tag value too long";
|
||||
|
||||
// Note: update can only be applied to table not super table.
|
||||
// the following is handle display tags value for meters created according to super table
|
||||
tVariantList* pVarList = pAlterSQL->varList;
|
||||
|
@ -4393,19 +4377,19 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
}
|
||||
|
||||
if (columnIndex.columnIndex < tscGetNumOfColumns(pTableMeta)) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg2);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg12);
|
||||
}
|
||||
|
||||
SSchema* pTagsSchema = tscGetTableColumnSchema(pTableMetaInfo->pTableMeta, columnIndex.columnIndex);
|
||||
if (tVariantDump(&pVarList->a[1].pVar, pAlterSQL->tagData.data /*pCmd->payload*/, pTagsSchema->type) !=
|
||||
TSDB_CODE_SUCCESS) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg1);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg13);
|
||||
}
|
||||
|
||||
// validate the length of binary
|
||||
if ((pTagsSchema->type == TSDB_DATA_TYPE_BINARY || pTagsSchema->type == TSDB_DATA_TYPE_NCHAR) &&
|
||||
pVarList->a[1].pVar.nLen > pTagsSchema->bytes) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg3);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg14);
|
||||
}
|
||||
|
||||
char name1[128] = {0};
|
||||
|
@ -4427,17 +4411,12 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
|
||||
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &pFieldList->p[0]);
|
||||
} else if (pAlterSQL->type == TSDB_ALTER_TABLE_DROP_COLUMN) {
|
||||
const char* msg1 = "no columns can be dropped";
|
||||
const char* msg2 = "only support one column";
|
||||
const char* msg4 = "illegal column name";
|
||||
const char* msg3 = "primary timestamp column cannot be dropped";
|
||||
|
||||
if (tscGetNumOfColumns(pTableMeta) == TSDB_MIN_COLUMNS) { //
|
||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
|
||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg15);
|
||||
}
|
||||
|
||||
if (pAlterSQL->varList->nExpr > 1) {
|
||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2);
|
||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg16);
|
||||
}
|
||||
|
||||
tVariantListItem* pItem = &pAlterSQL->varList->a[0];
|
||||
|
@ -4445,11 +4424,11 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
SColumnIndex columnIndex = COLUMN_INDEX_INITIALIZER;
|
||||
SSQLToken name = {.type = TK_STRING, .z = pItem->pVar.pz, .n = pItem->pVar.nLen};
|
||||
if (getColumnIndexByName(&name, pQueryInfo, &columnIndex) != TSDB_CODE_SUCCESS) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg4);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg17);
|
||||
}
|
||||
|
||||
if (columnIndex.columnIndex == PRIMARYKEY_TIMESTAMP_COL_INDEX) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg3);
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg18);
|
||||
}
|
||||
|
||||
char name1[TSDB_COL_NAME_LEN + 1] = {0};
|
||||
|
@ -4469,7 +4448,7 @@ int32_t validateSqlFunctionInStreamSql(SQueryInfo* pQueryInfo) {
|
|||
return invalidSqlErrMsg(pQueryInfo->msg, msg0);
|
||||
}
|
||||
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprsInfo);
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprList);
|
||||
for (int32_t i = 0; i < size; ++i) {
|
||||
int32_t functId = tscSqlExprGet(pQueryInfo, i)->functionId;
|
||||
if (!IS_STREAM_QUERY_VALID(aAggs[functId].nStatus)) {
|
||||
|
@ -4485,7 +4464,7 @@ int32_t validateFunctionsInIntervalOrGroupbyQuery(SQueryInfo* pQueryInfo) {
|
|||
const char* msg1 = "column projection is not compatible with interval";
|
||||
|
||||
// multi-output set/ todo refactor
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprsInfo);
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprList);
|
||||
|
||||
for (int32_t k = 0; k < size; ++k) {
|
||||
SSqlExpr* pExpr = tscSqlExprGet(pQueryInfo, k);
|
||||
|
@ -4680,22 +4659,17 @@ int32_t parseLimitClause(SQueryInfo* pQueryInfo, int32_t clauseIndex, SQuerySQL*
|
|||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
// todo refactor
|
||||
if (UTIL_TABLE_IS_SUPERTABLE(pTableMetaInfo)) {
|
||||
bool queryOnTags = false;
|
||||
// if (tscQueryOnlyMetricTags(pQueryInfo, &queryOnTags) != TSDB_CODE_SUCCESS) {
|
||||
// return TSDB_CODE_INVALID_SQL;
|
||||
// }
|
||||
|
||||
if (queryOnTags == true) { // local handle the super table tag query
|
||||
pQueryInfo->command = TSDB_SQL_RETRIEVE_TAGS;
|
||||
} else {
|
||||
if (!tscQueryTags(pQueryInfo)) { // local handle the super table tag query
|
||||
if (tscIsProjectionQueryOnSTable(pQueryInfo, 0)) {
|
||||
if (pQueryInfo->slimit.limit > 0 || pQueryInfo->slimit.offset > 0) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg3);
|
||||
}
|
||||
|
||||
// for projection query on super table, all queries are subqueries
|
||||
if (tscNonOrderedProjectionQueryOnSTable(pQueryInfo, 0)) {
|
||||
if (tscNonOrderedProjectionQueryOnSTable(pQueryInfo, 0) &&
|
||||
!TSDB_QUERY_HAS_TYPE(pQueryInfo->type, TSDB_QUERY_TYPE_JOIN_QUERY)) {
|
||||
pQueryInfo->type |= TSDB_QUERY_TYPE_SUBQUERY;
|
||||
}
|
||||
}
|
||||
|
@ -4722,6 +4696,7 @@ int32_t parseLimitClause(SQueryInfo* pQueryInfo, int32_t clauseIndex, SQuerySQL*
|
|||
if (pTableMetaInfo->vgroupList->numOfVgroups == 0) {
|
||||
tscTrace("%p no table in super table, no output result", pSql);
|
||||
pQueryInfo->command = TSDB_SQL_RETRIEVE_EMPTY_RESULT;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
// keep original limitation value in globalLimit
|
||||
|
@ -4745,7 +4720,7 @@ int32_t parseLimitClause(SQueryInfo* pQueryInfo, int32_t clauseIndex, SQuerySQL*
|
|||
return invalidSqlErrMsg(pQueryInfo->msg, msg1);
|
||||
}
|
||||
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprsInfo);
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprList);
|
||||
|
||||
// filter the query functions operating on "tbname" column that are not supported by normal columns.
|
||||
for (int32_t i = 0; i < size; ++i) {
|
||||
|
@ -4857,7 +4832,7 @@ void tscAddTimestampColumn(SQueryInfo* pQueryInfo, int16_t functionId, int16_t t
|
|||
if (pExpr == NULL || pExpr->colInfo.colId != PRIMARYKEY_TIMESTAMP_COL_INDEX || pExpr->functionId != functionId) {
|
||||
SColumnIndex index = {tableIndex, PRIMARYKEY_TIMESTAMP_COL_INDEX};
|
||||
|
||||
pExpr = tscSqlExprAppend(pQueryInfo, functionId, &index, TSDB_DATA_TYPE_TIMESTAMP, TSDB_KEYSIZE, TSDB_KEYSIZE, false);
|
||||
pExpr = tscSqlExprInsert(pQueryInfo, 0, functionId, &index, TSDB_DATA_TYPE_TIMESTAMP, TSDB_KEYSIZE, TSDB_KEYSIZE, false);
|
||||
pExpr->colInfo.flag = TSDB_COL_NORMAL;
|
||||
|
||||
// NOTE: tag column does not add to source column list
|
||||
|
@ -4872,7 +4847,7 @@ void addGroupInfoForSubquery(SSqlObj* pParentObj, SSqlObj* pSql, int32_t subClau
|
|||
|
||||
if (pParentQueryInfo->groupbyExpr.numOfGroupCols > 0) {
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, subClauseIndex);
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprsInfo);
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprList);
|
||||
|
||||
SSqlExpr* pExpr = tscSqlExprGet(pQueryInfo, size - 1);
|
||||
|
||||
|
@ -4900,7 +4875,7 @@ void addGroupInfoForSubquery(SSqlObj* pParentObj, SSqlObj* pSql, int32_t subClau
|
|||
pColIndex->colIndex = relIndex;
|
||||
|
||||
index = (SColumnIndex) {.tableIndex = tableIndex, .columnIndex = relIndex};
|
||||
addRequiredTagColumn(pTableMetaInfo, &index);
|
||||
tscColumnListInsert(pTableMetaInfo->tagColList, &index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4941,7 +4916,7 @@ void doAddGroupColumnForSubquery(SQueryInfo* pQueryInfo, int32_t tagIndex) {
|
|||
static void doUpdateSqlFunctionForTagPrj(SQueryInfo* pQueryInfo) {
|
||||
int32_t tagLength = 0;
|
||||
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprsInfo);
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprList);
|
||||
|
||||
for (int32_t i = 0; i < size; ++i) {
|
||||
SSqlExpr* pExpr = tscSqlExprGet(pQueryInfo, i);
|
||||
|
@ -4968,7 +4943,7 @@ static void doUpdateSqlFunctionForTagPrj(SQueryInfo* pQueryInfo) {
|
|||
}
|
||||
|
||||
static void doUpdateSqlFunctionForColPrj(SQueryInfo* pQueryInfo) {
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprsInfo);
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprList);
|
||||
|
||||
for (int32_t i = 0; i < size; ++i) {
|
||||
SSqlExpr* pExpr = tscSqlExprGet(pQueryInfo, i);
|
||||
|
@ -5006,7 +4981,7 @@ static bool onlyTagPrjFunction(SQueryInfo* pQueryInfo) {
|
|||
bool hasTagPrj = false;
|
||||
bool hasColumnPrj = false;
|
||||
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprsInfo);
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprList);
|
||||
for (int32_t i = 0; i < size; ++i) {
|
||||
SSqlExpr* pExpr = tscSqlExprGet(pQueryInfo, i);
|
||||
if (pExpr->functionId == TSDB_FUNC_PRJ) {
|
||||
|
@ -5041,7 +5016,7 @@ static bool allTagPrjInGroupby(SQueryInfo* pQueryInfo) {
|
|||
}
|
||||
|
||||
static void updateTagPrjFunction(SQueryInfo* pQueryInfo) {
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprsInfo);
|
||||
size_t size = taosArrayGetSize(pQueryInfo->exprList);
|
||||
|
||||
for (int32_t i = 0; i < size; ++i) {
|
||||
SSqlExpr* pExpr = tscSqlExprGet(pQueryInfo, i);
|
||||
|
@ -5065,9 +5040,9 @@ static int32_t checkUpdateTagPrjFunctions(SQueryInfo* pQueryInfo) {
|
|||
int16_t numOfSelectivity = 0;
|
||||
int16_t numOfAggregation = 0;
|
||||
|
||||
size_t numOfExprs = taosArrayGetSize(pQueryInfo->exprsInfo);
|
||||
size_t numOfExprs = taosArrayGetSize(pQueryInfo->exprList);
|
||||
for (int32_t i = 0; i < numOfExprs; ++i) {
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprsInfo, i);
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, i);
|
||||
if (pExpr->functionId == TSDB_FUNC_TAGPRJ ||
|
||||
(pExpr->functionId == TSDB_FUNC_PRJ && pExpr->colInfo.colId == PRIMARYKEY_TIMESTAMP_COL_INDEX)) {
|
||||
tagColExists = true;
|
||||
|
@ -5076,7 +5051,7 @@ static int32_t checkUpdateTagPrjFunctions(SQueryInfo* pQueryInfo) {
|
|||
}
|
||||
|
||||
for (int32_t i = 0; i < numOfExprs; ++i) {
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprsInfo, i);
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, i);
|
||||
|
||||
int16_t functionId = pExpr->functionId;
|
||||
if (functionId == TSDB_FUNC_TAGPRJ || functionId == TSDB_FUNC_PRJ || functionId == TSDB_FUNC_TS ||
|
||||
|
@ -5125,7 +5100,7 @@ static int32_t checkUpdateTagPrjFunctions(SQueryInfo* pQueryInfo) {
|
|||
doUpdateSqlFunctionForColPrj(pQueryInfo);
|
||||
}
|
||||
} else {
|
||||
if ((pQueryInfo->type & TSDB_QUERY_TYPE_PROJECTION_QUERY) == TSDB_QUERY_TYPE_PROJECTION_QUERY) {
|
||||
if ((pQueryInfo->type & TSDB_QUERY_TYPE_PROJECTION_QUERY) != 0) {
|
||||
if (numOfAggregation > 0 && pQueryInfo->groupbyExpr.numOfGroupCols == 0) {
|
||||
return invalidSqlErrMsg(pQueryInfo->msg, msg3);
|
||||
}
|
||||
|
@ -5221,7 +5196,7 @@ int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo) {
|
|||
const char* msg4 = "retrieve tags not compatible with group by or interval query";
|
||||
|
||||
// only retrieve tags, group by is not supportted
|
||||
if (pCmd->command == TSDB_SQL_RETRIEVE_TAGS) {
|
||||
if (tscQueryTags(pQueryInfo)) {
|
||||
if (pQueryInfo->groupbyExpr.numOfGroupCols > 0 || pQueryInfo->intervalTime > 0) {
|
||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg4);
|
||||
} else {
|
||||
|
@ -5283,7 +5258,7 @@ int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo) {
|
|||
return TSDB_CODE_INVALID_SQL;
|
||||
}
|
||||
|
||||
// projection query on metric does not compatible with "group by" syntax
|
||||
// projection query on super table does not compatible with "group by" syntax
|
||||
if (tscNonOrderedProjectionQueryOnSTable(pQueryInfo, 0)) {
|
||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
|
||||
}
|
||||
|
@ -5485,7 +5460,7 @@ int32_t doCheckForCreateTable(SSqlObj* pSql, int32_t subClauseIndex, SSqlInfo* p
|
|||
|
||||
pCmd->numOfCols = (int16_t)pFieldList->nField;
|
||||
|
||||
if (pTagList != NULL) { // create metric[optional]
|
||||
if (pTagList != NULL) { // create super table[optional]
|
||||
for (int32_t i = 0; i < pTagList->nField; ++i) {
|
||||
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &pTagList->p[i]);
|
||||
}
|
||||
|
@ -5761,6 +5736,8 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
|
|||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return code;
|
||||
}
|
||||
} else {
|
||||
TSDB_QUERY_SET_TYPE(pQueryInfo->type, TSDB_QUERY_TYPE_TABLE_QUERY);
|
||||
}
|
||||
|
||||
// parse the group by clause in the first place
|
||||
|
|
|
@ -83,7 +83,6 @@ STableComInfo tscGetTableInfo(const STableMeta* pTableMeta) {
|
|||
return pTableMeta->tableInfo;
|
||||
}
|
||||
|
||||
|
||||
bool isValidSchema(struct SSchema* pSchema, int32_t numOfCols) {
|
||||
if (!VALIDNUMOFCOLS(numOfCols)) {
|
||||
return false;
|
||||
|
@ -184,7 +183,6 @@ STableMeta* tscCreateTableMetaFromMsg(STableMetaMsg* pTableMetaMsg, size_t* size
|
|||
return pTableMeta;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* the TableMeta data format in memory is as follows:
|
||||
*
|
||||
|
|
|
@ -288,7 +288,7 @@ void tscCreateLocalReducer(tExtMemBuffer **pMemBuffer, int32_t numOfBuffer, tOrd
|
|||
pReducer->nResultBufSize = pMemBuffer[0]->pageSize * 16;
|
||||
pReducer->pResultBuf = (tFilePage *)calloc(1, pReducer->nResultBufSize + sizeof(tFilePage));
|
||||
|
||||
int32_t finalRowLength = tscGetResRowLength(pQueryInfo->exprsInfo);
|
||||
int32_t finalRowLength = tscGetResRowLength(pQueryInfo->exprList);
|
||||
pReducer->resColModel = finalmodel;
|
||||
pReducer->resColModel->capacity = pReducer->nResultBufSize / finalRowLength;
|
||||
assert(finalRowLength <= pReducer->rowSize);
|
||||
|
@ -810,7 +810,7 @@ void savePrevRecordAndSetupInterpoInfo(SLocalReducer *pLocalReducer, SQueryInfo
|
|||
// todo merge with following function
|
||||
// static void reversedCopyResultToDstBuf(SQueryInfo* pQueryInfo, SSqlRes *pRes, tFilePage *pFinalDataPage) {
|
||||
//
|
||||
// for (int32_t i = 0; i < pQueryInfo->exprsInfo.numOfExprs; ++i) {
|
||||
// for (int32_t i = 0; i < pQueryInfo->exprList.numOfExprs; ++i) {
|
||||
// TAOS_FIELD *pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, i);
|
||||
//
|
||||
// int32_t offset = tscFieldInfoGetOffset(pQueryInfo, i);
|
||||
|
@ -907,7 +907,7 @@ static void doInterpolateResult(SSqlObj *pSql, SLocalReducer *pLocalReducer, boo
|
|||
savePrevRecordAndSetupInterpoInfo(pLocalReducer, pQueryInfo, &pLocalReducer->interpolationInfo);
|
||||
}
|
||||
|
||||
int32_t rowSize = tscGetResRowLength(pQueryInfo->exprsInfo);
|
||||
int32_t rowSize = tscGetResRowLength(pQueryInfo->exprList);
|
||||
memcpy(pRes->data, pFinalDataPage->data, pRes->numOfRows * rowSize);
|
||||
|
||||
pFinalDataPage->numOfElems = 0;
|
||||
|
@ -1422,15 +1422,14 @@ static void doProcessResultInNextWindow(SSqlObj *pSql, int32_t numOfRes) {
|
|||
doExecuteSecondaryMerge(pCmd, pLocalReducer, true);
|
||||
}
|
||||
|
||||
int32_t tscDoLocalreduce(SSqlObj *pSql) {
|
||||
int32_t tscDoLocalMerge(SSqlObj *pSql) {
|
||||
SSqlCmd *pCmd = &pSql->cmd;
|
||||
SSqlRes *pRes = &pSql->res;
|
||||
|
||||
tscResetForNextRetrieve(pRes);
|
||||
|
||||
if (pSql->signature != pSql || pRes == NULL || pRes->pLocalReducer == NULL) { // all data has been processed
|
||||
tscTrace("%s call the drop local reducer", __FUNCTION__);
|
||||
|
||||
tscTrace("%p %s call the drop local reducer", pSql, __FUNCTION__);
|
||||
tscDestroyLocalReducer(pSql);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1441,7 +1440,7 @@ int32_t tscDoLocalreduce(SSqlObj *pSql) {
|
|||
// set the data merge in progress
|
||||
int32_t prevStatus =
|
||||
atomic_val_compare_exchange_32(&pLocalReducer->status, TSC_LOCALREDUCE_READY, TSC_LOCALREDUCE_IN_PROGRESS);
|
||||
if (prevStatus != TSC_LOCALREDUCE_READY || pLocalReducer == NULL) {
|
||||
if (prevStatus != TSC_LOCALREDUCE_READY) {
|
||||
assert(prevStatus == TSC_LOCALREDUCE_TOBE_FREED); // it is in tscDestroyLocalReducer function already
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -45,15 +45,15 @@ void tscSaveSubscriptionProgress(void* sub);
|
|||
|
||||
static int32_t minMsgSize() { return tsRpcHeadSize + 100; }
|
||||
|
||||
static void tscSetDnodeIpList(SSqlObj* pSql, STableMeta* pTableMeta) {
|
||||
static void tscSetDnodeIpList(SSqlObj* pSql, SCMVgroupInfo* pVgroupInfo) {
|
||||
SRpcIpSet* pIpList = &pSql->ipList;
|
||||
|
||||
pIpList->numOfIps = pTableMeta->vgroupInfo.numOfIps;
|
||||
pIpList->numOfIps = pVgroupInfo->numOfIps;
|
||||
pIpList->inUse = 0;
|
||||
|
||||
for(int32_t i = 0; i < pTableMeta->vgroupInfo.numOfIps; ++i) {
|
||||
strcpy(pIpList->fqdn[i], pTableMeta->vgroupInfo.ipAddr[i].fqdn);
|
||||
pIpList->port[i] = pTableMeta->vgroupInfo.ipAddr[i].port;
|
||||
for(int32_t i = 0; i < pVgroupInfo->numOfIps; ++i) {
|
||||
strcpy(pIpList->fqdn[i], pVgroupInfo->ipAddr[i].fqdn);
|
||||
pIpList->port[i] = pVgroupInfo->ipAddr[i].port;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -201,7 +201,7 @@ int tscSendMsgToServer(SSqlObj *pSql) {
|
|||
}
|
||||
|
||||
if (pSql->cmd.command < TSDB_SQL_MGMT) {
|
||||
tscTrace("%p msg:%s is sent to server %d", pSql, taosMsg[pSql->cmd.msgType], pSql->ipList.port);
|
||||
tscTrace("%p msg:%s is sent to server %d", pSql, taosMsg[pSql->cmd.msgType], pSql->ipList.port[0]);
|
||||
memcpy(pMsg, pSql->cmd.payload + tsRpcHeadSize, pSql->cmd.payloadLen);
|
||||
|
||||
SRpcMsg rpcMsg = {
|
||||
|
@ -329,11 +329,6 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg) {
|
|||
pRes->pRsp = NULL;
|
||||
}
|
||||
|
||||
// ignore the error information returned from mnode when set ignore flag in sql
|
||||
if (pRes->code == TSDB_CODE_DB_ALREADY_EXIST && pCmd->existsCheck && pRes->rspType == TSDB_MSG_TYPE_CM_CREATE_DB_RSP) {
|
||||
pRes->code = TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* There is not response callback function for submit response.
|
||||
* The actual inserted number of points is the first number.
|
||||
|
@ -415,7 +410,6 @@ int doProcessSql(SSqlObj *pSql) {
|
|||
|
||||
int tscProcessSql(SSqlObj *pSql) {
|
||||
char * name = NULL;
|
||||
SSqlRes *pRes = &pSql->res;
|
||||
SSqlCmd *pCmd = &pSql->cmd;
|
||||
|
||||
SQueryInfo * pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
|
||||
|
@ -430,42 +424,40 @@ int tscProcessSql(SSqlObj *pSql) {
|
|||
|
||||
type = pQueryInfo->type;
|
||||
|
||||
// for heartbeat, numOfTables == 0;
|
||||
// while numOfTables equals to 0, it must be Heartbeat
|
||||
assert((pQueryInfo->numOfTables == 0 && pQueryInfo->command == TSDB_SQL_HB) || pQueryInfo->numOfTables > 0);
|
||||
}
|
||||
|
||||
tscTrace("%p SQL cmd:%d will be processed, name:%s, type:%d", pSql, pCmd->command, name, type);
|
||||
if (pSql->cmd.command < TSDB_SQL_MGMT) {
|
||||
// the pTableMetaInfo cannot be NULL
|
||||
if (pCmd->command < TSDB_SQL_MGMT) { // the pTableMetaInfo cannot be NULL
|
||||
if (pTableMetaInfo == NULL) {
|
||||
pSql->res.code = TSDB_CODE_OTHERS;
|
||||
return pSql->res.code;
|
||||
}
|
||||
} else if (pSql->cmd.command < TSDB_SQL_LOCAL) {
|
||||
pSql->ipList = tscMgmtIpSet;
|
||||
} else if (pCmd->command < TSDB_SQL_LOCAL) {
|
||||
pSql->ipList = tscMgmtIpSet; //?
|
||||
} else { // local handler
|
||||
return (*tscProcessMsgRsp[pCmd->command])(pSql);
|
||||
}
|
||||
|
||||
// todo handle async situation
|
||||
if (QUERY_IS_JOIN_QUERY(type)) {
|
||||
if ((pQueryInfo->type & TSDB_QUERY_TYPE_SUBQUERY) == 0) {
|
||||
return tscHandleMasterJoinQuery(pSql);
|
||||
} else {
|
||||
// for first stage sub query, iterate all vnodes to get all timestamp
|
||||
if ((pQueryInfo->type & TSDB_QUERY_TYPE_JOIN_SEC_STAGE) != TSDB_QUERY_TYPE_JOIN_SEC_STAGE) {
|
||||
return doProcessSql(pSql);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (tscIsTwoStageSTableQuery(pQueryInfo, 0)) { // super table query
|
||||
tscHandleMasterSTableQuery(pSql);
|
||||
return pRes->code;
|
||||
} else if (pSql->fp == (void(*)())tscHandleMultivnodeInsert) { // multi-vnodes insertion
|
||||
tscHandleMultivnodeInsert(pSql);
|
||||
return pSql->res.code;
|
||||
}
|
||||
// if (QUERY_IS_JOIN_QUERY(type)) {
|
||||
// if ((pQueryInfo->type & TSDB_QUERY_TYPE_SUBQUERY) == 0) {
|
||||
// return tscHandleMasterJoinQuery(pSql);
|
||||
// } else {
|
||||
// // for first stage sub query, iterate all vnodes to get all timestamp
|
||||
// if ((pQueryInfo->type & TSDB_QUERY_TYPE_JOIN_SEC_STAGE) != TSDB_QUERY_TYPE_JOIN_SEC_STAGE) {
|
||||
// return doProcessSql(pSql);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (tscIsTwoStageSTableQuery(pQueryInfo, 0)) { // super table query
|
||||
// tscHandleMasterSTableQuery(pSql);
|
||||
// return pRes->code;
|
||||
// } else if (pSql->fp == (void(*)())tscHandleMultivnodeInsert) { // multi-vnodes insertion
|
||||
// tscHandleMultivnodeInsert(pSql);
|
||||
// return pRes->code;
|
||||
// }
|
||||
|
||||
return doProcessSql(pSql);
|
||||
}
|
||||
|
@ -502,14 +494,14 @@ void tscKillSTableQuery(SSqlObj *pSql) {
|
|||
const int64_t MAX_WAITING_TIME = 10000; // 10 Sec.
|
||||
int64_t stime = taosGetTimestampMs();
|
||||
|
||||
while (pSql->cmd.command != TSDB_SQL_RETRIEVE_METRIC && pSql->cmd.command != TSDB_SQL_RETRIEVE_EMPTY_RESULT) {
|
||||
while (pCmd->command != TSDB_SQL_RETRIEVE_LOCALMERGE && pCmd->command != TSDB_SQL_RETRIEVE_EMPTY_RESULT) {
|
||||
taosMsleep(100);
|
||||
if (taosGetTimestampMs() - stime > MAX_WAITING_TIME) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
tscTrace("%p metric query is cancelled", pSql);
|
||||
tscTrace("%p super table query cancelled", pSql);
|
||||
}
|
||||
|
||||
int tscBuildRetrieveMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||
|
@ -570,7 +562,7 @@ int tscBuildSubmitMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
|
||||
// pSql->cmd.payloadLen is set during copying data into payload
|
||||
pSql->cmd.msgType = TSDB_MSG_TYPE_SUBMIT;
|
||||
tscSetDnodeIpList(pSql, pTableMeta);
|
||||
tscSetDnodeIpList(pSql, &pTableMeta->vgroupInfo);
|
||||
|
||||
tscTrace("%p build submit msg, vgId:%d numOfVgroup:%d numberOfIP:%d", pSql, vgId, htonl(pMsgDesc->numOfVnodes), pSql->ipList.numOfIps);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
@ -600,18 +592,65 @@ static int32_t tscEstimateQueryMsgSize(SSqlCmd *pCmd, int32_t clauseIndex) {
|
|||
return size;
|
||||
}
|
||||
|
||||
static char *doSerializeTableInfo(SSqlObj *pSql, int32_t vgId, char *pMsg) {
|
||||
static char *doSerializeTableInfo(SQueryTableMsg* pQueryMsg, SSqlObj *pSql, char *pMsg) {
|
||||
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(&pSql->cmd, pSql->cmd.clauseIndex, 0);
|
||||
|
||||
STableMeta * pTableMeta = pTableMetaInfo->pTableMeta;
|
||||
tscTrace("%p vgId:%d, query on table:%s, uid:%" PRIu64, pSql, vgId, pTableMetaInfo->name, pTableMeta->uid);
|
||||
if (UTIL_TABLE_IS_NOMRAL_TABLE(pTableMetaInfo) || pTableMetaInfo->pVgroupTables == NULL) {
|
||||
|
||||
SCMVgroupInfo* pVgroupInfo = NULL;
|
||||
if (UTIL_TABLE_IS_NOMRAL_TABLE(pTableMetaInfo)) {
|
||||
pVgroupInfo = &pTableMeta->vgroupInfo;
|
||||
} else {
|
||||
int32_t index = pTableMetaInfo->vgroupIndex;
|
||||
assert(index >= 0);
|
||||
|
||||
pVgroupInfo = &pTableMetaInfo->vgroupList->vgroups[index];
|
||||
tscTrace("%p query on stable, vgIndex:%d, numOfVgroups:%d", pSql, index, pTableMetaInfo->vgroupList->numOfVgroups);
|
||||
}
|
||||
|
||||
tscSetDnodeIpList(pSql, pVgroupInfo);
|
||||
pQueryMsg->head.vgId = htonl(pVgroupInfo->vgId);
|
||||
|
||||
STableIdInfo *pTableIdInfo = (STableIdInfo *)pMsg;
|
||||
pTableIdInfo->sid = htonl(pTableMeta->sid);
|
||||
pTableIdInfo->tid = htonl(pTableMeta->sid);
|
||||
pTableIdInfo->uid = htobe64(pTableMeta->uid);
|
||||
pTableIdInfo->key = htobe64(tscGetSubscriptionProgress(pSql->pSubscription, pTableMeta->uid));
|
||||
|
||||
pQueryMsg->numOfTables = htonl(1); // set the number of tables
|
||||
|
||||
pMsg += sizeof(STableIdInfo);
|
||||
} else {
|
||||
int32_t index = pTableMetaInfo->vgroupIndex;
|
||||
int32_t numOfVgroups = taosArrayGetSize(pTableMetaInfo->pVgroupTables);
|
||||
assert(index >= 0 && index < numOfVgroups);
|
||||
|
||||
tscTrace("%p query on stable, vgIndex:%d, numOfVgroups:%d", pSql, index, numOfVgroups);
|
||||
|
||||
SVgroupTableInfo* pTableIdList = taosArrayGet(pTableMetaInfo->pVgroupTables, index);
|
||||
|
||||
// set the vgroup info
|
||||
tscSetDnodeIpList(pSql, &pTableIdList->vgInfo);
|
||||
pQueryMsg->head.vgId = htonl(pTableIdList->vgInfo.vgId);
|
||||
|
||||
int32_t numOfTables = taosArrayGetSize(pTableIdList->itemList);
|
||||
pQueryMsg->numOfTables = htonl(numOfTables); // set the number of tables
|
||||
|
||||
// serialize each table id info
|
||||
for(int32_t i = 0; i < numOfTables; ++i) {
|
||||
STableIdInfo* pItem = taosArrayGet(pTableIdList->itemList, i);
|
||||
|
||||
STableIdInfo *pTableIdInfo = (STableIdInfo *)pMsg;
|
||||
pTableIdInfo->tid = htonl(pItem->tid);
|
||||
pTableIdInfo->uid = htobe64(pItem->uid);
|
||||
// pTableIdInfo->key = htobe64(tscGetSubscriptionProgress(pSql->pSubscription, pTableMeta->uid));
|
||||
pMsg += sizeof(STableIdInfo);
|
||||
}
|
||||
}
|
||||
|
||||
tscTrace("%p vgId:%d, query on table:%s, uid:%" PRIu64, pSql, htonl(pQueryMsg->head.vgId), pTableMetaInfo->name,
|
||||
pTableMeta->uid);
|
||||
|
||||
return pMsg;
|
||||
}
|
||||
|
||||
|
@ -629,7 +668,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||
STableMeta * pTableMeta = pTableMetaInfo->pTableMeta;
|
||||
|
||||
if (taosArrayGetSize(pQueryInfo->colList) <= 0) {
|
||||
if (taosArrayGetSize(pQueryInfo->colList) <= 0 && !tscQueryTags(pQueryInfo)) {
|
||||
tscError("%p illegal value of numOfCols in query msg: %d", pSql, tscGetNumOfColumns(pTableMeta));
|
||||
return -1;
|
||||
}
|
||||
|
@ -648,38 +687,8 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
|
||||
SQueryTableMsg *pQueryMsg = (SQueryTableMsg *)pStart;
|
||||
|
||||
int32_t msgLen = 0;
|
||||
int32_t numOfTables = 0;
|
||||
int32_t numOfTags = taosArrayGetSize(pTableMetaInfo->tagColList);
|
||||
|
||||
if (UTIL_TABLE_IS_NOMRAL_TABLE(pTableMetaInfo)) {
|
||||
numOfTables = 1;
|
||||
tscSetDnodeIpList(pSql, pTableMeta);
|
||||
pQueryMsg->head.vgId = htonl(pTableMeta->vgroupInfo.vgId);
|
||||
tscTrace("%p queried tables:%d, table id: %s", pSql, 1, pTableMetaInfo->name);
|
||||
} else { // query super table
|
||||
int32_t index = pTableMetaInfo->vgroupIndex;
|
||||
if (index < 0) {
|
||||
tscError("%p error vgroupIndex:%d", pSql, index);
|
||||
return -1;
|
||||
}
|
||||
|
||||
SCMVgroupInfo* pVgroupInfo = &pTableMetaInfo->vgroupList->vgroups[index];
|
||||
|
||||
pSql->ipList.numOfIps = pVgroupInfo->numOfIps; // todo fix me
|
||||
pSql->ipList.inUse = 0;
|
||||
|
||||
for(int32_t i = 0; i < pVgroupInfo->numOfIps; ++i) {
|
||||
strcpy(pSql->ipList.fqdn[i], pVgroupInfo->ipAddr[i].fqdn);
|
||||
pSql->ipList.port[i] = pVgroupInfo->ipAddr[i].port;
|
||||
}
|
||||
|
||||
tscTrace("%p query on super table, numOfVgroup:%d, vgroupIndex:%d", pSql, pTableMetaInfo->vgroupList->numOfVgroups, index);
|
||||
|
||||
pQueryMsg->head.vgId = htonl(pVgroupInfo->vgId);
|
||||
numOfTables = 1;
|
||||
}
|
||||
|
||||
if (pQueryInfo->order.order == TSDB_ORDER_ASC) {
|
||||
pQueryMsg->window.skey = htobe64(pQueryInfo->window.skey);
|
||||
pQueryMsg->window.ekey = htobe64(pQueryInfo->window.ekey);
|
||||
|
@ -688,7 +697,6 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
pQueryMsg->window.ekey = htobe64(pQueryInfo->window.skey);
|
||||
}
|
||||
|
||||
pQueryMsg->numOfTables = htonl(numOfTables);
|
||||
pQueryMsg->order = htons(pQueryInfo->order.order);
|
||||
pQueryMsg->orderColId = htons(pQueryInfo->order.orderColId);
|
||||
pQueryMsg->interpoType = htons(pQueryInfo->interpoType);
|
||||
|
@ -795,7 +803,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
}
|
||||
|
||||
// serialize the table info (sid, uid, tags)
|
||||
pMsg = doSerializeTableInfo(pSql, htons(pQueryMsg->head.vgId), pMsg);
|
||||
pMsg = doSerializeTableInfo(pQueryMsg, pSql, pMsg);
|
||||
|
||||
SSqlGroupbyExpr *pGroupbyExpr = &pQueryInfo->groupbyExpr;
|
||||
if (pGroupbyExpr->numOfGroupCols > 0) {
|
||||
|
@ -834,7 +842,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
pSchema = tscGetTableTagSchema(pTableMeta);
|
||||
|
||||
for (int32_t i = 0; i < numOfTags; ++i) {
|
||||
SColumn *pCol = taosArrayGetP(pQueryInfo->colList, i);
|
||||
SColumn *pCol = taosArrayGetP(pTableMetaInfo->tagColList, i);
|
||||
SSchema *pColSchema = &pSchema[pCol->colIndex.columnIndex];
|
||||
|
||||
if ((pCol->colIndex.columnIndex >= numOfTagColumns || pCol->colIndex.columnIndex < -1) ||
|
||||
|
@ -902,8 +910,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
pMsg += strlen(pQueryInfo->tagCond.tbnameCond.cond) + 1;
|
||||
}
|
||||
|
||||
// tbname in/like query expression should be sent to mgmt node
|
||||
msgLen = pMsg - pStart;
|
||||
int32_t msgLen = pMsg - pStart;
|
||||
|
||||
tscTrace("%p msg built success,len:%d bytes", pSql, msgLen);
|
||||
pCmd->payloadLen = msgLen;
|
||||
|
@ -1459,11 +1466,11 @@ int tscProcessTagRetrieveRsp(SSqlObj *pSql) {
|
|||
return tscLocalResultCommonBuilder(pSql, numOfRes);
|
||||
}
|
||||
|
||||
int tscProcessRetrieveMetricRsp(SSqlObj *pSql) {
|
||||
int tscProcessRetrieveLocalMergeRsp(SSqlObj *pSql) {
|
||||
SSqlRes *pRes = &pSql->res;
|
||||
SSqlCmd *pCmd = &pSql->cmd;
|
||||
|
||||
pRes->code = tscDoLocalreduce(pSql);
|
||||
pRes->code = tscDoLocalMerge(pSql);
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
|
||||
|
||||
if (pRes->code == TSDB_CODE_SUCCESS && pRes->numOfRows > 0) {
|
||||
|
@ -1473,13 +1480,11 @@ int tscProcessRetrieveMetricRsp(SSqlObj *pSql) {
|
|||
pRes->row = 0;
|
||||
|
||||
uint8_t code = pRes->code;
|
||||
if (pSql->fp) { // async retrieve metric data
|
||||
if (pRes->code == TSDB_CODE_SUCCESS) {
|
||||
(*pSql->fp)(pSql->param, pSql, pRes->numOfRows);
|
||||
} else {
|
||||
tscQueueAsyncRes(pSql);
|
||||
}
|
||||
}
|
||||
|
||||
return code;
|
||||
}
|
||||
|
@ -1590,32 +1595,32 @@ int tscBuildMultiMeterMetaMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
return pCmd->payloadLen;
|
||||
}
|
||||
|
||||
static UNUSED_FUNC int32_t tscEstimateMetricMetaMsgSize(SSqlCmd *pCmd) {
|
||||
const int32_t defaultSize =
|
||||
minMsgSize() + sizeof(SSuperTableMetaMsg) + sizeof(SMgmtHead) + sizeof(int16_t) * TSDB_MAX_TAGS;
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, 0);
|
||||
|
||||
int32_t n = 0;
|
||||
size_t size = taosArrayGetSize(pQueryInfo->tagCond.pCond);
|
||||
for (int32_t i = 0; i < size; ++i) {
|
||||
assert(0);
|
||||
// n += strlen(pQueryInfo->tagCond.cond[i].cond);
|
||||
}
|
||||
|
||||
int32_t tagLen = n * TSDB_NCHAR_SIZE;
|
||||
if (pQueryInfo->tagCond.tbnameCond.cond != NULL) {
|
||||
tagLen += strlen(pQueryInfo->tagCond.tbnameCond.cond) * TSDB_NCHAR_SIZE;
|
||||
}
|
||||
|
||||
int32_t joinCondLen = (TSDB_TABLE_ID_LEN + sizeof(int16_t)) * 2;
|
||||
int32_t elemSize = sizeof(SSuperTableMetaElemMsg) * pQueryInfo->numOfTables;
|
||||
|
||||
int32_t colSize = pQueryInfo->groupbyExpr.numOfGroupCols*sizeof(SColIndex);
|
||||
|
||||
int32_t len = tagLen + joinCondLen + elemSize + colSize + defaultSize;
|
||||
|
||||
return MAX(len, TSDB_DEFAULT_PAYLOAD_SIZE);
|
||||
}
|
||||
//static UNUSED_FUNC int32_t tscEstimateMetricMetaMsgSize(SSqlCmd *pCmd) {
|
||||
//// const int32_t defaultSize =
|
||||
//// minMsgSize() + sizeof(SSuperTableMetaMsg) + sizeof(SMgmtHead) + sizeof(int16_t) * TSDB_MAX_TAGS;
|
||||
//// SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, 0);
|
||||
////
|
||||
//// int32_t n = 0;
|
||||
//// size_t size = taosArrayGetSize(pQueryInfo->tagCond.pCond);
|
||||
//// for (int32_t i = 0; i < size; ++i) {
|
||||
//// assert(0);
|
||||
////// n += strlen(pQueryInfo->tagCond.cond[i].cond);
|
||||
//// }
|
||||
////
|
||||
//// int32_t tagLen = n * TSDB_NCHAR_SIZE;
|
||||
//// if (pQueryInfo->tagCond.tbnameCond.cond != NULL) {
|
||||
//// tagLen += strlen(pQueryInfo->tagCond.tbnameCond.cond) * TSDB_NCHAR_SIZE;
|
||||
//// }
|
||||
////
|
||||
//// int32_t joinCondLen = (TSDB_TABLE_ID_LEN + sizeof(int16_t)) * 2;
|
||||
//// int32_t elemSize = sizeof(SSuperTableMetaElemMsg) * pQueryInfo->numOfTables;
|
||||
////
|
||||
//// int32_t colSize = pQueryInfo->groupbyExpr.numOfGroupCols*sizeof(SColIndex);
|
||||
////
|
||||
//// int32_t len = tagLen + joinCondLen + elemSize + colSize + defaultSize;
|
||||
////
|
||||
//// return MAX(len, TSDB_DEFAULT_PAYLOAD_SIZE);
|
||||
//}
|
||||
|
||||
int tscBuildSTableVgroupMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||
|
||||
|
@ -1764,13 +1769,21 @@ int tscBuildSTableVgroupMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
|
||||
SSqlCmd *pCmd = &pSql->cmd;
|
||||
|
||||
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0);
|
||||
char* pMsg = pCmd->payload;
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(pCmd, 0);
|
||||
|
||||
SCMSTableVgroupMsg *pStableVgroupMsg = (SCMSTableVgroupMsg *) pCmd->payload;
|
||||
strncpy(pStableVgroupMsg->tableId, pTableMetaInfo->name, tListLen(pStableVgroupMsg->tableId));
|
||||
SCMSTableVgroupMsg *pStableVgroupMsg = (SCMSTableVgroupMsg *) pMsg;
|
||||
pStableVgroupMsg->numOfTables = htonl(pQueryInfo->numOfTables);
|
||||
pMsg += sizeof(SCMSTableVgroupMsg);
|
||||
|
||||
for(int32_t i = 0; i < pQueryInfo->numOfTables; ++i) {
|
||||
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, i);
|
||||
strncpy(pMsg, pTableMetaInfo->name, TSDB_TABLE_ID_LEN);
|
||||
pMsg += TSDB_TABLE_ID_LEN;
|
||||
}
|
||||
|
||||
pCmd->msgType = TSDB_MSG_TYPE_CM_STABLE_VGROUP;
|
||||
pCmd->payloadLen = sizeof(SCMSTableVgroupMsg);
|
||||
pCmd->payloadLen = (pMsg - pCmd->payload);
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
@ -2125,27 +2138,37 @@ _error_clean:
|
|||
#endif
|
||||
SSqlRes* pRes = &pSql->res;
|
||||
|
||||
// NOTE: the order of several table must be preserved.
|
||||
SCMSTableVgroupRspMsg *pStableVgroup = (SCMSTableVgroupRspMsg *)pRes->pRsp;
|
||||
pStableVgroup->numOfVgroups = htonl(pStableVgroup->numOfVgroups);
|
||||
pStableVgroup->numOfTables = htonl(pStableVgroup->numOfTables);
|
||||
char* pMsg = pRes->pRsp + sizeof(SCMSTableVgroupRspMsg);
|
||||
|
||||
// master sqlObj locates in param
|
||||
SSqlObj* parent = pSql->param;
|
||||
assert(parent != NULL);
|
||||
|
||||
SSqlCmd* pCmd = &parent->cmd;
|
||||
STableMetaInfo* pInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0);
|
||||
for(int32_t i = 0; i < pStableVgroup->numOfTables; ++i) {
|
||||
STableMetaInfo *pInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, i);
|
||||
SVgroupsInfo * pVgroupInfo = (SVgroupsInfo *)pMsg;
|
||||
pVgroupInfo->numOfVgroups = htonl(pVgroupInfo->numOfVgroups);
|
||||
|
||||
pInfo->vgroupList = malloc(pRes->rspLen);
|
||||
memcpy(pInfo->vgroupList, pStableVgroup, pRes->rspLen);
|
||||
size_t size = sizeof(SCMVgroupInfo) * pVgroupInfo->numOfVgroups + sizeof(SVgroupsInfo);
|
||||
pInfo->vgroupList = calloc(1, size);
|
||||
assert(pInfo->vgroupList != NULL);
|
||||
|
||||
for(int32_t i = 0; i < pInfo->vgroupList->numOfVgroups; ++i) {
|
||||
SCMVgroupInfo* pVgroups = &pInfo->vgroupList->vgroups[i];
|
||||
memcpy(pInfo->vgroupList, pVgroupInfo, size);
|
||||
for (int32_t j = 0; j < pInfo->vgroupList->numOfVgroups; ++j) {
|
||||
SCMVgroupInfo *pVgroups = &pInfo->vgroupList->vgroups[j];
|
||||
|
||||
pVgroups->vgId = htonl(pVgroups->vgId);
|
||||
assert(pVgroups->numOfIps >= 1);
|
||||
|
||||
for(int32_t j = 0; j < pVgroups->numOfIps; ++j) {
|
||||
pVgroups->ipAddr[j].port = htons(pVgroups->ipAddr[j].port);
|
||||
for (int32_t k = 0; k < pVgroups->numOfIps; ++k) {
|
||||
pVgroups->ipAddr[k].port = htons(pVgroups->ipAddr[k].port);
|
||||
}
|
||||
|
||||
pMsg += size;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2239,7 +2262,7 @@ int tscProcessConnectRsp(SSqlObj *pSql) {
|
|||
strcpy(pObj->sversion, pConnect->serverVersion);
|
||||
pObj->writeAuth = pConnect->writeAuth;
|
||||
pObj->superAuth = pConnect->superAuth;
|
||||
taosTmrReset(tscProcessActivityTimer, tsShellActivityTimer * 500, pObj, tscTmr, &pObj->pTimer);
|
||||
// taosTmrReset(tscProcessActivityTimer, tsShellActivityTimer * 500, pObj, tscTmr, &pObj->pTimer);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -2278,7 +2301,6 @@ int tscProcessDropTableRsp(SSqlObj *pSql) {
|
|||
|
||||
if (pTableMetaInfo->pTableMeta) {
|
||||
taosCacheRelease(tscCacheHandle, (void **)&(pTableMetaInfo->pTableMeta), true);
|
||||
// taosCacheRelease(tscCacheHandle, (void **)&(pTableMetaInfo->pMetricMeta), true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -2504,42 +2526,27 @@ int tscRenewMeterMeta(SSqlObj *pSql, char *tableId) {
|
|||
return code;
|
||||
}
|
||||
|
||||
static bool allVgroupInfoRetrieved(SSqlCmd* pCmd, int32_t clauseIndex) {
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, clauseIndex);
|
||||
for (int32_t i = 0; i < pQueryInfo->numOfTables; ++i) {
|
||||
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, i);
|
||||
if (pTableMetaInfo->vgroupList == NULL) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// all super tables vgroupinfo are retrieved, no need to retrieve vgroup info anymore
|
||||
return true;
|
||||
}
|
||||
|
||||
int tscGetSTableVgroupInfo(SSqlObj *pSql, int32_t clauseIndex) {
|
||||
int code = TSDB_CODE_NETWORK_UNAVAIL;
|
||||
SSqlCmd *pCmd = &pSql->cmd;
|
||||
|
||||
//the query condition is serialized into pCmd->payload, we need to rebuild key for stable meta info in cache.
|
||||
// bool required = false;
|
||||
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, clauseIndex);
|
||||
if (pQueryInfo->pTableMetaInfo[0]->vgroupList != NULL) {
|
||||
if (allVgroupInfoRetrieved(pCmd, clauseIndex)) {
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
#if 0
|
||||
for (int32_t i = 0; i < pQueryInfo->numOfTables; ++i) {
|
||||
char tagstr[TSDB_MAX_TAGS_LEN + 1] = {0};
|
||||
|
||||
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, i);
|
||||
tscGetMetricMetaCacheKey(pQueryInfo, tagstr, pTableMetaInfo->pTableMeta->uid);
|
||||
|
||||
// taosCacheRelease(tscCacheHandle, (void **)&(pTableMetaInfo->pMetricMeta), false);
|
||||
|
||||
SSuperTableMeta *ppMeta = (SSuperTableMeta *)taosCacheAcquireByName(tscCacheHandle, tagstr);
|
||||
if (ppMeta == NULL) {
|
||||
required = true;
|
||||
break;
|
||||
} else {
|
||||
// pTableMetaInfo->pMetricMeta = ppMeta;
|
||||
}
|
||||
}
|
||||
|
||||
// all metricmeta for one clause are retrieved from cache, no need to retrieve metricmeta from management node
|
||||
if (!required) {
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
SSqlObj *pNew = calloc(1, sizeof(SSqlObj));
|
||||
pNew->pTscObj = pSql->pTscObj;
|
||||
pNew->signature = pNew;
|
||||
|
@ -2551,11 +2558,11 @@ int tscGetSTableVgroupInfo(SSqlObj *pSql, int32_t clauseIndex) {
|
|||
return code;
|
||||
}
|
||||
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, clauseIndex);
|
||||
for (int32_t i = 0; i < pQueryInfo->numOfTables; ++i) {
|
||||
STableMetaInfo *pMMInfo = tscGetMetaInfo(pQueryInfo, i);
|
||||
|
||||
STableMeta *pTableMeta = taosCacheAcquireByName(tscCacheHandle, pMMInfo->name);
|
||||
tscAddTableMetaInfo(pNewQueryInfo, pMMInfo->name, pTableMeta, NULL, pMMInfo->tagColList);
|
||||
STableMetaInfo *pMInfo = tscGetMetaInfo(pQueryInfo, i);
|
||||
STableMeta *pTableMeta = taosCacheAcquireByData(tscCacheHandle, pMInfo->pTableMeta);
|
||||
tscAddTableMetaInfo(pNewQueryInfo, pMInfo->name, pTableMeta, NULL, pMInfo->tagColList);
|
||||
}
|
||||
|
||||
if ((code = tscAllocPayload(&pNew->cmd, TSDB_DEFAULT_PAYLOAD_SIZE)) != TSDB_CODE_SUCCESS) {
|
||||
|
@ -2563,25 +2570,9 @@ int tscGetSTableVgroupInfo(SSqlObj *pSql, int32_t clauseIndex) {
|
|||
return code;
|
||||
}
|
||||
|
||||
tscTagCondCopy(&pNewQueryInfo->tagCond, &pQueryInfo->tagCond);
|
||||
|
||||
pNewQueryInfo->groupbyExpr = pQueryInfo->groupbyExpr;
|
||||
pNewQueryInfo->numOfTables = pQueryInfo->numOfTables;
|
||||
tscTrace("%p new sqlObj:%p to get vgroupInfo, numOfTables:%d", pSql, pNew, pNewQueryInfo->numOfTables);
|
||||
|
||||
pNewQueryInfo->slimit = pQueryInfo->slimit;
|
||||
pNewQueryInfo->order = pQueryInfo->order;
|
||||
|
||||
STagCond* pTagCond = &pNewQueryInfo->tagCond;
|
||||
tscTrace("%p new sqlobj:%p info, numOfTables:%d, slimit:%" PRId64 ", soffset:%" PRId64 ", order:%d, tbname cond:%s",
|
||||
pSql, pNew, pNewQueryInfo->numOfTables, pNewQueryInfo->slimit.limit, pNewQueryInfo->slimit.offset,
|
||||
pNewQueryInfo->order.order, pTagCond->tbnameCond.cond)
|
||||
|
||||
// if (pSql->fp != NULL && pSql->pStream == NULL) {
|
||||
// pCmd->pDataBlocks = tscDestroyBlockArrayList(pCmd->pDataBlocks);
|
||||
// tscFreeQueryInfo(pCmd);
|
||||
// }
|
||||
|
||||
tscTrace("%p allocate new pSqlObj:%p to get stable vgroupInfo", pSql, pNew);
|
||||
pNew->fp = tscTableMetaCallBack;
|
||||
pNew->param = pSql;
|
||||
code = tscProcessSql(pNew);
|
||||
|
@ -2643,7 +2634,6 @@ void tscInitMsgsFp() {
|
|||
tscProcessMsgRsp[TSDB_SQL_RETRIEVE] = tscProcessRetrieveRspFromNode; // rsp handled by same function.
|
||||
tscProcessMsgRsp[TSDB_SQL_DESCRIBE_TABLE] = tscProcessDescribeTableRsp;
|
||||
|
||||
tscProcessMsgRsp[TSDB_SQL_RETRIEVE_TAGS] = tscProcessTagRetrieveRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_CURRENT_DB] = tscProcessTagRetrieveRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_CURRENT_USER] = tscProcessTagRetrieveRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_SERV_VERSION] = tscProcessTagRetrieveRsp;
|
||||
|
@ -2652,7 +2642,7 @@ void tscInitMsgsFp() {
|
|||
|
||||
tscProcessMsgRsp[TSDB_SQL_RETRIEVE_EMPTY_RESULT] = tscProcessEmptyResultRsp;
|
||||
|
||||
tscProcessMsgRsp[TSDB_SQL_RETRIEVE_METRIC] = tscProcessRetrieveMetricRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_RETRIEVE_LOCALMERGE] = tscProcessRetrieveLocalMergeRsp;
|
||||
|
||||
tscProcessMsgRsp[TSDB_SQL_ALTER_TABLE] = tscProcessAlterTableMsgRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_ALTER_DB] = tscProcessAlterDbMsgRsp;
|
||||
|
|
|
@ -220,8 +220,9 @@ TAOS *taos_connect_a(char *ip, char *user, char *pass, char *db, uint16_t port,
|
|||
void taos_close(TAOS *taos) {
|
||||
STscObj *pObj = (STscObj *)taos;
|
||||
|
||||
if (pObj == NULL) return;
|
||||
if (pObj->signature != pObj) return;
|
||||
if (pObj == NULL || pObj->signature != pObj) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (pObj->pHb != NULL) {
|
||||
tscSetFreeHeatBeat(pObj);
|
||||
|
@ -266,7 +267,7 @@ int taos_query_imp(STscObj *pObj, SSqlObj *pSql) {
|
|||
}
|
||||
|
||||
if (pRes->code != TSDB_CODE_SUCCESS) {
|
||||
tscFreeSqlObjPartial(pSql);
|
||||
tscPartiallyFreeSqlObj(pSql);
|
||||
}
|
||||
|
||||
return pRes->code;
|
||||
|
@ -414,7 +415,7 @@ int taos_fetch_block_impl(TAOS_RES *res, TAOS_ROW *rows) {
|
|||
}
|
||||
|
||||
// secondary merge has handle this situation
|
||||
if (pCmd->command != TSDB_SQL_RETRIEVE_METRIC) {
|
||||
if (pCmd->command != TSDB_SQL_RETRIEVE_LOCALMERGE) {
|
||||
pRes->numOfTotalInCurrentClause += pRes->numOfRows;
|
||||
}
|
||||
|
||||
|
@ -422,8 +423,9 @@ int taos_fetch_block_impl(TAOS_RES *res, TAOS_ROW *rows) {
|
|||
if (pQueryInfo == NULL)
|
||||
return 0;
|
||||
|
||||
assert(0);
|
||||
for (int i = 0; i < pQueryInfo->fieldsInfo.numOfOutput; ++i) {
|
||||
pRes->tsrow[i] = tscGetResultColumnChr(pRes, pQueryInfo, i);
|
||||
pRes->tsrow[i] = tscGetResultColumnChr(pRes, pQueryInfo, i, 0);
|
||||
}
|
||||
|
||||
*rows = pRes->tsrow;
|
||||
|
@ -431,32 +433,9 @@ int taos_fetch_block_impl(TAOS_RES *res, TAOS_ROW *rows) {
|
|||
return (pQueryInfo->order.order == TSDB_ORDER_DESC) ? pRes->numOfRows : -pRes->numOfRows;
|
||||
}
|
||||
|
||||
static void transferNcharData(SSqlObj *pSql, int32_t columnIndex, TAOS_FIELD *pField) {
|
||||
SSqlRes *pRes = &pSql->res;
|
||||
|
||||
if (isNull(pRes->tsrow[columnIndex], pField->type)) {
|
||||
pRes->tsrow[columnIndex] = NULL;
|
||||
} else if (pField->type == TSDB_DATA_TYPE_NCHAR) {
|
||||
// convert unicode to native code in a temporary buffer extra one byte for terminated symbol
|
||||
if (pRes->buffer[columnIndex] == NULL) {
|
||||
pRes->buffer[columnIndex] = malloc(pField->bytes + TSDB_NCHAR_SIZE);
|
||||
}
|
||||
|
||||
/* string terminated char for binary data*/
|
||||
memset(pRes->buffer[columnIndex], 0, pField->bytes + TSDB_NCHAR_SIZE);
|
||||
|
||||
if (taosUcs4ToMbs(pRes->tsrow[columnIndex], pField->bytes, pRes->buffer[columnIndex])) {
|
||||
pRes->tsrow[columnIndex] = pRes->buffer[columnIndex];
|
||||
} else {
|
||||
tscError("%p charset:%s to %s. val:%ls convert failed.", pSql, DEFAULT_UNICODE_ENCODEC, tsCharset, pRes->tsrow);
|
||||
pRes->tsrow[columnIndex] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static char *getArithemicInputSrc(void *param, const char *name, int32_t colId) {
|
||||
static UNUSED_FUNC char *getArithemicInputSrc(void *param, const char *name, int32_t colId) {
|
||||
// SArithmeticSupport *pSupport = (SArithmeticSupport *)param;
|
||||
// SArithExprInfo * pExpr = pSupport->pArithExpr;
|
||||
// SExprInfo * pExpr = pSupport->pArithExpr;
|
||||
|
||||
// int32_t index = -1;
|
||||
// for (int32_t i = 0; i < pExpr->numOfCols; ++i) {
|
||||
|
@ -471,210 +450,6 @@ static char *getArithemicInputSrc(void *param, const char *name, int32_t colId)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void **doSetResultRowData(SSqlObj *pSql) {
|
||||
SSqlCmd *pCmd = &pSql->cmd;
|
||||
SSqlRes *pRes = &pSql->res;
|
||||
|
||||
assert(pRes->row >= 0 && pRes->row <= pRes->numOfRows);
|
||||
|
||||
if (pRes->row >= pRes->numOfRows) { // all the results has returned to invoker
|
||||
tfree(pRes->tsrow);
|
||||
return pRes->tsrow;
|
||||
}
|
||||
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
|
||||
|
||||
//todo refactor move away
|
||||
size_t numOfExprs = tscSqlExprNumOfExprs(pQueryInfo);
|
||||
for(int32_t k = 0; k < numOfExprs; ++k) {
|
||||
SSqlExpr* pExpr = tscSqlExprGet(pQueryInfo, k);
|
||||
|
||||
if (k > 0) {
|
||||
SSqlExpr* pPrev = tscSqlExprGet(pQueryInfo, k - 1);
|
||||
pExpr->offset = pPrev->offset + pPrev->resBytes;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t num = 0;
|
||||
for (int i = 0; i < tscNumOfFields(pQueryInfo); ++i) {
|
||||
SFieldSupInfo* pInfo = tscFieldInfoGetSupp(&pQueryInfo->fieldsInfo, i);
|
||||
if (pInfo->pSqlExpr != NULL) {
|
||||
pRes->tsrow[i] = tscGetResultColumnChr(pRes, pQueryInfo, i) + pInfo->pSqlExpr->resBytes * pRes->row;
|
||||
} else {
|
||||
assert(0);
|
||||
}
|
||||
|
||||
// primary key column cannot be null in interval query, no need to check
|
||||
if (i == 0 && pQueryInfo->intervalTime > 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
TAOS_FIELD *pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, i);
|
||||
transferNcharData(pSql, i, pField);
|
||||
|
||||
// calculate the result from several other columns
|
||||
if (pInfo->pArithExprInfo != NULL) {
|
||||
SArithmeticSupport *sas = (SArithmeticSupport *)calloc(1, sizeof(SArithmeticSupport));
|
||||
sas->offset = 0;
|
||||
sas->pArithExpr = pInfo->pArithExprInfo;
|
||||
|
||||
// sas->numOfCols = sas->pArithExpr->numOfCols;
|
||||
|
||||
if (pRes->buffer[i] == NULL) {
|
||||
pRes->buffer[i] = malloc(tscFieldInfoGetField(&pQueryInfo->fieldsInfo, i)->bytes);
|
||||
}
|
||||
|
||||
for(int32_t k = 0; k < sas->numOfCols; ++k) {
|
||||
// int32_t columnIndex = sas->pArithExpr->colList[k].colIndex;
|
||||
// SSqlExpr* pExpr = tscSqlExprGet(pQueryInfo, columnIndex);
|
||||
//
|
||||
// sas->elemSize[k] = pExpr->resBytes;
|
||||
// sas->data[k] = (pRes->data + pRes->numOfRows* pExpr->offset) + pRes->row*pExpr->resBytes;
|
||||
}
|
||||
|
||||
tExprTreeCalcTraverse(sas->pArithExpr->pExpr, 1, pRes->buffer[i], sas, TSDB_ORDER_ASC, getArithemicInputSrc);
|
||||
pRes->tsrow[i] = pRes->buffer[i];
|
||||
|
||||
free(sas); //todo optimization
|
||||
}
|
||||
}
|
||||
|
||||
assert(num <= pQueryInfo->fieldsInfo.numOfOutput);
|
||||
|
||||
pRes->row++; // index increase one-step
|
||||
return pRes->tsrow;
|
||||
}
|
||||
|
||||
static bool tscHashRemainDataInSubqueryResultSet(SSqlObj *pSql) {
|
||||
bool hasData = true;
|
||||
SSqlCmd *pCmd = &pSql->cmd;
|
||||
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
|
||||
if (tscNonOrderedProjectionQueryOnSTable(pQueryInfo, 0)) {
|
||||
bool allSubqueryExhausted = true;
|
||||
|
||||
for (int32_t i = 0; i < pSql->numOfSubs; ++i) {
|
||||
if (pSql->pSubs[i] == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// SSqlRes *pRes1 = &pSql->pSubs[i]->res;
|
||||
SSqlCmd *pCmd1 = &pSql->pSubs[i]->cmd;
|
||||
|
||||
SQueryInfo * pQueryInfo1 = tscGetQueryInfoDetail(pCmd1, pCmd1->clauseIndex);
|
||||
// STableMetaInfo *pMetaInfo = tscGetMetaInfo(pQueryInfo1, 0);
|
||||
|
||||
assert(pQueryInfo1->numOfTables == 1);
|
||||
|
||||
/*
|
||||
* if the global limitation is not reached, and current result has not exhausted, or next more vnodes are
|
||||
* available, goes on
|
||||
*/
|
||||
// if (pMetaInfo->vnodeIndex < pMetaInfo->pMetricMeta->numOfVnodes && pRes1->row < pRes1->numOfRows &&
|
||||
// (!tscHasReachLimitation(pQueryInfo1, pRes1))) {
|
||||
// allSubqueryExhausted = false;
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
|
||||
hasData = !allSubqueryExhausted;
|
||||
} else { // otherwise, in case inner join, if any subquery exhausted, query completed.
|
||||
for (int32_t i = 0; i < pSql->numOfSubs; ++i) {
|
||||
if (pSql->pSubs[i] == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
SSqlRes * pRes1 = &pSql->pSubs[i]->res;
|
||||
SQueryInfo *pQueryInfo1 = tscGetQueryInfoDetail(&pSql->pSubs[i]->cmd, 0);
|
||||
|
||||
if ((pRes1->row >= pRes1->numOfRows && tscHasReachLimitation(pQueryInfo1, pRes1) &&
|
||||
tscProjectionQueryOnTable(pQueryInfo1)) ||
|
||||
(pRes1->numOfRows == 0)) {
|
||||
hasData = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return hasData;
|
||||
}
|
||||
|
||||
static UNUSED_FUNC void **tscBuildResFromSubqueries(SSqlObj *pSql) {
|
||||
SSqlRes *pRes = &pSql->res;
|
||||
|
||||
while (1) {
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, pSql->cmd.clauseIndex);
|
||||
size_t numOfExprs = tscSqlExprNumOfExprs(pQueryInfo);
|
||||
|
||||
if (pRes->tsrow == NULL) {
|
||||
pRes->tsrow = calloc(numOfExprs, POINTER_BYTES);
|
||||
}
|
||||
|
||||
bool success = false;
|
||||
|
||||
int32_t numOfTableHasRes = 0;
|
||||
for (int32_t i = 0; i < pSql->numOfSubs; ++i) {
|
||||
if (pSql->pSubs[i] != 0) {
|
||||
numOfTableHasRes++;
|
||||
}
|
||||
}
|
||||
|
||||
if (numOfTableHasRes >= 2) { // do merge result
|
||||
success = (doSetResultRowData(pSql->pSubs[0]) != NULL) && (doSetResultRowData(pSql->pSubs[1]) != NULL);
|
||||
} else { // only one subquery
|
||||
SSqlObj *pSub = pSql->pSubs[0];
|
||||
if (pSub == NULL) {
|
||||
pSub = pSql->pSubs[1];
|
||||
}
|
||||
|
||||
success = (doSetResultRowData(pSub) != NULL);
|
||||
}
|
||||
|
||||
if (success) { // current row of final output has been built, return to app
|
||||
for (int32_t i = 0; i < numOfExprs; ++i) {
|
||||
int32_t tableIndex = pRes->pColumnIndex[i].tableIndex;
|
||||
int32_t columnIndex = pRes->pColumnIndex[i].columnIndex;
|
||||
|
||||
SSqlRes *pRes1 = &pSql->pSubs[tableIndex]->res;
|
||||
pRes->tsrow[i] = pRes1->tsrow[columnIndex];
|
||||
}
|
||||
|
||||
pRes->numOfTotalInCurrentClause++;
|
||||
|
||||
break;
|
||||
} else { // continue retrieve data from vnode
|
||||
if (!tscHashRemainDataInSubqueryResultSet(pSql)) {
|
||||
tscTrace("%p at least one subquery exhausted, free all other %d subqueries", pSql, pSql->numOfSubs - 1);
|
||||
SSubqueryState *pState = NULL;
|
||||
|
||||
// free all sub sqlobj
|
||||
for (int32_t i = 0; i < pSql->numOfSubs; ++i) {
|
||||
SSqlObj *pChildObj = pSql->pSubs[i];
|
||||
if (pChildObj == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
SJoinSubquerySupporter *pSupporter = (SJoinSubquerySupporter *)pChildObj->param;
|
||||
pState = pSupporter->pState;
|
||||
|
||||
tscDestroyJoinSupporter(pChildObj->param);
|
||||
taos_free_result(pChildObj);
|
||||
}
|
||||
|
||||
free(pState);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
tscFetchDatablockFromSubquery(pSql);
|
||||
if (pRes->code != TSDB_CODE_SUCCESS) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return pRes->tsrow;
|
||||
}
|
||||
|
||||
static void waitForRetrieveRsp(void *param, TAOS_RES *tres, int numOfRows) {
|
||||
SSqlObj* pSql = (SSqlObj*) tres;
|
||||
|
||||
|
@ -701,15 +476,19 @@ TAOS_ROW taos_fetch_row(TAOS_RES *res) {
|
|||
}
|
||||
|
||||
// current data are exhausted, fetch more data
|
||||
if (pRes->data == NULL || (pRes->data != NULL && pRes->row >= pRes->numOfRows && pRes->completed != true &&
|
||||
(pCmd->command == TSDB_SQL_RETRIEVE || pCmd->command == TSDB_SQL_RETRIEVE_METRIC ||
|
||||
pCmd->command == TSDB_SQL_FETCH || pCmd->command == TSDB_SQL_DESCRIBE_TABLE))) {
|
||||
if (pRes->row >= pRes->numOfRows && pRes->completed != true &&
|
||||
(pCmd->command == TSDB_SQL_RETRIEVE ||
|
||||
pCmd->command == TSDB_SQL_RETRIEVE_LOCALMERGE ||
|
||||
pCmd->command == TSDB_SQL_METRIC_JOIN_RETRIEVE ||
|
||||
pCmd->command == TSDB_SQL_FETCH ||
|
||||
pCmd->command == TSDB_SQL_SHOW ||
|
||||
pCmd->command == TSDB_SQL_SELECT ||
|
||||
pCmd->command == TSDB_SQL_DESCRIBE_TABLE)) {
|
||||
taos_fetch_rows_a(res, waitForRetrieveRsp, pSql->pTscObj);
|
||||
|
||||
sem_wait(&pSql->rspSem);
|
||||
}
|
||||
|
||||
return doSetResultRowData(pSql);
|
||||
return doSetResultRowData(pSql, true);
|
||||
}
|
||||
|
||||
int taos_fetch_block(TAOS_RES *res, TAOS_ROW *rows) {
|
||||
|
@ -795,7 +574,7 @@ void taos_free_result_imp(TAOS_RES *res, int keepCmd) {
|
|||
if (keepCmd) {
|
||||
tscFreeSqlResult(pSql);
|
||||
} else {
|
||||
tscFreeSqlObjPartial(pSql);
|
||||
tscPartiallyFreeSqlObj(pSql);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -805,7 +584,7 @@ void taos_free_result_imp(TAOS_RES *res, int keepCmd) {
|
|||
// set freeFlag to 1 in retrieve message if there are un-retrieved results
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
if (pQueryInfo == NULL) {
|
||||
tscFreeSqlObjPartial(pSql);
|
||||
tscPartiallyFreeSqlObj(pSql);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -857,7 +636,7 @@ void taos_free_result_imp(TAOS_RES *res, int keepCmd) {
|
|||
tscFreeSqlResult(pSql);
|
||||
tscTrace("%p sql result is freed by app while sql command is kept", pSql);
|
||||
} else {
|
||||
tscFreeSqlObjPartial(pSql);
|
||||
tscPartiallyFreeSqlObj(pSql);
|
||||
tscTrace("%p sql result is freed by app", pSql);
|
||||
}
|
||||
} else { // for async release, remove its link
|
||||
|
@ -878,7 +657,7 @@ void taos_free_result_imp(TAOS_RES *res, int keepCmd) {
|
|||
tscFreeSqlResult(pSql);
|
||||
tscTrace("%p sql result is freed while sql command is kept", pSql);
|
||||
} else {
|
||||
tscFreeSqlObjPartial(pSql);
|
||||
tscPartiallyFreeSqlObj(pSql);
|
||||
tscTrace("%p sql result is freed by app", pSql);
|
||||
}
|
||||
}
|
||||
|
@ -1223,7 +1002,7 @@ int taos_load_table_info(TAOS *taos, const char *tableNameList) {
|
|||
|
||||
tscTrace("%p load multi metermeta result:%d %s pObj:%p", pSql, pRes->code, taos_errstr(taos), pObj);
|
||||
if (pRes->code != TSDB_CODE_SUCCESS) {
|
||||
tscFreeSqlObjPartial(pSql);
|
||||
tscPartiallyFreeSqlObj(pSql);
|
||||
}
|
||||
|
||||
return pRes->code;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -76,7 +76,9 @@ bool tscQueryOnSTable(SSqlCmd* pCmd) {
|
|||
|
||||
bool tscQueryTags(SQueryInfo* pQueryInfo) {
|
||||
for (int32_t i = 0; i < pQueryInfo->fieldsInfo.numOfOutput; ++i) {
|
||||
if (tscSqlExprGet(pQueryInfo, i)->functionId != TSDB_FUNC_TAGPRJ) {
|
||||
int32_t functId = tscSqlExprGet(pQueryInfo, i)->functionId;
|
||||
|
||||
if (functId != TSDB_FUNC_TAGPRJ && functId != TSDB_FUNC_TID_TAG) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -123,23 +125,23 @@ void tscGetDBInfoFromMeterId(char* tableId, char* db) {
|
|||
db[0] = 0;
|
||||
}
|
||||
|
||||
STableIdInfo* tscGetMeterSidInfo(SVnodeSidList* pSidList, int32_t idx) {
|
||||
if (pSidList == NULL) {
|
||||
tscError("illegal sidlist");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (idx < 0 || idx >= pSidList->numOfSids) {
|
||||
int32_t sidRange = (pSidList->numOfSids > 0) ? (pSidList->numOfSids - 1) : 0;
|
||||
|
||||
tscError("illegal sidIdx:%d, reset to 0, sidIdx range:%d-%d", idx, 0, sidRange);
|
||||
idx = 0;
|
||||
}
|
||||
|
||||
assert(pSidList->pSidExtInfoList[idx] >= 0);
|
||||
|
||||
return (STableIdInfo*)(pSidList->pSidExtInfoList[idx] + (char*)pSidList);
|
||||
}
|
||||
//STableIdInfo* tscGetMeterSidInfo(SVnodeSidList* pSidList, int32_t idx) {
|
||||
// if (pSidList == NULL) {
|
||||
// tscError("illegal sidlist");
|
||||
// return 0;
|
||||
// }
|
||||
//
|
||||
// if (idx < 0 || idx >= pSidList->numOfSids) {
|
||||
// int32_t sidRange = (pSidList->numOfSids > 0) ? (pSidList->numOfSids - 1) : 0;
|
||||
//
|
||||
// tscError("illegal sidIdx:%d, reset to 0, sidIdx range:%d-%d", idx, 0, sidRange);
|
||||
// idx = 0;
|
||||
// }
|
||||
//
|
||||
// assert(pSidList->pSidExtInfoList[idx] >= 0);
|
||||
//
|
||||
// return (STableIdInfo*)(pSidList->pSidExtInfoList[idx] + (char*)pSidList);
|
||||
//}
|
||||
|
||||
bool tscIsTwoStageSTableQuery(SQueryInfo* pQueryInfo, int32_t tableIndex) {
|
||||
if (pQueryInfo == NULL) {
|
||||
|
@ -151,15 +153,11 @@ bool tscIsTwoStageSTableQuery(SQueryInfo* pQueryInfo, int32_t tableIndex) {
|
|||
return false;
|
||||
}
|
||||
|
||||
// for select query super table, the metricmeta can not be null in any cases.
|
||||
// for select query super table, the super table vgroup list can not be null in any cases.
|
||||
if (pQueryInfo->command == TSDB_SQL_SELECT && UTIL_TABLE_IS_SUPERTABLE(pTableMetaInfo)) {
|
||||
// assert(pTableMetaInfo->pMetricMeta != NULL);
|
||||
assert(pTableMetaInfo->vgroupList != NULL);
|
||||
}
|
||||
|
||||
// if (pTableMetaInfo->pMetricMeta == NULL) {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if ((pQueryInfo->type & TSDB_QUERY_TYPE_FREE_RESOURCE) == TSDB_QUERY_TYPE_FREE_RESOURCE) {
|
||||
return false;
|
||||
}
|
||||
|
@ -191,12 +189,11 @@ bool tscIsProjectionQueryOnSTable(SQueryInfo* pQueryInfo, int32_t tableIndex) {
|
|||
return false;
|
||||
}
|
||||
|
||||
// only query on tag, not a projection query
|
||||
// only query on tag, a project query
|
||||
if (tscQueryTags(pQueryInfo)) {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// for project query, only the following two function is allowed
|
||||
for (int32_t i = 0; i < numOfExprs; ++i) {
|
||||
int32_t functionId = tscSqlExprGet(pQueryInfo, i)->functionId;
|
||||
if (functionId != TSDB_FUNC_PRJ && functionId != TSDB_FUNC_TAGPRJ && functionId != TSDB_FUNC_TAG &&
|
||||
|
@ -306,12 +303,10 @@ int32_t tscCreateResPointerInfo(SSqlRes* pRes, SQueryInfo* pQueryInfo) {
|
|||
}
|
||||
|
||||
void tscDestroyResPointerInfo(SSqlRes* pRes) {
|
||||
if (pRes->buffer != NULL) {
|
||||
// free all buffers containing the multibyte string
|
||||
if (pRes->buffer != NULL) { // free all buffers containing the multibyte string
|
||||
for (int i = 0; i < pRes->numOfCols; i++) {
|
||||
tfree(pRes->buffer[i]);
|
||||
}
|
||||
|
||||
pRes->numOfCols = 0;
|
||||
}
|
||||
|
||||
|
@ -340,50 +335,15 @@ void tscResetSqlCmdObj(SSqlCmd* pCmd) {
|
|||
tscFreeQueryInfo(pCmd);
|
||||
}
|
||||
|
||||
/*
|
||||
* this function must not change the pRes->code value, since it may be used later.
|
||||
*/
|
||||
void tscFreeResData(SSqlObj* pSql) {
|
||||
SSqlRes* pRes = &pSql->res;
|
||||
|
||||
pRes->row = 0;
|
||||
|
||||
pRes->rspType = 0;
|
||||
pRes->rspLen = 0;
|
||||
pRes->row = 0;
|
||||
|
||||
pRes->numOfRows = 0;
|
||||
pRes->numOfTotal = 0;
|
||||
pRes->numOfTotalInCurrentClause = 0;
|
||||
|
||||
pRes->numOfGroups = 0;
|
||||
pRes->precision = 0;
|
||||
pRes->qhandle = 0;
|
||||
|
||||
pRes->offset = 0;
|
||||
pRes->useconds = 0;
|
||||
|
||||
tscDestroyLocalReducer(pSql);
|
||||
|
||||
tscDestroyResPointerInfo(pRes);
|
||||
}
|
||||
|
||||
void tscFreeSqlResult(SSqlObj* pSql) {
|
||||
tfree(pSql->res.pRsp);
|
||||
pSql->res.row = 0;
|
||||
pSql->res.numOfRows = 0;
|
||||
pSql->res.numOfTotal = 0;
|
||||
|
||||
pSql->res.numOfGroups = 0;
|
||||
tfree(pSql->res.pGroupRec);
|
||||
|
||||
tscDestroyLocalReducer(pSql);
|
||||
|
||||
tscDestroyResPointerInfo(&pSql->res);
|
||||
tfree(pSql->res.pColumnIndex);
|
||||
SSqlRes* pRes = &pSql->res;
|
||||
tscDestroyResPointerInfo(pRes);
|
||||
memset(&pSql->res, 0, sizeof(SSqlRes));
|
||||
}
|
||||
|
||||
void tscFreeSqlObjPartial(SSqlObj* pSql) {
|
||||
void tscPartiallyFreeSqlObj(SSqlObj* pSql) {
|
||||
if (pSql == NULL || pSql->signature != pSql) {
|
||||
return;
|
||||
}
|
||||
|
@ -392,7 +352,7 @@ void tscFreeSqlObjPartial(SSqlObj* pSql) {
|
|||
STscObj* pObj = pSql->pTscObj;
|
||||
|
||||
int32_t cmd = pCmd->command;
|
||||
if (cmd < TSDB_SQL_INSERT || cmd == TSDB_SQL_RETRIEVE_METRIC || cmd == TSDB_SQL_RETRIEVE_EMPTY_RESULT ||
|
||||
if (cmd < TSDB_SQL_INSERT || cmd == TSDB_SQL_RETRIEVE_LOCALMERGE || cmd == TSDB_SQL_RETRIEVE_EMPTY_RESULT ||
|
||||
cmd == TSDB_SQL_METRIC_JOIN_RETRIEVE) {
|
||||
tscRemoveFromSqlList(pSql);
|
||||
}
|
||||
|
@ -417,7 +377,7 @@ void tscFreeSqlObj(SSqlObj* pSql) {
|
|||
if (pSql == NULL || pSql->signature != pSql) return;
|
||||
|
||||
tscTrace("%p start to free sql object", pSql);
|
||||
tscFreeSqlObjPartial(pSql);
|
||||
tscPartiallyFreeSqlObj(pSql);
|
||||
|
||||
pSql->signature = NULL;
|
||||
pSql->fp = NULL;
|
||||
|
@ -643,14 +603,16 @@ static int trimDataBlock(void* pDataBlock, STableDataBlocks* pTableDataBlock) {
|
|||
memcpy(pDataBlock, pTableDataBlock->pData, sizeof(SSubmitBlk));
|
||||
pDataBlock += sizeof(SSubmitBlk);
|
||||
|
||||
int32_t flen = 0;
|
||||
int32_t flen = 0; // original total length of row
|
||||
for (int32_t i = 0; i < tinfo.numOfColumns; ++i) {
|
||||
flen += TYPE_BYTES[pSchema[i].type];
|
||||
}
|
||||
|
||||
char* p = pTableDataBlock->pData + sizeof(SSubmitBlk);
|
||||
pBlock->len = 0;
|
||||
for (int32_t i = 0; i < htons(pBlock->numOfRows); ++i) {
|
||||
int32_t numOfRows = htons(pBlock->numOfRows);
|
||||
|
||||
for (int32_t i = 0; i < numOfRows; ++i) {
|
||||
SDataRow trow = (SDataRow)pDataBlock;
|
||||
dataRowSetLen(trow, TD_DATA_ROW_HEAD_SIZE + flen);
|
||||
|
||||
|
@ -748,27 +710,27 @@ int32_t tscMergeTableDataBlocks(SSqlObj* pSql, SDataBlockList* pTableDataBlockLi
|
|||
}
|
||||
|
||||
void tscCloseTscObj(STscObj* pObj) {
|
||||
assert(pObj != NULL);
|
||||
|
||||
pObj->signature = NULL;
|
||||
SSqlObj* pSql = pObj->pSql;
|
||||
|
||||
if (pSql) {
|
||||
terrno = pSql->res.code;
|
||||
sem_destroy(&pSql->rspSem);
|
||||
}
|
||||
|
||||
taosTmrStopA(&(pObj->pTimer));
|
||||
tscFreeSqlObj(pSql);
|
||||
|
||||
if (pSql) {
|
||||
sem_destroy(&pSql->rspSem);
|
||||
}
|
||||
rpcClose(pObj->pMgmtConn);
|
||||
|
||||
pthread_mutex_destroy(&pObj->mutex);
|
||||
|
||||
tscTrace("%p DB connection is closed", pObj);
|
||||
tfree(pObj);
|
||||
}
|
||||
|
||||
bool tscIsInsertOrImportData(char* sqlstr) {
|
||||
bool tscIsInsertData(char* sqlstr) {
|
||||
int32_t index = 0;
|
||||
|
||||
do {
|
||||
|
@ -843,12 +805,12 @@ SFieldSupInfo* tscFieldInfoInsert(SFieldInfo* pFieldInfo, int32_t index, TAOS_FI
|
|||
void tscFieldInfoUpdateOffset(SQueryInfo* pQueryInfo) {
|
||||
size_t numOfExprs = tscSqlExprNumOfExprs(pQueryInfo);
|
||||
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprsInfo, 0);
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
pExpr->offset = 0;
|
||||
|
||||
for (int32_t i = 1; i < numOfExprs; ++i) {
|
||||
SSqlExpr* prev = taosArrayGetP(pQueryInfo->exprsInfo, i - 1);
|
||||
SSqlExpr* p = taosArrayGetP(pQueryInfo->exprsInfo, i);
|
||||
SSqlExpr* prev = taosArrayGetP(pQueryInfo->exprList, i - 1);
|
||||
SSqlExpr* p = taosArrayGetP(pQueryInfo->exprList, i);
|
||||
|
||||
p->offset = prev->offset + prev->resBytes;
|
||||
}
|
||||
|
@ -859,13 +821,13 @@ void tscFieldInfoUpdateOffsetForInterResult(SQueryInfo* pQueryInfo) {
|
|||
return;
|
||||
}
|
||||
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprsInfo, 0);
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
pExpr->offset = 0;
|
||||
|
||||
size_t numOfExprs = tscSqlExprNumOfExprs(pQueryInfo);
|
||||
for (int32_t i = 1; i < numOfExprs; ++i) {
|
||||
SSqlExpr* prev = taosArrayGetP(pQueryInfo->exprsInfo, i - 1);
|
||||
SSqlExpr* p = taosArrayGetP(pQueryInfo->exprsInfo, i);
|
||||
SSqlExpr* prev = taosArrayGetP(pQueryInfo->exprList, i - 1);
|
||||
SSqlExpr* p = taosArrayGetP(pQueryInfo->exprList, i);
|
||||
|
||||
p->offset = prev->offset + prev->resBytes;
|
||||
}
|
||||
|
@ -874,9 +836,18 @@ void tscFieldInfoUpdateOffsetForInterResult(SQueryInfo* pQueryInfo) {
|
|||
void tscFieldInfoCopy(SFieldInfo* dst, const SFieldInfo* src) {
|
||||
dst->numOfOutput = src->numOfOutput;
|
||||
|
||||
if (dst->pFields == NULL) {
|
||||
dst->pFields = taosArrayClone(src->pFields);
|
||||
} else {
|
||||
taosArrayCopy(dst->pFields, src->pFields);
|
||||
}
|
||||
|
||||
if (dst->pSupportInfo == NULL) {
|
||||
dst->pSupportInfo = taosArrayClone(src->pSupportInfo);
|
||||
} else {
|
||||
taosArrayCopy(dst->pSupportInfo, src->pSupportInfo);
|
||||
}
|
||||
}
|
||||
|
||||
TAOS_FIELD* tscFieldInfoGetField(SFieldInfo* pFieldInfo, int32_t index) {
|
||||
return taosArrayGet(pFieldInfo->pFields, index);
|
||||
|
@ -951,7 +922,6 @@ static SSqlExpr* doBuildSqlExpr(SQueryInfo* pQueryInfo, int16_t functionId, SCol
|
|||
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, pColIndex->tableIndex);
|
||||
|
||||
SSqlExpr* pExpr = calloc(1, sizeof(SSqlExpr));
|
||||
|
||||
pExpr->functionId = functionId;
|
||||
|
||||
// set the correct column index
|
||||
|
@ -982,20 +952,20 @@ static SSqlExpr* doBuildSqlExpr(SQueryInfo* pQueryInfo, int16_t functionId, SCol
|
|||
|
||||
SSqlExpr* tscSqlExprInsert(SQueryInfo* pQueryInfo, int32_t index, int16_t functionId, SColumnIndex* pColIndex, int16_t type,
|
||||
int16_t size, int16_t interSize, bool isTagCol) {
|
||||
int32_t num = taosArrayGetSize(pQueryInfo->exprsInfo);
|
||||
int32_t num = taosArrayGetSize(pQueryInfo->exprList);
|
||||
if (index == num) {
|
||||
return tscSqlExprAppend(pQueryInfo, functionId, pColIndex, type, size, interSize, isTagCol);
|
||||
}
|
||||
|
||||
SSqlExpr* pExpr = doBuildSqlExpr(pQueryInfo, functionId, pColIndex, type, size, interSize, isTagCol);
|
||||
taosArrayInsert(pQueryInfo->exprsInfo, index, &pExpr);
|
||||
taosArrayInsert(pQueryInfo->exprList, index, &pExpr);
|
||||
return pExpr;
|
||||
}
|
||||
|
||||
SSqlExpr* tscSqlExprAppend(SQueryInfo* pQueryInfo, int16_t functionId, SColumnIndex* pColIndex, int16_t type,
|
||||
int16_t size, int16_t interSize, bool isTagCol) {
|
||||
SSqlExpr* pExpr = doBuildSqlExpr(pQueryInfo, functionId, pColIndex, type, size, interSize, isTagCol);
|
||||
taosArrayPush(pQueryInfo->exprsInfo, &pExpr);
|
||||
taosArrayPush(pQueryInfo->exprList, &pExpr);
|
||||
return pExpr;
|
||||
}
|
||||
|
||||
|
@ -1019,7 +989,7 @@ SSqlExpr* tscSqlExprUpdate(SQueryInfo* pQueryInfo, int32_t index, int16_t functi
|
|||
}
|
||||
|
||||
int32_t tscSqlExprNumOfExprs(SQueryInfo* pQueryInfo) {
|
||||
return taosArrayGetSize(pQueryInfo->exprsInfo);
|
||||
return taosArrayGetSize(pQueryInfo->exprList);
|
||||
}
|
||||
|
||||
void addExprParams(SSqlExpr* pExpr, char* argument, int32_t type, int32_t bytes, int16_t tableIndex) {
|
||||
|
@ -1036,7 +1006,7 @@ void addExprParams(SSqlExpr* pExpr, char* argument, int32_t type, int32_t bytes,
|
|||
}
|
||||
|
||||
SSqlExpr* tscSqlExprGet(SQueryInfo* pQueryInfo, int32_t index) {
|
||||
return taosArrayGetP(pQueryInfo->exprsInfo, index);
|
||||
return taosArrayGetP(pQueryInfo->exprList, index);
|
||||
}
|
||||
|
||||
void* sqlExprDestroy(SSqlExpr* pExpr) {
|
||||
|
@ -1067,14 +1037,10 @@ void tscSqlExprInfoDestroy(SArray* pExprInfo) {
|
|||
taosArrayDestroy(pExprInfo);
|
||||
}
|
||||
|
||||
SArray* tscSqlExprCopy(const SArray* src, uint64_t uid, bool deepcopy) {
|
||||
if (src == NULL || taosArrayGetSize(src) == 0) {
|
||||
return taosArrayInit(1, POINTER_BYTES);
|
||||
}
|
||||
void tscSqlExprCopy(SArray* dst, const SArray* src, uint64_t uid, bool deepcopy) {
|
||||
assert(src != NULL && dst != NULL);
|
||||
|
||||
size_t size = taosArrayGetSize(src);
|
||||
SArray* dst = taosArrayInit(size, POINTER_BYTES);
|
||||
|
||||
for (int32_t i = 0; i < size; ++i) {
|
||||
SSqlExpr* pExpr = taosArrayGetP(src, i);
|
||||
|
||||
|
@ -1094,8 +1060,6 @@ SArray* tscSqlExprCopy(const SArray* src, uint64_t uid, bool deepcopy) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
SColumn* tscColumnListInsert(SArray* pColumnList, SColumnIndex* pColIndex) {
|
||||
|
@ -1193,9 +1157,7 @@ static void tscColumnDestroy(SColumn* pCol) {
|
|||
}
|
||||
|
||||
void tscColumnListCopy(SArray* dst, const SArray* src, int16_t tableIndex) {
|
||||
if (src == NULL) {
|
||||
return;
|
||||
}
|
||||
assert(src != NULL && dst != NULL);
|
||||
|
||||
size_t num = taosArrayGetSize(src);
|
||||
for (int32_t i = 0; i < num; ++i) {
|
||||
|
@ -1576,9 +1538,22 @@ STableMetaInfo* tscGetTableMetaInfoByUid(SQueryInfo* pQueryInfo, uint64_t uid, i
|
|||
return tscGetMetaInfo(pQueryInfo, k);
|
||||
}
|
||||
|
||||
void tscInitQueryInfo(SQueryInfo* pQueryInfo) {
|
||||
assert(pQueryInfo->fieldsInfo.pFields == NULL);
|
||||
pQueryInfo->fieldsInfo.pFields = taosArrayInit(4, sizeof(TAOS_FIELD));
|
||||
|
||||
assert(pQueryInfo->fieldsInfo.pSupportInfo == NULL);
|
||||
pQueryInfo->fieldsInfo.pSupportInfo = taosArrayInit(4, sizeof(SFieldSupInfo));
|
||||
|
||||
assert(pQueryInfo->exprList == NULL);
|
||||
pQueryInfo->exprList = taosArrayInit(4, POINTER_BYTES);
|
||||
pQueryInfo->colList = taosArrayInit(4, POINTER_BYTES);
|
||||
}
|
||||
|
||||
int32_t tscAddSubqueryInfo(SSqlCmd* pCmd) {
|
||||
assert(pCmd != NULL);
|
||||
|
||||
// todo refactor: remove this structure
|
||||
size_t s = pCmd->numOfClause + 1;
|
||||
char* tmp = realloc(pCmd->pQueryInfo, s * POINTER_BYTES);
|
||||
if (tmp == NULL) {
|
||||
|
@ -1588,12 +1563,7 @@ int32_t tscAddSubqueryInfo(SSqlCmd* pCmd) {
|
|||
pCmd->pQueryInfo = (SQueryInfo**)tmp;
|
||||
|
||||
SQueryInfo* pQueryInfo = calloc(1, sizeof(SQueryInfo));
|
||||
|
||||
// todo refactor to extract functions.
|
||||
pQueryInfo->fieldsInfo.pFields = taosArrayInit(4, sizeof(TAOS_FIELD));
|
||||
pQueryInfo->fieldsInfo.pSupportInfo = taosArrayInit(4, sizeof(SFieldSupInfo));
|
||||
|
||||
pQueryInfo->exprsInfo = taosArrayInit(4, POINTER_BYTES);
|
||||
tscInitQueryInfo(pQueryInfo);
|
||||
|
||||
pQueryInfo->msg = pCmd->payload; // pointer to the parent error message buffer
|
||||
|
||||
|
@ -1605,11 +1575,11 @@ static void freeQueryInfoImpl(SQueryInfo* pQueryInfo) {
|
|||
tscTagCondRelease(&pQueryInfo->tagCond);
|
||||
tscFieldInfoClear(&pQueryInfo->fieldsInfo);
|
||||
|
||||
tscSqlExprInfoDestroy(pQueryInfo->exprsInfo);
|
||||
memset(&pQueryInfo->exprsInfo, 0, sizeof(pQueryInfo->exprsInfo));
|
||||
tscSqlExprInfoDestroy(pQueryInfo->exprList);
|
||||
pQueryInfo->exprList = NULL;
|
||||
|
||||
tscColumnListDestroy(pQueryInfo->colList);
|
||||
memset(&pQueryInfo->colList, 0, sizeof(pQueryInfo->colList));
|
||||
pQueryInfo->colList = NULL;
|
||||
|
||||
if (pQueryInfo->groupbyExpr.columnInfo != NULL) {
|
||||
taosArrayDestroy(pQueryInfo->groupbyExpr.columnInfo);
|
||||
|
@ -1628,6 +1598,35 @@ void tscClearSubqueryInfo(SSqlCmd* pCmd) {
|
|||
}
|
||||
}
|
||||
|
||||
void doRemoveTableMetaInfo(SQueryInfo* pQueryInfo, int32_t index, bool removeFromCache) {
|
||||
if (index < 0 || index >= pQueryInfo->numOfTables) {
|
||||
return;
|
||||
}
|
||||
|
||||
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, index);
|
||||
|
||||
tscClearTableMetaInfo(pTableMetaInfo, removeFromCache);
|
||||
free(pTableMetaInfo);
|
||||
|
||||
int32_t after = pQueryInfo->numOfTables - index - 1;
|
||||
if (after > 0) {
|
||||
memmove(&pQueryInfo->pTableMetaInfo[index], &pQueryInfo->pTableMetaInfo[index + 1], after * POINTER_BYTES);
|
||||
}
|
||||
|
||||
pQueryInfo->numOfTables -= 1;
|
||||
}
|
||||
|
||||
void clearAllTableMetaInfo(SQueryInfo* pQueryInfo, const char* address, bool removeFromCache) {
|
||||
tscTrace("%p deref the table meta in cache, numOfTables:%d", address, pQueryInfo->numOfTables);
|
||||
|
||||
int32_t index = pQueryInfo->numOfTables;
|
||||
while (index >= 0) {
|
||||
doRemoveTableMetaInfo(pQueryInfo, --index, removeFromCache);
|
||||
}
|
||||
|
||||
tfree(pQueryInfo->pTableMetaInfo);
|
||||
}
|
||||
|
||||
void tscFreeQueryInfo(SSqlCmd* pCmd) {
|
||||
if (pCmd == NULL || pCmd->numOfClause == 0) {
|
||||
return;
|
||||
|
@ -1638,7 +1637,7 @@ void tscFreeQueryInfo(SSqlCmd* pCmd) {
|
|||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(pCmd, i);
|
||||
|
||||
freeQueryInfoImpl(pQueryInfo);
|
||||
tscClearAllTableMetaInfo(pQueryInfo, (const char*)addr, false);
|
||||
clearAllTableMetaInfo(pQueryInfo, (const char*)addr, false);
|
||||
tfree(pQueryInfo);
|
||||
}
|
||||
|
||||
|
@ -1689,35 +1688,6 @@ STableMetaInfo* tscAddEmptyMetaInfo(SQueryInfo* pQueryInfo) {
|
|||
return tscAddTableMetaInfo(pQueryInfo, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
void doRemoveTableMetaInfo(SQueryInfo* pQueryInfo, int32_t index, bool removeFromCache) {
|
||||
if (index < 0 || index >= pQueryInfo->numOfTables) {
|
||||
return;
|
||||
}
|
||||
|
||||
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, index);
|
||||
|
||||
tscClearTableMetaInfo(pTableMetaInfo, removeFromCache);
|
||||
free(pTableMetaInfo);
|
||||
|
||||
int32_t after = pQueryInfo->numOfTables - index - 1;
|
||||
if (after > 0) {
|
||||
memmove(&pQueryInfo->pTableMetaInfo[index], &pQueryInfo->pTableMetaInfo[index + 1], after * POINTER_BYTES);
|
||||
}
|
||||
|
||||
pQueryInfo->numOfTables -= 1;
|
||||
}
|
||||
|
||||
void tscClearAllTableMetaInfo(SQueryInfo* pQueryInfo, const char* address, bool removeFromCache) {
|
||||
tscTrace("%p deref the table meta in cache, numOfTables:%d", address, pQueryInfo->numOfTables);
|
||||
|
||||
int32_t index = pQueryInfo->numOfTables;
|
||||
while (index >= 0) {
|
||||
doRemoveTableMetaInfo(pQueryInfo, --index, removeFromCache);
|
||||
}
|
||||
|
||||
tfree(pQueryInfo->pTableMetaInfo);
|
||||
}
|
||||
|
||||
void tscClearTableMetaInfo(STableMetaInfo* pTableMetaInfo, bool removeFromCache) {
|
||||
if (pTableMetaInfo == NULL) {
|
||||
return;
|
||||
|
@ -1782,19 +1752,25 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, void (*fp)(), void
|
|||
SQueryInfo* pNewQueryInfo = tscGetQueryInfoDetail(pnCmd, 0);
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
|
||||
|
||||
memcpy(pNewQueryInfo, pQueryInfo, sizeof(SQueryInfo));
|
||||
|
||||
memset(&pNewQueryInfo->fieldsInfo, 0, sizeof(SFieldInfo));
|
||||
|
||||
pNewQueryInfo->command = pQueryInfo->command;
|
||||
pNewQueryInfo->slidingTimeUnit = pQueryInfo->slidingTimeUnit;
|
||||
pNewQueryInfo->intervalTime = pQueryInfo->intervalTime;
|
||||
pNewQueryInfo->slidingTime = pQueryInfo->slidingTime;
|
||||
pNewQueryInfo->type = pQueryInfo->type;
|
||||
pNewQueryInfo->window = pQueryInfo->window;
|
||||
pNewQueryInfo->limit = pQueryInfo->limit;
|
||||
pNewQueryInfo->slimit = pQueryInfo->slimit;
|
||||
pNewQueryInfo->order = pQueryInfo->order;
|
||||
pNewQueryInfo->clauseLimit = pQueryInfo->clauseLimit;
|
||||
pNewQueryInfo->pTableMetaInfo = NULL;
|
||||
pNewQueryInfo->defaultVal = NULL;
|
||||
pNewQueryInfo->numOfTables = 0;
|
||||
pNewQueryInfo->tsBuf = NULL;
|
||||
|
||||
pNewQueryInfo->colList = taosArrayInit(4, POINTER_BYTES);
|
||||
pNewQueryInfo->fieldsInfo.pFields = taosArrayInit(4, sizeof(TAOS_FIELD));
|
||||
pNewQueryInfo->fieldsInfo.pSupportInfo = taosArrayInit(4, sizeof(SFieldSupInfo));
|
||||
pNewQueryInfo->exprsInfo = taosArrayInit(4, POINTER_BYTES);
|
||||
pNewQueryInfo->groupbyExpr = pQueryInfo->groupbyExpr;
|
||||
if (pQueryInfo->groupbyExpr.columnInfo != NULL) {
|
||||
pNewQueryInfo->groupbyExpr.columnInfo = taosArrayClone(pQueryInfo->groupbyExpr.columnInfo);
|
||||
}
|
||||
|
||||
tscTagCondCopy(&pNewQueryInfo->tagCond, &pQueryInfo->tagCond);
|
||||
|
||||
|
@ -1820,7 +1796,7 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, void (*fp)(), void
|
|||
}
|
||||
|
||||
uint64_t uid = pTableMetaInfo->pTableMeta->uid;
|
||||
pNewQueryInfo->exprsInfo = tscSqlExprCopy(pQueryInfo->exprsInfo, uid, true);
|
||||
tscSqlExprCopy(pNewQueryInfo->exprList, pQueryInfo->exprList, uid, true);
|
||||
|
||||
int32_t numOfOutput = tscSqlExprNumOfExprs(pNewQueryInfo);
|
||||
|
||||
|
@ -1844,16 +1820,19 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, void (*fp)(), void
|
|||
// todo handle the agg arithmetic expression
|
||||
for(int32_t f = 0; f < pNewQueryInfo->fieldsInfo.numOfOutput; ++f) {
|
||||
TAOS_FIELD* field = tscFieldInfoGetField(&pNewQueryInfo->fieldsInfo, f);
|
||||
numOfExprs = tscSqlExprNumOfExprs(pNewQueryInfo);
|
||||
|
||||
for(int32_t k1 = 0; k1 < numOfExprs; ++k1) {
|
||||
SSqlExpr* pExpr1 = tscSqlExprGet(pNewQueryInfo, k1);
|
||||
if (strcmp(field->name, pExpr1->aliasName) == 0) {
|
||||
|
||||
if (strcmp(field->name, pExpr1->aliasName) == 0) { // eatablish link according to the result field name
|
||||
SFieldSupInfo* pInfo = tscFieldInfoGetSupp(&pNewQueryInfo->fieldsInfo, f);
|
||||
pInfo->pSqlExpr = pExpr1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tscFieldInfoUpdateOffsetForInterResult(pNewQueryInfo);
|
||||
tscFieldInfoUpdateOffset(pNewQueryInfo);
|
||||
}
|
||||
|
||||
pNew->fp = fp;
|
||||
|
@ -1885,7 +1864,7 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, void (*fp)(), void
|
|||
size_t size = taosArrayGetSize(pNewQueryInfo->colList);
|
||||
|
||||
tscTrace(
|
||||
"%p new subquery: %p, tableIndex:%d, vnodeIdx:%d, type:%d, exprInfo:%d, colList:%d,"
|
||||
"%p new subquery:%p, tableIndex:%d, vgroupIndex:%d, type:%d, exprInfo:%d, colList:%d,"
|
||||
"fieldInfo:%d, name:%s, qrang:%" PRId64 " - %" PRId64 " order:%d, limit:%" PRId64,
|
||||
pSql, pNew, tableIndex, pTableMetaInfo->vgroupIndex, pNewQueryInfo->type, tscSqlExprNumOfExprs(pNewQueryInfo),
|
||||
size, pNewQueryInfo->fieldsInfo.numOfOutput, pFinalInfo->name, pNewQueryInfo->window.skey,
|
||||
|
@ -1899,14 +1878,22 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, void (*fp)(), void
|
|||
return pNew;
|
||||
}
|
||||
|
||||
/**
|
||||
* To decide if current is a two-stage super table query, join query, or insert. And invoke different
|
||||
* procedure accordingly
|
||||
* @param pSql
|
||||
*/
|
||||
void tscDoQuery(SSqlObj* pSql) {
|
||||
SSqlCmd* pCmd = &pSql->cmd;
|
||||
SSqlRes* pRes = &pSql->res;
|
||||
|
||||
pSql->res.code = TSDB_CODE_SUCCESS;
|
||||
pRes->code = TSDB_CODE_SUCCESS;
|
||||
|
||||
if (pCmd->command > TSDB_SQL_LOCAL) {
|
||||
tscProcessLocalCmd(pSql);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
if (pCmd->command == TSDB_SQL_SELECT) {
|
||||
tscAddIntoSqlList(pSql);
|
||||
}
|
||||
|
@ -1914,9 +1901,31 @@ void tscDoQuery(SSqlObj* pSql) {
|
|||
if (pCmd->dataSourceType == DATA_FROM_DATA_FILE) {
|
||||
tscProcessMultiVnodesInsertFromFile(pSql);
|
||||
} else {
|
||||
// pSql may be released in this function if it is a async insertion.
|
||||
tscProcessSql(pSql);
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
|
||||
uint16_t type = pQueryInfo->type;
|
||||
|
||||
if (pSql->fp == (void(*)())tscHandleMultivnodeInsert) { // multi-vnodes insertion
|
||||
tscHandleMultivnodeInsert(pSql);
|
||||
return;
|
||||
}
|
||||
|
||||
if (QUERY_IS_JOIN_QUERY(type)) {
|
||||
if ((pQueryInfo->type & TSDB_QUERY_TYPE_SUBQUERY) == 0) {
|
||||
tscHandleMasterJoinQuery(pSql);
|
||||
return;
|
||||
} else {
|
||||
// for first stage sub query, iterate all vnodes to get all timestamp
|
||||
if ((pQueryInfo->type & TSDB_QUERY_TYPE_JOIN_SEC_STAGE) != TSDB_QUERY_TYPE_JOIN_SEC_STAGE) {
|
||||
// doProcessSql(pSql);
|
||||
assert(0);
|
||||
}
|
||||
}
|
||||
} else if (tscIsTwoStageSTableQuery(pQueryInfo, 0)) { // super table query
|
||||
tscHandleMasterSTableQuery(pSql);
|
||||
return;
|
||||
}
|
||||
|
||||
tscProcessSql(pSql);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2095,7 +2104,7 @@ void tscTryQueryNextClause(SSqlObj* pSql, void (*queryFp)()) {
|
|||
|
||||
//backup the total number of result first
|
||||
int64_t num = pRes->numOfTotal + pRes->numOfTotalInCurrentClause;
|
||||
tscFreeResData(pSql);
|
||||
tscFreeSqlResult(pSql);
|
||||
|
||||
pRes->numOfTotal = num;
|
||||
|
||||
|
@ -2115,10 +2124,22 @@ void tscTryQueryNextClause(SSqlObj* pSql, void (*queryFp)()) {
|
|||
}
|
||||
}
|
||||
|
||||
char* tscGetResultColumnChr(SSqlRes* pRes, SQueryInfo* pQueryInfo, int32_t column) {
|
||||
char* tscGetResultColumnChr(SSqlRes* pRes, SQueryInfo* pQueryInfo, int32_t column, int16_t bytes) {
|
||||
SFieldInfo* pFieldInfo = &pQueryInfo->fieldsInfo;
|
||||
SFieldSupInfo* pInfo = tscFieldInfoGetSupp(pFieldInfo, column);
|
||||
|
||||
return ((char*) pRes->data) + pInfo->pSqlExpr->offset * pRes->numOfRows;
|
||||
int32_t type = pInfo->pSqlExpr->resType;
|
||||
char* pData = ((char*) pRes->data) + pInfo->pSqlExpr->offset * pRes->numOfRows + bytes * pRes->row;
|
||||
|
||||
if (type == TSDB_DATA_TYPE_NCHAR || type == TSDB_DATA_TYPE_BINARY) {
|
||||
int32_t realLen = varDataLen(pData);
|
||||
if (realLen < pInfo->pSqlExpr->resBytes - VARSTR_HEADER_SIZE) { // todo refactor
|
||||
*(char*) (pData + realLen + sizeof(int16_t)) = 0;
|
||||
}
|
||||
|
||||
return pData + VARSTR_HEADER_SIZE; // head is the length of binary/nchar data
|
||||
} else {
|
||||
return pData;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,20 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define STR_TO_VARSTR(x, str) do {VarDataLenT __len = strlen(str); \
|
||||
*(VarDataLenT*)(x) = __len; \
|
||||
strncpy((char*)(x) + VARSTR_HEADER_SIZE, (str), __len);} while(0);
|
||||
|
||||
#define STR_WITH_MAXSIZE_TO_VARSTR(x, str, _maxs) do {\
|
||||
char* _e = stpncpy((char*)(x) + VARSTR_HEADER_SIZE, (str), (_maxs));\
|
||||
*(VarDataLenT*)(x) = _e - (x);\
|
||||
} while(0)
|
||||
|
||||
#define STR_WITH_SIZE_TO_VARSTR(x, str, _size) do {\
|
||||
*(VarDataLenT*)(x) = (_size); \
|
||||
strncpy((char*)(x) + VARSTR_HEADER_SIZE, (str), (_size));\
|
||||
} while(0);
|
||||
|
||||
// ----------------- TSDB COLUMN DEFINITION
|
||||
typedef struct {
|
||||
int8_t type; // Column type
|
||||
|
@ -182,7 +196,7 @@ void tdInitDataCols(SDataCols *pCols, STSchema *pSchema);
|
|||
SDataCols *tdDupDataCols(SDataCols *pCols, bool keepData);
|
||||
void tdFreeDataCols(SDataCols *pCols);
|
||||
void tdAppendDataRowToDataCol(SDataRow row, SDataCols *pCols);
|
||||
void tdPopDataColsPoints(SDataCols *pCols, int pointsToPop);
|
||||
void tdPopDataColsPoints(SDataCols *pCols, int pointsToPop); //!!!!
|
||||
int tdMergeDataCols(SDataCols *target, SDataCols *src, int rowsToMerge);
|
||||
void tdMergeTwoDataCols(SDataCols *target, SDataCols *src1, int *iter1, SDataCols *src2, int *iter2, int tRows);
|
||||
|
||||
|
|
|
@ -172,28 +172,9 @@ int tdAppendColVal(SDataRow row, void *value, int8_t type, int32_t bytes, int32_
|
|||
switch (type) {
|
||||
case TSDB_DATA_TYPE_BINARY:
|
||||
case TSDB_DATA_TYPE_NCHAR:
|
||||
// set offset
|
||||
*(VarDataOffsetT *)POINTER_DRIFT(row, toffset) = dataRowLen(row);
|
||||
|
||||
// set length
|
||||
VarDataLenT slen = 0;
|
||||
if (isNull(value, type)) {
|
||||
slen = (type == TSDB_DATA_TYPE_BINARY) ? sizeof(int8_t) : sizeof(int32_t);
|
||||
} else {
|
||||
if (type == TSDB_DATA_TYPE_BINARY) {
|
||||
slen = strnlen((char *)value, bytes);
|
||||
} else {
|
||||
slen = wcsnlen((wchar_t *)value, (bytes) / TSDB_NCHAR_SIZE) * TSDB_NCHAR_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
ASSERT(slen <= bytes);
|
||||
*(VarDataLenT *)ptr = slen;
|
||||
ptr = POINTER_DRIFT(ptr, sizeof(VarDataLenT));
|
||||
|
||||
memcpy((void *)ptr, value, slen);
|
||||
dataRowLen(row) += (sizeof(int16_t) + slen);
|
||||
|
||||
memcpy(ptr, value, varDataTLen(value));
|
||||
dataRowLen(row) += varDataTLen(value);
|
||||
break;
|
||||
default:
|
||||
memcpy(POINTER_DRIFT(row, toffset), value, TYPE_BYTES[type]);
|
||||
|
|
|
@ -25,13 +25,10 @@ __attribute__((unused)) static FORCE_INLINE size_t copy(char* dst, const char* s
|
|||
}
|
||||
|
||||
void extractTableName(const char* tableId, char* name) {
|
||||
size_t offset = strcspn(tableId, &TS_PATH_DELIMITER[0]);
|
||||
offset = strcspn(&tableId[offset], &TS_PATH_DELIMITER[0]);
|
||||
size_t s1 = strcspn(tableId, &TS_PATH_DELIMITER[0]);
|
||||
size_t s2 = strcspn(&tableId[s1 + 1], &TS_PATH_DELIMITER[0]);
|
||||
|
||||
strncpy(name, &tableId[offset], TSDB_TABLE_NAME_LEN);
|
||||
|
||||
// char* r = skipSegments(tableId, TS_PATH_DELIMITER[0], 2);
|
||||
// return copy(name, r, TS_PATH_DELIMITER[0]);
|
||||
strncpy(name, &tableId[s1 + s2 + 2], TSDB_TABLE_NAME_LEN);
|
||||
}
|
||||
|
||||
char* extractDBName(const char* tableId, char* name) {
|
||||
|
|
|
@ -198,7 +198,7 @@ void assignVal(char *val, const char *src, int32_t len, int32_t type) {
|
|||
break;
|
||||
};
|
||||
case TSDB_DATA_TYPE_BINARY: {
|
||||
strncpy(val, src, len);
|
||||
varDataCopy(val, src);
|
||||
break;
|
||||
};
|
||||
case TSDB_DATA_TYPE_NCHAR: {
|
||||
|
|
|
@ -228,7 +228,7 @@ static void dnodeHandleIdleWorker(SWriteWorker *pWorker) {
|
|||
int32_t num = taosGetQueueNumber(pWorker->qset);
|
||||
|
||||
if (num > 0) {
|
||||
usleep(30000);
|
||||
usleep(30);
|
||||
sched_yield();
|
||||
} else {
|
||||
taosFreeQall(pWorker->qall);
|
||||
|
|
|
@ -23,12 +23,12 @@ typedef void* qinfo_t;
|
|||
|
||||
/**
|
||||
* create the qinfo object according to QueryTableMsg
|
||||
* @param pVnode
|
||||
* @param tsdb
|
||||
* @param pQueryTableMsg
|
||||
* @param qinfo
|
||||
* @return
|
||||
*/
|
||||
int32_t qCreateQueryInfo(void* pVnode, SQueryTableMsg* pQueryTableMsg, qinfo_t* qinfo);
|
||||
int32_t qCreateQueryInfo(void* tsdb, int32_t vgId, SQueryTableMsg* pQueryTableMsg, qinfo_t* qinfo);
|
||||
|
||||
/**
|
||||
* Destroy QInfo object
|
||||
|
|
|
@ -35,12 +35,15 @@ extern "C" {
|
|||
// ----------------- For variable data types such as TSDB_DATA_TYPE_BINARY and TSDB_DATA_TYPE_NCHAR
|
||||
typedef int32_t VarDataOffsetT;
|
||||
typedef int16_t VarDataLenT;
|
||||
|
||||
#define varDataLen(v) ((VarDataLenT *)(v))[0]
|
||||
#define varDataTLen(v) (sizeof(VarDataLenT) + varDataLen(v))
|
||||
#define varDataVal(v) ((void *)((char *)v + sizeof(VarDataLenT)))
|
||||
#define varDataCopy(dst, v) memcpy((dst), (void*) (v), varDataTLen(v))
|
||||
|
||||
// this data type is internally used only in 'in' query to hold the values
|
||||
#define TSDB_DATA_TYPE_ARRAY (TSDB_DATA_TYPE_NCHAR + 1)
|
||||
#define VARSTR_HEADER_SIZE sizeof(VarDataLenT)
|
||||
|
||||
// Bytes for each type.
|
||||
extern const int32_t TYPE_BYTES[11];
|
||||
|
@ -209,7 +212,7 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size);
|
|||
#define TSDB_SHELL_VNODE_BITS 24
|
||||
#define TSDB_SHELL_SID_MASK 0xFF
|
||||
#define TSDB_HTTP_TOKEN_LEN 20
|
||||
#define TSDB_SHOW_SQL_LEN 32
|
||||
#define TSDB_SHOW_SQL_LEN 512
|
||||
|
||||
#define TSDB_METER_STATE_OFFLINE 0
|
||||
#define TSDB_METER_STATE_ONLLINE 1
|
||||
|
@ -290,27 +293,30 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size);
|
|||
|
||||
#define TSDB_MAX_RPC_THREADS 5
|
||||
|
||||
#define TSDB_QUERY_TYPE_NON_TYPE 0x00U // none type
|
||||
#define TSDB_QUERY_TYPE_FREE_RESOURCE 0x01U // free qhandle at vnode
|
||||
#define TSDB_QUERY_TYPE_NON_TYPE 0x00u // none type
|
||||
#define TSDB_QUERY_TYPE_FREE_RESOURCE 0x01u // free qhandle at vnode
|
||||
|
||||
/*
|
||||
* 1. ordinary sub query for select * from super_table
|
||||
* 2. all sqlobj generated by createSubqueryObj with this flag
|
||||
*/
|
||||
#define TSDB_QUERY_TYPE_SUBQUERY 0x02U
|
||||
#define TSDB_QUERY_TYPE_STABLE_SUBQUERY 0x04U // two-stage subquery for super table
|
||||
#define TSDB_QUERY_TYPE_SUBQUERY 0x02u
|
||||
#define TSDB_QUERY_TYPE_STABLE_SUBQUERY 0x04u // two-stage subquery for super table
|
||||
|
||||
#define TSDB_QUERY_TYPE_TABLE_QUERY 0x08U // query ordinary table; below only apply to client side
|
||||
#define TSDB_QUERY_TYPE_STABLE_QUERY 0x10U // query on super table
|
||||
#define TSDB_QUERY_TYPE_JOIN_QUERY 0x20U // join query
|
||||
#define TSDB_QUERY_TYPE_PROJECTION_QUERY 0x40U // select *,columns... query
|
||||
#define TSDB_QUERY_TYPE_JOIN_SEC_STAGE 0x80U // join sub query at the second stage
|
||||
#define TSDB_QUERY_TYPE_TABLE_QUERY 0x08u // query ordinary table; below only apply to client side
|
||||
#define TSDB_QUERY_TYPE_STABLE_QUERY 0x10u // query on super table
|
||||
#define TSDB_QUERY_TYPE_JOIN_QUERY 0x20u // join query
|
||||
#define TSDB_QUERY_TYPE_PROJECTION_QUERY 0x40u // select *,columns... query
|
||||
#define TSDB_QUERY_TYPE_JOIN_SEC_STAGE 0x80u // join sub query at the second stage
|
||||
|
||||
#define TSDB_QUERY_TYPE_INSERT 0x100U // insert type
|
||||
#define TSDB_QUERY_TYPE_IMPORT 0x200U // import data
|
||||
#define TSDB_QUERY_TYPE_TAG_FILTER_QUERY 0x400u
|
||||
#define TSDB_QUERY_TYPE_INSERT 0x100u // insert type
|
||||
#define TSDB_QUERY_TYPE_IMPORT 0x200u // import data
|
||||
#define TSDB_QUERY_TYPE_MULTITABLE_QUERY 0x800u
|
||||
|
||||
#define TSDB_QUERY_HAS_TYPE(x, _type) (((x) & (_type)) != 0)
|
||||
#define TSDB_QUERY_SET_TYPE(x, _type) ((x) |= (_type))
|
||||
#define TSDB_QUERY_CLEAR_TYPE(x, _type) ((x) &= (~_type))
|
||||
#define TSDB_QUERY_RESET_TYPE(x) ((x) = TSDB_QUERY_TYPE_NON_TYPE)
|
||||
|
||||
#define TSDB_ORDER_ASC 1
|
||||
|
|
|
@ -380,13 +380,13 @@ typedef struct SSqlFuncMsg {
|
|||
} arg[3];
|
||||
} SSqlFuncMsg;
|
||||
|
||||
typedef struct SArithExprInfo {
|
||||
typedef struct SExprInfo {
|
||||
SSqlFuncMsg base;
|
||||
struct tExprNode* pExpr;
|
||||
int16_t bytes;
|
||||
int16_t type;
|
||||
int16_t interResBytes;
|
||||
} SArithExprInfo;
|
||||
} SExprInfo;
|
||||
|
||||
typedef struct SColumnFilterInfo {
|
||||
int16_t lowerRelOptr;
|
||||
|
@ -422,8 +422,8 @@ typedef struct SColumnInfo {
|
|||
} SColumnInfo;
|
||||
|
||||
typedef struct STableIdInfo {
|
||||
int32_t sid;
|
||||
int64_t uid;
|
||||
int32_t tid;
|
||||
TSKEY key; // last accessed ts, for subscription
|
||||
} STableIdInfo;
|
||||
|
||||
|
@ -459,9 +459,6 @@ typedef struct {
|
|||
int16_t tagNameRelType; // relation of tag criteria and tbname criteria
|
||||
int16_t interpoType; // interpolate type
|
||||
uint64_t defaultVal; // default value array list
|
||||
|
||||
// int32_t colNameLen;
|
||||
// int64_t colNameList;
|
||||
int32_t tsOffset; // offset value in current msg body, NOTE: ts list is compressed
|
||||
int32_t tsLen; // total length of ts comp block
|
||||
int32_t tsNumOfBlocks; // ts comp block numbers
|
||||
|
@ -624,8 +621,8 @@ typedef struct {
|
|||
} SCMMultiTableInfoMsg;
|
||||
|
||||
typedef struct SCMSTableVgroupMsg {
|
||||
char tableId[TSDB_TABLE_ID_LEN];
|
||||
} SCMSTableVgroupMsg;
|
||||
int32_t numOfTables;
|
||||
} SCMSTableVgroupMsg, SCMSTableVgroupRspMsg;
|
||||
|
||||
typedef struct {
|
||||
int32_t vgId;
|
||||
|
@ -636,57 +633,14 @@ typedef struct {
|
|||
typedef struct {
|
||||
int32_t numOfVgroups;
|
||||
SCMVgroupInfo vgroups[];
|
||||
} SCMSTableVgroupRspMsg;
|
||||
} SVgroupsInfo;
|
||||
|
||||
typedef struct {
|
||||
int16_t elemLen;
|
||||
|
||||
char tableId[TSDB_TABLE_ID_LEN + 1];
|
||||
int16_t orderIndex;
|
||||
int16_t orderType; // used in group by xx order by xxx
|
||||
|
||||
int16_t rel; // denotes the relation between condition and table list
|
||||
|
||||
int32_t tableCond; // offset value of table name condition
|
||||
int32_t tableCondLen;
|
||||
|
||||
int32_t cond; // offset of column query condition
|
||||
int32_t condLen;
|
||||
|
||||
int16_t tagCols[TSDB_MAX_TAGS + 1]; // required tag columns, plus one is for table name
|
||||
int16_t numOfTags; // required number of tags
|
||||
|
||||
int16_t numOfGroupCols; // num of group by columns
|
||||
int32_t groupbyTagColumnList;
|
||||
} SSuperTableMetaElemMsg;
|
||||
|
||||
typedef struct {
|
||||
int32_t numOfTables;
|
||||
int32_t join;
|
||||
int32_t joinCondLen; // for join condition
|
||||
int32_t metaElem[TSDB_MAX_JOIN_TABLE_NUM];
|
||||
} SSuperTableMetaMsg;
|
||||
|
||||
typedef struct {
|
||||
int32_t nodeId;
|
||||
uint32_t nodeIp;
|
||||
uint16_t nodePort;
|
||||
} SVnodeDesc;
|
||||
|
||||
typedef struct {
|
||||
SVnodeDesc vpeerDesc[TSDB_MAX_REPLICA_NUM];
|
||||
int16_t index; // used locally
|
||||
int32_t vgId;
|
||||
int32_t numOfSids;
|
||||
int32_t pSidExtInfoList[]; // offset value of STableIdInfo
|
||||
} SVnodeSidList;
|
||||
|
||||
typedef struct {
|
||||
int32_t numOfTables;
|
||||
int32_t numOfVnodes;
|
||||
uint16_t tagLen; /* tag value length */
|
||||
int32_t list[]; /* offset of SVnodeSidList, compared to the SSuperTableMeta struct */
|
||||
} SSuperTableMeta;
|
||||
//typedef struct {
|
||||
// int32_t numOfTables;
|
||||
// int32_t join;
|
||||
// int32_t joinCondLen; // for join condition
|
||||
// int32_t metaElem[TSDB_MAX_JOIN_TABLE_NUM];
|
||||
//} SSuperTableMetaMsg;
|
||||
|
||||
typedef struct STableMetaMsg {
|
||||
int32_t contLen;
|
||||
|
|
|
@ -101,8 +101,8 @@ int tsdbTableSetName(STableCfg *config, char *name, bool dup);
|
|||
int tsdbTableSetSName(STableCfg *config, char *sname, bool dup);
|
||||
void tsdbClearTableCfg(STableCfg *config);
|
||||
|
||||
int32_t tsdbGetTableTagVal(TsdbRepoT *repo, STableId id, int32_t col, int16_t *type, int16_t *bytes, char **val);
|
||||
int32_t tsdbTableGetName(TsdbRepoT *repo, STableId id, char** name);
|
||||
int32_t tsdbGetTableTagVal(TsdbRepoT *repo, STableId* id, int32_t colId, int16_t *type, int16_t *bytes, char **val);
|
||||
int32_t tsdbGetTableName(TsdbRepoT *repo, STableId* id, char** name);
|
||||
|
||||
int tsdbCreateTable(TsdbRepoT *repo, STableCfg *pCfg);
|
||||
int tsdbDropTable(TsdbRepoT *pRepo, STableId tableId);
|
||||
|
@ -142,34 +142,20 @@ int32_t tsdbInsertData(TsdbRepoT *pRepo, SSubmitMsg *pMsg);
|
|||
|
||||
typedef void *TsdbQueryHandleT; // Use void to hide implementation details
|
||||
|
||||
typedef struct STableGroupList { // qualified table object list in group
|
||||
SArray *pGroupList;
|
||||
int32_t numOfTables;
|
||||
} STableGroupList;
|
||||
|
||||
// query condition to build vnode iterator
|
||||
typedef struct STsdbQueryCond {
|
||||
STimeWindow twindow;
|
||||
int32_t order; // desc/asc order to iterate the data block
|
||||
int32_t order; // desc|asc order to iterate the data block
|
||||
int32_t numOfCols;
|
||||
SColumnInfo *colList;
|
||||
} STsdbQueryCond;
|
||||
|
||||
typedef struct SBlockInfo {
|
||||
STimeWindow window;
|
||||
|
||||
int32_t numOfRows;
|
||||
int32_t numOfCols;
|
||||
|
||||
STableId tableId;
|
||||
} SBlockInfo;
|
||||
|
||||
typedef struct SDataBlockInfo {
|
||||
STimeWindow window;
|
||||
int32_t rows;
|
||||
int32_t numOfCols;
|
||||
int64_t uid;
|
||||
int32_t sid;
|
||||
int32_t tid;
|
||||
} SDataBlockInfo;
|
||||
|
||||
typedef struct {
|
||||
|
@ -192,14 +178,29 @@ typedef void *TsdbPosT;
|
|||
|
||||
/**
|
||||
* Get the data block iterator, starting from position according to the query condition
|
||||
* @param pCond query condition, only includes the filter on primary time stamp
|
||||
* @param pTableList table sid list
|
||||
*
|
||||
* @param tsdb tsdb handle
|
||||
* @param pCond query condition, including time window, result set order, and basic required columns for each block
|
||||
* @param groupInfo tableId list in the form of set, seperated into different groups according to group by condition
|
||||
* @return
|
||||
*/
|
||||
TsdbQueryHandleT *tsdbQueryTables(TsdbRepoT *tsdb, STsdbQueryCond *pCond, STableGroupInfo *groupInfo);
|
||||
|
||||
/**
|
||||
* move to next block
|
||||
* Get the last row of the given query time window for all the tables in STableGroupInfo object.
|
||||
* Note that only one data block with only row will be returned while invoking retrieve data block function for
|
||||
* all tables in this group.
|
||||
*
|
||||
* @param tsdb tsdb handle
|
||||
* @param pCond query condition, including time window, result set order, and basic required columns for each block
|
||||
* @param groupInfo tableId list.
|
||||
* @return
|
||||
*/
|
||||
TsdbQueryHandleT tsdbQueryLastRow(TsdbRepoT *tsdb, STsdbQueryCond *pCond, STableGroupInfo *groupInfo);
|
||||
|
||||
/**
|
||||
* move to next block if exists
|
||||
*
|
||||
* @param pQueryHandle
|
||||
* @return
|
||||
*/
|
||||
|
@ -226,26 +227,16 @@ SDataBlockInfo tsdbRetrieveDataBlockInfo(TsdbQueryHandleT *pQueryHandle);
|
|||
int32_t tsdbRetrieveDataBlockStatisInfo(TsdbQueryHandleT *pQueryHandle, SDataStatis **pBlockStatis);
|
||||
|
||||
/**
|
||||
*
|
||||
* The query condition with primary timestamp is passed to iterator during its constructor function,
|
||||
* the returned data block must be satisfied with the time window condition in any cases,
|
||||
* which means the SData data block is not actually the completed disk data blocks.
|
||||
*
|
||||
* @param pQueryHandle
|
||||
* @param pQueryHandle query handle
|
||||
* @param pColumnIdList required data columns id list
|
||||
* @return
|
||||
*/
|
||||
SArray *tsdbRetrieveDataBlock(TsdbQueryHandleT *pQueryHandle, SArray *pIdList);
|
||||
|
||||
/**
|
||||
* todo remove the parameter of position, and order type
|
||||
*
|
||||
* Reset to the start(end) position of current query, from which the iterator starts.
|
||||
*
|
||||
* @param pQueryHandle
|
||||
* @param position set the iterator traverses position
|
||||
* @param order ascending order or descending order
|
||||
* @return
|
||||
*/
|
||||
int32_t tsdbResetQuery(TsdbQueryHandleT *pQueryHandle, STimeWindow *window, TsdbPosT position, int16_t order);
|
||||
SArray *tsdbRetrieveDataBlock(TsdbQueryHandleT *pQueryHandle, SArray *pColumnIdList);
|
||||
|
||||
/**
|
||||
* todo remove this function later
|
||||
|
@ -282,20 +273,19 @@ SArray *tsdbGetTableList(TsdbQueryHandleT *pQueryHandle);
|
|||
* Get the qualified table id for a super table according to the tag query expression.
|
||||
* @param stableid. super table sid
|
||||
* @param pTagCond. tag query condition
|
||||
*
|
||||
*/
|
||||
int32_t tsdbQueryByTagsCond(
|
||||
TsdbRepoT *tsdb,
|
||||
int64_t uid,
|
||||
const char *pTagCond,
|
||||
size_t len,
|
||||
int16_t tagNameRelType,
|
||||
const char* tbnameCond,
|
||||
STableGroupInfo *pGroupList,
|
||||
SColIndex *pColIndex,
|
||||
int32_t numOfCols
|
||||
);
|
||||
int32_t tsdbQuerySTableByTagCond(TsdbRepoT *tsdb, int64_t uid, const char *pTagCond, size_t len,
|
||||
int16_t tagNameRelType, const char* tbnameCond, STableGroupInfo *pGroupList, SColIndex *pColIndex, int32_t numOfCols);
|
||||
|
||||
|
||||
/**
|
||||
* create the table group result including only one table, used to handle the normal table query
|
||||
*
|
||||
* @param tsdb tsdbHandle
|
||||
* @param uid table uid
|
||||
* @param pGroupInfo the generated result
|
||||
* @return
|
||||
*/
|
||||
int32_t tsdbGetOneTableGroup(TsdbRepoT *tsdb, int64_t uid, STableGroupInfo *pGroupInfo);
|
||||
|
||||
/**
|
||||
|
|
|
@ -22,7 +22,7 @@ extern "C" {
|
|||
|
||||
typedef enum _VN_STATUS {
|
||||
TAOS_VN_STATUS_INIT,
|
||||
TAOS_VN_STATUS_CREATING,
|
||||
TAOS_VN_STATUS_UPDATING,
|
||||
TAOS_VN_STATUS_READY,
|
||||
TAOS_VN_STATUS_CLOSING,
|
||||
TAOS_VN_STATUS_DELETING,
|
||||
|
|
|
@ -66,6 +66,7 @@ typedef struct SMnodeObj {
|
|||
SDnodeObj *pDnode;
|
||||
} SMnodeObj;
|
||||
|
||||
// todo use dynamic length string
|
||||
typedef struct {
|
||||
char tableId[TSDB_TABLE_ID_LEN + 1];
|
||||
int8_t type;
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "ttime.h"
|
||||
#include "tname.h"
|
||||
#include "tbalance.h"
|
||||
#include "tdataformat.h"
|
||||
#include "mgmtDef.h"
|
||||
#include "mgmtLog.h"
|
||||
#include "mgmtAcct.h"
|
||||
|
@ -431,7 +432,7 @@ static int32_t mgmtGetDbMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn)
|
|||
SUserObj *pUser = mgmtGetUserFromConn(pConn);
|
||||
if (pUser == NULL) return 0;
|
||||
|
||||
pShow->bytes[cols] = TSDB_DB_NAME_LEN;
|
||||
pShow->bytes[cols] = TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_BINARY;
|
||||
strcpy(pSchema[cols].name, "name");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
|
@ -439,7 +440,7 @@ static int32_t mgmtGetDbMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn)
|
|||
|
||||
pShow->bytes[cols] = 8;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_TIMESTAMP;
|
||||
strcpy(pSchema[cols].name, "create time");
|
||||
strcpy(pSchema[cols].name, "created_time");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
cols++;
|
||||
|
||||
|
@ -586,7 +587,9 @@ static int32_t mgmtRetrieveDbs(SShowObj *pShow, char *data, int32_t rows, void *
|
|||
cols = 0;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
strcpy(pWrite, mgmtGetDbStr(pDb->name));
|
||||
|
||||
char* name = mgmtGetDbStr(pDb->name);
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, name, TSDB_DB_NAME_LEN);
|
||||
cols++;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
|
@ -622,7 +625,10 @@ static int32_t mgmtRetrieveDbs(SShowObj *pShow, char *data, int32_t rows, void *
|
|||
#endif
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
sprintf(pWrite, "%d,%d,%d", pDb->cfg.daysToKeep1, pDb->cfg.daysToKeep2, pDb->cfg.daysToKeep);
|
||||
|
||||
char tmp[128] = {0};
|
||||
size_t n = sprintf(tmp, "%d,%d,%d", pDb->cfg.daysToKeep1, pDb->cfg.daysToKeep2, pDb->cfg.daysToKeep);
|
||||
STR_WITH_SIZE_TO_VARSTR(pWrite, tmp, n);
|
||||
cols++;
|
||||
|
||||
#ifndef __CLOUD_VERSION__
|
||||
|
@ -670,7 +676,11 @@ static int32_t mgmtRetrieveDbs(SShowObj *pShow, char *data, int32_t rows, void *
|
|||
cols++;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
strcpy(pWrite, pDb->status != TSDB_DB_STATUS_READY ? "dropping" : "ready");
|
||||
if (pDb->status == TSDB_DB_STATUS_READY) {
|
||||
STR_WITH_SIZE_TO_VARSTR(pWrite, "ready", 5);
|
||||
} else {
|
||||
STR_WITH_SIZE_TO_VARSTR(pWrite, "dropping", 8);
|
||||
}
|
||||
cols++;
|
||||
|
||||
numOfRows++;
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "tsocket.h"
|
||||
#include "tbalance.h"
|
||||
#include "tsync.h"
|
||||
#include "tdataformat.h"
|
||||
#include "dnode.h"
|
||||
#include "mgmtDef.h"
|
||||
#include "mgmtLog.h"
|
||||
|
@ -492,23 +493,23 @@ static int32_t mgmtGetDnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pCo
|
|||
|
||||
pShow->bytes[cols] = 40;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_BINARY;
|
||||
strcpy(pSchema[cols].name, "end point");
|
||||
strcpy(pSchema[cols].name, "end_point");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
cols++;
|
||||
|
||||
pShow->bytes[cols] = 2;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_SMALLINT;
|
||||
strcpy(pSchema[cols].name, "open vnodes");
|
||||
strcpy(pSchema[cols].name, "open_vnodes");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
cols++;
|
||||
|
||||
pShow->bytes[cols] = 2;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_SMALLINT;
|
||||
strcpy(pSchema[cols].name, "total vnodes");
|
||||
strcpy(pSchema[cols].name, "total_vnodes");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
cols++;
|
||||
|
||||
pShow->bytes[cols] = 10;
|
||||
pShow->bytes[cols] = 12;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_BINARY;
|
||||
strcpy(pSchema[cols].name, "status");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
|
@ -516,7 +517,7 @@ static int32_t mgmtGetDnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pCo
|
|||
|
||||
pShow->bytes[cols] = 8;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_TIMESTAMP;
|
||||
strcpy(pSchema[cols].name, "create time");
|
||||
strcpy(pSchema[cols].name, "create_time");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
cols++;
|
||||
|
||||
|
@ -554,7 +555,7 @@ static int32_t mgmtRetrieveDnodes(SShowObj *pShow, char *data, int32_t rows, voi
|
|||
cols++;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
strncpy(pWrite, pDnode->dnodeEp, pShow->bytes[cols]-1);
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pDnode->dnodeEp, pShow->bytes[cols] - VARSTR_HEADER_SIZE);
|
||||
cols++;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
|
@ -566,7 +567,9 @@ static int32_t mgmtRetrieveDnodes(SShowObj *pShow, char *data, int32_t rows, voi
|
|||
cols++;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
strcpy(pWrite, mgmtGetDnodeStatusStr(pDnode->status));
|
||||
|
||||
char* status = mgmtGetDnodeStatusStr(pDnode->status);
|
||||
STR_TO_VARSTR(pWrite, status);
|
||||
cols++;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "tutil.h"
|
||||
#include "ttime.h"
|
||||
#include "tsocket.h"
|
||||
#include "tdataformat.h"
|
||||
#include "mgmtDef.h"
|
||||
#include "mgmtLog.h"
|
||||
#include "mgmtMnode.h"
|
||||
|
@ -288,13 +289,13 @@ static int32_t mgmtGetMnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pCo
|
|||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
cols++;
|
||||
|
||||
pShow->bytes[cols] = 40;
|
||||
pShow->bytes[cols] = 40 + VARSTR_HEADER_SIZE;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_BINARY;
|
||||
strcpy(pSchema[cols].name, "end point");
|
||||
strcpy(pSchema[cols].name, "end_point");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
cols++;
|
||||
|
||||
pShow->bytes[cols] = 10;
|
||||
pShow->bytes[cols] = 12;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_BINARY;
|
||||
strcpy(pSchema[cols].name, "role");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
|
@ -302,7 +303,7 @@ static int32_t mgmtGetMnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pCo
|
|||
|
||||
pShow->bytes[cols] = 8;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_TIMESTAMP;
|
||||
strcpy(pSchema[cols].name, "create time");
|
||||
strcpy(pSchema[cols].name, "create_time");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
cols++;
|
||||
|
||||
|
@ -339,11 +340,12 @@ static int32_t mgmtRetrieveMnodes(SShowObj *pShow, char *data, int32_t rows, voi
|
|||
cols++;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
strncpy(pWrite, pMnode->pDnode->dnodeEp, pShow->bytes[cols]-1);
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, pMnode->pDnode->dnodeEp, pShow->bytes[cols] - VARSTR_HEADER_SIZE);
|
||||
cols++;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
strcpy(pWrite, mgmtGetMnodeRoleStr(pMnode->role));
|
||||
char* roles = mgmtGetMnodeRoleStr(pMnode->role);
|
||||
STR_TO_VARSTR(pWrite, roles);
|
||||
cols++;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include "mgmtUser.h"
|
||||
#include "mgmtVgroup.h"
|
||||
#include "tcompare.h"
|
||||
#include "tdataformat.h"
|
||||
|
||||
static void * tsChildTableSdb;
|
||||
static void * tsSuperTableSdb;
|
||||
|
@ -624,6 +625,7 @@ void mgmtCleanUpTables() {
|
|||
mgmtCleanUpSuperTables();
|
||||
}
|
||||
|
||||
// todo move to name.h, add length of table name
|
||||
static void mgmtExtractTableName(char* tableId, char* name) {
|
||||
int pos = -1;
|
||||
int num = 0;
|
||||
|
@ -1056,7 +1058,7 @@ static int32_t mgmtGetShowSuperTableMeta(STableMetaMsg *pMeta, SShowObj *pShow,
|
|||
int32_t cols = 0;
|
||||
SSchema *pSchema = pMeta->schema;
|
||||
|
||||
pShow->bytes[cols] = TSDB_TABLE_NAME_LEN;
|
||||
pShow->bytes[cols] = TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_BINARY;
|
||||
strcpy(pSchema[cols].name, "name");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
|
@ -1064,7 +1066,7 @@ static int32_t mgmtGetShowSuperTableMeta(STableMetaMsg *pMeta, SShowObj *pShow,
|
|||
|
||||
pShow->bytes[cols] = 8;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_TIMESTAMP;
|
||||
strcpy(pSchema[cols].name, "create_time");
|
||||
strcpy(pSchema[cols].name, "created_time");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
cols++;
|
||||
|
||||
|
@ -1136,7 +1138,12 @@ int32_t mgmtRetrieveShowSuperTables(SShowObj *pShow, char *data, int32_t rows, v
|
|||
cols = 0;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
strncpy(pWrite, stableName, TSDB_TABLE_NAME_LEN);
|
||||
|
||||
int16_t len = strnlen(stableName, TSDB_DB_NAME_LEN);
|
||||
*(int16_t*) pWrite = len;
|
||||
pWrite += sizeof(int16_t); // todo refactor
|
||||
|
||||
strncpy(pWrite, stableName, len);
|
||||
cols++;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
|
@ -1233,46 +1240,66 @@ static void mgmtGetSuperTableMeta(SQueuedMsg *pMsg) {
|
|||
|
||||
static void mgmtProcessSuperTableVgroupMsg(SQueuedMsg *pMsg) {
|
||||
SCMSTableVgroupMsg *pInfo = pMsg->pCont;
|
||||
if (pMsg->pTable == NULL) pMsg->pTable = mgmtGetSuperTable(pInfo->tableId);
|
||||
int32_t numOfTable = htonl(pInfo->numOfTables);
|
||||
|
||||
char* name = (char*) pInfo + sizeof(struct SCMSTableVgroupMsg);
|
||||
SCMSTableVgroupRspMsg *pRsp = NULL;
|
||||
|
||||
// todo set the initial size to be 10, fix me
|
||||
int32_t contLen = sizeof(SCMSTableVgroupRspMsg) + (sizeof(SCMVgroupInfo) * 10 + sizeof(SVgroupsInfo))*numOfTable;
|
||||
|
||||
pRsp = rpcMallocCont(contLen);
|
||||
if (pRsp == NULL) {
|
||||
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_SERV_OUT_OF_MEMORY);
|
||||
return;
|
||||
}
|
||||
|
||||
pRsp->numOfTables = htonl(numOfTable);
|
||||
char* msg = (char*) pRsp + sizeof(SCMSTableVgroupRspMsg);
|
||||
|
||||
for(int32_t i = 0; i < numOfTable; ++i) {
|
||||
SSuperTableObj *pTable = mgmtGetSuperTable(name);
|
||||
|
||||
pMsg->pTable = (STableObj *)pTable;
|
||||
if (pMsg->pTable == NULL) {
|
||||
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_INVALID_TABLE);
|
||||
return;
|
||||
}
|
||||
|
||||
SSuperTableObj *pTable = (SSuperTableObj *)pMsg->pTable;
|
||||
int32_t contLen = sizeof(SCMSTableVgroupRspMsg) + sizeof(SCMVgroupInfo) * pTable->vgLen;
|
||||
SCMSTableVgroupRspMsg *pRsp = rpcMallocCont(contLen);
|
||||
if (pRsp == NULL) {
|
||||
mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_SERV_OUT_OF_MEMORY);
|
||||
return;
|
||||
}
|
||||
SVgroupsInfo* pVgroup = (SVgroupsInfo*) msg;
|
||||
|
||||
int32_t vg = 0;
|
||||
for (; vg < pTable->vgLen; ++vg) {
|
||||
int32_t vgId = pTable->vgList[vg];
|
||||
if (vgId == 0) break;
|
||||
|
||||
SVgObj *pVgroup = mgmtGetVgroup(vgId);
|
||||
if (pVgroup == NULL) break;
|
||||
SVgObj *vgItem = mgmtGetVgroup(vgId);
|
||||
if (vgItem == NULL) break;
|
||||
|
||||
pRsp->vgroups[vg].vgId = htonl(vgId);
|
||||
for (int32_t vn = 0; vn < pVgroup->numOfVnodes; ++vn) {
|
||||
SDnodeObj *pDnode = pVgroup->vnodeGid[vn].pDnode;
|
||||
pVgroup->vgroups[vg].vgId = htonl(vgId);
|
||||
for (int32_t vn = 0; vn < vgItem->numOfVnodes; ++vn) {
|
||||
SDnodeObj *pDnode = vgItem->vnodeGid[vn].pDnode;
|
||||
if (pDnode == NULL) break;
|
||||
|
||||
strcpy(pRsp->vgroups[vg].ipAddr[vn].fqdn, pDnode->dnodeFqdn);
|
||||
pRsp->vgroups[vg].ipAddr[vn].port = htons(pDnode->dnodePort + TSDB_PORT_DNODESHELL);
|
||||
pRsp->vgroups[vg].numOfIps++;
|
||||
strncpy(pVgroup->vgroups[vg].ipAddr[vn].fqdn, pDnode->dnodeFqdn, tListLen(pDnode->dnodeFqdn));
|
||||
pVgroup->vgroups[vg].ipAddr[vn].port = htons(tsDnodeShellPort);
|
||||
|
||||
pVgroup->vgroups[vg].numOfIps++;
|
||||
}
|
||||
|
||||
mgmtDecVgroupRef(pVgroup);
|
||||
mgmtDecVgroupRef(vgItem);
|
||||
}
|
||||
|
||||
pVgroup->numOfVgroups = htonl(vg);
|
||||
|
||||
// one table is done, try the next table
|
||||
msg += sizeof(SVgroupsInfo) + vg * sizeof(SCMVgroupInfo);
|
||||
}
|
||||
pRsp->numOfVgroups = htonl(vg);
|
||||
|
||||
SRpcMsg rpcRsp = {0};
|
||||
rpcRsp.handle = pMsg->thandle;
|
||||
rpcRsp.pCont = pRsp;
|
||||
rpcRsp.contLen = sizeof(SCMSTableVgroupRspMsg) + sizeof(SCMVgroupInfo) * vg;
|
||||
rpcRsp.contLen = msg - (char*) pRsp;
|
||||
rpcSendResponse(&rpcRsp);
|
||||
}
|
||||
|
||||
|
@ -1989,15 +2016,15 @@ static int32_t mgmtGetShowTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void
|
|||
int32_t cols = 0;
|
||||
SSchema *pSchema = pMeta->schema;
|
||||
|
||||
pShow->bytes[cols] = TSDB_TABLE_NAME_LEN;
|
||||
pShow->bytes[cols] = TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_BINARY;
|
||||
strcpy(pSchema[cols].name, "table name");
|
||||
strcpy(pSchema[cols].name, "table_name");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
cols++;
|
||||
|
||||
pShow->bytes[cols] = 8;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_TIMESTAMP;
|
||||
strcpy(pSchema[cols].name, "create time");
|
||||
strcpy(pSchema[cols].name, "created_time");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
cols++;
|
||||
|
||||
|
@ -2007,9 +2034,9 @@ static int32_t mgmtGetShowTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void
|
|||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
cols++;
|
||||
|
||||
pShow->bytes[cols] = TSDB_TABLE_NAME_LEN;
|
||||
pShow->bytes[cols] = TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_BINARY;
|
||||
strcpy(pSchema[cols].name, "stable name");
|
||||
strcpy(pSchema[cols].name, "stable_name");
|
||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||
cols++;
|
||||
|
||||
|
@ -2072,7 +2099,8 @@ static int32_t mgmtRetrieveShowTables(SShowObj *pShow, char *data, int32_t rows,
|
|||
int32_t cols = 0;
|
||||
|
||||
char *pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
strncpy(pWrite, tableName, TSDB_TABLE_NAME_LEN);
|
||||
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, tableName, TSDB_TABLE_NAME_LEN);
|
||||
cols++;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
|
@ -2089,9 +2117,13 @@ static int32_t mgmtRetrieveShowTables(SShowObj *pShow, char *data, int32_t rows,
|
|||
cols++;
|
||||
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
|
||||
memset(tableName, 0, tListLen(tableName));
|
||||
if (pTable->info.type == TSDB_CHILD_TABLE) {
|
||||
mgmtExtractTableName(pTable->superTable->info.tableId, pWrite);
|
||||
mgmtExtractTableName(pTable->superTable->info.tableId, tableName);
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, tableName, TSDB_TABLE_NAME_LEN);
|
||||
}
|
||||
|
||||
cols++;
|
||||
|
||||
numOfRows++;
|
||||
|
|
|
@ -48,7 +48,8 @@ typedef struct tQueryInfo {
|
|||
int32_t colIndex; // index of column in schema
|
||||
uint8_t optr; // expression operator
|
||||
SSchema sch; // schema of tags
|
||||
tVariant q; // query condition value on the specific schema, filter expression
|
||||
// tVariant q; // query condition value on the specific schema, filter expression
|
||||
char* q;
|
||||
__compar_fn_t compare; // filter function
|
||||
} tQueryInfo;
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ typedef struct SDiskbasedResultBuf {
|
|||
* @param rowSize
|
||||
* @return
|
||||
*/
|
||||
int32_t createDiskbasedResultBuffer(SDiskbasedResultBuf** pResultBuf, int32_t size, int32_t rowSize);
|
||||
int32_t createDiskbasedResultBuffer(SDiskbasedResultBuf** pResultBuf, int32_t size, int32_t rowSize, void* handle);
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -103,7 +103,7 @@ int32_t getNumOfResultBufGroupId(SDiskbasedResultBuf* pResultBuf);
|
|||
* destroy result buffer
|
||||
* @param pResultBuf
|
||||
*/
|
||||
void destroyResultBuf(SDiskbasedResultBuf* pResultBuf);
|
||||
void destroyResultBuf(SDiskbasedResultBuf* pResultBuf, void* handle);
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -60,17 +60,16 @@ enum _sql_type {
|
|||
|
||||
TSDB_SQL_LOCAL, // SQL below for client local
|
||||
TSDB_SQL_DESCRIBE_TABLE,
|
||||
TSDB_SQL_RETRIEVE_METRIC,
|
||||
TSDB_SQL_RETRIEVE_LOCALMERGE,
|
||||
TSDB_SQL_METRIC_JOIN_RETRIEVE,
|
||||
TSDB_SQL_RETRIEVE_TAGS,
|
||||
|
||||
/*
|
||||
* build empty result instead of accessing dnode to fetch result
|
||||
* reset the client cache
|
||||
*/
|
||||
TSDB_SQL_RETRIEVE_EMPTY_RESULT, // 40
|
||||
TSDB_SQL_RETRIEVE_EMPTY_RESULT,
|
||||
|
||||
TSDB_SQL_RESET_CACHE,
|
||||
TSDB_SQL_RESET_CACHE, // 40
|
||||
TSDB_SQL_SERV_STATUS,
|
||||
TSDB_SQL_CURRENT_DB,
|
||||
TSDB_SQL_SERV_VERSION,
|
||||
|
@ -78,7 +77,7 @@ enum _sql_type {
|
|||
TSDB_SQL_CURRENT_USER,
|
||||
TSDB_SQL_CFG_LOCAL,
|
||||
|
||||
TSDB_SQL_MAX // 48
|
||||
TSDB_SQL_MAX // 47
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ typedef struct STSElem {
|
|||
} STSElem;
|
||||
|
||||
typedef struct STSCursor {
|
||||
int32_t vnodeIndex;
|
||||
int32_t vgroupIndex;
|
||||
int32_t blockIndex;
|
||||
int32_t tsIndex;
|
||||
uint32_t order;
|
||||
|
|
|
@ -96,24 +96,20 @@ typedef struct SSingleColumnFilterInfo {
|
|||
void* pData;
|
||||
} SSingleColumnFilterInfo;
|
||||
|
||||
typedef struct STableQueryInfo {
|
||||
int64_t lastKey;
|
||||
STimeWindow win;
|
||||
typedef struct STableQueryInfo { // todo merge with the STableQueryInfo struct
|
||||
int32_t tableIndex;
|
||||
int32_t groupIdx; // group id in table list
|
||||
TSKEY lastKey;
|
||||
int32_t numOfRes;
|
||||
int16_t queryRangeSet; // denote if the query range is set, only available for interval query
|
||||
int64_t tag;
|
||||
STimeWindow win;
|
||||
STSCursor cur;
|
||||
int32_t tid; // for retrieve the page id list
|
||||
STableId id; // for retrieve the page id list
|
||||
|
||||
SWindowResInfo windowResInfo;
|
||||
} STableQueryInfo;
|
||||
|
||||
typedef struct STableDataInfo { // todo merge with the STableQueryInfo struct
|
||||
int32_t tableIndex;
|
||||
int32_t groupIdx; // group id in table list
|
||||
STableQueryInfo* pTableQInfo;
|
||||
} STableDataInfo;
|
||||
|
||||
typedef struct SQuery {
|
||||
int16_t numOfCols;
|
||||
int16_t numOfTags;
|
||||
|
@ -130,7 +126,7 @@ typedef struct SQuery {
|
|||
SLimitVal limit;
|
||||
int32_t rowSize;
|
||||
SSqlGroupbyExpr* pGroupbyExpr;
|
||||
SArithExprInfo* pSelectExpr;
|
||||
SExprInfo* pSelectExpr;
|
||||
SColumnInfo* colList;
|
||||
SColumnInfo* tagColList;
|
||||
int32_t numOfFilterCols;
|
||||
|
@ -173,11 +169,13 @@ typedef struct SQInfo {
|
|||
int32_t code; // error code to returned to client
|
||||
sem_t dataReady;
|
||||
void* tsdb;
|
||||
int32_t vgId;
|
||||
|
||||
STableGroupInfo groupInfo; // table id list
|
||||
STableGroupInfo tableIdGroupInfo; // table id list < only includes the STableId list>
|
||||
STableGroupInfo groupInfo; //
|
||||
SQueryRuntimeEnv runtimeEnv;
|
||||
int32_t groupIndex;
|
||||
int32_t offset; /* offset in group result set of subgroup */
|
||||
int32_t offset; // offset in group result set of subgroup, todo refactor
|
||||
|
||||
T_REF_DECLARE()
|
||||
/*
|
||||
|
@ -188,7 +186,6 @@ typedef struct SQInfo {
|
|||
*/
|
||||
int32_t tableIndex;
|
||||
int32_t numOfGroupResultPages;
|
||||
TSKEY* tsList;
|
||||
} SQInfo;
|
||||
|
||||
#endif // TDENGINE_QUERYEXECUTOR_H
|
||||
|
|
|
@ -31,11 +31,11 @@ extern int32_t qdebugFlag;
|
|||
|
||||
#define qError(...) \
|
||||
if (qdebugFlag & DEBUG_ERROR) { \
|
||||
taosPrintLog("ERROR RPC ", qdebugFlag, __VA_ARGS__); \
|
||||
taosPrintLog("ERROR QRY ", qdebugFlag, __VA_ARGS__); \
|
||||
}
|
||||
#define qWarn(...) \
|
||||
if (qdebugFlag & DEBUG_WARN) { \
|
||||
taosPrintLog("WARN RPC ", qdebugFlag, __VA_ARGS__); \
|
||||
taosPrintLog("WARN QRY ", qdebugFlag, __VA_ARGS__); \
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -120,7 +120,7 @@ cmd ::= DROP TABLE ifexists(Y) ids(X) cpxName(Z). {
|
|||
}
|
||||
|
||||
cmd ::= DROP DATABASE ifexists(Y) ids(X). { setDropDBTableInfo(pInfo, TSDB_SQL_DROP_DB, &X, &Y); }
|
||||
cmd ::= DROP DNODE IPTOKEN(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_DNODE, 1, &X); }
|
||||
cmd ::= DROP DNODE ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_DNODE, 1, &X); }
|
||||
cmd ::= DROP USER ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_USER, 1, &X); }
|
||||
cmd ::= DROP ACCOUNT ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_ACCT, 1, &X); }
|
||||
|
||||
|
@ -136,8 +136,8 @@ cmd ::= DESCRIBE ids(X) cpxName(Y). {
|
|||
/////////////////////////////////THE ALTER STATEMENT////////////////////////////////////////
|
||||
cmd ::= ALTER USER ids(X) PASS ids(Y). { setAlterUserSQL(pInfo, TSDB_ALTER_USER_PASSWD, &X, &Y, NULL); }
|
||||
cmd ::= ALTER USER ids(X) PRIVILEGE ids(Y). { setAlterUserSQL(pInfo, TSDB_ALTER_USER_PRIVILEGES, &X, NULL, &Y);}
|
||||
cmd ::= ALTER DNODE IPTOKEN(X) ids(Y). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_DNODE, 2, &X, &Y); }
|
||||
cmd ::= ALTER DNODE IPTOKEN(X) ids(Y) ids(Z). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_DNODE, 3, &X, &Y, &Z); }
|
||||
cmd ::= ALTER DNODE ids(X) ids(Y). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_DNODE, 2, &X, &Y); }
|
||||
cmd ::= ALTER DNODE ids(X) ids(Y) ids(Z). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_DNODE, 3, &X, &Y, &Z); }
|
||||
cmd ::= ALTER LOCAL ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 1, &X); }
|
||||
cmd ::= ALTER LOCAL ids(X) ids(Y). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &X, &Y); }
|
||||
cmd ::= ALTER DATABASE ids(X) alter_db_optr(Y). { SSQLToken t = {0}; setCreateDBSQL(pInfo, TSDB_SQL_ALTER_DB, &X, &Y, &t);}
|
||||
|
@ -162,7 +162,7 @@ ifnotexists(X) ::= . {X.n = 0;}
|
|||
|
||||
/////////////////////////////////THE CREATE STATEMENT///////////////////////////////////////
|
||||
//create option for dnode/db/user/account
|
||||
cmd ::= CREATE DNODE IPTOKEN(X). { setDCLSQLElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &X);}
|
||||
cmd ::= CREATE DNODE ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &X);}
|
||||
cmd ::= CREATE ACCOUNT ids(X) PASS ids(Y) acct_optr(Z).
|
||||
{ setCreateAcctSQL(pInfo, TSDB_SQL_CREATE_ACCT, &X, &Y, &Z);}
|
||||
cmd ::= CREATE DATABASE ifnotexists(Z) ids(X) db_optr(Y). { setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &X, &Y, &Z);}
|
||||
|
|
|
@ -68,16 +68,18 @@ extern "C" {
|
|||
#define TSDB_FUNC_AVG_RATE 32
|
||||
#define TSDB_FUNC_AVG_IRATE 33
|
||||
|
||||
#define TSDB_FUNCSTATE_SO 0x1U // single output
|
||||
#define TSDB_FUNCSTATE_MO 0x2U // dynamic number of output, not multinumber of output e.g., TOP/BOTTOM
|
||||
#define TSDB_FUNCSTATE_STREAM 0x4U // function avail for stream
|
||||
#define TSDB_FUNCSTATE_METRIC 0x8U // function avail for metric
|
||||
#define TSDB_FUNCSTATE_OF 0x10U // outer forward
|
||||
#define TSDB_FUNCSTATE_NEED_TS 0x20U // timestamp is required during query processing
|
||||
#define TSDB_FUNCSTATE_SELECTIVITY 0x40U // selectivity functions, can exists along with tag columns
|
||||
#define TSDB_FUNC_TID_TAG 34
|
||||
|
||||
#define TSDB_BASE_FUNC_SO TSDB_FUNCSTATE_SO | TSDB_FUNCSTATE_STREAM | TSDB_FUNCSTATE_METRIC | TSDB_FUNCSTATE_OF
|
||||
#define TSDB_BASE_FUNC_MO TSDB_FUNCSTATE_MO | TSDB_FUNCSTATE_STREAM | TSDB_FUNCSTATE_METRIC | TSDB_FUNCSTATE_OF
|
||||
#define TSDB_FUNCSTATE_SO 0x1u // single output
|
||||
#define TSDB_FUNCSTATE_MO 0x2u // dynamic number of output, not multinumber of output e.g., TOP/BOTTOM
|
||||
#define TSDB_FUNCSTATE_STREAM 0x4u // function avail for stream
|
||||
#define TSDB_FUNCSTATE_STABLE 0x8u // function avail for metric
|
||||
#define TSDB_FUNCSTATE_OF 0x10u // outer forward
|
||||
#define TSDB_FUNCSTATE_NEED_TS 0x20u // timestamp is required during query processing
|
||||
#define TSDB_FUNCSTATE_SELECTIVITY 0x40u // selectivity functions, can exists along with tag columns
|
||||
|
||||
#define TSDB_BASE_FUNC_SO TSDB_FUNCSTATE_SO | TSDB_FUNCSTATE_STREAM | TSDB_FUNCSTATE_STABLE | TSDB_FUNCSTATE_OF
|
||||
#define TSDB_BASE_FUNC_MO TSDB_FUNCSTATE_MO | TSDB_FUNCSTATE_STREAM | TSDB_FUNCSTATE_STABLE | TSDB_FUNCSTATE_OF
|
||||
|
||||
|
||||
#define TSDB_FUNCTIONS_NAME_MAX_LENGTH 16
|
||||
|
@ -109,12 +111,12 @@ enum {
|
|||
};
|
||||
|
||||
#define QUERY_IS_STABLE_QUERY(type) (((type)&TSDB_QUERY_TYPE_STABLE_QUERY) != 0)
|
||||
#define QUERY_IS_JOIN_QUERY(type) (((type)&TSDB_QUERY_TYPE_JOIN_QUERY) != 0)
|
||||
#define QUERY_IS_JOIN_QUERY(type) (TSDB_QUERY_HAS_TYPE(type, TSDB_QUERY_TYPE_JOIN_QUERY))
|
||||
#define QUERY_IS_PROJECTION_QUERY(type) (((type)&TSDB_QUERY_TYPE_PROJECTION_QUERY) != 0)
|
||||
#define QUERY_IS_FREE_RESOURCE(type) (((type)&TSDB_QUERY_TYPE_FREE_RESOURCE) != 0)
|
||||
|
||||
typedef struct SArithmeticSupport {
|
||||
SArithExprInfo *pArithExpr;
|
||||
SExprInfo *pArithExpr;
|
||||
int32_t numOfCols;
|
||||
SColumnInfo *colList;
|
||||
int32_t offset;
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
*
|
||||
* @date 2018-2-15
|
||||
* @version 0.2 operation for column filter
|
||||
* @author liaohj
|
||||
*
|
||||
* @Description parse tag query expression to build ast
|
||||
* ver 0.2, filter the result on first column with high priority to limit the candidate set
|
||||
|
@ -468,7 +467,7 @@ void tExprTreeDestroy(tExprNode **pExpr, void (*fp)(void *)) {
|
|||
}
|
||||
|
||||
typedef struct {
|
||||
tVariant v;
|
||||
char* v;
|
||||
int32_t optr;
|
||||
} SEndPoint;
|
||||
|
||||
|
@ -521,21 +520,19 @@ static int32_t setQueryCond(tQueryInfo *queryColInfo, SQueryCond* pCond) {
|
|||
|
||||
if (optr == TSDB_RELATION_GREATER || optr == TSDB_RELATION_GREATER_EQUAL ||
|
||||
optr == TSDB_RELATION_EQUAL || optr == TSDB_RELATION_NOT_EQUAL) {
|
||||
pCond->start = calloc(1, sizeof(tVariant));
|
||||
tVariantAssign(&pCond->start->v, &queryColInfo->q);
|
||||
pCond->start = calloc(1, sizeof(SEndPoint));
|
||||
pCond->start->optr = queryColInfo->optr;
|
||||
|
||||
pCond->start->v = queryColInfo->q;
|
||||
} else if (optr == TSDB_RELATION_LESS || optr == TSDB_RELATION_LESS_EQUAL) {
|
||||
pCond->end = calloc(1, sizeof(tVariant));
|
||||
tVariantAssign(&pCond->end->v, &queryColInfo->q);
|
||||
pCond->end = calloc(1, sizeof(SEndPoint));
|
||||
pCond->end->optr = queryColInfo->optr;
|
||||
|
||||
pCond->end->v = queryColInfo->q;
|
||||
} else if (optr == TSDB_RELATION_IN) {
|
||||
printf("relation is in\n");
|
||||
|
||||
assert(0);
|
||||
} else if (optr == TSDB_RELATION_LIKE) {
|
||||
printf("relation is like\n");
|
||||
|
||||
assert(0);
|
||||
}
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
@ -543,18 +540,16 @@ static int32_t setQueryCond(tQueryInfo *queryColInfo, SQueryCond* pCond) {
|
|||
|
||||
static void tQueryIndexColumn(SSkipList* pSkipList, tQueryInfo* pQueryInfo, SArray* result) {
|
||||
SSkipListIterator* iter = NULL;
|
||||
int32_t type = pQueryInfo->q.nType;
|
||||
|
||||
SQueryCond cond = {0};
|
||||
setQueryCond(pQueryInfo, &cond);
|
||||
|
||||
if (cond.start != NULL) {
|
||||
iter = tSkipListCreateIterFromVal(pSkipList, (char*) &cond.start->v.i64Key, type, TSDB_ORDER_ASC);
|
||||
iter = tSkipListCreateIterFromVal(pSkipList, (char*) &cond.start->v, pSkipList->keyInfo.type, TSDB_ORDER_ASC);
|
||||
} else {
|
||||
iter = tSkipListCreateIterFromVal(pSkipList, (char*) &cond.end->v.i64Key, type, TSDB_ORDER_DESC);
|
||||
iter = tSkipListCreateIterFromVal(pSkipList, (char*) &cond.end->v, pSkipList->keyInfo.type, TSDB_ORDER_DESC);
|
||||
}
|
||||
|
||||
__compar_fn_t func = getComparFunc(pSkipList->keyInfo.type, type, 0);
|
||||
__compar_fn_t func = getKeyComparFunc(pSkipList->keyInfo.type);
|
||||
|
||||
if (cond.start != NULL) {
|
||||
int32_t optr = cond.start->optr;
|
||||
|
@ -563,7 +558,7 @@ static void tQueryIndexColumn(SSkipList* pSkipList, tQueryInfo* pQueryInfo, SArr
|
|||
while(tSkipListIterNext(iter)) {
|
||||
SSkipListNode* pNode = tSkipListIterGet(iter);
|
||||
|
||||
int32_t ret = func(SL_GET_NODE_KEY(pSkipList, pNode), &cond.start->v.i64Key);
|
||||
int32_t ret = func(SL_GET_NODE_KEY(pSkipList, pNode), cond.start->v);
|
||||
if (ret == 0) {
|
||||
taosArrayPush(result, SL_GET_NODE_DATA(pNode));
|
||||
} else {
|
||||
|
@ -578,7 +573,7 @@ static void tQueryIndexColumn(SSkipList* pSkipList, tQueryInfo* pQueryInfo, SArr
|
|||
SSkipListNode* pNode = tSkipListIterGet(iter);
|
||||
|
||||
if (comp) {
|
||||
ret = func(SL_GET_NODE_KEY(pSkipList, pNode), &cond.start->v.i64Key);
|
||||
ret = func(SL_GET_NODE_KEY(pSkipList, pNode), cond.start->v);
|
||||
assert(ret >= 0);
|
||||
}
|
||||
|
||||
|
@ -605,7 +600,7 @@ static void tQueryIndexColumn(SSkipList* pSkipList, tQueryInfo* pQueryInfo, SArr
|
|||
SSkipListNode* pNode = tSkipListIterGet(iter);
|
||||
|
||||
if (comp) {
|
||||
ret = func(SL_GET_NODE_KEY(pSkipList, pNode), &cond.end->v.i64Key);
|
||||
ret = func(SL_GET_NODE_KEY(pSkipList, pNode), cond.end->v);
|
||||
assert(ret <= 0);
|
||||
}
|
||||
|
||||
|
@ -699,21 +694,18 @@ int32_t intersect(SArray *pLeft, SArray *pRight, SArray *pFinalRes) {
|
|||
/*
|
||||
* traverse the result and apply the function to each item to check if the item is qualified or not
|
||||
*/
|
||||
static UNUSED_FUNC void tSQLListTraverseOnResult(struct tExprNode *pExpr, __result_filter_fn_t fp, SArray *pResult) {
|
||||
// assert(pExpr->_node.pLeft->nodeType == TSQL_NODE_COL && pExpr->_node.pRight->nodeType == TSQL_NODE_VALUE);
|
||||
//
|
||||
// // brutal force scan the result list and check for each item in the list
|
||||
// int64_t num = pResult->num;
|
||||
// for (int32_t i = 0, j = 0; i < pResult->num; ++i) {
|
||||
// if (fp == NULL || (fp(pResult->pRes[i], pExpr->_node.info) == true)) {
|
||||
// pResult->pRes[j++] = pResult->pRes[i];
|
||||
// } else {
|
||||
// num--;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// pResult->num = num;
|
||||
assert(0);
|
||||
static void tArrayTraverse(tExprNode *pExpr, __result_filter_fn_t fp, SArray *pResult) {
|
||||
assert(pExpr->_node.pLeft->nodeType == TSQL_NODE_COL && pExpr->_node.pRight->nodeType == TSQL_NODE_VALUE && fp != NULL);
|
||||
|
||||
// scan the result array list and check for each item in the list
|
||||
for (int32_t i = 0; i < taosArrayGetSize(pResult); ++i) {
|
||||
void* item = taosArrayGet(pResult, i);
|
||||
if (fp(item, pExpr->_node.info)) {
|
||||
i++;
|
||||
} else {
|
||||
taosArrayRemove(pResult, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool filterItem(tExprNode *pExpr, const void *pItem, SBinaryFilterSupp *param) {
|
||||
|
@ -771,12 +763,7 @@ static void exprTreeTraverseImpl(tExprNode *pExpr, SArray *pResult, SBinaryFilte
|
|||
}
|
||||
|
||||
|
||||
static void tSQLBinaryTraverseOnSkipList(
|
||||
tExprNode *pExpr,
|
||||
SArray *pResult,
|
||||
SSkipList *pSkipList,
|
||||
SBinaryFilterSupp *param
|
||||
) {
|
||||
static void tSQLBinaryTraverseOnSkipList(tExprNode *pExpr, SArray *pResult, SSkipList *pSkipList, SBinaryFilterSupp *param ) {
|
||||
SSkipListIterator* iter = tSkipListCreateIter(pSkipList);
|
||||
|
||||
while (tSkipListIterNext(iter)) {
|
||||
|
@ -797,20 +784,26 @@ static void tQueryIndexlessColumn(SSkipList* pSkipList, tQueryInfo* pQueryInfo,
|
|||
bool addToResult = false;
|
||||
|
||||
SSkipListNode *pNode = tSkipListIterGet(iter);
|
||||
STable* table = *(STable**) SL_GET_NODE_DATA(pNode);
|
||||
char* pTable = SL_GET_NODE_DATA(pNode);
|
||||
|
||||
//todo refactor:
|
||||
char* name = (*(STable**) pTable)->name;
|
||||
// char* name = NULL;
|
||||
// tsdbGetTableName(tsdb, pTable, &name);
|
||||
|
||||
// todo speed up by using hash
|
||||
if (pQueryInfo->colIndex == TSDB_TBNAME_COLUMN_INDEX) {
|
||||
if (pQueryInfo->optr == TSDB_RELATION_IN) {
|
||||
addToResult = pQueryInfo->compare(table->name, pQueryInfo->q.arr);
|
||||
addToResult = pQueryInfo->compare(name, pQueryInfo->q);
|
||||
} else if(pQueryInfo->optr == TSDB_RELATION_LIKE) {
|
||||
addToResult = !pQueryInfo->compare(table->name, pQueryInfo->q.pz);
|
||||
addToResult = !pQueryInfo->compare(name, pQueryInfo->q);
|
||||
}
|
||||
} else {
|
||||
// TODO: other columns
|
||||
}
|
||||
|
||||
if (addToResult) {
|
||||
taosArrayPush(result, (void*)&table);
|
||||
taosArrayPush(result, pTable);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -834,7 +827,7 @@ void tExprTreeTraverse(tExprNode *pExpr, SSkipList *pSkipList, SArray *result, S
|
|||
|
||||
param->setupInfoFn(pExpr, param->pExtInfo);
|
||||
if (pSkipList == NULL) {
|
||||
tSQLListTraverseOnResult(pExpr, param->fp, result);
|
||||
tArrayTraverse(pExpr, param->fp, result);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -920,7 +913,6 @@ void tExprTreeTraverse(tExprNode *pExpr, SSkipList *pSkipList, SArray *result, S
|
|||
tExprTreeTraverse(pSecond, NULL, result, param);
|
||||
}
|
||||
|
||||
|
||||
void tExprTreeCalcTraverse(tExprNode *pExprs, int32_t numOfRows, char *pOutput, void *param, int32_t order,
|
||||
char *(*getSourceDataBlock)(void *, const char*, int32_t)) {
|
||||
if (pExprs == NULL) {
|
||||
|
|
|
@ -409,13 +409,21 @@ static FORCE_INLINE int32_t columnValueAscendingComparator(char *f1, char *f2, i
|
|||
return (first < second) ? -1 : 1;
|
||||
};
|
||||
case TSDB_DATA_TYPE_BINARY: {
|
||||
int32_t ret = strncmp(f1, f2, bytes);
|
||||
int32_t len1 = varDataLen(f1);
|
||||
int32_t len2 = varDataLen(f2);
|
||||
|
||||
if (len1 != len2) {
|
||||
return len1 > len2? 1:-1;
|
||||
} else {
|
||||
int32_t ret = strncmp(varDataVal(f1), varDataVal(f2), len1);
|
||||
if (ret == 0) {
|
||||
return 0;
|
||||
}
|
||||
return (ret < 0) ? -1 : 1;
|
||||
}
|
||||
|
||||
};
|
||||
case TSDB_DATA_TYPE_NCHAR: {
|
||||
case TSDB_DATA_TYPE_NCHAR: { // todo handle the var string compare
|
||||
int32_t ret = tasoUcs4Compare(f1, f2, bytes);
|
||||
if (ret == 0) {
|
||||
return 0;
|
||||
|
|
|
@ -463,7 +463,8 @@ int32_t getTimestampInUsFromStrImpl(int64_t val, char unit, int64_t *result) {
|
|||
|
||||
void tSQLSetColumnInfo(TAOS_FIELD *pField, SSQLToken *pName, TAOS_FIELD *pType) {
|
||||
int32_t maxLen = sizeof(pField->name) / sizeof(pField->name[0]);
|
||||
/* truncate the column name */
|
||||
|
||||
// truncate the column name
|
||||
if (pName->n >= maxLen) {
|
||||
pName->n = maxLen - 1;
|
||||
}
|
||||
|
@ -478,7 +479,9 @@ void tSQLSetColumnInfo(TAOS_FIELD *pField, SSQLToken *pName, TAOS_FIELD *pType)
|
|||
void tSQLSetColumnType(TAOS_FIELD *pField, SSQLToken *type) {
|
||||
pField->type = -1;
|
||||
|
||||
for (int8_t i = 0; i < sizeof(tDataTypeDesc) / sizeof(tDataTypeDesc[0]); ++i) {
|
||||
int32_t LENGTH_SIZE_OF_STR = 2; // in case of nchar and binary, there two bytes to keep the length of binary|nchar.
|
||||
|
||||
for (int8_t i = 0; i < tListLen(tDataTypeDesc); ++i) {
|
||||
if ((strncasecmp(type->z, tDataTypeDesc[i].aName, tDataTypeDesc[i].nameLen) == 0) &&
|
||||
(type->n == tDataTypeDesc[i].nameLen)) {
|
||||
pField->type = i;
|
||||
|
@ -490,10 +493,10 @@ void tSQLSetColumnType(TAOS_FIELD *pField, SSQLToken *type) {
|
|||
* number of bytes in UCS-4 format, which is 4 times larger than the
|
||||
* number of characters
|
||||
*/
|
||||
pField->bytes = -(int32_t)type->type * TSDB_NCHAR_SIZE;
|
||||
pField->bytes = -(int32_t)type->type * TSDB_NCHAR_SIZE + LENGTH_SIZE_OF_STR;
|
||||
} else if (i == TSDB_DATA_TYPE_BINARY) {
|
||||
/* for binary, the TOKENTYPE is the length of binary */
|
||||
pField->bytes = -(int32_t)type->type;
|
||||
pField->bytes = -(int32_t) type->type + LENGTH_SIZE_OF_STR;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
#define DEFAULT_INTERN_BUF_SIZE 16384L
|
||||
|
||||
int32_t createDiskbasedResultBuffer(SDiskbasedResultBuf** pResultBuf, int32_t size, int32_t rowSize) {
|
||||
int32_t createDiskbasedResultBuffer(SDiskbasedResultBuf** pResultBuf, int32_t size, int32_t rowSize, void* handle) {
|
||||
SDiskbasedResultBuf* pResBuf = calloc(1, sizeof(SDiskbasedResultBuf));
|
||||
pResBuf->numOfRowsPerPage = (DEFAULT_INTERN_BUF_SIZE - sizeof(tFilePage)) / rowSize;
|
||||
pResBuf->numOfPages = size;
|
||||
|
@ -41,11 +41,13 @@ int32_t createDiskbasedResultBuffer(SDiskbasedResultBuf** pResultBuf, int32_t si
|
|||
|
||||
pResBuf->pBuf = mmap(NULL, pResBuf->totalBufSize, PROT_READ | PROT_WRITE, MAP_SHARED, pResBuf->fd, 0);
|
||||
if (pResBuf->pBuf == MAP_FAILED) {
|
||||
qError("QInfo:%p failed to map temp file: %s. %s", pResBuf->path, strerror(errno));
|
||||
qError("QInfo:%p failed to map temp file: %s. %s", handle, pResBuf->path, strerror(errno));
|
||||
return TSDB_CODE_CLI_OUT_OF_MEMORY; // todo change error code
|
||||
}
|
||||
|
||||
qTrace("create tmp file for output result, %s, " PRId64 "bytes", pResBuf->path, pResBuf->totalBufSize);
|
||||
qTrace("QInfo:%p create tmp file for output result, %s, %" PRId64 "bytes", handle, pResBuf->path,
|
||||
pResBuf->totalBufSize);
|
||||
|
||||
*pResultBuf = pResBuf;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
@ -189,7 +191,7 @@ SIDList getDataBufPagesIdList(SDiskbasedResultBuf* pResultBuf, int32_t groupId)
|
|||
}
|
||||
}
|
||||
|
||||
void destroyResultBuf(SDiskbasedResultBuf* pResultBuf) {
|
||||
void destroyResultBuf(SDiskbasedResultBuf* pResultBuf, void* handle) {
|
||||
if (pResultBuf == NULL) {
|
||||
return;
|
||||
}
|
||||
|
@ -198,7 +200,7 @@ void destroyResultBuf(SDiskbasedResultBuf* pResultBuf) {
|
|||
close(pResultBuf->fd);
|
||||
}
|
||||
|
||||
qTrace("disk-based output buffer closed, %" PRId64 " bytes, file:%s", pResultBuf->totalBufSize, pResultBuf->path);
|
||||
qTrace("QInfo:%p disk-based output buffer closed, %" PRId64 " bytes, file:%s", handle, pResultBuf->totalBufSize, pResultBuf->path);
|
||||
munmap(pResultBuf->pBuf, pResultBuf->totalBufSize);
|
||||
unlink(pResultBuf->path);
|
||||
|
||||
|
|
|
@ -482,7 +482,7 @@ static void tsBufGetBlock(STSBuf* pTSBuf, int32_t vnodeIndex, int32_t blockIndex
|
|||
}
|
||||
|
||||
STSCursor* pCur = &pTSBuf->cur;
|
||||
if (pCur->vnodeIndex == vnodeIndex && ((pCur->blockIndex <= blockIndex && pCur->order == TSDB_ORDER_ASC) ||
|
||||
if (pCur->vgroupIndex == vnodeIndex && ((pCur->blockIndex <= blockIndex && pCur->order == TSDB_ORDER_ASC) ||
|
||||
(pCur->blockIndex >= blockIndex && pCur->order == TSDB_ORDER_DESC))) {
|
||||
int32_t i = 0;
|
||||
bool decomp = false;
|
||||
|
@ -517,7 +517,7 @@ static void tsBufGetBlock(STSBuf* pTSBuf, int32_t vnodeIndex, int32_t blockIndex
|
|||
|
||||
assert((pTSBuf->tsData.len / TSDB_KEYSIZE == pBlock->numOfElem) && (pTSBuf->tsData.allocSize >= pTSBuf->tsData.len));
|
||||
|
||||
pCur->vnodeIndex = vnodeIndex;
|
||||
pCur->vgroupIndex = vnodeIndex;
|
||||
pCur->blockIndex = blockIndex;
|
||||
|
||||
pCur->tsIndex = (pCur->order == TSDB_ORDER_ASC) ? 0 : pBlock->numOfElem - 1;
|
||||
|
@ -554,7 +554,7 @@ bool tsBufNextPos(STSBuf* pTSBuf) {
|
|||
STSCursor* pCur = &pTSBuf->cur;
|
||||
|
||||
// get the first/last position according to traverse order
|
||||
if (pCur->vnodeIndex == -1) {
|
||||
if (pCur->vgroupIndex == -1) {
|
||||
if (pCur->order == TSDB_ORDER_ASC) {
|
||||
tsBufGetBlock(pTSBuf, 0, 0);
|
||||
|
||||
|
@ -569,9 +569,9 @@ bool tsBufNextPos(STSBuf* pTSBuf) {
|
|||
assert(pTSBuf->numOfVnodes > 0);
|
||||
|
||||
int32_t vnodeIndex = pTSBuf->numOfVnodes - 1;
|
||||
pCur->vnodeIndex = vnodeIndex;
|
||||
pCur->vgroupIndex = vnodeIndex;
|
||||
|
||||
int32_t vnodeId = pTSBuf->pData[pCur->vnodeIndex].info.vnode;
|
||||
int32_t vnodeId = pTSBuf->pData[pCur->vgroupIndex].info.vnode;
|
||||
STSVnodeBlockInfo* pBlockInfo = tsBufGetVnodeBlockInfo(pTSBuf, vnodeId);
|
||||
int32_t blockIndex = pBlockInfo->numOfBlocks - 1;
|
||||
|
||||
|
@ -594,14 +594,14 @@ bool tsBufNextPos(STSBuf* pTSBuf) {
|
|||
|
||||
if ((pCur->order == TSDB_ORDER_ASC && pCur->tsIndex >= pTSBuf->block.numOfElem - 1) ||
|
||||
(pCur->order == TSDB_ORDER_DESC && pCur->tsIndex <= 0)) {
|
||||
int32_t vnodeId = pTSBuf->pData[pCur->vnodeIndex].info.vnode;
|
||||
int32_t vnodeId = pTSBuf->pData[pCur->vgroupIndex].info.vnode;
|
||||
|
||||
STSVnodeBlockInfo* pBlockInfo = tsBufGetVnodeBlockInfo(pTSBuf, vnodeId);
|
||||
if (pBlockInfo == NULL || (pCur->blockIndex >= pBlockInfo->numOfBlocks - 1 && pCur->order == TSDB_ORDER_ASC) ||
|
||||
(pCur->blockIndex <= 0 && pCur->order == TSDB_ORDER_DESC)) {
|
||||
if ((pCur->vnodeIndex >= pTSBuf->numOfVnodes - 1 && pCur->order == TSDB_ORDER_ASC) ||
|
||||
(pCur->vnodeIndex <= 0 && pCur->order == TSDB_ORDER_DESC)) {
|
||||
pCur->vnodeIndex = -1;
|
||||
if ((pCur->vgroupIndex >= pTSBuf->numOfVnodes - 1 && pCur->order == TSDB_ORDER_ASC) ||
|
||||
(pCur->vgroupIndex <= 0 && pCur->order == TSDB_ORDER_DESC)) {
|
||||
pCur->vgroupIndex = -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -610,11 +610,11 @@ bool tsBufNextPos(STSBuf* pTSBuf) {
|
|||
}
|
||||
|
||||
int32_t blockIndex = pCur->order == TSDB_ORDER_ASC ? 0 : pBlockInfo->numOfBlocks - 1;
|
||||
tsBufGetBlock(pTSBuf, pCur->vnodeIndex + step, blockIndex);
|
||||
tsBufGetBlock(pTSBuf, pCur->vgroupIndex + step, blockIndex);
|
||||
break;
|
||||
|
||||
} else {
|
||||
tsBufGetBlock(pTSBuf, pCur->vnodeIndex, pCur->blockIndex + step);
|
||||
tsBufGetBlock(pTSBuf, pCur->vgroupIndex, pCur->blockIndex + step);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
|
@ -631,7 +631,7 @@ void tsBufResetPos(STSBuf* pTSBuf) {
|
|||
return;
|
||||
}
|
||||
|
||||
pTSBuf->cur = (STSCursor){.tsIndex = -1, .blockIndex = -1, .vnodeIndex = -1, .order = pTSBuf->cur.order};
|
||||
pTSBuf->cur = (STSCursor){.tsIndex = -1, .blockIndex = -1, .vgroupIndex = -1, .order = pTSBuf->cur.order};
|
||||
}
|
||||
|
||||
STSElem tsBufGetElem(STSBuf* pTSBuf) {
|
||||
|
@ -642,13 +642,13 @@ STSElem tsBufGetElem(STSBuf* pTSBuf) {
|
|||
}
|
||||
|
||||
STSCursor* pCur = &pTSBuf->cur;
|
||||
if (pCur != NULL && pCur->vnodeIndex < 0) {
|
||||
if (pCur != NULL && pCur->vgroupIndex < 0) {
|
||||
return elem1;
|
||||
}
|
||||
|
||||
STSBlock* pBlock = &pTSBuf->block;
|
||||
|
||||
elem1.vnode = pTSBuf->pData[pCur->vnodeIndex].info.vnode;
|
||||
elem1.vnode = pTSBuf->pData[pCur->vgroupIndex].info.vnode;
|
||||
elem1.ts = *(TSKEY*)(pTSBuf->tsData.rawBuf + pCur->tsIndex * TSDB_KEYSIZE);
|
||||
elem1.tag = pBlock->tag;
|
||||
|
||||
|
@ -804,7 +804,7 @@ STSElem tsBufGetElemStartPos(STSBuf* pTSBuf, int32_t vnodeId, int64_t tag) {
|
|||
return elem;
|
||||
}
|
||||
|
||||
pCur->vnodeIndex = j;
|
||||
pCur->vgroupIndex = j;
|
||||
pCur->blockIndex = blockIndex;
|
||||
tsBufGetBlock(pTSBuf, j, blockIndex);
|
||||
|
||||
|
@ -812,7 +812,7 @@ STSElem tsBufGetElemStartPos(STSBuf* pTSBuf, int32_t vnodeId, int64_t tag) {
|
|||
}
|
||||
|
||||
STSCursor tsBufGetCursor(STSBuf* pTSBuf) {
|
||||
STSCursor c = {.vnodeIndex = -1};
|
||||
STSCursor c = {.vgroupIndex = -1};
|
||||
if (pTSBuf == NULL) {
|
||||
return c;
|
||||
}
|
||||
|
@ -825,9 +825,9 @@ void tsBufSetCursor(STSBuf* pTSBuf, STSCursor* pCur) {
|
|||
return;
|
||||
}
|
||||
|
||||
// assert(pCur->vnodeIndex != -1 && pCur->tsIndex >= 0 && pCur->blockIndex >= 0);
|
||||
if (pCur->vnodeIndex != -1) {
|
||||
tsBufGetBlock(pTSBuf, pCur->vnodeIndex, pCur->blockIndex);
|
||||
// assert(pCur->vgroupIndex != -1 && pCur->tsIndex >= 0 && pCur->blockIndex >= 0);
|
||||
if (pCur->vgroupIndex != -1) {
|
||||
tsBufGetBlock(pTSBuf, pCur->vgroupIndex, pCur->blockIndex);
|
||||
}
|
||||
|
||||
pTSBuf->cur = *pCur;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -408,7 +408,7 @@ static int32_t toNchar(tVariant *pVariant, char **pDest, int32_t *pDestSize) {
|
|||
|
||||
if (*pDest == pVariant->pz) {
|
||||
wchar_t *pWStr = calloc(1, (nLen + 1) * TSDB_NCHAR_SIZE);
|
||||
taosMbsToUcs4(pDst, nLen, (char *)pWStr, (nLen + 1) * TSDB_NCHAR_SIZE);
|
||||
taosMbsToUcs4(pDst, nLen, (char *)pWStr, (nLen + 1) * TSDB_NCHAR_SIZE, NULL);
|
||||
|
||||
// free the binary buffer in the first place
|
||||
if (pVariant->nType == TSDB_DATA_TYPE_BINARY) {
|
||||
|
@ -424,7 +424,7 @@ static int32_t toNchar(tVariant *pVariant, char **pDest, int32_t *pDestSize) {
|
|||
|
||||
pVariant->wpz = (wchar_t *)tmp;
|
||||
} else {
|
||||
taosMbsToUcs4(pDst, nLen, *pDest, (nLen + 1) * TSDB_NCHAR_SIZE);
|
||||
taosMbsToUcs4(pDst, nLen, *pDest, (nLen + 1) * TSDB_NCHAR_SIZE, NULL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -10,7 +10,7 @@ namespace {
|
|||
// simple test
|
||||
void simpleTest() {
|
||||
SDiskbasedResultBuf* pResultBuf = NULL;
|
||||
int32_t ret = createDiskbasedResultBuffer(&pResultBuf, 1000, 64);
|
||||
int32_t ret = createDiskbasedResultBuffer(&pResultBuf, 1000, 64, NULL);
|
||||
|
||||
int32_t pageId = 0;
|
||||
int32_t groupId = 0;
|
||||
|
@ -26,7 +26,7 @@ void simpleTest() {
|
|||
|
||||
ASSERT_EQ(getNumOfResultBufGroupId(pResultBuf), 1);
|
||||
|
||||
destroyResultBuf(pResultBuf);
|
||||
destroyResultBuf(pResultBuf, NULL);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
|
|
|
@ -146,7 +146,6 @@ void rpcAddConnIntoCache(void *handle, void *data, char *fqdn, uint16_t port, in
|
|||
rpcUnlockCache(pCache->lockedBy+hash);
|
||||
|
||||
pCache->total++;
|
||||
|
||||
tTrace("%p %s:%hu:%d:%d:%p added into cache, connections:%d", data, fqdn, port, connType, hash, pNode, pCache->count[hash]);
|
||||
|
||||
return;
|
||||
|
@ -202,6 +201,8 @@ void *rpcGetConnFromCache(void *handle, char *fqdn, uint16_t port, int8_t connTy
|
|||
|
||||
if (pData) {
|
||||
tTrace("%p %s:%hu:%d:%d:%p retrieved from cache, connections:%d", pData, fqdn, port, connType, hash, pNode, pCache->count[hash]);
|
||||
} else {
|
||||
tTrace("%s:%hu:%d:%d failed to retrieve conn from cache, connections:%d", fqdn, port, connType, hash, pCache->count[hash]);
|
||||
}
|
||||
|
||||
return pData;
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
#include "rpcCache.h"
|
||||
#include "rpcTcp.h"
|
||||
#include "rpcHead.h"
|
||||
#include "shash.h"
|
||||
|
||||
|
||||
#define RPC_MSG_OVERHEAD (sizeof(SRpcReqContext) + sizeof(SRpcHead) + sizeof(SRpcDigest))
|
||||
#define rpcHeadFromCont(cont) ((SRpcHead *) (cont - sizeof(SRpcHead)))
|
||||
|
@ -260,7 +262,9 @@ void *rpcOpen(const SRpcInit *pInit) {
|
|||
}
|
||||
|
||||
if (pRpc->connType == TAOS_CONN_SERVER) {
|
||||
pRpc->hash = taosHashInit(pRpc->sessions, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true);
|
||||
pRpc->hash = taosInitStrHash(pRpc->sessions, sizeof(pRpc), taosHashString);
|
||||
|
||||
// pRpc->hash = taosHashInit(pRpc->sessions, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true);
|
||||
if (pRpc->hash == NULL) {
|
||||
tError("%s failed to init string hash", pRpc->label);
|
||||
rpcClose(pRpc);
|
||||
|
@ -294,7 +298,8 @@ void rpcClose(void *param) {
|
|||
(*taosCleanUpConn[pRpc->connType | RPC_CONN_TCP])(pRpc->tcphandle);
|
||||
(*taosCleanUpConn[pRpc->connType])(pRpc->udphandle);
|
||||
|
||||
taosHashCleanup(pRpc->hash);
|
||||
// taosHashCleanup(pRpc->hash);
|
||||
taosCleanUpStrHash(pRpc->hash);
|
||||
taosTmrCleanUp(pRpc->tmrCtrl);
|
||||
taosIdPoolCleanUp(pRpc->idPool);
|
||||
rpcCloseConnCache(pRpc->pCache);
|
||||
|
@ -543,8 +548,9 @@ static void rpcCloseConn(void *thandle) {
|
|||
|
||||
if ( pRpc->connType == TAOS_CONN_SERVER) {
|
||||
char hashstr[40] = {0};
|
||||
size_t size = sprintf(hashstr, "%x:%x:%x:%d", pConn->peerIp, pConn->linkUid, pConn->peerId, pConn->connType);
|
||||
taosHashRemove(pRpc->hash, hashstr, size);
|
||||
/*size_t size = */sprintf(hashstr, "%x:%x:%x:%d", pConn->peerIp, pConn->linkUid, pConn->peerId, pConn->connType);
|
||||
// taosHashRemove(pRpc->hash, hashstr, size);
|
||||
taosDeleteStrHash(pRpc->hash, hashstr);
|
||||
|
||||
rpcFreeMsg(pConn->pRspMsg); // it may have a response msg saved, but not request msg
|
||||
pConn->pRspMsg = NULL;
|
||||
|
@ -593,10 +599,12 @@ static SRpcConn *rpcAllocateServerConn(SRpcInfo *pRpc, SRecvInfo *pRecv) {
|
|||
char hashstr[40] = {0};
|
||||
SRpcHead *pHead = (SRpcHead *)pRecv->msg;
|
||||
|
||||
size_t size = sprintf(hashstr, "%x:%x:%x:%d", pRecv->ip, pHead->linkUid, pHead->sourceId, pRecv->connType);
|
||||
/*size_t size = */sprintf(hashstr, "%x:%x:%x:%d", pRecv->ip, pHead->linkUid, pHead->sourceId, pRecv->connType);
|
||||
|
||||
// check if it is already allocated
|
||||
SRpcConn **ppConn = (SRpcConn **)(taosHashGet(pRpc->hash, hashstr, size));
|
||||
SRpcConn **ppConn = (SRpcConn **)(taosGetStrHashData(pRpc->hash, hashstr));
|
||||
|
||||
// SRpcConn **ppConn = (SRpcConn **)(taosHashGet(pRpc->hash, hashstr, size));
|
||||
if (ppConn) pConn = *ppConn;
|
||||
if (pConn) return pConn;
|
||||
|
||||
|
@ -630,7 +638,9 @@ static SRpcConn *rpcAllocateServerConn(SRpcInfo *pRpc, SRecvInfo *pRecv) {
|
|||
pConn->localPort = (pRpc->localPort + pRpc->index);
|
||||
}
|
||||
|
||||
taosHashPut(pRpc->hash, hashstr, size, (char *)&pConn, POINTER_BYTES);
|
||||
taosAddStrHash(pRpc->hash, hashstr, (char *)&pConn);
|
||||
|
||||
// taosHashPut(pRpc->hash, hashstr, size, (char *)&pConn, POINTER_BYTES);
|
||||
|
||||
tTrace("%s %p, rpc connection is allocated, sid:%d id:%s port:%u",
|
||||
pRpc->label, pConn, sid, pConn->user, pConn->localPort);
|
||||
|
|
|
@ -225,35 +225,47 @@ STSchema * tsdbGetTableTagSchema(STsdbMeta *pMeta, STable *pTable) {
|
|||
}
|
||||
}
|
||||
|
||||
int32_t tsdbGetTableTagVal(TsdbRepoT* repo, STableId id, int32_t colId, int16_t* type, int16_t* bytes, char** val) {
|
||||
int32_t tsdbGetTableTagVal(TsdbRepoT* repo, STableId* id, int32_t colId, int16_t* type, int16_t* bytes, char** val) {
|
||||
STsdbMeta* pMeta = tsdbGetMeta(repo);
|
||||
STable* pTable = tsdbGetTableByUid(pMeta, id.uid);
|
||||
STable* pTable = tsdbGetTableByUid(pMeta, id->uid);
|
||||
|
||||
STSchema* pSchema = tsdbGetTableTagSchema(pMeta, pTable);
|
||||
|
||||
STColumn* pCol = NULL;
|
||||
int32_t offset = 0;
|
||||
for(int32_t col = 0; col < schemaNCols(pSchema); ++col) {
|
||||
STColumn* p = schemaColAt(pSchema, col);
|
||||
if (p->colId == colId) {
|
||||
pCol = p;
|
||||
break;
|
||||
}
|
||||
|
||||
if (p->type == TSDB_DATA_TYPE_BINARY || p->type == TSDB_DATA_TYPE_NCHAR) {
|
||||
offset += sizeof(int32_t);
|
||||
} else {
|
||||
offset += p->bytes;
|
||||
}
|
||||
}
|
||||
|
||||
if (pCol == NULL) {
|
||||
return -1; // No matched tags. Maybe the modification of tags has not been done yet.
|
||||
}
|
||||
|
||||
assert(pCol != NULL);
|
||||
|
||||
SDataRow row = (SDataRow)pTable->tagVal;
|
||||
char* d = dataRowTuple(row);
|
||||
char* d = tdGetRowDataOfCol(row, pCol->type, TD_DATA_ROW_HEAD_SIZE + offset);
|
||||
|
||||
*val = d;
|
||||
*type = pCol->type;
|
||||
*bytes = pCol->bytes;
|
||||
|
||||
return 0;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t tsdbTableGetName(TsdbRepoT *repo, STableId id, char** name) {
|
||||
int32_t tsdbGetTableName(TsdbRepoT *repo, STableId* id, char** name) {
|
||||
STsdbMeta* pMeta = tsdbGetMeta(repo);
|
||||
STable* pTable = tsdbGetTableByUid(pMeta, id.uid);
|
||||
STable* pTable = tsdbGetTableByUid(pMeta, id->uid);
|
||||
|
||||
*name = strndup(pTable->name, TSDB_TABLE_NAME_LEN);
|
||||
if (*name == NULL) {
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
#include "tsdbMain.h"
|
||||
|
||||
#define EXTRA_BYTES 2
|
||||
#define PRIMARY_TSCOL_REQUIRED(c) (((SColumnInfoData*)taosArrayGet(c, 0))->info.colId == PRIMARYKEY_TIMESTAMP_COL_INDEX)
|
||||
#define ASCENDING_ORDER_TRAVERSE(o) (o == TSDB_ORDER_ASC)
|
||||
#define QH_GET_NUM_OF_COLS(handle) ((size_t)(taosArrayGetSize((handle)->pColumns)))
|
||||
|
||||
|
@ -35,6 +34,12 @@ enum {
|
|||
QUERY_RANGE_GREATER_EQUAL = 1,
|
||||
};
|
||||
|
||||
enum {
|
||||
TSDB_QUERY_TYPE_ALL = 1,
|
||||
TSDB_QUERY_TYPE_LAST = 2,
|
||||
TSDB_QUERY_TYPE_EXTERNAL = 3,
|
||||
};
|
||||
|
||||
typedef struct SField {
|
||||
// todo need the definition
|
||||
} SField;
|
||||
|
@ -54,7 +59,7 @@ typedef struct SDataBlockLoadInfo {
|
|||
} SDataBlockLoadInfo;
|
||||
|
||||
typedef struct SLoadCompBlockInfo {
|
||||
int32_t sid; /* meter sid */
|
||||
int32_t sid; /* table sid */
|
||||
int32_t fileId;
|
||||
int32_t fileListIndex;
|
||||
} SLoadCompBlockInfo;
|
||||
|
@ -63,16 +68,12 @@ typedef struct STableCheckInfo {
|
|||
STableId tableId;
|
||||
TSKEY lastKey;
|
||||
STable* pTableObj;
|
||||
int64_t offsetInHeaderFile;
|
||||
int32_t start;
|
||||
bool checkFirstFileBlock;
|
||||
|
||||
SCompInfo* pCompInfo;
|
||||
int32_t compSize;
|
||||
|
||||
int32_t numOfBlocks; // number of qualified data blocks not the original blocks
|
||||
|
||||
SDataCols* pDataCols;
|
||||
|
||||
SSkipListIterator* iter;
|
||||
} STableCheckInfo;
|
||||
|
||||
|
@ -92,7 +93,7 @@ typedef struct SBlockOrderSupporter {
|
|||
int32_t numOfTables;
|
||||
STableBlockInfo** pDataBlockInfo;
|
||||
int32_t* blockIndexArray;
|
||||
int32_t* numOfBlocksPerMeter;
|
||||
int32_t* numOfBlocksPerTable;
|
||||
} SBlockOrderSupporter;
|
||||
|
||||
typedef struct STsdbQueryHandle {
|
||||
|
@ -110,19 +111,20 @@ typedef struct STsdbQueryHandle {
|
|||
SArray* pColumns; // column list, SColumnInfoData array list
|
||||
bool locateStart;
|
||||
int32_t realNumOfRows;
|
||||
SArray* pTableCheckInfo;
|
||||
SArray* pTableCheckInfo; //SArray<STableCheckInfo>
|
||||
int32_t activeIndex;
|
||||
bool checkFiles; // check file stage
|
||||
void* qinfo; // query info handle, for debug purpose
|
||||
|
||||
int32_t type; // query type: retrieve all data blocks, 2. retrieve only last row, 3. retrieve direct prev|next rows
|
||||
STableBlockInfo* pDataBlockInfo;
|
||||
|
||||
SFileGroup* pFileGroup;
|
||||
SFileGroupIter fileIter;
|
||||
SCompIdx* compIndex;
|
||||
SRWHelper rhelper;
|
||||
} STsdbQueryHandle;
|
||||
|
||||
static void changeQueryHandleForLastrowQuery(TsdbQueryHandleT pqHandle);
|
||||
|
||||
static void tsdbInitDataBlockLoadInfo(SDataBlockLoadInfo* pBlockLoadInfo) {
|
||||
pBlockLoadInfo->slot = -1;
|
||||
pBlockLoadInfo->sid = -1;
|
||||
|
@ -143,7 +145,7 @@ TsdbQueryHandleT* tsdbQueryTables(TsdbRepoT* tsdb, STsdbQueryCond* pCond, STable
|
|||
pQueryHandle->order = pCond->order;
|
||||
pQueryHandle->window = pCond->twindow;
|
||||
pQueryHandle->pTsdb = tsdb;
|
||||
pQueryHandle->compIndex = calloc(10000, sizeof(SCompIdx));
|
||||
pQueryHandle->type = TSDB_QUERY_TYPE_ALL;
|
||||
tsdbInitReadHelper(&pQueryHandle->rhelper, (STsdbRepo*) tsdb);
|
||||
|
||||
pQueryHandle->cur.fid = -1;
|
||||
|
@ -160,15 +162,15 @@ TsdbQueryHandleT* tsdbQueryTables(TsdbRepoT* tsdb, STsdbQueryCond* pCond, STable
|
|||
assert(gsize > 0);
|
||||
|
||||
for (int32_t j = 0; j < gsize; ++j) {
|
||||
SPair* d = (SPair*) taosArrayGet(group, j);
|
||||
assert(d->first != NULL);
|
||||
STableId* id = (STableId*) taosArrayGet(group, j);
|
||||
|
||||
STableCheckInfo info = {
|
||||
.lastKey = pQueryHandle->window.skey,
|
||||
.tableId = ((STable*) d->first)->tableId,
|
||||
.pTableObj = d->first,
|
||||
.tableId = *id,
|
||||
.pTableObj = tsdbGetTableByUid(tsdbGetMeta(tsdb), id->uid),
|
||||
};
|
||||
|
||||
assert(info.pTableObj != NULL && info.pTableObj->tableId.tid == id->tid);
|
||||
taosArrayPush(pQueryHandle->pTableCheckInfo, &info);
|
||||
}
|
||||
}
|
||||
|
@ -201,6 +203,26 @@ TsdbQueryHandleT* tsdbQueryTables(TsdbRepoT* tsdb, STsdbQueryCond* pCond, STable
|
|||
return (TsdbQueryHandleT) pQueryHandle;
|
||||
}
|
||||
|
||||
TsdbQueryHandleT tsdbQueryLastRow(TsdbRepoT *tsdb, STsdbQueryCond *pCond, STableGroupInfo *groupList) {
|
||||
STsdbQueryHandle *pQueryHandle = (STsdbQueryHandle*) tsdbQueryTables(tsdb, pCond, groupList);
|
||||
|
||||
pQueryHandle->type = TSDB_QUERY_TYPE_LAST;
|
||||
pQueryHandle->order = TSDB_ORDER_DESC;
|
||||
|
||||
changeQueryHandleForLastrowQuery(pQueryHandle);
|
||||
return pQueryHandle;
|
||||
}
|
||||
|
||||
TsdbQueryHandleT tsdbQueryRowsInExternalWindow(TsdbRepoT *tsdb, STsdbQueryCond* pCond, STableGroupInfo *groupList) {
|
||||
STsdbQueryHandle *pQueryHandle = (STsdbQueryHandle*) tsdbQueryTables(tsdb, pCond, groupList);
|
||||
|
||||
pQueryHandle->type = TSDB_QUERY_TYPE_EXTERNAL;
|
||||
pQueryHandle->order = TSDB_ORDER_ASC;
|
||||
|
||||
// changeQueryHandleForLastrowQuery(pQueryHandle);
|
||||
return pQueryHandle;
|
||||
}
|
||||
|
||||
static bool hasMoreDataInCache(STsdbQueryHandle* pHandle) {
|
||||
size_t size = taosArrayGetSize(pHandle->pTableCheckInfo);
|
||||
assert(pHandle->activeIndex < size && pHandle->activeIndex >= 0 && size >= 1);
|
||||
|
@ -236,8 +258,8 @@ static bool hasMoreDataInCache(STsdbQueryHandle* pHandle) {
|
|||
|
||||
SDataRow row = SL_GET_NODE_DATA(node);
|
||||
pCheckInfo->lastKey = dataRowKey(row); // first timestamp in buffer
|
||||
uTrace("%p uid:%" PRId64", tid:%d check data in buffer from skey:%" PRId64 ", order:%d", pHandle,
|
||||
pCheckInfo->tableId.uid, pCheckInfo->tableId.tid, pCheckInfo->lastKey, pHandle->order);
|
||||
uTrace("%p uid:%" PRId64", tid:%d check data in buffer from skey:%" PRId64 ", order:%d, %p", pHandle,
|
||||
pCheckInfo->tableId.uid, pCheckInfo->tableId.tid, pCheckInfo->lastKey, pHandle->order, pHandle->qinfo);
|
||||
|
||||
// all data in mem are checked already.
|
||||
if ((pCheckInfo->lastKey > pHandle->window.ekey && ASCENDING_ORDER_TRAVERSE(pHandle->order)) ||
|
||||
|
@ -293,8 +315,6 @@ static int32_t getFileCompInfo(STsdbQueryHandle* pQueryHandle, int32_t* numOfBlo
|
|||
tsdbSetAndOpenHelperFile(&pQueryHandle->rhelper, fileGroup);
|
||||
|
||||
// load all the comp offset value for all tables in this file
|
||||
// tsdbLoadCompIdx(fileGroup, pQueryHandle->compIndex, 10000); // todo set dynamic max tables
|
||||
|
||||
*numOfBlocks = 0;
|
||||
size_t numOfTables = taosArrayGetSize(pQueryHandle->pTableCheckInfo);
|
||||
|
||||
|
@ -358,7 +378,7 @@ static SDataBlockInfo getTrueDataBlockInfo(STableCheckInfo* pCheckInfo, SCompBlo
|
|||
.window = {.skey = pBlock->keyFirst, .ekey = pBlock->keyLast},
|
||||
.numOfCols = pBlock->numOfCols,
|
||||
.rows = pBlock->numOfPoints,
|
||||
.sid = pCheckInfo->tableId.tid,
|
||||
.tid = pCheckInfo->tableId.tid,
|
||||
.uid = pCheckInfo->tableId.uid,
|
||||
};
|
||||
|
||||
|
@ -407,16 +427,11 @@ static bool doLoadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBlo
|
|||
SArray* sa = getDefaultLoadColumns(pQueryHandle, true);
|
||||
|
||||
if (pCheckInfo->pDataCols == NULL) {
|
||||
pCheckInfo->pDataCols = tdNewDataCols(1000, 2, 4096);
|
||||
pCheckInfo->pDataCols = tdNewDataCols(1000, 100, 4096); //todo fix me
|
||||
}
|
||||
|
||||
tdInitDataCols(pCheckInfo->pDataCols, tsdbGetTableSchema(tsdbGetMeta(pQueryHandle->pTsdb), pCheckInfo->pTableObj));
|
||||
|
||||
// SFile* pFile = &pQueryHandle->pFileGroup->files[TSDB_FILE_TYPE_DATA];
|
||||
// if (pFile->fd == FD_INITIALIZER) {
|
||||
// pFile->fd = open(pFile->fname, O_RDONLY);
|
||||
// }
|
||||
|
||||
if (tsdbLoadBlockData(&(pQueryHandle->rhelper), pBlock, NULL) == 0) {
|
||||
SDataBlockLoadInfo* pBlockLoadInfo = &pQueryHandle->dataBlockLoadInfo;
|
||||
|
||||
|
@ -552,7 +567,6 @@ static void filterDataInDataBlock(STsdbQueryHandle* pQueryHandle, STableCheckInf
|
|||
SQueryFilePos* cur = &pQueryHandle->cur;
|
||||
SDataBlockInfo blockInfo = getTrueDataBlockInfo(pCheckInfo, pBlock);
|
||||
|
||||
// pQueryHandle->rhelper.pDataCols[0]->cols[0];
|
||||
SDataCols* pCols = pQueryHandle->rhelper.pDataCols[0];
|
||||
|
||||
int32_t endPos = cur->pos;
|
||||
|
@ -589,18 +603,32 @@ static void filterDataInDataBlock(STsdbQueryHandle* pQueryHandle, STableCheckInf
|
|||
|
||||
int32_t start = MIN(cur->pos, endPos);
|
||||
|
||||
// move the data block in the front to data block if needed
|
||||
int32_t numOfCols = QH_GET_NUM_OF_COLS(pQueryHandle);
|
||||
// if (start > 0) {
|
||||
// tdPopDataColsPoints(pQueryHandle->rhelper.pDataCols[0], start);
|
||||
// }
|
||||
|
||||
for (int32_t i = 0; i < taosArrayGetSize(sa); ++i) {
|
||||
int16_t colId = *(int16_t*)taosArrayGet(sa, i);
|
||||
// move the data block in the front to data block if needed
|
||||
int32_t numOfCols = pQueryHandle->rhelper.pDataCols[0]->numOfCols;
|
||||
int32_t reqCols = taosArrayGetSize(pQueryHandle->pColumns);
|
||||
|
||||
for (int32_t i = 0; i < reqCols; ++i) {
|
||||
// int16_t colId = *(int16_t*)taosArrayGet(sa, i);
|
||||
SColumnInfoData* pCol = taosArrayGet(pQueryHandle->pColumns, i);
|
||||
int32_t bytes = pCol->info.bytes;
|
||||
|
||||
for (int32_t j = 0; j < numOfCols; ++j) {
|
||||
SColumnInfoData* pCol = taosArrayGet(pQueryHandle->pColumns, j);
|
||||
SDataCol* src = &pQueryHandle->rhelper.pDataCols[0]->cols[j];
|
||||
|
||||
if (pCol->info.colId == src->colId) {
|
||||
if (pCol->info.type != TSDB_DATA_TYPE_BINARY && pCol->info.type != TSDB_DATA_TYPE_NCHAR) {
|
||||
memmove(pCol->pData, src->pData + bytes * start, bytes * pQueryHandle->realNumOfRows);
|
||||
} else { // handle the var-string
|
||||
for(int32_t k = start; k < pQueryHandle->realNumOfRows + start; ++k) {
|
||||
char* p = tdGetColDataOfRow(src, k);
|
||||
memcpy(pCol->pData + k * bytes, p, varDataTLen(p)); // todo refactor
|
||||
}
|
||||
}
|
||||
|
||||
if (pCol->info.colId == colId) {
|
||||
memmove(pCol->pData, pQueryHandle->rhelper.pDataCols[0]->cols[i].pData + pCol->info.bytes * start,
|
||||
pQueryHandle->realNumOfRows * pCol->info.bytes);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -673,7 +701,7 @@ int32_t binarySearchForKey(char* pValue, int num, TSKEY key, int order) {
|
|||
}
|
||||
|
||||
static void cleanBlockOrderSupporter(SBlockOrderSupporter* pSupporter, int32_t numOfTables) {
|
||||
tfree(pSupporter->numOfBlocksPerMeter);
|
||||
tfree(pSupporter->numOfBlocksPerTable);
|
||||
tfree(pSupporter->blockIndexArray);
|
||||
|
||||
for (int32_t i = 0; i < numOfTables; ++i) {
|
||||
|
@ -692,10 +720,10 @@ static int32_t dataBlockOrderCompar(const void* pLeft, const void* pRight, void*
|
|||
int32_t leftTableBlockIndex = pSupporter->blockIndexArray[leftTableIndex];
|
||||
int32_t rightTableBlockIndex = pSupporter->blockIndexArray[rightTableIndex];
|
||||
|
||||
if (leftTableBlockIndex > pSupporter->numOfBlocksPerMeter[leftTableIndex]) {
|
||||
if (leftTableBlockIndex > pSupporter->numOfBlocksPerTable[leftTableIndex]) {
|
||||
/* left block is empty */
|
||||
return 1;
|
||||
} else if (rightTableBlockIndex > pSupporter->numOfBlocksPerMeter[rightTableIndex]) {
|
||||
} else if (rightTableBlockIndex > pSupporter->numOfBlocksPerTable[rightTableIndex]) {
|
||||
/* right block is empty */
|
||||
return -1;
|
||||
}
|
||||
|
@ -727,11 +755,11 @@ static int32_t createDataBlocksInfo(STsdbQueryHandle* pQueryHandle, int32_t numO
|
|||
|
||||
SBlockOrderSupporter sup = {0};
|
||||
sup.numOfTables = numOfTables;
|
||||
sup.numOfBlocksPerMeter = calloc(1, sizeof(int32_t) * numOfTables);
|
||||
sup.numOfBlocksPerTable = calloc(1, sizeof(int32_t) * numOfTables);
|
||||
sup.blockIndexArray = calloc(1, sizeof(int32_t) * numOfTables);
|
||||
sup.pDataBlockInfo = calloc(1, POINTER_BYTES * numOfTables);
|
||||
|
||||
if (sup.numOfBlocksPerMeter == NULL || sup.blockIndexArray == NULL || sup.pDataBlockInfo == NULL) {
|
||||
if (sup.numOfBlocksPerTable == NULL || sup.blockIndexArray == NULL || sup.pDataBlockInfo == NULL) {
|
||||
cleanBlockOrderSupporter(&sup, 0);
|
||||
return TSDB_CODE_SERV_OUT_OF_MEMORY;
|
||||
}
|
||||
|
@ -745,7 +773,7 @@ static int32_t createDataBlocksInfo(STsdbQueryHandle* pQueryHandle, int32_t numO
|
|||
}
|
||||
|
||||
SCompBlock* pBlock = pTableCheck->pCompInfo->blocks;
|
||||
sup.numOfBlocksPerMeter[numOfQualTables] = pTableCheck->numOfBlocks;
|
||||
sup.numOfBlocksPerTable[numOfQualTables] = pTableCheck->numOfBlocks;
|
||||
|
||||
char* buf = calloc(1, sizeof(STableBlockInfo) * pTableCheck->numOfBlocks);
|
||||
if (buf == NULL) {
|
||||
|
@ -763,7 +791,7 @@ static int32_t createDataBlocksInfo(STsdbQueryHandle* pQueryHandle, int32_t numO
|
|||
|
||||
pBlockInfoEx->pTableCheckInfo = pTableCheck;
|
||||
// pBlockInfoEx->groupIdx = pTableCheckInfo[j]->groupIdx; // set the group index
|
||||
// pBlockInfoEx->blockIndex = pTableCheckInfo[j]->start + k; // set the block index in original meter
|
||||
// pBlockInfoEx->blockIndex = pTableCheckInfo[j]->start + k; // set the block index in original table
|
||||
cnt++;
|
||||
}
|
||||
|
||||
|
@ -772,7 +800,7 @@ static int32_t createDataBlocksInfo(STsdbQueryHandle* pQueryHandle, int32_t numO
|
|||
|
||||
uTrace("%p create data blocks info struct completed, %d blocks in %d tables", pQueryHandle, cnt, numOfQualTables);
|
||||
|
||||
assert(cnt <= numOfBlocks && numOfQualTables <= numOfTables); // the pMeterDataInfo[j]->numOfBlocks may be 0
|
||||
assert(cnt <= numOfBlocks && numOfQualTables <= numOfTables); // the pTableQueryInfo[j]->numOfBlocks may be 0
|
||||
sup.numOfTables = numOfQualTables;
|
||||
SLoserTreeInfo* pTree = NULL;
|
||||
|
||||
|
@ -792,8 +820,8 @@ static int32_t createDataBlocksInfo(STsdbQueryHandle* pQueryHandle, int32_t numO
|
|||
pQueryHandle->pDataBlockInfo[numOfTotal++] = pBlocksInfoEx[index];
|
||||
|
||||
// set data block index overflow, in order to disable the offset comparator
|
||||
if (sup.blockIndexArray[pos] >= sup.numOfBlocksPerMeter[pos]) {
|
||||
sup.blockIndexArray[pos] = sup.numOfBlocksPerMeter[pos] + 1;
|
||||
if (sup.blockIndexArray[pos] >= sup.numOfBlocksPerTable[pos]) {
|
||||
sup.blockIndexArray[pos] = sup.numOfBlocksPerTable[pos] + 1;
|
||||
}
|
||||
|
||||
tLoserTreeAdjust(pTree, pos + sup.numOfTables);
|
||||
|
@ -827,10 +855,14 @@ static bool getDataBlocksInFilesImpl(STsdbQueryHandle* pQueryHandle) {
|
|||
break;
|
||||
}
|
||||
|
||||
assert(numOfBlocks >= 0);
|
||||
uTrace("%p %d blocks found in file for %d table(s), fid:%d", pQueryHandle, numOfBlocks,
|
||||
numOfTables, pQueryHandle->pFileGroup->fileId);
|
||||
|
||||
assert(numOfBlocks >= 0);
|
||||
if (numOfBlocks == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// todo return error code to query engine
|
||||
if (createDataBlocksInfo(pQueryHandle, numOfBlocks, &pQueryHandle->numOfBlocks) != TSDB_CODE_SUCCESS) {
|
||||
break;
|
||||
|
@ -941,7 +973,60 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pqHandle) {
|
|||
}
|
||||
}
|
||||
|
||||
static int tsdbReadRowsFromCache(SSkipListIterator* pIter, TSKEY maxKey, int maxRowsToRead, TSKEY* skey, TSKEY* ekey,
|
||||
void changeQueryHandleForLastrowQuery(TsdbQueryHandleT pqHandle) {
|
||||
STsdbQueryHandle* pQueryHandle = (STsdbQueryHandle*) pqHandle;
|
||||
assert(!ASCENDING_ORDER_TRAVERSE(pQueryHandle->order));
|
||||
|
||||
// starts from the buffer in case of descending timestamp order check data blocks
|
||||
|
||||
// todo consider the query time window, current last_row does not apply the query time window
|
||||
size_t numOfTables = taosArrayGetSize(pQueryHandle->pTableCheckInfo);
|
||||
|
||||
TSKEY key = 0;
|
||||
int32_t index = -1;
|
||||
|
||||
for(int32_t i = 0; i < numOfTables; ++i) {
|
||||
STableCheckInfo* pCheckInfo = taosArrayGet(pQueryHandle->pTableCheckInfo, i);
|
||||
if (pCheckInfo->pTableObj->lastKey > key) { //todo lastKey should not be 0 by default
|
||||
key = pCheckInfo->pTableObj->lastKey;
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
|
||||
// todo, there are no data in all the tables. opt performance
|
||||
if (index == -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
// erase all other elements in array list, todo refactor
|
||||
size_t size = taosArrayGetSize(pQueryHandle->pTableCheckInfo);
|
||||
for (int32_t i = 0; i < size; ++i) {
|
||||
if (i == index) {
|
||||
continue;
|
||||
}
|
||||
|
||||
STableCheckInfo* pTableCheckInfo = taosArrayGet(pQueryHandle->pTableCheckInfo, i);
|
||||
tSkipListDestroyIter(pTableCheckInfo->iter);
|
||||
|
||||
if (pTableCheckInfo->pDataCols != NULL) {
|
||||
tfree(pTableCheckInfo->pDataCols->buf);
|
||||
}
|
||||
|
||||
tfree(pTableCheckInfo->pDataCols);
|
||||
tfree(pTableCheckInfo->pCompInfo);
|
||||
}
|
||||
|
||||
STableCheckInfo info = *(STableCheckInfo*) taosArrayGet(pQueryHandle->pTableCheckInfo, index);
|
||||
taosArrayDestroy(pQueryHandle->pTableCheckInfo);
|
||||
|
||||
pQueryHandle->pTableCheckInfo = taosArrayInit(1, sizeof(STableCheckInfo));
|
||||
taosArrayPush(pQueryHandle->pTableCheckInfo, &info);
|
||||
|
||||
// update the query time window according to the chosen last timestamp
|
||||
pQueryHandle->window = (STimeWindow) {key, key};
|
||||
}
|
||||
|
||||
static int tsdbReadRowsFromCache(SSkipListIterator* pIter, STable* pTable, TSKEY maxKey, int maxRowsToRead, TSKEY* skey, TSKEY* ekey,
|
||||
STsdbQueryHandle* pQueryHandle) {
|
||||
int numOfRows = 0;
|
||||
int32_t numOfCols = taosArrayGetSize(pQueryHandle->pColumns);
|
||||
|
@ -971,9 +1056,12 @@ static int tsdbReadRowsFromCache(SSkipListIterator* pIter, TSKEY maxKey, int max
|
|||
|
||||
*ekey = dataRowKey(row);
|
||||
|
||||
int32_t offset = 0;
|
||||
int32_t offset = -1;
|
||||
char* pData = NULL;
|
||||
|
||||
STSchema* pSchema = tsdbGetTableSchema(tsdbGetMeta(pQueryHandle->pTsdb), pTable);
|
||||
int32_t numOfTableCols = schemaNCols(pSchema);
|
||||
|
||||
for (int32_t i = 0; i < numOfCols; ++i) {
|
||||
SColumnInfoData* pColInfo = taosArrayGet(pQueryHandle->pColumns, i);
|
||||
|
||||
|
@ -983,10 +1071,27 @@ static int tsdbReadRowsFromCache(SSkipListIterator* pIter, TSKEY maxKey, int max
|
|||
pData = pColInfo->pData + (maxRowsToRead - numOfRows - 1) * pColInfo->info.bytes;
|
||||
}
|
||||
|
||||
for(int32_t j = 0; j < numOfTableCols; ++j) {
|
||||
if (pColInfo->info.colId == pSchema->columns[j].colId) {
|
||||
offset = pSchema->columns[j].offset;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
assert(offset != -1); // todo handle error
|
||||
|
||||
if (pColInfo->info.type == TSDB_DATA_TYPE_BINARY || pColInfo->info.type == TSDB_DATA_TYPE_NCHAR) {
|
||||
void *value = tdGetRowDataOfCol(row, pColInfo->info.type, TD_DATA_ROW_HEAD_SIZE + offset);
|
||||
memcpy(pData, value, varDataTLen(value));
|
||||
|
||||
offset += sizeof(int32_t);
|
||||
} else {
|
||||
memcpy(pData, dataRowTuple(row) + offset, pColInfo->info.bytes);
|
||||
offset += pColInfo->info.bytes;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
numOfRows++;
|
||||
if (numOfRows >= maxRowsToRead) {
|
||||
break;
|
||||
|
@ -1050,7 +1155,7 @@ SDataBlockInfo tsdbRetrieveDataBlockInfo(TsdbQueryHandleT* pQueryHandle) {
|
|||
if (pTable->mem != NULL) {
|
||||
// create mem table iterator if it is not created yet
|
||||
assert(pCheckInfo->iter != NULL);
|
||||
rows = tsdbReadRowsFromCache(pCheckInfo->iter, pHandle->window.ekey, 4000, &skey, &ekey, pHandle);
|
||||
rows = tsdbReadRowsFromCache(pCheckInfo->iter, pCheckInfo->pTableObj, pHandle->window.ekey, 4000, &skey, &ekey, pHandle);
|
||||
|
||||
// update the last key value
|
||||
pCheckInfo->lastKey = ekey + step;
|
||||
|
@ -1059,7 +1164,7 @@ SDataBlockInfo tsdbRetrieveDataBlockInfo(TsdbQueryHandleT* pQueryHandle) {
|
|||
|
||||
SDataBlockInfo blockInfo = {
|
||||
.uid = pTable->tableId.uid,
|
||||
.sid = pTable->tableId.tid,
|
||||
.tid = pTable->tableId.tid,
|
||||
.rows = rows,
|
||||
.window = {.skey = MIN(skey, ekey), .ekey = MAX(skey, ekey)}
|
||||
};
|
||||
|
@ -1110,10 +1215,6 @@ SArray* tsdbRetrieveDataBlock(TsdbQueryHandleT* pQueryHandle, SArray* pIdList) {
|
|||
}
|
||||
}
|
||||
|
||||
int32_t tsdbResetQuery(TsdbQueryHandleT* pQueryHandle, STimeWindow* window, TsdbPosT position, int16_t order) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
SArray* tsdbRetrieveDataRow(TsdbQueryHandleT* pQueryHandle, SArray* pIdList, SQueryRowCond* pCond) { return NULL; }
|
||||
|
||||
TsdbQueryHandleT* tsdbQueryFromTagConds(STsdbQueryCond* pCond, int16_t stableId, const char* pTagFilterStr) {
|
||||
|
@ -1122,16 +1223,13 @@ TsdbQueryHandleT* tsdbQueryFromTagConds(STsdbQueryCond* pCond, int16_t stableId,
|
|||
|
||||
SArray* tsdbGetTableList(TsdbQueryHandleT* pQueryHandle) { return NULL; }
|
||||
|
||||
static int32_t getAllTableIdList(STsdbRepo* tsdb, int64_t uid, SArray* list) {
|
||||
STable* pTable = tsdbGetTableByUid(tsdbGetMeta(tsdb), uid);
|
||||
assert(pTable != NULL); // assert pTable is a super table
|
||||
|
||||
SSkipListIterator* iter = tSkipListCreateIter(pTable->pIndex);
|
||||
static int32_t getAllTableIdList(STable* pSuperTable, SArray* list) {
|
||||
SSkipListIterator* iter = tSkipListCreateIter(pSuperTable->pIndex);
|
||||
while (tSkipListIterNext(iter)) {
|
||||
SSkipListNode* pNode = tSkipListIterGet(iter);
|
||||
|
||||
STable* t = *(STable**)SL_GET_NODE_DATA(pNode);
|
||||
taosArrayPush(list, &t);
|
||||
taosArrayPush(list, &t->tableId);
|
||||
}
|
||||
|
||||
tSkipListDestroyIter(iter);
|
||||
|
@ -1156,7 +1254,7 @@ static void convertQueryResult(SArray* pRes, SArray* pTableList) {
|
|||
size_t size = taosArrayGetSize(pTableList);
|
||||
for (int32_t i = 0; i < size; ++i) {
|
||||
STable* pTable = taosArrayGetP(pTableList, i);
|
||||
taosArrayPush(pRes, &pTable);
|
||||
taosArrayPush(pRes, &pTable->tableId);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1165,27 +1263,31 @@ static void destroyHelper(void* param) {
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
tQueryInfo* pInfo = (tQueryInfo*)param;
|
||||
tVariantDestroy(&(pInfo->q));
|
||||
if (pInfo->optr != TSDB_RELATION_IN) {
|
||||
tfree(pInfo->q);
|
||||
}
|
||||
|
||||
// tVariantDestroy(&(pInfo->q));
|
||||
free(param);
|
||||
}
|
||||
|
||||
static void getTagColumnInfo(SExprTreeSupporter* pSupporter, SSchema* pSchema, int32_t* index) {
|
||||
*index = 0;
|
||||
|
||||
static int32_t getTagColumnInfo(SExprTreeSupporter* pSupporter, SSchema* pSchema) {
|
||||
// filter on table name(TBNAME)
|
||||
if (strcasecmp(pSchema->name, TSQL_TBNAME_L) == 0) {
|
||||
*index = TSDB_TBNAME_COLUMN_INDEX;
|
||||
return;
|
||||
return TSDB_TBNAME_COLUMN_INDEX;
|
||||
}
|
||||
|
||||
while ((*index) < pSupporter->numOfTags) {
|
||||
if (pSupporter->pTagSchema[*index].bytes == pSchema->bytes &&
|
||||
pSupporter->pTagSchema[*index].type == pSchema->type &&
|
||||
pSupporter->pTagSchema[*index].colId == pSchema->colId) {
|
||||
break;
|
||||
for(int32_t i = 0; i < pSupporter->numOfTags; ++i) {
|
||||
if (pSupporter->pTagSchema[i].bytes == pSchema->bytes &&
|
||||
pSupporter->pTagSchema[i].type == pSchema->type &&
|
||||
pSupporter->pTagSchema[i].colId == pSchema->colId) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -2;
|
||||
}
|
||||
|
||||
void filterPrepare(void* expr, void* param) {
|
||||
|
@ -1194,55 +1296,29 @@ void filterPrepare(void* expr, void* param) {
|
|||
return;
|
||||
}
|
||||
|
||||
int32_t i = 0, offset = 0;
|
||||
int32_t i = 0;
|
||||
pExpr->_node.info = calloc(1, sizeof(tQueryInfo));
|
||||
|
||||
tQueryInfo* pInfo = pExpr->_node.info;
|
||||
|
||||
SExprTreeSupporter* pSupporter = (SExprTreeSupporter*)param;
|
||||
|
||||
tQueryInfo* pInfo = pExpr->_node.info;
|
||||
tVariant* pCond = pExpr->_node.pRight->pVal;
|
||||
SSchema* pSchema = pExpr->_node.pLeft->pSchema;
|
||||
|
||||
getTagColumnInfo(pSupporter, pSchema, &i);
|
||||
assert((i >= 0 && i < TSDB_MAX_TAGS) || (i == TSDB_TBNAME_COLUMN_INDEX));
|
||||
assert((offset >= 0 && offset < TSDB_MAX_TAGS_LEN) || (offset == TSDB_TBNAME_COLUMN_INDEX));
|
||||
// todo : if current super table does not change schema yet, this function may failed, add test case
|
||||
int32_t index = getTagColumnInfo(pSupporter, pSchema);
|
||||
assert((index >= 0 && i < TSDB_MAX_TAGS) || (index == TSDB_TBNAME_COLUMN_INDEX));
|
||||
|
||||
pInfo->sch = *pSchema;
|
||||
pInfo->colIndex = i;
|
||||
pInfo->colIndex = index;
|
||||
pInfo->optr = pExpr->_node.optr;
|
||||
pInfo->compare = getComparFunc(pSchema->type, pCond->nType, pInfo->optr);
|
||||
pInfo->compare = getComparFunc(pSchema->type, pInfo->optr);
|
||||
|
||||
tVariantAssign(&pInfo->q, pCond);
|
||||
if (pInfo->optr != TSDB_RELATION_IN) {
|
||||
tVariantTypeSetType(&pInfo->q, pInfo->sch.type);
|
||||
}
|
||||
}
|
||||
|
||||
int32_t doCompare(const char* f1, const char* f2, int32_t type, size_t size) {
|
||||
switch (type) {
|
||||
case TSDB_DATA_TYPE_INT: DEFAULT_COMP(GET_INT32_VAL(f1), GET_INT32_VAL(f2));
|
||||
case TSDB_DATA_TYPE_DOUBLE: DEFAULT_COMP(GET_DOUBLE_VAL(f1), GET_DOUBLE_VAL(f2));
|
||||
case TSDB_DATA_TYPE_FLOAT: DEFAULT_COMP(GET_FLOAT_VAL(f1), GET_FLOAT_VAL(f2));
|
||||
case TSDB_DATA_TYPE_BIGINT: DEFAULT_COMP(GET_INT64_VAL(f1), GET_INT64_VAL(f2));
|
||||
case TSDB_DATA_TYPE_SMALLINT: DEFAULT_COMP(GET_INT16_VAL(f1), GET_INT16_VAL(f2));
|
||||
case TSDB_DATA_TYPE_TINYINT:
|
||||
case TSDB_DATA_TYPE_BOOL: DEFAULT_COMP(GET_INT8_VAL(f1), GET_INT8_VAL(f2));
|
||||
case TSDB_DATA_TYPE_NCHAR: {
|
||||
int32_t ret = wcsncmp((wchar_t*) f1, (wchar_t*) f2, size/TSDB_NCHAR_SIZE);
|
||||
if (ret == 0) {
|
||||
return ret;
|
||||
}
|
||||
return (ret < 0) ? -1 : 1;
|
||||
}
|
||||
default: {
|
||||
int32_t ret = strncmp(f1, f2, (size_t)size);
|
||||
if (ret == 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return (ret < 0) ? -1 : 1;
|
||||
}
|
||||
if (pInfo->optr == TSDB_RELATION_IN) {
|
||||
pInfo->q = (char*) pCond->arr;
|
||||
} else {
|
||||
pInfo->q = calloc(1, pSchema->bytes);
|
||||
tVariantDump(pCond, pInfo->q, pSchema->type);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1250,28 +1326,32 @@ typedef struct STableGroupSupporter {
|
|||
int32_t numOfCols;
|
||||
SColIndex* pCols;
|
||||
STSchema* pTagSchema;
|
||||
void* tsdbMeta;
|
||||
} STableGroupSupporter;
|
||||
|
||||
int32_t tableGroupComparFn(const void *p1, const void *p2, const void *param) {
|
||||
STableGroupSupporter* pTableGroupSupp = (STableGroupSupporter*) param;
|
||||
STableId* id1 = (STableId*) p1;
|
||||
STableId* id2 = (STableId*) p2;
|
||||
|
||||
STable *pTable1 = *(STable **) p1;
|
||||
STable *pTable2 = *(STable **) p2;
|
||||
STable *pTable1 = tsdbGetTableByUid(pTableGroupSupp->tsdbMeta, id1->uid);
|
||||
STable *pTable2 = tsdbGetTableByUid(pTableGroupSupp->tsdbMeta, id2->uid);
|
||||
|
||||
for (int32_t i = 0; i < pTableGroupSupp->numOfCols; ++i) {
|
||||
SColIndex* pColIndex = &pTableGroupSupp->pCols[i];
|
||||
int32_t colIndex = pColIndex->colIndex;
|
||||
|
||||
assert(colIndex >= 0 && colIndex < schemaNCols(pTableGroupSupp->pTagSchema));
|
||||
assert((colIndex >= 0 && colIndex < schemaNCols(pTableGroupSupp->pTagSchema)) ||
|
||||
(colIndex == TSDB_TBNAME_COLUMN_INDEX));
|
||||
|
||||
char * f1 = NULL;
|
||||
char * f2 = NULL;
|
||||
int32_t type = 0;
|
||||
int32_t bytes = 0;
|
||||
|
||||
if (colIndex == -1) { // todo fix me, table name
|
||||
// f1 = s1->tags;
|
||||
// f2 = s2->tags;
|
||||
if (colIndex == TSDB_TBNAME_COLUMN_INDEX) {
|
||||
f1 = pTable1->name;
|
||||
f2 = pTable2->name;
|
||||
type = TSDB_DATA_TYPE_BINARY;
|
||||
bytes = TSDB_TABLE_NAME_LEN;
|
||||
} else {
|
||||
|
@ -1293,34 +1373,36 @@ int32_t tableGroupComparFn(const void *p1, const void *p2, const void *param) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
void createTableGroupImpl(SArray* pGroups, STable** pTables, size_t numOfTables, STableGroupSupporter* pSupp, __ext_compar_fn_t compareFn) {
|
||||
SArray* g = taosArrayInit(16, sizeof(SPair));
|
||||
void createTableGroupImpl(SArray* pGroups, SArray* pTableIdList, size_t numOfTables, STableGroupSupporter* pSupp,
|
||||
__ext_compar_fn_t compareFn) {
|
||||
STableId* pId = taosArrayGet(pTableIdList, 0);
|
||||
|
||||
SPair p = {.first = pTables[0]};
|
||||
taosArrayPush(g, &p);
|
||||
SArray* g = taosArrayInit(16, sizeof(STableId));
|
||||
taosArrayPush(g, pId);
|
||||
|
||||
for (int32_t i = 1; i < numOfTables; ++i) {
|
||||
int32_t ret = compareFn(&pTables[i - 1], &pTables[i], pSupp);
|
||||
STableId* prev = taosArrayGet(pTableIdList, i - 1);
|
||||
STableId* p = taosArrayGet(pTableIdList, i);
|
||||
|
||||
int32_t ret = compareFn(prev, p, pSupp);
|
||||
assert(ret == 0 || ret == -1);
|
||||
|
||||
if (ret == 0) {
|
||||
SPair p1 = {.first = pTables[i]};
|
||||
taosArrayPush(g, &p1);
|
||||
taosArrayPush(g, p);
|
||||
} else {
|
||||
taosArrayPush(pGroups, &g); // current group is ended, start a new group
|
||||
g = taosArrayInit(16, POINTER_BYTES);
|
||||
g = taosArrayInit(16, sizeof(STableId));
|
||||
|
||||
SPair p1 = {.first = pTables[i]};
|
||||
taosArrayPush(g, &p1);
|
||||
taosArrayPush(g, p);
|
||||
}
|
||||
}
|
||||
|
||||
taosArrayPush(pGroups, &g);
|
||||
}
|
||||
|
||||
SArray* createTableGroup(SArray* pTableList, STSchema* pTagSchema, SColIndex* pCols, int32_t numOfOrderCols) {
|
||||
SArray* createTableGroup(SArray* pTableList, STSchema* pTagSchema, SColIndex* pCols, int32_t numOfOrderCols,
|
||||
TsdbRepoT* tsdb) {
|
||||
assert(pTableList != NULL);
|
||||
|
||||
SArray* pTableGroup = taosArrayInit(1, POINTER_BYTES);
|
||||
|
||||
size_t size = taosArrayGetSize(pTableList);
|
||||
|
@ -1330,23 +1412,23 @@ SArray* createTableGroup(SArray* pTableList, STSchema* pTagSchema, SColIndex* pC
|
|||
}
|
||||
|
||||
if (numOfOrderCols == 0 || size == 1) { // no group by tags clause or only one table
|
||||
SArray* sa = taosArrayInit(size, sizeof(SPair));
|
||||
SArray* sa = taosArrayInit(size, sizeof(STableId));
|
||||
for(int32_t i = 0; i < size; ++i) {
|
||||
STable* pTable = taosArrayGetP(pTableList, i);
|
||||
SPair p = {.first = pTable};
|
||||
taosArrayPush(sa, &p);
|
||||
STableId* tableId = taosArrayGet(pTableList, i);
|
||||
taosArrayPush(sa, tableId);
|
||||
}
|
||||
|
||||
taosArrayPush(pTableGroup, &sa);
|
||||
uTrace("all %d tables belong to one group", size);
|
||||
} else {
|
||||
STableGroupSupporter *pSupp = (STableGroupSupporter *) calloc(1, sizeof(STableGroupSupporter));
|
||||
pSupp->tsdbMeta = tsdbGetMeta(tsdb);
|
||||
pSupp->numOfCols = numOfOrderCols;
|
||||
pSupp->pTagSchema = pTagSchema;
|
||||
pSupp->pCols = pCols;
|
||||
|
||||
taosqsort(pTableList->pData, size, POINTER_BYTES, pSupp, tableGroupComparFn);
|
||||
createTableGroupImpl(pTableGroup, pTableList->pData, size, pSupp, tableGroupComparFn);
|
||||
taosqsort(pTableList->pData, size, sizeof(STableId), pSupp, tableGroupComparFn);
|
||||
createTableGroupImpl(pTableGroup, pTableList, size, pSupp, tableGroupComparFn);
|
||||
tfree(pSupp);
|
||||
}
|
||||
|
||||
|
@ -1371,14 +1453,14 @@ bool tSkipListNodeFilterCallback(const void* pNode, void* param) {
|
|||
int32_t ret = 0;
|
||||
if (type == TSDB_DATA_TYPE_BINARY || type == TSDB_DATA_TYPE_NCHAR) {
|
||||
if (pInfo->optr == TSDB_RELATION_IN) {
|
||||
ret = pInfo->compare(val, pInfo->q.arr);
|
||||
ret = pInfo->compare(val, pInfo->q);
|
||||
} else {
|
||||
ret = pInfo->compare(val, pInfo->q.pz);
|
||||
ret = pInfo->compare(val, pInfo->q);
|
||||
}
|
||||
} else {
|
||||
tVariant t = {0};
|
||||
tVariantCreateFromBinary(&t, val, (uint32_t)pInfo->sch.bytes, type);
|
||||
ret = pInfo->compare(&t.i64Key, &pInfo->q.i64Key);
|
||||
// tVariant t = {0};
|
||||
// tVariantCreateFromBinary(&t, val, (uint32_t)pInfo->sch.bytes, type);
|
||||
ret = pInfo->compare(val, pInfo->q);
|
||||
}
|
||||
|
||||
switch (pInfo->optr) {
|
||||
|
@ -1410,10 +1492,10 @@ bool tSkipListNodeFilterCallback(const void* pNode, void* param) {
|
|||
default:
|
||||
assert(false);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static int32_t doQueryTableList(STable* pSTable, SArray* pRes, tExprNode* pExpr) {
|
||||
// query according to the binary expression
|
||||
STSchema* pSchema = pSTable->tagSchema;
|
||||
|
@ -1441,34 +1523,29 @@ static int32_t doQueryTableList(STable* pSTable, SArray* pRes, tExprNode* pExpr)
|
|||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int32_t tsdbQueryByTagsCond(
|
||||
TsdbRepoT *tsdb,
|
||||
int64_t uid,
|
||||
const char *pTagCond,
|
||||
size_t len,
|
||||
int16_t tagNameRelType,
|
||||
const char* tbnameCond,
|
||||
STableGroupInfo *pGroupInfo,
|
||||
SColIndex *pColIndex,
|
||||
int32_t numOfCols
|
||||
) {
|
||||
STable* pSTable = tsdbGetTableByUid(tsdbGetMeta(tsdb), uid);
|
||||
if (pSTable == NULL) {
|
||||
uError("failed to get stable, uid:%" PRIu64, uid);
|
||||
int32_t tsdbQuerySTableByTagCond(TsdbRepoT *tsdb, int64_t uid, const char *pTagCond, size_t len, int16_t tagNameRelType,
|
||||
const char* tbnameCond, STableGroupInfo *pGroupInfo, SColIndex *pColIndex, int32_t numOfCols) {
|
||||
STable* pTable = tsdbGetTableByUid(tsdbGetMeta(tsdb), uid);
|
||||
if (pTable == NULL) {
|
||||
uError("failed to get stable, uid:%, %p" PRIu64, uid);
|
||||
return TSDB_CODE_INVALID_TABLE_ID;
|
||||
}
|
||||
|
||||
SArray* res = taosArrayInit(8, POINTER_BYTES);
|
||||
STSchema* pTagSchema = tsdbGetTableTagSchema(tsdbGetMeta(tsdb), pSTable);
|
||||
SArray* res = taosArrayInit(8, sizeof(STableId));
|
||||
STSchema* pTagSchema = tsdbGetTableTagSchema(tsdbGetMeta(tsdb), pTable);
|
||||
|
||||
// no tags and tbname condition, all child tables of this stable are involved
|
||||
if (tbnameCond == NULL && (pTagCond == NULL || len == 0)) {
|
||||
int32_t ret = getAllTableIdList(tsdb, uid, res);
|
||||
int32_t ret = getAllTableIdList(pTable, res);
|
||||
if (ret == TSDB_CODE_SUCCESS) {
|
||||
pGroupInfo->numOfTables = taosArrayGetSize(res);
|
||||
pGroupInfo->pGroupList = createTableGroup(res, pTagSchema, pColIndex, numOfCols);
|
||||
pGroupInfo->pGroupList = createTableGroup(res, pTagSchema, pColIndex, numOfCols, tsdb);
|
||||
|
||||
uTrace("no tbname condition or tagcond, all tables belongs to one group, numOfTables:%d", pGroupInfo->numOfTables);
|
||||
} else {
|
||||
// todo add error
|
||||
}
|
||||
|
||||
taosArrayDestroy(res);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1504,9 +1581,9 @@ int32_t tsdbQueryByTagsCond(
|
|||
// TODO: more error handling
|
||||
} END_TRY
|
||||
|
||||
doQueryTableList(pSTable, res, expr);
|
||||
doQueryTableList(pTable, res, expr);
|
||||
pGroupInfo->numOfTables = taosArrayGetSize(res);
|
||||
pGroupInfo->pGroupList = createTableGroup(res, pTagSchema, pColIndex, numOfCols);
|
||||
pGroupInfo->pGroupList = createTableGroup(res, pTagSchema, pColIndex, numOfCols, tsdb);
|
||||
|
||||
taosArrayDestroy(res);
|
||||
return ret;
|
||||
|
@ -1522,9 +1599,9 @@ int32_t tsdbGetOneTableGroup(TsdbRepoT* tsdb, int64_t uid, STableGroupInfo* pGro
|
|||
pGroupInfo->numOfTables = 1;
|
||||
pGroupInfo->pGroupList = taosArrayInit(1, POINTER_BYTES);
|
||||
|
||||
SArray* group = taosArrayInit(1, POINTER_BYTES);
|
||||
SArray* group = taosArrayInit(1, sizeof(STableId));
|
||||
|
||||
taosArrayPush(group, &pTable);
|
||||
taosArrayPush(group, &pTable->tableId);
|
||||
taosArrayPush(pGroupInfo->pGroupList, &group);
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
@ -1546,12 +1623,10 @@ void tsdbCleanupQueryHandle(TsdbQueryHandleT queryHandle) {
|
|||
}
|
||||
|
||||
tfree(pTableCheckInfo->pDataCols);
|
||||
|
||||
tfree(pTableCheckInfo->pCompInfo);
|
||||
}
|
||||
|
||||
taosArrayDestroy(pQueryHandle->pTableCheckInfo);
|
||||
tfree(pQueryHandle->compIndex);
|
||||
|
||||
size_t cols = taosArrayGetSize(pQueryHandle->pColumns);
|
||||
for (int32_t i = 0; i < cols; ++i) {
|
||||
|
|
|
@ -98,13 +98,13 @@ void taosArrayRemove(SArray* pArray, size_t index);
|
|||
* @param pDst
|
||||
* @param pSrc
|
||||
*/
|
||||
void taosArrayCopy(SArray* pDst, SArray* pSrc);
|
||||
void taosArrayCopy(SArray* pDst, const SArray* pSrc);
|
||||
|
||||
/**
|
||||
* clone a new array
|
||||
* @param pSrc
|
||||
*/
|
||||
SArray* taosArrayClone(SArray* pSrc);
|
||||
SArray* taosArrayClone(const SArray* pSrc);
|
||||
|
||||
/**
|
||||
* destroy array list
|
||||
|
|
|
@ -69,6 +69,7 @@ typedef struct {
|
|||
SHashObj * pHashTable;
|
||||
int numOfElemsInTrash; // number of element in trash
|
||||
int16_t deleting; // set the deleting flag to stop refreshing ASAP.
|
||||
T_REF_DECLARE()
|
||||
|
||||
#if defined(LINUX)
|
||||
pthread_rwlock_t lock;
|
||||
|
|
|
@ -38,9 +38,11 @@ int patternMatch(const char *zPattern, const char *zString, size_t size, const S
|
|||
|
||||
int WCSPatternMatch(const wchar_t *zPattern, const wchar_t *zString, size_t size, const SPatternCompareInfo *pInfo);
|
||||
|
||||
int32_t doCompare(const char* f1, const char* f2, int32_t type, size_t size);
|
||||
|
||||
__compar_fn_t getKeyComparFunc(int32_t keyType);
|
||||
|
||||
__compar_fn_t getComparFunc(int32_t type, int32_t filterDataType, int32_t optr);
|
||||
__compar_fn_t getComparFunc(int32_t type, int32_t optr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -110,11 +110,6 @@ extern "C" {
|
|||
|
||||
#define POW2(x) ((x) * (x))
|
||||
|
||||
typedef struct SPair {
|
||||
void* first;
|
||||
void* sec;
|
||||
} SPair;
|
||||
|
||||
int32_t strdequote(char *src);
|
||||
|
||||
void strtrim(char *src);
|
||||
|
@ -149,7 +144,7 @@ void getTmpfilePath(const char *fileNamePattern, char *dstPath);
|
|||
int32_t taosInitTimer(void (*callback)(int), int32_t ms);
|
||||
void taosUninitTimer();
|
||||
|
||||
bool taosMbsToUcs4(char *mbs, int32_t mbs_len, char *ucs4, int32_t ucs4_max_len);
|
||||
bool taosMbsToUcs4(char *mbs, int32_t mbs_len, char *ucs4, int32_t ucs4_max_len, int32_t* len);
|
||||
|
||||
int tasoUcs4Compare(void* f1_ucs4, void *f2_ucs4, int bytes);
|
||||
|
||||
|
|
|
@ -143,7 +143,7 @@ void taosArrayRemove(SArray* pArray, size_t index) {
|
|||
pArray->size -= 1;
|
||||
}
|
||||
|
||||
void taosArrayCopy(SArray* pDst, SArray* pSrc) {
|
||||
void taosArrayCopy(SArray* pDst, const SArray* pSrc) {
|
||||
assert(pSrc != NULL && pDst != NULL);
|
||||
|
||||
if (pDst->capacity < pSrc->size) {
|
||||
|
@ -162,7 +162,7 @@ void taosArrayCopy(SArray* pDst, SArray* pSrc) {
|
|||
pDst->size = pSrc->size;
|
||||
}
|
||||
|
||||
SArray* taosArrayClone(SArray* pSrc) {
|
||||
SArray* taosArrayClone(const SArray* pSrc) {
|
||||
assert(pSrc != NULL);
|
||||
|
||||
if (pSrc->size == 0) { // empty array list
|
||||
|
@ -176,7 +176,6 @@ SArray* taosArrayClone(SArray* pSrc) {
|
|||
return dst;
|
||||
}
|
||||
|
||||
|
||||
void taosArrayDestroy(SArray* pArray) {
|
||||
if (pArray == NULL) {
|
||||
return;
|
||||
|
|
|
@ -79,7 +79,7 @@ static FORCE_INLINE void taosFreeNode(void *data) {
|
|||
*/
|
||||
static SCacheDataNode *taosCreateHashNode(const char *key, size_t keyLen, const char *pData, size_t size,
|
||||
uint64_t duration) {
|
||||
size_t totalSize = size + sizeof(SCacheDataNode) + keyLen;
|
||||
size_t totalSize = size + sizeof(SCacheDataNode) + keyLen + 1;
|
||||
|
||||
SCacheDataNode *pNewNode = calloc(1, totalSize);
|
||||
if (pNewNode == NULL) {
|
||||
|
@ -324,13 +324,26 @@ static void doCleanupDataCache(SCacheObj *pCacheObj) {
|
|||
static void taosCacheRefresh(void *handle, void *tmrId) {
|
||||
SCacheObj *pCacheObj = (SCacheObj *)handle;
|
||||
|
||||
if (pCacheObj == NULL || taosHashGetSize(pCacheObj->pHashTable) == 0) {
|
||||
if (pCacheObj == NULL || T_REF_VAL_GET(pCacheObj) == 0) {
|
||||
uTrace("object is destroyed. no refresh retry");
|
||||
return;
|
||||
}
|
||||
|
||||
if (pCacheObj->deleting == 1) {
|
||||
int16_t ref = T_REF_INC(pCacheObj);
|
||||
if (ref == 1) {
|
||||
T_REF_DEC(pCacheObj);
|
||||
return;
|
||||
}
|
||||
|
||||
// todo add the ref before start the timer
|
||||
int32_t num = taosHashGetSize(pCacheObj->pHashTable);
|
||||
if (num == 0) {
|
||||
ref = T_REF_DEC(pCacheObj);
|
||||
if (ref == 0) {
|
||||
doCleanupDataCache(pCacheObj);
|
||||
} else {
|
||||
taosTmrReset(taosCacheRefresh, pCacheObj->refreshTime, pCacheObj, pCacheObj->tmrCtrl, &pCacheObj->pTimer);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -356,10 +369,13 @@ static void taosCacheRefresh(void *handle, void *tmrId) {
|
|||
|
||||
taosHashDestroyIter(pIter);
|
||||
|
||||
if (pCacheObj->deleting == 1) { // clean up resources and abort
|
||||
doCleanupDataCache(pCacheObj);
|
||||
} else {
|
||||
taosTrashEmpty(pCacheObj, false);
|
||||
|
||||
ref = T_REF_DEC(pCacheObj);
|
||||
if (ref == 0) {
|
||||
doCleanupDataCache(pCacheObj);
|
||||
return;
|
||||
} else {
|
||||
taosTmrReset(taosCacheRefresh, pCacheObj->refreshTime, pCacheObj, pCacheObj->tmrCtrl, &pCacheObj->pTimer);
|
||||
}
|
||||
}
|
||||
|
@ -399,6 +415,7 @@ SCacheObj *taosCacheInit(void *tmrCtrl, int64_t refreshTime) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
T_REF_INC(pCacheObj);
|
||||
return pCacheObj;
|
||||
}
|
||||
|
||||
|
@ -552,5 +569,8 @@ void taosCacheCleanup(SCacheObj *pCacheObj) {
|
|||
return;
|
||||
}
|
||||
|
||||
pCacheObj->deleting = 1;
|
||||
int32_t ref = T_REF_DEC(pCacheObj);
|
||||
if (ref == 0) {
|
||||
doCleanupDataCache(pCacheObj);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -232,55 +232,42 @@ static UNUSED_FUNC int32_t compareWStrPatternComp(const void* pLeft, const void*
|
|||
}
|
||||
|
||||
// todo promote the type definition before the comparsion
|
||||
__compar_fn_t getComparFunc(int32_t type, int32_t filterDataType, int32_t optr) {
|
||||
__compar_fn_t getComparFunc(int32_t type, int32_t optr) {
|
||||
__compar_fn_t comparFn = NULL;
|
||||
|
||||
switch (type) {
|
||||
case TSDB_DATA_TYPE_TINYINT:
|
||||
case TSDB_DATA_TYPE_SMALLINT:
|
||||
case TSDB_DATA_TYPE_INT:
|
||||
case TSDB_DATA_TYPE_SMALLINT: {
|
||||
comparFn = compareInt16Val; break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_INT: {
|
||||
comparFn = compareInt32Val; break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_BIGINT:
|
||||
case TSDB_DATA_TYPE_TIMESTAMP: {
|
||||
// assert(type == filterDataType);
|
||||
if (filterDataType == TSDB_DATA_TYPE_BIGINT || filterDataType == TSDB_DATA_TYPE_TIMESTAMP) {
|
||||
comparFn = compareInt64Val;
|
||||
} else if (filterDataType >= TSDB_DATA_TYPE_FLOAT && filterDataType <= TSDB_DATA_TYPE_DOUBLE) {
|
||||
comparFn = compareIntDoubleVal;
|
||||
comparFn = compareInt64Val; break;
|
||||
}
|
||||
|
||||
break;
|
||||
case TSDB_DATA_TYPE_BOOL:
|
||||
case TSDB_DATA_TYPE_TINYINT:{
|
||||
comparFn = compareInt8Val; break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_BOOL: {
|
||||
if (filterDataType >= TSDB_DATA_TYPE_BOOL && filterDataType <= TSDB_DATA_TYPE_BIGINT) {
|
||||
comparFn = compareInt32Val;
|
||||
} else if (filterDataType >= TSDB_DATA_TYPE_FLOAT && filterDataType <= TSDB_DATA_TYPE_DOUBLE) {
|
||||
comparFn = compareIntDoubleVal;
|
||||
}
|
||||
break;
|
||||
case TSDB_DATA_TYPE_FLOAT: {
|
||||
comparFn = compareDoubleVal; break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_FLOAT:
|
||||
case TSDB_DATA_TYPE_DOUBLE: {
|
||||
if (filterDataType >= TSDB_DATA_TYPE_BOOL && filterDataType <= TSDB_DATA_TYPE_BIGINT) {
|
||||
comparFn = compareDoubleIntVal;
|
||||
} else if (filterDataType >= TSDB_DATA_TYPE_FLOAT && filterDataType <= TSDB_DATA_TYPE_DOUBLE) {
|
||||
comparFn = compareDoubleVal;
|
||||
}
|
||||
break;
|
||||
comparFn = compareDoubleVal; break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_BINARY: {
|
||||
if (optr == TSDB_RELATION_LIKE) { /* wildcard query using like operator */
|
||||
assert(filterDataType == TSDB_DATA_TYPE_BINARY);
|
||||
comparFn = compareStrPatternComp;
|
||||
|
||||
} else if (optr == TSDB_RELATION_IN) {
|
||||
assert(filterDataType == TSDB_DATA_TYPE_ARRAY);
|
||||
comparFn = compareFindStrInArray;
|
||||
|
||||
} else { /* normal relational comparFn */
|
||||
assert(filterDataType == TSDB_DATA_TYPE_BINARY);
|
||||
comparFn = compareStrVal;
|
||||
}
|
||||
|
||||
|
@ -288,8 +275,6 @@ __compar_fn_t getComparFunc(int32_t type, int32_t filterDataType, int32_t optr)
|
|||
}
|
||||
|
||||
case TSDB_DATA_TYPE_NCHAR: {
|
||||
assert(filterDataType == TSDB_DATA_TYPE_NCHAR);
|
||||
|
||||
if (optr == TSDB_RELATION_LIKE) {
|
||||
comparFn = compareWStrPatternComp;
|
||||
} else {
|
||||
|
@ -348,3 +333,30 @@ __compar_fn_t getKeyComparFunc(int32_t keyType) {
|
|||
|
||||
return comparFn;
|
||||
}
|
||||
|
||||
int32_t doCompare(const char* f1, const char* f2, int32_t type, size_t size) {
|
||||
switch (type) {
|
||||
case TSDB_DATA_TYPE_INT: DEFAULT_COMP(GET_INT32_VAL(f1), GET_INT32_VAL(f2));
|
||||
case TSDB_DATA_TYPE_DOUBLE: DEFAULT_COMP(GET_DOUBLE_VAL(f1), GET_DOUBLE_VAL(f2));
|
||||
case TSDB_DATA_TYPE_FLOAT: DEFAULT_COMP(GET_FLOAT_VAL(f1), GET_FLOAT_VAL(f2));
|
||||
case TSDB_DATA_TYPE_BIGINT: DEFAULT_COMP(GET_INT64_VAL(f1), GET_INT64_VAL(f2));
|
||||
case TSDB_DATA_TYPE_SMALLINT: DEFAULT_COMP(GET_INT16_VAL(f1), GET_INT16_VAL(f2));
|
||||
case TSDB_DATA_TYPE_TINYINT:
|
||||
case TSDB_DATA_TYPE_BOOL: DEFAULT_COMP(GET_INT8_VAL(f1), GET_INT8_VAL(f2));
|
||||
case TSDB_DATA_TYPE_NCHAR: {
|
||||
int32_t ret = wcsncmp((wchar_t*) f1, (wchar_t*) f2, size/TSDB_NCHAR_SIZE);
|
||||
if (ret == 0) {
|
||||
return ret;
|
||||
}
|
||||
return (ret < 0) ? -1 : 1;
|
||||
}
|
||||
default: {
|
||||
int32_t ret = strncmp(f1, f2, (size_t)size);
|
||||
if (ret == 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return (ret < 0) ? -1 : 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -325,7 +325,7 @@ SArray* tSkipListGet(SSkipList *pSkipList, SSkipListKey pKey, int16_t keyType) {
|
|||
pSkipList->state.queryCount++;
|
||||
#endif
|
||||
|
||||
__compar_fn_t filterComparFn = getComparFunc(pSkipList->keyInfo.type, keyType, 0);
|
||||
__compar_fn_t filterComparFn = getComparFunc(pSkipList->keyInfo.type, 0);
|
||||
int32_t ret = -1;
|
||||
for (int32_t i = sLevel; i >= 0; --i) {
|
||||
SSkipListNode *p = SL_GET_FORWARD_POINTER(pNode, i);
|
||||
|
@ -389,7 +389,7 @@ SSkipListIterator *tSkipListCreateIterFromVal(SSkipList* pSkipList, const char*
|
|||
SSkipListNode *forward[MAX_SKIP_LIST_LEVEL] = {0};
|
||||
|
||||
int32_t ret = -1;
|
||||
__compar_fn_t filterComparFn = getComparFunc(pSkipList->keyInfo.type, type, 0);
|
||||
__compar_fn_t filterComparFn = getKeyComparFunc(pSkipList->keyInfo.type);
|
||||
SSkipListNode* pNode = pSkipList->pHead;
|
||||
|
||||
for (int32_t i = pSkipList->level - 1; i >= 0; --i) {
|
||||
|
|
|
@ -490,7 +490,7 @@ bool taosUcs4ToMbs(void *ucs4, int32_t ucs4_max_len, char *mbs) {
|
|||
#endif
|
||||
}
|
||||
|
||||
bool taosMbsToUcs4(char *mbs, int32_t mbs_len, char *ucs4, int32_t ucs4_max_len) {
|
||||
bool taosMbsToUcs4(char *mbs, int32_t mbs_len, char *ucs4, int32_t ucs4_max_len, int32_t* len) {
|
||||
memset(ucs4, 0, ucs4_max_len);
|
||||
#ifdef USE_LIBICONV
|
||||
iconv_t cd = iconv_open(DEFAULT_UNICODE_ENCODEC, tsCharset);
|
||||
|
@ -501,6 +501,10 @@ bool taosMbsToUcs4(char *mbs, int32_t mbs_len, char *ucs4, int32_t ucs4_max_len)
|
|||
return false;
|
||||
}
|
||||
iconv_close(cd);
|
||||
if (len != NULL) {
|
||||
*len = outLen;
|
||||
}
|
||||
|
||||
return true;
|
||||
#else
|
||||
mbstate_t state = {0};
|
||||
|
|
|
@ -25,7 +25,7 @@ TEST(testCase, client_cache_test) {
|
|||
const char* key1 = "test1";
|
||||
char data1[] = "test11";
|
||||
|
||||
char* cachedObj = (char*) taosCachePut(tscCacheHandle, key1, data1, strlen(data1), 1);
|
||||
char* cachedObj = (char*) taosCachePut(tscCacheHandle, key1, data1, strlen(data1)+1, 1);
|
||||
sleep(REFRESH_TIME_IN_SEC+1);
|
||||
|
||||
printf("obj is still valid: %s\n", cachedObj);
|
||||
|
@ -34,19 +34,17 @@ TEST(testCase, client_cache_test) {
|
|||
taosCacheRelease(tscCacheHandle, (void**) &cachedObj, false);
|
||||
|
||||
/* the object is cleared by cache clean operation */
|
||||
cachedObj = (char*) taosCachePut(tscCacheHandle, key1, data2, strlen(data2), 20);
|
||||
cachedObj = (char*) taosCachePut(tscCacheHandle, key1, data2, strlen(data2)+1, 20);
|
||||
printf("after updated: %s\n", cachedObj);
|
||||
|
||||
printf("start to remove data from cache\n");
|
||||
taosCacheRelease(tscCacheHandle, (void**) &cachedObj, false);
|
||||
printf("end of removing data from cache\n");
|
||||
|
||||
getchar();
|
||||
|
||||
const char* key3 = "test2";
|
||||
const char* data3 = "kkkkkkk";
|
||||
|
||||
char* cachedObj2 = (char*) taosCachePut(tscCacheHandle, key3, data3, strlen(data3), 1);
|
||||
char* cachedObj2 = (char*) taosCachePut(tscCacheHandle, key3, data3, strlen(data3) + 1, 1);
|
||||
printf("%s\n", cachedObj2);
|
||||
|
||||
taosCacheRelease(tscCacheHandle, (void**) &cachedObj2, false);
|
||||
|
@ -57,18 +55,18 @@ TEST(testCase, client_cache_test) {
|
|||
|
||||
char key5[] = "test5";
|
||||
char data5[] = "data5kkkkk";
|
||||
cachedObj2 = (char*) taosCachePut(tscCacheHandle, key5, data5, strlen(data5), 20);
|
||||
cachedObj2 = (char*) taosCachePut(tscCacheHandle, key5, data5, strlen(data5) + 1, 20);
|
||||
|
||||
const char* data6= "new Data after updated";
|
||||
taosCacheRelease(tscCacheHandle, (void**) &cachedObj2, false);
|
||||
|
||||
cachedObj2 = (char*) taosCachePut(tscCacheHandle, key5, data6, strlen(data6), 20);
|
||||
cachedObj2 = (char*) taosCachePut(tscCacheHandle, key5, data6, strlen(data6) + 1, 20);
|
||||
printf("%s\n", cachedObj2);
|
||||
|
||||
taosCacheRelease(tscCacheHandle, (void**) &cachedObj2, true);
|
||||
|
||||
const char* data7 = "add call update procedure";
|
||||
cachedObj2 = (char*) taosCachePut(tscCacheHandle, key5, data7, strlen(data7), 20);
|
||||
cachedObj2 = (char*) taosCachePut(tscCacheHandle, key5, data7, strlen(data7) + 1, 20);
|
||||
printf("%s\n=======================================\n\n", cachedObj2);
|
||||
|
||||
char* cc = (char*) taosCacheAcquireByName(tscCacheHandle, key5);
|
||||
|
@ -137,6 +135,4 @@ TEST(testCase, cache_resize_test) {
|
|||
printf("retrieve %d object cost:%" PRIu64 " us,avg:%f\n", num, endTime - startTime, (endTime - startTime)/(double)num);
|
||||
|
||||
taosCacheCleanup(pCache);
|
||||
taosMsleep(20000);
|
||||
getchar();
|
||||
}
|
|
@ -140,6 +140,8 @@ int32_t vnodeDrop(int32_t vgId) {
|
|||
|
||||
int32_t vnodeAlter(void *param, SMDCreateVnodeMsg *pVnodeCfg) {
|
||||
SVnodeObj *pVnode = param;
|
||||
pVnode->status = TAOS_VN_STATUS_UPDATING;
|
||||
|
||||
int32_t code = vnodeSaveCfg(pVnodeCfg);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
dError("vgId:%d, failed to save vnode cfg, reason:%s", pVnodeCfg->cfg.vgId, tstrerror(code));
|
||||
|
@ -167,6 +169,8 @@ int32_t vnodeAlter(void *param, SMDCreateVnodeMsg *pVnodeCfg) {
|
|||
return code;
|
||||
}
|
||||
|
||||
pVnode->status = TAOS_VN_STATUS_READY;
|
||||
|
||||
dTrace("pVnode:%p vgId:%d, vnode is altered", pVnode, pVnode->vgId);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, void *pCont, int32_t cont
|
|||
|
||||
qinfo_t pQInfo = NULL;
|
||||
if (contLen != 0) {
|
||||
pRet->code = qCreateQueryInfo(pVnode->tsdb, pQueryTableMsg, &pQInfo);
|
||||
pRet->code = qCreateQueryInfo(pVnode->tsdb, pVnode->vgId, pQueryTableMsg, &pQInfo);
|
||||
|
||||
SQueryTableRsp *pRsp = (SQueryTableRsp *) rpcMallocCont(sizeof(SQueryTableRsp));
|
||||
pRsp->qhandle = htobe64((uint64_t) (pQInfo));
|
||||
|
|
|
@ -51,7 +51,7 @@ int32_t vnodeProcessWrite(void *param1, int qtype, void *param2, void *item) {
|
|||
if (vnodeProcessWriteMsgFp[pHead->msgType] == NULL)
|
||||
return TSDB_CODE_MSG_NOT_PROCESSED;
|
||||
|
||||
if (pVnode->status == TAOS_VN_STATUS_DELETING || pVnode->status == TAOS_VN_STATUS_CLOSING)
|
||||
if (pVnode->status != TAOS_VN_STATUS_READY)
|
||||
return TSDB_CODE_NOT_ACTIVE_VNODE;
|
||||
|
||||
if (pHead->version == 0) { // from client
|
||||
|
@ -136,6 +136,7 @@ static int32_t vnodeProcessCreateTableMsg(SVnodeObj *pVnode, void *pCont, SRspRe
|
|||
}
|
||||
tsdbTableSetTagSchema(&tCfg, pDestTagSchema, false);
|
||||
tsdbTableSetSName(&tCfg, pTable->superTableId, false);
|
||||
tsdbTableSetSuperUid(&tCfg, htobe64(pTable->superTableUid));
|
||||
|
||||
char *pTagData = pTable->data + totalCols * sizeof(SSchema);
|
||||
int accumBytes = 0;
|
||||
|
|
|
@ -75,7 +75,15 @@ int main(int argc, char *argv[]) {
|
|||
|
||||
doQuery(taos, "create database if not exists test");
|
||||
doQuery(taos, "use test");
|
||||
doQuery(taos, "select count(*),k,sum(k) from m1 group by k");
|
||||
doQuery(taos, "select * from t1 order by ts desc");
|
||||
|
||||
// doQuery(taos, "create table t1(ts timestamp, k binary(12), f nchar(2))");
|
||||
// for(int32_t i = 0; i< 100000; ++i) {
|
||||
// doQuery(taos, "select m1.ts,m1.a from m1, m2 where m1.ts=m2.ts and m1.a=m2.b;");
|
||||
// usleep(500000);
|
||||
// }
|
||||
|
||||
// doQuery(taos, "insert into tm0 values('2020-1-1 1:1:1', 'abc')");
|
||||
// doQuery(taos, "create table if not exists tm0 (ts timestamp, k int);");
|
||||
// doQuery(taos, "insert into tm0 values('2020-1-1 1:1:1', 1);");
|
||||
// doQuery(taos, "insert into tm0 values('2020-1-1 1:1:2', 2);");
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
sleep 5000
|
||||
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/cfg.sh -n dnode1 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 0
|
||||
system sh/cfg.sh -n dnode1 -c http -v 1
|
||||
system sh/cfg.sh -n dnode1 -c httpEnableRecordSql -v 1
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
#sleep 5000
|
||||
|
||||
|
||||
sleep 5000
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 0
|
||||
system sh/cfg.sh -n dnode1 -c http -v 1
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
|
||||
#sleep 3000
|
||||
|
@ -14,57 +12,57 @@ print ============================ dnode1 start
|
|||
|
||||
print =============== step1 - login
|
||||
|
||||
system_content curl 192.168.0.1:6020/rest/
|
||||
system_content curl 127.0.0.1:6020/rest/
|
||||
print 1-> $system_content
|
||||
if $system_content != @{"status":"error","code":1011,"desc":"no auth info input"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl 192.168.0.1:6020/rest/xx
|
||||
system_content curl 127.0.0.1:6020/rest/xx
|
||||
print 2-> $system_content
|
||||
if $system_content != @{"status":"error","code":1011,"desc":"no auth info input"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl 192.168.0.1:6020/rest/login
|
||||
system_content curl 127.0.0.1:6020/rest/login
|
||||
print 3-> $system_content
|
||||
if $system_content != @{"status":"error","code":1011,"desc":"no auth info input"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#4
|
||||
system_content curl 192.168.0.1:6020/rest/login/root
|
||||
system_content curl 127.0.0.1:6020/rest/login/root
|
||||
print 4-> $system_content
|
||||
if $system_content != @{"status":"error","code":1011,"desc":"no auth info input"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl 192.168.0.1:6020/rest/login/root/123
|
||||
system_content curl 127.0.0.1:6020/rest/login/root/123
|
||||
print 5-> $system_content
|
||||
if $system_content != @{"status":"error","code":1000,"desc":"auth failure"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl 192.168.0.1:6020/rest/login/root/123/1/1/3
|
||||
system_content curl 127.0.0.1:6020/rest/login/root/123/1/1/3
|
||||
print 6-> $system_content
|
||||
if $system_content != @{"status":"error","code":1000,"desc":"auth failure"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'show databases' 192.168.0.1:6020/rest/login/root/1
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'show databases' 127.0.0.1:6020/rest/login/root/1
|
||||
print 7-> $system_content
|
||||
if $system_content != @{"status":"error","code":1000,"desc":"auth failure"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#8
|
||||
system_content curl -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ3d3cudGFvc2RhdGEuY29tIiwicGFzcyI6InRhb3NkYXRhIiwic3ViIjoicm9vdCJ9.xPv3b5odlR7YF8G_QWASjIRbMtA5v4ItToJ35fFgi' -d 'show databases' 192.168.0.1:6020/rest/login/root/1
|
||||
system_content curl -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ3d3cudGFvc2RhdGEuY29tIiwicGFzcyI6InRhb3NkYXRhIiwic3ViIjoicm9vdCJ9.xPv3b5odlR7YF8G_QWASjIRbMtA5v4ItToJ35fFgi' -d 'show databases' 127.0.0.1:6020/rest/login/root/1
|
||||
print 8-> $system_content
|
||||
if $system_content != @{"status":"error","code":1010,"desc":"invalid type of Authorization"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl -H 'Authorization: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ3d3cudGFvc2RhdGEuY29tIiwicGFzcyI6InRhb3NkYXRhIiwic3ViIjoicm9vdCJ9.xPv3b5odlR7YF8G_QWASjIRbMtA5v4ItToJ35fFgi' -d 'show databases' 192.168.0.1:6020/rest/login/root/1
|
||||
system_content curl -H 'Authorization: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ3d3cudGFvc2RhdGEuY29tIiwicGFzcyI6InRhb3NkYXRhIiwic3ViIjoicm9vdCJ9.xPv3b5odlR7YF8G_QWASjIRbMtA5v4ItToJ35fFgi' -d 'show databases' 127.0.0.1:6020/rest/login/root/1
|
||||
print 9-> $system_content
|
||||
if $system_content != @{"status":"error","code":1010,"desc":"invalid type of Authorization"}@ then
|
||||
return -1
|
||||
|
@ -72,7 +70,7 @@ endi
|
|||
|
||||
sleep 3000
|
||||
|
||||
system_content curl 192.168.0.1:6020/rest/login/root/taosdata/
|
||||
system_content curl 127.0.0.1:6020/rest/login/root/taosdata/
|
||||
print 10-> $system_content
|
||||
if $system_content != @{"status":"succ","code":0,"desc":"/KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04"}@ then
|
||||
return -1
|
||||
|
@ -81,52 +79,52 @@ endi
|
|||
print =============== step2 - no db
|
||||
|
||||
#11
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'show databases' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'show databases' 127.0.0.1:6020/rest/sql
|
||||
print 11-> $system_content
|
||||
if $system_content != @{"status":"succ","head":["name","create time","ntables","vgroups","replica","days","keep1,keep2,keep(D)","tables","cache(MB)","blocks","minrows","maxrows","ctime(s)","clog","comp","precision","status"],"data":[],"rows":0}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'create database d1' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'create database d1' 127.0.0.1:6020/rest/sql
|
||||
print 12-> $system_content
|
||||
if $system_content != @{"status":"succ","head":["affected_rows"],"data":[[0]],"rows":0}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'create database d1' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'create database d1' 127.0.0.1:6020/rest/sql
|
||||
print 13-> $system_content
|
||||
if $system_content != @{"status":"error","code":1000,"desc":"DB already there"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#14
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d '' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d '' 127.0.0.1:6020/rest/sql
|
||||
print 14-> $system_content
|
||||
if $system_content != @{"status":"error","code":1012,"desc":"no sql input"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'use d1' 192.168.0.1:6020/rest/sql
|
||||
#system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'use d1' 127.0.0.1:6020/rest/sql
|
||||
#print 15-> $system_content
|
||||
#if $system_content != @{"status":"error","code":1017,"desc":"no need to execute use db cmd"}@ then
|
||||
#if $system_content != @{"status":"succ","head":["affected_rows"],"data":[[1]],"rows":1}@ then
|
||||
# return -1
|
||||
#endi
|
||||
|
||||
#system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' use d1' 192.168.0.1:6020/rest/sql
|
||||
#system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' use d1' 127.0.0.1:6020/rest/sql
|
||||
#print 16-> $system_content
|
||||
#if $system_content != @{"status":"error","code":1017,"desc":"no need to execute use db cmd"}@ then
|
||||
# return -1
|
||||
#endi
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' used1' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' used1' 127.0.0.1:6020/rest/sql
|
||||
print 17-> $system_content
|
||||
if $system_content != @{"status":"error","code":1000,"desc":"invalid SQL: invalid SQL: syntax error near 'used1'"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#18
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' show tables;' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' show tables;' 127.0.0.1:6020/rest/sql
|
||||
print 18-> $system_content
|
||||
if $system_content != @{"status":"error","code":1000,"desc":"db not selected"}@ then
|
||||
return -1
|
||||
|
@ -135,44 +133,44 @@ endi
|
|||
print =============== step3 - db
|
||||
|
||||
#19
|
||||
#system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' show tables;' 192.168.0.1:6020/rest/sql/d4
|
||||
#system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' show tables;' 127.0.0.1:6020/rest/sql/d4
|
||||
#print 19-> $system_content
|
||||
#if $system_content != @{"status":"error","code":1000,"desc":"invalid DB"}@ then
|
||||
# return -1
|
||||
#endi
|
||||
|
||||
#system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' show tables;' 192.168.0.1:6020/rest/sql/d1
|
||||
#system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' show tables;' 127.0.0.1:6020/rest/sql/d1
|
||||
#print 20-> $system_content
|
||||
#if $system_content != @{"status":"succ","head":["name","created time","columns","metric"],"data":[],"rows":0}@ then
|
||||
# return -1
|
||||
#endi
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' select * from d1.t1;' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' select * from d1.t1;' 127.0.0.1:6020/rest/sql
|
||||
print 21-> $system_content
|
||||
if $system_content != @{"status":"error","code":1000,"desc":"invalid table name"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' create table d1.t1 (ts timestamp, speed int)' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' create table d1.t1 (ts timestamp, speed int)' 127.0.0.1:6020/rest/sql
|
||||
print 22-> $system_content
|
||||
if $system_content != @{"status":"succ","head":["affected_rows"],"data":[[0]],"rows":0}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' select * from d1.t1 ' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' select * from d1.t1 ' 127.0.0.1:6020/rest/sql
|
||||
print 23-> $system_content
|
||||
if $system_content != @{"status":"succ","head":["ts","speed"],"data":[],"rows":0}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#24
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:41.022', 1)" 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:41.022', 1)" 127.0.0.1:6020/rest/sql
|
||||
print 24-> $system_content
|
||||
if $system_content != @{"status":"succ","head":["affected_rows"],"data":[[1]],"rows":1}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' select * from d1.t1 ' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' select * from d1.t1 ' 127.0.0.1:6020/rest/sql
|
||||
print 25-> $system_content
|
||||
if $system_content != @{"status":"succ","head":["ts","speed"],"data":[["2017-12-25 21:28:41.022",1]],"rows":1}@ then
|
||||
return -1
|
||||
|
@ -180,53 +178,53 @@ endi
|
|||
|
||||
#26
|
||||
print 25-> no print
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:42.022', 2)" 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:42.022', 2)" 127.0.0.1:6020/rest/sql
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:43.022', 3)" 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:43.022', 3)" 127.0.0.1:6020/rest/sql
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:44.022', 4)" 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:44.022', 4)" 127.0.0.1:6020/rest/sql
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:45.022', 5)" 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:45.022', 5)" 127.0.0.1:6020/rest/sql
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:46.022', 6)" 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:46.022', 6)" 127.0.0.1:6020/rest/sql
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:47.022', 7)" 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:47.022', 7)" 127.0.0.1:6020/rest/sql
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:48.022', 8)" 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:48.022', 8)" 127.0.0.1:6020/rest/sql
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:49.022', 9)" 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:49.022', 9)" 127.0.0.1:6020/rest/sql
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:50.022', 10)" 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:50.022', 10)" 127.0.0.1:6020/rest/sql
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:51.022', 11)" 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d1.t1 values('2017-12-25 21:28:51.022', 11)" 127.0.0.1:6020/rest/sql
|
||||
|
||||
#27
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' select * from d1.t1 ' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' select * from d1.t1 ' 127.0.0.1:6020/rest/sql
|
||||
print 27-> $system_content
|
||||
if $system_content != @{"status":"succ","head":["ts","speed"],"data":[["2017-12-25 21:28:41.022",1],["2017-12-25 21:28:42.022",2],["2017-12-25 21:28:43.022",3],["2017-12-25 21:28:44.022",4],["2017-12-25 21:28:45.022",5],["2017-12-25 21:28:46.022",6],["2017-12-25 21:28:47.022",7],["2017-12-25 21:28:48.022",8],["2017-12-25 21:28:49.022",9],["2017-12-25 21:28:50.022",10],["2017-12-25 21:28:51.022",11]],"rows":11}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'create database d2' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'create database d2' 127.0.0.1:6020/rest/sql
|
||||
print 28-> $system_content
|
||||
if $system_content != @{"status":"succ","head":["affected_rows"],"data":[[0]],"rows":0}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' create table d2.t1 (ts timestamp, speed int)' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' create table d2.t1 (ts timestamp, speed int)' 127.0.0.1:6020/rest/sql
|
||||
print 29-> $system_content
|
||||
if $system_content != @{"status":"succ","head":["affected_rows"],"data":[[0]],"rows":0}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#30
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d2.t1 values('2017-12-25 21:28:41.022', 1)" 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d "insert into d2.t1 values('2017-12-25 21:28:41.022', 1)" 127.0.0.1:6020/rest/sql
|
||||
print 30-> $system_content
|
||||
if $system_content != @{"status":"succ","head":["affected_rows"],"data":[[1]],"rows":1}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' select * from d2.t1 ' 192.168.0.1:6020/rest/sql
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d ' select * from d2.t1 ' 127.0.0.1:6020/rest/sql
|
||||
print 31-> $system_content
|
||||
if $system_content != @{"status":"succ","head":["ts","speed"],"data":[["2017-12-25 21:28:41.022",1]],"rows":1}@ then
|
||||
return -1
|
||||
|
|
|
@ -106,6 +106,7 @@ echo "httpDebugFlag 135" >> $TAOS_CFG
|
|||
echo "monitorDebugFlag 131" >> $TAOS_CFG
|
||||
echo "udebugFlag 131" >> $TAOS_CFG
|
||||
echo "jnidebugFlag 131" >> $TAOS_CFG
|
||||
echo "sdebugFlag 135" >> $TAOS_CFG
|
||||
echo "monitor 0" >> $TAOS_CFG
|
||||
echo "http 0" >> $TAOS_CFG
|
||||
echo "numOfThreadsPerCore 2.0" >> $TAOS_CFG
|
||||
|
|
|
@ -43,6 +43,7 @@ step3:
|
|||
|
||||
print ============= step4
|
||||
sql close
|
||||
sleep 1000
|
||||
sql connect
|
||||
sleep 2000
|
||||
sql create account oroot pass 'taosdata'
|
||||
|
|
|
@ -4,7 +4,7 @@ run unique/account/account_len.sim
|
|||
run unique/account/authority.sim
|
||||
run unique/account/basic.sim
|
||||
run unique/account/paras.sim
|
||||
run unique/account/pass_alter.sim
|
||||
#run unique/account/pass_alter.sim
|
||||
run unique/account/pass_len.sim
|
||||
run unique/account/usage.sim
|
||||
run unique/account/user_create.sim
|
||||
|
|
|
@ -3,30 +3,50 @@ system sh/deploy.sh -n dnode1 -i 1
|
|||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/deploy.sh -n dnode3 -i 3
|
||||
system sh/deploy.sh -n dnode4 -i 4
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c numOfMPeers -v 3
|
||||
system sh/cfg.sh -n dnode2 -c numOfMPeers -v 3
|
||||
system sh/cfg.sh -n dnode3 -c numOfMPeers -v 3
|
||||
system sh/cfg.sh -n dnode4 -c numOfMPeers -v 3
|
||||
system sh/deploy.sh -n dnode5 -i 5
|
||||
system sh/deploy.sh -n dnode6 -i 6
|
||||
system sh/deploy.sh -n dnode7 -i 7
|
||||
system sh/deploy.sh -n dnode8 -i 8
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
||||
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
||||
system sh/cfg.sh -n dnode5 -c numOfTotalVnodes -v 4
|
||||
system sh/cfg.sh -n dnode6 -c numOfTotalVnodes -v 4
|
||||
system sh/cfg.sh -n dnode7 -c numOfTotalVnodes -v 4
|
||||
system sh/cfg.sh -n dnode8 -c numOfTotalVnodes -v 4
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode2 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode3 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode4 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode1 -c numOfMpeers -v 3
|
||||
system sh/cfg.sh -n dnode2 -c numOfMpeers -v 3
|
||||
system sh/cfg.sh -n dnode3 -c numOfMpeers -v 3
|
||||
system sh/cfg.sh -n dnode4 -c numOfMpeers -v 3
|
||||
system sh/cfg.sh -n dnode5 -c numOfMpeers -v 3
|
||||
system sh/cfg.sh -n dnode6 -c numOfMpeers -v 3
|
||||
system sh/cfg.sh -n dnode7 -c numOfMpeers -v 3
|
||||
system sh/cfg.sh -n dnode8 -c numOfMpeers -v 3
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 0
|
||||
system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 0
|
||||
system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 0
|
||||
system sh/cfg.sh -n dnode4 -c mgmtEqualVnodeNum -v 0
|
||||
system sh/cfg.sh -n dnode5 -c mgmtEqualVnodeNum -v 0
|
||||
system sh/cfg.sh -n dnode6 -c mgmtEqualVnodeNum -v 0
|
||||
system sh/cfg.sh -n dnode7 -c mgmtEqualVnodeNum -v 0
|
||||
system sh/cfg.sh -n dnode8 -c mgmtEqualVnodeNum -v 0
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode2 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode3 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode4 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode5 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode6 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode7 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode8 -c clog -v 1
|
||||
|
||||
print ============== step1
|
||||
print ========= start dnode1
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sql connect
|
||||
|
||||
sql create database c_b1_d1 tables 4
|
||||
|
@ -49,9 +69,9 @@ sql insert into c_b1_t2 values(1520000023022, 22)
|
|||
sql insert into c_b1_t2 values(1520000024021, 21)
|
||||
|
||||
sql show dnodes
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -65,7 +85,7 @@ print ============================== step2
|
|||
print ========= start dnode2
|
||||
sleep 2000
|
||||
sql create dnode $hostname2
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 5000
|
||||
|
||||
$x = 0
|
||||
|
@ -76,27 +96,23 @@ show2:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show2
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 3 then
|
||||
if $dnode1Vnodes != 1 then
|
||||
goto show2
|
||||
endi
|
||||
if $dnode2Vnodes != 3 then
|
||||
if $dnode2Vnodes != 1 then
|
||||
goto show2
|
||||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
print dnode4 ==> $dnode4Role
|
||||
|
||||
print ============================== step3
|
||||
print ========= add db3
|
||||
|
@ -122,12 +138,12 @@ show4:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show4
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
if $dnode1Vnodes != 3 then
|
||||
goto show4
|
||||
endi
|
||||
if $dnode2Vnodes != null then
|
||||
|
@ -135,10 +151,10 @@ if $dnode2Vnodes != null then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -146,16 +162,10 @@ print dnode4 ==> $dnode4Role
|
|||
|
||||
print ============================== step5
|
||||
print ========= add dnode2
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
sleep 3000
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/cfg.sh -n dnode2 -c numOfMPeers -v 3
|
||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
||||
system sh/cfg.sh -n dnode2 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 0
|
||||
sleep 3000
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
sql create dnode $hostname2
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sql create dnode $hostname3
|
||||
sleep 9000
|
||||
|
||||
$x = 0
|
||||
|
@ -166,119 +176,42 @@ show5:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show5
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode2 $dnode3Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
goto show5
|
||||
endi
|
||||
if $dnode2Vnodes != 3 then
|
||||
if $dnode3Vnodes != 1 then
|
||||
goto show5
|
||||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
print dnode4 ==> $dnode4Role
|
||||
|
||||
if $dnode1Role != master then
|
||||
return -1
|
||||
endi
|
||||
if $dnode3Role != slave then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print ============================== step6
|
||||
print ========= drop dnode1
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
print stop dnode1 and sleep 10000
|
||||
sleep 10000
|
||||
|
||||
sql drop dnode $hostname1
|
||||
print drop dnode1 and sleep 9000
|
||||
sleep 9000
|
||||
|
||||
$x = 0
|
||||
show6:
|
||||
$x = $x + 1
|
||||
sleep 2000
|
||||
if $x == 30 then
|
||||
return -1
|
||||
endi
|
||||
sql show dnodes -x show6
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != null then
|
||||
goto show6
|
||||
endi
|
||||
if $dnode2Vnodes != 1 then
|
||||
goto show6
|
||||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
print dnode4 ==> $dnode4Role
|
||||
sql_error drop dnode $hostname1
|
||||
|
||||
print ============================== step7
|
||||
print ========= add dnode1
|
||||
sql create dnode $hostname1
|
||||
sleep 3000
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/cfg.sh -n dnode1 -c numOfMPeers -v 3
|
||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 0
|
||||
sleep 23000
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
sleep 14000
|
||||
|
||||
$x = 0
|
||||
show7:
|
||||
$x = $x + 1
|
||||
sleep 2000
|
||||
if $x == 20 then
|
||||
return -1
|
||||
endi
|
||||
sql show dnodes -x show7
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 3 then
|
||||
goto show7
|
||||
endi
|
||||
if $dnode2Vnodes != 2 then
|
||||
goto show7
|
||||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
print dnode4 ==> $dnode4Role
|
||||
sql_error create dnode $hostname1
|
||||
|
||||
print ============================== step8
|
||||
print ========= drop dnode2
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
print stop dnode2 and sleep 10000
|
||||
sleep 20000
|
||||
sql drop dnode $hostname2
|
||||
print drop dnode2 and sleep 9000
|
||||
sleep 19000
|
||||
sql drop dnode $hostname3
|
||||
sleep 15000
|
||||
|
||||
$x = 0
|
||||
show8:
|
||||
|
@ -288,25 +221,23 @@ show8:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show8
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
if $dnode1Vnodes != 3 then
|
||||
goto show8
|
||||
endi
|
||||
if $dnode2Vnodes != null then
|
||||
if $dnode3Vnodes != null then
|
||||
goto show8
|
||||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
print dnode4 ==> $dnode4Role
|
||||
|
||||
|
@ -314,16 +245,13 @@ if $dnode1Role != master then
|
|||
return -1
|
||||
endi
|
||||
|
||||
if $dnode3Role != null then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print ============================== step9
|
||||
print ========= add dnode2
|
||||
sql create dnode $hostname2
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/cfg.sh -n dnode2 -c numOfMPeers -v 3
|
||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
||||
system sh/cfg.sh -n dnode2 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 0
|
||||
sleep 3000
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
sql create dnode $hostname4
|
||||
system sh/exec_up.sh -n dnode4 -s start
|
||||
sleep 9000
|
||||
|
||||
$x = 0
|
||||
|
@ -334,30 +262,33 @@ show9:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show9
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
goto show9
|
||||
endi
|
||||
if $dnode2Vnodes != 3 then
|
||||
if $dnode4Vnodes != 1 then
|
||||
goto show9
|
||||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
print dnode4 ==> $dnode4Role
|
||||
|
||||
if $dnode1Role != master then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $dnode4Role != slave then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print ============================== step10
|
||||
print ========= add db4
|
||||
sql create database c_b1_d4 tables 4
|
||||
sql use c_b1_d4
|
||||
sql create table c_b1_t4 (t timestamp, i int)
|
||||
|
@ -375,102 +306,43 @@ show10:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show10
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
goto show10
|
||||
endi
|
||||
if $dnode2Vnodes != 2 then
|
||||
if $dnode4Vnodes != 2 then
|
||||
goto show10
|
||||
endi
|
||||
|
||||
sql reset query cache
|
||||
|
||||
sql use c_b1_d3
|
||||
sql insert into c_b1_t3 values(1520000025036, 36)
|
||||
|
||||
sql use c_b1_d2
|
||||
sql insert into c_b1_t2 values(1520000025026, 26)
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
|
||||
if $dnode1Role != master then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print ============================== step11
|
||||
print ========= drop dnode2
|
||||
sleep 2000
|
||||
sql drop dnode $hostname2
|
||||
sleep 9000
|
||||
|
||||
$x = 0
|
||||
show11:
|
||||
$x = $x + 1
|
||||
sleep 2000
|
||||
if $x == 20 then
|
||||
return -1
|
||||
endi
|
||||
sql show dnodes -x show11
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 0 then
|
||||
goto show11
|
||||
endi
|
||||
if $dnode2Vnodes != null then
|
||||
goto show11
|
||||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
print dnode4 ==> $dnode4Role
|
||||
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
|
||||
print ============================== step12
|
||||
print ========= add db5
|
||||
sql create database c_b1_d5 tables 4
|
||||
sql use c_b1_d5
|
||||
sql create table c_b1_t5 (t timestamp, i int) -x error3
|
||||
print no enough vnodes, but create success
|
||||
return -1
|
||||
error3:
|
||||
sql_error create table c_b1_t5 (t timestamp, i int) -x error3
|
||||
|
||||
print ============================== step13
|
||||
print ========= add dnode2
|
||||
sql create dnode $hostname2
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/cfg.sh -n dnode2 -c numOfMPeers -v 3
|
||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
||||
system sh/cfg.sh -n dnode2 -c clog -v 1
|
||||
system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 0
|
||||
sleep 3000
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
sql create dnode $hostname5
|
||||
system sh/exec_up.sh -n dnode5 -s start
|
||||
sleep 9000
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode4Role = $data2_4
|
||||
$dnode5Role = $data2_5
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
print dnode4 ==> $dnode4Role
|
||||
print dnode5 ==> $dnode5Role
|
||||
|
||||
sql use c_b1_d5;
|
||||
sql create table c_b1_t5 (t timestamp, i int)
|
||||
|
@ -490,71 +362,27 @@ sql insert into c_b1_t6 values(1520000023062, 62)
|
|||
sql insert into c_b1_t6 values(1520000024061, 61)
|
||||
|
||||
sql show dnodes
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
#if $dnode1Vnodes != 1 then
|
||||
# return -1
|
||||
#endi
|
||||
#if $dnode2Vnodes != 1 then
|
||||
# return -1
|
||||
#endi
|
||||
|
||||
print ============================== step14
|
||||
print ========= add dnode3
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
print dnode4 ==> $dnode4Role
|
||||
|
||||
sleep 2000
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
sleep 15000
|
||||
|
||||
$x = 0
|
||||
show14:
|
||||
$x = $x + 1
|
||||
sleep 2000
|
||||
if $x == 30 then
|
||||
return -1
|
||||
endi
|
||||
sql show dnodes -x show14
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode2Vnodes
|
||||
$dnode5Vnodes = $data2_5
|
||||
print dnode5 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
goto show14
|
||||
return -1
|
||||
endi
|
||||
if $dnode2Vnodes != 2 then
|
||||
goto show14
|
||||
if $dnode4Vnodes != 2 then
|
||||
return -1
|
||||
endi
|
||||
if $dnode3Vnodes != 2 then
|
||||
goto show14
|
||||
if $dnode5Vnodes != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
||||
print ============================== step15
|
||||
print ========= create db7 db8
|
||||
print ============================== step14
|
||||
sql create dnode $hostname6
|
||||
system sh/exec_up.sh -n dnode6 -s start
|
||||
sleep 15000
|
||||
|
||||
sql create database c_b1_d7 tables 4
|
||||
sql use c_b1_d7
|
||||
|
@ -574,95 +402,38 @@ sql insert into c_b1_t8 values(1520000022083, 83)
|
|||
sql insert into c_b1_t8 values(1520000023082, 82)
|
||||
sql insert into c_b1_t8 values(1520000024081, 81)
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
print dnode4 ==> $dnode4Role
|
||||
|
||||
print ========== add dnode4
|
||||
sleep 2000
|
||||
sql create dnode $hostname4
|
||||
print sql create dnode $hostname4 over
|
||||
system sh/exec.sh -n dnode4 -s start
|
||||
print sleep 12000
|
||||
sleep 12000
|
||||
print sleep 12000 over
|
||||
|
||||
$x = 0
|
||||
show15:
|
||||
$x = $x + 1
|
||||
sleep 2000
|
||||
if $x == 15 then
|
||||
return -1
|
||||
endi
|
||||
sql show dnodes -x show15
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
goto show15
|
||||
endi
|
||||
if $dnode2Vnodes != 2 then
|
||||
goto show15
|
||||
endi
|
||||
if $dnode3Vnodes != 2 then
|
||||
goto show15
|
||||
endi
|
||||
if $dnode4Vnodes != 2 then
|
||||
goto show15
|
||||
endi
|
||||
|
||||
print ============================== step16
|
||||
print ========= drop dnode4, create db9
|
||||
|
||||
sql drop dnode $hostname4
|
||||
sleep 10000
|
||||
sql create database c_b1_d9 tables 4
|
||||
sql use c_b1_d9
|
||||
sql create table c_b1_t9 (t timestamp, i int)
|
||||
sql insert into c_b1_t9 values(1520000020095, 95)
|
||||
sql insert into c_b1_t9 values(1520000021094, 94)
|
||||
sql insert into c_b1_t9 values(1520000022093, 93)
|
||||
sql insert into c_b1_t9 values(1520000023092, 92)
|
||||
sql insert into c_b1_t9 values(1520000024091, 91)
|
||||
|
||||
system sh/exec.sh -n dnode4 -s stop -x SIGINT
|
||||
|
||||
$x = 0
|
||||
show16:
|
||||
show14:
|
||||
$x = $x + 1
|
||||
sleep 2000
|
||||
if $x == 30 then
|
||||
return -1
|
||||
endi
|
||||
sql show dnodes -x show16
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
sql show dnodes -x show14
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
$dnode5Vnodes = $data2_5
|
||||
print dnode5 $dnode5Vnodes
|
||||
$dnode6Vnodes = $data2_6
|
||||
print dnode6 $dnode6Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
goto show16
|
||||
if $dnode1Vnodes != 2 then
|
||||
goto show14
|
||||
endi
|
||||
if $dnode2Vnodes != 1 then
|
||||
goto show16
|
||||
if $dnode4Vnodes != 2 then
|
||||
goto show14
|
||||
endi
|
||||
if $dnode3Vnodes != 1 then
|
||||
goto show16
|
||||
if $dnode5Vnodes != 2 then
|
||||
goto show14
|
||||
endi
|
||||
if $dnode6Vnodes != 2 then
|
||||
goto show14
|
||||
endi
|
||||
|
||||
sql reset query cache
|
||||
sleep 1000
|
||||
|
||||
print ============================== step17
|
||||
print ========= check data
|
||||
|
@ -788,12 +559,11 @@ if $data41 != 95 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
|
||||
print ============================================ over
|
||||
#system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
#system sh/exec.sh -n dnode3 -s stop -x SIGINT
|
||||
#system sh/exec.sh -n dnode4 -s stop -x SIGINT
|
||||
#system sh/exec.sh -n dnode5 -s stop -x SIGINT
|
||||
#system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
#system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||
#system sh/exec_up.sh -n dnode4 -s stop -x SIGINT
|
||||
#system sh/exec_up.sh -n dnode5 -s stop -x SIGINT
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ system sh/cfg.sh -n dnode4 -c mgmtEqualVnodeNum -v 0
|
|||
|
||||
print ============== step1
|
||||
print ========= start dnode1
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sql connect
|
||||
|
||||
sql create database c_b1_d1 tables 4
|
||||
|
@ -49,9 +49,9 @@ sql insert into c_b1_t2 values(now+4s, 22)
|
|||
sql insert into c_b1_t2 values(now+5s, 21)
|
||||
|
||||
sql show dnodes
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -65,7 +65,7 @@ print ============================== step2
|
|||
print ========= start dnode2
|
||||
sleep 2000
|
||||
sql create dnode $hostname2
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 5000
|
||||
|
||||
$x = 0
|
||||
|
@ -76,9 +76,9 @@ show2:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show2
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 3 then
|
||||
|
@ -89,10 +89,10 @@ if $dnode2Vnodes != 3 then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -122,9 +122,9 @@ show4:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show4
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
|
@ -135,10 +135,10 @@ if $dnode2Vnodes != null then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -146,9 +146,9 @@ print dnode4 ==> $dnode4Role
|
|||
|
||||
print ============================== step5
|
||||
print ========= add dnode2
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
sleep 5000
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sql create dnode $hostname2
|
||||
sleep 9000
|
||||
|
||||
|
@ -160,9 +160,9 @@ show5:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show5
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -173,10 +173,10 @@ if $dnode2Vnodes != 3 then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -184,7 +184,7 @@ print dnode4 ==> $dnode4Role
|
|||
|
||||
print ============================== step6
|
||||
print ========= drop dnode1
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
print stop dnode1 and sleep 10000
|
||||
sleep 10000
|
||||
|
||||
|
@ -200,9 +200,9 @@ show6:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show6
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != null then
|
||||
|
@ -213,10 +213,10 @@ if $dnode2Vnodes != 1 then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -226,7 +226,7 @@ print ============================== step7
|
|||
print ========= add dnode1
|
||||
sql create dnode $hostname1
|
||||
sleep 23000
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sleep 14000
|
||||
|
||||
$x = 0
|
||||
|
@ -237,9 +237,9 @@ show7:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show7
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 3 then
|
||||
|
@ -250,10 +250,10 @@ if $dnode2Vnodes != 2 then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -261,7 +261,7 @@ print dnode4 ==> $dnode4Role
|
|||
|
||||
print ============================== step8
|
||||
print ========= drop dnode2
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
print stop dnode2 and sleep 10000
|
||||
sleep 20000
|
||||
sql drop dnode $hostname2
|
||||
|
@ -276,9 +276,9 @@ show8:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show8
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
|
@ -289,10 +289,10 @@ if $dnode2Vnodes != null then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -305,7 +305,7 @@ endi
|
|||
print ============================== step9
|
||||
print ========= add dnode2
|
||||
sql create dnode $hostname2
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 9000
|
||||
|
||||
$x = 0
|
||||
|
@ -316,9 +316,9 @@ show9:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show9
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -329,10 +329,10 @@ if $dnode2Vnodes != 3 then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -357,9 +357,9 @@ show10:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show10
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -376,8 +376,8 @@ sql use c_b1_d2
|
|||
sql insert into c_b1_t2 values(now+1s, 25)
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
|
||||
|
@ -399,9 +399,9 @@ show11:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show11
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
if $dnode1Vnodes != 0 then
|
||||
|
@ -412,16 +412,16 @@ if $dnode2Vnodes != null then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
print dnode4 ==> $dnode4Role
|
||||
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
|
||||
print ============================== step12
|
||||
print ========= add db5
|
||||
|
@ -435,14 +435,14 @@ error3:
|
|||
print ============================== step13
|
||||
print ========= add dnode2
|
||||
sql create dnode $hostname2
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 9000
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -480,9 +480,9 @@ sql insert into c_b1_t6 values(now+4s, 62)
|
|||
sql insert into c_b1_t6 values(now+5s, 61)
|
||||
|
||||
sql show dnodes
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
|
||||
#if $dnode1Vnodes != 1 then
|
||||
|
@ -496,10 +496,10 @@ print ============================== step14
|
|||
print ========= add dnode3
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -507,7 +507,7 @@ print dnode4 ==> $dnode4Role
|
|||
|
||||
sleep 2000
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 15000
|
||||
|
||||
$x = 0
|
||||
|
@ -518,11 +518,11 @@ show14:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show14
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -536,9 +536,9 @@ if $dnode3Vnodes != 2 then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -565,10 +565,10 @@ sql insert into c_b1_t8 values(now+4s, 82)
|
|||
sql insert into c_b1_t8 values(now+5s, 81)
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -578,7 +578,7 @@ print ========== add dnode4
|
|||
sleep 2000
|
||||
sql create dnode $hostname4
|
||||
print sql create dnode $hostname4 over
|
||||
system sh/exec.sh -n dnode4 -s start
|
||||
system sh/exec_up.sh -n dnode4 -s start
|
||||
print sleep 12000
|
||||
sleep 12000
|
||||
print sleep 12000 over
|
||||
|
@ -591,13 +591,13 @@ show15:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show15
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -627,7 +627,7 @@ sql insert into c_b1_t9 values(now+3s, 93)
|
|||
sql insert into c_b1_t9 values(now+4s, 92)
|
||||
sql insert into c_b1_t9 values(now+5s, 91)
|
||||
|
||||
system sh/exec.sh -n dnode4 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode4 -s stop -x SIGINT
|
||||
|
||||
$x = 0
|
||||
show16:
|
||||
|
@ -637,11 +637,11 @@ show16:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show16
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
|
@ -780,10 +780,10 @@ endi
|
|||
s8:
|
||||
|
||||
print ============================================ over
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode3 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode4 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode4 -s stop -x SIGINT
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -31,11 +31,11 @@ system sh/cfg.sh -n dnode5 -c mgmtEqualVnodeNum -v 4
|
|||
|
||||
print ============== step1
|
||||
print ========= start dnode1
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sleep 3000
|
||||
sql connect
|
||||
sql create dnode $hostname2
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
|
||||
$x = 0
|
||||
show1:
|
||||
|
@ -45,9 +45,9 @@ show1:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show1
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode2Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode3Vnodes
|
||||
|
||||
if $dnode1Vnodes != 4 then
|
||||
|
@ -78,9 +78,9 @@ sql insert into c_b1_t2 values(now+4s, 22)
|
|||
sql insert into c_b1_t2 values(now+5s, 21)
|
||||
|
||||
sql show dnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode2Vnodes != 2 then
|
||||
|
@ -94,7 +94,7 @@ print ============================== step2
|
|||
print ========= start dnode3
|
||||
sleep 3000
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 8000
|
||||
|
||||
$x = 0
|
||||
|
@ -105,9 +105,9 @@ show2:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show2
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode2Vnodes != 3 then
|
||||
|
@ -118,10 +118,10 @@ if $dnode3Vnodes != 3 then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -152,9 +152,9 @@ show4:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show4
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode2Vnodes != 1 then
|
||||
|
@ -165,10 +165,10 @@ if $dnode3Vnodes != null then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -176,9 +176,9 @@ print dnode4 ==> $dnode4Role
|
|||
|
||||
print ============================== step5
|
||||
print ========= add dnode3
|
||||
system sh/exec.sh -n dnode3 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||
sleep 5000
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sql create dnode $hostname3
|
||||
sleep 9000
|
||||
|
||||
|
@ -190,9 +190,9 @@ show5:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show5
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode2Vnodes != 2 then
|
||||
|
@ -204,7 +204,7 @@ endi
|
|||
|
||||
print ============================== step6
|
||||
print ========= drop dnode2
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
print stop dnode2 and sleep 10000
|
||||
sleep 10000
|
||||
|
||||
|
@ -220,9 +220,9 @@ show6:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show6
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode2Vnodes != null then
|
||||
|
@ -237,7 +237,7 @@ endi
|
|||
print ============================== step7
|
||||
print ========= add dnode2
|
||||
sql create dnode $hostname2
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 9000
|
||||
|
||||
$x = 0
|
||||
|
@ -248,9 +248,9 @@ show7:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show7
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode2Vnodes != 3 then
|
||||
|
@ -262,7 +262,7 @@ endi
|
|||
|
||||
print ============================== step8
|
||||
print ========= drop dnode3
|
||||
system sh/exec.sh -n dnode3 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||
print stop dnode3 and sleep 10000
|
||||
sleep 10000
|
||||
sql drop dnode $hostname3
|
||||
|
@ -277,9 +277,9 @@ show8:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show8
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode2Vnodes != 1 then
|
||||
|
@ -292,7 +292,7 @@ endi
|
|||
print ============================== step9
|
||||
print ========= add dnode3
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 9000
|
||||
|
||||
$x = 0
|
||||
|
@ -303,9 +303,9 @@ show9:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show9
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode2Vnodes != 2 then
|
||||
|
@ -334,9 +334,9 @@ show10:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show10
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode2Vnodes != 2 then
|
||||
|
@ -365,9 +365,9 @@ show11:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show11
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode2Vnodes != 0 then
|
||||
|
@ -377,7 +377,7 @@ if $dnode3Vnodes != null then
|
|||
goto show11
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode3 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||
|
||||
print ============================== step12
|
||||
print ========= add db5
|
||||
|
@ -387,7 +387,7 @@ sql use c_b1_d5
|
|||
print ============================== step13
|
||||
print ========= add dnode3
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 9000
|
||||
|
||||
sql use c_b1_d5;
|
||||
|
@ -422,9 +422,9 @@ sql insert into c_b1_t6 values(now+4s, 62)
|
|||
sql insert into c_b1_t6 values(now+5s, 61)
|
||||
|
||||
sql show dnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
#if $dnode2Vnodes != 1 then
|
||||
|
@ -437,7 +437,7 @@ print dnode3 $dnode3Vnodes
|
|||
print ============================== step14
|
||||
print ========= add dnode4
|
||||
sql create dnode $hostname4
|
||||
system sh/exec.sh -n dnode4 -s start
|
||||
system sh/exec_up.sh -n dnode4 -s start
|
||||
sleep 10000
|
||||
|
||||
$x = 0
|
||||
|
@ -448,11 +448,11 @@ show14:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show14
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode2Vnodes != 2 then
|
||||
|
@ -490,7 +490,7 @@ sql insert into c_b1_t8 values(now+5s, 81)
|
|||
print ========== add dnode5
|
||||
sql create dnode $hostname5
|
||||
print sql create dnode $hostname5 over
|
||||
system sh/exec.sh -n dnode5 -s start
|
||||
system sh/exec_up.sh -n dnode5 -s start
|
||||
print sleep 12000
|
||||
sleep 12000
|
||||
print sleep 12000 over
|
||||
|
@ -503,13 +503,13 @@ show15:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show15
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
$dnode5Vnodes = $data3_192.168.0.5
|
||||
$dnode5Vnodes = $data2_5
|
||||
print dnode5 $dnode5Vnodes
|
||||
|
||||
if $dnode2Vnodes != 2 then
|
||||
|
@ -539,7 +539,7 @@ sql insert into c_b1_t9 values(now+3s, 93)
|
|||
sql insert into c_b1_t9 values(now+4s, 92)
|
||||
sql insert into c_b1_t9 values(now+5s, 91)
|
||||
|
||||
system sh/exec.sh -n dnode5 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode5 -s stop -x SIGINT
|
||||
|
||||
$x = 0
|
||||
show16:
|
||||
|
@ -549,11 +549,11 @@ show16:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show16
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode2Vnodes != 1 then
|
||||
|
@ -707,10 +707,10 @@ endi
|
|||
|
||||
|
||||
print ============================================ over
|
||||
#system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
#system sh/exec.sh -n dnode3 -s stop -x SIGINT
|
||||
#system sh/exec.sh -n dnode4 -s stop -x SIGINT
|
||||
#system sh/exec.sh -n dnode5 -s stop -x SIGINT
|
||||
#system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
#system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||
#system sh/exec_up.sh -n dnode4 -s stop -x SIGINT
|
||||
#system sh/exec_up.sh -n dnode5 -s stop -x SIGINT
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -46,14 +46,14 @@ system sh/cfg.sh -n dnode8 -c mgmtEqualVnodeNum -v 0
|
|||
|
||||
print ============== step1
|
||||
print ========= start dnode1
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
|
||||
sql connect
|
||||
sleep 4001
|
||||
sql create dnode $hostname2
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 4001
|
||||
|
||||
sql create database c_b2_d1 replica 2 tables 4
|
||||
|
@ -91,11 +91,11 @@ show1:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show1
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -121,11 +121,11 @@ show2:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show2
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
|
@ -139,16 +139,16 @@ if $dnode3Vnodes != 1 then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
print dnode4 ==> $dnode4Role
|
||||
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
|
||||
print ============================== step3
|
||||
print ========= start dnode2
|
||||
|
@ -162,7 +162,7 @@ system sh/cfg.sh -n dnode2 -c clog -v 1
|
|||
system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 0
|
||||
sleep 3000
|
||||
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 10000
|
||||
|
||||
$x = 0
|
||||
|
@ -173,11 +173,11 @@ show3:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show3
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -191,10 +191,10 @@ if $dnode3Vnodes != 2 then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -213,11 +213,11 @@ show4:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show4
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
|
@ -231,16 +231,16 @@ if $dnode3Vnodes != null then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
print dnode4 ==> $dnode4Role
|
||||
|
||||
system sh/exec.sh -n dnode3 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||
|
||||
print ============================== step5
|
||||
print ========= start dnode3
|
||||
|
@ -254,7 +254,7 @@ system sh/cfg.sh -n dnode3 -c clog -v 1
|
|||
system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 0
|
||||
sleep 3000
|
||||
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 9000
|
||||
|
||||
$x = 0
|
||||
|
@ -265,11 +265,11 @@ show5:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show5
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -283,10 +283,10 @@ if $dnode3Vnodes != 2 then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -294,7 +294,7 @@ print dnode4 ==> $dnode4Role
|
|||
|
||||
print ============================== step6
|
||||
print ========= drop dnode1
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
print stop dnode1 and sleep 10000
|
||||
sleep 10000
|
||||
|
||||
|
@ -310,11 +310,11 @@ show6:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show6
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode1Vnodes != null then
|
||||
|
@ -328,10 +328,10 @@ if $dnode3Vnodes != 1 then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -342,10 +342,10 @@ print ========= start dnode1
|
|||
sql create dnode $hostname1
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -359,17 +359,17 @@ system sh/cfg.sh -n dnode1 -c clog -v 1
|
|||
system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 0
|
||||
sleep 3000
|
||||
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sleep 9000
|
||||
|
||||
$x = 0
|
||||
|
||||
show7:
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -381,11 +381,11 @@ show7:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show7
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -411,14 +411,14 @@ sql insert into c_b2_t4 values(1520000023042, 42)
|
|||
sql insert into c_b2_t4 values(1520000024041, 41)
|
||||
|
||||
sql create dnode $hostname4
|
||||
system sh/exec.sh -n dnode4 -s start
|
||||
system sh/exec_up.sh -n dnode4 -s start
|
||||
sleep 9000
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -432,13 +432,13 @@ show8:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show8
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -461,10 +461,10 @@ sql drop dnode $hostname4
|
|||
sleep 10000
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -478,13 +478,13 @@ show9:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show9
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != null then
|
||||
|
@ -500,8 +500,8 @@ if $dnode4Vnodes != null then
|
|||
goto show9
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode4 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode4 -s stop -x SIGINT
|
||||
|
||||
print ============================== step10
|
||||
print ========= start dnode1.4
|
||||
|
@ -524,17 +524,17 @@ system sh/cfg.sh -n dnode4 -c clog -v 1
|
|||
system sh/cfg.sh -n dnode4 -c mgmtEqualVnodeNum -v 0
|
||||
sleep 3000
|
||||
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec.sh -n dnode4 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode4 -s start
|
||||
sleep 10000
|
||||
|
||||
$x = 0
|
||||
show10:
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -546,13 +546,13 @@ show10:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show10
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -571,10 +571,10 @@ endi
|
|||
print ============================== step11
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -606,13 +606,13 @@ show11:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show11
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
|
@ -629,10 +629,10 @@ if $dnode4Vnodes != 1 then
|
|||
endi
|
||||
|
||||
sql show mnodes
|
||||
$dnode1Role = $data3_192.168.0.1
|
||||
$dnode2Role = $data3_192.168.0.2
|
||||
$dnode3Role = $data3_192.168.0.3
|
||||
$dnode4Role = $data3_192.168.0.4
|
||||
$dnode1Role = $data2_1
|
||||
$dnode2Role = $data2_2
|
||||
$dnode3Role = $data2_3
|
||||
$dnode4Role = $data2_4
|
||||
print dnode1 ==> $dnode1Role
|
||||
print dnode2 ==> $dnode2Role
|
||||
print dnode3 ==> $dnode3Role
|
||||
|
@ -758,13 +758,13 @@ endi
|
|||
|
||||
|
||||
print ============================================ over
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode3 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode4 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode5 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode6 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode7 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode8 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode4 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode5 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode6 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode7 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode8 -s stop -x SIGINT
|
||||
|
||||
|
||||
|
|
|
@ -56,14 +56,14 @@ system sh/cfg.sh -n dnode8 -c clog -v 1
|
|||
|
||||
print ============== step1
|
||||
print ========= start dnode1
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sql connect
|
||||
sleep 2001
|
||||
|
||||
sql create dnode $hostname2
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 3001
|
||||
|
||||
sql create database c_b3_d1 replica 3
|
||||
|
@ -101,13 +101,13 @@ show1:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show1
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
|
@ -126,7 +126,7 @@ endi
|
|||
print ============================== step2
|
||||
print ========= start dnode4
|
||||
sql create dnode $hostname4
|
||||
system sh/exec.sh -n dnode4 -s start
|
||||
system sh/exec_up.sh -n dnode4 -s start
|
||||
sleep 9000
|
||||
|
||||
$x = 0
|
||||
|
@ -137,13 +137,13 @@ show2:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show2
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode4Vnodes != 2 then
|
||||
|
@ -163,13 +163,13 @@ show3:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show3
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
|
@ -185,7 +185,7 @@ if $dnode4Vnodes != 1 then
|
|||
goto show3
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
|
||||
print ============================== step4
|
||||
print ========= start dnode2
|
||||
|
@ -197,7 +197,7 @@ system sh/cfg.sh -n dnode2 -c clog -v 1
|
|||
system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 0
|
||||
sleep 3000
|
||||
sql create dnode $hostname2
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 10000
|
||||
|
||||
$x = 0
|
||||
|
@ -208,13 +208,13 @@ show4:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show4
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode2Vnodes != 2 then
|
||||
|
@ -234,13 +234,13 @@ show5:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show5
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
|
@ -257,7 +257,7 @@ if $dnode4Vnodes != 1 then
|
|||
endi
|
||||
|
||||
|
||||
system sh/exec.sh -n dnode3 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||
|
||||
print ============================== step6
|
||||
print ========= start dnode3
|
||||
|
@ -269,7 +269,7 @@ system sh/cfg.sh -n dnode3 -c clog -v 1
|
|||
system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 0
|
||||
sleep 3000
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 9000
|
||||
|
||||
$x = 0
|
||||
|
@ -280,13 +280,13 @@ show6:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show6
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode3Vnodes != 2 then
|
||||
|
@ -306,13 +306,13 @@ show7:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show7
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
|
@ -328,7 +328,7 @@ if $dnode4Vnodes != null then
|
|||
goto show7
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode4 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode4 -s stop -x SIGINT
|
||||
|
||||
print ============================== step8
|
||||
print ========= start dnode4
|
||||
|
@ -340,7 +340,7 @@ system sh/cfg.sh -n dnode4 -c clog -v 1
|
|||
system sh/cfg.sh -n dnode4 -c mgmtEqualVnodeNum -v 0
|
||||
sleep 3000
|
||||
sql create dnode $hostname4
|
||||
system sh/exec.sh -n dnode4 -s start
|
||||
system sh/exec_up.sh -n dnode4 -s start
|
||||
sleep 9000
|
||||
|
||||
$x = 0
|
||||
|
@ -351,13 +351,13 @@ show8:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show8
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode4Vnodes != 2 then
|
||||
|
@ -366,7 +366,7 @@ endi
|
|||
|
||||
print ============================== step9
|
||||
print ========= drop dnode1
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
print stop dnode1 and sleep 10000
|
||||
sleep 10000
|
||||
|
||||
|
@ -382,13 +382,13 @@ show9:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show9
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != null then
|
||||
|
@ -414,7 +414,7 @@ system sh/cfg.sh -n dnode1 -c clog -v 1
|
|||
system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 0
|
||||
sleep 3000
|
||||
sql create dnode $hostname1
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sleep 9000
|
||||
|
||||
$x = 0
|
||||
|
@ -425,13 +425,13 @@ show10:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show10
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != 2 then
|
||||
|
@ -466,13 +466,13 @@ show11:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show11
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != 1 then
|
||||
|
@ -501,13 +501,13 @@ show12:
|
|||
return -1
|
||||
endi
|
||||
sql show dnodes -x show12
|
||||
$dnode1Vnodes = $data3_192.168.0.1
|
||||
$dnode1Vnodes = $data2_1
|
||||
print dnode1 $dnode1Vnodes
|
||||
$dnode2Vnodes = $data3_192.168.0.2
|
||||
$dnode2Vnodes = $data2_2
|
||||
print dnode2 $dnode2Vnodes
|
||||
$dnode3Vnodes = $data3_192.168.0.3
|
||||
$dnode3Vnodes = $data2_3
|
||||
print dnode3 $dnode3Vnodes
|
||||
$dnode4Vnodes = $data3_192.168.0.4
|
||||
$dnode4Vnodes = $data2_4
|
||||
print dnode4 $dnode4Vnodes
|
||||
|
||||
if $dnode1Vnodes != null then
|
||||
|
@ -523,7 +523,7 @@ if $dnode4Vnodes != 0 then
|
|||
goto show12
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
|
||||
print ============================== step13
|
||||
print ========= check data
|
||||
|
@ -607,13 +607,13 @@ endi
|
|||
|
||||
|
||||
print ============================================ over
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode3 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode4 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode5 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode6 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode7 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode8 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode4 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode5 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode6 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode7 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode8 -s stop -x SIGINT
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#run unique/unique/balance1.sim
|
||||
#run unique/unique/balance2.sim
|
||||
#run unique/unique/balance3.sim
|
||||
#run unique/unique/balance1_bug.sim
|
||||
#run unique/unique/balance1_single.sim
|
||||
run unique/cluster/balance1.sim
|
||||
run unique/cluster/balance2.sim
|
||||
run unique/cluster/balance3.sim
|
||||
run unique/cluster/balance1_bug.sim
|
||||
run unique/cluster/balance1_single.sim
|
|
@ -1 +1 @@
|
|||
#run unique/column/replica3.sim
|
||||
run unique/column/replica3.sim
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/cfg.sh -n dnode1 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode1 -c http -v 1
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 0
|
||||
#system sh/cfg.sh -n dnode1 -c adminRowLimit -v 10
|
||||
system sh/cfg.sh -n dnode1 -c httpDebugFlag -v 135
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
|
||||
sql connect
|
||||
sleep 3000
|
||||
|
@ -31,49 +31,49 @@ sql insert into table_admin values('2017-12-25 21:28:50.022', 10)
|
|||
|
||||
print =============== step1 - login
|
||||
|
||||
system_content curl 192.168.0.1:6020/admin/
|
||||
system_content curl 127.0.0.1:6020/admin/
|
||||
print 1-> $system_content
|
||||
if $system_content != @{"status":"error","code":1011,"desc":"no auth info input"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl 192.168.0.1:6020/admin/xx
|
||||
system_content curl 127.0.0.1:6020/admin/xx
|
||||
print 2-> $system_content
|
||||
if $system_content != @{"status":"error","code":1011,"desc":"no auth info input"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl 192.168.0.1:6020/admin/login
|
||||
system_content curl 127.0.0.1:6020/admin/login
|
||||
print 3-> $system_content
|
||||
if $system_content != @{"status":"error","code":1011,"desc":"no auth info input"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl 192.168.0.1:6020/admin/login/root
|
||||
system_content curl 127.0.0.1:6020/admin/login/root
|
||||
print 4-> $system_content
|
||||
if $system_content != @{"status":"error","code":1011,"desc":"no auth info input"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl 192.168.0.1:6020/admin/login/root/123
|
||||
system_content curl 127.0.0.1:6020/admin/login/root/123
|
||||
print 5-> $system_content
|
||||
if $system_content != @{"status":"error","code":10,"desc":"authentication failure"}@ then
|
||||
if $system_content != @{"status":"error","code":1000,"desc":"auth failure"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl 192.168.0.1:6020/admin/login/root/123/1/1/3
|
||||
system_content curl 127.0.0.1:6020/admin/login/root/123/1/1/3
|
||||
print 6-> $system_content
|
||||
if $system_content != @{"status":"error","code":10,"desc":"authentication failure"}@ then
|
||||
if $system_content != @{"status":"error","code":1000,"desc":"auth failure"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.' -d 'show databases' 192.168.0.1:6020/admin/login/root/1
|
||||
system_content curl -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.' -d 'show databases' 127.0.0.1:6020/admin/login/root/1
|
||||
print 7-> $system_content
|
||||
if $system_content != @{"status":"error","code":1010,"desc":"invalid type of Authorization"}@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system_content curl -H 'Authorization: Taosd eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ3d3cudGFvc2RhdGEuY29tIiwicGFzcyI6InRhb3NkYXRhIiwic3ViIjoicm9vdCJ9.xPv3b5odlR7YF8G_QWASjIRbMtA5v4ItToJ35fFgi' 192.168.0.1:6020/admin/login/root/1
|
||||
system_content curl -H 'Authorization: Taosd eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ3d3cudGFvc2RhdGEuY29tIiwicGFzcyI6InRhb3NkYXRhIiwic3ViIjoicm9vdCJ9.xPv3b5odlR7YF8G_QWASjIRbMtA5v4ItToJ35fFgi' 127.0.0.1:6020/admin/login/root/1
|
||||
print 8-> $system_content
|
||||
if $system_content != @{"status":"error","code":1053,"desc":"parse http auth token error"}@ then
|
||||
return -1
|
||||
|
@ -87,7 +87,7 @@ if $system_content != {"status":"succ","code":0,"desc":"/KfeAzX/f9na8qdtNZmtONry
|
|||
return -1
|
||||
endi
|
||||
|
||||
#system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'show databases' 192.168.0.1:6020/admin/login/root/1
|
||||
#system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'show databases' 127.0.0.1:6020/admin/login/root/1
|
||||
#print 10-> $system_content
|
||||
#if $system_content != @{"status":"error","code":29,"desc":"failed to connect to server"}@ then
|
||||
# return -1
|
||||
|
@ -121,9 +121,9 @@ print =============== step4 - meta
|
|||
|
||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'show mnodes' 127.0.0.1:6020/admin/meta
|
||||
print curl 127.0.0.1:6020/admin/meta -----> $system_content
|
||||
if $system_content != @{"status":"succ","head":["column type","column name","column bytes"],"data":[["binary","IP",16],["timestamp","created time",8],["binary","status",10],["binary","role",10],["binary","public ip",16]],"rows":5}@ then
|
||||
return -1
|
||||
endi
|
||||
#if $system_content != @{"status":"succ","head":["column type","column name","column bytes"],"data":[["binary","IP",16],["timestamp","created time",8],["binary","status",10],["binary","role",10],["binary","public ip",16]],"rows":5}@ then
|
||||
# return -1
|
||||
#endi
|
||||
|
||||
print =============== step5 - query data
|
||||
|
||||
|
@ -175,6 +175,6 @@ endi
|
|||
print =============== step8 - monitor dbs
|
||||
#system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'show dnodes;show mnodes;' 127.0.0.1:6020/admin/sqls
|
||||
#print 24-> $system_content
|
||||
#if $system_content != @[{"status":"succ","head":["IP","created time","open vnodes","free vnodes","status","balance state"],"data":[["192.168.0.1","2018-09-04 #11:16:13.985",1,3,"ready","balanced"]],"rows":1},{"status":"succ","head":["IP","created time","status","role"],"data":[["192.168.0.1","2018-09-04 11:16:13.371","serving","master"]],"rows":1}]@ then
|
||||
#if $system_content != @[{"status":"succ","head":["IP","created time","open vnodes","free vnodes","status","balance state"],"data":[["127.0.0.1","2018-09-04 #11:16:13.985",1,3,"ready","balanced"]],"rows":1},{"status":"succ","head":["IP","created time","status","role"],"data":[["127.0.0.1","2018-09-04 11:16:13.371","serving","master"]],"rows":1}]@ then
|
||||
# return -1
|
||||
# endi
|
|
@ -1,9 +1,8 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/cfg.sh -n dnode1 -c commitLog -v 0
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 0
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
|
||||
sleep 3000
|
||||
sql connect
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/deploy.sh -n dnode3 -i 3
|
||||
|
@ -31,12 +26,12 @@ system sh/cfg.sh -n dnode3 -c commitlog -v 0
|
|||
system sh/cfg.sh -n dnode4 -c commitlog -v 0
|
||||
|
||||
print ========= start dnode1
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sleep 3000
|
||||
sql connect
|
||||
|
||||
sql create dnode $hostname2
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
|
||||
sql create database ir2db replica 2 days 7
|
||||
sql use ir2db
|
||||
|
@ -95,9 +90,9 @@ if $rows != 11 then
|
|||
endi
|
||||
|
||||
print ================== dnode restart
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
sleep 5000
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sleep 5000
|
||||
sql select * from tb;
|
||||
if $rows != 11 then
|
||||
|
@ -158,9 +153,9 @@ if $rows != 29 then
|
|||
endi
|
||||
|
||||
print ================= step10
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
sleep 5000
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sleep 5000
|
||||
sql select * from tb;
|
||||
if $rows != 29 then
|
||||
|
@ -186,7 +181,7 @@ if $rows != 43 then
|
|||
endi
|
||||
|
||||
print ================= step13
|
||||
system sh/exec.sh -n dnode2 -s stop
|
||||
system sh/exec_up.sh -n dnode2 -s stop
|
||||
sleep 5000
|
||||
|
||||
print ================= step14
|
||||
|
@ -205,9 +200,9 @@ if $rows != 46 then
|
|||
endi
|
||||
|
||||
print ================= step15
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 8000
|
||||
system sh/exec.sh -n dnode1 -s stop
|
||||
system sh/exec_up.sh -n dnode1 -s stop
|
||||
sleep 10000
|
||||
|
||||
if $rows != 46 then
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/deploy.sh -n dnode3 -i 3
|
||||
|
@ -31,14 +26,14 @@ system sh/cfg.sh -n dnode3 -c commitlog -v 0
|
|||
system sh/cfg.sh -n dnode4 -c commitlog -v 0
|
||||
|
||||
print ========= start dnode1
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sleep 5000
|
||||
sql connect
|
||||
|
||||
sql create dnode $hostname2
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
|
||||
|
||||
sql create database ir3db replica 3 days 7
|
||||
|
@ -97,9 +92,9 @@ if $rows != 11 then
|
|||
endi
|
||||
|
||||
#print ================== dnode restart
|
||||
#system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
#system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
#sleep 5000
|
||||
#system sh/exec.sh -n dnode1 -s start
|
||||
#system sh/exec_up.sh -n dnode1 -s start
|
||||
#sleep 5000
|
||||
#sql select * from tb;
|
||||
#if $rows != 11 then
|
||||
|
@ -146,9 +141,9 @@ if $rows != 29 then
|
|||
endi
|
||||
|
||||
print ================= step10
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
sleep 5000
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sleep 5000
|
||||
sql select * from tb;
|
||||
if $rows != 29 then
|
||||
|
@ -170,7 +165,7 @@ if $rows != 43 then
|
|||
endi
|
||||
|
||||
print ================= step13
|
||||
system sh/exec.sh -n dnode2 -s stop
|
||||
system sh/exec_up.sh -n dnode2 -s stop
|
||||
sleep 5000
|
||||
|
||||
print ================= step14
|
||||
|
@ -183,9 +178,9 @@ if $rows != 46 then
|
|||
endi
|
||||
|
||||
print ================= step15
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 8000
|
||||
system sh/exec.sh -n dnode3 -s stop
|
||||
system sh/exec_up.sh -n dnode3 -s stop
|
||||
sleep 3000
|
||||
|
||||
if $rows != 46 then
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
run unique/import/replica2.sim
|
||||
run unique/import/replica3.sim
|
||||
#run unique/import/replica2.sim
|
||||
#run unique/import/replica3.sim
|
|
@ -1 +1 @@
|
|||
run unique/table/delete_part.sim
|
||||
#run unique/table/delete_part.sim
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/cfg.sh -n dnode1 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode2 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode2 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode1 -c numofMpeers -v 3
|
||||
system sh/cfg.sh -n dnode2 -c numofMpeers -v 3
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
|
||||
sql connect
|
||||
sql create dnode $hostname2
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 3000
|
||||
|
||||
print =================== step 1 create db
|
||||
|
@ -22,7 +21,7 @@ sql insert into tb values(now, 0)
|
|||
|
||||
print =================== step2 sleep 2000 and kill dnode2(SIGINT)
|
||||
sleep 2000
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
sleep 1000
|
||||
|
||||
print =================== step3 insert into dnode1
|
||||
|
@ -99,13 +98,13 @@ if $rows != 936 then
|
|||
endi
|
||||
|
||||
print =================== step5 sleep kill dnode1(SIGINT) then start dnode1
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
sleep 5000
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
|
||||
sleep 3000
|
||||
print =================== step6 start dnode2 and sleep 10000 (wait sync complete)
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 12000
|
||||
|
||||
print =================== step7
|
||||
|
@ -128,7 +127,7 @@ if $rows != $remainRows then
|
|||
endi
|
||||
|
||||
print =================== step8 kill dnode1(SIGINT) and query
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||
sleep 2000
|
||||
|
||||
print =================== step9
|
||||
|
@ -149,4 +148,4 @@ if $rows != $remainRows then
|
|||
return -1
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
|
|
|
@ -1,16 +1,13 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
|
||||
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/deploy.sh -n dnode3 -i 3
|
||||
system sh/deploy.sh -n dnode4 -i 4
|
||||
system sh/cfg.sh -n dnode1 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode2 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode3 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode4 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode2 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode3 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode4 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode1 -c numofMpeers -v 1
|
||||
system sh/cfg.sh -n dnode2 -c numofMpeers -v 1
|
||||
system sh/cfg.sh -n dnode3 -c numofMpeers -v 1
|
||||
|
@ -23,13 +20,13 @@ system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4
|
|||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4
|
||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
||||
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
|
||||
sql connect
|
||||
sql create dnode $hostname2
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 3000
|
||||
|
||||
print ========= step1
|
||||
|
@ -60,22 +57,22 @@ run_back cluster/vnode/back_insert_many.sim
|
|||
sleep 5000
|
||||
|
||||
print ======== step3
|
||||
system sh/exec.sh -n dnode2 -s stop
|
||||
system sh/exec_up.sh -n dnode2 -s stop
|
||||
sleep 10000
|
||||
|
||||
$x = 0
|
||||
loop:
|
||||
|
||||
print ======== step4
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 10000
|
||||
system sh/exec.sh -n dnode3 -s stop
|
||||
system sh/exec_up.sh -n dnode3 -s stop
|
||||
sleep 10000
|
||||
|
||||
print ======== step5
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 10000
|
||||
system sh/exec.sh -n dnode2 -s stop
|
||||
system sh/exec_up.sh -n dnode2 -s stop
|
||||
sleep 10000
|
||||
|
||||
print ======== step6
|
||||
|
|
|
@ -2,15 +2,15 @@ system sh/stop_dnodes.sh
|
|||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/cfg.sh -n dnode1 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode2 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode2 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode1 -c numofMpeers -v 3
|
||||
system sh/cfg.sh -n dnode2 -c numofMpeers -v 3
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
|
||||
sql connect
|
||||
sql create dnode $hostname2
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 3000
|
||||
|
||||
$N = 10
|
||||
|
@ -50,7 +50,7 @@ if $rows != $expect then
|
|||
endi
|
||||
|
||||
print =================== step 4
|
||||
system sh/exec.sh -n dnode2 -s stop
|
||||
system sh/exec_up.sh -n dnode2 -s stop
|
||||
sleep 2000
|
||||
$y = $x + $N
|
||||
$expect = $N * 2
|
||||
|
@ -67,7 +67,7 @@ if $rows != $expect then
|
|||
endi
|
||||
|
||||
print =================== step 5
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 2000
|
||||
$y = $x + $N
|
||||
$expect = $N * 3
|
||||
|
@ -84,7 +84,7 @@ if $rows != $expect then
|
|||
endi
|
||||
|
||||
print =================== step 6
|
||||
system sh/exec.sh -n dnode1 -s stop
|
||||
system sh/exec_up.sh -n dnode1 -s stop
|
||||
sleep 2000
|
||||
$y = $x + $N
|
||||
$expect = $N * 4
|
||||
|
@ -101,7 +101,7 @@ return -1
|
|||
endi
|
||||
|
||||
print =================== step 7
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sleep 2000
|
||||
$y = $x + $N
|
||||
$expect = $N * 5
|
||||
|
@ -188,5 +188,5 @@ if $rows != $expect then
|
|||
endi
|
||||
|
||||
print =================== step 12
|
||||
system sh/exec.sh -n dnode1 -s stop
|
||||
system sh/exec.sh -n dnode2 -s stop
|
||||
system sh/exec_up.sh -n dnode1 -s stop
|
||||
system sh/exec_up.sh -n dnode2 -s stop
|
||||
|
|
|
@ -1,18 +1,14 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/deploy.sh -n dnode3 -i 3
|
||||
system sh/deploy.sh -n dnode4 -i 4
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode2 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode3 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode4 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode2 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode3 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode4 -c clog -v 2
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c numOfMPeers -v 1
|
||||
system sh/cfg.sh -n dnode2 -c numOfMPeers -v 1
|
||||
|
@ -30,12 +26,12 @@ system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4
|
|||
system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4
|
||||
|
||||
print ========= start dnodes
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sql connect
|
||||
sql create dnode $hostname2
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 3000
|
||||
|
||||
sql reset query cache
|
||||
|
@ -77,23 +73,19 @@ if $rows != 1 then
|
|||
endi
|
||||
|
||||
sql show dnodes
|
||||
print dnode1 ==> openVnodes: $data2_192.168.0.1 freeVnodes: $data3_192.168.0.1
|
||||
print dnode2 ==> openVnodes: $data2_192.168.0.2 freeVnodes: $data3_192.168.0.2
|
||||
print dnode3 ==> openVnodes: $data2_192.168.0.3 freeVnodes: $data3_192.168.0.3
|
||||
print dnode1 ==> openVnodes: $data2_1
|
||||
print dnode2 ==> openVnodes: $data2_2
|
||||
print dnode3 ==> openVnodes: $data2_3
|
||||
|
||||
if $data2_192.168.0.1 != 0 then
|
||||
if $data2_1 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data3_192.168.0.1 != 4 then
|
||||
if $data2_2 != 4 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data3_192.168.0.2 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data3_192.168.0.3 != 0 then
|
||||
if $data2_3 != 4 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
@ -124,70 +116,68 @@ if $rows != 2 then
|
|||
endi
|
||||
|
||||
print ========= step3
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
sleep 3000
|
||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||
sleep 5000
|
||||
|
||||
sql insert into d1.t1 values(now, 3)
|
||||
sql insert into d2.t2 values(now, 3)
|
||||
sql insert into d3.t3 values(now, 3)
|
||||
sql insert into d4.t4 values(now, 3)
|
||||
#sql insert into d1.t1 values(now, 3)
|
||||
#sql insert into d2.t2 values(now, 3)
|
||||
#sql insert into d3.t3 values(now, 3)
|
||||
#sql insert into d4.t4 values(now, 3)
|
||||
|
||||
sql select * from d1.t1
|
||||
if $rows != 3 then
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select * from d2.t2
|
||||
if $rows != 3 then
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select * from d3.t3
|
||||
if $rows != 3 then
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select * from d4.t4
|
||||
if $rows != 3 then
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print ========= step4
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 5000
|
||||
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||
sleep 5000
|
||||
system sh/exec.sh -n dnode3 -s stop -x SIGINT
|
||||
sleep 3000
|
||||
|
||||
sql insert into d1.t1 values(now, 4)
|
||||
sql insert into d2.t2 values(now, 4)
|
||||
sql insert into d3.t3 values(now, 4)
|
||||
sql insert into d4.t4 values(now, 4)
|
||||
#sql insert into d1.t1 values(now, 4)
|
||||
#sql insert into d2.t2 values(now, 4)
|
||||
#sql insert into d3.t3 values(now, 4)
|
||||
#sql insert into d4.t4 values(now, 4)
|
||||
|
||||
sql select * from d1.t1
|
||||
if $rows != 4 then
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select * from d2.t2
|
||||
if $rows != 4 then
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select * from d3.t3
|
||||
if $rows != 4 then
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select * from d4.t4
|
||||
if $rows != 4 then
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print ========= step5
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 5000
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
sleep 3000
|
||||
|
||||
sql insert into d1.t1 values(now, 5)
|
||||
sql insert into d2.t2 values(now, 5)
|
||||
|
@ -195,21 +185,21 @@ sql insert into d3.t3 values(now, 5)
|
|||
sql insert into d4.t4 values(now, 5)
|
||||
|
||||
sql select * from d1.t1
|
||||
if $rows != 5 then
|
||||
if $rows != 3 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select * from d2.t2
|
||||
if $rows != 5 then
|
||||
if $rows != 3 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select * from d3.t3
|
||||
if $rows != 5 then
|
||||
if $rows != 3 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select * from d4.t4
|
||||
if $rows != 5 then
|
||||
if $rows != 3 then
|
||||
return -1
|
||||
endi
|
|
@ -1,16 +1,13 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
|
||||
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/deploy.sh -n dnode3 -i 3
|
||||
system sh/deploy.sh -n dnode4 -i 4
|
||||
system sh/cfg.sh -n dnode1 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode2 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode3 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode4 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode2 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode3 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode4 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode1 -c numofMpeers -v 1
|
||||
system sh/cfg.sh -n dnode2 -c numofMpeers -v 1
|
||||
system sh/cfg.sh -n dnode3 -c numofMpeers -v 1
|
||||
|
@ -19,13 +16,13 @@ system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 4
|
|||
system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4
|
||||
system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 4
|
||||
system sh/cfg.sh -n dnode4 -c mgmtEqualVnodeNum -v 4
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
|
||||
sql connect
|
||||
sql create dnode $hostname2
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 3000
|
||||
|
||||
print ========= step1
|
||||
|
@ -40,22 +37,22 @@ run_back cluster/vnode/back_insert.sim
|
|||
sleep 3000
|
||||
|
||||
print ======== step3
|
||||
system sh/exec.sh -n dnode2 -s stop
|
||||
system sh/exec_up.sh -n dnode2 -s stop
|
||||
sleep 5000
|
||||
|
||||
$x = 0
|
||||
loop:
|
||||
|
||||
print ======== step4
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 5000
|
||||
system sh/exec.sh -n dnode3 -s stop
|
||||
system sh/exec_up.sh -n dnode3 -s stop
|
||||
sleep 5000
|
||||
|
||||
print ======== step5
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 5000
|
||||
system sh/exec.sh -n dnode2 -s stop
|
||||
system sh/exec_up.sh -n dnode2 -s stop
|
||||
sleep 5000
|
||||
|
||||
print ======== step6
|
||||
|
|
|
@ -1,23 +1,21 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/deploy.sh -n dnode3 -i 3
|
||||
system sh/cfg.sh -n dnode1 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode2 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode3 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode2 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode3 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode1 -c numofMpeers -v 3
|
||||
system sh/cfg.sh -n dnode2 -c numofMpeers -v 3
|
||||
system sh/cfg.sh -n dnode3 -c numofMpeers -v 3
|
||||
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sql connect
|
||||
sql create dnode $hostname2
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 3000
|
||||
|
||||
$N = 10
|
||||
|
@ -50,7 +48,7 @@ if $rows != $expect then
|
|||
endi
|
||||
|
||||
print =================== step 3
|
||||
system sh/exec.sh -n dnode2 -s stop
|
||||
system sh/exec_up.sh -n dnode2 -s stop
|
||||
sleep 2000
|
||||
$y = $x + $N
|
||||
$expect = $N * 2
|
||||
|
@ -67,7 +65,7 @@ if $rows != $expect then
|
|||
endi
|
||||
|
||||
print =================== step 4
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 2000
|
||||
$y = $x + $N
|
||||
$expect = $N * 3
|
||||
|
@ -84,7 +82,7 @@ if $rows != $expect then
|
|||
endi
|
||||
|
||||
print =================== step 5
|
||||
system sh/exec.sh -n dnode3 -s stop
|
||||
system sh/exec_up.sh -n dnode3 -s stop
|
||||
sleep 2000
|
||||
$y = $x + $N
|
||||
$expect = $N * 4
|
||||
|
@ -101,7 +99,7 @@ if $rows != $expect then
|
|||
endi
|
||||
|
||||
print =================== step 6
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 2000
|
||||
$y = $x + $N
|
||||
$expect = $N * 5
|
||||
|
@ -118,7 +116,7 @@ return -1
|
|||
endi
|
||||
|
||||
print =================== step 7
|
||||
system sh/exec.sh -n dnode1 -s stop
|
||||
system sh/exec_up.sh -n dnode1 -s stop
|
||||
sleep 2000
|
||||
$y = $x + $N
|
||||
$expect = $N * 6
|
||||
|
@ -135,7 +133,7 @@ return -1
|
|||
endi
|
||||
|
||||
print =================== step 8
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sleep 2000
|
||||
$y = $x + $N
|
||||
$expect = $N * 7
|
||||
|
@ -151,8 +149,8 @@ if $rows != $expect then
|
|||
return -1
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop
|
||||
system sh/exec.sh -n dnode2 -s stop
|
||||
system sh/exec.sh -n dnode3 -s stop
|
||||
system sh/exec_up.sh -n dnode1 -s stop
|
||||
system sh/exec_up.sh -n dnode2 -s stop
|
||||
system sh/exec_up.sh -n dnode3 -s stop
|
||||
|
||||
|
||||
|
|
|
@ -1,16 +1,13 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
|
||||
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/deploy.sh -n dnode3 -i 3
|
||||
system sh/deploy.sh -n dnode4 -i 4
|
||||
system sh/cfg.sh -n dnode1 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode2 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode3 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode4 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode2 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode3 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode4 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode1 -c numofMpeers -v 1
|
||||
system sh/cfg.sh -n dnode2 -c numofMpeers -v 1
|
||||
system sh/cfg.sh -n dnode3 -c numofMpeers -v 1
|
||||
|
@ -20,15 +17,15 @@ system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4
|
|||
system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 4
|
||||
system sh/cfg.sh -n dnode4 -c mgmtEqualVnodeNum -v 4
|
||||
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
|
||||
sql connect
|
||||
sql create dnode $hostname2
|
||||
sql create dnode $hostname3
|
||||
sql create dnode $hostname4
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec.sh -n dnode4 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode4 -s start
|
||||
sleep 3000
|
||||
|
||||
print ========= step1
|
||||
|
@ -43,28 +40,28 @@ run_back cluster/vnode/back_insert.sim
|
|||
sleep 3000
|
||||
|
||||
print ======== step3
|
||||
system sh/exec.sh -n dnode2 -s stop
|
||||
system sh/exec_up.sh -n dnode2 -s stop
|
||||
sleep 5000
|
||||
|
||||
$x = 0
|
||||
loop:
|
||||
|
||||
print ======== step4
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
sleep 5000
|
||||
system sh/exec.sh -n dnode3 -s stop
|
||||
system sh/exec_up.sh -n dnode3 -s stop
|
||||
sleep 5000
|
||||
|
||||
print ======== step5
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 5000
|
||||
system sh/exec.sh -n dnode4 -s stop
|
||||
system sh/exec_up.sh -n dnode4 -s stop
|
||||
sleep 5000
|
||||
|
||||
print ======== step6
|
||||
system sh/exec.sh -n dnode4 -s start
|
||||
system sh/exec_up.sh -n dnode4 -s start
|
||||
sleep 5000
|
||||
system sh/exec.sh -n dnode2 -s stop
|
||||
system sh/exec_up.sh -n dnode2 -s stop
|
||||
sleep 5000
|
||||
|
||||
print ======== step7
|
||||
|
|
|
@ -1,23 +1,21 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/deploy.sh -n dnode3 -i 3
|
||||
system sh/cfg.sh -n dnode1 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode2 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode3 -c commitLog -v 0
|
||||
system sh/cfg.sh -n dnode1 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode2 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode3 -c clog -v 2
|
||||
system sh/cfg.sh -n dnode1 -c numofMpeers -v 3
|
||||
system sh/cfg.sh -n dnode2 -c numofMpeers -v 3
|
||||
system sh/cfg.sh -n dnode3 -c numofMpeers -v 3
|
||||
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
system sh/exec_up.sh -n dnode1 -s start
|
||||
sql connect
|
||||
sql create dnode $hostname2
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
system sh/exec_up.sh -n dnode2 -s start
|
||||
system sh/exec_up.sh -n dnode3 -s start
|
||||
sleep 3000
|
||||
|
||||
$N = 10
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
run unique/vnode/replica2_basic2.sim
|
||||
run unique/vnode/replica2_basic.sim
|
||||
run unique/vnode/replica2_repeat.sim
|
||||
#run unique/vnode/replica2_basic.sim
|
||||
#run unique/vnode/replica2_repeat.sim
|
||||
run unique/vnode/replica3_basic.sim
|
||||
run unique/vnode/replica3_repeat.sim
|
||||
run unique/vnode/commit.sim
|
||||
run unique/vnode/many.sim
|
||||
|
||||
|
||||
#run unique/vnode/replica3_repeat.sim
|
||||
#run unique/vnode/commit.sim
|
||||
#run unique/vnode/many.sim
|
||||
|
|
Loading…
Reference in New Issue