From 1e9db0113fe6b83f843faabc6a58eb07b19b0fee Mon Sep 17 00:00:00 2001 From: Jarek Jarcec Cecho Date: Sat, 4 Oct 2014 14:02:41 -0700 Subject: [PATCH] SQOOP-1561: Sqoop2: Date and DateTime handling in CSV IDF (Abraham Elmahrek via Jarek Jarcec Cecho) --- connector/connector-sdk/pom.xml | 4 +++ .../idf/CSVIntermediateDataFormat.java | 6 ++++ .../idf/TestCSVIntermediateDataFormat.java | 27 +++++++++++++++ pom.xml | 33 +++++++++++-------- 4 files changed, 57 insertions(+), 13 deletions(-) diff --git a/connector/connector-sdk/pom.xml b/connector/connector-sdk/pom.xml index f54837d0..67200270 100644 --- a/connector/connector-sdk/pom.xml +++ b/connector/connector-sdk/pom.xml @@ -33,6 +33,10 @@ limitations under the License. Sqoop Connector SDK + + joda-time + joda-time + junit junit 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 02d1a519..3c3543c5 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 @@ -27,6 +27,8 @@ import org.apache.sqoop.schema.type.FixedPoint; import org.apache.sqoop.schema.type.FloatingPoint; import org.apache.sqoop.schema.type.Type; +import org.joda.time.LocalDate; +import org.joda.time.LocalDateTime; import java.io.DataInput; import java.io.DataOutput; @@ -215,7 +217,11 @@ public Object[] getObjectData() { out[i] = new BigDecimal(fields[i]); break; case DATE: + out[i] = LocalDate.parse(fields[i]); + break; case DATE_TIME: + out[i] = LocalDateTime.parse(fields[i]); + break; case BIT: out[i] = fields[i]; break; 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 f5fbab78..3159883d 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 @@ -28,6 +28,8 @@ import org.apache.sqoop.common.SqoopException; import org.apache.sqoop.schema.Schema; import org.apache.sqoop.schema.type.Binary; +import org.apache.sqoop.schema.type.Date; +import org.apache.sqoop.schema.type.DateTime; import org.apache.sqoop.schema.type.FixedPoint; import org.apache.sqoop.schema.type.Text; import org.junit.Before; @@ -222,6 +224,31 @@ public void testByteArrayFullRangeOfCharacters() { assertTrue(Arrays.deepEquals(inCopy, data.getObjectData())); } + @Test + public void testDate() { + Schema schema = new Schema("test"); + schema.addColumn(new Date("1")); + data.setSchema(schema); + + data.setTextData("2014-10-01"); + assertEquals("2014-10-01", data.getObjectData()[0].toString()); + } + + @Test + public void testDateTime() { + Schema schema = new Schema("test"); + schema.addColumn(new DateTime("1")); + data.setSchema(schema); + + for (String dateTime : new String[]{ + "2014-10-01T12:00:00", + "2014-10-01T12:00:00.000" + }) { + data.setTextData(dateTime); + assertEquals("2014-10-01T12:00:00.000", data.getObjectData()[0].toString()); + } + } + @Test(expected=SqoopException.class) public void testEmptySchema() { String testData = "10,34,'54','random data'," + getByteFieldString(new byte[] { (byte) -112, (byte) 54}) diff --git a/pom.xml b/pom.xml index f2cd0701..f25a29f6 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,8 @@ 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. ---> +--> + 4.0.0 org.apache @@ -111,6 +112,7 @@ limitations under the License. 4.0 14.00.00.21 6.0 + 2.4 @@ -440,18 +442,23 @@ limitations under the License. nzjdbc3 ${jdbc.netezza.version} - - org.mockito - mockito-all - ${mockito.version} - test - - - org.apache.tomcat - catalina - ${tomcat.version} - provided - + + joda-time + joda-time + ${joda.version} + + + org.mockito + mockito-all + ${mockito.version} + test + + + org.apache.tomcat + catalina + ${tomcat.version} + provided +