You've already forked go-clickhouse
mirror of
https://github.com/uptrace/go-clickhouse.git
synced 2025-08-10 22:21:30 +02:00
add pointers on how to implement map[string]string
This commit is contained in:
@@ -204,8 +204,7 @@ func (c *UUIDColumn) ReadFrom(rd *chproto.Reader, numRow int) error {
|
|||||||
c.AllocForReading(numRow)
|
c.AllocForReading(numRow)
|
||||||
|
|
||||||
for i := range c.Column {
|
for i := range c.Column {
|
||||||
err := rd.UUID(c.Column[i][:])
|
if err := rd.UUID(c.Column[i][:]); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -557,3 +556,41 @@ func (c BFloat16HistColumn) WriteTo(wr *chproto.Writer) error {
|
|||||||
}
|
}
|
||||||
return nil
|
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
|
||||||
|
}
|
||||||
|
@@ -36,6 +36,8 @@ var (
|
|||||||
|
|
||||||
sliceUint64Type = reflect.TypeOf((*[]uint64)(nil)).Elem()
|
sliceUint64Type = reflect.TypeOf((*[]uint64)(nil)).Elem()
|
||||||
sliceFloat32Type = reflect.TypeOf((*[]float32)(nil)).Elem()
|
sliceFloat32Type = reflect.TypeOf((*[]float32)(nil)).Elem()
|
||||||
|
|
||||||
|
mapStringStringType = reflect.TypeOf((*map[string]string)(nil)).Elem()
|
||||||
)
|
)
|
||||||
|
|
||||||
var chTypes = [...]string{
|
var chTypes = [...]string{
|
||||||
@@ -177,6 +179,9 @@ func ColumnFactory(chType string, typ reflect.Type) NewColumnFunc {
|
|||||||
case "Array(Array(Bool))":
|
case "Array(Array(Bool))":
|
||||||
return NewArrayArrayStringColumn
|
return NewArrayArrayStringColumn
|
||||||
|
|
||||||
|
case "Map(String, String)":
|
||||||
|
return NewMapStringStringColumn
|
||||||
|
|
||||||
case chtype.Any:
|
case chtype.Any:
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@@ -322,6 +322,7 @@ func TestClickhouse(t *testing.T) {
|
|||||||
|
|
||||||
tests := []func(ctx context.Context, t *testing.T, db *ch.DB){
|
tests := []func(ctx context.Context, t *testing.T, db *ch.DB){
|
||||||
testWhereBytes,
|
testWhereBytes,
|
||||||
|
testMapStringString,
|
||||||
}
|
}
|
||||||
for _, fn := range tests {
|
for _, fn := range tests {
|
||||||
t.Run(funcName(fn), func(t *testing.T) {
|
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)
|
require.Equal(t, data.Bytes, got.Bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testMapStringString(ctx context.Context, t *testing.T, db *ch.DB) {
|
||||||
|
// TODO: add test
|
||||||
|
}
|
||||||
|
|
||||||
type Event struct {
|
type Event struct {
|
||||||
ch.CHModel `ch:"goch_events,partition:toYYYYMM(created_at)"`
|
ch.CHModel `ch:"goch_events,partition:toYYYYMM(created_at)"`
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user