func convertNvLob(idx int, f *p.ParameterField, v interface{}) (driver.Value, error) {

	if v == nil {
		return v, nil
	}

	switch v := v.(type) {
	case Lob:
		if v.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	case *Lob:
		if v.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	case NullLob:
		if !v.Valid {
			return nil, nil
		}
		if v.Lob.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.Lob.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	case *NullLob:
		if !v.Valid {
			return nil, nil
		}
		if v.Lob.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.Lob.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	}

	rv := reflect.ValueOf(v)

	switch rv.Kind() {

	case reflect.Ptr:
		// indirect pointers
		if rv.IsNil() {
			return nil, nil
		}
		return convertNvLob(idx, f, rv.Elem().Interface())
	}

	return nil, fmt.Errorf("unsupported lob conversion type error %[1]T %[1]v", v)
}
func convertNvLob(idx int, f *p.ParameterField, v interface{}) (driver.Value, error) {

	if v == nil {
		return v, nil
	}

	switch v := v.(type) {
	case Lob:
		if v.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	case *Lob:
		if v.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	case NullLob:
		if !v.Valid {
			return nil, nil
		}
		if v.Lob.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.Lob.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	case *NullLob:
		if !v.Valid {
			return nil, nil
		}
		if v.Lob.rd == nil {
			return nil, fmt.Errorf("lob error: initial reader %[1]T %[1]v", v)
		}
		f.SetLobReader(v.Lob.rd)
		return fmt.Sprintf("<lob %d", idx), nil
	}

	rv := reflect.ValueOf(v)

	switch rv.Kind() {

	case reflect.Ptr:
		
		if rv.IsNil() {
			return nil, nil
		}
		return convertNvLob(idx, f, rv.Elem().Interface())
	}

	return nil, fmt.Errorf("unsupported lob conversion type error %[1]T %[1]v", v)
}
func convertNvLob ( idx int , f * p . ParameterField , v interface { } ) ( driver . Value , error ) { if v == nil { return v , nil } switch v := v . ( type ) { case Lob : if v . rd == nil { return nil , fmt . Errorf ( " " , v ) } f . SetLobReader ( v . rd ) return fmt . Sprintf ( " " , idx ) , nil case * Lob : if v . rd == nil { return nil , fmt . Errorf ( " " , v ) } f . SetLobReader ( v . rd ) return fmt . Sprintf ( " " , idx ) , nil case NullLob : if ! v . Valid { return nil , nil } if v . Lob . rd == nil { return nil , fmt . Errorf ( " " , v ) } f . SetLobReader ( v . Lob . rd ) return fmt . Sprintf ( " " , idx ) , nil case * NullLob : if ! v . Valid { return nil , nil } if v . Lob . rd == nil { return nil , fmt . Errorf ( " " , v ) } f . SetLobReader ( v . Lob . rd ) return fmt . Sprintf ( " " , idx ) , nil } rv := reflect . ValueOf ( v ) switch rv . Kind ( ) { case reflect . Ptr : // indirect pointers if rv . IsNil ( ) { return nil , nil } return convertNvLob ( idx , f , rv . Elem ( ) . Interface ( ) ) } return nil , fmt . Errorf ( " " , v ) }
// Lob
Lob