* Function to read a value from the field reader, detect the type, construct the appropriate value holder
* and use the value holder to write to the Map.
*/
public static void writeToMapFromReader(FieldReader fieldReader, BaseWriter.MapWriter mapWriter, DrillBuf buffer) {
MajorType valueMajorType = fieldReader.getType();
MinorType valueMinorType = valueMajorType.getMinorType();
switch (valueMinorType) {
case TINYINT:
TinyIntHolder tinyIntHolder = new TinyIntHolder();
tinyIntHolder.value = fieldReader.readByte();
mapWriter.tinyInt(MappifyUtility.fieldValue).write(tinyIntHolder);
break;
case SMALLINT:
SmallIntHolder smallIntHolder = new SmallIntHolder();
smallIntHolder.value = fieldReader.readShort();
mapWriter.smallInt(MappifyUtility.fieldValue).write(smallIntHolder);
break;
case BIGINT:
BigIntHolder bh = new BigIntHolder();
bh.value = fieldReader.readLong();
mapWriter.bigInt(MappifyUtility.fieldValue).write(bh);
break;
case INT:
IntHolder ih = new IntHolder();
ih.value = fieldReader.readInteger();
mapWriter.integer(MappifyUtility.fieldValue).write(ih);
break;
case UINT1:
UInt1Holder uInt1Holder = new UInt1Holder();
uInt1Holder.value = fieldReader.readByte();
mapWriter.uInt1(MappifyUtility.fieldValue).write(uInt1Holder);
break;
case UINT2:
UInt2Holder uInt2Holder = new UInt2Holder();
uInt2Holder.value = fieldReader.readCharacter();
mapWriter.uInt2(MappifyUtility.fieldValue).write(uInt2Holder);
break;
case UINT4:
UInt4Holder uInt4Holder = new UInt4Holder();
uInt4Holder.value = fieldReader.readInteger();
mapWriter.uInt4(MappifyUtility.fieldValue).write(uInt4Holder);
break;
case UINT8:
UInt8Holder uInt8Holder = new UInt8Holder();
uInt8Holder.value = fieldReader.readInteger();
mapWriter.uInt8(MappifyUtility.fieldValue).write(uInt8Holder);
break;
case DECIMAL9:
Decimal9Holder decimalHolder = new Decimal9Holder();
decimalHolder.value = fieldReader.readBigDecimal().intValue();
decimalHolder.scale = valueMajorType.getScale();
decimalHolder.precision = valueMajorType.getPrecision();
mapWriter.decimal9(MappifyUtility.fieldValue).write(decimalHolder);
break;
case DECIMAL18:
Decimal18Holder decimal18Holder = new Decimal18Holder();
decimal18Holder.value = fieldReader.readBigDecimal().longValue();
decimal18Holder.scale = valueMajorType.getScale();
decimal18Holder.precision = valueMajorType.getPrecision();
mapWriter.decimal18(MappifyUtility.fieldValue).write(decimal18Holder);
break;
case DECIMAL28SPARSE:
Decimal28SparseHolder decimal28Holder = new Decimal28SparseHolder();
// Ensure that the buffer used to store decimal is of sufficient length
buffer.reallocIfNeeded(decimal28Holder.WIDTH);
decimal28Holder.scale = valueMajorType.getScale();
decimal28Holder.precision = valueMajorType.getPrecision();
decimal28Holder.buffer = buffer;
decimal28Holder.start = 0;
DecimalUtility.getSparseFromBigDecimal(fieldReader.readBigDecimal(), buffer, 0, decimal28Holder.scale,
decimal28Holder.precision, decimal28Holder.nDecimalDigits);
mapWriter.decimal28Sparse(MappifyUtility.fieldValue).write(decimal28Holder);
break;
case DECIMAL38SPARSE:
Decimal38SparseHolder decimal38Holder = new Decimal38SparseHolder();
// Ensure that the buffer used to store decimal is of sufficient length
buffer.reallocIfNeeded(decimal38Holder.WIDTH);
decimal38Holder.scale = valueMajorType.getScale();
decimal38Holder.precision = valueMajorType.getPrecision();
decimal38Holder.buffer = buffer;
decimal38Holder.start = 0;
DecimalUtility.getSparseFromBigDecimal(fieldReader.readBigDecimal(), buffer, 0, decimal38Holder.scale,
decimal38Holder.precision, decimal38Holder.nDecimalDigits);