clickhouse-go
clickhouse-go copied to clipboard
Panic reading Tuple(NULL, NULL)
Issue description
I'm attempting to run a query that has a Tuple(NULL, NULL) as the result. This panics with reflect: New(nil)
It works with Tuple(NULL) but seems to break when there's more than one element and one of those elements has a NULL.
Example code
func TestNullTuple(t *testing.T) {
conn := clickhouse.OpenDB(&clickhouse.Options{
Addr: []string{"localhost:9000"}})
defer conn.Close()
rows, err := conn.Query("SELECT (NULL, NULL)")
require.NoError(t, err)
rows.Next()
}
Error log
--- FAIL: TestNullTuple (0.00s)
panic: reflect: New(nil) [recovered]
panic: reflect: New(nil)
goroutine 20 [running]:
testing.tRunner.func1.2({0xabb800, 0xca2fb0})
/nix/store/2h84mndkdcmk2ydq1b628k3ckcihkk7y-go-1.18.6/share/go/src/testing/testing.go:1389 +0x24e
testing.tRunner.func1()
/nix/store/2h84mndkdcmk2ydq1b628k3ckcihkk7y-go-1.18.6/share/go/src/testing/testing.go:1392 +0x39f
panic({0xabb800, 0xca2fb0})
/nix/store/2h84mndkdcmk2ydq1b628k3ckcihkk7y-go-1.18.6/share/go/src/runtime/panic.go:838 +0x207
reflect.New({0x0?, 0x0?})
/nix/store/2h84mndkdcmk2ydq1b628k3ckcihkk7y-go-1.18.6/share/go/src/reflect/value.go:3006 +0xad
github.com/ClickHouse/clickhouse-go/v2/lib/column.(*Tuple).scanSlice(0xc000452000, {0xcb5c60?, 0xaacde0?}, 0xc00059a4d0?)
/home/joshua/feral/code/clickhouse-go/lib/column/tuple.go:382 +0x31f
github.com/ClickHouse/clickhouse-go/v2/lib/column.(*Tuple).scan(0xc000452000, {0xcb5c60, 0xaacde0}, 0xc000462280?)
/home/joshua/feral/code/clickhouse-go/lib/column/tuple.go:418 +0x506
github.com/ClickHouse/clickhouse-go/v2/lib/column.(*Tuple).ScanRow(0xc000462280?, {0xc000462280?, 0xc000592120?}, 0x1000000cad5b0?)
/home/joshua/feral/code/clickhouse-go/lib/column/tuple.go:439 +0x105
github.com/ClickHouse/clickhouse-go/v2/lib/column.(*Tuple).Row(0xc000452000, 0x4?, 0xb0?)
/home/joshua/feral/code/clickhouse-go/lib/column/tuple.go:136 +0xbe
github.com/ClickHouse/clickhouse-go/v2.(*stdRows).Next(0xc00059c038, {0xc00059a4a0, 0x1, 0xc000054410?})
/home/joshua/feral/code/clickhouse-go/clickhouse_std.go:295 +0x1e4
database/sql.(*Rows).nextLocked(0xc0004fc180)
/nix/store/2h84mndkdcmk2ydq1b628k3ckcihkk7y-go-1.18.6/share/go/src/database/sql/sql.go:3008 +0x111
database/sql.(*Rows).Next.func1()
/nix/store/2h84mndkdcmk2ydq1b628k3ckcihkk7y-go-1.18.6/share/go/src/database/sql/sql.go:2986 +0x2f
database/sql.withLock({0xcac1e8, 0xc0004fc1b0}, 0xc00012de00)
/nix/store/2h84mndkdcmk2ydq1b628k3ckcihkk7y-go-1.18.6/share/go/src/database/sql/sql.go:3437 +0x8c
database/sql.(*Rows).Next(0xc0004fc180)
/nix/store/2h84mndkdcmk2ydq1b628k3ckcihkk7y-go-1.18.6/share/go/src/database/sql/sql.go:2985 +0x6f
github.com/ClickHouse/clickhouse-go/v2/tests/std.TestNullTuple(0x0?)
/home/joshua/feral/code/clickhouse-go/tests/std/tuples_test.go:34 +0x11f
testing.tRunner(0xc0005804e0, 0xbe8ff8)
/nix/store/2h84mndkdcmk2ydq1b628k3ckcihkk7y-go-1.18.6/share/go/src/testing/testing.go:1439 +0x102
created by testing.(*T).Run
/nix/store/2h84mndkdcmk2ydq1b628k3ckcihkk7y-go-1.18.6/share/go/src/testing/testing.go:1486 +0x35f
FAIL github.com/ClickHouse/clickhouse-go/v2/tests/std 0.040s
FAIL
Configuration
OS: NixOS 22.05.3231.893b6b9f6c4 (Quokka)
Interface: database/sql
Driver version: Tested with master and v2.3.0
Go version: go version go1.18.6 linux/amd64
ClickHouse Server version: 22.3.2.1
I got my syntax wrong and it seems that a tuple of any size with NULL panics. This will trigger the bug too: SELECT tuple(NULL)