PreparedStatement internalExecute() {
        final StatementContext ctx = getContext();
        final OptionalEvent evt = JfrSupport.newStatementEvent();
        evt.begin();

        beforeTemplating();

        ParsedSql parsedSql = parseSql();

        try {
            stmt = createStatement(parsedSql.getSql());
            // The statement builder might (or might not) clean up the statement when called. E.g. the
            // caching statement builder relies on the statement *not* being closed.
            getContext().addCleanable(() -> cleanupStatement(stmt));
            getConfig(SqlStatements.class).customize(stmt);
        } catch (SQLException e) {
            throw new UnableToCreateStatementException(e, ctx);
        }

        ctx.setStatement(stmt);

        beforeBinding();

        new ArgumentBinder(stmt, ctx, parsedSql.getParameters()).bind(getBinding());

        beforeExecution();

        attachJfrEvent(evt, ctx);

        try {
            SqlLoggerUtil.wrap(stmt::execute, ctx, getConfig(SqlStatements.class).getSqlLogger());
        } catch (SQLException e) {
            throw new UnableToExecuteStatementException(e, ctx);
        }

        afterExecution();

        return stmt;
    }
Define all bound arguments that don't already have a definition with a boolean indicating their presence.
Useful to easily template optional properties of pojos or beans like {@code <if(property)>property = :property<endif>}.
@return this
core/src/main/java/org/jdbi/v3/core/statement/SqlStatement.java