903be5b185
ODBC connections were conservatively keeping the cast for every database. Testing against real ODBC drivers shows the cast is needed only where the parameter type cannot be determined without it: - psqlodbc -> PostgreSQL: needed. Without it, context-free parameters fail with 'could not determine data type of parameter' (the earlier CI failure). - sqliteodbc -> SQLite: needed. Without it, '? = 1' compares text against an integer and silently returns false, like on native SQLite. - duckdb-odbc: not needed. The full test suite passes without the cast, as DuckDB defaults untyped parameters to VARCHAR. The cast is therefore dropped for MySQL, SQL Server and DuckDB behind ODBC, mirroring their native behavior (MySQL and SQL Server convert the bound string at execution time, which also fixes the unicode mangling for SQL Server reached through ODBC), and kept for PostgreSQL, SQLite, Oracle, Snowflake and unknown databases. Verified with the full test suite on native SQLite, PostgreSQL, MySQL and SQL Server, and through ODBC on PostgreSQL, SQLite and DuckDB. The only ODBC failure is a pre-existing database-filesystem timestamp test that also fails on main.