Merge branch '3.0' of https://github.com/taosdata/TDengine into feature/3.0_mhli
This commit is contained in:
commit
8363cde84a
|
@ -2803,6 +2803,7 @@ typedef struct {
|
||||||
|
|
||||||
int32_t tSerializeSTableIndexRsp(void* buf, int32_t bufLen, const STableIndexRsp* pRsp);
|
int32_t tSerializeSTableIndexRsp(void* buf, int32_t bufLen, const STableIndexRsp* pRsp);
|
||||||
int32_t tDeserializeSTableIndexRsp(void* buf, int32_t bufLen, STableIndexRsp* pRsp);
|
int32_t tDeserializeSTableIndexRsp(void* buf, int32_t bufLen, STableIndexRsp* pRsp);
|
||||||
|
void tFreeSerializeSTableIndexRsp(STableIndexRsp* pRsp);
|
||||||
|
|
||||||
void tFreeSTableIndexInfo(void* pInfo);
|
void tFreeSTableIndexInfo(void* pInfo);
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,6 @@ static FORCE_INLINE int64_t taosGetTimestampToday(int32_t precision) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t taosTimeAdd(int64_t t, int64_t duration, char unit, int32_t precision);
|
int64_t taosTimeAdd(int64_t t, int64_t duration, char unit, int32_t precision);
|
||||||
int64_t taosTimeSub(int64_t t, int64_t duration, char unit, int32_t precision);
|
|
||||||
|
|
||||||
int64_t taosTimeTruncate(int64_t t, const SInterval* pInterval, int32_t precision);
|
int64_t taosTimeTruncate(int64_t t, const SInterval* pInterval, int32_t precision);
|
||||||
int32_t taosTimeCountInterval(int64_t skey, int64_t ekey, int64_t interval, char unit, int32_t precision);
|
int32_t taosTimeCountInterval(int64_t skey, int64_t ekey, int64_t interval, char unit, int32_t precision);
|
||||||
|
|
|
@ -33,16 +33,16 @@ extern "C" {
|
||||||
#define wTrace(...) { if (wDebugFlag & DEBUG_TRACE) { taosPrintLog("WAL ", DEBUG_TRACE, wDebugFlag, __VA_ARGS__); }}
|
#define wTrace(...) { if (wDebugFlag & DEBUG_TRACE) { taosPrintLog("WAL ", DEBUG_TRACE, wDebugFlag, __VA_ARGS__); }}
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
#define WAL_PROTO_VER 0
|
#define WAL_PROTO_VER 0
|
||||||
#define WAL_NOSUFFIX_LEN 20
|
#define WAL_NOSUFFIX_LEN 20
|
||||||
#define WAL_SUFFIX_AT (WAL_NOSUFFIX_LEN + 1)
|
#define WAL_SUFFIX_AT (WAL_NOSUFFIX_LEN + 1)
|
||||||
#define WAL_LOG_SUFFIX "log"
|
#define WAL_LOG_SUFFIX "log"
|
||||||
#define WAL_INDEX_SUFFIX "idx"
|
#define WAL_INDEX_SUFFIX "idx"
|
||||||
#define WAL_REFRESH_MS 1000
|
#define WAL_REFRESH_MS 1000
|
||||||
#define WAL_MAX_SIZE (TSDB_MAX_WAL_SIZE + sizeof(SWalCkHead))
|
#define WAL_PATH_LEN (TSDB_FILENAME_LEN + 12)
|
||||||
#define WAL_PATH_LEN (TSDB_FILENAME_LEN + 12)
|
#define WAL_FILE_LEN (WAL_PATH_LEN + 32)
|
||||||
#define WAL_FILE_LEN (WAL_PATH_LEN + 32)
|
#define WAL_MAGIC 0xFAFBFCFDULL
|
||||||
#define WAL_MAGIC 0xFAFBFCFDULL
|
#define WAL_SCAN_BUF_SIZE (1024 * 1024 * 3)
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
TAOS_WAL_WRITE = 1,
|
TAOS_WAL_WRITE = 1,
|
||||||
|
|
|
@ -421,7 +421,7 @@ typedef enum ELogicConditionType {
|
||||||
#define TSDB_DEFAULT_STABLES_HASH_SIZE 100
|
#define TSDB_DEFAULT_STABLES_HASH_SIZE 100
|
||||||
#define TSDB_DEFAULT_CTABLES_HASH_SIZE 20000
|
#define TSDB_DEFAULT_CTABLES_HASH_SIZE 20000
|
||||||
|
|
||||||
#define TSDB_MAX_WAL_SIZE (1024 * 1024 * 3)
|
#define TSDB_MAX_MSG_SIZE (1024 * 1024 * 10)
|
||||||
|
|
||||||
#define TSDB_ARB_DUMMY_TIME 4765104000000 // 2121-01-01 00:00:00.000, :P
|
#define TSDB_ARB_DUMMY_TIME 4765104000000 // 2121-01-01 00:00:00.000, :P
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,6 @@ void taosIp2String(uint32_t ip, char *str);
|
||||||
void taosIpPort2String(uint32_t ip, uint16_t port, char *str);
|
void taosIpPort2String(uint32_t ip, uint16_t port, char *str);
|
||||||
|
|
||||||
void *tmemmem(const char *haystack, int hlen, const char *needle, int nlen);
|
void *tmemmem(const char *haystack, int hlen, const char *needle, int nlen);
|
||||||
char *strDupUnquo(const char *src);
|
|
||||||
|
|
||||||
static FORCE_INLINE void taosEncryptPass(uint8_t *inBuf, size_t inLen, char *target) {
|
static FORCE_INLINE void taosEncryptPass(uint8_t *inBuf, size_t inLen, char *target) {
|
||||||
T_MD5_CTX context;
|
T_MD5_CTX context;
|
||||||
|
|
|
@ -2210,7 +2210,7 @@ static int32_t smlParseTelnetLine(SSmlHandle *info, void *data) {
|
||||||
(SSmlSTableMeta **)taosHashGet(info->superTables, (*oneTable)->sTableName, (*oneTable)->sTableNameLen);
|
(SSmlSTableMeta **)taosHashGet(info->superTables, (*oneTable)->sTableName, (*oneTable)->sTableNameLen);
|
||||||
if (tableMeta) { // update meta
|
if (tableMeta) { // update meta
|
||||||
ret = smlUpdateMeta((*tableMeta)->colHash, (*tableMeta)->cols, cols, &info->msgBuf);
|
ret = smlUpdateMeta((*tableMeta)->colHash, (*tableMeta)->cols, cols, &info->msgBuf);
|
||||||
if (!hasTable && ret) {
|
if (!hasTable && ret == TSDB_CODE_SUCCESS) {
|
||||||
ret = smlUpdateMeta((*tableMeta)->tagHash, (*tableMeta)->tags, (*oneTable)->tags, &info->msgBuf);
|
ret = smlUpdateMeta((*tableMeta)->tagHash, (*tableMeta)->tags, (*oneTable)->tags, &info->msgBuf);
|
||||||
}
|
}
|
||||||
if (ret != TSDB_CODE_SUCCESS) {
|
if (ret != TSDB_CODE_SUCCESS) {
|
||||||
|
|
|
@ -40,11 +40,11 @@ bool tsPrintAuth = false;
|
||||||
|
|
||||||
// multi process
|
// multi process
|
||||||
int32_t tsMultiProcess = 0;
|
int32_t tsMultiProcess = 0;
|
||||||
int32_t tsMnodeShmSize = TSDB_MAX_WAL_SIZE * 2 + 1024;
|
int32_t tsMnodeShmSize = TSDB_MAX_MSG_SIZE * 2 + 1024;
|
||||||
int32_t tsVnodeShmSize = TSDB_MAX_WAL_SIZE * 10 + 1024;
|
int32_t tsVnodeShmSize = TSDB_MAX_MSG_SIZE * 10 + 1024;
|
||||||
int32_t tsQnodeShmSize = TSDB_MAX_WAL_SIZE * 4 + 1024;
|
int32_t tsQnodeShmSize = TSDB_MAX_MSG_SIZE * 4 + 1024;
|
||||||
int32_t tsSnodeShmSize = TSDB_MAX_WAL_SIZE * 4 + 1024;
|
int32_t tsSnodeShmSize = TSDB_MAX_MSG_SIZE * 4 + 1024;
|
||||||
int32_t tsBnodeShmSize = TSDB_MAX_WAL_SIZE * 4 + 1024;
|
int32_t tsBnodeShmSize = TSDB_MAX_MSG_SIZE * 4 + 1024;
|
||||||
int32_t tsNumOfShmThreads = 1;
|
int32_t tsNumOfShmThreads = 1;
|
||||||
|
|
||||||
// queue & threads
|
// queue & threads
|
||||||
|
@ -387,11 +387,11 @@ static int32_t taosAddServerCfg(SConfig *pCfg) {
|
||||||
if (cfgAddBool(pCfg, "deadLockKillQuery", tsDeadLockKillQuery, 0) != 0) return -1;
|
if (cfgAddBool(pCfg, "deadLockKillQuery", tsDeadLockKillQuery, 0) != 0) return -1;
|
||||||
|
|
||||||
if (cfgAddInt32(pCfg, "multiProcess", tsMultiProcess, 0, 2, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "multiProcess", tsMultiProcess, 0, 2, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "mnodeShmSize", tsMnodeShmSize, TSDB_MAX_WAL_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "mnodeShmSize", tsMnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "vnodeShmSize", tsVnodeShmSize, TSDB_MAX_WAL_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "vnodeShmSize", tsVnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "qnodeShmSize", tsQnodeShmSize, TSDB_MAX_WAL_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "qnodeShmSize", tsQnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "snodeShmSize", tsSnodeShmSize, TSDB_MAX_WAL_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "snodeShmSize", tsSnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "bnodeShmSize", tsBnodeShmSize, TSDB_MAX_WAL_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "bnodeShmSize", tsBnodeShmSize, TSDB_MAX_MSG_SIZE * 2 + 1024, INT32_MAX, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "mumOfShmThreads", tsNumOfShmThreads, 1, 1024, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "mumOfShmThreads", tsNumOfShmThreads, 1, 1024, 0) != 0) return -1;
|
||||||
|
|
||||||
tsNumOfRpcThreads = tsNumOfCores / 2;
|
tsNumOfRpcThreads = tsNumOfCores / 2;
|
||||||
|
@ -447,8 +447,8 @@ static int32_t taosAddServerCfg(SConfig *pCfg) {
|
||||||
if (cfgAddInt32(pCfg, "numOfSnodeUniqueThreads", tsNumOfSnodeUniqueThreads, 1, 1024, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "numOfSnodeUniqueThreads", tsNumOfSnodeUniqueThreads, 1, 1024, 0) != 0) return -1;
|
||||||
|
|
||||||
tsRpcQueueMemoryAllowed = tsTotalMemoryKB * 1024 * 0.1;
|
tsRpcQueueMemoryAllowed = tsTotalMemoryKB * 1024 * 0.1;
|
||||||
tsRpcQueueMemoryAllowed = TRANGE(tsRpcQueueMemoryAllowed, TSDB_MAX_WAL_SIZE * 10L, TSDB_MAX_WAL_SIZE * 10000L);
|
tsRpcQueueMemoryAllowed = TRANGE(tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, TSDB_MAX_MSG_SIZE * 10000L);
|
||||||
if (cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsRpcQueueMemoryAllowed, TSDB_MAX_WAL_SIZE * 10L, INT64_MAX, 0) != 0)
|
if (cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, 0) != 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (cfgAddBool(pCfg, "monitor", tsEnableMonitor, 0) != 0) return -1;
|
if (cfgAddBool(pCfg, "monitor", tsEnableMonitor, 0) != 0) return -1;
|
||||||
|
|
|
@ -2933,6 +2933,13 @@ int32_t tSerializeSTableIndexRsp(void *buf, int32_t bufLen, const STableIndexRsp
|
||||||
return tlen;
|
return tlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tFreeSerializeSTableIndexRsp(STableIndexRsp *pRsp) {
|
||||||
|
if (pRsp->pIndex != NULL) {
|
||||||
|
taosArrayDestroy(pRsp->pIndex);
|
||||||
|
pRsp->pIndex = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int32_t tDeserializeSTableIndexInfo(SDecoder *pDecoder, STableIndexInfo *pInfo) {
|
int32_t tDeserializeSTableIndexInfo(SDecoder *pDecoder, STableIndexInfo *pInfo) {
|
||||||
if (tDecodeI8(pDecoder, &pInfo->intervalUnit) < 0) return -1;
|
if (tDecodeI8(pDecoder, &pInfo->intervalUnit) < 0) return -1;
|
||||||
if (tDecodeI8(pDecoder, &pInfo->slidingUnit) < 0) return -1;
|
if (tDecodeI8(pDecoder, &pInfo->slidingUnit) < 0) return -1;
|
||||||
|
@ -5342,6 +5349,7 @@ int32_t tEncodeSVAlterTbReq(SEncoder *pEncoder, const SVAlterTbReq *pReq) {
|
||||||
|
|
||||||
if (tEncodeCStr(pEncoder, pReq->tbName) < 0) return -1;
|
if (tEncodeCStr(pEncoder, pReq->tbName) < 0) return -1;
|
||||||
if (tEncodeI8(pEncoder, pReq->action) < 0) return -1;
|
if (tEncodeI8(pEncoder, pReq->action) < 0) return -1;
|
||||||
|
if (tEncodeI32(pEncoder, pReq->colId) < 0) return -1;
|
||||||
switch (pReq->action) {
|
switch (pReq->action) {
|
||||||
case TSDB_ALTER_TABLE_ADD_COLUMN:
|
case TSDB_ALTER_TABLE_ADD_COLUMN:
|
||||||
if (tEncodeCStr(pEncoder, pReq->colName) < 0) return -1;
|
if (tEncodeCStr(pEncoder, pReq->colName) < 0) return -1;
|
||||||
|
@ -5392,6 +5400,7 @@ int32_t tDecodeSVAlterTbReq(SDecoder *pDecoder, SVAlterTbReq *pReq) {
|
||||||
|
|
||||||
if (tDecodeCStr(pDecoder, &pReq->tbName) < 0) return -1;
|
if (tDecodeCStr(pDecoder, &pReq->tbName) < 0) return -1;
|
||||||
if (tDecodeI8(pDecoder, &pReq->action) < 0) return -1;
|
if (tDecodeI8(pDecoder, &pReq->action) < 0) return -1;
|
||||||
|
if (tDecodeI32(pDecoder, &pReq->colId) < 0) return -1;
|
||||||
switch (pReq->action) {
|
switch (pReq->action) {
|
||||||
case TSDB_ALTER_TABLE_ADD_COLUMN:
|
case TSDB_ALTER_TABLE_ADD_COLUMN:
|
||||||
if (tDecodeCStr(pDecoder, &pReq->colName) < 0) return -1;
|
if (tDecodeCStr(pDecoder, &pReq->colName) < 0) return -1;
|
||||||
|
|
|
@ -700,6 +700,8 @@ int64_t taosTimeAdd(int64_t t, int64_t duration, char unit, int32_t precision) {
|
||||||
numOfMonth *= 12;
|
numOfMonth *= 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t fraction = t % TSDB_TICK_PER_SECOND(precision);
|
||||||
|
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
time_t tt = (time_t)(t / TSDB_TICK_PER_SECOND(precision));
|
time_t tt = (time_t)(t / TSDB_TICK_PER_SECOND(precision));
|
||||||
taosLocalTime(&tt, &tm);
|
taosLocalTime(&tt, &tm);
|
||||||
|
@ -707,35 +709,9 @@ int64_t taosTimeAdd(int64_t t, int64_t duration, char unit, int32_t precision) {
|
||||||
tm.tm_year = mon / 12;
|
tm.tm_year = mon / 12;
|
||||||
tm.tm_mon = mon % 12;
|
tm.tm_mon = mon % 12;
|
||||||
|
|
||||||
return (int64_t)(taosMktime(&tm) * TSDB_TICK_PER_SECOND(precision));
|
return (int64_t)(taosMktime(&tm) * TSDB_TICK_PER_SECOND(precision) + fraction);
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t taosTimeSub(int64_t t, int64_t duration, char unit, int32_t precision) {
|
|
||||||
if (duration == 0) {
|
|
||||||
return t;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (unit != 'n' && unit != 'y') {
|
|
||||||
return t - duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The following code handles the y/n time duration
|
|
||||||
int64_t numOfMonth = duration;
|
|
||||||
if (unit == 'y') {
|
|
||||||
numOfMonth *= 12;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct tm tm;
|
|
||||||
time_t tt = (time_t)(t / TSDB_TICK_PER_SECOND(precision));
|
|
||||||
taosLocalTime(&tt, &tm);
|
|
||||||
int32_t mon = tm.tm_year * 12 + tm.tm_mon - (int32_t)numOfMonth;
|
|
||||||
tm.tm_year = mon / 12;
|
|
||||||
tm.tm_mon = mon % 12;
|
|
||||||
|
|
||||||
return (int64_t)(taosMktime(&tm) * TSDB_TICK_PER_SECOND(precision));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int32_t taosTimeCountInterval(int64_t skey, int64_t ekey, int64_t interval, char unit, int32_t precision) {
|
int32_t taosTimeCountInterval(int64_t skey, int64_t ekey, int64_t interval, char unit, int32_t precision) {
|
||||||
if (ekey < skey) {
|
if (ekey < skey) {
|
||||||
int64_t tmp = ekey;
|
int64_t tmp = ekey;
|
||||||
|
@ -844,11 +820,14 @@ int64_t taosTimeTruncate(int64_t t, const SInterval* pInterval, int32_t precisio
|
||||||
} else {
|
} else {
|
||||||
// try to move current window to the left-hande-side, due to the offset effect.
|
// try to move current window to the left-hande-side, due to the offset effect.
|
||||||
int64_t end = taosTimeAdd(start, pInterval->interval, pInterval->intervalUnit, precision) - 1;
|
int64_t end = taosTimeAdd(start, pInterval->interval, pInterval->intervalUnit, precision) - 1;
|
||||||
ASSERT(end >= t);
|
|
||||||
end = taosTimeAdd(end, -pInterval->sliding, pInterval->slidingUnit, precision);
|
int64_t newEnd = end;
|
||||||
if (end >= t) {
|
while(newEnd >= t) {
|
||||||
start = taosTimeAdd(start, -pInterval->sliding, pInterval->slidingUnit, precision);
|
end = newEnd;
|
||||||
|
newEnd = taosTimeAdd(newEnd, -pInterval->sliding, pInterval->slidingUnit, precision);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
start = taosTimeAdd(end, -pInterval->interval, pInterval->intervalUnit, precision) + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1153,6 +1153,7 @@ _OVER:
|
||||||
mError("failed to get table index %s since %s", indexReq.tbFName, terrstr());
|
mError("failed to get table index %s since %s", indexReq.tbFName, terrstr());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tFreeSerializeSTableIndexRsp(&rsp);
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -231,7 +231,7 @@ static int32_t sdbReadFileImp(SSdb *pSdb) {
|
||||||
snprintf(file, sizeof(file), "%s%ssdb.data", pSdb->currDir, TD_DIRSEP);
|
snprintf(file, sizeof(file), "%s%ssdb.data", pSdb->currDir, TD_DIRSEP);
|
||||||
mDebug("start to read sdb file:%s", file);
|
mDebug("start to read sdb file:%s", file);
|
||||||
|
|
||||||
SSdbRaw *pRaw = taosMemoryMalloc(WAL_MAX_SIZE + 100);
|
SSdbRaw *pRaw = taosMemoryMalloc(TSDB_MAX_MSG_SIZE + 100);
|
||||||
if (pRaw == NULL) {
|
if (pRaw == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
mError("failed read sdb file since %s", terrstr());
|
mError("failed read sdb file since %s", terrstr());
|
||||||
|
@ -556,8 +556,9 @@ int32_t sdbStartRead(SSdb *pSdb, SSdbIter **ppIter, int64_t *index, int64_t *ter
|
||||||
if (term != NULL) *term = commitTerm;
|
if (term != NULL) *term = commitTerm;
|
||||||
if (config != NULL) *config = commitConfig;
|
if (config != NULL) *config = commitConfig;
|
||||||
|
|
||||||
mDebug("sdbiter:%p, is created to read snapshot, commit index:%" PRId64 " term:%" PRId64 " config:%" PRId64 " file:%s",
|
mDebug("sdbiter:%p, is created to read snapshot, commit index:%" PRId64 " term:%" PRId64 " config:%" PRId64
|
||||||
pIter, commitIndex, commitTerm, commitConfig, pIter->name);
|
" file:%s",
|
||||||
|
pIter, commitIndex, commitTerm, commitConfig, pIter->name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -669,4 +670,4 @@ int32_t sdbDoWrite(SSdb *pSdb, SSdbIter *pIter, void *pBuf, int32_t len) {
|
||||||
pIter->total += writelen;
|
pIter->total += writelen;
|
||||||
mDebug("sdbiter:%p, write:%d bytes to snapshot, total:%" PRId64, pIter, writelen, pIter->total);
|
mDebug("sdbiter:%p, write:%d bytes to snapshot, total:%" PRId64, pIter, writelen, pIter->total);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -506,7 +506,8 @@ int32_t tqProcessVgChangeReq(STQ* pTq, char* msg, int32_t msgLen) {
|
||||||
.initTqReader = true,
|
.initTqReader = true,
|
||||||
.version = ver,
|
.version = ver,
|
||||||
};
|
};
|
||||||
pHandle->execHandle.execCol.task[i] = qCreateQueueExecTaskInfo(pHandle->execHandle.execCol.qmsg, &handle, &pHandle->execHandle.numOfCols);
|
pHandle->execHandle.execCol.task[i] =
|
||||||
|
qCreateQueueExecTaskInfo(pHandle->execHandle.execCol.qmsg, &handle, &pHandle->execHandle.numOfCols);
|
||||||
ASSERT(pHandle->execHandle.execCol.task[i]);
|
ASSERT(pHandle->execHandle.execCol.task[i]);
|
||||||
void* scanner = NULL;
|
void* scanner = NULL;
|
||||||
qExtractStreamScanner(pHandle->execHandle.execCol.task[i], &scanner);
|
qExtractStreamScanner(pHandle->execHandle.execCol.task[i], &scanner);
|
||||||
|
@ -679,9 +680,9 @@ int32_t tqProcessTaskRunReq(STQ* pTq, SRpcMsg* pMsg) {
|
||||||
//
|
//
|
||||||
SStreamTaskRunReq* pReq = pMsg->pCont;
|
SStreamTaskRunReq* pReq = pMsg->pCont;
|
||||||
int32_t taskId = pReq->taskId;
|
int32_t taskId = pReq->taskId;
|
||||||
SStreamTask* pTask = *(SStreamTask**)taosHashGet(pTq->pStreamTasks, &taskId, sizeof(int32_t));
|
SStreamTask** ppTask = (SStreamTask**)taosHashGet(pTq->pStreamTasks, &taskId, sizeof(int32_t));
|
||||||
if (pTask) {
|
if (ppTask) {
|
||||||
streamProcessRunReq(pTask);
|
streamProcessRunReq(*ppTask);
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -696,14 +697,14 @@ int32_t tqProcessTaskDispatchReq(STQ* pTq, SRpcMsg* pMsg) {
|
||||||
SDecoder decoder;
|
SDecoder decoder;
|
||||||
tDecoderInit(&decoder, msgBody, msgLen);
|
tDecoderInit(&decoder, msgBody, msgLen);
|
||||||
tDecodeStreamDispatchReq(&decoder, &req);
|
tDecodeStreamDispatchReq(&decoder, &req);
|
||||||
int32_t taskId = req.taskId;
|
int32_t taskId = req.taskId;
|
||||||
SStreamTask* pTask = *(SStreamTask**)taosHashGet(pTq->pStreamTasks, &taskId, sizeof(int32_t));
|
SStreamTask** ppTask = (SStreamTask**)taosHashGet(pTq->pStreamTasks, &taskId, sizeof(int32_t));
|
||||||
if (pTask) {
|
if (ppTask) {
|
||||||
SRpcMsg rsp = {
|
SRpcMsg rsp = {
|
||||||
.info = pMsg->info,
|
.info = pMsg->info,
|
||||||
.code = 0,
|
.code = 0,
|
||||||
};
|
};
|
||||||
streamProcessDispatchReq(pTask, &req, &rsp);
|
streamProcessDispatchReq(*ppTask, &req, &rsp);
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -713,9 +714,9 @@ int32_t tqProcessTaskDispatchReq(STQ* pTq, SRpcMsg* pMsg) {
|
||||||
int32_t tqProcessTaskRecoverReq(STQ* pTq, SRpcMsg* pMsg) {
|
int32_t tqProcessTaskRecoverReq(STQ* pTq, SRpcMsg* pMsg) {
|
||||||
SStreamTaskRecoverReq* pReq = pMsg->pCont;
|
SStreamTaskRecoverReq* pReq = pMsg->pCont;
|
||||||
int32_t taskId = pReq->taskId;
|
int32_t taskId = pReq->taskId;
|
||||||
SStreamTask* pTask = *(SStreamTask**)taosHashGet(pTq->pStreamTasks, &taskId, sizeof(int32_t));
|
SStreamTask** ppTask = (SStreamTask**)taosHashGet(pTq->pStreamTasks, &taskId, sizeof(int32_t));
|
||||||
if (pTask) {
|
if (ppTask) {
|
||||||
streamProcessRecoverReq(pTask, pReq, pMsg);
|
streamProcessRecoverReq(*ppTask, pReq, pMsg);
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -725,9 +726,9 @@ int32_t tqProcessTaskRecoverReq(STQ* pTq, SRpcMsg* pMsg) {
|
||||||
int32_t tqProcessTaskDispatchRsp(STQ* pTq, SRpcMsg* pMsg) {
|
int32_t tqProcessTaskDispatchRsp(STQ* pTq, SRpcMsg* pMsg) {
|
||||||
SStreamDispatchRsp* pRsp = POINTER_SHIFT(pMsg->pCont, sizeof(SMsgHead));
|
SStreamDispatchRsp* pRsp = POINTER_SHIFT(pMsg->pCont, sizeof(SMsgHead));
|
||||||
int32_t taskId = pRsp->taskId;
|
int32_t taskId = pRsp->taskId;
|
||||||
SStreamTask* pTask = *(SStreamTask**)taosHashGet(pTq->pStreamTasks, &taskId, sizeof(int32_t));
|
SStreamTask** ppTask = (SStreamTask**)taosHashGet(pTq->pStreamTasks, &taskId, sizeof(int32_t));
|
||||||
if (pTask) {
|
if (ppTask) {
|
||||||
streamProcessDispatchRsp(pTask, pRsp);
|
streamProcessDispatchRsp(*ppTask, pRsp);
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -737,9 +738,9 @@ int32_t tqProcessTaskDispatchRsp(STQ* pTq, SRpcMsg* pMsg) {
|
||||||
int32_t tqProcessTaskRecoverRsp(STQ* pTq, SRpcMsg* pMsg) {
|
int32_t tqProcessTaskRecoverRsp(STQ* pTq, SRpcMsg* pMsg) {
|
||||||
SStreamTaskRecoverRsp* pRsp = pMsg->pCont;
|
SStreamTaskRecoverRsp* pRsp = pMsg->pCont;
|
||||||
int32_t taskId = pRsp->taskId;
|
int32_t taskId = pRsp->taskId;
|
||||||
SStreamTask* pTask = *(SStreamTask**)taosHashGet(pTq->pStreamTasks, &taskId, sizeof(int32_t));
|
SStreamTask** ppTask = (SStreamTask**)taosHashGet(pTq->pStreamTasks, &taskId, sizeof(int32_t));
|
||||||
if (pTask) {
|
if (ppTask) {
|
||||||
streamProcessRecoverRsp(pTask, pRsp);
|
streamProcessRecoverRsp(*ppTask, pRsp);
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -749,10 +750,10 @@ int32_t tqProcessTaskRecoverRsp(STQ* pTq, SRpcMsg* pMsg) {
|
||||||
int32_t tqProcessTaskDropReq(STQ* pTq, char* msg, int32_t msgLen) {
|
int32_t tqProcessTaskDropReq(STQ* pTq, char* msg, int32_t msgLen) {
|
||||||
SVDropStreamTaskReq* pReq = (SVDropStreamTaskReq*)msg;
|
SVDropStreamTaskReq* pReq = (SVDropStreamTaskReq*)msg;
|
||||||
|
|
||||||
SStreamTask* pTask = *(SStreamTask**)taosHashGet(pTq->pStreamTasks, &pReq->taskId, sizeof(int32_t));
|
SStreamTask** ppTask = (SStreamTask**)taosHashGet(pTq->pStreamTasks, &pReq->taskId, sizeof(int32_t));
|
||||||
if (pTask) {
|
if (ppTask) {
|
||||||
taosHashRemove(pTq->pStreamTasks, &pReq->taskId, sizeof(int32_t));
|
taosHashRemove(pTq->pStreamTasks, &pReq->taskId, sizeof(int32_t));
|
||||||
atomic_store_8(&pTask->taskStatus, TASK_STATUS__DROPPING);
|
atomic_store_8(&(*ppTask)->taskStatus, TASK_STATUS__DROPPING);
|
||||||
}
|
}
|
||||||
// todo
|
// todo
|
||||||
// clear queue
|
// clear queue
|
||||||
|
@ -780,16 +781,17 @@ int32_t tqProcessTaskRetrieveReq(STQ* pTq, SRpcMsg* pMsg) {
|
||||||
SDecoder decoder;
|
SDecoder decoder;
|
||||||
tDecoderInit(&decoder, msgBody, msgLen);
|
tDecoderInit(&decoder, msgBody, msgLen);
|
||||||
tDecodeStreamRetrieveReq(&decoder, &req);
|
tDecodeStreamRetrieveReq(&decoder, &req);
|
||||||
int32_t taskId = req.dstTaskId;
|
int32_t taskId = req.dstTaskId;
|
||||||
SStreamTask* pTask = *(SStreamTask**)taosHashGet(pTq->pStreamTasks, &taskId, sizeof(int32_t));
|
SStreamTask** ppTask = (SStreamTask**)taosHashGet(pTq->pStreamTasks, &taskId, sizeof(int32_t));
|
||||||
if (atomic_load_8(&pTask->taskStatus) != TASK_STATUS__NORMAL) {
|
if (ppTask) {
|
||||||
return 0;
|
SRpcMsg rsp = {
|
||||||
|
.info = pMsg->info,
|
||||||
|
.code = 0,
|
||||||
|
};
|
||||||
|
streamProcessRetrieveReq(*ppTask, &req, &rsp);
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
SRpcMsg rsp = {
|
|
||||||
.info = pMsg->info,
|
|
||||||
.code = 0,
|
|
||||||
};
|
|
||||||
streamProcessRetrieveReq(pTask, &req, &rsp);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2576,10 +2576,10 @@ void updateSchema(TSDBROW* pRow, uint64_t uid, STsdbReader* pReader) {
|
||||||
int32_t sversion = TSDBROW_SVERSION(pRow);
|
int32_t sversion = TSDBROW_SVERSION(pRow);
|
||||||
|
|
||||||
if (pReader->pSchema == NULL) {
|
if (pReader->pSchema == NULL) {
|
||||||
pReader->pSchema = metaGetTbTSchema(pReader->pTsdb->pVnode->pMeta, uid, sversion);
|
metaGetTbTSchemaEx(pReader->pTsdb->pVnode->pMeta, pReader->suid, uid, sversion, &pReader->pSchema);
|
||||||
} else if (pReader->pSchema->version != sversion) {
|
} else if (pReader->pSchema->version != sversion) {
|
||||||
taosMemoryFreeClear(pReader->pSchema);
|
taosMemoryFreeClear(pReader->pSchema);
|
||||||
pReader->pSchema = metaGetTbTSchema(pReader->pTsdb->pVnode->pMeta, uid, sversion);
|
metaGetTbTSchemaEx(pReader->pTsdb->pVnode->pMeta, pReader->suid, uid, sversion, &pReader->pSchema);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2807,7 +2807,6 @@ int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, SArray* pTabl
|
||||||
|
|
||||||
if (pCond->suid != 0) {
|
if (pCond->suid != 0) {
|
||||||
(*ppReader)->pSchema = metaGetTbTSchema((*ppReader)->pTsdb->pVnode->pMeta, (*ppReader)->suid, -1);
|
(*ppReader)->pSchema = metaGetTbTSchema((*ppReader)->pTsdb->pVnode->pMeta, (*ppReader)->suid, -1);
|
||||||
// ASSERT((*ppReader)->pSchema);
|
|
||||||
} else if (taosArrayGetSize(pTableList) > 0) {
|
} else if (taosArrayGetSize(pTableList) > 0) {
|
||||||
STableKeyInfo* pKey = taosArrayGet(pTableList, 0);
|
STableKeyInfo* pKey = taosArrayGet(pTableList, 0);
|
||||||
(*ppReader)->pSchema = metaGetTbTSchema((*ppReader)->pTsdb->pVnode->pMeta, pKey->uid, -1);
|
(*ppReader)->pSchema = metaGetTbTSchema((*ppReader)->pTsdb->pVnode->pMeta, pKey->uid, -1);
|
||||||
|
|
|
@ -744,8 +744,8 @@ typedef struct SSortOperatorInfo {
|
||||||
|
|
||||||
int64_t startTs; // sort start time
|
int64_t startTs; // sort start time
|
||||||
uint64_t sortElapsed; // sort elapsed time, time to flush to disk not included.
|
uint64_t sortElapsed; // sort elapsed time, time to flush to disk not included.
|
||||||
|
SLimitInfo limitInfo;
|
||||||
SNode* pCondition;
|
SNode* pCondition;
|
||||||
} SSortOperatorInfo;
|
} SSortOperatorInfo;
|
||||||
|
|
||||||
typedef struct STagFilterOperatorInfo {
|
typedef struct STagFilterOperatorInfo {
|
||||||
|
@ -785,7 +785,7 @@ int32_t initExprSupp(SExprSupp* pSup, SExprInfo* pExprInfo, int32_t numOfExpr);
|
||||||
void cleanupExprSupp(SExprSupp* pSup);
|
void cleanupExprSupp(SExprSupp* pSup);
|
||||||
int32_t initAggInfo(SExprSupp *pSup, SAggSupporter* pAggSup, SExprInfo* pExprInfo, int32_t numOfCols, size_t keyBufSize,
|
int32_t initAggInfo(SExprSupp *pSup, SAggSupporter* pAggSup, SExprInfo* pExprInfo, int32_t numOfCols, size_t keyBufSize,
|
||||||
const char* pkey);
|
const char* pkey);
|
||||||
void initResultSizeInfo(SOperatorInfo* pOperator, int32_t numOfRows);
|
void initResultSizeInfo(SResultInfo * pResultInfo, int32_t numOfRows);
|
||||||
void doBuildResultDatablock(SOperatorInfo* pOperator, SOptrBasicInfo* pbInfo, SGroupResInfo* pGroupResInfo, SDiskbasedBuf* pBuf);
|
void doBuildResultDatablock(SOperatorInfo* pOperator, SOptrBasicInfo* pbInfo, SGroupResInfo* pGroupResInfo, SDiskbasedBuf* pBuf);
|
||||||
int32_t handleLimitOffset(SOperatorInfo *pOperator, SLimitInfo* pLimitInfo, SSDataBlock* pBlock, bool holdDataInBuf);
|
int32_t handleLimitOffset(SOperatorInfo *pOperator, SLimitInfo* pLimitInfo, SSDataBlock* pBlock, bool holdDataInBuf);
|
||||||
bool hasLimitOffsetInfo(SLimitInfo* pLimitInfo);
|
bool hasLimitOffsetInfo(SLimitInfo* pLimitInfo);
|
||||||
|
@ -797,7 +797,7 @@ void doApplyFunctions(SExecTaskInfo* taskInfo, SqlFunctionCtx* pCtx, STimeWin
|
||||||
int32_t extractDataBlockFromFetchRsp(SSDataBlock* pRes, SLoadRemoteDataInfo* pLoadInfo, int32_t numOfRows, char* pData,
|
int32_t extractDataBlockFromFetchRsp(SSDataBlock* pRes, SLoadRemoteDataInfo* pLoadInfo, int32_t numOfRows, char* pData,
|
||||||
int32_t compLen, int32_t numOfOutput, int64_t startTs, uint64_t* total,
|
int32_t compLen, int32_t numOfOutput, int64_t startTs, uint64_t* total,
|
||||||
SArray* pColList);
|
SArray* pColList);
|
||||||
void getAlignQueryTimeWindow(SInterval* pInterval, int32_t precision, int64_t key, STimeWindow* win);
|
STimeWindow getAlignQueryTimeWindow(SInterval* pInterval, int32_t precision, int64_t key);
|
||||||
STimeWindow getFirstQualifiedTimeWindow(int64_t ts, STimeWindow* pWindow, SInterval* pInterval, int32_t order);
|
STimeWindow getFirstQualifiedTimeWindow(int64_t ts, STimeWindow* pWindow, SInterval* pInterval, int32_t order);
|
||||||
|
|
||||||
int32_t getTableScanInfo(SOperatorInfo* pOperator, int32_t *order, int32_t* scanFlag);
|
int32_t getTableScanInfo(SOperatorInfo* pOperator, int32_t *order, int32_t* scanFlag);
|
||||||
|
|
|
@ -50,7 +50,7 @@ SOperatorInfo* createLastrowScanOperator(SLastRowScanPhysiNode* pScanNode, SRead
|
||||||
|
|
||||||
STableListInfo* pTableList = &pTaskInfo->tableqinfoList;
|
STableListInfo* pTableList = &pTaskInfo->tableqinfoList;
|
||||||
|
|
||||||
initResultSizeInfo(pOperator, 1024);
|
initResultSizeInfo(&pOperator->resultInfo, 1024);
|
||||||
blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity);
|
blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity);
|
||||||
pInfo->pUidList = taosArrayInit(4, sizeof(int64_t));
|
pInfo->pUidList = taosArrayInit(4, sizeof(int64_t));
|
||||||
|
|
||||||
|
|
|
@ -824,10 +824,10 @@ int32_t convertFillType(int32_t mode) {
|
||||||
|
|
||||||
static void getInitialStartTimeWindow(SInterval* pInterval, TSKEY ts, STimeWindow* w, bool ascQuery) {
|
static void getInitialStartTimeWindow(SInterval* pInterval, TSKEY ts, STimeWindow* w, bool ascQuery) {
|
||||||
if (ascQuery) {
|
if (ascQuery) {
|
||||||
getAlignQueryTimeWindow(pInterval, pInterval->precision, ts, w);
|
*w = getAlignQueryTimeWindow(pInterval, pInterval->precision, ts);
|
||||||
} else {
|
} else {
|
||||||
// the start position of the first time window in the endpoint that spreads beyond the queried last timestamp
|
// the start position of the first time window in the endpoint that spreads beyond the queried last timestamp
|
||||||
getAlignQueryTimeWindow(pInterval, pInterval->precision, ts, w);
|
*w = getAlignQueryTimeWindow(pInterval, pInterval->precision, ts);
|
||||||
|
|
||||||
int64_t key = w->skey;
|
int64_t key = w->skey;
|
||||||
while (key < ts) { // moving towards end
|
while (key < ts) { // moving towards end
|
||||||
|
|
|
@ -834,18 +834,20 @@ bool isTaskKilled(SExecTaskInfo* pTaskInfo) {
|
||||||
void setTaskKilled(SExecTaskInfo* pTaskInfo) { pTaskInfo->code = TSDB_CODE_TSC_QUERY_CANCELLED; }
|
void setTaskKilled(SExecTaskInfo* pTaskInfo) { pTaskInfo->code = TSDB_CODE_TSC_QUERY_CANCELLED; }
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// todo refactor : return window
|
STimeWindow getAlignQueryTimeWindow(SInterval* pInterval, int32_t precision, int64_t key) {
|
||||||
void getAlignQueryTimeWindow(SInterval* pInterval, int32_t precision, int64_t key, STimeWindow* win) {
|
STimeWindow win = {0};
|
||||||
win->skey = taosTimeTruncate(key, pInterval, precision);
|
win.skey = taosTimeTruncate(key, pInterval, precision);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* if the realSkey > INT64_MAX - pInterval->interval, the query duration between
|
* if the realSkey > INT64_MAX - pInterval->interval, the query duration between
|
||||||
* realSkey and realEkey must be less than one interval.Therefore, no need to adjust the query ranges.
|
* realSkey and realEkey must be less than one interval.Therefore, no need to adjust the query ranges.
|
||||||
*/
|
*/
|
||||||
win->ekey = taosTimeAdd(win->skey, pInterval->interval, pInterval->intervalUnit, precision) - 1;
|
win.ekey = taosTimeAdd(win.skey, pInterval->interval, pInterval->intervalUnit, precision) - 1;
|
||||||
if (win->ekey < win->skey) {
|
if (win.ekey < win.skey) {
|
||||||
win->ekey = INT64_MAX;
|
win.ekey = INT64_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return win;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -3603,13 +3605,13 @@ int32_t initAggInfo(SExprSupp* pSup, SAggSupporter* pAggSup, SExprInfo* pExprInf
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initResultSizeInfo(SOperatorInfo* pOperator, int32_t numOfRows) {
|
void initResultSizeInfo(SResultInfo * pResultInfo, int32_t numOfRows) {
|
||||||
ASSERT(numOfRows != 0);
|
ASSERT(numOfRows != 0);
|
||||||
pOperator->resultInfo.capacity = numOfRows;
|
pResultInfo->capacity = numOfRows;
|
||||||
pOperator->resultInfo.threshold = numOfRows * 0.75;
|
pResultInfo->threshold = numOfRows * 0.75;
|
||||||
|
|
||||||
if (pOperator->resultInfo.threshold == 0) {
|
if (pResultInfo->threshold == 0) {
|
||||||
pOperator->resultInfo.threshold = numOfRows;
|
pResultInfo->threshold = numOfRows;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3672,7 +3674,7 @@ SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SExprInfo*
|
||||||
int32_t numOfRows = 1024;
|
int32_t numOfRows = 1024;
|
||||||
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
||||||
|
|
||||||
initResultSizeInfo(pOperator, numOfRows);
|
initResultSizeInfo(&pOperator->resultInfo, numOfRows);
|
||||||
int32_t code = initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
int32_t code = initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto _error;
|
goto _error;
|
||||||
|
@ -3827,7 +3829,7 @@ SOperatorInfo* createProjectOperatorInfo(SOperatorInfo* downstream, SProjectPhys
|
||||||
if (numOfRows * pResBlock->info.rowSize > TWOMB) {
|
if (numOfRows * pResBlock->info.rowSize > TWOMB) {
|
||||||
numOfRows = TWOMB / pResBlock->info.rowSize;
|
numOfRows = TWOMB / pResBlock->info.rowSize;
|
||||||
}
|
}
|
||||||
initResultSizeInfo(pOperator, numOfRows);
|
initResultSizeInfo(&pOperator->resultInfo, numOfRows);
|
||||||
|
|
||||||
initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
||||||
initBasicInfo(&pInfo->binfo, pResBlock);
|
initBasicInfo(&pInfo->binfo, pResBlock);
|
||||||
|
@ -4005,7 +4007,7 @@ SOperatorInfo* createIndefinitOutputOperatorInfo(SOperatorInfo* downstream, SPhy
|
||||||
numOfRows = TWOMB / pResBlock->info.rowSize;
|
numOfRows = TWOMB / pResBlock->info.rowSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
initResultSizeInfo(pOperator, numOfRows);
|
initResultSizeInfo(&pOperator->resultInfo, numOfRows);
|
||||||
|
|
||||||
initAggInfo(pSup, &pInfo->aggSup, pExprInfo, numOfExpr, keyBufSize, pTaskInfo->id.str);
|
initAggInfo(pSup, &pInfo->aggSup, pExprInfo, numOfExpr, keyBufSize, pTaskInfo->id.str);
|
||||||
initBasicInfo(&pInfo->binfo, pResBlock);
|
initBasicInfo(&pInfo->binfo, pResBlock);
|
||||||
|
@ -4044,8 +4046,7 @@ static int32_t initFillInfo(SFillOperatorInfo* pInfo, SExprInfo* pExpr, int32_t
|
||||||
STimeWindow win, int32_t capacity, const char* id, SInterval* pInterval, int32_t fillType) {
|
STimeWindow win, int32_t capacity, const char* id, SInterval* pInterval, int32_t fillType) {
|
||||||
SFillColInfo* pColInfo = createFillColInfo(pExpr, numOfCols, pValNode);
|
SFillColInfo* pColInfo = createFillColInfo(pExpr, numOfCols, pValNode);
|
||||||
|
|
||||||
STimeWindow w = TSWINDOW_INITIALIZER;
|
STimeWindow w = getAlignQueryTimeWindow(pInterval, pInterval->precision, win.skey);
|
||||||
getAlignQueryTimeWindow(pInterval, pInterval->precision, win.skey, &w);
|
|
||||||
w = getFirstQualifiedTimeWindow(win.skey, &w, pInterval, TSDB_ORDER_ASC);
|
w = getFirstQualifiedTimeWindow(win.skey, &w, pInterval, TSDB_ORDER_ASC);
|
||||||
|
|
||||||
int32_t order = TSDB_ORDER_ASC;
|
int32_t order = TSDB_ORDER_ASC;
|
||||||
|
@ -4082,7 +4083,7 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode*
|
||||||
int32_t type = convertFillType(pPhyFillNode->mode);
|
int32_t type = convertFillType(pPhyFillNode->mode);
|
||||||
|
|
||||||
SResultInfo* pResultInfo = &pOperator->resultInfo;
|
SResultInfo* pResultInfo = &pOperator->resultInfo;
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
pInfo->primaryTsCol = ((SColumnNode*)pPhyFillNode->pWStartTs)->slotId;
|
pInfo->primaryTsCol = ((SColumnNode*)pPhyFillNode->pWStartTs)->slotId;
|
||||||
|
|
||||||
int32_t numOfOutputCols = 0;
|
int32_t numOfOutputCols = 0;
|
||||||
|
|
|
@ -406,7 +406,7 @@ SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SExprInfo* pEx
|
||||||
goto _error;
|
goto _error;
|
||||||
}
|
}
|
||||||
|
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, pInfo->groupKeyLen, pTaskInfo->id.str);
|
initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, pInfo->groupKeyLen, pTaskInfo->id.str);
|
||||||
initBasicInfo(&pInfo->binfo, pResultBlock);
|
initBasicInfo(&pInfo->binfo, pResultBlock);
|
||||||
initResultRowInfo(&pInfo->binfo.resultRowInfo);
|
initResultRowInfo(&pInfo->binfo.resultRowInfo);
|
||||||
|
|
|
@ -41,7 +41,7 @@ SOperatorInfo* createMergeJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t
|
||||||
int32_t numOfCols = 0;
|
int32_t numOfCols = 0;
|
||||||
SExprInfo* pExprInfo = createExprInfo(pJoinNode->pTargets, NULL, &numOfCols);
|
SExprInfo* pExprInfo = createExprInfo(pJoinNode->pTargets, NULL, &numOfCols);
|
||||||
|
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
|
|
||||||
pInfo->pRes = pResBlock;
|
pInfo->pRes = pResBlock;
|
||||||
pOperator->name = "MergeJoinOperator";
|
pOperator->name = "MergeJoinOperator";
|
||||||
|
|
|
@ -125,7 +125,7 @@ static bool overlapWithTimeWindow(SInterval* pInterval, SDataBlockInfo* pBlockIn
|
||||||
}
|
}
|
||||||
|
|
||||||
if (order == TSDB_ORDER_ASC) {
|
if (order == TSDB_ORDER_ASC) {
|
||||||
getAlignQueryTimeWindow(pInterval, pInterval->precision, pBlockInfo->window.skey, &w);
|
w = getAlignQueryTimeWindow(pInterval, pInterval->precision, pBlockInfo->window.skey);
|
||||||
assert(w.ekey >= pBlockInfo->window.skey);
|
assert(w.ekey >= pBlockInfo->window.skey);
|
||||||
|
|
||||||
if (w.ekey < pBlockInfo->window.ekey) {
|
if (w.ekey < pBlockInfo->window.ekey) {
|
||||||
|
@ -144,7 +144,7 @@ static bool overlapWithTimeWindow(SInterval* pInterval, SDataBlockInfo* pBlockIn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
getAlignQueryTimeWindow(pInterval, pInterval->precision, pBlockInfo->window.ekey, &w);
|
w = getAlignQueryTimeWindow(pInterval, pInterval->precision, pBlockInfo->window.ekey);
|
||||||
assert(w.skey <= pBlockInfo->window.ekey);
|
assert(w.skey <= pBlockInfo->window.ekey);
|
||||||
|
|
||||||
if (w.skey > pBlockInfo->window.skey) {
|
if (w.skey > pBlockInfo->window.skey) {
|
||||||
|
@ -2324,7 +2324,7 @@ SOperatorInfo* createSysTableScanOperatorInfo(void* readHandle, SSystemTableScan
|
||||||
pInfo->pCondition = pScanNode->node.pConditions;
|
pInfo->pCondition = pScanNode->node.pConditions;
|
||||||
pInfo->scanCols = colList;
|
pInfo->scanCols = colList;
|
||||||
|
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
|
|
||||||
tNameAssign(&pInfo->name, &pScanNode->tableName);
|
tNameAssign(&pInfo->name, &pScanNode->tableName);
|
||||||
const char* name = tNameGetTableName(&pInfo->name);
|
const char* name = tNameGetTableName(&pInfo->name);
|
||||||
|
@ -2554,7 +2554,7 @@ SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysi
|
||||||
pOperator->info = pInfo;
|
pOperator->info = pInfo;
|
||||||
pOperator->pTaskInfo = pTaskInfo;
|
pOperator->pTaskInfo = pTaskInfo;
|
||||||
|
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity);
|
blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity);
|
||||||
|
|
||||||
pOperator->fpSet =
|
pOperator->fpSet =
|
||||||
|
@ -3099,7 +3099,7 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN
|
||||||
pOperator->info = pInfo;
|
pOperator->info = pInfo;
|
||||||
pOperator->exprSupp.numOfExprs = numOfCols;
|
pOperator->exprSupp.numOfExprs = numOfCols;
|
||||||
pOperator->pTaskInfo = pTaskInfo;
|
pOperator->pTaskInfo = pTaskInfo;
|
||||||
initResultSizeInfo(pOperator, 1024);
|
initResultSizeInfo(&pOperator->resultInfo, 1024);
|
||||||
|
|
||||||
pOperator->fpSet =
|
pOperator->fpSet =
|
||||||
createOperatorFpSet(operatorDummyOpenFn, doTableMergeScan, NULL, NULL, destroyTableMergeScanOperatorInfo, NULL,
|
createOperatorFpSet(operatorDummyOpenFn, doTableMergeScan, NULL, NULL, destroyTableMergeScanOperatorInfo, NULL,
|
||||||
|
|
|
@ -26,7 +26,7 @@ static void destroyOrderOperatorInfo(void* param, int32_t numOfOutput);
|
||||||
SOperatorInfo* createSortOperatorInfo(SOperatorInfo* downstream, SSortPhysiNode* pSortNode, SExecTaskInfo* pTaskInfo) {
|
SOperatorInfo* createSortOperatorInfo(SOperatorInfo* downstream, SSortPhysiNode* pSortNode, SExecTaskInfo* pTaskInfo) {
|
||||||
SSortOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SSortOperatorInfo));
|
SSortOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SSortOperatorInfo));
|
||||||
SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo));
|
SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo));
|
||||||
if (pInfo == NULL || pOperator == NULL /* || rowSize > 100 * 1024 * 1024*/) {
|
if (pInfo == NULL || pOperator == NULL) {
|
||||||
goto _error;
|
goto _error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,13 +41,15 @@ SOperatorInfo* createSortOperatorInfo(SOperatorInfo* downstream, SSortPhysiNode*
|
||||||
extractColMatchInfo(pSortNode->pTargets, pDescNode, &numOfOutputCols, COL_MATCH_FROM_SLOT_ID);
|
extractColMatchInfo(pSortNode->pTargets, pDescNode, &numOfOutputCols, COL_MATCH_FROM_SLOT_ID);
|
||||||
|
|
||||||
pOperator->exprSupp.pCtx = createSqlFunctionCtx(pExprInfo, numOfCols, &pOperator->exprSupp.rowEntryInfoOffset);
|
pOperator->exprSupp.pCtx = createSqlFunctionCtx(pExprInfo, numOfCols, &pOperator->exprSupp.rowEntryInfoOffset);
|
||||||
|
|
||||||
|
initResultSizeInfo(&pOperator->resultInfo, 1024);
|
||||||
|
|
||||||
pInfo->binfo.pRes = pResBlock;
|
pInfo->binfo.pRes = pResBlock;
|
||||||
|
pInfo->pSortInfo = createSortInfo(pSortNode->pSortKeys);
|
||||||
initResultSizeInfo(pOperator, 1024);
|
|
||||||
|
|
||||||
pInfo->pSortInfo = createSortInfo(pSortNode->pSortKeys);
|
|
||||||
pInfo->pCondition = pSortNode->node.pConditions;
|
pInfo->pCondition = pSortNode->node.pConditions;
|
||||||
pInfo->pColMatchInfo = pColMatchColInfo;
|
pInfo->pColMatchInfo = pColMatchColInfo;
|
||||||
|
initLimitInfo(pSortNode->node.pLimit, pSortNode->node.pSlimit, &pInfo->limitInfo);
|
||||||
|
|
||||||
pOperator->name = "SortOperator";
|
pOperator->name = "SortOperator";
|
||||||
pOperator->operatorType = QUERY_NODE_PHYSICAL_PLAN_SORT;
|
pOperator->operatorType = QUERY_NODE_PHYSICAL_PLAN_SORT;
|
||||||
pOperator->blocking = true;
|
pOperator->blocking = true;
|
||||||
|
@ -208,26 +210,44 @@ SSDataBlock* doSort(SOperatorInfo* pOperator) {
|
||||||
SSDataBlock* pBlock = NULL;
|
SSDataBlock* pBlock = NULL;
|
||||||
while (1) {
|
while (1) {
|
||||||
pBlock = getSortedBlockData(pInfo->pSortHandle, pInfo->binfo.pRes, pOperator->resultInfo.capacity,
|
pBlock = getSortedBlockData(pInfo->pSortHandle, pInfo->binfo.pRes, pOperator->resultInfo.capacity,
|
||||||
pInfo->pColMatchInfo, pInfo);
|
pInfo->pColMatchInfo, pInfo);
|
||||||
if (pBlock != NULL) {
|
|
||||||
doFilter(pInfo->pCondition, pBlock);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pBlock == NULL) {
|
if (pBlock == NULL) {
|
||||||
doSetOperatorCompleted(pOperator);
|
doSetOperatorCompleted(pOperator);
|
||||||
break;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (blockDataGetNumOfRows(pBlock) > 0) {
|
doFilter(pInfo->pCondition, pBlock);
|
||||||
|
if (blockDataGetNumOfRows(pBlock) == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo add the limit/offset info
|
||||||
|
if (pInfo->limitInfo.remainOffset > 0) {
|
||||||
|
if (pInfo->limitInfo.remainOffset >= blockDataGetNumOfRows(pBlock)) {
|
||||||
|
pInfo->limitInfo.remainOffset -= pBlock->info.rows;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockDataTrimFirstNRows(pBlock, pInfo->limitInfo.remainOffset);
|
||||||
|
pInfo->limitInfo.remainOffset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pInfo->limitInfo.limit.limit > 0 &&
|
||||||
|
pInfo->limitInfo.limit.limit <= pInfo->limitInfo.numOfOutputRows + blockDataGetNumOfRows(pBlock)) {
|
||||||
|
int32_t remain = pInfo->limitInfo.limit.limit - pInfo->limitInfo.numOfOutputRows;
|
||||||
|
blockDataKeepFirstNRows(pBlock, remain);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t numOfRows = blockDataGetNumOfRows(pBlock);
|
||||||
|
pInfo->limitInfo.numOfOutputRows += numOfRows;
|
||||||
|
pOperator->resultInfo.totalRows += numOfRows;
|
||||||
|
|
||||||
|
if (numOfRows > 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pBlock != NULL) {
|
return blockDataGetNumOfRows(pBlock) > 0? pBlock:NULL;
|
||||||
pOperator->resultInfo.totalRows += pBlock->info.rows;
|
|
||||||
}
|
|
||||||
|
|
||||||
return pBlock;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void destroyOrderOperatorInfo(void* param, int32_t numOfOutput) {
|
void destroyOrderOperatorInfo(void* param, int32_t numOfOutput) {
|
||||||
|
@ -479,7 +499,7 @@ SOperatorInfo* createGroupSortOperatorInfo(SOperatorInfo* downstream, SGroupSort
|
||||||
pOperator->exprSupp.pCtx = createSqlFunctionCtx(pExprInfo, numOfCols, &pOperator->exprSupp.rowEntryInfoOffset);
|
pOperator->exprSupp.pCtx = createSqlFunctionCtx(pExprInfo, numOfCols, &pOperator->exprSupp.rowEntryInfoOffset);
|
||||||
pInfo->binfo.pRes = pResBlock;
|
pInfo->binfo.pRes = pResBlock;
|
||||||
|
|
||||||
initResultSizeInfo(pOperator, 1024);
|
initResultSizeInfo(&pOperator->resultInfo, 1024);
|
||||||
|
|
||||||
pInfo->pSortInfo = createSortInfo(pSortPhyNode->pSortKeys);
|
pInfo->pSortInfo = createSortInfo(pSortPhyNode->pSortKeys);
|
||||||
;
|
;
|
||||||
|
@ -711,7 +731,7 @@ SOperatorInfo* createMultiwayMergeOperatorInfo(SOperatorInfo** downStreams, size
|
||||||
extractColMatchInfo(pMergePhyNode->pTargets, pDescNode, &numOfOutputCols, COL_MATCH_FROM_SLOT_ID);
|
extractColMatchInfo(pMergePhyNode->pTargets, pDescNode, &numOfOutputCols, COL_MATCH_FROM_SLOT_ID);
|
||||||
SPhysiNode* pChildNode = (SPhysiNode*)nodesListGetNode(pPhyNode->pChildren, 0);
|
SPhysiNode* pChildNode = (SPhysiNode*)nodesListGetNode(pPhyNode->pChildren, 0);
|
||||||
SSDataBlock* pInputBlock = createResDataBlock(pChildNode->pOutputDataBlockDesc);
|
SSDataBlock* pInputBlock = createResDataBlock(pChildNode->pOutputDataBlockDesc);
|
||||||
initResultSizeInfo(pOperator, 1024);
|
initResultSizeInfo(&pOperator->resultInfo, 1024);
|
||||||
|
|
||||||
pInfo->groupSort = pMergePhyNode->groupSort;
|
pInfo->groupSort = pMergePhyNode->groupSort;
|
||||||
pInfo->binfo.pRes = pResBlock;
|
pInfo->binfo.pRes = pResBlock;
|
||||||
|
|
|
@ -652,7 +652,7 @@ static void doInterpUnclosedTimeWindow(SOperatorInfo* pOperatorInfo, int32_t num
|
||||||
|
|
||||||
void printDataBlock(SSDataBlock* pBlock, const char* flag) {
|
void printDataBlock(SSDataBlock* pBlock, const char* flag) {
|
||||||
if (!pBlock || pBlock->info.rows == 0) {
|
if (!pBlock || pBlock->info.rows == 0) {
|
||||||
qDebug("======printDataBlock: Block is Null or Empty");
|
qDebug("===stream===printDataBlock: Block is Null or Empty");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
char* pBuf = NULL;
|
char* pBuf = NULL;
|
||||||
|
@ -660,6 +660,62 @@ void printDataBlock(SSDataBlock* pBlock, const char* flag) {
|
||||||
taosMemoryFree(pBuf);
|
taosMemoryFree(pBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef int32_t (*__compare_fn_t)(void* pKey, void* data, int32_t index);
|
||||||
|
|
||||||
|
int32_t binarySearchCom(void* keyList, int num, void* pKey, int order, __compare_fn_t comparefn) {
|
||||||
|
int firstPos = 0, lastPos = num - 1, midPos = -1;
|
||||||
|
int numOfRows = 0;
|
||||||
|
|
||||||
|
if (num <= 0) return -1;
|
||||||
|
if (order == TSDB_ORDER_DESC) {
|
||||||
|
// find the first position which is smaller or equal than the key
|
||||||
|
while (1) {
|
||||||
|
if (comparefn(pKey, keyList, lastPos) >= 0) return lastPos;
|
||||||
|
if (comparefn(pKey, keyList, firstPos) == 0) return firstPos;
|
||||||
|
if (comparefn(pKey, keyList, firstPos) < 0) return firstPos - 1;
|
||||||
|
|
||||||
|
numOfRows = lastPos - firstPos + 1;
|
||||||
|
midPos = (numOfRows >> 1) + firstPos;
|
||||||
|
|
||||||
|
if (comparefn(pKey, keyList, midPos) < 0) {
|
||||||
|
lastPos = midPos - 1;
|
||||||
|
} else if (comparefn(pKey, keyList, midPos) > 0) {
|
||||||
|
firstPos = midPos + 1;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// find the first position which is bigger or equal than the key
|
||||||
|
while (1) {
|
||||||
|
if (comparefn(pKey, keyList, firstPos) <= 0) return firstPos;
|
||||||
|
if (comparefn(pKey, keyList, lastPos) == 0) return lastPos;
|
||||||
|
|
||||||
|
if (comparefn(pKey, keyList, lastPos) > 0) {
|
||||||
|
lastPos = lastPos + 1;
|
||||||
|
if (lastPos >= num)
|
||||||
|
return -1;
|
||||||
|
else
|
||||||
|
return lastPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
numOfRows = lastPos - firstPos + 1;
|
||||||
|
midPos = (numOfRows >> 1) + firstPos;
|
||||||
|
|
||||||
|
if (comparefn(pKey, keyList, midPos) < 0) {
|
||||||
|
lastPos = midPos - 1;
|
||||||
|
} else if (comparefn(pKey, keyList, midPos) > 0) {
|
||||||
|
firstPos = midPos + 1;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return midPos;
|
||||||
|
}
|
||||||
|
|
||||||
typedef int64_t (*__get_value_fn_t)(void* data, int32_t index);
|
typedef int64_t (*__get_value_fn_t)(void* data, int32_t index);
|
||||||
|
|
||||||
int32_t binarySearch(void* keyList, int num, TSKEY key, int order, __get_value_fn_t getValuefn) {
|
int32_t binarySearch(void* keyList, int num, TSKEY key, int order, __get_value_fn_t getValuefn) {
|
||||||
|
@ -716,20 +772,31 @@ int32_t binarySearch(void* keyList, int num, TSKEY key, int order, __get_value_f
|
||||||
return midPos;
|
return midPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t getReskey(void* data, int32_t index) {
|
int32_t compareResKey(void* pKey, void* data, int32_t index) {
|
||||||
SArray* res = (SArray*)data;
|
SArray* res = (SArray*)data;
|
||||||
SResKeyPos* pos = taosArrayGetP(res, index);
|
SResKeyPos* pos = taosArrayGetP(res, index);
|
||||||
return *(int64_t*)pos->key;
|
SWinRes* pData = (SWinRes*) pKey;
|
||||||
|
if (pData->ts == *(int64_t*)pos->key) {
|
||||||
|
if (pData->groupId > pos->groupId) {
|
||||||
|
return 1;
|
||||||
|
} else if (pData->groupId < pos->groupId) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
} else if (pData->ts > *(int64_t*)pos->key) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t saveResult(int64_t ts, int32_t pageId, int32_t offset, uint64_t groupId, SArray* pUpdated) {
|
static int32_t saveResult(int64_t ts, int32_t pageId, int32_t offset, uint64_t groupId, SArray* pUpdated) {
|
||||||
int32_t size = taosArrayGetSize(pUpdated);
|
int32_t size = taosArrayGetSize(pUpdated);
|
||||||
int32_t index = binarySearch(pUpdated, size, ts, TSDB_ORDER_DESC, getReskey);
|
SWinRes data = {.ts = ts, .groupId = groupId};
|
||||||
|
int32_t index = binarySearchCom(pUpdated, size, &data, TSDB_ORDER_DESC, compareResKey);
|
||||||
if (index == -1) {
|
if (index == -1) {
|
||||||
index = 0;
|
index = 0;
|
||||||
} else {
|
} else {
|
||||||
TSKEY resTs = getReskey(pUpdated, index);
|
if (compareResKey(&data, pUpdated, index) > 0) {
|
||||||
if (resTs < ts) {
|
|
||||||
index++;
|
index++;
|
||||||
} else {
|
} else {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -753,10 +820,10 @@ static int32_t saveResultRow(SResultRow* result, uint64_t groupId, SArray* pUpda
|
||||||
return saveResult(result->win.skey, result->pageId, result->offset, groupId, pUpdated);
|
return saveResult(result->win.skey, result->pageId, result->offset, groupId, pUpdated);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void removeResult(SArray* pUpdated, TSKEY key) {
|
static void removeResult(SArray* pUpdated, SWinRes* pKey) {
|
||||||
int32_t size = taosArrayGetSize(pUpdated);
|
int32_t size = taosArrayGetSize(pUpdated);
|
||||||
int32_t index = binarySearch(pUpdated, size, key, TSDB_ORDER_DESC, getReskey);
|
int32_t index = binarySearchCom(pUpdated, size, pKey, TSDB_ORDER_DESC, compareResKey);
|
||||||
if (index >= 0 && key == getReskey(pUpdated, index)) {
|
if (index >= 0 && 0 == compareResKey(pKey, pUpdated, index)) {
|
||||||
taosArrayRemove(pUpdated, index);
|
taosArrayRemove(pUpdated, index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -765,7 +832,7 @@ static void removeResults(SArray* pWins, SArray* pUpdated) {
|
||||||
int32_t size = taosArrayGetSize(pWins);
|
int32_t size = taosArrayGetSize(pWins);
|
||||||
for (int32_t i = 0; i < size; i++) {
|
for (int32_t i = 0; i < size; i++) {
|
||||||
SWinRes* pW = taosArrayGet(pWins, i);
|
SWinRes* pW = taosArrayGet(pWins, i);
|
||||||
removeResult(pUpdated, pW->ts);
|
removeResult(pUpdated, pW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -775,14 +842,30 @@ int64_t getWinReskey(void* data, int32_t index) {
|
||||||
return pos->ts;
|
return pos->ts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t compareWinRes(void* pKey, void* data, int32_t index) {
|
||||||
|
SArray* res = (SArray*)data;
|
||||||
|
SWinRes* pos = taosArrayGetP(res, index);
|
||||||
|
SResKeyPos* pData = (SResKeyPos*) pKey;
|
||||||
|
if (*(int64_t*)pData->key == pos->ts) {
|
||||||
|
if (pData->groupId > pos->groupId) {
|
||||||
|
return 1;
|
||||||
|
} else if (pData->groupId < pos->groupId) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
} else if (*(int64_t*)pData->key > pos->ts) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
static void removeDeleteResults(SArray* pUpdated, SArray* pDelWins) {
|
static void removeDeleteResults(SArray* pUpdated, SArray* pDelWins) {
|
||||||
int32_t upSize = taosArrayGetSize(pUpdated);
|
int32_t upSize = taosArrayGetSize(pUpdated);
|
||||||
int32_t delSize = taosArrayGetSize(pDelWins);
|
int32_t delSize = taosArrayGetSize(pDelWins);
|
||||||
for (int32_t i = 0; i < upSize; i++) {
|
for (int32_t i = 0; i < upSize; i++) {
|
||||||
SResKeyPos* pResKey = taosArrayGetP(pUpdated, i);
|
SResKeyPos* pResKey = taosArrayGetP(pUpdated, i);
|
||||||
int64_t key = *(int64_t*)pResKey->key;
|
int32_t index = binarySearchCom(pDelWins, delSize, pResKey, TSDB_ORDER_DESC, compareWinRes);
|
||||||
int32_t index = binarySearch(pDelWins, delSize, key, TSDB_ORDER_DESC, getWinReskey);
|
if (index >= 0 && 0 == compareWinRes(pResKey, pDelWins, index)) {
|
||||||
if (index >= 0 && key == getWinReskey(pDelWins, index)) {
|
|
||||||
taosArrayRemove(pDelWins, index);
|
taosArrayRemove(pDelWins, index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -924,11 +1007,17 @@ SResultRowPosition addToOpenWindowList(SResultRowInfo* pResultRowInfo, const SRe
|
||||||
|
|
||||||
int64_t* extractTsCol(SSDataBlock* pBlock, const SIntervalAggOperatorInfo* pInfo) {
|
int64_t* extractTsCol(SSDataBlock* pBlock, const SIntervalAggOperatorInfo* pInfo) {
|
||||||
TSKEY* tsCols = NULL;
|
TSKEY* tsCols = NULL;
|
||||||
|
|
||||||
if (pBlock->pDataBlock != NULL) {
|
if (pBlock->pDataBlock != NULL) {
|
||||||
SColumnInfoData* pColDataInfo = taosArrayGet(pBlock->pDataBlock, pInfo->primaryTsIndex);
|
SColumnInfoData* pColDataInfo = taosArrayGet(pBlock->pDataBlock, pInfo->primaryTsIndex);
|
||||||
tsCols = (int64_t*)pColDataInfo->pData;
|
tsCols = (int64_t*)pColDataInfo->pData;
|
||||||
|
|
||||||
if (tsCols != NULL) {
|
// no data in primary ts
|
||||||
|
if (tsCols[0] == 0 && tsCols[pBlock->info.rows - 1] == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tsCols[0] != 0 && (pBlock->info.window.skey == 0 && pBlock->info.window.ekey == 0)) {
|
||||||
blockDataUpdateTsWindow(pBlock, pInfo->primaryTsIndex);
|
blockDataUpdateTsWindow(pBlock, pInfo->primaryTsIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1442,8 +1531,10 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) {
|
||||||
doBuildResultDatablock(pOperator, &pInfo->binfo, &pInfo->groupResInfo, pInfo->aggSup.pResultBuf);
|
doBuildResultDatablock(pOperator, &pInfo->binfo, &pInfo->groupResInfo, pInfo->aggSup.pResultBuf);
|
||||||
if (pInfo->binfo.pRes->info.rows == 0 || !hasDataInGroupInfo(&pInfo->groupResInfo)) {
|
if (pInfo->binfo.pRes->info.rows == 0 || !hasDataInGroupInfo(&pInfo->groupResInfo)) {
|
||||||
pOperator->status = OP_EXEC_DONE;
|
pOperator->status = OP_EXEC_DONE;
|
||||||
|
qDebug("===stream===single interval is done");
|
||||||
freeAllPages(pInfo->pRecycledPages, pInfo->aggSup.pResultBuf);
|
freeAllPages(pInfo->pRecycledPages, pInfo->aggSup.pResultBuf);
|
||||||
}
|
}
|
||||||
|
printDataBlock(pInfo->binfo.pRes, "single interval");
|
||||||
return pInfo->binfo.pRes->info.rows == 0 ? NULL : pInfo->binfo.pRes;
|
return pInfo->binfo.pRes->info.rows == 0 ? NULL : pInfo->binfo.pRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1677,7 +1768,7 @@ SOperatorInfo* createIntervalOperatorInfo(SOperatorInfo* downstream, SExprInfo*
|
||||||
SExprSupp* pSup = &pOperator->exprSupp;
|
SExprSupp* pSup = &pOperator->exprSupp;
|
||||||
|
|
||||||
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
|
|
||||||
int32_t code = initAggInfo(pSup, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
int32_t code = initAggInfo(pSup, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
||||||
initBasicInfo(&pInfo->binfo, pResBlock);
|
initBasicInfo(&pInfo->binfo, pResBlock);
|
||||||
|
@ -1758,7 +1849,7 @@ SOperatorInfo* createStreamIntervalOperatorInfo(SOperatorInfo* downstream, SExpr
|
||||||
int32_t numOfRows = 4096;
|
int32_t numOfRows = 4096;
|
||||||
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
||||||
|
|
||||||
initResultSizeInfo(pOperator, numOfRows);
|
initResultSizeInfo(&pOperator->resultInfo, numOfRows);
|
||||||
int32_t code = initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
int32_t code = initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
||||||
initBasicInfo(&pInfo->binfo, pResBlock);
|
initBasicInfo(&pInfo->binfo, pResBlock);
|
||||||
initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pInfo->win);
|
initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pInfo->win);
|
||||||
|
@ -2218,7 +2309,7 @@ SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode
|
||||||
|
|
||||||
pInfo->tsCol = extractColumnFromColumnNode((SColumnNode*)pInterpPhyNode->pTimeSeries);
|
pInfo->tsCol = extractColumnFromColumnNode((SColumnNode*)pInterpPhyNode->pTimeSeries);
|
||||||
pInfo->fillType = convertFillType(pInterpPhyNode->fillMode);
|
pInfo->fillType = convertFillType(pInterpPhyNode->fillMode);
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
|
|
||||||
pInfo->pFillColInfo = createFillColInfo(pExprInfo, numOfExprs, (SNodeListNode*)pInterpPhyNode->pFillValues);
|
pInfo->pFillColInfo = createFillColInfo(pExprInfo, numOfExprs, (SNodeListNode*)pInterpPhyNode->pFillValues);
|
||||||
pInfo->pRes = createResDataBlock(pPhyNode->pOutputDataBlockDesc);
|
pInfo->pRes = createResDataBlock(pPhyNode->pOutputDataBlockDesc);
|
||||||
|
@ -2266,7 +2357,7 @@ SOperatorInfo* createStatewindowOperatorInfo(SOperatorInfo* downstream, SExprInf
|
||||||
|
|
||||||
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
||||||
|
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExpr, numOfCols, keyBufSize, pTaskInfo->id.str);
|
initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExpr, numOfCols, keyBufSize, pTaskInfo->id.str);
|
||||||
initBasicInfo(&pInfo->binfo, pResBlock);
|
initBasicInfo(&pInfo->binfo, pResBlock);
|
||||||
|
|
||||||
|
@ -2314,7 +2405,7 @@ SOperatorInfo* createSessionAggOperatorInfo(SOperatorInfo* downstream, SExprInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
|
|
||||||
int32_t code = initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
int32_t code = initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
@ -2890,7 +2981,7 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream,
|
||||||
ASSERT(pInfo->twAggSup.calTrigger != STREAM_TRIGGER_MAX_DELAY);
|
ASSERT(pInfo->twAggSup.calTrigger != STREAM_TRIGGER_MAX_DELAY);
|
||||||
pInfo->primaryTsIndex = ((SColumnNode*)pIntervalPhyNode->window.pTspk)->slotId;
|
pInfo->primaryTsIndex = ((SColumnNode*)pIntervalPhyNode->window.pTspk)->slotId;
|
||||||
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
if (pIntervalPhyNode->window.pExprs != NULL) {
|
if (pIntervalPhyNode->window.pExprs != NULL) {
|
||||||
int32_t numOfScalar = 0;
|
int32_t numOfScalar = 0;
|
||||||
SExprInfo* pScalarExprInfo = createExprInfo(pIntervalPhyNode->window.pExprs, NULL, &numOfScalar);
|
SExprInfo* pScalarExprInfo = createExprInfo(pIntervalPhyNode->window.pExprs, NULL, &numOfScalar);
|
||||||
|
@ -3066,7 +3157,7 @@ SOperatorInfo* createStreamSessionAggOperatorInfo(SOperatorInfo* downstream, SPh
|
||||||
goto _error;
|
goto _error;
|
||||||
}
|
}
|
||||||
|
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
if (pSessionNode->window.pExprs != NULL) {
|
if (pSessionNode->window.pExprs != NULL) {
|
||||||
int32_t numOfScalar = 0;
|
int32_t numOfScalar = 0;
|
||||||
SExprInfo* pScalarExprInfo = createExprInfo(pSessionNode->window.pExprs, NULL, &numOfScalar);
|
SExprInfo* pScalarExprInfo = createExprInfo(pSessionNode->window.pExprs, NULL, &numOfScalar);
|
||||||
|
@ -4330,7 +4421,7 @@ SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhys
|
||||||
SExprInfo* pExprInfo = createExprInfo(pStateNode->window.pFuncs, NULL, &numOfCols);
|
SExprInfo* pExprInfo = createExprInfo(pStateNode->window.pFuncs, NULL, &numOfCols);
|
||||||
|
|
||||||
pInfo->stateCol = extractColumnFromColumnNode(pColNode);
|
pInfo->stateCol = extractColumnFromColumnNode(pColNode);
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
if (pStateNode->window.pExprs != NULL) {
|
if (pStateNode->window.pExprs != NULL) {
|
||||||
int32_t numOfScalar = 0;
|
int32_t numOfScalar = 0;
|
||||||
SExprInfo* pScalarExprInfo = createExprInfo(pStateNode->window.pExprs, NULL, &numOfScalar);
|
SExprInfo* pScalarExprInfo = createExprInfo(pStateNode->window.pExprs, NULL, &numOfScalar);
|
||||||
|
@ -4580,7 +4671,7 @@ SOperatorInfo* createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream,
|
||||||
iaInfo->primaryTsIndex = primaryTsSlotId;
|
iaInfo->primaryTsIndex = primaryTsSlotId;
|
||||||
|
|
||||||
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
|
|
||||||
int32_t code =
|
int32_t code =
|
||||||
initAggInfo(&pOperator->exprSupp, &iaInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
initAggInfo(&pOperator->exprSupp, &iaInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
||||||
|
@ -4886,7 +4977,7 @@ SOperatorInfo* createMergeIntervalOperatorInfo(SOperatorInfo* downstream, SExprI
|
||||||
SExprSupp* pExprSupp = &pOperator->exprSupp;
|
SExprSupp* pExprSupp = &pOperator->exprSupp;
|
||||||
|
|
||||||
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(&pOperator->resultInfo, 4096);
|
||||||
|
|
||||||
int32_t code = initAggInfo(pExprSupp, &iaInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
int32_t code = initAggInfo(pExprSupp, &iaInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
||||||
initBasicInfo(&iaInfo->binfo, pResBlock);
|
initBasicInfo(&iaInfo->binfo, pResBlock);
|
||||||
|
|
|
@ -958,6 +958,7 @@ static bool validateHistogramBinDesc(char* binDescStr, int8_t binType, char* err
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(binDesc);
|
||||||
taosMemoryFree(intervals);
|
taosMemoryFree(intervals);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,6 +165,7 @@ typedef struct SElapsedInfo {
|
||||||
|
|
||||||
typedef struct STwaInfo {
|
typedef struct STwaInfo {
|
||||||
double dOutput;
|
double dOutput;
|
||||||
|
bool isNull;
|
||||||
SPoint1 p;
|
SPoint1 p;
|
||||||
STimeWindow win;
|
STimeWindow win;
|
||||||
} STwaInfo;
|
} STwaInfo;
|
||||||
|
@ -5181,8 +5182,9 @@ bool twaFunctionSetup(SqlFunctionCtx* pCtx, SResultRowEntryInfo* pResultInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
STwaInfo* pInfo = GET_ROWCELL_INTERBUF(GET_RES_INFO(pCtx));
|
STwaInfo* pInfo = GET_ROWCELL_INTERBUF(GET_RES_INFO(pCtx));
|
||||||
pInfo->p.key = INT64_MIN;
|
pInfo->isNull = false;
|
||||||
pInfo->win = TSWINDOW_INITIALIZER;
|
pInfo->p.key = INT64_MIN;
|
||||||
|
pInfo->win = TSWINDOW_INITIALIZER;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5208,27 +5210,47 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
||||||
SPoint1* last = &pInfo->p;
|
SPoint1* last = &pInfo->p;
|
||||||
int32_t numOfElems = 0;
|
int32_t numOfElems = 0;
|
||||||
|
|
||||||
|
if (IS_NULL_TYPE(pInputCol->info.type)) {
|
||||||
|
pInfo->isNull = true;
|
||||||
|
goto _twa_over;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t i = pInput->startRowIndex;
|
int32_t i = pInput->startRowIndex;
|
||||||
if (pCtx->start.key != INT64_MIN) {
|
if (pCtx->start.key != INT64_MIN) {
|
||||||
ASSERT((pCtx->start.key < tsList[i] && pCtx->order == TSDB_ORDER_ASC) ||
|
ASSERT((pCtx->start.key < tsList[i] && pCtx->order == TSDB_ORDER_ASC) ||
|
||||||
(pCtx->start.key > tsList[i] && pCtx->order == TSDB_ORDER_DESC));
|
(pCtx->start.key > tsList[i] && pCtx->order == TSDB_ORDER_DESC));
|
||||||
|
|
||||||
ASSERT(last->key == INT64_MIN);
|
ASSERT(last->key == INT64_MIN);
|
||||||
last->key = tsList[i];
|
for (; i < pInput->numOfRows + pInput->startRowIndex; ++i) {
|
||||||
|
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
GET_TYPED_DATA(last->val, double, pInputCol->info.type, colDataGetData(pInputCol, i));
|
last->key = tsList[i];
|
||||||
|
|
||||||
pInfo->dOutput += twa_get_area(pCtx->start, *last);
|
GET_TYPED_DATA(last->val, double, pInputCol->info.type, colDataGetData(pInputCol, i));
|
||||||
pInfo->win.skey = pCtx->start.key;
|
|
||||||
numOfElems++;
|
pInfo->dOutput += twa_get_area(pCtx->start, *last);
|
||||||
i += 1;
|
pInfo->win.skey = pCtx->start.key;
|
||||||
|
numOfElems++;
|
||||||
|
i += 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else if (pInfo->p.key == INT64_MIN) {
|
} else if (pInfo->p.key == INT64_MIN) {
|
||||||
last->key = tsList[i];
|
for (; i < pInput->numOfRows + pInput->startRowIndex; ++i) {
|
||||||
GET_TYPED_DATA(last->val, double, pInputCol->info.type, colDataGetData(pInputCol, i));
|
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
pInfo->win.skey = last->key;
|
last->key = tsList[i];
|
||||||
numOfElems++;
|
|
||||||
i += 1;
|
GET_TYPED_DATA(last->val, double, pInputCol->info.type, colDataGetData(pInputCol, i));
|
||||||
|
|
||||||
|
pInfo->win.skey = last->key;
|
||||||
|
numOfElems++;
|
||||||
|
i += 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SPoint1 st = {0};
|
SPoint1 st = {0};
|
||||||
|
@ -5241,6 +5263,7 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
||||||
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
numOfElems++;
|
||||||
|
|
||||||
INIT_INTP_POINT(st, tsList[i], val[i]);
|
INIT_INTP_POINT(st, tsList[i], val[i]);
|
||||||
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
||||||
|
@ -5255,6 +5278,7 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
||||||
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
numOfElems++;
|
||||||
|
|
||||||
INIT_INTP_POINT(st, tsList[i], val[i]);
|
INIT_INTP_POINT(st, tsList[i], val[i]);
|
||||||
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
||||||
|
@ -5268,6 +5292,7 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
||||||
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
numOfElems++;
|
||||||
|
|
||||||
INIT_INTP_POINT(st, tsList[i], val[i]);
|
INIT_INTP_POINT(st, tsList[i], val[i]);
|
||||||
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
||||||
|
@ -5281,6 +5306,7 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
||||||
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
numOfElems++;
|
||||||
|
|
||||||
INIT_INTP_POINT(st, tsList[i], val[i]);
|
INIT_INTP_POINT(st, tsList[i], val[i]);
|
||||||
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
||||||
|
@ -5294,6 +5320,7 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
||||||
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
numOfElems++;
|
||||||
|
|
||||||
INIT_INTP_POINT(st, tsList[i], val[i]);
|
INIT_INTP_POINT(st, tsList[i], val[i]);
|
||||||
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
||||||
|
@ -5307,6 +5334,7 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
||||||
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
numOfElems++;
|
||||||
|
|
||||||
INIT_INTP_POINT(st, tsList[i], val[i]);
|
INIT_INTP_POINT(st, tsList[i], val[i]);
|
||||||
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
||||||
|
@ -5320,6 +5348,7 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
||||||
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
numOfElems++;
|
||||||
|
|
||||||
INIT_INTP_POINT(st, tsList[i], val[i]);
|
INIT_INTP_POINT(st, tsList[i], val[i]);
|
||||||
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
||||||
|
@ -5333,6 +5362,7 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
||||||
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
numOfElems++;
|
||||||
|
|
||||||
INIT_INTP_POINT(st, tsList[i], val[i]);
|
INIT_INTP_POINT(st, tsList[i], val[i]);
|
||||||
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
||||||
|
@ -5346,6 +5376,7 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
||||||
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
numOfElems++;
|
||||||
|
|
||||||
INIT_INTP_POINT(st, tsList[i], val[i]);
|
INIT_INTP_POINT(st, tsList[i], val[i]);
|
||||||
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
||||||
|
@ -5359,6 +5390,7 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
||||||
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
if (colDataIsNull_f(pInputCol->nullbitmap, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
numOfElems++;
|
||||||
|
|
||||||
INIT_INTP_POINT(st, tsList[i], val[i]);
|
INIT_INTP_POINT(st, tsList[i], val[i]);
|
||||||
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
pInfo->dOutput += twa_get_area(pInfo->p, st);
|
||||||
|
@ -5379,7 +5411,12 @@ int32_t twaFunction(SqlFunctionCtx* pCtx) {
|
||||||
|
|
||||||
pInfo->win.ekey = pInfo->p.key;
|
pInfo->win.ekey = pInfo->p.key;
|
||||||
|
|
||||||
SET_VAL(pResInfo, numOfElems, 1);
|
_twa_over:
|
||||||
|
if (numOfElems == 0) {
|
||||||
|
pInfo->isNull = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
SET_VAL(pResInfo, 1, 1);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5400,8 +5437,8 @@ int32_t twaFinalize(struct SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
|
||||||
SResultRowEntryInfo* pResInfo = GET_RES_INFO(pCtx);
|
SResultRowEntryInfo* pResInfo = GET_RES_INFO(pCtx);
|
||||||
|
|
||||||
STwaInfo* pInfo = (STwaInfo*)GET_ROWCELL_INTERBUF(pResInfo);
|
STwaInfo* pInfo = (STwaInfo*)GET_ROWCELL_INTERBUF(pResInfo);
|
||||||
if (pResInfo->numOfRes == 0) {
|
if (pInfo->isNull == true) {
|
||||||
pResInfo->isNullRes = 1;
|
pResInfo->numOfRes = 0;
|
||||||
} else {
|
} else {
|
||||||
if (pInfo->win.ekey == pInfo->win.skey) {
|
if (pInfo->win.ekey == pInfo->win.skey) {
|
||||||
pInfo->dOutput = pInfo->p.val;
|
pInfo->dOutput = pInfo->p.val;
|
||||||
|
|
|
@ -2750,6 +2750,7 @@ static bool getHistogramBinDesc(SHistoFuncBin** bins, int32_t* binNum, char* bin
|
||||||
(*bins)[i].count = 0;
|
(*bins)[i].count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(binDesc);
|
||||||
taosMemoryFree(intervals);
|
taosMemoryFree(intervals);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1195,7 +1195,7 @@ static void vectorMathTsSubHelper(SColumnInfoData* pLeftCol, SColumnInfoData* pR
|
||||||
colDataAppendNULL(pOutputCol, i);
|
colDataAppendNULL(pOutputCol, i);
|
||||||
continue; // TODO set null or ignore
|
continue; // TODO set null or ignore
|
||||||
}
|
}
|
||||||
*output = taosTimeSub(getVectorBigintValueFnLeft(pLeftCol->pData, i), getVectorBigintValueFnRight(pRightCol->pData, 0),
|
*output = taosTimeAdd(getVectorBigintValueFnLeft(pLeftCol->pData, i), -getVectorBigintValueFnRight(pRightCol->pData, 0),
|
||||||
pRightCol->info.scale, pRightCol->info.precision);
|
pRightCol->info.scale, pRightCol->info.precision);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -392,7 +392,7 @@ typedef struct SDelayQueue {
|
||||||
} SDelayQueue;
|
} SDelayQueue;
|
||||||
|
|
||||||
int transDQCreate(uv_loop_t* loop, SDelayQueue** queue);
|
int transDQCreate(uv_loop_t* loop, SDelayQueue** queue);
|
||||||
void transDQDestroy(SDelayQueue* queue);
|
void transDQDestroy(SDelayQueue* queue, void (*freeFunc)(void* arg));
|
||||||
int transDQSched(SDelayQueue* queue, void (*func)(void* arg), void* arg, uint64_t timeoutMs);
|
int transDQSched(SDelayQueue* queue, void (*func)(void* arg), void* arg, uint64_t timeoutMs);
|
||||||
|
|
||||||
bool transEpSetIsEqual(SEpSet* a, SEpSet* b);
|
bool transEpSetIsEqual(SEpSet* a, SEpSet* b);
|
||||||
|
|
Binary file not shown.
|
@ -140,7 +140,7 @@ static void destroyUserdata(STransMsg* userdata);
|
||||||
|
|
||||||
static int cliRBChoseIdx(STrans* pTransInst);
|
static int cliRBChoseIdx(STrans* pTransInst);
|
||||||
|
|
||||||
static void destroyCmsg(SCliMsg* cmsg);
|
static void destroyCmsg(void* cmsg);
|
||||||
static void transDestroyConnCtx(STransConnCtx* ctx);
|
static void transDestroyConnCtx(STransConnCtx* ctx);
|
||||||
// thread obj
|
// thread obj
|
||||||
static SCliThrd* createThrdObj();
|
static SCliThrd* createThrdObj();
|
||||||
|
@ -198,6 +198,7 @@ static void cliReleaseUnfinishedMsg(SCliConn* conn) {
|
||||||
} \
|
} \
|
||||||
destroyCmsg(pMsg); \
|
destroyCmsg(pMsg); \
|
||||||
cliReleaseUnfinishedMsg(conn); \
|
cliReleaseUnfinishedMsg(conn); \
|
||||||
|
transQueueClear(&conn->cliMsgs); \
|
||||||
addConnToPool(((SCliThrd*)conn->hostThrd)->pool, conn); \
|
addConnToPool(((SCliThrd*)conn->hostThrd)->pool, conn); \
|
||||||
return; \
|
return; \
|
||||||
} \
|
} \
|
||||||
|
@ -545,6 +546,7 @@ static void addConnToPool(void* pool, SCliConn* conn) {
|
||||||
|
|
||||||
STrans* pTransInst = thrd->pTransInst;
|
STrans* pTransInst = thrd->pTransInst;
|
||||||
conn->expireTime = taosGetTimestampMs() + CONN_PERSIST_TIME(pTransInst->idleTime);
|
conn->expireTime = taosGetTimestampMs() + CONN_PERSIST_TIME(pTransInst->idleTime);
|
||||||
|
cliReleaseUnfinishedMsg(conn);
|
||||||
transQueueClear(&conn->cliMsgs);
|
transQueueClear(&conn->cliMsgs);
|
||||||
transCtxCleanup(&conn->ctx);
|
transCtxCleanup(&conn->ctx);
|
||||||
conn->status = ConnInPool;
|
conn->status = ConnInPool;
|
||||||
|
@ -645,6 +647,7 @@ static void cliDestroy(uv_handle_t* handle) {
|
||||||
conn->stream->data = NULL;
|
conn->stream->data = NULL;
|
||||||
taosMemoryFree(conn->stream);
|
taosMemoryFree(conn->stream);
|
||||||
transCtxCleanup(&conn->ctx);
|
transCtxCleanup(&conn->ctx);
|
||||||
|
cliReleaseUnfinishedMsg(conn);
|
||||||
transQueueDestroy(&conn->cliMsgs);
|
transQueueDestroy(&conn->cliMsgs);
|
||||||
tTrace("%s conn %p destroy successfully", CONN_GET_INST_LABEL(conn), conn);
|
tTrace("%s conn %p destroy successfully", CONN_GET_INST_LABEL(conn), conn);
|
||||||
transReqQueueClear(&conn->wreqQueue);
|
transReqQueueClear(&conn->wreqQueue);
|
||||||
|
@ -962,7 +965,8 @@ static void destroyUserdata(STransMsg* userdata) {
|
||||||
transFreeMsg(userdata->pCont);
|
transFreeMsg(userdata->pCont);
|
||||||
userdata->pCont = NULL;
|
userdata->pCont = NULL;
|
||||||
}
|
}
|
||||||
static void destroyCmsg(SCliMsg* pMsg) {
|
static void destroyCmsg(void* arg) {
|
||||||
|
SCliMsg* pMsg = arg;
|
||||||
if (pMsg == NULL) {
|
if (pMsg == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1001,7 +1005,7 @@ static void destroyThrdObj(SCliThrd* pThrd) {
|
||||||
TRANS_DESTROY_ASYNC_POOL_MSG(pThrd->asyncPool, SCliMsg, destroyCmsg);
|
TRANS_DESTROY_ASYNC_POOL_MSG(pThrd->asyncPool, SCliMsg, destroyCmsg);
|
||||||
transDestroyAsyncPool(pThrd->asyncPool);
|
transDestroyAsyncPool(pThrd->asyncPool);
|
||||||
|
|
||||||
transDQDestroy(pThrd->delayQueue);
|
transDQDestroy(pThrd->delayQueue, destroyCmsg);
|
||||||
taosMemoryFree(pThrd->loop);
|
taosMemoryFree(pThrd->loop);
|
||||||
taosMemoryFree(pThrd);
|
taosMemoryFree(pThrd);
|
||||||
}
|
}
|
||||||
|
|
|
@ -456,7 +456,7 @@ int transDQCreate(uv_loop_t* loop, SDelayQueue** queue) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void transDQDestroy(SDelayQueue* queue) {
|
void transDQDestroy(SDelayQueue* queue, void (*freeFunc)(void* arg)) {
|
||||||
taosMemoryFree(queue->timer);
|
taosMemoryFree(queue->timer);
|
||||||
|
|
||||||
while (heapSize(queue->heap) > 0) {
|
while (heapSize(queue->heap) > 0) {
|
||||||
|
@ -467,6 +467,11 @@ void transDQDestroy(SDelayQueue* queue) {
|
||||||
heapRemove(queue->heap, minNode);
|
heapRemove(queue->heap, minNode);
|
||||||
|
|
||||||
SDelayTask* task = container_of(minNode, SDelayTask, node);
|
SDelayTask* task = container_of(minNode, SDelayTask, node);
|
||||||
|
|
||||||
|
STaskArg* arg = task->arg;
|
||||||
|
freeFunc(arg->param1);
|
||||||
|
taosMemoryFree(arg);
|
||||||
|
|
||||||
taosMemoryFree(task);
|
taosMemoryFree(task);
|
||||||
}
|
}
|
||||||
heapDestroy(queue->heap);
|
heapDestroy(queue->heap);
|
||||||
|
|
|
@ -40,7 +40,6 @@ static FORCE_INLINE int walBuildMetaName(SWal* pWal, int metaVer, char* buf) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static FORCE_INLINE int64_t walScanLogGetLastVer(SWal* pWal) {
|
static FORCE_INLINE int64_t walScanLogGetLastVer(SWal* pWal) {
|
||||||
ASSERT(pWal->fileInfoSet != NULL);
|
|
||||||
int32_t sz = taosArrayGetSize(pWal->fileInfoSet);
|
int32_t sz = taosArrayGetSize(pWal->fileInfoSet);
|
||||||
ASSERT(sz > 0);
|
ASSERT(sz > 0);
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -55,7 +54,7 @@ static FORCE_INLINE int64_t walScanLogGetLastVer(SWal* pWal) {
|
||||||
|
|
||||||
int64_t fileSize = 0;
|
int64_t fileSize = 0;
|
||||||
taosStatFile(fnameStr, &fileSize, NULL);
|
taosStatFile(fnameStr, &fileSize, NULL);
|
||||||
int readSize = TMIN(WAL_MAX_SIZE + 2, fileSize);
|
int32_t readSize = TMIN(WAL_SCAN_BUF_SIZE, fileSize);
|
||||||
pLastFileInfo->fileSize = fileSize;
|
pLastFileInfo->fileSize = fileSize;
|
||||||
|
|
||||||
TdFilePtr pFile = taosOpenFile(fnameStr, TD_FILE_READ);
|
TdFilePtr pFile = taosOpenFile(fnameStr, TD_FILE_READ);
|
||||||
|
@ -73,7 +72,8 @@ static FORCE_INLINE int64_t walScanLogGetLastVer(SWal* pWal) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
taosLSeekFile(pFile, -readSize, SEEK_END);
|
int64_t offset;
|
||||||
|
offset = taosLSeekFile(pFile, -readSize, SEEK_END);
|
||||||
if (readSize != taosReadFile(pFile, buf, readSize)) {
|
if (readSize != taosReadFile(pFile, buf, readSize)) {
|
||||||
taosMemoryFree(buf);
|
taosMemoryFree(buf);
|
||||||
taosCloseFile(&pFile);
|
taosCloseFile(&pFile);
|
||||||
|
@ -81,31 +81,56 @@ static FORCE_INLINE int64_t walScanLogGetLastVer(SWal* pWal) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* haystack = buf;
|
|
||||||
char* found = NULL;
|
char* found = NULL;
|
||||||
char* candidate;
|
while (1) {
|
||||||
while ((candidate = tmemmem(haystack, readSize - (haystack - buf), (char*)&magic, sizeof(uint64_t))) != NULL) {
|
char* haystack = buf;
|
||||||
// read and validate
|
char* candidate;
|
||||||
SWalCkHead* logContent = (SWalCkHead*)candidate;
|
while ((candidate = tmemmem(haystack, readSize - (haystack - buf), (char*)&magic, sizeof(uint64_t))) != NULL) {
|
||||||
if (walValidHeadCksum(logContent) == 0 && walValidBodyCksum(logContent) == 0) {
|
// read and validate
|
||||||
found = candidate;
|
SWalCkHead* logContent = (SWalCkHead*)candidate;
|
||||||
|
if (walValidHeadCksum(logContent) == 0 && walValidBodyCksum(logContent) == 0) {
|
||||||
|
found = candidate;
|
||||||
|
}
|
||||||
|
haystack = candidate + 1;
|
||||||
}
|
}
|
||||||
haystack = candidate + 1;
|
if (found || offset == 0) break;
|
||||||
}
|
offset = TMIN(0, offset - readSize + sizeof(uint64_t));
|
||||||
if (found == buf) {
|
int64_t offset2 = taosLSeekFile(pFile, offset, SEEK_SET);
|
||||||
SWalCkHead* logContent = (SWalCkHead*)found;
|
ASSERT(offset == offset2);
|
||||||
if (walValidHeadCksum(logContent) != 0 || walValidBodyCksum(logContent) != 0) {
|
if (readSize != taosReadFile(pFile, buf, readSize)) {
|
||||||
// file has to be deleted
|
|
||||||
taosMemoryFree(buf);
|
taosMemoryFree(buf);
|
||||||
taosCloseFile(&pFile);
|
taosCloseFile(&pFile);
|
||||||
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
|
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
|
if (found == buf) {
|
||||||
|
SWalCkHead* logContent = (SWalCkHead*)found;
|
||||||
|
if (walValidHeadCksum(logContent) != 0 || walValidBodyCksum(logContent) != 0) {
|
||||||
|
// file has to be deleted
|
||||||
|
taosMemoryFree(buf);
|
||||||
|
taosCloseFile(&pFile);
|
||||||
|
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
taosCloseFile(&pFile);
|
// TODO truncate file
|
||||||
SWalCkHead* lastEntry = (SWalCkHead*)found;
|
|
||||||
|
|
||||||
return lastEntry->head.version;
|
if (found == NULL) {
|
||||||
|
// file corrupted, no complete log
|
||||||
|
// TODO delete and search in previous files
|
||||||
|
ASSERT(0);
|
||||||
|
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
SWalCkHead* lastEntry = (SWalCkHead*)found;
|
||||||
|
int64_t retVer = lastEntry->head.version;
|
||||||
|
taosCloseFile(&pFile);
|
||||||
|
taosMemoryFree(buf);
|
||||||
|
|
||||||
|
return retVer;
|
||||||
}
|
}
|
||||||
|
|
||||||
int walCheckAndRepairMeta(SWal* pWal) {
|
int walCheckAndRepairMeta(SWal* pWal) {
|
||||||
|
|
|
@ -436,11 +436,6 @@ END:
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t walAppendLog(SWal *pWal, tmsg_t msgType, SWalSyncInfo syncMeta, const void *body, int32_t bodyLen) {
|
int64_t walAppendLog(SWal *pWal, tmsg_t msgType, SWalSyncInfo syncMeta, const void *body, int32_t bodyLen) {
|
||||||
if (bodyLen > TSDB_MAX_WAL_SIZE) {
|
|
||||||
terrno = TSDB_CODE_WAL_SIZE_LIMIT;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
taosThreadMutexLock(&pWal->mutex);
|
taosThreadMutexLock(&pWal->mutex);
|
||||||
|
|
||||||
int64_t index = pWal->vers.lastVer + 1;
|
int64_t index = pWal->vers.lastVer + 1;
|
||||||
|
@ -472,10 +467,6 @@ int32_t walWriteWithSyncInfo(SWal *pWal, int64_t index, tmsg_t msgType, SWalSync
|
||||||
int32_t bodyLen) {
|
int32_t bodyLen) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
|
||||||
if (bodyLen > TSDB_MAX_WAL_SIZE) {
|
|
||||||
terrno = TSDB_CODE_WAL_SIZE_LIMIT;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
taosThreadMutexLock(&pWal->mutex);
|
taosThreadMutexLock(&pWal->mutex);
|
||||||
|
|
||||||
// concurrency control:
|
// concurrency control:
|
||||||
|
|
|
@ -371,7 +371,7 @@ time_t taosMktime(struct tm *timep) {
|
||||||
localtime_s(&tm1, &tt);
|
localtime_s(&tm1, &tt);
|
||||||
ss.wYear = tm1.tm_year + 1900;
|
ss.wYear = tm1.tm_year + 1900;
|
||||||
ss.wMonth = tm1.tm_mon + 1;
|
ss.wMonth = tm1.tm_mon + 1;
|
||||||
ss.wDay = tm1.tm_wday;
|
ss.wDay = tm1.tm_mday;
|
||||||
ss.wHour = tm1.tm_hour;
|
ss.wHour = tm1.tm_hour;
|
||||||
ss.wMinute = tm1.tm_min;
|
ss.wMinute = tm1.tm_min;
|
||||||
ss.wSecond = tm1.tm_sec;
|
ss.wSecond = tm1.tm_sec;
|
||||||
|
@ -383,7 +383,7 @@ time_t taosMktime(struct tm *timep) {
|
||||||
|
|
||||||
s.wYear = timep->tm_year + 1900;
|
s.wYear = timep->tm_year + 1900;
|
||||||
s.wMonth = timep->tm_mon + 1;
|
s.wMonth = timep->tm_mon + 1;
|
||||||
s.wDay = timep->tm_wday;
|
s.wDay = timep->tm_mday;
|
||||||
s.wHour = timep->tm_hour;
|
s.wHour = timep->tm_hour;
|
||||||
s.wMinute = timep->tm_min;
|
s.wMinute = timep->tm_min;
|
||||||
s.wSecond = timep->tm_sec;
|
s.wSecond = timep->tm_sec;
|
||||||
|
|
|
@ -64,20 +64,6 @@ int32_t strdequote(char *z) {
|
||||||
return j + 1; // only one quote, do nothing
|
return j + 1; // only one quote, do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
char *strDupUnquo(const char *src) {
|
|
||||||
if (src == NULL) return NULL;
|
|
||||||
if (src[0] != '`') return strdup(src);
|
|
||||||
int32_t len = (int32_t)strlen(src);
|
|
||||||
if (src[len - 1] != '`') return NULL;
|
|
||||||
char *ret = taosMemoryMalloc(len);
|
|
||||||
if (ret == NULL) return NULL;
|
|
||||||
for (int32_t i = 0; i < len - 1; i++) {
|
|
||||||
ret[i] = src[i + 1];
|
|
||||||
}
|
|
||||||
ret[len - 1] = 0;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t strtrim(char *z) {
|
size_t strtrim(char *z) {
|
||||||
int32_t i = 0;
|
int32_t i = 0;
|
||||||
int32_t j = 0;
|
int32_t j = 0;
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
./test.sh -f tsim/db/basic4.sim
|
./test.sh -f tsim/db/basic4.sim
|
||||||
./test.sh -f tsim/db/basic5.sim
|
./test.sh -f tsim/db/basic5.sim
|
||||||
./test.sh -f tsim/db/basic6.sim
|
./test.sh -f tsim/db/basic6.sim
|
||||||
# nojira ./test.sh -f tsim/db/commit.sim
|
./test.sh -f tsim/db/commit.sim
|
||||||
./test.sh -f tsim/db/create_all_options.sim
|
./test.sh -f tsim/db/create_all_options.sim
|
||||||
./test.sh -f tsim/db/delete_reuse1.sim
|
./test.sh -f tsim/db/delete_reuse1.sim
|
||||||
./test.sh -f tsim/db/delete_reuse2.sim
|
./test.sh -f tsim/db/delete_reuse2.sim
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
./test.sh -f tsim/db/delete_writing2.sim
|
./test.sh -f tsim/db/delete_writing2.sim
|
||||||
# unsupport ./test.sh -f tsim/db/dropdnodes.sim
|
# unsupport ./test.sh -f tsim/db/dropdnodes.sim
|
||||||
./test.sh -f tsim/db/error1.sim
|
./test.sh -f tsim/db/error1.sim
|
||||||
# nojira ./test.sh -f tsim/db/keep.sim
|
# jira ./test.sh -f tsim/db/keep.sim
|
||||||
./test.sh -f tsim/db/len.sim
|
./test.sh -f tsim/db/len.sim
|
||||||
./test.sh -f tsim/db/repeat.sim
|
./test.sh -f tsim/db/repeat.sim
|
||||||
./test.sh -f tsim/db/show_create_db.sim
|
./test.sh -f tsim/db/show_create_db.sim
|
||||||
|
@ -83,13 +83,13 @@
|
||||||
./test.sh -f tsim/insert/update0.sim
|
./test.sh -f tsim/insert/update0.sim
|
||||||
|
|
||||||
# ---- parser
|
# ---- parser
|
||||||
./test.sh -f tsim/parser/alter.sim
|
|
||||||
# nojira ./test.sh -f tsim/parser/alter1.sim
|
|
||||||
./test.sh -f tsim/parser/alter__for_community_version.sim
|
./test.sh -f tsim/parser/alter__for_community_version.sim
|
||||||
./test.sh -f tsim/parser/alter_column.sim
|
./test.sh -f tsim/parser/alter_column.sim
|
||||||
./test.sh -f tsim/parser/alter_stable.sim
|
./test.sh -f tsim/parser/alter_stable.sim
|
||||||
# nojira ./test.sh -f tsim/parser/auto_create_tb.sim
|
./test.sh -f tsim/parser/alter.sim
|
||||||
|
# nojira ./test.sh -f tsim/parser/alter1.sim
|
||||||
./test.sh -f tsim/parser/auto_create_tb_drop_tb.sim
|
./test.sh -f tsim/parser/auto_create_tb_drop_tb.sim
|
||||||
|
# jira ./test.sh -f tsim/parser/auto_create_tb.sim
|
||||||
./test.sh -f tsim/parser/between_and.sim
|
./test.sh -f tsim/parser/between_and.sim
|
||||||
./test.sh -f tsim/parser/binary_escapeCharacter.sim
|
./test.sh -f tsim/parser/binary_escapeCharacter.sim
|
||||||
# nojira ./test.sh -f tsim/parser/col_arithmetic_operation.sim
|
# nojira ./test.sh -f tsim/parser/col_arithmetic_operation.sim
|
||||||
|
@ -104,16 +104,16 @@
|
||||||
## ./test.sh -f tsim/parser/create_tb_with_tag_name.sim
|
## ./test.sh -f tsim/parser/create_tb_with_tag_name.sim
|
||||||
# ./test.sh -f tsim/parser/dbtbnameValidate.sim
|
# ./test.sh -f tsim/parser/dbtbnameValidate.sim
|
||||||
##./test.sh -f tsim/parser/distinct.sim
|
##./test.sh -f tsim/parser/distinct.sim
|
||||||
# ./test.sh -f tsim/parser/fill.sim
|
#./test.sh -f tsim/parser/fill_stb.sim
|
||||||
# ./test.sh -f tsim/parser/fill_stb.sim
|
./test.sh -f tsim/parser/fill_us.sim
|
||||||
## ./test.sh -f tsim/parser/fill_us.sim
|
./test.sh -f tsim/parser/fill.sim
|
||||||
# ./test.sh -f tsim/parser/first_last.sim
|
./test.sh -f tsim/parser/first_last.sim
|
||||||
./test.sh -f tsim/parser/fourArithmetic-basic.sim
|
./test.sh -f tsim/parser/fourArithmetic-basic.sim
|
||||||
## ./test.sh -f tsim/parser/function.sim
|
## ./test.sh -f tsim/parser/function.sim
|
||||||
./test.sh -f tsim/parser/groupby-basic.sim
|
./test.sh -f tsim/parser/groupby-basic.sim
|
||||||
# ./test.sh -f tsim/parser/groupby.sim
|
# ./test.sh -f tsim/parser/groupby.sim
|
||||||
## ./test.sh -f tsim/parser/having.sim
|
|
||||||
# ./test.sh -f tsim/parser/having_child.sim
|
# ./test.sh -f tsim/parser/having_child.sim
|
||||||
|
## ./test.sh -f tsim/parser/having.sim
|
||||||
## ./test.sh -f tsim/parser/import.sim
|
## ./test.sh -f tsim/parser/import.sim
|
||||||
# ./test.sh -f tsim/parser/import_commit1.sim
|
# ./test.sh -f tsim/parser/import_commit1.sim
|
||||||
# ./test.sh -f tsim/parser/import_commit2.sim
|
# ./test.sh -f tsim/parser/import_commit2.sim
|
||||||
|
|
|
@ -63,4 +63,5 @@ goto :eof
|
||||||
:CheckSkipCase
|
:CheckSkipCase
|
||||||
set skipCase=false
|
set skipCase=false
|
||||||
@REM if "%*" == "./test.sh -f tsim/query/scalarFunction.sim" ( set skipCase=true )
|
@REM if "%*" == "./test.sh -f tsim/query/scalarFunction.sim" ( set skipCase=true )
|
||||||
|
echo %* | grep valgrind && set skipCase=true
|
||||||
:goto eof
|
:goto eof
|
|
@ -1,27 +1,35 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/deploy.sh -n dnode2 -i 2
|
system sh/deploy.sh -n dnode2 -i 2
|
||||||
system sh/deploy.sh -n dnode3 -i 3
|
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 2
|
|
||||||
system sh/cfg.sh -n dnode2 -c walLevel -v 2
|
|
||||||
system sh/cfg.sh -n dnode3 -c walLevel -v 2
|
|
||||||
system sh/cfg.sh -n dnode1 -c numOfMnodes -v 1
|
|
||||||
system sh/cfg.sh -n dnode2 -c numOfMnodes -v 1
|
|
||||||
system sh/cfg.sh -n dnode3 -c numOfMnodes -v 1
|
|
||||||
system sh/cfg.sh -n dnode1 -c mnodeEqualVnodeNum -v 4
|
|
||||||
system sh/cfg.sh -n dnode2 -c mnodeEqualVnodeNum -v 4
|
|
||||||
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
|
||||||
|
|
||||||
print ========= start dnode1 as master
|
print ========= start dnode1 as master
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
system sh/exec.sh -n dnode2 -s start
|
||||||
sql connect
|
sql connect
|
||||||
sleep 2000
|
|
||||||
|
|
||||||
print ========= start other dnodes
|
print ========= start other dnodes
|
||||||
sql create dnode $hostname2
|
sql create dnode $hostname port 7200
|
||||||
system sh/exec.sh -n dnode2 -s start
|
|
||||||
sleep 2000
|
$x = 0
|
||||||
|
step1:
|
||||||
|
$ = $x + 1
|
||||||
|
sleep 1000
|
||||||
|
if $x == 10 then
|
||||||
|
print ====> dnode not ready!
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql show dnodes
|
||||||
|
print ===> $data00 $data01 $data02 $data03 $data04 $data05
|
||||||
|
print ===> $data10 $data11 $data12 $data13 $data14 $data15
|
||||||
|
if $rows != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data(1)[4] != ready then
|
||||||
|
goto step1
|
||||||
|
endi
|
||||||
|
if $data(2)[4] != ready then
|
||||||
|
goto step1
|
||||||
|
endi
|
||||||
|
|
||||||
print ======== step1 create db
|
print ======== step1 create db
|
||||||
sql create database commitdb replica 1 duration 7 keep 30
|
sql create database commitdb replica 1 duration 7 keep 30
|
||||||
|
@ -68,9 +76,7 @@ $num = $rows + 2
|
||||||
|
|
||||||
print ======== step3 import old data
|
print ======== step3 import old data
|
||||||
sql import into tb values (now - 10d , -10 )
|
sql import into tb values (now - 10d , -10 )
|
||||||
|
|
||||||
sql import into tb values (now - 11d , -11 )
|
sql import into tb values (now - 11d , -11 )
|
||||||
|
|
||||||
sql select * from tb order by ts desc
|
sql select * from tb order by ts desc
|
||||||
print ===> rows $rows expect $num
|
print ===> rows $rows expect $num
|
||||||
print ===> last $data01 expect $data01
|
print ===> last $data01 expect $data01
|
||||||
|
@ -99,9 +105,7 @@ endi
|
||||||
|
|
||||||
print ======== step5 stop dnode
|
print ======== step5 stop dnode
|
||||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||||
sleep 3000
|
|
||||||
system sh/exec.sh -n dnode2 -s start
|
system sh/exec.sh -n dnode2 -s start
|
||||||
sleep 3000
|
|
||||||
|
|
||||||
sql select * from tb
|
sql select * from tb
|
||||||
print ===> rows $rows
|
print ===> rows $rows
|
||||||
|
@ -116,10 +120,4 @@ if $data01 != 40 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
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 dnode2 -s stop -x SIGINT
|
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||||
system sh/exec.sh -n dnode3 -s stop -x SIGINT
|
|
||||||
system sh/exec.sh -n dnode4 -s stop -x SIGINT
|
|
||||||
system sh/exec.sh -n dnode5 -s stop -x SIGINT
|
|
||||||
system sh/exec.sh -n dnode6 -s stop -x SIGINT
|
|
||||||
system sh/exec.sh -n dnode7 -s stop -x SIGINT
|
|
||||||
system sh/exec.sh -n dnode8 -s stop -x SIGINT
|
|
|
@ -1,57 +1,23 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/deploy.sh -n dnode2 -i 2
|
|
||||||
system sh/deploy.sh -n dnode3 -i 3
|
|
||||||
system sh/deploy.sh -n dnode4 -i 4
|
|
||||||
system sh/cfg.sh -n dnode1 -c transPullupInterval -v 1
|
|
||||||
system sh/cfg.sh -n dnode2 -c transPullupInterval -v 1
|
|
||||||
system sh/cfg.sh -n dnode3 -c transPullupInterval -v 1
|
|
||||||
system sh/cfg.sh -n dnode4 -c transPullupInterval -v 1
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
system sh/exec.sh -n dnode2 -s start
|
|
||||||
sql connect
|
sql connect
|
||||||
|
|
||||||
print =============== step1 create dnode2
|
|
||||||
sql create dnode $hostname port 7200
|
|
||||||
|
|
||||||
$x = 0
|
|
||||||
step1:
|
|
||||||
$x = $x + 1
|
|
||||||
sleep 1000
|
|
||||||
if $x == 10 then
|
|
||||||
print ====> dnode not ready!
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
sql show dnodes
|
|
||||||
print ===> $data00 $data01 $data02 $data03 $data04 $data05
|
|
||||||
print ===> $data10 $data11 $data12 $data13 $data14 $data15
|
|
||||||
if $rows != 2 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data(1)[4] != ready then
|
|
||||||
goto step1
|
|
||||||
endi
|
|
||||||
if $data(2)[4] != ready then
|
|
||||||
goto step1
|
|
||||||
endi
|
|
||||||
|
|
||||||
print ======== step1 create db
|
print ======== step1 create db
|
||||||
sql create database keepdb replica 1 keep 30 duration 7
|
sql create database keepdb replica 1 keep 30 duration 7 vgroups 2
|
||||||
sql use keepdb
|
sql use keepdb
|
||||||
sql create table tb (ts timestamp, i int)
|
sql create table tb (ts timestamp, i int)
|
||||||
|
|
||||||
$x = 1
|
$x = 1
|
||||||
while $x < 41
|
while $x < 41
|
||||||
$time = $x . d
|
$time = $x . d
|
||||||
sql insert into tb values (now + $time , $x ) -x step2
|
sql insert into tb values (now - $time , $x ) -x step2
|
||||||
step2:
|
step2:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
endw
|
endw
|
||||||
|
|
||||||
sql select * from tb
|
sql select * from tb
|
||||||
print ===> rows $rows
|
print ===> rows $rows last $data01
|
||||||
print ===> last $data01
|
|
||||||
|
|
||||||
if $rows >= 40 then
|
if $rows >= 40 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -61,9 +27,7 @@ system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||||
system sh/exec.sh -n dnode2 -s start
|
system sh/exec.sh -n dnode2 -s start
|
||||||
|
|
||||||
sql select * from tb
|
sql select * from tb
|
||||||
print ===> rows $rows
|
print ===> rows $rows last $data01
|
||||||
print ===> last $data01
|
|
||||||
|
|
||||||
if $rows >= 40 then
|
if $rows >= 40 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -75,23 +39,13 @@ $num1 = $rows + 40
|
||||||
|
|
||||||
print ======== step3 alter db
|
print ======== step3 alter db
|
||||||
sql alter database keepdb keep 60
|
sql alter database keepdb keep 60
|
||||||
flush database keepdb
|
sql flush database keepdb
|
||||||
|
|
||||||
sql show databases
|
sql show databases
|
||||||
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07
|
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07
|
||||||
if $data02 != 1 then
|
if $data22 != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data03 != 1 then
|
if $data27 != 86400m,86400m,86400m then
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data04 != 1 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data05 != 7 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data06 != 60 then
|
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -99,98 +53,73 @@ print ======== step4 insert data
|
||||||
$x = 41
|
$x = 41
|
||||||
while $x < 81
|
while $x < 81
|
||||||
$time = $x . d
|
$time = $x . d
|
||||||
sql insert into tb values (now + $time , $x )
|
sql insert into tb values (now - $time , $x ) -x step4
|
||||||
|
step4:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
endw
|
endw
|
||||||
|
|
||||||
sql select * from tb
|
sql select * from tb
|
||||||
print ===> rows $rows
|
print ===> rows $rows last $data01
|
||||||
print ===> last $data01
|
if $rows >= 80 then
|
||||||
|
|
||||||
if $rows != $num1 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data01 != 80 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
print ======== step5 stop dnode
|
|
||||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
|
||||||
system sh/exec.sh -n dnode2 -s start
|
|
||||||
|
|
||||||
sql select * from tb
|
|
||||||
print ===> rows $rows
|
|
||||||
print ===> last $data01
|
|
||||||
|
|
||||||
if $rows >= $num1 then
|
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $rows <= 50 then
|
if $rows <= 50 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data01 != 80 then
|
|
||||||
|
return
|
||||||
|
|
||||||
|
print ======== step5 stop dnode
|
||||||
|
system sh/exec.sh -n dnode2 -s stop -x SIGKILL
|
||||||
|
system sh/exec.sh -n dnode2 -s start
|
||||||
|
|
||||||
|
sql select * from tb
|
||||||
|
print ===> rows $rows last $data01
|
||||||
|
if $rows >= 80 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $rows <= 50 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ======== step6 alter db
|
print ======== step6 alter db
|
||||||
sql alter database keepdb keep 30
|
sql alter database keepdb keep 30
|
||||||
sleep 1000
|
|
||||||
sql show databases
|
sql show databases
|
||||||
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07
|
if $data22 != 2 then
|
||||||
if $data02 != 1 then
|
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data03 != 1 then
|
if $data27 != 43200m,43200m,43200m then
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data04 != 1 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data05 != 7 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data06 != 30 then
|
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ======== step7 stop dnode
|
print ======== step7 stop dnode
|
||||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
system sh/exec.sh -n dnode2 -s stop -x SIGKILL
|
||||||
sleep 2000
|
|
||||||
system sh/exec.sh -n dnode2 -s start
|
system sh/exec.sh -n dnode2 -s start
|
||||||
sleep 2000
|
|
||||||
|
|
||||||
sql select * from tb
|
sql select * from tb
|
||||||
print ===> rows $rows
|
print ===> rows $rows last $data01
|
||||||
print ===> last $data01
|
|
||||||
|
|
||||||
if $rows >= 40 then
|
if $rows >= 40 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $rows <= 20 then
|
if $rows <= 20 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data01 != 80 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
$num3 = $rows + 40
|
|
||||||
|
|
||||||
print ======== step8 insert data
|
print ======== step8 insert data
|
||||||
$x = 81
|
$x = 81
|
||||||
while $x < 121
|
while $x < 121
|
||||||
$time = $x . d
|
$time = $x . d
|
||||||
sql insert into tb values (now + $time , $x )
|
sql insert into tb values (now - $time , $x ) -x step4
|
||||||
|
step4:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
endw
|
endw
|
||||||
|
|
||||||
sql select * from tb
|
sql select * from tb
|
||||||
print ===> rows $rows
|
print ===> rows $rows last $data01
|
||||||
print ===> last $data01
|
if $rows >= 40 then
|
||||||
|
|
||||||
if $rows != $num3 then
|
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data01 != 120 then
|
if $rows <= 20 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -208,4 +137,6 @@ sql alter database keepdb duration 1 -x error3
|
||||||
error3:
|
error3:
|
||||||
|
|
||||||
print ======= test success
|
print ======= test success
|
||||||
|
|
||||||
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
|
@ -47,7 +47,7 @@ $tsu = $tsu + $ts0
|
||||||
|
|
||||||
## fill syntax test
|
## fill syntax test
|
||||||
# number of fill values exceeds number of selected columns
|
# number of fill values exceeds number of selected columns
|
||||||
sql select max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
sql select _wstart, max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
||||||
if $data11 != 6 then
|
if $data11 != 6 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -62,7 +62,7 @@ if $data14 != 6.000000000 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# number of fill values is smaller than number of selected columns
|
# number of fill values is smaller than number of selected columns
|
||||||
sql select max(c1), max(c2), max(c3) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6)
|
sql select _wstart, max(c1), max(c2), max(c3) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6)
|
||||||
if $data11 != 6 then
|
if $data11 != 6 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -74,7 +74,7 @@ if $data13 != 6.00000 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# unspecified filling method
|
# unspecified filling method
|
||||||
sql_error select max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill (6, 6, 6, 6, 6)
|
sql_error select _wstart, max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill (6, 6, 6, 6, 6)
|
||||||
|
|
||||||
## constant fill test
|
## constant fill test
|
||||||
# count_with_fill
|
# count_with_fill
|
||||||
|
@ -114,7 +114,7 @@ endi
|
||||||
|
|
||||||
# avg_with_fill
|
# avg_with_fill
|
||||||
print avg_with_constant_fill
|
print avg_with_constant_fill
|
||||||
sql select avg(c1), avg(c2), avg(c3), avg(c4), avg(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6)
|
sql select _wstart, avg(c1), avg(c2), avg(c3), avg(c4), avg(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -148,7 +148,7 @@ endi
|
||||||
|
|
||||||
# max_with_fill
|
# max_with_fill
|
||||||
print max_with_fill
|
print max_with_fill
|
||||||
sql select max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6)
|
sql select _wstart, max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -182,7 +182,7 @@ endi
|
||||||
|
|
||||||
# min_with_fill
|
# min_with_fill
|
||||||
print min_with_fill
|
print min_with_fill
|
||||||
sql select min(c1), min(c2), min(c3), min(c4), min(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
sql select _wstart, min(c1), min(c2), min(c3), min(c4), min(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -216,7 +216,7 @@ endi
|
||||||
|
|
||||||
# first_with_fill
|
# first_with_fill
|
||||||
print first_with_fill
|
print first_with_fill
|
||||||
sql select first(c1), first(c2), first(c3), first(c4), first(c5), first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
sql select _wstart, first(c1), first(c2), first(c3), first(c4), first(c5), first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -305,7 +305,7 @@ endi
|
||||||
|
|
||||||
# last_with_fill
|
# last_with_fill
|
||||||
print last_with_fill
|
print last_with_fill
|
||||||
sql select last(c1), last(c2), last(c3), last(c4), last(c5), last(c6), last(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
sql select _wstart, last(c1), last(c2), last(c3), last(c4), last(c5), last(c6), last(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -339,7 +339,7 @@ if $data81 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# fill_negative_values
|
# fill_negative_values
|
||||||
sql select sum(c1), avg(c2), max(c3), min(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, -1, -1, -1, -1, -1, -1, -1, -1)
|
sql select _wstart, sum(c1), avg(c2), max(c3), min(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, -1, -1, -1, -1, -1, -1, -1, -1)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -351,11 +351,11 @@ if $data11 != -1 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# fill_char_values_to_arithmetic_fields
|
# fill_char_values_to_arithmetic_fields
|
||||||
sql_error select sum(c1), avg(c2), max(c3), min(c4), avg(c4), count(c6), last(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c')
|
sql select sum(c1), avg(c2), max(c3), min(c4), avg(c4), count(c6), last(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c')
|
||||||
|
|
||||||
# fill_multiple_columns
|
# fill_multiple_columns
|
||||||
sql_error select sum(c1), avg(c2), min(c3), max(c4), count(c6), first(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 99, 99, 99, 99, 99, abc, abc)
|
sql_error select sum(c1), avg(c2), min(c3), max(c4), count(c6), first(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 99, 99, 99, 99, 99, abc, abc)
|
||||||
sql select sum(c1), avg(c2), min(c3), max(c4) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 99, 99, 99, 99)
|
sql select _wstart, sum(c1), avg(c2), min(c3), max(c4) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 99, 99, 99, 99)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -375,9 +375,12 @@ if $data08 != NCHAR then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# fill_into_nonarithmetic_fieds
|
# fill_into_nonarithmetic_fieds
|
||||||
sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 20000000, 20000000, 20000000)
|
print select _wstart, first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 20000000, 20000000, 20000000)
|
||||||
#if $data11 != 20000000 then
|
sql select _wstart, first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 20000000, 20000000, 20000000)
|
||||||
if $data11 != 1 then
|
if $data01 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data11 != NULL then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -387,48 +390,39 @@ sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $
|
||||||
sql select first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e', '1e1')
|
sql select first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e', '1e1')
|
||||||
# fill quoted values into bool column will throw error unless the value is 'true' or 'false' Note:2018-10-24
|
# fill quoted values into bool column will throw error unless the value is 'true' or 'false' Note:2018-10-24
|
||||||
# fill values into binary or nchar columns will be set to NULL automatically Note:2018-10-24
|
# fill values into binary or nchar columns will be set to NULL automatically Note:2018-10-24
|
||||||
sql_error select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e', '1e1','1e1')
|
sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e', '1e1','1e1')
|
||||||
sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, true, true, true)
|
sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, true, true, true)
|
||||||
sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'true', 'true','true')
|
sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'true', 'true','true')
|
||||||
|
|
||||||
|
|
||||||
# fill nonarithmetic values into arithmetic fields
|
# fill nonarithmetic values into arithmetic fields
|
||||||
sql_error select count(*) where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, abc);
|
sql_error select count(*) where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, abc);
|
||||||
sql_error select count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'true');
|
sql select count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'true');
|
||||||
|
|
||||||
sql select count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e1');
|
print select _wstart, count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e1');
|
||||||
|
sql select _wstart, count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e1');
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data01 != 1 then
|
if $data01 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data11 != 10 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
sql select count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 1e1);
|
sql select _wstart, count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 1e1);
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data01 != 1 then
|
if $data01 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data11 != 10 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
sql select count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '10');
|
sql select _wstart, count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '10');
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data01 != 1 then
|
if $data01 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data11 != 10 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
|
|
||||||
## linear fill
|
## linear fill
|
||||||
# feature currently switched off 2018/09/29
|
# feature currently switched off 2018/09/29
|
||||||
|
@ -436,7 +430,7 @@ endi
|
||||||
|
|
||||||
## previous fill
|
## previous fill
|
||||||
print fill(prev)
|
print fill(prev)
|
||||||
sql select count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
sql select _wstart, count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -469,7 +463,7 @@ if $data81 != 1 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# avg_with_fill
|
# avg_with_fill
|
||||||
sql select avg(c1), avg(c2), avg(c3), avg(c4), avg(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
sql select _wstart, avg(c1), avg(c2), avg(c3), avg(c4), avg(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -502,7 +496,7 @@ if $data81 != 4.000000000 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# max_with_fill
|
# max_with_fill
|
||||||
sql select max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
sql select _wstart, max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -535,7 +529,7 @@ if $data81 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# min_with_fill
|
# min_with_fill
|
||||||
sql select min(c1), min(c2), min(c3), min(c4), min(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
sql select _wstart, min(c1), min(c2), min(c3), min(c4), min(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -568,7 +562,7 @@ if $data81 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# first_with_fill
|
# first_with_fill
|
||||||
sql select first(c1), first(c2), first(c3), first(c4), first(c5), first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
sql select _wstart, first(c1), first(c2), first(c3), first(c4), first(c5), first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -601,7 +595,7 @@ if $data81 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# last_with_fill
|
# last_with_fill
|
||||||
sql select last(c1), last(c2), last(c3), last(c4), last(c5), last(c6), last(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
sql select _wstart, last(c1), last(c2), last(c3), last(c4), last(c5), last(c6), last(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -636,9 +630,9 @@ endi
|
||||||
## NULL fill
|
## NULL fill
|
||||||
print fill(value, NULL)
|
print fill(value, NULL)
|
||||||
# count_with_fill
|
# count_with_fill
|
||||||
sql select count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
sql select _wstart, count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
||||||
print select count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
print select _wstart, count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
||||||
sql select count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, NULL)
|
sql select _wstart, count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(NULL)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -669,13 +663,13 @@ endi
|
||||||
if $data81 != 1 then
|
if $data81 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
sql select count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(none)
|
sql select _wstart, count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(none)
|
||||||
if $rows != 5 then
|
if $rows != 5 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# avg_with_fill
|
# avg_with_fill
|
||||||
sql select avg(c1), avg(c2), avg(c3), avg(c4), avg(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, NULL)
|
sql select _wstart, avg(c1), avg(c2), avg(c3), avg(c4), avg(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -708,7 +702,7 @@ if $data81 != 4.000000000 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# max_with_fill
|
# max_with_fill
|
||||||
sql select max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, NULL)
|
sql select _wstart, max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(NULL)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -741,7 +735,7 @@ if $data81 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# min_with_fill
|
# min_with_fill
|
||||||
sql select min(c1), min(c2), min(c3), min(c4), min(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, NULL)
|
sql select _wstart, min(c1), min(c2), min(c3), min(c4), min(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -774,7 +768,7 @@ if $data81 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# first_with_fill
|
# first_with_fill
|
||||||
sql select first(c1), first(c2), first(c3), first(c4), first(c5), first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, NULL)
|
sql select _wstart, first(c1), first(c2), first(c3), first(c4), first(c5), first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -807,7 +801,7 @@ if $data81 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# last_with_fill
|
# last_with_fill
|
||||||
sql select last(c1), last(c2), last(c3), last(c4), last(c5), last(c6), last(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, NULL)
|
sql select _wstart, last(c1), last(c2), last(c3), last(c4), last(c5), last(c6), last(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -841,7 +835,7 @@ endi
|
||||||
|
|
||||||
# desc fill query
|
# desc fill query
|
||||||
print desc fill query
|
print desc fill query
|
||||||
sql select count(*) from m_fl_tb0 where ts>='2018-9-17 9:0:0' and ts<='2018-9-17 9:11:00' interval(1m) fill(value,10) order by ts desc;
|
sql select count(*) from m_fl_tb0 where ts>='2018-9-17 9:0:0' and ts<='2018-9-17 9:11:00' interval(1m) fill(value,10);
|
||||||
if $rows != 12 then
|
if $rows != 12 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -865,7 +859,8 @@ sql insert into tm0 values('2020-1-1 1:3:8', 8);
|
||||||
sql insert into tm0 values('2020-1-1 1:3:9', 9);
|
sql insert into tm0 values('2020-1-1 1:3:9', 9);
|
||||||
sql insert into tm0 values('2020-1-1 1:4:10', 10);
|
sql insert into tm0 values('2020-1-1 1:4:10', 10);
|
||||||
|
|
||||||
sql select max(k)-min(k),last(k)-first(k),0-spread(k) from tm0 where ts>='2020-1-1 1:1:1' and ts<='2020-1-1 1:2:15' interval(10s) fill(value, 99,91,90,89,88,87,86,85);
|
print select _wstart, max(k)-min(k),last(k)-first(k),0-spread(k) from tm0 where ts>='2020-1-1 1:1:1' and ts<='2020-1-1 1:2:15' interval(10s) fill(value, 99,91,90,89,88,87,86,85);
|
||||||
|
sql select _wstart, max(k)-min(k),last(k)-first(k),0-spread(k) from tm0 where ts>='2020-1-1 1:1:1' and ts<='2020-1-1 1:2:15' interval(10s) fill(value, 99,91,90,89,88,87,86,85);
|
||||||
if $rows != 8 then
|
if $rows != 8 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -890,15 +885,15 @@ if $data10 != @20-01-01 01:01:10.000@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data11 != 99.000000000 then
|
if $data11 != 1.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data12 != 91.000000000 then
|
if $data12 != 1.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data13 != 90.000000000 then
|
if $data13 != -87.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -922,19 +917,19 @@ if $data70 != @20-01-01 01:02:10.000@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data71 != 99.000000000 then
|
if $data71 != 1.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data72 != 91.000000000 then
|
if $data72 != 1.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data73 != 90.000000000 then
|
if $data73 != -87.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select first(k)-avg(k),0-spread(k) from tm0 where ts>='2020-1-1 1:1:1' and ts<='2020-1-1 1:2:15' interval(10s) fill(NULL);
|
sql select _wstart, first(k)-avg(k),0-spread(k) from tm0 where ts>='2020-1-1 1:1:1' and ts<='2020-1-1 1:2:15' interval(10s) fill(NULL);
|
||||||
if $rows != 8 then
|
if $rows != 8 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -963,12 +958,13 @@ if $data12 != NULL then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select max(k)-min(k),last(k)-first(k),0-spread(k) from tm0 where ts>='2020-1-1 1:1:1' and ts<='2020-1-1 4:2:15' interval(500a) fill(value, 99,91,90,89,88,87,86,85) order by ts asc;
|
sql select _wstart, max(k)-min(k),last(k)-first(k),0-spread(k) from tm0 where ts>='2020-1-1 1:1:1' and ts<='2020-1-1 4:2:15' interval(500a) fill(value, 99,91,90,89,88,87,86,85) ;
|
||||||
if $rows != 21749 then
|
if $rows != 21749 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select max(k)-min(k),last(k)-first(k),0-spread(k),count(1) from m1 where ts>='2020-1-1 1:1:1' and ts<='2020-1-1 1:2:15' interval(10s) fill(value, 99,91,90,89,88,87,86,85) order by ts asc;
|
print select _wstart, max(k)-min(k),last(k)-first(k),0-spread(k),count(1) from m1 where ts>='2020-1-1 1:1:1' and ts<='2020-1-1 1:2:15' interval(10s) fill(value, 99,91,90,89,88,87,86,85) ;
|
||||||
|
sql select _wstart, max(k)-min(k),last(k)-first(k),0-spread(k),count(1) from m1 where ts>='2020-1-1 1:1:1' and ts<='2020-1-1 1:2:15' interval(10s) fill(value, 99,91,90,89,88,87,86,85) ;
|
||||||
if $rows != 8 then
|
if $rows != 8 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -997,19 +993,19 @@ if $data10 != @20-01-01 01:01:10.000@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data11 != 99.000000000 then
|
if $data11 != 1.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data12 != 91.000000000 then
|
if $data12 != 1.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data13 != 90.000000000 then
|
if $data13 != -87.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data14 != 89 then
|
if $data14 != 86 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -1026,18 +1022,15 @@ endi
|
||||||
if $data01 != -4.000000000 then
|
if $data01 != -4.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
if $data10 != 5 then
|
||||||
if $data02 != 0 then
|
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
if $data11 != -4.000000000 then
|
||||||
if $data12 != 1 then
|
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print =====================>td-1442, td-2190 , no time range for fill option
|
print =====================>td-1442, td-2190 , no time range for fill option
|
||||||
sql_error select count(*) from m_fl_tb0 interval(1s) fill(prev);
|
sql_error select count(*) from m_fl_tb0 interval(1s) fill(prev);
|
||||||
|
|
||||||
sql_error select min(c3) from m_fl_mt0 interval(10a) fill(value, 20)
|
sql_error select min(c3) from m_fl_mt0 interval(10a) fill(value, 20)
|
||||||
sql_error select min(c3) from m_fl_mt0 interval(10s) fill(value, 20)
|
sql_error select min(c3) from m_fl_mt0 interval(10s) fill(value, 20)
|
||||||
sql_error select min(c3) from m_fl_mt0 interval(10m) fill(value, 20)
|
sql_error select min(c3) from m_fl_mt0 interval(10m) fill(value, 20)
|
||||||
|
@ -1051,7 +1044,7 @@ sql create table nexttb1 (ts timestamp, f1 int);
|
||||||
sql insert into nexttb1 values ('2021-08-08 1:1:1', NULL);
|
sql insert into nexttb1 values ('2021-08-08 1:1:1', NULL);
|
||||||
sql insert into nexttb1 values ('2021-08-08 1:1:5', 3);
|
sql insert into nexttb1 values ('2021-08-08 1:1:5', 3);
|
||||||
|
|
||||||
sql select last(*) from nexttb1 where ts >= '2021-08-08 1:1:1' and ts < '2021-08-08 1:1:10' interval(1s) fill(next);
|
sql select _wstart, last(*) from nexttb1 where ts >= '2021-08-08 1:1:1' and ts < '2021-08-08 1:1:10' interval(1s) fill(next);
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1065,9 +1058,6 @@ if $data02 != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print =============== clear
|
print =============== clear
|
||||||
#sql drop database $db
|
#sql drop database $db
|
||||||
#sql show databases
|
#sql show databases
|
||||||
|
|
|
@ -97,9 +97,11 @@ $tsu = $tsu + $ts0
|
||||||
#endi
|
#endi
|
||||||
|
|
||||||
# number of fill values exceeds number of selected columns
|
# number of fill values exceeds number of selected columns
|
||||||
sql select max(c1), max(c2), max(c3), max(c4), max(c5) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, -1, -2, -3, -4, -5, -6, -7, -8)
|
print select _wstart, count(ts), max(c1), max(c2), max(c3), max(c4), max(c5) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, -1, -2, -3, -4, -5, -6, -7, -8)
|
||||||
|
sql select _wstart, count(ts), max(c1), max(c2), max(c3), max(c4), max(c5) from $stb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, -1, -2, -3, -4, -5, -6, -7, -8)
|
||||||
$val = $rowNum * 2
|
$val = $rowNum * 2
|
||||||
$val = $val - 1
|
$val = $val - 1
|
||||||
|
print $rows $val
|
||||||
if $rows != $val then
|
if $rows != $val then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
|
@ -47,8 +47,8 @@ $tsu = $tsu + $ts0
|
||||||
|
|
||||||
## fill syntax test
|
## fill syntax test
|
||||||
# number of fill values exceeds number of selected columns
|
# number of fill values exceeds number of selected columns
|
||||||
print select max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
print select _wstart, max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
||||||
sql select max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
sql select _wstart, max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
||||||
if $data11 != 6 then
|
if $data11 != 6 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -63,8 +63,8 @@ if $data14 != 6.000000000 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# number of fill values is smaller than number of selected columns
|
# number of fill values is smaller than number of selected columns
|
||||||
print sql select max(c1), max(c2), max(c3) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6)
|
print sql select _wstart, max(c1), max(c2), max(c3) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6)
|
||||||
sql select max(c1), max(c2), max(c3) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6)
|
sql select _wstart, max(c1), max(c2), max(c3) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6)
|
||||||
if $data11 != 6 then
|
if $data11 != 6 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -219,7 +219,7 @@ endi
|
||||||
|
|
||||||
# first_with_fill
|
# first_with_fill
|
||||||
print first_with_fill
|
print first_with_fill
|
||||||
sql select first(c1), first(c2), first(c3), first(c4), first(c5), first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
sql select _wstart, first(c1), first(c2), first(c3), first(c4), first(c5), first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 6, 6, 6, 6, 6, 6, 6, 6)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -341,7 +341,7 @@ if $data81 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# fill_negative_values
|
# fill_negative_values
|
||||||
sql select sum(c1), avg(c2), max(c3), min(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, -1, -1, -1, -1, -1, -1, -1, -1)
|
sql select _wstart, sum(c1), avg(c2), max(c3), min(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, -1, -1, -1, -1, -1, -1, -1, -1)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -353,11 +353,11 @@ if $data11 != -1 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# fill_char_values_to_arithmetic_fields
|
# fill_char_values_to_arithmetic_fields
|
||||||
sql_error select sum(c1), avg(c2), max(c3), min(c4), avg(c4), count(c6), last(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c')
|
sql select sum(c1), avg(c2), max(c3), min(c4), avg(c4), count(c6), last(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c')
|
||||||
|
|
||||||
# fill_multiple_columns
|
# fill_multiple_columns
|
||||||
sql_error select sum(c1), avg(c2), min(c3), max(c4), count(c6), first(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 99, 99, 99, 99, 99, abc, abc)
|
sql_error select _wstart, sum(c1), avg(c2), min(c3), max(c4), count(c6), first(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 99, 99, 99, 99, 99, abc, abc)
|
||||||
sql select sum(c1), avg(c2), min(c3), max(c4) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 99, 99, 99, 99)
|
sql select _wstart, sum(c1), avg(c2), min(c3), max(c4) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 99, 99, 99, 99)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -379,9 +379,9 @@ endi
|
||||||
|
|
||||||
|
|
||||||
# fill_into_nonarithmetic_fieds
|
# fill_into_nonarithmetic_fieds
|
||||||
sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 20000000, 20000000, 20000000)
|
sql select _wstart, first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 20000000, 20000000, 20000000)
|
||||||
#if $data11 != 20000000 then
|
#if $data11 != 20000000 then
|
||||||
if $data11 != 1 then
|
if $data11 != NULL then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -391,47 +391,38 @@ sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $
|
||||||
sql select first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e', '1e1')
|
sql select first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e', '1e1')
|
||||||
# fill quoted values into bool column will throw error unless the value is 'true' or 'false' Note:2018-10-24
|
# fill quoted values into bool column will throw error unless the value is 'true' or 'false' Note:2018-10-24
|
||||||
# fill values into binary or nchar columns will be set to null automatically Note:2018-10-24
|
# fill values into binary or nchar columns will be set to null automatically Note:2018-10-24
|
||||||
sql_error select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e', '1e1','1e1')
|
sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e', '1e1','1e1')
|
||||||
sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, true, true, true)
|
sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, true, true, true)
|
||||||
sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'true', 'true','true')
|
sql select first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'true', 'true','true')
|
||||||
|
|
||||||
|
|
||||||
# fill nonarithmetic values into arithmetic fields
|
# fill nonarithmetic values into arithmetic fields
|
||||||
sql_error select count(*) where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, abc);
|
sql_error select count(*) where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, abc);
|
||||||
sql_error select count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'true');
|
sql select count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 'true');
|
||||||
|
|
||||||
sql select count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e1');
|
sql select _wstart, count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '1e1');
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data01 != 1 then
|
if $data01 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data11 != 10 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
sql select count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 1e1);
|
sql select _wstart, count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, 1e1);
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data01 != 1 then
|
if $data01 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data11 != 10 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
sql select count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '10');
|
sql select _wstart, count(*) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, '10');
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data01 != 1 then
|
if $data01 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data11 != 10 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
|
|
||||||
## linear fill
|
## linear fill
|
||||||
|
@ -440,7 +431,7 @@ endi
|
||||||
|
|
||||||
## previous fill
|
## previous fill
|
||||||
print fill(prev)
|
print fill(prev)
|
||||||
sql select count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
sql select _wstart, count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -473,7 +464,7 @@ if $data81 != 1 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# avg_with_fill
|
# avg_with_fill
|
||||||
sql select avg(c1), avg(c2), avg(c3), avg(c4), avg(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
sql select _wstart, avg(c1), avg(c2), avg(c3), avg(c4), avg(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(prev)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -641,8 +632,8 @@ endi
|
||||||
print fill(value, NULL)
|
print fill(value, NULL)
|
||||||
# count_with_fill
|
# count_with_fill
|
||||||
sql select count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
sql select count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
||||||
print select count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
print select _wstart, count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
||||||
sql select count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, NULL)
|
sql select _wstart, count(c1), count(c2), count(c3), count(c4), count(c5), count(c6), count(c7), count(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(NULL)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -679,7 +670,7 @@ if $rows != 5 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# avg_with_fill
|
# avg_with_fill
|
||||||
sql select avg(c1), avg(c2), avg(c3), avg(c4), avg(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, NULL)
|
sql select _wstart, avg(c1), avg(c2), avg(c3), avg(c4), avg(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -712,7 +703,7 @@ if $data81 != 4.000000000 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# max_with_fill
|
# max_with_fill
|
||||||
sql select max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, NULL)
|
sql select _wstart, max(c1), max(c2), max(c3), max(c4), max(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -745,7 +736,7 @@ if $data81 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# min_with_fill
|
# min_with_fill
|
||||||
sql select min(c1), min(c2), min(c3), min(c4), min(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, NULL)
|
sql select _wstart, min(c1), min(c2), min(c3), min(c4), min(c5) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(NULL)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -778,7 +769,7 @@ if $data81 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# first_with_fill
|
# first_with_fill
|
||||||
sql select first(c1), first(c2), first(c3), first(c4), first(c5), first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, NULL)
|
sql select _wstart, first(c1), first(c2), first(c3), first(c4), first(c5), first(c6), first(c7), first(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill( NULL)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -811,7 +802,7 @@ if $data81 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
# last_with_fill
|
# last_with_fill
|
||||||
sql select last(c1), last(c2), last(c3), last(c4), last(c5), last(c6), last(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(value, NULL)
|
sql select _wstart, last(c1), last(c2), last(c3), last(c4), last(c5), last(c6), last(c7), last(c8) from $tb where ts >= $ts0 and ts <= $tsu interval(5m) fill(NULL)
|
||||||
if $rows != 9 then
|
if $rows != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -845,7 +836,7 @@ endi
|
||||||
|
|
||||||
# desc fill query
|
# desc fill query
|
||||||
print desc fill query
|
print desc fill query
|
||||||
sql select count(*) from m_fl_tb0 where ts>='2018-9-17 9:0:0' and ts<='2018-9-17 9:11:00' interval(1m) fill(value,10) order by ts desc;
|
sql select count(*) from m_fl_tb0 where ts>='2018-9-17 9:0:0' and ts<='2018-9-17 9:11:00' interval(1m) fill(value,10);
|
||||||
if $rows != 12 then
|
if $rows != 12 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1002,7 +993,7 @@ if $data71 != 21.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(c1), avg(c2) from us_t1 where ts >= '2018-09-17 09:00:00.000002' and ts <= '2018-09-17 09:00:00.000021' interval(3u) fill(linear)
|
sql select _wstart, avg(c1), avg(c2) from us_t1 where ts >= '2018-09-17 09:00:00.000002' and ts <= '2018-09-17 09:00:00.000021' interval(3u) fill(linear)
|
||||||
if $rows != 8 then
|
if $rows != 8 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
|
@ -19,7 +19,7 @@ $stb = $stbPrefix . $i
|
||||||
sql drop database $db -x step1
|
sql drop database $db -x step1
|
||||||
step1:
|
step1:
|
||||||
|
|
||||||
sql create database $db maxrows 400 cache 1
|
sql create database $db maxrows 400
|
||||||
|
|
||||||
sql use $db
|
sql use $db
|
||||||
sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int)
|
sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int)
|
||||||
|
@ -73,11 +73,9 @@ run tsim/parser/first_last_query.sim
|
||||||
|
|
||||||
print ================== restart server to commit data into disk
|
print ================== restart server to commit data into disk
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
sleep 500
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
print ================== server restart completed
|
print ================== server restart completed
|
||||||
sql connect
|
sql connect
|
||||||
sleep 100
|
|
||||||
|
|
||||||
run tsim/parser/first_last_query.sim
|
run tsim/parser/first_last_query.sim
|
||||||
|
|
||||||
|
@ -102,11 +100,9 @@ while $x < 5000
|
||||||
endw
|
endw
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
sleep 1000
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
print ================== server restart completed
|
print ================== server restart completed
|
||||||
sql connect
|
sql connect
|
||||||
sleep 100
|
|
||||||
|
|
||||||
sql use test
|
sql use test
|
||||||
sql select count(*), last(ts) from tm0 interval(1s)
|
sql select count(*), last(ts) from tm0 interval(1s)
|
||||||
|
|
|
@ -109,7 +109,7 @@ endi
|
||||||
|
|
||||||
### test if first works for committed data. An 'order by ts desc' clause should be present, and queried data should come from at least 2 file blocks
|
### test if first works for committed data. An 'order by ts desc' clause should be present, and queried data should come from at least 2 file blocks
|
||||||
$tb = $tbPrefix . 9
|
$tb = $tbPrefix . 9
|
||||||
sql select first(ts), first(c1) from $tb where ts < '2018-10-17 10:00:00.000' order by ts asc
|
sql select first(ts), first(c1) from $tb where ts < '2018-10-17 10:00:00.000'
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -121,7 +121,7 @@ if $data01 != 0 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
$tb = $tbPrefix . 9
|
$tb = $tbPrefix . 9
|
||||||
sql select first(ts), first(c1) from $tb where ts < '2018-10-17 10:00:00.000' order by ts desc
|
sql select first(ts), first(c1) from $tb where ts < '2018-10-17 10:00:00.000'
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -154,7 +154,7 @@ sql insert into test11 using stest tags('test11','bbb') values ('2020-09-04 16:5
|
||||||
sql insert into test12 using stest tags('test11','bbb') values ('2020-09-04 16:53:58.003',210,3);
|
sql insert into test12 using stest tags('test11','bbb') values ('2020-09-04 16:53:58.003',210,3);
|
||||||
sql insert into test21 using stest tags('test21','ccc') values ('2020-09-04 16:53:59.003',210,3);
|
sql insert into test21 using stest tags('test21','ccc') values ('2020-09-04 16:53:59.003',210,3);
|
||||||
sql insert into test22 using stest tags('test21','ccc') values ('2020-09-04 16:54:54.003',210,3);
|
sql insert into test22 using stest tags('test21','ccc') values ('2020-09-04 16:54:54.003',210,3);
|
||||||
sql select sum(size) from stest group by appname;
|
sql select sum(size), appname from stest group by appname order by appname;;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -170,16 +170,16 @@ if $data20 != 420 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data01 != @test1@ then
|
if $data01 != @test1@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data11 != @test11@ then
|
if $data11 != @test11@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data21 != @test21@ then
|
if $data21 != @test21@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select sum(size) from stest interval(1d) group by appname;
|
sql select _wstart, sum(size), appname from stest partition by appname interval(1d) order by appname;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -223,7 +223,7 @@ return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ===================>td-1477, one table has only one block occurs this bug.
|
print ===================>td-1477, one table has only one block occurs this bug.
|
||||||
sql select first(size),count(*),LAST(SIZE) from stest where tbname in ('test1', 'test2') interval(1d) group by tbname;
|
sql select _wstart, first(size), count(*), LAST(SIZE), tbname from stest where tbname in ('test1', 'test2') partition by tbname interval(1d) order by tbname asc;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -278,15 +278,13 @@ sql create table tm1 using m1 tags(2);
|
||||||
sql insert into tm0 values('2020-3-1 1:1:1', 112);
|
sql insert into tm0 values('2020-3-1 1:1:1', 112);
|
||||||
sql insert into tm1 values('2020-1-1 1:1:1', 1)('2020-3-1 0:1:1', 421);
|
sql insert into tm1 values('2020-1-1 1:1:1', 1)('2020-3-1 0:1:1', 421);
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
sleep 1000
|
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
print ================== server restart completed
|
print ================== server restart completed
|
||||||
sleep 1000
|
|
||||||
sql connect
|
sql connect
|
||||||
sql use first_db0;
|
sql use first_db0;
|
||||||
|
|
||||||
sql select last(*) from m1 group by tbname;
|
sql select last(*), tbname from m1 group by tbname;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
|
@ -67,8 +67,6 @@ while $i < $half
|
||||||
$tstart = 100000
|
$tstart = 100000
|
||||||
endw
|
endw
|
||||||
|
|
||||||
sleep 100
|
|
||||||
|
|
||||||
$i1 = 1
|
$i1 = 1
|
||||||
$i2 = 0
|
$i2 = 0
|
||||||
|
|
||||||
|
@ -85,7 +83,7 @@ $ts1 = $tb1 . .ts
|
||||||
$ts2 = $tb2 . .ts
|
$ts2 = $tb2 . .ts
|
||||||
|
|
||||||
print ===============================groupby_operation
|
print ===============================groupby_operation
|
||||||
sql select count(*),c1 from group_tb0 where c1 < 20 group by c1;
|
sql select count(*),c1 from group_tb0 where c1 < 20 group by c1 order by c1;
|
||||||
if $row != 20 then
|
if $row != 20 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -106,7 +104,7 @@ if $data11 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select first(ts),c1 from group_tb0 where c1<20 group by c1;
|
sql select first(ts),c1 from group_tb0 where c1 < 20 group by c1 order by c1;
|
||||||
if $row != 20 then
|
if $row != 20 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -127,7 +125,7 @@ if $data91 != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select first(ts), ts, c1 from group_tb0 where c1 < 20 group by c1;
|
sql select first(ts), ts, c1 from group_tb0 where c1 < 20 group by c1 order by c1;
|
||||||
print $row
|
print $row
|
||||||
if $row != 20 then
|
if $row != 20 then
|
||||||
return -1
|
return -1
|
||||||
|
@ -161,7 +159,7 @@ if $data92 != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select sum(c1), c1, avg(c1), min(c1), max(c2) from group_tb0 where c1 < 20 group by c1;
|
sql select sum(c1), c1, avg(c1), min(c1), max(c2) from group_tb0 where c1 < 20 group by c1 order by c1;
|
||||||
if $row != 20 then
|
if $row != 20 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -211,20 +209,20 @@ if $data14 != 1.00000 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql_error select sum(c1), ts, c1 from group_tb0 where c1<20 group by c1;
|
sql_error select sum(c1), ts, c1 from group_tb0 where c1<20 group by c1;
|
||||||
sql_error select first(ts), ts, c2 from group_tb0 where c1 < 20 group by c1;
|
sql select first(ts), ts, c2 from group_tb0 where c1 < 20 group by c1;
|
||||||
sql_error select sum(c3), ts, c2 from group_tb0 where c1 < 20 group by c1;
|
sql_error select sum(c3), ts, c2 from group_tb0 where c1 < 20 group by c1;
|
||||||
sql_error select sum(c3), first(ts), c2 from group_tb0 where c1 < 20 group by c1;
|
sql_error select sum(c3), first(ts), c2 from group_tb0 where c1 < 20 group by c1;
|
||||||
sql_error select first(c3), ts, c1, c2 from group_tb0 where c1 < 20 group by c1;
|
sql select first(c3), ts, c1, c2 from group_tb0 where c1 < 20 group by c1;
|
||||||
sql_error select first(c3), last(c3), ts, c1 from group_tb0 where c1 < 20 group by c1;
|
sql_error select first(c3), last(c3), ts, c1 from group_tb0 where c1 < 20 group by c1;
|
||||||
sql_error select ts from group_tb0 group by c1;
|
sql_error select ts from group_tb0 group by c1;
|
||||||
|
|
||||||
#===========================interval=====not support======================
|
#===========================interval=====not support======================
|
||||||
sql_error select count(*), c1 from group_tb0 where c1<20 interval(1y) group by c1;
|
sql_error select count(*), c1 from group_tb0 where c1<20 interval(1y) group by c1;
|
||||||
#=====tbname must be the first in the group by clause=====================
|
#=====tbname must be the first in the group by clause=====================
|
||||||
sql_error select count(*) from group_tb0 where c1 < 20 group by c1, tbname;
|
sql select count(*) from group_tb0 where c1 < 20 group by c1, tbname;
|
||||||
|
|
||||||
#super table group by normal columns
|
#super table group by normal columns
|
||||||
sql select count(*), c1 from group_mt0 where c1< 20 group by c1;
|
sql select count(*), c1 from group_mt0 where c1< 20 group by c1 order by c1;
|
||||||
if $row != 20 then
|
if $row != 20 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -253,7 +251,7 @@ if $data91 != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select first(c1), c1, ts from group_mt0 where c1<20 group by c1;
|
sql select first(c1), c1, ts from group_mt0 where c1<20 group by c1 order by c1;
|
||||||
if $row != 20 then
|
if $row != 20 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -290,7 +288,7 @@ if $data92 != @70-01-01 08:01:40.009@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select first(c1), last(ts), first(ts), last(c1),c1,sum(c1),avg(c1),count(*) from group_mt0 where c1<20 group by c1;
|
sql select first(c1), last(ts), first(ts), last(c1),c1,sum(c1),avg(c1),count(*) from group_mt0 where c1<20 group by c1 order by c1;
|
||||||
if $row != 20 then
|
if $row != 20 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -351,7 +349,7 @@ if $data94 != 9 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select c1,sum(c1),avg(c1),count(*) from group_mt0 where c1<5 group by c1;
|
sql select c1,sum(c1),avg(c1),count(*) from group_mt0 where c1<5 group by c1 order by c1;
|
||||||
if $row != 5 then
|
if $row != 5 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -364,7 +362,7 @@ if $data11 != 800 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select first(c1), last(ts), first(ts), last(c1),sum(c1),avg(c1),count(*) from group_mt0 where c1<20 group by tbname,c1;
|
sql select first(c1), last(ts), first(ts), last(c1),sum(c1),avg(c1),count(*),tbname from group_mt0 where c1<20 group by tbname, c1 order by c1;
|
||||||
if $row != 160 then
|
if $row != 160 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -395,39 +393,8 @@ if $data06 != 100 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data07 != @group_tb0@ then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
if $data90 != 9 then
|
sql select count(*),first(ts),last(ts),min(c3) from group_tb1 group by c4 order by c4;
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
if $data91 != @70-01-01 08:01:49.909@ then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
if $data92 != @70-01-01 08:01:40.009@ then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
if $data93 != 9 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
if $data94 != 900 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
if $data96 != 100 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
if $data97 != @group_tb0@ then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
sql select count(*),first(ts),last(ts),min(c3) from group_tb1 group by c4;
|
|
||||||
if $rows != 10000 then
|
if $rows != 10000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -469,7 +436,7 @@ if $rows != 100 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select count(*),sum(c4), count(c4), sum(c4)/count(c4) from group_tb1 group by c8
|
sql select count(*),sum(c4), count(c4), sum(c4)/count(c4) from group_tb1 group by c8 order by c8;
|
||||||
if $rows != 100 then
|
if $rows != 100 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -504,12 +471,12 @@ if $data13 != 4951.000000000 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ====================> group by normal column + slimit + soffset
|
print ====================> group by normal column + slimit + soffset
|
||||||
sql select count(*), c8 from group_mt0 group by c8 limit 1 offset 0;
|
sql select count(*), c8 from group_mt0 group by c8 limit 100 offset 0;
|
||||||
if $rows != 100 then
|
if $rows != 100 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select sum(c2),c8,avg(c2), sum(c2)/count(*) from group_mt0 group by c8 slimit 2 soffset 99
|
sql select sum(c2),c8,avg(c2), sum(c2)/count(*) from group_mt0 partition by c8 order by c8 slimit 2 soffset 99
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -531,7 +498,7 @@ if $data03 != 99.000000000 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ============>td-1765
|
print ============>td-1765
|
||||||
sql select percentile(c4, 49),min(c4),max(c4),avg(c4),stddev(c4) from group_tb0 group by c8;
|
sql select percentile(c4, 49),min(c4),max(c4),avg(c4),stddev(c4) from group_tb0 group by c8 order by c8;
|
||||||
if $rows != 100 then
|
if $rows != 100 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -577,7 +544,7 @@ if $data14 != 2886.607004772 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ================>td-2090
|
print ================>td-2090
|
||||||
sql select leastsquares(c2, 1, 1) from group_tb1 group by c8;
|
sql select leastsquares(c2, 1, 1) from group_tb1 group by c8 order by c8;;
|
||||||
if $rows != 100 then
|
if $rows != 100 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -607,13 +574,13 @@ print =================>TD-2665
|
||||||
sql_error create table txx as select avg(c) as t from st;
|
sql_error create table txx as select avg(c) as t from st;
|
||||||
sql_error create table txx1 as select avg(c) as t from t1;
|
sql_error create table txx1 as select avg(c) as t from t1;
|
||||||
|
|
||||||
sql select stddev(c),stddev(c) from st group by c;
|
sql select stddev(c),stddev(c) from st group by c order by c;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print =================>TD-2236
|
print =================>TD-2236
|
||||||
sql select first(ts),last(ts) from t1 group by c;
|
sql select first(ts),last(ts) from t1 group by c order by c;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -651,7 +618,7 @@ if $data31 != @20-03-27 05:10:19.000@ then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ===============>
|
print ===============>
|
||||||
sql select stddev(c),c from st where t2=1 or t2=2 group by c;
|
sql select stddev(c),c from st where t2=1 or t2=2 group by c order by c;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -689,14 +656,11 @@ if $data31 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql_error select irate(c) from st where t1="1" and ts >= '2020-03-27 04:11:17.732' and ts < '2020-03-27 05:11:17.732' interval(1m) sliding(15s) group by tbname,c;
|
sql_error select irate(c) from st where t1="1" and ts >= '2020-03-27 04:11:17.732' and ts < '2020-03-27 05:11:17.732' interval(1m) sliding(15s) group by tbname,c;
|
||||||
sql select irate(c) from st where t1="1" and ts >= '2020-03-27 04:11:17.732' and ts < '2020-03-27 05:11:17.732' interval(1m) sliding(15s) group by tbname,t1,t2;
|
sql select _wstart, irate(c), tbname, t1, t2 from st where t1=1 and ts >= '2020-03-27 04:11:17.732' and ts < '2020-03-27 05:11:17.732' partition by tbname,t1,t2 interval(1m) sliding(15s) order by tbname;
|
||||||
if $rows != 40 then
|
if $rows != 40 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data01 != 1.000000000 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data02 != t1 then
|
if $data02 != t1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -707,9 +671,6 @@ if $data04 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data11 != 1.000000000 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data12 != t1 then
|
if $data12 != t1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -720,21 +681,21 @@ if $data14 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select irate(c) from st where t1="1" and ts >= '2020-03-27 04:11:17.732' and ts < '2020-03-27 05:11:17.732' interval(1m) sliding(15s) group by tbname,t1,t2 limit 1;
|
sql select _wstart, irate(c), tbname, t1, t2 from st where t1=1 and ts >= '2020-03-27 04:11:17.732' and ts < '2020-03-27 05:11:17.732' partition by tbname, t1, t2 interval(1m) sliding(15s) order by tbname desc limit 1;
|
||||||
if $rows != 2 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data11 != 1.000000000 then
|
if $data01 != 1.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data12 != t2 then
|
if $data02 != t2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data13 != 1 then
|
if $data03 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data14 != 2 then
|
if $data04 != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -748,16 +709,12 @@ sql insert into tm1 values('2020-2-1 1:1:1', 2, 10);
|
||||||
sql insert into tm1 values('2020-2-1 1:1:2', 2, 20);
|
sql insert into tm1 values('2020-2-1 1:1:2', 2, 20);
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
sleep 100
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
sleep 100
|
|
||||||
|
|
||||||
sql connect
|
sql connect
|
||||||
sleep 100
|
|
||||||
sql use group_db0;
|
sql use group_db0;
|
||||||
|
|
||||||
print =========================>TD-4894
|
print =========================>TD-4894
|
||||||
sql select count(*),k from m1 group by k;
|
sql select count(*),k from m1 group by k order by k;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -778,14 +735,13 @@ if $data11 != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql_error select count(*) from m1 group by tbname,k,f1;
|
sql select count(*) from m1 group by tbname,k,f1;
|
||||||
sql_error select count(*) from m1 group by tbname,k,a;
|
sql select count(*) from m1 group by tbname,k,a;
|
||||||
sql_error select count(*) from m1 group by k, tbname;
|
sql select count(*) from m1 group by k, tbname;
|
||||||
sql_error select count(*) from m1 group by k,f1;
|
sql select count(*) from m1 group by k,f1;
|
||||||
sql_error select count(*) from tm0 group by tbname;
|
sql select count(*) from tm0 group by tbname;
|
||||||
sql_error select count(*) from tm0 group by a;
|
sql select count(*) from tm0 group by a;
|
||||||
sql_error select count(*) from tm0 group by k,f1;
|
sql select count(*) from tm0 group by k,f1;
|
||||||
|
|
||||||
sql_error select count(*),f1 from m1 group by tbname,k;
|
sql_error select count(*),f1 from m1 group by tbname,k;
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
|
|
@ -27,7 +27,7 @@ sql insert into tb1 values (now+100s,4,4.0,4.0,4,4,4,true ,"4","4")
|
||||||
sql insert into tb1 values (now+150s,4,4.0,4.0,4,4,4,false,"4","4")
|
sql insert into tb1 values (now+150s,4,4.0,4.0,4,4,4,false,"4","4")
|
||||||
|
|
||||||
|
|
||||||
sql select count(*),f1 from tb1 group by f1 having count(f1) > 0;
|
sql select count(*),f1 from tb1 group by f1 having count(f1) > 0 order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -57,7 +57,7 @@ if $data31 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
||||||
sql select count(*),f1 from tb1 group by f1 having count(*) > 0;
|
sql select count(*),f1 from tb1 group by f1 having count(*) > 0 order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -86,8 +86,7 @@ if $data31 != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
sql select count(*),f1 from tb1 group by f1 having count(f2) > 0 order by f1;
|
||||||
sql select count(*),f1 from tb1 group by f1 having count(f2) > 0;
|
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -118,7 +117,7 @@ endi
|
||||||
|
|
||||||
sql_error select top(f1,2) from tb1 group by f1 having count(f2) > 0;
|
sql_error select top(f1,2) from tb1 group by f1 having count(f2) > 0;
|
||||||
|
|
||||||
sql select last(f1) from tb1 group by f1 having count(f2) > 0;
|
sql select last(f1) from tb1 group by f1 having count(f2) > 0 order by f1;;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -141,7 +140,7 @@ sql_error select top(f1,2) from tb1 group by f1 having count(f2) > 0;
|
||||||
|
|
||||||
sql_error select top(f1,2) from tb1 group by f1 having avg(f1) > 0;
|
sql_error select top(f1,2) from tb1 group by f1 having avg(f1) > 0;
|
||||||
|
|
||||||
sql select avg(f1),count(f1) from tb1 group by f1 having avg(f1) > 2;
|
sql select avg(f1),count(f1) from tb1 group by f1 having avg(f1) > 2 order by f1;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -158,8 +157,7 @@ if $data11 != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
sql select avg(f1),count(f1) from tb1 group by f1 having avg(f1) > 2 and sum(f1) > 0 order by f1;
|
||||||
sql select avg(f1),count(f1) from tb1 group by f1 having avg(f1) > 2 and sum(f1) > 0;
|
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -176,7 +174,7 @@ if $data11 != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having avg(f1) > 2 and sum(f1) > 0;
|
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having avg(f1) > 2 and sum(f1) > 0 order by f1;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -199,7 +197,7 @@ if $data12 != 8 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having avg(f1) > 2;
|
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having avg(f1) > 2 order by f1;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -222,7 +220,7 @@ if $data12 != 8 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 0;
|
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 0 order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -263,7 +261,7 @@ if $data32 != 8 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 2 and sum(f1) < 6;
|
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 2 and sum(f1) < 6 order by f1;
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -278,7 +276,7 @@ if $data02 != 4 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
||||||
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having 1 <= sum(f1) and 5 >= sum(f1);
|
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having 1 <= sum(f1) and 5 >= sum(f1) order by f1;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -309,7 +307,7 @@ sql_error select avg(f1),count(f1),sum(f1),twa(f1) from tb1 group by tbname havi
|
||||||
|
|
||||||
sql_error select avg(f1),count(f1),sum(f1),twa(f1) from tb1 group by f1 having sum(f1) = 4;
|
sql_error select avg(f1),count(f1),sum(f1),twa(f1) from tb1 group by f1 having sum(f1) = 4;
|
||||||
|
|
||||||
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 0;
|
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 0 order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -350,7 +348,7 @@ if $data32 != 8 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 3;
|
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 3 order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -383,7 +381,7 @@ if $data22 != 8 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
###########and issue
|
###########and issue
|
||||||
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 3 and sum(f1) > 1;
|
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 3 and sum(f1) > 1 order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -425,7 +423,7 @@ if $data32 != 8 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
||||||
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 3 or sum(f1) > 1;
|
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 3 or sum(f1) > 1 order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -466,7 +464,7 @@ if $data32 != 8 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 3 or sum(f1) > 4;
|
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 3 or sum(f1) > 4 order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -499,12 +497,12 @@ if $data22 != 8 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
############or issue
|
############or issue
|
||||||
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 3 or avg(f1) > 4;
|
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having sum(f1) > 3 or avg(f1) > 4 order by f1;
|
||||||
if $rows != 0 then
|
if $rows != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having (sum(f1) > 3);
|
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having (sum(f1) > 3) order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -538,7 +536,7 @@ endi
|
||||||
|
|
||||||
sql_error select avg(f1),count(f1),sum(f1) from tb1 group by f1 having (sum(*) > 3);
|
sql_error select avg(f1),count(f1),sum(f1) from tb1 group by f1 having (sum(*) > 3);
|
||||||
|
|
||||||
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having (sum(tb1.f1) > 3);
|
sql select avg(f1),count(f1),sum(f1) from tb1 group by f1 having (sum(tb1.f1) > 3) order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -570,7 +568,7 @@ if $data22 != 8 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(tb1.*),sum(f1) from tb1 group by f1 having (sum(tb1.f1) > 3);
|
sql select avg(f1),count(tb1.*),sum(f1) from tb1 group by f1 having (sum(tb1.f1) > 3) order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -602,7 +600,7 @@ if $data22 != 8 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),stddev(f1) from tb1 group by f1;
|
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),stddev(f1) from tb1 group by f1 order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -667,12 +665,12 @@ if $data34 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1) from tb1 group by f1 having (stddev(tb1.f1) > 3);
|
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1) from tb1 group by f1 having (stddev(tb1.f1) > 3) order by f1;
|
||||||
if $rows != 0 then
|
if $rows != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1) from tb1 group by f1 having (stddev(tb1.f1) < 1);
|
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1) from tb1 group by f1 having (stddev(tb1.f1) < 1) order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -736,7 +734,7 @@ sql_error select avg(f1),count(tb1.*),sum(f1),stddev(f1) from tb1 group by f1 ha
|
||||||
|
|
||||||
sql_error select avg(f1),count(tb1.*),sum(f1),stddev(f1),LEASTSQUARES(f1,1,1) from tb1 group by f1 having LEASTSQUARES(f1,1,1) > 2;
|
sql_error select avg(f1),count(tb1.*),sum(f1),stddev(f1),LEASTSQUARES(f1,1,1) from tb1 group by f1 having LEASTSQUARES(f1,1,1) > 2;
|
||||||
|
|
||||||
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),LEASTSQUARES(f1,1,1) from tb1 group by f1 having sum(f1) > 2;
|
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),LEASTSQUARES(f1,1,1) from tb1 group by f1 having sum(f1) > 2 order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -777,7 +775,7 @@ if $data23 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1) from tb1 group by f1 having min(f1) > 2;
|
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1) from tb1 group by f1 having min(f1) > 2 order by f1;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -806,7 +804,7 @@ if $data13 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),min(f1) from tb1 group by f1 having min(f1) > 2;
|
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),min(f1) from tb1 group by f1 having min(f1) > 2 order by f1;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -841,7 +839,7 @@ if $data14 != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),min(f1) from tb1 group by f1 having max(f1) > 2;
|
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),min(f1) from tb1 group by f1 having max(f1) > 2 order by f1;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -876,7 +874,7 @@ if $data14 != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),min(f1),max(f1) from tb1 group by f1 having max(f1) != 2;
|
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),min(f1),max(f1) from tb1 group by f1 having max(f1) != 2 order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -935,7 +933,7 @@ if $data25 != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),min(f1),max(f1) from tb1 group by f1 having first(f1) != 2;
|
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),min(f1),max(f1) from tb1 group by f1 having first(f1) != 2 order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -996,7 +994,7 @@ endi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),min(f1),max(f1),first(f1) from tb1 group by f1 having first(f1) != 2;
|
sql select avg(f1),count(tb1.*),sum(f1),stddev(f1),min(f1),max(f1),first(f1) from tb1 group by f1 having first(f1) != 2 order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1078,7 +1076,7 @@ sql_error select avg(f1),count(tb1.*),sum(f1),stddev(f1),min(f1),max(f1),first(f
|
||||||
|
|
||||||
sql_error select PERCENTILE(f1) from tb1 group by f1 having sum(f1) > 1;
|
sql_error select PERCENTILE(f1) from tb1 group by f1 having sum(f1) > 1;
|
||||||
|
|
||||||
sql select PERCENTILE(f1,20) from tb1 group by f1 having sum(f1) = 4;
|
sql select PERCENTILE(f1,20) from tb1 group by f1 having sum(f1) = 4 order by f1;
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1086,7 +1084,7 @@ if $data00 != 2.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select aPERCENTILE(f1,20) from tb1 group by f1 having sum(f1) > 1;
|
sql select aPERCENTILE(f1,20) from tb1 group by f1 having sum(f1) > 1 order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1103,7 +1101,7 @@ if $data30 != 4.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select aPERCENTILE(f1,20) from tb1 group by f1 having apercentile(f1,1) > 1;
|
sql select aPERCENTILE(f1,20) from tb1 group by f1 having apercentile(f1,1) > 1 order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1117,7 +1115,7 @@ if $data20 != 4.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select aPERCENTILE(f1,20) from tb1 group by f1 having apercentile(f1,1) > 1 and apercentile(f1,1) < 50;
|
sql select aPERCENTILE(f1,20) from tb1 group by f1 having apercentile(f1,1) > 1 and apercentile(f1,1) < 50 order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1131,7 +1129,7 @@ if $data20 != 4.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select aPERCENTILE(f1,20) from tb1 group by f1 having apercentile(f1,1) > 1 and apercentile(f1,1) < 3;
|
sql select aPERCENTILE(f1,20) from tb1 group by f1 having apercentile(f1,1) > 1 and apercentile(f1,1) < 3 order by f1;
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1139,7 +1137,7 @@ if $data00 != 2.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select aPERCENTILE(f1,20) from tb1 group by f1 having apercentile(f1,1) > 1 and apercentile(f1,3) < 3;
|
sql select aPERCENTILE(f1,20) from tb1 group by f1 having apercentile(f1,1) > 1 and apercentile(f1,3) < 3 order by f1;
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1161,12 +1159,12 @@ sql_error select avg(f1),diff(f1) from tb1 group by f1 having avg(f1) > 0;
|
||||||
|
|
||||||
sql_error select avg(f1),diff(f1) from tb1 group by f1 having spread(f2) > 0;
|
sql_error select avg(f1),diff(f1) from tb1 group by f1 having spread(f2) > 0;
|
||||||
|
|
||||||
sql select avg(f1) from tb1 group by f1 having spread(f2) > 0;
|
sql select avg(f1) from tb1 group by f1 having spread(f2) > 0 order by f1;
|
||||||
if $rows != 0 then
|
if $rows != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1) from tb1 group by f1 having spread(f2) = 0;
|
sql select avg(f1) from tb1 group by f1 having spread(f2) = 0 order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1183,7 +1181,7 @@ if $data30 != 4.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f2) from tb1 group by f1;
|
sql select avg(f1),spread(f2) from tb1 group by f1 order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1212,7 +1210,7 @@ if $data31 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having spread(f1) = 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having spread(f1) = 0 order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1265,7 +1263,7 @@ if $data33 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having spread(f1) != 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having spread(f1) != 0 order by f1;
|
||||||
if $rows != 0 then
|
if $rows != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1301,12 +1299,12 @@ sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having spread
|
||||||
|
|
||||||
sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having spread(f1) > id1 and sum(f1) > 1;
|
sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having spread(f1) > id1 and sum(f1) > 1;
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having spread(f1) > 2 and sum(f1) > 1;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having spread(f1) > 2 and sum(f1) > 1 order by f1;
|
||||||
if $rows != 0 then
|
if $rows != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having spread(f1) = 0 and sum(f1) > 1;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having spread(f1) = 0 and sum(f1) > 1 order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1359,7 +1357,7 @@ if $data33 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having spread(f1) = 0 and avg(f1) > 1;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having spread(f1) = 0 and avg(f1) > 1 order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1410,7 +1408,7 @@ sql_error select avg(f1),spread(f1,f2,tb1.f1),avg(id1) from tb1 group by id1 hav
|
||||||
|
|
||||||
sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by id1 having avg(f1) > 0;
|
sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by id1 having avg(f1) > 0;
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having avg(f1) > 0 and avg(f1) = 3;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having avg(f1) > 0 and avg(f1) = 3 order by f1;
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1430,7 +1428,7 @@ endi
|
||||||
#sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having avg(f1) < 0 and avg(f1) = 3;
|
#sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by f1 having avg(f1) < 0 and avg(f1) = 3;
|
||||||
sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by id1 having avg(f1) < 2;
|
sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 group by id1 having avg(f1) < 2;
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f1 > 0 group by f1 having avg(f1) > 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f1 > 0 group by f1 having avg(f1) > 0 order by f1;
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1483,7 +1481,7 @@ if $data33 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f1 > 2 group by f1 having avg(f1) > 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f1 > 2 group by f1 having avg(f1) > 0 order by f1;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1512,7 +1510,7 @@ if $data13 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 2 group by f1 having avg(f1) > 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 2 group by f1 having avg(f1) > 0 order by f1;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1541,7 +1539,7 @@ if $data13 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f3 > 2 group by f1 having avg(f1) > 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f3 > 2 group by f1 having avg(f1) > 0 order by f1;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1570,7 +1568,7 @@ if $data13 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 3 group by f1 having avg(f1) > 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 3 group by f1 having avg(f1) > 0 order by f1;
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1595,7 +1593,7 @@ sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 3 group by f1
|
||||||
|
|
||||||
sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 3 group by f1 having avg(f9) > 0;
|
sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 3 group by f1 having avg(f9) > 0;
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 3 group by f1 having count(f9) > 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 3 group by f1 having count(f9) > 0 order by f1;
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1614,7 +1612,7 @@ endi
|
||||||
|
|
||||||
sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 3 group by f1 having last(f9) > 0;
|
sql_error select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 3 group by f1 having last(f9) > 0;
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 3 group by f1 having last(f2) > 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 3 group by f1 having last(f2) > 0 order by f1;
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1631,7 +1629,7 @@ if $data03 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 3 group by f1 having last(f3) > 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 3 group by f1 having last(f3) > 0 order by f1;
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1648,7 +1646,7 @@ if $data03 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 1 group by f1 having last(f3) > 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 1 group by f1 having last(f3) > 0 order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1689,7 +1687,7 @@ if $data23 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 1 group by f1 having last(f4) > 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 1 group by f1 having last(f4) > 0 order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1730,7 +1728,7 @@ if $data23 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 1 group by f1 having last(f5) > 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 1 group by f1 having last(f5) > 0 order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1771,7 +1769,7 @@ if $data23 != 0.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 1 group by f1 having last(f6) > 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 1 group by f1 having last(f6) > 0 order by f1;
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
@ -1823,7 +1821,7 @@ sql_error select avg(f1),spread(f1,f2,tb1.f1),f1,f6 from tb1 where f2 > 1 group
|
||||||
|
|
||||||
sql_error select avg(f1),spread(f1,f2,tb1.f1),f1,f6 from tb1 where f2 > 1 group by id1 having last(f6) > 0;
|
sql_error select avg(f1),spread(f1,f2,tb1.f1),f1,f6 from tb1 where f2 > 1 group by id1 having last(f6) > 0;
|
||||||
|
|
||||||
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 1 and f2 < 4 group by f1 having last(f6) > 0;
|
sql select avg(f1),spread(f1,f2,tb1.f1) from tb1 where f2 > 1 and f2 < 4 group by f1 having last(f6) > 0 order by f1;
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
|
@ -185,6 +185,7 @@ print ===> rows1: $data10 $data11 $data12 $data13 $data14
|
||||||
print ===> rows2: $data20 $data21 $data22 $data23 $data24
|
print ===> rows2: $data20 $data21 $data22 $data23 $data24
|
||||||
print ===> rows3: $data30 $data31 $data32 $data33 $data34
|
print ===> rows3: $data30 $data31 $data32 $data33 $data34
|
||||||
if $rows != 4 then
|
if $rows != 4 then
|
||||||
|
print expect 4, actual: $rows
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data00 != @21-12-08 00:00:00.000@ then
|
if $data00 != @21-12-08 00:00:00.000@ then
|
||||||
|
|
|
@ -43,7 +43,8 @@ sql select cast(1 as timestamp)+1n;
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data00 != @70-02-01 08:00:00.000@ then
|
if $data00 != @70-02-01 08:00:00.001@ then
|
||||||
|
print expect 70-02-01 08:00:00.001, actual: $data00
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -52,11 +53,13 @@ if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select cast(1 as timestamp)-1y;
|
# there is an *bug* in print timestamp that smaller than 0, so let's try value that is greater than 0.
|
||||||
|
sql select cast(1 as timestamp)+1y;
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data00 != @69-01-01 08:00:00.000@ then
|
if $data00 != @71-01-01 08:00:00.001@ then
|
||||||
|
print expect 71-01-01 08:00:00.001 , actual: $data00
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
|
@ -462,6 +462,113 @@ if $data25 != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
sql create database test2 vgroups 1
|
||||||
|
sql show databases
|
||||||
|
|
||||||
|
sql use test2
|
||||||
|
sql create stable st(ts timestamp, a int, b int, c int, d double) tags(ta int,tb int,tc int);
|
||||||
|
sql create table t1 using st tags(1,1,1);
|
||||||
|
sql create table t2 using st tags(2,2,2);
|
||||||
|
sql create table t3 using st tags(2,2,2);
|
||||||
|
sql create table t4 using st tags(2,2,2);
|
||||||
|
sql create table t5 using st tags(2,2,2);
|
||||||
|
sql create stream streams2 trigger at_once into streamt as select _wstart, count(*) c1, sum(a) c3,max(b) c4 from st partition by tbname interval(10s)
|
||||||
|
|
||||||
|
sql insert into t1 values(1648791213000,1,1,1,1.0) t2 values(1648791213000,2,2,2,2.0) t3 values(1648791213000,3,3,3,3.0) t4 values(1648791213000,4,4,4,4.0);
|
||||||
|
|
||||||
|
$loop_count = 0
|
||||||
|
|
||||||
|
loop0:
|
||||||
|
sleep 300
|
||||||
|
|
||||||
|
$loop_count = $loop_count + 1
|
||||||
|
if $loop_count == 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select * from streamt;
|
||||||
|
|
||||||
|
if $rows != 4 then
|
||||||
|
print =====rows=$rows
|
||||||
|
goto loop0
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql insert into t1 values(1648791213000,5,5,5,5.0) t2 values(1648791213000,6,6,6,6.0) t5 values(1648791213000,7,7,7,7.0);
|
||||||
|
|
||||||
|
|
||||||
|
$loop_count = 0
|
||||||
|
|
||||||
|
loop1:
|
||||||
|
sleep 300
|
||||||
|
|
||||||
|
$loop_count = $loop_count + 1
|
||||||
|
if $loop_count == 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select * from streamt order by c4 desc;
|
||||||
|
|
||||||
|
if $rows != 5 then
|
||||||
|
print =====rows=$rows
|
||||||
|
goto loop1
|
||||||
|
endi
|
||||||
|
|
||||||
|
# row 0
|
||||||
|
if $data01 != 1 then
|
||||||
|
print =====data01=$data01
|
||||||
|
goto loop1
|
||||||
|
endi
|
||||||
|
|
||||||
|
if $data02 != 7 then
|
||||||
|
print =====data02=$data02
|
||||||
|
goto loop1
|
||||||
|
endi
|
||||||
|
|
||||||
|
# row 1
|
||||||
|
if $data11 != 1 then
|
||||||
|
print =====data11=$data11
|
||||||
|
goto loop1
|
||||||
|
endi
|
||||||
|
|
||||||
|
if $data12 != 6 then
|
||||||
|
print =====data12=$data12
|
||||||
|
goto loop1
|
||||||
|
endi
|
||||||
|
|
||||||
|
# row 2
|
||||||
|
if $data21 != 1 then
|
||||||
|
print =====data21=$data21
|
||||||
|
goto loop1
|
||||||
|
endi
|
||||||
|
|
||||||
|
if $data22 != 5 then
|
||||||
|
print =====data22=$data22
|
||||||
|
goto loop1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql insert into t1 values(1648791213000,8,8,8,8.0);
|
||||||
|
|
||||||
|
$loop_count = 0
|
||||||
|
|
||||||
|
loop2:
|
||||||
|
sleep 300
|
||||||
|
|
||||||
|
$loop_count = $loop_count + 1
|
||||||
|
if $loop_count == 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select * from streamt order by c4 desc;
|
||||||
|
|
||||||
|
# row 0
|
||||||
|
if $data01 != 1 then
|
||||||
|
print =====data01=$data01
|
||||||
|
goto loop2
|
||||||
|
endi
|
||||||
|
|
||||||
|
if $data02 != 8 then
|
||||||
|
print =====data02=$data02
|
||||||
|
goto loop2
|
||||||
|
endi
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
|
|
@ -366,18 +366,21 @@ if $data32 != 8 then
|
||||||
goto loop1
|
goto loop1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
#$loop_all = 0
|
||||||
|
#looptest:
|
||||||
|
|
||||||
sql drop database IF EXISTS test2;
|
sql drop database IF EXISTS test2;
|
||||||
sql drop stream IF EXISTS streams21;
|
sql drop stream IF EXISTS streams21;
|
||||||
sql drop stream IF EXISTS streams22;
|
sql drop stream IF EXISTS streams22;
|
||||||
|
|
||||||
sql create database test2 vgroups 2;
|
sql create database test2 vgroups 6;
|
||||||
sql use test2;
|
sql use test2;
|
||||||
sql create stable st(ts timestamp, a int, b int, c int, d double) tags(ta int,tb int,tc int);
|
sql create stable st(ts timestamp, a int, b int, c int, d double) tags(ta int,tb int,tc int);
|
||||||
sql create table t1 using st tags(1,1,1);
|
sql create table t1 using st tags(1,1,1);
|
||||||
sql create table t2 using st tags(2,2,2);
|
sql create table t2 using st tags(2,2,2);
|
||||||
|
|
||||||
sql create stream streams21 trigger at_once into streamt as select _wstart, count(*) c1, sum(a) c3 , max(b) c4, min(c) c5 from t1 interval(10s);
|
sql create stream streams21 trigger at_once into streamt as select _wstart, count(*) c1, sum(a) c3 , max(b) c4, min(c) c5 from t1 interval(10s, 5s);
|
||||||
sql create stream streams22 trigger at_once into streamt2 as select _wstart, count(*) c1, sum(a) c3 , max(b) c4, min(c) c5 from st interval(10s);
|
sql create stream streams22 trigger at_once into streamt2 as select _wstart, count(*) c1, sum(a) c3 , max(b) c4, min(c) c5 from st interval(10s, 5s);
|
||||||
|
|
||||||
sql insert into t1 values(1648791213000,1,1,1,1.0);
|
sql insert into t1 values(1648791213000,1,1,1,1.0);
|
||||||
sql insert into t1 values(1648791223001,2,2,2,1.1);
|
sql insert into t1 values(1648791223001,2,2,2,1.1);
|
||||||
|
@ -394,7 +397,7 @@ sql insert into t2 values(1648791213004,4,10,10,4.1);
|
||||||
$loop_count = 0
|
$loop_count = 0
|
||||||
|
|
||||||
loop2:
|
loop2:
|
||||||
sleep 300
|
sleep 100
|
||||||
|
|
||||||
$loop_count = $loop_count + 1
|
$loop_count = $loop_count + 1
|
||||||
if $loop_count == 10 then
|
if $loop_count == 10 then
|
||||||
|
@ -452,7 +455,7 @@ print step 6
|
||||||
$loop_count = 0
|
$loop_count = 0
|
||||||
|
|
||||||
loop3:
|
loop3:
|
||||||
sleep 300
|
# sleep 300
|
||||||
|
|
||||||
$loop_count = $loop_count + 1
|
$loop_count = $loop_count + 1
|
||||||
if $loop_count == 10 then
|
if $loop_count == 10 then
|
||||||
|
@ -464,7 +467,7 @@ sql select * from streamt2;
|
||||||
# row 0
|
# row 0
|
||||||
if $data01 != 4 then
|
if $data01 != 4 then
|
||||||
print =====data01=$data01
|
print =====data01=$data01
|
||||||
# goto loop3
|
goto loop3
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data02 != 10 then
|
if $data02 != 10 then
|
||||||
|
@ -505,4 +508,9 @@ if $data32 != 8 then
|
||||||
goto loop3
|
goto loop3
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
$loop_all = $loop_all + 1
|
||||||
|
print ============loop_all=$loop_all
|
||||||
|
|
||||||
|
#goto looptest
|
||||||
|
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
|
@ -1,6 +1,5 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c debugflag -v 131
|
|
||||||
system sh/exec.sh -n dnode1 -s start -v
|
system sh/exec.sh -n dnode1 -s start -v
|
||||||
sql connect
|
sql connect
|
||||||
|
|
||||||
|
@ -23,65 +22,87 @@ if $data(1)[4] != ready then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print =============== step2: create db
|
print =============== step2: create db
|
||||||
sql create database d1 vgroups 2 buffer 3
|
sql create database db
|
||||||
sql show databases
|
sql use db
|
||||||
sql use d1
|
sql create table db.stb (ts timestamp, c1 int, c2 binary(4)) tags(t1 int, t2 float, t3 binary(16)) comment "abd"
|
||||||
sql show vgroups
|
sql create table db.c1 using db.stb tags(101, 102, "103")
|
||||||
|
|
||||||
print =============== step3: create show stable
|
print =============== step3: alter stb
|
||||||
sql create table if not exists stb (ts timestamp, c1 int, c2 float, c3 double) tags (t1 int unsigned)
|
sql_error alter table db.stb add column ts int
|
||||||
sql show stables
|
sql alter table db.stb add column c3 int
|
||||||
if $rows != 1 then
|
sql alter table db.stb add column c4 bigint
|
||||||
return -1
|
sql alter table db.stb add column c5 binary(12)
|
||||||
endi
|
sql alter table db.stb drop column c1
|
||||||
|
sql alter table db.stb drop column c4
|
||||||
|
sql alter table db.stb MODIFY column c2 binary(32)
|
||||||
|
sql alter table db.stb add tag t4 bigint
|
||||||
|
sql alter table db.stb add tag c1 int
|
||||||
|
sql alter table db.stb add tag t5 binary(12)
|
||||||
|
sql alter table db.stb drop tag c1
|
||||||
|
sql alter table db.stb drop tag t5
|
||||||
|
sql alter table db.stb MODIFY tag t3 binary(32)
|
||||||
|
sql alter table db.stb rename tag t1 tx
|
||||||
|
sql alter table db.stb comment 'abcde' ;
|
||||||
|
sql drop table db.stb
|
||||||
|
|
||||||
print =============== step4: create show table
|
print =============== step4: alter tb
|
||||||
sql create table ct1 using stb tags(1000)
|
sql create table tb (ts timestamp, a int)
|
||||||
sql create table ct2 using stb tags(2000)
|
sql insert into tb values(now-28d, -28)
|
||||||
sql create table ct3 using stb tags(3000)
|
sql select count(a) from tb
|
||||||
sql show tables
|
sql alter table tb add column b smallint
|
||||||
if $rows != 3 then
|
sql insert into tb values(now-25d, -25, 0)
|
||||||
return -1
|
sql select count(b) from tb
|
||||||
endi
|
sql alter table tb add column c tinyint
|
||||||
|
sql insert into tb values(now-22d, -22, 3, 0)
|
||||||
|
sql select count(c) from tb
|
||||||
|
sql alter table tb add column d int
|
||||||
|
sql insert into tb values(now-19d, -19, 6, 0, 0)
|
||||||
|
sql select count(d) from tb
|
||||||
|
sql alter table tb add column e bigint
|
||||||
|
sql alter table tb add column f float
|
||||||
|
sql alter table tb add column g double
|
||||||
|
sql alter table tb add column h binary(10)
|
||||||
|
sql select count(a), count(b), count(c), count(d), count(e), count(f), count(g), count(h) from tb
|
||||||
|
sql select * from tb order by ts desc
|
||||||
|
|
||||||
print =============== step5: insert data
|
print =============== step5: alter stb and insert data
|
||||||
sql insert into ct1 values(now+0s, 10, 2.0, 3.0)
|
sql create table stb (ts timestamp, c1 int, c2 binary(4)) tags(t1 int, t2 float, t3 binary(16)) comment "abd"
|
||||||
sql insert into ct1 values(now+1s, 11, 2.1, 3.1)(now+2s, -12, -2.2, -3.2)(now+3s, -13, -2.3, -3.3)
|
sql show db.stables
|
||||||
sql insert into ct2 values(now+0s, 10, 2.0, 3.0)
|
sql describe stb
|
||||||
sql insert into ct2 values(now+1s, 11, 2.1, 3.1)(now+2s, -12, -2.2, -3.2)(now+3s, -13, -2.3, -3.3)
|
sql_error alter table stb add column ts int
|
||||||
sql insert into ct3 values('2021-01-01 00:00:00.000', 10, 2.0, 3.0)
|
|
||||||
|
sql create table db.ctb using db.stb tags(101, 102, "103")
|
||||||
|
sql insert into db.ctb values(now, 1, "2")
|
||||||
|
sql show db.tables
|
||||||
|
sql select * from db.stb
|
||||||
|
sql select * from tb
|
||||||
|
|
||||||
|
sql alter table stb add column c3 int
|
||||||
|
sql describe stb
|
||||||
|
sql select * from db.stb
|
||||||
|
sql select * from tb
|
||||||
|
sql insert into db.ctb values(now+1s, 1, 2, 3)
|
||||||
|
sql select * from db.stb
|
||||||
|
|
||||||
|
sql alter table db.stb add column c4 bigint
|
||||||
|
sql select * from db.stb
|
||||||
|
sql insert into db.ctb values(now+2s, 1, 2, 3, 4)
|
||||||
|
|
||||||
|
sql alter table db.stb drop column c1
|
||||||
|
sql reset query cache
|
||||||
|
sql select * from tb
|
||||||
|
sql insert into db.ctb values(now+3s, 2, 3, 4)
|
||||||
|
sql select * from db.stb
|
||||||
|
|
||||||
|
sql alter table db.stb add tag t4 bigint
|
||||||
|
sql select * from db.stb
|
||||||
|
sql select * from db.stb
|
||||||
|
sql_error create table db.ctb2 using db.stb tags(101, "102")
|
||||||
|
sql create table db.ctb2 using db.stb tags(101, 102, "103", 104)
|
||||||
|
sql insert into db.ctb2 values(now, 1, 2, 3)
|
||||||
|
|
||||||
print =============== step6: query data
|
print =============== step6: query data
|
||||||
sql select * from ct1
|
sql select * from db.stb where tbname = 'ctb2';
|
||||||
sql select * from stb
|
|
||||||
sql select c1, c2, c3 from ct1
|
|
||||||
sql select ts, c1, c2, c3 from stb
|
|
||||||
|
|
||||||
print =============== step7: count
|
|
||||||
sql select count(*) from ct1;
|
|
||||||
sql select count(*) from stb;
|
|
||||||
sql select count(ts), count(c1), count(c2), count(c3) from ct1
|
|
||||||
sql select count(ts), count(c1), count(c2), count(c3) from stb
|
|
||||||
|
|
||||||
print =============== step8: func
|
|
||||||
sql select first(ts), first(c1), first(c2), first(c3) from ct1
|
|
||||||
sql select min(c1), min(c2), min(c3) from ct1
|
|
||||||
sql select max(c1), max(c2), max(c3) from ct1
|
|
||||||
sql select sum(c1), sum(c2), sum(c3) from ct1
|
|
||||||
|
|
||||||
print =============== step9: insert select
|
|
||||||
sql create table ct4 using stb tags(4000);
|
|
||||||
sql insert into ct4 select * from ct1;
|
|
||||||
sql select * from ct4;
|
|
||||||
sql insert into ct4 select ts,c1,c2,c3 from stb;
|
|
||||||
|
|
||||||
sql create table tb1 (ts timestamp, c1 int, c2 float, c3 double);
|
|
||||||
sql insert into tb1 (ts, c1, c2, c3) select * from ct1;
|
|
||||||
sql select * from tb1;
|
|
||||||
|
|
||||||
sql create table tb2 (ts timestamp, f1 binary(10), c1 int, c2 double);
|
|
||||||
sql insert into tb2 (c2, c1, ts) select c2+1, c1, ts+3 from ct2;
|
|
||||||
sql select * from tb2;
|
|
||||||
|
|
||||||
_OVER:
|
_OVER:
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
@ -90,7 +111,7 @@ $null=
|
||||||
|
|
||||||
system_content sh/checkValgrind.sh -n dnode1
|
system_content sh/checkValgrind.sh -n dnode1
|
||||||
print cmd return result ----> [ $system_content ]
|
print cmd return result ----> [ $system_content ]
|
||||||
if $system_content > 1 then
|
if $system_content > 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c debugflag -v 131
|
|
||||||
system sh/exec.sh -n dnode1 -s start -v
|
system sh/exec.sh -n dnode1 -s start -v
|
||||||
sql connect
|
sql connect
|
||||||
|
|
||||||
|
@ -22,40 +21,43 @@ if $data(1)[4] != ready then
|
||||||
goto step1
|
goto step1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print =============== step2: create db
|
$tbPrefix = tb
|
||||||
sql create database d1 vgroups 2 buffer 3
|
$tbNum = 5
|
||||||
sql show databases
|
$rowNum = 10
|
||||||
sql use d1
|
|
||||||
sql show vgroups
|
|
||||||
|
|
||||||
print =============== step3: create show stable
|
print =============== step2: prepare data
|
||||||
sql create table if not exists stb (ts timestamp, c1 int, c2 float, c3 double) tags (t1 int unsigned)
|
sql create database db vgroups 2
|
||||||
sql show stables
|
sql use db
|
||||||
if $rows != 1 then
|
sql create table if not exists stb (ts timestamp, tbcol int, tbcol2 float, tbcol3 double) tags (tgcol int unsigned)
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
print =============== step4: create show table
|
$i = 0
|
||||||
sql create table ct1 using stb tags(1000)
|
while $i < $tbNum
|
||||||
sql create table ct2 using stb tags(2000)
|
$tb = $tbPrefix . $i
|
||||||
sql create table ct3 using stb tags(3000)
|
sql create table $tb using stb tags( $i )
|
||||||
sql show tables
|
$x = 0
|
||||||
if $rows != 3 then
|
while $x < $rowNum
|
||||||
return -1
|
$cc = $x * 60000
|
||||||
endi
|
$ms = 1601481600000 + $cc
|
||||||
|
sql insert into $tb values ($ms , $x , $x , $x )
|
||||||
|
$x = $x + 1
|
||||||
|
endw
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
print =============== step5: insert data
|
print =============== step3: avg
|
||||||
sql insert into ct1 values(now+0d, 10, 2.0, 3.0)
|
sql select avg(tbcol) from tb1
|
||||||
sql insert into ct1 values(now+1d, 11, 2.1, 3.1)(now+2d, -12, -2.2, -3.2)(now+3d, -13, -2.3, -3.3)
|
sql select avg(tbcol) from tb1 where ts <= 1601481840000
|
||||||
sql insert into ct2 values(now+0d, 10, 2.0, 3.0)
|
sql select avg(tbcol) as b from tb1
|
||||||
sql insert into ct2 values(now+1d, 11, 2.1, 3.1)(now+2d, -12, -2.2, -3.2)(now+3d, -13, -2.3, -3.3)
|
sql select avg(tbcol) as b from tb1 interval(1d)
|
||||||
sql insert into ct3 values('2022-01-01 00:00:00.000', 10, 2.0, 3.0)
|
sql select avg(tbcol) as b from tb1 where ts <= 1601481840000s interval(1m)
|
||||||
|
sql select avg(tbcol) as c from stb
|
||||||
print =============== step6: query data
|
sql select avg(tbcol) as c from stb where ts <= 1601481840000
|
||||||
sql select * from ct1 where ts < now -1d and ts > now +1d
|
sql select avg(tbcol) as c from stb where tgcol < 5 and ts <= 1601481840000
|
||||||
sql select * from stb where ts < now -1d and ts > now +1d
|
sql select avg(tbcol) as c from stb interval(1m)
|
||||||
sql select * from ct1 where ts < now -1d and ts > now +1d order by ts desc
|
sql select avg(tbcol) as c from stb interval(1d)
|
||||||
sql select * from stb where ts < now -1d and ts > now +1d order by ts desc
|
sql select avg(tbcol) as b from stb where ts <= 1601481840000s interval(1m)
|
||||||
|
sql select avg(tbcol) as c from stb group by tgcol
|
||||||
|
sql select avg(tbcol) as b from stb where ts <= 1601481840000s partition by tgcol interval(1m)
|
||||||
|
|
||||||
_OVER:
|
_OVER:
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
@ -64,7 +66,7 @@ $null=
|
||||||
|
|
||||||
system_content sh/checkValgrind.sh -n dnode1
|
system_content sh/checkValgrind.sh -n dnode1
|
||||||
print cmd return result ----> [ $system_content ]
|
print cmd return result ----> [ $system_content ]
|
||||||
if $system_content > 1 then
|
if $system_content > 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ $null=
|
||||||
|
|
||||||
system_content sh/checkValgrind.sh -n dnode1
|
system_content sh/checkValgrind.sh -n dnode1
|
||||||
print cmd return result ----> [ $system_content ]
|
print cmd return result ----> [ $system_content ]
|
||||||
if $system_content > 0 then
|
if $system_content > 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ $null=
|
||||||
|
|
||||||
system_content sh/checkValgrind.sh -n dnode1
|
system_content sh/checkValgrind.sh -n dnode1
|
||||||
print cmd return result ----> [ $system_content ]
|
print cmd return result ----> [ $system_content ]
|
||||||
if $system_content > 3 then
|
if $system_content > 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
|
@ -211,10 +211,10 @@ class TDTestCase:
|
||||||
for error in [constant.INT_UN_MIN-1,constant.INT_UN_MAX+1]:
|
for error in [constant.INT_UN_MIN-1,constant.INT_UN_MAX+1]:
|
||||||
tdSql.error(f'alter table {self.stbname}_{i} set tag {k} = {error}')
|
tdSql.error(f'alter table {self.stbname}_{i} set tag {k} = {error}')
|
||||||
#! bug TD-17106
|
#! bug TD-17106
|
||||||
# elif v.lower() == 'bigint unsigned':
|
elif v.lower() == 'bigint unsigned':
|
||||||
# self.tag_check(i,k,tag_unbigint)
|
self.tag_check(i,k,tag_unbigint)
|
||||||
# for error in [constant.BIGINT_UN_MIN-1,constant.BIGINT_UN_MAX+1]:
|
for error in [constant.BIGINT_UN_MIN-1,constant.BIGINT_UN_MAX+1]:
|
||||||
# tdSql.error(f'alter table {self.stbname}_{i} set tag {k} = {error}')
|
tdSql.error(f'alter table {self.stbname}_{i} set tag {k} = {error}')
|
||||||
elif v.lower() == 'bool':
|
elif v.lower() == 'bool':
|
||||||
self.tag_check(i,k,tag_bool)
|
self.tag_check(i,k,tag_bool)
|
||||||
elif v.lower() == 'float':
|
elif v.lower() == 'float':
|
||||||
|
@ -225,8 +225,8 @@ class TDTestCase:
|
||||||
else:
|
else:
|
||||||
tdLog.exit(f'select {k} from {self.stbname}_{i},data check failure')
|
tdLog.exit(f'select {k} from {self.stbname}_{i},data check failure')
|
||||||
#! bug TD-17106
|
#! bug TD-17106
|
||||||
# for error in [constant.FLOAT_MIN*1.1,constant.FLOAT_MAX*1.1]:
|
for error in [constant.FLOAT_MIN*1.1,constant.FLOAT_MAX*1.1]:
|
||||||
# tdSql.error(f'alter table {self.stbname}_{i} set tag {k} = {error}')
|
tdSql.error(f'alter table {self.stbname}_{i} set tag {k} = {error}')
|
||||||
elif v.lower() == 'double':
|
elif v.lower() == 'double':
|
||||||
tdSql.execute(f'alter table {self.stbname}_{i} set tag {k} = {tag_double}')
|
tdSql.execute(f'alter table {self.stbname}_{i} set tag {k} = {tag_double}')
|
||||||
tdSql.query(f'select {k} from {self.stbname}_{i}')
|
tdSql.query(f'select {k} from {self.stbname}_{i}')
|
||||||
|
|
|
@ -25,12 +25,13 @@ from util.sqlset import TDSetSql
|
||||||
class TDTestCase:
|
class TDTestCase:
|
||||||
def init(self, conn, logSql):
|
def init(self, conn, logSql):
|
||||||
tdLog.debug("start to execute %s" % __file__)
|
tdLog.debug("start to execute %s" % __file__)
|
||||||
tdSql.init(conn.cursor(),logSql)
|
tdSql.init(conn.cursor())
|
||||||
self.dbname = 'db_test'
|
self.dbname = 'db_test'
|
||||||
self.setsql = TDSetSql()
|
self.setsql = TDSetSql()
|
||||||
|
self.stbname = 'stb'
|
||||||
self.ntbname = 'ntb'
|
self.ntbname = 'ntb'
|
||||||
self.rowNum = 10
|
self.rowNum = 5
|
||||||
self.tbnum = 20
|
self.tbnum = 2
|
||||||
self.ts = 1537146000000
|
self.ts = 1537146000000
|
||||||
self.binary_str = 'taosdata'
|
self.binary_str = 'taosdata'
|
||||||
self.nchar_str = '涛思数据'
|
self.nchar_str = '涛思数据'
|
||||||
|
@ -51,6 +52,7 @@ class TDTestCase:
|
||||||
'col13': f'nchar({self.str_length})',
|
'col13': f'nchar({self.str_length})',
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self.tinyint_val = random.randint(constant.TINYINT_MIN,constant.TINYINT_MAX)
|
self.tinyint_val = random.randint(constant.TINYINT_MIN,constant.TINYINT_MAX)
|
||||||
self.smallint_val = random.randint(constant.SMALLINT_MIN,constant.SMALLINT_MAX)
|
self.smallint_val = random.randint(constant.SMALLINT_MIN,constant.SMALLINT_MAX)
|
||||||
self.int_val = random.randint(constant.INT_MIN,constant.INT_MAX)
|
self.int_val = random.randint(constant.INT_MIN,constant.INT_MAX)
|
||||||
|
@ -107,32 +109,50 @@ class TDTestCase:
|
||||||
tdSql.execute(f'''insert into {tbname} values({self.ts+i},"{base_data['binary']}")''')
|
tdSql.execute(f'''insert into {tbname} values({self.ts+i},"{base_data['binary']}")''')
|
||||||
elif 'nchar' in col_type.lower():
|
elif 'nchar' in col_type.lower():
|
||||||
tdSql.execute(f'''insert into {tbname} values({self.ts+i},"{base_data['nchar']}")''')
|
tdSql.execute(f'''insert into {tbname} values({self.ts+i},"{base_data['nchar']}")''')
|
||||||
|
def delete_all_data(self,tbname,col_type,row_num,base_data,dbname,tb_type,tb_num=1):
|
||||||
def delete_all_data(self,tbname,col_type,row_num,base_data,dbname):
|
|
||||||
tdSql.execute(f'delete from {tbname}')
|
tdSql.execute(f'delete from {tbname}')
|
||||||
tdSql.execute(f'flush database {dbname}')
|
tdSql.execute(f'flush database {dbname}')
|
||||||
tdSql.execute('reset query cache')
|
tdSql.execute('reset query cache')
|
||||||
tdSql.query(f'select * from {tbname}')
|
tdSql.query(f'select * from {tbname}')
|
||||||
tdSql.checkRows(0)
|
tdSql.checkRows(0)
|
||||||
self.insert_base_data(col_type,tbname,row_num,base_data)
|
if tb_type == 'ntb' or tb_type == 'ctb':
|
||||||
|
self.insert_base_data(col_type,tbname,row_num,base_data)
|
||||||
|
elif tb_type == 'stb':
|
||||||
|
for i in range(tb_num):
|
||||||
|
self.insert_base_data(col_type,f'{tbname}_{i}',row_num,base_data)
|
||||||
tdSql.execute(f'flush database {dbname}')
|
tdSql.execute(f'flush database {dbname}')
|
||||||
tdSql.execute('reset query cache')
|
tdSql.execute('reset query cache')
|
||||||
tdSql.query(f'select * from {tbname}')
|
tdSql.query(f'select * from {tbname}')
|
||||||
tdSql.checkRows(row_num)
|
if tb_type == 'ntb' or tb_type == 'ctb':
|
||||||
def delete_one_row(self,tbname,column_type,column_name,base_data,dbname):
|
tdSql.checkRows(row_num)
|
||||||
|
elif tb_type =='stb':
|
||||||
|
tdSql.checkRows(row_num*tb_num)
|
||||||
|
def delete_one_row(self,tbname,column_type,column_name,base_data,row_num,dbname,tb_type,tb_num=1):
|
||||||
tdSql.execute(f'delete from {tbname} where ts={self.ts}')
|
tdSql.execute(f'delete from {tbname} where ts={self.ts}')
|
||||||
tdSql.execute(f'flush database {dbname}')
|
tdSql.execute(f'flush database {dbname}')
|
||||||
tdSql.execute('reset query cache')
|
tdSql.execute('reset query cache')
|
||||||
tdSql.query(f'select {column_name} from {tbname}')
|
tdSql.query(f'select {column_name} from {tbname}')
|
||||||
tdSql.checkRows(self.rowNum-1)
|
if tb_type == 'ntb' or tb_type == 'ctb':
|
||||||
|
tdSql.checkRows(row_num-1)
|
||||||
|
elif tb_type == 'stb':
|
||||||
|
tdSql.checkRows((row_num-1)*tb_num)
|
||||||
tdSql.query(f'select {column_name} from {tbname} where ts={self.ts}')
|
tdSql.query(f'select {column_name} from {tbname} where ts={self.ts}')
|
||||||
tdSql.checkRows(0)
|
tdSql.checkRows(0)
|
||||||
if 'binary' in column_type.lower():
|
if tb_type == 'ntb' or tb_type == 'ctb':
|
||||||
tdSql.execute(f'''insert into {tbname} values({self.ts},"{base_data['binary']}")''')
|
if 'binary' in column_type.lower():
|
||||||
elif 'nchar' in column_type.lower():
|
tdSql.execute(f'''insert into {tbname} values({self.ts},"{base_data['binary']}")''')
|
||||||
tdSql.execute(f'''insert into {tbname} values({self.ts},"{base_data['nchar']}")''')
|
elif 'nchar' in column_type.lower():
|
||||||
else:
|
tdSql.execute(f'''insert into {tbname} values({self.ts},"{base_data['nchar']}")''')
|
||||||
tdSql.execute(f'insert into {tbname} values({self.ts},{base_data[column_type]})')
|
else:
|
||||||
|
tdSql.execute(f'insert into {tbname} values({self.ts},{base_data[column_type]})')
|
||||||
|
elif tb_type == 'stb':
|
||||||
|
for i in range(tb_num):
|
||||||
|
if 'binary' in column_type.lower():
|
||||||
|
tdSql.execute(f'''insert into {tbname}_{i} values({self.ts},"{base_data['binary']}")''')
|
||||||
|
elif 'nchar' in column_type.lower():
|
||||||
|
tdSql.execute(f'''insert into {tbname}_{i} values({self.ts},"{base_data['nchar']}")''')
|
||||||
|
else:
|
||||||
|
tdSql.execute(f'insert into {tbname}_{i} values({self.ts},{base_data[column_type]})')
|
||||||
tdSql.query(f'select {column_name} from {tbname} where ts={self.ts}')
|
tdSql.query(f'select {column_name} from {tbname} where ts={self.ts}')
|
||||||
if column_type.lower() == 'float' or column_type.lower() == 'double':
|
if column_type.lower() == 'float' or column_type.lower() == 'double':
|
||||||
if abs(tdSql.queryResult[0][0] - base_data[column_type]) / base_data[column_type] <= 0.0001:
|
if abs(tdSql.queryResult[0][0] - base_data[column_type]) / base_data[column_type] <= 0.0001:
|
||||||
|
@ -144,12 +164,56 @@ class TDTestCase:
|
||||||
elif 'nchar' in column_type.lower():
|
elif 'nchar' in column_type.lower():
|
||||||
tdSql.checkEqual(tdSql.queryResult[0][0],base_data['nchar'])
|
tdSql.checkEqual(tdSql.queryResult[0][0],base_data['nchar'])
|
||||||
else:
|
else:
|
||||||
tdSql.checkEqual(tdSql.queryResult[0][0],base_data[column_type])
|
tdSql.checkEqual(tdSql.queryResult[0][0],base_data[column_type])
|
||||||
|
def delete_rows(self,dbname,tbname,col_name,col_type,base_data,row_num,tb_type,tb_num=1):
|
||||||
def delete_rows(self):
|
for i in range(row_num):
|
||||||
|
tdSql.execute(f'delete from {tbname} where ts>{self.ts+i}')
|
||||||
|
tdSql.execute(f'flush database {dbname}')
|
||||||
pass
|
tdSql.execute('reset query cache')
|
||||||
|
tdSql.query(f'select {col_name} from {tbname}')
|
||||||
|
if tb_type == 'ntb' or tb_type == 'ctb':
|
||||||
|
tdSql.checkRows(i+1)
|
||||||
|
self.insert_base_data(col_type,tbname,row_num,base_data)
|
||||||
|
elif tb_type == 'stb':
|
||||||
|
tdSql.checkRows((i+1)*tb_num)
|
||||||
|
for j in range(tb_num):
|
||||||
|
self.insert_base_data(col_type,f'{tbname}_{j}',row_num,base_data)
|
||||||
|
for i in range(row_num):
|
||||||
|
tdSql.execute(f'delete from {tbname} where ts>={self.ts+i}')
|
||||||
|
tdSql.execute(f'flush database {dbname}')
|
||||||
|
tdSql.execute('reset query cache')
|
||||||
|
tdSql.query(f'select {col_name} from {tbname}')
|
||||||
|
if tb_type == 'ntb' or tb_type == 'ctb':
|
||||||
|
tdSql.checkRows(i)
|
||||||
|
self.insert_base_data(col_type,tbname,row_num,base_data)
|
||||||
|
elif tb_type == 'stb':
|
||||||
|
tdSql.checkRows(i*tb_num)
|
||||||
|
for j in range(tb_num):
|
||||||
|
self.insert_base_data(col_type,f'{tbname}_{j}',row_num,base_data)
|
||||||
|
for i in range(row_num):
|
||||||
|
tdSql.execute(f'delete from {tbname} where ts<={self.ts+i}')
|
||||||
|
tdSql.execute(f'flush database {dbname}')
|
||||||
|
tdSql.execute('reset query cache')
|
||||||
|
tdSql.query(f'select {col_name} from {tbname}')
|
||||||
|
if tb_type == 'ntb' or tb_type == 'ctb':
|
||||||
|
tdSql.checkRows(row_num-i-1)
|
||||||
|
self.insert_base_data(col_type,tbname,row_num,base_data)
|
||||||
|
elif tb_type == 'stb':
|
||||||
|
tdSql.checkRows((row_num-i-1)*tb_num)
|
||||||
|
for j in range(tb_num):
|
||||||
|
self.insert_base_data(col_type,f'{tbname}_{j}',row_num,base_data)
|
||||||
|
for i in range(row_num):
|
||||||
|
tdSql.execute(f'delete from {tbname} where ts<{self.ts+i}')
|
||||||
|
tdSql.execute(f'flush database {dbname}')
|
||||||
|
tdSql.execute('reset query cache')
|
||||||
|
tdSql.query(f'select {col_name} from {tbname}')
|
||||||
|
if tb_type == 'ntb' or tb_type == 'ctb':
|
||||||
|
tdSql.checkRows(row_num-i)
|
||||||
|
self.insert_base_data(col_type,tbname,row_num,base_data)
|
||||||
|
elif tb_type == 'stb':
|
||||||
|
tdSql.checkRows((row_num-i)*tb_num)
|
||||||
|
for j in range(tb_num):
|
||||||
|
self.insert_base_data(col_type,f'{tbname}_{j}',row_num,base_data)
|
||||||
def delete_error(self,tbname,column_name,column_type,base_data):
|
def delete_error(self,tbname,column_name,column_type,base_data):
|
||||||
for error_list in ['',f'ts = {self.ts} and',f'ts = {self.ts} or']:
|
for error_list in ['',f'ts = {self.ts} and',f'ts = {self.ts} or']:
|
||||||
if 'binary' in column_type.lower():
|
if 'binary' in column_type.lower():
|
||||||
|
@ -157,31 +221,56 @@ class TDTestCase:
|
||||||
elif 'nchar' in column_type.lower():
|
elif 'nchar' in column_type.lower():
|
||||||
tdSql.error(f'''delete from {tbname} where {error_list} {column_name} ="{base_data['nchar']}"''')
|
tdSql.error(f'''delete from {tbname} where {error_list} {column_name} ="{base_data['nchar']}"''')
|
||||||
else:
|
else:
|
||||||
tdSql.error('delete from {tbname} where {error_list} {column_name} = {base_data[column_type]}')
|
tdSql.error(f'delete from {tbname} where {error_list} {column_name} = {base_data[column_type]}')
|
||||||
|
|
||||||
def delete_data_ntb(self):
|
def delete_data_ntb(self):
|
||||||
tdSql.execute(f'create database if not exists {self.dbname}')
|
tdSql.execute(f'create database if not exists {self.dbname}')
|
||||||
tdSql.execute(f'use {self.dbname}')
|
tdSql.execute(f'use {self.dbname}')
|
||||||
for col_name,col_type in self.column_dict.items():
|
for col_name,col_type in self.column_dict.items():
|
||||||
tdSql.execute(f'create table {self.ntbname} (ts timestamp,{col_name} {col_type})')
|
tdSql.execute(f'create table {self.ntbname} (ts timestamp,{col_name} {col_type})')
|
||||||
self.insert_base_data(col_type,self.ntbname,self.rowNum,self.base_data)
|
self.insert_base_data(col_type,self.ntbname,self.rowNum,self.base_data)
|
||||||
self.delete_one_row(self.ntbname,col_type,col_name,self.base_data,self.dbname)
|
self.delete_one_row(self.ntbname,col_type,col_name,self.base_data,self.rowNum,self.dbname,'ntb')
|
||||||
self.delete_all_data(self.ntbname,col_type,self.rowNum,self.base_data,self.dbname)
|
self.delete_all_data(self.ntbname,col_type,self.rowNum,self.base_data,self.dbname,'ntb')
|
||||||
self.delete_error(self.ntbname,col_name,col_type,self.base_data)
|
self.delete_error(self.ntbname,col_name,col_type,self.base_data)
|
||||||
for i in range(self.rowNum):
|
self.delete_rows(self.dbname,self.ntbname,col_name,col_type,self.base_data,self.rowNum,'ntb')
|
||||||
tdSql.execute(f'delete from {self.ntbname} where ts>{self.ts+i}')
|
for func in ['first','last']:
|
||||||
tdSql.execute(f'flush database {self.dbname}')
|
tdSql.query(f'select {func}(*) from {self.ntbname}')
|
||||||
tdSql.execute('reset query cache')
|
|
||||||
tdSql.query(f'select {col_name} from {self.ntbname}')
|
|
||||||
tdSql.checkRows(i+1)
|
|
||||||
self.insert_base_data(col_type,self.ntbname,self.rowNum,self.base_data)
|
|
||||||
|
|
||||||
tdSql.execute(f'drop table {self.ntbname}')
|
tdSql.execute(f'drop table {self.ntbname}')
|
||||||
|
tdSql.execute(f'drop database {self.dbname}')
|
||||||
|
def delete_data_ctb(self):
|
||||||
|
tdSql.execute(f'create database if not exists {self.dbname}')
|
||||||
|
tdSql.execute(f'use {self.dbname}')
|
||||||
|
for col_name,col_type in self.column_dict.items():
|
||||||
|
tdSql.execute(f'create table {self.stbname} (ts timestamp,{col_name} {col_type}) tags(t1 int)')
|
||||||
|
for i in range(self.tbnum):
|
||||||
|
tdSql.execute(f'create table {self.stbname}_{i} using {self.stbname} tags(1)')
|
||||||
|
self.insert_base_data(col_type,f'{self.stbname}_{i}',self.rowNum,self.base_data)
|
||||||
|
self.delete_one_row(f'{self.stbname}_{i}',col_type,col_name,self.base_data,self.rowNum,self.dbname,'ctb')
|
||||||
|
self.delete_all_data(f'{self.stbname}_{i}',col_type,self.rowNum,self.base_data,self.dbname,'ctb')
|
||||||
|
self.delete_error(f'{self.stbname}_{i}',col_name,col_type,self.base_data)
|
||||||
|
self.delete_rows(self.dbname,f'{self.stbname}_{i}',col_name,col_type,self.base_data,self.rowNum,'ctb')
|
||||||
|
for func in ['first','last']:
|
||||||
|
tdSql.query(f'select {func}(*) from {self.stbname}_{i}')
|
||||||
|
tdSql.execute(f'drop table {self.stbname}')
|
||||||
|
def delete_data_stb(self):
|
||||||
|
tdSql.execute(f'create database if not exists {self.dbname}')
|
||||||
|
tdSql.execute(f'use {self.dbname}')
|
||||||
|
for col_name,col_type in self.column_dict.items():
|
||||||
|
tdSql.execute(f'create table {self.stbname} (ts timestamp,{col_name} {col_type}) tags(t1 int)')
|
||||||
|
for i in range(self.tbnum):
|
||||||
|
tdSql.execute(f'create table {self.stbname}_{i} using {self.stbname} tags(1)')
|
||||||
|
self.insert_base_data(col_type,f'{self.stbname}_{i}',self.rowNum,self.base_data)
|
||||||
|
self.delete_error(self.stbname,col_name,col_type,self.base_data)
|
||||||
|
self.delete_one_row(self.stbname,col_type,col_name,self.base_data,self.rowNum,self.dbname,'stb',self.tbnum)
|
||||||
|
self.delete_all_data(self.stbname,col_type,self.rowNum,self.base_data,self.dbname,'stb',self.tbnum)
|
||||||
|
self.delete_rows(self.dbname,self.stbname,col_name,col_type,self.base_data,self.rowNum,'stb',self.tbnum)
|
||||||
|
for func in ['first','last']:
|
||||||
|
tdSql.query(f'select {func}(*) from {self.stbname}')
|
||||||
|
tdSql.execute(f'drop table {self.stbname}')
|
||||||
|
tdSql.execute(f'drop database {self.dbname}')
|
||||||
def run(self):
|
def run(self):
|
||||||
self.delete_data_ntb()
|
self.delete_data_ntb()
|
||||||
|
self.delete_data_ctb()
|
||||||
|
self.delete_data_stb()
|
||||||
def stop(self):
|
def stop(self):
|
||||||
tdSql.close()
|
tdSql.close()
|
||||||
tdLog.success("%s successfully executed" % __file__)
|
tdLog.success("%s successfully executed" % __file__)
|
||||||
|
|
|
@ -11,13 +11,13 @@ class TDTestCase:
|
||||||
self.row_nums = 10
|
self.row_nums = 10
|
||||||
self.tb_nums = 10
|
self.tb_nums = 10
|
||||||
self.ts = 1537146000000
|
self.ts = 1537146000000
|
||||||
|
|
||||||
def prepare_datas(self, stb_name , tb_nums , row_nums ):
|
def prepare_datas(self, stb_name , tb_nums , row_nums ):
|
||||||
tdSql.execute(" use db ")
|
tdSql.execute(" use db ")
|
||||||
tdSql.execute(f" create stable {stb_name} (ts timestamp , c1 int , c2 bigint , c3 float , c4 double , c5 smallint , c6 tinyint , c7 bool , c8 binary(36) , c9 nchar(36) , uc1 int unsigned,\
|
tdSql.execute(f" create stable {stb_name} (ts timestamp , c1 int , c2 bigint , c3 float , c4 double , c5 smallint , c6 tinyint , c7 bool , c8 binary(36) , c9 nchar(36) , uc1 int unsigned,\
|
||||||
uc2 bigint unsigned ,uc3 smallint unsigned , uc4 tinyint unsigned ) tags(t1 timestamp , t2 int , t3 bigint , t4 float , t5 double , t6 smallint , t7 tinyint , t8 bool , t9 binary(36)\
|
uc2 bigint unsigned ,uc3 smallint unsigned , uc4 tinyint unsigned ) tags(t1 timestamp , t2 int , t3 bigint , t4 float , t5 double , t6 smallint , t7 tinyint , t8 bool , t9 binary(36)\
|
||||||
, t10 nchar(36) , t11 int unsigned , t12 bigint unsigned ,t13 smallint unsigned , t14 tinyint unsigned ) ")
|
, t10 nchar(36) , t11 int unsigned , t12 bigint unsigned ,t13 smallint unsigned , t14 tinyint unsigned ) ")
|
||||||
|
|
||||||
for i in range(tb_nums):
|
for i in range(tb_nums):
|
||||||
tbname = f"sub_{stb_name}_{i}"
|
tbname = f"sub_{stb_name}_{i}"
|
||||||
ts = self.ts + i*10000
|
ts = self.ts + i*10000
|
||||||
|
@ -30,7 +30,7 @@ class TDTestCase:
|
||||||
for null in range(5):
|
for null in range(5):
|
||||||
ts = self.ts + row_nums*1000 + null*1000
|
ts = self.ts + row_nums*1000 + null*1000
|
||||||
tdSql.execute(f"insert into {tbname} values({ts} , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL )")
|
tdSql.execute(f"insert into {tbname} values({ts} , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL )")
|
||||||
|
|
||||||
def basic_query(self):
|
def basic_query(self):
|
||||||
tdSql.query("select count(*) from stb")
|
tdSql.query("select count(*) from stb")
|
||||||
tdSql.checkData(0,0,(self.row_nums + 5 )*self.tb_nums)
|
tdSql.checkData(0,0,(self.row_nums + 5 )*self.tb_nums)
|
||||||
|
@ -44,7 +44,7 @@ class TDTestCase:
|
||||||
tdSql.query(" select max(t2) from stb group by c1 order by t1 ")
|
tdSql.query(" select max(t2) from stb group by c1 order by t1 ")
|
||||||
tdSql.query(" select max(c1) from stb group by tbname order by tbname ")
|
tdSql.query(" select max(c1) from stb group by tbname order by tbname ")
|
||||||
tdSql.checkRows(self.tb_nums)
|
tdSql.checkRows(self.tb_nums)
|
||||||
# bug need fix
|
# bug need fix
|
||||||
tdSql.query(" select max(t2) from stb group by t2 order by t2 ")
|
tdSql.query(" select max(t2) from stb group by t2 order by t2 ")
|
||||||
tdSql.checkRows(self.tb_nums)
|
tdSql.checkRows(self.tb_nums)
|
||||||
tdSql.query(" select max(c1) from stb group by c1 order by c1 ")
|
tdSql.query(" select max(c1) from stb group by c1 order by c1 ")
|
||||||
|
@ -62,8 +62,8 @@ class TDTestCase:
|
||||||
|
|
||||||
# bug need fix
|
# bug need fix
|
||||||
# tdSql.query(" select tbname , max(c1) from sub_stb_1 where c1 is null group by c1 order by c1 desc ")
|
# tdSql.query(" select tbname , max(c1) from sub_stb_1 where c1 is null group by c1 order by c1 desc ")
|
||||||
# tdSql.checkRows(1)
|
# tdSql.checkRows(1)
|
||||||
# tdSql.checkData(0,0,"sub_stb_1")
|
# tdSql.checkData(0,0,"sub_stb_1")
|
||||||
|
|
||||||
tdSql.query("select max(c1) ,c2 ,t2,tbname from stb group by abs(c1) order by abs(c1)")
|
tdSql.query("select max(c1) ,c2 ,t2,tbname from stb group by abs(c1) order by abs(c1)")
|
||||||
tdSql.checkRows(self.row_nums+1)
|
tdSql.checkRows(self.row_nums+1)
|
||||||
|
@ -80,7 +80,7 @@ class TDTestCase:
|
||||||
tdSql.checkRows(2)
|
tdSql.checkRows(2)
|
||||||
tdSql.query(" select max(c1) from stb where abs(c1+t2)=1 partition by tbname ")
|
tdSql.query(" select max(c1) from stb where abs(c1+t2)=1 partition by tbname ")
|
||||||
tdSql.checkRows(2)
|
tdSql.checkRows(2)
|
||||||
|
|
||||||
tdSql.query(" select tbname , max(c1) from stb partition by tbname order by tbname ")
|
tdSql.query(" select tbname , max(c1) from stb partition by tbname order by tbname ")
|
||||||
tdSql.checkRows(self.tb_nums)
|
tdSql.checkRows(self.tb_nums)
|
||||||
tdSql.checkData(0,1,self.row_nums-1)
|
tdSql.checkData(0,1,self.row_nums-1)
|
||||||
|
@ -89,7 +89,7 @@ class TDTestCase:
|
||||||
tdSql.query("select tbname , max(t2) from stb partition by t1 order by t1")
|
tdSql.query("select tbname , max(t2) from stb partition by t1 order by t1")
|
||||||
tdSql.query("select tbname , max(t2) from stb partition by t2 order by t2")
|
tdSql.query("select tbname , max(t2) from stb partition by t2 order by t2")
|
||||||
|
|
||||||
# # bug need fix
|
# # bug need fix
|
||||||
tdSql.query("select t2 , max(t2) from stb partition by t2 order by t2")
|
tdSql.query("select t2 , max(t2) from stb partition by t2 order by t2")
|
||||||
tdSql.checkRows(self.tb_nums)
|
tdSql.checkRows(self.tb_nums)
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ class TDTestCase:
|
||||||
tdSql.checkRows(self.tb_nums)
|
tdSql.checkRows(self.tb_nums)
|
||||||
tdSql.checkData(0,1,self.row_nums-1)
|
tdSql.checkData(0,1,self.row_nums-1)
|
||||||
|
|
||||||
|
|
||||||
tdSql.query("select tbname , max(c1) from stb partition by t2 order by t2")
|
tdSql.query("select tbname , max(c1) from stb partition by t2 order by t2")
|
||||||
|
|
||||||
tdSql.query("select c2, max(c1) from stb partition by c2 order by c2 desc")
|
tdSql.query("select c2, max(c1) from stb partition by c2 order by c2 desc")
|
||||||
|
@ -125,10 +125,10 @@ class TDTestCase:
|
||||||
tdSql.checkRows(self.tb_nums)
|
tdSql.checkRows(self.tb_nums)
|
||||||
tdSql.checkData(0,0,self.row_nums)
|
tdSql.checkData(0,0,self.row_nums)
|
||||||
|
|
||||||
# bug need fix
|
# bug need fix
|
||||||
tdSql.query("select count(c1) , max(t2) ,abs(c1) from stb partition by abs(c1) order by abs(c1)")
|
tdSql.query("select count(c1) , max(t2) ,abs(c1) from stb partition by abs(c1) order by abs(c1)")
|
||||||
tdSql.checkRows(self.row_nums+1)
|
tdSql.checkRows(self.row_nums+1)
|
||||||
|
|
||||||
|
|
||||||
tdSql.query("select max(ceil(c2)) , max(floor(t2)) ,max(floor(c2)) from stb partition by abs(c2) order by abs(c2)")
|
tdSql.query("select max(ceil(c2)) , max(floor(t2)) ,max(floor(c2)) from stb partition by abs(c2) order by abs(c2)")
|
||||||
tdSql.checkRows(self.row_nums+1)
|
tdSql.checkRows(self.row_nums+1)
|
||||||
|
@ -148,15 +148,15 @@ class TDTestCase:
|
||||||
|
|
||||||
tdSql.query(" select c1 , sample(c1,2) from stb partition by tbname order by tbname ")
|
tdSql.query(" select c1 , sample(c1,2) from stb partition by tbname order by tbname ")
|
||||||
tdSql.checkRows(self.tb_nums*2)
|
tdSql.checkRows(self.tb_nums*2)
|
||||||
|
|
||||||
|
|
||||||
# interval
|
|
||||||
|
# interval
|
||||||
tdSql.query("select max(c1) from stb interval(2s) sliding(1s)")
|
tdSql.query("select max(c1) from stb interval(2s) sliding(1s)")
|
||||||
|
|
||||||
# bug need fix
|
# bug need fix
|
||||||
|
|
||||||
tdSql.query('select max(c1) from stb where ts>="2022-07-06 16:00:00.000 " and ts < "2022-07-06 17:00:00.000 " interval(50s) sliding(30s) fill(NULL)')
|
tdSql.query('select max(c1) from stb where ts>="2022-07-06 16:00:00.000 " and ts < "2022-07-06 17:00:00.000 " interval(50s) sliding(30s) fill(NULL)')
|
||||||
|
|
||||||
tdSql.query(" select tbname , count(c1) from stb partition by tbname interval(10s) slimit 5 soffset 1 ")
|
tdSql.query(" select tbname , count(c1) from stb partition by tbname interval(10s) slimit 5 soffset 1 ")
|
||||||
|
|
||||||
tdSql.query("select tbname , max(c1) from stb partition by tbname interval(10s)")
|
tdSql.query("select tbname , max(c1) from stb partition by tbname interval(10s)")
|
||||||
|
@ -179,12 +179,12 @@ class TDTestCase:
|
||||||
|
|
||||||
tdSql.query("select c1 , sample(c1,2) from stb partition by c1 order by c1")
|
tdSql.query("select c1 , sample(c1,2) from stb partition by c1 order by c1")
|
||||||
tdSql.checkRows(21)
|
tdSql.checkRows(21)
|
||||||
# bug need fix
|
# bug need fix
|
||||||
# tdSql.checkData(0,1,None)
|
# tdSql.checkData(0,1,None)
|
||||||
|
|
||||||
tdSql.query("select c1 , twa(c1) from stb partition by c1 order by c1")
|
tdSql.query("select c1 , twa(c1) from stb partition by c1 order by c1")
|
||||||
tdSql.checkRows(11)
|
tdSql.checkRows(11)
|
||||||
tdSql.checkData(0,1,0.000000000)
|
tdSql.checkData(0,1,None)
|
||||||
|
|
||||||
tdSql.query("select c1 , irate(c1) from stb partition by c1 order by c1")
|
tdSql.query("select c1 , irate(c1) from stb partition by c1 order by c1")
|
||||||
tdSql.checkRows(11)
|
tdSql.checkRows(11)
|
||||||
|
@ -192,7 +192,7 @@ class TDTestCase:
|
||||||
|
|
||||||
tdSql.query("select c1 , DERIVATIVE(c1,2,1) from stb partition by c1 order by c1")
|
tdSql.query("select c1 , DERIVATIVE(c1,2,1) from stb partition by c1 order by c1")
|
||||||
tdSql.checkRows(72)
|
tdSql.checkRows(72)
|
||||||
# bug need fix
|
# bug need fix
|
||||||
# tdSql.checkData(0,1,None)
|
# tdSql.checkData(0,1,None)
|
||||||
|
|
||||||
|
|
||||||
|
@ -201,15 +201,15 @@ class TDTestCase:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# bug need fix
|
# bug need fix
|
||||||
# tdSql.query(" select tbname , max(c1) from stb partition by tbname order by tbname slimit 5 soffset 0 ")
|
# tdSql.query(" select tbname , max(c1) from stb partition by tbname order by tbname slimit 5 soffset 0 ")
|
||||||
# tdSql.checkRows(5)
|
# tdSql.checkRows(5)
|
||||||
|
|
||||||
# tdSql.query(" select tbname , max(c1) from stb partition by tbname order by tbname slimit 5 soffset 1 ")
|
# tdSql.query(" select tbname , max(c1) from stb partition by tbname order by tbname slimit 5 soffset 1 ")
|
||||||
# tdSql.checkRows(5)
|
# tdSql.checkRows(5)
|
||||||
|
|
||||||
tdSql.query(" select tbname , max(c1) from sub_stb_1 partition by tbname interval(10s) sliding(5s) ")
|
tdSql.query(" select tbname , max(c1) from sub_stb_1 partition by tbname interval(10s) sliding(5s) ")
|
||||||
|
|
||||||
tdSql.query(f'select max(c1) from stb where ts>={self.ts} and ts < {self.ts}+1000 interval(50s) sliding(30s)')
|
tdSql.query(f'select max(c1) from stb where ts>={self.ts} and ts < {self.ts}+1000 interval(50s) sliding(30s)')
|
||||||
tdSql.query(f'select tbname , max(c1) from stb where ts>={self.ts} and ts < {self.ts}+1000 interval(50s) sliding(30s)')
|
tdSql.query(f'select tbname , max(c1) from stb where ts>={self.ts} and ts < {self.ts}+1000 interval(50s) sliding(30s)')
|
||||||
|
|
||||||
|
@ -219,18 +219,18 @@ class TDTestCase:
|
||||||
self.prepare_datas("stb",self.tb_nums,self.row_nums)
|
self.prepare_datas("stb",self.tb_nums,self.row_nums)
|
||||||
self.basic_query()
|
self.basic_query()
|
||||||
|
|
||||||
# # coverage case for taosd crash about bug fix
|
# # coverage case for taosd crash about bug fix
|
||||||
tdSql.query(" select sum(c1) from stb where t2+10 >1 ")
|
tdSql.query(" select sum(c1) from stb where t2+10 >1 ")
|
||||||
tdSql.query(" select count(c1),count(t1) from stb where -t2<1 ")
|
tdSql.query(" select count(c1),count(t1) from stb where -t2<1 ")
|
||||||
tdSql.query(" select tbname ,max(ceil(c1)) from stb group by tbname ")
|
tdSql.query(" select tbname ,max(ceil(c1)) from stb group by tbname ")
|
||||||
tdSql.query(" select avg(abs(c1)) , tbname from stb group by tbname ")
|
tdSql.query(" select avg(abs(c1)) , tbname from stb group by tbname ")
|
||||||
tdSql.query(" select t1,c1 from stb where abs(t2+c1)=1 ")
|
tdSql.query(" select t1,c1 from stb where abs(t2+c1)=1 ")
|
||||||
|
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
tdSql.close()
|
tdSql.close()
|
||||||
tdLog.success("%s successfully executed" % __file__)
|
tdLog.success("%s successfully executed" % __file__)
|
||||||
|
|
||||||
|
|
||||||
tdCases.addWindows(__file__, TDTestCase())
|
tdCases.addWindows(__file__, TDTestCase())
|
||||||
tdCases.addLinux(__file__, TDTestCase())
|
tdCases.addLinux(__file__, TDTestCase())
|
||||||
|
|
|
@ -14,6 +14,7 @@ class TDTestCase:
|
||||||
clientCfgDict["debugFlag"] = 131
|
clientCfgDict["debugFlag"] = 131
|
||||||
updatecfgDict = {'clientCfg': {}}
|
updatecfgDict = {'clientCfg': {}}
|
||||||
updatecfgDict = {'debugFlag': 131}
|
updatecfgDict = {'debugFlag': 131}
|
||||||
|
updatecfgDict = {'keepColumnName': 1}
|
||||||
updatecfgDict["clientCfg"] = clientCfgDict
|
updatecfgDict["clientCfg"] = clientCfgDict
|
||||||
|
|
||||||
def init(self, conn, logSql):
|
def init(self, conn, logSql):
|
||||||
|
@ -42,7 +43,7 @@ class TDTestCase:
|
||||||
tdSql.execute(f"create table dct{i} using diagnostics (name,fleet,driver,model,device_version) tags ('truck_{i}','South{i}','Trish{i}',NULL ,'v2.3')")
|
tdSql.execute(f"create table dct{i} using diagnostics (name,fleet,driver,model,device_version) tags ('truck_{i}','South{i}','Trish{i}',NULL ,'v2.3')")
|
||||||
else:
|
else:
|
||||||
tdSql.execute(f"create table dct{i} using diagnostics (name,fleet,driver,model,device_version) tags ('truck_{i}','South{i}','Trish{i}','H-{i}','v2.3')")
|
tdSql.execute(f"create table dct{i} using diagnostics (name,fleet,driver,model,device_version) tags ('truck_{i}','South{i}','Trish{i}','H-{i}','v2.3')")
|
||||||
for j in range(10):
|
for j in range(10):
|
||||||
for i in range(100):
|
for i in range(100):
|
||||||
tdSql.execute(
|
tdSql.execute(
|
||||||
f"insert into rct{j} values ( {ts+i*60000}, {80+i}, {90+i}, {85+i}, {30+i*10}, {1.2*i}, {221+i*2}, {20+i*0.2}, {1500+i*20}, {150+i*2},{5+i} )"
|
f"insert into rct{j} values ( {ts+i*60000}, {80+i}, {90+i}, {85+i}, {30+i*10}, {1.2*i}, {221+i*2}, {20+i*0.2}, {1500+i*20}, {150+i*2},{5+i} )"
|
||||||
|
@ -92,23 +93,23 @@ class TDTestCase:
|
||||||
|
|
||||||
|
|
||||||
# test partition interval limit (PRcore-TD-17410)
|
# test partition interval limit (PRcore-TD-17410)
|
||||||
# tdSql.query("select name,driver from (SELECT name,driver,fleet ,avg(velocity) as mean_velocity FROM readings partition BY name,driver,fleet interval (10m) limit 1);")
|
tdSql.query("select name,driver from (SELECT name,driver,fleet ,avg(velocity) as mean_velocity FROM readings partition BY name,driver,fleet interval (10m) limit 1);")
|
||||||
# tdSql.checkRows(10)
|
tdSql.checkRows(10)
|
||||||
|
|
||||||
# test partition interval Pseudo time-column
|
# test partition interval Pseudo time-column
|
||||||
tdSql.query("SELECT count(ms1)/144 FROM (SELECT _wstart as ts1,model, fleet,avg(status) AS ms1 FROM diagnostics WHERE ts >= '2016-01-01T00:00:00Z' AND ts < '2016-01-05T00:00:01Z' partition by model, fleet interval(10m)) WHERE ts1 >= '2016-01-01T00:00:00Z' AND ts1 < '2016-01-05T00:00:01Z' AND ms1<1;")
|
tdSql.query("SELECT count(ms1)/144 FROM (SELECT _wstart as ts1,model, fleet,avg(status) AS ms1 FROM diagnostics WHERE ts >= '2016-01-01T00:00:00Z' AND ts < '2016-01-05T00:00:01Z' partition by model, fleet interval(10m)) WHERE ts1 >= '2016-01-01T00:00:00Z' AND ts1 < '2016-01-05T00:00:01Z' AND ms1<1;")
|
||||||
|
|
||||||
# 1 high-load:
|
# 1 high-load:
|
||||||
# tdSql.query("SELECT ts,name,driver,current_load,load_capacity FROM (SELECT last(ts) as ts,name,driver, current_load,load_capacity FROM diagnostics WHERE fleet = 'South' partition by name,driver) WHERE current_load>= (0.9 * load_capacity) partition by name ORDER BY name desc, ts DESC;")
|
tdSql.query("SELECT ts,name,driver,current_load,load_capacity FROM (SELECT last(ts) as ts,name,driver, current_load,load_capacity FROM diagnostics WHERE fleet = 'South' partition by name,driver) WHERE current_load>= (0.9 * load_capacity) partition by name ORDER BY name desc, ts DESC;")
|
||||||
|
|
||||||
# tdSql.query("SELECT ts,name,driver,current_load,load_capacity FROM (SELECT last(ts) as ts,name,driver, current_load,load_capacity FROM diagnostics WHERE fleet = 'South' partition by name,driver) WHERE current_load>= (0.9 * load_capacity) partition by name ORDER BY name ;")
|
tdSql.query("SELECT ts,name,driver,current_load,load_capacity FROM (SELECT last(ts) as ts,name,driver, current_load,load_capacity FROM diagnostics WHERE fleet = 'South' partition by name,driver) WHERE current_load>= (0.9 * load_capacity) partition by name ORDER BY name ;")
|
||||||
|
|
||||||
# 2 stationary-trucks
|
# 2 stationary-trucks
|
||||||
tdSql.query("select name,driver from (SELECT name,driver,fleet ,avg(velocity) as mean_velocity FROM readings WHERE ts > '2016-01-01T15:07:21Z' AND ts <= '2016-01-01T16:17:21Z' partition BY name,driver,fleet interval(10m) LIMIT 1)")
|
tdSql.query("select name,driver from (SELECT name,driver,fleet ,avg(velocity) as mean_velocity FROM readings WHERE ts > '2016-01-01T15:07:21Z' AND ts <= '2016-01-01T16:17:21Z' partition BY name,driver,fleet interval(10m) LIMIT 1)")
|
||||||
tdSql.query("select name,driver from (SELECT name,driver,fleet ,avg(velocity) as mean_velocity FROM readings WHERE ts > '2016-01-01T15:07:21Z' AND ts <= '2016-01-01T16:17:21Z' partition BY name,driver,fleet interval(10m) LIMIT 1) WHERE fleet = 'West' AND mean_velocity < 1000 partition BY name")
|
tdSql.query("select name,driver from (SELECT name,driver,fleet ,avg(velocity) as mean_velocity FROM readings WHERE ts > '2016-01-01T15:07:21Z' AND ts <= '2016-01-01T16:17:21Z' partition BY name,driver,fleet interval(10m) LIMIT 1) WHERE fleet = 'West' AND mean_velocity < 1000 partition BY name")
|
||||||
|
|
||||||
# 3 long-driving-sessions
|
# 3 long-driving-sessions
|
||||||
# tdSql.query("SELECT name,driver FROM(SELECT name,driver,count(*) AS ten_min FROM(SELECT _wstart as ts,name,driver,avg(velocity) as mean_velocity FROM readings where ts > '2016-01-01T00:00:34Z' AND ts <= '2016-01-01T04:00:34Z' partition BY name,driver interval(10m)) WHERE mean_velocity > 1 GROUP BY name,driver) WHERE ten_min > 22 ;")
|
tdSql.query("SELECT name,driver FROM(SELECT name,driver,count(*) AS ten_min FROM(SELECT _wstart as ts,name,driver,avg(velocity) as mean_velocity FROM readings where ts > '2016-01-01T00:00:34Z' AND ts <= '2016-01-01T04:00:34Z' partition BY name,driver interval(10m)) WHERE mean_velocity > 1 GROUP BY name,driver) WHERE ten_min > 22 ;")
|
||||||
|
|
||||||
|
|
||||||
#4 long-daily-sessions
|
#4 long-daily-sessions
|
||||||
|
@ -130,15 +131,18 @@ class TDTestCase:
|
||||||
|
|
||||||
# 8. daily-activity
|
# 8. daily-activity
|
||||||
tdSql.query(" SELECT model,ms1 FROM (SELECT _wstart as ts1,model, fleet,avg(status) AS ms1 FROM diagnostics WHERE ts >= '2016-01-01T00:00:00Z' AND ts < '2016-01-05T00:00:01Z' partition by model, fleet interval(10m) fill(value,0)) WHERE ts1 >= '2016-01-01T00:00:00Z' AND ts1 < '2016-01-05T00:00:01Z' AND ms1<1;")
|
tdSql.query(" SELECT model,ms1 FROM (SELECT _wstart as ts1,model, fleet,avg(status) AS ms1 FROM diagnostics WHERE ts >= '2016-01-01T00:00:00Z' AND ts < '2016-01-05T00:00:01Z' partition by model, fleet interval(10m) fill(value,0)) WHERE ts1 >= '2016-01-01T00:00:00Z' AND ts1 < '2016-01-05T00:00:01Z' AND ms1<1;")
|
||||||
|
|
||||||
|
tdSql.query(" SELECT model,ms1 FROM (SELECT _wstart as ts1,model, fleet,avg(status) AS ms1 FROM diagnostics WHERE ts >= '2016-01-01T00:00:00Z' AND ts < '2016-01-05T00:00:01Z' partition by model, fleet interval(10m) ) WHERE ts1 >= '2016-01-01T00:00:00Z' AND ts1 < '2016-01-05T00:00:01Z' AND ms1<1;")
|
||||||
|
|
||||||
tdSql.query("SELECT _wstart,model,fleet,count(ms1)/144 FROM (SELECT _wstart as ts1,model, fleet,avg(status) AS ms1 FROM diagnostics WHERE ts >= '2016-01-01T00:00:00Z' AND ts < '2016-01-05T00:00:01Z' partition by model, fleet interval(10m) fill(value,0)) WHERE ts1 >= '2016-01-01T00:00:00Z' AND ts1 < '2016-01-05T00:00:01Z' AND ms1<1 partition by model, fleet interval(1d) ;")
|
tdSql.query("SELECT _wstart,model,fleet,count(ms1)/144 FROM (SELECT _wstart as ts1,model, fleet,avg(status) AS ms1 FROM diagnostics WHERE ts >= '2016-01-01T00:00:00Z' AND ts < '2016-01-05T00:00:01Z' partition by model, fleet interval(10m) fill(value,0)) WHERE ts1 >= '2016-01-01T00:00:00Z' AND ts1 < '2016-01-05T00:00:01Z' AND ms1<1 partition by model, fleet interval(1d) ;")
|
||||||
|
|
||||||
# 9. breakdown-frequency
|
# 9. breakdown-frequency
|
||||||
# NULL ---count(NULL)=0 expect count(NULL)= 100
|
# NULL ---count(NULL)=0 expect count(NULL)= 100
|
||||||
tdSql.query("select tbname,count(model),model from readings partition by tbname,model;")
|
tdSql.query("SELECT model,state_changed,count(state_changed) FROM (SELECT model,diff(broken_down) AS state_changed FROM (SELECT _wstart,model,cast(cast(floor(2*(sum(nzs)/count(nzs))) as bool) as int) AS broken_down FROM (SELECT ts,model, cast(cast(status as bool) as int) AS nzs FROM diagnostics WHERE ts >= '2016-01-01T00:00:00Z' AND ts < '2016-01-05T00:00:01Z' ) WHERE ts >= '2016-01-01T00:00:00Z' AND ts < '2016-01-05T00:00:01Z' partition BY model interval(10m)) partition BY model) where model is null partition BY model,state_changed ")
|
||||||
# model=NULL count(other) is 0
|
|
||||||
tdSql.query("select tbname,count(name),model from readings where model=NULL partition by tbname,model;")
|
|
||||||
|
|
||||||
tdSql.query(" SELECT model,state_changed,count(state_changed) FROM (SELECT model,diff(broken_down) AS state_changed FROM (SELECT _wstart,model,cast(cast(floor(2*(sum(nzs)/count(nzs))) as bool) as int) AS broken_down FROM (SELECT ts,model, cast(cast(status as bool) as int) AS nzs FROM diagnostics WHERE ts >= '2016-01-01T00:00:00Z' AND ts < '2016-01-05T00:00:01Z' ) WHERE ts >= '2016-01-01T00:00:00Z' AND ts < '2016-01-05T00:00:01Z' partition BY model interval(10m)) partition BY model) where state_changed =1 partition BY model,state_changed ;")
|
tdSql.query(" SELECT model,state_changed,count(state_changed) FROM (SELECT model,diff(broken_down) AS state_changed FROM (SELECT _wstart,model,cast(cast(floor(2*(sum(nzs)/count(nzs))) as bool) as int) AS broken_down FROM (SELECT ts,model, cast(cast(status as bool) as int) AS nzs FROM diagnostics WHERE ts >= '2016-01-01T00:00:00Z' AND ts < '2016-01-05T00:00:01Z' ) WHERE ts >= '2016-01-01T00:00:00Z' AND ts < '2016-01-05T00:00:01Z' partition BY model interval(10m)) partition BY model) where state_changed =1 partition BY model,state_changed ;")
|
||||||
|
|
||||||
#it's already supported:
|
#it's already supported:
|
||||||
# last-loc
|
# last-loc
|
||||||
tdSql.query("SELECT last_row(ts),latitude,longitude,name,driver FROM readings WHERE fleet='South' and name IS NOT NULL partition BY name,driver order by name ;")
|
tdSql.query("SELECT last_row(ts),latitude,longitude,name,driver FROM readings WHERE fleet='South' and name IS NOT NULL partition BY name,driver order by name ;")
|
||||||
|
|
|
@ -7,7 +7,7 @@ import platform
|
||||||
import math
|
import math
|
||||||
|
|
||||||
class TDTestCase:
|
class TDTestCase:
|
||||||
updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 ,
|
updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 ,
|
||||||
"jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143,
|
"jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143,
|
||||||
"wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143,
|
"wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143,
|
||||||
"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 }
|
"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 }
|
||||||
|
@ -22,7 +22,7 @@ class TDTestCase:
|
||||||
self.time_step = 1000
|
self.time_step = 1000
|
||||||
|
|
||||||
def prepare_datas_of_distribute(self):
|
def prepare_datas_of_distribute(self):
|
||||||
|
|
||||||
# prepate datas for 20 tables distributed at different vgroups
|
# prepate datas for 20 tables distributed at different vgroups
|
||||||
tdSql.execute("create database if not exists testdb keep 3650 duration 1000 vgroups 5")
|
tdSql.execute("create database if not exists testdb keep 3650 duration 1000 vgroups 5")
|
||||||
tdSql.execute(" use testdb ")
|
tdSql.execute(" use testdb ")
|
||||||
|
@ -32,16 +32,16 @@ class TDTestCase:
|
||||||
tags (t0 timestamp, t1 int, t2 bigint, t3 smallint, t4 tinyint, t5 float, t6 double, t7 bool, t8 binary(16),t9 nchar(32))
|
tags (t0 timestamp, t1 int, t2 bigint, t3 smallint, t4 tinyint, t5 float, t6 double, t7 bool, t8 binary(16),t9 nchar(32))
|
||||||
'''
|
'''
|
||||||
)
|
)
|
||||||
|
|
||||||
for i in range(self.tb_nums):
|
for i in range(self.tb_nums):
|
||||||
tdSql.execute(f'create table ct{i+1} using stb1 tags ( now(), {1*i}, {11111*i}, {111*i}, {1*i}, {1.11*i}, {11.11*i}, {i%2}, "binary{i}", "nchar{i}" )')
|
tdSql.execute(f'create table ct{i+1} using stb1 tags ( now(), {1*i}, {11111*i}, {111*i}, {1*i}, {1.11*i}, {11.11*i}, {i%2}, "binary{i}", "nchar{i}" )')
|
||||||
ts = self.ts
|
ts = self.ts
|
||||||
for j in range(self.row_nums):
|
for j in range(self.row_nums):
|
||||||
ts+=j*self.time_step
|
ts+=j*self.time_step
|
||||||
tdSql.execute(
|
tdSql.execute(
|
||||||
f"insert into ct{i+1} values({ts}, 1, 11111, 111, 1, 1.11, 11.11, 2, 'binary{j}', 'nchar{j}', now()+{1*j}a )"
|
f"insert into ct{i+1} values({ts}, 1, 11111, 111, 1, 1.11, 11.11, 2, 'binary{j}', 'nchar{j}', now()+{1*j}a )"
|
||||||
)
|
)
|
||||||
|
|
||||||
tdSql.execute("insert into ct1 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
|
tdSql.execute("insert into ct1 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
|
||||||
tdSql.execute("insert into ct1 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
|
tdSql.execute("insert into ct1 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
|
||||||
tdSql.execute("insert into ct1 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
|
tdSql.execute("insert into ct1 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
|
||||||
|
@ -64,7 +64,7 @@ class TDTestCase:
|
||||||
vgroups = tdSql.queryResult
|
vgroups = tdSql.queryResult
|
||||||
|
|
||||||
vnode_tables={}
|
vnode_tables={}
|
||||||
|
|
||||||
for vgroup_id in vgroups:
|
for vgroup_id in vgroups:
|
||||||
vnode_tables[vgroup_id[0]]=[]
|
vnode_tables[vgroup_id[0]]=[]
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ class TDTestCase:
|
||||||
table_names = tdSql.queryResult
|
table_names = tdSql.queryResult
|
||||||
tablenames = []
|
tablenames = []
|
||||||
for table_name in table_names:
|
for table_name in table_names:
|
||||||
vnode_tables[table_name[6]].append(table_name[0])
|
vnode_tables[table_name[6]].append(table_name[0])
|
||||||
self.vnode_disbutes = vnode_tables
|
self.vnode_disbutes = vnode_tables
|
||||||
|
|
||||||
count = 0
|
count = 0
|
||||||
|
@ -103,12 +103,12 @@ class TDTestCase:
|
||||||
tdSql.checkRows(self.tb_nums)
|
tdSql.checkRows(self.tb_nums)
|
||||||
tdSql.checkData(0,0,1.000000000)
|
tdSql.checkData(0,0,1.000000000)
|
||||||
|
|
||||||
# union all
|
# union all
|
||||||
tdSql.query(" select twa(c1) from stb1 partition by tbname union all select twa(c1) from stb1 partition by tbname ")
|
tdSql.query(" select twa(c1) from stb1 partition by tbname union all select twa(c1) from stb1 partition by tbname ")
|
||||||
tdSql.checkRows(40)
|
tdSql.checkRows(40)
|
||||||
tdSql.checkData(0,0,1.000000000)
|
tdSql.checkData(0,0,1.000000000)
|
||||||
|
|
||||||
# join
|
# join
|
||||||
|
|
||||||
tdSql.execute(" create database if not exists db ")
|
tdSql.execute(" create database if not exists db ")
|
||||||
tdSql.execute(" use db ")
|
tdSql.execute(" use db ")
|
||||||
|
@ -116,7 +116,7 @@ class TDTestCase:
|
||||||
tdSql.execute(" create table tb1 using st tags(1) ")
|
tdSql.execute(" create table tb1 using st tags(1) ")
|
||||||
tdSql.execute(" create table tb2 using st tags(2) ")
|
tdSql.execute(" create table tb2 using st tags(2) ")
|
||||||
|
|
||||||
|
|
||||||
for i in range(10):
|
for i in range(10):
|
||||||
ts = i*10 + self.ts
|
ts = i*10 + self.ts
|
||||||
tdSql.execute(f" insert into tb1 values({ts},{i},{i}.0)")
|
tdSql.execute(f" insert into tb1 values({ts},{i},{i}.0)")
|
||||||
|
@ -127,7 +127,7 @@ class TDTestCase:
|
||||||
tdSql.checkData(0,0,4.500000000)
|
tdSql.checkData(0,0,4.500000000)
|
||||||
tdSql.checkData(0,1,4.500000000)
|
tdSql.checkData(0,1,4.500000000)
|
||||||
|
|
||||||
# group by
|
# group by
|
||||||
tdSql.execute(" use testdb ")
|
tdSql.execute(" use testdb ")
|
||||||
|
|
||||||
# mixup with other functions
|
# mixup with other functions
|
||||||
|
@ -141,7 +141,7 @@ class TDTestCase:
|
||||||
self.check_distribute_datas()
|
self.check_distribute_datas()
|
||||||
self.twa_support_types()
|
self.twa_support_types()
|
||||||
self.distribute_twa_query()
|
self.distribute_twa_query()
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
tdSql.close()
|
tdSql.close()
|
||||||
tdLog.success("%s successfully executed" % __file__)
|
tdLog.success("%s successfully executed" % __file__)
|
||||||
|
|
|
@ -16,6 +16,7 @@ from tmqCommon import *
|
||||||
|
|
||||||
class TDTestCase:
|
class TDTestCase:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
self.snapshot = 0
|
||||||
self.vgroups = 4
|
self.vgroups = 4
|
||||||
self.ctbNum = 1000
|
self.ctbNum = 1000
|
||||||
self.rowsPerTbl = 1000
|
self.rowsPerTbl = 1000
|
||||||
|
@ -44,7 +45,7 @@ class TDTestCase:
|
||||||
'pollDelay': 3,
|
'pollDelay': 3,
|
||||||
'showMsg': 1,
|
'showMsg': 1,
|
||||||
'showRow': 1,
|
'showRow': 1,
|
||||||
'snapshot': 1}
|
'snapshot': 0}
|
||||||
|
|
||||||
paraDict['vgroups'] = self.vgroups
|
paraDict['vgroups'] = self.vgroups
|
||||||
paraDict['ctbNum'] = self.ctbNum
|
paraDict['ctbNum'] = self.ctbNum
|
||||||
|
@ -84,13 +85,14 @@ class TDTestCase:
|
||||||
'ctbStartIdx': 0,
|
'ctbStartIdx': 0,
|
||||||
'ctbNum': 1000,
|
'ctbNum': 1000,
|
||||||
'rowsPerTbl': 1000,
|
'rowsPerTbl': 1000,
|
||||||
'batchNum': 400,
|
'batchNum': 1000,
|
||||||
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
|
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
|
||||||
'pollDelay': 5,
|
'pollDelay': 5,
|
||||||
'showMsg': 1,
|
'showMsg': 1,
|
||||||
'showRow': 1,
|
'showRow': 1,
|
||||||
'snapshot': 1}
|
'snapshot': 0}
|
||||||
|
|
||||||
|
paraDict['snapshot'] = self.snapshot
|
||||||
paraDict['vgroups'] = self.vgroups
|
paraDict['vgroups'] = self.vgroups
|
||||||
paraDict['ctbNum'] = self.ctbNum
|
paraDict['ctbNum'] = self.ctbNum
|
||||||
paraDict['rowsPerTbl'] = self.rowsPerTbl
|
paraDict['rowsPerTbl'] = self.rowsPerTbl
|
||||||
|
@ -131,10 +133,10 @@ class TDTestCase:
|
||||||
totalConsumeRows += resultList[i]
|
totalConsumeRows += resultList[i]
|
||||||
|
|
||||||
tdSql.query(queryString)
|
tdSql.query(queryString)
|
||||||
totalRowsInserted = tdSql.getRows()
|
totalRowsFromQuery = tdSql.getRows()
|
||||||
|
|
||||||
if totalConsumeRows != totalRowsInserted:
|
tdLog.info("act consume rows: %d, expect consume rows: %d"%(totalConsumeRows, totalRowsFromQuery))
|
||||||
tdLog.info("act consume rows: %d, expect consume rows: %d"%(totalConsumeRows, totalRowsInserted))
|
if totalConsumeRows != totalRowsFromQuery:
|
||||||
tdLog.exit("tmq consume rows error!")
|
tdLog.exit("tmq consume rows error!")
|
||||||
|
|
||||||
tdSql.query("drop topic %s"%topicFromStb1)
|
tdSql.query("drop topic %s"%topicFromStb1)
|
||||||
|
@ -163,6 +165,7 @@ class TDTestCase:
|
||||||
'showRow': 1,
|
'showRow': 1,
|
||||||
'snapshot': 0}
|
'snapshot': 0}
|
||||||
|
|
||||||
|
paraDict['snapshot'] = self.snapshot
|
||||||
paraDict['vgroups'] = self.vgroups
|
paraDict['vgroups'] = self.vgroups
|
||||||
paraDict['ctbNum'] = self.ctbNum
|
paraDict['ctbNum'] = self.ctbNum
|
||||||
paraDict['rowsPerTbl'] = self.rowsPerTbl
|
paraDict['rowsPerTbl'] = self.rowsPerTbl
|
||||||
|
@ -180,12 +183,13 @@ class TDTestCase:
|
||||||
# startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
|
# startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
|
||||||
tdLog.info("create topics from stb1")
|
tdLog.info("create topics from stb1")
|
||||||
topicFromStb1 = 'topic_stb1'
|
topicFromStb1 = 'topic_stb1'
|
||||||
queryString = "select ts, c1, c2 from %s.%s"%(paraDict['dbName'], paraDict['stbName'])
|
# queryString = "select ts, c1, c2 from %s.%s "%(paraDict['dbName'], paraDict['stbName'])
|
||||||
|
queryString = "select ts, c1, c2 from %s.%s where t4 == 'shanghai' or t4 == 'changsha'"%(paraDict['dbName'], paraDict['stbName'])
|
||||||
sqlString = "create topic %s as %s" %(topicFromStb1, queryString)
|
sqlString = "create topic %s as %s" %(topicFromStb1, queryString)
|
||||||
tdLog.info("create topic sql: %s"%sqlString)
|
tdLog.info("create topic sql: %s"%sqlString)
|
||||||
tdSql.execute(sqlString)
|
tdSql.execute(sqlString)
|
||||||
|
|
||||||
consumerId = 0
|
consumerId = 1
|
||||||
expectrowcnt = paraDict["rowsPerTbl"] * paraDict["ctbNum"] * 2
|
expectrowcnt = paraDict["rowsPerTbl"] * paraDict["ctbNum"] * 2
|
||||||
topicList = topicFromStb1
|
topicList = topicFromStb1
|
||||||
ifcheckdata = 0
|
ifcheckdata = 0
|
||||||
|
@ -210,10 +214,10 @@ class TDTestCase:
|
||||||
totalConsumeRows += resultList[i]
|
totalConsumeRows += resultList[i]
|
||||||
|
|
||||||
tdSql.query(queryString)
|
tdSql.query(queryString)
|
||||||
totalRowsInserted = tdSql.getRows()
|
totalRowsFromQuery = tdSql.getRows()
|
||||||
|
|
||||||
if totalConsumeRows != totalRowsInserted:
|
tdLog.info("act consume rows: %d, expect consume rows: %d"%(totalConsumeRows, totalRowsFromQuery))
|
||||||
tdLog.info("act consume rows: %d, expect consume rows: %d"%(totalConsumeRows, totalRowsInserted))
|
if totalConsumeRows != totalRowsFromQuery:
|
||||||
tdLog.exit("tmq consume rows error!")
|
tdLog.exit("tmq consume rows error!")
|
||||||
|
|
||||||
tdSql.query("drop topic %s"%topicFromStb1)
|
tdSql.query("drop topic %s"%topicFromStb1)
|
||||||
|
@ -222,10 +226,18 @@ class TDTestCase:
|
||||||
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
tdSql.prepare()
|
|
||||||
self.prepareTestEnv()
|
self.prepareTestEnv()
|
||||||
|
tdLog.printNoPrefix("=============================================")
|
||||||
|
tdLog.printNoPrefix("======== snapshot is 0: only consume from wal")
|
||||||
self.tmqCase1()
|
self.tmqCase1()
|
||||||
# self.tmqCase2() # TD-17267
|
self.tmqCase2()
|
||||||
|
|
||||||
|
self.prepareTestEnv()
|
||||||
|
tdLog.printNoPrefix("====================================================================")
|
||||||
|
tdLog.printNoPrefix("======== snapshot is 1: firstly consume from tsbs, and then from wal")
|
||||||
|
self.snapshot = 1
|
||||||
|
self.tmqCase1()
|
||||||
|
self.tmqCase2()
|
||||||
|
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
|
|
|
@ -16,6 +16,7 @@ from tmqCommon import *
|
||||||
|
|
||||||
class TDTestCase:
|
class TDTestCase:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
self.snapshot = 0
|
||||||
self.vgroups = 2
|
self.vgroups = 2
|
||||||
self.ctbNum = 100
|
self.ctbNum = 100
|
||||||
self.rowsPerTbl = 10000
|
self.rowsPerTbl = 10000
|
||||||
|
@ -37,15 +38,16 @@ class TDTestCase:
|
||||||
'tagSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1}],
|
'tagSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1}],
|
||||||
'ctbPrefix': 'ctb',
|
'ctbPrefix': 'ctb',
|
||||||
'ctbStartIdx': 0,
|
'ctbStartIdx': 0,
|
||||||
'ctbNum': 500,
|
'ctbNum': 100,
|
||||||
'rowsPerTbl': 1000,
|
'rowsPerTbl': 10000,
|
||||||
'batchNum': 500,
|
'batchNum': 100,
|
||||||
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
|
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
|
||||||
'pollDelay': 3,
|
'pollDelay': 3,
|
||||||
'showMsg': 1,
|
'showMsg': 1,
|
||||||
'showRow': 1,
|
'showRow': 1,
|
||||||
'snapshot': 0}
|
'snapshot': 0}
|
||||||
|
|
||||||
|
paraDict['snapshot'] = self.snapshot
|
||||||
paraDict['vgroups'] = self.vgroups
|
paraDict['vgroups'] = self.vgroups
|
||||||
paraDict['ctbNum'] = self.ctbNum
|
paraDict['ctbNum'] = self.ctbNum
|
||||||
paraDict['rowsPerTbl'] = self.rowsPerTbl
|
paraDict['rowsPerTbl'] = self.rowsPerTbl
|
||||||
|
@ -81,30 +83,31 @@ class TDTestCase:
|
||||||
'tagSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1}],
|
'tagSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1}],
|
||||||
'ctbPrefix': 'ctb',
|
'ctbPrefix': 'ctb',
|
||||||
'ctbStartIdx': 0,
|
'ctbStartIdx': 0,
|
||||||
'ctbNum': 1000,
|
'ctbNum': 100,
|
||||||
'rowsPerTbl': 1000,
|
'rowsPerTbl': 10000,
|
||||||
'batchNum': 400,
|
'batchNum': 100,
|
||||||
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
|
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
|
||||||
'pollDelay': 5,
|
'pollDelay': 5,
|
||||||
'showMsg': 1,
|
'showMsg': 1,
|
||||||
'showRow': 1,
|
'showRow': 1,
|
||||||
'snapshot': 1}
|
'snapshot': 0}
|
||||||
|
|
||||||
# paraDict['vgroups'] = self.vgroups
|
paraDict['snapshot'] = self.snapshot
|
||||||
# paraDict['ctbNum'] = self.ctbNum
|
paraDict['vgroups'] = self.vgroups
|
||||||
# paraDict['rowsPerTbl'] = self.rowsPerTbl
|
paraDict['ctbNum'] = self.ctbNum
|
||||||
|
paraDict['rowsPerTbl'] = self.rowsPerTbl
|
||||||
|
|
||||||
tmqCom.initConsumerTable()
|
# tmqCom.initConsumerTable()
|
||||||
tdCom.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], vgroups=paraDict["vgroups"],replica=1)
|
# tdCom.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], vgroups=paraDict["vgroups"],replica=1)
|
||||||
tdLog.info("create stb")
|
# tdLog.info("create stb")
|
||||||
tmqCom.create_stable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"])
|
# tmqCom.create_stable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"])
|
||||||
tdLog.info("create ctb")
|
# tdLog.info("create ctb")
|
||||||
tmqCom.create_ctable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix=paraDict['ctbPrefix'],
|
# tmqCom.create_ctable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix=paraDict['ctbPrefix'],
|
||||||
ctbNum=paraDict["ctbNum"],ctbStartIdx=paraDict['ctbStartIdx'])
|
# ctbNum=paraDict["ctbNum"],ctbStartIdx=paraDict['ctbStartIdx'])
|
||||||
tdLog.info("insert data")
|
# tdLog.info("insert data")
|
||||||
tmqCom.insert_data_interlaceByMultiTbl(tsql=tdSql,dbName=paraDict["dbName"],ctbPrefix=paraDict["ctbPrefix"],
|
# tmqCom.insert_data_interlaceByMultiTbl(tsql=tdSql,dbName=paraDict["dbName"],ctbPrefix=paraDict["ctbPrefix"],
|
||||||
ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"],
|
# ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"],
|
||||||
startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
|
# startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
|
||||||
|
|
||||||
tdLog.info("create topics from stb1")
|
tdLog.info("create topics from stb1")
|
||||||
topicFromStb1 = 'topic_stb1'
|
topicFromStb1 = 'topic_stb1'
|
||||||
|
@ -132,7 +135,7 @@ class TDTestCase:
|
||||||
tdLog.info("================= restart dnode ===========================")
|
tdLog.info("================= restart dnode ===========================")
|
||||||
tdDnodes.stop(1)
|
tdDnodes.stop(1)
|
||||||
tdDnodes.start(1)
|
tdDnodes.start(1)
|
||||||
time.sleep(5)
|
time.sleep(3)
|
||||||
|
|
||||||
tdLog.info("insert process end, and start to check consume result")
|
tdLog.info("insert process end, and start to check consume result")
|
||||||
expectRows = 1
|
expectRows = 1
|
||||||
|
@ -142,10 +145,10 @@ class TDTestCase:
|
||||||
totalConsumeRows += resultList[i]
|
totalConsumeRows += resultList[i]
|
||||||
|
|
||||||
tdSql.query(queryString)
|
tdSql.query(queryString)
|
||||||
totalRowsInserted = tdSql.getRows()
|
totalRowsFromQury = tdSql.getRows()
|
||||||
|
|
||||||
if totalConsumeRows != totalRowsInserted:
|
tdLog.info("act consume rows: %d, expect consume rows: %d"%(totalConsumeRows, totalRowsFromQury))
|
||||||
tdLog.info("act consume rows: %d, expect consume rows: %d"%(totalConsumeRows, totalRowsInserted))
|
if totalConsumeRows != totalRowsFromQury:
|
||||||
tdLog.exit("tmq consume rows error!")
|
tdLog.exit("tmq consume rows error!")
|
||||||
|
|
||||||
tdSql.query("drop topic %s"%topicFromStb1)
|
tdSql.query("drop topic %s"%topicFromStb1)
|
||||||
|
@ -165,30 +168,31 @@ class TDTestCase:
|
||||||
'tagSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1}],
|
'tagSchema': [{'type': 'INT', 'count':1},{'type': 'BIGINT', 'count':1},{'type': 'DOUBLE', 'count':1},{'type': 'BINARY', 'len':32, 'count':1},{'type': 'NCHAR', 'len':32, 'count':1}],
|
||||||
'ctbPrefix': 'ctb',
|
'ctbPrefix': 'ctb',
|
||||||
'ctbStartIdx': 0,
|
'ctbStartIdx': 0,
|
||||||
'ctbNum': 1000,
|
'ctbNum': 100,
|
||||||
'rowsPerTbl': 1000,
|
'rowsPerTbl': 10000,
|
||||||
'batchNum': 1000,
|
'batchNum': 3000,
|
||||||
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
|
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
|
||||||
'pollDelay': 5,
|
'pollDelay': 5,
|
||||||
'showMsg': 1,
|
'showMsg': 1,
|
||||||
'showRow': 1,
|
'showRow': 1,
|
||||||
'snapshot': 1}
|
'snapshot': 0}
|
||||||
|
|
||||||
# paraDict['vgroups'] = self.vgroups
|
paraDict['snapshot'] = self.snapshot
|
||||||
# paraDict['ctbNum'] = self.ctbNum
|
paraDict['vgroups'] = self.vgroups
|
||||||
# paraDict['rowsPerTbl'] = self.rowsPerTbl
|
paraDict['ctbNum'] = self.ctbNum
|
||||||
|
paraDict['rowsPerTbl'] = self.rowsPerTbl
|
||||||
|
|
||||||
tmqCom.initConsumerTable()
|
tmqCom.initConsumerTable()
|
||||||
tdCom.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], vgroups=paraDict["vgroups"],replica=1)
|
# tdCom.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], vgroups=paraDict["vgroups"],replica=1)
|
||||||
tdLog.info("create stb")
|
# tdLog.info("create stb")
|
||||||
tmqCom.create_stable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"])
|
# tmqCom.create_stable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"])
|
||||||
tdLog.info("create ctb")
|
# tdLog.info("create ctb")
|
||||||
tmqCom.create_ctable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix=paraDict['ctbPrefix'],
|
# tmqCom.create_ctable(tdSql, dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix=paraDict['ctbPrefix'],
|
||||||
ctbNum=paraDict["ctbNum"],ctbStartIdx=paraDict['ctbStartIdx'])
|
# ctbNum=paraDict["ctbNum"],ctbStartIdx=paraDict['ctbStartIdx'])
|
||||||
tdLog.info("insert data")
|
# tdLog.info("insert data")
|
||||||
tmqCom.insert_data_interlaceByMultiTbl(tsql=tdSql,dbName=paraDict["dbName"],ctbPrefix=paraDict["ctbPrefix"],
|
# tmqCom.insert_data_interlaceByMultiTbl(tsql=tdSql,dbName=paraDict["dbName"],ctbPrefix=paraDict["ctbPrefix"],
|
||||||
ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"],
|
# ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"],
|
||||||
startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
|
# startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx'])
|
||||||
tdLog.info("create topics from stb1")
|
tdLog.info("create topics from stb1")
|
||||||
topicFromStb1 = 'topic_stb1'
|
topicFromStb1 = 'topic_stb1'
|
||||||
queryString = "select ts, c1, c2 from %s.%s"%(paraDict['dbName'], paraDict['stbName'])
|
queryString = "select ts, c1, c2 from %s.%s"%(paraDict['dbName'], paraDict['stbName'])
|
||||||
|
@ -196,29 +200,29 @@ class TDTestCase:
|
||||||
tdLog.info("create topic sql: %s"%sqlString)
|
tdLog.info("create topic sql: %s"%sqlString)
|
||||||
tdSql.execute(sqlString)
|
tdSql.execute(sqlString)
|
||||||
|
|
||||||
consumerId = 0
|
consumerId = 1
|
||||||
expectrowcnt = paraDict["rowsPerTbl"] * paraDict["ctbNum"] * 2
|
expectrowcnt = paraDict["rowsPerTbl"] * paraDict["ctbNum"] * 2 + 100000
|
||||||
topicList = topicFromStb1
|
topicList = topicFromStb1
|
||||||
ifcheckdata = 0
|
ifcheckdata = 0
|
||||||
ifManualCommit = 0
|
ifManualCommit = 0
|
||||||
keyList = 'group.id:cgrp1,\
|
keyList = 'group.id:cgrp1,\
|
||||||
enable.auto.commit:true,\
|
enable.auto.commit:true,\
|
||||||
auto.commit.interval.ms:1000,\
|
auto.commit.interval.ms:3000,\
|
||||||
auto.offset.reset:earliest'
|
auto.offset.reset:earliest'
|
||||||
tmqCom.insertConsumerInfo(consumerId, expectrowcnt,topicList,keyList,ifcheckdata,ifManualCommit)
|
tmqCom.insertConsumerInfo(consumerId, expectrowcnt,topicList,keyList,ifcheckdata,ifManualCommit)
|
||||||
|
|
||||||
tdLog.info("start consume processor")
|
tdLog.info("start consume processor")
|
||||||
tmqCom.startTmqSimProcess(pollDelay=paraDict['pollDelay'],dbName=paraDict["dbName"],showMsg=paraDict['showMsg'], showRow=paraDict['showRow'],snapshot=paraDict['snapshot'])
|
tmqCom.startTmqSimProcess(pollDelay=paraDict['pollDelay'],dbName=paraDict["dbName"],showMsg=paraDict['showMsg'], showRow=paraDict['showRow'],snapshot=paraDict['snapshot'])
|
||||||
|
|
||||||
tdLog.info("create some new child table and insert data ")
|
|
||||||
tmqCom.insert_data_with_autoCreateTbl(tdSql,paraDict["dbName"],paraDict["stbName"],"ctb",paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"])
|
|
||||||
|
|
||||||
tmqCom.getStartCommitNotifyFromTmqsim()
|
tmqCom.getStartCommitNotifyFromTmqsim()
|
||||||
tdLog.info("================= restart dnode ===========================")
|
tdLog.info("================= restart dnode ===========================")
|
||||||
tdDnodes.stop(1)
|
tdDnodes.stop(1)
|
||||||
tdDnodes.start(1)
|
tdDnodes.start(1)
|
||||||
time.sleep(5)
|
time.sleep(3)
|
||||||
|
|
||||||
|
tdLog.info("create some new child table and insert data ")
|
||||||
|
tmqCom.insert_data_with_autoCreateTbl(tdSql,paraDict["dbName"],paraDict["stbName"],"ctb",paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"])
|
||||||
|
|
||||||
tdLog.info("insert process end, and start to check consume result")
|
tdLog.info("insert process end, and start to check consume result")
|
||||||
expectRows = 1
|
expectRows = 1
|
||||||
resultList = tmqCom.selectConsumeResult(expectRows)
|
resultList = tmqCom.selectConsumeResult(expectRows)
|
||||||
|
@ -227,10 +231,10 @@ class TDTestCase:
|
||||||
totalConsumeRows += resultList[i]
|
totalConsumeRows += resultList[i]
|
||||||
|
|
||||||
tdSql.query(queryString)
|
tdSql.query(queryString)
|
||||||
totalRowsInserted = tdSql.getRows()
|
totalRowsFromQuery = tdSql.getRows()
|
||||||
|
|
||||||
if totalConsumeRows != totalRowsInserted:
|
tdLog.info("act consume rows: %d, expect consume rows: %d"%(totalConsumeRows, totalRowsFromQuery))
|
||||||
tdLog.info("act consume rows: %d, expect consume rows: %d"%(totalConsumeRows, totalRowsInserted))
|
if totalConsumeRows != totalRowsFromQuery:
|
||||||
tdLog.exit("tmq consume rows error!")
|
tdLog.exit("tmq consume rows error!")
|
||||||
|
|
||||||
tdSql.query("drop topic %s"%topicFromStb1)
|
tdSql.query("drop topic %s"%topicFromStb1)
|
||||||
|
@ -239,8 +243,8 @@ class TDTestCase:
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
tdSql.prepare()
|
tdSql.prepare()
|
||||||
|
self.prepareTestEnv()
|
||||||
self.tmqCase1()
|
# self.tmqCase1()
|
||||||
self.tmqCase2()
|
self.tmqCase2()
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
|
|
|
@ -33,7 +33,7 @@ python3 ./test.py -f 1-insert/create_retentions.py
|
||||||
python3 ./test.py -f 1-insert/table_param_ttl.py
|
python3 ./test.py -f 1-insert/table_param_ttl.py
|
||||||
|
|
||||||
python3 ./test.py -f 1-insert/update_data.py
|
python3 ./test.py -f 1-insert/update_data.py
|
||||||
|
python3 ./test.py -f 1-insert/delete_data.py
|
||||||
python3 ./test.py -f 2-query/db.py
|
python3 ./test.py -f 2-query/db.py
|
||||||
|
|
||||||
python3 ./test.py -f 2-query/between.py
|
python3 ./test.py -f 2-query/between.py
|
||||||
|
@ -184,15 +184,15 @@ python3 ./test.py -f 7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb.py
|
||||||
python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py
|
python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py
|
||||||
python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb-funcNFilter.py
|
python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb-funcNFilter.py
|
||||||
python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py
|
python3 ./test.py -f 7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py
|
||||||
python3 ./test.py -f 7-tmq/tmqAutoCreateTbl.py
|
#python3 ./test.py -f 7-tmq/tmqAutoCreateTbl.py
|
||||||
#python3 ./test.py -f 7-tmq/tmqDnodeRestart.py
|
#python3 ./test.py -f 7-tmq/tmqDnodeRestart.py
|
||||||
python3 ./test.py -f 7-tmq/tmqUpdate-1ctb.py
|
python3 ./test.py -f 7-tmq/tmqUpdate-1ctb.py
|
||||||
python3 ./test.py -f 7-tmq/tmqUpdate-multiCtb-snapshot0.py
|
python3 ./test.py -f 7-tmq/tmqUpdate-multiCtb-snapshot0.py
|
||||||
python3 ./test.py -f 7-tmq/tmqUpdate-multiCtb-snapshot1.py
|
python3 ./test.py -f 7-tmq/tmqUpdate-multiCtb-snapshot1.py
|
||||||
#python3 ./test.py -f 7-tmq/tmqDelete-1ctb.py
|
#python3 ./test.py -f 7-tmq/tmqDelete-1ctb.py
|
||||||
python3 ./test.py -f 7-tmq/tmqUdf.py
|
python3 ./test.py -f 7-tmq/tmqUdf.py
|
||||||
python3 ./test.py -f 7-tmq/tmqUdf-multCtb-snapshot0.py
|
# python3 ./test.py -f 7-tmq/tmqUdf-multCtb-snapshot0.py
|
||||||
python3 ./test.py -f 7-tmq/tmqUdf-multCtb-snapshot1.py
|
# python3 ./test.py -f 7-tmq/tmqUdf-multCtb-snapshot1.py
|
||||||
python3 ./test.py -f 7-tmq/stbTagFilter-1ctb.py
|
python3 ./test.py -f 7-tmq/stbTagFilter-1ctb.py
|
||||||
python3 ./test.py -f 7-tmq/stbTagFilter-multiCtb.py
|
python3 ./test.py -f 7-tmq/stbTagFilter-multiCtb.py
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,7 @@ SScript *simProcessCallOver(SScript *script) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (simScriptPos == -1) return NULL;
|
if (simScriptPos == -1) return NULL;
|
||||||
|
if (!simExecSuccess) return NULL;
|
||||||
|
|
||||||
return simScriptList[simScriptPos];
|
return simScriptList[simScriptPos];
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -197,7 +197,7 @@ void shellRunSingleCommandImp(char *command) {
|
||||||
|
|
||||||
et = taosGetTimestampUs();
|
et = taosGetTimestampUs();
|
||||||
if (error_no == 0) {
|
if (error_no == 0) {
|
||||||
printf("Query OK, %d rows affected (%.6fs)\r\n", numOfRows, (et - st) / 1E6);
|
printf("Query OK, %d rows in database (%.6fs)\r\n", numOfRows, (et - st) / 1E6);
|
||||||
} else {
|
} else {
|
||||||
printf("Query interrupted (%s), %d rows affected (%.6fs)\r\n", taos_errstr(pSql), numOfRows, (et - st) / 1E6);
|
printf("Query interrupted (%s), %d rows affected (%.6fs)\r\n", taos_errstr(pSql), numOfRows, (et - st) / 1E6);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 2b75339b8b5c239619d1f09970d03075c58140dd
|
Subproject commit f84cb6e51556d8030585128c2b252aa2a6453328
|
Loading…
Reference in New Issue