AbstractTestRepartitionQueries.java
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.facebook.presto.tests;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
public abstract class AbstractTestRepartitionQueries
extends AbstractTestQueryFramework
{
@Test
public void testBoolean()
{
assertQuery("WITH lineitem_ex AS (\n" +
" SELECT\n" +
" partkey,\n" +
" suppkey,\n" +
" IF (mod(orderkey + linenumber, 11) = 0, FALSE, TRUE) AS flag\n" +
" FROM lineitem\n" +
")\n" +
"SELECT\n" +
" CHECKSUM(l.flag)\n" +
"FROM lineitem_ex l,\n" +
" partsupp p\n" +
"WHERE\n" +
" l.partkey = p.partkey\n" +
" AND l.suppkey = p.suppkey\n" +
" AND p.availqty < 1000",
new byte[] {126, 85, 59, 72, -71, -42, 49, 21});
}
@Test
public void testSmallInt()
{
assertQuery("WITH lineitem_ex AS (\n" +
" SELECT\n" +
" partkey,\n" +
" suppkey,\n" +
" CAST(linenumber AS SMALLINT) AS l_linenumber\n" +
" FROM lineitem\n" +
")\n" +
"SELECT\n" +
" CHECKSUM(l.l_linenumber)\n" +
"FROM lineitem_ex l,\n" +
" partsupp p\n" +
"WHERE\n" +
" l.partkey = p.partkey\n" +
" AND l.suppkey = p.suppkey\n" +
" AND p.availqty < 1000",
new byte[] {-87, -84, -37, 75, -52, 22, 87, -29});
}
@Test
public void testInteger()
{
assertQuery("SELECT\n" +
" CHECKSUM(l.linenumber)\n" +
" FROM lineitem l, partsupp p\n" +
"WHERE\n" +
" l.partkey = p.partkey\n" +
" AND l.suppkey = p.suppkey\n" +
" AND p.availqty < 1000",
new byte[] {-87, -84, -37, 75, -52, 22, 87, -29});
}
@Test
public void testBigInt()
{
assertQuery("SELECT\n" +
" CHECKSUM(l.partkey)\n" +
" FROM lineitem l, partsupp p\n" +
"WHERE\n" +
" l.partkey = p.partkey\n" +
" AND l.suppkey = p.suppkey\n" +
" AND p.availqty < 1000",
new byte[] {122, -36, -24, 126, -7, 61, -78, 5});
}
@Test
public void testIpAddress()
{
assertQuery("WITH lineitem_ex AS \n" +
"(\n" +
"SELECT\n" +
" partkey,\n" +
" CAST(\n" +
" CONCAT(\n" +
" CONCAT(\n" +
" CONCAT(\n" +
" CONCAT(\n" +
" CONCAT(\n" +
" CONCAT(CAST((orderkey % 255) AS VARCHAR), '.'),\n" +
" CAST((partkey % 255) AS VARCHAR)\n" +
" ),\n" +
" '.'\n" +
" ),\n" +
" CAST(suppkey AS VARCHAR)\n" +
" ),\n" +
" '.'\n" +
" ),\n" +
" CAST(linenumber AS VARCHAR)\n" +
" ) AS ipaddress\n" +
" ) AS ip\n" +
" FROM lineitem\n" +
" )\n" +
"SELECT\n" +
" CHECKSUM(l.ip) \n" +
"FROM lineitem_ex l,\n" +
" partsupp p\n" +
"WHERE\n" +
" l.partkey = p.partkey",
new byte[] {92, -57, -31, -119, -122, 9, 118, -31});
}
@Test
public void testBigintWithNulls()
{
assertQuery("WITH lineitem_ex AS (\n" +
" SELECT\n" +
" IF (mod(orderkey + linenumber, 11) = 0, NULL, partkey) AS l_partkey\n" +
" FROM lineitem\n" +
")\n" +
"SELECT\n" +
" CHECKSUM(l.l_partkey)\n" +
"FROM lineitem_ex l,\n" +
" partsupp p\n" +
"WHERE\n" +
" l.l_partkey = p.partkey",
new byte[] {-4, -54, 21, 27, 121, 66, 3, 35});
}
@Test
public void testVarchar()
{
assertQuery("SELECT\n" +
" CHECKSUM(l.comment)\n" +
" FROM lineitem l, partsupp p\n" +
"WHERE\n" +
" l.partkey = p.partkey\n" +
" AND l.suppkey = p.suppkey\n" +
" AND p.availqty < 1000",
new byte[] {14, -4, 62, 87, 52, 53, -101, -100});
}
@Test
public void testDictionaryOfVarcharWithNulls()
{
assertQuery("SELECT\n" +
" CHECKSUM(l.shipmode)\n" +
" FROM lineitem l, partsupp p\n" +
"WHERE\n" +
" l.partkey = p.partkey\n" +
" AND l.suppkey = p.suppkey\n" +
" AND p.availqty < 1000",
new byte[] {127, 108, -69, -115, -43, 44, -54, 88});
}
@Test
public void testArrayOfBigInt()
{
assertQuery("WITH lineitem_ex AS (\n" +
" SELECT\n" +
" partkey,\n" +
" suppkey,\n" +
" ARRAY[orderkey, partkey, suppkey] AS l_array\n" +
" FROM lineitem\n" +
")\n" +
"SELECT\n" +
" CHECKSUM(l.l_array)\n" +
"FROM lineitem_ex l,\n" +
" partsupp p\n" +
"WHERE\n" +
" l.partkey = p.partkey\n" +
" AND l.suppkey = p.suppkey\n" +
" AND p.availqty < 1000",
new byte[] {10, -59, 46, 87, 22, -93, 58, -16});
}
@Test
public void testArrayOfArray()
{
assertQuery("WITH lineitem_ex AS (\n" +
" SELECT\n" +
" partkey,\n" +
" suppkey,\n" +
" ARRAY[ARRAY[orderkey, partkey], ARRAY[suppkey]] AS l_array\n" +
" FROM lineitem\n" +
")\n" +
"SELECT\n" +
" CHECKSUM(l.l_array)\n" +
"FROM lineitem_ex l,\n" +
" partsupp p\n" +
"WHERE\n" +
" l.partkey = p.partkey\n" +
" AND l.suppkey = p.suppkey\n" +
" AND p.availqty < 1000",
new byte[] {10, -59, 46, 87, 22, -93, 58, -16});
}
@Test
public void testStruct()
{
assertQuery("WITH lineitem_ex AS (\n" +
" SELECT\n" +
" orderkey,\n" +
" CAST(\n" +
" ROW (\n" +
" partkey,\n" +
" suppkey,\n" +
" extendedprice,\n" +
" discount,\n" +
" quantity,\n" +
" shipdate,\n" +
" receiptdate,\n" +
" commitdate,\n" +
" comment\n" +
" ) AS ROW(\n" +
" l_partkey BIGINT,\n" +
" l_suppkey BIGINT,\n" +
" l_extendedprice DOUBLE,\n" +
" l_discount DOUBLE,\n" +
" l_quantity DOUBLE,\n" +
" l_shipdate DATE,\n" +
" l_receiptdate DATE,\n" +
" l_commitdate DATE,\n" +
" l_comment VARCHAR(44)\n" +
" )\n" +
" ) AS l_shipment\n" +
" FROM lineitem\n" +
")\n" +
"SELECT\n" +
" CHECKSUM(l.l_shipment)\n" +
"FROM lineitem_ex l,\n" +
" orders o\n" +
"WHERE\n" +
" l.orderkey = o.orderkey",
new byte[] {-56, 110, 18, -107, -123, 121, 87, 79});
}
@Test
public void testStructWithNulls()
{
assertQuery("WITH lineitem_ex AS (\n" +
" SELECT\n" +
" orderkey,\n" +
" CAST(\n" +
" IF (\n" +
" mod(partkey, 5) = 0,\n" +
" NULL,\n" +
" ROW(\n" +
" COMMENT,\n" +
" IF (\n" +
" mod(partkey, 13) = 0,\n" +
" NULL,\n" +
" CONCAT(CAST(partkey AS VARCHAR), COMMENT)\n" +
" )\n" +
" )\n" +
" ) AS ROW(s1 VARCHAR, s2 VARCHAR)\n" +
" ) AS l_partkey_struct\n" +
" FROM lineitem\n" +
")\n" +
"SELECT\n" +
" CHECKSUM(l.l_partkey_struct)\n" +
"FROM lineitem_ex l,\n" +
" orders o\n" +
"WHERE\n" +
" l.orderkey = o.orderkey",
new byte[] {67, 108, 83, 92, 16, -5, 66, 65});
}
@Test
public void testMaps()
{
assertQuery("WITH lineitem_ex AS (\n" +
" SELECT\n" +
" partkey,\n" +
" suppkey,\n" +
" MAP(ARRAY[1, 2, 3], ARRAY[orderkey, partkey, suppkey]) AS l_map\n" +
" FROM lineitem\n" +
")\n" +
"SELECT\n" +
" CHECKSUM(l.l_map)\n" +
"FROM lineitem_ex l,\n" +
" partsupp p\n" +
"WHERE\n" +
" l.partkey = p.partkey\n" +
" AND l.suppkey = p.suppkey\n" +
" AND p.availqty < 1000",
new byte[] {-28, 76, -12, -42, 116, -118, -9, 46});
assertQuery("WITH lineitem_ex AS (\n" +
" SELECT\n" +
" partkey,\n" +
" suppkey,\n" +
" MAP(ARRAY[1, 2, 3], ARRAY[orderkey, partkey, suppkey]) AS l_map\n" +
" FROM lineitem\n" +
")\n" +
"SELECT\n" +
" CHECKSUM(l.l_map[1])\n" +
"FROM lineitem_ex l,\n" +
" partsupp p\n" +
"WHERE\n" +
" l.partkey = p.partkey\n" +
" AND l.suppkey = p.suppkey\n" +
" AND p.availqty < 1000\n",
new byte[] {121, 123, -114, -120, -18, 98, -124, 105});
}
private void assertQuery(String query, byte[] checksum)
{
assertEquals(computeActual(query).getOnlyValue(), checksum);
}
}