go-gorm / clickhouse

GORM clickhouse driver
MIT License
244 stars 72 forks source link

how can gorm-clickhouse read "with totals" row ? #157

Open TDTzzz opened 6 months ago

TDTzzz commented 6 months ago

how can gorm-clickhouse read "with totals" row ?

The document you expected this should be explained

Expected answer

like below,but i want to receive data by []map[string]interface

package tests

import (
    "context"
    "github.com/stretchr/testify/require"
    "testing"

    "github.com/ClickHouse/clickhouse-go/v2"
    "github.com/stretchr/testify/assert"
)

func TestWithTotals(t *testing.T) {
    conn, err := GetNativeConnection(nil, nil, &clickhouse.Compression{
        Method: clickhouse.CompressionLZ4,
    })
    ctx := context.Background()
    require.NoError(t, err)
    const query = `
        SELECT
            number AS n
            , COUNT()
        FROM (
            SELECT number FROM system.numbers LIMIT 100
        ) GROUP BY n WITH TOTALS
        `
    rows, err := conn.Query(ctx, query)
    require.NoError(t, err)
    var count int
    for rows.Next() {
        count++
        var (
            n uint64
            c uint64
        )
        require.NoError(t, rows.Scan(&n, &c))
    }
    require.Equal(t, 100, count)
    var (
        n, totals uint64
    )
    require.NoError(t, rows.Totals(&n, &totals))
    assert.Equal(t, uint64(0), n)
    assert.Equal(t, uint64(100), totals)
}