| 254 | } |
| 255 | |
| 256 | func (c *MultirangeCodec) decodeText(m *Map, multirangeOID uint32, src []byte, multirange MultirangeSetter) error { |
| 257 | elements, err := parseUntypedTextMultirange(src) |
| 258 | if err != nil { |
| 259 | return err |
| 260 | } |
| 261 | |
| 262 | err = multirange.SetLen(len(elements)) |
| 263 | if err != nil { |
| 264 | return err |
| 265 | } |
| 266 | |
| 267 | if len(elements) == 0 { |
| 268 | return nil |
| 269 | } |
| 270 | |
| 271 | elementScanPlan := c.ElementType.Codec.PlanScan(m, c.ElementType.OID, TextFormatCode, multirange.ScanIndex(0)) |
| 272 | if elementScanPlan == nil { |
| 273 | elementScanPlan = m.PlanScan(c.ElementType.OID, TextFormatCode, multirange.ScanIndex(0)) |
| 274 | } |
| 275 | |
| 276 | for i, s := range elements { |
| 277 | elem := multirange.ScanIndex(i) |
| 278 | err = elementScanPlan.Scan([]byte(s), elem) |
| 279 | if err != nil { |
| 280 | return err |
| 281 | } |
| 282 | } |
| 283 | |
| 284 | return nil |
| 285 | } |
| 286 | |
| 287 | type scanPlanMultirangeCodec struct { |
| 288 | multirangeCodec *MultirangeCodec |