提交 e5a36038 编写于 作者: F freemine

Merge remote-tracking branch 'upstream/develop' into odbc

...@@ -79,7 +79,14 @@ pipeline { ...@@ -79,7 +79,14 @@ pipeline {
cmake .. > /dev/null cmake .. > /dev/null
make > /dev/null make > /dev/null
cd ${WKC}/tests/pytest cd ${WKC}/tests/pytest
'''
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
sh '''
cd ${WKC}/tests/pytest
./crash_gen.sh -a -p -t 4 -s 2000 ./crash_gen.sh -a -p -t 4 -s 2000
'''
}
sh '''
date date
cd ${WKC}/tests cd ${WKC}/tests
./test-all.sh b2 ./test-all.sh b2
......
...@@ -2461,12 +2461,22 @@ static void percentile_function(SQLFunctionCtx *pCtx) { ...@@ -2461,12 +2461,22 @@ static void percentile_function(SQLFunctionCtx *pCtx) {
// the first stage, only acquire the min/max value // the first stage, only acquire the min/max value
if (pInfo->stage == 0) { if (pInfo->stage == 0) {
if (pCtx->preAggVals.isSet) { if (pCtx->preAggVals.isSet) {
if (GET_DOUBLE_VAL(&pInfo->minval) > pCtx->preAggVals.statis.min) { double tmin = 0.0, tmax = 0.0;
SET_DOUBLE_VAL(&pInfo->minval, (double)pCtx->preAggVals.statis.min); if (pCtx->inputType >= TSDB_DATA_TYPE_TINYINT && pCtx->inputType <= TSDB_DATA_TYPE_BIGINT) {
tmin = (double)GET_INT64_VAL(&pCtx->preAggVals.statis.min);
tmax = (double)GET_INT64_VAL(&pCtx->preAggVals.statis.max);
} else if (pCtx->inputType == TSDB_DATA_TYPE_DOUBLE || pCtx->inputType == TSDB_DATA_TYPE_FLOAT) {
tmin = GET_DOUBLE_VAL(&pCtx->preAggVals.statis.min);
tmax = GET_DOUBLE_VAL(&pCtx->preAggVals.statis.max);
} else {
assert(true);
}
if (GET_DOUBLE_VAL(&pInfo->minval) > tmin) {
SET_DOUBLE_VAL(&pInfo->minval, tmin);
} }
if (GET_DOUBLE_VAL(&pInfo->maxval) < pCtx->preAggVals.statis.max) { if (GET_DOUBLE_VAL(&pInfo->maxval) < tmax) {
SET_DOUBLE_VAL(&pInfo->maxval, (double)pCtx->preAggVals.statis.max); SET_DOUBLE_VAL(&pInfo->maxval, tmax);
} }
pInfo->numOfElems += (pCtx->size - pCtx->preAggVals.statis.numOfNull); pInfo->numOfElems += (pCtx->size - pCtx->preAggVals.statis.numOfNull);
......
...@@ -219,6 +219,11 @@ static void tscDestroyJoinSupporter(SJoinSupporter* pSupporter) { ...@@ -219,6 +219,11 @@ static void tscDestroyJoinSupporter(SJoinSupporter* pSupporter) {
pSupporter->f = NULL; pSupporter->f = NULL;
} }
if (pSupporter->pVgroupTables != NULL) {
taosArrayDestroy(pSupporter->pVgroupTables);
pSupporter->pVgroupTables = NULL;
}
taosTFree(pSupporter->pIdTagList); taosTFree(pSupporter->pIdTagList);
tscTagCondRelease(&pSupporter->tagCond); tscTagCondRelease(&pSupporter->tagCond);
free(pSupporter); free(pSupporter);
...@@ -327,6 +332,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) { ...@@ -327,6 +332,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pNewQueryInfo, 0); STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pNewQueryInfo, 0);
pTableMetaInfo->pVgroupTables = pSupporter->pVgroupTables; pTableMetaInfo->pVgroupTables = pSupporter->pVgroupTables;
pSupporter->pVgroupTables = NULL;
/* /*
* When handling the projection query, the offset value will be modified for table-table join, which is changed * When handling the projection query, the offset value will be modified for table-table join, which is changed
...@@ -359,7 +365,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) { ...@@ -359,7 +365,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
int16_t colId = tscGetJoinTagColIdByUid(&pQueryInfo->tagCond, pTableMetaInfo->pTableMeta->id.uid); int16_t colId = tscGetJoinTagColIdByUid(&pQueryInfo->tagCond, pTableMetaInfo->pTableMeta->id.uid);
// set the tag column id for executor to extract correct tag value // set the tag column id for executor to extract correct tag value
pExpr->param[0].i64Key = colId; pExpr->param[0] = (tVariant) {.i64Key = colId, .nType = TSDB_DATA_TYPE_BIGINT, .nLen = sizeof(int64_t)};
pExpr->numOfParams = 1; pExpr->numOfParams = 1;
} }
...@@ -388,25 +394,6 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) { ...@@ -388,25 +394,6 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
assert(taosArrayGetSize(pTableMetaInfo->pVgroupTables) > 0); assert(taosArrayGetSize(pTableMetaInfo->pVgroupTables) > 0);
TSDB_QUERY_SET_TYPE(pQueryInfo->type, TSDB_QUERY_TYPE_MULTITABLE_QUERY); TSDB_QUERY_SET_TYPE(pQueryInfo->type, TSDB_QUERY_TYPE_MULTITABLE_QUERY);
} else { // TODO remove unnecessarily accessed vnode
// pTableMetaInfo->vgroupList->
// for(int32_t k = 0; k < taosArrayGetSize(pTableMetaInfo->pVgroupTables);) {
// SVgroupTableInfo* p = taosArrayGet(pTableMetaInfo->pVgroupTables, k);
//
// bool found = false;
// for(int32_t f = 0; f < num; ++f) {
// if (p->vgInfo.vgId == list[f]) {
// found = true;
// break;
// }
// }
//
// if (!found) {
// tscRemoveVgroupTableGroup(pTableMetaInfo->pVgroupTables, k);
// } else {
// k++;
// }
// }
} }
taosTFree(list); taosTFree(list);
...@@ -1023,7 +1010,20 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) { ...@@ -1023,7 +1010,20 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) {
// If at least one subquery is completed in current vnode, try the next vnode in case of multi-vnode // If at least one subquery is completed in current vnode, try the next vnode in case of multi-vnode
// super table projection query. // super table projection query.
if (numOfFetch <= 0 && !reachLimit) { if (reachLimit) {
pSql->res.completed = true;
freeJoinSubqueryObj(pSql);
if (pSql->res.code == TSDB_CODE_SUCCESS) {
(*pSql->fp)(pSql->param, pSql, 0);
} else {
tscQueueAsyncRes(pSql);
}
return;
}
if (numOfFetch <= 0) {
bool tryNextVnode = false; bool tryNextVnode = false;
SSqlObj* pp = pSql->pSubs[0]; SSqlObj* pp = pSql->pSubs[0];
...@@ -1031,7 +1031,7 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) { ...@@ -1031,7 +1031,7 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) {
// get the number of subquery that need to retrieve the next vnode. // get the number of subquery that need to retrieve the next vnode.
if (tscNonOrderedProjectionQueryOnSTable(pi, 0)) { if (tscNonOrderedProjectionQueryOnSTable(pi, 0)) {
for(int32_t i = 0; i < pSql->subState.numOfSub; ++i) { for (int32_t i = 0; i < pSql->subState.numOfSub; ++i) {
SSqlObj* pSub = pSql->pSubs[i]; SSqlObj* pSub = pSql->pSubs[i];
if (pSub != NULL && pSub->res.row >= pSub->res.numOfRows && pSub->res.completed) { if (pSub != NULL && pSub->res.row >= pSub->res.numOfRows && pSub->res.completed) {
pSql->subState.numOfRemain++; pSql->subState.numOfRemain++;
...@@ -1047,7 +1047,8 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) { ...@@ -1047,7 +1047,8 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) {
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSub->cmd, 0); SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSub->cmd, 0);
if (tscNonOrderedProjectionQueryOnSTable(pQueryInfo, 0) && pSub->res.row >= pSub->res.numOfRows && pSub->res.completed) { if (tscNonOrderedProjectionQueryOnSTable(pQueryInfo, 0) && pSub->res.row >= pSub->res.numOfRows &&
pSub->res.completed) {
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0); STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
assert(pQueryInfo->numOfTables == 1); assert(pQueryInfo->numOfTables == 1);
......
...@@ -1121,6 +1121,8 @@ int32_t tscSqlExprCopy(SArray* dst, const SArray* src, uint64_t uid, bool deepco ...@@ -1121,6 +1121,8 @@ int32_t tscSqlExprCopy(SArray* dst, const SArray* src, uint64_t uid, bool deepco
} }
*p1 = *pExpr; *p1 = *pExpr;
memset(p1->param, 0, sizeof(tVariant) * tListLen(p1->param));
for (int32_t j = 0; j < pExpr->numOfParams; ++j) { for (int32_t j = 0; j < pExpr->numOfParams; ++j) {
tVariantAssign(&p1->param[j], &pExpr->param[j]); tVariantAssign(&p1->param[j], &pExpr->param[j]);
} }
......
...@@ -182,7 +182,7 @@ static int32_t mnodeGetConnsMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC ...@@ -182,7 +182,7 @@ static int32_t mnodeGetConnsMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC
// app name // app name
pShow->bytes[cols] = TSDB_APPNAME_LEN + VARSTR_HEADER_SIZE; pShow->bytes[cols] = TSDB_APPNAME_LEN + VARSTR_HEADER_SIZE;
pSchema[cols].type = TSDB_DATA_TYPE_BINARY; pSchema[cols].type = TSDB_DATA_TYPE_BINARY;
strcpy(pSchema[cols].name, "app_name"); strcpy(pSchema[cols].name, "program");
pSchema[cols].bytes = htons(pShow->bytes[cols]); pSchema[cols].bytes = htons(pShow->bytes[cols]);
cols++; cols++;
......
...@@ -2632,16 +2632,18 @@ void setTagVal(SQueryRuntimeEnv *pRuntimeEnv, void *pTable, void *tsdb) { ...@@ -2632,16 +2632,18 @@ void setTagVal(SQueryRuntimeEnv *pRuntimeEnv, void *pTable, void *tsdb) {
assert(pFuncMsg->numOfParams == 1); assert(pFuncMsg->numOfParams == 1);
int16_t tagColId = (int16_t)pExprInfo->base.arg->argValue.i64; int16_t tagColId = (int16_t)pExprInfo->base.arg->argValue.i64;
SColumnInfo* pColInfo = doGetTagColumnInfoById(pQuery->tagColList, pQuery->numOfTags, tagColId); SColumnInfo *pColInfo = doGetTagColumnInfoById(pQuery->tagColList, pQuery->numOfTags, tagColId);
doSetTagValueInParam(tsdb, pTable, tagColId, &pRuntimeEnv->pCtx[0].tag, pColInfo->type, pColInfo->bytes); doSetTagValueInParam(tsdb, pTable, tagColId, &pRuntimeEnv->pCtx[0].tag, pColInfo->type, pColInfo->bytes);
if (pRuntimeEnv->pCtx[0].tag.nType == TSDB_DATA_TYPE_BINARY || pRuntimeEnv->pCtx[0].tag.nType == TSDB_DATA_TYPE_NCHAR) {} int16_t tagType = pRuntimeEnv->pCtx[0].tag.nType;
qDebug("QInfo:%p set tag value for join comparison, colId:%" PRId64 ", val:%s", pQInfo, pExprInfo->base.arg->argValue.i64, if (tagType == TSDB_DATA_TYPE_BINARY || tagType == TSDB_DATA_TYPE_NCHAR) {
pRuntimeEnv->pCtx[0].tag.pz); qDebug("QInfo:%p set tag value for join comparison, colId:%" PRId64 ", val:%s", pQInfo,
pExprInfo->base.arg->argValue.i64, pRuntimeEnv->pCtx[0].tag.pz);
} else { } else {
qDebug("QInfo:%p set tag value for join comparison, colId:%" PRId64 ", val:%"PRId64, pQInfo, pExprInfo->base.arg->argValue.i64, qDebug("QInfo:%p set tag value for join comparison, colId:%" PRId64 ", val:%" PRId64, pQInfo,
pRuntimeEnv->pCtx[0].tag.i64Key); pExprInfo->base.arg->argValue.i64, pRuntimeEnv->pCtx[0].tag.i64Key);
}
} }
} }
} }
......
...@@ -186,7 +186,7 @@ python3 ./test.py -f functions/function_leastsquares.py -r 1 ...@@ -186,7 +186,7 @@ python3 ./test.py -f functions/function_leastsquares.py -r 1
python3 ./test.py -f functions/function_max.py -r 1 python3 ./test.py -f functions/function_max.py -r 1
python3 ./test.py -f functions/function_min.py -r 1 python3 ./test.py -f functions/function_min.py -r 1
python3 ./test.py -f functions/function_operations.py -r 1 python3 ./test.py -f functions/function_operations.py -r 1
python3 ./test.py -f functions/function_percentile.py python3 ./test.py -f functions/function_percentile.py -r 1
python3 ./test.py -f functions/function_spread.py -r 1 python3 ./test.py -f functions/function_spread.py -r 1
python3 ./test.py -f functions/function_stddev.py -r 1 python3 ./test.py -f functions/function_stddev.py -r 1
python3 ./test.py -f functions/function_sum.py -r 1 python3 ./test.py -f functions/function_sum.py -r 1
......
...@@ -26,7 +26,6 @@ class TDTestCase: ...@@ -26,7 +26,6 @@ class TDTestCase:
def run(self): def run(self):
rowNum = 200 rowNum = 200
totalNum = 200
tdSql.prepare() tdSql.prepare()
tdLog.info("=============== step1") tdLog.info("=============== step1")
...@@ -42,7 +41,9 @@ class TDTestCase: ...@@ -42,7 +41,9 @@ class TDTestCase:
tdSql.execute("create table st as select count(*), count(tbcol), count(tbcol2) from mt interval(10s)") tdSql.execute("create table st as select count(*), count(tbcol), count(tbcol2) from mt interval(10s)")
tdLog.info("=============== step3") tdLog.info("=============== step3")
start = time.time()
tdSql.waitedQuery("select * from st", 1, 120) tdSql.waitedQuery("select * from st", 1, 120)
delay = int(time.time() - start) + 20
v = tdSql.getData(0, 3) v = tdSql.getData(0, 3)
if v >= 51: if v >= 51:
tdLog.exit("value is %d, which is larger than 51" % v) tdLog.exit("value is %d, which is larger than 51" % v)
...@@ -54,11 +55,18 @@ class TDTestCase: ...@@ -54,11 +55,18 @@ class TDTestCase:
tdSql.execute("insert into tb%d values(now + %ds, %d, %d)" % (i, j, j, j)) tdSql.execute("insert into tb%d values(now + %ds, %d, %d)" % (i, j, j, j))
tdLog.info("=============== step5") tdLog.info("=============== step5")
tdLog.sleep(40) maxValue = 0
tdSql.waitedQuery("select * from st order by ts desc", 1, 120) for i in range(delay):
time.sleep(1)
tdSql.query("select * from st order by ts desc")
v = tdSql.getData(0, 3) v = tdSql.getData(0, 3)
if v <= 51: if v > maxValue:
tdLog.exit("value is %d, which is smaller than 51" % v) maxValue = v
if v > 51:
break
if maxValue <= 51:
tdLog.exit("value is %d, which is smaller than 51" % maxValue)
def stop(self): def stop(self):
tdSql.close() tdSql.close()
......
...@@ -27,7 +27,7 @@ $mt = $mtPrefix . $i ...@@ -27,7 +27,7 @@ $mt = $mtPrefix . $i
$tstart = 100000 $tstart = 100000
sql drop database if exits $db -x step1 sql drop database if exists $db -x step1
step1: step1:
sql create database if not exists $db keep 36500 sql create database if not exists $db keep 36500
sql use $db sql use $db
......
...@@ -24,7 +24,7 @@ $mt = $mtPrefix . $i ...@@ -24,7 +24,7 @@ $mt = $mtPrefix . $i
$tstart = 100000 $tstart = 100000
sql drop database if exits $db -x step1 sql drop database if exists $db -x step1
step1: step1:
sql create database if not exists $db keep 36500 sql create database if not exists $db keep 36500
sql use $db sql use $db
......
...@@ -22,7 +22,7 @@ $mt = $mtPrefix . $i ...@@ -22,7 +22,7 @@ $mt = $mtPrefix . $i
$tstart = 100000 $tstart = 100000
sql drop database if exits $db -x step1 sql drop database if exists $db -x step1
step1: step1:
sql create database if not exists $db keep 36500 sql create database if not exists $db keep 36500
sql use $db sql use $db
......
...@@ -21,7 +21,7 @@ $mt = $mtPrefix . $i ...@@ -21,7 +21,7 @@ $mt = $mtPrefix . $i
$tstart = 100000 $tstart = 100000
sql drop database if exits $db -x step1 sql drop database if exists $db -x step1
step1: step1:
sql create database if not exists $db keep 36500 sql create database if not exists $db keep 36500
sql use $db sql use $db
......
...@@ -26,7 +26,7 @@ $i = 0 ...@@ -26,7 +26,7 @@ $i = 0
$db = $dbPrefix . $i $db = $dbPrefix . $i
$mt = $mtPrefix . $i $mt = $mtPrefix . $i
sql drop database if exits $db -x step1 sql drop database if exists $db -x step1
step1: step1:
sql create database if not exists $db maxtables 4 keep 36500 sql create database if not exists $db maxtables 4 keep 36500
sql use $db sql use $db
......
sleep 2000 #sleep 2000
run general/parser/alter.sim #run general/parser/alter.sim
sleep 2000 #sleep 2000
run general/parser/alter1.sim #run general/parser/alter1.sim
sleep 2000 #sleep 2000
run general/parser/alter_stable.sim #run general/parser/alter_stable.sim
sleep 2000 #sleep 2000
run general/parser/auto_create_tb.sim #run general/parser/auto_create_tb.sim
sleep 2000 #sleep 2000
run general/parser/auto_create_tb_drop_tb.sim #run general/parser/auto_create_tb_drop_tb.sim
sleep 2000 #sleep 2000
run general/parser/col_arithmetic_operation.sim #run general/parser/col_arithmetic_operation.sim
sleep 2000 #sleep 2000
run general/parser/columnValue.sim #run general/parser/columnValue.sim
sleep 2000 #sleep 2000
run general/parser/commit.sim #run general/parser/commit.sim
sleep 2000 #sleep 2000
run general/parser/create_db.sim #run general/parser/create_db.sim
sleep 2000 #sleep 2000
run general/parser/create_mt.sim #run general/parser/create_mt.sim
sleep 2000 #sleep 2000
run general/parser/create_tb.sim #run general/parser/create_tb.sim
sleep 2000 #sleep 2000
run general/parser/dbtbnameValidate.sim #run general/parser/dbtbnameValidate.sim
sleep 2000 #sleep 2000
run general/parser/fill.sim #run general/parser/fill.sim
sleep 2000 #sleep 2000
run general/parser/fill_stb.sim #run general/parser/fill_stb.sim
sleep 2000 #sleep 2000
#run general/parser/fill_us.sim # ##run general/parser/fill_us.sim #
sleep 2000 #sleep 2000
run general/parser/first_last.sim #run general/parser/first_last.sim
sleep 2000 #sleep 2000
run general/parser/import_commit1.sim #run general/parser/import_commit1.sim
sleep 2000 #sleep 2000
run general/parser/import_commit2.sim #run general/parser/import_commit2.sim
sleep 2000 #sleep 2000
run general/parser/import_commit3.sim #run general/parser/import_commit3.sim
sleep 2000 #sleep 2000
#run general/parser/import_file.sim ##run general/parser/import_file.sim
sleep 2000 #sleep 2000
run general/parser/insert_tb.sim #run general/parser/insert_tb.sim
sleep 2000 #sleep 2000
run general/parser/tags_dynamically_specifiy.sim #run general/parser/tags_dynamically_specifiy.sim
sleep 2000 #sleep 2000
run general/parser/interp.sim #run general/parser/interp.sim
sleep 2000 #sleep 2000
run general/parser/lastrow.sim #run general/parser/lastrow.sim
sleep 2000 sleep 2000
run general/parser/limit.sim run general/parser/limit.sim
sleep 2000 sleep 2000
......
...@@ -27,7 +27,7 @@ $j = 1 ...@@ -27,7 +27,7 @@ $j = 1
$mt1 = $mtPrefix . $j $mt1 = $mtPrefix . $j
sql drop database if exits $db -x step1 sql drop database if exists $db -x step1
step1: step1:
sql create database if not exists $db sql create database if not exists $db
sql use $db sql use $db
......
...@@ -20,7 +20,7 @@ $i = 0 ...@@ -20,7 +20,7 @@ $i = 0
$db = $dbPrefix . $i $db = $dbPrefix . $i
$mt = $mtPrefix . $i $mt = $mtPrefix . $i
sql drop database if exits $db -x step1 sql drop database if exists $db -x step1
step1: step1:
sql create database if not exists $db sql create database if not exists $db
sql use $db sql use $db
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册