in arrow/avro/reader_types.go [92:249]
func (d *dataLoader) loadDatum(data any) error {
if d.list == nil && d.mapField == nil {
if d.mapValue != nil {
d.mapValue.appendFunc(data)
}
var NullParent *fieldPos
for _, f := range d.fields {
if f.parent == NullParent {
continue
}
if d.mapValue == nil {
err := f.appendFunc(f.getValue(data))
if err != nil {
if err == ErrNullStructData {
NullParent = f
continue
}
return err
}
} else {
switch dt := data.(type) {
case nil:
err := f.appendFunc(dt)
if err != nil {
if err == ErrNullStructData {
NullParent = f
continue
}
return err
}
case []any:
if len(d.children) < 1 {
for _, e := range dt {
err := f.appendFunc(e)
if err != nil {
if err == ErrNullStructData {
NullParent = f
continue
}
return err
}
}
} else {
for _, e := range dt {
d.children[0].loadDatum(e)
}
}
case map[string]any:
err := f.appendFunc(f.getValue(dt))
if err != nil {
if err == ErrNullStructData {
NullParent = f
continue
}
return err
}
}
}
}
for _, c := range d.children {
if c.list != nil {
c.loadDatum(c.list.getValue(data))
}
if c.mapField != nil {
switch dt := data.(type) {
case nil:
c.loadDatum(dt)
case map[string]any:
c.loadDatum(c.mapField.getValue(dt))
default:
c.loadDatum(c.mapField.getValue(data))
}
}
}
} else {
if d.list != nil {
switch dt := data.(type) {
case nil:
d.list.appendFunc(dt)
case []any:
d.list.appendFunc(dt)
for _, e := range dt {
if d.item != nil {
d.item.appendFunc(e)
}
var NullParent *fieldPos
for _, f := range d.fields {
if f.parent == NullParent {
continue
}
err := f.appendFunc(f.getValue(e))
if err != nil {
if err == ErrNullStructData {
NullParent = f
continue
}
return err
}
}
for _, c := range d.children {
if c.list != nil {
c.loadDatum(c.list.getValue(e))
}
if c.mapField != nil {
c.loadDatum(c.mapField.getValue(e))
}
}
}
case map[string]any:
d.list.appendFunc(dt["array"])
for _, e := range dt["array"].([]any) {
if d.item != nil {
d.item.appendFunc(e)
}
var NullParent *fieldPos
for _, f := range d.fields {
if f.parent == NullParent {
continue
}
err := f.appendFunc(f.getValue(e))
if err != nil {
if err == ErrNullStructData {
NullParent = f
continue
}
return err
}
}
for _, c := range d.children {
c.loadDatum(c.list.getValue(e))
}
}
default:
d.list.appendFunc(data)
d.item.appendFunc(dt)
}
}
if d.mapField != nil {
switch dt := data.(type) {
case nil:
d.mapField.appendFunc(dt)
case map[string]any:
d.mapField.appendFunc(dt)
for k, v := range dt {
d.mapKey.appendFunc(k)
if d.mapValue != nil {
d.mapValue.appendFunc(v)
} else {
d.children[0].loadDatum(v)
}
}
}
}
}
return nil
}