You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by se...@apache.org on 2015/10/05 21:41:27 UTC
[08/23] hive git commit: HIVE-11913 : Verify existence of tests for
new changes in HiveQA (Szehon, reviewed by Sergio Pena)
http://git-wip-us.apache.org/repos/asf/hive/blob/bbb312f3/testutils/ptest2/src/test/resources/HIVE-11271.4.patch
----------------------------------------------------------------------
diff --git a/testutils/ptest2/src/test/resources/HIVE-11271.4.patch b/testutils/ptest2/src/test/resources/HIVE-11271.4.patch
new file mode 100644
index 0000000..4a07c37
--- /dev/null
+++ b/testutils/ptest2/src/test/resources/HIVE-11271.4.patch
@@ -0,0 +1,606 @@
+diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcCtx.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcCtx.java
+index c076d4e112a7edab2106f11fe6224247887313cf..8bcb464de540eda7c14a8c6783bb19a09071af7b 100644
+--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcCtx.java
++++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcCtx.java
+@@ -25,7 +25,9 @@
+
+ import org.apache.hadoop.hive.ql.exec.ColumnInfo;
+ import org.apache.hadoop.hive.ql.exec.CommonJoinOperator;
++import org.apache.hadoop.hive.ql.exec.FilterOperator;
+ import org.apache.hadoop.hive.ql.exec.Operator;
++import org.apache.hadoop.hive.ql.exec.OperatorFactory;
+ import org.apache.hadoop.hive.ql.exec.RowSchema;
+ import org.apache.hadoop.hive.ql.exec.SelectOperator;
+ import org.apache.hadoop.hive.ql.exec.UnionOperator;
+@@ -33,6 +35,7 @@
+ import org.apache.hadoop.hive.ql.lib.NodeProcessorCtx;
+ import org.apache.hadoop.hive.ql.parse.ParseContext;
+ import org.apache.hadoop.hive.ql.parse.SemanticException;
++import org.apache.hadoop.hive.ql.plan.ExprNodeColumnDesc;
+ import org.apache.hadoop.hive.ql.plan.ExprNodeDesc;
+ import org.apache.hadoop.hive.ql.plan.OperatorDesc;
+ import org.apache.hadoop.hive.ql.plan.SelectDesc;
+@@ -241,4 +244,65 @@ public ParseContext getParseContext() {
+ }
+ return columns;
+ }
++
++ /**
++ * If the input filter operator has direct child(ren) which are union operator,
++ * and the filter's column is not the same as union's
++ * create select operator between them. The select operator has same number of columns as
++ * pruned child operator.
++ *
++ * @param curOp
++ * The filter operator which need to handle children.
++ * @throws SemanticException
++ */
++ public void handleFilterUnionChildren(Operator<? extends OperatorDesc> curOp)
++ throws SemanticException {
++ if (curOp.getChildOperators() == null || !(curOp instanceof FilterOperator)) {
++ return;
++ }
++ List<String> parentPrunList = prunedColLists.get(curOp);
++ if(parentPrunList == null || parentPrunList.size() == 0) {
++ return;
++ }
++ FilterOperator filOp = (FilterOperator)curOp;
++ List<String> prunList = null;
++ List<Integer>[] childToParentIndex = null;
++
++ for (Operator<? extends OperatorDesc> child : curOp.getChildOperators()) {
++ if (child instanceof UnionOperator) {
++ prunList = prunedColLists.get(child);
++ if (prunList == null || prunList.size() == 0 || parentPrunList.size() == prunList.size()) {
++ continue;
++ }
++
++ ArrayList<ExprNodeDesc> exprs = new ArrayList<ExprNodeDesc>();
++ ArrayList<String> outputColNames = new ArrayList<String>();
++ Map<String, ExprNodeDesc> colExprMap = new HashMap<String, ExprNodeDesc>();
++ ArrayList<ColumnInfo> outputRS = new ArrayList<ColumnInfo>();
++ for (ColumnInfo colInfo : child.getSchema().getSignature()) {
++ if (!prunList.contains(colInfo.getInternalName())) {
++ continue;
++ }
++ ExprNodeDesc colDesc = new ExprNodeColumnDesc(colInfo.getType(),
++ colInfo.getInternalName(), colInfo.getTabAlias(), colInfo.getIsVirtualCol());
++ exprs.add(colDesc);
++ outputColNames.add(colInfo.getInternalName());
++ ColumnInfo newCol = new ColumnInfo(colInfo.getInternalName(), colInfo.getType(),
++ colInfo.getTabAlias(), colInfo.getIsVirtualCol(), colInfo.isHiddenVirtualCol());
++ newCol.setAlias(colInfo.getAlias());
++ outputRS.add(newCol);
++ colExprMap.put(colInfo.getInternalName(), colDesc);
++ }
++ SelectDesc select = new SelectDesc(exprs, outputColNames, false);
++ curOp.removeChild(child);
++ SelectOperator sel = (SelectOperator) OperatorFactory.getAndMakeChild(
++ select, new RowSchema(outputRS), curOp);
++ OperatorFactory.makeChild(sel, child);
++ sel.setColumnExprMap(colExprMap);
++
++ }
++
++ }
++ }
++
+ }
+diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java
+index ac4236c53adf6fa36ad43b2e9029d335f12efde2..2dc15f9f0ae96bdc7f33f3d97ad41c88117734d0 100644
+--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java
++++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java
+@@ -108,7 +108,7 @@ public Object process(Node nd, Stack<Node> stack, NodeProcessorCtx ctx,
+ filterOpPrunedColListsOrderPreserved);
+
+ pruneOperator(cppCtx, op, cppCtx.getPrunedColLists().get(op));
+-
++ cppCtx.handleFilterUnionChildren(op);
+ return null;
+ }
+ }
+diff --git a/ql/src/test/queries/clientpositive/unionall_unbalancedppd.q b/ql/src/test/queries/clientpositive/unionall_unbalancedppd.q
+new file mode 100644
+index 0000000000000000000000000000000000000000..0825c2d94d0f9815c7ff88549c77662e53adf928
+--- /dev/null
++++ b/ql/src/test/queries/clientpositive/unionall_unbalancedppd.q
+@@ -0,0 +1,120 @@
++set hive.optimize.ppd=true;
++drop table if exists union_all_bug_test_1;
++drop table if exists union_all_bug_test_2;
++create table if not exists union_all_bug_test_1
++(
++f1 int,
++f2 int
++);
++
++create table if not exists union_all_bug_test_2
++(
++f1 int
++);
++
++explain SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 1);
++
++SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 1);
++
++insert into table union_all_bug_test_1 values (1,1);
++insert into table union_all_bug_test_2 values (1);
++insert into table union_all_bug_test_1 values (0,0);
++insert into table union_all_bug_test_2 values (0);
++
++SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 1);
++
++SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 0);
++
++SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 1 or filter = 0);
++
++SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (f1 = 1);
+diff --git a/ql/src/test/results/clientpositive/unionall_unbalancedppd.q.out b/ql/src/test/results/clientpositive/unionall_unbalancedppd.q.out
+new file mode 100644
+index 0000000000000000000000000000000000000000..46828e9db772f20b47c3ae6aac1239bbcbabd752
+--- /dev/null
++++ b/ql/src/test/results/clientpositive/unionall_unbalancedppd.q.out
+@@ -0,0 +1,373 @@
++PREHOOK: query: drop table if exists union_all_bug_test_1
++PREHOOK: type: DROPTABLE
++POSTHOOK: query: drop table if exists union_all_bug_test_1
++POSTHOOK: type: DROPTABLE
++PREHOOK: query: drop table if exists union_all_bug_test_2
++PREHOOK: type: DROPTABLE
++POSTHOOK: query: drop table if exists union_all_bug_test_2
++POSTHOOK: type: DROPTABLE
++PREHOOK: query: create table if not exists union_all_bug_test_1
++(
++f1 int,
++f2 int
++)
++PREHOOK: type: CREATETABLE
++PREHOOK: Output: database:default
++PREHOOK: Output: default@union_all_bug_test_1
++POSTHOOK: query: create table if not exists union_all_bug_test_1
++(
++f1 int,
++f2 int
++)
++POSTHOOK: type: CREATETABLE
++POSTHOOK: Output: database:default
++POSTHOOK: Output: default@union_all_bug_test_1
++PREHOOK: query: create table if not exists union_all_bug_test_2
++(
++f1 int
++)
++PREHOOK: type: CREATETABLE
++PREHOOK: Output: database:default
++PREHOOK: Output: default@union_all_bug_test_2
++POSTHOOK: query: create table if not exists union_all_bug_test_2
++(
++f1 int
++)
++POSTHOOK: type: CREATETABLE
++POSTHOOK: Output: database:default
++POSTHOOK: Output: default@union_all_bug_test_2
++PREHOOK: query: explain SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 1)
++PREHOOK: type: QUERY
++POSTHOOK: query: explain SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 1)
++POSTHOOK: type: QUERY
++STAGE DEPENDENCIES:
++ Stage-1 is a root stage
++ Stage-0 depends on stages: Stage-1
++
++STAGE PLANS:
++ Stage: Stage-1
++ Map Reduce
++ Map Operator Tree:
++ TableScan
++ alias: union_all_bug_test_1
++ Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE
++ Filter Operator
++ predicate: (if(true, f1, f2) = 1) (type: boolean)
++ Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE
++ Select Operator
++ expressions: f1 (type: int)
++ outputColumnNames: _col0
++ Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE
++ Union
++ Statistics: Num rows: 2 Data size: 0 Basic stats: PARTIAL Column stats: NONE
++ File Output Operator
++ compressed: false
++ Statistics: Num rows: 2 Data size: 0 Basic stats: PARTIAL Column stats: NONE
++ table:
++ input format: org.apache.hadoop.mapred.TextInputFormat
++ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
++ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
++ TableScan
++ alias: union_all_bug_test_2
++ Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE
++ Filter Operator
++ predicate: false (type: boolean)
++ Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE
++ Select Operator
++ expressions: f1 (type: int)
++ outputColumnNames: _col0
++ Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE
++ Union
++ Statistics: Num rows: 2 Data size: 0 Basic stats: PARTIAL Column stats: NONE
++ File Output Operator
++ compressed: false
++ Statistics: Num rows: 2 Data size: 0 Basic stats: PARTIAL Column stats: NONE
++ table:
++ input format: org.apache.hadoop.mapred.TextInputFormat
++ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
++ serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
++
++ Stage: Stage-0
++ Fetch Operator
++ limit: -1
++ Processor Tree:
++ ListSink
++
++PREHOOK: query: SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 1)
++PREHOOK: type: QUERY
++PREHOOK: Input: default@union_all_bug_test_1
++PREHOOK: Input: default@union_all_bug_test_2
++#### A masked pattern was here ####
++POSTHOOK: query: SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 1)
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@union_all_bug_test_1
++POSTHOOK: Input: default@union_all_bug_test_2
++#### A masked pattern was here ####
++PREHOOK: query: insert into table union_all_bug_test_1 values (1,1)
++PREHOOK: type: QUERY
++PREHOOK: Input: default@values__tmp__table__1
++PREHOOK: Output: default@union_all_bug_test_1
++POSTHOOK: query: insert into table union_all_bug_test_1 values (1,1)
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@values__tmp__table__1
++POSTHOOK: Output: default@union_all_bug_test_1
++POSTHOOK: Lineage: union_all_bug_test_1.f1 EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
++POSTHOOK: Lineage: union_all_bug_test_1.f2 EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
++PREHOOK: query: insert into table union_all_bug_test_2 values (1)
++PREHOOK: type: QUERY
++PREHOOK: Input: default@values__tmp__table__2
++PREHOOK: Output: default@union_all_bug_test_2
++POSTHOOK: query: insert into table union_all_bug_test_2 values (1)
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@values__tmp__table__2
++POSTHOOK: Output: default@union_all_bug_test_2
++POSTHOOK: Lineage: union_all_bug_test_2.f1 EXPRESSION [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
++PREHOOK: query: insert into table union_all_bug_test_1 values (0,0)
++PREHOOK: type: QUERY
++PREHOOK: Input: default@values__tmp__table__3
++PREHOOK: Output: default@union_all_bug_test_1
++POSTHOOK: query: insert into table union_all_bug_test_1 values (0,0)
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@values__tmp__table__3
++POSTHOOK: Output: default@union_all_bug_test_1
++POSTHOOK: Lineage: union_all_bug_test_1.f1 EXPRESSION [(values__tmp__table__3)values__tmp__table__3.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
++POSTHOOK: Lineage: union_all_bug_test_1.f2 EXPRESSION [(values__tmp__table__3)values__tmp__table__3.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
++PREHOOK: query: insert into table union_all_bug_test_2 values (0)
++PREHOOK: type: QUERY
++PREHOOK: Input: default@values__tmp__table__4
++PREHOOK: Output: default@union_all_bug_test_2
++POSTHOOK: query: insert into table union_all_bug_test_2 values (0)
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@values__tmp__table__4
++POSTHOOK: Output: default@union_all_bug_test_2
++POSTHOOK: Lineage: union_all_bug_test_2.f1 EXPRESSION [(values__tmp__table__4)values__tmp__table__4.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
++PREHOOK: query: SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 1)
++PREHOOK: type: QUERY
++PREHOOK: Input: default@union_all_bug_test_1
++PREHOOK: Input: default@union_all_bug_test_2
++#### A masked pattern was here ####
++POSTHOOK: query: SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 1)
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@union_all_bug_test_1
++POSTHOOK: Input: default@union_all_bug_test_2
++#### A masked pattern was here ####
++1
++PREHOOK: query: SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 0)
++PREHOOK: type: QUERY
++PREHOOK: Input: default@union_all_bug_test_1
++PREHOOK: Input: default@union_all_bug_test_2
++#### A masked pattern was here ####
++POSTHOOK: query: SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 0)
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@union_all_bug_test_1
++POSTHOOK: Input: default@union_all_bug_test_2
++#### A masked pattern was here ####
++0
++1
++0
++PREHOOK: query: SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 1 or filter = 0)
++PREHOOK: type: QUERY
++PREHOOK: Input: default@union_all_bug_test_1
++PREHOOK: Input: default@union_all_bug_test_2
++#### A masked pattern was here ####
++POSTHOOK: query: SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (filter = 1 or filter = 0)
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@union_all_bug_test_1
++POSTHOOK: Input: default@union_all_bug_test_2
++#### A masked pattern was here ####
++1
++0
++1
++0
++PREHOOK: query: SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (f1 = 1)
++PREHOOK: type: QUERY
++PREHOOK: Input: default@union_all_bug_test_1
++PREHOOK: Input: default@union_all_bug_test_2
++#### A masked pattern was here ####
++POSTHOOK: query: SELECT f1
++FROM (
++
++SELECT
++f1
++, if('helloworld' like '%hello%' ,f1,f2) as filter
++FROM union_all_bug_test_1
++
++union all
++
++select
++f1
++, 0 as filter
++from union_all_bug_test_2
++) A
++WHERE (f1 = 1)
++POSTHOOK: type: QUERY
++POSTHOOK: Input: default@union_all_bug_test_1
++POSTHOOK: Input: default@union_all_bug_test_2
++#### A masked pattern was here ####
++1
++1
http://git-wip-us.apache.org/repos/asf/hive/blob/bbb312f3/testutils/ptest2/src/test/resources/HIVE-9377.1.patch
----------------------------------------------------------------------
diff --git a/testutils/ptest2/src/test/resources/HIVE-9377.1.patch b/testutils/ptest2/src/test/resources/HIVE-9377.1.patch
new file mode 100644
index 0000000..9d2d5b6
--- /dev/null
+++ b/testutils/ptest2/src/test/resources/HIVE-9377.1.patch
@@ -0,0 +1,25 @@
+Index: ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFInFile.java
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+--- ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFInFile.java (date 1421263954000)
++++ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFInFile.java (revision )
+@@ -140,6 +140,17 @@
+ }
+
+ @Override
++ public void copyToNewInstance(Object newInstance) throws UDFArgumentException {
++ super.copyToNewInstance(newInstance); // Asserts the class invariant. (Same types.)
++ GenericUDFInFile that = (GenericUDFInFile)newInstance;
++ if (that != this) {
++ that.set = (this.set == null ? null : (HashSet<String>)this.set.clone());
++ that.strObjectInspector = this.strObjectInspector;
++ that.fileObjectInspector = this.fileObjectInspector;
++ }
++ }
++
++ @Override
+ public String getDisplayString(String[] children) {
+ assert (children.length == 2);
+ return "in_file(" + children[0] + ", " + children[1] + ")";
http://git-wip-us.apache.org/repos/asf/hive/blob/bbb312f3/testutils/ptest2/src/test/resources/remove-test.patch
----------------------------------------------------------------------
diff --git a/testutils/ptest2/src/test/resources/remove-test.patch b/testutils/ptest2/src/test/resources/remove-test.patch
new file mode 100644
index 0000000..3eac9d7
--- /dev/null
+++ b/testutils/ptest2/src/test/resources/remove-test.patch
@@ -0,0 +1,33 @@
+diff --git a/ql/src/test/queries/clientpositive/join0.q b/ql/src/test/queries/clientpositive/join0.q
+deleted file mode 100644
+index 6ef6843..0000000
+--- a/ql/src/test/queries/clientpositive/join0.q
++++ /dev/null
+@@ -1,27 +0,0 @@
+-set hive.explain.user=false;
+--- JAVA_VERSION_SPECIFIC_OUTPUT
+--- SORT_QUERY_RESULTS
+-
+-EXPLAIN
+-SELECT src1.key as k1, src1.value as v1,
+- src2.key as k2, src2.value as v2 FROM
+- (SELECT * FROM src WHERE src.key < 10) src1
+- JOIN
+- (SELECT * FROM src WHERE src.key < 10) src2
+- SORT BY k1, v1, k2, v2;
+-
+-EXPLAIN FORMATTED
+-SELECT src1.key as k1, src1.value as v1,
+- src2.key as k2, src2.value as v2 FROM
+- (SELECT * FROM src WHERE src.key < 10) src1
+- JOIN
+- (SELECT * FROM src WHERE src.key < 10) src2
+- SORT BY k1, v1, k2, v2;
+-
+-SELECT src1.key as k1, src1.value as v1,
+- src2.key as k2, src2.value as v2 FROM
+- (SELECT * FROM src WHERE src.key < 10) src1
+- JOIN
+- (SELECT * FROM src WHERE src.key < 10) src2
+- SORT BY k1, v1, k2, v2;
+-