diff --git a/fe/src/main/java/com/cloudera/impala/analysis/DescriptorTable.java b/fe/src/main/java/com/cloudera/impala/analysis/DescriptorTable.java index 6c7029b1b..596c7e081 100644 --- a/fe/src/main/java/com/cloudera/impala/analysis/DescriptorTable.java +++ b/fe/src/main/java/com/cloudera/impala/analysis/DescriptorTable.java @@ -20,7 +20,9 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; +import com.cloudera.impala.catalog.InlineView; import com.cloudera.impala.catalog.Table; +import com.cloudera.impala.catalog.View; import com.cloudera.impala.thrift.TDescriptorTable; import com.google.common.collect.Sets; @@ -86,17 +88,19 @@ public class DescriptorTable { // in the descriptor table just for type checking, which we need to skip if (tupleD.getIsMaterialized()) { result.addToTupleDescriptors(tupleD.toThrift()); - // an inline view of a constant select has a materialized tuple - // but its table has no id - if (tupleD.getTable() != null && tupleD.getTable().getId() != null) { - referencedTbls.add(tupleD.getTable()); + // views and inline views have a materialized tuple if they are defined by a + // constant select. they do not require or produce a thrift table descriptor. + Table table = tupleD.getTable(); + if (table != null && + !(table instanceof View) && !(table instanceof InlineView)) { + referencedTbls.add(table); } for (SlotDescriptor slotD: tupleD.getSlots()) { result.addToSlotDescriptors(slotD.toThrift()); } } } - for (Table table : referencedTables) { + for (Table table: referencedTables) { referencedTbls.add(table); } for (Table tbl: referencedTbls) { diff --git a/testdata/workloads/functional-query/queries/QueryTest/views-ddl.test b/testdata/workloads/functional-query/queries/QueryTest/views-ddl.test index 945d4c268..37a885184 100644 --- a/testdata/workloads/functional-query/queries/QueryTest/views-ddl.test +++ b/testdata/workloads/functional-query/queries/QueryTest/views-ddl.test @@ -220,4 +220,13 @@ select count(bigint_col), count(string_col) from ddl_test_db.new_parquet_view 0,10 ---- TYPES bigint,bigint +==== +---- QUERY +# Create a view on a constant select and try to query it. +create view ddl_test_db.const_view +as select 1, 'a', 10.0 +---- RESULTS +1,'a',10.0 +---- TYPES +tinyint,string,float ==== \ No newline at end of file