commit
1d48f55ec2
|
@ -575,11 +575,12 @@ function install_config() {
|
||||||
function install_share_etc() {
|
function install_share_etc() {
|
||||||
[ ! -d ${script_dir}/share/etc ] && return
|
[ ! -d ${script_dir}/share/etc ] && return
|
||||||
for c in `ls ${script_dir}/share/etc/`; do
|
for c in `ls ${script_dir}/share/etc/`; do
|
||||||
if [ -e /etc/$c ]; then
|
if [ -e /etc/${clientName2}/$c ]; then
|
||||||
out=/etc/$c.new.`date +%F`
|
out=/etc/${clientName2}/$c.new.`date +%F`
|
||||||
${csudo}cp -f ${script_dir}/share/etc/$c $out ||:
|
${csudo}cp -f ${script_dir}/share/etc/$c $out ||:
|
||||||
else
|
else
|
||||||
${csudo}cp -f ${script_dir}/share/etc/$c /etc/$c ||:
|
${csudo}mkdir -p /etc/${clientName2} >/dev/null 2>/dev/null ||:
|
||||||
|
${csudo}cp -f ${script_dir}/share/etc/$c /etc/${clientName2}/$c ||:
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
TDengine is an open-source, cloud-native time-series database optimized for Internet of Things (IoT), Connected Cars, and Industrial IoT. With its built-in caching, stream processing, and data subscription capabilities, TDengine offers a simplified solution for time-series data processing.
|
TDengine is an open-source, cloud-native time-series database optimized for Internet of Things (IoT), Connected Cars, and Industrial IoT. With its built-in caching, stream processing, and data subscription capabilities, TDengine offers a simplified solution for time-series data processing.
|
||||||
|
|
||||||
To configure TDengine : edit /etc/taos/taos.cfg
|
• To configure TDengine, edit /etc/taos/taos.cfg
|
||||||
To start service : launchctl start com.tdengine.taosd
|
• To start service, run launchctl start com.tdengine.taosd
|
||||||
To start Taos Adapter : launchctl start com.tdengine.taosadapter
|
• To start Taos Adapter, run launchctl start com.tdengine.taosadapter
|
||||||
To access TDengine : use taos in shell
|
• To access TDengine from your local machine, run taos
|
||||||
|
|
||||||
If you're experiencing problems installing TDengine, check the file /var/log/taos/tdengine_install.log to help troubleshoot the installation.
|
If you're experiencing problems installing TDengine, check the file /var/log/taos/tdengine_install.log to help troubleshoot the installation.
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
TDengine is an open-source, cloud-native time-series database optimized for Internet of Things (IoT), Connected Cars, and Industrial IoT. With its built-in caching, stream processing, and data subscription capabilities, TDengine offers a simplified solution for time-series data processing.
|
TDengine is an open-source, cloud-native time-series database optimized for Internet of Things (IoT), Connected Cars, and Industrial IoT. With its built-in caching, stream processing, and data subscription capabilities, TDengine offers a simplified solution for time-series data processing.
|
||||||
|
|
||||||
Once it's installed, please take the steps below:
|
After the installation process is complete, perform the following steps to start using TDengine:
|
||||||
1: open a terminal/shell in Mac
|
1: Open Terminal on your Mac.
|
||||||
2: if connecting to Cloud Service, follow the instructions on your cloud service account and configure the environment variable
|
2: To connect to a TDengine server using the default settings and credentials, run the taos command.
|
||||||
3: if connecting to another TDengine Service, you can also view help information via "taos --help"
|
3: To connect to a TDengine server using custom settings or credentials, run taos --help for more information.
|
||||||
4: execute command taos
|
4: To connect to TDengine Cloud, follow the instructions on the Tools - TDengine CLI page in your TDengine Cloud account.
|
||||||
|
|
||||||
If you're experiencing problems installing TDengine, check the file /var/log/taos/tdengine_install.log to help troubleshoot the installation.
|
If any issues occur during installation, check the /var/log/taos/tdengine_install.log file to troubleshoot.
|
|
@ -163,8 +163,8 @@ static int32_t vmPutMsgToQueue(SVnodeMgmt *pMgmt, SRpcMsg *pMsg, EQueueType qtyp
|
||||||
|
|
||||||
SVnodeObj *pVnode = vmAcquireVnode(pMgmt, pHead->vgId);
|
SVnodeObj *pVnode = vmAcquireVnode(pMgmt, pHead->vgId);
|
||||||
if (pVnode == NULL) {
|
if (pVnode == NULL) {
|
||||||
dGError("vgId:%d, msg:%p failed to put into vnode queue since %s, type:%s qtype:%d contLen:%d", pHead->vgId, pMsg,
|
dGWarn("vgId:%d, msg:%p failed to put into vnode queue since %s, type:%s qtype:%d contLen:%d", pHead->vgId, pMsg,
|
||||||
terrstr(), TMSG_INFO(pMsg->msgType), qtype, pHead->contLen);
|
terrstr(), TMSG_INFO(pMsg->msgType), qtype, pHead->contLen);
|
||||||
terrno = (terrno != 0) ? terrno : -1;
|
terrno = (terrno != 0) ? terrno : -1;
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,7 @@ int32_t mndGetClusterName(SMnode *pMnode, char *clusterName, int32_t len) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SClusterObj *mndAcquireCluster(SMnode *pMnode) {
|
static SClusterObj *mndAcquireCluster(SMnode *pMnode, void **ppIter) {
|
||||||
SSdb *pSdb = pMnode->pSdb;
|
SSdb *pSdb = pMnode->pSdb;
|
||||||
void *pIter = NULL;
|
void *pIter = NULL;
|
||||||
|
|
||||||
|
@ -76,23 +76,27 @@ static SClusterObj *mndAcquireCluster(SMnode *pMnode) {
|
||||||
pIter = sdbFetch(pSdb, SDB_CLUSTER, pIter, (void **)&pCluster);
|
pIter = sdbFetch(pSdb, SDB_CLUSTER, pIter, (void **)&pCluster);
|
||||||
if (pIter == NULL) break;
|
if (pIter == NULL) break;
|
||||||
|
|
||||||
|
*ppIter = pIter;
|
||||||
|
|
||||||
return pCluster;
|
return pCluster;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mndReleaseCluster(SMnode *pMnode, SClusterObj *pCluster) {
|
static void mndReleaseCluster(SMnode *pMnode, SClusterObj *pCluster, void *pIter) {
|
||||||
SSdb *pSdb = pMnode->pSdb;
|
SSdb *pSdb = pMnode->pSdb;
|
||||||
|
sdbCancelFetch(pSdb, pIter);
|
||||||
sdbRelease(pSdb, pCluster);
|
sdbRelease(pSdb, pCluster);
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t mndGetClusterId(SMnode *pMnode) {
|
int64_t mndGetClusterId(SMnode *pMnode) {
|
||||||
int64_t clusterId = 0;
|
int64_t clusterId = 0;
|
||||||
SClusterObj *pCluster = mndAcquireCluster(pMnode);
|
void *pIter = NULL;
|
||||||
|
SClusterObj *pCluster = mndAcquireCluster(pMnode, &pIter);
|
||||||
if (pCluster != NULL) {
|
if (pCluster != NULL) {
|
||||||
clusterId = pCluster->id;
|
clusterId = pCluster->id;
|
||||||
mndReleaseCluster(pMnode, pCluster);
|
mndReleaseCluster(pMnode, pCluster, pIter);
|
||||||
}
|
}
|
||||||
|
|
||||||
return clusterId;
|
return clusterId;
|
||||||
|
@ -100,10 +104,11 @@ int64_t mndGetClusterId(SMnode *pMnode) {
|
||||||
|
|
||||||
int64_t mndGetClusterCreateTime(SMnode *pMnode) {
|
int64_t mndGetClusterCreateTime(SMnode *pMnode) {
|
||||||
int64_t createTime = 0;
|
int64_t createTime = 0;
|
||||||
SClusterObj *pCluster = mndAcquireCluster(pMnode);
|
void *pIter = NULL;
|
||||||
|
SClusterObj *pCluster = mndAcquireCluster(pMnode, &pIter);
|
||||||
if (pCluster != NULL) {
|
if (pCluster != NULL) {
|
||||||
createTime = pCluster->createdTime;
|
createTime = pCluster->createdTime;
|
||||||
mndReleaseCluster(pMnode, pCluster);
|
mndReleaseCluster(pMnode, pCluster, pIter);
|
||||||
}
|
}
|
||||||
|
|
||||||
return createTime;
|
return createTime;
|
||||||
|
@ -121,10 +126,11 @@ static int32_t mndGetClusterUpTimeImp(SClusterObj *pCluster) {
|
||||||
|
|
||||||
float mndGetClusterUpTime(SMnode *pMnode) {
|
float mndGetClusterUpTime(SMnode *pMnode) {
|
||||||
int64_t upTime = 0;
|
int64_t upTime = 0;
|
||||||
SClusterObj *pCluster = mndAcquireCluster(pMnode);
|
void *pIter = NULL;
|
||||||
|
SClusterObj *pCluster = mndAcquireCluster(pMnode, &pIter);
|
||||||
if (pCluster != NULL) {
|
if (pCluster != NULL) {
|
||||||
upTime = mndGetClusterUpTimeImp(pCluster);
|
upTime = mndGetClusterUpTimeImp(pCluster);
|
||||||
mndReleaseCluster(pMnode, pCluster);
|
mndReleaseCluster(pMnode, pCluster, pIter);
|
||||||
}
|
}
|
||||||
|
|
||||||
return upTime / 86400.0f;
|
return upTime / 86400.0f;
|
||||||
|
@ -321,11 +327,12 @@ static void mndCancelGetNextCluster(SMnode *pMnode, void *pIter) {
|
||||||
static int32_t mndProcessUptimeTimer(SRpcMsg *pReq) {
|
static int32_t mndProcessUptimeTimer(SRpcMsg *pReq) {
|
||||||
SMnode *pMnode = pReq->info.node;
|
SMnode *pMnode = pReq->info.node;
|
||||||
SClusterObj clusterObj = {0};
|
SClusterObj clusterObj = {0};
|
||||||
SClusterObj *pCluster = mndAcquireCluster(pMnode);
|
void *pIter = NULL;
|
||||||
|
SClusterObj *pCluster = mndAcquireCluster(pMnode, &pIter);
|
||||||
if (pCluster != NULL) {
|
if (pCluster != NULL) {
|
||||||
memcpy(&clusterObj, pCluster, sizeof(SClusterObj));
|
memcpy(&clusterObj, pCluster, sizeof(SClusterObj));
|
||||||
clusterObj.upTime += tsUptimeInterval;
|
clusterObj.upTime += tsUptimeInterval;
|
||||||
mndReleaseCluster(pMnode, pCluster);
|
mndReleaseCluster(pMnode, pCluster, pIter);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clusterObj.id <= 0) {
|
if (clusterObj.id <= 0) {
|
||||||
|
|
|
@ -1168,15 +1168,13 @@ static void mndLoopHash(SHashObj *hash, char *priType, SSDataBlock *pBlock, int3
|
||||||
sprintf(sql, "error");
|
sprintf(sql, "error");
|
||||||
}
|
}
|
||||||
|
|
||||||
// char *obj = taosMemoryMalloc(sqlLen + VARSTR_HEADER_SIZE + 1);
|
|
||||||
char obj[TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE] = {0};
|
char obj[TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(obj, sql, pShow->pMeta->pSchemas[cols].bytes);
|
STR_WITH_MAXSIZE_TO_VARSTR(obj, sql, pShow->pMeta->pSchemas[cols].bytes);
|
||||||
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataSetVal(pColInfo, *numOfRows, (const char *)obj, false);
|
colDataSetVal(pColInfo, *numOfRows, (const char *)obj, false);
|
||||||
// taosMemoryFree(obj);
|
|
||||||
} else {
|
} else {
|
||||||
char condition[20] = {0};
|
char condition[TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes);
|
STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes);
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataSetVal(pColInfo, *numOfRows, (const char *)condition, false);
|
colDataSetVal(pColInfo, *numOfRows, (const char *)condition, false);
|
||||||
|
@ -1257,12 +1255,12 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)objName, false);
|
colDataSetVal(pColInfo, numOfRows, (const char *)objName, false);
|
||||||
|
|
||||||
char tableName[20] = {0};
|
char tableName[TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tableName, "", pShow->pMeta->pSchemas[cols].bytes);
|
STR_WITH_MAXSIZE_TO_VARSTR(tableName, "", pShow->pMeta->pSchemas[cols].bytes);
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false);
|
colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false);
|
||||||
|
|
||||||
char condition[20] = {0};
|
char condition[TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes);
|
STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes);
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)condition, false);
|
colDataSetVal(pColInfo, numOfRows, (const char *)condition, false);
|
||||||
|
@ -1292,12 +1290,12 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)objName, false);
|
colDataSetVal(pColInfo, numOfRows, (const char *)objName, false);
|
||||||
|
|
||||||
char tableName[20] = {0};
|
char tableName[TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tableName, "", pShow->pMeta->pSchemas[cols].bytes);
|
STR_WITH_MAXSIZE_TO_VARSTR(tableName, "", pShow->pMeta->pSchemas[cols].bytes);
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false);
|
colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false);
|
||||||
|
|
||||||
char condition[20] = {0};
|
char condition[TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes);
|
STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes);
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)condition, false);
|
colDataSetVal(pColInfo, numOfRows, (const char *)condition, false);
|
||||||
|
@ -1329,12 +1327,12 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)topicName, false);
|
colDataSetVal(pColInfo, numOfRows, (const char *)topicName, false);
|
||||||
|
|
||||||
char tableName[20] = {0};
|
char tableName[TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(tableName, "", pShow->pMeta->pSchemas[cols].bytes);
|
STR_WITH_MAXSIZE_TO_VARSTR(tableName, "", pShow->pMeta->pSchemas[cols].bytes);
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false);
|
colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false);
|
||||||
|
|
||||||
char condition[20] = {0};
|
char condition[TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes);
|
STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes);
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataSetVal(pColInfo, numOfRows, (const char *)condition, false);
|
colDataSetVal(pColInfo, numOfRows, (const char *)condition, false);
|
||||||
|
|
|
@ -35,7 +35,11 @@ _err:
|
||||||
static void tsdbCloseBICache(STsdb *pTsdb) {
|
static void tsdbCloseBICache(STsdb *pTsdb) {
|
||||||
SLRUCache *pCache = pTsdb->biCache;
|
SLRUCache *pCache = pTsdb->biCache;
|
||||||
if (pCache) {
|
if (pCache) {
|
||||||
|
int32_t elems = taosLRUCacheGetElems(pCache);
|
||||||
|
tsdbTrace("vgId:%d, elems: %d", TD_VID(pTsdb->pVnode), elems);
|
||||||
taosLRUCacheEraseUnrefEntries(pCache);
|
taosLRUCacheEraseUnrefEntries(pCache);
|
||||||
|
elems = taosLRUCacheGetElems(pCache);
|
||||||
|
tsdbTrace("vgId:%d, elems: %d", TD_VID(pTsdb->pVnode), elems);
|
||||||
|
|
||||||
taosLRUCacheCleanup(pCache);
|
taosLRUCacheCleanup(pCache);
|
||||||
|
|
||||||
|
@ -820,7 +824,12 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie
|
||||||
* &state->blockIdx);
|
* &state->blockIdx);
|
||||||
*/
|
*/
|
||||||
state->pBlockIdx = taosArraySearch(state->aBlockIdx, state->pBlockIdxExp, tCmprBlockIdx, TD_EQ);
|
state->pBlockIdx = taosArraySearch(state->aBlockIdx, state->pBlockIdxExp, tCmprBlockIdx, TD_EQ);
|
||||||
if (!state->pBlockIdx) { /*
|
if (!state->pBlockIdx) {
|
||||||
|
tsdbBICacheRelease(state->pTsdb->biCache, state->aBlockIdxHandle);
|
||||||
|
|
||||||
|
state->aBlockIdxHandle = NULL;
|
||||||
|
state->aBlockIdx = NULL;
|
||||||
|
/*
|
||||||
tsdbDataFReaderClose(state->pDataFReader);
|
tsdbDataFReaderClose(state->pDataFReader);
|
||||||
*state->pDataFReader = NULL;
|
*state->pDataFReader = NULL;
|
||||||
resetLastBlockLoadInfo(state->pLoadInfo);*/
|
resetLastBlockLoadInfo(state->pLoadInfo);*/
|
||||||
|
@ -1469,11 +1478,14 @@ static int32_t mergeLastRow(tb_uid_t uid, STsdb *pTsdb, bool *dup, SArray **ppCo
|
||||||
|
|
||||||
hasRow = true;
|
hasRow = true;
|
||||||
|
|
||||||
code = updateTSchema(TSDBROW_SVERSION(pRow), pr, uid);
|
int32_t sversion = TSDBROW_SVERSION(pRow);
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
if (sversion != -1) {
|
||||||
goto _err;
|
code = updateTSchema(sversion, pr, uid);
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
pTSchema = pr->pCurrSchema;
|
||||||
}
|
}
|
||||||
pTSchema = pr->pCurrSchema;
|
|
||||||
int16_t nCol = pTSchema->numOfCols;
|
int16_t nCol = pTSchema->numOfCols;
|
||||||
|
|
||||||
TSKEY rowTs = TSDBROW_TS(pRow);
|
TSKEY rowTs = TSDBROW_TS(pRow);
|
||||||
|
@ -1623,11 +1635,14 @@ static int32_t mergeLast(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SCach
|
||||||
|
|
||||||
hasRow = true;
|
hasRow = true;
|
||||||
|
|
||||||
code = updateTSchema(TSDBROW_SVERSION(pRow), pr, uid);
|
int32_t sversion = TSDBROW_SVERSION(pRow);
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
if (sversion != -1) {
|
||||||
goto _err;
|
code = updateTSchema(sversion, pr, uid);
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
pTSchema = pr->pCurrSchema;
|
||||||
}
|
}
|
||||||
pTSchema = pr->pCurrSchema;
|
|
||||||
int16_t nCol = pTSchema->numOfCols;
|
int16_t nCol = pTSchema->numOfCols;
|
||||||
|
|
||||||
TSKEY rowTs = TSDBROW_TS(pRow);
|
TSKEY rowTs = TSDBROW_TS(pRow);
|
||||||
|
@ -1931,6 +1946,7 @@ int32_t tsdbCacheGetBlockIdx(SLRUCache *pCache, SDataFReader *pFileReader, LRUHa
|
||||||
taosThreadMutexUnlock(&pTsdb->biMutex);
|
taosThreadMutexUnlock(&pTsdb->biMutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tsdbTrace("bi cache:%p, ref", pCache);
|
||||||
*handle = h;
|
*handle = h;
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
|
@ -1940,6 +1956,7 @@ int32_t tsdbBICacheRelease(SLRUCache *pCache, LRUHandle *h) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
|
||||||
taosLRUCacheRelease(pCache, h, false);
|
taosLRUCacheRelease(pCache, h, false);
|
||||||
|
tsdbTrace("bi cache:%p, release", pCache);
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2320,7 +2320,7 @@ static int32_t doMergeMultiLevelRows(STsdbReader* pReader, STableBlockScanInfo*
|
||||||
|
|
||||||
tsdbRowMergerAdd(&merge, pRow, pSchema);
|
tsdbRowMergerAdd(&merge, pRow, pSchema);
|
||||||
} else {
|
} else {
|
||||||
STSchema* pSchema = doGetSchemaForTSRow(TSDBROW_SVERSION(pRow), pReader, pBlockScanInfo->uid);
|
// STSchema* pSchema = doGetSchemaForTSRow(TSDBROW_SVERSION(pRow), pReader, pBlockScanInfo->uid);
|
||||||
code = tsdbRowMergerInit(&merge, NULL, pRow, pSchema);
|
code = tsdbRowMergerInit(&merge, NULL, pRow, pSchema);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
return code;
|
return code;
|
||||||
|
@ -2352,7 +2352,7 @@ static int32_t doMergeMultiLevelRows(STsdbReader* pReader, STableBlockScanInfo*
|
||||||
tsdbRowMergerAdd(&merge, piRow, piSchema);
|
tsdbRowMergerAdd(&merge, piRow, piSchema);
|
||||||
} else {
|
} else {
|
||||||
init = true;
|
init = true;
|
||||||
STSchema* pSchema = doGetSchemaForTSRow(TSDBROW_SVERSION(piRow), pReader, pBlockScanInfo->uid);
|
// STSchema* pSchema = doGetSchemaForTSRow(TSDBROW_SVERSION(piRow), pReader, pBlockScanInfo->uid);
|
||||||
code = tsdbRowMergerInit(&merge, pSchema, piRow, piSchema);
|
code = tsdbRowMergerInit(&merge, pSchema, piRow, piSchema);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
return code;
|
return code;
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
|
|
||||||
int32_t scanDebug = 0;
|
int32_t scanDebug = 0;
|
||||||
|
|
||||||
#define MULTI_READER_MAX_TABLE_NUM 5000
|
#define MULTI_READER_MAX_TABLE_NUM 5000
|
||||||
#define SET_REVERSE_SCAN_FLAG(_info) ((_info)->scanFlag = REVERSE_SCAN)
|
#define SET_REVERSE_SCAN_FLAG(_info) ((_info)->scanFlag = REVERSE_SCAN)
|
||||||
#define SWITCH_ORDER(n) (((n) = ((n) == TSDB_ORDER_ASC) ? TSDB_ORDER_DESC : TSDB_ORDER_ASC))
|
#define SWITCH_ORDER(n) (((n) = ((n) == TSDB_ORDER_ASC) ? TSDB_ORDER_DESC : TSDB_ORDER_ASC))
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ static int32_t loadDataBlock(SOperatorInfo* pOperator, STableScanBase* pTableSca
|
||||||
qDebug("%s data block skipped, brange:%" PRId64 "-%" PRId64 ", rows:%" PRId64 ", uid:%" PRIu64,
|
qDebug("%s data block skipped, brange:%" PRId64 "-%" PRId64 ", rows:%" PRId64 ", uid:%" PRIu64,
|
||||||
GET_TASKID(pTaskInfo), pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows,
|
GET_TASKID(pTaskInfo), pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows,
|
||||||
pBlockInfo->id.uid);
|
pBlockInfo->id.uid);
|
||||||
doSetTagColumnData(pTableScanInfo, pBlock, pTaskInfo, 1);
|
doSetTagColumnData(pTableScanInfo, pBlock, pTaskInfo, pBlock->info.rows);
|
||||||
pCost->skipBlocks += 1;
|
pCost->skipBlocks += 1;
|
||||||
tsdbReleaseDataBlock(pTableScanInfo->dataReader);
|
tsdbReleaseDataBlock(pTableScanInfo->dataReader);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -341,7 +341,7 @@ static int32_t loadDataBlock(SOperatorInfo* pOperator, STableScanBase* pTableSca
|
||||||
if (success) { // failed to load the block sma data, data block statistics does not exist, load data block instead
|
if (success) { // failed to load the block sma data, data block statistics does not exist, load data block instead
|
||||||
qDebug("%s data block SMA loaded, brange:%" PRId64 "-%" PRId64 ", rows:%" PRId64, GET_TASKID(pTaskInfo),
|
qDebug("%s data block SMA loaded, brange:%" PRId64 "-%" PRId64 ", rows:%" PRId64, GET_TASKID(pTaskInfo),
|
||||||
pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows);
|
pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows);
|
||||||
doSetTagColumnData(pTableScanInfo, pBlock, pTaskInfo, 1);
|
doSetTagColumnData(pTableScanInfo, pBlock, pTaskInfo, pBlock->info.rows);
|
||||||
tsdbReleaseDataBlock(pTableScanInfo->dataReader);
|
tsdbReleaseDataBlock(pTableScanInfo->dataReader);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
} else {
|
} else {
|
||||||
|
@ -708,9 +708,9 @@ static SSDataBlock* doTableScanImpl(SOperatorInfo* pOperator) {
|
||||||
// todo refactor
|
// todo refactor
|
||||||
/*pTableScanInfo->lastStatus.uid = pBlock->info.id.uid;*/
|
/*pTableScanInfo->lastStatus.uid = pBlock->info.id.uid;*/
|
||||||
/*pTableScanInfo->lastStatus.ts = pBlock->info.window.ekey;*/
|
/*pTableScanInfo->lastStatus.ts = pBlock->info.window.ekey;*/
|
||||||
// pTaskInfo->streamInfo.lastStatus.type = TMQ_OFFSET__SNAPSHOT_DATA;
|
// pTaskInfo->streamInfo.lastStatus.type = TMQ_OFFSET__SNAPSHOT_DATA;
|
||||||
// pTaskInfo->streamInfo.lastStatus.uid = pBlock->info.id.uid;
|
// pTaskInfo->streamInfo.lastStatus.uid = pBlock->info.id.uid;
|
||||||
// pTaskInfo->streamInfo.lastStatus.ts = pBlock->info.window.ekey;
|
// pTaskInfo->streamInfo.lastStatus.ts = pBlock->info.window.ekey;
|
||||||
|
|
||||||
return pBlock;
|
return pBlock;
|
||||||
}
|
}
|
||||||
|
@ -900,7 +900,7 @@ static void destroyTableScanOperatorInfo(void* param) {
|
||||||
|
|
||||||
SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle,
|
SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle,
|
||||||
STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo) {
|
STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
STableScanInfo* pInfo = taosMemoryCalloc(1, sizeof(STableScanInfo));
|
STableScanInfo* pInfo = taosMemoryCalloc(1, sizeof(STableScanInfo));
|
||||||
SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo));
|
SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo));
|
||||||
if (pInfo == NULL || pOperator == NULL) {
|
if (pInfo == NULL || pOperator == NULL) {
|
||||||
|
@ -912,7 +912,8 @@ SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode,
|
||||||
SDataBlockDescNode* pDescNode = pScanNode->node.pOutputDataBlockDesc;
|
SDataBlockDescNode* pDescNode = pScanNode->node.pOutputDataBlockDesc;
|
||||||
|
|
||||||
int32_t numOfCols = 0;
|
int32_t numOfCols = 0;
|
||||||
code = extractColMatchInfo(pScanNode->pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, &pInfo->base.matchInfo);
|
code =
|
||||||
|
extractColMatchInfo(pScanNode->pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, &pInfo->base.matchInfo);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto _error;
|
goto _error;
|
||||||
}
|
}
|
||||||
|
@ -1668,8 +1669,9 @@ static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) {
|
||||||
if (pTaskInfo->streamInfo.currentOffset.type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
if (pTaskInfo->streamInfo.currentOffset.type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
||||||
SSDataBlock* pResult = doTableScan(pInfo->pTableScanOp);
|
SSDataBlock* pResult = doTableScan(pInfo->pTableScanOp);
|
||||||
if (pResult && pResult->info.rows > 0) {
|
if (pResult && pResult->info.rows > 0) {
|
||||||
qDebug("queue scan tsdb return %"PRId64" rows min:%" PRId64 " max:%" PRId64 " wal curVersion:%" PRId64, pResult->info.rows,
|
qDebug("queue scan tsdb return %" PRId64 " rows min:%" PRId64 " max:%" PRId64 " wal curVersion:%" PRId64,
|
||||||
pResult->info.window.skey, pResult->info.window.ekey, pInfo->tqReader->pWalReader->curVersion);
|
pResult->info.rows, pResult->info.window.skey, pResult->info.window.ekey,
|
||||||
|
pInfo->tqReader->pWalReader->curVersion);
|
||||||
tqOffsetResetToData(&pTaskInfo->streamInfo.currentOffset, pResult->info.id.uid, pResult->info.window.ekey);
|
tqOffsetResetToData(&pTaskInfo->streamInfo.currentOffset, pResult->info.id.uid, pResult->info.window.ekey);
|
||||||
return pResult;
|
return pResult;
|
||||||
}
|
}
|
||||||
|
@ -1687,17 +1689,21 @@ static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) {
|
||||||
while (1) {
|
while (1) {
|
||||||
SFetchRet ret = {0};
|
SFetchRet ret = {0};
|
||||||
tqNextBlock(pInfo->tqReader, &ret);
|
tqNextBlock(pInfo->tqReader, &ret);
|
||||||
tqOffsetResetToLog(&pTaskInfo->streamInfo.currentOffset, pInfo->tqReader->pWalReader->curVersion - 1); //curVersion move to next, so currentOffset = curVersion - 1
|
tqOffsetResetToLog(
|
||||||
|
&pTaskInfo->streamInfo.currentOffset,
|
||||||
|
pInfo->tqReader->pWalReader->curVersion - 1); // curVersion move to next, so currentOffset = curVersion - 1
|
||||||
|
|
||||||
if (ret.fetchType == FETCH_TYPE__DATA) {
|
if (ret.fetchType == FETCH_TYPE__DATA) {
|
||||||
qDebug("doQueueScan get data from log %"PRId64" rows, version:%" PRId64, ret.data.info.rows, pTaskInfo->streamInfo.currentOffset.version);
|
qDebug("doQueueScan get data from log %" PRId64 " rows, version:%" PRId64, ret.data.info.rows,
|
||||||
|
pTaskInfo->streamInfo.currentOffset.version);
|
||||||
blockDataCleanup(pInfo->pRes);
|
blockDataCleanup(pInfo->pRes);
|
||||||
setBlockIntoRes(pInfo, &ret.data, true);
|
setBlockIntoRes(pInfo, &ret.data, true);
|
||||||
if (pInfo->pRes->info.rows > 0) {
|
if (pInfo->pRes->info.rows > 0) {
|
||||||
qDebug("doQueueScan get data from log %"PRId64" rows, return, version:%" PRId64, pInfo->pRes->info.rows, pTaskInfo->streamInfo.currentOffset.version);
|
qDebug("doQueueScan get data from log %" PRId64 " rows, return, version:%" PRId64, pInfo->pRes->info.rows,
|
||||||
|
pTaskInfo->streamInfo.currentOffset.version);
|
||||||
return pInfo->pRes;
|
return pInfo->pRes;
|
||||||
}
|
}
|
||||||
}else if(ret.fetchType == FETCH_TYPE__NONE){
|
} else if (ret.fetchType == FETCH_TYPE__NONE) {
|
||||||
qDebug("doQueueScan get none from log, return, version:%" PRId64, pTaskInfo->streamInfo.currentOffset.version);
|
qDebug("doQueueScan get none from log, return, version:%" PRId64, pTaskInfo->streamInfo.currentOffset.version);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -2176,7 +2182,7 @@ static SSDataBlock* doRawScan(SOperatorInfo* pOperator) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SMetaTableInfo mtInfo = getUidfromSnapShot(pInfo->sContext);
|
SMetaTableInfo mtInfo = getUidfromSnapShot(pInfo->sContext);
|
||||||
STqOffsetVal offset = {0};
|
STqOffsetVal offset = {0};
|
||||||
if (mtInfo.uid == 0) { // read snapshot done, change to get data from wal
|
if (mtInfo.uid == 0) { // read snapshot done, change to get data from wal
|
||||||
qDebug("tmqsnap read snapshot done, change to get data from wal");
|
qDebug("tmqsnap read snapshot done, change to get data from wal");
|
||||||
tqOffsetResetToLog(&offset, pInfo->sContext->snapVersion);
|
tqOffsetResetToLog(&offset, pInfo->sContext->snapVersion);
|
||||||
|
|
|
@ -24,7 +24,7 @@ DLL_EXPORT int32_t udf1(SUdfDataBlock *block, SUdfColumn *resultCol) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (j == block->numOfCols) {
|
if (j == block->numOfCols) {
|
||||||
int32_t luckyNum = 88;
|
int32_t luckyNum = 1;
|
||||||
udfColDataSet(resultCol, i, (char *)&luckyNum, false);
|
udfColDataSet(resultCol, i, (char *)&luckyNum, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -645,6 +645,10 @@ static bool isSelectStmt(SNode* pCurrStmt) {
|
||||||
return NULL != pCurrStmt && QUERY_NODE_SELECT_STMT == nodeType(pCurrStmt);
|
return NULL != pCurrStmt && QUERY_NODE_SELECT_STMT == nodeType(pCurrStmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool isDeleteStmt(SNode* pCurrStmt) {
|
||||||
|
return NULL != pCurrStmt && QUERY_NODE_DELETE_STMT == nodeType(pCurrStmt);
|
||||||
|
}
|
||||||
|
|
||||||
static bool isSetOperator(SNode* pCurrStmt) {
|
static bool isSetOperator(SNode* pCurrStmt) {
|
||||||
return NULL != pCurrStmt && QUERY_NODE_SET_OPERATOR == nodeType(pCurrStmt);
|
return NULL != pCurrStmt && QUERY_NODE_SET_OPERATOR == nodeType(pCurrStmt);
|
||||||
}
|
}
|
||||||
|
@ -669,6 +673,9 @@ static uint8_t getPrecisionFromCurrStmt(SNode* pCurrStmt, uint8_t defaultVal) {
|
||||||
if (NULL != pCurrStmt && QUERY_NODE_CREATE_STREAM_STMT == nodeType(pCurrStmt)) {
|
if (NULL != pCurrStmt && QUERY_NODE_CREATE_STREAM_STMT == nodeType(pCurrStmt)) {
|
||||||
return getPrecisionFromCurrStmt(((SCreateStreamStmt*)pCurrStmt)->pQuery, defaultVal);
|
return getPrecisionFromCurrStmt(((SCreateStreamStmt*)pCurrStmt)->pQuery, defaultVal);
|
||||||
}
|
}
|
||||||
|
if (isDeleteStmt(pCurrStmt)) {
|
||||||
|
return ((SDeleteStmt*)pCurrStmt)->precision;
|
||||||
|
}
|
||||||
return defaultVal;
|
return defaultVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1239,6 +1246,10 @@ static int32_t calcTypeBytes(SDataType dt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static EDealRes translateValue(STranslateContext* pCxt, SValueNode* pVal) {
|
static EDealRes translateValue(STranslateContext* pCxt, SValueNode* pVal) {
|
||||||
|
if (pVal->translate) {
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
SDataType dt = pVal->node.resType;
|
SDataType dt = pVal->node.resType;
|
||||||
dt.bytes = calcTypeBytes(dt);
|
dt.bytes = calcTypeBytes(dt);
|
||||||
return translateValueImpl(pCxt, pVal, dt, false);
|
return translateValueImpl(pCxt, pVal, dt, false);
|
||||||
|
@ -1711,7 +1722,8 @@ static void setFuncClassification(SNode* pCurrStmt, SFunctionNode* pFunc) {
|
||||||
pSelect->hasUniqueFunc = pSelect->hasUniqueFunc ? true : (FUNCTION_TYPE_UNIQUE == pFunc->funcType);
|
pSelect->hasUniqueFunc = pSelect->hasUniqueFunc ? true : (FUNCTION_TYPE_UNIQUE == pFunc->funcType);
|
||||||
pSelect->hasTailFunc = pSelect->hasTailFunc ? true : (FUNCTION_TYPE_TAIL == pFunc->funcType);
|
pSelect->hasTailFunc = pSelect->hasTailFunc ? true : (FUNCTION_TYPE_TAIL == pFunc->funcType);
|
||||||
pSelect->hasInterpFunc = pSelect->hasInterpFunc ? true : (FUNCTION_TYPE_INTERP == pFunc->funcType);
|
pSelect->hasInterpFunc = pSelect->hasInterpFunc ? true : (FUNCTION_TYPE_INTERP == pFunc->funcType);
|
||||||
pSelect->hasInterpPseudoColFunc = pSelect->hasInterpPseudoColFunc ? true : fmIsInterpPseudoColumnFunc(pFunc->funcId);
|
pSelect->hasInterpPseudoColFunc =
|
||||||
|
pSelect->hasInterpPseudoColFunc ? true : fmIsInterpPseudoColumnFunc(pFunc->funcId);
|
||||||
pSelect->hasLastRowFunc = pSelect->hasLastRowFunc ? true : (FUNCTION_TYPE_LAST_ROW == pFunc->funcType);
|
pSelect->hasLastRowFunc = pSelect->hasLastRowFunc ? true : (FUNCTION_TYPE_LAST_ROW == pFunc->funcType);
|
||||||
pSelect->hasLastFunc = pSelect->hasLastFunc ? true : (FUNCTION_TYPE_LAST == pFunc->funcType);
|
pSelect->hasLastFunc = pSelect->hasLastFunc ? true : (FUNCTION_TYPE_LAST == pFunc->funcType);
|
||||||
pSelect->hasTimeLineFunc = pSelect->hasTimeLineFunc ? true : fmIsTimelineFunc(pFunc->funcId);
|
pSelect->hasTimeLineFunc = pSelect->hasTimeLineFunc ? true : fmIsTimelineFunc(pFunc->funcId);
|
||||||
|
@ -3394,7 +3406,8 @@ static int32_t translateInterp(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
||||||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_INTERP_CLAUSE);
|
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_INTERP_CLAUSE);
|
||||||
}
|
}
|
||||||
if (pSelect->hasInterpPseudoColFunc) {
|
if (pSelect->hasInterpPseudoColFunc) {
|
||||||
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_NOT_ALLOWED_FUNC, "Has Interp pseudo column(s) but missing interp function");
|
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_NOT_ALLOWED_FUNC,
|
||||||
|
"Has Interp pseudo column(s) but missing interp function");
|
||||||
}
|
}
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -3763,6 +3776,7 @@ static int32_t translateDelete(STranslateContext* pCxt, SDeleteStmt* pDelete) {
|
||||||
pCxt->pCurrStmt = (SNode*)pDelete;
|
pCxt->pCurrStmt = (SNode*)pDelete;
|
||||||
int32_t code = translateFrom(pCxt, pDelete->pFromTable);
|
int32_t code = translateFrom(pCxt, pDelete->pFromTable);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
pDelete->precision = ((STableNode*)pDelete->pFromTable)->precision;
|
||||||
code = translateDeleteWhere(pCxt, pDelete);
|
code = translateDeleteWhere(pCxt, pDelete);
|
||||||
}
|
}
|
||||||
pCxt->currClause = SQL_CLAUSE_SELECT;
|
pCxt->currClause = SQL_CLAUSE_SELECT;
|
||||||
|
|
|
@ -77,18 +77,19 @@ static FORCE_INLINE int32_t syncLogReplGetNextRetryBackoff(SSyncLogReplMgr* pMgr
|
||||||
|
|
||||||
SyncTerm syncLogReplGetPrevLogTerm(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncIndex index);
|
SyncTerm syncLogReplGetPrevLogTerm(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncIndex index);
|
||||||
|
|
||||||
int32_t syncLogReplReplicateOnce(SSyncLogReplMgr* pMgr, SSyncNode* pNode);
|
int32_t syncLogReplDoOnce(SSyncLogReplMgr* pMgr, SSyncNode* pNode);
|
||||||
int32_t syncLogReplReplicateOneTo(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncIndex index, SyncTerm* pTerm,
|
int32_t syncLogReplAttempt(SSyncLogReplMgr* pMgr, SSyncNode* pNode);
|
||||||
SRaftId* pDestId, bool* pBarrier);
|
int32_t syncLogReplProbe(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncIndex index);
|
||||||
int32_t syncLogReplReplicateAttempt(SSyncLogReplMgr* pMgr, SSyncNode* pNode);
|
|
||||||
int32_t syncLogReplReplicateProbe(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncIndex index);
|
int32_t syncLogReplRetryOnNeed(SSyncLogReplMgr* pMgr, SSyncNode* pNode);
|
||||||
|
int32_t syncLogReplSendTo(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncIndex index, SyncTerm* pTerm, SRaftId* pDestId,
|
||||||
|
bool* pBarrier);
|
||||||
|
|
||||||
int32_t syncLogReplProcessReply(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncAppendEntriesReply* pMsg);
|
int32_t syncLogReplProcessReply(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncAppendEntriesReply* pMsg);
|
||||||
int32_t syncLogReplProcessReplyAsRecovery(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncAppendEntriesReply* pMsg);
|
int32_t syncLogReplProcessReplyAsRecovery(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncAppendEntriesReply* pMsg);
|
||||||
int32_t syncLogReplProcessReplyAsNormal(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncAppendEntriesReply* pMsg);
|
int32_t syncLogReplProcessReplyAsNormal(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncAppendEntriesReply* pMsg);
|
||||||
|
|
||||||
int32_t syncLogReplProcessHeartbeatReply(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncHeartbeatReply* pMsg);
|
int32_t syncLogReplProcessHeartbeatReply(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncHeartbeatReply* pMsg);
|
||||||
int32_t syncLogReplRetryOnNeed(SSyncLogReplMgr* pMgr, SSyncNode* pNode);
|
|
||||||
|
|
||||||
// SSyncLogBuffer
|
// SSyncLogBuffer
|
||||||
SSyncLogBuffer* syncLogBufferCreate();
|
SSyncLogBuffer* syncLogBufferCreate();
|
||||||
|
@ -100,6 +101,7 @@ int32_t syncLogBufferReInit(SSyncLogBuffer* pBuf, SSyncNode* pNode);
|
||||||
int64_t syncLogBufferGetEndIndex(SSyncLogBuffer* pBuf);
|
int64_t syncLogBufferGetEndIndex(SSyncLogBuffer* pBuf);
|
||||||
SyncTerm syncLogBufferGetLastMatchTerm(SSyncLogBuffer* pBuf);
|
SyncTerm syncLogBufferGetLastMatchTerm(SSyncLogBuffer* pBuf);
|
||||||
bool syncLogBufferIsEmpty(SSyncLogBuffer* pBuf);
|
bool syncLogBufferIsEmpty(SSyncLogBuffer* pBuf);
|
||||||
|
|
||||||
int32_t syncLogBufferAppend(SSyncLogBuffer* pBuf, SSyncNode* pNode, SSyncRaftEntry* pEntry);
|
int32_t syncLogBufferAppend(SSyncLogBuffer* pBuf, SSyncNode* pNode, SSyncRaftEntry* pEntry);
|
||||||
int32_t syncLogBufferAccept(SSyncLogBuffer* pBuf, SSyncNode* pNode, SSyncRaftEntry* pEntry, SyncTerm prevTerm);
|
int32_t syncLogBufferAccept(SSyncLogBuffer* pBuf, SSyncNode* pNode, SSyncRaftEntry* pEntry, SyncTerm prevTerm);
|
||||||
int64_t syncLogBufferProceed(SSyncLogBuffer* pBuf, SSyncNode* pNode, SyncTerm* pMatchTerm);
|
int64_t syncLogBufferProceed(SSyncLogBuffer* pBuf, SSyncNode* pNode, SyncTerm* pMatchTerm);
|
||||||
|
|
|
@ -45,7 +45,7 @@ SSyncRaftEntry* syncEntryBuildNoop(SyncTerm term, SyncIndex index, int32_t vgId)
|
||||||
void syncEntryDestroy(SSyncRaftEntry* pEntry);
|
void syncEntryDestroy(SSyncRaftEntry* pEntry);
|
||||||
void syncEntry2OriginalRpc(const SSyncRaftEntry* pEntry, SRpcMsg* pRpcMsg); // step 7
|
void syncEntry2OriginalRpc(const SSyncRaftEntry* pEntry, SRpcMsg* pRpcMsg); // step 7
|
||||||
|
|
||||||
static FORCE_INLINE bool syncLogIsReplicationBarrier(SSyncRaftEntry* pEntry) {
|
static FORCE_INLINE bool syncLogReplBarrier(SSyncRaftEntry* pEntry) {
|
||||||
return pEntry->originalRpcType == TDMT_SYNC_NOOP;
|
return pEntry->originalRpcType == TDMT_SYNC_NOOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -617,7 +617,7 @@ int32_t syncNodePropose(SSyncNode* pSyncNode, SRpcMsg* pMsg, bool isWeak, int64_
|
||||||
sNTrace(pSyncNode, "propose msg, type:%s", TMSG_INFO(pMsg->msgType));
|
sNTrace(pSyncNode, "propose msg, type:%s", TMSG_INFO(pMsg->msgType));
|
||||||
code = (*pSyncNode->syncEqMsg)(pSyncNode->msgcb, &rpcMsg);
|
code = (*pSyncNode->syncEqMsg)(pSyncNode->msgcb, &rpcMsg);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
sError("vgId:%d, failed to propose msg while enqueue since %s", pSyncNode->vgId, terrstr());
|
sWarn("vgId:%d, failed to propose msg while enqueue since %s", pSyncNode->vgId, terrstr());
|
||||||
(void)syncRespMgrDel(pSyncNode->pSyncRespMgr, seqNum);
|
(void)syncRespMgrDel(pSyncNode->pSyncRespMgr, seqNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -633,7 +633,7 @@ int32_t syncLogReplRetryOnNeed(SSyncLogReplMgr* pMgr, SSyncNode* pNode) {
|
||||||
SRaftId* pDestId = &pNode->replicasId[pMgr->peerId];
|
SRaftId* pDestId = &pNode->replicasId[pMgr->peerId];
|
||||||
if (pMgr->retryBackoff == SYNC_MAX_RETRY_BACKOFF) {
|
if (pMgr->retryBackoff == SYNC_MAX_RETRY_BACKOFF) {
|
||||||
syncLogReplReset(pMgr);
|
syncLogReplReset(pMgr);
|
||||||
sWarn("vgId:%d, reset sync log repl mgr since retry backoff exceeding limit. peer:%" PRIx64, pNode->vgId,
|
sWarn("vgId:%d, reset sync log repl since retry backoff exceeding limit. peer:%" PRIx64, pNode->vgId,
|
||||||
pDestId->addr);
|
pDestId->addr);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -658,15 +658,15 @@ int32_t syncLogReplRetryOnNeed(SSyncLogReplMgr* pMgr, SSyncNode* pNode) {
|
||||||
if (pMgr->states[pos].acked) {
|
if (pMgr->states[pos].acked) {
|
||||||
if (pMgr->matchIndex < index && pMgr->states[pos].timeMs + (syncGetRetryMaxWaitMs() << 3) < nowMs) {
|
if (pMgr->matchIndex < index && pMgr->states[pos].timeMs + (syncGetRetryMaxWaitMs() << 3) < nowMs) {
|
||||||
syncLogReplReset(pMgr);
|
syncLogReplReset(pMgr);
|
||||||
sWarn("vgId:%d, reset sync log repl mgr since stagnation. index:%" PRId64 ", peer:%" PRIx64, pNode->vgId,
|
sWarn("vgId:%d, reset sync log repl since stagnation. index:%" PRId64 ", peer:%" PRIx64, pNode->vgId, index,
|
||||||
index, pDestId->addr);
|
pDestId->addr);
|
||||||
goto _out;
|
goto _out;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool barrier = false;
|
bool barrier = false;
|
||||||
if (syncLogReplReplicateOneTo(pMgr, pNode, index, &term, pDestId, &barrier) < 0) {
|
if (syncLogReplSendTo(pMgr, pNode, index, &term, pDestId, &barrier) < 0) {
|
||||||
sError("vgId:%d, failed to replicate sync log entry since %s. index:%" PRId64 ", dest:%" PRIx64 "", pNode->vgId,
|
sError("vgId:%d, failed to replicate sync log entry since %s. index:%" PRId64 ", dest:%" PRIx64 "", pNode->vgId,
|
||||||
terrstr(), index, pDestId->addr);
|
terrstr(), index, pDestId->addr);
|
||||||
goto _out;
|
goto _out;
|
||||||
|
@ -708,7 +708,7 @@ int32_t syncLogReplProcessReplyAsRecovery(SSyncLogReplMgr* pMgr, SSyncNode* pNod
|
||||||
ASSERT(pMgr->matchIndex == 0);
|
ASSERT(pMgr->matchIndex == 0);
|
||||||
if (pMsg->matchIndex < 0) {
|
if (pMsg->matchIndex < 0) {
|
||||||
pMgr->restored = true;
|
pMgr->restored = true;
|
||||||
sInfo("vgId:%d, sync log repl mgr restored. peer: dnode:%d (%" PRIx64 "), mgr: rs(%d) [%" PRId64 " %" PRId64
|
sInfo("vgId:%d, sync log repl restored. peer: dnode:%d (%" PRIx64 "), mgr: rs(%d) [%" PRId64 " %" PRId64
|
||||||
", %" PRId64 "), buffer: [%" PRId64 " %" PRId64 " %" PRId64 ", %" PRId64 ")",
|
", %" PRId64 "), buffer: [%" PRId64 " %" PRId64 " %" PRId64 ", %" PRId64 ")",
|
||||||
pNode->vgId, DID(&destId), destId.addr, pMgr->restored, pMgr->startIndex, pMgr->matchIndex, pMgr->endIndex,
|
pNode->vgId, DID(&destId), destId.addr, pMgr->restored, pMgr->startIndex, pMgr->matchIndex, pMgr->endIndex,
|
||||||
pBuf->startIndex, pBuf->commitIndex, pBuf->matchIndex, pBuf->endIndex);
|
pBuf->startIndex, pBuf->commitIndex, pBuf->matchIndex, pBuf->endIndex);
|
||||||
|
@ -725,7 +725,7 @@ int32_t syncLogReplProcessReplyAsRecovery(SSyncLogReplMgr* pMgr, SSyncNode* pNod
|
||||||
if (pMsg->success && pMsg->matchIndex == pMsg->lastSendIndex) {
|
if (pMsg->success && pMsg->matchIndex == pMsg->lastSendIndex) {
|
||||||
pMgr->matchIndex = pMsg->matchIndex;
|
pMgr->matchIndex = pMsg->matchIndex;
|
||||||
pMgr->restored = true;
|
pMgr->restored = true;
|
||||||
sInfo("vgId:%d, sync log repl mgr restored. peer: dnode:%d (%" PRIx64 "), mgr: rs(%d) [%" PRId64 " %" PRId64
|
sInfo("vgId:%d, sync log repl restored. peer: dnode:%d (%" PRIx64 "), mgr: rs(%d) [%" PRId64 " %" PRId64
|
||||||
", %" PRId64 "), buffer: [%" PRId64 " %" PRId64 " %" PRId64 ", %" PRId64 ")",
|
", %" PRId64 "), buffer: [%" PRId64 " %" PRId64 " %" PRId64 ", %" PRId64 ")",
|
||||||
pNode->vgId, DID(&destId), destId.addr, pMgr->restored, pMgr->startIndex, pMgr->matchIndex, pMgr->endIndex,
|
pNode->vgId, DID(&destId), destId.addr, pMgr->restored, pMgr->startIndex, pMgr->matchIndex, pMgr->endIndex,
|
||||||
pBuf->startIndex, pBuf->commitIndex, pBuf->matchIndex, pBuf->endIndex);
|
pBuf->startIndex, pBuf->commitIndex, pBuf->matchIndex, pBuf->endIndex);
|
||||||
|
@ -774,14 +774,14 @@ int32_t syncLogReplProcessReplyAsRecovery(SSyncLogReplMgr* pMgr, SSyncNode* pNod
|
||||||
|
|
||||||
// attempt to replicate the raft log at index
|
// attempt to replicate the raft log at index
|
||||||
(void)syncLogReplReset(pMgr);
|
(void)syncLogReplReset(pMgr);
|
||||||
return syncLogReplReplicateProbe(pMgr, pNode, index);
|
return syncLogReplProbe(pMgr, pNode, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t syncLogReplProcessHeartbeatReply(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncHeartbeatReply* pMsg) {
|
int32_t syncLogReplProcessHeartbeatReply(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncHeartbeatReply* pMsg) {
|
||||||
SSyncLogBuffer* pBuf = pNode->pLogBuf;
|
SSyncLogBuffer* pBuf = pNode->pLogBuf;
|
||||||
taosThreadMutexLock(&pBuf->mutex);
|
taosThreadMutexLock(&pBuf->mutex);
|
||||||
if (pMsg->startTime != 0 && pMsg->startTime != pMgr->peerStartTime) {
|
if (pMsg->startTime != 0 && pMsg->startTime != pMgr->peerStartTime) {
|
||||||
sInfo("vgId:%d, reset sync log repl mgr in heartbeat. peer:%" PRIx64 ", start time:%" PRId64 ", old:%" PRId64 "",
|
sInfo("vgId:%d, reset sync log repl in heartbeat. peer:%" PRIx64 ", start time:%" PRId64 ", old:%" PRId64 "",
|
||||||
pNode->vgId, pMsg->srcId.addr, pMsg->startTime, pMgr->peerStartTime);
|
pNode->vgId, pMsg->srcId.addr, pMsg->startTime, pMgr->peerStartTime);
|
||||||
syncLogReplReset(pMgr);
|
syncLogReplReset(pMgr);
|
||||||
pMgr->peerStartTime = pMsg->startTime;
|
pMgr->peerStartTime = pMsg->startTime;
|
||||||
|
@ -794,8 +794,7 @@ int32_t syncLogReplProcessReply(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncApp
|
||||||
SSyncLogBuffer* pBuf = pNode->pLogBuf;
|
SSyncLogBuffer* pBuf = pNode->pLogBuf;
|
||||||
taosThreadMutexLock(&pBuf->mutex);
|
taosThreadMutexLock(&pBuf->mutex);
|
||||||
if (pMsg->startTime != pMgr->peerStartTime) {
|
if (pMsg->startTime != pMgr->peerStartTime) {
|
||||||
sInfo("vgId:%d, reset sync log repl mgr in appendlog reply. peer:%" PRIx64 ", start time:%" PRId64
|
sInfo("vgId:%d, reset sync log repl in appendlog reply. peer:%" PRIx64 ", start time:%" PRId64 ", old:%" PRId64,
|
||||||
", old:%" PRId64,
|
|
||||||
pNode->vgId, pMsg->srcId.addr, pMsg->startTime, pMgr->peerStartTime);
|
pNode->vgId, pMsg->srcId.addr, pMsg->startTime, pMgr->peerStartTime);
|
||||||
syncLogReplReset(pMgr);
|
syncLogReplReset(pMgr);
|
||||||
pMgr->peerStartTime = pMsg->startTime;
|
pMgr->peerStartTime = pMsg->startTime;
|
||||||
|
@ -810,16 +809,16 @@ int32_t syncLogReplProcessReply(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncApp
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t syncLogReplReplicateOnce(SSyncLogReplMgr* pMgr, SSyncNode* pNode) {
|
int32_t syncLogReplDoOnce(SSyncLogReplMgr* pMgr, SSyncNode* pNode) {
|
||||||
if (pMgr->restored) {
|
if (pMgr->restored) {
|
||||||
(void)syncLogReplReplicateAttempt(pMgr, pNode);
|
(void)syncLogReplAttempt(pMgr, pNode);
|
||||||
} else {
|
} else {
|
||||||
(void)syncLogReplReplicateProbe(pMgr, pNode, pNode->pLogBuf->matchIndex);
|
(void)syncLogReplProbe(pMgr, pNode, pNode->pLogBuf->matchIndex);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t syncLogReplReplicateProbe(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncIndex index) {
|
int32_t syncLogReplProbe(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncIndex index) {
|
||||||
ASSERT(!pMgr->restored);
|
ASSERT(!pMgr->restored);
|
||||||
ASSERT(pMgr->startIndex >= 0);
|
ASSERT(pMgr->startIndex >= 0);
|
||||||
int64_t retryMaxWaitMs = syncGetRetryMaxWaitMs();
|
int64_t retryMaxWaitMs = syncGetRetryMaxWaitMs();
|
||||||
|
@ -834,7 +833,7 @@ int32_t syncLogReplReplicateProbe(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncI
|
||||||
SRaftId* pDestId = &pNode->replicasId[pMgr->peerId];
|
SRaftId* pDestId = &pNode->replicasId[pMgr->peerId];
|
||||||
bool barrier = false;
|
bool barrier = false;
|
||||||
SyncTerm term = -1;
|
SyncTerm term = -1;
|
||||||
if (syncLogReplReplicateOneTo(pMgr, pNode, index, &term, pDestId, &barrier) < 0) {
|
if (syncLogReplSendTo(pMgr, pNode, index, &term, pDestId, &barrier) < 0) {
|
||||||
sError("vgId:%d, failed to replicate log entry since %s. index:%" PRId64 ", dest: 0x%016" PRIx64 "", pNode->vgId,
|
sError("vgId:%d, failed to replicate log entry since %s. index:%" PRId64 ", dest: 0x%016" PRIx64 "", pNode->vgId,
|
||||||
terrstr(), index, pDestId->addr);
|
terrstr(), index, pDestId->addr);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -857,7 +856,7 @@ int32_t syncLogReplReplicateProbe(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncI
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t syncLogReplReplicateAttempt(SSyncLogReplMgr* pMgr, SSyncNode* pNode) {
|
int32_t syncLogReplAttempt(SSyncLogReplMgr* pMgr, SSyncNode* pNode) {
|
||||||
ASSERT(pMgr->restored);
|
ASSERT(pMgr->restored);
|
||||||
|
|
||||||
SRaftId* pDestId = &pNode->replicasId[pMgr->peerId];
|
SRaftId* pDestId = &pNode->replicasId[pMgr->peerId];
|
||||||
|
@ -879,7 +878,7 @@ int32_t syncLogReplReplicateAttempt(SSyncLogReplMgr* pMgr, SSyncNode* pNode) {
|
||||||
SRaftId* pDestId = &pNode->replicasId[pMgr->peerId];
|
SRaftId* pDestId = &pNode->replicasId[pMgr->peerId];
|
||||||
bool barrier = false;
|
bool barrier = false;
|
||||||
SyncTerm term = -1;
|
SyncTerm term = -1;
|
||||||
if (syncLogReplReplicateOneTo(pMgr, pNode, index, &term, pDestId, &barrier) < 0) {
|
if (syncLogReplSendTo(pMgr, pNode, index, &term, pDestId, &barrier) < 0) {
|
||||||
sError("vgId:%d, failed to replicate log entry since %s. index:%" PRId64 ", dest: 0x%016" PRIx64 "", pNode->vgId,
|
sError("vgId:%d, failed to replicate log entry since %s. index:%" PRId64 ", dest: 0x%016" PRIx64 "", pNode->vgId,
|
||||||
terrstr(), index, pDestId->addr);
|
terrstr(), index, pDestId->addr);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -932,7 +931,7 @@ int32_t syncLogReplProcessReplyAsNormal(SSyncLogReplMgr* pMgr, SSyncNode* pNode,
|
||||||
pMgr->startIndex = pMgr->matchIndex;
|
pMgr->startIndex = pMgr->matchIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
return syncLogReplReplicateAttempt(pMgr, pNode);
|
return syncLogReplAttempt(pMgr, pNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
SSyncLogReplMgr* syncLogReplCreate() {
|
SSyncLogReplMgr* syncLogReplCreate() {
|
||||||
|
@ -1127,8 +1126,8 @@ SSyncRaftEntry* syncLogBufferGetOneEntry(SSyncLogBuffer* pBuf, SSyncNode* pNode,
|
||||||
return pEntry;
|
return pEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t syncLogReplReplicateOneTo(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncIndex index, SyncTerm* pTerm,
|
int32_t syncLogReplSendTo(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncIndex index, SyncTerm* pTerm, SRaftId* pDestId,
|
||||||
SRaftId* pDestId, bool* pBarrier) {
|
bool* pBarrier) {
|
||||||
SSyncRaftEntry* pEntry = NULL;
|
SSyncRaftEntry* pEntry = NULL;
|
||||||
SRpcMsg msgOut = {0};
|
SRpcMsg msgOut = {0};
|
||||||
bool inBuf = false;
|
bool inBuf = false;
|
||||||
|
@ -1141,14 +1140,14 @@ int32_t syncLogReplReplicateOneTo(SSyncLogReplMgr* pMgr, SSyncNode* pNode, SyncI
|
||||||
if (terrno == TSDB_CODE_WAL_LOG_NOT_EXIST) {
|
if (terrno == TSDB_CODE_WAL_LOG_NOT_EXIST) {
|
||||||
SSyncLogReplMgr* pMgr = syncNodeGetLogReplMgr(pNode, pDestId);
|
SSyncLogReplMgr* pMgr = syncNodeGetLogReplMgr(pNode, pDestId);
|
||||||
if (pMgr) {
|
if (pMgr) {
|
||||||
sInfo("vgId:%d, reset sync log repl mgr of peer:%" PRIx64 " since %s. index:%" PRId64, pNode->vgId,
|
sInfo("vgId:%d, reset sync log repl of peer:%" PRIx64 " since %s. index:%" PRId64, pNode->vgId, pDestId->addr,
|
||||||
pDestId->addr, terrstr(), index);
|
terrstr(), index);
|
||||||
(void)syncLogReplReset(pMgr);
|
(void)syncLogReplReset(pMgr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
goto _err;
|
goto _err;
|
||||||
}
|
}
|
||||||
*pBarrier = syncLogIsReplicationBarrier(pEntry);
|
*pBarrier = syncLogReplBarrier(pEntry);
|
||||||
|
|
||||||
prevLogTerm = syncLogReplGetPrevLogTerm(pMgr, pNode, index);
|
prevLogTerm = syncLogReplGetPrevLogTerm(pMgr, pNode, index);
|
||||||
if (prevLogTerm < 0) {
|
if (prevLogTerm < 0) {
|
||||||
|
|
|
@ -74,7 +74,7 @@ int32_t syncNodeReplicateWithoutLock(SSyncNode* pNode) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
SSyncLogReplMgr* pMgr = pNode->logReplMgrs[i];
|
SSyncLogReplMgr* pMgr = pNode->logReplMgrs[i];
|
||||||
(void)syncLogReplReplicateOnce(pMgr, pNode);
|
(void)syncLogReplDoOnce(pMgr, pNode);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -321,7 +321,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_SNODE_ALREADY_DEPLOYED, "Snode already deploye
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_SNODE_NOT_DEPLOYED, "Snode not deployed")
|
TAOS_DEFINE_ERROR(TSDB_CODE_SNODE_NOT_DEPLOYED, "Snode not deployed")
|
||||||
|
|
||||||
// vnode
|
// vnode
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_VND_INVALID_VGROUP_ID, "Vnode moved to another dnode or was deleted")
|
TAOS_DEFINE_ERROR(TSDB_CODE_VND_INVALID_VGROUP_ID, "Vnode is closed or removed")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_VND_NO_WRITE_AUTH, "Database write operation denied")
|
TAOS_DEFINE_ERROR(TSDB_CODE_VND_NO_WRITE_AUTH, "Database write operation denied")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_VND_NOT_EXIST, "Vnode not exist")
|
TAOS_DEFINE_ERROR(TSDB_CODE_VND_NOT_EXIST, "Vnode not exist")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_VND_ALREADY_EXIST, "Vnode already exist")
|
TAOS_DEFINE_ERROR(TSDB_CODE_VND_ALREADY_EXIST, "Vnode already exist")
|
||||||
|
|
|
@ -89,7 +89,7 @@
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdateWithConsume.py -N 3 -n 3
|
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdateWithConsume.py -N 3 -n 3
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdate-multiCtb-snapshot0.py
|
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdate-multiCtb-snapshot0.py
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdate-multiCtb-snapshot1.py
|
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqUpdate-multiCtb-snapshot1.py
|
||||||
# ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDelete-1ctb.py
|
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDelete-1ctb.py
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDelete-multiCtb.py -N 3 -n 3
|
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDelete-multiCtb.py -N 3 -n 3
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDropStbCtb.py
|
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDropStbCtb.py
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDropNtb-snapshot0.py
|
,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/tmqDropNtb-snapshot0.py
|
||||||
|
@ -785,6 +785,7 @@
|
||||||
,,y,script,./test.sh -f tsim/insert/query_multi_file.sim
|
,,y,script,./test.sh -f tsim/insert/query_multi_file.sim
|
||||||
,,y,script,./test.sh -f tsim/insert/tcp.sim
|
,,y,script,./test.sh -f tsim/insert/tcp.sim
|
||||||
,,y,script,./test.sh -f tsim/insert/update0.sim
|
,,y,script,./test.sh -f tsim/insert/update0.sim
|
||||||
|
,,y,script,./test.sh -f tsim/insert/delete0.sim
|
||||||
,,y,script,./test.sh -f tsim/insert/update1_sort_merge.sim
|
,,y,script,./test.sh -f tsim/insert/update1_sort_merge.sim
|
||||||
,,y,script,./test.sh -f tsim/insert/update2.sim
|
,,y,script,./test.sh -f tsim/insert/update2.sim
|
||||||
,,y,script,./test.sh -f tsim/parser/alter__for_community_version.sim
|
,,y,script,./test.sh -f tsim/parser/alter__for_community_version.sim
|
||||||
|
|
|
@ -0,0 +1,161 @@
|
||||||
|
system sh/stop_dnodes.sh
|
||||||
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
sql connect
|
||||||
|
|
||||||
|
print =============== create database with different precision
|
||||||
|
sql create database d0 keep 365
|
||||||
|
sql create database d1 keep 365 precision 'ms'
|
||||||
|
sql create database d2 keep 365 precision 'us'
|
||||||
|
sql create database d3 keep 365 precision 'ns'
|
||||||
|
|
||||||
|
sql select * from information_schema.ins_databases
|
||||||
|
if $rows != 6 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print $data00 $data01 $data02
|
||||||
|
|
||||||
|
|
||||||
|
sql create table if not exists d0.stb (ts timestamp, c1 int, c2 float, c3 double) tags (t1 int unsigned)
|
||||||
|
sql create table if not exists d1.stb (ts timestamp, c1 int, c2 float, c3 double) tags (t1 int unsigned)
|
||||||
|
sql create table if not exists d2.stb (ts timestamp, c1 int, c2 float, c3 double) tags (t1 int unsigned)
|
||||||
|
sql create table if not exists d3.stb (ts timestamp, c1 int, c2 float, c3 double) tags (t1 int unsigned)
|
||||||
|
sql create table if not exists d0.ntb (ts timestamp, c1 int, c2 float, c3 double)
|
||||||
|
sql create table if not exists d1.ntb (ts timestamp, c1 int, c2 float, c3 double)
|
||||||
|
sql create table if not exists d2.ntb (ts timestamp, c1 int, c2 float, c3 double)
|
||||||
|
sql create table if not exists d3.ntb (ts timestamp, c1 int, c2 float, c3 double)
|
||||||
|
|
||||||
|
sql create table d0.ct1 using d0.stb tags(1000)
|
||||||
|
sql create table d1.ct1 using d1.stb tags(1000)
|
||||||
|
sql create table d2.ct1 using d2.stb tags(1000)
|
||||||
|
sql create table d3.ct1 using d3.stb tags(1000)
|
||||||
|
sql create table d0.ct2 using d0.stb tags(1000)
|
||||||
|
sql create table d1.ct2 using d1.stb tags(1000)
|
||||||
|
sql create table d2.ct2 using d2.stb tags(1000)
|
||||||
|
sql create table d3.ct2 using d3.stb tags(1000)
|
||||||
|
|
||||||
|
|
||||||
|
sql insert into d0.ct1 values(now+0s, 10, 2.0, 3.0)
|
||||||
|
sql insert into d1.ct1 values(now+0s, 10, 2.0, 3.0)
|
||||||
|
sql insert into d2.ct1 values(now+0s, 10, 2.0, 3.0)
|
||||||
|
sql insert into d3.ct1 values(now+0s, 10, 2.0, 3.0)
|
||||||
|
sql insert into d0.ct2 values(now+0s, 10, 2.0, 3.0)
|
||||||
|
sql insert into d1.ct2 values(now+0s, 10, 2.0, 3.0)
|
||||||
|
sql insert into d2.ct2 values(now+0s, 10, 2.0, 3.0)
|
||||||
|
sql insert into d3.ct2 values(now+0s, 10, 2.0, 3.0)
|
||||||
|
sql insert into d0.ntb values(now+0s, 10, 2.0, 3.0)
|
||||||
|
sql insert into d1.ntb values(now+0s, 10, 2.0, 3.0)
|
||||||
|
sql insert into d2.ntb values(now+0s, 10, 2.0, 3.0)
|
||||||
|
sql insert into d3.ntb values(now+0s, 10, 2.0, 3.0)
|
||||||
|
|
||||||
|
|
||||||
|
print =============== query data from super table
|
||||||
|
sql select count(*) from d0.stb
|
||||||
|
if $data00 != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d1.stb
|
||||||
|
if $data00 != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d2.stb
|
||||||
|
if $data00 != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d3.stb
|
||||||
|
if $data00 != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =============== delete from child table
|
||||||
|
sql delete from d0.ct1 where ts < now()
|
||||||
|
sql delete from d1.ct1 where ts < now()
|
||||||
|
sql delete from d2.ct1 where ts < now()
|
||||||
|
sql delete from d3.ct1 where ts < now()
|
||||||
|
|
||||||
|
|
||||||
|
print =============== query data from super table
|
||||||
|
sql select count(*) from d0.stb
|
||||||
|
if $data00 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d1.stb
|
||||||
|
if $data00 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d2.stb
|
||||||
|
if $data00 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d3.stb
|
||||||
|
if $data00 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
print =============== query data from normal table
|
||||||
|
sql select count(*) from d0.ntb
|
||||||
|
if $data00 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d1.ntb
|
||||||
|
if $data00 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d2.ntb
|
||||||
|
if $data00 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d3.ntb
|
||||||
|
if $data00 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =============== delete from super table
|
||||||
|
sql delete from d0.stb where ts < now()
|
||||||
|
sql delete from d1.stb where ts < now()
|
||||||
|
sql delete from d2.stb where ts < now()
|
||||||
|
sql delete from d3.stb where ts < now()
|
||||||
|
|
||||||
|
print =============== query data from super table
|
||||||
|
sql select count(*) from d0.stb
|
||||||
|
if $data00 != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d1.stb
|
||||||
|
if $data00 != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d2.stb
|
||||||
|
if $data00 != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d3.stb
|
||||||
|
if $data00 != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =============== delete from normal table
|
||||||
|
sql delete from d0.ntb where ts < now()
|
||||||
|
sql delete from d1.ntb where ts < now()
|
||||||
|
sql delete from d2.ntb where ts < now()
|
||||||
|
sql delete from d3.ntb where ts < now()
|
||||||
|
|
||||||
|
print =============== query data from normal table
|
||||||
|
sql select count(*) from d0.ntb
|
||||||
|
if $data00 != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d1.ntb
|
||||||
|
if $data00 != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d2.ntb
|
||||||
|
if $data00 != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select count(*) from d3.ntb
|
||||||
|
if $data00 != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
|
@ -53,7 +53,7 @@ sql insert into tbc values ("2021-05-11 10:12:29",36, 37, NULL, -4005)
|
||||||
sql insert into tbd values ("2021-05-11 10:12:29",NULL,NULL,NULL,NULL )
|
sql insert into tbd values ("2021-05-11 10:12:29",NULL,NULL,NULL,NULL )
|
||||||
|
|
||||||
run tsim/parser/last_cache_query.sim
|
run tsim/parser/last_cache_query.sim
|
||||||
|
sql flush database $db
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
|
@ -114,6 +114,7 @@ run tsim/insert/basic1.sim
|
||||||
run tsim/insert/commit-merge0.sim
|
run tsim/insert/commit-merge0.sim
|
||||||
run tsim/insert/basic0.sim
|
run tsim/insert/basic0.sim
|
||||||
run tsim/insert/update0.sim
|
run tsim/insert/update0.sim
|
||||||
|
run tsim/insert/delete0.sim
|
||||||
run tsim/insert/backquote.sim
|
run tsim/insert/backquote.sim
|
||||||
run tsim/insert/null.sim
|
run tsim/insert/null.sim
|
||||||
run tsim/catalog/alterInCurrent.sim
|
run tsim/catalog/alterInCurrent.sim
|
||||||
|
|
|
@ -29,10 +29,10 @@ sql select udf1(f) from t;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data00 != 88 then
|
if $data00 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data10 != 88 then
|
if $data10 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -51,10 +51,10 @@ sql select udf1(f1, f2) from t2;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data00 != 88 then
|
if $data00 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data10 != 88 then
|
if $data10 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -72,10 +72,10 @@ print $rows , $data00 , $data10 , $data20 , $data30
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data00 != 88 then
|
if $data00 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data10 != 88 then
|
if $data10 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -114,10 +114,10 @@ print $rows , $data00 , $data01
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data00 != 176.000000000 then
|
if $data00 != 2.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data01 != 152.420471066 then
|
if $data01 != 1.732050808 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
|
@ -191,20 +191,20 @@ class TDTestCase:
|
||||||
tdSql.checkData(0,0,None)
|
tdSql.checkData(0,0,None)
|
||||||
tdSql.checkData(0,1,None)
|
tdSql.checkData(0,1,None)
|
||||||
tdSql.checkData(0,2,1)
|
tdSql.checkData(0,2,1)
|
||||||
tdSql.checkData(0,3,88)
|
tdSql.checkData(0,3,1)
|
||||||
tdSql.checkData(0,4,1.000000000)
|
tdSql.checkData(0,4,1.000000000)
|
||||||
tdSql.checkData(0,5,88)
|
tdSql.checkData(0,5,1)
|
||||||
tdSql.checkData(0,6,"binary1")
|
tdSql.checkData(0,6,"binary1")
|
||||||
tdSql.checkData(0,7,88)
|
tdSql.checkData(0,7,1)
|
||||||
|
|
||||||
tdSql.checkData(3,0,3)
|
tdSql.checkData(3,0,3)
|
||||||
tdSql.checkData(3,1,88)
|
tdSql.checkData(3,1,1)
|
||||||
tdSql.checkData(3,2,33333)
|
tdSql.checkData(3,2,33333)
|
||||||
tdSql.checkData(3,3,88)
|
tdSql.checkData(3,3,1)
|
||||||
tdSql.checkData(3,4,33.000000000)
|
tdSql.checkData(3,4,33.000000000)
|
||||||
tdSql.checkData(3,5,88)
|
tdSql.checkData(3,5,1)
|
||||||
tdSql.checkData(3,6,"binary1")
|
tdSql.checkData(3,6,"binary1")
|
||||||
tdSql.checkData(3,7,88)
|
tdSql.checkData(3,7,1)
|
||||||
|
|
||||||
tdSql.checkData(11,0,None)
|
tdSql.checkData(11,0,None)
|
||||||
tdSql.checkData(11,1,None)
|
tdSql.checkData(11,1,None)
|
||||||
|
@ -213,7 +213,7 @@ class TDTestCase:
|
||||||
tdSql.checkData(11,4,None)
|
tdSql.checkData(11,4,None)
|
||||||
tdSql.checkData(11,5,None)
|
tdSql.checkData(11,5,None)
|
||||||
tdSql.checkData(11,6,"binary1")
|
tdSql.checkData(11,6,"binary1")
|
||||||
tdSql.checkData(11,7,88)
|
tdSql.checkData(11,7,1)
|
||||||
|
|
||||||
tdSql.query("select c1 , udf1(c1) ,c2 ,udf1(c2), c3 ,udf1(c3), c4 ,udf1(c4) from stb1 order by c1")
|
tdSql.query("select c1 , udf1(c1) ,c2 ,udf1(c2), c3 ,udf1(c3), c4 ,udf1(c4) from stb1 order by c1")
|
||||||
tdSql.checkData(0,0,None)
|
tdSql.checkData(0,0,None)
|
||||||
|
@ -226,13 +226,13 @@ class TDTestCase:
|
||||||
tdSql.checkData(0,7,None)
|
tdSql.checkData(0,7,None)
|
||||||
|
|
||||||
tdSql.checkData(20,0,8)
|
tdSql.checkData(20,0,8)
|
||||||
tdSql.checkData(20,1,88)
|
tdSql.checkData(20,1,1)
|
||||||
tdSql.checkData(20,2,88888)
|
tdSql.checkData(20,2,88888)
|
||||||
tdSql.checkData(20,3,88)
|
tdSql.checkData(20,3,1)
|
||||||
tdSql.checkData(20,4,888)
|
tdSql.checkData(20,4,888)
|
||||||
tdSql.checkData(20,5,88)
|
tdSql.checkData(20,5,1)
|
||||||
tdSql.checkData(20,6,88)
|
tdSql.checkData(20,6,88)
|
||||||
tdSql.checkData(20,7,88)
|
tdSql.checkData(20,7,1)
|
||||||
|
|
||||||
|
|
||||||
# aggregate functions
|
# aggregate functions
|
||||||
|
@ -375,14 +375,14 @@ class TDTestCase:
|
||||||
tdSql.checkRows(25)
|
tdSql.checkRows(25)
|
||||||
tdSql.checkData(0,0,None)
|
tdSql.checkData(0,0,None)
|
||||||
tdSql.checkData(0,1,None)
|
tdSql.checkData(0,1,None)
|
||||||
tdSql.checkData(1,0,88)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,8)
|
tdSql.checkData(1,1,8)
|
||||||
|
|
||||||
tdSql.query("select abs(udf1(c1)) , abs(ceil(c1)) from ct1 order by ts;")
|
tdSql.query("select abs(udf1(c1)) , abs(ceil(c1)) from ct1 order by ts;")
|
||||||
tdSql.checkRows(13)
|
tdSql.checkRows(13)
|
||||||
tdSql.checkData(0,0,88)
|
tdSql.checkData(0,0,1)
|
||||||
tdSql.checkData(0,1,8)
|
tdSql.checkData(0,1,8)
|
||||||
tdSql.checkData(1,0,88)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,7)
|
tdSql.checkData(1,1,7)
|
||||||
|
|
||||||
# bug fix for crash
|
# bug fix for crash
|
||||||
|
@ -401,9 +401,9 @@ class TDTestCase:
|
||||||
tdSql.query("select c1 ,udf1(c1) , c6 ,udf1(c6) from stb1 where c1 > 8 order by ts")
|
tdSql.query("select c1 ,udf1(c1) , c6 ,udf1(c6) from stb1 where c1 > 8 order by ts")
|
||||||
tdSql.checkRows(3)
|
tdSql.checkRows(3)
|
||||||
tdSql.checkData(0,0,9)
|
tdSql.checkData(0,0,9)
|
||||||
tdSql.checkData(0,1,88)
|
tdSql.checkData(0,1,1)
|
||||||
tdSql.checkData(0,2,-99.990000000)
|
tdSql.checkData(0,2,-99.990000000)
|
||||||
tdSql.checkData(0,3,88)
|
tdSql.checkData(0,3,1)
|
||||||
|
|
||||||
tdSql.query("select sub1.c1, sub2.c2 from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select sub1.c1, sub2.c2 from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,0)
|
tdSql.checkData(0,0,0)
|
||||||
|
@ -412,20 +412,20 @@ class TDTestCase:
|
||||||
tdSql.checkData(1,1,10)
|
tdSql.checkData(1,1,10)
|
||||||
|
|
||||||
tdSql.query("select udf1(sub1.c1), udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select udf1(sub1.c1), udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,88)
|
tdSql.checkData(0,0,1)
|
||||||
tdSql.checkData(0,1,88)
|
tdSql.checkData(0,1,1)
|
||||||
tdSql.checkData(1,0,88)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,88)
|
tdSql.checkData(1,1,1)
|
||||||
|
|
||||||
tdSql.query("select sub1.c1 , udf1(sub1.c1), sub2.c2 ,udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select sub1.c1 , udf1(sub1.c1), sub2.c2 ,udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,0)
|
tdSql.checkData(0,0,0)
|
||||||
tdSql.checkData(0,1,88)
|
tdSql.checkData(0,1,1)
|
||||||
tdSql.checkData(0,2,0)
|
tdSql.checkData(0,2,0)
|
||||||
tdSql.checkData(0,3,88)
|
tdSql.checkData(0,3,1)
|
||||||
tdSql.checkData(1,0,1)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,88)
|
tdSql.checkData(1,1,1)
|
||||||
tdSql.checkData(1,2,10)
|
tdSql.checkData(1,2,10)
|
||||||
tdSql.checkData(1,3,88)
|
tdSql.checkData(1,3,1)
|
||||||
|
|
||||||
tdSql.query("select udf2(sub1.c1), udf2(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select udf2(sub1.c1), udf2(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,16.881943016)
|
tdSql.checkData(0,0,16.881943016)
|
||||||
|
|
|
@ -193,20 +193,20 @@ class TDTestCase:
|
||||||
tdSql.checkData(0,0,None)
|
tdSql.checkData(0,0,None)
|
||||||
tdSql.checkData(0,1,None)
|
tdSql.checkData(0,1,None)
|
||||||
tdSql.checkData(0,2,1)
|
tdSql.checkData(0,2,1)
|
||||||
tdSql.checkData(0,3,88)
|
tdSql.checkData(0,3,1)
|
||||||
tdSql.checkData(0,4,1.000000000)
|
tdSql.checkData(0,4,1.000000000)
|
||||||
tdSql.checkData(0,5,88)
|
tdSql.checkData(0,5,1)
|
||||||
tdSql.checkData(0,6,"binary1")
|
tdSql.checkData(0,6,"binary1")
|
||||||
tdSql.checkData(0,7,88)
|
tdSql.checkData(0,7,1)
|
||||||
|
|
||||||
tdSql.checkData(3,0,3)
|
tdSql.checkData(3,0,3)
|
||||||
tdSql.checkData(3,1,88)
|
tdSql.checkData(3,1,1)
|
||||||
tdSql.checkData(3,2,33333)
|
tdSql.checkData(3,2,33333)
|
||||||
tdSql.checkData(3,3,88)
|
tdSql.checkData(3,3,1)
|
||||||
tdSql.checkData(3,4,33.000000000)
|
tdSql.checkData(3,4,33.000000000)
|
||||||
tdSql.checkData(3,5,88)
|
tdSql.checkData(3,5,1)
|
||||||
tdSql.checkData(3,6,"binary1")
|
tdSql.checkData(3,6,"binary1")
|
||||||
tdSql.checkData(3,7,88)
|
tdSql.checkData(3,7,1)
|
||||||
|
|
||||||
tdSql.checkData(11,0,None)
|
tdSql.checkData(11,0,None)
|
||||||
tdSql.checkData(11,1,None)
|
tdSql.checkData(11,1,None)
|
||||||
|
@ -215,7 +215,7 @@ class TDTestCase:
|
||||||
tdSql.checkData(11,4,None)
|
tdSql.checkData(11,4,None)
|
||||||
tdSql.checkData(11,5,None)
|
tdSql.checkData(11,5,None)
|
||||||
tdSql.checkData(11,6,"binary1")
|
tdSql.checkData(11,6,"binary1")
|
||||||
tdSql.checkData(11,7,88)
|
tdSql.checkData(11,7,1)
|
||||||
|
|
||||||
tdSql.query("select c1 , udf1(c1) ,c2 ,udf1(c2), c3 ,udf1(c3), c4 ,udf1(c4) from stb1 order by c1")
|
tdSql.query("select c1 , udf1(c1) ,c2 ,udf1(c2), c3 ,udf1(c3), c4 ,udf1(c4) from stb1 order by c1")
|
||||||
tdSql.checkData(0,0,None)
|
tdSql.checkData(0,0,None)
|
||||||
|
@ -228,13 +228,13 @@ class TDTestCase:
|
||||||
tdSql.checkData(0,7,None)
|
tdSql.checkData(0,7,None)
|
||||||
|
|
||||||
tdSql.checkData(20,0,8)
|
tdSql.checkData(20,0,8)
|
||||||
tdSql.checkData(20,1,88)
|
tdSql.checkData(20,1,1)
|
||||||
tdSql.checkData(20,2,88888)
|
tdSql.checkData(20,2,88888)
|
||||||
tdSql.checkData(20,3,88)
|
tdSql.checkData(20,3,1)
|
||||||
tdSql.checkData(20,4,888)
|
tdSql.checkData(20,4,888)
|
||||||
tdSql.checkData(20,5,88)
|
tdSql.checkData(20,5,1)
|
||||||
tdSql.checkData(20,6,88)
|
tdSql.checkData(20,6,88)
|
||||||
tdSql.checkData(20,7,88)
|
tdSql.checkData(20,7,1)
|
||||||
|
|
||||||
|
|
||||||
# aggregate functions
|
# aggregate functions
|
||||||
|
@ -377,14 +377,14 @@ class TDTestCase:
|
||||||
tdSql.checkRows(25)
|
tdSql.checkRows(25)
|
||||||
tdSql.checkData(0,0,None)
|
tdSql.checkData(0,0,None)
|
||||||
tdSql.checkData(0,1,None)
|
tdSql.checkData(0,1,None)
|
||||||
tdSql.checkData(1,0,88)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,8)
|
tdSql.checkData(1,1,8)
|
||||||
|
|
||||||
tdSql.query("select abs(udf1(c1)) , abs(ceil(c1)) from ct1 order by ts;")
|
tdSql.query("select abs(udf1(c1)) , abs(ceil(c1)) from ct1 order by ts;")
|
||||||
tdSql.checkRows(13)
|
tdSql.checkRows(13)
|
||||||
tdSql.checkData(0,0,88)
|
tdSql.checkData(0,0,1)
|
||||||
tdSql.checkData(0,1,8)
|
tdSql.checkData(0,1,8)
|
||||||
tdSql.checkData(1,0,88)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,7)
|
tdSql.checkData(1,1,7)
|
||||||
|
|
||||||
# bug fix for crash
|
# bug fix for crash
|
||||||
|
@ -403,9 +403,9 @@ class TDTestCase:
|
||||||
tdSql.query("select c1 ,udf1(c1) , c6 ,udf1(c6) from stb1 where c1 > 8 order by ts")
|
tdSql.query("select c1 ,udf1(c1) , c6 ,udf1(c6) from stb1 where c1 > 8 order by ts")
|
||||||
tdSql.checkRows(3)
|
tdSql.checkRows(3)
|
||||||
tdSql.checkData(0,0,9)
|
tdSql.checkData(0,0,9)
|
||||||
tdSql.checkData(0,1,88)
|
tdSql.checkData(0,1,1)
|
||||||
tdSql.checkData(0,2,-99.990000000)
|
tdSql.checkData(0,2,-99.990000000)
|
||||||
tdSql.checkData(0,3,88)
|
tdSql.checkData(0,3,1)
|
||||||
|
|
||||||
tdSql.query("select sub1.c1, sub2.c2 from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select sub1.c1, sub2.c2 from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,0)
|
tdSql.checkData(0,0,0)
|
||||||
|
@ -414,20 +414,20 @@ class TDTestCase:
|
||||||
tdSql.checkData(1,1,10)
|
tdSql.checkData(1,1,10)
|
||||||
|
|
||||||
tdSql.query("select udf1(sub1.c1), udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select udf1(sub1.c1), udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,88)
|
tdSql.checkData(0,0,1)
|
||||||
tdSql.checkData(0,1,88)
|
tdSql.checkData(0,1,1)
|
||||||
tdSql.checkData(1,0,88)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,88)
|
tdSql.checkData(1,1,1)
|
||||||
|
|
||||||
tdSql.query("select sub1.c1 , udf1(sub1.c1), sub2.c2 ,udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select sub1.c1 , udf1(sub1.c1), sub2.c2 ,udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,0)
|
tdSql.checkData(0,0,0)
|
||||||
tdSql.checkData(0,1,88)
|
tdSql.checkData(0,1,1)
|
||||||
tdSql.checkData(0,2,0)
|
tdSql.checkData(0,2,0)
|
||||||
tdSql.checkData(0,3,88)
|
tdSql.checkData(0,3,1)
|
||||||
tdSql.checkData(1,0,1)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,88)
|
tdSql.checkData(1,1,1)
|
||||||
tdSql.checkData(1,2,10)
|
tdSql.checkData(1,2,10)
|
||||||
tdSql.checkData(1,3,88)
|
tdSql.checkData(1,3,1)
|
||||||
|
|
||||||
tdSql.query("select udf2(sub1.c1), udf2(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select udf2(sub1.c1), udf2(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,16.881943016)
|
tdSql.checkData(0,0,16.881943016)
|
||||||
|
|
|
@ -193,20 +193,20 @@ class TDTestCase:
|
||||||
tdSql.checkData(0,0,None)
|
tdSql.checkData(0,0,None)
|
||||||
tdSql.checkData(0,1,None)
|
tdSql.checkData(0,1,None)
|
||||||
tdSql.checkData(0,2,1)
|
tdSql.checkData(0,2,1)
|
||||||
tdSql.checkData(0,3,88)
|
tdSql.checkData(0,3,1)
|
||||||
tdSql.checkData(0,4,1.000000000)
|
tdSql.checkData(0,4,1.000000000)
|
||||||
tdSql.checkData(0,5,88)
|
tdSql.checkData(0,5,1)
|
||||||
tdSql.checkData(0,6,"binary1")
|
tdSql.checkData(0,6,"binary1")
|
||||||
tdSql.checkData(0,7,88)
|
tdSql.checkData(0,7,1)
|
||||||
|
|
||||||
tdSql.checkData(3,0,3)
|
tdSql.checkData(3,0,3)
|
||||||
tdSql.checkData(3,1,88)
|
tdSql.checkData(3,1,1)
|
||||||
tdSql.checkData(3,2,33333)
|
tdSql.checkData(3,2,33333)
|
||||||
tdSql.checkData(3,3,88)
|
tdSql.checkData(3,3,1)
|
||||||
tdSql.checkData(3,4,33.000000000)
|
tdSql.checkData(3,4,33.000000000)
|
||||||
tdSql.checkData(3,5,88)
|
tdSql.checkData(3,5,1)
|
||||||
tdSql.checkData(3,6,"binary1")
|
tdSql.checkData(3,6,"binary1")
|
||||||
tdSql.checkData(3,7,88)
|
tdSql.checkData(3,7,1)
|
||||||
|
|
||||||
tdSql.checkData(11,0,None)
|
tdSql.checkData(11,0,None)
|
||||||
tdSql.checkData(11,1,None)
|
tdSql.checkData(11,1,None)
|
||||||
|
@ -215,7 +215,7 @@ class TDTestCase:
|
||||||
tdSql.checkData(11,4,None)
|
tdSql.checkData(11,4,None)
|
||||||
tdSql.checkData(11,5,None)
|
tdSql.checkData(11,5,None)
|
||||||
tdSql.checkData(11,6,"binary1")
|
tdSql.checkData(11,6,"binary1")
|
||||||
tdSql.checkData(11,7,88)
|
tdSql.checkData(11,7,1)
|
||||||
|
|
||||||
tdSql.query("select c1 , udf1(c1) ,c2 ,udf1(c2), c3 ,udf1(c3), c4 ,udf1(c4) from stb1 order by c1")
|
tdSql.query("select c1 , udf1(c1) ,c2 ,udf1(c2), c3 ,udf1(c3), c4 ,udf1(c4) from stb1 order by c1")
|
||||||
tdSql.checkData(0,0,None)
|
tdSql.checkData(0,0,None)
|
||||||
|
@ -228,13 +228,13 @@ class TDTestCase:
|
||||||
tdSql.checkData(0,7,None)
|
tdSql.checkData(0,7,None)
|
||||||
|
|
||||||
tdSql.checkData(20,0,8)
|
tdSql.checkData(20,0,8)
|
||||||
tdSql.checkData(20,1,88)
|
tdSql.checkData(20,1,1)
|
||||||
tdSql.checkData(20,2,88888)
|
tdSql.checkData(20,2,88888)
|
||||||
tdSql.checkData(20,3,88)
|
tdSql.checkData(20,3,1)
|
||||||
tdSql.checkData(20,4,888)
|
tdSql.checkData(20,4,888)
|
||||||
tdSql.checkData(20,5,88)
|
tdSql.checkData(20,5,1)
|
||||||
tdSql.checkData(20,6,88)
|
tdSql.checkData(20,6,88)
|
||||||
tdSql.checkData(20,7,88)
|
tdSql.checkData(20,7,1)
|
||||||
|
|
||||||
|
|
||||||
# aggregate functions
|
# aggregate functions
|
||||||
|
@ -377,14 +377,14 @@ class TDTestCase:
|
||||||
tdSql.checkRows(25)
|
tdSql.checkRows(25)
|
||||||
tdSql.checkData(0,0,None)
|
tdSql.checkData(0,0,None)
|
||||||
tdSql.checkData(0,1,None)
|
tdSql.checkData(0,1,None)
|
||||||
tdSql.checkData(1,0,88)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,8)
|
tdSql.checkData(1,1,8)
|
||||||
|
|
||||||
tdSql.query("select abs(udf1(c1)) , abs(ceil(c1)) from ct1 order by ts;")
|
tdSql.query("select abs(udf1(c1)) , abs(ceil(c1)) from ct1 order by ts;")
|
||||||
tdSql.checkRows(13)
|
tdSql.checkRows(13)
|
||||||
tdSql.checkData(0,0,88)
|
tdSql.checkData(0,0,1)
|
||||||
tdSql.checkData(0,1,8)
|
tdSql.checkData(0,1,8)
|
||||||
tdSql.checkData(1,0,88)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,7)
|
tdSql.checkData(1,1,7)
|
||||||
|
|
||||||
# bug fix for crash
|
# bug fix for crash
|
||||||
|
@ -403,9 +403,9 @@ class TDTestCase:
|
||||||
tdSql.query("select c1 ,udf1(c1) , c6 ,udf1(c6) from stb1 where c1 > 8 order by ts")
|
tdSql.query("select c1 ,udf1(c1) , c6 ,udf1(c6) from stb1 where c1 > 8 order by ts")
|
||||||
tdSql.checkRows(3)
|
tdSql.checkRows(3)
|
||||||
tdSql.checkData(0,0,9)
|
tdSql.checkData(0,0,9)
|
||||||
tdSql.checkData(0,1,88)
|
tdSql.checkData(0,1,1)
|
||||||
tdSql.checkData(0,2,-99.990000000)
|
tdSql.checkData(0,2,-99.990000000)
|
||||||
tdSql.checkData(0,3,88)
|
tdSql.checkData(0,3,1)
|
||||||
|
|
||||||
tdSql.query("select sub1.c1, sub2.c2 from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select sub1.c1, sub2.c2 from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,0)
|
tdSql.checkData(0,0,0)
|
||||||
|
@ -414,20 +414,20 @@ class TDTestCase:
|
||||||
tdSql.checkData(1,1,10)
|
tdSql.checkData(1,1,10)
|
||||||
|
|
||||||
tdSql.query("select udf1(sub1.c1), udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select udf1(sub1.c1), udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,88)
|
tdSql.checkData(0,0,1)
|
||||||
tdSql.checkData(0,1,88)
|
tdSql.checkData(0,1,1)
|
||||||
tdSql.checkData(1,0,88)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,88)
|
tdSql.checkData(1,1,1)
|
||||||
|
|
||||||
tdSql.query("select sub1.c1 , udf1(sub1.c1), sub2.c2 ,udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select sub1.c1 , udf1(sub1.c1), sub2.c2 ,udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,0)
|
tdSql.checkData(0,0,0)
|
||||||
tdSql.checkData(0,1,88)
|
tdSql.checkData(0,1,1)
|
||||||
tdSql.checkData(0,2,0)
|
tdSql.checkData(0,2,0)
|
||||||
tdSql.checkData(0,3,88)
|
tdSql.checkData(0,3,1)
|
||||||
tdSql.checkData(1,0,1)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,88)
|
tdSql.checkData(1,1,1)
|
||||||
tdSql.checkData(1,2,10)
|
tdSql.checkData(1,2,10)
|
||||||
tdSql.checkData(1,3,88)
|
tdSql.checkData(1,3,1)
|
||||||
|
|
||||||
tdSql.query("select udf2(sub1.c1), udf2(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select udf2(sub1.c1), udf2(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,16.881943016)
|
tdSql.checkData(0,0,16.881943016)
|
||||||
|
|
|
@ -190,20 +190,20 @@ class TDTestCase:
|
||||||
tdSql.checkData(0,0,None)
|
tdSql.checkData(0,0,None)
|
||||||
tdSql.checkData(0,1,None)
|
tdSql.checkData(0,1,None)
|
||||||
tdSql.checkData(0,2,1)
|
tdSql.checkData(0,2,1)
|
||||||
tdSql.checkData(0,3,88)
|
tdSql.checkData(0,3,1)
|
||||||
tdSql.checkData(0,4,1.000000000)
|
tdSql.checkData(0,4,1.000000000)
|
||||||
tdSql.checkData(0,5,88)
|
tdSql.checkData(0,5,1)
|
||||||
tdSql.checkData(0,6,"binary1")
|
tdSql.checkData(0,6,"binary1")
|
||||||
tdSql.checkData(0,7,88)
|
tdSql.checkData(0,7,1)
|
||||||
|
|
||||||
tdSql.checkData(3,0,3)
|
tdSql.checkData(3,0,3)
|
||||||
tdSql.checkData(3,1,88)
|
tdSql.checkData(3,1,1)
|
||||||
tdSql.checkData(3,2,33333)
|
tdSql.checkData(3,2,33333)
|
||||||
tdSql.checkData(3,3,88)
|
tdSql.checkData(3,3,1)
|
||||||
tdSql.checkData(3,4,33.000000000)
|
tdSql.checkData(3,4,33.000000000)
|
||||||
tdSql.checkData(3,5,88)
|
tdSql.checkData(3,5,1)
|
||||||
tdSql.checkData(3,6,"binary1")
|
tdSql.checkData(3,6,"binary1")
|
||||||
tdSql.checkData(3,7,88)
|
tdSql.checkData(3,7,1)
|
||||||
|
|
||||||
tdSql.checkData(11,0,None)
|
tdSql.checkData(11,0,None)
|
||||||
tdSql.checkData(11,1,None)
|
tdSql.checkData(11,1,None)
|
||||||
|
@ -212,7 +212,7 @@ class TDTestCase:
|
||||||
tdSql.checkData(11,4,None)
|
tdSql.checkData(11,4,None)
|
||||||
tdSql.checkData(11,5,None)
|
tdSql.checkData(11,5,None)
|
||||||
tdSql.checkData(11,6,"binary1")
|
tdSql.checkData(11,6,"binary1")
|
||||||
tdSql.checkData(11,7,88)
|
tdSql.checkData(11,7,1)
|
||||||
|
|
||||||
tdSql.query("select c1 , udf1(c1) ,c2 ,udf1(c2), c3 ,udf1(c3), c4 ,udf1(c4) from stb1 order by c1")
|
tdSql.query("select c1 , udf1(c1) ,c2 ,udf1(c2), c3 ,udf1(c3), c4 ,udf1(c4) from stb1 order by c1")
|
||||||
tdSql.checkData(0,0,None)
|
tdSql.checkData(0,0,None)
|
||||||
|
@ -225,13 +225,13 @@ class TDTestCase:
|
||||||
tdSql.checkData(0,7,None)
|
tdSql.checkData(0,7,None)
|
||||||
|
|
||||||
tdSql.checkData(20,0,8)
|
tdSql.checkData(20,0,8)
|
||||||
tdSql.checkData(20,1,88)
|
tdSql.checkData(20,1,1)
|
||||||
tdSql.checkData(20,2,88888)
|
tdSql.checkData(20,2,88888)
|
||||||
tdSql.checkData(20,3,88)
|
tdSql.checkData(20,3,1)
|
||||||
tdSql.checkData(20,4,888)
|
tdSql.checkData(20,4,888)
|
||||||
tdSql.checkData(20,5,88)
|
tdSql.checkData(20,5,1)
|
||||||
tdSql.checkData(20,6,88)
|
tdSql.checkData(20,6,88)
|
||||||
tdSql.checkData(20,7,88)
|
tdSql.checkData(20,7,1)
|
||||||
|
|
||||||
|
|
||||||
# aggregate functions
|
# aggregate functions
|
||||||
|
@ -374,14 +374,14 @@ class TDTestCase:
|
||||||
tdSql.checkRows(25)
|
tdSql.checkRows(25)
|
||||||
tdSql.checkData(0,0,None)
|
tdSql.checkData(0,0,None)
|
||||||
tdSql.checkData(0,1,None)
|
tdSql.checkData(0,1,None)
|
||||||
tdSql.checkData(1,0,88)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,8)
|
tdSql.checkData(1,1,8)
|
||||||
|
|
||||||
tdSql.query("select abs(udf1(c1)) , abs(ceil(c1)) from ct1 order by ts;")
|
tdSql.query("select abs(udf1(c1)) , abs(ceil(c1)) from ct1 order by ts;")
|
||||||
tdSql.checkRows(13)
|
tdSql.checkRows(13)
|
||||||
tdSql.checkData(0,0,88)
|
tdSql.checkData(0,0,1)
|
||||||
tdSql.checkData(0,1,8)
|
tdSql.checkData(0,1,8)
|
||||||
tdSql.checkData(1,0,88)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,7)
|
tdSql.checkData(1,1,7)
|
||||||
|
|
||||||
# bug fix for crash
|
# bug fix for crash
|
||||||
|
@ -400,9 +400,9 @@ class TDTestCase:
|
||||||
tdSql.query("select c1 ,udf1(c1) , c6 ,udf1(c6) from stb1 where c1 > 8 order by ts")
|
tdSql.query("select c1 ,udf1(c1) , c6 ,udf1(c6) from stb1 where c1 > 8 order by ts")
|
||||||
tdSql.checkRows(3)
|
tdSql.checkRows(3)
|
||||||
tdSql.checkData(0,0,9)
|
tdSql.checkData(0,0,9)
|
||||||
tdSql.checkData(0,1,88)
|
tdSql.checkData(0,1,1)
|
||||||
tdSql.checkData(0,2,-99.990000000)
|
tdSql.checkData(0,2,-99.990000000)
|
||||||
tdSql.checkData(0,3,88)
|
tdSql.checkData(0,3,1)
|
||||||
|
|
||||||
tdSql.query("select sub1.c1, sub2.c2 from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select sub1.c1, sub2.c2 from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,0)
|
tdSql.checkData(0,0,0)
|
||||||
|
@ -411,20 +411,20 @@ class TDTestCase:
|
||||||
tdSql.checkData(1,1,10)
|
tdSql.checkData(1,1,10)
|
||||||
|
|
||||||
tdSql.query("select udf1(sub1.c1), udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select udf1(sub1.c1), udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,88)
|
tdSql.checkData(0,0,1)
|
||||||
tdSql.checkData(0,1,88)
|
tdSql.checkData(0,1,1)
|
||||||
tdSql.checkData(1,0,88)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,88)
|
tdSql.checkData(1,1,1)
|
||||||
|
|
||||||
tdSql.query("select sub1.c1 , udf1(sub1.c1), sub2.c2 ,udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select sub1.c1 , udf1(sub1.c1), sub2.c2 ,udf1(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,0)
|
tdSql.checkData(0,0,0)
|
||||||
tdSql.checkData(0,1,88)
|
tdSql.checkData(0,1,1)
|
||||||
tdSql.checkData(0,2,0)
|
tdSql.checkData(0,2,0)
|
||||||
tdSql.checkData(0,3,88)
|
tdSql.checkData(0,3,1)
|
||||||
tdSql.checkData(1,0,1)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,88)
|
tdSql.checkData(1,1,1)
|
||||||
tdSql.checkData(1,2,10)
|
tdSql.checkData(1,2,10)
|
||||||
tdSql.checkData(1,3,88)
|
tdSql.checkData(1,3,1)
|
||||||
|
|
||||||
tdSql.query("select udf2(sub1.c1), udf2(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
tdSql.query("select udf2(sub1.c1), udf2(sub2.c2) from sub1, sub2 where sub1.ts=sub2.ts and sub1.c1 is not null")
|
||||||
tdSql.checkData(0,0,16.881943016)
|
tdSql.checkData(0,0,16.881943016)
|
||||||
|
@ -468,12 +468,12 @@ class TDTestCase:
|
||||||
tdSql.checkData(1,0,1)
|
tdSql.checkData(1,0,1)
|
||||||
tdSql.checkData(1,1,1)
|
tdSql.checkData(1,1,1)
|
||||||
tdSql.checkData(1,2,1.110000000)
|
tdSql.checkData(1,2,1.110000000)
|
||||||
tdSql.checkData(1,3,88)
|
tdSql.checkData(1,3,1)
|
||||||
|
|
||||||
tdSql.query("select c1,c6,udf1(c1,c6) from stb1 order by ts")
|
tdSql.query("select c1,c6,udf1(c1,c6) from stb1 order by ts")
|
||||||
tdSql.checkData(1,0,8)
|
tdSql.checkData(1,0,8)
|
||||||
tdSql.checkData(1,1,88.880000000)
|
tdSql.checkData(1,1,88.880000000)
|
||||||
tdSql.checkData(1,2,88)
|
tdSql.checkData(1,2,1)
|
||||||
|
|
||||||
tdSql.query("select abs(udf1(c1,c6,c1,c6)) , abs(ceil(c1)) from stb1 where c1 is not null order by ts;")
|
tdSql.query("select abs(udf1(c1,c6,c1,c6)) , abs(ceil(c1)) from stb1 where c1 is not null order by ts;")
|
||||||
tdSql.checkRows(22)
|
tdSql.checkRows(22)
|
||||||
|
|
|
@ -20,8 +20,8 @@ class TDTestCase:
|
||||||
intData = []
|
intData = []
|
||||||
floatData = []
|
floatData = []
|
||||||
tdSql.execute(f'''create table {dbname}.stb(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 tinyint unsigned, col6 smallint unsigned,
|
tdSql.execute(f'''create table {dbname}.stb(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 tinyint unsigned, col6 smallint unsigned,
|
||||||
col7 int unsigned, col8 bigint unsigned, col9 float, col10 double, col11 bool, col12 binary(20), col13 nchar(20)) tags(loc nchar(20))''')
|
col7 int unsigned, col8 bigint unsigned, col9 float, col10 double, col11 bool, col12 binary(20), col13 nchar(20)) tags(t0 tinyint, t1 float, loc nchar(20))''')
|
||||||
tdSql.execute(f"create table {dbname}.stb_1 using {dbname}.stb tags('beijing')")
|
tdSql.execute(f"create table {dbname}.stb_1 using {dbname}.stb tags(5, 5.5, 'beijing')")
|
||||||
for i in range(self.rowNum):
|
for i in range(self.rowNum):
|
||||||
tdSql.execute(f"insert into {dbname}.stb_1 values(%d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, %d, '{self.binary_str}%d', '{self.nchar_str}%d')"
|
tdSql.execute(f"insert into {dbname}.stb_1 values(%d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, %d, '{self.binary_str}%d', '{self.nchar_str}%d')"
|
||||||
% (self.ts + i, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 0.1, i + 0.1, i % 2, i + 1, i + 1))
|
% (self.ts + i, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 0.1, i + 0.1, i % 2, i + 1, i + 1))
|
||||||
|
@ -55,13 +55,20 @@ class TDTestCase:
|
||||||
tdSql.checkData(0, 1, np.max(intData))
|
tdSql.checkData(0, 1, np.max(intData))
|
||||||
|
|
||||||
tdSql.query(f"select ts, min(col9) from {dbname}.stb")
|
tdSql.query(f"select ts, min(col9) from {dbname}.stb")
|
||||||
tdSql.checkRows(1)
|
tdSql.checkRows(1)
|
||||||
tdSql.checkData(0, 1, np.min(floatData))
|
tdSql.checkData(0, 1, np.min(floatData))
|
||||||
|
|
||||||
tdSql.query(f"select ts, min(col9) from {dbname}.stb_1")
|
tdSql.query(f"select ts, min(col9) from {dbname}.stb_1")
|
||||||
tdSql.checkRows(1)
|
tdSql.checkRows(1)
|
||||||
tdSql.checkData(0, 1, np.min(floatData))
|
tdSql.checkData(0, 1, np.min(floatData))
|
||||||
|
|
||||||
|
# check tags
|
||||||
|
tdSql.query(f"select max(t0) from {dbname}.stb")
|
||||||
|
tdSql.checkData(0,0,5)
|
||||||
|
|
||||||
|
tdSql.query(f"select max(t1) from {dbname}.stb")
|
||||||
|
tdSql.checkData(0,0,5.5)
|
||||||
|
|
||||||
def max_check_ntb_base(self, dbname="db"):
|
def max_check_ntb_base(self, dbname="db"):
|
||||||
tdSql.prepare()
|
tdSql.prepare()
|
||||||
intData = []
|
intData = []
|
||||||
|
|
Loading…
Reference in New Issue