private static <T> Expression getExpression(PropertyMetadata<T> property, Object value) throws PrestoException { return toExpression(property.encode(property.getJavaType().cast(value))); }
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); }
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); }
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); } }
if (!Primitives.wrap(property.getJavaType()).isInstance(value)) { throw new PrestoException(errorCode, format( "Property %s for %s should have value of type %s, not %s", propertyName, toQualifedName(objectName, columnName), property.getJavaType().getName(), value.getClass().getName()));
this.sessionProperties = hiveSessionProperties.getSessionProperties().stream() .collect(toImmutableMap(PropertyMetadata::getName, entry -> session.getProperty(entry.getName(), entry.getJavaType()).toString()));
sessionPropertyManager.decodeProperty(fullPropertyName, value, metadata.getJavaType());
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 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); }
metadata.getSessionPropertyManager().decodeProperty(propertyName.toString(), value, propertyMetadata.getJavaType()); stateMachine.addSetSessionProperties(propertyName.toString(), value);