diff --git a/.classpath b/.classpath
index d6a3d16..4ae4e1d 100644
--- a/.classpath
+++ b/.classpath
@@ -6,5 +6,8 @@
+
+
+
diff --git a/ivy.xml b/ivy.xml
index f252abb..87c7aeb 100644
--- a/ivy.xml
+++ b/ivy.xml
@@ -34,6 +34,7 @@
+
diff --git a/src/main/java/com/bizo/hive/serde/csv/CSVSerde.java b/src/main/java/com/bizo/hive/serde/csv/CSVSerde.java
index 2be9260..3ed1516 100644
--- a/src/main/java/com/bizo/hive/serde/csv/CSVSerde.java
+++ b/src/main/java/com/bizo/hive/serde/csv/CSVSerde.java
@@ -35,9 +35,9 @@ import au.com.bytecode.opencsv.CSVWriter;
public final class CSVSerde implements SerDe {
private ObjectInspector inspector;
- String[] outputFields;
- int numCols;
- List row;
+ private String[] outputFields;
+ private int numCols;
+ private List row;
@Override
public void initialize(final Configuration conf, final Properties tbl) throws SerDeException {
@@ -102,8 +102,9 @@ public final class CSVSerde implements SerDe {
public Object deserialize(final Writable blob) throws SerDeException {
Text rowText = (Text) blob;
+ CSVReader csv = null;
try {
- final CSVReader csv = new CSVReader(new CharArrayReader(rowText.toString().toCharArray()));
+ csv = new CSVReader(new CharArrayReader(rowText.toString().toCharArray()));
final String[] read = csv.readNext();
for (int i=0; i< numCols; i++) {
@@ -117,6 +118,14 @@ public final class CSVSerde implements SerDe {
return row;
} catch (final Exception e) {
throw new SerDeException(e);
+ } finally {
+ if (csv != null) {
+ try {
+ csv.close();
+ } catch (final Exception e) {
+ // ignore
+ }
+ }
}
}
diff --git a/src/test/java/com/bizo/hive/serde/csv/CSVSerdeTest.java b/src/test/java/com/bizo/hive/serde/csv/CSVSerdeTest.java
new file mode 100644
index 0000000..e7bc53a
--- /dev/null
+++ b/src/test/java/com/bizo/hive/serde/csv/CSVSerdeTest.java
@@ -0,0 +1,35 @@
+package com.bizo.hive.serde.csv;
+
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.hadoop.hive.serde.Constants;
+import org.apache.hadoop.io.Text;
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+
+public final class CSVSerdeTest {
+ private final CSVSerde csv = new CSVSerde();
+
+ @Before
+ public void setup() throws Exception {
+ final Properties props = new Properties();
+ props.put(Constants.LIST_COLUMNS, "a,b,c");
+ props.put(Constants.LIST_COLUMN_TYPES, "string,string,string");
+
+ csv.initialize(null, props);
+ }
+
+ @Test
+ public void testDeserialize() throws Exception {
+ final Text in = new Text("hello,\"yes, okay\",1");
+
+ final List row = (List) csv.deserialize(in);
+
+ assertEquals("hello", row.get(0));
+ assertEquals("yes, okay", row.get(1));
+ assertEquals("1", row.get(2));
+ }
+}