Fixes 'List of argument must consist only of dictionaries' error when
running parallel queries with ODBC-style ? placeholders.
The issue occurs because SQLAlchemy 2.0's text() expects named
parameters (dict) but the code was passing positional parameters (tuples).
Solution:
- Detect tuple parameters in _execute_query_pooled
- Convert tuples to dict with keys p1, p2, p3...
- Replace ? placeholders with :p1, :p2... in the query string
- Pass converted dict to conn.execute()
This maintains backward compatibility with single-connection mode
which uses pyodbc and handles tuple parameters natively.
Affected queries:
- table_exists (2 params: schema, table)
- get_columns (2 params: schema, table)
- get_primary_keys (2 params: schema, table)
- Delete investigation CLI command and related services
- Remove investigation data models and report generators
- Clean up configuration options and documentation
- Update gitignore and remove stale egg-info
Investigation feature is no longer needed and has been fully removed.
Backup preserved in git tag 'pre-investigation-removal'.