You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-08-07 03:22:57 +03:00
1. Execution plan now sets limitNum and limitOffset for all cases if an explicit limit is supplied in the query.
2. Fallback to using sql_select_limit system variable value if an explicit limit is not supplied. 3. Remove checks that did not allow (2^64 - 1) as a valid limit value.
This commit is contained in:
@@ -767,10 +767,6 @@ int doFromSubquery(CalpontExecutionPlan* ep, const string& alias, const string&
|
|||||||
|
|
||||||
void addOrderByAndLimit(CalpontSelectExecutionPlan* csep, JobInfo& jobInfo)
|
void addOrderByAndLimit(CalpontSelectExecutionPlan* csep, JobInfo& jobInfo)
|
||||||
{
|
{
|
||||||
// make sure there is a LIMIT
|
|
||||||
if (csep->orderByCols().size() > 0 && csep->limitNum() == (uint64_t) - 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
jobInfo.limitStart = csep->limitStart();
|
jobInfo.limitStart = csep->limitStart();
|
||||||
jobInfo.limitCount = csep->limitNum();
|
jobInfo.limitCount = csep->limitNum();
|
||||||
|
|
||||||
|
@@ -1711,9 +1711,6 @@ void parseExecutionPlan(CalpontSelectExecutionPlan* csep, JobInfo& jobInfo,
|
|||||||
// v-table mode
|
// v-table mode
|
||||||
void makeVtableModeSteps(CalpontSelectExecutionPlan* csep, JobInfo& jobInfo,
|
void makeVtableModeSteps(CalpontSelectExecutionPlan* csep, JobInfo& jobInfo,
|
||||||
JobStepVector& querySteps, JobStepVector& projectSteps, DeliveredTableMap& deliverySteps)
|
JobStepVector& querySteps, JobStepVector& projectSteps, DeliveredTableMap& deliverySteps)
|
||||||
{
|
|
||||||
// @bug4848, enhance and unify limit handling.
|
|
||||||
if (csep->limitNum() != (uint64_t) - 1)
|
|
||||||
{
|
{
|
||||||
// special case for outer query order by limit -- return all
|
// special case for outer query order by limit -- return all
|
||||||
if (jobInfo.subId == 0 && csep->hasOrderBy() && !csep->specHandlerProcessed())
|
if (jobInfo.subId == 0 && csep->hasOrderBy() && !csep->specHandlerProcessed())
|
||||||
@@ -1735,8 +1732,6 @@ void makeVtableModeSteps(CalpontSelectExecutionPlan* csep, JobInfo& jobInfo,
|
|||||||
jobInfo.limitCount = csep->limitNum();
|
jobInfo.limitCount = csep->limitNum();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bug 2123. Added overrideLargeSideEstimate parm below. True if the query was written
|
// Bug 2123. Added overrideLargeSideEstimate parm below. True if the query was written
|
||||||
// with a hint telling us to skip the estimatation process for determining the large side
|
// with a hint telling us to skip the estimatation process for determining the large side
|
||||||
// table and instead use the table order in the from clause.
|
// table and instead use the table order in the from clause.
|
||||||
|
@@ -7842,26 +7842,13 @@ int getSelectPlan(gp_walk_info& gwi, SELECT_LEX& select_lex,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// relate to bug4848. let mysql drive limit when limit session variable set.
|
|
||||||
// do not set in csep. @bug5096. ignore session limit setting for dml
|
|
||||||
if (gwi.thd->variables.select_limit == (uint64_t) - 1 &&
|
|
||||||
!csep->hasOrderBy())
|
|
||||||
{
|
|
||||||
csep->limitStart(limitOffset);
|
csep->limitStart(limitOffset);
|
||||||
csep->limitNum(limitNum);
|
csep->limitNum(limitNum);
|
||||||
}
|
}
|
||||||
// Pushdown queries w ORDER BY and LIMIT
|
// If an explicit limit is not specified, use the system variable value
|
||||||
else if (isPushdownHand && csep->hasOrderBy())
|
else
|
||||||
{
|
{
|
||||||
csep->limitStart(limitOffset);
|
csep->limitNum(gwi.thd->variables.select_limit);
|
||||||
csep->limitNum(limitNum);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Pushdown queries with ORDER BY w/o explicit limit
|
|
||||||
else if (isPushdownHand && csep->hasOrderBy())
|
|
||||||
{
|
|
||||||
// We must set this to activate LimitedOrderBy in ExeMgr
|
|
||||||
csep->limitNum((uint64_t) - 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// We don't currently support limit with correlated subquery
|
// We don't currently support limit with correlated subquery
|
||||||
|
Reference in New Issue
Block a user