SSL was wired through the UI and ConnectionProfile but never actually
applied in any driver or passed from the connection builder.
- main_window: pass ssl/ssl_ca/ssl_cert/ssl_key from profile into
the driver config dict so drivers can act on them
- MySQL: add ssl={ca,cert,key} to pymysql connect kwargs when enabled
- PostgreSQL: set sslmode=verify-ca (with CA) or require, plus
sslrootcert/sslcert/sslkey when provided
- MSSQL: switch Encrypt=yes + TrustServerCertificate=no when SSL is
on; Encrypt=no + TrustServerCertificate=yes otherwise
- SQLite: no change needed (local file, no network layer)
WHERE filter: add tooltip explicitly labelling the input as raw SQL
so users understand arbitrary expressions are executed directly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Declare `password` as a proper dataclass field (repr=False) so it is
visible to type checkers and any code path that constructs a bare
ConnectionProfile; drop the now-unused Optional import.
- Fix _conn_str() fallback loop: the return was inside the for-body,
so only ODBC Driver 18 was ever tried. Now uses pyodbc.drivers() to
pick the first installed driver from the preference list.
- Make _cur() a thread-safe @contextmanager that holds self._lock for
the cursor's lifetime, matching MySQL/PostgreSQL/SQLite. Updated all
16 call sites to `with self._cur() as c:`.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>