Unverified 提交 a306265c authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov 提交者: GitHub

Merge pull request #1452 from katzyn/aggregate

Reset aggregates before reuse
...@@ -276,9 +276,9 @@ public abstract class Query extends Prepared { ...@@ -276,9 +276,9 @@ public abstract class Query extends Prepared {
* Update all aggregate function values. * Update all aggregate function values.
* *
* @param s the session * @param s the session
* @param window true for window processing stage, false for group stage * @param stage select stage
*/ */
public abstract void updateAggregate(Session s, boolean window); public abstract void updateAggregate(Session s, int stage);
/** /**
* Call the before triggers on all tables. * Call the before triggers on all tables.
......
...@@ -24,6 +24,7 @@ import org.h2.expression.ExpressionColumn; ...@@ -24,6 +24,7 @@ import org.h2.expression.ExpressionColumn;
import org.h2.expression.ExpressionVisitor; import org.h2.expression.ExpressionVisitor;
import org.h2.expression.Parameter; import org.h2.expression.Parameter;
import org.h2.expression.Wildcard; import org.h2.expression.Wildcard;
import org.h2.expression.aggregate.Aggregate;
import org.h2.index.Cursor; import org.h2.index.Cursor;
import org.h2.index.Index; import org.h2.index.Index;
import org.h2.index.IndexType; import org.h2.index.IndexType;
...@@ -358,18 +359,9 @@ public class Select extends Query { ...@@ -358,18 +359,9 @@ public class Select extends Query {
} }
private void queryWindow(int columnCount, LocalResult result, long offset, boolean quickOffset) { private void queryWindow(int columnCount, LocalResult result, long offset, boolean quickOffset) {
if (isGroupQuery) { initGroupData(columnCount);
queryGroupWindow(columnCount, result, offset, quickOffset);
return;
}
if (groupData == null) {
groupData = SelectGroups.getInstance(session, expressions, isGroupQuery, groupIndex);
}
groupData.reset();
groupData.resetCounter();
try { try {
gatherGroup(columnCount, true); gatherGroup(columnCount, Aggregate.STAGE_WINDOW);
groupData.resetCounter();
processGroupResult(columnCount, result, offset, quickOffset); processGroupResult(columnCount, result, offset, quickOffset);
} finally { } finally {
groupData.reset(); groupData.reset();
...@@ -377,19 +369,13 @@ public class Select extends Query { ...@@ -377,19 +369,13 @@ public class Select extends Query {
} }
private void queryGroupWindow(int columnCount, LocalResult result, long offset, boolean quickOffset) { private void queryGroupWindow(int columnCount, LocalResult result, long offset, boolean quickOffset) {
if (groupData == null) { initGroupData(columnCount);
groupData = SelectGroups.getInstance(session, expressions, isGroupQuery, groupIndex);
}
groupData.reset();
groupData.resetCounter();
try { try {
gatherGroup(columnCount, false); gatherGroup(columnCount, Aggregate.STAGE_GROUP);
groupData.resetCounter();
while (groupData.next() != null) { while (groupData.next() != null) {
updateAgg(columnCount, true); updateAgg(columnCount, Aggregate.STAGE_WINDOW);
} }
groupData.done(); groupData.done();
groupData.resetCounter();
try { try {
isGroupWindowStage2 = true; isGroupWindowStage2 = true;
processGroupResult(columnCount, result, offset, quickOffset); processGroupResult(columnCount, result, offset, quickOffset);
...@@ -402,19 +388,25 @@ public class Select extends Query { ...@@ -402,19 +388,25 @@ public class Select extends Query {
} }
private void queryGroup(int columnCount, LocalResult result, long offset, boolean quickOffset) { private void queryGroup(int columnCount, LocalResult result, long offset, boolean quickOffset) {
if (groupData == null) { initGroupData(columnCount);
groupData = SelectGroups.getInstance(session, expressions, isGroupQuery, groupIndex);
}
groupData.reset();
try { try {
gatherGroup(columnCount, false); gatherGroup(columnCount, Aggregate.STAGE_GROUP);
processGroupResult(columnCount, result, offset, quickOffset); processGroupResult(columnCount, result, offset, quickOffset);
} finally { } finally {
groupData.reset(); groupData.reset();
} }
} }
private void gatherGroup(int columnCount, boolean window) { private void initGroupData(int columnCount) {
if (groupData == null) {
groupData = SelectGroups.getInstance(session, expressions, isGroupQuery, groupIndex);
} else {
updateAgg(columnCount, Aggregate.STAGE_RESET);
}
groupData.reset();
}
private void gatherGroup(int columnCount, int stage) {
int rowNumber = 0; int rowNumber = 0;
setCurrentRowNumber(0); setCurrentRowNumber(0);
int sampleSize = getSampleSizeValue(session); int sampleSize = getSampleSizeValue(session);
...@@ -423,7 +415,7 @@ public class Select extends Query { ...@@ -423,7 +415,7 @@ public class Select extends Query {
if (isConditionMet()) { if (isConditionMet()) {
rowNumber++; rowNumber++;
groupData.nextSource(); groupData.nextSource();
updateAgg(columnCount, window); updateAgg(columnCount, stage);
if (sampleSize > 0 && rowNumber >= sampleSize) { if (sampleSize > 0 && rowNumber >= sampleSize) {
break; break;
} }
...@@ -432,11 +424,11 @@ public class Select extends Query { ...@@ -432,11 +424,11 @@ public class Select extends Query {
groupData.done(); groupData.done();
} }
private void updateAgg(int columnCount, boolean window) { void updateAgg(int columnCount, int stage) {
for (int i = 0; i < columnCount; i++) { for (int i = 0; i < columnCount; i++) {
if (groupByExpression == null || !groupByExpression[i]) { if (groupByExpression == null || !groupByExpression[i]) {
Expression expr = expressions.get(i); Expression expr = expressions.get(i);
expr.updateAggregate(session, window); expr.updateAggregate(session, stage);
} }
} }
} }
...@@ -1529,15 +1521,15 @@ public class Select extends Query { ...@@ -1529,15 +1521,15 @@ public class Select extends Query {
} }
@Override @Override
public void updateAggregate(Session s, boolean window) { public void updateAggregate(Session s, int stage) {
for (Expression e : expressions) { for (Expression e : expressions) {
e.updateAggregate(s, window); e.updateAggregate(s, stage);
} }
if (condition != null) { if (condition != null) {
condition.updateAggregate(s, window); condition.updateAggregate(s, stage);
} }
if (having != null) { if (having != null) {
having.updateAggregate(s, window); having.updateAggregate(s, stage);
} }
} }
...@@ -1694,6 +1686,7 @@ public class Select extends Query { ...@@ -1694,6 +1686,7 @@ public class Select extends Query {
groupData = SelectGroups.getInstance(getSession(), Select.this.expressions, isGroupQuery, groupIndex); groupData = SelectGroups.getInstance(getSession(), Select.this.expressions, isGroupQuery, groupIndex);
} else { } else {
// TODO is this branch possible? // TODO is this branch possible?
updateAgg(columnCount, Aggregate.STAGE_RESET);
groupData.resetLazy(); groupData.resetLazy();
} }
} }
...@@ -1729,13 +1722,7 @@ public class Select extends Query { ...@@ -1729,13 +1722,7 @@ public class Select extends Query {
groupData.nextLazyGroup(); groupData.nextLazyGroup();
} }
groupData.nextLazyRow(); groupData.nextLazyRow();
updateAgg(columnCount, Aggregate.STAGE_GROUP);
for (int i = 0; i < columnCount; i++) {
if (groupByExpression == null || !groupByExpression[i]) {
Expression expr = expressions.get(i);
expr.updateAggregate(getSession(), false);
}
}
if (row != null) { if (row != null) {
return row; return row;
} }
......
...@@ -115,6 +115,7 @@ public abstract class SelectGroups { ...@@ -115,6 +115,7 @@ public abstract class SelectGroups {
@Override @Override
public void done() { public void done() {
super.done();
if (groupIndex == null && groupByData.size() == 0) { if (groupIndex == null && groupByData.size() == 0) {
groupByData.put(defaultGroup, groupByData.put(defaultGroup,
new Object[Math.max(exprToIndexInGroupByData.size(), expressions.size())]); new Object[Math.max(exprToIndexInGroupByData.size(), expressions.size())]);
...@@ -175,6 +176,7 @@ public abstract class SelectGroups { ...@@ -175,6 +176,7 @@ public abstract class SelectGroups {
@Override @Override
public void done() { public void done() {
super.done();
cursor = rows.iterator(); cursor = rows.iterator();
} }
...@@ -314,13 +316,6 @@ public abstract class SelectGroups { ...@@ -314,13 +316,6 @@ public abstract class SelectGroups {
currentGroupByExprData = null; currentGroupByExprData = null;
exprToIndexInGroupByData.clear(); exprToIndexInGroupByData.clear();
windowData.clear(); windowData.clear();
}
/**
* Reset the row id counter.
*/
public void resetCounter() {
// TODO merge into reset() and done()
currentGroupRowId = 0; currentGroupRowId = 0;
} }
...@@ -333,7 +328,9 @@ public abstract class SelectGroups { ...@@ -333,7 +328,9 @@ public abstract class SelectGroups {
/** /**
* Invoked after all source rows are evaluated. * Invoked after all source rows are evaluated.
*/ */
public abstract void done(); public void done() {
currentGroupRowId = 0;
}
/** /**
* Returns the key of the next group. * Returns the key of the next group.
...@@ -347,6 +344,7 @@ public abstract class SelectGroups { ...@@ -347,6 +344,7 @@ public abstract class SelectGroups {
*/ */
public void resetLazy() { public void resetLazy() {
currentGroupByExprData = null; currentGroupByExprData = null;
currentGroupRowId = 0;
} }
/** /**
......
...@@ -449,9 +449,9 @@ public class SelectUnion extends Query { ...@@ -449,9 +449,9 @@ public class SelectUnion extends Query {
} }
@Override @Override
public void updateAggregate(Session s, boolean window) { public void updateAggregate(Session s, int stage) {
left.updateAggregate(s, window); left.updateAggregate(s, stage);
right.updateAggregate(s, window); right.updateAggregate(s, stage);
} }
@Override @Override
......
...@@ -83,8 +83,8 @@ public class Alias extends Expression { ...@@ -83,8 +83,8 @@ public class Alias extends Expression {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
expr.updateAggregate(session, window); expr.updateAggregate(session, stage);
} }
@Override @Override
......
...@@ -436,9 +436,9 @@ public class BinaryOperation extends Expression { ...@@ -436,9 +436,9 @@ public class BinaryOperation extends Expression {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
left.updateAggregate(session, window); left.updateAggregate(session, stage);
right.updateAggregate(session, window); right.updateAggregate(session, stage);
} }
@Override @Override
......
...@@ -495,11 +495,11 @@ public class CompareLike extends Condition { ...@@ -495,11 +495,11 @@ public class CompareLike extends Condition {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
left.updateAggregate(session, window); left.updateAggregate(session, stage);
right.updateAggregate(session, window); right.updateAggregate(session, stage);
if (escape != null) { if (escape != null) {
escape.updateAggregate(session, window); escape.updateAggregate(session, stage);
} }
} }
......
...@@ -475,10 +475,10 @@ public class Comparison extends Condition { ...@@ -475,10 +475,10 @@ public class Comparison extends Condition {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
left.updateAggregate(session, window); left.updateAggregate(session, stage);
if (right != null) { if (right != null) {
right.updateAggregate(session, window); right.updateAggregate(session, stage);
} }
} }
......
...@@ -268,9 +268,9 @@ public class ConditionAndOr extends Condition { ...@@ -268,9 +268,9 @@ public class ConditionAndOr extends Condition {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
left.updateAggregate(session, window); left.updateAggregate(session, stage);
right.updateAggregate(session, window); right.updateAggregate(session, stage);
} }
@Override @Override
......
...@@ -46,7 +46,7 @@ public class ConditionExists extends Condition { ...@@ -46,7 +46,7 @@ public class ConditionExists extends Condition {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
// TODO exists: is it allowed that the subquery contains aggregates? // TODO exists: is it allowed that the subquery contains aggregates?
// probably not // probably not
// select id from test group by id having exists (select * from test2 // select id from test group by id having exists (select * from test2
......
...@@ -163,10 +163,10 @@ public class ConditionIn extends Condition { ...@@ -163,10 +163,10 @@ public class ConditionIn extends Condition {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
left.updateAggregate(session, window); left.updateAggregate(session, stage);
for (Expression e : valueList) { for (Expression e : valueList) {
e.updateAggregate(session, window); e.updateAggregate(session, stage);
} }
} }
......
...@@ -125,8 +125,8 @@ public class ConditionInConstantSet extends Condition { ...@@ -125,8 +125,8 @@ public class ConditionInConstantSet extends Condition {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
left.updateAggregate(session, window); left.updateAggregate(session, stage);
} }
@Override @Override
......
...@@ -145,8 +145,8 @@ public class ConditionInParameter extends Condition { ...@@ -145,8 +145,8 @@ public class ConditionInParameter extends Condition {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
left.updateAggregate(session, window); left.updateAggregate(session, stage);
} }
@Override @Override
......
...@@ -146,9 +146,9 @@ public class ConditionInSelect extends Condition { ...@@ -146,9 +146,9 @@ public class ConditionInSelect extends Condition {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
left.updateAggregate(session, window); left.updateAggregate(session, stage);
query.updateAggregate(session, window); query.updateAggregate(session, stage);
} }
@Override @Override
......
...@@ -70,8 +70,8 @@ public class ConditionNot extends Condition { ...@@ -70,8 +70,8 @@ public class ConditionNot extends Condition {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
condition.updateAggregate(session, window); condition.updateAggregate(session, stage);
} }
@Override @Override
......
...@@ -105,9 +105,9 @@ public abstract class Expression { ...@@ -105,9 +105,9 @@ public abstract class Expression {
* be used to make sure the internal state is only updated once. * be used to make sure the internal state is only updated once.
* *
* @param session the session * @param session the session
* @param window true for window processing stage, false for group stage * @param stage select stage
*/ */
public abstract void updateAggregate(Session session, boolean window); public abstract void updateAggregate(Session session, int stage);
/** /**
* Check if this expression and all sub-expressions can fulfill a criteria. * Check if this expression and all sub-expressions can fulfill a criteria.
......
...@@ -153,7 +153,7 @@ public class ExpressionColumn extends Expression { ...@@ -153,7 +153,7 @@ public class ExpressionColumn extends Expression {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
Value now = columnResolver.getValue(column); Value now = columnResolver.getValue(column);
Select select = columnResolver.getSelect(); Select select = columnResolver.getSelect();
if (select == null) { if (select == null) {
......
...@@ -98,9 +98,9 @@ public class ExpressionList extends Expression { ...@@ -98,9 +98,9 @@ public class ExpressionList extends Expression {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
for (Expression e : list) { for (Expression e : list) {
e.updateAggregate(session, window); e.updateAggregate(session, stage);
} }
} }
......
...@@ -2633,10 +2633,10 @@ public class Function extends Expression implements FunctionCall { ...@@ -2633,10 +2633,10 @@ public class Function extends Expression implements FunctionCall {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
for (Expression e : args) { for (Expression e : args) {
if (e != null) { if (e != null) {
e.updateAggregate(session, window); e.updateAggregate(session, stage);
} }
} }
} }
......
...@@ -291,9 +291,9 @@ public class IntervalOperation extends Expression { ...@@ -291,9 +291,9 @@ public class IntervalOperation extends Expression {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
left.updateAggregate(session, window); left.updateAggregate(session, stage);
right.updateAggregate(session, window); right.updateAggregate(session, stage);
} }
@Override @Override
......
...@@ -107,10 +107,10 @@ public class JavaFunction extends Expression implements FunctionCall { ...@@ -107,10 +107,10 @@ public class JavaFunction extends Expression implements FunctionCall {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
for (Expression e : args) { for (Expression e : args) {
if (e != null) { if (e != null) {
e.updateAggregate(session, window); e.updateAggregate(session, stage);
} }
} }
} }
......
...@@ -141,7 +141,7 @@ public class Parameter extends Expression implements ParameterInterface { ...@@ -141,7 +141,7 @@ public class Parameter extends Expression implements ParameterInterface {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
// nothing to do // nothing to do
} }
......
...@@ -73,7 +73,7 @@ public class Rownum extends Expression { ...@@ -73,7 +73,7 @@ public class Rownum extends Expression {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
// nothing to do // nothing to do
} }
......
...@@ -72,7 +72,7 @@ public class SequenceValue extends Expression { ...@@ -72,7 +72,7 @@ public class SequenceValue extends Expression {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
// nothing to do // nothing to do
} }
......
...@@ -94,8 +94,8 @@ public class Subquery extends Expression { ...@@ -94,8 +94,8 @@ public class Subquery extends Expression {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
query.updateAggregate(session, window); query.updateAggregate(session, stage);
} }
private Expression getExpression() { private Expression getExpression() {
......
...@@ -82,8 +82,8 @@ public class UnaryOperation extends Expression { ...@@ -82,8 +82,8 @@ public class UnaryOperation extends Expression {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
arg.updateAggregate(session, window); arg.updateAggregate(session, stage);
} }
@Override @Override
......
...@@ -143,7 +143,7 @@ public class ValueExpression extends Expression { ...@@ -143,7 +143,7 @@ public class ValueExpression extends Expression {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
// nothing to do // nothing to do
} }
......
...@@ -101,7 +101,7 @@ public class Variable extends Expression { ...@@ -101,7 +101,7 @@ public class Variable extends Expression {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
// nothing to do // nothing to do
} }
......
...@@ -91,7 +91,7 @@ public class Wildcard extends Expression { ...@@ -91,7 +91,7 @@ public class Wildcard extends Expression {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
DbException.throwInternalError(toString()); DbException.throwInternalError(toString());
} }
......
...@@ -110,14 +110,16 @@ public abstract class AbstractAggregate extends Expression { ...@@ -110,14 +110,16 @@ public abstract class AbstractAggregate extends Expression {
} }
@Override @Override
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
if (stage == Aggregate.STAGE_RESET) {
updateSubAggregates(session, Aggregate.STAGE_RESET);
lastGroupRowId = 0;
return;
}
boolean window = stage == Aggregate.STAGE_WINDOW;
if (window != (over != null)) { if (window != (over != null)) {
if (!window && select.isWindowQuery()) { if (!window && select.isWindowQuery()) {
updateGroupAggregates(session); updateSubAggregates(session, stage);
if (filterCondition != null) {
filterCondition.updateAggregate(session, false);
}
over.updateAggregate(session, false);
} }
return; return;
} }
...@@ -140,7 +142,7 @@ public abstract class AbstractAggregate extends Expression { ...@@ -140,7 +142,7 @@ public abstract class AbstractAggregate extends Expression {
if (over != null) { if (over != null) {
if (!select.isGroupQuery()) { if (!select.isGroupQuery()) {
over.updateAggregate(session, true); over.updateAggregate(session, stage);
} }
} }
if (filterCondition != null) { if (filterCondition != null) {
...@@ -158,6 +160,16 @@ public abstract class AbstractAggregate extends Expression { ...@@ -158,6 +160,16 @@ public abstract class AbstractAggregate extends Expression {
updateAggregate(session, getData(session, groupData, false, false)); updateAggregate(session, getData(session, groupData, false, false));
} }
private void updateSubAggregates(Session session, int stage) {
updateGroupAggregates(session, stage);
if (filterCondition != null) {
filterCondition.updateAggregate(session, stage);
}
if (over != null) {
over.updateAggregate(session, stage);
}
}
/** /**
* Updates an aggregate value. * Updates an aggregate value.
* *
...@@ -174,8 +186,10 @@ public abstract class AbstractAggregate extends Expression { ...@@ -174,8 +186,10 @@ public abstract class AbstractAggregate extends Expression {
* *
* @param session * @param session
* the session * the session
* @param stage
* select stage
*/ */
protected abstract void updateGroupAggregates(Session session); protected abstract void updateGroupAggregates(Session session, int stage);
/** /**
* Returns the number of expressions, excluding FILTER and OVER clauses. * Returns the number of expressions, excluding FILTER and OVER clauses.
......
...@@ -150,6 +150,21 @@ public class Aggregate extends AbstractAggregate { ...@@ -150,6 +150,21 @@ public class Aggregate extends AbstractAggregate {
ENVELOPE, ENVELOPE,
} }
/**
* Reset stage. Used to reset internal data to its initial state.
*/
public static final int STAGE_RESET = 0;
/**
* Group stage, used for explicit or implicit GROUP BY operation.
*/
public static final int STAGE_GROUP = 1;
/**
* Window processing stage.
*/
public static final int STAGE_WINDOW = 2;
private static final HashMap<String, AggregateType> AGGREGATES = new HashMap<>(64); private static final HashMap<String, AggregateType> AGGREGATES = new HashMap<>(64);
private final AggregateType type; private final AggregateType type;
...@@ -291,13 +306,13 @@ public class Aggregate extends AbstractAggregate { ...@@ -291,13 +306,13 @@ public class Aggregate extends AbstractAggregate {
} }
@Override @Override
protected void updateGroupAggregates(Session session) { protected void updateGroupAggregates(Session session, int stage) {
if (on != null) { if (on != null) {
on.updateAggregate(session, false); on.updateAggregate(session, stage);
} }
if (orderByList != null) { if (orderByList != null) {
for (SelectOrderBy orderBy : orderByList) { for (SelectOrderBy orderBy : orderByList) {
orderBy.expression.updateAggregate(session, false); orderBy.expression.updateAggregate(session, stage);
} }
} }
} }
......
...@@ -228,9 +228,9 @@ public class JavaAggregate extends AbstractAggregate { ...@@ -228,9 +228,9 @@ public class JavaAggregate extends AbstractAggregate {
} }
@Override @Override
protected void updateGroupAggregates(Session session) { protected void updateGroupAggregates(Session session, int stage) {
for (Expression expr : args) { for (Expression expr : args) {
expr.updateAggregate(session, false); expr.updateAggregate(session, stage);
} }
} }
......
...@@ -163,19 +163,19 @@ public final class Window { ...@@ -163,19 +163,19 @@ public final class Window {
* *
* @param session * @param session
* the session * the session
* @param window * @param stage
* true for window processing stage, false for group stage * select stage
* @see Expression#updateAggregate(Session, boolean) * @see Expression#updateAggregate(Session, int)
*/ */
public void updateAggregate(Session session, boolean window) { public void updateAggregate(Session session, int stage) {
if (partitionBy != null) { if (partitionBy != null) {
for (Expression expr : partitionBy) { for (Expression expr : partitionBy) {
expr.updateAggregate(session, window); expr.updateAggregate(session, stage);
} }
} }
if (orderBy != null) { if (orderBy != null) {
for (SelectOrderBy o : orderBy) { for (SelectOrderBy o : orderBy) {
o.expression.updateAggregate(session, false); o.expression.updateAggregate(session, stage);
} }
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论