From 7e44426452d678af5786856cbd576e88fc2c3c7e Mon Sep 17 00:00:00 2001 From: Sebastiaan de Schaetzen Date: Sat, 31 May 2025 10:31:55 +0200 Subject: [PATCH] Add support for scanning columns (#5) Reviewed-on: https://gitea.seeseepuff.be/seeseemelk/mysqlite/pulls/5 --- query.go | 17 +++++++++++++++++ query_test.go | 13 +++++++++++++ 2 files changed, 30 insertions(+) diff --git a/query.go b/query.go index 831f8a3..f0fdedf 100644 --- a/query.go +++ b/query.go @@ -119,6 +119,23 @@ func (q *Query) MustExec() { } } +func (q *Query) ScanColumns(results *[]string) *Query { + if q.err != nil { + return q + } + + // Ensure the number of results matches the number of columns + if q.stmt.ColumnCount() != len(*results) { + *results = make([]string, q.stmt.ColumnCount()) + } + + // Fetch the column names + for i := 0; i < q.stmt.ColumnCount(); i++ { + (*results)[i] = q.stmt.ColumnName(i) + } + return q +} + func (q *Query) ScanSingle(results ...any) (rerr error) { defer q.unlock() // Scan rows diff --git a/query_test.go b/query_test.go index baab78c..4a4b409 100644 --- a/query_test.go +++ b/query_test.go @@ -35,6 +35,19 @@ func TestScanWithMissingValues(t *testing.T) { require.Equal(t, ErrMissingScan, err) } +func TestScanColumns(t *testing.T) { + db := openTestDb(t) + var columns []string + var key string + err := db.Query("select `key` from mytable"). + ScanColumns(&columns). + ScanSingle(&key) + require.NoError(t, err, "expected no error scanning columns") + require.Equal(t, 1, len(columns), "expected one column") + require.Equal(t, "key", columns[0], "expected column name 'key'") + require.Equal(t, "foo", key, "expected key to be 'foo'") +} + func TestBindInt64(t *testing.T) { db := openTestDb(t) var value int64