public Object set(Object o, DateWritable d) { if (d == null) { return null; } ((Date) o).setTime(d.get().getTime()); return o; }
private Date convertToDate( PrimitiveCategory inputType, Converter converter, DeferredObject argument) throws HiveException { assert (converter != null); assert (argument != null); if (argument.get() == null) { return null; } Date date = new Date(); switch (inputType) { case STRING: case VARCHAR: case CHAR: String dateString = converter.convert(argument.get()).toString(); try { date = formatter.parse(dateString); } catch (ParseException e) { return null; } break; case TIMESTAMP: Timestamp ts = ((TimestampWritable) converter.convert(argument.get())).getTimestamp(); date.setTime(ts.getTime()); break; case DATE: DateWritable dw = (DateWritable) converter.convert(argument.get()); date = dw.get(); break; default: throw new UDFArgumentException( "TO_DATE() only takes STRING/TIMESTAMP/DATEWRITABLE types, got " + inputType); } return date; }
public IntWritable evaluate(DateWritable d) { if (d == null) { return null; } calendar.setTime(d.get()); result.set(1 + calendar.get(Calendar.MONTH)); return result; }
@Test public void testDatePlusIntervalYearMonth() throws Exception { GenericUDFOPPlus udf = new GenericUDFOPPlus(); DateWritable left = new DateWritable(Date.valueOf("2001-06-15")); HiveIntervalYearMonthWritable right = new HiveIntervalYearMonthWritable(HiveIntervalYearMonth.valueOf("2-8")); ObjectInspector[] inputOIs = { PrimitiveObjectInspectorFactory.writableDateObjectInspector, PrimitiveObjectInspectorFactory.writableHiveIntervalYearMonthObjectInspector }; DeferredObject[] args = { new DeferredJavaObject(left), new DeferredJavaObject(right), }; PrimitiveObjectInspector oi = (PrimitiveObjectInspector) udf.initialize(inputOIs); Assert.assertEquals(TypeInfoFactory.dateTypeInfo, oi.getTypeInfo()); DateWritable res = (DateWritable) udf.evaluate(args); Assert.assertEquals(Date.valueOf("2004-02-15"), res.get()); }