feat: support partition by expression and aggregate function output together
This commit is contained in:
parent
fb1e845256
commit
e187f42902
|
@ -1369,6 +1369,7 @@ static EDealRes rewriteExprToGroupKeyFunc(STranslateContext* pCxt, SNode** pNode
|
||||||
*pNode = (SNode*)pFunc;
|
*pNode = (SNode*)pFunc;
|
||||||
pCxt->errCode = fmGetFuncInfo(pFunc, pCxt->msgBuf.buf, pCxt->msgBuf.len);
|
pCxt->errCode = fmGetFuncInfo(pFunc, pCxt->msgBuf.buf, pCxt->msgBuf.len);
|
||||||
}
|
}
|
||||||
|
pCxt->pCurrSelectStmt->hasAggFuncs = true;
|
||||||
|
|
||||||
return (TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_IGNORE_CHILD : DEAL_RES_ERROR);
|
return (TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_IGNORE_CHILD : DEAL_RES_ERROR);
|
||||||
}
|
}
|
||||||
|
@ -2506,8 +2507,24 @@ static SNode* createOrderByExpr(STranslateContext* pCxt) {
|
||||||
return (SNode*)pOrder;
|
return (SNode*)pOrder;
|
||||||
}
|
}
|
||||||
|
|
||||||
// from: select tail(expr, k, f) from t where_clause partition_by_clause order_by_clause ...
|
/* case 1:
|
||||||
// to: select expr from t where_clause order by _rowts desc limit k offset f
|
* in: select tail(expr, k, f) from t where_clause
|
||||||
|
* out: select expr from t where_clause order by _rowts desc limit k offset f
|
||||||
|
*
|
||||||
|
* case 2:
|
||||||
|
* in: select tail(expr, k, f) from t where_clause partition_by_clause
|
||||||
|
* out: select expr from t where_clause partition_by_clause sort by _rowts desc limit k offset f
|
||||||
|
*
|
||||||
|
* case 3:
|
||||||
|
* in: select tail(expr, k, f) from t where_clause order_by_clause limit_clause
|
||||||
|
* out: select expr from (
|
||||||
|
* select expr from t where_clause order by _rowts desc limit k offset f
|
||||||
|
* ) order_by_clause limit_clause
|
||||||
|
*
|
||||||
|
* case 4:
|
||||||
|
* in: select tail(expr, k, f) from t where_clause partition_by_clause limit_clause
|
||||||
|
* out:
|
||||||
|
*/
|
||||||
static int32_t rewriteTailStmt(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
static int32_t rewriteTailStmt(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
||||||
if (!pSelect->hasTailFunc) {
|
if (!pSelect->hasTailFunc) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
|
|
@ -1189,7 +1189,7 @@ static const SOptimizeRule optimizeRuleSet[] = {
|
||||||
{.pName = "ConditionPushDown", .optimizeFunc = cpdOptimize},
|
{.pName = "ConditionPushDown", .optimizeFunc = cpdOptimize},
|
||||||
{.pName = "OrderByPrimaryKey", .optimizeFunc = opkOptimize},
|
{.pName = "OrderByPrimaryKey", .optimizeFunc = opkOptimize},
|
||||||
{.pName = "SmaIndex", .optimizeFunc = smaOptimize},
|
{.pName = "SmaIndex", .optimizeFunc = smaOptimize},
|
||||||
// {.pName = "PartitionTags", .optimizeFunc = partTagsOptimize},
|
{.pName = "PartitionTags", .optimizeFunc = partTagsOptimize},
|
||||||
{.pName = "EliminateProject", .optimizeFunc = eliminateProjOptimize}
|
{.pName = "EliminateProject", .optimizeFunc = eliminateProjOptimize}
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
|
@ -53,14 +53,6 @@ TEST_F(PlanGroupByTest, aggFunc) {
|
||||||
run("SELECT SUM(10), COUNT(c1) FROM t1 GROUP BY c2");
|
run("SELECT SUM(10), COUNT(c1) FROM t1 GROUP BY c2");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(PlanGroupByTest, rewriteFunc) {
|
|
||||||
useDb("root", "test");
|
|
||||||
|
|
||||||
run("SELECT AVG(c1) FROM t1");
|
|
||||||
|
|
||||||
run("SELECT AVG(c1) FROM t1 GROUP BY c2");
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(PlanGroupByTest, selectFunc) {
|
TEST_F(PlanGroupByTest, selectFunc) {
|
||||||
useDb("root", "test");
|
useDb("root", "test");
|
||||||
|
|
||||||
|
@ -81,6 +73,8 @@ TEST_F(PlanGroupByTest, stable) {
|
||||||
|
|
||||||
run("SELECT COUNT(*) FROM st1");
|
run("SELECT COUNT(*) FROM st1");
|
||||||
|
|
||||||
|
run("SELECT c1 FROM st1 GROUP BY c1");
|
||||||
|
|
||||||
run("SELECT COUNT(*) FROM st1 GROUP BY c1");
|
run("SELECT COUNT(*) FROM st1 GROUP BY c1");
|
||||||
|
|
||||||
run("SELECT COUNT(*) FROM st1 PARTITION BY c2 GROUP BY c1");
|
run("SELECT COUNT(*) FROM st1 PARTITION BY c2 GROUP BY c1");
|
||||||
|
|
Loading…
Reference in New Issue