Repository: tajo Updated Branches: refs/heads/master 5c2aee236 -> dfcf41d6f
TAJO-1450: Encapsulate Datum in Tuple. (missing changes) Signed-off-by: Jihoon Son <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/tajo/repo Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/dfcf41d6 Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/dfcf41d6 Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/dfcf41d6 Branch: refs/heads/master Commit: dfcf41d6f66044b15f478bb22feecccfdf742628 Parents: 5c2aee2 Author: navis.ryu <[email protected]> Authored: Wed Jun 3 11:10:31 2015 +0900 Committer: Jihoon Son <[email protected]> Committed: Wed Jun 3 11:15:24 2015 +0900 ---------------------------------------------------------------------- .../org/apache/tajo/storage/RowStoreUtil.java | 91 ++++++++++++++------ .../physical/RangeShuffleFileWriteExec.java | 2 +- .../org/apache/tajo/storage/RowStoreUtil.java | 2 +- 3 files changed, 67 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/dfcf41d6/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 ba7cf48..5b4a308 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 @@ -23,6 +23,7 @@ import org.apache.tajo.catalog.Schema; import org.apache.tajo.common.TajoDataTypes; import org.apache.tajo.datum.DatumFactory; import org.apache.tajo.datum.IntervalDatum; +import org.apache.tajo.datum.ProtobufDatum; import org.apache.tajo.exception.UnknownDataTypeException; import org.apache.tajo.exception.UnsupportedException; import org.apache.tajo.exception.ValueTooLongForTypeCharactersException; @@ -30,9 +31,6 @@ import org.apache.tajo.util.BitArray; import java.nio.ByteBuffer; -/** - * It is a copy from tajo-storage-common module. - */ public class RowStoreUtil { public static int[] getTargetIds(Schema inSchema, Schema outSchema) { int[] targetIds = new int[outSchema.size()]; @@ -45,6 +43,14 @@ 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.asDatum(targetIds[idx])); + } + return out; + } + public static RowStoreEncoder createEncoder(Schema schema) { return new RowStoreEncoder(schema); } @@ -69,7 +75,7 @@ public class RowStoreUtil { public Tuple toTuple(byte [] bytes) { nullFlags.clear(); ByteBuffer bb = ByteBuffer.wrap(bytes); - VTuple tuple = new VTuple(schema.size()); + Tuple tuple = new VTuple(schema.size()); Column col; TajoDataTypes.DataType type; @@ -116,7 +122,7 @@ public class RowStoreUtil { tuple.put(i, DatumFactory.createFromInt8(type, l)); break; - case INTERVAL: + case INTERVAL: int month = bb.getInt(); long milliseconds = bb.getLong(); tuple.put(i, new IntervalDatum(month, milliseconds)); @@ -174,7 +180,8 @@ public class RowStoreUtil { nullFlags = new BitArray(schema.size()); headerSize = nullFlags.bytesLength(); } - public byte [] toBytes(Tuple tuple) { + + public byte[] toBytes(Tuple tuple) { nullFlags.clear(); int size = estimateTupleDataSize(tuple); ByteBuffer bb = ByteBuffer.allocate(size + headerSize); @@ -188,14 +195,15 @@ public class RowStoreUtil { col = schema.getColumn(i); switch (col.getDataType().getType()) { - case NULL_TYPE: nullFlags.set(i); 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 NULL_TYPE: + nullFlags.set(i); + break; + case BOOLEAN: + bb.put(tuple.getByte(i)); + break; + case BIT: + bb.put(tuple.getByte(i)); + break; case CHAR: int charSize = col.getDataType().getLength(); byte [] _char = new byte[charSize]; @@ -207,12 +215,29 @@ public class RowStoreUtil { System.arraycopy(src, 0, _char, 0, src.length); bb.put(_char); 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 TEXT: - byte [] _string = tuple.getBytes(i); + byte[] _string = tuple.getBytes(i); bb.putInt(_string.length); bb.put(_string); break; - case DATE: bb.putInt(tuple.getInt4(i)); break; + case DATE: + bb.putInt(tuple.getInt4(i)); + break; case TIME: case TIMESTAMP: bb.putLong(tuple.getInt8(i)); @@ -223,15 +248,17 @@ public class RowStoreUtil { bb.putLong(interval.getMilliSeconds()); break; case BLOB: - byte [] bytes = tuple.getBytes(i); + byte[] bytes = tuple.getBytes(i); bb.putInt(bytes.length); bb.put(bytes); break; case INET4: - byte [] ipBytes = tuple.getBytes(i); + byte[] ipBytes = tuple.getBytes(i); bb.put(ipBytes); break; - case INET6: bb.put(tuple.getBytes(i)); break; + case INET6: + bb.put(tuple.getBytes(i)); + break; default: throw new RuntimeException(new UnknownDataTypeException(col.getDataType().getType().name())); } @@ -244,7 +271,7 @@ public class RowStoreUtil { bb.position(finalPosition); bb.flip(); - byte [] buf = new byte [bb.limit()]; + byte[] buf = new byte[bb.limit()]; bb.get(buf); return buf; } @@ -268,19 +295,31 @@ public class RowStoreUtil { case CHAR: size += col.getDataType().getLength(); break; - case INT2: size += 2; break; + case INT2: + size += 2; + break; case DATE: case INT4: - case FLOAT4: size += 4; break; + case FLOAT4: + size += 4; + break; case TIME: case TIMESTAMP: case INT8: - case FLOAT8: size += 8; break; - case INTERVAL: size += 12; break; + case FLOAT8: + size += 8; + break; + case INTERVAL: + size += 12; + break; case TEXT: - case BLOB: size += (4 + tuple.getBytes(i).length); break; + case BLOB: + size += (4 + tuple.getBytes(i).length); + break; case INET4: - case INET6: size += tuple.getBytes(i).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/dfcf41d6/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/RangeShuffleFileWriteExec.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/RangeShuffleFileWriteExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/RangeShuffleFileWriteExec.java index 92e625c..3dd1cd9 100644 --- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/RangeShuffleFileWriteExec.java +++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/RangeShuffleFileWriteExec.java @@ -90,7 +90,7 @@ public class RangeShuffleFileWriteExec extends UnaryPhysicalExec { @Override public Tuple next() throws IOException { Tuple tuple; - VTuple keyTuple; + Tuple keyTuple; Tuple prevKeyTuple = null; long offset; http://git-wip-us.apache.org/repos/asf/tajo/blob/dfcf41d6/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/RowStoreUtil.java ---------------------------------------------------------------------- diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/RowStoreUtil.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/RowStoreUtil.java index 6643d45..ba9f873 100644 --- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/RowStoreUtil.java +++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/RowStoreUtil.java @@ -76,7 +76,7 @@ public class RowStoreUtil { public Tuple toTuple(byte [] bytes) { nullFlags.clear(); ByteBuffer bb = ByteBuffer.wrap(bytes); - VTuple tuple = new VTuple(schema.size()); + Tuple tuple = new VTuple(schema.size()); Column col; TajoDataTypes.DataType type;
