@@ -113,6 +113,72 @@ public void testPersistentCteWithTimeStampWithTimeZoneType()
113113 testQuery ));
114114 }
115115
116+ @ Test
117+ public void testComplexCommonFilterPushdown ()
118+ {
119+ QueryRunner queryRunner = getQueryRunner ();
120+ String testQuery = "WITH order_platform_data AS (\n " +
121+ " SELECT\n " +
122+ " o.orderkey AS order_key,\n " +
123+ " o.orderdate AS datestr,\n " +
124+ " o.orderpriority AS event_type\n " +
125+ " FROM\n " +
126+ " orders o\n " +
127+ " WHERE\n " +
128+ " o.orderdate BETWEEN DATE '1995-01-01' AND DATE '1995-01-31'\n " +
129+ " AND o.orderpriority IN ('1-URGENT', '3-MEDIUM')\n " +
130+ " UNION ALL\n " +
131+ " SELECT\n " +
132+ " l.orderkey AS order_key,\n " +
133+ " o.orderdate AS datestr,\n " +
134+ " o.orderpriority AS event_type\n " +
135+ " FROM\n " +
136+ " lineitem l\n " +
137+ " JOIN orders o ON l.orderkey = o.orderkey\n " +
138+ " WHERE\n " +
139+ " o.orderdate BETWEEN DATE '1995-01-01' AND DATE '1995-01-31'\n " +
140+ " AND o.orderpriority IN ('2-HIGH', '5-LOW')\n " +
141+ "),\n " +
142+ "urgent AS (\n " +
143+ " SELECT order_key, datestr\n " +
144+ " FROM order_platform_data\n " +
145+ " WHERE event_type = '1-URGENT'\n " +
146+ "),\n " +
147+ "medium AS (\n " +
148+ " SELECT order_key, datestr\n " +
149+ " FROM order_platform_data\n " +
150+ " WHERE event_type = '3-MEDIUM'\n " +
151+ "),\n " +
152+ "high AS (\n " +
153+ " SELECT order_key, datestr\n " +
154+ " FROM order_platform_data\n " +
155+ " WHERE event_type = '2-HIGH'\n " +
156+ "),\n " +
157+ "low AS (\n " +
158+ " SELECT order_key, datestr\n " +
159+ " FROM order_platform_data\n " +
160+ " WHERE event_type = '5-LOW'\n " +
161+ ")\n " +
162+ "SELECT\n " +
163+ " ofin.order_key AS order_key,\n " +
164+ " ofin.datestr AS order_date\n " +
165+ " FROM " +
166+ " urgent ofin\n " +
167+ " LEFT JOIN medium oproc ON ofin.datestr = oproc.datestr\n " +
168+ " LEFT JOIN low on oproc.datestr = low.datestr" +
169+ " LEFT JOIN high on low.datestr = high.datestr" +
170+ " ORDER BY\n " +
171+ " ofin.order_key\n " ;
172+ compareResults (queryRunner .execute (Session .builder (super .getSession ())
173+ .setSystemProperty (PUSHDOWN_SUBFIELDS_ENABLED , "true" )
174+ .setSystemProperty (CTE_MATERIALIZATION_STRATEGY , "HEURISTIC_COMPLEX_QUERIES_ONLY" )
175+ .setSystemProperty (CTE_FILTER_AND_PROJECTION_PUSHDOWN_ENABLED , "true" )
176+ .build (),
177+ testQuery ),
178+ queryRunner .execute (getSession (),
179+ testQuery ));
180+ }
181+
116182 @ Test
117183 public void testPersistentCteWithStructTypes ()
118184 {
0 commit comments