提交 39ab2054 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Prevent incorrect optimizations

上级 d08cab6c
......@@ -232,10 +232,23 @@ public class WindowFunction extends AbstractAggregate {
@Override
public boolean isEverything(ExpressionVisitor visitor) {
if (visitor.getType() == ExpressionVisitor.OPTIMIZABLE_MIN_MAX_COUNT_ALL) {
switch (visitor.getType()) {
case ExpressionVisitor.QUERY_COMPARABLE:
case ExpressionVisitor.OPTIMIZABLE_MIN_MAX_COUNT_ALL:
case ExpressionVisitor.DETERMINISTIC:
case ExpressionVisitor.INDEPENDENT:
return false;
case ExpressionVisitor.EVALUATABLE:
case ExpressionVisitor.READONLY:
case ExpressionVisitor.NOT_FROM_RESOLVER:
case ExpressionVisitor.GET_DEPENDENCIES:
case ExpressionVisitor.SET_MAX_DATA_MODIFICATION_ID:
case ExpressionVisitor.GET_COLUMNS1:
case ExpressionVisitor.GET_COLUMNS2:
return true;
default:
throw DbException.throwInternalError("type="+visitor.getType());
}
return true;
}
@Override
......
......@@ -121,7 +121,15 @@ public class TestView extends TestDb {
stat.execute("drop table test if exists");
stat.execute("create table test(id int primary key, name varchar(1))");
stat.execute("insert into test(id, name) values(1, 'b'), (3, 'a')");
ResultSet rs = stat.executeQuery(
ResultSet rs;
rs = stat.executeQuery(
"select nr from (select rownum() as nr, " +
"a.id as id from (select id from test order by name) as a) as b " +
"where b.id = 1;");
assertTrue(rs.next());
assertEquals(2, rs.getInt(1));
assertFalse(rs.next());
rs = stat.executeQuery(
"select nr from (select row_number() over() as nr, " +
"a.id as id from (select id from test order by name) as a) as b " +
"where b.id = 1;");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论