Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Mon Mar 23 18:31:52 2026 +0000

    odbc: Fix SQL_DESC_BIND_OFFSET_PTR handling

    Use sql_desc_bind_offset_ptr not only on structure binding or
    on following (not first) rows.
    SQLExtendedFetch uses sql_desc_bind_offset_ptr so do not clear it.
    Add a test, partially from Bob Kline.
    This fixes https://github.com/FreeTDS/freetds/issues/716.

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Sat Feb 14 17:16:58 2026 +0000

    utils: Fix compatibility with Nettle 4 library

    Hash length parameter was removed from nettle_md5_digest.

    Method suggested by Satadru Pramanik.

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Thu Feb 19 04:48:16 2026 +0000

    odbc: Fix leak in SQLDriverConnect if string is invalid

    Login structure was not freed if odbc_parse_connect_string
    returned false, which can simply happen if the string has
    an invalid syntax.

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Mon Feb 16 21:45:25 2026 +0000

    tds: Avoid overflow converting numeric to string

Author: Aaron M. Ucko <ucko@ncbi.nlm.nih.gov>
Date:   Thu May 9 16:36:31 2024 -0400

    Improve support for TDS 5 (Sybase) bulk transfers.

    * Read defaults, send them back explicitly as needed, and clean up
      their storage afterwards.
    * tds5_bcp_add_variable_columns:
    ** Send spaces in lieu of fully empty SYB(VAR)CHAR data.
    ** Send correct textpos values in all cases.
    ** When writing the adjustment table, avoid a potential Sybase "row
       format error" by eliding the (effective) column count when it would
       have repeated the largest adjustment table entry.
    * tds_deinit_bcpinfo: Free and reset current_row for transfers in.
      Avoid potentially trying to interpret fragments of outgoing TDS
      data as BLOB pointers.

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Mon Dec 1 19:37:18 2025 +0000

    odbc: Fix for SQL_COPT_SS_OLDPWD attribute

    This attribute allows to change the password while logging
    to the server.
    Code was wrongly taking the length of the attribute in
    characters instead of bytes causing a failure using wide
    function.

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Wed Nov 19 23:57:13 2025 +0000

    Fix ABI breakage for tdsdump_open under Windows

    tdsdump_open is exported by our DB-Library implementation.
    Before version 1.5 tdsdump_open always accepted a "const char*"
    string, however in 1.5 this was changed to "const wchar_t*" for
    Windows to support Unicode.
    This broke ABI for Windows.
    Provide tdsdump_open with old ABI and a new tdsdump_wopen
    (Windows only).

Author: Matt McNabb <matthew.mcnabb@vmssoftware.com>
Date:   Thu Oct 30 21:26:10 2025 -0400

    odbc: Re-prepare a prepared query if it never returned a handle

Merge: b95ce1e6 e39070ff
Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Thu Oct 30 06:30:11 2025 +0000

    Merge fix for SQLPutData

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Thu Oct 23 19:45:03 2025 +0100

    odbc: Fix inserting too much data with SQLPutData

    An error is returned if column is truncate.

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Wed Oct 8 16:35:57 2025 +0100

    odbc: Accept any variable data type using DATA_AT_EXEC length

    Reported in https://github.com/FreeTDS/freetds/issues/667.

    The behaviour is consistent with Microsoft driver.

    This caused an issue using PHP ODBC PDO driver.

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Tue Oct 14 21:35:22 2025 +0100

    ci: Update win-iconv version

    Pick up more recent master version, already including my fix.

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Wed Sep 10 17:53:56 2025 +0100

    dblib: Expand buffers to hold converted floating point

    Make sure there's enough space for converting the numbers.
    This fixes fisql command printing real/float values.

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Thu Aug 28 21:02:57 2025 +0100

    Use CORK flag correctly, do not delay partial packets

    Resetting TCP_CORK flag in Linux causes the partial packets
    to be flushed however if the queue is full partial packets
    are not moved to the queue.
    Partial packets are then processed when space is available.
    However FreeTDS used to set again the flag causing partial
    packets to be delayed.
    Remove that delay reducing latency.

Merge: 569401e6 65efc2d5
Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Wed Jun 25 17:15:09 2025 +0100

    Merge test for vasprintf for VMS

Author: Craig A. Berry <craigberry@mac.com>
Date:   Tue Jun 24 10:38:20 2025 -0500

    VMS has had vsnprintf for a long time

    And this allows for a better vasprintf fallback for systems where
    vasprintf is not available.

Author: Craig A. Berry <craigberry@mac.com>
Date:   Mon Jun 23 07:26:27 2025 -0500

    Better test for vasprintf on VMS

    Recentish CRTLs do have it, but the test I added 23 years ago was
    not correctly detecting it.

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Wed Jun 18 11:08:10 2025 +0100

    tds: Fix bulk copy in for Microsoft XML type

    As documented, and tested, the protocol requires the usage
    of NVARCHAR type, not XML, which is refused causing an error.

Merge: 349445e4 6c532e2a
Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Sat May 31 17:43:29 2025 +0100

    Fix conversion bound checks, tsql message formatting

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Sat May 31 17:02:34 2025 +0100

    tds: Fix bound check conversion (float -> uint)

    Converting from floating point to unsigned int the bound check
    was incorrect resulting in invalid conversions if the input
    value was not in range.

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Sat May 31 17:00:18 2025 +0100

    tsql: Avoid possible invalid type formatting a message

    Specifically:

    tsql.c: In function ‘do_query’:
    tsql.c:292:80: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 4 has type ‘__suseconds64_t’ {aka ‘long long int’} [-Wformat=]
      292 |                         sprintf(message, "Total time for processing %d rows: %ld msecs\n",
          |                                                                              ~~^
          |                                                                                |
          |                                                                                long int
          |                                                                              %lld
      293 |                                 rows, (long) ((stop.tv_sec - start.tv_sec) * 1000) + ((stop.tv_usec - start.tv_usec) / 1000));
          |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          |                                                                                    |
          |                                                                                    __suseconds64_t {aka long long int}

    long should be enough for 49 days in case of 32 bit, I hope
    your query doesn't take so long.

Author: Frediano Ziglio <freddy77@gmail.com>
Date:   Mon Apr 21 15:58:08 2025 +0100

    ctlib: Remove leak freeing command

    Release cursor while freeing command.

