diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ddl/view/create/CreateViewAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/ddl/view/create/CreateViewAnalyzer.java index eb07e3732137..60b123dbb7bd 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/ddl/view/create/CreateViewAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/ddl/view/create/CreateViewAnalyzer.java @@ -111,6 +111,12 @@ private String getExpandedText(List imposedSchema, ASTNode select, } String expandedText = ctx.getTokenRewriteStream().toString(select.getTokenStartIndex(), select.getTokenStopIndex()); + String trimmedExpandedText = expandedText.trim(); + while (trimmedExpandedText.startsWith("(") && trimmedExpandedText.endsWith(")")) { + trimmedExpandedText = trimmedExpandedText.substring(1, trimmedExpandedText.length() - 1); + expandedText = trimmedExpandedText; + trimmedExpandedText = trimmedExpandedText.trim(); + } if (imposedSchema != null) { // Merge the names from the imposed schema into the types from the derived schema. diff --git a/ql/src/test/queries/clientpositive/viewdef_within_brackets.q b/ql/src/test/queries/clientpositive/viewdef_within_brackets.q new file mode 100644 index 000000000000..00660c097e49 --- /dev/null +++ b/ql/src/test/queries/clientpositive/viewdef_within_brackets.q @@ -0,0 +1,15 @@ +create table tbl_x (a int, b string); +insert into tbl_x values (1, 'Prince'); insert into tbl_x values (2, 'John'); +create view vw_x (b) as (select a from tbl_x); +select * from vw_x; + +create view vw_y (col_b) as ( + ( ( select b from tbl_x ) ) + ); +select * from vw_y; + +create view vw_z as ( + ( ( select * from tbl_x ) + ) + ); +select * from vw_z; \ No newline at end of file diff --git a/ql/src/test/results/clientpositive/llap/viewdef_within_brackets.q.out b/ql/src/test/results/clientpositive/llap/viewdef_within_brackets.q.out new file mode 100644 index 000000000000..1ee7b40cc0d3 --- /dev/null +++ b/ql/src/test/results/clientpositive/llap/viewdef_within_brackets.q.out @@ -0,0 +1,108 @@ +PREHOOK: query: create table tbl_x (a int, b string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@tbl_x +POSTHOOK: query: create table tbl_x (a int, b string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@tbl_x +PREHOOK: query: insert into tbl_x values (1, 'Prince') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@tbl_x +POSTHOOK: query: insert into tbl_x values (1, 'Prince') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@tbl_x +POSTHOOK: Lineage: tbl_x.a SCRIPT [] +POSTHOOK: Lineage: tbl_x.b SCRIPT [] +PREHOOK: query: insert into tbl_x values (2, 'John') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@tbl_x +POSTHOOK: query: insert into tbl_x values (2, 'John') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@tbl_x +POSTHOOK: Lineage: tbl_x.a SCRIPT [] +POSTHOOK: Lineage: tbl_x.b SCRIPT [] +PREHOOK: query: create view vw_x (b) as (select a from tbl_x) +PREHOOK: type: CREATEVIEW +PREHOOK: Input: default@tbl_x +PREHOOK: Output: database:default +PREHOOK: Output: default@vw_x +POSTHOOK: query: create view vw_x (b) as (select a from tbl_x) +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: default@tbl_x +POSTHOOK: Output: database:default +POSTHOOK: Output: default@vw_x +POSTHOOK: Lineage: vw_x.b SIMPLE [(tbl_x)tbl_x.FieldSchema(name:a, type:int, comment:null), ] +PREHOOK: query: select * from vw_x +PREHOOK: type: QUERY +PREHOOK: Input: default@tbl_x +PREHOOK: Input: default@vw_x +#### A masked pattern was here #### +POSTHOOK: query: select * from vw_x +POSTHOOK: type: QUERY +POSTHOOK: Input: default@tbl_x +POSTHOOK: Input: default@vw_x +#### A masked pattern was here #### +1 +2 +PREHOOK: query: create view vw_y (col_b) as ( + ( ( select b from tbl_x ) ) + ) +PREHOOK: type: CREATEVIEW +PREHOOK: Input: default@tbl_x +PREHOOK: Output: database:default +PREHOOK: Output: default@vw_y +POSTHOOK: query: create view vw_y (col_b) as ( + ( ( select b from tbl_x ) ) + ) +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: default@tbl_x +POSTHOOK: Output: database:default +POSTHOOK: Output: default@vw_y +POSTHOOK: Lineage: vw_y.col_b SIMPLE [(tbl_x)tbl_x.FieldSchema(name:b, type:string, comment:null), ] +PREHOOK: query: select * from vw_y +PREHOOK: type: QUERY +PREHOOK: Input: default@tbl_x +PREHOOK: Input: default@vw_y +#### A masked pattern was here #### +POSTHOOK: query: select * from vw_y +POSTHOOK: type: QUERY +POSTHOOK: Input: default@tbl_x +POSTHOOK: Input: default@vw_y +#### A masked pattern was here #### +Prince +John +PREHOOK: query: create view vw_z as ( + ( ( select * from tbl_x ) + ) + ) +PREHOOK: type: CREATEVIEW +PREHOOK: Input: default@tbl_x +PREHOOK: Output: database:default +PREHOOK: Output: default@vw_z +POSTHOOK: query: create view vw_z as ( + ( ( select * from tbl_x ) + ) + ) +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: default@tbl_x +POSTHOOK: Output: database:default +POSTHOOK: Output: default@vw_z +POSTHOOK: Lineage: vw_z.a SIMPLE [(tbl_x)tbl_x.FieldSchema(name:a, type:int, comment:null), ] +POSTHOOK: Lineage: vw_z.b SIMPLE [(tbl_x)tbl_x.FieldSchema(name:b, type:string, comment:null), ] +PREHOOK: query: select * from vw_z +PREHOOK: type: QUERY +PREHOOK: Input: default@tbl_x +PREHOOK: Input: default@vw_z +#### A masked pattern was here #### +POSTHOOK: query: select * from vw_z +POSTHOOK: type: QUERY +POSTHOOK: Input: default@tbl_x +POSTHOOK: Input: default@vw_z +#### A masked pattern was here #### +1 Prince +2 John