This is an automated email from the ASF dual-hosted git repository.

hashutosh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 779c42f  HIVE-23435 : Full outer join result is missing rows (Mustafa 
Iman via Ashutosh Chauhan)
779c42f is described below

commit 779c42fa3c73f41785eb3266f3438ab9e2a75032
Author: Mustafa Iman <mustafai...@gmail.com>
AuthorDate: Mon Jun 1 10:26:14 2020 -0700

    HIVE-23435 : Full outer join result is missing rows (Mustafa Iman via 
Ashutosh Chauhan)
    
    Signed-off-by: Ashutosh Chauhan <hashut...@apache.org>
---
 .../hadoop/hive/ql/exec/CommonJoinOperator.java    |  18 +++-
 .../hive/ql/exec/CommonMergeJoinOperator.java      |   2 +-
 .../apache/hadoop/hive/ql/exec/JoinOperator.java   |   1 +
 .../hadoop/hive/ql/exec/MapJoinOperator.java       |   1 +
 .../hadoop/hive/ql/exec/SMBMapJoinOperator.java    |   1 +
 .../ql/exec/vector/VectorMapJoinBaseOperator.java  |   2 -
 .../ql/exec/vector/VectorSMBMapJoinOperator.java   |   1 -
 .../clientpositive/vector_full_outer_join2.q       |  28 +++++
 .../results/clientpositive/llap/join_1to1.q.out    |  84 ++++++++++++---
 .../llap/vector_full_outer_join2.q.out             | 113 +++++++++++++++++++++
 10 files changed, 233 insertions(+), 18 deletions(-)

diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java
index 2d76848..7a7c8a5 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java
@@ -341,6 +341,8 @@ public abstract class CommonJoinOperator<T extends 
JoinDesc> extends
     forwardCache = new Object[totalSz];
     aliasFilterTags = new short[numAliases];
     Arrays.fill(aliasFilterTags, (byte)0xff);
+    aliasFilterTagsNext = new short[numAliases];
+    Arrays.fill(aliasFilterTagsNext, (byte) 0xff);
 
     filterTags = new short[numAliases];
     skipVectors = new boolean[numAliases][];
@@ -478,6 +480,7 @@ public abstract class CommonJoinOperator<T extends 
JoinDesc> extends
    *   100, 30 :   N,  N
    */
   protected transient short[] aliasFilterTags;
+  protected transient short[] aliasFilterTagsNext;
 
   // all evaluation should be processed here for valid aliasFilterTags
   //
@@ -491,11 +494,21 @@ public abstract class CommonJoinOperator<T extends 
JoinDesc> extends
       short filterTag = JoinUtil.isFiltered(row, joinFilters[alias],
           joinFilterObjectInspectors[alias], filterMaps[alias]);
       nr.add(new ShortWritable(filterTag));
-      aliasFilterTags[alias] &= filterTag;
     }
     return nr;
   }
 
+  protected void addToAliasFilterTags(byte alias, List<Object> object, boolean 
isNextGroup) {
+    boolean hasFilter = hasFilter(alias);
+    if (hasFilter) {
+      if (isNextGroup) {
+        aliasFilterTagsNext[alias] &= ((ShortWritable) 
(object.get(object.size() - 1))).get();
+      } else {
+        aliasFilterTags[alias] &= ((ShortWritable) (object.get(object.size() - 
1))).get();
+      }
+    }
+  }
+
   // fill forwardCache with skipvector
   // returns whether a record was forwarded
   private boolean createForwardJoinObject(boolean[] skip) throws HiveException 
{
@@ -961,7 +974,8 @@ public abstract class CommonJoinOperator<T extends 
JoinDesc> extends
         genJoinObject();
       }
     }
