Author: namit Date: Thu Mar 28 05:52:42 2013 New Revision: 1461959 URL: http://svn.apache.org/r1461959 Log: HIVE-4149 wrong results big outer joins with array of ints (Navis via namit)
Added: hive/trunk/data/files/tiny_a.txt hive/trunk/data/files/tiny_b.txt hive/trunk/ql/src/test/queries/clientpositive/join_array.q hive/trunk/ql/src/test/results/clientpositive/join_array.q.out Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyArray.java hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazyArrayMapStruct.java Added: hive/trunk/data/files/tiny_a.txt URL: http://svn.apache.org/viewvc/hive/trunk/data/files/tiny_a.txt?rev=1461959&view=auto ============================================================================== --- hive/trunk/data/files/tiny_a.txt (added) +++ hive/trunk/data/files/tiny_a.txt Thu Mar 28 05:52:42 2013 @@ -0,0 +1 @@ +103200920268924913312 Added: hive/trunk/data/files/tiny_b.txt URL: http://svn.apache.org/viewvc/hive/trunk/data/files/tiny_b.txt?rev=1461959&view=auto ============================================================================== --- hive/trunk/data/files/tiny_b.txt (added) +++ hive/trunk/data/files/tiny_b.txt Thu Mar 28 05:52:42 2013 @@ -0,0 +1,2 @@ +10320092002467760023374853555556606672767778808187889090919092971001031041071081081091101131131131131131131141161161161171161171171171151151171171171211201311311311251251241241281281311311321331341341341342626\N\N\N\N116 +1032009202689249102591061311421592443203984174335536167108269179711046105110931112114212151220122612321267136415491646194821702272232524332534285229252992311932073279332334123637364536343450347336383688373637583812386238733868388341184134412741704216\N\N\N\N3139 Added: hive/trunk/ql/src/test/queries/clientpositive/join_array.q URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/join_array.q?rev=1461959&view=auto ============================================================================== --- hive/trunk/ql/src/test/queries/clientpositive/join_array.q (added) +++ hive/trunk/ql/src/test/queries/clientpositive/join_array.q Thu Mar 28 05:52:42 2013 @@ -0,0 +1,10 @@ +create table tinyA(a bigint, b bigint) stored as textfile; +create table tinyB(a bigint, bList array<int>) stored as textfile; + +load data local inpath '../data/files/tiny_a.txt' into table tinyA; +load data local inpath '../data/files/tiny_b.txt' into table tinyB; + +select * from tinyA; +select * from tinyB; + +select tinyB.a, tinyB.bList from tinyB full outer join tinyA on tinyB.a = tinyA.a; Added: hive/trunk/ql/src/test/results/clientpositive/join_array.q.out URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/join_array.q.out?rev=1461959&view=auto ============================================================================== --- hive/trunk/ql/src/test/results/clientpositive/join_array.q.out (added) +++ hive/trunk/ql/src/test/results/clientpositive/join_array.q.out Thu Mar 28 05:52:42 2013 @@ -0,0 +1,53 @@ +PREHOOK: query: create table tinyA(a bigint, b bigint) stored as textfile +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table tinyA(a bigint, b bigint) stored as textfile +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@tinyA +PREHOOK: query: create table tinyB(a bigint, bList array<int>) stored as textfile +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table tinyB(a bigint, bList array<int>) stored as textfile +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@tinyB +PREHOOK: query: load data local inpath '../data/files/tiny_a.txt' into table tinyA +PREHOOK: type: LOAD +PREHOOK: Output: default@tinya +POSTHOOK: query: load data local inpath '../data/files/tiny_a.txt' into table tinyA +POSTHOOK: type: LOAD +POSTHOOK: Output: default@tinya +PREHOOK: query: load data local inpath '../data/files/tiny_b.txt' into table tinyB +PREHOOK: type: LOAD +PREHOOK: Output: default@tinyb +POSTHOOK: query: load data local inpath '../data/files/tiny_b.txt' into table tinyB +POSTHOOK: type: LOAD +POSTHOOK: Output: default@tinyb +PREHOOK: query: select * from tinyA +PREHOOK: type: QUERY +PREHOOK: Input: default@tinya +#### A masked pattern was here #### +POSTHOOK: query: select * from tinyA +POSTHOOK: type: QUERY +POSTHOOK: Input: default@tinya +#### A masked pattern was here #### +10320092026892491 3312 +PREHOOK: query: select * from tinyB +PREHOOK: type: QUERY +PREHOOK: Input: default@tinyb +#### A masked pattern was here #### +POSTHOOK: query: select * from tinyB +POSTHOOK: type: QUERY +POSTHOOK: Input: default@tinyb +#### A masked pattern was here #### +10320092002467760 [0,23,37,48,53,55,55,56,60,66,72,76,77,78,80,81,87,88,90,90,91,90,92,97,100,103,104,107,108,108,109,110,113,113,113,113,113,113,114,116,116,116,117,116,117,117,117,115,115,117,117,117,121,120,131,131,131,125,125,124,124,128,128,131,131,132,133,134,134,134,134,26,26,null,null,null,null,116] +10320092026892491 [0,2,59,106,131,142,159,244,320,398,417,433,553,616,710,826,917,971,1046,1051,1093,1112,1142,1215,1220,1226,1232,1267,1364,1549,1646,1948,2170,2272,2325,2433,2534,2852,2925,2992,3119,3207,3279,3323,3412,3637,3645,3634,3450,3473,3638,3688,3736,3758,3812,3862,3873,3868,3883,4118,4134,4127,4170,4216,null,null,null,null,3139] +PREHOOK: query: select tinyB.a, tinyB.bList from tinyB full outer join tinyA on tinyB.a = tinyA.a +PREHOOK: type: QUERY +PREHOOK: Input: default@tinya +PREHOOK: Input: default@tinyb +#### A masked pattern was here #### +POSTHOOK: query: select tinyB.a, tinyB.bList from tinyB full outer join tinyA on tinyB.a = tinyA.a +POSTHOOK: type: QUERY +POSTHOOK: Input: default@tinya +POSTHOOK: Input: default@tinyb +#### A masked pattern was here #### +10320092002467760 [0,23,37,48,53,55,55,56,60,66,72,76,77,78,80,81,87,88,90,90,91,90,92,97,100,103,104,107,108,108,109,110,113,113,113,113,113,113,114,116,116,116,117,116,117,117,117,115,115,117,117,117,121,120,131,131,131,125,125,124,124,128,128,131,131,132,133,134,134,134,134,26,26,null,null,null,null,116] +10320092026892491 [0,2,59,106,131,142,159,244,320,398,417,433,553,616,710,826,917,971,1046,1051,1093,1112,1142,1215,1220,1226,1232,1267,1364,1549,1646,1948,2170,2272,2325,2433,2534,2852,2925,2992,3119,3207,3279,3323,3412,3637,3645,3634,3450,3473,3638,3688,3736,3758,3812,3862,3873,3868,3883,4118,4134,4127,4170,4216,null,null,null,null,3139] Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyArray.java URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyArray.java?rev=1461959&r1=1461958&r2=1461959&view=diff ============================================================================== --- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyArray.java (original) +++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyArray.java Thu Mar 28 05:52:42 2013 @@ -187,7 +187,7 @@ public class LazyArray extends LazyNonPr && 0 == LazyUtils .compare(bytes.getData(), startPosition[index], elementLength, nullSequence.getBytes(), 0, nullSequence.getLength())) { - return null; + return arrayElements[index] = null; } arrayElements[index] = LazyFactory .createLazyObject(oi.getListElementObjectInspector()); Modified: hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazyArrayMapStruct.java URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazyArrayMapStruct.java?rev=1461959&r1=1461958&r2=1461959&view=diff ============================================================================== --- hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazyArrayMapStruct.java (original) +++ hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazyArrayMapStruct.java Thu Mar 28 05:52:42 2013 @@ -95,6 +95,20 @@ public class TestLazyArrayMapStruct exte assertNull((b.getListElementObject(5))); assertEquals(5, b.getList().size()); + // -- HIVE-4149 + b = (LazyArray) LazyFactory.createLazyObject(oi); + + data = new byte[] {'a', '\t', '\\', 'N'}; + TestLazyPrimitive.initLazyObject(b, data, 0, data.length); + assertEquals(new Text("a"), ((LazyString) b.getListElementObject(0)).getWritableObject()); + assertNull(b.getListElementObject(1)); + + data = new byte[] {'\\', 'N', '\t', 'a'}; + TestLazyPrimitive.initLazyObject(b, data, 0, data.length); + assertNull(b.getListElementObject(0)); + assertNull(b.getListElementObject(0)); // twice (returns not cleaned cache) + assertEquals(new Text("a"), ((LazyString) b.getListElementObject(1)).getWritableObject()); + } catch (Throwable e) { e.printStackTrace(); throw e;