1
0
mirror of https://github.com/uptrace/go-clickhouse.git synced 2025-08-08 22:16:32 +02:00

add pointers on how to implement map[string]string

This commit is contained in:
Vladimir Mihailenco
2023-02-16 10:21:47 +02:00
parent 998717a52f
commit d61954ab1c
3 changed files with 49 additions and 2 deletions

View File

@@ -204,8 +204,7 @@ func (c *UUIDColumn) ReadFrom(rd *chproto.Reader, numRow int) error {
c.AllocForReading(numRow)
for i := range c.Column {
err := rd.UUID(c.Column[i][:])
if err != nil {
if err := rd.UUID(c.Column[i][:]); err != nil {
return err
}
}
@@ -557,3 +556,41 @@ func (c BFloat16HistColumn) WriteTo(wr *chproto.Writer) error {
}
return nil
}
//------------------------------------------------------------------------------
type MapStringStringColumn struct {
ColumnOf[map[string]string]
}
var _ Columnar = (*MapStringStringColumn)(nil)
func NewMapStringStringColumn() Columnar {
return new(MapStringStringColumn)
}
func (c MapStringStringColumn) Type() reflect.Type {
return mapStringStringType
}
func (c *MapStringStringColumn) ReadFrom(rd *chproto.Reader, numRow int) error {
c.AllocForReading(numRow)
for i := range c.Column {
// TODO: implement
if err := rd.UUID(c.Column[i][:]); err != nil {
return err
}
}
return nil
}
func (c MapStringStringColumn) WriteTo(wr *chproto.Writer) error {
for i := range c.Column {
v := c.Column[i]
// TODO: implement
wr.Write(v)
}
return nil
}

View File

@@ -36,6 +36,8 @@ var (
sliceUint64Type = reflect.TypeOf((*[]uint64)(nil)).Elem()
sliceFloat32Type = reflect.TypeOf((*[]float32)(nil)).Elem()
mapStringStringType = reflect.TypeOf((*map[string]string)(nil)).Elem()
)
var chTypes = [...]string{
@@ -177,6 +179,9 @@ func ColumnFactory(chType string, typ reflect.Type) NewColumnFunc {
case "Array(Array(Bool))":
return NewArrayArrayStringColumn
case "Map(String, String)":
return NewMapStringStringColumn
case chtype.Any:
return nil
}

View File

@@ -322,6 +322,7 @@ func TestClickhouse(t *testing.T) {
tests := []func(ctx context.Context, t *testing.T, db *ch.DB){
testWhereBytes,
testMapStringString,
}
for _, fn := range tests {
t.Run(funcName(fn), func(t *testing.T) {
@@ -352,6 +353,10 @@ func testWhereBytes(ctx context.Context, t *testing.T, db *ch.DB) {
require.Equal(t, data.Bytes, got.Bytes)
}
func testMapStringString(ctx context.Context, t *testing.T, db *ch.DB) {
// TODO: add test
}
type Event struct {
ch.CHModel `ch:"goch_events,partition:toYYYYMM(created_at)"`