3
0

Fix uint64 encoding for JSON export

All IDs  (uint64) should be encoded as string
This commit is contained in:
Denis Arh 2020-06-02 15:06:35 +02:00
parent e6775aaa09
commit 12abdbcd1e
2 changed files with 10 additions and 7 deletions

View File

@ -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 {

View File

@ -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)