use of io.prestosql.spi.connector.CatalogSchemaName in project hetu-core by openlookeng.
the class ExternalFunctionsParser method parseExternalFunction.
public static Optional<SqlInvokedFunction> parseExternalFunction(ExternalFunctionInfo externalFunctionInfo, CatalogSchemaName catalogSchemaName, RoutineCharacteristics.Language language) {
Optional<String> functionName = externalFunctionInfo.getFunctionName();
Optional<String> description = externalFunctionInfo.getDescription();
List<String> inputArgs = externalFunctionInfo.getInputArgs();
Optional<String> returnType = externalFunctionInfo.getReturnType();
boolean deterministic = externalFunctionInfo.isDeterministic();
boolean calledOnNullInput = externalFunctionInfo.isCalledOnNullInput();
if (functionName.isPresent() && returnType.isPresent()) {
QualifiedObjectName qualifiedObjectName = new QualifiedObjectName(catalogSchemaName.getCatalogName(), catalogSchemaName.getSchemaName(), functionName.get());
List<Parameter> parameters = inputArgs.stream().map(str -> {
checkState(SUPPORTED_TYPE.contains(str), format("external function do not supported type: %s", str));
if (str.equals(StandardTypes.DECIMAL)) {
return new Parameter(getRandomString((inputArgs.size() / ALPHABET.length() + 1), ALPHABET), parseTypeSignature(str + "(p, s)", ImmutableSet.of("p", "s")));
} else if (str.equals(StandardTypes.CHAR) || str.equals(StandardTypes.VARCHAR)) {
return new Parameter(getRandomString((inputArgs.size() / ALPHABET.length() + 1), ALPHABET), parseTypeSignature(str + "(x)", ImmutableSet.of("x")));
} else {
return new Parameter(getRandomString((inputArgs.size() / ALPHABET.length() + 1), ALPHABET), parseTypeSignature(str));
}
}).collect(toImmutableList());
TypeSignature reType = parseTypeSignature(returnType.get());
String deter = deterministic ? "DETERMINISTIC" : "NOT_DETERMINISTIC";
String nullCallClause = calledOnNullInput ? "CALLED_ON_NULL_INPUT" : "RETURNS_NULL_ON_NULL_INPUT";
RoutineCharacteristics routineCharacteristics = RoutineCharacteristics.builder().setLanguage(new RoutineCharacteristics.Language(language.getLanguage())).setDeterminism(RoutineCharacteristics.Determinism.valueOf(deter)).setNullCallClause(RoutineCharacteristics.NullCallClause.valueOf(nullCallClause)).build();
SqlInvokedFunction sqlInvokedFunction = new SqlInvokedFunction(qualifiedObjectName, parameters, reType, description.orElse(""), routineCharacteristics, EXTERNAL_FUNCTION_BODY, ImmutableMap.of(), Optional.empty());
return Optional.of(sqlInvokedFunction);
}
return Optional.empty();
}
use of io.prestosql.spi.connector.CatalogSchemaName in project hetu-core by openlookeng.
the class FunctionExtractor method extractExternalFunctions.
public static Set<SqlInvokedFunction> extractExternalFunctions(ExternalFunctionHub externalFunctionHub) {
RoutineCharacteristics.Language language = externalFunctionHub.getExternalFunctionLanguage();
Optional<CatalogSchemaName> catalogSchemaName = externalFunctionHub.getExternalFunctionCatalogSchemaName();
if (!catalogSchemaName.isPresent()) {
return Collections.emptySet();
}
ImmutableSet.Builder<SqlInvokedFunction> builder = new ImmutableSet.Builder<>();
for (ExternalFunctionInfo externalFunctionInfo : externalFunctionHub.getExternalFunctions()) {
Optional<SqlInvokedFunction> sqlInvokedFunctionOptional = ExternalFunctionsParser.parseExternalFunction(externalFunctionInfo, catalogSchemaName.get(), language);
sqlInvokedFunctionOptional.ifPresent(builder::add);
}
return builder.build();
}
use of io.prestosql.spi.connector.CatalogSchemaName in project hetu-core by openlookeng.
the class RenameSchemaTask method execute.
@Override
public ListenableFuture<?> execute(RenameSchema statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, QueryStateMachine stateMachine, List<Expression> parameters, HeuristicIndexerManager heuristicIndexerManager) {
Session session = stateMachine.getSession();
CatalogSchemaName source = createCatalogSchemaName(session, statement, Optional.of(statement.getSource()));
CatalogSchemaName target = new CatalogSchemaName(source.getCatalogName(), statement.getTarget().getValue());
if (!metadata.schemaExists(session, source)) {
throw new SemanticException(MISSING_SCHEMA, statement, "Schema '%s' does not exist", source);
}
if (metadata.schemaExists(session, target)) {
throw new SemanticException(SCHEMA_ALREADY_EXISTS, statement, "Target schema '%s' already exists", target);
}
accessControl.checkCanRenameSchema(session.getRequiredTransactionId(), session.getIdentity(), source, statement.getTarget().getValue());
metadata.renameSchema(session, source, statement.getTarget().getValue());
return immediateFuture(null);
}
use of io.prestosql.spi.connector.CatalogSchemaName in project hetu-core by openlookeng.
the class DropSchemaTask method execute.
@Override
public ListenableFuture<?> execute(DropSchema statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, QueryStateMachine stateMachine, List<Expression> parameters, HeuristicIndexerManager heuristicIndexerManager) {
if (statement.isCascade()) {
throw new PrestoException(NOT_SUPPORTED, "CASCADE is not yet supported for DROP SCHEMA");
}
Session session = stateMachine.getSession();
CatalogSchemaName schema = createCatalogSchemaName(session, statement, Optional.of(statement.getSchemaName()));
if (!metadata.schemaExists(session, schema)) {
if (!statement.isExists()) {
throw new SemanticException(MISSING_SCHEMA, statement, "Schema '%s' does not exist", schema);
}
return immediateFuture(null);
}
accessControl.checkCanDropSchema(session.getRequiredTransactionId(), session.getIdentity(), schema);
metadata.dropSchema(session, schema);
return immediateFuture(null);
}
use of io.prestosql.spi.connector.CatalogSchemaName in project hetu-core by openlookeng.
the class CreateSchemaTask method execute.
@Override
public ListenableFuture<?> execute(CreateSchema statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, QueryStateMachine stateMachine, List<Expression> parameters, HeuristicIndexerManager heuristicIndexerManager) {
Session session = stateMachine.getSession();
CatalogSchemaName schema = createCatalogSchemaName(session, statement, Optional.of(statement.getSchemaName()));
// TODO: validate that catalog exists
accessControl.checkCanCreateSchema(session.getRequiredTransactionId(), session.getIdentity(), schema);
if (metadata.schemaExists(session, schema)) {
if (!statement.isNotExists()) {
throw new SemanticException(SCHEMA_ALREADY_EXISTS, statement, "Schema '%s' already exists", schema);
}
return immediateFuture(null);
}
CatalogName catalogName = metadata.getCatalogHandle(session, schema.getCatalogName()).orElseThrow(() -> new PrestoException(NOT_FOUND, "Catalog does not exist: " + schema.getCatalogName()));
Map<String, Object> properties = metadata.getSchemaPropertyManager().getProperties(catalogName, schema.getCatalogName(), mapFromProperties(statement.getProperties()), session, metadata, parameters);
metadata.createSchema(session, schema, properties);
return immediateFuture(null);
}
Aggregations