예제 #1
0
 @Override
 public void setPosition(int index) {
   super.setPosition(index);
   for (FieldReader r : fields.values()) {
     r.setPosition(index);
   }
 }
예제 #2
0
 @Override
 public FieldReader reader(String name) {
   FieldReader reader = fields.get(name);
   if (reader == null) {
     ValueVector child = vector.getChild(name);
     if (child == null) {
       reader = NullReader.INSTANCE;
     } else {
       reader = child.getAccessor().getReader();
     }
     fields.put(name, reader);
     reader.setPosition(idx());
   }
   return reader;
 }
예제 #3
0
  private void writeValue(FieldReader reader) throws JsonGenerationException, IOException {
    final DataMode m = reader.getType().getMode();
    final MinorType mt = reader.getType().getMinorType();

    switch (m) {
      case OPTIONAL:
      case REQUIRED:
        switch (mt) {
          case FLOAT4:
            gen.writeFloat(reader);
            break;
          case FLOAT8:
            gen.writeDouble(reader);
            break;
          case INT:
            gen.writeInt(reader);
            break;
          case SMALLINT:
            gen.writeSmallInt(reader);
            break;
          case TINYINT:
            gen.writeTinyInt(reader);
            break;
          case BIGINT:
            gen.writeBigInt(reader);
            break;
          case BIT:
            gen.writeBoolean(reader);
            break;

          case DATE:
            gen.writeDate(reader);
            break;
          case TIME:
            gen.writeTime(reader);
            break;
          case TIMESTAMP:
            gen.writeTimestamp(reader);
            break;
          case INTERVALYEAR:
          case INTERVALDAY:
          case INTERVAL:
            gen.writeInterval(reader);
            break;
          case DECIMAL28DENSE:
          case DECIMAL28SPARSE:
          case DECIMAL38DENSE:
          case DECIMAL38SPARSE:
          case DECIMAL9:
          case DECIMAL18:
            gen.writeDecimal(reader);
            break;

          case LIST:
            // this is a pseudo class, doesn't actually contain the real reader so we have to drop
            // down.
            writeValue(reader.reader());
            break;
          case MAP:
            gen.writeStartObject();
            if (reader.isSet()) {
              for (String name : reader) {
                FieldReader childReader = reader.reader(name);
                if (childReader.isSet()) {
                  gen.writeFieldName(name);
                  writeValue(childReader);
                }
              }
            }
            gen.writeEndObject();
            break;
          case NULL:
            gen.writeUntypedNull();
            break;

          case VAR16CHAR:
            gen.writeVar16Char(reader);
            break;
          case VARBINARY:
            gen.writeBinary(reader);
            break;
          case VARCHAR:
            gen.writeVarChar(reader);
            break;
        }
        break;

      case REPEATED:
        gen.writeStartArray();
        switch (mt) {
          case FLOAT4:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeFloat(i, reader);
            }

            break;
          case FLOAT8:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeDouble(i, reader);
            }
            break;
          case INT:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeInt(i, reader);
            }
            break;
          case SMALLINT:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeSmallInt(i, reader);
            }
            break;
          case TINYINT:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeTinyInt(i, reader);
            }
            break;
          case BIGINT:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeBigInt(i, reader);
            }
            break;
          case BIT:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeBoolean(i, reader);
            }
            break;

          case DATE:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeDate(i, reader);
            }
            break;
          case TIME:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeTime(i, reader);
            }
            break;
          case TIMESTAMP:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeTimestamp(i, reader);
            }
            break;
          case INTERVALYEAR:
          case INTERVALDAY:
          case INTERVAL:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeInterval(i, reader);
            }
            break;
          case DECIMAL28DENSE:
          case DECIMAL28SPARSE:
          case DECIMAL38DENSE:
          case DECIMAL38SPARSE:
          case DECIMAL9:
          case DECIMAL18:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeDecimal(i, reader);
            }
            break;

          case LIST:
            for (int i = 0; i < reader.size(); i++) {
              while (reader.next()) {
                writeValue(reader.reader());
              }
            }
            break;
          case MAP:
            while (reader.next()) {
              gen.writeStartObject();
              for (String name : reader) {
                FieldReader mapField = reader.reader(name);
                if (mapField.isSet()) {
                  gen.writeFieldName(name);
                  writeValue(mapField);
                }
              }
              gen.writeEndObject();
            }
            break;
          case NULL:
            break;

          case VAR16CHAR:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeVar16Char(i, reader);
            }
            break;
          case VARBINARY:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeBinary(i, reader);
            }
            break;
          case VARCHAR:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeVarChar(i, reader);
            }
            break;

          default:
            throw new IllegalStateException(String.format("Unable to handle type %s.", mt));
        }
        gen.writeEndArray();
        break;
    }
  }
예제 #4
0
 private void setChildrenPosition(int index) {
   for (FieldReader r : fields.values()) {
     r.setPosition(index);
   }
 }