Merge branch 'develop' into feature/query
This commit is contained in:
commit
24e24ba163
|
@ -10,7 +10,7 @@ ENDIF ()
|
|||
IF (DEFINED VERCOMPATIBLE)
|
||||
SET(TD_VER_COMPATIBLE ${VERCOMPATIBLE})
|
||||
ELSE ()
|
||||
SET(TD_VER_COMPATIBLE "1.0.0.0")
|
||||
SET(TD_VER_COMPATIBLE "2.0.0.0")
|
||||
ENDIF ()
|
||||
|
||||
find_program(HAVE_GIT NAMES git)
|
||||
|
|
|
@ -143,7 +143,7 @@ taosd -C
|
|||
|
||||
TDengine集群中加入一个新的dnode时,涉及集群相关的一些参数必须与已有集群的配置相同,否则不能成功加入到集群中。会进行校验的参数如下:
|
||||
|
||||
- numOfMnodes:系统中管理节点个数。默认值:3。
|
||||
- numOfMnodes:系统中管理节点个数。默认值:3。(2.0 版本从 2.0.20.11 开始、2.1 及以上版本从 2.1.6.0 开始,numOfMnodes 默认值改为 1。)
|
||||
- mnodeEqualVnodeNum: 一个mnode等同于vnode消耗的个数。默认值:4。
|
||||
- offlineThreshold: dnode离线阈值,超过该时间将导致该dnode从集群中删除。单位为秒,默认值:86400*10(即10天)。
|
||||
- statusInterval: dnode向mnode报告状态时长。单位为秒,默认值:1。
|
||||
|
|
|
@ -132,7 +132,7 @@ The SQL creates a database demo, each data file stores 10 days of data, the memo
|
|||
|
||||
When adding a new dnode to the TDengine cluster, some parameters related to the cluster must be the same as the configuration of the existing cluster, otherwise it cannot be successfully added to the cluster. The parameters that will be verified are as follows:
|
||||
|
||||
- numOfMnodes: the number of management nodes in the system. Default: 3.
|
||||
- numOfMnodes: the number of management nodes in the system. Default: 3. (Since version 2.0.20.11 and version 2.1.6.0, the default value of "numOfMnodes" has been changed to 1.)
|
||||
- balance: whether to enable load balancing. 0: No, 1: Yes. Default: 1.
|
||||
- mnodeEqualVnodeNum: an mnode is equal to the number of vnodes consumed. Default: 4.
|
||||
- offlineThreshold: the threshold for a dnode to be offline, exceed which the dnode will be removed from the cluster. The unit is seconds, and the default value is 86400*10 (that is, 10 days).
|
||||
|
|
|
@ -54,6 +54,7 @@ if command -v sudo > /dev/null; then
|
|||
fi
|
||||
|
||||
update_flag=0
|
||||
prompt_force=0
|
||||
|
||||
initd_mod=0
|
||||
service_mod=2
|
||||
|
@ -777,10 +778,21 @@ function is_version_compatible() {
|
|||
if [ -f ${script_dir}/driver/vercomp.txt ]; then
|
||||
min_compatible_version=`cat ${script_dir}/driver/vercomp.txt`
|
||||
else
|
||||
min_compatible_version=$(${script_dir}/bin/tqd -V | head -1 | cut -d ' ' -f 5)
|
||||
min_compatible_version=$(${script_dir}/bin/taosd -V | head -1 | cut -d ' ' -f 5)
|
||||
fi
|
||||
|
||||
# [TD-5628] prompt to execute taosd --force-keep-file if upgrade from lower version within 2.0.16.0
|
||||
exist_version=$(/usr/local/taos/bin/taosd -V | head -1 | cut -d ' ' -f 3)
|
||||
vercomp $exist_version "2.0.16.0"
|
||||
case $? in
|
||||
2)
|
||||
prompt_force=1
|
||||
;;
|
||||
esac
|
||||
|
||||
vercomp $curr_version $min_compatible_version
|
||||
echo "" # avoid $? value not update
|
||||
|
||||
case $? in
|
||||
0) return 0;;
|
||||
1) return 0;;
|
||||
|
@ -789,6 +801,12 @@ function is_version_compatible() {
|
|||
}
|
||||
|
||||
function update_TDengine() {
|
||||
# Check if version compatible
|
||||
if ! is_version_compatible; then
|
||||
echo -e "${RED}Version incompatible${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Start to update
|
||||
if [ ! -e taos.tar.gz ]; then
|
||||
echo "File taos.tar.gz does not exist"
|
||||
|
@ -797,12 +815,6 @@ function update_TDengine() {
|
|||
tar -zxf taos.tar.gz
|
||||
install_jemalloc
|
||||
|
||||
# Check if version compatible
|
||||
if ! is_version_compatible; then
|
||||
echo -e "${RED}Version incompatible${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}Start to update TDengine...${NC}"
|
||||
# Stop the service if running
|
||||
if pidof taosd &> /dev/null; then
|
||||
|
@ -875,6 +887,10 @@ function update_TDengine() {
|
|||
echo -e "${GREEN_DARK}To access TDengine ${NC}: use ${GREEN_UNDERLINE}taos -h $serverFqdn${NC} in shell${NC}"
|
||||
fi
|
||||
|
||||
if ((${prompt_force}==1)); then
|
||||
echo ""
|
||||
echo -e "${RED}Please run 'taosd --force-keep-file' at first time for the exist TDengine $exist_version!${NC}"
|
||||
fi
|
||||
echo
|
||||
echo -e "\033[44;32;1mTDengine is updated successfully!${NC}"
|
||||
else
|
||||
|
|
|
@ -746,7 +746,7 @@ function is_version_compatible() {
|
|||
if [ -f ${script_dir}/driver/vercomp.txt ]; then
|
||||
min_compatible_version=`cat ${script_dir}/driver/vercomp.txt`
|
||||
else
|
||||
min_compatible_version=$(${script_dir}/bin/tqd -V | head -1 | cut -d ' ' -f 5)
|
||||
min_compatible_version=$(${script_dir}/bin/powerd -V | head -1 | cut -d ' ' -f 5)
|
||||
fi
|
||||
|
||||
vercomp $curr_version $min_compatible_version
|
||||
|
|
|
@ -484,7 +484,7 @@ int32_t loadTableMeta(TAOS* taos, char* tableName, SSmlSTableSchema* schema, SSm
|
|||
size_t tagIndex = taosArrayGetSize(schema->tags) - 1;
|
||||
taosHashPut(schema->tagHash, field.name, strlen(field.name), &tagIndex, sizeof(tagIndex));
|
||||
}
|
||||
tscDebug("SML:0x%"PRIx64 "load table meta succeed. %s, columns number: %d, tag number: %d, precision: %d",
|
||||
tscDebug("SML:0x%"PRIx64 " load table meta succeed. table name: %s, columns number: %d, tag number: %d, precision: %d",
|
||||
info->id, tableName, tableMeta->tableInfo.numOfColumns, tableMeta->tableInfo.numOfTags, schema->precision);
|
||||
free(tableMeta); tableMeta = NULL;
|
||||
return code;
|
||||
|
|
|
@ -6074,10 +6074,12 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
|
||||
SSchema* pSchema = tscGetTableTagSchema(pTableMetaInfo->pTableMeta);
|
||||
int16_t numOfTags = tscGetNumOfTags(pTableMetaInfo->pTableMeta);
|
||||
int16_t i;
|
||||
int32_t numOfCols = tscGetNumOfColumns(pTableMetaInfo->pTableMeta);
|
||||
int32_t tagIndex = columnIndex.columnIndex - numOfCols;
|
||||
assert(tagIndex>=0);
|
||||
uint32_t nLen = 0;
|
||||
for (i = 0; i < numOfTags; ++i) {
|
||||
nLen += (i != columnIndex.columnIndex) ? pSchema[i].bytes : pItem->bytes;
|
||||
for (int i = 0; i < numOfTags; ++i) {
|
||||
nLen += (i != tagIndex) ? pSchema[i].bytes : pItem->bytes;
|
||||
}
|
||||
if (nLen >= TSDB_MAX_TAGS_LEN) {
|
||||
return invalidOperationMsg(pMsg, msg24);
|
||||
|
|
|
@ -337,11 +337,16 @@ int tscSendMsgToServer(SSqlObj *pSql) {
|
|||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
|
||||
static void doProcessMsgFromServer(SSchedMsg* pSchedMsg) {
|
||||
SRpcMsg* rpcMsg = pSchedMsg->ahandle;
|
||||
SRpcEpSet* pEpSet = pSchedMsg->thandle;
|
||||
|
||||
TSDB_CACHE_PTR_TYPE handle = (TSDB_CACHE_PTR_TYPE) rpcMsg->ahandle;
|
||||
SSqlObj* pSql = (SSqlObj*)taosAcquireRef(tscObjRef, handle);
|
||||
if (pSql == NULL) {
|
||||
rpcFreeCont(rpcMsg->pCont);
|
||||
free(rpcMsg);
|
||||
free(pEpSet);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -359,6 +364,8 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
|
|||
taosRemoveRef(tscObjRef, handle);
|
||||
taosReleaseRef(tscObjRef, handle);
|
||||
rpcFreeCont(rpcMsg->pCont);
|
||||
free(rpcMsg);
|
||||
free(pEpSet);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -370,6 +377,8 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
|
|||
taosRemoveRef(tscObjRef, handle);
|
||||
taosReleaseRef(tscObjRef, handle);
|
||||
rpcFreeCont(rpcMsg->pCont);
|
||||
free(rpcMsg);
|
||||
free(pEpSet);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -423,6 +432,8 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
|
|||
if (rpcMsg->code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) {
|
||||
taosReleaseRef(tscObjRef, handle);
|
||||
rpcFreeCont(rpcMsg->pCont);
|
||||
free(rpcMsg);
|
||||
free(pEpSet);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -430,7 +441,7 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
|
|||
}
|
||||
|
||||
pRes->rspLen = 0;
|
||||
|
||||
|
||||
if (pRes->code == TSDB_CODE_TSC_QUERY_CANCELLED) {
|
||||
tscDebug("0x%"PRIx64" query is cancelled, code:%s", pSql->self, tstrerror(pRes->code));
|
||||
} else {
|
||||
|
@ -479,7 +490,7 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
|
|||
tscDebug("0x%"PRIx64" SQL cmd:%s, code:%s rspLen:%d", pSql->self, sqlCmd[pCmd->command], tstrerror(pRes->code), pRes->rspLen);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (pRes->code == TSDB_CODE_SUCCESS && tscProcessMsgRsp[pCmd->command]) {
|
||||
rpcMsg->code = (*tscProcessMsgRsp[pCmd->command])(pSql);
|
||||
}
|
||||
|
@ -500,6 +511,29 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
|
|||
|
||||
taosReleaseRef(tscObjRef, handle);
|
||||
rpcFreeCont(rpcMsg->pCont);
|
||||
free(rpcMsg);
|
||||
free(pEpSet);
|
||||
}
|
||||
|
||||
void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
|
||||
SSchedMsg schedMsg = {0};
|
||||
|
||||
schedMsg.fp = doProcessMsgFromServer;
|
||||
|
||||
SRpcMsg* rpcMsgCopy = calloc(1, sizeof(SRpcMsg));
|
||||
memcpy(rpcMsgCopy, rpcMsg, sizeof(struct SRpcMsg));
|
||||
schedMsg.ahandle = (void*)rpcMsgCopy;
|
||||
|
||||
SRpcEpSet* pEpSetCopy = NULL;
|
||||
if (pEpSet != NULL) {
|
||||
pEpSetCopy = calloc(1, sizeof(SRpcEpSet));
|
||||
memcpy(pEpSetCopy, pEpSet, sizeof(SRpcEpSet));
|
||||
}
|
||||
|
||||
schedMsg.thandle = (void*)pEpSetCopy;
|
||||
schedMsg.msg = NULL;
|
||||
|
||||
taosScheduleTask(tscQhandle, &schedMsg);
|
||||
}
|
||||
|
||||
int doBuildAndSendMsg(SSqlObj *pSql) {
|
||||
|
|
|
@ -1276,10 +1276,10 @@ static void tscDestroyResPointerInfo(SSqlRes* pRes) {
|
|||
for (int i = 0; i < pRes->numOfCols; i++) {
|
||||
tfree(pRes->buffer[i]);
|
||||
}
|
||||
|
||||
|
||||
pRes->numOfCols = 0;
|
||||
}
|
||||
|
||||
|
||||
tfree(pRes->pRsp);
|
||||
|
||||
tfree(pRes->tsrow);
|
||||
|
@ -1719,7 +1719,7 @@ int32_t tscCreateDataBlock(size_t defaultSize, int32_t rowSize, int32_t startOff
|
|||
if (dataBuf->nAllocSize <= dataBuf->headerSize) {
|
||||
dataBuf->nAllocSize = dataBuf->headerSize * 2;
|
||||
}
|
||||
|
||||
|
||||
//dataBuf->pData = calloc(1, dataBuf->nAllocSize);
|
||||
dataBuf->pData = malloc(dataBuf->nAllocSize);
|
||||
if (dataBuf->pData == NULL) {
|
||||
|
@ -1835,7 +1835,7 @@ static SMemRow tdGenMemRowFromBuilder(SMemRowBuilder* pBuilder) {
|
|||
toffset += TYPE_BYTES[pSchema[j].type];
|
||||
++j;
|
||||
}
|
||||
|
||||
|
||||
#if 0 // no need anymore
|
||||
while (i < nColsBound) {
|
||||
p = payloadNextCol(p);
|
||||
|
@ -2005,7 +2005,7 @@ int32_t tscMergeTableDataBlocks(SInsertStatementParam *pInsertParam, bool freeBl
|
|||
// the maximum expanded size in byte when a row-wise data is converted to SDataRow format
|
||||
int32_t expandSize = getRowExpandSize(pOneTableBlock->pTableMeta);
|
||||
STableDataBlocks* dataBuf = NULL;
|
||||
|
||||
|
||||
int32_t ret = tscGetDataBlockFromList(pVnodeDataBlockHashList, pOneTableBlock->vgId, TSDB_PAYLOAD_SIZE,
|
||||
INSERT_HEAD_SIZE, 0, &pOneTableBlock->tableName, pOneTableBlock->pTableMeta, &dataBuf, pVnodeDataBlockList);
|
||||
if (ret != TSDB_CODE_SUCCESS) {
|
||||
|
@ -2059,7 +2059,7 @@ int32_t tscMergeTableDataBlocks(SInsertStatementParam *pInsertParam, bool freeBl
|
|||
pInsertParam->objectId, tNameGetTableName(&pOneTableBlock->tableName), pBlocks->tid,
|
||||
pBlocks->numOfRows, pBlocks->sversion, blkKeyInfo.pKeyTuple->skey, pLastKeyTuple->skey);
|
||||
}
|
||||
|
||||
|
||||
int32_t len = pBlocks->numOfRows * (pOneTableBlock->rowSize + expandSize) + sizeof(STColumn) * tscGetNumOfColumns(pOneTableBlock->pTableMeta);
|
||||
|
||||
pBlocks->tid = htonl(pBlocks->tid);
|
||||
|
@ -2083,7 +2083,7 @@ int32_t tscMergeTableDataBlocks(SInsertStatementParam *pInsertParam, bool freeBl
|
|||
}else {
|
||||
tscDebug("0x%"PRIx64" table %s data block is empty", pInsertParam->objectId, pOneTableBlock->tableName.tname);
|
||||
}
|
||||
|
||||
|
||||
p = taosHashIterate(pInsertParam->pTableBlockHashList, p);
|
||||
if (p == NULL) {
|
||||
break;
|
||||
|
@ -2147,7 +2147,7 @@ int tscAllocPayload(SSqlCmd* pCmd, int size) {
|
|||
pCmd->payload = b;
|
||||
pCmd->allocSize = size;
|
||||
}
|
||||
|
||||
|
||||
memset(pCmd->payload, 0, pCmd->allocSize);
|
||||
}
|
||||
|
||||
|
@ -2164,7 +2164,7 @@ TAOS_FIELD tscCreateField(int8_t type, const char* name, int16_t bytes) {
|
|||
SInternalField* tscFieldInfoAppend(SFieldInfo* pFieldInfo, TAOS_FIELD* pField) {
|
||||
assert(pFieldInfo != NULL);
|
||||
pFieldInfo->numOfOutput++;
|
||||
|
||||
|
||||
struct SInternalField info = { .pExpr = NULL, .visible = true };
|
||||
|
||||
info.field = *pField;
|
||||
|
@ -2256,13 +2256,13 @@ int32_t tscGetResRowLength(SArray* pExprList) {
|
|||
if (num == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int32_t size = 0;
|
||||
for(int32_t i = 0; i < num; ++i) {
|
||||
SExprInfo* pExpr = taosArrayGetP(pExprList, i);
|
||||
size += pExpr->base.resBytes;
|
||||
}
|
||||
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
|
@ -2402,7 +2402,7 @@ SExprInfo* tscExprCreate(STableMetaInfo* pTableMetaInfo, int16_t functionId, SCo
|
|||
snprintf(p->colInfo.name, len, "%s.%s", pTableMetaInfo->aliasName, pSchema->name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
p->colInfo.flag = colType;
|
||||
p->colInfo.colIndex = pColIndex->columnIndex;
|
||||
|
||||
|
@ -2414,7 +2414,7 @@ SExprInfo* tscExprCreate(STableMetaInfo* pTableMetaInfo, int16_t functionId, SCo
|
|||
if (pTableMetaInfo->pTableMeta) {
|
||||
p->uid = pTableMetaInfo->pTableMeta->id.uid;
|
||||
}
|
||||
|
||||
|
||||
return pExpr;
|
||||
}
|
||||
|
||||
|
@ -2500,18 +2500,18 @@ SExprInfo* tscExprGet(SQueryInfo* pQueryInfo, int32_t index) {
|
|||
*/
|
||||
void tscExprDestroy(SArray* pExprInfo) {
|
||||
size_t size = taosArrayGetSize(pExprInfo);
|
||||
|
||||
|
||||
for(int32_t i = 0; i < size; ++i) {
|
||||
SExprInfo* pExpr = taosArrayGetP(pExprInfo, i);
|
||||
sqlExprDestroy(pExpr);
|
||||
}
|
||||
|
||||
|
||||
taosArrayDestroy(pExprInfo);
|
||||
}
|
||||
|
||||
int32_t tscExprCopy(SArray* dst, const SArray* src, uint64_t uid, bool deepcopy) {
|
||||
assert(src != NULL && dst != NULL);
|
||||
|
||||
|
||||
size_t size = taosArrayGetSize(src);
|
||||
for (int32_t i = 0; i < size; ++i) {
|
||||
SExprInfo* pExpr = taosArrayGetP(src, i);
|
||||
|
@ -2596,7 +2596,7 @@ SColumn* tscColumnListInsert(SArray* pColumnList, int32_t columnIndex, uint64_t
|
|||
if (columnIndex < 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
size_t numOfCols = taosArrayGetSize(pColumnList);
|
||||
|
||||
int32_t i = 0;
|
||||
|
@ -2626,7 +2626,7 @@ SColumn* tscColumnListInsert(SArray* pColumnList, int32_t columnIndex, uint64_t
|
|||
taosArrayInsert(pColumnList, i, &b);
|
||||
} else {
|
||||
SColumn* pCol = taosArrayGetP(pColumnList, i);
|
||||
|
||||
|
||||
if (i < numOfCols && (pCol->columnIndex > columnIndex || pCol->tableUid != uid)) {
|
||||
SColumn* b = calloc(1, sizeof(SColumn));
|
||||
if (b == NULL) {
|
||||
|
@ -2650,7 +2650,7 @@ SColumn* tscColumnListInsert(SArray* pColumnList, int32_t columnIndex, uint64_t
|
|||
|
||||
SColumn* tscColumnClone(const SColumn* src) {
|
||||
assert(src != NULL);
|
||||
|
||||
|
||||
SColumn* dst = calloc(1, sizeof(SColumn));
|
||||
if (dst == NULL) {
|
||||
return NULL;
|
||||
|
@ -2679,7 +2679,7 @@ void tscColumnCopy(SColumn* pDest, const SColumn* pSrc) {
|
|||
|
||||
void tscColumnListCopy(SArray* dst, const SArray* src, uint64_t tableUid) {
|
||||
assert(src != NULL && dst != NULL);
|
||||
|
||||
|
||||
size_t num = taosArrayGetSize(src);
|
||||
for (int32_t i = 0; i < num; ++i) {
|
||||
SColumn* pCol = taosArrayGetP(src, i);
|
||||
|
@ -2790,18 +2790,19 @@ void tscDequoteAndTrimToken(SStrToken* pToken) {
|
|||
}
|
||||
|
||||
int32_t tscValidateName(SStrToken* pToken) {
|
||||
if (pToken->type != TK_STRING && pToken->type != TK_ID) {
|
||||
if (pToken == NULL || pToken->z == NULL ||
|
||||
(pToken->type != TK_STRING && pToken->type != TK_ID)) {
|
||||
return TSDB_CODE_TSC_INVALID_OPERATION;
|
||||
}
|
||||
|
||||
char* sep = strnchr(pToken->z, TS_PATH_DELIMITER[0], pToken->n, true);
|
||||
if (sep == NULL) { // single part
|
||||
if (pToken->type == TK_STRING) {
|
||||
|
||||
|
||||
tscDequoteAndTrimToken(pToken);
|
||||
tscStrToLower(pToken->z, pToken->n);
|
||||
//pToken->n = (uint32_t)strtrim(pToken->z);
|
||||
|
||||
|
||||
int len = tGetToken(pToken->z, &pToken->type);
|
||||
|
||||
// single token, validate it
|
||||
|
@ -2853,7 +2854,7 @@ int32_t tscValidateName(SStrToken* pToken) {
|
|||
if (pToken->type == TK_STRING && validateQuoteToken(pToken) != TSDB_CODE_SUCCESS) {
|
||||
return TSDB_CODE_TSC_INVALID_OPERATION;
|
||||
}
|
||||
|
||||
|
||||
// re-build the whole name string
|
||||
if (pStr[firstPartLen] == TS_PATH_DELIMITER[0]) {
|
||||
// first part do not have quote do nothing
|
||||
|
@ -2892,7 +2893,7 @@ bool tscValidateColumnId(STableMetaInfo* pTableMetaInfo, int32_t colId, int32_t
|
|||
|
||||
SSchema* pSchema = tscGetTableSchema(pTableMetaInfo->pTableMeta);
|
||||
STableComInfo tinfo = tscGetTableInfo(pTableMetaInfo->pTableMeta);
|
||||
|
||||
|
||||
int32_t numOfTotal = tinfo.numOfTags + tinfo.numOfColumns;
|
||||
|
||||
for (int32_t i = 0; i < numOfTotal; ++i) {
|
||||
|
@ -2937,21 +2938,21 @@ int32_t tscTagCondCopy(STagCond* dest, const STagCond* src) {
|
|||
|
||||
|
||||
dest->relType = src->relType;
|
||||
|
||||
|
||||
if (src->pCond == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
size_t s = taosArrayGetSize(src->pCond);
|
||||
dest->pCond = taosArrayInit(s, sizeof(SCond));
|
||||
|
||||
|
||||
for (int32_t i = 0; i < s; ++i) {
|
||||
SCond* pCond = taosArrayGet(src->pCond, i);
|
||||
|
||||
|
||||
SCond c = {0};
|
||||
c.len = pCond->len;
|
||||
c.uid = pCond->uid;
|
||||
|
||||
|
||||
if (pCond->len > 0) {
|
||||
assert(pCond->cond != NULL);
|
||||
c.cond = malloc(c.len);
|
||||
|
@ -2961,7 +2962,7 @@ int32_t tscTagCondCopy(STagCond* dest, const STagCond* src) {
|
|||
|
||||
memcpy(c.cond, pCond->cond, c.len);
|
||||
}
|
||||
|
||||
|
||||
taosArrayPush(dest->pCond, &c);
|
||||
}
|
||||
|
||||
|
@ -2970,14 +2971,14 @@ int32_t tscTagCondCopy(STagCond* dest, const STagCond* src) {
|
|||
|
||||
void tscTagCondRelease(STagCond* pTagCond) {
|
||||
free(pTagCond->tbnameCond.cond);
|
||||
|
||||
|
||||
if (pTagCond->pCond != NULL) {
|
||||
size_t s = taosArrayGetSize(pTagCond->pCond);
|
||||
for (int32_t i = 0; i < s; ++i) {
|
||||
SCond* p = taosArrayGet(pTagCond->pCond, i);
|
||||
tfree(p->cond);
|
||||
}
|
||||
|
||||
|
||||
taosArrayDestroy(pTagCond->pCond);
|
||||
}
|
||||
|
||||
|
@ -3004,7 +3005,7 @@ void tscTagCondRelease(STagCond* pTagCond) {
|
|||
void tscGetSrcColumnInfo(SSrcColumnInfo* pColInfo, SQueryInfo* pQueryInfo) {
|
||||
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||
SSchema* pSchema = tscGetTableSchema(pTableMetaInfo->pTableMeta);
|
||||
|
||||
|
||||
size_t numOfExprs = tscNumOfExprs(pQueryInfo);
|
||||
for (int32_t i = 0; i < numOfExprs; ++i) {
|
||||
SExprInfo* pExpr = tscExprGet(pQueryInfo, i);
|
||||
|
@ -3012,7 +3013,7 @@ void tscGetSrcColumnInfo(SSrcColumnInfo* pColInfo, SQueryInfo* pQueryInfo) {
|
|||
|
||||
if (TSDB_COL_IS_TAG(pExpr->base.colInfo.flag)) {
|
||||
SSchema* pTagSchema = tscGetTableTagSchema(pTableMetaInfo->pTableMeta);
|
||||
|
||||
|
||||
int16_t index = pExpr->base.colInfo.colIndex;
|
||||
pColInfo[i].type = (index != -1) ? pTagSchema[index].type : TSDB_DATA_TYPE_BINARY;
|
||||
} else {
|
||||
|
@ -3037,7 +3038,7 @@ bool tscShouldBeFreed(SSqlObj* pSql) {
|
|||
if (pSql == NULL || pSql->signature != pSql) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
STscObj* pTscObj = pSql->pTscObj;
|
||||
if (pSql->pStream != NULL || pTscObj->hbrid == pSql->self || pSql->pSubscription != NULL) {
|
||||
return false;
|
||||
|
@ -3116,7 +3117,7 @@ STableMetaInfo* tscGetTableMetaInfoByUid(SQueryInfo* pQueryInfo, uint64_t uid, i
|
|||
void tscInitQueryInfo(SQueryInfo* pQueryInfo) {
|
||||
assert(pQueryInfo->fieldsInfo.internalField == NULL);
|
||||
pQueryInfo->fieldsInfo.internalField = taosArrayInit(4, sizeof(SInternalField));
|
||||
|
||||
|
||||
assert(pQueryInfo->exprList == NULL);
|
||||
|
||||
pQueryInfo->exprList = taosArrayInit(4, POINTER_BYTES);
|
||||
|
@ -3178,11 +3179,12 @@ static void freeQueryInfoImpl(SQueryInfo* pQueryInfo) {
|
|||
pQueryInfo->groupbyExpr.columnInfo = NULL;
|
||||
pQueryInfo->groupbyExpr.numOfGroupCols = 0;
|
||||
}
|
||||
|
||||
|
||||
pQueryInfo->tsBuf = tsBufDestroy(pQueryInfo->tsBuf);
|
||||
pQueryInfo->fillType = 0;
|
||||
|
||||
tfree(pQueryInfo->fillVal);
|
||||
pQueryInfo->fillType = 0;
|
||||
tfree(pQueryInfo->buf);
|
||||
|
||||
taosArrayDestroy(pQueryInfo->pUpstream);
|
||||
|
@ -3374,7 +3376,7 @@ void clearAllTableMetaInfo(SQueryInfo* pQueryInfo, bool removeMeta) {
|
|||
tNameExtractFullName(&pTableMetaInfo->name, name);
|
||||
taosHashRemove(tscTableMetaMap, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
}
|
||||
|
||||
|
||||
tscFreeVgroupTableInfo(pTableMetaInfo->pVgroupTables);
|
||||
tscClearTableMetaInfo(pTableMetaInfo);
|
||||
|
||||
|
@ -3408,11 +3410,11 @@ STableMetaInfo* tscAddTableMetaInfo(SQueryInfo* pQueryInfo, SName* name, STableM
|
|||
|
||||
pTableMetaInfo->pTableMeta = pTableMeta;
|
||||
if (pTableMetaInfo->pTableMeta == NULL) {
|
||||
pTableMetaInfo->tableMetaSize = 0;
|
||||
pTableMetaInfo->tableMetaSize = 0;
|
||||
} else {
|
||||
pTableMetaInfo->tableMetaSize = tscGetTableMetaSize(pTableMeta);
|
||||
}
|
||||
|
||||
|
||||
if (vgroupList != NULL) {
|
||||
pTableMetaInfo->vgroupList = tscVgroupInfoClone(vgroupList);
|
||||
}
|
||||
|
@ -3428,7 +3430,7 @@ STableMetaInfo* tscAddTableMetaInfo(SQueryInfo* pQueryInfo, SName* name, STableM
|
|||
}
|
||||
|
||||
pTableMetaInfo->pVgroupTables = tscVgroupTableInfoDup(pVgroupTables);
|
||||
|
||||
|
||||
pQueryInfo->numOfTables += 1;
|
||||
return pTableMetaInfo;
|
||||
}
|
||||
|
@ -3636,7 +3638,7 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, __async_cb_func_t
|
|||
goto _error;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (tscTagCondCopy(&pNewQueryInfo->tagCond, &pQueryInfo->tagCond) != 0) {
|
||||
terrno = TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||
goto _error;
|
||||
|
@ -3692,14 +3694,14 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, __async_cb_func_t
|
|||
|
||||
pFinalInfo = tscAddTableMetaInfo(pNewQueryInfo, &pTableMetaInfo->name, pTableMeta, pTableMetaInfo->vgroupList,
|
||||
pTableMetaInfo->tagColList, pTableMetaInfo->pVgroupTables);
|
||||
|
||||
|
||||
} else { // transfer the ownership of pTableMeta to the newly create sql object.
|
||||
STableMetaInfo* pPrevInfo = tscGetTableMetaInfoFromCmd(&pPrevSql->cmd, 0);
|
||||
if (pPrevInfo->pTableMeta && pPrevInfo->pTableMeta->tableType < 0) {
|
||||
terrno = TSDB_CODE_TSC_APP_ERROR;
|
||||
goto _error;
|
||||
}
|
||||
|
||||
|
||||
STableMeta* pPrevTableMeta = tscTableMetaDup(pPrevInfo->pTableMeta);
|
||||
SVgroupsInfo* pVgroupsInfo = pPrevInfo->vgroupList;
|
||||
pFinalInfo = tscAddTableMetaInfo(pNewQueryInfo, &pTableMetaInfo->name, pPrevTableMeta, pVgroupsInfo, pTableMetaInfo->tagColList,
|
||||
|
@ -3719,9 +3721,9 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, __async_cb_func_t
|
|||
|
||||
goto _error;
|
||||
}
|
||||
|
||||
|
||||
assert(pNewQueryInfo->numOfTables == 1);
|
||||
|
||||
|
||||
if (UTIL_TABLE_IS_SUPER_TABLE(pTableMetaInfo)) {
|
||||
assert(pFinalInfo->vgroupList != NULL);
|
||||
}
|
||||
|
@ -3730,13 +3732,13 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, __async_cb_func_t
|
|||
|
||||
if (cmd == TSDB_SQL_SELECT) {
|
||||
size_t size = taosArrayGetSize(pNewQueryInfo->colList);
|
||||
|
||||
|
||||
tscDebug("0x%"PRIx64" new subquery:0x%"PRIx64", tableIndex:%d, vgroupIndex:%d, type:%d, exprInfo:%" PRIzu ", colList:%" PRIzu ","
|
||||
"fieldInfo:%d, name:%s, qrang:%" PRId64 " - %" PRId64 " order:%d, limit:%" PRId64,
|
||||
pSql->self, pNew->self, tableIndex, pTableMetaInfo->vgroupIndex, pNewQueryInfo->type, tscNumOfExprs(pNewQueryInfo),
|
||||
size, pNewQueryInfo->fieldsInfo.numOfOutput, tNameGetTableName(&pFinalInfo->name), pNewQueryInfo->window.skey,
|
||||
pNewQueryInfo->window.ekey, pNewQueryInfo->order.order, pNewQueryInfo->limit.limit);
|
||||
|
||||
|
||||
tscPrintSelNodeList(pNew, 0);
|
||||
} else {
|
||||
tscDebug("0x%"PRIx64" new sub insertion: %p, vnodeIdx:%d", pSql->self, pNew, pTableMetaInfo->vgroupIndex);
|
||||
|
@ -4044,7 +4046,7 @@ int32_t tscSQLSyntaxErrMsg(char* msg, const char* additionalInfo, const char* s
|
|||
const char* msgFormat2 = "syntax error near \'%s\' (%s)";
|
||||
const char* msgFormat3 = "%s";
|
||||
|
||||
const char* prefix = "syntax error";
|
||||
const char* prefix = "syntax error";
|
||||
const int32_t BACKWARD_CHAR_STEP = 0;
|
||||
|
||||
if (sql == NULL) {
|
||||
|
@ -4059,7 +4061,7 @@ int32_t tscSQLSyntaxErrMsg(char* msg, const char* additionalInfo, const char* s
|
|||
if (additionalInfo != NULL) {
|
||||
sprintf(msg, msgFormat2, buf, additionalInfo);
|
||||
} else {
|
||||
const char* msgFormat = (0 == strncmp(sql, prefix, strlen(prefix))) ? msgFormat3 : msgFormat1;
|
||||
const char* msgFormat = (0 == strncmp(sql, prefix, strlen(prefix))) ? msgFormat3 : msgFormat1;
|
||||
sprintf(msg, msgFormat, buf);
|
||||
}
|
||||
|
||||
|
@ -4117,7 +4119,7 @@ bool hasMoreVnodesToTry(SSqlObj* pSql) {
|
|||
if (!UTIL_TABLE_IS_SUPER_TABLE(pTableMetaInfo) || (pTableMetaInfo->vgroupList == NULL)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
int32_t numOfVgroups = pTableMetaInfo->vgroupList->numOfVgroups;
|
||||
if (pTableMetaInfo->pVgroupTables != NULL) {
|
||||
numOfVgroups = (int32_t)taosArrayGetSize(pTableMetaInfo->pVgroupTables);
|
||||
|
@ -4144,7 +4146,7 @@ void tscTryQueryNextVnode(SSqlObj* pSql, __async_cb_func_t fp) {
|
|||
*/
|
||||
assert(pRes->numOfRows == 0 && tscNonOrderedProjectionQueryOnSTable(pQueryInfo, 0) && !tscHasReachLimitation(pQueryInfo, pRes));
|
||||
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||
|
||||
|
||||
int32_t totalVgroups = pTableMetaInfo->vgroupList->numOfVgroups;
|
||||
if (++pTableMetaInfo->vgroupIndex < totalVgroups) {
|
||||
tscDebug("0x%"PRIx64" results from vgroup index:%d completed, try next:%d. total vgroups:%d. current numOfRes:%" PRId64, pSql->self,
|
||||
|
@ -4165,7 +4167,7 @@ void tscTryQueryNextVnode(SSqlObj* pSql, __async_cb_func_t fp) {
|
|||
|
||||
pQueryInfo->limit.offset = pRes->offset;
|
||||
assert((pRes->offset >= 0 && pRes->numOfRows == 0) || (pRes->offset == 0 && pRes->numOfRows >= 0));
|
||||
|
||||
|
||||
tscDebug("0x%"PRIx64" new query to next vgroup, index:%d, limit:%" PRId64 ", offset:%" PRId64 ", glimit:%" PRId64,
|
||||
pSql->self, pTableMetaInfo->vgroupIndex, pQueryInfo->limit.limit, pQueryInfo->limit.offset, pQueryInfo->clauseLimit);
|
||||
|
||||
|
@ -4250,7 +4252,7 @@ char* strdup_throw(const char* str) {
|
|||
|
||||
int tscSetMgmtEpSetFromCfg(const char *first, const char *second, SRpcCorEpSet *corMgmtEpSet) {
|
||||
corMgmtEpSet->version = 0;
|
||||
// init mgmt ip set
|
||||
// init mgmt ip set
|
||||
SRpcEpSet *mgmtEpSet = &(corMgmtEpSet->epSet);
|
||||
mgmtEpSet->numOfEps = 0;
|
||||
mgmtEpSet->inUse = 0;
|
||||
|
@ -4425,7 +4427,7 @@ uint32_t tscGetTableMetaSize(STableMeta* pTableMeta) {
|
|||
if (pTableMeta->tableInfo.numOfColumns >= 0) {
|
||||
totalCols = pTableMeta->tableInfo.numOfColumns + pTableMeta->tableInfo.numOfTags;
|
||||
}
|
||||
|
||||
|
||||
return sizeof(STableMeta) + totalCols * sizeof(SSchema);
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ uint16_t tsDnodeDnodePort = 6035; // udp/tcp
|
|||
uint16_t tsSyncPort = 6040;
|
||||
uint16_t tsArbitratorPort = 6042;
|
||||
int32_t tsStatusInterval = 1; // second
|
||||
int32_t tsNumOfMnodes = 3;
|
||||
int32_t tsNumOfMnodes = 1;
|
||||
int8_t tsEnableVnodeBak = 1;
|
||||
int8_t tsEnableTelemetryReporting = 1;
|
||||
int8_t tsArbOnline = 0;
|
||||
|
|
|
@ -122,6 +122,7 @@
|
|||
<exclude>**/TSDBJNIConnectorTest.java</exclude>
|
||||
<exclude>**/TaosInfoMonitorTest.java</exclude>
|
||||
<exclude>**/UnsignedNumberJniTest.java</exclude>
|
||||
<exclude>**/TimeZoneTest.java</exclude>
|
||||
</excludes>
|
||||
<testFailureIgnore>true</testFailureIgnore>
|
||||
</configuration>
|
||||
|
|
|
@ -80,7 +80,8 @@ public class TSDBJNIConnector {
|
|||
|
||||
this.taos = this.connectImp(host, port, dbName, user, password);
|
||||
if (this.taos == TSDBConstants.JNI_NULL_POINTER) {
|
||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_CONNECTION_NULL);
|
||||
String errMsg = this.getErrMsg(0);
|
||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_CONNECTION_NULL, errMsg);
|
||||
}
|
||||
// invoke connectImp only here
|
||||
taosInfo.conn_open_increment();
|
||||
|
|
|
@ -34,9 +34,8 @@ public class QueryDataTest {
|
|||
|
||||
String createTableSql = "create table " + stbName + "(ts timestamp, name binary(64))";
|
||||
statement.executeUpdate(createTableSql);
|
||||
|
||||
} catch (SQLException e) {
|
||||
return;
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
package com.taosdata.jdbc.cases;
|
||||
|
||||
import com.taosdata.jdbc.TSDBDriver;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.sql.*;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.Properties;
|
||||
|
||||
public class TimeZoneTest {
|
||||
|
||||
private String url = "jdbc:TAOS://127.0.0.1:6030/?user=root&password=taosdata";
|
||||
|
||||
@Test
|
||||
public void javaTimeZone() {
|
||||
LocalDateTime localDateTime = LocalDateTime.of(1970, 1, 1, 0, 0, 0);
|
||||
|
||||
Instant instant = localDateTime.atZone(ZoneId.of("UTC-8")).toInstant();
|
||||
System.out.println("UTC-8: " + instant.getEpochSecond() + "," + instant);
|
||||
|
||||
instant = localDateTime.atZone(ZoneId.of("UT")).toInstant();
|
||||
System.out.println("UTC: " + instant.getEpochSecond() + "," + instant);
|
||||
|
||||
|
||||
instant = localDateTime.atZone(ZoneId.of("UTC+8")).toInstant();
|
||||
System.out.println("UTC+8: " + instant.getEpochSecond() + "," + instant);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void taosTimeZone() {
|
||||
// given
|
||||
Properties props = new Properties();
|
||||
props.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
|
||||
|
||||
// when and then
|
||||
try (Connection connection = DriverManager.getConnection(url, props)) {
|
||||
Statement stmt = connection.createStatement();
|
||||
|
||||
stmt.execute("drop database if exists timezone_test");
|
||||
stmt.execute("create database if not exists timezone_test keep 365000");
|
||||
stmt.execute("use timezone_test");
|
||||
stmt.execute("create table weather(ts timestamp, temperature float)");
|
||||
|
||||
stmt.execute("insert into timezone_test.weather(ts, temperature) values('1970-01-01 00:00:00', 1.0)");
|
||||
|
||||
ResultSet rs = stmt.executeQuery("select * from timezone_test.weather");
|
||||
while (rs.next()) {
|
||||
Timestamp ts = rs.getTimestamp("ts");
|
||||
System.out.println("ts: " + ts.getTime() + "," + ts);
|
||||
}
|
||||
|
||||
stmt.execute("insert into timezone_test.weather(ts, temperature, humidity) values('1970-01-02 00:00:00', 1.0, 2.0)");
|
||||
|
||||
rs = stmt.executeQuery("select * from timezone_test.weather");
|
||||
while (rs.next()) {
|
||||
Timestamp ts = rs.getTimestamp("ts");
|
||||
System.out.println("ts: " + ts.getTime() + "," + ts);
|
||||
}
|
||||
|
||||
|
||||
stmt.execute("drop database if exists timezone_test");
|
||||
|
||||
stmt.close();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -7,11 +7,11 @@ import platform
|
|||
|
||||
|
||||
def _convert_millisecond_to_datetime(milli):
|
||||
return datetime.datetime.fromtimestamp(milli / 1000.0)
|
||||
return datetime.datetime.fromtimestamp(0) + datetime.timedelta(seconds=milli/1000.0)
|
||||
|
||||
|
||||
def _convert_microsecond_to_datetime(micro):
|
||||
return datetime.datetime.fromtimestamp(micro / 1000000.0)
|
||||
return datetime.datetime.fromtimestamp(0) + datetime.timedelta(seconds=micro / 1000000.0)
|
||||
|
||||
|
||||
def _convert_nanosecond_to_datetime(nanosec):
|
||||
|
|
|
@ -110,19 +110,18 @@ typedef struct TAOS_MULTI_BIND {
|
|||
int num;
|
||||
} TAOS_MULTI_BIND;
|
||||
|
||||
|
||||
|
||||
DLL_EXPORT TAOS_STMT *taos_stmt_init(TAOS *taos);
|
||||
DLL_EXPORT int taos_stmt_prepare(TAOS_STMT *stmt, const char *sql, unsigned long length);
|
||||
DLL_EXPORT int taos_stmt_set_tbname_tags(TAOS_STMT* stmt, const char* name, TAOS_BIND* tags);
|
||||
DLL_EXPORT int taos_stmt_set_tbname(TAOS_STMT* stmt, const char* name);
|
||||
DLL_EXPORT int taos_stmt_set_sub_tbname(TAOS_STMT* stmt, const char* name);
|
||||
|
||||
DLL_EXPORT int taos_stmt_is_insert(TAOS_STMT *stmt, int *insert);
|
||||
DLL_EXPORT int taos_stmt_num_params(TAOS_STMT *stmt, int *nums);
|
||||
int taos_stmt_get_param(TAOS_STMT *stmt, int idx, int *type, int *bytes);
|
||||
DLL_EXPORT int taos_stmt_get_param(TAOS_STMT *stmt, int idx, int *type, int *bytes);
|
||||
DLL_EXPORT int taos_stmt_bind_param(TAOS_STMT *stmt, TAOS_BIND *bind);
|
||||
int taos_stmt_bind_param_batch(TAOS_STMT* stmt, TAOS_MULTI_BIND* bind);
|
||||
int taos_stmt_bind_single_param_batch(TAOS_STMT* stmt, TAOS_MULTI_BIND* bind, int colIdx);
|
||||
DLL_EXPORT int taos_stmt_bind_param_batch(TAOS_STMT* stmt, TAOS_MULTI_BIND* bind);
|
||||
DLL_EXPORT int taos_stmt_bind_single_param_batch(TAOS_STMT* stmt, TAOS_MULTI_BIND* bind, int colIdx);
|
||||
DLL_EXPORT int taos_stmt_add_batch(TAOS_STMT *stmt);
|
||||
DLL_EXPORT int taos_stmt_execute(TAOS_STMT *stmt);
|
||||
DLL_EXPORT TAOS_RES * taos_stmt_use_result(TAOS_STMT *stmt);
|
||||
|
@ -141,7 +140,6 @@ DLL_EXPORT int taos_select_db(TAOS *taos, const char *db);
|
|||
DLL_EXPORT int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields);
|
||||
DLL_EXPORT void taos_stop_query(TAOS_RES *res);
|
||||
DLL_EXPORT bool taos_is_null(TAOS_RES *res, int32_t row, int32_t col);
|
||||
|
||||
DLL_EXPORT int taos_fetch_block(TAOS_RES *res, TAOS_ROW *rows);
|
||||
DLL_EXPORT int taos_validate_sql(TAOS *taos, const char *sql);
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ typedef struct {
|
|||
int32_t vgId;
|
||||
char user[TSDB_USER_LEN];
|
||||
char pass[TSDB_KEY_LEN];
|
||||
char db[TSDB_ACCT_ID_LEN + TSDB_DB_NAME_LEN];
|
||||
char db[TSDB_ACCT_ID_LEN + TSDB_DB_NAME_LEN]; // size must same with SVnodeObj.db[TSDB_ACCT_ID_LEN + TSDB_DB_NAME_LEN]
|
||||
FCqWrite cqWrite;
|
||||
} SCqCfg;
|
||||
|
||||
|
|
|
@ -240,6 +240,7 @@ typedef struct {
|
|||
int32_t minRows;
|
||||
int32_t firstSeekTimeUs;
|
||||
uint32_t numOfRowsInMemTable;
|
||||
uint32_t numOfSmallBlocks;
|
||||
SArray *dataBlockInfos;
|
||||
} STableBlockDist;
|
||||
|
||||
|
|
|
@ -75,16 +75,24 @@ extern char configDir[];
|
|||
#define BUFFER_SIZE TSDB_MAX_ALLOWED_SQL_LEN
|
||||
#define COND_BUF_LEN (BUFFER_SIZE - 30)
|
||||
#define COL_BUFFER_LEN ((TSDB_COL_NAME_LEN + 15) * TSDB_MAX_COLUMNS)
|
||||
|
||||
#define MAX_USERNAME_SIZE 64
|
||||
#define MAX_PASSWORD_SIZE 64
|
||||
#define MAX_HOSTNAME_SIZE 253 // https://man7.org/linux/man-pages/man7/hostname.7.html
|
||||
#define MAX_TB_NAME_SIZE 64
|
||||
#define MAX_DATA_SIZE (16*TSDB_MAX_COLUMNS)+20 // max record len: 16*MAX_COLUMNS, timestamp string and ,('') need extra space
|
||||
#define OPT_ABORT 1 /* –abort */
|
||||
#define MAX_PREPARED_RAND 1000000
|
||||
#define MAX_FILE_NAME_LEN 256 // max file name length on linux is 255.
|
||||
|
||||
#define MAX_PREPARED_RAND 1000000
|
||||
#define INT_BUFF_LEN 11
|
||||
#define BIGINT_BUFF_LEN 21
|
||||
#define SMALLINT_BUFF_LEN 6
|
||||
#define TINYINT_BUFF_LEN 4
|
||||
#define BOOL_BUFF_LEN 6
|
||||
#define FLOAT_BUFF_LEN 22
|
||||
#define DOUBLE_BUFF_LEN 42
|
||||
#define TIMESTAMP_BUFF_LEN 21
|
||||
|
||||
#define MAX_SAMPLES_ONCE_FROM_FILE 10000
|
||||
#define MAX_NUM_COLUMNS (TSDB_MAX_COLUMNS - 1) // exclude first column timestamp
|
||||
|
||||
|
@ -561,11 +569,23 @@ static void init_rand_data();
|
|||
|
||||
/* ************ Global variables ************ */
|
||||
|
||||
int32_t randint[MAX_PREPARED_RAND];
|
||||
int64_t randbigint[MAX_PREPARED_RAND];
|
||||
float randfloat[MAX_PREPARED_RAND];
|
||||
double randdouble[MAX_PREPARED_RAND];
|
||||
char *aggreFunc[] = {"*", "count(*)", "avg(col0)", "sum(col0)",
|
||||
int32_t g_randint[MAX_PREPARED_RAND];
|
||||
int64_t g_randbigint[MAX_PREPARED_RAND];
|
||||
float g_randfloat[MAX_PREPARED_RAND];
|
||||
double g_randdouble[MAX_PREPARED_RAND];
|
||||
|
||||
char *g_randbool_buff = NULL;
|
||||
char *g_randint_buff = NULL;
|
||||
char *g_rand_voltage_buff = NULL;
|
||||
char *g_randbigint_buff = NULL;
|
||||
char *g_randsmallint_buff = NULL;
|
||||
char *g_randtinyint_buff = NULL;
|
||||
char *g_randfloat_buff = NULL;
|
||||
char *g_rand_current_buff = NULL;
|
||||
char *g_rand_phase_buff = NULL;
|
||||
char *g_randdouble_buff = NULL;
|
||||
|
||||
char *g_aggreFunc[] = {"*", "count(*)", "avg(col0)", "sum(col0)",
|
||||
"max(col0)", "min(col0)", "first(col0)", "last(col0)"};
|
||||
|
||||
#define DEFAULT_DATATYPE_NUM 3
|
||||
|
@ -1307,67 +1327,144 @@ static void selectAndGetResult(
|
|||
}
|
||||
}
|
||||
|
||||
static char *rand_bool_str(){
|
||||
static int cursor;
|
||||
cursor++;
|
||||
if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0;
|
||||
return g_randbool_buff + (cursor * BOOL_BUFF_LEN);
|
||||
}
|
||||
|
||||
static int32_t rand_bool(){
|
||||
static int cursor;
|
||||
cursor++;
|
||||
cursor = cursor % MAX_PREPARED_RAND;
|
||||
return randint[cursor] % 2;
|
||||
return g_randint[cursor] % 2;
|
||||
}
|
||||
|
||||
static int32_t rand_tinyint(){
|
||||
static char *rand_tinyint_str()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0;
|
||||
return g_randtinyint_buff + (cursor * TINYINT_BUFF_LEN);
|
||||
}
|
||||
|
||||
static int32_t rand_tinyint()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
cursor = cursor % MAX_PREPARED_RAND;
|
||||
return randint[cursor] % 128;
|
||||
return g_randint[cursor] % 128;
|
||||
}
|
||||
|
||||
static int32_t rand_smallint(){
|
||||
static char *rand_smallint_str()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0;
|
||||
return g_randsmallint_buff + (cursor * SMALLINT_BUFF_LEN);
|
||||
}
|
||||
|
||||
static int32_t rand_smallint()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
cursor = cursor % MAX_PREPARED_RAND;
|
||||
return randint[cursor] % 32767;
|
||||
return g_randint[cursor] % 32767;
|
||||
}
|
||||
|
||||
static int32_t rand_int(){
|
||||
static char *rand_int_str()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0;
|
||||
return g_randint_buff + (cursor * INT_BUFF_LEN);
|
||||
}
|
||||
|
||||
static int32_t rand_int()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
cursor = cursor % MAX_PREPARED_RAND;
|
||||
return randint[cursor];
|
||||
return g_randint[cursor];
|
||||
}
|
||||
|
||||
static int64_t rand_bigint(){
|
||||
static char *rand_bigint_str()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0;
|
||||
return g_randbigint_buff + (cursor * BIGINT_BUFF_LEN);
|
||||
}
|
||||
|
||||
static int64_t rand_bigint()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
cursor = cursor % MAX_PREPARED_RAND;
|
||||
return randbigint[cursor];
|
||||
return g_randbigint[cursor];
|
||||
}
|
||||
|
||||
static float rand_float(){
|
||||
static char *rand_float_str()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0;
|
||||
return g_randfloat_buff + (cursor * FLOAT_BUFF_LEN);
|
||||
}
|
||||
|
||||
static float rand_float()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
cursor = cursor % MAX_PREPARED_RAND;
|
||||
return randfloat[cursor];
|
||||
return g_randfloat[cursor];
|
||||
}
|
||||
|
||||
static float demo_current_float(){
|
||||
static char *demo_current_float_str()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0;
|
||||
return g_rand_current_buff + (cursor * FLOAT_BUFF_LEN);
|
||||
}
|
||||
|
||||
static float UNUSED_FUNC demo_current_float()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
cursor = cursor % MAX_PREPARED_RAND;
|
||||
return (float)(9.8 + 0.04 * (randint[cursor] % 10) + randfloat[cursor]/1000000000);
|
||||
return (float)(9.8 + 0.04 * (g_randint[cursor] % 10) + g_randfloat[cursor]/1000000000);
|
||||
}
|
||||
|
||||
static int32_t demo_voltage_int(){
|
||||
static char *demo_voltage_int_str()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0;
|
||||
return g_rand_voltage_buff + (cursor * INT_BUFF_LEN);
|
||||
}
|
||||
|
||||
static int32_t UNUSED_FUNC demo_voltage_int()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
cursor = cursor % MAX_PREPARED_RAND;
|
||||
return 215 + randint[cursor] % 10;
|
||||
return 215 + g_randint[cursor] % 10;
|
||||
}
|
||||
|
||||
static float demo_phase_float(){
|
||||
static char *demo_phase_float_str() {
|
||||
static int cursor;
|
||||
cursor++;
|
||||
if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0;
|
||||
return g_rand_phase_buff + (cursor * FLOAT_BUFF_LEN);
|
||||
}
|
||||
|
||||
static float UNUSED_FUNC demo_phase_float(){
|
||||
static int cursor;
|
||||
cursor++;
|
||||
cursor = cursor % MAX_PREPARED_RAND;
|
||||
return (float)((115 + randint[cursor] % 10 + randfloat[cursor]/1000000000)/360);
|
||||
return (float)((115 + g_randint[cursor] % 10 + g_randfloat[cursor]/1000000000)/360);
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
@ -1402,19 +1499,76 @@ static void rand_string(char *str, int size) {
|
|||
}
|
||||
}
|
||||
|
||||
static double rand_double() {
|
||||
static char *rand_double_str()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
if (cursor > (MAX_PREPARED_RAND - 1)) cursor = 0;
|
||||
return g_randdouble_buff + (cursor * DOUBLE_BUFF_LEN);
|
||||
}
|
||||
|
||||
static double rand_double()
|
||||
{
|
||||
static int cursor;
|
||||
cursor++;
|
||||
cursor = cursor % MAX_PREPARED_RAND;
|
||||
return randdouble[cursor];
|
||||
return g_randdouble[cursor];
|
||||
}
|
||||
|
||||
static void init_rand_data() {
|
||||
|
||||
g_randint_buff = calloc(1, INT_BUFF_LEN * MAX_PREPARED_RAND);
|
||||
assert(g_randint_buff);
|
||||
g_rand_voltage_buff = calloc(1, INT_BUFF_LEN * MAX_PREPARED_RAND);
|
||||
assert(g_rand_voltage_buff);
|
||||
g_randbigint_buff = calloc(1, BIGINT_BUFF_LEN * MAX_PREPARED_RAND);
|
||||
assert(g_randbigint_buff);
|
||||
g_randsmallint_buff = calloc(1, SMALLINT_BUFF_LEN * MAX_PREPARED_RAND);
|
||||
assert(g_randsmallint_buff);
|
||||
g_randtinyint_buff = calloc(1, TINYINT_BUFF_LEN * MAX_PREPARED_RAND);
|
||||
assert(g_randtinyint_buff);
|
||||
g_randbool_buff = calloc(1, BOOL_BUFF_LEN * MAX_PREPARED_RAND);
|
||||
assert(g_randbool_buff);
|
||||
g_randfloat_buff = calloc(1, FLOAT_BUFF_LEN * MAX_PREPARED_RAND);
|
||||
assert(g_randfloat_buff);
|
||||
g_rand_current_buff = calloc(1, FLOAT_BUFF_LEN * MAX_PREPARED_RAND);
|
||||
assert(g_rand_current_buff);
|
||||
g_rand_phase_buff = calloc(1, FLOAT_BUFF_LEN * MAX_PREPARED_RAND);
|
||||
assert(g_rand_phase_buff);
|
||||
g_randdouble_buff = calloc(1, DOUBLE_BUFF_LEN * MAX_PREPARED_RAND);
|
||||
assert(g_randdouble_buff);
|
||||
|
||||
for (int i = 0; i < MAX_PREPARED_RAND; i++){
|
||||
randint[i] = (int)(taosRandom() % 65535);
|
||||
randbigint[i] = (int64_t)(taosRandom() % 2147483648);
|
||||
randfloat[i] = (float)(taosRandom() / 1000.0);
|
||||
randdouble[i] = (double)(taosRandom() / 1000000.0);
|
||||
g_randint[i] = (int)(taosRandom() % 65535);
|
||||
sprintf(g_randint_buff + i * INT_BUFF_LEN, "%d",
|
||||
g_randint[i]);
|
||||
sprintf(g_rand_voltage_buff + i * INT_BUFF_LEN, "%d",
|
||||
215 + g_randint[i] % 10);
|
||||
|
||||
sprintf(g_randbool_buff + i * BOOL_BUFF_LEN, "%s",
|
||||
((g_randint[i] % 2) & 1)?"true":"false");
|
||||
sprintf(g_randsmallint_buff + i * SMALLINT_BUFF_LEN, "%d",
|
||||
g_randint[i] % 32767);
|
||||
sprintf(g_randtinyint_buff + i * TINYINT_BUFF_LEN, "%d",
|
||||
g_randint[i] % 128);
|
||||
|
||||
g_randbigint[i] = (int64_t)(taosRandom() % 2147483648);
|
||||
sprintf(g_randbigint_buff + i * BIGINT_BUFF_LEN, "%"PRId64"",
|
||||
g_randbigint[i]);
|
||||
|
||||
g_randfloat[i] = (float)(taosRandom() / 1000.0);
|
||||
sprintf(g_randfloat_buff + i * FLOAT_BUFF_LEN, "%f",
|
||||
g_randfloat[i]);
|
||||
sprintf(g_rand_current_buff + i * FLOAT_BUFF_LEN, "%f",
|
||||
(float)(9.8 + 0.04 * (g_randint[i] % 10)
|
||||
+ g_randfloat[i]/1000000000));
|
||||
sprintf(g_rand_phase_buff + i * FLOAT_BUFF_LEN, "%f",
|
||||
(float)((115 + g_randint[i] % 10
|
||||
+ g_randfloat[i]/1000000000)/360));
|
||||
|
||||
g_randdouble[i] = (double)(taosRandom() / 1000000.0);
|
||||
sprintf(g_randdouble_buff + i * DOUBLE_BUFF_LEN, "%f",
|
||||
g_randdouble[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2496,21 +2650,21 @@ static int calcRowLen(SSuperTable* superTbls) {
|
|||
} else if (strcasecmp(dataType, "NCHAR") == 0) {
|
||||
lenOfOneRow += superTbls->columns[colIndex].dataLen + 3;
|
||||
} else if (strcasecmp(dataType, "INT") == 0) {
|
||||
lenOfOneRow += 11;
|
||||
lenOfOneRow += INT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "BIGINT") == 0) {
|
||||
lenOfOneRow += 21;
|
||||
lenOfOneRow += BIGINT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "SMALLINT") == 0) {
|
||||
lenOfOneRow += 6;
|
||||
lenOfOneRow += SMALLINT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "TINYINT") == 0) {
|
||||
lenOfOneRow += 4;
|
||||
lenOfOneRow += TINYINT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "BOOL") == 0) {
|
||||
lenOfOneRow += 6;
|
||||
lenOfOneRow += BOOL_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "FLOAT") == 0) {
|
||||
lenOfOneRow += 22;
|
||||
lenOfOneRow += FLOAT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "DOUBLE") == 0) {
|
||||
lenOfOneRow += 42;
|
||||
lenOfOneRow += DOUBLE_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "TIMESTAMP") == 0) {
|
||||
lenOfOneRow += 21;
|
||||
lenOfOneRow += TIMESTAMP_BUFF_LEN;
|
||||
} else {
|
||||
printf("get error data type : %s\n", dataType);
|
||||
exit(-1);
|
||||
|
@ -2529,19 +2683,19 @@ static int calcRowLen(SSuperTable* superTbls) {
|
|||
} else if (strcasecmp(dataType, "NCHAR") == 0) {
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 3;
|
||||
} else if (strcasecmp(dataType, "INT") == 0) {
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 11;
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + INT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "BIGINT") == 0) {
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 21;
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + BIGINT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "SMALLINT") == 0) {
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 6;
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + SMALLINT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "TINYINT") == 0) {
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 4;
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + TINYINT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "BOOL") == 0) {
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 6;
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + BOOL_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "FLOAT") == 0) {
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 22;
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + FLOAT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "DOUBLE") == 0) {
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 42;
|
||||
lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + DOUBLE_BUFF_LEN;
|
||||
} else {
|
||||
printf("get error tag type : %s\n", dataType);
|
||||
exit(-1);
|
||||
|
@ -2770,21 +2924,21 @@ static int createSuperTable(
|
|||
} else {
|
||||
len += snprintf(cols + len, COL_BUFFER_LEN - len, ",C%d %s", colIndex, "INT");
|
||||
}
|
||||
lenOfOneRow += 11;
|
||||
lenOfOneRow += INT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "BIGINT") == 0) {
|
||||
len += snprintf(cols + len, COL_BUFFER_LEN - len, ",C%d %s",
|
||||
colIndex, "BIGINT");
|
||||
lenOfOneRow += 21;
|
||||
lenOfOneRow += BIGINT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "SMALLINT") == 0) {
|
||||
len += snprintf(cols + len, COL_BUFFER_LEN - len, ",C%d %s",
|
||||
colIndex, "SMALLINT");
|
||||
lenOfOneRow += 6;
|
||||
lenOfOneRow += SMALLINT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "TINYINT") == 0) {
|
||||
len += snprintf(cols + len, COL_BUFFER_LEN - len, ",C%d %s", colIndex, "TINYINT");
|
||||
lenOfOneRow += 4;
|
||||
lenOfOneRow += TINYINT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "BOOL") == 0) {
|
||||
len += snprintf(cols + len, COL_BUFFER_LEN - len, ",C%d %s", colIndex, "BOOL");
|
||||
lenOfOneRow += 6;
|
||||
lenOfOneRow += BOOL_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "FLOAT") == 0) {
|
||||
if (g_args.demo_mode) {
|
||||
if (colIndex == 0) {
|
||||
|
@ -2796,15 +2950,15 @@ static int createSuperTable(
|
|||
len += snprintf(cols + len, COL_BUFFER_LEN - len, ",C%d %s", colIndex, "FLOAT");
|
||||
}
|
||||
|
||||
lenOfOneRow += 22;
|
||||
lenOfOneRow += FLOAT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "DOUBLE") == 0) {
|
||||
len += snprintf(cols + len, COL_BUFFER_LEN - len, ",C%d %s",
|
||||
colIndex, "DOUBLE");
|
||||
lenOfOneRow += 42;
|
||||
lenOfOneRow += DOUBLE_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "TIMESTAMP") == 0) {
|
||||
len += snprintf(cols + len, COL_BUFFER_LEN - len, ",C%d %s",
|
||||
colIndex, "TIMESTAMP");
|
||||
lenOfOneRow += 21;
|
||||
lenOfOneRow += TIMESTAMP_BUFF_LEN;
|
||||
} else {
|
||||
taos_close(taos);
|
||||
errorPrint("%s() LN%d, config error data type : %s\n",
|
||||
|
@ -2867,31 +3021,31 @@ static int createSuperTable(
|
|||
len += snprintf(tags + len, TSDB_MAX_TAGS_LEN - len,
|
||||
"T%d %s,", tagIndex, "INT");
|
||||
}
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + 11;
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + INT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "BIGINT") == 0) {
|
||||
len += snprintf(tags + len, TSDB_MAX_TAGS_LEN - len,
|
||||
"T%d %s,", tagIndex, "BIGINT");
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + 21;
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + BIGINT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "SMALLINT") == 0) {
|
||||
len += snprintf(tags + len, TSDB_MAX_TAGS_LEN - len,
|
||||
"T%d %s,", tagIndex, "SMALLINT");
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + 6;
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + SMALLINT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "TINYINT") == 0) {
|
||||
len += snprintf(tags + len, TSDB_MAX_TAGS_LEN - len,
|
||||
"T%d %s,", tagIndex, "TINYINT");
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + 4;
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + TINYINT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "BOOL") == 0) {
|
||||
len += snprintf(tags + len, TSDB_MAX_TAGS_LEN - len,
|
||||
"T%d %s,", tagIndex, "BOOL");
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + 6;
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + BOOL_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "FLOAT") == 0) {
|
||||
len += snprintf(tags + len, TSDB_MAX_TAGS_LEN - len,
|
||||
"T%d %s,", tagIndex, "FLOAT");
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + 22;
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + FLOAT_BUFF_LEN;
|
||||
} else if (strcasecmp(dataType, "DOUBLE") == 0) {
|
||||
len += snprintf(tags + len, TSDB_MAX_TAGS_LEN - len,
|
||||
"T%d %s,", tagIndex, "DOUBLE");
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + 42;
|
||||
lenOfTagOfOneRow += superTbl->tags[tagIndex].dataLen + DOUBLE_BUFF_LEN;
|
||||
} else {
|
||||
taos_close(taos);
|
||||
errorPrint("%s() LN%d, config error tag type : %s\n",
|
||||
|
@ -4894,6 +5048,17 @@ static void postFreeResource() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
tmfree(g_randbool_buff);
|
||||
tmfree(g_randint_buff);
|
||||
tmfree(g_rand_voltage_buff);
|
||||
tmfree(g_randbigint_buff);
|
||||
tmfree(g_randsmallint_buff);
|
||||
tmfree(g_randtinyint_buff);
|
||||
tmfree(g_randfloat_buff);
|
||||
tmfree(g_rand_current_buff);
|
||||
tmfree(g_rand_phase_buff);
|
||||
tmfree(g_randdouble_buff);
|
||||
}
|
||||
|
||||
static int getRowDataFromSample(
|
||||
|
@ -4956,56 +5121,61 @@ static int64_t generateStbRowData(
|
|||
rand_string(buf, stbInfo->columns[i].dataLen);
|
||||
dataLen += snprintf(pstr + dataLen, maxLen - dataLen, "\'%s\',", buf);
|
||||
tmfree(buf);
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"INT", strlen("INT"))) {
|
||||
if ((g_args.demo_mode) && (i == 1)) {
|
||||
dataLen += snprintf(pstr + dataLen, maxLen - dataLen,
|
||||
"%d,", demo_voltage_int());
|
||||
} else {
|
||||
dataLen += snprintf(pstr + dataLen, maxLen - dataLen,
|
||||
"%d,", rand_int());
|
||||
}
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"BIGINT", strlen("BIGINT"))) {
|
||||
dataLen += snprintf(pstr + dataLen, maxLen - dataLen,
|
||||
"%"PRId64",", rand_bigint());
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"FLOAT", strlen("FLOAT"))) {
|
||||
if (g_args.demo_mode) {
|
||||
if (i == 0) {
|
||||
dataLen += snprintf(pstr + dataLen, maxLen - dataLen,
|
||||
"%f,", demo_current_float());
|
||||
} else {
|
||||
char *tmp;
|
||||
|
||||
if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"INT", strlen("INT"))) {
|
||||
if ((g_args.demo_mode) && (i == 1)) {
|
||||
tmp = demo_voltage_int_str();
|
||||
} else {
|
||||
dataLen += snprintf(pstr + dataLen, maxLen - dataLen,
|
||||
"%f,", demo_phase_float());
|
||||
tmp = rand_int_str();
|
||||
}
|
||||
} else {
|
||||
dataLen += snprintf(pstr + dataLen, maxLen - dataLen,
|
||||
"%f,", rand_float());
|
||||
tstrncpy(pstr + dataLen, tmp, INT_BUFF_LEN);
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"BIGINT", strlen("BIGINT"))) {
|
||||
tmp = rand_bigint_str();
|
||||
tstrncpy(pstr + dataLen, tmp, BIGINT_BUFF_LEN);
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"FLOAT", strlen("FLOAT"))) {
|
||||
if (g_args.demo_mode) {
|
||||
if (i == 0) {
|
||||
tmp = demo_current_float_str();
|
||||
} else {
|
||||
tmp = demo_phase_float_str();
|
||||
}
|
||||
} else {
|
||||
tmp = rand_float_str();
|
||||
}
|
||||
tstrncpy(pstr + dataLen, tmp, FLOAT_BUFF_LEN);
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"DOUBLE", strlen("DOUBLE"))) {
|
||||
tmp = rand_double_str();
|
||||
tstrncpy(pstr + dataLen, tmp, DOUBLE_BUFF_LEN);
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"SMALLINT", strlen("SMALLINT"))) {
|
||||
tmp = rand_smallint_str();
|
||||
tstrncpy(pstr + dataLen, tmp, SMALLINT_BUFF_LEN);
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"TINYINT", strlen("TINYINT"))) {
|
||||
tmp = rand_tinyint_str();
|
||||
tstrncpy(pstr + dataLen, tmp, TINYINT_BUFF_LEN);
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"BOOL", strlen("BOOL"))) {
|
||||
tmp = rand_bool_str();
|
||||
tstrncpy(pstr + dataLen, tmp, BOOL_BUFF_LEN);
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"TIMESTAMP", strlen("TIMESTAMP"))) {
|
||||
tmp = rand_int_str();
|
||||
tstrncpy(pstr + dataLen, tmp, INT_BUFF_LEN);
|
||||
} else {
|
||||
errorPrint( "Not support data type: %s\n", stbInfo->columns[i].dataType);
|
||||
return -1;
|
||||
}
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"DOUBLE", strlen("DOUBLE"))) {
|
||||
dataLen += snprintf(pstr + dataLen, maxLen - dataLen,
|
||||
"%f,", rand_double());
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"SMALLINT", strlen("SMALLINT"))) {
|
||||
dataLen += snprintf(pstr + dataLen, maxLen - dataLen,
|
||||
"%d,", rand_smallint());
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"TINYINT", strlen("TINYINT"))) {
|
||||
dataLen += snprintf(pstr + dataLen, maxLen - dataLen,
|
||||
"%d,", rand_tinyint());
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"BOOL", strlen("BOOL"))) {
|
||||
dataLen += snprintf(pstr + dataLen, maxLen - dataLen,
|
||||
"%d,", rand_bool());
|
||||
} else if (0 == strncasecmp(stbInfo->columns[i].dataType,
|
||||
"TIMESTAMP", strlen("TIMESTAMP"))) {
|
||||
dataLen += snprintf(pstr + dataLen, maxLen - dataLen,
|
||||
"%"PRId64",", rand_bigint());
|
||||
} else {
|
||||
errorPrint( "Not support data type: %s\n", stbInfo->columns[i].dataType);
|
||||
return -1;
|
||||
|
||||
dataLen += strlen(tmp);
|
||||
tstrncpy(pstr + dataLen, ",", 2);
|
||||
dataLen += 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5992,6 +6162,7 @@ static int32_t prepareStbStmt(
|
|||
if (0 != ret) {
|
||||
errorPrint("%s() LN%d, stmt_bind_param() failed! reason: %s\n",
|
||||
__func__, __LINE__, taos_stmt_errstr(stmt));
|
||||
free(bindArray);
|
||||
return -1;
|
||||
}
|
||||
// if msg > 3MB, break
|
||||
|
@ -5999,6 +6170,7 @@ static int32_t prepareStbStmt(
|
|||
if (0 != ret) {
|
||||
errorPrint("%s() LN%d, stmt_add_batch() failed! reason: %s\n",
|
||||
__func__, __LINE__, taos_stmt_errstr(stmt));
|
||||
free(bindArray);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -7105,7 +7277,7 @@ static void *readTable(void *sarg) {
|
|||
int64_t totalData = num_of_DPT * num_of_tables;
|
||||
bool do_aggreFunc = g_Dbs.do_aggreFunc;
|
||||
|
||||
int n = do_aggreFunc ? (sizeof(aggreFunc) / sizeof(aggreFunc[0])) : 2;
|
||||
int n = do_aggreFunc ? (sizeof(g_aggreFunc) / sizeof(g_aggreFunc[0])) : 2;
|
||||
if (!do_aggreFunc) {
|
||||
printf("\nThe first field is either Binary or Bool. Aggregation functions are not supported.\n");
|
||||
}
|
||||
|
@ -7117,7 +7289,7 @@ static void *readTable(void *sarg) {
|
|||
uint64_t count = 0;
|
||||
for (int64_t i = 0; i < num_of_tables; i++) {
|
||||
sprintf(command, "select %s from %s%"PRId64" where ts>= %" PRIu64,
|
||||
aggreFunc[j], tb_prefix, i, sTime);
|
||||
g_aggreFunc[j], tb_prefix, i, sTime);
|
||||
|
||||
double t = taosGetTimestampMs();
|
||||
TAOS_RES *pSql = taos_query(taos, command);
|
||||
|
@ -7142,9 +7314,9 @@ static void *readTable(void *sarg) {
|
|||
}
|
||||
|
||||
fprintf(fp, "|%10s | %"PRId64" | %12.2f | %10.2f |\n",
|
||||
aggreFunc[j][0] == '*' ? " * " : aggreFunc[j], totalData,
|
||||
g_aggreFunc[j][0] == '*' ? " * " : g_aggreFunc[j], totalData,
|
||||
(double)(num_of_tables * num_of_DPT) / totalT, totalT * 1000);
|
||||
printf("select %10s took %.6f second(s)\n", aggreFunc[j], totalT * 1000);
|
||||
printf("select %10s took %.6f second(s)\n", g_aggreFunc[j], totalT * 1000);
|
||||
}
|
||||
fprintf(fp, "\n");
|
||||
fclose(fp);
|
||||
|
@ -7169,7 +7341,7 @@ static void *readMetric(void *sarg) {
|
|||
int64_t totalData = num_of_DPT * num_of_tables;
|
||||
bool do_aggreFunc = g_Dbs.do_aggreFunc;
|
||||
|
||||
int n = do_aggreFunc ? (sizeof(aggreFunc) / sizeof(aggreFunc[0])) : 2;
|
||||
int n = do_aggreFunc ? (sizeof(g_aggreFunc) / sizeof(g_aggreFunc[0])) : 2;
|
||||
if (!do_aggreFunc) {
|
||||
printf("\nThe first field is either Binary or Bool. Aggregation functions are not supported.\n");
|
||||
}
|
||||
|
@ -7190,7 +7362,7 @@ static void *readMetric(void *sarg) {
|
|||
}
|
||||
strncat(condition, tempS, COND_BUF_LEN - 1);
|
||||
|
||||
sprintf(command, "select %s from meters where %s", aggreFunc[j], condition);
|
||||
sprintf(command, "select %s from meters where %s", g_aggreFunc[j], condition);
|
||||
|
||||
printf("Where condition: %s\n", condition);
|
||||
fprintf(fp, "%s\n", command);
|
||||
|
@ -7215,7 +7387,7 @@ static void *readMetric(void *sarg) {
|
|||
|
||||
fprintf(fp, "| Speed: %12.2f(per s) | Latency: %.4f(ms) |\n",
|
||||
num_of_tables * num_of_DPT / (t * 1000.0), t);
|
||||
printf("select %10s took %.6f second(s)\n\n", aggreFunc[j], t * 1000.0);
|
||||
printf("select %10s took %.6f second(s)\n\n", g_aggreFunc[j], t * 1000.0);
|
||||
|
||||
taos_free_result(pSql);
|
||||
}
|
||||
|
|
|
@ -1264,7 +1264,7 @@ static int taosGetTableDes(
|
|||
fields[TSDB_DESCRIBE_METRIC_FIELD_INDEX].bytes + 1));
|
||||
tstrncpy(tableDes->cols[count].type,
|
||||
(char *)row[TSDB_DESCRIBE_METRIC_TYPE_INDEX],
|
||||
min(16, fields[TSDB_DESCRIBE_METRIC_TYPE_INDEX].bytes) + 1);
|
||||
min(16, fields[TSDB_DESCRIBE_METRIC_TYPE_INDEX].bytes + 1));
|
||||
tableDes->cols[count].length =
|
||||
*((int *)row[TSDB_DESCRIBE_METRIC_LENGTH_INDEX]);
|
||||
tstrncpy(tableDes->cols[count].note,
|
||||
|
|
|
@ -268,7 +268,7 @@ void httpJsonTimestamp(JsonBuf* buf, int64_t t, int32_t timePrecision) {
|
|||
int32_t fractionLen;
|
||||
char* format = NULL;
|
||||
time_t quot = 0;
|
||||
long mod = 0;
|
||||
int64_t mod = 0;
|
||||
|
||||
switch (timePrecision) {
|
||||
case TSDB_TIME_PRECISION_MILLI: {
|
||||
|
|
|
@ -512,6 +512,28 @@ int32_t countRequired(SQLFunctionCtx *pCtx, STimeWindow* w, int32_t colId) {
|
|||
int32_t noDataRequired(SQLFunctionCtx *pCtx, STimeWindow* w, int32_t colId) {
|
||||
return BLK_DATA_NO_NEEDED;
|
||||
}
|
||||
#define LIST_ADD_N_DOUBLE_FLOAT(x, ctx, p, t, numOfElem, tsdbType) \
|
||||
do { \
|
||||
t *d = (t *)(p); \
|
||||
for (int32_t i = 0; i < (ctx)->size; ++i) { \
|
||||
if (((ctx)->hasNull) && isNull((char *)&(d)[i], tsdbType)) { \
|
||||
continue; \
|
||||
}; \
|
||||
SET_DOUBLE_VAL(&(x) , GET_DOUBLE_VAL(&(x)) + GET_FLOAT_VAL(&(d)[i])); \
|
||||
(numOfElem)++; \
|
||||
} \
|
||||
} while(0)
|
||||
#define LIST_ADD_N_DOUBLE(x, ctx, p, t, numOfElem, tsdbType) \
|
||||
do { \
|
||||
t *d = (t *)(p); \
|
||||
for (int32_t i = 0; i < (ctx)->size; ++i) { \
|
||||
if (((ctx)->hasNull) && isNull((char *)&(d)[i], tsdbType)) { \
|
||||
continue; \
|
||||
}; \
|
||||
SET_DOUBLE_VAL(&(x) , (x) + (d)[i]); \
|
||||
(numOfElem)++; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define LIST_ADD_N(x, ctx, p, t, numOfElem, tsdbType) \
|
||||
do { \
|
||||
|
@ -575,7 +597,7 @@ static void do_sum(SQLFunctionCtx *pCtx) {
|
|||
*retVal += (uint64_t)pCtx->preAggVals.statis.sum;
|
||||
} else if (IS_FLOAT_TYPE(pCtx->inputType)) {
|
||||
double *retVal = (double*) pCtx->pOutput;
|
||||
*retVal += GET_DOUBLE_VAL((const char*)&(pCtx->preAggVals.statis.sum));
|
||||
SET_DOUBLE_VAL(retVal, *retVal + GET_DOUBLE_VAL((const char*)&(pCtx->preAggVals.statis.sum)));
|
||||
}
|
||||
} else { // computing based on the true data block
|
||||
void *pData = GET_INPUT_DATA_LIST(pCtx);
|
||||
|
@ -607,10 +629,10 @@ static void do_sum(SQLFunctionCtx *pCtx) {
|
|||
}
|
||||
} else if (pCtx->inputType == TSDB_DATA_TYPE_DOUBLE) {
|
||||
double *retVal = (double *)pCtx->pOutput;
|
||||
LIST_ADD_N(*retVal, pCtx, pData, double, notNullElems, pCtx->inputType);
|
||||
LIST_ADD_N_DOUBLE(*retVal, pCtx, pData, double, notNullElems, pCtx->inputType);
|
||||
} else if (pCtx->inputType == TSDB_DATA_TYPE_FLOAT) {
|
||||
double *retVal = (double *)pCtx->pOutput;
|
||||
LIST_ADD_N(*retVal, pCtx, pData, float, notNullElems, pCtx->inputType);
|
||||
LIST_ADD_N_DOUBLE_FLOAT(*retVal, pCtx, pData, float, notNullElems, pCtx->inputType);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -654,7 +676,7 @@ static void sum_func_merge(SQLFunctionCtx *pCtx) {
|
|||
} else if (IS_UNSIGNED_NUMERIC_TYPE(type)) {
|
||||
*(uint64_t *) pCtx->pOutput += pInput->usum;
|
||||
} else {
|
||||
*(double *)pCtx->pOutput += pInput->dsum;
|
||||
SET_DOUBLE_VAL((double *)pCtx->pOutput, *(double *)pCtx->pOutput + pInput->dsum);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -778,9 +800,9 @@ static void avg_function(SQLFunctionCtx *pCtx) {
|
|||
} else if (pCtx->inputType == TSDB_DATA_TYPE_BIGINT) {
|
||||
LIST_ADD_N(*pVal, pCtx, pData, int64_t, notNullElems, pCtx->inputType);
|
||||
} else if (pCtx->inputType == TSDB_DATA_TYPE_DOUBLE) {
|
||||
LIST_ADD_N(*pVal, pCtx, pData, double, notNullElems, pCtx->inputType);
|
||||
LIST_ADD_N_DOUBLE(*pVal, pCtx, pData, double, notNullElems, pCtx->inputType);
|
||||
} else if (pCtx->inputType == TSDB_DATA_TYPE_FLOAT) {
|
||||
LIST_ADD_N(*pVal, pCtx, pData, float, notNullElems, pCtx->inputType);
|
||||
LIST_ADD_N_DOUBLE_FLOAT(*pVal, pCtx, pData, float, notNullElems, pCtx->inputType);
|
||||
} else if (pCtx->inputType == TSDB_DATA_TYPE_UTINYINT) {
|
||||
LIST_ADD_N(*pVal, pCtx, pData, uint8_t, notNullElems, pCtx->inputType);
|
||||
} else if (pCtx->inputType == TSDB_DATA_TYPE_USMALLINT) {
|
||||
|
@ -821,7 +843,7 @@ static void avg_func_merge(SQLFunctionCtx *pCtx) {
|
|||
continue;
|
||||
}
|
||||
|
||||
*sum += pInput->sum;
|
||||
SET_DOUBLE_VAL(sum, *sum + pInput->sum);
|
||||
|
||||
// keep the number of data into the temp buffer
|
||||
*(int64_t *)GET_ROWCELL_INTERBUF(pResInfo) += pInput->num;
|
||||
|
@ -841,8 +863,8 @@ static void avg_finalizer(SQLFunctionCtx *pCtx) {
|
|||
setNull(pCtx->pOutput, pCtx->outputType, pCtx->outputBytes);
|
||||
return;
|
||||
}
|
||||
|
||||
*(double *)pCtx->pOutput = (*(double *)pCtx->pOutput) / *(int64_t *)GET_ROWCELL_INTERBUF(pResInfo);
|
||||
|
||||
SET_DOUBLE_VAL((double *)pCtx->pOutput,(*(double *)pCtx->pOutput) / *(int64_t *)GET_ROWCELL_INTERBUF(pResInfo));
|
||||
} else { // this is the secondary merge, only in the secondary merge, the input type is TSDB_DATA_TYPE_BINARY
|
||||
assert(IS_NUMERIC_TYPE(pCtx->inputType));
|
||||
SAvgInfo *pAvgInfo = (SAvgInfo *)GET_ROWCELL_INTERBUF(pResInfo);
|
||||
|
@ -852,7 +874,7 @@ static void avg_finalizer(SQLFunctionCtx *pCtx) {
|
|||
return;
|
||||
}
|
||||
|
||||
*(double *)pCtx->pOutput = pAvgInfo->sum / pAvgInfo->num;
|
||||
SET_DOUBLE_VAL((double *)pCtx->pOutput, pAvgInfo->sum / pAvgInfo->num);
|
||||
}
|
||||
|
||||
// cannot set the numOfIteratedElems again since it is set during previous iteration
|
||||
|
@ -1049,7 +1071,7 @@ static bool min_func_setup(SQLFunctionCtx *pCtx, SResultRowCellInfo* pResultInfo
|
|||
*((float *)pCtx->pOutput) = FLT_MAX;
|
||||
break;
|
||||
case TSDB_DATA_TYPE_DOUBLE:
|
||||
*((double *)pCtx->pOutput) = DBL_MAX;
|
||||
SET_DOUBLE_VAL(((double *)pCtx->pOutput), DBL_MAX);
|
||||
break;
|
||||
default:
|
||||
qError("illegal data type:%d in min/max query", pCtx->inputType);
|
||||
|
@ -1076,7 +1098,7 @@ static bool max_func_setup(SQLFunctionCtx *pCtx, SResultRowCellInfo* pResultInfo
|
|||
*((float *)pCtx->pOutput) = -FLT_MAX;
|
||||
break;
|
||||
case TSDB_DATA_TYPE_DOUBLE:
|
||||
*((double *)pCtx->pOutput) = -DBL_MAX;
|
||||
SET_DOUBLE_VAL(((double *)pCtx->pOutput), -DBL_MAX);
|
||||
break;
|
||||
case TSDB_DATA_TYPE_BIGINT:
|
||||
*((int64_t *)pCtx->pOutput) = INT64_MIN;
|
||||
|
@ -1322,7 +1344,7 @@ static void stddev_finalizer(SQLFunctionCtx *pCtx) {
|
|||
setNull(pCtx->pOutput, pCtx->outputType, pCtx->outputBytes);
|
||||
} else {
|
||||
double *retValue = (double *)pCtx->pOutput;
|
||||
*retValue = sqrt(pStd->res / pStd->num);
|
||||
SET_DOUBLE_VAL(retValue, sqrt(pStd->res / pStd->num));
|
||||
SET_VAL(pCtx, 1, 1);
|
||||
}
|
||||
|
||||
|
@ -1455,7 +1477,7 @@ static void stddev_dst_finalizer(SQLFunctionCtx *pCtx) {
|
|||
setNull(pCtx->pOutput, pCtx->outputType, pCtx->outputBytes);
|
||||
} else {
|
||||
double *retValue = (double *)pCtx->pOutput;
|
||||
*retValue = sqrt(pStd->res / pStd->num);
|
||||
SET_DOUBLE_VAL(retValue, sqrt(pStd->res / pStd->num));
|
||||
SET_VAL(pCtx, 1, 1);
|
||||
}
|
||||
|
||||
|
@ -1947,7 +1969,7 @@ static void copyTopBotRes(SQLFunctionCtx *pCtx, int32_t type) {
|
|||
case TSDB_DATA_TYPE_DOUBLE: {
|
||||
double *output = (double *)pCtx->pOutput;
|
||||
for (int32_t i = 0; i < len; ++i, output += step) {
|
||||
*output = tvp[i]->v.dKey;
|
||||
SET_DOUBLE_VAL(output, tvp[i]->v.dKey);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -2366,7 +2388,7 @@ static void percentile_finalizer(SQLFunctionCtx *pCtx) {
|
|||
assert(ppInfo->numOfElems == 0);
|
||||
setNull(pCtx->pOutput, pCtx->outputType, pCtx->outputBytes);
|
||||
} else {
|
||||
*(double *)pCtx->pOutput = getPercentile(pMemBucket, v);
|
||||
SET_DOUBLE_VAL((double *)pCtx->pOutput, getPercentile(pMemBucket, v));
|
||||
}
|
||||
|
||||
tMemBucketDestroy(pMemBucket);
|
||||
|
@ -2782,7 +2804,7 @@ static void deriv_function(SQLFunctionCtx *pCtx) {
|
|||
if (!pDerivInfo->valueSet) { // initial value is not set yet
|
||||
pDerivInfo->valueSet = true;
|
||||
} else {
|
||||
*pOutput = ((pData[i] - pDerivInfo->prevValue) * pDerivInfo->tsWindow) / (tsList[i] - pDerivInfo->prevTs);
|
||||
SET_DOUBLE_VAL(pOutput, ((pData[i] - pDerivInfo->prevValue) * pDerivInfo->tsWindow) / (tsList[i] - pDerivInfo->prevTs));
|
||||
if (pDerivInfo->ignoreNegative && *pOutput < 0) {
|
||||
} else {
|
||||
*pTimestamp = tsList[i];
|
||||
|
@ -3017,7 +3039,7 @@ static void diff_function(SQLFunctionCtx *pCtx) {
|
|||
}
|
||||
|
||||
if (pCtx->param[1].nType != INITIAL_VALUE_NOT_ASSIGNED) { // initial value is not set yet
|
||||
*pOutput = pData[i] - pCtx->param[1].dKey; // direct previous may be null
|
||||
SET_DOUBLE_VAL(pOutput, pData[i] - pCtx->param[1].dKey); // direct previous may be null
|
||||
*pTimestamp = (tsList != NULL)? tsList[i]:0;
|
||||
pOutput += 1;
|
||||
pTimestamp += 1;
|
||||
|
@ -3290,7 +3312,7 @@ void spread_function_finalizer(SQLFunctionCtx *pCtx) {
|
|||
return;
|
||||
}
|
||||
|
||||
*(double *)pCtx->pOutput = pCtx->param[3].dKey - pCtx->param[0].dKey;
|
||||
SET_DOUBLE_VAL((double *)pCtx->pOutput, pCtx->param[3].dKey - pCtx->param[0].dKey);
|
||||
} else {
|
||||
assert(IS_NUMERIC_TYPE(pCtx->inputType) || (pCtx->inputType == TSDB_DATA_TYPE_TIMESTAMP));
|
||||
|
||||
|
@ -3300,7 +3322,7 @@ void spread_function_finalizer(SQLFunctionCtx *pCtx) {
|
|||
return;
|
||||
}
|
||||
|
||||
*(double *)pCtx->pOutput = pInfo->max - pInfo->min;
|
||||
SET_DOUBLE_VAL((double *)pCtx->pOutput, pInfo->max - pInfo->min);
|
||||
}
|
||||
|
||||
GET_RES_INFO(pCtx)->numOfRes = 1; // todo add test case
|
||||
|
@ -3628,9 +3650,9 @@ void twa_function_finalizer(SQLFunctionCtx *pCtx) {
|
|||
|
||||
assert(pInfo->win.ekey == pInfo->p.key && pInfo->hasResult == pResInfo->hasResult);
|
||||
if (pInfo->win.ekey == pInfo->win.skey) {
|
||||
*(double *)pCtx->pOutput = pInfo->p.val;
|
||||
SET_DOUBLE_VAL((double *)pCtx->pOutput, pInfo->p.val);
|
||||
} else {
|
||||
*(double *)pCtx->pOutput = pInfo->dOutput / (pInfo->win.ekey - pInfo->win.skey);
|
||||
SET_DOUBLE_VAL((double *)pCtx->pOutput , pInfo->dOutput / (pInfo->win.ekey - pInfo->win.skey));
|
||||
}
|
||||
|
||||
GET_RES_INFO(pCtx)->numOfRes = 1;
|
||||
|
@ -3923,7 +3945,7 @@ static void rate_finalizer(SQLFunctionCtx *pCtx) {
|
|||
return;
|
||||
}
|
||||
|
||||
*(double*) pCtx->pOutput = do_calc_rate(pRateInfo, (double) TSDB_TICK_PER_SECOND(pCtx->param[0].i64));
|
||||
SET_DOUBLE_VAL((double*) pCtx->pOutput, do_calc_rate(pRateInfo, (double) TSDB_TICK_PER_SECOND(pCtx->param[0].i64)));
|
||||
|
||||
// cannot set the numOfIteratedElems again since it is set during previous iteration
|
||||
pResInfo->numOfRes = 1;
|
||||
|
@ -3996,6 +4018,7 @@ static void mergeTableBlockDist(SResultRowCellInfo* pResInfo, const STableBlockD
|
|||
|
||||
pDist->numOfTables += pSrc->numOfTables;
|
||||
pDist->numOfRowsInMemTable += pSrc->numOfRowsInMemTable;
|
||||
pDist->numOfSmallBlocks += pSrc->numOfSmallBlocks;
|
||||
pDist->numOfFiles += pSrc->numOfFiles;
|
||||
pDist->totalSize += pSrc->totalSize;
|
||||
pDist->totalRows += pSrc->totalRows;
|
||||
|
@ -4108,18 +4131,19 @@ void generateBlockDistResult(STableBlockDist *pTableBlockDist, char* result) {
|
|||
|
||||
uint64_t totalLen = pTableBlockDist->totalSize;
|
||||
int32_t rowSize = pTableBlockDist->rowSize;
|
||||
int32_t smallBlocks = pTableBlockDist->numOfSmallBlocks;
|
||||
double compRatio = (totalRows>0) ? ((double)(totalLen)/(rowSize*totalRows)) : 1;
|
||||
int sz = sprintf(result + VARSTR_HEADER_SIZE,
|
||||
"summary: \n\t "
|
||||
"5th=[%d], 10th=[%d], 20th=[%d], 30th=[%d], 40th=[%d], 50th=[%d]\n\t "
|
||||
"60th=[%d], 70th=[%d], 80th=[%d], 90th=[%d], 95th=[%d], 99th=[%d]\n\t "
|
||||
"Min=[%"PRId64"(Rows)] Max=[%"PRId64"(Rows)] Avg=[%"PRId64"(Rows)] Stddev=[%.2f] \n\t "
|
||||
"Rows=[%"PRIu64"], Blocks=[%"PRId64"], Size=[%.3f(Kb)] Comp=[%.2f]\n\t "
|
||||
"Rows=[%"PRIu64"], Blocks=[%"PRId64"], SmallBlocks=[%d], Size=[%.3f(Kb)] Comp=[%.2f]\n\t "
|
||||
"RowsInMem=[%d] \n\t",
|
||||
percentiles[0], percentiles[1], percentiles[2], percentiles[3], percentiles[4], percentiles[5],
|
||||
percentiles[6], percentiles[7], percentiles[8], percentiles[9], percentiles[10], percentiles[11],
|
||||
min, max, avg, stdDev,
|
||||
totalRows, totalBlocks, totalLen/1024.0, compRatio,
|
||||
totalRows, totalBlocks, smallBlocks, totalLen/1024.0, compRatio,
|
||||
pTableBlockDist->numOfRowsInMemTable);
|
||||
varDataSetLen(result, sz);
|
||||
UNUSED(sz);
|
||||
|
@ -4132,6 +4156,11 @@ void blockinfo_func_finalizer(SQLFunctionCtx* pCtx) {
|
|||
pDist->rowSize = (uint16_t)pCtx->param[0].i64;
|
||||
generateBlockDistResult(pDist, pCtx->pOutput);
|
||||
|
||||
if (pDist->dataBlockInfos != NULL) {
|
||||
taosArrayDestroy(pDist->dataBlockInfos);
|
||||
pDist->dataBlockInfos = NULL;
|
||||
}
|
||||
|
||||
// cannot set the numOfIteratedElems again since it is set during previous iteration
|
||||
pResInfo->numOfRes = 1;
|
||||
pResInfo->hasResult = DATA_SET_FLAG;
|
||||
|
@ -4157,8 +4186,8 @@ int32_t functionCompatList[] = {
|
|||
4, -1, -1, 1, 1, 1, 1, 1, 1, -1,
|
||||
// tag, colprj, tagprj, arithmetic, diff, first_dist, last_dist, stddev_dst, interp rate irate
|
||||
1, 1, 1, 1, -1, 1, 1, 1, 5, 1, 1,
|
||||
// tid_tag, blk_info
|
||||
6, 7
|
||||
// tid_tag, derivative, blk_info
|
||||
6, 8, 7,
|
||||
};
|
||||
|
||||
SAggFunctionInfo aAggs[] = {{
|
||||
|
|
|
@ -5561,6 +5561,8 @@ static SSDataBlock* doIntervalAgg(void* param, bool* newgroup) {
|
|||
break;
|
||||
}
|
||||
|
||||
setTagValue(pOperator, pRuntimeEnv->current->pTable, pIntervalInfo->pCtx, pOperator->numOfOutput);
|
||||
|
||||
// the pDataBlock are always the same one, no need to call this again
|
||||
setInputDataBlock(pOperator, pIntervalInfo->pCtx, pBlock, pQueryAttr->order.order);
|
||||
hashIntervalAgg(pOperator, &pIntervalInfo->resultRowInfo, pBlock, 0);
|
||||
|
|
|
@ -391,11 +391,18 @@ int32_t columnValueAscendingComparator(char *f1, char *f2, int32_t type, int32_t
|
|||
|
||||
};
|
||||
case TSDB_DATA_TYPE_NCHAR: { // todo handle the var string compare
|
||||
int32_t ret = tasoUcs4Compare(f1, f2, bytes);
|
||||
if (ret == 0) {
|
||||
return 0;
|
||||
int32_t len1 = varDataLen(f1);
|
||||
int32_t len2 = varDataLen(f2);
|
||||
|
||||
if (len1 != len2) {
|
||||
return len1 > len2 ? 1 : -1;
|
||||
} else {
|
||||
int32_t ret = tasoUcs4Compare(varDataVal(f1), varDataVal(f2), len1);
|
||||
if (ret == 0) {
|
||||
return 0;
|
||||
}
|
||||
return (ret < 0) ? -1 : 1;
|
||||
}
|
||||
return (ret < 0) ? -1 : 1;
|
||||
};
|
||||
case TSDB_DATA_TYPE_UTINYINT: DEFAULT_COMP(GET_UINT8_VAL(f1), GET_UINT8_VAL(f2));
|
||||
case TSDB_DATA_TYPE_USMALLINT: DEFAULT_COMP(GET_UINT16_VAL(f1), GET_UINT16_VAL(f2));
|
||||
|
|
|
@ -583,6 +583,7 @@ void blockDistInfoToBinary(STableBlockDist* pDist, struct SBufferWriter* bw) {
|
|||
tbufWriteInt32(bw, pDist->maxRows);
|
||||
tbufWriteInt32(bw, pDist->minRows);
|
||||
tbufWriteUint32(bw, pDist->numOfRowsInMemTable);
|
||||
tbufWriteUint32(bw, pDist->numOfSmallBlocks);
|
||||
tbufWriteUint64(bw, taosArrayGetSize(pDist->dataBlockInfos));
|
||||
|
||||
// compress the binary string
|
||||
|
@ -621,6 +622,7 @@ void blockDistInfoFromBinary(const char* data, int32_t len, STableBlockDist* pDi
|
|||
pDist->maxRows = tbufReadInt32(&br);
|
||||
pDist->minRows = tbufReadInt32(&br);
|
||||
pDist->numOfRowsInMemTable = tbufReadUint32(&br);
|
||||
pDist->numOfSmallBlocks = tbufReadUint32(&br);
|
||||
int64_t numSteps = tbufReadUint64(&br);
|
||||
|
||||
bool comp = tbufReadUint8(&br);
|
||||
|
|
|
@ -25,7 +25,7 @@ typedef struct {
|
|||
uint32_t serverIp;
|
||||
int16_t port;
|
||||
int32_t bufferSize;
|
||||
void (*processBrokenLink)(int64_t handleId);
|
||||
void (*processBrokenLink)(int64_t handleId, int32_t closedByApp);
|
||||
int32_t (*processIncomingMsg)(int64_t handleId, void *buffer);
|
||||
void (*processIncomingConn)(SOCKET fd, uint32_t ip);
|
||||
} SPoolInfo;
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
extern void syncProcessTestMsg(SSyncMsg *pMsg, SOCKET connFd);
|
||||
static void arbSignalHandler(int32_t signum, void *sigInfo, void *context);
|
||||
static void arbProcessIncommingConnection(SOCKET connFd, uint32_t sourceIp);
|
||||
static void arbProcessBrokenLink(int64_t rid);
|
||||
static void arbProcessBrokenLink(int64_t rid, int32_t closedByApp);
|
||||
static int32_t arbProcessPeerMsg(int64_t rid, void *buffer);
|
||||
static tsem_t tsArbSem;
|
||||
static void * tsArbTcpPool;
|
||||
|
@ -147,10 +147,10 @@ static void arbProcessIncommingConnection(SOCKET connFd, uint32_t sourceIp) {
|
|||
return;
|
||||
}
|
||||
|
||||
static void arbProcessBrokenLink(int64_t rid) {
|
||||
static void arbProcessBrokenLink(int64_t rid, int32_t closedByApp) {
|
||||
SNodeConn *pNode = (SNodeConn *)rid;
|
||||
|
||||
sDebug("%s, TCP link is broken since %s, close connection", pNode->id, strerror(errno));
|
||||
sDebug("%s, TCP link is broken since %s, closedByApp:%d", pNode->id, strerror(errno), closedByApp);
|
||||
tfree(pNode);
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ static void syncProcessSyncRequest(char *pMsg, SSyncPeer *pPeer);
|
|||
static void syncRecoverFromMaster(SSyncPeer *pPeer);
|
||||
static void syncCheckPeerConnection(void *param, void *tmrId);
|
||||
static int32_t syncSendPeersStatusMsgToPeer(SSyncPeer *pPeer, char ack, int8_t type, uint16_t tranId);
|
||||
static void syncProcessBrokenLink(int64_t rid);
|
||||
static void syncProcessBrokenLink(int64_t rid, int32_t closedByApp);
|
||||
static int32_t syncProcessPeerMsg(int64_t rid, void *buffer);
|
||||
static void syncProcessIncommingConnection(SOCKET connFd, uint32_t sourceIp);
|
||||
static void syncRemovePeer(SSyncPeer *pPeer);
|
||||
|
@ -1308,7 +1308,7 @@ static void syncProcessIncommingConnection(SOCKET connFd, uint32_t sourceIp) {
|
|||
pthread_mutex_unlock(&pNode->mutex);
|
||||
}
|
||||
|
||||
static void syncProcessBrokenLink(int64_t rid) {
|
||||
static void syncProcessBrokenLink(int64_t rid, int32_t closedByApp) {
|
||||
SSyncPeer *pPeer = syncAcquirePeer(rid);
|
||||
if (pPeer == NULL) return;
|
||||
|
||||
|
@ -1316,9 +1316,10 @@ static void syncProcessBrokenLink(int64_t rid) {
|
|||
|
||||
pthread_mutex_lock(&pNode->mutex);
|
||||
|
||||
sDebug("%s, TCP link is broken since %s, pfd:%d sfd:%d", pPeer->id, strerror(errno), pPeer->peerFd, pPeer->syncFd);
|
||||
sDebug("%s, TCP link is broken since %s, pfd:%d sfd:%d closedByApp:%d",
|
||||
pPeer->id, strerror(errno), pPeer->peerFd, pPeer->syncFd, closedByApp);
|
||||
pPeer->peerFd = -1;
|
||||
if (pPeer->isArb) {
|
||||
if (!closedByApp && pPeer->isArb) {
|
||||
tsArbOnline = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -177,7 +177,7 @@ static void taosProcessBrokenLink(SConnObj *pConn) {
|
|||
SPoolInfo * pInfo = &pPool->info;
|
||||
|
||||
if (pConn->closedByApp == 0) shutdown(pConn->fd, SHUT_WR);
|
||||
(*pInfo->processBrokenLink)(pConn->handleId);
|
||||
(*pInfo->processBrokenLink)(pConn->handleId, pConn->closedByApp);
|
||||
|
||||
pThread->numOfFds--;
|
||||
epoll_ctl(pThread->pollFd, EPOLL_CTL_DEL, pConn->fd, NULL);
|
||||
|
|
|
@ -2432,6 +2432,7 @@ int32_t tsdbGetFileBlocksDistInfo(TsdbQueryHandleT* queryHandle, STableBlockDist
|
|||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
int32_t numOfBlocks = 0;
|
||||
int32_t numOfTables = (int32_t)taosArrayGetSize(pQueryHandle->pTableCheckInfo);
|
||||
int defaultRows = TSDB_DEFAULT_BLOCK_ROWS(pCfg->maxRowsPerFileBlock);
|
||||
STimeWindow win = TSWINDOW_INITIALIZER;
|
||||
|
||||
while (true) {
|
||||
|
@ -2491,6 +2492,7 @@ int32_t tsdbGetFileBlocksDistInfo(TsdbQueryHandleT* queryHandle, STableBlockDist
|
|||
pTableBlockInfo->totalRows += numOfRows;
|
||||
if (numOfRows > pTableBlockInfo->maxRows) pTableBlockInfo->maxRows = numOfRows;
|
||||
if (numOfRows < pTableBlockInfo->minRows) pTableBlockInfo->minRows = numOfRows;
|
||||
if (numOfRows < defaultRows) pTableBlockInfo->numOfSmallBlocks+=1;
|
||||
int32_t stepIndex = (numOfRows-1)/TSDB_BLOCK_DIST_STEP_ROWS;
|
||||
SFileBlockInfo *blockInfo = (SFileBlockInfo*)taosArrayGet(pTableBlockInfo->dataBlockInfos, stepIndex);
|
||||
blockInfo->numBlocksOfStep++;
|
||||
|
|
|
@ -110,7 +110,9 @@ void vnodeRelease(void *vparam) {
|
|||
if (vparam == NULL) return;
|
||||
|
||||
int32_t refCount = atomic_sub_fetch_32(&pVnode->refCount, 1);
|
||||
vTrace("vgId:%d, release vnode, refCount:%d pVnode:%p", pVnode->vgId, refCount, pVnode);
|
||||
int32_t vgId = pVnode->vgId;
|
||||
|
||||
vTrace("vgId:%d, release vnode, refCount:%d pVnode:%p", vgId, refCount, pVnode);
|
||||
assert(refCount >= 0);
|
||||
|
||||
if (refCount > 0) {
|
||||
|
@ -118,10 +120,10 @@ void vnodeRelease(void *vparam) {
|
|||
tsem_post(&pVnode->sem);
|
||||
}
|
||||
} else {
|
||||
vDebug("vgId:%d, vnode will be destroyed, refCount:%d pVnode:%p", pVnode->vgId, refCount, pVnode);
|
||||
vDebug("vgId:%d, vnode will be destroyed, refCount:%d pVnode:%p", vgId, refCount, pVnode);
|
||||
vnodeDestroyInMWorker(pVnode);
|
||||
int32_t count = taosHashGetSize(tsVnodesHash);
|
||||
vDebug("vgId:%d, vnode is destroyed, vnodes:%d", pVnode->vgId, count);
|
||||
vDebug("vgId:%d, vnode is destroyed, vnodes:%d", vgId, count);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<dependency>
|
||||
<groupId>com.taosdata.jdbc</groupId>
|
||||
<artifactId>taos-jdbcdriver</artifactId>
|
||||
<version>2.0.30</version>
|
||||
<version>2.0.31</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
|
|
@ -43,6 +43,7 @@ public class JdbcDemo {
|
|||
if (connection != null)
|
||||
System.out.println("[ OK ] Connection established.");
|
||||
} catch (ClassNotFoundException | SQLException e) {
|
||||
System.out.println("[ ERROR! ] Connection establish failed.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
@ -68,7 +69,7 @@ public class JdbcDemo {
|
|||
}
|
||||
|
||||
private void insert() {
|
||||
final String sql = "insert into " + dbName + "." + tbName + " (ts, temperature, humidity) values(now, 20.5, 34)";
|
||||
final String sql = "insert into " + dbName + "." + tbName + " (ts, temperature, humidity) values(now, 20.5, 34)";
|
||||
exuete(sql);
|
||||
}
|
||||
|
||||
|
@ -91,13 +92,15 @@ public class JdbcDemo {
|
|||
/************************************************************************/
|
||||
|
||||
private void executeQuery(String sql) {
|
||||
long start = System.currentTimeMillis();
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
long start = System.currentTimeMillis();
|
||||
ResultSet resultSet = statement.executeQuery(sql);
|
||||
long end = System.currentTimeMillis();
|
||||
printSql(sql, true, (end - start));
|
||||
printResult(resultSet);
|
||||
} catch (SQLException e) {
|
||||
long end = System.currentTimeMillis();
|
||||
printSql(sql, false, (end - start));
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
@ -120,12 +123,14 @@ public class JdbcDemo {
|
|||
}
|
||||
|
||||
private void exuete(String sql) {
|
||||
long start = System.currentTimeMillis();
|
||||
try (Statement statement = connection.createStatement()) {
|
||||
long start = System.currentTimeMillis();
|
||||
boolean execute = statement.execute(sql);
|
||||
long end = System.currentTimeMillis();
|
||||
printSql(sql, execute, (end - start));
|
||||
printSql(sql, true, (end - start));
|
||||
} catch (SQLException e) {
|
||||
long end = System.currentTimeMillis();
|
||||
printSql(sql, false, (end - start));
|
||||
e.printStackTrace();
|
||||
|
||||
}
|
||||
|
@ -137,4 +142,4 @@ public class JdbcDemo {
|
|||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -244,6 +244,7 @@ python3 ./test.py -f query/queryStddevWithGroupby.py
|
|||
python3 ./test.py -f query/querySecondtscolumnTowherenow.py
|
||||
python3 ./test.py -f query/queryFilterTswithDateUnit.py
|
||||
python3 ./test.py -f query/queryTscomputWithNow.py
|
||||
python3 ./test.py -f query/queryStableJoin.py
|
||||
python3 ./test.py -f query/computeErrorinWhere.py
|
||||
python3 ./test.py -f query/queryTsisNull.py
|
||||
python3 ./test.py -f query/subqueryFilter.py
|
||||
|
|
|
@ -16,7 +16,6 @@ from util.log import tdLog
|
|||
from util.cases import tdCases
|
||||
from util.sql import tdSql
|
||||
from util.dnodes import tdDnodes
|
||||
from multiprocessing import Process
|
||||
import subprocess
|
||||
|
||||
class TDTestCase:
|
||||
|
@ -28,16 +27,6 @@ class TDTestCase:
|
|||
self.tables = 10
|
||||
self.rows = 1000
|
||||
|
||||
def updateMetadata(self):
|
||||
self.host = "127.0.0.1"
|
||||
self.user = "root"
|
||||
self.password = "taosdata"
|
||||
self.config = tdDnodes.getSimCfgPath()
|
||||
|
||||
self.conn = taos.connect(host = self.host, user = self.user, password = self.password, config = self.config)
|
||||
self.cursor = self.conn.cursor()
|
||||
self.cursor.execute("alter table db.tb add column col2 int")
|
||||
print("alter table done")
|
||||
|
||||
def deleteTableAndRecreate(self):
|
||||
self.config = tdDnodes.getSimCfgPath()
|
||||
|
@ -68,11 +57,15 @@ class TDTestCase:
|
|||
tdSql.query("select * from tb")
|
||||
tdSql.checkRows(1)
|
||||
|
||||
p = Process(target=self.updateMetadata, args=())
|
||||
p.start()
|
||||
p.join()
|
||||
p.terminate()
|
||||
|
||||
self.config = tdDnodes.getSimCfgPath()
|
||||
command = ["taos", "-c", self.config, "-s", "alter table db.tb add column col2 int;"]
|
||||
print("alter table db.tb add column col2 int;")
|
||||
result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8")
|
||||
if result.returncode == 0:
|
||||
print("success:", result)
|
||||
else:
|
||||
print("error:", result)
|
||||
|
||||
tdSql.execute("insert into tb(ts, col1, col2) values(%d, 1, 2)" % (self.ts + 2))
|
||||
|
||||
print("==============step2")
|
||||
|
|
|
@ -73,6 +73,52 @@ class TDTestCase:
|
|||
tdSql.checkData(6, 0, "2020-09-16 00:00:00")
|
||||
tdSql.checkData(6, 1, 222.0)
|
||||
|
||||
# test case for https://jira.taosdata.com:18080/browse/TD-5338
|
||||
tdSql.query("select loc,max(voltage) from st interval(1m);")
|
||||
tdSql.checkRows(8)
|
||||
tdSql.checkData(0, 0, "2020-07-01 04:24:00.000")
|
||||
tdSql.checkData(0, 1, "beijing")
|
||||
tdSql.checkData(0, 2, 220)
|
||||
tdSql.checkData(1, 0, "2020-07-12 18:11:00.000")
|
||||
tdSql.checkData(1, 1, "beijing")
|
||||
tdSql.checkData(1, 2, 221)
|
||||
tdSql.checkData(2, 0, "2020-07-24 07:58:00.000")
|
||||
tdSql.checkData(2, 1, "beijing")
|
||||
tdSql.checkData(2, 2, 225)
|
||||
tdSql.checkData(3, 0, "2020-08-04 21:44:00.000")
|
||||
tdSql.checkData(2, 1, "beijing")
|
||||
tdSql.checkData(3, 2, 228)
|
||||
tdSql.checkData(4, 0, "2020-08-16 11:31:00.000")
|
||||
tdSql.checkData(4, 1, "shanghai")
|
||||
tdSql.checkData(4, 2, 225)
|
||||
tdSql.checkData(5, 0, "2020-08-28 01:18:00.000")
|
||||
tdSql.checkData(5, 1, "shanghai")
|
||||
tdSql.checkData(5, 2, 228)
|
||||
tdSql.checkData(6, 0, "2020-09-08 15:04:00.000")
|
||||
tdSql.checkData(6, 1, "beijing")
|
||||
tdSql.checkData(6, 2, 222)
|
||||
tdSql.checkData(7, 0, "2020-09-20 04:51:00.000")
|
||||
tdSql.checkData(7, 1, "shanghai")
|
||||
tdSql.checkData(7, 2, 222)
|
||||
tdSql.query("select loc,max(voltage) from t0 interval(1m);")
|
||||
tdSql.checkRows(5)
|
||||
tdSql.checkData(0, 0, "2020-07-01 04:24:00.000")
|
||||
tdSql.checkData(0, 1, "beijing")
|
||||
tdSql.checkData(0, 2, 220)
|
||||
tdSql.checkData(1, 0, "2020-07-12 18:11:00.000")
|
||||
tdSql.checkData(1, 1, "beijing")
|
||||
tdSql.checkData(1, 2, 221)
|
||||
tdSql.checkData(2, 0, "2020-07-24 07:58:00.000")
|
||||
tdSql.checkData(2, 1, "beijing")
|
||||
tdSql.checkData(2, 2, 225)
|
||||
tdSql.checkData(3, 0, "2020-08-04 21:44:00.000")
|
||||
tdSql.checkData(2, 1, "beijing")
|
||||
tdSql.checkData(3, 2, 228)
|
||||
tdSql.checkData(4, 0, "2020-09-08 15:04:00.000")
|
||||
tdSql.checkData(4, 1, "beijing")
|
||||
tdSql.checkData(4, 2, 222)
|
||||
|
||||
|
||||
# test case for https://jira.taosdata.com:18080/browse/TD-2298
|
||||
tdSql.execute("create database test keep 36500")
|
||||
tdSql.execute("use test")
|
||||
|
|
|
@ -0,0 +1,300 @@
|
|||
###################################################################
|
||||
# Copyright (c) 2016 by TAOS Technologies, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# This file is proprietary and confidential to TAOS Technologies.
|
||||
# No part of this file may be reproduced, stored, transmitted,
|
||||
# disclosed or used in any form or by any means other than as
|
||||
# expressly provided by the written permission from Jianhui Tao
|
||||
#
|
||||
###################################################################
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
import taos
|
||||
from util.log import tdLog
|
||||
from util.cases import tdCases
|
||||
from util.sql import tdSql
|
||||
import random
|
||||
|
||||
|
||||
class TDTestCase:
|
||||
def init(self, conn, logSql):
|
||||
tdLog.debug("start to execute %s" % __file__)
|
||||
tdSql.init(conn.cursor(), logSql)
|
||||
|
||||
self.ts = 1600000000000
|
||||
self.num = 10
|
||||
|
||||
def run(self):
|
||||
tdSql.prepare()
|
||||
# test case for https://jira.taosdata.com:18080/browse/TD-5206
|
||||
|
||||
tdSql.execute('''create stable stable_1
|
||||
(ts timestamp , q_int int , q_bigint bigint , q_smallint smallint , q_tinyint tinyint,
|
||||
q_bool bool , q_binary binary(20) , q_nchar nchar(20) ,q_float float , q_double double , q_ts timestamp)
|
||||
tags(loc nchar(20) , t_int int , t_bigint bigint , t_smallint smallint , t_tinyint tinyint,
|
||||
t_bool bool , t_binary binary(20) , t_nchar nchar(20) ,t_float float , t_double double );''')
|
||||
tdSql.execute('''create stable stable_2
|
||||
(ts timestamp , q_int int , q_bigint bigint , q_smallint smallint , q_tinyint tinyint,
|
||||
q_bool bool , q_binary binary(20) , q_nchar nchar(20) ,q_float float , q_double double , q_ts timestamp)
|
||||
tags(loc nchar(20) , t_int int , t_bigint bigint , t_smallint smallint , t_tinyint tinyint,
|
||||
t_bool bool , t_binary binary(20) , t_nchar nchar(20) ,t_float float , t_double double );''')
|
||||
tdSql.execute('''create table table_0 using stable_1
|
||||
tags('table_0' , '0' , '0' , '0' , '0' , 0 , '0' , '0' , '0' , '0' )''')
|
||||
tdSql.execute('''create table table_1 using stable_1
|
||||
tags('table_1' , '2147483647' , '9223372036854775807' , '32767' , '127' , 1 ,
|
||||
'binary1' , 'nchar1' , '1' , '11' )''')
|
||||
tdSql.execute('''create table table_2 using stable_1
|
||||
tags('table_2' , '-2147483647' , '-9223372036854775807' , '-32767' , '-127' , false ,
|
||||
'binary2' , 'nchar2nchar2' , '-2.2' , '-22.22')''')
|
||||
tdSql.execute('''create table table_3 using stable_1
|
||||
tags('table_3' , '3' , '3' , '3' , '3' , true , 'binary3' , 'nchar3' , '33.33' , '3333.3333' )''')
|
||||
tdSql.execute('''create table table_4 using stable_1
|
||||
tags('table_4' , '4' , '4' , '4' , '4' , false , 'binary4' , 'nchar4' , '-444.444' , '-444444.444444' )''')
|
||||
tdSql.execute('''create table table_5 using stable_1
|
||||
tags('table_5' , '5' , '5' , '5' , '5' , true , 'binary5' , 'nchar5' , '5555.5555' , '55555555.55555555' )''')
|
||||
tdSql.execute('''create table table_21 using stable_2
|
||||
tags('table_5' , '5' , '5' , '5' , '5' , true , 'binary5' , 'nchar5' , '5555.5555' , '55555555.55555555' )''')
|
||||
|
||||
for i in range(self.num):
|
||||
tdSql.execute('''insert into table_0 values(%d, %d, %d, %d, %d, 0, 'binary.%s', 'nchar.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, i, i, i, i, i, i, i, i, self.ts + i))
|
||||
tdSql.execute('''insert into table_1 values(%d, %d, %d, %d, %d, 1, 'binary1.%s', 'nchar1.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, 2147483647-i, 9223372036854775807-i, 32767-i, 127-i,
|
||||
i, i, random.random(), random.random(), 1262304000001 + i))
|
||||
tdSql.execute('''insert into table_2 values(%d, %d, %d, %d, %d, true, 'binary2.%s', 'nchar2nchar2.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, -2147483647+i, -9223372036854775807+i, -32767+i, -127+i,
|
||||
i, i, random.uniform(-1,0), random.uniform(-1,0), 1577836800001 + i))
|
||||
tdSql.execute('''insert into table_3 values(%d, %d, %d, %d, %d, false, 'binary3.%s', 'nchar3.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, random.randint(-2147483647, 2147483647),
|
||||
random.randint(-9223372036854775807, 9223372036854775807), random.randint(-32767, 32767),
|
||||
random.randint(-127, 127), random.randint(-100, 100), random.randint(-10000, 10000),
|
||||
random.uniform(-100000,100000), random.uniform(-1000000000,1000000000), self.ts + i))
|
||||
tdSql.execute('''insert into table_4 values(%d, %d, %d, %d, %d, true, 'binary4.%s', 'nchar4.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, i, i, i, i, i, i, i, i, self.ts + i))
|
||||
tdSql.execute('''insert into table_5 values(%d, %d, %d, %d, %d, false, 'binary5.%s', 'nchar5.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, i, i, i, i, i, i, i, i, self.ts + i))
|
||||
tdSql.execute('''insert into table_21 values(%d, %d, %d, %d, %d, false, 'binary5.%s', 'nchar5.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, i, i, i, i, i, i, i, i, self.ts + i))
|
||||
|
||||
|
||||
tdLog.info("==========TEST1:test all table data==========")
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_nchar = stable_2.t_nchar and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_tinyint = stable_2.t_tinyint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_binary = stable_2.t_binary and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_double = stable_2.t_double and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_smallint = stable_2.t_smallint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bigint = stable_2.t_bigint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_int = stable_2.t_int and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_float = stable_2.t_float and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bool = stable_2.t_bool and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.error(sql)
|
||||
|
||||
tdLog.info("==========TEST1:test drop table_0 data==========")
|
||||
sql = '''drop table table_0;'''
|
||||
tdSql.execute(sql)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_nchar = stable_2.t_nchar and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_tinyint = stable_2.t_tinyint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_binary = stable_2.t_binary and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_double = stable_2.t_double and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_smallint = stable_2.t_smallint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bigint = stable_2.t_bigint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_int = stable_2.t_int and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_float = stable_2.t_float and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bool = stable_2.t_bool and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.error(sql)
|
||||
|
||||
tdLog.info("==========TEST1:test drop table_1 data==========")
|
||||
sql = '''drop table table_1;'''
|
||||
tdSql.execute(sql)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_nchar = stable_2.t_nchar and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_tinyint = stable_2.t_tinyint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_binary = stable_2.t_binary and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_double = stable_2.t_double and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_smallint = stable_2.t_smallint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bigint = stable_2.t_bigint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_int = stable_2.t_int and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_float = stable_2.t_float and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bool = stable_2.t_bool and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.error(sql)
|
||||
|
||||
tdLog.info("==========TEST1:test drop table_2 data==========")
|
||||
sql = '''drop table table_2;'''
|
||||
tdSql.execute(sql)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_nchar = stable_2.t_nchar and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_tinyint = stable_2.t_tinyint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_binary = stable_2.t_binary and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_double = stable_2.t_double and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_smallint = stable_2.t_smallint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bigint = stable_2.t_bigint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_int = stable_2.t_int and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_float = stable_2.t_float and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bool = stable_2.t_bool and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.error(sql)
|
||||
|
||||
tdLog.info("==========TEST1:test drop table_3 data==========")
|
||||
sql = '''drop table table_3;'''
|
||||
tdSql.execute(sql)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_nchar = stable_2.t_nchar and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_tinyint = stable_2.t_tinyint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_binary = stable_2.t_binary and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_double = stable_2.t_double and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_smallint = stable_2.t_smallint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bigint = stable_2.t_bigint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_int = stable_2.t_int and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_float = stable_2.t_float and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bool = stable_2.t_bool and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
|
||||
tdLog.info("==========TEST1:test drop table_4 data==========")
|
||||
sql = '''drop table table_4;'''
|
||||
tdSql.execute(sql)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_nchar = stable_2.t_nchar and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_tinyint = stable_2.t_tinyint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_binary = stable_2.t_binary and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_double = stable_2.t_double and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_smallint = stable_2.t_smallint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bigint = stable_2.t_bigint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_int = stable_2.t_int and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_float = stable_2.t_float and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bool = stable_2.t_bool and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
|
||||
tdLog.info("==========TEST1:test drop table_5 data==========")
|
||||
sql = '''drop table table_5;'''
|
||||
tdSql.execute(sql)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_nchar = stable_2.t_nchar and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(0)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_tinyint = stable_2.t_tinyint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(0)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_binary = stable_2.t_binary and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(0)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_double = stable_2.t_double and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(0)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_smallint = stable_2.t_smallint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(0)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bigint = stable_2.t_bigint and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(0)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_int = stable_2.t_int and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(0)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_float = stable_2.t_float and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(0)
|
||||
sql = '''select * from stable_1,stable_2 where stable_1.t_bool = stable_2.t_bool and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(0)
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success("%s successfully executed" % __file__)
|
||||
|
||||
|
||||
tdCases.addWindows(__file__, TDTestCase())
|
||||
tdCases.addLinux(__file__, TDTestCase())
|
|
@ -176,12 +176,8 @@ class TDTestCase:
|
|||
tdSql.checkData(0, 1, 5)
|
||||
tdSql.checkData(1, 1, 6)
|
||||
tdSql.checkData(2, 1, 7)
|
||||
|
||||
|
||||
os.system("rm -rf tools/taosdemoAllTest/TD-4985/query-limit-offset.py.sql")
|
||||
|
||||
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success("%s successfully executed" % __file__)
|
||||
|
|
|
@ -180,13 +180,14 @@ class TDTestCase:
|
|||
os.system("%staosdemo -f tools/taosdemoAllTest/insertColumnsAndTagNum4096.json -y " % binPath)
|
||||
tdSql.query("select count(*) from db.stb0")
|
||||
tdSql.checkData(0, 0, 10000)
|
||||
|
||||
tdSql.execute("drop database if exists db")
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/insertInterlaceRowsLarge1M.json -y " % binPath)
|
||||
tdSql.query("select count(*) from db.stb0")
|
||||
tdSql.checkRows(0)
|
||||
tdSql.execute("drop database if exists db")
|
||||
tdSql.execute("drop database if exists db")
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/insertColumnsNum0.json -y " % binPath)
|
||||
tdSql.execute("use db")
|
||||
tdSql.execute("use db")
|
||||
tdSql.query("show stables like 'stb0%' ")
|
||||
tdSql.checkData(0, 2, 11)
|
||||
tdSql.execute("drop database if exists db")
|
||||
|
@ -196,7 +197,7 @@ class TDTestCase:
|
|||
os.system("%staosdemo -f tools/taosdemoAllTest/insertBinaryLenLarge16374AllcolLar49151.json -y " % binPath)
|
||||
tdSql.query("select count(*) from db.stb0")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.query("select count(*) from db.stb1")
|
||||
tdSql.query("select count(*) from db.stb1")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.error("select * from db.stb4")
|
||||
tdSql.error("select * from db.stb2")
|
||||
|
@ -221,7 +222,7 @@ class TDTestCase:
|
|||
tdSql.checkData(0, 0, "2020-03-31 12:00:00.000")
|
||||
tdSql.query("select first(ts) from blf.p_0_topics_2")
|
||||
tdSql.checkData(0, 0, "2019-10-01 00:00:00")
|
||||
tdSql.query("select last(ts) from blf.p_0_topics_6 ")
|
||||
tdSql.query("select last(ts) from blf.p_0_topics_6 ")
|
||||
tdSql.checkData(0, 0, "2020-09-29 23:59:00")
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/insertMaxNumPerReq.json -y " % binPath)
|
||||
tdSql.execute("use db")
|
||||
|
@ -324,6 +325,7 @@ class TDTestCase:
|
|||
|
||||
|
||||
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success("%s successfully executed" % __file__)
|
||||
|
|
|
@ -98,8 +98,8 @@ class TDTestCase:
|
|||
break
|
||||
time.sleep(1)
|
||||
|
||||
print("alter table test.meters add column col10 int")
|
||||
tdSql.execute("alter table test.meters add column col10 int")
|
||||
print("alter table test.meters add column c10 int")
|
||||
tdSql.execute("alter table test.meters add column c10 int")
|
||||
print("insert into test.t9 values (now, 1, 2, 3, 4, 0)")
|
||||
tdSql.execute("insert into test.t9 values (now, 1, 2, 3, 4, 0)")
|
||||
|
||||
|
|
|
@ -35,7 +35,10 @@ sql alter table tb1 set tag name = ""
|
|||
sql alter table tb1 set tag name = "shenzhen"
|
||||
sql alter table tb1 set tag len = 379
|
||||
|
||||
# case TD-5594
|
||||
sql create stable st5520(ts timestamp, f int) tags(t0 bool, t1 nchar(4093), t2 nchar(1))
|
||||
sql_error alter stable st5520 modify tag t2 nchar(2);
|
||||
# test end
|
||||
sql drop database $db
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
|
|
|
@ -808,6 +808,11 @@ bool simExecuteNativeSqlCommand(SScript *script, char *rest, bool isSlow) {
|
|||
break;
|
||||
case TSDB_DATA_TYPE_BINARY:
|
||||
case TSDB_DATA_TYPE_NCHAR:
|
||||
if (length[i] < 0 || length[i] > 1 << 20) {
|
||||
fprintf(stderr, "Invalid length(%d) of BINARY or NCHAR\n", length[i]);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
memset(value, 0, MAX_QUERY_VALUE_LEN);
|
||||
memcpy(value, row[i], length[i]);
|
||||
value[length[i]] = 0;
|
||||
|
|
Loading…
Reference in New Issue