You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2015/06/16 00:42:28 UTC
[06/13] tajo git commit: TAJO-1450: Encapsulate Datum in Tuple.
TAJO-1450: Encapsulate Datum in Tuple.
Closes #596
Signed-off-by: Jihoon Son <ji...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/5c2aee23
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/5c2aee23
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/5c2aee23
Branch: refs/heads/index_support
Commit: 5c2aee2369ebcbe5d2691c346bd7cd4207b68ff4
Parents: 03294e1
Author: navis.ryu <na...@apache.org>
Authored: Tue Jun 2 11:58:12 2015 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Tue Jun 2 11:58:12 2015 +0900
----------------------------------------------------------------------
CHANGES | 3 +
.../org/apache/tajo/jdbc/TajoResultSetBase.java | 306 +++++++------------
.../org/apache/tajo/storage/RowStoreUtil.java | 48 ++-
.../java/org/apache/tajo/datum/DateDatum.java | 34 +--
.../main/java/org/apache/tajo/datum/Datum.java | 7 +
.../org/apache/tajo/datum/DatumFactory.java | 4 +-
.../java/org/apache/tajo/datum/Float4Datum.java | 6 +-
.../java/org/apache/tajo/datum/Float8Datum.java | 6 +-
.../java/org/apache/tajo/datum/Int2Datum.java | 6 +-
.../java/org/apache/tajo/datum/Int4Datum.java | 6 +-
.../java/org/apache/tajo/datum/Int8Datum.java | 6 +-
.../org/apache/tajo/datum/IntervalDatum.java | 6 +-
.../java/org/apache/tajo/datum/TimeDatum.java | 22 +-
.../org/apache/tajo/datum/TimestampDatum.java | 45 ++-
.../org/apache/tajo/storage/EmptyTuple.java | 141 ++++++++-
.../java/org/apache/tajo/storage/NullTuple.java | 43 ++-
.../java/org/apache/tajo/storage/Tuple.java | 79 ++---
.../java/org/apache/tajo/storage/VTuple.java | 218 +++++++------
.../apache/tajo/util/datetime/DateTimeUtil.java | 12 +-
.../apache/tajo/datum/TestTimestampDatum.java | 2 +-
.../apache/tajo/util/TestDateTimeFormat.java | 2 +-
.../tajo/engine/function/builtin/AvgDouble.java | 10 +-
.../tajo/engine/function/builtin/AvgFloat.java | 5 +-
.../tajo/engine/function/builtin/AvgInt.java | 5 +-
.../tajo/engine/function/builtin/AvgLong.java | 10 +-
.../tajo/engine/function/builtin/Coalesce.java | 5 +-
.../tajo/engine/function/builtin/CountRows.java | 2 +-
.../engine/function/builtin/CountValue.java | 2 +-
.../function/builtin/CountValueDistinct.java | 13 +-
.../tajo/engine/function/builtin/Date.java | 2 +-
.../tajo/engine/function/builtin/LastValue.java | 5 +-
.../tajo/engine/function/builtin/Lead.java | 6 +-
.../tajo/engine/function/builtin/Max.java | 10 +-
.../tajo/engine/function/builtin/Min.java | 4 +-
.../tajo/engine/function/builtin/RandomInt.java | 2 +-
.../tajo/engine/function/builtin/SumDouble.java | 5 +-
.../function/builtin/SumDoubleDistinct.java | 10 +-
.../tajo/engine/function/builtin/SumFloat.java | 5 +-
.../function/builtin/SumFloatDistinct.java | 10 +-
.../engine/function/builtin/SumIntDistinct.java | 10 +-
.../tajo/engine/function/builtin/SumLong.java | 5 +-
.../function/builtin/SumLongDistinct.java | 10 +-
.../tajo/engine/function/builtin/Variance.java | 13 +-
.../tajo/engine/function/datetime/AddDays.java | 4 +-
.../engine/function/datetime/AddMonths.java | 6 +-
.../function/datetime/DatePartFromDate.java | 67 ++--
.../function/datetime/DatePartFromTime.java | 16 +-
.../datetime/DatePartFromTimestamp.java | 14 +-
.../datetime/DateTimePartFromUnixTimestamp.java | 26 +-
.../function/datetime/ToCharTimestamp.java | 10 +-
.../tajo/engine/function/datetime/ToDate.java | 6 +-
.../function/datetime/ToTimestampInt.java | 5 +-
.../function/datetime/ToTimestampText.java | 7 +-
.../function/geoip/GeoIPCountryInet4.java | 5 +-
.../engine/function/geoip/GeoIPCountryText.java | 5 +-
.../function/geoip/GeoIPInCountryInet4.java | 6 +-
.../function/geoip/GeoIPInCountryText.java | 6 +-
.../function/json/JsonExtractPathText.java | 9 +-
.../tajo/engine/function/math/AbsDouble.java | 5 +-
.../tajo/engine/function/math/AbsFloat.java | 5 +-
.../tajo/engine/function/math/AbsInt.java | 5 +-
.../tajo/engine/function/math/AbsLong.java | 5 +-
.../apache/tajo/engine/function/math/Acos.java | 5 +-
.../apache/tajo/engine/function/math/Asin.java | 5 +-
.../apache/tajo/engine/function/math/Atan.java | 5 +-
.../apache/tajo/engine/function/math/Atan2.java | 6 +-
.../apache/tajo/engine/function/math/Cbrt.java | 5 +-
.../apache/tajo/engine/function/math/Ceil.java | 5 +-
.../apache/tajo/engine/function/math/Cos.java | 5 +-
.../tajo/engine/function/math/Degrees.java | 5 +-
.../apache/tajo/engine/function/math/Div.java | 12 +-
.../apache/tajo/engine/function/math/Exp.java | 5 +-
.../apache/tajo/engine/function/math/Floor.java | 5 +-
.../apache/tajo/engine/function/math/Mod.java | 12 +-
.../apache/tajo/engine/function/math/Pow.java | 6 +-
.../tajo/engine/function/math/Radians.java | 5 +-
.../apache/tajo/engine/function/math/Round.java | 5 +-
.../tajo/engine/function/math/RoundFloat8.java | 9 +-
.../apache/tajo/engine/function/math/Sign.java | 5 +-
.../apache/tajo/engine/function/math/Sin.java | 5 +-
.../apache/tajo/engine/function/math/Sqrt.java | 5 +-
.../apache/tajo/engine/function/math/Tan.java | 5 +-
.../tajo/engine/function/string/Ascii.java | 7 +-
.../tajo/engine/function/string/BTrim.java | 10 +-
.../tajo/engine/function/string/BitLength.java | 8 +-
.../tajo/engine/function/string/CharLength.java | 7 +-
.../apache/tajo/engine/function/string/Chr.java | 7 +-
.../tajo/engine/function/string/Concat.java | 9 +-
.../tajo/engine/function/string/Concat_ws.java | 20 +-
.../tajo/engine/function/string/Decode.java | 17 +-
.../tajo/engine/function/string/Digest.java | 8 +-
.../tajo/engine/function/string/Encode.java | 18 +-
.../tajo/engine/function/string/FindInSet.java | 21 +-
.../tajo/engine/function/string/InitCap.java | 7 +-
.../tajo/engine/function/string/LTrim.java | 10 +-
.../tajo/engine/function/string/Left.java | 14 +-
.../tajo/engine/function/string/Length.java | 5 +-
.../tajo/engine/function/string/Locate.java | 15 +-
.../tajo/engine/function/string/Lower.java | 7 +-
.../tajo/engine/function/string/Lpad.java | 23 +-
.../apache/tajo/engine/function/string/Md5.java | 11 +-
.../engine/function/string/OctetLength.java | 5 +-
.../tajo/engine/function/string/QuoteIdent.java | 6 +-
.../tajo/engine/function/string/RTrim.java | 10 +-
.../engine/function/string/RegexpReplace.java | 51 ++--
.../tajo/engine/function/string/Repeat.java | 10 +-
.../tajo/engine/function/string/Reverse.java | 7 +-
.../tajo/engine/function/string/Right.java | 12 +-
.../tajo/engine/function/string/Rpad.java | 31 +-
.../tajo/engine/function/string/SplitPart.java | 9 +-
.../tajo/engine/function/string/StrPos.java | 15 +-
.../tajo/engine/function/string/StrPosb.java | 14 +-
.../tajo/engine/function/string/Substr.java | 37 +--
.../tajo/engine/function/string/ToBin.java | 5 +-
.../tajo/engine/function/string/ToCharLong.java | 4 +-
.../tajo/engine/function/string/ToHex.java | 5 +-
.../tajo/engine/function/string/Upper.java | 7 +-
.../tajo/engine/function/window/FirstValue.java | 6 +-
.../apache/tajo/engine/function/window/Lag.java | 8 +-
.../tajo/engine/function/window/Rank.java | 2 +-
.../engine/planner/RangePartitionAlgorithm.java | 66 ++--
.../engine/planner/UniformRangePartition.java | 208 +++++++------
.../planner/physical/BSTIndexScanExec.java | 3 +-
.../planner/physical/CommonHashJoinExec.java | 4 +-
.../planner/physical/ComparableVector.java | 10 +-
.../DistinctGroupbyFirstAggregationExec.java | 14 +-
.../DistinctGroupbyHashAggregationExec.java | 10 +-
.../DistinctGroupbySecondAggregationExec.java | 8 +-
.../DistinctGroupbySortAggregationExec.java | 2 +-
.../DistinctGroupbyThirdAggregationExec.java | 10 +-
.../planner/physical/HashAggregateExec.java | 4 +-
.../HashBasedColPartitionStoreExec.java | 4 +-
.../engine/planner/physical/HashJoinExec.java | 6 +-
.../planner/physical/HashLeftOuterJoinExec.java | 3 +-
.../planner/physical/HashPartitioner.java | 2 +-
.../planner/physical/JoinTupleComparator.java | 4 +-
.../physical/RangeShuffleFileWriteExec.java | 23 +-
.../planner/physical/SortAggregateExec.java | 9 +-
.../SortBasedColPartitionStoreExec.java | 5 +-
.../engine/planner/physical/WindowAggExec.java | 8 +-
.../org/apache/tajo/engine/utils/TupleUtil.java | 4 +-
.../NonForwardQueryResultSystemScanner.java | 21 +-
.../apache/tajo/master/exec/QueryExecutor.java | 2 +-
.../apache/tajo/engine/eval/ExprTestBase.java | 11 +-
.../tajo/engine/eval/TestEvalTreeUtil.java | 4 +-
.../tajo/engine/eval/TestSQLExpression.java | 7 +-
.../planner/TestUniformRangePartition.java | 216 ++++++-------
.../planner/physical/TestBNLJoinExec.java | 10 +-
.../planner/physical/TestBSTIndexExec.java | 4 +-
.../planner/physical/TestExternalSortExec.java | 2 +-
.../physical/TestFullOuterHashJoinExec.java | 6 +-
.../physical/TestFullOuterMergeJoinExec.java | 8 +-
.../planner/physical/TestHashAntiJoinExec.java | 10 +-
.../planner/physical/TestHashJoinExec.java | 10 +-
.../planner/physical/TestHashPartitioner.java | 10 +-
.../planner/physical/TestHashSemiJoinExec.java | 10 +-
.../physical/TestLeftOuterHashJoinExec.java | 6 +-
.../planner/physical/TestMergeJoinExec.java | 10 +-
.../engine/planner/physical/TestNLJoinExec.java | 10 +-
.../planner/physical/TestPhysicalPlanner.java | 68 ++---
.../physical/TestProgressExternalSortExec.java | 2 +-
.../physical/TestRightOuterHashJoinExec.java | 6 +-
.../physical/TestRightOuterMergeJoinExec.java | 8 +-
.../engine/planner/physical/TestSortExec.java | 8 +-
.../planner/physical/TestTupleSorter.java | 4 +-
.../apache/tajo/engine/util/TestTupleUtil.java | 23 +-
.../TestNonForwardQueryResultSystemScanner.java | 16 +-
.../org/apache/tajo/storage/TestRowFile.java | 4 +-
.../org/apache/tajo/jdbc/MetaDataTuple.java | 57 ++--
.../apache/tajo/jdbc/TajoMetaDataResultSet.java | 14 +-
.../org/apache/tajo/plan/ExprAnnotator.java | 2 +-
.../org/apache/tajo/plan/expr/FieldEval.java | 2 +-
.../plan/function/PythonAggFunctionInvoke.java | 2 +-
.../function/python/PythonScriptEngine.java | 4 +-
.../plan/function/stream/CSVLineSerializer.java | 12 +-
.../stream/TextFieldSerializerDeserializer.java | 4 +-
.../tajo/storage/BaseTupleComparator.java | 4 +-
.../storage/BinarySerializerDeserializer.java | 52 ++--
.../org/apache/tajo/storage/FrameTuple.java | 76 +++--
.../java/org/apache/tajo/storage/LazyTuple.java | 57 ++--
.../org/apache/tajo/storage/RowStoreUtil.java | 44 +--
.../tajo/storage/SerializerDeserializer.java | 7 +-
.../apache/tajo/storage/TableStatistics.java | 31 +-
.../storage/TextSerializerDeserializer.java | 67 ++--
.../org/apache/tajo/storage/TupleRange.java | 2 -
.../apache/tajo/tuple/offheap/HeapTuple.java | 51 ++--
.../apache/tajo/tuple/offheap/UnSafeTuple.java | 55 ++--
.../org/apache/tajo/storage/TestFrameTuple.java | 14 +-
.../org/apache/tajo/storage/TestLazyTuple.java | 26 +-
.../tajo/storage/TestTupleComparator.java | 7 +-
.../org/apache/tajo/storage/TestVTuple.java | 23 +-
.../tajo/tuple/offheap/TestOffHeapRowBlock.java | 26 +-
.../storage/hbase/AbstractHBaseAppender.java | 15 +-
.../HBaseBinarySerializerDeserializer.java | 35 +++
.../tajo/storage/hbase/HBasePutAppender.java | 6 +-
.../tajo/storage/hbase/HBaseTablespace.java | 2 +-
.../hbase/HBaseTextSerializerDeserializer.java | 9 +
.../java/org/apache/tajo/storage/CSVFile.java | 9 +-
.../storage/FieldSerializerDeserializer.java | 7 +-
.../java/org/apache/tajo/storage/RawFile.java | 4 +-
.../java/org/apache/tajo/storage/RowFile.java | 28 +-
.../apache/tajo/storage/avro/AvroAppender.java | 5 +-
.../tajo/storage/json/JsonLineSerializer.java | 2 +-
.../tajo/storage/parquet/ParquetAppender.java | 2 +-
.../storage/parquet/TajoRecordConverter.java | 2 +-
.../tajo/storage/parquet/TajoWriteSupport.java | 26 +-
.../org/apache/tajo/storage/rcfile/RCFile.java | 22 +-
.../sequencefile/SequenceFileAppender.java | 23 +-
.../sequencefile/SequenceFileScanner.java | 3 +-
.../tajo/storage/text/CSVLineDeserializer.java | 11 +-
.../tajo/storage/text/CSVLineSerializer.java | 5 +-
.../text/TextFieldSerializerDeserializer.java | 38 ++-
.../tajo/storage/TestDelimitedTextFile.java | 4 +-
.../tajo/storage/TestFileStorageManager.java | 5 +-
.../apache/tajo/storage/TestFileSystems.java | 9 +-
.../apache/tajo/storage/TestMergeScanner.java | 20 +-
.../org/apache/tajo/storage/TestStorages.java | 57 ++--
.../apache/tajo/storage/index/TestBSTIndex.java | 92 +++---
.../index/TestSingleCSVFileBSTIndex.java | 24 +-
.../apache/tajo/storage/json/TestJsonSerDe.java | 3 +-
.../tajo/storage/parquet/TestReadWrite.java | 2 +-
221 files changed, 2023 insertions(+), 1940 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 85c28ce..44a8939 100644
--- a/CHANGES
+++ b/CHANGES
@@ -287,6 +287,9 @@ Release 0.11.0 - unreleased
TASKS
+ TAJO-1450: Encapsulate Datum in Tuple. (Contributed by navis,
+ Committed by jihoon)
+
TAJO-1583: Remove ServerCallable in RPC client. (jinho)
TAJO-1587: Upgrade java version to 1.7 for Travis CI. (jihoon)
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetBase.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetBase.java b/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetBase.java
index 77cbbf2..ed06cf3 100644
--- a/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetBase.java
+++ b/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetBase.java
@@ -69,8 +69,8 @@ public abstract class TajoResultSetBase implements ResultSet {
wasNull = false;
}
- private void handleNull(Datum d) {
- wasNull = (d instanceof NullDatum);
+ private boolean handleNull(Tuple tuple, int index) {
+ return wasNull = tuple.isBlankOrNull(index);
}
public Tuple getCurrentTuple() {
@@ -84,274 +84,211 @@ public abstract class TajoResultSetBase implements ResultSet {
@Override
public boolean getBoolean(int fieldId) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return false;
- }
- return datum.asBool();
+ return getBoolean(cur, fieldId - 1);
}
@Override
public boolean getBoolean(String colName) throws SQLException {
- Datum datum = cur.get(findColumn(colName));
- handleNull(datum);
- if (wasNull) {
- return false;
- }
- return datum.asBool();
+ return getBoolean(cur, findColumn(colName));
+ }
+
+ private boolean getBoolean(Tuple tuple, int index) {
+ return handleNull(tuple, index) ? false : tuple.getBool(index);
}
@Override
public byte getByte(int fieldId) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return 0;
- }
- return datum.asByte();
+ return getByte(cur, fieldId - 1);
}
@Override
public byte getByte(String name) throws SQLException {
- Datum datum = cur.get(findColumn(name));
- handleNull(datum);
- if (wasNull) {
- return 0;
- }
- return datum.asByte();
+ return getByte(cur, findColumn(name));
+ }
+
+ private byte getByte(Tuple tuple, int index) {
+ return handleNull(tuple, index) ? 0 : tuple.getByte(index);
}
@Override
public byte[] getBytes(int fieldId) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return null;
- }
- return datum.asByteArray();
+ return getBytes(cur, fieldId - 1);
}
@Override
public byte[] getBytes(String name) throws SQLException {
- Datum datum = cur.get(findColumn(name));
- handleNull(datum);
- if (wasNull) {
- return null;
- }
- return datum.asByteArray();
+ return getBytes(cur, findColumn(name));
+ }
+
+ private byte[] getBytes(Tuple tuple, int index) {
+ return handleNull(tuple, index) ? null : tuple.getBytes(index);
}
@Override
public double getDouble(int fieldId) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return 0.0d;
- }
- return datum.asFloat8();
+ return getDouble(cur, fieldId - 1);
}
@Override
public double getDouble(String name) throws SQLException {
- Datum datum = cur.get(findColumn(name));
- handleNull(datum);
- if (wasNull) {
- return 0.0d;
- }
- return datum.asFloat8();
+ return getDouble(cur, findColumn(name));
+ }
+
+ private double getDouble(Tuple tuple, int index) {
+ return handleNull(tuple, index) ? 0.0d : tuple.getFloat8(index);
}
@Override
public float getFloat(int fieldId) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return 0.0f;
- }
- return datum.asFloat4();
+ return getFloat(cur, fieldId - 1);
}
@Override
public float getFloat(String name) throws SQLException {
- Datum datum = cur.get(findColumn(name));
- handleNull(datum);
- if (wasNull) {
- return 0.0f;
- }
- return datum.asFloat4();
+ return getFloat(cur, findColumn(name));
+ }
+
+ private float getFloat(Tuple tuple, int index) throws SQLException {
+ return handleNull(tuple, index) ? 0.0f : tuple.getFloat4(index);
}
@Override
public int getInt(int fieldId) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return 0;
- }
- return datum.asInt4();
+ return getInt(cur, fieldId - 1);
}
@Override
public int getInt(String name) throws SQLException {
- Datum datum = cur.get(findColumn(name));
- handleNull(datum);
- if (wasNull) {
- return 0;
- }
- return datum.asInt4();
+ return getInt(cur, findColumn(name));
+ }
+
+ private int getInt(Tuple tuple, int index) throws SQLException {
+ return handleNull(tuple, index) ? 0 : tuple.getInt4(index);
}
@Override
public long getLong(int fieldId) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return 0;
- }
- return datum.asInt8();
+ return getLong(cur, fieldId - 1);
}
@Override
public long getLong(String name) throws SQLException {
- Datum datum = cur.get(findColumn(name));
- handleNull(datum);
- if (wasNull) {
- return 0;
- }
- return datum.asInt8();
+ return getLong(cur, findColumn(name));
+ }
+
+ private long getLong(Tuple tuple, int index) throws SQLException {
+ return handleNull(tuple, index) ? 0 : tuple.getInt8(index);
}
@Override
public Object getObject(int fieldId) throws SQLException {
- Datum d = cur.get(fieldId - 1);
- handleNull(d);
+ return getObject(cur, fieldId - 1);
+ }
- if (wasNull) {
+ @Override
+ public Object getObject(String name) throws SQLException {
+ return getObject(cur, findColumn(name));
+ }
+
+ private Object getObject(Tuple tuple, int index) {
+ if (handleNull(tuple, index)) {
return null;
}
- TajoDataTypes.Type dataType = schema.getColumn(fieldId - 1).getDataType().getType();
+
+ TajoDataTypes.Type dataType = schema.getColumn(index).getDataType().getType();
switch(dataType) {
- case BOOLEAN: return d.asBool();
+ case BOOLEAN: return tuple.getBool(index);
case INT1:
- case INT2: return d.asInt2();
- case INT4: return d.asInt4();
- case INT8: return d.asInt8();
+ case INT2: return tuple.getInt2(index);
+ case INT4: return tuple.getInt4(index);
+ case INT8: return tuple.getInt8(index);
case TEXT:
case CHAR:
- case VARCHAR: return d.asChars();
- case FLOAT4: return d.asFloat4();
- case FLOAT8: return d.asFloat8();
- case NUMERIC: return d.asFloat8();
+ case VARCHAR: return tuple.getText(index);
+ case FLOAT4: return tuple.getFloat4(index);
+ case FLOAT8: return tuple.getFloat8(index);
+ case NUMERIC: return tuple.getFloat8(index);
case DATE: {
- return getDate((DateDatum)d, timezone);
+ return toDate(tuple.getTimeDate(index), timezone);
}
case TIME: {
- return getTime((TimeDatum)d, timezone);
+ return toTime(tuple.getTimeDate(index), timezone);
}
case TIMESTAMP: {
- return getTimestamp((TimestampDatum) d, timezone);
+ return toTimestamp(tuple.getTimeDate(index), timezone);
}
- default: return d.asChars();
+ default:
+ return tuple.getText(index);
}
}
@Override
- public Object getObject(String name) throws SQLException {
- return getObject(findColumn(name) + 1);
- }
-
- @Override
public short getShort(int fieldId) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return 0;
- }
- return datum.asInt2();
+ return getShort(cur, fieldId - 1);
}
@Override
public short getShort(String name) throws SQLException {
- Datum datum = cur.get(findColumn(name));
- handleNull(datum);
- if (wasNull) {
- return 0;
- }
- return datum.asInt2();
+ return getShort(cur, findColumn(name));
+ }
+
+ private short getShort(Tuple tuple, int index) throws SQLException {
+ return handleNull(tuple, index) ? 0 : tuple.getInt2(index);
}
@Override
public String getString(int fieldId) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- return getString(datum, fieldId);
+ return getString(cur, fieldId - 1);
}
@Override
public String getString(String name) throws SQLException {
- int id = findColumn(name);
- Datum datum = cur.get(id);
- return getString(datum, id + 1);
+ return getString(cur, findColumn(name));
}
- private String getString(Datum datum, int fieldId) throws SQLException {
- handleNull(datum);
-
- if (wasNull) {
+ private String getString(Tuple tuple, int index) throws SQLException {
+ if (handleNull(tuple, index)) {
return null;
}
- TajoDataTypes.Type dataType = datum.type();
-
- switch(dataType) {
+ switch(tuple.type(index)) {
case BOOLEAN:
- return String.valueOf(datum.asBool());
- case TIME: {
- return ((TimeDatum)datum).asChars(timezone, false);
- }
- case TIMESTAMP: {
- return ((TimestampDatum)datum).asChars(timezone, false);
- }
+ return String.valueOf(tuple.getBool(index));
+ case TIME:
+ return TimeDatum.asChars(tuple.getTimeDate(index), timezone, false);
+ case TIMESTAMP:
+ return TimestampDatum.asChars(tuple.getTimeDate(index), timezone, false);
default :
- return datum.asChars();
+ return tuple.getText(index);
}
}
@Override
public Date getDate(int fieldId) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return null;
- }
-
- return getDate((DateDatum)datum, null);
+ return getDate(cur, null, fieldId - 1);
}
@Override
public Date getDate(String name) throws SQLException {
- return getDate(findColumn(name) + 1);
+ return getDate(cur, null, findColumn(name));
}
@Override
public Date getDate(int fieldId, Calendar x) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return null;
- }
-
- return getDate((DateDatum)datum, x.getTimeZone());
+ return getDate(cur, x.getTimeZone(), fieldId - 1);
}
@Override
public Date getDate(String name, Calendar x) throws SQLException {
- return getDate(findColumn(name) + 1, x);
+ return getDate(cur, x.getTimeZone(), findColumn(name));
}
- private Date getDate(DateDatum datum, TimeZone tz) {
- TimeMeta tm = datum.toTimeMeta();
+ private Date getDate(Tuple tuple, TimeZone tz, int index) throws SQLException {
+ return handleNull(tuple, index) ? null : toDate(tuple.getTimeDate(index), tz);
+ }
+
+ private Date toDate(TimeMeta tm, TimeZone tz) {
if (tz != null) {
DateTimeUtil.toUserTimezone(tm, tz);
}
@@ -360,39 +297,29 @@ public abstract class TajoResultSetBase implements ResultSet {
@Override
public Time getTime(int fieldId) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return null;
- }
-
- return getTime((TimeDatum)datum, timezone);
-
+ return getTime(cur, null, fieldId - 1);
}
@Override
public Time getTime(String name) throws SQLException {
- return getTime(findColumn(name) + 1);
+ return getTime(cur, null, findColumn(name));
}
@Override
public Time getTime(int fieldId, Calendar x) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return null;
- }
-
- return getTime((TimeDatum)datum, x.getTimeZone());
+ return getTime(cur, x.getTimeZone(), fieldId - 1);
}
@Override
public Time getTime(String name, Calendar x) throws SQLException {
- return getTime(findColumn(name) + 1, x);
+ return getTime(cur, x.getTimeZone(), findColumn(name));
}
- private Time getTime(TimeDatum datum, TimeZone tz) {
- TimeMeta tm = datum.toTimeMeta();
+ private Time getTime(Tuple tuple, TimeZone tz, int index) throws SQLException {
+ return handleNull(tuple, index) ? null : toTime(tuple.getTimeDate(index), tz);
+ }
+
+ private Time toTime(TimeMeta tm, TimeZone tz) {
if (tz != null) {
DateTimeUtil.toUserTimezone(tm, tz);
}
@@ -401,38 +328,29 @@ public abstract class TajoResultSetBase implements ResultSet {
@Override
public Timestamp getTimestamp(int fieldId) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return null;
- }
-
- return getTimestamp((TimestampDatum)datum, timezone);
+ return getTimestamp(cur, null, fieldId - 1);
}
@Override
public Timestamp getTimestamp(String name) throws SQLException {
- return getTimestamp(findColumn(name) + 1);
+ return getTimestamp(cur, null, findColumn(name));
}
@Override
public Timestamp getTimestamp(int fieldId, Calendar x) throws SQLException {
- Datum datum = cur.get(fieldId - 1);
- handleNull(datum);
- if (wasNull) {
- return null;
- }
-
- return getTimestamp((TimestampDatum)datum, x.getTimeZone());
+ return getTimestamp(cur, x.getTimeZone(), fieldId - 1);
}
@Override
public Timestamp getTimestamp(String name, Calendar x) throws SQLException {
- return getTimestamp(findColumn(name) + 1, x);
+ return getTimestamp(cur, x.getTimeZone(), findColumn(name));
+ }
+
+ private Timestamp getTimestamp(Tuple tuple, TimeZone tz, int index) throws SQLException {
+ return handleNull(tuple, index) ? null : toTimestamp(tuple.getTimeDate(index), tz);
}
- private Timestamp getTimestamp(TimestampDatum datum, TimeZone tz) {
- TimeMeta tm = datum.toTimeMeta();
+ private Timestamp toTimestamp(TimeMeta tm, TimeZone tz) {
if (tz != null) {
DateTimeUtil.toUserTimezone(tm, tz);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-client/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/storage/RowStoreUtil.java b/tajo-client/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
index 95dd60e..ba7cf48 100644
--- a/tajo-client/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
+++ b/tajo-client/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
@@ -45,14 +45,6 @@ public class RowStoreUtil {
return targetIds;
}
- public static Tuple project(Tuple in, Tuple out, int[] targetIds) {
- out.clear();
- for (int idx = 0; idx < targetIds.length; idx++) {
- out.put(idx, in.get(targetIds[idx]));
- }
- return out;
- }
-
public static RowStoreEncoder createEncoder(Schema schema) {
return new RowStoreEncoder(schema);
}
@@ -77,7 +69,7 @@ public class RowStoreUtil {
public Tuple toTuple(byte [] bytes) {
nullFlags.clear();
ByteBuffer bb = ByteBuffer.wrap(bytes);
- Tuple tuple = new VTuple(schema.size());
+ VTuple tuple = new VTuple(schema.size());
Column col;
TajoDataTypes.DataType type;
@@ -189,7 +181,7 @@ public class RowStoreUtil {
bb.position(headerSize);
Column col;
for (int i = 0; i < schema.size(); i++) {
- if (tuple.isNull(i)) {
+ if (tuple.isBlankOrNull(i)) {
nullFlags.set(i);
continue;
}
@@ -197,12 +189,17 @@ public class RowStoreUtil {
col = schema.getColumn(i);
switch (col.getDataType().getType()) {
case NULL_TYPE: nullFlags.set(i); break;
- case BOOLEAN: bb.put(tuple.get(i).asByte()); break;
- case BIT: bb.put(tuple.get(i).asByte()); break;
+ case BOOLEAN: bb.put(tuple.getByte(i)); break;
+ case BIT: bb.put(tuple.getByte(i)); break;
+ case INT2: bb.putShort(tuple.getInt2(i)); break;
+ case INT4: bb.putInt(tuple.getInt4(i)); break;
+ case INT8: bb.putLong(tuple.getInt8(i)); break;
+ case FLOAT4: bb.putFloat(tuple.getFloat4(i)); break;
+ case FLOAT8: bb.putDouble(tuple.getFloat8(i)); break;
case CHAR:
int charSize = col.getDataType().getLength();
byte [] _char = new byte[charSize];
- byte [] src = tuple.get(i).asByteArray();
+ byte [] src = tuple.getBytes(i);
if (charSize < src.length) {
throw new ValueTooLongForTypeCharactersException(charSize);
}
@@ -210,36 +207,31 @@ public class RowStoreUtil {
System.arraycopy(src, 0, _char, 0, src.length);
bb.put(_char);
break;
- case INT2: bb.putShort(tuple.get(i).asInt2()); break;
- case INT4: bb.putInt(tuple.get(i).asInt4()); break;
- case INT8: bb.putLong(tuple.get(i).asInt8()); break;
- case FLOAT4: bb.putFloat(tuple.get(i).asFloat4()); break;
- case FLOAT8: bb.putDouble(tuple.get(i).asFloat8()); break;
case TEXT:
- byte [] _string = tuple.get(i).asByteArray();
+ byte [] _string = tuple.getBytes(i);
bb.putInt(_string.length);
bb.put(_string);
break;
- case DATE: bb.putInt(tuple.get(i).asInt4()); break;
+ case DATE: bb.putInt(tuple.getInt4(i)); break;
case TIME:
case TIMESTAMP:
- bb.putLong(tuple.get(i).asInt8());
+ bb.putLong(tuple.getInt8(i));
break;
case INTERVAL:
- IntervalDatum interval = (IntervalDatum) tuple.get(i);
+ IntervalDatum interval = (IntervalDatum) tuple.getInterval(i);
bb.putInt(interval.getMonths());
bb.putLong(interval.getMilliSeconds());
break;
case BLOB:
- byte [] bytes = tuple.get(i).asByteArray();
+ byte [] bytes = tuple.getBytes(i);
bb.putInt(bytes.length);
bb.put(bytes);
break;
case INET4:
- byte [] ipBytes = tuple.get(i).asByteArray();
+ byte [] ipBytes = tuple.getBytes(i);
bb.put(ipBytes);
break;
- case INET6: bb.put(tuple.get(i).asByteArray()); break;
+ case INET6: bb.put(tuple.getBytes(i)); break;
default:
throw new RuntimeException(new UnknownDataTypeException(col.getDataType().getType().name()));
}
@@ -263,7 +255,7 @@ public class RowStoreUtil {
Column col;
for (int i = 0; i < schema.size(); i++) {
- if (tuple.isNull(i)) {
+ if (tuple.isBlankOrNull(i)) {
continue;
}
@@ -286,9 +278,9 @@ public class RowStoreUtil {
case FLOAT8: size += 8; break;
case INTERVAL: size += 12; break;
case TEXT:
- case BLOB: size += (4 + tuple.get(i).asByteArray().length); break;
+ case BLOB: size += (4 + tuple.getBytes(i).length); break;
case INET4:
- case INET6: size += tuple.get(i).asByteArray().length; break;
+ case INET6: size += tuple.getBytes(i).length; break;
default:
throw new RuntimeException(new UnknownDataTypeException(col.getDataType().getType().name()));
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/datum/DateDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/DateDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/DateDatum.java
index 65342e8..093a8be 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/DateDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/DateDatum.java
@@ -47,7 +47,7 @@ public class DateDatum extends Datum {
dayOfMonth = tm.dayOfMonth;
}
- public TimeMeta toTimeMeta() {
+ public TimeMeta asTimeMeta() {
TimeMeta tm = new TimeMeta();
tm.years = year;
tm.monthOfYear = monthOfYear;
@@ -56,7 +56,7 @@ public class DateDatum extends Datum {
}
public int getCenturyOfEra() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.getCenturyOfEra();
}
@@ -65,7 +65,7 @@ public class DateDatum extends Datum {
}
public int getWeekyear() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.getWeekyear();
}
@@ -74,22 +74,22 @@ public class DateDatum extends Datum {
}
public int getDayOfYear() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.getDayOfYear();
}
public int getDayOfWeek() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.getDayOfWeek();
}
public int getISODayOfWeek() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.getISODayOfWeek();
}
public int getWeekOfYear() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.getWeekOfYear();
}
@@ -110,18 +110,18 @@ public class DateDatum extends Datum {
case INT8:
case FLOAT4:
case FLOAT8: {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
tm.plusDays(datum.asInt4());
return new DateDatum(tm);
}
case INTERVAL:
IntervalDatum interval = (IntervalDatum) datum;
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
tm.plusInterval(interval.months, interval.milliseconds);
return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm));
case TIME: {
- TimeMeta tm1 = toTimeMeta();
- TimeMeta tm2 = ((TimeDatum)datum).toTimeMeta();
+ TimeMeta tm1 = asTimeMeta();
+ TimeMeta tm2 = datum.asTimeMeta();
tm1.plusTime(DateTimeUtil.toTime(tm2));
return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm1));
}
@@ -138,19 +138,19 @@ public class DateDatum extends Datum {
case INT8:
case FLOAT4:
case FLOAT8: {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
tm.plusDays(0 - datum.asInt4());
return new DateDatum(tm);
}
case INTERVAL: {
IntervalDatum interval = (IntervalDatum) datum;
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
tm.plusInterval(-interval.months, -interval.milliseconds);
return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm));
}
case TIME: {
- TimeMeta tm1 = toTimeMeta();
- TimeMeta tm2 = ((TimeDatum)datum).toTimeMeta();
+ TimeMeta tm1 = asTimeMeta();
+ TimeMeta tm2 = datum.asTimeMeta();
tm1.plusTime(0 - DateTimeUtil.toTime(tm2));
return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm1));
}
@@ -231,8 +231,8 @@ public class DateDatum extends Datum {
} else if (datum.type() == TajoDataTypes.Type.TIMESTAMP) {
TimestampDatum another = (TimestampDatum) datum;
TimeMeta myMeta, otherMeta;
- myMeta = toTimeMeta();
- otherMeta = another.toTimeMeta();
+ myMeta = asTimeMeta();
+ otherMeta = another.asTimeMeta();
return myMeta.compareTo(otherMeta);
} else if (datum instanceof NullDatum || datum.isNull()) {
return -1;
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/datum/Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Datum.java
index 1ff305d..e3e1295 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Datum.java
@@ -26,6 +26,7 @@ import org.apache.tajo.exception.InvalidCastException;
import org.apache.tajo.exception.InvalidOperationException;
import org.apache.tajo.json.CommonGsonHelper;
import org.apache.tajo.json.GsonObject;
+import org.apache.tajo.util.datetime.TimeMeta;
import static org.apache.tajo.common.TajoDataTypes.Type;
@@ -102,6 +103,7 @@ public abstract class Datum implements Comparable<Datum>, GsonObject {
throw new InvalidCastException(type, Type.TEXT);
}
+ // todo remove this
public char [] asUnicodeChars() {
throw new InvalidCastException(type, Type.TEXT);
}
@@ -110,6 +112,10 @@ public abstract class Datum implements Comparable<Datum>, GsonObject {
return asChars().getBytes();
}
+ public TimeMeta asTimeMeta() {
+ throw new InvalidCastException(type, Type.INT8);
+ }
+
public boolean isNumeric() {
return isNumber() || isReal();
}
@@ -133,6 +139,7 @@ public abstract class Datum implements Comparable<Datum>, GsonObject {
public abstract int size();
+ // belows should be extracted out of datum
public Datum and(Datum datum) {
throw new InvalidOperationException(datum.type);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java b/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java
index bd1b88f..480582a 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java
@@ -433,7 +433,7 @@ public class DatumFactory {
case TIMESTAMP: {
TimestampDatum timestampDatum = (TimestampDatum)operandDatum;
if (tz != null) {
- return DatumFactory.createText(timestampDatum.asChars(tz, false));
+ return DatumFactory.createText(TimestampDatum.asChars(operandDatum.asTimeMeta(), tz, false));
} else {
return DatumFactory.createText(timestampDatum.asChars());
}
@@ -441,7 +441,7 @@ public class DatumFactory {
case TIME: {
TimeDatum timeDatum = (TimeDatum)operandDatum;
if (tz != null) {
- return DatumFactory.createText(timeDatum.asChars(tz, false));
+ return DatumFactory.createText(TimeDatum.asChars(operandDatum.asTimeMeta(), tz, false));
} else {
return DatumFactory.createText(timeDatum.asChars());
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java
index e71a201..0fe598a 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java
@@ -214,8 +214,7 @@ public class Float4Datum extends NumericDatum {
case FLOAT8:
return DatumFactory.createFloat8(val + datum.asFloat8());
case DATE:
- DateDatum dateDatum = (DateDatum)datum;
- TimeMeta tm = dateDatum.toTimeMeta();
+ TimeMeta tm = datum.asTimeMeta();
tm.plusDays(asInt4());
return new DateDatum(tm);
case NULL_TYPE:
@@ -239,8 +238,7 @@ public class Float4Datum extends NumericDatum {
case FLOAT8:
return DatumFactory.createFloat8(val - datum.asFloat8());
case DATE:
- DateDatum dateDatum = (DateDatum)datum;
- TimeMeta tm = dateDatum.toTimeMeta();
+ TimeMeta tm = datum.asTimeMeta();
tm.plusDays(0 - asInt4());
return new DateDatum(tm);
case NULL_TYPE:
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java
index a0298f2..6ebe10b 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java
@@ -203,8 +203,7 @@ public class Float8Datum extends NumericDatum {
case FLOAT8:
return DatumFactory.createFloat8(val + datum.asFloat8());
case DATE:
- DateDatum dateDatum = (DateDatum)datum;
- TimeMeta tm = dateDatum.toTimeMeta();
+ TimeMeta tm = datum.asTimeMeta();
tm.plusDays(asInt4());
return new DateDatum(tm);
case NULL_TYPE:
@@ -228,8 +227,7 @@ public class Float8Datum extends NumericDatum {
case FLOAT8:
return DatumFactory.createFloat8(val - datum.asFloat8());
case DATE:
- DateDatum dateDatum = (DateDatum)datum;
- TimeMeta tm = dateDatum.toTimeMeta();
+ TimeMeta tm = datum.asTimeMeta();
tm.plusDays(0 - asInt4());
return new DateDatum(tm);
case NULL_TYPE:
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java
index f11a5c5..6145c75 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java
@@ -205,8 +205,7 @@ public class Int2Datum extends NumericDatum {
case FLOAT8:
return DatumFactory.createFloat8(val + datum.asFloat8());
case DATE:
- DateDatum dateDatum = (DateDatum)datum;
- TimeMeta tm = dateDatum.toTimeMeta();
+ TimeMeta tm = datum.asTimeMeta();
tm.plusDays(asInt2());
return new DateDatum(tm);
case NULL_TYPE:
@@ -230,8 +229,7 @@ public class Int2Datum extends NumericDatum {
case FLOAT8:
return DatumFactory.createFloat8(val - datum.asFloat8());
case DATE:
- DateDatum dateDatum = (DateDatum)datum;
- TimeMeta tm = dateDatum.toTimeMeta();
+ TimeMeta tm = datum.asTimeMeta();
tm.plusDays(0 - asInt2());
return new DateDatum(tm);
case NULL_TYPE:
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java
index ea531b9..530ef84 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java
@@ -209,8 +209,7 @@ public class Int4Datum extends NumericDatum {
case FLOAT8:
return DatumFactory.createFloat8(val + datum.asFloat8());
case DATE:
- DateDatum dateDatum = (DateDatum)datum;
- TimeMeta tm = dateDatum.toTimeMeta();
+ TimeMeta tm = datum.asTimeMeta();
tm.plusDays(asInt4());
return new DateDatum(tm);
case NULL_TYPE:
@@ -234,8 +233,7 @@ public class Int4Datum extends NumericDatum {
case FLOAT8:
return DatumFactory.createFloat8(val - datum.asFloat8());
case DATE:
- DateDatum dateDatum = (DateDatum)datum;
- TimeMeta tm = dateDatum.toTimeMeta();
+ TimeMeta tm = datum.asTimeMeta();
tm.plusDays(0 - asInt4());
return new DateDatum(tm);
case NULL_TYPE:
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java
index cd448e3..66c093a 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java
@@ -217,8 +217,7 @@ public class Int8Datum extends NumericDatum {
case FLOAT8:
return DatumFactory.createFloat8(val + datum.asFloat8());
case DATE:
- DateDatum dateDatum = (DateDatum)datum;
- TimeMeta tm = dateDatum.toTimeMeta();
+ TimeMeta tm = datum.asTimeMeta();
tm.plusDays(asInt4());
return new DateDatum(tm);
case NULL_TYPE:
@@ -242,8 +241,7 @@ public class Int8Datum extends NumericDatum {
case FLOAT8:
return DatumFactory.createFloat8(val - datum.asFloat8());
case DATE:
- DateDatum dateDatum = (DateDatum)datum;
- TimeMeta tm = dateDatum.toTimeMeta();
+ TimeMeta tm = datum.asTimeMeta();
tm.plusDays(0 - asInt4());
return new DateDatum(tm);
case NULL_TYPE:
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/datum/IntervalDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/IntervalDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/IntervalDatum.java
index e8d439d..d3cb6c7 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/IntervalDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/IntervalDatum.java
@@ -231,12 +231,12 @@ public class IntervalDatum extends Datum {
return new IntervalDatum(months + other.months, milliseconds + other.milliseconds);
case DATE: {
DateDatum dateDatum = (DateDatum) datum;
- TimeMeta tm = dateDatum.toTimeMeta();
+ TimeMeta tm = dateDatum.asTimeMeta();
tm.plusInterval(months, milliseconds);
return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm));
}
case TIME: {
- TimeMeta tm = ((TimeDatum) datum).toTimeMeta();
+ TimeMeta tm = datum.asTimeMeta();
tm.plusInterval(months, milliseconds);
return new TimeDatum(DateTimeUtil.toTime(tm));
}
@@ -303,7 +303,7 @@ public class IntervalDatum extends Datum {
private IntervalDatum createIntervalDatum(double monthValue, double millisValue) {
int month = (int)(monthValue);
- return new IntervalDatum(month, Math.round((monthValue - (double)month) * (double)MONTH_MILLIS + (double)millisValue));
+ return new IntervalDatum(month, Math.round((monthValue - (double)month) * (double)MONTH_MILLIS + millisValue));
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/datum/TimeDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/TimeDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/TimeDatum.java
index 04cce54..5786657 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/TimeDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/TimeDatum.java
@@ -38,7 +38,8 @@ public class TimeDatum extends Datum {
this.time = time;
}
- public TimeMeta toTimeMeta() {
+ @Override
+ public TimeMeta asTimeMeta() {
TimeMeta tm = new TimeMeta();
DateTimeUtil.date2j(time, tm);
@@ -46,12 +47,12 @@ public class TimeDatum extends Datum {
}
public int getHourOfDay() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.hours;
}
public int getMinuteOfHour() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.minutes;
}
@@ -62,7 +63,7 @@ public class TimeDatum extends Datum {
}
public int getMillisOfSecond() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.fsecs / 1000;
}
@@ -92,12 +93,11 @@ public class TimeDatum extends Datum {
@Override
public String asChars() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return DateTimeUtil.encodeTime(tm, DateStyle.ISO_DATES);
}
- public String asChars(TimeZone timeZone, boolean includeTimeZone) {
- TimeMeta tm = toTimeMeta();
+ public static String asChars(TimeMeta tm, TimeZone timeZone, boolean includeTimeZone) {
DateTimeUtil.toUserTimezone(tm, timeZone);
if (includeTimeZone) {
tm.timeZone = timeZone.getRawOffset() / 1000;
@@ -106,7 +106,7 @@ public class TimeDatum extends Datum {
}
public String toString(TimeZone timeZone, boolean includeTimeZone) {
- return asChars(timeZone, includeTimeZone);
+ return asChars(asTimeMeta(), timeZone, includeTimeZone);
}
@Override
@@ -124,12 +124,12 @@ public class TimeDatum extends Datum {
switch(datum.type()) {
case INTERVAL:
IntervalDatum interval = ((IntervalDatum)datum);
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
tm.plusInterval(interval.months, interval.milliseconds);
return new TimeDatum(DateTimeUtil.toTime(tm));
case DATE: {
DateDatum dateDatum = (DateDatum) datum;
- TimeMeta dateTm = dateDatum.toTimeMeta();
+ TimeMeta dateTm = dateDatum.asTimeMeta();
dateTm.plusTime(time);
return new TimestampDatum(DateTimeUtil.toJulianTimestamp(dateTm));
}
@@ -143,7 +143,7 @@ public class TimeDatum extends Datum {
switch(datum.type()) {
case INTERVAL:
IntervalDatum interval = ((IntervalDatum)datum);
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
tm.plusInterval(-interval.months, -interval.milliseconds);
return new TimeDatum(DateTimeUtil.toTime(tm));
case TIME:
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/datum/TimestampDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/TimestampDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/TimestampDatum.java
index ad73c74..02425eb 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/TimestampDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/TimestampDatum.java
@@ -61,57 +61,57 @@ public class TimestampDatum extends Datum {
public int getCenturyOfEra() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.getCenturyOfEra();
}
public int getYear() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.years;
}
public int getMonthOfYear() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.monthOfYear;
}
public int getDayOfYear() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.getDayOfYear();
}
public int getDayOfWeek() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.getDayOfYear();
}
public int getWeekOfYear() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.getWeekOfYear();
}
public int getDayOfMonth() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.dayOfMonth;
}
public int getHourOfDay() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.hours;
}
public int getMinuteOfHour() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.minutes;
}
public int getSecondOfMinute() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.secs;
}
public int getMillisOfSecond() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return tm.fsecs / 1000;
}
@@ -123,17 +123,16 @@ public class TimestampDatum extends Datum {
return asChars();
}
- public String asChars(TimeZone timeZone, boolean includeTimeZone) {
- TimeMeta tm = toTimeMeta();
+ public static String asChars(TimeMeta tm, TimeZone timeZone, boolean includeTimeZone) {
DateTimeUtil.toUserTimezone(tm, timeZone);
if (includeTimeZone) {
tm.timeZone = timeZone.getRawOffset() / 1000;
}
- return DateTimeUtil.encodeDateTime(tm, DateStyle.ISO_DATES);
+ return DateTimeUtil.encodeDateTime(tm, DateStyle.ISO_DATES);
}
public String toString(TimeZone timeZone, boolean includeTimeZone) {
- return asChars(timeZone, includeTimeZone);
+ return asChars(asTimeMeta(), timeZone, includeTimeZone);
}
@Override
@@ -143,12 +142,12 @@ public class TimestampDatum extends Datum {
@Override
public String asChars() {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return DateTimeUtil.encodeDateTime(tm, DateStyle.ISO_DATES);
}
public String toChars(String format) {
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
return DateTimeFormat.to_char(tm, format);
}
@@ -180,10 +179,9 @@ public class TimestampDatum extends Datum {
TimestampDatum another = (TimestampDatum) datum;
return Longs.compare(timestamp, another.timestamp);
} else if (datum.type() == TajoDataTypes.Type.DATE) {
- DateDatum another = (DateDatum) datum;
TimeMeta myMeta, otherMeta;
- myMeta = toTimeMeta();
- otherMeta = another.toTimeMeta();
+ myMeta = asTimeMeta();
+ otherMeta = datum.asTimeMeta();
return myMeta.compareTo(otherMeta);
} else if (datum.isNull()) {
return -1;
@@ -206,7 +204,7 @@ public class TimestampDatum extends Datum {
public Datum plus(Datum datum) {
if (datum.type() == TajoDataTypes.Type.INTERVAL) {
IntervalDatum interval = (IntervalDatum)datum;
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
tm.plusInterval(interval.months, interval.milliseconds);
return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm));
} else {
@@ -219,7 +217,7 @@ public class TimestampDatum extends Datum {
switch(datum.type()) {
case INTERVAL:
IntervalDatum interval = (IntervalDatum)datum;
- TimeMeta tm = toTimeMeta();
+ TimeMeta tm = asTimeMeta();
tm.plusInterval(-interval.months, -interval.milliseconds);
return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm));
case TIMESTAMP:
@@ -234,7 +232,8 @@ public class TimestampDatum extends Datum {
return Longs.hashCode(timestamp);
}
- public TimeMeta toTimeMeta() {
+ @Override
+ public TimeMeta asTimeMeta() {
TimeMeta tm = new TimeMeta();
DateTimeUtil.toJulianTimeMeta(timestamp, tm);
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/storage/EmptyTuple.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/storage/EmptyTuple.java b/tajo-common/src/main/java/org/apache/tajo/storage/EmptyTuple.java
index cdcebd7..d3ad4f3 100644
--- a/tajo-common/src/main/java/org/apache/tajo/storage/EmptyTuple.java
+++ b/tajo-common/src/main/java/org/apache/tajo/storage/EmptyTuple.java
@@ -18,12 +18,19 @@
package org.apache.tajo.storage;
+import org.apache.tajo.common.TajoDataTypes;
+import org.apache.tajo.datum.Datum;
+import org.apache.tajo.datum.NullDatum;
+import org.apache.tajo.datum.ProtobufDatum;
+import org.apache.tajo.util.datetime.TimeMeta;
+
/* This class doesn’t have content datum. if selected column is zero, this is useful
* e.g. select count(*) from table
* */
public class EmptyTuple extends NullTuple {
private static EmptyTuple tuple;
+ private static Datum[] EMPTY_VALUES = new Datum[0];
static {
tuple = new EmptyTuple();
@@ -38,7 +45,139 @@ public class EmptyTuple extends NullTuple {
}
@Override
- public Tuple clone() {
+ public int size() {
+ return 0;
+ }
+
+ public boolean contains(int fieldId) {
+ return false;
+ }
+
+ @Override
+ public boolean isBlank(int fieldid) {
+ return true;
+ }
+
+ @Override
+ public boolean isBlankOrNull(int fieldid) {
+ return true;
+ }
+
+ @Override
+ public void clear() {
+ }
+
+ @Override
+ public void put(int fieldId, Datum value) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Datum asDatum(int fieldId) {
+ return NullDatum.get();
+ }
+
+ @Override
+ public TajoDataTypes.Type type(int fieldId) {
+ return null;
+ }
+
+ @Override
+ public int size(int fieldId) {
+ return 0;
+ }
+
+ @Override
+ public void setOffset(long offset) {
+ }
+
+ @Override
+ public long getOffset() {
+ return -1;
+ }
+
+ @Override
+ public boolean getBool(int fieldId) {
+ return NullDatum.get().asBool();
+ }
+
+ @Override
+ public byte getByte(int fieldId) {
+ return NullDatum.get().asByte();
+ }
+
+ @Override
+ public char getChar(int fieldId) {
+ return NullDatum.get().asChar();
+ }
+
+ @Override
+ public byte[] getBytes(int fieldId) {
+ return NullDatum.get().asByteArray();
+ }
+
+ @Override
+ public byte[] getTextBytes(int fieldId) {
+ return NullDatum.get().asTextBytes();
+ }
+
+ @Override
+ public short getInt2(int fieldId) {
+ return NullDatum.get().asInt2();
+ }
+
+ @Override
+ public int getInt4(int fieldId) {
+ return NullDatum.get().asInt4();
+ }
+
+ @Override
+ public long getInt8(int fieldId) {
+ return NullDatum.get().asInt8();
+ }
+
+ @Override
+ public float getFloat4(int fieldId) {
+ return NullDatum.get().asFloat4();
+ }
+
+ @Override
+ public double getFloat8(int fieldId) {
+ return NullDatum.get().asFloat8();
+ }
+
+ @Override
+ public String getText(int fieldId) {
+ return NullDatum.get().asChars();
+ }
+
+ @Override
+ public TimeMeta getTimeDate(int fieldId) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public ProtobufDatum getProtobufDatum(int fieldId) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Datum getInterval(int fieldId) {
+ return NullDatum.get();
+ }
+
+ @Override
+ public char[] getUnicodeChars(int fieldId) {
+ return NullDatum.get().asUnicodeChars();
+ }
+
+ @Override
+ public Datum[] getValues() {
+ return EMPTY_VALUES;
+ }
+
+ @Override
+ public Tuple clone() throws CloneNotSupportedException {
return this;
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/storage/NullTuple.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/storage/NullTuple.java b/tajo-common/src/main/java/org/apache/tajo/storage/NullTuple.java
index 45eb859..a17ef01 100644
--- a/tajo-common/src/main/java/org/apache/tajo/storage/NullTuple.java
+++ b/tajo-common/src/main/java/org/apache/tajo/storage/NullTuple.java
@@ -18,9 +18,11 @@
package org.apache.tajo.storage;
+import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.NullDatum;
import org.apache.tajo.datum.ProtobufDatum;
+import org.apache.tajo.util.datetime.TimeMeta;
import java.util.Arrays;
@@ -33,6 +35,8 @@ public class NullTuple implements Tuple, Cloneable {
return new NullTuple(size);
}
+ private static final byte[] NULL_TEXT_BYTES = new byte[0];
+
private final int size;
NullTuple(int size) {
@@ -49,13 +53,13 @@ public class NullTuple implements Tuple, Cloneable {
}
@Override
- public boolean isNull(int fieldid) {
- return true;
+ public boolean isBlank(int fieldid) {
+ return false;
}
@Override
- public boolean isNotNull(int fieldid) {
- return false;
+ public boolean isBlankOrNull(int fieldid) {
+ return true;
}
@Override
@@ -68,23 +72,28 @@ public class NullTuple implements Tuple, Cloneable {
}
@Override
- public void put(int fieldId, Datum[] values) {
- throw new UnsupportedOperationException();
+ public Datum asDatum(int fieldId) {
+ return NullDatum.get();
}
@Override
- public void put(int fieldId, Tuple tuple) {
- throw new UnsupportedOperationException();
+ public TajoDataTypes.Type type(int fieldId) {
+ return null;
}
@Override
- public void put(Datum[] values) {
+ public int size(int fieldId) {
+ return 0;
+ }
+
+ @Override
+ public void put(int fieldId, Tuple tuple) {
throw new UnsupportedOperationException();
}
@Override
- public Datum get(int fieldId) {
- return NullDatum.get();
+ public void put(Datum[] values) {
+ throw new UnsupportedOperationException();
}
@Override
@@ -117,6 +126,11 @@ public class NullTuple implements Tuple, Cloneable {
}
@Override
+ public byte[] getTextBytes(int fieldId) {
+ return NULL_TEXT_BYTES;
+ }
+
+ @Override
public short getInt2(int fieldId) {
return NullDatum.get().asInt2();
}
@@ -147,6 +161,11 @@ public class NullTuple implements Tuple, Cloneable {
}
@Override
+ public TimeMeta getTimeDate(int fieldId) {
+ return null;
+ }
+
+ @Override
public ProtobufDatum getProtobufDatum(int fieldId) {
throw new UnsupportedOperationException();
}
@@ -163,7 +182,7 @@ public class NullTuple implements Tuple, Cloneable {
@Override
public Tuple clone() throws CloneNotSupportedException {
- return new NullTuple(size);
+ return this;
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/storage/Tuple.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/storage/Tuple.java b/tajo-common/src/main/java/org/apache/tajo/storage/Tuple.java
index fce10a3..7eb56bd 100644
--- a/tajo-common/src/main/java/org/apache/tajo/storage/Tuple.java
+++ b/tajo-common/src/main/java/org/apache/tajo/storage/Tuple.java
@@ -18,62 +18,71 @@
package org.apache.tajo.storage;
+import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
+import org.apache.tajo.util.datetime.TimeMeta;
public interface Tuple extends Cloneable {
-
- int size();
-
- boolean contains(int fieldid);
- boolean isNull(int fieldid);
+ int size();
- @SuppressWarnings("unused")
- boolean isNotNull(int fieldid);
-
- void clear();
-
- void put(int fieldId, Datum value);
+ boolean contains(int fieldid);
- void put(int fieldId, Datum[] values);
+ boolean isBlank(int fieldid);
+
+ boolean isBlankOrNull(int fieldid);
void put(int fieldId, Tuple tuple);
-
- void put(Datum[] values);
-
- Datum get(int fieldId);
- void setOffset(long offset);
-
- long getOffset();
+ void put(int fieldId, Datum value);
+
+ void put(Datum[] values);
+
+ void clear();
+
+ Datum asDatum(int fieldId);
+
+ TajoDataTypes.Type type(int fieldId);
- boolean getBool(int fieldId);
+ int size(int fieldId);
- byte getByte(int fieldId);
+ void setOffset(long offset);
+
+ long getOffset();
+
+ boolean getBool(int fieldId);
+
+ byte getByte(int fieldId);
char getChar(int fieldId);
-
- byte [] getBytes(int fieldId);
-
- short getInt2(int fieldId);
-
- int getInt4(int fieldId);
-
- long getInt8(int fieldId);
-
- float getFloat4(int fieldId);
-
- double getFloat8(int fieldId);
-
- String getText(int fieldId);
+
+ byte[] getBytes(int fieldId);
+
+ byte[] getTextBytes(int fieldId);
+
+ short getInt2(int fieldId);
+
+ int getInt4(int fieldId);
+
+ long getInt8(int fieldId);
+
+ float getFloat4(int fieldId);
+
+ double getFloat8(int fieldId);
+
+ String getText(int fieldId);
+
+ TimeMeta getTimeDate(int fieldId);
Datum getProtobufDatum(int fieldId);
Datum getInterval(int fieldId);
+ // todo remove this
char [] getUnicodeChars(int fieldId);
Tuple clone() throws CloneNotSupportedException;
+ // todo remove this
Datum[] getValues();
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java b/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
index da69eb0..2c81e54 100644
--- a/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
+++ b/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
@@ -19,22 +19,24 @@
package org.apache.tajo.storage;
import com.google.gson.annotations.Expose;
+import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.Inet4Datum;
import org.apache.tajo.datum.IntervalDatum;
import org.apache.tajo.datum.ProtobufDatum;
import org.apache.tajo.exception.UnimplementedException;
+import org.apache.tajo.util.datetime.TimeMeta;
import java.net.InetAddress;
import java.util.Arrays;
public class VTuple implements Tuple, Cloneable {
- @Expose public Datum [] values;
- @Expose private long offset;
-
- public VTuple(int size) {
- values = new Datum[size];
- }
+ @Expose public Datum [] values;
+ @Expose private long offset;
+
+ public VTuple(int size) {
+ values = new Datum[size];
+ }
public VTuple(Tuple tuple) {
this.values = tuple.getValues().clone();
@@ -42,84 +44,90 @@ public class VTuple implements Tuple, Cloneable {
public VTuple(Datum[] datum) {
this(datum.length);
- put(datum);
+ this.values = Arrays.copyOf(datum, datum.length);
}
- @Override
- public int size() {
- return values.length;
- }
-
- public boolean contains(int fieldId) {
- return values[fieldId] != null;
- }
+ @Override
+ public int size() {
+ return values.length;
+ }
+
+ public boolean contains(int fieldId) {
+ return values[fieldId] != null;
+ }
@Override
- public boolean isNull(int fieldid) {
+ public boolean isBlank(int fieldid) {
+ return values[fieldid] == null;
+ }
+
+ @Override
+ public boolean isBlankOrNull(int fieldid) {
return values[fieldid] == null || values[fieldid].isNull();
}
@Override
- public boolean isNotNull(int fieldid) {
- return !isNull(fieldid);
+ public void put(int fieldId, Tuple tuple) {
+ this.put(fieldId, tuple.asDatum(fieldId));
}
@Override
- public void clear() {
+ public void clear() {
for (int i=0; i < values.length; i++) {
values[i] = null;
}
}
-
- //////////////////////////////////////////////////////
- // Setter
- //////////////////////////////////////////////////////
- public void put(int fieldId, Datum value) {
- values[fieldId] = value;
- }
+
+ //////////////////////////////////////////////////////
+ // Setter
+ //////////////////////////////////////////////////////
+ public void put(int fieldId, Datum value) {
+ values[fieldId] = value;
+ }
@Override
- public void put(int fieldId, Datum[] values) {
- for (int i = fieldId, j = 0; j < values.length; i++, j++) {
- values[i] = values[j];
- }
+ public Datum asDatum(int fieldId) {
+ return values[fieldId] == null ? null : values[fieldId];
}
@Override
- public void put(int fieldId, Tuple tuple) {
- for (int i = fieldId, j = 0; j < tuple.size(); i++, j++) {
- values[i] = tuple.get(j);
- }
+ public TajoDataTypes.Type type(int fieldId) {
+ return values[fieldId].type();
+ }
+
+ @Override
+ public int size(int fieldId) {
+ return values[fieldId].size();
}
public void put(Datum [] values) {
System.arraycopy(values, 0, this.values, 0, values.length);
- }
-
- //////////////////////////////////////////////////////
- // Getter
- //////////////////////////////////////////////////////
- public Datum get(int fieldId) {
- return this.values[fieldId];
- }
-
- public void setOffset(long offset) {
- this.offset = offset;
- }
-
- public long getOffset() {
- return this.offset;
- }
-
- @Override
- public boolean getBool(int fieldId) {
- return values[fieldId].asBool();
- }
-
- @Override
- public byte getByte(int fieldId) {
- return values[fieldId].asByte();
- }
+ }
+
+ //////////////////////////////////////////////////////
+ // Getter
+ //////////////////////////////////////////////////////
+ public Datum get(int fieldId) {
+ return this.values[fieldId];
+ }
+
+ public void setOffset(long offset) {
+ this.offset = offset;
+ }
+
+ public long getOffset() {
+ return this.offset;
+ }
+
+ @Override
+ public boolean getBool(int fieldId) {
+ return values[fieldId].asBool();
+ }
+
+ @Override
+ public byte getByte(int fieldId) {
+ return values[fieldId].asByte();
+ }
@Override
public char getChar(int fieldId) {
@@ -127,55 +135,65 @@ public class VTuple implements Tuple, Cloneable {
}
@Override
- public byte [] getBytes(int fieldId) {
- return values[fieldId].asByteArray();
- }
+ public byte [] getBytes(int fieldId) {
+ return values[fieldId].asByteArray();
+ }
@Override
- public short getInt2(int fieldId) {
- return values[fieldId].asInt2();
- }
+ public byte[] getTextBytes(int fieldId) {
+ return values[fieldId].asTextBytes();
+ }
@Override
- public int getInt4(int fieldId) {
- return values[fieldId].asInt4();
- }
+ public short getInt2(int fieldId) {
+ return values[fieldId].asInt2();
+ }
@Override
- public long getInt8(int fieldId) {
- return values[fieldId].asInt8();
- }
+ public int getInt4(int fieldId) {
+ return values[fieldId].asInt4();
+ }
@Override
- public float getFloat4(int fieldId) {
- return values[fieldId].asFloat4();
- }
+ public long getInt8(int fieldId) {
+ return values[fieldId].asInt8();
+ }
@Override
- public double getFloat8(int fieldId) {
- return values[fieldId].asFloat8();
- }
+ public float getFloat4(int fieldId) {
+ return values[fieldId].asFloat4();
+ }
- public Inet4Datum getIPv4(int fieldId) {
- return (Inet4Datum) values[fieldId];
- }
+ @Override
+ public double getFloat8(int fieldId) {
+ return values[fieldId].asFloat8();
+ }
- public byte [] getIPv4Bytes(int fieldId) {
- return values[fieldId].asByteArray();
- }
+ public Inet4Datum getIPv4(int fieldId) {
+ return (Inet4Datum) values[fieldId];
+ }
+
+ public byte [] getIPv4Bytes(int fieldId) {
+ return values[fieldId].asByteArray();
+ }
- public InetAddress getIPv6(int fieldId) {
- throw new UnimplementedException("IPv6 is unsupported yet");
- }
+ public InetAddress getIPv6(int fieldId) {
+ throw new UnimplementedException("IPv6 is unsupported yet");
+ }
+
+ public byte[] getIPv6Bytes(int fieldId) {
+ throw new UnimplementedException("IPv6 is unsupported yet");
+ }
- public byte[] getIPv6Bytes(int fieldId) {
- throw new UnimplementedException("IPv6 is unsupported yet");
- }
+ @Override
+ public String getText(int fieldId) {
+ return values[fieldId].asChars();
+ }
@Override
- public String getText(int fieldId) {
- return values[fieldId].asChars();
- }
+ public TimeMeta getTimeDate(int fieldId) {
+ return values[fieldId].asTimeMeta();
+ }
@Override
public ProtobufDatum getProtobufDatum(int fieldId) {
@@ -193,7 +211,7 @@ public class VTuple implements Tuple, Cloneable {
}
@Override
- public Tuple clone() throws CloneNotSupportedException {
+ public VTuple clone() throws CloneNotSupportedException {
VTuple tuple = (VTuple) super.clone();
tuple.values = new Datum[size()];
@@ -203,13 +221,13 @@ public class VTuple implements Tuple, Cloneable {
@Override
public String toString() {
- return toDisplayString(getValues());
- }
+ return toDisplayString(getValues());
+ }
- @Override
- public int hashCode() {
- return Arrays.hashCode(values);
- }
+ @Override
+ public int hashCode() {
+ return Arrays.hashCode(values);
+ }
@Override
public Datum[] getValues() {
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/main/java/org/apache/tajo/util/datetime/DateTimeUtil.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/util/datetime/DateTimeUtil.java b/tajo-common/src/main/java/org/apache/tajo/util/datetime/DateTimeUtil.java
index 15b4236..570873d 100644
--- a/tajo-common/src/main/java/org/apache/tajo/util/datetime/DateTimeUtil.java
+++ b/tajo-common/src/main/java/org/apache/tajo/util/datetime/DateTimeUtil.java
@@ -2170,13 +2170,17 @@ public class DateTimeUtil {
}
public static TimeMeta getUTCDateTime(Int8Datum int8Datum){
- long usecs = int8Datum.asInt8()%DateTimeConstants.USECS_PER_MSEC;
- long julianTimestamp = javaTimeToJulianTime(int8Datum.asInt8()/DateTimeConstants.USECS_PER_MSEC);
+ return getUTCDateTime(int8Datum.asInt8());
+ }
+
+ public static TimeMeta getUTCDateTime(long time) {
+ long usecs = time % DateTimeConstants.USECS_PER_MSEC;
+ long julianTimestamp = javaTimeToJulianTime(time / DateTimeConstants.USECS_PER_MSEC);
TimeMeta tm = new TimeMeta();
-
+
julianTimestamp += usecs;
toJulianTimeMeta(julianTimestamp, tm);
return tm;
}
-
+
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/test/java/org/apache/tajo/datum/TestTimestampDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestTimestampDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestTimestampDatum.java
index 06e50f7..7cb3123 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestTimestampDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestTimestampDatum.java
@@ -120,7 +120,7 @@ public class TestTimestampDatum {
public final void testTimeZone() {
TimestampDatum datum = new TimestampDatum(DateTimeUtil.toJulianTimestamp(2014, 5, 1, 15, 20, 30, 0));
assertEquals("2014-05-01 15:20:30", datum.asChars());
- assertEquals("2014-05-02 00:20:30+09", datum.asChars(TimeZone.getTimeZone("GMT+9"), true));
+ assertEquals("2014-05-02 00:20:30+09", TimestampDatum.asChars(datum.asTimeMeta(), TimeZone.getTimeZone("GMT+9"), true));
}
@Test
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-common/src/test/java/org/apache/tajo/util/TestDateTimeFormat.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/util/TestDateTimeFormat.java b/tajo-common/src/test/java/org/apache/tajo/util/TestDateTimeFormat.java
index 2b5dba0..a9af36c 100644
--- a/tajo-common/src/test/java/org/apache/tajo/util/TestDateTimeFormat.java
+++ b/tajo-common/src/test/java/org/apache/tajo/util/TestDateTimeFormat.java
@@ -142,7 +142,7 @@ public class TestDateTimeFormat {
private void evalToCharAndAssert(String dateTimeText,
String toTimestampFormatText, String toCharFormatText, String expected) {
TimestampDatum datum = DateTimeFormat.toTimestamp(dateTimeText, toTimestampFormatText);
- String toCharResult = DateTimeFormat.to_char(datum.toTimeMeta(), toCharFormatText);
+ String toCharResult = DateTimeFormat.to_char(datum.asTimeMeta(), toCharFormatText);
assertEquals(expected, toCharResult);
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgDouble.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgDouble.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgDouble.java
index 3ccb02d..a1805c4 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgDouble.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgDouble.java
@@ -59,9 +59,8 @@ public class AvgDouble extends AggFunction<Datum> {
@Override
public void eval(FunctionContext ctx, Tuple params) {
AvgContext avgCtx = (AvgContext) ctx;
- Datum datum = params.get(0);
- if (datum.isNotNull()) {
- avgCtx.sum += datum.asFloat8();
+ if (!params.isBlankOrNull(0)) {
+ avgCtx.sum += params.getFloat8(0);
avgCtx.count++;
}
}
@@ -69,11 +68,10 @@ public class AvgDouble extends AggFunction<Datum> {
@Override
public void merge(FunctionContext ctx, Tuple part) {
AvgContext avgCtx = (AvgContext) ctx;
- Datum d = part.get(0);
- if (d instanceof NullDatum) {
+ if (part.isBlankOrNull(0)) {
return;
}
- ProtobufDatum datum = (ProtobufDatum) d;
+ ProtobufDatum datum = (ProtobufDatum) part.getProtobufDatum(0);
AvgDoubleProto proto = (AvgDoubleProto) datum.get();
avgCtx.sum += proto.getSum();
avgCtx.count += proto.getCount();
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgFloat.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgFloat.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgFloat.java
index 8162319..1e778a8 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgFloat.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgFloat.java
@@ -44,9 +44,8 @@ public class AvgFloat extends AvgDouble {
@Override
public void eval(FunctionContext ctx, Tuple params) {
AvgContext avgCtx = (AvgContext) ctx;
- Datum datum = params.get(0);
- if (datum.isNotNull()) {
- avgCtx.sum += datum.asFloat4();
+ if (!params.isBlankOrNull(0)) {
+ avgCtx.sum += params.getFloat4(0);
avgCtx.count++;
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgInt.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgInt.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgInt.java
index 1950fb1..b49c61b 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgInt.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgInt.java
@@ -45,9 +45,8 @@ public class AvgInt extends AvgLong {
@Override
public void eval(FunctionContext ctx, Tuple params) {
AvgContext avgCtx = (AvgContext) ctx;
- Datum datum = params.get(0);
- if (datum.isNotNull()) {
- avgCtx.sum += datum.asInt4();
+ if (!params.isBlankOrNull(0)) {
+ avgCtx.sum += params.getInt4(0);
avgCtx.count++;
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgLong.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgLong.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgLong.java
index 88f8486..651f540 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgLong.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/AvgLong.java
@@ -57,9 +57,8 @@ public class AvgLong extends AggFunction<Datum> {
@Override
public void eval(FunctionContext ctx, Tuple params) {
AvgContext avgCtx = (AvgContext) ctx;
- Datum datum = params.get(0);
- if (datum.isNotNull()) {
- avgCtx.sum += datum.asInt8();
+ if (!params.isBlankOrNull(0)) {
+ avgCtx.sum += params.getInt8(0);
avgCtx.count++;
}
}
@@ -67,11 +66,10 @@ public class AvgLong extends AggFunction<Datum> {
@Override
public void merge(FunctionContext ctx, Tuple part) {
AvgContext avgCtx = (AvgContext) ctx;
- Datum d = part.get(0);
- if (d instanceof NullDatum) {
+ if (part.isBlankOrNull(0)) {
return;
}
- ProtobufDatum datum = (ProtobufDatum) d;
+ ProtobufDatum datum = (ProtobufDatum) part.getProtobufDatum(0);
AvgLongProto proto = (AvgLongProto) datum.get();
avgCtx.sum += proto.getSum();
avgCtx.count += proto.getCount();
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Coalesce.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Coalesce.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Coalesce.java
index 474f771..05847ad 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Coalesce.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Coalesce.java
@@ -33,11 +33,10 @@ public abstract class Coalesce extends GeneralFunction {
public Datum eval(Tuple params) {
int paramSize = params.size();
for (int i = 0; i < paramSize; i++) {
- Datum datum = params.get(i);
- if (datum instanceof NullDatum) {
+ if (params.isBlankOrNull(i)) {
continue;
}
- return datum;
+ return params.asDatum(i);
}
return NullDatum.get();
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountRows.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountRows.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountRows.java
index 5e41dc9..2eabe0b 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountRows.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountRows.java
@@ -60,7 +60,7 @@ public class CountRows extends AggFunction<Datum> {
@Override
public void merge(FunctionContext ctx, Tuple part) {
- ((CountRowContext) ctx).count += part.get(0).asInt8();
+ ((CountRowContext) ctx).count += part.getInt8(0);
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountValue.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountValue.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountValue.java
index 1abfcb7..a2f06ff 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountValue.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountValue.java
@@ -47,7 +47,7 @@ public final class CountValue extends CountRows {
@Override
public void eval(FunctionContext ctx, Tuple params) {
- if (!(params.get(0) instanceof NullDatum)) {
+ if (!params.isBlankOrNull(0)) {
((CountRowContext) ctx).count++;
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountValueDistinct.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountValueDistinct.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountValueDistinct.java
index 675193f..f247968 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountValueDistinct.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/CountValueDistinct.java
@@ -53,13 +53,14 @@ public final class CountValueDistinct extends CountRows {
}
@Override
- public void merge(FunctionContext context, Tuple part) {
+ public void merge(FunctionContext context, Tuple params) {
CountDistinctValueContext distinctContext = (CountDistinctValueContext) context;
- Datum value = part.get(0);
-
- if (!value.isNull() && (distinctContext.latest == null || (!distinctContext.latest.equals(value)))) {
- distinctContext.latest = value;
- distinctContext.count++;
+ if (!params.isBlankOrNull(0)) {
+ Datum value = params.asDatum(0);
+ if (distinctContext.latest == null || !distinctContext.latest.equals(value)) {
+ distinctContext.latest = value;
+ distinctContext.count++;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Date.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Date.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Date.java
index aee7c60..05928d6 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Date.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Date.java
@@ -53,7 +53,7 @@ public class Date extends GeneralFunction {
public Int8Datum eval(Tuple params) {
try {
return DatumFactory.createInt8(new SimpleDateFormat(dateFormat)
- .parse(params.get(0).asChars()).getTime());
+ .parse(params.getText(0)).getTime());
} catch (ParseException e) {
LOG.error(e);
return null;
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/LastValue.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/LastValue.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/LastValue.java
index 16edb17..190bd81 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/LastValue.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/LastValue.java
@@ -40,9 +40,8 @@ public abstract class LastValue extends AggFunction<Datum> {
@Override
public void eval(FunctionContext ctx, Tuple params) {
LastValueContext lastValueCtx = (LastValueContext) ctx;
- Datum datum = params.get(0);
- if ( datum.isNotNull() ) {
- lastValueCtx.last = datum;
+ if (!params.isBlankOrNull(0)) {
+ lastValueCtx.last = params.asDatum(0);
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Lead.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Lead.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Lead.java
index 2e95eb7..8edf1fb 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Lead.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/builtin/Lead.java
@@ -45,19 +45,19 @@ public abstract class Lead extends AggFunction<Datum> {
if (params.size() == 1) {
leadCtx.leadNum = 1;
} else {
- leadCtx.leadNum = params.get(1).asInt4();
+ leadCtx.leadNum = params.getInt4(1);
}
}
if (leadCtx.leadNum > 0) {
leadCtx.leadNum --;
} else {
- leadCtx.leadBuffer.add(params.get(0));
+ leadCtx.leadBuffer.add(params.asDatum(0));
}
if (leadCtx.defaultDatum == null) {
if (params.size() == 3) {
- leadCtx.defaultDatum = params.get(2);
+ leadCtx.defaultDatum = params.asDatum(2);
} else {
leadCtx.defaultDatum = NullDatum.get();
}