class DeleteAnalyzer {

    private final NodeContext nodeCtx;
    private final RelationAnalyzer relationAnalyzer;

    DeleteAnalyzer(NodeContext nodeCtx, RelationAnalyzer relationAnalyzer) {
        this.nodeCtx = nodeCtx;
        this.relationAnalyzer = relationAnalyzer;
    }

    public AnalyzedDeleteStatement analyze(Delete delete, ParamTypeHints typeHints, CoordinatorTxnCtx txnContext) {<FILL_FUNCTION_BODY>}
}

        StatementAnalysisContext stmtCtx = new StatementAnalysisContext(typeHints, Operation.DELETE, txnContext);
        final RelationAnalysisContext relationCtx = stmtCtx.startRelation();
        AnalyzedRelation relation = relationAnalyzer.analyze(delete.getRelation(), stmtCtx);
        stmtCtx.endRelation();

        MaybeAliasedStatement maybeAliasedStatement = MaybeAliasedStatement.analyze(relation);
        relation = maybeAliasedStatement.nonAliasedRelation();

        if (!(relation instanceof DocTableRelation)) {
            throw new UnsupportedOperationException("Cannot delete from relations other than base tables");
        }
        DocTableRelation table = (DocTableRelation) relation;
        EvaluatingNormalizer normalizer = new EvaluatingNormalizer(nodeCtx, RowGranularity.CLUSTER, null, table);
        ExpressionAnalyzer expressionAnalyzer = new ExpressionAnalyzer(
            txnContext,
            nodeCtx,
            typeHints,
            new FullQualifiedNameFieldProvider(
                relationCtx.sources(),
                relationCtx.parentSources(),
                txnContext.sessionSettings().searchPath().currentSchema()),
            new SubqueryAnalyzer(relationAnalyzer, new StatementAnalysisContext(typeHints, Operation.READ, txnContext))
        );
        Symbol query = Objects.requireNonNullElse(
            expressionAnalyzer.generateQuerySymbol(delete.getWhere(), new ExpressionAnalysisContext(txnContext.sessionSettings())),
            Literal.BOOLEAN_TRUE
        );
        query = maybeAliasedStatement.maybeMapFields(query);

        Symbol normalizedQuery = normalizer.normalize(query, txnContext);
        return new AnalyzedDeleteStatement(table, normalizedQuery);
    
<no_super_class>