From 12abdbcd1eb066bc21f1226ded7d7ca7641ff2fb Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Tue, 2 Jun 2020 15:06:35 +0200 Subject: [PATCH] Fix uint64 encoding for JSON export All IDs (uint64) should be encoded as string --- compose/encoder/record.go | 9 ++++++--- compose/encoder/record_test.go | 8 ++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/compose/encoder/record.go b/compose/encoder/record.go index 23330cf86..1c58e61c7 100644 --- a/compose/encoder/record.go +++ b/compose/encoder/record.go @@ -109,11 +109,14 @@ func (enc structuredEncoder) Record(r *types.Record) (err error) { for _, f := range enc.ff { switch f.name { case "recordID", "ID": - out[f.name] = r.ID + // encode all numbers as string (to prevent overflow of uint64 values) + out[f.name] = fmtUint64(r.ID) case "moduleID": - out[f.name] = r.ModuleID + // encode all numbers as string (to prevent overflow of uint64 values) + out[f.name] = fmtUint64(r.ModuleID) case "namespaceID": - out[f.name] = r.NamespaceID + // encode all numbers as string (to prevent overflow of uint64 values) + out[f.name] = fmtUint64(r.NamespaceID) case "ownedBy": out[f.name], err = fmtSysUser(r.OwnedBy, enc.u) if err != nil { diff --git a/compose/encoder/record_test.go b/compose/encoder/record_test.go index 9463800e1..e2ff656bd 100644 --- a/compose/encoder/record_test.go +++ b/compose/encoder/record_test.go @@ -56,8 +56,8 @@ func Test_RecordEncoding(t *testing.T) { `12345,12345,2017-09-09T17:00:00Z,,,,` + "\n" + `54321,12345,1970-01-01T03:25:45Z,,,bar,1` + "\n", - structResult: `{"createdAt":"2017-09-09T17:00:00Z","deletedAt":null,"ownedBy":12345,"recordID":12345}` + "\n" + - `{"createdAt":"1970-01-01T03:25:45Z","deletedAt":null,"fff":["1","2"],"foo":"bar","ownedBy":12345,"recordID":54321}` + "\n", + structResult: `{"createdAt":"2017-09-09T17:00:00Z","deletedAt":null,"ownedBy":"12345","recordID":"12345"}` + "\n" + + `{"createdAt":"1970-01-01T03:25:45Z","deletedAt":null,"fff":["1","2"],"foo":"bar","ownedBy":"12345","recordID":"54321"}` + "\n", }, // TODO: Add test cases. } @@ -67,7 +67,7 @@ func Test_RecordEncoding(t *testing.T) { buf := bytes.NewBuffer([]byte{}) csvWriter := csv.NewWriter(buf) - fenc := NewFlatWriter(csvWriter, true, tt.ff...) + fenc := NewFlatWriter(csvWriter, true, nil, tt.ff...) for _, r := range tt.rr { if err := fenc.Record(r); err != nil { t.Errorf("unexpected error = %v,", err) @@ -86,7 +86,7 @@ func Test_RecordEncoding(t *testing.T) { buf := bytes.NewBuffer([]byte{}) jsonEnc := json.NewEncoder(buf) - senc := NewStructuredEncoder(jsonEnc, tt.ff...) + senc := NewStructuredEncoder(jsonEnc, nil, tt.ff...) for _, r := range tt.rr { if err := senc.Record(r); err != nil { t.Errorf("unexpected error = %v,", err)