Merge pull request #25242 from taosdata/feat/ly_query
adj last function
This commit is contained in:
commit
34a943a1f2
|
@ -158,6 +158,7 @@ extern int32_t tsMetaCacheMaxSize;
|
||||||
extern int32_t tsSlowLogThreshold;
|
extern int32_t tsSlowLogThreshold;
|
||||||
extern int32_t tsSlowLogScope;
|
extern int32_t tsSlowLogScope;
|
||||||
extern int32_t tsTimeSeriesThreshold;
|
extern int32_t tsTimeSeriesThreshold;
|
||||||
|
extern bool tsMultiResultFunctionStarReturnTags;
|
||||||
|
|
||||||
// client
|
// client
|
||||||
extern int32_t tsMinSlidingTime;
|
extern int32_t tsMinSlidingTime;
|
||||||
|
|
|
@ -171,6 +171,7 @@ int32_t tsMetaCacheMaxSize = -1; // MB
|
||||||
int32_t tsSlowLogThreshold = 3; // seconds
|
int32_t tsSlowLogThreshold = 3; // seconds
|
||||||
int32_t tsSlowLogScope = SLOW_LOG_TYPE_ALL;
|
int32_t tsSlowLogScope = SLOW_LOG_TYPE_ALL;
|
||||||
int32_t tsTimeSeriesThreshold = 50;
|
int32_t tsTimeSeriesThreshold = 50;
|
||||||
|
bool tsMultiResultFunctionStarReturnTags = false;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* denote if the server needs to compress response message at the application layer to client, including query rsp,
|
* denote if the server needs to compress response message at the application layer to client, including query rsp,
|
||||||
|
@ -550,6 +551,8 @@ static int32_t taosAddClientCfg(SConfig *pCfg) {
|
||||||
|
|
||||||
if (cfgAddBool(pCfg, "monitor", tsEnableMonitor, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1;
|
if (cfgAddBool(pCfg, "monitor", tsEnableMonitor, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 200000, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
if (cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 200000, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1;
|
||||||
|
|
||||||
|
if (cfgAddBool(pCfg, "multiResultFunctionStarReturnTags", tsMultiResultFunctionStarReturnTags, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1117,6 +1120,8 @@ static int32_t taosSetClientCfg(SConfig *pCfg) {
|
||||||
tsKeepAliveIdle = cfgGetItem(pCfg, "keepAliveIdle")->i32;
|
tsKeepAliveIdle = cfgGetItem(pCfg, "keepAliveIdle")->i32;
|
||||||
|
|
||||||
tsExperimental = cfgGetItem(pCfg, "experimental")->bval;
|
tsExperimental = cfgGetItem(pCfg, "experimental")->bval;
|
||||||
|
|
||||||
|
tsMultiResultFunctionStarReturnTags = cfgGetItem(pCfg, "multiResultFunctionStarReturnTags")->bval;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1760,7 +1765,8 @@ static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, char *name) {
|
||||||
{"shellActivityTimer", &tsShellActivityTimer},
|
{"shellActivityTimer", &tsShellActivityTimer},
|
||||||
{"slowLogThreshold", &tsSlowLogThreshold},
|
{"slowLogThreshold", &tsSlowLogThreshold},
|
||||||
{"useAdapter", &tsUseAdapter},
|
{"useAdapter", &tsUseAdapter},
|
||||||
{"experimental", &tsExperimental}};
|
{"experimental", &tsExperimental},
|
||||||
|
{"multiResultFunctionStarReturnTags", &tsMultiResultFunctionStarReturnTags} };
|
||||||
|
|
||||||
if (taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true) != 0) {
|
if (taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true) != 0) {
|
||||||
taosCfgSetOption(options, tListLen(options), pItem, false);
|
taosCfgSetOption(options, tListLen(options), pItem, false);
|
||||||
|
|
|
@ -3442,9 +3442,9 @@ static int32_t createMultiResFuncsParas(STranslateContext* pCxt, SNodeList* pSrc
|
||||||
SNode* pPara = NULL;
|
SNode* pPara = NULL;
|
||||||
FOREACH(pPara, pSrcParas) {
|
FOREACH(pPara, pSrcParas) {
|
||||||
if (nodesIsStar(pPara)) {
|
if (nodesIsStar(pPara)) {
|
||||||
code = createAllColumns(pCxt, true, &pExprs);
|
code = createAllColumns(pCxt, !tsMultiResultFunctionStarReturnTags, &pExprs);
|
||||||
} else if (nodesIsTableStar(pPara)) {
|
} else if (nodesIsTableStar(pPara)) {
|
||||||
code = createTableAllCols(pCxt, (SColumnNode*)pPara, true, &pExprs);
|
code = createTableAllCols(pCxt, (SColumnNode*)pPara, !tsMultiResultFunctionStarReturnTags, &pExprs);
|
||||||
} else {
|
} else {
|
||||||
code = nodesListMakeStrictAppend(&pExprs, nodesCloneNode(pPara));
|
code = nodesListMakeStrictAppend(&pExprs, nodesCloneNode(pPara));
|
||||||
}
|
}
|
||||||
|
|
|
@ -2689,7 +2689,8 @@ static bool isNeedSplitCacheLastFunc(SFunctionNode* pFunc, SScanLogicNode* pScan
|
||||||
int32_t funcType = pFunc->funcType;
|
int32_t funcType = pFunc->funcType;
|
||||||
if ((FUNCTION_TYPE_LAST_ROW != funcType || (FUNCTION_TYPE_LAST_ROW == funcType && TSDB_CACHE_MODEL_LAST_VALUE == pScan->cacheLastMode)) &&
|
if ((FUNCTION_TYPE_LAST_ROW != funcType || (FUNCTION_TYPE_LAST_ROW == funcType && TSDB_CACHE_MODEL_LAST_VALUE == pScan->cacheLastMode)) &&
|
||||||
(FUNCTION_TYPE_LAST != funcType || (FUNCTION_TYPE_LAST == funcType && (TSDB_CACHE_MODEL_LAST_ROW == pScan->cacheLastMode ||
|
(FUNCTION_TYPE_LAST != funcType || (FUNCTION_TYPE_LAST == funcType && (TSDB_CACHE_MODEL_LAST_ROW == pScan->cacheLastMode ||
|
||||||
QUERY_NODE_OPERATOR == nodeType(nodesListGetNode(pFunc->pParameterList, 0)) || QUERY_NODE_VALUE == nodeType(nodesListGetNode(pFunc->pParameterList, 0))))) &&
|
QUERY_NODE_OPERATOR == nodeType(nodesListGetNode(pFunc->pParameterList, 0)) || QUERY_NODE_VALUE == nodeType(nodesListGetNode(pFunc->pParameterList, 0)) ||
|
||||||
|
COLUMN_TYPE_COLUMN != ((SColumnNode*)nodesListGetNode(pFunc->pParameterList, 0))->colType))) &&
|
||||||
FUNCTION_TYPE_SELECT_VALUE != funcType && FUNCTION_TYPE_GROUP_KEY != funcType) {
|
FUNCTION_TYPE_SELECT_VALUE != funcType && FUNCTION_TYPE_GROUP_KEY != funcType) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2709,8 +2710,9 @@ static bool lastRowScanOptCheckFuncList(SLogicNode* pNode, int8_t cacheLastModel
|
||||||
if (FUNCTION_TYPE_LAST == pAggFunc->funcType) {
|
if (FUNCTION_TYPE_LAST == pAggFunc->funcType) {
|
||||||
if (QUERY_NODE_COLUMN == nodeType(pParam)) {
|
if (QUERY_NODE_COLUMN == nodeType(pParam)) {
|
||||||
SColumnNode* pCol = (SColumnNode*)pParam;
|
SColumnNode* pCol = (SColumnNode*)pParam;
|
||||||
if (pCol->colType != COLUMN_TYPE_COLUMN) {
|
if (pCol->colType != COLUMN_TYPE_COLUMN && TSDB_CACHE_MODEL_LAST_ROW != cacheLastModel) {
|
||||||
return false;
|
needSplitFuncCount++;
|
||||||
|
*hasOtherFunc = true;
|
||||||
}
|
}
|
||||||
if (lastColId != pCol->colId) {
|
if (lastColId != pCol->colId) {
|
||||||
lastColId = pCol->colId;
|
lastColId = pCol->colId;
|
||||||
|
@ -2991,6 +2993,13 @@ static int32_t lastRowScanOptimize(SOptimizeContext* pCxt, SLogicSubplan* pLogic
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
FOREACH(pColNode, pScan->pScanPseudoCols) {
|
||||||
|
if (nodesEqualNode(pParamNode, pColNode)) {
|
||||||
|
if (funcType != FUNCTION_TYPE_LAST) {
|
||||||
|
nodesListMakeAppend(&pLastRowCols, nodesCloneNode(pColNode));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3129,6 +3138,10 @@ static int32_t splitCacheLastFuncOptCreateAggLogicNode(SAggLogicNode** pNewAgg,
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
code = nodesCollectColumnsFromNode((SNode*)list, NULL, COLLECT_COL_TYPE_TAG, &pScan->pScanPseudoCols);
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
nodesFree(list);
|
nodesFree(list);
|
||||||
bool found = false;
|
bool found = false;
|
||||||
FOREACH(pNode, pScan->pScanCols) {
|
FOREACH(pNode, pScan->pScanCols) {
|
||||||
|
@ -3150,6 +3163,10 @@ static int32_t splitCacheLastFuncOptCreateAggLogicNode(SAggLogicNode** pNewAgg,
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
code = createColumnByRewriteExprs(pScan->pScanPseudoCols, &pScan->node.pTargets);
|
||||||
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
OPTIMIZE_FLAG_CLEAR_MASK(pScan->node.optimizedFlag, OPTIMIZE_FLAG_SCAN_PATH);
|
OPTIMIZE_FLAG_CLEAR_MASK(pScan->node.optimizedFlag, OPTIMIZE_FLAG_SCAN_PATH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,189 @@
|
||||||
|
system sh/stop_dnodes.sh
|
||||||
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
sql connect
|
||||||
|
|
||||||
|
sql alter local "multiResultFunctionStarReturnTags" "0";
|
||||||
|
|
||||||
|
print step1=====================
|
||||||
|
sql drop database if exists test;
|
||||||
|
sql create database test vgroups 4 CACHEMODEL 'both';
|
||||||
|
sql use test;
|
||||||
|
sql create stable st(ts timestamp,a int,b int,c int) tags(ta int,tb int,tc int);
|
||||||
|
sql create table t1 using st tags(1,1,1);
|
||||||
|
sql create table t2 using st tags(2,2,2);
|
||||||
|
sql create table t3 using st tags(3,3,3);
|
||||||
|
sql create table t4 using st tags(NULL,4,4);
|
||||||
|
|
||||||
|
sql insert into t1 values(1648791211000,1,1,1);
|
||||||
|
sql insert into t1 values(1648791211001,2,2,2);
|
||||||
|
sql insert into t2 values(1648791211002,3,3,3);
|
||||||
|
sql insert into t2 values(1648791211003,4,4,4);
|
||||||
|
sql insert into t3 values(1648791211004,5,5,5);
|
||||||
|
sql insert into t3 values(1648791211005,6,6,6);
|
||||||
|
sql insert into t4 values(1648791211007,NULL,NULL,NULL);
|
||||||
|
|
||||||
|
sql select last(*),last_row(*) from st;
|
||||||
|
|
||||||
|
if $cols != 8 then
|
||||||
|
print ======cols=$cols
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql alter local "multiResultFunctionStarReturnTags" "1";
|
||||||
|
|
||||||
|
sql select last(*),last_row(*) from st;
|
||||||
|
|
||||||
|
if $cols != 14 then
|
||||||
|
print ======cols=$cols
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select last(*) from st;
|
||||||
|
|
||||||
|
if $cols != 7 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select last_row(*) from st;
|
||||||
|
|
||||||
|
if $cols != 7 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select last(*),last_row(*) from t1;
|
||||||
|
|
||||||
|
if $cols != 8 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print step2=====================
|
||||||
|
|
||||||
|
sql drop database if exists test1;
|
||||||
|
sql create database test1 vgroups 4 CACHEMODEL 'last_row';
|
||||||
|
sql use test1;
|
||||||
|
sql create stable st(ts timestamp,a int,b int,c int) tags(ta int,tb int,tc int);
|
||||||
|
sql create table t1 using st tags(1,1,1);
|
||||||
|
sql create table t2 using st tags(2,2,2);
|
||||||
|
sql create table t3 using st tags(3,3,3);
|
||||||
|
sql create table t4 using st tags(NULL,4,4);
|
||||||
|
|
||||||
|
sql insert into t1 values(1648791211000,1,1,1);
|
||||||
|
sql insert into t1 values(1648791211001,2,2,2);
|
||||||
|
sql insert into t2 values(1648791211002,3,3,3);
|
||||||
|
sql insert into t2 values(1648791211003,4,4,4);
|
||||||
|
sql insert into t3 values(1648791211004,5,5,5);
|
||||||
|
sql insert into t3 values(1648791211005,6,6,6);
|
||||||
|
sql insert into t4 values(1648791211007,NULL,NULL,NULL);
|
||||||
|
|
||||||
|
sql select last(*),last_row(*) from st;
|
||||||
|
|
||||||
|
if $cols != 14 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select last(*) from st;
|
||||||
|
|
||||||
|
if $cols != 7 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
return -1
|
||||||
|
|
||||||
|
sql select last_row(*) from st;
|
||||||
|
|
||||||
|
if $cols != 7 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select last(*),last_row(*) from t1;
|
||||||
|
|
||||||
|
if $cols != 8 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print step3=====================
|
||||||
|
|
||||||
|
sql drop database if exists test2;
|
||||||
|
sql create database test2 vgroups 4 CACHEMODEL 'last_value';
|
||||||
|
sql use test2;
|
||||||
|
sql create stable st(ts timestamp,a int,b int,c int) tags(ta int,tb int,tc int);
|
||||||
|
sql create table t1 using st tags(1,1,1);
|
||||||
|
sql create table t2 using st tags(2,2,2);
|
||||||
|
sql create table t3 using st tags(3,3,3);
|
||||||
|
sql create table t4 using st tags(NULL,4,4);
|
||||||
|
|
||||||
|
sql insert into t1 values(1648791211000,1,1,1);
|
||||||
|
sql insert into t1 values(1648791211001,2,2,2);
|
||||||
|
sql insert into t2 values(1648791211002,3,3,3);
|
||||||
|
sql insert into t2 values(1648791211003,4,4,4);
|
||||||
|
sql insert into t3 values(1648791211004,5,5,5);
|
||||||
|
sql insert into t3 values(1648791211005,6,6,6);
|
||||||
|
sql insert into t4 values(1648791211007,NULL,NULL,NULL);
|
||||||
|
|
||||||
|
sql select last(*),last_row(*) from st;
|
||||||
|
|
||||||
|
if $cols != 14 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select last(*) from st;
|
||||||
|
|
||||||
|
if $cols != 7 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select last_row(*) from st;
|
||||||
|
|
||||||
|
if $cols != 7 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select last(*),last_row(*) from t1;
|
||||||
|
|
||||||
|
if $cols != 8 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql drop database if exists test4;
|
||||||
|
sql create database test4 vgroups 4;
|
||||||
|
sql use test4;
|
||||||
|
sql create stable st(ts timestamp,a int,b int,c int) tags(ta int,tb int,tc int);
|
||||||
|
sql create table t1 using st tags(1,1,1);
|
||||||
|
sql create table t2 using st tags(2,2,2);
|
||||||
|
sql create table t3 using st tags(3,3,3);
|
||||||
|
sql create table t4 using st tags(NULL,4,4);
|
||||||
|
|
||||||
|
sql insert into t1 values(1648791211000,1,1,1);
|
||||||
|
sql insert into t1 values(1648791211001,2,2,2);
|
||||||
|
sql insert into t2 values(1648791211002,3,3,3);
|
||||||
|
sql insert into t2 values(1648791211003,4,4,4);
|
||||||
|
sql insert into t3 values(1648791211004,5,5,5);
|
||||||
|
sql insert into t3 values(1648791211005,6,6,6);
|
||||||
|
sql insert into t4 values(1648791211007,NULL,NULL,NULL);
|
||||||
|
|
||||||
|
sql select last(*),last_row(*) from st;
|
||||||
|
|
||||||
|
if $cols != 14 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select last(*) from st;
|
||||||
|
|
||||||
|
if $cols != 7 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select last_row(*) from st;
|
||||||
|
|
||||||
|
if $cols != 7 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select last(*),last_row(*) from t1;
|
||||||
|
|
||||||
|
if $cols != 8 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
Loading…
Reference in New Issue