From ab95f49c96331aea87865fd3dfa86beb9fa8a397 Mon Sep 17 00:00:00 2001 From: nxshock Date: Fri, 9 Feb 2024 09:45:27 +0500 Subject: [PATCH 1/4] Implement money type as numeric field --- fieldtypes.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fieldtypes.go b/fieldtypes.go index c816c25..9822a73 100644 --- a/fieldtypes.go +++ b/fieldtypes.go @@ -41,7 +41,7 @@ func (ft FieldType) ParseValue(reader Reader, s string) (any, error) { return s, nil case Integer: return strconv.ParseInt(s, 10, 64) - case Float: + case Float, Money: return strconv.ParseFloat(strings.ReplaceAll(s, ",", "."), 64) case Date: if i, ok := reader.(CustomDateParser); ok { @@ -77,7 +77,7 @@ func (ft FieldType) SqlFieldType() string { case Float: return "float" case Money: - panic("do not implemented - see https://github.com/denisenkom/go-mssqldb/issues/460") // TODO: https://github.com/denisenkom/go-mssqldb/issues/460 + return "numeric(15, 2)" // TODO: https://github.com/denisenkom/go-mssqldb/issues/460 case Date: return "date" case Timestamp: From 81729ffcd07a971c1eb052850480ce022f69fb70 Mon Sep 17 00:00:00 2001 From: nxshock Date: Fri, 9 Feb 2024 09:46:09 +0500 Subject: [PATCH 2/4] Remove spaces before parsing float types --- fieldtypes.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fieldtypes.go b/fieldtypes.go index 9822a73..dbc237d 100644 --- a/fieldtypes.go +++ b/fieldtypes.go @@ -42,7 +42,9 @@ func (ft FieldType) ParseValue(reader Reader, s string) (any, error) { case Integer: return strconv.ParseInt(s, 10, 64) case Float, Money: - return strconv.ParseFloat(strings.ReplaceAll(s, ",", "."), 64) + s = strings.ReplaceAll(s, ",", ".") + s = strings.ReplaceAll(s, " ", "") + return strconv.ParseFloat(s, 64) case Date: if i, ok := reader.(CustomDateParser); ok { t, err := i.ParseDate(s) From 143ba6aae24c25b4905f2378bfdf8be53c45b6ab Mon Sep 17 00:00:00 2001 From: nxshock Date: Fri, 9 Feb 2024 09:49:22 +0500 Subject: [PATCH 3/4] Use money type in tests --- readercsv_test.go | 2 +- readerdbf_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/readercsv_test.go b/readercsv_test.go index f2f6607..649d73e 100644 --- a/readercsv_test.go +++ b/readercsv_test.go @@ -17,7 +17,7 @@ func TestCsvReaderBasic(t *testing.T) { encoding: "win1251", comma: rune(";"[0]), skipRows: 3, - fieldsTypes: "s ttffsssss", + fieldsTypes: "s ttmmsssss", dateFormat: "02.01.2006", timestampFormat: "02.01.2006 15:04:05", timezone: time.Local} diff --git a/readerdbf_test.go b/readerdbf_test.go index 18753c8..2c55940 100644 --- a/readerdbf_test.go +++ b/readerdbf_test.go @@ -14,7 +14,7 @@ func TestDbfReaderBasic(t *testing.T) { assert.NoError(t, err) options := &Options{ - fieldsTypes: "sssssstdffsss", + fieldsTypes: "sssssstdmmsss", timezone: time.Local, encoding: "cp866"} From 3e96fdbb353dbe6ba69b8f681a95d605e31da72b Mon Sep 17 00:00:00 2001 From: nxshock Date: Fri, 9 Feb 2024 09:50:02 +0500 Subject: [PATCH 4/4] Remove ineffectual assignments --- readercsv_test.go | 2 +- readerdbf_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/readercsv_test.go b/readercsv_test.go index 649d73e..b1c30b6 100644 --- a/readercsv_test.go +++ b/readercsv_test.go @@ -34,7 +34,7 @@ func TestCsvReaderBasic(t *testing.T) { t2 := time.Date(2023, 03, 20, 0, 0, 0, 0, time.Local) assert.Equal(t, []any{"307814009186", t1, t2, 499.00, 488.52, "522598******7141", "REZE64", "Покупка", "35068281112", "307817403283"}, row) - row, err = csvReader.GetRow(false) + _, err = csvReader.GetRow(false) assert.Equal(t, err, io.EOF) err = csvReader.Close() diff --git a/readerdbf_test.go b/readerdbf_test.go index 2c55940..3895f7a 100644 --- a/readerdbf_test.go +++ b/readerdbf_test.go @@ -30,7 +30,7 @@ func TestDbfReaderBasic(t *testing.T) { t2 := time.Date(2023, 02, 21, 0, 0, 0, 0, time.Local) assert.Equal(t, []any{"719089383780", "44", "8644", "570000009312", "STOLOVAYA TSPP", "844417", t1, t2, 1757.08, 1713.15, "536829XXXXXX9388", "UM1TS8", "D"}, row) - row, err = dbfReader.GetRow(false) + _, err = dbfReader.GetRow(false) assert.Equal(t, err, io.EOF) err = dbfReader.Close()