Example #1
0
 /**
  * jwestra: 3.x API change deserialize a single field in a UDTValue map
  *
  * @param dataType
  * @param udtValue
  * @param fieldname
  * @return
  */
 public <T> T deserialize(DataType dataType, UDTValue udtValue, String fieldname) {
   final CodecRegistry codecRegistry = getCodecRegistry();
   final TypeCodec<T> typeCodec = codecRegistry.codecFor(dataType);
   return typeCodec.deserialize(udtValue.getBytesUnsafe(fieldname), protocolVersion);
 }
Example #2
0
  /**
   * @param datatype the db datatype
   * @param udtValue the udt value
   * @param fieldtype1 the field 1 type
   * @param fieldtype2 the field 2 type
   * @param fieldname the fieldname
   * @return the mapped value or <code>null</code>
   */
  public <T> Object fromUdtValue(
      DataType datatype,
      UDTValue udtValue,
      Class<?> fieldtype1,
      Class<?> fieldtype2,
      String fieldname) {
    final CodecRegistry codecRegistry = getCodecRegistry();

    // build-in type
    if (isBuildInType(datatype)) {
      final TypeCodec<T> typeCodec = codecRegistry.codecFor(datatype);

      try {
        if (udtValue.isNull(fieldname)) return null;
        return typeCodec.deserialize(udtValue.getBytesUnsafe(fieldname), protocolVersion);
      } catch (IllegalArgumentException ex) {
        return null;
      }

      // udt collection
    } else if (datatype.isCollection()) {

      // set
      if (DataType.Name.SET == datatype.getName()) {
        return fromUdtValues(
            datatype.getTypeArguments().get(0),
            ImmutableSet.copyOf(udtValue.getSet(fieldname, UDTValue.class)),
            fieldtype2);

        // list
      } else if (DataType.Name.LIST == datatype.getName()) {
        return fromUdtValues(
            datatype.getTypeArguments().get(0),
            ImmutableList.copyOf(udtValue.getList(fieldname, UDTValue.class)),
            fieldtype2);

        // map
      } else {
        if (isBuildInType(datatype.getTypeArguments().get(0))) {
          return fromUdtValues(
              datatype.getTypeArguments().get(0),
              datatype.getTypeArguments().get(1),
              ImmutableMap.<Object, Object>copyOf(
                  udtValue.getMap(fieldname, fieldtype1, UDTValue.class)),
              fieldtype1,
              fieldtype2);

        } else if (isBuildInType(datatype.getTypeArguments().get(1))) {
          return fromUdtValues(
              datatype.getTypeArguments().get(0),
              datatype.getTypeArguments().get(1),
              ImmutableMap.<Object, Object>copyOf(
                  udtValue.getMap(fieldname, UDTValue.class, fieldtype2)),
              fieldtype1,
              fieldtype2);

        } else {
          return fromUdtValues(
              datatype.getTypeArguments().get(0),
              datatype.getTypeArguments().get(1),
              ImmutableMap.<Object, Object>copyOf(
                  udtValue.getMap(fieldname, UDTValue.class, UDTValue.class)),
              fieldtype1,
              fieldtype2);
        }
      }

      // udt
    } else {
      return fromUdtValue(datatype, udtValue, fieldtype1);
    }
  }
Example #3
0
  @SuppressWarnings("unchecked")
  public Object toUdtValue(
      Tablename tablename, MetadataCatalog catalog, DataType datatype, Object value) {

    // build-in type (will not be converted)
    if (isBuildInType(datatype)) {
      return value;

      // udt collection
    } else if (datatype.isCollection()) {

      // set
      if (DataType.Name.SET == datatype.getName()) {
        final DataType elementDataType = datatype.getTypeArguments().get(0);

        final Set<Object> udt = Sets.newHashSet();
        if (value != null) {
          for (Object element : (Set<Object>) value) {
            udt.add(toUdtValue(tablename, catalog, elementDataType, element));
          }
        }

        return ImmutableSet.copyOf(udt);

        // list
      } else if (DataType.Name.LIST == datatype.getName()) {
        final DataType elementDataType = datatype.getTypeArguments().get(0);

        final List<Object> udt = Lists.newArrayList();
        if (value != null) {
          for (Object element : (List<Object>) value) {
            udt.add(toUdtValue(tablename, catalog, elementDataType, element));
          }
        }

        return ImmutableList.copyOf(udt);

        // map
      } else {
        final DataType keyDataType = datatype.getTypeArguments().get(0);
        final DataType valueDataType = datatype.getTypeArguments().get(1);

        final Map<Object, Object> udt = Maps.newHashMap();
        if (value != null) {
          for (Entry<Object, Object> entry : ((Map<Object, Object>) value).entrySet()) {
            udt.put(
                toUdtValue(tablename, catalog, keyDataType, entry.getKey()),
                toUdtValue(tablename, catalog, valueDataType, entry.getValue()));
          }
        }
        return ImmutableMap.copyOf(udt);
      }

      // udt
    } else {
      if (value == null) {
        return value;

      } else {
        final UserType usertype =
            catalog.getUserType(tablename, ((UserType) datatype).getTypeName());
        final UDTValue udtValue = usertype.newValue();

        for (Entry<String, Optional<Object>> entry :
            beanMapper.toValues(value, ImmutableSet.<String>of()).entrySet()) {
          if (!entry.getValue().isPresent()) {
            // return null;
            udtValue.setToNull(entry.getKey());
            continue;
          }

          final DataType fieldType = usertype.getFieldType(entry.getKey());
          Object vl = entry.getValue().get();

          if (!isBuildInType(usertype.getFieldType(entry.getKey()))) {
            vl = toUdtValue(tablename, catalog, fieldType, vl);
          }

          final String key = entry.getKey();
          udtValue.setBytesUnsafe(key, serialize(fieldType, vl));
        }

        return udtValue;
      }
    }
  }