You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by dm...@apache.org on 2020/07/24 13:13:36 UTC
[hive] branch master updated: HIVE-20771: LazyBinarySerDe fails on empty structs (Clemens Valiente via David Mollitor, reviewed by Jesús Rodríguez)
This is an automated email from the ASF dual-hosted git repository.
dmollitor 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 0a9f3bb HIVE-20771: LazyBinarySerDe fails on empty structs (Clemens Valiente via David Mollitor, reviewed by Jesús Rodríguez)
0a9f3bb is described below
commit 0a9f3bb9a18043dbafb0ac218b6721f3260be781
Author: Hunter Logan <hu...@outlook.com>
AuthorDate: Fri Jul 24 09:13:21 2020 -0400
HIVE-20771: LazyBinarySerDe fails on empty structs (Clemens Valiente via David Mollitor, reviewed by Jesús Rodríguez)
---
.../serde2/lazybinary/LazyBinaryNonPrimitive.java | 4 +-
.../serde2/lazybinary/TestLazyBinaryStruct.java | 67 ++++++++++++++++++++++
2 files changed, 69 insertions(+), 2 deletions(-)
diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryNonPrimitive.java b/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryNonPrimitive.java
index 05d05c6..82946d3 100644
--- a/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryNonPrimitive.java
+++ b/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryNonPrimitive.java
@@ -50,8 +50,8 @@ public abstract class LazyBinaryNonPrimitive<OI extends ObjectInspector>
if (null == bytes) {
throw new RuntimeException("bytes cannot be null!");
}
- if (length <= 0) {
- throw new RuntimeException("length should be positive!");
+ if (length < 0) {
+ throw new RuntimeException("length should be non-negative!");
}
this.bytes = bytes;
this.start = start;
diff --git a/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/TestLazyBinaryStruct.java b/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/TestLazyBinaryStruct.java
new file mode 100644
index 0000000..aa6b823
--- /dev/null
+++ b/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/TestLazyBinaryStruct.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hive.serde2.lazybinary;
+
+import java.util.ArrayList;
+import java.util.Properties;
+import junit.framework.TestCase;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hive.serde.serdeConstants;
+import org.apache.hadoop.hive.serde2.SerDeException;
+import org.apache.hadoop.hive.serde2.SerDeUtils;
+import org.apache.hadoop.hive.serde2.lazy.ByteArrayRef;
+import org.apache.hadoop.hive.serde2.lazybinary.objectinspector.LazyBinaryObjectInspectorFactory;
+import org.apache.hadoop.hive.serde2.lazybinary.objectinspector.LazyBinaryStructObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
+import org.apache.hadoop.hive.serde2.objectinspector.StandardStructObjectInspector;
+import org.apache.hadoop.io.Writable;
+import org.junit.Test;
+
+public class TestLazyBinaryStruct extends TestCase {
+
+ @Test
+ public void testEmptyStruct() {
+ LazyBinaryStructObjectInspector oi = LazyBinaryObjectInspectorFactory
+ .getLazyBinaryStructObjectInspector(new ArrayList<>(), new ArrayList<>());
+
+ ByteArrayRef byteRef = new ByteArrayRef();
+ byteRef.setData(new byte[]{0});
+
+ LazyBinaryStruct data = (LazyBinaryStruct) LazyBinaryFactory.createLazyBinaryObject(oi);
+ data.init(byteRef, 0, 0);
+
+ assertEquals(data.getRawDataSerializedSize(), 0);
+ }
+
+ @Test
+ public void testEmptyStructWithSerde() throws SerDeException {
+ LazyBinaryStructObjectInspector oi = LazyBinaryObjectInspectorFactory
+ .getLazyBinaryStructObjectInspector(new ArrayList<>(), new ArrayList<>());
+ StandardStructObjectInspector standardOI = ObjectInspectorFactory
+ .getStandardStructObjectInspector(new ArrayList<>(), new ArrayList<>());
+ Properties schema = new Properties();
+ schema.setProperty(serdeConstants.LIST_COLUMNS, "col0");
+ schema.setProperty(serdeConstants.LIST_COLUMN_TYPES, "struct<>");
+
+ LazyBinarySerDe serde = new LazyBinarySerDe();
+ SerDeUtils.initializeSerDe(serde, new Configuration(), schema, null);
+ Writable writable = serde.serialize(standardOI.create(), standardOI);
+ Object out = serde.deserialize(writable);
+ assertNull(oi.getStructFieldsDataAsList(out));
+ }
+}
\ No newline at end of file