From f27fddb1fe04a0cb594871e8c0ca81a748061518 Mon Sep 17 00:00:00 2001 From: Martin Traverso Date: Wed, 10 Apr 2019 18:27:23 -0700 Subject: [PATCH] Indicate progress only if limit is applied The code was always returning an indication that it could benefit from the limit pushdown even if that wasn't the case. This could cause the optimizer to loop indefinitely in some cases. --- .../java/io/prestosql/plugin/memory/MemoryMetadata.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/presto-memory/src/main/java/io/prestosql/plugin/memory/MemoryMetadata.java b/presto-memory/src/main/java/io/prestosql/plugin/memory/MemoryMetadata.java index 0ad1be797c02..54efa793fb74 100644 --- a/presto-memory/src/main/java/io/prestosql/plugin/memory/MemoryMetadata.java +++ b/presto-memory/src/main/java/io/prestosql/plugin/memory/MemoryMetadata.java @@ -356,10 +356,12 @@ public Optional> applyLimit(Connect { MemoryTableHandle table = (MemoryTableHandle) handle; - if (!table.getLimit().isPresent() || limit < table.getLimit().getAsLong()) { - table = new MemoryTableHandle(table.getId(), OptionalLong.of(limit)); + if (table.getLimit().isPresent() && table.getLimit().getAsLong() <= limit) { + return Optional.empty(); } - return Optional.of(new LimitApplicationResult<>(table, true)); + return Optional.of(new LimitApplicationResult<>( + new MemoryTableHandle(table.getId(), OptionalLong.of(limit)), + true)); } }