Special thanks to Matt McNabb, Aaron M. Ucko and Craig A. Berry for their
many contributions to this release.
Many changes went in, the main ones are in BCP and CT-Library:
- BCP got many improvements in both capability and correctness: new types
supported, better error reporting and better compatibility with the
proprietary libraries. Some data that was silently accepted before (too
long values, conversion errors) now gives a warning or error; better than
potentially corrupting data. - CT-Library error checking and reporting was improved quite a bit: more
errors are caught, and they are more similar to the SAP library. - Login and security: Extended Protection for Authentication (EPA), NTLM
updates andstrictencryption for Sybase/SAP ASE.
User visible (not in a particular order):
- Generic:
- (*) Fix certificate check for hostnames with wildcards (OpenSSL);
- (*) Use CORK flag correctly, do not delay partial packets (lower latency);
- (*) Fix bound check converting float to unsigned integers;
- (*) Avoid overflow converting numeric to string;
- (*) Fix bulk copy in for Microsoft XML type;
- (*) Improve support for TDS 5 (Sybase) bulk transfers (defaults,
empty strings, text positions, row format errors); - (*) Fix ABI breakage for
tdsdump_openunder Windows, add
tdsdump_wopen; - (*) Fix compatibility with Nettle 4 library;
- (*) Prevent infinite loop when sending disconnect request;
- Support Extended Protection for Authentication (EPA): channel binding
for NTLM, Kerberos and SSPI, usingtls-server-end-pointfor TLS 1.3; - NTLM improvements:
- add MIC and key exchange;
- send target name (SPN), required by MSSQL in strict mode with EPA;
- support empty domain (user principal names,
\user@domain); - use Unicode upper case for NTLMv2 user names (non-ASCII names);
- allow longer passwords in multibyte client charsets.
- Use instance name, not port, for Kerberos/SSPI SPN;
- Disable TLS v1.1 by default;
- Do not override all GnuTLS settings, add
gnutls ciphersconfiguration
to set the priority string; - Allow
strictencryption for TDS 5.0 (Sybase SSL); - Support bulk copy into data rows locked tables for Sybase ASE;
- Avoid some truncation on prepared statements and BCP insert;
- Use proper collation for bulk inserts;
- Add missing SQL collations;
- Improve char to binary conversions (leading/trailing spaces,
odd number of digits); - Report incomplete multibyte sequences with their own error
(TDSEICONVPARTIAL, 2433) instead of 2401; - Report unavailable character set conversion at login;
- Do not accept negative values for port, text size and timeouts;
- Default to not flush the log file after each line (~3x faster logging),
setTDSDUMP_FLUSHto restore old behaviour; - Option (
TDS_DEBUG_CRT_FILENAME) to dump Windows CRT debug logging to
a file; - Give error at configure time if iconv library is not found and not
explicitly disabled; - Windows MSI installer in AppVeyor artifacts.
- ODBC:
- (*) Accept any variable data type using
DATA_AT_EXEClength; - (*) Fix inserting too much data with
SQLPutData; - (*) Re-prepare a prepared query if it never returned a handle;
- (*) Fix
SQL_COPT_SS_OLDPWDattribute; - (*) Fix leak in
SQLDriverConnectif string is invalid; - (*) Fix
SQL_DESC_BIND_OFFSET_PTRhandling; - (*) Update
SQLGetInfo(SQL_DESCRIBE_PARAMETER); - (*) Make
SQLSetDescFieldextend automatically the descriptor; - Add
ServerCertificateandConnectionTimeoutconnection attributes; - Load
ApplicationIntentfromodbc.ini; - Add
SQL_COPT_SS_ATTACHDBFILENAMEconnection attribute; - Configurable date/time formats for conversions to character
(DateTimeFmt,DateFmt,TimeFmtoptions and
SQL_COPT_TDSODBC_DATETIME_FORMAT,..._DATE_FORMAT,..._TIME_FORMAT
attributes); - Return row count correctly in presence of triggers;
- Tell Driver Manager we support server side cursors;
- More compatibility for
SQL_ATTR_QUERY_TIMEOUTattribute; - BCP: set charset conversion based on binding type, add missing types,
avoid crashes inbcp_bindwith invalid terminators; - MARS: fix sliding window calculation, reuse MARS session until
statement is freed.
- (*) Accept any variable data type using
- Applications:
- (*) tsql: Avoid possible invalid type formatting a message;
- freebcp:
- Fix native file format (
-n) used together with-E(issue #647); - Support hexadecimal syntax for row/field terminators;
- Implement
-k(keep nulls) and allow multiple hints; - Dry-run option
-jfor bcp in; - Apply
-Llimit correctly; - Report rows failed to copy to server;
- Better handling of exceptional cases in host files (prefix/terminator,
oversized data, missing terminator message matching MS bcp); - Uninitialized columns default to NULL;
- Faster bcp in/out using buffered file streams and optimized formatting;
- Correct precision for variable precision date/time types.
- Fix native file format (
- defncopy:
- Basic implementation of input mode (
-i); - Support Sybase command line syntax (
in/out); - Do not output
USEstatement, match Sybase delimiters; - Sanitize arguments.
- Basic implementation of input mode (
- CT-Library:
- (*) Remove leak freeing command;
- (*) Fix
ct_results()hang on empty result set withCS_DYNAMIC_CMD; - Support
UNITEXTforCS_VERSION_150and later (CS_UNITEXT_TYPE,
CS_DATA_UNITEXT/CS_DATA_NOUNITEXTcapabilities); - Copy binary data as is converting to
CS_UNICHAR/CS_UNITEXT; - Implement setting date format using
cs_dt_info, use same default
date formats as Sybase library; - Many fixes and improvements to
cs_convert(numeric, char to binary,
length limits, error reporting); - Bulk copy:
- implement
blk_textxferfor copy in; - fix bulk copy into
NVARCHARcolumns; - handle
CS_BLK_CANCELinblk_done; - fix row count handling for
blk_rowxfer_mult; - fix bulk copy out termination;
- support all fixed types binding with
CS_UNUSEDlength; - handle data too long and unsupported types like Sybase library;
- do not ignore conversion errors;
- separate error texts for BLK-Library.
- implement
ct_cursor: predict cursor type forCS_CURSOR_DECLARE, improve query
parsing;- Better parameter checks for
ct_cursorandct_cmd_props(CS_CUR_STATUS); - Report long variable-width parameter values;
- Allow sending a new command after
CS_CANCEL_ALL; - Fail
ct_resultsif rows are not fetched (instead of looping); - Do not wait for data in
ct_fetchif none is expected; - Handle
DONEPROCtoken ending a result set; - Report errors at the end of a result set (
CS_CMD_FAIL); - Discard pending results when dropping a command.
- DB-library:
- (*) Expand buffers to hold converted floating point;
- Return table column name from
dbtablecolinfoif available; - Truncate too long char and binary data for bulk copy in (
SYBEBCOR); - Check for overflow converting data for BCP copy in;
- BCP into computed columns again when allowing triggers;
- Fix
bcp_bindchecks comparing with Sybase and MS; - Check parameters in
bcp_getbatchsize; - Fix writing BCP error line to error file;
- Fix result of
dbstrbuildand other fixes to string formatting; - Use the message from libTDS to report libTDS errors;
- Avoid possible overflows formatting dates;
- Fix
dboptsleak.
- pool:
- Allow
tdspoolto be started by inetd/xinetd (-x); - Support systemd socket activation;
- Exit on permanent accept errors;
- Set no SIGPIPE on socket.
- Allow
(*) Feature backported in stable 1.5 branch.
Implementation:
- Remove many warnings compiling with
-Wconversionand static analyzers; - Make implicit function declarations an error;
- Introduce and reuse
TDS_MAX,TDS_MINandTDS_CLAMP; - Reduce usage of deprecated OpenSSL 3 functions;
- Move specific libTDS headers in
include/freetds/tdsdirectory; - Move
get_int_colfrom ODBC to libTDS, addtds_try_get_int_col; - Allow sending blob data in chunks during bulk copy (libTDS);
- Split ODBC sources (
info.c,catalog.c,odbc_util.c); - Add and reuse
xstrduputility; - Remove usage of
WIN32,WIN64and__WIN32__macros; - Remove obsolete CVS
$Id,mkinstalldirs; - Bump minimal CMake version to 3.10, greater use of
GNUInstallDirs; - CMake: allow building tests without running them, build wide tests
consistently with Autoconf; - Minor updates to RPM spec file;
- Unit tests:
- central test setup and
PWDfile handling,TEST_MAIN()entry points; - more compatibility with Sybase/SAP libraries;
- ODBC tests use ODBC 3 by default (was ODBC 2).
- central test setup and
- Many OpenVMS build improvements (configure from trunk, ODBC with MARS
and wide support, run full test suite); - CI:
- add MSSQL 2025, enable back MSSQL 2017;
- build and run tests under macOS;
- add Visual Studio 2026, remove Visual Studio 2010 and 2015;
- use OpenSSL 3.3-3.6 if available;
- run tests in parallel.
Caution
Do not use Source code links below, they are auto generated and broken.