Skip to content

Commit bcbe54e

Browse files
committed
Move topN pushdown test into BaseConnectorTest
Previously, there was no test to exercise topN pushdown behavior for non-JDBC connectors, regardless of whether they declare support for the `SUPPORTS_TOPN_PUSHDOWN` TestingConnectorBehavior.
1 parent 3248961 commit bcbe54e

File tree

2 files changed

+69
-58
lines changed

2 files changed

+69
-58
lines changed

plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/BaseJdbcConnectorTest.java

Lines changed: 3 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -973,70 +973,15 @@ public void testTopNPushdownDisabled()
973973
}
974974

975975
@Test
976+
@Override
976977
public void testTopNPushdown()
977978
{
979+
super.testTopNPushdown();
980+
978981
if (!hasBehavior(SUPPORTS_TOPN_PUSHDOWN)) {
979-
assertThat(query("SELECT orderkey FROM orders ORDER BY orderkey LIMIT 10"))
980-
.ordered()
981-
.isNotFullyPushedDown(TopNNode.class);
982982
return;
983983
}
984984

985-
assertThat(query("SELECT orderkey FROM orders ORDER BY orderkey LIMIT 10"))
986-
.ordered()
987-
.isFullyPushedDown();
988-
989-
assertThat(query("SELECT orderkey FROM orders ORDER BY orderkey DESC LIMIT 10"))
990-
.ordered()
991-
.isFullyPushedDown();
992-
993-
// multiple sort columns with different orders
994-
assertThat(query("SELECT * FROM orders ORDER BY shippriority DESC, totalprice ASC LIMIT 10"))
995-
.ordered()
996-
.isFullyPushedDown();
997-
998-
// TopN over aggregation column
999-
if (hasBehavior(SUPPORTS_AGGREGATION_PUSHDOWN)) {
1000-
assertThat(query("SELECT sum(totalprice) AS total FROM orders GROUP BY custkey ORDER BY total DESC LIMIT 10"))
1001-
.ordered()
1002-
.isFullyPushedDown();
1003-
}
1004-
1005-
// TopN over TopN
1006-
assertThat(query("SELECT orderkey, totalprice FROM (SELECT orderkey, totalprice FROM orders ORDER BY 1, 2 LIMIT 10) ORDER BY 2, 1 LIMIT 5"))
1007-
.ordered()
1008-
.isFullyPushedDown();
1009-
1010-
assertThat(query("" +
1011-
"SELECT orderkey, totalprice " +
1012-
"FROM (SELECT orderkey, totalprice FROM (SELECT orderkey, totalprice FROM orders ORDER BY 1, 2 LIMIT 10) " +
1013-
"ORDER BY 2, 1 LIMIT 5) ORDER BY 1, 2 LIMIT 3"))
1014-
.ordered()
1015-
.isFullyPushedDown();
1016-
1017-
// TopN over limit - use high limit for deterministic result
1018-
assertThat(query("SELECT orderkey, totalprice FROM (SELECT orderkey, totalprice FROM orders LIMIT 15000) ORDER BY totalprice ASC LIMIT 5"))
1019-
.ordered()
1020-
.isFullyPushedDown();
1021-
1022-
// TopN over limit with filter
1023-
assertThat(query("" +
1024-
"SELECT orderkey, totalprice " +
1025-
"FROM (SELECT orderkey, totalprice FROM orders WHERE orderdate = DATE '1995-09-16' LIMIT 20) " +
1026-
"ORDER BY totalprice ASC LIMIT 5"))
1027-
.ordered()
1028-
.isFullyPushedDown();
1029-
1030-
// TopN over aggregation with filter
1031-
if (hasBehavior(SUPPORTS_AGGREGATION_PUSHDOWN)) {
1032-
assertThat(query("" +
1033-
"SELECT * " +
1034-
"FROM (SELECT SUM(totalprice) as sum, custkey AS total FROM orders GROUP BY custkey HAVING COUNT(*) > 3) " +
1035-
"ORDER BY sum DESC LIMIT 10"))
1036-
.ordered()
1037-
.isFullyPushedDown();
1038-
}
1039-
1040985
// TopN over LEFT join (enforces SINGLE TopN cannot be pushed below OUTER side of join)
1041986
// We expect PARTIAL TopN on the LEFT side of join to be pushed down.
1042987
assertThat(query(

testing/trino-testing/src/main/java/io/trino/testing/BaseConnectorTest.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,72 @@ public void testLimitPushdown()
495495
topnOverTableScan);
496496
}
497497

498+
@Test
499+
public void testTopNPushdown()
500+
{
501+
if (!hasBehavior(SUPPORTS_TOPN_PUSHDOWN)) {
502+
assertThat(query("SELECT orderkey FROM orders ORDER BY orderkey LIMIT 10"))
503+
.ordered()
504+
.isNotFullyPushedDown(TopNNode.class);
505+
return;
506+
}
507+
508+
assertThat(query("SELECT orderkey FROM orders ORDER BY orderkey LIMIT 10"))
509+
.ordered()
510+
.isFullyPushedDown();
511+
512+
assertThat(query("SELECT orderkey FROM orders ORDER BY orderkey DESC LIMIT 10"))
513+
.ordered()
514+
.isFullyPushedDown();
515+
516+
// multiple sort columns with different orders
517+
assertThat(query("SELECT * FROM orders ORDER BY shippriority DESC, totalprice ASC LIMIT 10"))
518+
.ordered()
519+
.isFullyPushedDown();
520+
521+
// TopN over aggregation column
522+
if (hasBehavior(SUPPORTS_AGGREGATION_PUSHDOWN)) {
523+
assertThat(query("SELECT sum(totalprice) AS total FROM orders GROUP BY custkey ORDER BY total DESC LIMIT 10"))
524+
.ordered()
525+
.isFullyPushedDown();
526+
}
527+
528+
// TopN over TopN
529+
assertThat(query("SELECT orderkey, totalprice FROM (SELECT orderkey, totalprice FROM orders ORDER BY 1, 2 LIMIT 10) ORDER BY 2, 1 LIMIT 5"))
530+
.ordered()
531+
.isFullyPushedDown();
532+
533+
assertThat(query("" +
534+
"SELECT orderkey, totalprice " +
535+
"FROM (SELECT orderkey, totalprice FROM (SELECT orderkey, totalprice FROM orders ORDER BY 1, 2 LIMIT 10) " +
536+
"ORDER BY 2, 1 LIMIT 5) ORDER BY 1, 2 LIMIT 3"))
537+
.ordered()
538+
.isFullyPushedDown();
539+
540+
// TopN over limit - use high limit for deterministic result
541+
assertThat(query("SELECT orderkey, totalprice FROM (SELECT orderkey, totalprice FROM orders LIMIT 15000) ORDER BY totalprice ASC LIMIT 5"))
542+
.ordered()
543+
.isFullyPushedDown();
544+
545+
// TopN over limit with filter
546+
assertThat(query("" +
547+
"SELECT orderkey, totalprice " +
548+
"FROM (SELECT orderkey, totalprice FROM orders WHERE orderdate = DATE '1995-09-16' LIMIT 20) " +
549+
"ORDER BY totalprice ASC LIMIT 5"))
550+
.ordered()
551+
.isFullyPushedDown();
552+
553+
// TopN over aggregation with filter
554+
if (hasBehavior(SUPPORTS_AGGREGATION_PUSHDOWN)) {
555+
assertThat(query("" +
556+
"SELECT * " +
557+
"FROM (SELECT SUM(totalprice) as sum, custkey AS total FROM orders GROUP BY custkey HAVING COUNT(*) > 3) " +
558+
"ORDER BY sum DESC LIMIT 10"))
559+
.ordered()
560+
.isFullyPushedDown();
561+
}
562+
}
563+
498564
@Test
499565
public void testAggregation()
500566
{

0 commit comments

Comments
 (0)