Files
impala/testdata/workloads/functional-query/queries/QueryTest/calcite.test
Fang-Yu Rao aba3a705a4 IMPALA-13982: Support regular views for Calcite planner in Impala
Before this patch, the Calcite planner in Impala only supported inline
views like 'temp' in the following query.

  select id from (
    select * from functional.alltypes
  ) as temp;

Regular views, on the other hand, were not supported. For instance, the
Calcite planner in Impala did not support regular views like
'functional.alltypes_view' created via the following statement and
hence queries against such regular views like
"select id from functional.alltypes_view" were not supported.

  CREATE VIEW functional.alltypes_view
  AS SELECT * FROM functional.alltypes;

This patch adds the support for regular views to the Calcite planner
via adding a ViewTable for each regular view in the given query
when populating the Calcite schema. This is similar to how regular
views are supported in PlannerTest#testView() at
https://github.com/apache/calcite/blob/main/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
where the regular view to be tested is added in
https://github.com/apache/calcite/blob/main/testkit/src/main/java/org/apache/calcite/test/CalciteAssert.java.
We do not have to use or extend ViewTableMacro in
Apache Calcite because the information about the data types
returned from a regular view is already available in its respective
FeTable. Therefore, there is no need to parse the SQL statement
representing the regular view and collect the metadata of tables
referenced by the regular view as done by ViewTableMacro.

The patch supports the following cases, where
'functional.alltypes_view' is a regular view defined as
"SELECT * FROM functional.alltypes".
1. select id from functional.alltypes_view.
2. select alltypes_view.id from functional.alltypes_view.
3. select functional.alltypes_view.id from functional.alltypes_view.

Joining a regular view with an HDFS table like the following is also
supported.

  select alltypestiny.id
  from functional.alltypes_view, functional.alltypestiny

Note that after this patch, queries against regular views are supported
only in the legacy catalog mode but not the local catalog mode. In
fact, queries against HDFS tables in the local catalog mode are not
supported yet by the Calcite planner either. We will deal with this in
IMPALA-14080.

Testing:
 - Added test cases mentioned above to calcite.test. This makes sure
   the test cases are supported when we start the Impala server with
   the flag of '--use_calcite_planner=true'.
 - Manually verified the test cases above are supported if we start
   the Impala server with the environment variable USE_CALCITE_PLANNER
   set to true and the query option use_calcite_planner set to 1.

Change-Id: I600aae816727ae942fb221fae84c2aac63ae1893
Reviewed-on: http://gerrit.cloudera.org:8080/22883
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
2025-06-24 22:30:15 +00:00

1063 lines
26 KiB
Plaintext

