示例#1
0
 @Override
 public double getDouble(int ordinal) {
   assertIndexIsValid(ordinal);
   final int offset = getElementOffset(ordinal);
   if (offset < 0) return 0;
   return PlatformDependent.UNSAFE.getDouble(baseObject, baseOffset + offset);
 }
示例#2
0
 @Override
 public boolean getBoolean(int ordinal) {
   assertIndexIsValid(ordinal);
   final int offset = getElementOffset(ordinal);
   if (offset < 0) return false;
   return PlatformDependent.UNSAFE.getBoolean(baseObject, baseOffset + offset);
 }
示例#3
0
 @Override
 public MapData getMap(int ordinal) {
   assertIndexIsValid(ordinal);
   final int offset = getElementOffset(ordinal);
   if (offset < 0) return null;
   final int size = getElementSize(offset, ordinal);
   return UnsafeReaders.readMap(baseObject, baseOffset + offset, size);
 }
示例#4
0
 @Override
 public UTF8String getUTF8String(int ordinal) {
   assertIndexIsValid(ordinal);
   final int offset = getElementOffset(ordinal);
   if (offset < 0) return null;
   final int size = getElementSize(offset, ordinal);
   return UTF8String.fromAddress(baseObject, baseOffset + offset, size);
 }
示例#5
0
 @Override
 public CalendarInterval getInterval(int ordinal) {
   assertIndexIsValid(ordinal);
   final int offset = getElementOffset(ordinal);
   if (offset < 0) return null;
   final int months = (int) PlatformDependent.UNSAFE.getLong(baseObject, baseOffset + offset);
   final long microseconds = PlatformDependent.UNSAFE.getLong(baseObject, baseOffset + offset + 8);
   return new CalendarInterval(months, microseconds);
 }
示例#6
0
 @Override
 public InternalRow getStruct(int ordinal, int numFields) {
   assertIndexIsValid(ordinal);
   final int offset = getElementOffset(ordinal);
   if (offset < 0) return null;
   final int size = getElementSize(offset, ordinal);
   final UnsafeRow row = new UnsafeRow();
   row.pointTo(baseObject, baseOffset + offset, numFields, size);
   return row;
 }
示例#7
0
 @Override
 public byte[] getBinary(int ordinal) {
   assertIndexIsValid(ordinal);
   final int offset = getElementOffset(ordinal);
   if (offset < 0) return null;
   final int size = getElementSize(offset, ordinal);
   final byte[] bytes = new byte[size];
   PlatformDependent.copyMemory(
       baseObject, baseOffset + offset, bytes, PlatformDependent.BYTE_ARRAY_OFFSET, size);
   return bytes;
 }
示例#8
0
  @Override
  public Decimal getDecimal(int ordinal, int precision, int scale) {
    assertIndexIsValid(ordinal);
    final int offset = getElementOffset(ordinal);
    if (offset < 0) return null;

    if (precision <= Decimal.MAX_LONG_DIGITS()) {
      final long value = PlatformDependent.UNSAFE.getLong(baseObject, baseOffset + offset);
      return Decimal.apply(value, precision, scale);
    } else {
      final byte[] bytes = getBinary(ordinal);
      final BigInteger bigInteger = new BigInteger(bytes);
      final BigDecimal javaDecimal = new BigDecimal(bigInteger, scale);
      return Decimal.apply(new scala.math.BigDecimal(javaDecimal), precision, scale);
    }
  }
示例#9
0
 @Override
 public boolean isNullAt(int ordinal) {
   assertIndexIsValid(ordinal);
   return getElementOffset(ordinal) < 0;
 }