ConvertValueForLocal converts value to local Golang type of value according field type name from database. The parameter `fieldType` is in lower case, like: `int2`, `int4`, `int8`, `_int2`, `_int4`, `_int8`, `uuid`, `_uuid`, etc. See: https://www.postgresql.org/docs/current/datatype.html PostgreSQ
(ctx context.Context, fieldType string, fieldValue any)
| 157 | // - _date (date[]), _timestamp (timestamp[]), _timestamptz (timestamptz[]) |
| 158 | // - _jsonb (jsonb[]), _json (json[]) |
| 159 | func (d *Driver) ConvertValueForLocal(ctx context.Context, fieldType string, fieldValue any) (any, error) { |
| 160 | typeName, _ := gregex.ReplaceString(`\(.+\)`, "", fieldType) |
| 161 | typeName = strings.ToLower(typeName) |
| 162 | |
| 163 | // Basic types are mostly handled by Core layer; handle array types and special-case bytea here. |
| 164 | switch typeName { |
| 165 | |
| 166 | // []byte |
| 167 | case "bytea": |
| 168 | if v, ok := fieldValue.([]byte); ok { |
| 169 | return v, nil |
| 170 | } |
| 171 | return fieldValue, nil |
| 172 | |
| 173 | // []int32 |
| 174 | case "_int2", "_int4": |
| 175 | var result pq.Int32Array |
| 176 | if err := result.Scan(fieldValue); err != nil { |
| 177 | return nil, err |
| 178 | } |
| 179 | return []int32(result), nil |
| 180 | |
| 181 | // []int64 |
| 182 | case "_int8": |
| 183 | var result pq.Int64Array |
| 184 | if err := result.Scan(fieldValue); err != nil { |
| 185 | return nil, err |
| 186 | } |
| 187 | return []int64(result), nil |
| 188 | |
| 189 | // []float32 |
| 190 | case "_float4": |
| 191 | var result pq.Float32Array |
| 192 | if err := result.Scan(fieldValue); err != nil { |
| 193 | return nil, err |
| 194 | } |
| 195 | return []float32(result), nil |
| 196 | |
| 197 | // []float64 |
| 198 | case "_float8": |
| 199 | var result pq.Float64Array |
| 200 | if err := result.Scan(fieldValue); err != nil { |
| 201 | return nil, err |
| 202 | } |
| 203 | return []float64(result), nil |
| 204 | |
| 205 | // []bool |
| 206 | case "_bool": |
| 207 | var result pq.BoolArray |
| 208 | if err := result.Scan(fieldValue); err != nil { |
| 209 | return nil, err |
| 210 | } |
| 211 | return []bool(result), nil |
| 212 | |
| 213 | // []string |
| 214 | case "_varchar", "_text", "_char", "_bpchar": |
| 215 | var result pq.StringArray |
| 216 | if err := result.Scan(fieldValue); err != nil { |
nothing calls this directly
no test coverage detected