MCPcopy Create free account
hub / github.com/dolthub/doltgresql / rowToBytes

Function rowToBytes

server/doltgres_handler.go:786–829  ·  view source on GitHub ↗
(ctx *sql.Context, s sql.Schema, row sql.Row, formatCodes []int16)

Source from the content-addressed store, hash-verified

784}
785
786func 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}

Callers 2

resultForMax1RowIterFunction · 0.85
resultForDefaultIterMethod · 0.85

Calls 6

EvalMethod · 0.95
DoltgresTypeMethod · 0.95
extendFormatCodesFunction · 0.85
CallSendMethod · 0.80
SQLMethod · 0.80
ErrorfMethod · 0.65

Tested by

no test coverage detected