Files
impala/testdata/workloads/functional-query/queries/QueryTest/views-ddl.test
poojanilangekar e988c36bf0 IMPALA-6305: Allow column definitions in ALTER VIEW
This change adds support to change column definitions in ALTER VIEW
statements. This support only required minor changes in the parser
and the AlterViewStmt constructor.

Here's an example syntax:
    alter view foo (a, b comment 'helloworld') as
    select * from bar;

    describe foo;
    +------+--------+------------+
    | name | type   | comment    |
    +------+--------+------------+
    | a    | string |            |
    | b    | string | helloworld |
    +------+--------+------------+

The following tests were modified:
1. ParserTest - To check that the parser handles column definitions
   for alter view statements.
2. AnalyzerDDLTest - To ensure that the analyzer supports the
   change column definitions parsed.
3. TestDdlStatements - To verify the end-to-end functioning of
   ALTER VIEW statements with change column definitions.
4. AuthorizationTest - To ensure that alter table commands with
   column definitions check permissions as expected.

Change-Id: I6073444a814a24d97e80df15fcd39be2812f63fc
Reviewed-on: http://gerrit.cloudera.org:8080/10720
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2018-06-27 03:41:47 +00:00

351 lines
8.0 KiB
Plaintext

====
---- QUERY
# Create a simple view without renaming the columns.
create view $DATABASE.simple_view as
select * from functional.alltypes
---- RESULTS
'View has been created.'
====
---- QUERY
# Test that 'if not exists' swallows the error (view already exists)
create view if not exists $DATABASE.simple_view as
select * from functional.alltypesagg
---- RESULTS
'View already exists.'
====
---- QUERY
# Create another simple view with 'if not exists' on a subset of
# alltypes' columns using custom column names and comments
create view if not exists
$DATABASE.simple_view_sub (x, y comment 'hello', z) as
select int_col, string_col, timestamp_col from functional.alltypes
---- RESULTS
'View has been created.'
====
---- QUERY
# Create a view on a parquet table (Hive cannot create/read/write parquet)
create view $DATABASE.parquet_view as
select * from functional_parquet.alltypes where id < 20
---- RESULTS
'View has been created.'
====
---- QUERY
# Create a complex view with predicates, joins, aggregates and order by
create view $DATABASE.complex_view (abc comment 'agg', xyz comment 'gby') as
select count(a.bigint_col), b.string_col from
functional.alltypesagg a inner join functional.alltypestiny b
on a.id = b.id where a.bigint_col < 50
group by b.string_col having count(a.bigint_col) > 1
order by b.string_col limit 100
---- RESULTS
'View has been created.'
====
---- QUERY
# Create a view on a view
create view $DATABASE.view_view (aaa, bbb) as
select * from $DATABASE.complex_view
---- RESULTS
'View has been created.'
====
---- QUERY
# Test that the views are displayed by 'show tables'
show tables in $DATABASE
---- RESULTS
'complex_view'
'parquet_view'
'simple_view'
'simple_view_sub'
'view_view'
====
---- QUERY
# Test that the views can be described
describe $DATABASE.simple_view
---- RESULTS
'id','int',''
'bool_col','boolean',''
'tinyint_col','tinyint',''
'smallint_col','smallint',''
'int_col','int',''
'bigint_col','bigint',''
'float_col','float',''
'double_col','double',''
'date_string_col','string',''
'string_col','string',''
'timestamp_col','timestamp',''
'year','int',''
'month','int',''
---- TYPES
string,string,string
====
---- QUERY
describe $DATABASE.simple_view_sub
---- RESULTS
'x','int',''
'y','string','hello'
'z','timestamp',''
---- TYPES
string,string,string
====
---- QUERY
describe $DATABASE.complex_view
---- RESULTS
'abc','bigint','agg'
'xyz','string','gby'
---- TYPES
string,string,string
====
---- QUERY
describe $DATABASE.parquet_view
---- RESULTS
'id','int',''
'bool_col','boolean',''
'tinyint_col','tinyint',''
'smallint_col','smallint',''
'int_col','int',''
'bigint_col','bigint',''
'float_col','float',''
'double_col','double',''
'date_string_col','string',''
'string_col','string',''
'timestamp_col','timestamp',''
'year','int',''
'month','int',''
---- TYPES
string,string,string
====
---- QUERY
describe $DATABASE.view_view
---- RESULTS
'aaa','bigint',''
'bbb','string',''
---- TYPES
string,string,string
====
---- QUERY
# Test that the views can be queried.
select count(*) from $DATABASE.simple_view
---- RESULTS
7300
---- TYPES
bigint
====
---- QUERY
select count(*) from $DATABASE.simple_view_sub
---- RESULTS
7300
---- TYPES
bigint
====
---- QUERY
select count(*) from $DATABASE.complex_view
---- RESULTS
2
---- TYPES
bigint
====
---- QUERY
select count(*) from $DATABASE.parquet_view
---- RESULTS
20
---- TYPES
bigint
====
---- QUERY
select count(*) from $DATABASE.view_view
---- RESULTS
2
---- TYPES
bigint
====
---- QUERY
# Test dropping a view
drop view $DATABASE.simple_view_sub
---- RESULTS
'View has been dropped.'
====
---- QUERY
# Test that the view is gone
show tables in $DATABASE
---- RESULTS
'complex_view'
'parquet_view'
'simple_view'
'view_view'
====
---- QUERY
# Test 'if exists' for dropping a view (view does not exist)
drop view if exists $DATABASE.bad_view
---- RESULTS
'View does not exist.'
====
---- QUERY
# Test 'if exists' does not drop a table with same name
create table $DATABASE.drop_tbl_test(a int)
---- RESULTS
'Table has been created.'
====
---- QUERY
drop view if exists $DATABASE.drop_tbl_test
---- RESULTS
'Drop view is not allowed on a table.'
====
---- QUERY
# Test drop table 'if exists' does not drop a view with same name.
# We try to drop a table with name complex_view and it should should
# still be listed in the subsequent show tables output (as a view).
drop table if exists $DATABASE.complex_view
---- RESULTS
'Drop table is not allowed on a view.'
====
---- QUERY
# Test that the table is present
show tables in $DATABASE
---- RESULTS
'drop_tbl_test'
'complex_view'
'parquet_view'
'simple_view'
'view_view'
====
---- QUERY
# Test renaming a view
alter view $DATABASE.view_view rename to $DATABASE.view_on_view
---- RESULTS
'Renaming was successful.'
====
---- QUERY
# Test renaming a parquet view
alter view $DATABASE.parquet_view rename to $DATABASE.new_parquet_view
---- RESULTS
'Renaming was successful.'
====
---- QUERY
# Test that the view was renamed
show tables in $DATABASE
---- RESULTS
'drop_tbl_test'
'complex_view'
'new_parquet_view'
'simple_view'
'view_on_view'
====
---- QUERY
# Alter a view with predicates, joins, aggregates and order by
alter view $DATABASE.complex_view (aaa comment 'abc', bbb comment 'xyz') as
select count(a.bigint_col), b.string_col from
functional.alltypesagg a inner join functional.alltypestiny b
on a.id = b.id where a.bigint_col < 50
group by b.string_col having count(a.bigint_col) > 1
order by b.string_col limit 100
---- RESULTS
'View has been altered.'
====
---- QUERY
# Test verifying the description of the altered view
describe $DATABASE.complex_view
---- RESULTS
'aaa','bigint','abc'
'bbb','string','xyz'
---- TYPES
string,string,string
====
---- QUERY
# Test querying the altered view
select * from $DATABASE.complex_view;
---- RESULTS
2,'0'
2,'1'
---- TYPES
bigint,string
====
---- QUERY
# Alter a view on a view
alter view $DATABASE.view_on_view (foo, bar) as
select * from $DATABASE.complex_view
---- RESULTS
'View has been altered.'
====
---- QUERY
# Test describing the description of the altered view
describe $DATABASE.view_on_view
---- RESULTS
'foo','bigint',''
'bar','string',''
---- TYPES
string,string,string
====
---- QUERY
# Test querying the altered view
select foo, bar from $DATABASE.view_on_view;
---- RESULTS
2,'0'
2,'1'
---- TYPES
bigint,string
====
---- QUERY
# Test altering a with a new definition
alter view $DATABASE.new_parquet_view as
select bigint_col, string_col from functional_parquet.alltypesagg
where bigint_col is null limit 10
---- RESULTS
'View has been altered.'
====
---- QUERY
# Test querying the altered view
select count(bigint_col), count(string_col) from $DATABASE.new_parquet_view
---- RESULTS
0,10
---- TYPES
bigint,bigint
====
---- QUERY
# Create a view on a constant select and try to query it.
create view $DATABASE.const_view
as select 1, 'a', cast(10.0 as float)
---- RESULTS
'View has been created.'
====
---- QUERY
select * from $DATABASE.const_view
---- RESULTS
1,'a',10
---- TYPES
tinyint,string,float
====
---- QUERY
# Test that parentheses are preserved in view creation.
# If the parentheses were ignored the query would return a count > 0.
create view $DATABASE.paren_view as
select count(*) from functional.alltypessmall
where true and (true or false) and false
---- RESULTS
'View has been created.'
====
---- QUERY
# Test that parentheses are preserved in view creation.
select * from $DATABASE.paren_view
---- RESULTS
0
---- TYPES
bigint
====
---- QUERY
# Create a view with decimal columns. Regression test for IMPALA-1021.
create view $DATABASE.decimal_view as
select * from functional.decimal_tbl
---- RESULTS
'View has been created.'
====
---- QUERY
# Query a view with decimal columns. Regression test for IMPALA-1021.
select * from $DATABASE.decimal_view
---- 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