提交 64ff1b54 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Add and use Window.setEvaluatable()

上级 a489024d
......@@ -7,6 +7,7 @@ package org.h2.expression.aggregate;
import org.h2.expression.Expression;
import org.h2.table.ColumnResolver;
import org.h2.table.TableFilter;
/**
* A base class for aggregates.
......@@ -47,6 +48,16 @@ public abstract class AbstractAggregate extends Expression {
}
}
@Override
public void setEvaluatable(TableFilter tableFilter, boolean b) {
if (filterCondition != null) {
filterCondition.setEvaluatable(tableFilter, b);
}
if (over != null) {
over.setEvaluatable(tableFilter, b);
}
}
protected StringBuilder appendTailConditions(StringBuilder builder) {
if (filterCondition != null) {
builder.append(" FILTER (WHERE ").append(filterCondition.getSQL()).append(')');
......
......@@ -588,9 +588,7 @@ public class Aggregate extends AbstractAggregate {
if (groupConcatSeparator != null) {
groupConcatSeparator.setEvaluatable(tableFilter, b);
}
if (filterCondition != null) {
filterCondition.setEvaluatable(tableFilter, b);
}
super.setEvaluatable(tableFilter, b);
}
@Override
......
......@@ -149,9 +149,7 @@ public class JavaAggregate extends AbstractAggregate {
for (Expression e : args) {
e.setEvaluatable(tableFilter, b);
}
if (filterCondition != null) {
filterCondition.setEvaluatable(tableFilter, b);
}
super.setEvaluatable(tableFilter, b);
}
private Aggregate getInstance() throws SQLException {
......
......@@ -10,6 +10,7 @@ import java.util.ArrayList;
import org.h2.engine.Session;
import org.h2.expression.Expression;
import org.h2.table.ColumnResolver;
import org.h2.table.TableFilter;
import org.h2.util.StringUtils;
import org.h2.value.Value;
import org.h2.value.ValueArray;
......@@ -47,6 +48,23 @@ public final class Window {
}
}
/**
* Tell the expression columns whether the table filter can return values
* now. This is used when optimizing the query.
*
* @param tableFilter
* the table filter
* @param value
* true if the table filter can return value
*/
public void setEvaluatable(TableFilter tableFilter, boolean value) {
if (partitionBy != null) {
for (Expression e : partitionBy) {
e.setEvaluatable(tableFilter, value);
}
}
}
/**
* Returns the key for the current group.
*
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论