All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
1.14.0 - 2021-03-25
- Replaced travis-ci with Github Actions.
- Replaced custom Docker-based testing infrastructure with tox.
- Fixed translation of SQL Server errors to Python exceptions for all errors with severity > 10. #84
1.13.0 - 2020-11-12
- Offical support for Python 3.9.
- Expose
ctds.Row
type so that it can be used as a type annotation. - Add
description
attribute to rowlists and rows. - Add
ctds.Row.dict()
method.
- Cache
cursor.description
rather than creating a new instance every time.
1.12.0 - 2020-03-07
- Fixed Python -> SQL type conversion to consider client TDS version when choosing SQL type. #68.
- Added Sphinx extension to auto-generate the
.nojekyll
file required by Github pages. - Consolidate coverage output to a single directory.
1.11.0 - 2019-11-14
- Official support for Python3.8.
- Automate Python egg publishing to pypi.
- Automate documentation publishing.
- Fix handling of
IDENTITY
columns inctds.Connection.bulk_insert()
. #59.
1.10.1 - 2019-06-27
- Properly handle errors in the
ctds.pool.ConnectionPool.connection
context manager.
1.10.0 - 2019-04-15
- Add FreeTDS 1.1 to test matrix.
- Preserve microsecond precision of TIME and DATETIME2 SQL types when converting to Python (and supported by FreeTDS).
- Fix improper conversion of empty strings to
NULL
inctds.Connection.bulk_insert()
. #35.
1.9.0 - 2018-11-05
- Add support for passing sequences of
dict
values toctds.Connection.bulk_insert
. The mapping key is used to determine the column order based on the column info available afterbcp_init
. #38
- Fix truncation of strings containing multi-byte sequences when not using
sp_executesql
. - Fix
ctds.Cursor.executemany()
truncating data for integer types. #43.
1.8.0 - 2018-09-07
- Official support for Python 3.7.
- Add optional
hostname
parameter toctds.connect()
. #20. - Add optional
ntlmv2
parameter toctds.connect()
. #27.
- Retry on SQL Server unittest database setup failures due to race conditions when starting SQL Server. This should make the unit tests much more reliable.
- Add
python_requires
specifier to setup.py. - Properly handle decimal.Decimal values specified in scientific notation.
- Properly set autocommit in
ctds.connect()
, even whenansi_defaults
isFalse
. - Download FreeTDS packages from HTTP URL for compatibility with Travis CI builds (FTP no longer works due to firewall issues.)
- Fix OS X Travis CI build.
- Improve SQL Server -> DB API 2.0 error mappings. #12
- Remove Python 2.6 from Appveyor CI due to lack of support.
- Fix
ctds.Cursor.executemany()
truncating data for variable width types. #25.
1.7.0 - 2018-01-24
- Add rich comparison support and
repr
toctds.Parameter
.
- Compiler warnings on older version of gcc.
- Debug assert when passing invalid parameters to
ctds.Cursor.execute*()
.
1.6.3 - 2017-12-05
- Raise proper warning from
ctds.Connection.messages
.
1.6.2 - 2017-11-27
- Support values longer than 8000 characters in
ctds.SqlVarChar
.
1.6.1 - 2017-11-20
- Revert passing BINARY 0x00 for (N)VARCHAR arguments.
1.6.0 - 2017-11-17
- Documentation improvements.
- Add an optional paramstyle argument to
ctds.connect
, with support for thenamed
paramstyle. - Add valgrind support for memory leak detection and integrate it into the CI build process (Travis only).
- Add optional
read_only
argument toctds.connect
for indication of read-only intent. Note: Requires as yet unreleased FreeTDS support.
- Pass a BINARY 0x00 byte instead of an empty string for (N)VARCHAR arguments. This is to work around the inability of the db-lib API to pass empty string parameters via RPC.
1.5.0 - 2017-10-16
- Windows support, with Appveyor continuous integration.
- Python egg-related metadata checks.
- Moved source code under ./src directory, per best practices.
1.4.1 - 2017-09-29
- Only clear
Connection.messages
on calls toexecute
,executemany
orcallproc
. Add support for raising multiple non-zero severity messages as warnings.
1.4.0 - 2017-09-13
- Changed the implementation of
Cursor.execute
to only perform parameter substitution if parameters are provided. When no parameters are passed, the SQL format string is treated as raw SQL.
Connection.messages
read-only property.- Improved code coverage.
1.3.2 - 2017-07-25
- Register RowListType to support pickling/unpickling.
- Convert test framework to use Docker-based containers for SQL Server and for each supported combination of Python and FreeTDS.
- Integrate codecov support for code coverage tracking.
- Move documentation hosting to GitHub pages.
- Include change log in generated documentation.
1.3.1 - 2017-05-31
- Fix connection failures when connecting to high port numbers on OS X.
- Fix unit test infrastructure to respect configured port number.
- Work around inconsistencies between FreeTDS versions in the bcp_getl/ BCP_SETL interfaces.
1.3.0 - 2017-03-15
- Replace usage of the deprecated
PyErr_Warn
API withPyErr_WarnEx
. This will allow clients to indicate that warnings should be raised as exceptions.
1.2.3 - 2017-03-13
- Improve
repr
implementation for SQL type wrapper objects. - Fixed informational (warning) message reporting where many SQL Server reported messages were not reported as warnings due if not returned to the client promptly enough.
1.2.2 - 2017-01-10
- Fix multi-byte UTF-16 character conversion.
1.2.1 - 2016-12-27
- Include
ctds.pool
in egg package.
1.2.0 - 2016-12-27
- Documentation improvements around (N)VARCHAR handling.
ctds.pool.ConnectionPool
class.- Support the
in
keyword for resultset rows. - Add code coverage support for Python code.
- Improve code coverage support for c code.
1.1.0 - 2016-11-14
ctds.SqlNVarChar
type.- Ignore the replacement parameter markers inside of string literals in
SQL statements passed to
ctds.Cursor.execute()
andctds.Cursor.executemany()
.
- Work around a Memory leak in FreeTDS when specifying the database at connection time.
- Fixed failure in
ctds.Cursor.execute()
andctds.Cursor.executemany()
when passing a SQL statement longer than 4000 characters.
1.0.8 - 2016-08-17
- Configure connections to use UTF-16 when supported (i.e. FreeTDS 1.00+). Don't replace codepoints outside of the UCS-2 range if the connection is using UTF-16 as it is no longer necessary and causes data loss.
1.0.7 - 2016-08-15
- Only use strict compile options for debug/development builds. Allow the client (e.g. pip) to specify the desired options when installing as an egg.
1.0.6 - 2016-08-15
- Compile under the c90 standard for better future portability.
- Don't overwrite more useful error messages with the useless "The statement has been terminated." error.
- Minor documentation improvements.
1.0.5 - 2016-05-23
- Fix the
ctds.Connection.timeout
property to raise an appropriate error when the option is supported, but the set fails.
1.0.4 - 2016-05-19
- Fix the
ctds.Connection.timeout
property to work with the DBSETTIME option added in FreeTDS version 1.00.
- Support for TDS version 7.4, introduced with FreeTDS version 1.00.
1.0.3 - 2016-03-31
- Fix execute() and executemany() to work with older versions of FreeTDS (prior to 0.92.405). Format the SQL command manually, instead of using sp_executesql, since older versions of FreeTDS don't seem to support passing NVARCHAR arguments to remote procedure calls.
- Transaction documentation
- Bulk insert documentation
1.0.2 - 2016-03-15
- Documentation typos and improvements
- travis-ci integration
1.0.1 - 2016-03-14
- Build on OS X
- Hypothetical integration with readthdocs.org
1.0.0 - 2016-03-14
Initial Release