From 5e6e722609ef328ff4abb6cb1572065c01703282 Mon Sep 17 00:00:00 2001 From: Ayoub Aarrasse Date: Fri, 15 Aug 2025 10:50:36 +0100 Subject: [PATCH 1/4] Fixing test by ensuring scanner understand driver's types --- tests/query_test.go | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/tests/query_test.go b/tests/query_test.go index 7119e87..26ab194 100644 --- a/tests/query_test.go +++ b/tests/query_test.go @@ -1359,14 +1359,28 @@ type DoubleInt64 struct { data int64 } -func (t *DoubleInt64) Scan(val interface{}) error { - switch v := val.(type) { - case int64: - t.data = v * 2 +func (t *DoubleInt64) Scan(v any) error { + if v == nil { + t.data = 0 return nil + } + switch x := v.(type) { + case int64: + t.data = x * 2 + case float64: + t.data = int64(x) * 2 default: - return fmt.Errorf("DoubleInt64 cant not scan with:%v", v) + if s, ok := x.(fmt.Stringer); ok { // e.g., godror.Number + n, err := strconv.ParseInt(strings.TrimSpace(s.String()), 10, 64) + if err != nil { + return fmt.Errorf("DoubleInt64: %w", err) + } + t.data = n * 2 + return nil + } + return fmt.Errorf("DoubleInt64: cannot scan %T", v) } + return nil } // https://github.com/go-gorm/gorm/issues/5091 From ffdb0c0eb94b85b3a3f7bedd5fab332ca070e58c Mon Sep 17 00:00:00 2001 From: Ayoub Aarrasse Date: Fri, 15 Aug 2025 10:51:21 +0100 Subject: [PATCH 2/4] uncomment test --- tests/passed-tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/passed-tests.txt b/tests/passed-tests.txt index 8c9af2d..26ddb06 100644 --- a/tests/passed-tests.txt +++ b/tests/passed-tests.txt @@ -266,7 +266,7 @@ TestSubQueryWithHaving #TestScanNullValue TestQueryWithTableAndConditions TestQueryWithTableAndConditionsAndAllFields -#TestQueryScannerWithSingleColumn +TestQueryScannerWithSingleColumn #TestQueryResetNullValue TestQueryError TestQueryScanToArray From 91f23c780ce0b1f94b58e79e4538654b0e0cfb95 Mon Sep 17 00:00:00 2001 From: Ayoub Aarrasse Date: Fri, 15 Aug 2025 10:51:52 +0100 Subject: [PATCH 3/4] removing skip from test --- tests/query_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/query_test.go b/tests/query_test.go index 26ab194..e86e096 100644 --- a/tests/query_test.go +++ b/tests/query_test.go @@ -1385,7 +1385,6 @@ func (t *DoubleInt64) Scan(v any) error { // https://github.com/go-gorm/gorm/issues/5091 func TestQueryScannerWithSingleColumn(t *testing.T) { - t.Skip() user := User{Name: "scanner_raw_1", Age: 10} DB.Create(&user) From 6fbdd42d8c80c9cb5445e819a80e3b37c5354077 Mon Sep 17 00:00:00 2001 From: Ayoub Aarrasse Date: Fri, 15 Aug 2025 11:01:15 +0100 Subject: [PATCH 4/4] adding quotes --- tests/query_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/query_test.go b/tests/query_test.go index e86e096..e014131 100644 --- a/tests/query_test.go +++ b/tests/query_test.go @@ -1389,7 +1389,7 @@ func TestQueryScannerWithSingleColumn(t *testing.T) { DB.Create(&user) var result1 DoubleInt64 - if err := DB.Model(&User{}).Where("name LIKE ?", "scanner_raw_%").Limit(1).Pluck( + if err := DB.Model(&User{}).Where("\"name\" LIKE ?", "scanner_raw_%").Limit(1).Pluck( "age", &result1).Error; err != nil { t.Errorf("Failed, got error: %v", err) } @@ -1397,7 +1397,7 @@ func TestQueryScannerWithSingleColumn(t *testing.T) { tests.AssertEqual(t, result1.data, 20) var result2 DoubleInt64 - if err := DB.Model(&User{}).Where("name LIKE ?", "scanner_raw_%").Limit(1).Select( + if err := DB.Model(&User{}).Where("\"name\" LIKE ?", "scanner_raw_%").Limit(1).Select( "age").Scan(&result2).Error; err != nil { t.Errorf("Failed, got error: %v", err) }