Skip to content

Commit 598db00

Browse files
pdabre12Pratik Joseph Dabre
authored andcommitted
Add e2e tests for native arrow federation connector
1 parent 91eec28 commit 598db00

10 files changed

+923
-249
lines changed
Lines changed: 234 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
1+
/*
2+
* Licensed under the Apache License, Version 2.0 (the "License");
3+
* you may not use this file except in compliance with the License.
4+
* You may obtain a copy of the License at
5+
*
6+
* http://www.apache.org/licenses/LICENSE-2.0
7+
*
8+
* Unless required by applicable law or agreed to in writing, software
9+
* distributed under the License is distributed on an "AS IS" BASIS,
10+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
* See the License for the specific language governing permissions and
12+
* limitations under the License.
13+
*/
14+
package com.facebook.plugin.arrow;
15+
16+
import com.facebook.presto.tests.AbstractTestQueryFramework;
17+
import org.testng.annotations.Test;
18+
19+
public abstract class AbstractTestArrowFlightNativeQueries
20+
extends AbstractTestQueryFramework
21+
{
22+
@Test
23+
public void testFiltersAndProjections1()
24+
{
25+
assertQuery("SELECT * FROM nation");
26+
assertQuery("SELECT * FROM nation WHERE nationkey = 4");
27+
assertQuery("SELECT * FROM nation WHERE nationkey <> 4");
28+
assertQuery("SELECT * FROM nation WHERE nationkey < 4");
29+
assertQuery("SELECT * FROM nation WHERE nationkey <= 4");
30+
assertQuery("SELECT * FROM nation WHERE nationkey > 4");
31+
assertQuery("SELECT * FROM nation WHERE nationkey >= 4");
32+
assertQuery("SELECT * FROM nation WHERE nationkey BETWEEN 3 AND 7");
33+
assertQuery("SELECT * FROM nation WHERE nationkey IN (1, 3, 5)");
34+
assertQuery("SELECT * FROM nation WHERE nationkey NOT IN (1, 3, 5)");
35+
assertQuery("SELECT * FROM nation WHERE nationkey NOT IN (1, 8, 11)");
36+
assertQuery("SELECT * FROM nation WHERE nationkey NOT IN (1, 2, 3)");
37+
assertQuery("SELECT * FROM nation WHERE nationkey NOT IN (-14, 2)");
38+
assertQuery("SELECT * FROM nation WHERE nationkey NOT IN (1, 2, 3, 4, 5, 10, 11, 12, 13)");
39+
}
40+
41+
@Test
42+
public void testFiltersAndProjections2()
43+
{
44+
assertQuery("SELECT * FROM nation WHERE nationkey NOT BETWEEN 3 AND 7");
45+
assertQuery("SELECT * FROM nation WHERE nationkey NOT BETWEEN -10 AND 5");
46+
assertQuery("SELECT * FROM nation WHERE nationkey < 5 OR nationkey > 10");
47+
assertQuery("SELECT nationkey * 10, nationkey % 5, -nationkey, nationkey / 3 FROM nation");
48+
assertQuery("SELECT *, nationkey / 3 FROM nation");
49+
assertQuery("SELECT nationkey IS NULL FROM nation");
50+
assertQuery("SELECT * FROM nation WHERE name <> 'SAUDI ARABIA'");
51+
assertQuery("SELECT * FROM nation WHERE name NOT IN ('RUSSIA', 'UNITED STATES', 'CHINA')");
52+
assertQuery("SELECT * FROM nation WHERE name NOT IN ('aaa', 'bbb', 'ccc', 'ddd')");
53+
assertQuery("SELECT * FROM nation WHERE name NOT IN ('', ';', 'new country w1th $p3c1@l ch@r@c73r5')");
54+
assertQuery("SELECT * FROM nation WHERE name NOT BETWEEN 'A' AND 'K'"); // should produce NegatedBytesRange
55+
assertQuery("SELECT * FROM nation WHERE name <= 'B' OR 'G' <= name");
56+
}
57+
58+
@Test
59+
public void testFiltersAndProjections3()
60+
{
61+
assertQuery("SELECT * FROM lineitem WHERE shipmode <> 'FOB'");
62+
assertQuery("SELECT * FROM lineitem WHERE shipmode NOT IN ('RAIL', 'AIR')");
63+
assertQuery("SELECT * FROM lineitem WHERE shipmode NOT IN ('', 'TRUCK', 'FOB', 'RAIL')");
64+
65+
assertQuery("SELECT rand() < 1, random() < 1 FROM nation", "SELECT true, true FROM nation");
66+
67+
assertQuery("SELECT * FROM lineitem");
68+
assertQuery("SELECT ceil(discount), ceiling(discount), floor(discount), abs(discount) FROM lineitem");
69+
assertQuery("SELECT linenumber IN (2, 4, 6) FROM lineitem");
70+
assertQuery("SELECT orderdate FROM orders WHERE cast(orderdate as DATE) IN (cast('1997-07-29' as DATE), cast('1993-03-13' as DATE)) ORDER BY orderdate LIMIT 10");
71+
72+
assertQuery("SELECT * FROM orders");
73+
74+
assertQuery("SELECT coalesce(linenumber, -1) FROM lineitem");
75+
76+
assertQuery("SELECT * FROM lineitem WHERE linenumber = 1");
77+
assertQuery("SELECT * FROM lineitem WHERE linenumber > 3");
78+
}
79+
80+
@Test
81+
public void testFiltersAndProjections4()
82+
{
83+
assertQuery("SELECT * FROM lineitem WHERE linenumber = 3");
84+
assertQuery("SELECT * FROM lineitem WHERE linenumber > 5 AND linenumber < 2");
85+
86+
assertQuery("SELECT * FROM lineitem WHERE linenumber > 5");
87+
assertQuery("SELECT * FROM lineitem WHERE linenumber IN (1, 2)");
88+
89+
assertQuery("SELECT linenumber, orderkey, discount FROM lineitem WHERE discount > 0.02");
90+
assertQuery("SELECT linenumber, orderkey, discount FROM lineitem WHERE discount BETWEEN 0.01 AND 0.02");
91+
92+
assertQuery("SELECT linenumber, orderkey, discount FROM lineitem WHERE discount > 0.02");
93+
assertQuery("SELECT linenumber, orderkey, discount FROM lineitem WHERE discount BETWEEN 0.01 AND 0.02");
94+
assertQuery("SELECT linenumber, orderkey, discount FROM lineitem WHERE tax < 0.02");
95+
assertQuery("SELECT linenumber, orderkey, discount FROM lineitem WHERE tax BETWEEN 0.02 AND 0.06");
96+
}
97+
98+
@Test
99+
public void testFiltersAndProjections6()
100+
{
101+
// query with filter using like
102+
assertQuery("SELECT * FROM lineitem WHERE shipinstruct like 'TAKE BACK%'");
103+
assertQuery("SELECT * FROM lineitem WHERE shipinstruct like 'TAKE BACK#%' escape '#'");
104+
105+
// no row passes the filter
106+
assertQuery(
107+
"SELECT linenumber, orderkey, discount FROM lineitem WHERE discount > 0.2");
108+
109+
// Double and float inequality filter
110+
assertQuery("SELECT SUM(discount) FROM lineitem WHERE discount != 0.04");
111+
}
112+
113+
@Test
114+
public void testTopN()
115+
{
116+
assertQueryOrdered("SELECT nationkey, regionkey FROM nation ORDER BY nationkey LIMIT 5");
117+
118+
assertQueryOrdered("SELECT nationkey, regionkey FROM nation ORDER BY nationkey LIMIT 50");
119+
120+
assertQueryOrdered(
121+
"SELECT orderkey, partkey, suppkey, linenumber, quantity, extendedprice, discount, tax "
122+
+ "FROM lineitem ORDER BY orderkey, linenumber DESC LIMIT 10");
123+
124+
assertQueryOrdered(
125+
"SELECT orderkey, partkey, suppkey, linenumber, quantity, extendedprice, discount, tax "
126+
+ "FROM lineitem ORDER BY orderkey, linenumber DESC LIMIT 2000");
127+
128+
assertQueryOrdered("SELECT nationkey, regionkey FROM nation ORDER BY name LIMIT 15");
129+
assertQueryOrdered("SELECT nationkey, regionkey FROM nation ORDER BY name DESC LIMIT 15");
130+
131+
assertQuery("SELECT linenumber, NULL FROM lineitem ORDER BY 1 LIMIT 23");
132+
}
133+
134+
@Test
135+
public void testCast()
136+
{
137+
assertQuery("SELECT CAST(linenumber as TINYINT), CAST(linenumber AS SMALLINT), "
138+
+ "CAST(linenumber AS INTEGER), CAST(linenumber AS BIGINT), CAST(quantity AS REAL), "
139+
+ "CAST(orderkey AS DOUBLE), CAST(orderkey AS VARCHAR) FROM lineitem");
140+
141+
assertQuery("SELECT CAST(0.0 as VARCHAR)");
142+
143+
// Cast to varchar(n).
144+
assertQuery("SELECT CAST(comment as VARCHAR(1)) FROM orders");
145+
assertQuery("SELECT CAST(comment as VARCHAR(1000)) FROM orders WHERE LENGTH(comment) < 1000");
146+
assertQuery("SELECT CAST(c0 AS VARCHAR(1)) FROM ( VALUES (NULL) ) t(c0)");
147+
assertQuery("SELECT CAST(c0 AS VARCHAR(1)) FROM ( VALUES ('') ) t(c0)");
148+
149+
assertQuery("SELECT CAST(linenumber as TINYINT), CAST(linenumber AS SMALLINT), "
150+
+ "CAST(linenumber AS INTEGER), CAST(linenumber AS BIGINT), CAST(quantity AS REAL), "
151+
+ "CAST(orderkey AS DOUBLE), CAST(orderkey AS VARCHAR) FROM lineitem");
152+
153+
// Casts to varbinary.
154+
assertQuery("SELECT cast(null as varbinary)");
155+
assertQuery("SELECT cast('' as varbinary)");
156+
157+
// Ensure timestamp casts are correct.
158+
assertQuery("SELECT cast(cast(shipdate as varchar) as timestamp) FROM lineitem ORDER BY 1");
159+
160+
// Ensure date casts are correct.
161+
assertQuery("SELECT cast(cast(orderdate as varchar) as date) FROM orders ORDER BY 1");
162+
163+
// Cast all integer types to short decimal
164+
assertQuery("SELECT CAST(linenumber as DECIMAL(2, 0)) FROM lineitem");
165+
assertQuery("SELECT CAST(linenumber as DECIMAL(8, 4)) FROM lineitem");
166+
assertQuery("SELECT CAST(CAST(linenumber as INTEGER) as DECIMAL(15, 6)) FROM lineitem");
167+
assertQuery("SELECT CAST(nationkey as DECIMAL(18, 6)) FROM nation");
168+
169+
// Cast all integer types to long decimal
170+
assertQuery("SELECT CAST(linenumber as DECIMAL(25, 0)) FROM lineitem");
171+
assertQuery("SELECT CAST(linenumber as DECIMAL(19, 4)) FROM lineitem");
172+
assertQuery("SELECT CAST(CAST(linenumber as INTEGER) as DECIMAL(20, 6)) FROM lineitem");
173+
assertQuery("SELECT CAST(nationkey as DECIMAL(22, 6)) FROM nation");
174+
}
175+
176+
@Test
177+
public void testSwitch()
178+
{
179+
assertQuery("SELECT case linenumber % 10 when orderkey % 3 then orderkey + 1 when 2 then orderkey + 2 else 0 end FROM lineitem");
180+
assertQuery("SELECT case linenumber when 1 then 'one' when 2 then 'two' else '...' end FROM lineitem");
181+
assertQuery("SELECT case when linenumber = 1 then 'one' when linenumber = 2 then 'two' else '...' end FROM lineitem");
182+
}
183+
184+
@Test
185+
public void testIn()
186+
{
187+
assertQuery("SELECT linenumber IN (orderkey % 7, partkey % 5, suppkey % 3) FROM lineitem");
188+
}
189+
190+
@Test
191+
public void testSubqueries()
192+
{
193+
assertQuery("SELECT name FROM nation WHERE regionkey = (SELECT max(regionkey) FROM region)");
194+
195+
// Subquery returns zero rows.
196+
assertQuery("SELECT name FROM nation WHERE regionkey = (SELECT regionkey FROM region WHERE regionkey < 0)");
197+
198+
// Subquery returns more than one row.
199+
assertQueryFails("SELECT name FROM nation WHERE regionkey = (SELECT regionkey FROM region)", ".*Expected single row of input. Received 5 rows.*");
200+
}
201+
202+
@Test
203+
public void testArithmetic()
204+
{
205+
assertQuery("SELECT mod(orderkey, linenumber) FROM lineitem");
206+
assertQuery("SELECT discount * 0.123 FROM lineitem");
207+
assertQuery("SELECT ln(totalprice) FROM orders");
208+
assertQuery("SELECT sqrt(totalprice) FROM orders");
209+
assertQuery("SELECT radians(totalprice) FROM orders");
210+
}
211+
212+
@Test
213+
public void testGreatestLeast()
214+
{
215+
assertQuery("SELECT greatest(linenumber, suppkey, partkey) from lineitem");
216+
assertQuery("SELECT least(shipdate, commitdate) from lineitem");
217+
}
218+
219+
@Test
220+
public void testSign()
221+
{
222+
assertQuery("SELECT sign(totalprice) from orders");
223+
assertQuery("SELECT sign(-totalprice) from orders");
224+
assertQuery("SELECT sign(custkey) from orders");
225+
assertQuery("SELECT sign(-custkey) from orders");
226+
assertQuery("SELECT sign(shippriority) from orders");
227+
}
228+
229+
@Test
230+
public void testQueryWithColumnHandleOrdering()
231+
{
232+
assertQuery("SELECT * FROM nation WHERE (name <= 'B' OR 'G' <= name) AND (nationkey BETWEEN 1 AND 10)");
233+
}
234+
}

0 commit comments

Comments
 (0)