<commit_before>
==============
0.9 Changelog
==============

.. changelog_imports::

    .. include:: changelog_08.rst
        :start-line: 5

    .. include:: changelog_07.rst
        :start-line: 5

.. changelog::
    :version: 0.9.4

    .. change::
        :tags: bug, engine

        The :meth:`.ConnectionEvents.after_cursor_execute` event is now
        emitted for the "_cursor_execute()" method of :class:`.Connection`;
        this is the "quick" executor that is used for things like
        when a sequence is executed ahead of an INSERT statement, as well as
        for dialect startup checks like unicode returns, charset, etc.
        the :meth:`.ConnectionEvents.before_cursor_execute` event was already
        invoked here.  The "executemany" flag is now always set to False
        here, as this event always corresponds to a single execution.
        Previously the flag could be True if we were acting on behalf of
        an executemany INSERT statement.

    .. change::
        :tags: bug, orm

        Added support for the not-quite-yet-documented ``insert=True``
        flag for :func:`.event.listen` to work with mapper / instance events.

    .. change::
        :tags: feature, sql

        Added support for literal rendering of boolean values, e.g.
        "true" / "false" or "1" / "0".

    .. change::
        :tags: feature, sql

        Added a new feature :func:`.schema.conv`, the purpose of which is to
        mark a constraint name as already having had a naming convention applied.
        This token will be used by Alembic migrations as of Alembic 0.6.4
        in order to render constraints in migration scripts with names marked
        as already having been subject to a naming convention.

    .. change::
        :tags: bug, sql

        :paramref:`.MetaData.naming_convention` feature will now also
        apply to :class:`.CheckConstraint` objects that are associated
        directly with a :class:`.Column` instead of just on the
        :class:`.Table`.

    .. change::
        :tags: bug, sql
        :tickets: 2991

        Fixed bug in new :paramref:`.MetaData.naming_convention` feature
        where the name of a check constraint making use of the
        `"%(constraint_name)s"` token would get doubled up for the
        constraint generated by a boolean or enum type, and overall
        duplicate events would cause the `"%(constraint_name)s"` token
        to keep compounding itself.

    .. change::
        :tags: feature, orm

        A warning is emitted if the :meth:`.MapperEvents.before_configured`
        or :meth:`.MapperEvents.after_configured` events are applied to a
        specific mapper or mapped class, as the events are only invoked
        for the :class:`.Mapper` target at the general level.

    .. change::
        :tags: feature, orm

        Added a new keyword argument ``once=True`` to :func:`.event.listen`
        and :func:`.event.listens_for`.  This is a convenience feature which
        will wrap the given listener such that it is only invoked once.

    .. change::
        :tags: feature, oracle
        :tickets: 2911
        :pullreq: github:74

        Added a new engine option ``coerce_to_unicode=True`` to the
        cx_Oracle dialect, which restores the cx_Oracle outputtypehandler
        approach to Python unicode conversion under Python 2, which was
        removed in 0.9.2 as a result of :ticket:`2911`.  Some use cases would
        prefer that unicode coersion is unconditional for all string values,
        despite performance concerns.  Pull request courtesy
        <NAME>.

    .. change::
        :tags: bug, pool

        Fixed small issue in :class:`.SingletonThreadPool` where the current
        connection to be returned might get inadvertently cleaned out during
        the "cleanup" process.  Patch courtesy jd23.

    .. change::
        :tags: bug, ext, py3k

        Fixed bug in association proxy where assigning an empty slice
        (e.g. ``x[:] = [...]``) would fail on Py3k.

    .. change::
        :tags: bug, general
        :tickets: 2979

        Fixed some test/feature failures occurring in Python 3.4,
        in particular the logic used to wrap "column default" callables
        wouldn't work properly for Python built-ins.

    .. change::
        :tags: feature, general

        Support has been added for pytest to run tests.   This runner
        is currently being supported in addition to nose, and will likely
        be preferred to nose going forward.   The nose plugin system used
        by SQLAlchemy has been split out so that it works under pytest as
        well.  There are no plans to drop support for nose at the moment
        and we hope that the test suite itself can continue to remain as
        agnostic of testing platform as possible.  See the file
        README.unittests.rst for updated information on running tests
        with pytest.

        The test plugin system has also been enhanced to support running
        tests against mutiple database URLs at once, by specifying the ``--db``
        and/or ``--dburi`` flags multiple times.  This does not run the entire test
        suite for each database, but instead allows test cases that are specific
        to certain backends make use of that backend as the test is run.
        When using pytest as the test runner, the system will also run
        specific test suites multiple times, once for each database, particularly
        those tests within the "dialect suite".   The plan is that the enhanced
        system will also be used by Alembic, and allow Alembic to run
        migration operation tests against multiple backends in one run, including
        third-party backends not included within Alembic itself.
        Third party dialects and extensions are also encouraged to standardize
        on SQLAlchemy's test suite as a basis; see the file README.dialects.rst
        for background on building out from SQLAlchemy's test platform.

    .. change::
        :tags: orm feature
        :tickets: 2976

        Added a new option to :paramref:`.relationship.innerjoin` which is
        to specify the string ``"nested"``.  When set to ``"nested"`` as opposed
        to ``True``, the "chaining" of joins will parenthesize the inner join on the
        right side of an existing outer join, instead of chaining as a string
        of outer joins.   This possibly should have been the default behavior
        when 0.9 was released, as we introduced the feature of right-nested
        joins in the ORM, however we are keeping it as a non-default for now
        to avoid further surprises.

        .. seealso::

            :ref:`feature_2976`

    .. change::
        :tags: bug, ext
        :tickets: 2810<commit_msg>Fix tag typo in changelog_09<commit_after>
