Merge branch '3.0' of github.com:taosdata/TDengine into 3.0
This commit is contained in:
commit
2d8cd533e3
|
@ -0,0 +1,13 @@
|
||||||
|
|
||||||
|
# zlib
|
||||||
|
ExternalProject_Add(taosadapter
|
||||||
|
GIT_REPOSITORY https://github.com/taosdata/taosadapter.git
|
||||||
|
GIT_TAG df8678f
|
||||||
|
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taosadapter"
|
||||||
|
BINARY_DIR ""
|
||||||
|
#BUILD_IN_SOURCE TRUE
|
||||||
|
CONFIGURE_COMMAND ""
|
||||||
|
BUILD_COMMAND ""
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
TEST_COMMAND ""
|
||||||
|
)
|
|
@ -0,0 +1,13 @@
|
||||||
|
|
||||||
|
# zlib
|
||||||
|
ExternalProject_Add(taos-tools
|
||||||
|
GIT_REPOSITORY https://github.com/taosdata/taos-tools.git
|
||||||
|
GIT_TAG 817cb6a
|
||||||
|
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taos-tools"
|
||||||
|
BINARY_DIR ""
|
||||||
|
#BUILD_IN_SOURCE TRUE
|
||||||
|
CONFIGURE_COMMAND ""
|
||||||
|
BUILD_COMMAND ""
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
TEST_COMMAND ""
|
||||||
|
)
|
|
@ -0,0 +1,13 @@
|
||||||
|
|
||||||
|
# zlib
|
||||||
|
ExternalProject_Add(taosws-rs
|
||||||
|
GIT_REPOSITORY https://github.com/taosdata/taosws-rs.git
|
||||||
|
GIT_TAG 9de599d
|
||||||
|
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taosws-rs"
|
||||||
|
BINARY_DIR ""
|
||||||
|
#BUILD_IN_SOURCE TRUE
|
||||||
|
CONFIGURE_COMMAND ""
|
||||||
|
BUILD_COMMAND ""
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
TEST_COMMAND ""
|
||||||
|
)
|
|
@ -9,6 +9,24 @@ endfunction(cat IN_FILE OUT_FILE)
|
||||||
set(CONTRIB_TMP_FILE "${CMAKE_BINARY_DIR}/deps_tmp_CMakeLists.txt.in")
|
set(CONTRIB_TMP_FILE "${CMAKE_BINARY_DIR}/deps_tmp_CMakeLists.txt.in")
|
||||||
configure_file("${TD_SUPPORT_DIR}/deps_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
|
configure_file("${TD_SUPPORT_DIR}/deps_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
|
||||||
|
|
||||||
|
# taos-tools
|
||||||
|
if(${BUILD_TOOLS})
|
||||||
|
cat("${TD_SUPPORT_DIR}/taostools_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# taosws-rs
|
||||||
|
if(${WEBSOCKET})
|
||||||
|
cat("${TD_SUPPORT_DIR}/taosws_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# taosadapter
|
||||||
|
if(${BUILD_HTTP})
|
||||||
|
MESSAGE("BUILD_HTTP is on")
|
||||||
|
else ()
|
||||||
|
MESSAGE("BUILD_HTTP is off, use taosAdapter")
|
||||||
|
cat("${TD_SUPPORT_DIR}/taosadapter_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
|
||||||
|
endif()
|
||||||
|
|
||||||
# pthread
|
# pthread
|
||||||
if(${BUILD_PTHREAD})
|
if(${BUILD_PTHREAD})
|
||||||
cat("${TD_SUPPORT_DIR}/pthread_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
|
cat("${TD_SUPPORT_DIR}/pthread_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
|
||||||
|
|
|
@ -375,6 +375,7 @@ typedef struct SQuery {
|
||||||
int8_t precision;
|
int8_t precision;
|
||||||
SCmdMsgInfo* pCmdMsg;
|
SCmdMsgInfo* pCmdMsg;
|
||||||
int32_t msgType;
|
int32_t msgType;
|
||||||
|
SArray* pTargetTableList;
|
||||||
SArray* pTableList;
|
SArray* pTableList;
|
||||||
SArray* pDbList;
|
SArray* pDbList;
|
||||||
bool showRewrite;
|
bool showRewrite;
|
||||||
|
|
|
@ -222,6 +222,7 @@ typedef struct SRequestObj {
|
||||||
int32_t code;
|
int32_t code;
|
||||||
SArray* dbList;
|
SArray* dbList;
|
||||||
SArray* tableList;
|
SArray* tableList;
|
||||||
|
SArray* targetTableList;
|
||||||
SQueryExecMetric metric;
|
SQueryExecMetric metric;
|
||||||
SRequestSendRecvBody body;
|
SRequestSendRecvBody body;
|
||||||
bool syncQuery; // todo refactor: async query object
|
bool syncQuery; // todo refactor: async query object
|
||||||
|
|
|
@ -235,6 +235,7 @@ int32_t parseSql(SRequestObj* pRequest, bool topicQuery, SQuery** pQuery, SStmtC
|
||||||
if (TSDB_CODE_SUCCESS == code || NEED_CLIENT_HANDLE_ERROR(code)) {
|
if (TSDB_CODE_SUCCESS == code || NEED_CLIENT_HANDLE_ERROR(code)) {
|
||||||
TSWAP(pRequest->dbList, (*pQuery)->pDbList);
|
TSWAP(pRequest->dbList, (*pQuery)->pDbList);
|
||||||
TSWAP(pRequest->tableList, (*pQuery)->pTableList);
|
TSWAP(pRequest->tableList, (*pQuery)->pTableList);
|
||||||
|
TSWAP(pRequest->targetTableList, (*pQuery)->pTargetTableList);
|
||||||
}
|
}
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
|
@ -851,7 +852,7 @@ void schedulerExecCb(SExecResult* pResult, void* param, int32_t code) {
|
||||||
|
|
||||||
tscDebug("schedulerExecCb request type %s", TMSG_INFO(pRequest->type));
|
tscDebug("schedulerExecCb request type %s", TMSG_INFO(pRequest->type));
|
||||||
if (NEED_CLIENT_RM_TBLMETA_REQ(pRequest->type)) {
|
if (NEED_CLIENT_RM_TBLMETA_REQ(pRequest->type)) {
|
||||||
removeMeta(pTscObj, pRequest->tableList);
|
removeMeta(pTscObj, pRequest->targetTableList);
|
||||||
}
|
}
|
||||||
|
|
||||||
// return to client
|
// return to client
|
||||||
|
@ -1094,7 +1095,7 @@ SRequestObj* execQuery(uint64_t connId, const char* sql, int sqlLen, bool valida
|
||||||
} while (retryNum++ < REQUEST_TOTAL_EXEC_TIMES);
|
} while (retryNum++ < REQUEST_TOTAL_EXEC_TIMES);
|
||||||
|
|
||||||
if (NEED_CLIENT_RM_TBLMETA_REQ(pRequest->type)) {
|
if (NEED_CLIENT_RM_TBLMETA_REQ(pRequest->type)) {
|
||||||
removeMeta(pRequest->pTscObj, pRequest->tableList);
|
removeMeta(pRequest->pTscObj, pRequest->targetTableList);
|
||||||
}
|
}
|
||||||
|
|
||||||
return pRequest;
|
return pRequest;
|
||||||
|
|
|
@ -687,6 +687,7 @@ void retrieveMetaCallback(SMetaData *pResultMeta, void *param, int32_t code) {
|
||||||
|
|
||||||
TSWAP(pRequest->dbList, (pQuery)->pDbList);
|
TSWAP(pRequest->dbList, (pQuery)->pDbList);
|
||||||
TSWAP(pRequest->tableList, (pQuery)->pTableList);
|
TSWAP(pRequest->tableList, (pQuery)->pTableList);
|
||||||
|
TSWAP(pRequest->targetTableList, (pQuery)->pTargetTableList);
|
||||||
|
|
||||||
destorySqlParseWrapper(pWrapper);
|
destorySqlParseWrapper(pWrapper);
|
||||||
|
|
||||||
|
|
|
@ -693,6 +693,7 @@ int stmtBindBatch(TAOS_STMT* stmt, TAOS_MULTI_BIND* bind, int32_t colIdx) {
|
||||||
|
|
||||||
TSWAP(pStmt->exec.pRequest->dbList, pStmt->sql.pQuery->pDbList);
|
TSWAP(pStmt->exec.pRequest->dbList, pStmt->sql.pQuery->pDbList);
|
||||||
TSWAP(pStmt->exec.pRequest->tableList, pStmt->sql.pQuery->pTableList);
|
TSWAP(pStmt->exec.pRequest->tableList, pStmt->sql.pQuery->pTableList);
|
||||||
|
TSWAP(pStmt->exec.pRequest->targetTableList, pStmt->sql.pQuery->pTargetTableList);
|
||||||
|
|
||||||
// if (STMT_TYPE_QUERY == pStmt->sql.queryRes) {
|
// if (STMT_TYPE_QUERY == pStmt->sql.queryRes) {
|
||||||
// STMT_ERR_RET(stmtRestoreQueryFields(pStmt));
|
// STMT_ERR_RET(stmtRestoreQueryFields(pStmt));
|
||||||
|
|
|
@ -267,8 +267,9 @@ int32_t isQualifiedTable(STableKeyInfo* info, SNode* pTagCond, void* metaHandle,
|
||||||
code = metaGetTableEntryByUid(&mr, info->uid);
|
code = metaGetTableEntryByUid(&mr, info->uid);
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
metaReaderClear(&mr);
|
metaReaderClear(&mr);
|
||||||
|
*pQualified = false;
|
||||||
|
|
||||||
return terrno;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
SNode* pTagCondTmp = nodesCloneNode(pTagCond);
|
SNode* pTagCondTmp = nodesCloneNode(pTagCond);
|
||||||
|
@ -395,7 +396,7 @@ int32_t getGroupIdFromTagsVal(void* pMeta, uint64_t uid, SNodeList* pGroupNode,
|
||||||
|
|
||||||
nodesRewriteExprsPostOrder(groupNew, doTranslateTagExpr, &mr);
|
nodesRewriteExprsPostOrder(groupNew, doTranslateTagExpr, &mr);
|
||||||
char* isNull = (char*)keyBuf;
|
char* isNull = (char*)keyBuf;
|
||||||
char* pStart = (char*)keyBuf + sizeof(int8_t)*LIST_LENGTH(pGroupNode);
|
char* pStart = (char*)keyBuf + sizeof(int8_t) * LIST_LENGTH(pGroupNode);
|
||||||
|
|
||||||
SNode* pNode;
|
SNode* pNode;
|
||||||
int32_t index = 0;
|
int32_t index = 0;
|
||||||
|
|
|
@ -39,6 +39,7 @@ typedef struct STranslateContext {
|
||||||
SCmdMsgInfo* pCmdMsg;
|
SCmdMsgInfo* pCmdMsg;
|
||||||
SHashObj* pDbs;
|
SHashObj* pDbs;
|
||||||
SHashObj* pTables;
|
SHashObj* pTables;
|
||||||
|
SHashObj* pTargetTables;
|
||||||
SExplainOptions* pExplainOpt;
|
SExplainOptions* pExplainOpt;
|
||||||
SParseMetaCache* pMetaCache;
|
SParseMetaCache* pMetaCache;
|
||||||
bool createStream;
|
bool createStream;
|
||||||
|
@ -89,10 +90,10 @@ static int32_t collectUseDatabase(const SName* pName, SHashObj* pDbs) {
|
||||||
return collectUseDatabaseImpl(dbFName, pDbs);
|
return collectUseDatabaseImpl(dbFName, pDbs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t collectUseTable(const SName* pName, SHashObj* pDbs) {
|
static int32_t collectUseTable(const SName* pName, SHashObj* pTable) {
|
||||||
char fullName[TSDB_TABLE_FNAME_LEN];
|
char fullName[TSDB_TABLE_FNAME_LEN];
|
||||||
tNameExtractFullName(pName, fullName);
|
tNameExtractFullName(pName, fullName);
|
||||||
return taosHashPut(pDbs, fullName, strlen(fullName), pName, sizeof(SName));
|
return taosHashPut(pTable, fullName, strlen(fullName), pName, sizeof(SName));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t getTableMetaImpl(STranslateContext* pCxt, const SName* pName, STableMeta** pMeta) {
|
static int32_t getTableMetaImpl(STranslateContext* pCxt, const SName* pName, STableMeta** pMeta) {
|
||||||
|
@ -357,7 +358,8 @@ static int32_t initTranslateContext(SParseContext* pParseCxt, SParseMetaCache* p
|
||||||
pCxt->pMetaCache = pMetaCache;
|
pCxt->pMetaCache = pMetaCache;
|
||||||
pCxt->pDbs = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
|
pCxt->pDbs = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
|
||||||
pCxt->pTables = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
|
pCxt->pTables = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
|
||||||
if (NULL == pCxt->pNsLevel || NULL == pCxt->pDbs || NULL == pCxt->pTables) {
|
pCxt->pTargetTables = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
|
||||||
|
if (NULL == pCxt->pNsLevel || NULL == pCxt->pDbs || NULL == pCxt->pTables || NULL == pCxt->pTargetTables) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -3933,6 +3935,9 @@ static int32_t buildCreateStbReq(STranslateContext* pCxt, SCreateTableStmt* pStm
|
||||||
SName tableName;
|
SName tableName;
|
||||||
tNameExtractFullName(toName(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, &tableName), pReq->name);
|
tNameExtractFullName(toName(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, &tableName), pReq->name);
|
||||||
int32_t code = collectUseTable(&tableName, pCxt->pTables);
|
int32_t code = collectUseTable(&tableName, pCxt->pTables);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = collectUseTable(&tableName, pCxt->pTargetTables);
|
||||||
|
}
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = buildRollupAst(pCxt, pStmt, pReq);
|
code = buildRollupAst(pCxt, pStmt, pReq);
|
||||||
}
|
}
|
||||||
|
@ -3953,11 +3958,14 @@ static int32_t translateCreateSuperTable(STranslateContext* pCxt, SCreateTableSt
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t doTranslateDropSuperTable(STranslateContext* pCxt, const SName* pTableName, bool ignoreNotExists) {
|
static int32_t doTranslateDropSuperTable(STranslateContext* pCxt, const SName* pTableName, bool ignoreNotExists) {
|
||||||
|
int32_t code = collectUseTable(pTableName, pCxt->pTargetTables);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
SMDropStbReq dropReq = {0};
|
SMDropStbReq dropReq = {0};
|
||||||
tNameExtractFullName(pTableName, dropReq.name);
|
tNameExtractFullName(pTableName, dropReq.name);
|
||||||
dropReq.igNotExists = ignoreNotExists;
|
dropReq.igNotExists = ignoreNotExists;
|
||||||
|
code = buildCmdMsg(pCxt, TDMT_MND_DROP_STB, (FSerializeFunc)tSerializeSMDropStbReq, &dropReq);
|
||||||
return buildCmdMsg(pCxt, TDMT_MND_DROP_STB, (FSerializeFunc)tSerializeSMDropStbReq, &dropReq);
|
}
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t translateDropTable(STranslateContext* pCxt, SDropTableStmt* pStmt) {
|
static int32_t translateDropTable(STranslateContext* pCxt, SDropTableStmt* pStmt) {
|
||||||
|
@ -5559,8 +5567,13 @@ static int32_t rewriteCreateTable(STranslateContext* pCxt, SQuery* pQuery) {
|
||||||
|
|
||||||
int32_t code = checkCreateTable(pCxt, pStmt, false);
|
int32_t code = checkCreateTable(pCxt, pStmt, false);
|
||||||
SVgroupInfo info = {0};
|
SVgroupInfo info = {0};
|
||||||
|
SName name;
|
||||||
|
toName(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, &name);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = getTableHashVgroup(pCxt, pStmt->dbName, pStmt->tableName, &info);
|
code = getTableHashVgroupImpl(pCxt, &name, &info);
|
||||||
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = collectUseTable(&name, pCxt->pTargetTables);
|
||||||
}
|
}
|
||||||
SArray* pBufArray = NULL;
|
SArray* pBufArray = NULL;
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
@ -5829,6 +5842,11 @@ static int32_t rewriteCreateSubTable(STranslateContext* pCxt, SCreateSubTableCla
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = getTableMeta(pCxt, pStmt->useDbName, pStmt->useTableName, &pSuperTableMeta);
|
code = getTableMeta(pCxt, pStmt->useDbName, pStmt->useTableName, &pSuperTableMeta);
|
||||||
}
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
SName name;
|
||||||
|
toName(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, &name);
|
||||||
|
code = collectUseTable(&name, pCxt->pTargetTables);
|
||||||
|
}
|
||||||
|
|
||||||
STag* pTag = NULL;
|
STag* pTag = NULL;
|
||||||
SArray* tagName = taosArrayInit(8, TSDB_COL_NAME_LEN);
|
SArray* tagName = taosArrayInit(8, TSDB_COL_NAME_LEN);
|
||||||
|
@ -5927,8 +5945,13 @@ static void addDropTbReqIntoVgroup(SHashObj* pVgroupHashmap, SDropTableClause* p
|
||||||
|
|
||||||
static int32_t buildDropTableVgroupHashmap(STranslateContext* pCxt, SDropTableClause* pClause, bool* pIsSuperTable,
|
static int32_t buildDropTableVgroupHashmap(STranslateContext* pCxt, SDropTableClause* pClause, bool* pIsSuperTable,
|
||||||
SHashObj* pVgroupHashmap) {
|
SHashObj* pVgroupHashmap) {
|
||||||
|
SName name;
|
||||||
|
toName(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, &name);
|
||||||
STableMeta* pTableMeta = NULL;
|
STableMeta* pTableMeta = NULL;
|
||||||
int32_t code = getTableMeta(pCxt, pClause->dbName, pClause->tableName, &pTableMeta);
|
int32_t code = getTableMetaImpl(pCxt, &name, &pTableMeta);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = collectUseTable(&name, pCxt->pTargetTables);
|
||||||
|
}
|
||||||
|
|
||||||
if (TSDB_CODE_SUCCESS == code && TSDB_SUPER_TABLE == pTableMeta->tableType) {
|
if (TSDB_CODE_SUCCESS == code && TSDB_SUPER_TABLE == pTableMeta->tableType) {
|
||||||
*pIsSuperTable = true;
|
*pIsSuperTable = true;
|
||||||
|
@ -6509,6 +6532,20 @@ static int32_t setRefreshMate(STranslateContext* pCxt, SQuery* pQuery) {
|
||||||
pTable = taosHashIterate(pCxt->pTables, pTable);
|
pTable = taosHashIterate(pCxt->pTables, pTable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (NULL != pCxt->pTargetTables) {
|
||||||
|
taosArrayDestroy(pQuery->pTargetTableList);
|
||||||
|
pQuery->pTargetTableList = taosArrayInit(taosHashGetSize(pCxt->pTargetTables), sizeof(SName));
|
||||||
|
if (NULL == pQuery->pTargetTableList) {
|
||||||
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
SName* pTable = taosHashIterate(pCxt->pTargetTables, NULL);
|
||||||
|
while (NULL != pTable) {
|
||||||
|
taosArrayPush(pQuery->pTargetTableList, pTable);
|
||||||
|
pTable = taosHashIterate(pCxt->pTargetTables, pTable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -166,7 +166,7 @@
|
||||||
|
|
||||||
# ---- query
|
# ---- query
|
||||||
./test.sh -f tsim/query/charScalarFunction.sim
|
./test.sh -f tsim/query/charScalarFunction.sim
|
||||||
./test.sh -f tsim/query/explain.sim
|
# ./test.sh -f tsim/query/explain.sim
|
||||||
./test.sh -f tsim/query/interval-offset.sim
|
./test.sh -f tsim/query/interval-offset.sim
|
||||||
./test.sh -f tsim/query/interval.sim
|
./test.sh -f tsim/query/interval.sim
|
||||||
./test.sh -f tsim/query/scalarFunction.sim
|
./test.sh -f tsim/query/scalarFunction.sim
|
||||||
|
|
Loading…
Reference in New Issue