class CreateServerPlan implements Plan {

    private final ForeignDataWrappers foreignDataWrappers;
    private final AnalyzedCreateServer createServer;

    public CreateServerPlan(ForeignDataWrappers foreignDataWrappers,
                            AnalyzedCreateServer createServer) {
        this.foreignDataWrappers = foreignDataWrappers;
        this.createServer = createServer;
    }

    @Override
    public StatementType type() {
        return StatementType.DDL;
    }

    @Override
    public void executeOrFail(DependencyCarrier dependencies,
                              PlannerContext plannerContext,
                              RowConsumer consumer,
                              Row params,
                              SubQueryResults subQueryResults) throws Exception {<FILL_FUNCTION_BODY>}
}


        CoordinatorTxnCtx transactionContext = plannerContext.transactionContext();
        Function<Symbol, Object> convert = new SymbolEvaluator(
            transactionContext,
            plannerContext.nodeContext(),
            subQueryResults
        ).bind(params);

        Settings.Builder optionsBuilder = Settings.builder();
        Map<String, Symbol> options = new HashMap<>(createServer.options());
        var foreignDataWrapper = foreignDataWrappers.get(createServer.fdw());
        for (var option : foreignDataWrapper.mandatoryServerOptions()) {
            String optionName = option.getKey();
            Symbol symbol = options.remove(optionName);
            if (symbol == null) {
                throw new IllegalArgumentException(String.format(
                    Locale.ENGLISH,
                    "Mandatory server option `%s` for foreign data wrapper `%s` is missing",
                    optionName,
                    createServer.fdw()
                ));
            }
            optionsBuilder.put(optionName, convert.apply(symbol));
        }
        if (!options.isEmpty()) {
            throw new IllegalArgumentException(String.format(
                Locale.ENGLISH,
                "Unsupported server options for foreign data wrapper `%s`: %s. Valid options are: %s",
                createServer.fdw(),
                String.join(", ", options.keySet()),
                foreignDataWrapper.mandatoryServerOptions().stream()
                    .map(x -> x.getKey())
                    .collect(Collectors.joining(", "))
            ));
        }
        CreateServerRequest request = new CreateServerRequest(
            createServer.name(),
            createServer.fdw(),
            transactionContext.sessionSettings().sessionUser().name(),
            createServer.ifNotExists(),
            optionsBuilder.build()
        );
        dependencies.client()
            .execute(TransportCreateServerAction.ACTION, request)
            .whenComplete(OneRowActionListener.oneIfAcknowledged(consumer));
    
<no_super_class>