-
Notifications
You must be signed in to change notification settings - Fork 91
Description
Describe the bug, including details regarding any error messages, version, and platform.
I was using GPT-5.3-Codex to generate code for querying db using Arrow Flight SQL, and it found a possible bug in the arrow-go client. All the text below and the title is generated by Codex.
Description
I’m seeing inconsistent transaction behavior in github.com/apache/arrow-go/v18/arrow/flight/flightsql/driver (v18.5.1) when using database/sql.
In a transaction, queries with parameters behave correctly, but zero-argument tx.QueryRowContext(...) appears to execute outside the transaction.
This is easy to reproduce with tx-local DDL:
BEGINCREATE TABLE tx_tmp (id BIGINT, v BIGINT)INSERT INTO tx_tmp VALUES (1, 10)tx.QueryRowContext(ctx, "SELECT COUNT(*) FROM tx_tmp")-> fails (table does not exist)tx.QueryRowContext(ctx, "SELECT COUNT(*) FROM tx_tmp WHERE id >= ?", 1)-> works (returns1)
Expected:
- Both queries run in the same active transaction and return
1.
Actual:
- Zero-arg query can behave as if it is outside the tx (cannot see uncommitted DDL/data).
From code inspection, this may be because Connection.QueryContext uses c.client.Execute(...) directly and does not branch on c.txn, while prepared-statement paths do use txn.Prepare(...).
Likely affected code:
arrow/flight/flightsql/driver/driver.goConnection.QueryContext(...)- compare with
Connection.PrepareContext(...)transaction handling
Suggested fix:
- In
Connection.QueryContext, whenc.txn != nil && c.txn.ID().IsValid(), execute through transaction handle (or force transaction-bound prepared execution path), so no-arg tx queries stay transaction-scoped.
Suggested tests:
- Add regression test for tx-local DDL visibility with:
- zero-arg
tx.QueryRowContext(...) - parameterized
tx.QueryRowContext(..., arg)
- zero-arg
- Both should see uncommitted tx-local table/data consistently.
Component(s)
Integration, Other