(ctx *sql.Context, s sql.Schema, row sql.Row, formatCodes []int16)
| 784 | } |
| 785 | |
| 786 | func rowToBytes(ctx *sql.Context, s sql.Schema, row sql.Row, formatCodes []int16) ([][]byte, error) { |
| 787 | if len(row) == 0 { |
| 788 | return nil, nil |
| 789 | } |
| 790 | if len(s) == 0 { |
| 791 | // should not happen |
| 792 | return nil, errors.Errorf("received empty schema") |
| 793 | } |
| 794 | formatCodes, err := extendFormatCodes(len(row), formatCodes) |
| 795 | if err != nil { |
| 796 | return nil, err |
| 797 | } |
| 798 | o := make([][]byte, len(row)) |
| 799 | for i, v := range row { |
| 800 | if v == nil { |
| 801 | o[i] = nil |
| 802 | } else if formatCodes[i] == 1 { |
| 803 | switch d := s[i].Type.(type) { |
| 804 | case *pgtypes.DoltgresType: |
| 805 | o[i], err = d.CallSend(ctx, v) |
| 806 | if err != nil { |
| 807 | return nil, err |
| 808 | } |
| 809 | default: |
| 810 | cast := pgexprs.NewGMSCast(expression.NewLiteral(v, d)) |
| 811 | v, err = cast.Eval(ctx, nil) |
| 812 | if err != nil { |
| 813 | return nil, err |
| 814 | } |
| 815 | o[i], err = cast.DoltgresType(ctx).CallSend(ctx, v) |
| 816 | if err != nil { |
| 817 | return nil, err |
| 818 | } |
| 819 | } |
| 820 | } else { |
| 821 | val, err := s[i].Type.SQL(ctx, []byte{}, v) // We use []byte{} as there's a distinction between nil and empty |
| 822 | if err != nil { |
| 823 | return nil, err |
| 824 | } |
| 825 | o[i] = val.ToBytes() |
| 826 | } |
| 827 | } |
| 828 | return o, nil |
| 829 | } |
no test coverage detected