====
---- QUERY
-- this is a test for a comment line above a blank line
-- we do not care about the results, just the comment
select * from functional.alltypestiny;
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
create table calcite_alltypes as select * from functional.alltypes order by id limit 5;
---- RUNTIME_PROFILE
row_regex: .*PlannerType: OriginalPlanner.*
====
---- QUERY
select * from calcite_alltypes;
---- RESULTS
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,true,2,2,2,20,2.200000047683716,20.2,'01/01/09','2',2009-01-01 00:02:00.100000000,2009,1
3,false,3,3,3,30,3.299999952316284,30.3,'01/01/09','3',2009-01-01 00:03:00.300000000,2009,1
4,true,4,4,4,40,4.400000095367432,40.4,'01/01/09','4',2009-01-01 00:04:00.600000000,2009,1
---- TYPES
int,boolean,tinyint,smallint,int,bigint,float,double,string,string,timestamp,int,int
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select string_col, tinyint_col from calcite_alltypes;
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
---- RESULTS
'0',0
'1',1
'2',2
'3',3
'4',4
---- TYPES
string,tinyint
====
---- QUERY
select d1,d2,d3,d4,d5,d6 from functional.decimal_tbl;
---- RESULTS
1234,2222,1.2345678900,0.12345678900000000000000000000000000000,12345.78900,1
12345,333,123.4567890000,0.12345678900000000000000000000000000000,11.22000,1
12345,333,1234.5678900000,0.12345678900000000000000000000000000000,0.10000,1
132842,333,12345.6789000000,0.12345678900000000000000000000000000000,0.77889,1
2345,111,12.3456789000,0.12345678900000000000000000000000000000,3.14100,1
---- TYPES
decimal,decimal,decimal,decimal,decimal,decimal
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select * from functional.chars_tiny;
---- RESULTS
'1aaaa','1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb','1cccc'
'2aaaa','2bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb','2cccccc'
'3aaa ','3bbbbb ','3ccc'
'4aa ','4bbbb ','4cc'
'5a ','5bbb ','5c'
'6a ','6b ','6c'
'6a ','6b ','6c'
'NULL','NULL','NULL'
'a ','b ','c'
---- TYPES
# varchar shows up as string, just as it does in the chars.test file
char,char,string
---- HS2_TYPES
char,char,varchar
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select * from functional.date_tbl;
---- RESULTS
0,0001-01-01,0001-01-01
1,0001-12-31,0001-01-01
10,2017-11-28,1399-06-27
11,NULL,1399-06-27
12,2018-12-31,1399-06-27
2,0002-01-01,0001-01-01
20,0001-06-21,2017-11-27
21,0001-06-22,2017-11-27
22,0001-06-23,2017-11-27
23,0001-06-24,2017-11-27
24,0001-06-25,2017-11-27
25,0001-06-26,2017-11-27
26,0001-06-27,2017-11-27
27,0001-06-28,2017-11-27
28,0001-06-29,2017-11-27
29,2017-11-28,2017-11-27
3,1399-12-31,0001-01-01
30,9999-12-01,9999-12-31
31,9999-12-31,9999-12-31
4,2017-11-28,0001-01-01
5,9999-12-31,0001-01-01
6,NULL,0001-01-01
---- TYPES
int,date,date
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# creating a new table. We cannot use any functions at this point to
# manipulate the binary data (as the binary test currently does), so
# this just grabs the rows that can be checked.
create table ascii_binary as select * from functional.binary_tbl where id <= 4;
select * from ascii_binary;
---- RESULTS
1,'ascii','binary1'
2,'ascii','binary2'
3,'null','NULL'
4,'empty',''
---- TYPES
int,string,binary
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# Tiny test for Calcite. At the point of this commit, very few functions work. This
# is a test that includes one of the functions that does.
# The ultimate goal is to include all tests in the testing framework, so there is
# no need to be extensive about testing in this file.
select bigint_col, abs(cast(-3 as bigint)), abs(-3000000000) from functional.alltypestiny;
---- RESULTS
0,3,3000000000
10,3,3000000000
0,3,3000000000
10,3,3000000000
0,3,3000000000
10,3,3000000000
0,3,3000000000
10,3,3000000000
---- TYPES
bigint,bigint,bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# Tiny test for Calcite. At the point of this commit, very few functions work. This
# is a test that includes one of the functions that does.
# The ultimate goal is to include all tests in the testing framework, so there is
# no need to be extensive about testing in this file.
select cast(cast('2005-12-13 08:00:00' as string) AS TIMESTAMP) from functional.alltypestiny;
---- RESULTS
2005-12-13 08:00:00
2005-12-13 08:00:00
2005-12-13 08:00:00
2005-12-13 08:00:00
2005-12-13 08:00:00
2005-12-13 08:00:00
2005-12-13 08:00:00
2005-12-13 08:00:00
---- TYPES
timestamp
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select * from calcite_alltypes where bigint_col = 20;
---- RESULTS
2,true,2,2,2,20,2.200000047683716,20.2,'01/01/09','2',2009-01-01 00:02:00.100000000,2009,1
---- TYPES
int,boolean,tinyint,smallint,int,bigint,float,double,string,string,timestamp,int,int
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select tinyint_col from calcite_alltypes where bigint_col = 20;
---- RESULTS
2
---- TYPES
tinyint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# Values test
select abs(cast(-8 as bigint));
---- RESULTS
8
---- TYPES
bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select 'hello'
---- RESULTS
'hello'
---- TYPES
string
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# Union test
select 3 union select 4;
---- RESULTS
3
4
---- TYPES
tinyint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select * from (values (1)) union (values (2), (3));
---- RESULTS
1
2
3
---- TYPES
tinyint
====
---- QUERY
# sort test
select id, abs(bigint_col) from functional.alltypestiny where id > 3 order by abs(bigint_col), id;
---- RESULTS
4,0
6,0
5,10
7,10
---- TYPES
int, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
select id, abs(bigint_col) from functional.alltypestiny where id >= 3 order by abs(bigint_col), id;
---- RESULTS
4,0
6,0
3,10
5,10
7,10
---- TYPES
int, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
select id, abs(bigint_col) from functional.alltypestiny where id < 3 order by abs(bigint_col), id;
---- RESULTS
0,0
2,0
1,10
---- TYPES
int, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
select id, abs(bigint_col) from functional.alltypestiny where id <= 3 order by abs(bigint_col), id;
---- RESULTS
0,0
2,0
1,10
3,10
---- TYPES
int, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
select id, abs(bigint_col) from functional.alltypestiny where id != 3 order by abs(bigint_col), id;
---- RESULTS
0,0
2,0
4,0
6,0
1,10
5,10
7,10
---- TYPES
int, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
select id, abs(bigint_col) from functional.alltypestiny where id != 3 order by abs(bigint_col) desc, id;
---- RESULTS
1,10
5,10
7,10
0,0
2,0
4,0
6,0
---- TYPES
int, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
select group_str, some_nulls from functional.nullrows where group_str = 'a' order by some_nulls nulls first;
---- RESULTS
'a','NULL'
'a','NULL'
'a','NULL'
'a','NULL'
'a','a'
---- TYPES
string, string
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sort test
select group_str, some_nulls from functional.nullrows where group_str = 'a' order by some_nulls nulls last;
---- RESULTS
'a','a'
'a','NULL'
'a','NULL'
'a','NULL'
'a','NULL'
---- TYPES
string, string
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# limit test
select bigint_col from functional.alltypestiny where bigint_col = 0 limit 2;
---- RESULTS
0
0
---- TYPES
bigint
====
---- QUERY
# limit test
select id, abs(bigint_col) from functional.alltypestiny where id > 2 order by abs(bigint_col), id limit 3;
---- RESULTS
4,0
6,0
3,10
---- TYPES
int, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# aggregation test
select sum(bigint_col) from functional.alltypestiny;
---- RESULTS
40
---- TYPES
bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# aggregation test
select id, sum(bigint_col) from functional.alltypestiny group by id order by id;
---- RESULTS
0,0
1,10
2,0
3,10
4,0
5,10
6,0
7,10
---- TYPES
int, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# aggregation test
select id, sum(bigint_col) from functional.alltypestiny group by id
having sum(bigint_col) > cast(5 as bigint) order by id;
---- RESULTS
1,10
3,10
5,10
7,10
---- TYPES
int, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# aggregation test
select id, bigint_col, sum(bigint_col)
from functional.alltypestiny
group by grouping sets((id, bigint_col), (id), (bigint_col))
order by id, bigint_col;
---- RESULTS
0,0,0
0,NULL,0
1,10,10
1,NULL,10
2,0,0
2,NULL,0
3,10,10
3,NULL,10
4,0,0
4,NULL,0
5,10,10
5,NULL,10
6,0,0
6,NULL,0
7,10,10
7,NULL,10
NULL,0,0
NULL,10,40
---- TYPES
int, bigint, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# having test
select id, sum(bigint_col) from functional.alltypestiny group by id having sum(bigint_col) > cast(5 as bigint) order by id;
---- RESULTS
1,10
3,10
5,10
7,10
---- TYPES
int, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# join test
select a.id, a.bigint_col, b.bigint_col
from functional.alltypestiny a
join functional.alltypessmall b
on (a.id = b.id) order by a.id;
---- RESULTS
0,0,0
1,10,10
2,0,20
3,10,30
4,0,40
5,10,50
6,0,60
7,10,70
---- TYPES
int, bigint, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# join inequality test
select a.id, b.id, a.bigint_col, b.bigint_col
from functional.alltypestiny a
join functional.alltypessmall b
on (b.id < a.id)
where b.id = 0
order by a.id;
---- RESULTS
1,0,10,0
2,0,0,0
3,0,10,0
4,0,0,0
5,0,10,0
6,0,0,0
7,0,10,0
---- TYPES
int, int, bigint, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# cross join test
select a.id, b.id, a.bigint_col, b.bigint_col
from functional.alltypestiny a, functional.alltypessmall b
where b.id < 2
order by a.id, b.id;
---- RESULTS
0,0,0,0
0,1,0,10
1,0,10,0
1,1,10,10
2,0,0,0
2,1,0,10
3,0,10,0
3,1,10,10
4,0,0,0
4,1,0,10
5,0,10,0
5,1,10,10
6,0,0,0
6,1,0,10
7,0,10,0
7,1,10,10
---- TYPES
int, int, bigint, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# left outer join test
select a.id, a.bigint_col, b.bigint_col
from functional.alltypessmall a
left outer join functional.alltypestiny b
on (a.id = b.id)
where a.id < 20
order by a.id
---- RESULTS
0,0,0
1,10,10
2,20,0
3,30,10
4,40,0
5,50,10
6,60,0
7,70,10
8,80,NULL
9,90,NULL
10,0,NULL
11,10,NULL
12,20,NULL
13,30,NULL
14,40,NULL
15,50,NULL
16,60,NULL
17,70,NULL
18,80,NULL
19,90,NULL
---- TYPES
int, bigint, bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select bigint_col + bigint_col, int_col + int_col, smallint_col + smallint_col,
tinyint_col + tinyint_col, smallint_col + tinyint_col
from functional.alltypestiny;
---- RESULTS
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
20,2,2,2,2
20,2,2,2,2
20,2,2,2,2
20,2,2,2,2
---- TYPES
bigint, bigint, int, smallint, int
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select float_col + int_col, float_col + 3.0, 3.0 + 3.0
from functional.alltypestiny;
---- RESULTS
0.0,3.00000000,6.0
2.10000002384,4.10000002,6.0
0.0,3.00000000,6.0
2.10000002384,4.10000002,6.0
0.0,3.00000000,6.0
2.10000002384,4.10000002,6.0
0.0,3.00000000,6.0
2.10000002384,4.10000002,6.0
---- TYPES
double, decimal, decimal
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select bigint_col - bigint_col, int_col - int_col, smallint_col - smallint_col,
tinyint_col - tinyint_col, smallint_col - tinyint_col
from functional.alltypestiny;
---- RESULTS
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
---- TYPES
bigint, bigint, int, smallint, int
====
---- QUERY
select float_col - int_col, float_col - 3.0, 3.0 - 1.8
from functional.alltypestiny;
---- RESULTS
0.0,-3.00000000,1.2
0.1000000238418579,-1.89999998,1.2
0.0,-3.00000000,1.2
0.1000000238418579,-1.89999998,1.2
0.0,-3.00000000,1.2
0.1000000238418579,-1.89999998,1.2
0.0,-3.00000000,1.2
0.1000000238418579,-1.89999998,1.2
---- TYPES
double, decimal, decimal
====
---- QUERY
select bigint_col * bigint_col, int_col * int_col, smallint_col * smallint_col,
tinyint_col * tinyint_col, smallint_col * tinyint_col
from functional.alltypestiny;
---- RESULTS
0,0,0,0,0
100,1,1,1,1
0,0,0,0,0
100,1,1,1,1
0,0,0,0,0
100,1,1,1,1
0,0,0,0,0
100,1,1,1,1
---- TYPES
bigint, bigint, int, smallint, int
====
---- QUERY
select float_col * int_col, float_col * 3.0, 3.0 * 2.0
from functional.alltypestiny;
---- RESULTS
0,0,6.00
1.100000023841858,3.300000071525574,6.00
0,0,6.00
1.100000023841858,3.300000071525574,6.00
0,0,6.00
1.100000023841858,3.300000071525574,6.00
0,0,6.00
1.100000023841858,3.300000071525574,6.00
---- TYPES
double, double, decimal
====
---- QUERY
select bigint_col / bigint_col, int_col / int_col, smallint_col / smallint_col,
tinyint_col / tinyint_col
from functional.alltypestiny;
---- RESULTS
1,1,1,1
NaN,NaN,NaN,NaN
1,1,1,1
NaN,NaN,NaN,NaN
1,1,1,1
NaN,NaN,NaN,NaN
1,1,1,1
NaN,NaN,NaN,NaN
---- TYPES
double, double, double, double
====
---- QUERY
select float_col / int_col, float_col / 3.0, 3.0 / 2.0
from functional.alltypestiny;
---- RESULTS
1.100000023841858,0.36666667,1.500000
NaN,0.00000000,1.500000
1.100000023841858,0.36666667,1.500000
NaN,0.00000000,1.500000
1.100000023841858,0.36666667,1.500000
NaN,0.00000000,1.500000
1.100000023841858,0.36666667,1.500000
NaN,0.00000000,1.500000
---- TYPES
double, decimal, decimal
====
---- QUERY
select bigint_col % bigint_col, int_col % int_col, smallint_col % smallint_col,
tinyint_col % tinyint_col, smallint_col % tinyint_col
from functional.alltypestiny;
---- RESULTS
0,0,0,0,0
NULL,NULL,NULL,NULL,NULL
0,0,0,0,0
NULL,NULL,NULL,NULL,NULL
0,0,0,0,0
NULL,NULL,NULL,NULL,NULL
0,0,0,0,0
NULL,NULL,NULL,NULL,NULL
---- TYPES
bigint, int, smallint, tinyint, smallint
====
---- QUERY
select float_col % 3.0, 3.0 % 2.0
from functional.alltypestiny;
---- RESULTS
0.000000000,1.0
1.100000024,1.0
0.000000000,1.0
1.100000024,1.0
0.000000000,1.0
1.100000024,1.0
0.000000000,1.0
1.100000024,1.0
---- TYPES
decimal, decimal
====
---- QUERY
# Union test
select 3 union select 458;
---- RESULTS
3
458
---- TYPES
smallint
====
---- QUERY
# Union test
select 3 union select 458;
---- RESULTS
3
458
---- TYPES
smallint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# case test
select tinyint_col, case tinyint_col when 1 then 5 else 458 end from functional.alltypestiny;
---- RESULTS
0,458
0,458
0,458
0,458
1,5
1,5
1,5
1,5
---- TYPES
tinyint,smallint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# case test
select tinyint_col, case tinyint_col when 1 then 5 when 2 then 7 else 458 end from functional.alltypestiny;
---- RESULTS
0,458
0,458
0,458
0,458
1,5
1,5
1,5
1,5
---- TYPES
tinyint,smallint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# case test
select tinyint_col, case tinyint_col when 0 then 458 else 5 end from functional.alltypestiny;
---- RESULTS
0,458
0,458
0,458
0,458
1,5
1,5
1,5
1,5
---- TYPES
tinyint,smallint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# case test
select tinyint_col, case tinyint_col when 0 then 458 end from functional.alltypestiny;
---- RESULTS
0,458
0,458
0,458
0,458
1,NULL
1,NULL
1,NULL
1,NULL
---- TYPES
tinyint,smallint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# case test other format (the calcite rexnode should be the same)
select tinyint_col, case when tinyint_col=00 then 458 else 5 end from functional.alltypestiny;
---- RESULTS
0,458
0,458
0,458
0,458
1,5
1,5
1,5
1,5
---- TYPES
tinyint,smallint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# or test
select (tinyint_col = 459) or (tinyint_col = 458) or (tinyint_col = 1) from functional.alltypestiny;
---- RESULTS
false
false
false
false
true
true
true
true
---- TYPES
boolean
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# and test
select (tinyint_col != 459) and (tinyint_col != 458) and (tinyint_col = 1) from functional.alltypestiny;
---- RESULTS
false
false
false
false
true
true
true
true
---- TYPES
boolean
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# sum cast tinyint agg test
select sum(tinyint_col) from functional.alltypestiny;
---- RESULTS
4
---- TYPES
bigint
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# duplicate test from analytics-fn.test, delete when it is activated.
select date_part,
count(date_col) over (partition by date_part),
min(date_col) over (partition by date_part),
max(date_col) over (partition by date_part)
from functional.date_tbl
order by date_part;
---- RESULTS: VERIFY_IS_EQUAL_SORTED
0001-01-01,6,0001-01-01,9999-12-31
0001-01-01,6,0001-01-01,9999-12-31
0001-01-01,6,0001-01-01,9999-12-31
0001-01-01,6,0001-01-01,9999-12-31
0001-01-01,6,0001-01-01,9999-12-31
0001-01-01,6,0001-01-01,9999-12-31
0001-01-01,6,0001-01-01,9999-12-31
1399-06-27,2,2017-11-28,2018-12-31
1399-06-27,2,2017-11-28,2018-12-31
1399-06-27,2,2017-11-28,2018-12-31
2017-11-27,10,0001-06-21,2017-11-28
2017-11-27,10,0001-06-21,2017-11-28
2017-11-27,10,0001-06-21,2017-11-28
2017-11-27,10,0001-06-21,2017-11-28
2017-11-27,10,0001-06-21,2017-11-28
2017-11-27,10,0001-06-21,2017-11-28
2017-11-27,10,0001-06-21,2017-11-28
2017-11-27,10,0001-06-21,2017-11-28
2017-11-27,10,0001-06-21,2017-11-28
2017-11-27,10,0001-06-21,2017-11-28
9999-12-31,2,9999-12-01,9999-12-31
9999-12-31,2,9999-12-01,9999-12-31
---- TYPES
DATE, BIGINT, DATE, DATE
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
# Test ROWS windows with start boundaries
select id,
count(id) over (order by id rows between 3 preceding and 3 preceding) c1,
count(id) over (order by id rows between 3 preceding and 2 preceding) c2,
count(id) over (order by id rows between 3 preceding and 1 preceding) c3,
count(id) over (order by id rows between 3 preceding and current row) c4,
count(id) over (order by id rows between 3 preceding and 1 following) c5,
count(id) over (order by id rows between 3 preceding and 2 following) c6,
count(id) over (order by id rows between 3 preceding and 3 following) c7,
count(id) over (order by id rows between 2 preceding and 3 following) c8,
count(id) over (order by id rows between 1 preceding and 3 following) c9,
count(id) over (order by id rows between current row and 3 following) c10,
count(id) over (order by id rows between 1 following and 3 following) c11,
count(id) over (order by id rows between 2 following and 3 following) c12,
count(id) over (order by id rows between 3 following and 3 following) c13
from functional.alltypes where id < 8
---- RESULTS: VERIFY_IS_EQUAL_SORTED
0,0,0,0,1,2,3,4,4,4,4,3,2,1
1,0,0,1,2,3,4,5,5,5,4,3,2,1
2,0,1,2,3,4,5,6,6,5,4,3,2,1
3,1,2,3,4,5,6,7,6,5,4,3,2,1
4,1,2,3,4,5,6,7,6,5,4,3,2,1
5,1,2,3,4,5,6,6,5,4,3,2,1,0
6,1,2,3,4,5,5,5,4,3,2,1,0,0
7,1,2,3,4,4,4,4,3,2,1,0,0,0
---- TYPES
INT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT, BIGINT
====
---- QUERY
# make sure this parses
select '1' as 'hello';
---- RESULTS
'1'
---- TYPES
string
====
---- QUERY
# make sure this parses
select "1" as "hello";
---- RESULTS
'1'
---- TYPES
string
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
explain select * from functional.alltypestiny;
---- RESULTS: VERIFY_IS_SUBSET
row_regex:.*01:EXCHANGE.*
row_regex:.*00:SCAN.*
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
set explain_level=3;
explain select * from functional.alltypestiny;
---- RESULTS: VERIFY_IS_SUBSET
row_regex:.*01:EXCHANGE.*
row_regex:.*00:SCAN.*
row_regex:.*partitions=4/4.*
---- RUNTIME_PROFILE
row_regex: .*PlannerType: CalcitePlanner.*
====
---- QUERY
select count(*) from functional.alltypes_view;
---- RESULTS
7300
---- TYPES
BIGINT
====
---- QUERY
select * from functional.alltypes_view order by id limit 10;
---- RESULTS
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,true,2,2,2,20,2.200000047683716,20.2,'01/01/09','2',2009-01-01 00:02:00.100000000,2009,1
3,false,3,3,3,30,3.299999952316284,30.3,'01/01/09','3',2009-01-01 00:03:00.300000000,2009,1
4,true,4,4,4,40,4.400000095367432,40.4,'01/01/09','4',2009-01-01 00:04:00.600000000,2009,1
5,false,5,5,5,50,5.5,50.5,'01/01/09','5',2009-01-01 00:05:00.100000000,2009,1
6,true,6,6,6,60,6.599999904632568,60.59999999999999,'01/01/09','6',2009-01-01 00:06:00.150000000,2009,1
7,false,7,7,7,70,7.699999809265137,70.7,'01/01/09','7',2009-01-01 00:07:00.210000000,2009,1
8,true,8,8,8,80,8.800000190734863,80.8,'01/01/09','8',2009-01-01 00:08:00.280000000,2009,1
9,false,9,9,9,90,9.899999618530273,90.89999999999999,'01/01/09','9',2009-01-01 00:09:00.360000000,2009,1
---- TYPES
INT, BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, STRING, STRING, TIMESTAMP, INT, INT
====
---- QUERY
select id from functional.alltypes_view order by id limit 1;
---- RESULTS
0
---- TYPES
INT
====
---- QUERY
select alltypes_view.id from functional.alltypes_view order by id limit 1;
---- RESULTS
0
---- TYPES
INT
====
---- QUERY
select functional.alltypes_view.id from functional.alltypes_view order by id limit 1;
---- RESULTS
0
---- TYPES
INT
====
---- QUERY
select count(*) from functional.alltypes_view, functional.alltypestiny
where functional.alltypes_view.id = functional.alltypestiny.id;
---- RESULTS
8
---- TYPES
BIGINT
====
---- QUERY
select * from functional.alltypes_view, functional.alltypestiny
where functional.alltypes_view.id = functional.alltypestiny.id
order by functional.alltypes_view.id;
---- RESULTS
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1,0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1,1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,true,2,2,2,20,2.200000047683716,20.2,'01/01/09','2',2009-01-01 00:02:00.100000000,2009,1,2,true,0,0,0,0,0,0,'02/01/09','0',2009-02-01 00:00:00,2009,2
3,false,3,3,3,30,3.299999952316284,30.3,'01/01/09','3',2009-01-01 00:03:00.300000000,2009,1,3,false,1,1,1,10,1.100000023841858,10.1,'02/01/09','1',2009-02-01 00:01:00,2009,2
4,true,4,4,4,40,4.400000095367432,40.4,'01/01/09','4',2009-01-01 00:04:00.600000000,2009,1,4,true,0,0,0,0,0,0,'03/01/09','0',2009-03-01 00:00:00,2009,3
5,false,5,5,5,50,5.5,50.5,'01/01/09','5',2009-01-01 00:05:00.100000000,2009,1,5,false,1,1,1,10,1.100000023841858,10.1,'03/01/09','1',2009-03-01 00:01:00,2009,3
6,true,6,6,6,60,6.599999904632568,60.59999999999999,'01/01/09','6',2009-01-01 00:06:00.150000000,2009,1,6,true,0,0,0,0,0,0,'04/01/09','0',2009-04-01 00:00:00,2009,4
7,false,7,7,7,70,7.699999809265137,70.7,'01/01/09','7',2009-01-01 00:07:00.210000000,2009,1,7,false,1,1,1,10,1.100000023841858,10.1,'04/01/09','1',2009-04-01 00:01:00,2009,4
---- TYPES
INT, BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, STRING, STRING, TIMESTAMP, INT, INT, INT, BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, STRING, STRING, TIMESTAMP, INT, INT
====
---- QUERY
select id from functional.alltypes_view, functional.alltypestiny
where functional.alltypes_view.id = functional.alltypestiny.id
order by functional.alltypes_view.id;
---- CATCH
SqlValidatorException: Column 'ID' is ambiguous
====
---- QUERY
select alltypestiny.id from functional.alltypes_view, functional.alltypestiny
where functional.alltypes_view.id = functional.alltypestiny.id
order by functional.alltypes_view.id;
---- RESULTS
0
1
2
3
4
5
6
7
---- TYPES
INT
====
---- QUERY
select functional.alltypestiny.id from functional.alltypes_view, functional.alltypestiny
where functional.alltypes_view.id = functional.alltypestiny.id
order by id;
---- RESULTS
0
1
2
3
4
5
6
7
---- TYPES
INT
====
---- QUERY
# This test case makes sure that the definition of a regular view could be correctly
# parsed during view expansion even if database, table, and column names are enclosed in
# backticks.
select * from functional.alltypes_hive_view where id = 0;
---- RESULTS
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
---- TYPES
INT, BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, STRING, STRING, TIMESTAMP, INT, INT
====