aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/ClickHouse/clickhouse-go/clickhouse_read_meta.go
blob: 83e18dc1460a62dc2a08fb3b385faa8f48d4586b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package clickhouse

import (
	"fmt"

	"github.com/ClickHouse/clickhouse-go/lib/data"
	"github.com/ClickHouse/clickhouse-go/lib/protocol"
)

func (ch *clickhouse) readMeta() (*data.Block, error) {
	for {
		packet, err := ch.decoder.Uvarint()
		if err != nil {
			return nil, err
		}

		switch packet {
		case protocol.ServerException:
			ch.logf("[read meta] <- exception")
			return nil, ch.exception()
		case protocol.ServerProgress:
			progress, err := ch.progress()
			if err != nil {
				return nil, err
			}
			ch.logf("[read meta] <- progress: rows=%d, bytes=%d, total rows=%d",
				progress.rows,
				progress.bytes,
				progress.totalRows,
			)
		case protocol.ServerProfileInfo:
			profileInfo, err := ch.profileInfo()
			if err != nil {
				return nil, err
			}
			ch.logf("[read meta] <- profiling: rows=%d, bytes=%d, blocks=%d", profileInfo.rows, profileInfo.bytes, profileInfo.blocks)
		case protocol.ServerData:
			block, err := ch.readBlock()
			if err != nil {
				return nil, err
			}
			ch.logf("[read meta] <- data: packet=%d, columns=%d, rows=%d", packet, block.NumColumns, block.NumRows)
			return block, nil
		case protocol.ServerEndOfStream:
			_, err := ch.readBlock()
			ch.logf("[process] <- end of stream")
			return nil, err
		default:
			ch.conn.Close()
			return nil, fmt.Errorf("[read meta] unexpected packet [%d] from server", packet)
		}
	}
}