==============
0.9 Changelog
==============

.. changelog_imports::

    .. include:: changelog_08.rst
        :start-line: 5

    .. include:: changelog_07.rst
        :start-line: 5

.. changelog::
    :version: 0.9.4

    .. change::
        :tags: bug, engine

        The :meth:`.ConnectionEvents.after_cursor_execute` event is now
        emitted for the "_cursor_execute()" method of :class:`.Connection`;
        this is the "quick" executor that is used for things like
        when a sequence is executed ahead of an INSERT statement, as well as
        for dialect startup checks like unicode returns, charset, etc.
        the :meth:`.ConnectionEvents.before_cursor_execute` event was already
        invoked here.  The "executemany" flag is now always set to False
        here, as this event always corresponds to a single execution.
        Previously the flag could be True if we were acting on behalf of
        an executemany INSERT statement.

    .. change::
        :tags: bug, orm

        Added support for the not-quite-yet-documented ``insert=True``
        flag for :func:`.event.listen` to work with mapper / instance events.

    .. change::
        :tags: feature, sql

        Added support for literal rendering of boolean values, e.g.
        "true" / "false" or "1" / "0".

    .. change::
        :tags: feature, sql

        Added a new feature :func:`.schema.conv`, the purpose of which is to
        mark a constraint name as already having had a naming convention applied.
        This token will be used by Alembic migrations as of Alembic 0.6.4
        in order to render constraints in migration scripts with names marked
        as already having been subject to a naming convention.

    .. change::
        :tags: bug, sql

        :paramref:`.MetaData.naming_convention` feature will now also
        apply to :class:`.CheckConstraint` objects that are associated
        directly with a :class:`.Column` instead of just on the
        :class:`.Table`.

    .. change::
        :tags: bug, sql
        :tickets: 2991

        Fixed bug in new :paramref:`.MetaData.naming_convention` feature
        where the name of a check constraint making use of the
        `"%(constraint_name)s"` token would get doubled up for the
        constraint generated by a boolean or enum type, and overall
        duplicate events would cause the `"%(constraint_name)s"` token
        to keep compounding itself.

    .. change::
        :tags: feature, orm

        A warning is emitted if the :meth:`.MapperEvents.before_configured`
        or :meth:`.MapperEvents.after_configured` events are applied to a
        specific mapper or mapped class, as the events are only invoked
        for the :class:`.Mapper` target at the general level.

    .. change::
        :tags: feature, orm

        Added a new keyword argument ``once=True`` to :func:`.event.listen`
        and :func:`.event.listens_for`.  This is a convenience feature which
        will wrap the given listener such that it is only invoked once.

    .. change::
        :tags: feature, oracle
        :tickets: 2911
        :pullreq: github:74

        Added a new engine option ``coerce_to_unicode=True`` to the
        cx_Oracle dialect, which restores the cx_Oracle outputtypehandler
        approach to Python unicode conversion under Python 2, which was
        removed in 0.9.2 as a result of :ticket:`2911`.  Some use cases would
        prefer that unicode coersion is unconditional for all string values,
        despite performance concerns.  Pull request courtesy
        <NAME>.

    .. change::
        :tags: bug, pool

        Fixed small issue in :class:`.SingletonThreadPool` where the current
        connection to be returned might get inadvertently cleaned out during
        the "cleanup" process.  Patch courtesy jd23.

    .. change::
        :tags: bug, ext, py3k

        Fixed bug in association proxy where assigning an empty slice
        (e.g. ``x[:] = [...]``) would fail on Py3k.

    .. change::
        :tags: bug, general
        :tickets: 2979

        Fixed some test/feature failures occurring in Python 3.4,
        in particular the logic used to wrap "column default" callables
        wouldn't work properly for Python built-ins.

    .. change::
        :tags: feature, general

        Support has been added for pytest to run tests.   This runner
        is currently being supported in addition to nose, and will likely
        be preferred to nose going forward.   The nose plugin system used
        by SQLAlchemy has been split out so that it works under pytest as
        well.  There are no plans to drop support for nose at the moment
        and we hope that the test suite itself can continue to remain as
        agnostic of testing platform as possible.  See the file
        README.unittests.rst for updated information on running tests
        with pytest.

        The test plugin system has also been enhanced to support running
        tests against mutiple database URLs at once, by specifying the ``--db``
        and/or ``--dburi`` flags multiple times.  This does not run the entire test
        suite for each database, but instead allows test cases that are specific
        to certain backends make use of that backend as the test is run.
        When using pytest as the test runner, the system will also run
        specific test suites multiple times, once for each database, particularly
        those tests within the "dialect suite".   The plan is that the enhanced
        system will also be used by Alembic, and allow Alembic to run
        migration operation tests against multiple backends in one run, including
        third-party backends not included within Alembic itself.
        Third party dialects and extensions are also encouraged to standardize
        on SQLAlchemy's test suite as a basis; see the file README.dialects.rst
        for background on building out from SQLAlchemy's test platform.

    .. change::
        :tags: feature, orm
        :tickets: 2976

        Added a new option to :paramref:`.relationship.innerjoin` which is
        to specify the string ``"nested"``.  When set to ``"nested"`` as opposed
        to ``True``, the "chaining" of joins will parenthesize the inner join on the
        right side of an existing outer join, instead of chaining as a string
        of outer joins.   This possibly should have been the default behavior
        when 0.9 was released, as we introduced the feature of right-nested
        joins in the ORM, however we are keeping it as a non-default for now
        to avoid further surprises.

        .. seealso::

            :ref:`feature_2976`

    .. change::
        :tags: bug, ext
        :tickets: 2810
{'fraction_non_alphanumeric': 0.06956713780918727, 'fraction_numerical': 0.008686690223792697, 'mean_word_length': 2.412459181110274, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6595865', 'n_tokens_mistral': 3620, 'n_tokens_neox': 3394, 'n_words': 1675}