@@ -95,7 +95,7 @@ func (block *Block) Read(serverInfo *ServerInfo, decoder *binary.Decoder) (err e
95
95
return nil
96
96
}
97
97
98
- func (block * Block ) prepareArray ( value reflect.Value , num , level int ) ( values [] interface {}) {
98
+ func (block * Block ) writeArray ( column column. Column , value reflect.Value , num , level int ) error {
99
99
switch {
100
100
case value .Kind () == reflect .Slice :
101
101
if len (block .offsets [num ]) < level {
@@ -107,12 +107,16 @@ func (block *Block) prepareArray(value reflect.Value, num, level int) (values []
107
107
)
108
108
}
109
109
for i := 0 ; i < value .Len (); i ++ {
110
- values = append (values , block .prepareArray (value .Index (i ), num , level + 1 )... )
110
+ if err := block .writeArray (column , value .Index (i ), num , level + 1 ); err != nil {
111
+ return err
112
+ }
111
113
}
112
114
default :
113
- values = append (values , value .Interface ())
115
+ if err := column .Write (block .buffers [num ].Column , value .Interface ()); err != nil {
116
+ return err
117
+ }
114
118
}
115
- return values
119
+ return nil
116
120
}
117
121
118
122
func (block * Block ) AppendRow (args []driver.Value ) error {
@@ -130,10 +134,8 @@ func (block *Block) AppendRow(args []driver.Value) error {
130
134
if value .Kind () != reflect .Slice {
131
135
return fmt .Errorf ("unsupported Array(T) type [%T]" , value .Interface ())
132
136
}
133
- for _ , value := range block .prepareArray (value , num , 1 ) {
134
- if err := column .Write (block .buffers [num ].Column , value ); err != nil {
135
- return err
136
- }
137
+ if err := block .writeArray (c , value , num , 1 ); err != nil {
138
+ return err
137
139
}
138
140
case * column.Nullable :
139
141
if err := column .WriteNull (block .buffers [num ].Offset , block .buffers [num ].Column , args [num ]); err != nil {
0 commit comments