From e7f8a6c63ea409d541a4c5027a574fef3806a7a6 Mon Sep 17 00:00:00 2001 From: "jianchao.ma" Date: Tue, 23 Apr 2024 08:41:25 +0000 Subject: [PATCH] feat: quaisi identifier check value type is float 64 --- internal/infra/source.go | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/internal/infra/source.go b/internal/infra/source.go index 8b016ee..e0e71b3 100644 --- a/internal/infra/source.go +++ b/internal/infra/source.go @@ -19,7 +19,9 @@ package infra import ( "errors" + "fmt" "io" + "strconv" "github.com/cgi-fr/jsonline/pkg/jsonline" "github.com/cgi-fr/sigo/pkg/sigo" @@ -35,14 +37,36 @@ type JSONLineRecord struct { sensitives *[]string } -func (jlr JSONLineRecord) QuasiIdentifer() []float64 { +func (jlr JSONLineRecord) QuasiIdentifer() ([]float64, error) { result := []float64{} for _, key := range *jlr.quasiIdentifers { - result = append(result, (*jlr.row).GetFloat64(key)) + value, _ := (*jlr.row).Get(key) + if value == nil { + //nolint: goerr113 + err := errors.New("null value in dataset") + return []float64{}, err + } + + switch v := value.(type) { + case float64: + result = append(result, v) + case int: + result = append(result, float64(v)) + case string: + floatValue, err := strconv.ParseFloat(v, 64) + if err != nil { + return []float64{}, err + } + result = append(result, floatValue) + default: + err := fmt.Errorf("unsupported type: %T", v) + return []float64{}, err + } + } - return result + return result, nil } func (jlr JSONLineRecord) Sensitives() []interface{} {