=============================================
General
-------
- Add python 3.12 support (fix 851). Thanks to Raphael Jacob.
- Update FreeTDS to 1.4.10.
- Add read_only parameter for connection.
- Add encryption parameter to connect.
- Add use_datetime2 parameter to connect.
- Use utf-8 for connection properties.
- Implement batching in executemany based on optional batch_size parameter.
with default equal arraysize cursor attribute (closes 332, 462).
- Build aarch64 wheels. Thanks to Jun Tang.
- Build musllinux wheels.
- Some documentation fixes. Thanks to Casey Korver and Quentin LEGAY.
- FAQ update: 877.
- Add stubs (closes 767).
- Fix DBAPI-2.0 compliance - DataError must be a subclass of DatabaseError.
- Fix DBAPI-2.0 compliance: rename `batchsize` cursor attribute to `arraysize`.
- Implement DATETIMEOFFSET handling for stored procedures.
- Implement DATETIMEOFFSET handling for insert and select queries (fixes 649).
- Return instance of datetime.datetime on select from SQLDATETIM4, SQLDATETIME, SQLDATETIME2 columns (closes 662, 695, 792, 844).
Bug fixes
---------
- Fix SQLDATETIME2 handling in convert_python_value().
- Use four digits for the year in SP args binding (fix 454).
- Fix convert_python_value to work with datetime.date. Thanks to Testsr.
- Check if C compiler is installed if check for clock_gettime fails (fix 825).
- Add missing `charset` parameter in the `_substitute_params` method when
calling `ensure_bytes` (fix 650). Thans to Andrey Yuroshev.
- Fix empty, zero or None parameter substitution. (fix 609).
Internals
---------
- Add tests for fetchall(), fetchmany(), fetchone() and next() with SP.
- Add test for 134.
- Require Cython>3.0.7.
- Use Cython 3 for compilation.
- Use docker image for MSSQL2019 as a default for tests.
- Take FreeTDS version for PyPI wheels from pyproject.toml.
- Check sdist with twine.
- Use OpenSSL-1.1.1.2100 for Windows x86 wheels. Thanks to PrimozGodec (fixes 839).
- Use OpenSSL-3.1.1 for Windows x64 wheels (FreeTDS build fails with OpenSSL-3.2.1).
- Add SQLTIME and SQLDATETIME2 to convert_python_value.
- Use dbanydatecrack() function instead of dbdatecrack().
- Replace DEF with cdef enum for buffer array size (compatibility with Cython 3).
- Remove references to tox. Thanks to Christoph Wegener.
- Update readthedocs configuration.
- Add tests for timeout in wait callback (305).
- Clean up some legacy FreeTDS shims.
- Add tests for tds_version parameter.
- Move check for clock_gettime to dev/ccompiler.py.
- Remove some Python2 remnants.
- Move FreeTDS version from workflow files to pyproject.toml.
- Move exceptions into separate module.
- Use strftime for date & time conversion.
- Simplify parameters quoting.
- Add tests for _quote_simple_value.