package ch import ( "reflect" "github.com/uptrace/go-clickhouse/ch/chschema" ) type mapModel struct { m map[string]any columnar bool } var _ Model = (*mapModel)(nil) func newMapModel(v reflect.Value) *mapModel { if v.IsNil() { v.Set(reflect.MakeMap(mapType)) } return &mapModel{ m: v.Interface().(map[string]any), } } func (m *mapModel) SetColumnar(on bool) { m.columnar = on } func (m *mapModel) ScanBlock(block *chschema.Block) error { if m.columnar { for _, col := range block.Columns { set(m.m, col.Name, col.Value()) } return nil } for _, col := range block.Columns { if col.Len() > 0 { set(m.m, col.Name, col.Index(0)) } else { zero := reflect.Zero(col.Columnar.Type()).Interface() set(m.m, col.Name, zero) } } return nil }