From c916120ea201ea45894ff04c62ab0906689b2ec7 Mon Sep 17 00:00:00 2001 From: lingniu Date: Fri, 3 Jul 2026 08:51:30 +0800 Subject: [PATCH] perf(go): skip empty parsed raw payloads --- go/vehicle-gateway/internal/history/writer.go | 9 +++++++- .../internal/history/writer_test.go | 21 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/go/vehicle-gateway/internal/history/writer.go b/go/vehicle-gateway/internal/history/writer.go index b768f81b..b5583111 100644 --- a/go/vehicle-gateway/internal/history/writer.go +++ b/go/vehicle-gateway/internal/history/writer.go @@ -72,7 +72,7 @@ func (w *Writer) AppendRawFrame(ctx context.Context, env envelope.FrameEnvelope) } rawHex, rawHexChunks := chunkPayload(env, "raw_hex", env.RawHex) rawText, rawTextChunks := chunkPayload(env, "raw_text", env.RawText) - parsedJSON, parsedChunks := chunkPayload(env, "parsed_json", jsonString(env.Parsed)) + parsedJSON, parsedChunks := chunkPayload(env, "parsed_json", parsedJSONString(env.Parsed)) _, err := w.exec.ExecContext(ctx, fmt.Sprintf(`INSERT INTO %s (ts, frame_id, event_id, message_id, event_time, received_at, raw_size_bytes, raw_hex, raw_text, parsed_json, parse_status, parse_error, source_endpoint) @@ -317,6 +317,13 @@ func jsonString(value any) string { return string(data) } +func parsedJSONString(value map[string]any) string { + if len(value) == 0 { + return "" + } + return jsonString(value) +} + func floatField(env envelope.FrameEnvelope, key string) (float64, bool) { if env.Fields == nil { return 0, false diff --git a/go/vehicle-gateway/internal/history/writer_test.go b/go/vehicle-gateway/internal/history/writer_test.go index 2f226907..f5caabfe 100644 --- a/go/vehicle-gateway/internal/history/writer_test.go +++ b/go/vehicle-gateway/internal/history/writer_test.go @@ -126,6 +126,27 @@ func TestWriterChunksOversizedParsedJSON(t *testing.T) { } } +func TestWriterLeavesParsedJSONEmptyWhenNoParsedPayload(t *testing.T) { + exec := &recordingExec{} + writer := NewWriter(exec) + env := sampleEnvelope() + env.Parsed = nil + env.ParseStatus = envelope.ParseBadFrame + env.ParseError = "invalid frame checksum" + + if err := writer.AppendRawFrame(context.Background(), env); err != nil { + t.Fatalf("AppendRawFrame() error = %v", err) + } + + rawInsert := findSQL(exec.calls, "INSERT INTO raw_") + if strings.Contains(rawInsert, "'{}'") || strings.Contains(rawInsert, "'null'") { + t.Fatalf("raw insert should not store empty parsed_json payload: %s", rawInsert) + } + if !strings.Contains(rawInsert, "'invalid frame checksum'") { + t.Fatalf("raw insert should keep parse error: %s", rawInsert) + } +} + func TestWriterSkipsSparseDerivedRows(t *testing.T) { exec := &recordingExec{} writer := NewWriter(exec)