class CreateRepositoryPlan implements Plan {

    private final AnalyzedCreateRepository createRepository;

    public CreateRepositoryPlan(AnalyzedCreateRepository createRepository) {
        this.createRepository = createRepository;
    }

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

    @Override
    public void executeOrFail(DependencyCarrier dependencies,
                              PlannerContext plannerContext,
                              RowConsumer consumer,
                              Row parameters,
                              SubQueryResults subQueryResults) {
        PutRepositoryRequest request = createRequest(
            createRepository,
            plannerContext.transactionContext(),
            dependencies.nodeContext(),
            parameters,
            subQueryResults,
            dependencies.repositoryParamValidator());

        dependencies.repositoryService()
            .execute(request)
            .whenComplete(new OneRowActionListener<>(consumer, rCount -> new Row1(rCount == null ? -1 : rCount)));
    }

    @VisibleForTesting
    public static PutRepositoryRequest createRequest(AnalyzedCreateRepository createRepository,
                                                     CoordinatorTxnCtx txnCtx,
                                                     NodeContext nodeCtx,
                                                     Row parameters,
                                                     SubQueryResults subQueryResults,
                                                     RepositoryParamValidator repositoryParamValidator) {<FILL_FUNCTION_BODY>}
}

        Function<? super Symbol, Object> eval = x -> SymbolEvaluator.evaluate(
            txnCtx,
            nodeCtx,
            x,
            parameters,
            subQueryResults
        );

        var genericProperties = createRepository.properties().map(eval);
        Map<String, Setting<?>> supportedSettings = repositoryParamValidator.settingsForType(createRepository.type()).all();
        genericProperties.ensureContainsOnly(supportedSettings.keySet());
        var settings = Settings.builder().put(genericProperties).build();

        repositoryParamValidator.validate(
            createRepository.type(), createRepository.properties(), settings);

        PutRepositoryRequest request = new PutRepositoryRequest(createRepository.name());
        request.type(createRepository.type());
        request.settings(settings);

        return request;
    
<no_super_class>