fix(platform): return empty history for missing tdengine tables

This commit is contained in:
lingniu
2026-07-04 08:33:41 +08:00
parent 7c81285be8
commit 6ce46f3011
2 changed files with 25 additions and 0 deletions

View File

@@ -514,6 +514,14 @@ func parseFloatString(value string) float64 {
return parsed
}
func isTDengineTableNotExist(err error) bool {
if err == nil {
return false
}
message := strings.ToLower(err.Error())
return strings.Contains(message, "table does not exist") || strings.Contains(message, "fail to get table info")
}
func (s *ProductionStore) HistoryLocations(ctx context.Context, query url.Values) (Page[HistoryLocationRow], error) {
realtime, err := s.RealtimeLocations(ctx, query)
if err != nil {
@@ -550,11 +558,17 @@ func (s *ProductionStore) HistoryLocationsFromTDengine(ctx context.Context, quer
total := 0
if built.CountText != "" {
if err := s.tdengine.QueryRowContext(ctx, built.CountText, built.CountArgs...).Scan(&total); err != nil {
if isTDengineTableNotExist(err) {
return Page[HistoryLocationRow]{Items: []HistoryLocationRow{}, Total: 0, Limit: limit, Offset: offset}, nil
}
return Page[HistoryLocationRow]{}, err
}
}
rows, err := s.tdengine.QueryContext(ctx, built.Text, built.Args...)
if err != nil {
if isTDengineTableNotExist(err) {
return Page[HistoryLocationRow]{Items: []HistoryLocationRow{}, Total: 0, Limit: limit, Offset: offset}, nil
}
return Page[HistoryLocationRow]{}, err
}
defer rows.Close()

View File

@@ -1,6 +1,7 @@
package platform
import (
"errors"
"strings"
"testing"
)
@@ -24,6 +25,16 @@ func TestBuildVehicleServiceOverviewBatchSQLUsesFuzzyKeywordMatching(t *testing.
}
}
func TestTDengineTableNotExistErrorIsRecognized(t *testing.T) {
err := errors.New("[0x2603] Fail to get table info, error: Table does not exist")
if !isTDengineTableNotExist(err) {
t.Fatalf("TDengine table-not-exist error should be recognized: %v", err)
}
if isTDengineTableNotExist(errors.New("connection refused")) {
t.Fatalf("unrelated errors should not be treated as empty table results")
}
}
func TestVehicleServiceOverviewMatchesPartialKeyword(t *testing.T) {
overview := VehicleServiceOverview{
VIN: "LB9A32A24R0LS1426",