diff --git a/connector/connector-sdk/src/main/java/org/apache/sqoop/connector/idf/CSVIntermediateDataFormat.java b/connector/connector-sdk/src/main/java/org/apache/sqoop/connector/idf/CSVIntermediateDataFormat.java index 4e0ecee8..e0e40619 100644 --- a/connector/connector-sdk/src/main/java/org/apache/sqoop/connector/idf/CSVIntermediateDataFormat.java +++ b/connector/connector-sdk/src/main/java/org/apache/sqoop/connector/idf/CSVIntermediateDataFormat.java @@ -45,6 +45,7 @@ public class CSVIntermediateDataFormat extends IntermediateDataFormat { public static final char SEPARATOR_CHARACTER = ','; public static final char ESCAPE_CHARACTER = '\\'; public static final char QUOTE_CHARACTER = '\''; + public static final String NULL_STRING = "NULL"; private static final char[] originals = { @@ -326,6 +327,10 @@ private String getRegExp(String orig) { } private String escapeStrings(String orig) { + if (orig == null) { + return NULL_STRING; + } + int j = 0; String replacement = orig; try { diff --git a/connector/connector-sdk/src/test/java/org/apache/sqoop/connector/idf/TestCSVIntermediateDataFormat.java b/connector/connector-sdk/src/test/java/org/apache/sqoop/connector/idf/TestCSVIntermediateDataFormat.java index 291fef2b..72e95ed6 100644 --- a/connector/connector-sdk/src/test/java/org/apache/sqoop/connector/idf/TestCSVIntermediateDataFormat.java +++ b/connector/connector-sdk/src/test/java/org/apache/sqoop/connector/idf/TestCSVIntermediateDataFormat.java @@ -182,6 +182,34 @@ public void testObjectInObjectOut() { assertTrue(Arrays.deepEquals(inCopy, data.getObjectData())); } + @Test + public void testObjectWithNullInStringOut() { + Schema schema = new Schema("test"); + schema.addColumn(new FixedPoint("1")) + .addColumn(new FixedPoint("2")) + .addColumn(new Text("3")) + .addColumn(new Text("4")) + .addColumn(new Binary("5")) + .addColumn(new Text("6")); + data.setSchema(schema); + + byte[] byteFieldData = new byte[] { (byte) 0x0D, (byte) -112, (byte) 54}; + Object[] in = new Object[6]; + in[0] = new Long(10); + in[1] = new Long(34); + in[2] = null; + in[3] = "random data"; + in[4] = byteFieldData; + in[5] = new String(new char[] { 0x0A }); + + data.setObjectData(in); + + //byte[0] = \r byte[1] = -112, byte[1] = 54 - 2's complements + String testData = "10,34,NULL,'random data'," + + getByteFieldString(byteFieldData).replaceAll("\r", "\\\\r") + ",'\\n'"; + assertEquals(testData, data.getTextData()); + } + @Test public void testStringFullRangeOfCharacters() { Schema schema = new Schema("test");