-    Arrays.fill(aliasFilterTags, (byte)0xff);
+    System.arraycopy(aliasFilterTagsNext, 0, aliasFilterTags, 0, 
aliasFilterTagsNext.length);
+    Arrays.fill(aliasFilterTagsNext, (byte) 0xff);
   }
 
   protected void reportProgress() {
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonMergeJoinOperator.java 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonMergeJoinOperator.java
index 581577e..0d9dc46 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonMergeJoinOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonMergeJoinOperator.java
@@ -46,7 +46,6 @@ import org.apache.hadoop.hive.ql.plan.OperatorDesc;
 import org.apache.hadoop.hive.ql.plan.api.OperatorType;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
 import 
org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils.ObjectInspectorCopyOption;
-import org.apache.hadoop.hive.serde2.objectinspector.StructField;
 import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
 import org.apache.hadoop.io.WritableComparable;
 import org.apache.hadoop.io.WritableComparator;
@@ -242,6 +241,7 @@ public class CommonMergeJoinOperator extends 
AbstractMapJoinOperator<CommonMerge
 
     //have we reached a new key group?
     boolean nextKeyGroup = processKey(alias, key);
+    addToAliasFilterTags(alias, value, nextKeyGroup);
     if (nextKeyGroup) {
       //assert this.nextGroupStorage[alias].size() == 0;
       this.nextGroupStorage[alias].addRow(value);
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java
index 451ba1f..9661bc9 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java
@@ -83,6 +83,7 @@ public class JoinOperator extends 
CommonJoinOperator<JoinDesc> implements Serial
       alias = (byte) tag;
 
       List<Object> nr = getFilteredValue(alias, row);
+      addToAliasFilterTags(alias, nr, false);
 
       if (handleSkewJoin) {
         skewJoinKeyContext.handleSkew(tag);
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java
index 07b1fba..489d09f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java
@@ -582,6 +582,7 @@ public class MapJoinOperator extends 
AbstractMapJoinOperator<MapJoinDesc> implem
       }
       if (joinNeeded) {
         List<Object> value = getFilteredValue(alias, row);
+        addToAliasFilterTags(alias, value, false);
         // Add the value to the ArrayList
         storage[alias].addRow(value);
         // generate the output records
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java
index c09bf53..55d6a6a 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java
@@ -288,6 +288,7 @@ public class SMBMapJoinOperator extends 
AbstractMapJoinOperator<SMBJoinDesc> imp
 
     //have we reached a new key group?
     boolean nextKeyGroup = processKey(alias, key);
+    addToAliasFilterTags(alias, value, nextKeyGroup);
     if (nextKeyGroup) {
       //assert this.nextGroupStorage[alias].size() == 0;
       this.nextGroupStorage[alias].addRow(value);
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorMapJoinBaseOperator.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorMapJoinBaseOperator.java
index e80a3e2..b39f802 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorMapJoinBaseOperator.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorMapJoinBaseOperator.java
@@ -20,11 +20,9 @@ package org.apache.hadoop.hive.ql.exec.vector;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.Future;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorSMBMapJoinOperator.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorSMBMapJoinOperator.java
index bef1a79..b0a5138 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorSMBMapJoinOperator.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorSMBMapJoinOperator.java
@@ -37,7 +37,6 @@ import org.apache.hadoop.hive.ql.plan.ExprNodeDesc;
 import org.apache.hadoop.hive.ql.plan.OperatorDesc;
 import org.apache.hadoop.hive.ql.plan.SMBJoinDesc;
 import org.apache.hadoop.hive.ql.plan.VectorDesc;
-import org.apache.hadoop.hive.ql.plan.VectorMapJoinDesc;
 import org.apache.hadoop.hive.ql.plan.VectorSMBJoinDesc;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
diff --git a/ql/src/test/queries/clientpositive/vector_full_outer_join2.q 
b/ql/src/test/queries/clientpositive/vector_full_outer_join2.q
new file mode 100644
index 0000000..fefd0e0
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/vector_full_outer_join2.q
@@ -0,0 +1,28 @@
+create table t_letters (z char(12), x int, y int);
+
+insert into t_letters values
+('one', 1, 50),
+('two', 2, 30),
+('three', 3, 30),
+('four', 4, 60),
+('five', 5, 70),
+('six', 6, 80);
+
+create table t_roman (z char(12), x int, y int);
+
+insert into t_roman values
+('I', 1, 50),
+('II', 2, 30),
+('III', 3, 30),
+('IV', 4, 60),
+('V', 5, 70),
+('VI', 6, 80);
+
+
+select x1.`z`, x1.`x`, x1.`y`,
+       x2.`z`, x2.`x`, x2.`y`
+from t_letters x1 full outer join t_roman x2 on (x1.`x` > 3) and (x2.`x` < 4) 
and (x1.`x` = x2.`x`);
+
+select x1.`z`, x1.`x`, x1.`y`,
+       x2.`z`, x2.`x`, x2.`y`
+from t_letters x1 full outer join t_roman x2 on (x1.`x` > 2) and (x2.`x` < 4) 
and (x1.`x` = x2.`x`);
\ No newline at end of file
diff --git a/ql/src/test/results/clientpositive/llap/join_1to1.q.out 
b/ql/src/test/results/clientpositive/llap/join_1to1.q.out
index 5619687..8495894 100644
--- a/ql/src/test/results/clientpositive/llap/join_1to1.q.out
+++ b/ql/src/test/results/clientpositive/llap/join_1to1.q.out
@@ -132,7 +132,6 @@ POSTHOOK: Input: default@join_1to1_2
 30     10030   66      NULL    NULL    NULL
 35     10035   88      NULL    NULL    NULL
 40     10040   66      40      10040   66
-40     10040   66      NULL    NULL    NULL
 40     10040   88      NULL    NULL    NULL
 5      10005   66      5       10005   66
 50     10050   66      50      10050   66
@@ -143,17 +142,22 @@ POSTHOOK: Input: default@join_1to1_2
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
+70     10040   66      NULL    NULL    NULL
+70     10040   66      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 NULL   10050   66      NULL    NULL    NULL
 NULL   NULL    66      NULL    NULL    NULL
 NULL   NULL    NULL    10      10010   66
+NULL   NULL    NULL    25      10025   66
 NULL   NULL    NULL    30      10030   88
 NULL   NULL    NULL    35      10035   88
 NULL   NULL    NULL    40      10040   88
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    70      10040   88
 NULL   NULL    NULL    70      10040   88
+NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    NULL    10050   66
 NULL   NULL    NULL    NULL    NULL    66
 PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on 
a.key1 = b.key1 and a.key2 = b.key2
@@ -218,7 +222,6 @@ POSTHOOK: Input: default@join_1to1_2
 30     10030   66      NULL    NULL    NULL
 35     10035   88      NULL    NULL    NULL
 40     10040   66      40      10040   66
-40     10040   66      NULL    NULL    NULL
 40     10040   88      NULL    NULL    NULL
 5      10005   66      5       10005   66
 50     10050   66      50      10050   66
@@ -229,17 +232,22 @@ POSTHOOK: Input: default@join_1to1_2
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
+70     10040   66      NULL    NULL    NULL
+70     10040   66      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 NULL   10050   66      NULL    NULL    NULL
 NULL   NULL    66      NULL    NULL    NULL
 NULL   NULL    NULL    10      10010   66
+NULL   NULL    NULL    25      10025   66
 NULL   NULL    NULL    30      10030   88
 NULL   NULL    NULL    35      10035   88
 NULL   NULL    NULL    40      10040   88
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    70      10040   88
 NULL   NULL    NULL    70      10040   88
+NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    NULL    10050   66
 NULL   NULL    NULL    NULL    NULL    66
 PREHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = 
b.key1
@@ -344,7 +352,6 @@ POSTHOOK: Input: default@join_1to1_2
 30     10030   66      NULL    NULL    NULL
 35     10035   88      NULL    NULL    NULL
 40     10040   66      40      10040   66
-40     10040   66      NULL    NULL    NULL
 40     10040   88      NULL    NULL    NULL
 5      10005   66      5       10005   66
 50     10050   66      50      10050   66
@@ -355,18 +362,25 @@ POSTHOOK: Input: default@join_1to1_2
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
+70     10040   66      NULL    NULL    NULL
+70     10040   66      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 NULL   10050   66      NULL    NULL    NULL
 NULL   NULL    66      NULL    NULL    NULL
 NULL   NULL    NULL    10      10010   66
+NULL   NULL    NULL    25      10025   66
 NULL   NULL    NULL    30      10030   88
 NULL   NULL    NULL    35      10035   88
 NULL   NULL    NULL    40      10040   88
+NULL   NULL    NULL    50      10050   66
+NULL   NULL    NULL    50      10050   66
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    70      10040   88
 NULL   NULL    NULL    70      10040   88
+NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    NULL    10050   66
 NULL   NULL    NULL    NULL    NULL    66
 PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on 
a.key1 = b.key1 and a.key2 = b.key2
@@ -431,7 +445,6 @@ POSTHOOK: Input: default@join_1to1_2
 30     10030   66      NULL    NULL    NULL
 35     10035   88      NULL    NULL    NULL
 40     10040   66      40      10040   66
-40     10040   66      NULL    NULL    NULL
 40     10040   88      NULL    NULL    NULL
 5      10005   66      5       10005   66
 50     10050   66      50      10050   66
@@ -442,18 +455,25 @@ POSTHOOK: Input: default@join_1to1_2
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
+70     10040   66      NULL    NULL    NULL
+70     10040   66      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 NULL   10050   66      NULL    NULL    NULL
 NULL   NULL    66      NULL    NULL    NULL
 NULL   NULL    NULL    10      10010   66
+NULL   NULL    NULL    25      10025   66
 NULL   NULL    NULL    30      10030   88
 NULL   NULL    NULL    35      10035   88
 NULL   NULL    NULL    40      10040   88
+NULL   NULL    NULL    50      10050   66
+NULL   NULL    NULL    50      10050   66
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    70      10040   88
 NULL   NULL    NULL    70      10040   88
+NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    NULL    10050   66
 NULL   NULL    NULL    NULL    NULL    66
 PREHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = 
b.key1
@@ -558,7 +578,6 @@ POSTHOOK: Input: default@join_1to1_2
 30     10030   66      NULL    NULL    NULL
 35     10035   88      NULL    NULL    NULL
 40     10040   66      40      10040   66
-40     10040   66      NULL    NULL    NULL
 40     10040   88      NULL    NULL    NULL
 5      10005   66      5       10005   66
 50     10050   66      50      10050   66
@@ -575,12 +594,16 @@ POSTHOOK: Input: default@join_1to1_2
 NULL   10050   66      NULL    NULL    NULL
 NULL   NULL    66      NULL    NULL    NULL
 NULL   NULL    NULL    10      10010   66
+NULL   NULL    NULL    25      10025   66
 NULL   NULL    NULL    30      10030   88
 NULL   NULL    NULL    35      10035   88
+NULL   NULL    NULL    40      10040   66
 NULL   NULL    NULL    40      10040   88
 NULL   NULL    NULL    40      10040   88
 NULL   NULL    NULL    50      10050   66
 NULL   NULL    NULL    50      10050   66
+NULL   NULL    NULL    50      10050   66
+NULL   NULL    NULL    50      10050   66
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    50      10050   88
@@ -590,6 +613,8 @@ NULL        NULL    NULL    70      10040   88
 NULL   NULL    NULL    70      10040   88
 NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    NULL    10050   66
 NULL   NULL    NULL    NULL    NULL    66
 PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on 
a.key1 = b.key1 and a.key2 = b.key2
@@ -654,7 +679,6 @@ POSTHOOK: Input: default@join_1to1_2
 30     10030   66      NULL    NULL    NULL
 35     10035   88      NULL    NULL    NULL
 40     10040   66      40      10040   66
-40     10040   66      NULL    NULL    NULL
 40     10040   88      NULL    NULL    NULL
 5      10005   66      5       10005   66
 50     10050   66      50      10050   66
@@ -671,12 +695,16 @@ POSTHOOK: Input: default@join_1to1_2
 NULL   10050   66      NULL    NULL    NULL
 NULL   NULL    66      NULL    NULL    NULL
 NULL   NULL    NULL    10      10010   66
+NULL   NULL    NULL    25      10025   66
 NULL   NULL    NULL    30      10030   88
 NULL   NULL    NULL    35      10035   88
+NULL   NULL    NULL    40      10040   66
 NULL   NULL    NULL    40      10040   88
 NULL   NULL    NULL    40      10040   88
 NULL   NULL    NULL    50      10050   66
 NULL   NULL    NULL    50      10050   66
+NULL   NULL    NULL    50      10050   66
+NULL   NULL    NULL    50      10050   66
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    50      10050   88
@@ -686,6 +714,8 @@ NULL        NULL    NULL    70      10040   88
 NULL   NULL    NULL    70      10040   88
 NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    NULL    10050   66
 NULL   NULL    NULL    NULL    NULL    66
 PREHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = 
b.key1
@@ -790,7 +820,6 @@ POSTHOOK: Input: default@join_1to1_2
 30     10030   66      NULL    NULL    NULL
 35     10035   88      NULL    NULL    NULL
 40     10040   66      40      10040   66
-40     10040   66      NULL    NULL    NULL
 40     10040   88      NULL    NULL    NULL
 5      10005   66      5       10005   66
 50     10050   66      50      10050   66
@@ -801,17 +830,22 @@ POSTHOOK: Input: default@join_1to1_2
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
+70     10040   66      NULL    NULL    NULL
+70     10040   66      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 NULL   10050   66      NULL    NULL    NULL
 NULL   NULL    66      NULL    NULL    NULL
 NULL   NULL    NULL    10      10010   66
+NULL   NULL    NULL    25      10025   66
 NULL   NULL    NULL    30      10030   88
 NULL   NULL    NULL    35      10035   88
 NULL   NULL    NULL    40      10040   88
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    70      10040   88
 NULL   NULL    NULL    70      10040   88
+NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    NULL    10050   66
 NULL   NULL    NULL    NULL    NULL    66
 PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on 
a.key1 = b.key1 and a.key2 = b.key2
@@ -876,7 +910,6 @@ POSTHOOK: Input: default@join_1to1_2
 30     10030   66      NULL    NULL    NULL
 35     10035   88      NULL    NULL    NULL
 40     10040   66      40      10040   66
-40     10040   66      NULL    NULL    NULL
 40     10040   88      NULL    NULL    NULL
 5      10005   66      5       10005   66
 50     10050   66      50      10050   66
@@ -887,17 +920,22 @@ POSTHOOK: Input: default@join_1to1_2
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
+70     10040   66      NULL    NULL    NULL
+70     10040   66      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 NULL   10050   66      NULL    NULL    NULL
 NULL   NULL    66      NULL    NULL    NULL
 NULL   NULL    NULL    10      10010   66
+NULL   NULL    NULL    25      10025   66
 NULL   NULL    NULL    30      10030   88
 NULL   NULL    NULL    35      10035   88
 NULL   NULL    NULL    40      10040   88
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    70      10040   88
 NULL   NULL    NULL    70      10040   88
+NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    NULL    10050   66
 NULL   NULL    NULL    NULL    NULL    66
 PREHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = 
b.key1
@@ -1002,7 +1040,6 @@ POSTHOOK: Input: default@join_1to1_2
 30     10030   66      NULL    NULL    NULL
 35     10035   88      NULL    NULL    NULL
 40     10040   66      40      10040   66
-40     10040   66      NULL    NULL    NULL
 40     10040   88      NULL    NULL    NULL
 5      10005   66      5       10005   66
 50     10050   66      50      10050   66
@@ -1013,18 +1050,25 @@ POSTHOOK: Input: default@join_1to1_2
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
+70     10040   66      NULL    NULL    NULL
+70     10040   66      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 NULL   10050   66      NULL    NULL    NULL
 NULL   NULL    66      NULL    NULL    NULL
 NULL   NULL    NULL    10      10010   66
+NULL   NULL    NULL    25      10025   66
 NULL   NULL    NULL    30      10030   88
 NULL   NULL    NULL    35      10035   88
 NULL   NULL    NULL    40      10040   88
+NULL   NULL    NULL    50      10050   66
+NULL   NULL    NULL    50      10050   66
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    70      10040   88
 NULL   NULL    NULL    70      10040   88
+NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    NULL    10050   66
 NULL   NULL    NULL    NULL    NULL    66
 PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on 
a.key1 = b.key1 and a.key2 = b.key2
@@ -1089,7 +1133,6 @@ POSTHOOK: Input: default@join_1to1_2
 30     10030   66      NULL    NULL    NULL
 35     10035   88      NULL    NULL    NULL
 40     10040   66      40      10040   66
-40     10040   66      NULL    NULL    NULL
 40     10040   88      NULL    NULL    NULL
 5      10005   66      5       10005   66
 50     10050   66      50      10050   66
@@ -1100,18 +1143,25 @@ POSTHOOK: Input: default@join_1to1_2
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
 60     10040   66      60      10040   66
+70     10040   66      NULL    NULL    NULL
+70     10040   66      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 80     10040   88      NULL    NULL    NULL
 NULL   10050   66      NULL    NULL    NULL
 NULL   NULL    66      NULL    NULL    NULL
 NULL   NULL    NULL    10      10010   66
+NULL   NULL    NULL    25      10025   66
 NULL   NULL    NULL    30      10030   88
 NULL   NULL    NULL    35      10035   88
 NULL   NULL    NULL    40      10040   88
+NULL   NULL    NULL    50      10050   66
+NULL   NULL    NULL    50      10050   66
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    70      10040   88
 NULL   NULL    NULL    70      10040   88
+NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    NULL    10050   66
 NULL   NULL    NULL    NULL    NULL    66
 PREHOOK: query: SELECT * FROM join_1to1_1 a join join_1to1_2 b on a.key1 = 
b.key1
@@ -1216,7 +1266,6 @@ POSTHOOK: Input: default@join_1to1_2
 30     10030   66      NULL    NULL    NULL
 35     10035   88      NULL    NULL    NULL
 40     10040   66      40      10040   66
-40     10040   66      NULL    NULL    NULL
 40     10040   88      NULL    NULL    NULL
 5      10005   66      5       10005   66
 50     10050   66      50      10050   66
@@ -1233,12 +1282,16 @@ POSTHOOK: Input: default@join_1to1_2
 NULL   10050   66      NULL    NULL    NULL
 NULL   NULL    66      NULL    NULL    NULL
 NULL   NULL    NULL    10      10010   66
+NULL   NULL    NULL    25      10025   66
 NULL   NULL    NULL    30      10030   88
 NULL   NULL    NULL    35      10035   88
+NULL   NULL    NULL    40      10040   66
 NULL   NULL    NULL    40      10040   88
 NULL   NULL    NULL    40      10040   88
 NULL   NULL    NULL    50      10050   66
 NULL   NULL    NULL    50      10050   66
+NULL   NULL    NULL    50      10050   66
+NULL   NULL    NULL    50      10050   66
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    50      10050   88
@@ -1248,6 +1301,8 @@ NULL      NULL    NULL    70      10040   88
 NULL   NULL    NULL    70      10040   88
 NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    NULL    10050   66
 NULL   NULL    NULL    NULL    NULL    66
 PREHOOK: query: SELECT * FROM join_1to1_1 a full outer join join_1to1_2 b on 
a.key1 = b.key1 and a.key2 = b.key2
@@ -1312,7 +1367,6 @@ POSTHOOK: Input: default@join_1to1_2
 30     10030   66      NULL    NULL    NULL
 35     10035   88      NULL    NULL    NULL
 40     10040   66      40      10040   66
-40     10040   66      NULL    NULL    NULL
 40     10040   88      NULL    NULL    NULL
 5      10005   66      5       10005   66
 50     10050   66      50      10050   66
@@ -1329,12 +1383,16 @@ POSTHOOK: Input: default@join_1to1_2
 NULL   10050   66      NULL    NULL    NULL
 NULL   NULL    66      NULL    NULL    NULL
 NULL   NULL    NULL    10      10010   66
+NULL   NULL    NULL    25      10025   66
 NULL   NULL    NULL    30      10030   88
 NULL   NULL    NULL    35      10035   88
+NULL   NULL    NULL    40      10040   66
 NULL   NULL    NULL    40      10040   88
 NULL   NULL    NULL    40      10040   88
 NULL   NULL    NULL    50      10050   66
 NULL   NULL    NULL    50      10050   66
+NULL   NULL    NULL    50      10050   66
+NULL   NULL    NULL    50      10050   66
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    50      10050   88
 NULL   NULL    NULL    50      10050   88
@@ -1344,5 +1402,7 @@ NULL      NULL    NULL    70      10040   88
 NULL   NULL    NULL    70      10040   88
 NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
+NULL   NULL    NULL    80      10040   66
 NULL   NULL    NULL    NULL    10050   66
 NULL   NULL    NULL    NULL    NULL    66
diff --git 
a/ql/src/test/results/clientpositive/llap/vector_full_outer_join2.q.out 
b/ql/src/test/results/clientpositive/llap/vector_full_outer_join2.q.out
new file mode 100644
index 0000000..b764fe5
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/vector_full_outer_join2.q.out
@@ -0,0 +1,113 @@
+PREHOOK: query: create table t_letters (z char(12), x int, y int)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@t_letters
+POSTHOOK: query: create table t_letters (z char(12), x int, y int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@t_letters
+PREHOOK: query: insert into t_letters values
+('one', 1, 50),
+('two', 2, 30),
+('three', 3, 30),
+('four', 4, 60),
+('five', 5, 70),
+('six', 6, 80)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@t_letters
+POSTHOOK: query: insert into t_letters values
+('one', 1, 50),
+('two', 2, 30),
+('three', 3, 30),
+('four', 4, 60),
+('five', 5, 70),
+('six', 6, 80)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@t_letters
+POSTHOOK: Lineage: t_letters.x SCRIPT []
+POSTHOOK: Lineage: t_letters.y SCRIPT []
+POSTHOOK: Lineage: t_letters.z SCRIPT []
+PREHOOK: query: create table t_roman (z char(12), x int, y int)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@t_roman
+POSTHOOK: query: create table t_roman (z char(12), x int, y int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@t_roman
+PREHOOK: query: insert into t_roman values
+('I', 1, 50),
+('II', 2, 30),
+('III', 3, 30),
+('IV', 4, 60),
+('V', 5, 70),
+('VI', 6, 80)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@t_roman
+POSTHOOK: query: insert into t_roman values
+('I', 1, 50),
+('II', 2, 30),
+('III', 3, 30),
+('IV', 4, 60),
+('V', 5, 70),
+('VI', 6, 80)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@t_roman
+POSTHOOK: Lineage: t_roman.x SCRIPT []
+POSTHOOK: Lineage: t_roman.y SCRIPT []
+POSTHOOK: Lineage: t_roman.z SCRIPT []
+PREHOOK: query: select x1.`z`, x1.`x`, x1.`y`,
+       x2.`z`, x2.`x`, x2.`y`
+from t_letters x1 full outer join t_roman x2 on (x1.`x` > 3) and (x2.`x` < 4) 
and (x1.`x` = x2.`x`)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t_letters
+PREHOOK: Input: default@t_roman
+#### A masked pattern was here ####
+POSTHOOK: query: select x1.`z`, x1.`x`, x1.`y`,
+       x2.`z`, x2.`x`, x2.`y`
+from t_letters x1 full outer join t_roman x2 on (x1.`x` > 3) and (x2.`x` < 4) 
and (x1.`x` = x2.`x`)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t_letters
+POSTHOOK: Input: default@t_roman
+#### A masked pattern was here ####
+one            1       50      NULL    NULL    NULL
+NULL   NULL    NULL    I               1       50
+two            2       30      NULL    NULL    NULL
+NULL   NULL    NULL    II              2       30
+three          3       30      NULL    NULL    NULL
+NULL   NULL    NULL    III             3       30
+four           4       60      NULL    NULL    NULL
+NULL   NULL    NULL    IV              4       60
+five           5       70      NULL    NULL    NULL
+NULL   NULL    NULL    V               5       70
+six            6       80      NULL    NULL    NULL
+NULL   NULL    NULL    VI              6       80
+PREHOOK: query: select x1.`z`, x1.`x`, x1.`y`,
+       x2.`z`, x2.`x`, x2.`y`
+from t_letters x1 full outer join t_roman x2 on (x1.`x` > 2) and (x2.`x` < 4) 
and (x1.`x` = x2.`x`)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t_letters
+PREHOOK: Input: default@t_roman
+#### A masked pattern was here ####
+POSTHOOK: query: select x1.`z`, x1.`x`, x1.`y`,
+       x2.`z`, x2.`x`, x2.`y`
+from t_letters x1 full outer join t_roman x2 on (x1.`x` > 2) and (x2.`x` < 4) 
and (x1.`x` = x2.`x`)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t_letters
+POSTHOOK: Input: default@t_roman
+#### A masked pattern was here ####
+one            1       50      NULL    NULL    NULL
+NULL   NULL    NULL    I               1       50
+two            2       30      NULL    NULL    NULL
+NULL   NULL    NULL    II              2       30
+three          3       30      III             3       30
+four           4       60      NULL    NULL    NULL
+NULL   NULL    NULL    IV              4       60
+five           5       70      NULL    NULL    NULL
+NULL   NULL    NULL    V               5       70
+six            6       80      NULL    NULL    NULL
+NULL   NULL    NULL    VI              6       80

Reply via email to