예제 #1
0
  public <T> T decodeProperty(String name, @Nullable String value, Class<T> type) {
    requireNonNull(name, "name is null");
    requireNonNull(type, "type is null");

    SessionProperty<?> sessionProperty = allSessionProperties.get(name);
    if (sessionProperty == null) {
      throw new PrestoException(INVALID_SESSION_PROPERTY, "Unknown session property " + name);
    }
    PropertyMetadata<?> metadata = sessionProperty.getMetadata();
    if (metadata.getJavaType() != type) {
      throw new PrestoException(
          INVALID_SESSION_PROPERTY,
          format(
              "Property %s is type %s, but requested type was %s",
              name, metadata.getJavaType().getName(), type.getName()));
    }
    if (value == null) {
      return type.cast(metadata.getDefaultValue());
    }
    Object objectValue = deserializeSessionProperty(metadata.getSqlType(), value);
    try {
      return type.cast(metadata.decode(objectValue));
    } catch (PrestoException e) {
      throw e;
    } catch (Exception e) {
      // the system property decoder can throw any exception
      throw new PrestoException(
          INVALID_SESSION_PROPERTY, format("%s is invalid: %s", name, value), e);
    }
  }
 private static <T> T decodePropertyValue(
     String fullPropertyName,
     @Nullable String propertyValue,
     Class<T> type,
     PropertyMetadata<?> metadata) {
   if (metadata.getJavaType() != type) {
     throw new PrestoException(
         INVALID_SESSION_PROPERTY,
         format(
             "Property %s is type %s, but requested type was %s",
             fullPropertyName, metadata.getJavaType().getName(), type.getName()));
   }
   if (propertyValue == null) {
     return type.cast(metadata.getDefaultValue());
   }
   Object objectValue = deserializeSessionProperty(metadata.getSqlType(), propertyValue);
   try {
     return type.cast(metadata.decode(objectValue));
   } catch (PrestoException e) {
     throw e;
   } catch (Exception e) {
     // the system property decoder can throw any exception
     throw new PrestoException(
         INVALID_SESSION_PROPERTY,
         format("%s is invalid: %s", fullPropertyName, propertyValue),
         e);
   }
 }
  public void validateSystemSessionProperty(String propertyName, String propertyValue) {
    PropertyMetadata<?> propertyMetadata =
        getSystemSessionPropertyMetadata(propertyName)
            .orElseThrow(
                () ->
                    new PrestoException(
                        INVALID_SESSION_PROPERTY, "Unknown session property " + propertyName));

    decodePropertyValue(
        propertyName, propertyValue, propertyMetadata.getJavaType(), propertyMetadata);
  }
  public void validateCatalogSessionProperty(
      ConnectorId connectorId, String catalogName, String propertyName, String propertyValue) {
    String fullPropertyName = catalogName + "." + propertyName;
    PropertyMetadata<?> propertyMetadata =
        getConnectorSessionPropertyMetadata(connectorId, propertyName)
            .orElseThrow(
                () ->
                    new PrestoException(
                        INVALID_SESSION_PROPERTY, "Unknown session property " + fullPropertyName));

    decodePropertyValue(
        fullPropertyName, propertyValue, propertyMetadata.getJavaType(), propertyMetadata);
  }
예제 #5
0
    private SessionProperty(Optional<String> catalogName, PropertyMetadata<T> propertyMetadata) {
      this.catalogName = catalogName;
      this.propertyName = propertyMetadata.getName();

      String fullName = propertyMetadata.getName();
      if (catalogName.isPresent()) {
        fullName = catalogName.get() + "." + fullName;
      }

      this.propertyMetadata =
          new PropertyMetadata<>(
              fullName,
              propertyMetadata.getDescription(),
              propertyMetadata.getSqlType(),
              propertyMetadata.getJavaType(),
              propertyMetadata.getDefaultValue(),
              propertyMetadata.isHidden(),
              propertyMetadata::decode);
    }