@Override final public void addInt(int value) { // Parquet DATE type is based on Unix Epoch(Jan 1, 1970). parent.add(DatumFactory.createDate(value + DateTimeConstants.UNIX_EPOCH_JDATE)); } }
@Override Datum next() throws IOException { super.next(); return valuePresent ? DatumFactory.createDate((int) reader.next() + DateTimeUtil.DAYS_FROM_JULIAN_TO_EPOCH) : NullDatum.get(); }
@Override Datum next() throws IOException { super.next(); return valuePresent ? DatumFactory.createDate((int) reader.next() + DateTimeConstants.UNIX_EPOCH_JDATE) : NullDatum.get(); }
@Override public Datum eval(Tuple params) { if (datum == null) { long julianTimestamp = DateTimeUtil.javaTimeToJulianTime(System.currentTimeMillis()); TimeMeta tm = new TimeMeta(); DateTimeUtil.toJulianTimeMeta(julianTimestamp, tm); DateTimeUtil.toUserTimezone(tm, getTimeZone()); datum = DatumFactory.createDate(tm.years, tm.monthOfYear, tm.dayOfMonth); } return datum; } }
@Override public Datum eval(Tuple params) { if (datum == null) { long julianTimestamp = DateTimeUtil.javaTimeToJulianTime(System.currentTimeMillis()); TimeMeta tm = new TimeMeta(); DateTimeUtil.toJulianTimeMeta(julianTimestamp, tm); DateTimeUtil.toUserTimezone(tm, getTimeZone()); datum = DatumFactory.createDate(tm.years, tm.monthOfYear, tm.dayOfMonth); } return datum; } }
/** * This method uses the given calendar to construct an appropriate millisecond * value for the time if the underlying database does not store timezone information. */ private Date getDate(Tuple tuple, Calendar cal, int index) throws SQLException { if (handleNull(tuple, index)) return null; TimeZone tz = cal == null ? TimeZone.getDefault() : cal.getTimeZone(); long javaTime; switch (tuple.type(index)) { case DATE: { TimeMeta tm = tuple.asDatum(index).asTimeMeta(); javaTime = DateTimeUtil.convertTimeZone(toDate(tm, null).getTime(), TimeZone.getDefault(), tz); break; } case TIMESTAMP: { Date date = DateTimeUtil.convertToDate(getTimestamp(tuple, index), timezone); javaTime = DateTimeUtil.convertTimeZone(date.getTime(), timezone, tz); break; } case TEXT: { TimeMeta tm = DatumFactory.createDate(tuple.asDatum(index)).asTimeMeta(); javaTime = DateTimeUtil.convertTimeZone(toDate(tm, null).getTime(), TimeZone.getDefault(), tz); break; } default: throw new TajoSQLException(Errors.ResultCode.INVALID_VALUE_FOR_CAST, tuple.type(index).name(), "date"); } // remove time part return DateTimeUtil.convertToDate(javaTime, TimeZone.getDefault()); }
private static Tuple makeRandomTuple(Tuple tuple) { tuple.put(new Datum[]{ DatumFactory.createInt8(random.nextLong()), DatumFactory.createInt4(random.nextInt()), DatumFactory.createInt2((short) random.nextInt(Short.MAX_VALUE)), DatumFactory.createDate(Math.abs(random.nextInt())), DatumFactory.createTimestamp(Math.abs(random.nextLong())), DatumFactory.createTime(Math.abs(random.nextLong())), DatumFactory.createFloat4(random.nextFloat()), DatumFactory.createFloat8(random.nextDouble()) }); for (int i = 0; i < 3; i++) { if (random.nextBoolean()) { tuple.put(i, tuple.asDatum(i).multiply(MINUS_ONE)); } } for (int i = 6; i < 8; i++) { if (random.nextBoolean()) { tuple.put(i, tuple.asDatum(i).multiply(MINUS_ONE)); } } return tuple; }
public static DateDatum createDate(Datum datum) { switch (datum.type()) { case INT4: return new DateDatum(datum.asInt4()); case INT8: return new DateDatum(datum.asInt4()); case TEXT: return createDate(datum.asChars()); case DATE: return (DateDatum) datum; default: throw new TajoRuntimeException(new InvalidValueForCastException(datum.type(), Type.DATE)); } }
public static DateDatum createDate(Datum datum) { switch (datum.kind()) { case INT4: return new DateDatum(datum.asInt4()); case INT8: return new DateDatum(datum.asInt4()); case TEXT: return createDate(datum.asChars()); case DATE: return (DateDatum) datum; default: throw new TajoRuntimeException(new InvalidValueForCastException(datum.type(), Type.DATE)); } }
public Datum toDatum(int i) { if (keys[i] == null) { return NullDatum.get(); } switch (keyTypes[i]) { case NULL_TYPE: return NullDatum.get(); case BOOLEAN: return DatumFactory.createBool((Boolean) keys[i]); case BIT: return DatumFactory.createBit((Byte)keys[i]); case INT1: case INT2: return DatumFactory.createInt2((Short) keys[i]); case INT4: return DatumFactory.createInt4((Integer) keys[i]); case DATE: return DatumFactory.createDate((Integer) keys[i]); case INT8: return DatumFactory.createInt8((Long) keys[i]); case TIME: return DatumFactory.createTime((Long) keys[i]); case TIMESTAMP: return DatumFactory.createTimestamp((Long) keys[i]); case FLOAT4: return DatumFactory.createFloat4((Float) keys[i]); case FLOAT8: return DatumFactory.createFloat8((Double) keys[i]); case TEXT: return DatumFactory.createText((byte[]) keys[i]); case CHAR: return DatumFactory.createChar((byte[]) keys[i]); case BLOB: return DatumFactory.createBlob((byte[]) keys[i]); case DATUM: return (Datum)keys[i]; default: throw new IllegalArgumentException(); } } }
private Date getDate(Tuple tuple, int index) throws SQLException { if (handleNull(tuple, index)) return null; switch (tuple.type(index)) { case DATE: return toDate(tuple.asDatum(index).asTimeMeta(), null); case TIMESTAMP: return toDate(tuple.asDatum(index).asTimeMeta(), timezone); case TEXT: return toDate(DatumFactory.createDate(tuple.asDatum(index)).asTimeMeta(), null); default: throw new TajoSQLException(Errors.ResultCode.INVALID_VALUE_FOR_CAST, tuple.type(index).name(), "date"); } }
public Datum toDatum(int i) { if (keys[i] == null) { return NullDatum.get(); } switch (keyTypes[i]) { case NULL_TYPE: return NullDatum.get(); case BOOLEAN: return DatumFactory.createBool((Boolean) keys[i]); case BIT: return DatumFactory.createBit((Byte)keys[i]); case INT1: case INT2: return DatumFactory.createInt2((Short) keys[i]); case INT4: return DatumFactory.createInt4((Integer) keys[i]); case DATE: return DatumFactory.createDate((Integer) keys[i]); case INET4: return DatumFactory.createInet4((Integer) keys[i]); case INT8: return DatumFactory.createInt8((Long) keys[i]); case TIME: return DatumFactory.createTime((Long) keys[i]); case TIMESTAMP: return DatumFactory.createTimestamp((Long) keys[i]); case FLOAT4: return DatumFactory.createFloat4((Float) keys[i]); case FLOAT8: return DatumFactory.createFloat8((Double) keys[i]); case TEXT: return DatumFactory.createText((byte[]) keys[i]); case CHAR: return DatumFactory.createChar((byte[]) keys[i]); case BLOB: return DatumFactory.createBlob((byte[]) keys[i]); case DATUM: return (Datum)keys[i]; default: throw new IllegalArgumentException(); } } }
private static Tuple makeMinTuple(Tuple tuple) { tuple.put(new Datum[]{ DatumFactory.createInt8(Long.MIN_VALUE), DatumFactory.createInt4(Integer.MIN_VALUE), DatumFactory.createInt2(Short.MIN_VALUE), DatumFactory.createDate(0), DatumFactory.createTimestamp(0), DatumFactory.createTime(0), DatumFactory.createFloat4(Float.MIN_VALUE), DatumFactory.createFloat8(Double.MIN_VALUE) }); return tuple; }
return createText(value); case DATE: return createDate(value); case TIME: return createTime(value);
return createText(value); case DATE: return createDate(value); case TIME: return createTime(value);
private static Tuple makeMaxTuple(Tuple tuple) { tuple.put(new Datum[]{ DatumFactory.createInt8(Long.MAX_VALUE), DatumFactory.createInt4(Integer.MAX_VALUE), DatumFactory.createInt2(Short.MAX_VALUE), DatumFactory.createDate(Integer.MAX_VALUE), DatumFactory.createTimestamp( // FIXME 'Out of Range of Time' //DateTimeUtil.toJulianDate(JULIAN_MAXYEAR, 1, 1) DateTimeUtil.toJulianTimestamp(DateTimeConstants.JULIAN_MAXYEAR / 20, 1, 1, 0, 0, 0, 0)), DatumFactory.createTime(Long.MAX_VALUE), DatumFactory.createFloat4(Float.MAX_VALUE), DatumFactory.createFloat8(Double.MAX_VALUE) }); return tuple; }
@Test public void testDateTextHandling() throws Exception { if (dataFormat.equalsIgnoreCase(BuiltinStorages.AVRO) || internalType) { return; } Schema schema = SchemaBuilder.builder().add("col1", Type.TEXT).build(); TableMeta meta = CatalogUtil.newTableMeta(dataFormat, conf); FileTablespace sm = TablespaceManager.getLocalFs(); Path tablePath = new Path(testDir, "testTextHandling.data"); Appender appender = sm.getAppender(meta, schema, tablePath); appender.init(); VTuple tuple = new VTuple(1); tuple.put(0, DatumFactory.createDate(1994,7,30)); appender.addTuple(tuple); appender.flush(); appender.close(); FileStatus status = fs.getFileStatus(tablePath); FileFragment fragment = new FileFragment("table", tablePath, 0, status.getLen()); Scanner scanner = sm.getScanner(meta, schema, fragment, null); scanner.init(); Tuple retrieved; while ((retrieved = scanner.next()) != null) { assertEquals(tuple.get(0).asChars(), retrieved.asDatum(0).asChars()); } scanner.close(); if (internalType){ OldStorageManager.clearCache(); } }
return new TimestampDatum(datum.getInt8()); case DATE: return DatumFactory.createDate(datum.getInt4()); case TIME: return DatumFactory.createTime(datum.getInt8());
public static void fillRow(int i, RowWriter builder) { builder.startRow(); builder.putBool(i % 1 == 0 ? true : false); // 0 builder.putInt2((short) 1); // 1 builder.putInt4(i); // 2 builder.putInt8(i); // 3 builder.putFloat4(i); // 4 builder.putFloat8(i); // 5 builder.putText((UNICODE_FIELD_PREFIX + i).getBytes()); // 6 builder.putTimestamp(DatumFactory.createTimestamp("2014-04-16 08:48:00").asInt8() + i); // 7 builder.putDate(DatumFactory.createDate("2014-04-16").asInt4() + i); // 8 builder.putTime(DatumFactory.createTime("08:48:00").asInt8() + i); // 9 builder.putInterval(DatumFactory.createInterval((i + 1) + " hours")); // 10 builder.putProtoDatum(new ProtobufDatum(ProtoUtil.convertString(i + ""))); // 11 builder.endRow(); }
public static void validateTupleResult(int j, Tuple t) { assertTrue((j % 1 == 0) == t.getBool(0)); assertTrue(1 == t.getInt2(1)); assertEquals(j, t.getInt4(2)); assertEquals(j, t.getInt8(3)); assertTrue(j == t.getFloat4(4)); assertTrue(j == t.getFloat8(5)); assertEquals(new String(UNICODE_FIELD_PREFIX + j), t.getText(6)); assertEquals(DatumFactory.createTimestamp("2014-04-16 08:48:00").asInt8() + (long) j, t.getInt8(7)); assertEquals(DatumFactory.createDate("2014-04-16").asInt4() + j, t.getInt4(8)); assertEquals(DatumFactory.createTime("08:48:00").asInt8() + j, t.getInt8(9)); assertEquals(DatumFactory.createInterval((j + 1) + " hours"), t.getInterval(10)); assertEquals(new ProtobufDatum(ProtoUtil.convertString(j + "")), t.getProtobufDatum(11)); }