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:
BEGIN
CREATE 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 (returns 1)
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.go
Connection.QueryContext(...)
- compare with
Connection.PrepareContext(...) transaction handling
Suggested fix:
- In
Connection.QueryContext, when c.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)
- Both should see uncommitted tx-local table/data consistently.
Component(s)
Integration, Other
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 usingdatabase/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:
1.Actual:
From code inspection, this may be because
Connection.QueryContextusesc.client.Execute(...)directly and does not branch onc.txn, while prepared-statement paths do usetxn.Prepare(...).Likely affected code:
arrow/flight/flightsql/driver/driver.goConnection.QueryContext(...)Connection.PrepareContext(...)transaction handlingSuggested fix:
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:
tx.QueryRowContext(...)tx.QueryRowContext(..., arg)Component(s)
Integration, Other