From dfb930a70d1972153d2cec1d76ffbdb661ed63e5 Mon Sep 17 00:00:00 2001 From: Mark Hildreth Date: Thu, 10 Oct 2024 11:48:44 -0400 Subject: [PATCH 1/4] Added failing test case --- main_test.go | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/main_test.go b/main_test.go index 60a388f7..63191392 100644 --- a/main_test.go +++ b/main_test.go @@ -2,6 +2,9 @@ package main import ( "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) // GORM_REPO: https://github.com/go-gorm/gorm.git @@ -9,12 +12,26 @@ import ( // TEST_DRIVERS: sqlite, mysql, postgres, sqlserver func TestGORM(t *testing.T) { - user := User{Name: "jinzhu"} + user := User{Name: "jinzhu", Age: 30} DB.Create(&user) - var result User - if err := DB.First(&result, user.ID).Error; err != nil { - t.Errorf("Failed, got error: %v", err) + type result struct { + Name string + IsExample bool + Age int } + var results []result + err := DB.Table("users").Select("name, name = 'test example.com' as is_example", "age").Scan(&results).Error + require.NoError(t, err) + assert.False(t, results[0].IsExample) + assert.Equal(t, results[0].Age, 30) + + // This time, an ampersand character is used in the select string + err = DB.Table("users").Select("name, name = 'test@example.com' as is_example", "age").Scan(&results).Error + assert.False(t, results[0].IsExample) + // Fails, because the @ causes the Select statement to ignore + assert.Equal(t, results[0].Age, 30) + + require.NoError(t, err) } From 92104924a1d68ed6fe62d773725eda4a62f4c5a6 Mon Sep 17 00:00:00 2001 From: Mark Hildreth Date: Thu, 10 Oct 2024 11:51:59 -0400 Subject: [PATCH 2/4] More comments --- main_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main_test.go b/main_test.go index 63191392..ec5e5a4e 100644 --- a/main_test.go +++ b/main_test.go @@ -27,10 +27,10 @@ func TestGORM(t *testing.T) { assert.False(t, results[0].IsExample) assert.Equal(t, results[0].Age, 30) - // This time, an ampersand character is used in the select string + // This time, an at-sign character is used in the select string. This causes the "age" string to not be included + // as a column in select, thus resulting in age being a default zero. err = DB.Table("users").Select("name, name = 'test@example.com' as is_example", "age").Scan(&results).Error assert.False(t, results[0].IsExample) - // Fails, because the @ causes the Select statement to ignore assert.Equal(t, results[0].Age, 30) require.NoError(t, err) From 95806b192e31847cc7a6a126b2e0a4a41bab1668 Mon Sep 17 00:00:00 2001 From: Mark Hildreth Date: Thu, 10 Oct 2024 11:59:29 -0400 Subject: [PATCH 3/4] Fix test case --- main_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main_test.go b/main_test.go index ec5e5a4e..b6eb7610 100644 --- a/main_test.go +++ b/main_test.go @@ -22,14 +22,14 @@ func TestGORM(t *testing.T) { Age int } var results []result - err := DB.Table("users").Select("name, name = 'test example.com' as is_example", "age").Scan(&results).Error + err := DB.Table("users").Select("name", "name = 'test example.com' as is_example", "age").Scan(&results).Error require.NoError(t, err) assert.False(t, results[0].IsExample) assert.Equal(t, results[0].Age, 30) // This time, an at-sign character is used in the select string. This causes the "age" string to not be included // as a column in select, thus resulting in age being a default zero. - err = DB.Table("users").Select("name, name = 'test@example.com' as is_example", "age").Scan(&results).Error + err = DB.Table("users").Select("name", "name = 'test@example.com' as is_example", "age").Scan(&results).Error assert.False(t, results[0].IsExample) assert.Equal(t, results[0].Age, 30) From df003b5dcef099ddd2542adc52efa5a3b722dc00 Mon Sep 17 00:00:00 2001 From: Mark Hildreth Date: Thu, 10 Oct 2024 12:04:56 -0400 Subject: [PATCH 4/4] Fix failing case --- main_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main_test.go b/main_test.go index b6eb7610..18503e9e 100644 --- a/main_test.go +++ b/main_test.go @@ -22,14 +22,14 @@ func TestGORM(t *testing.T) { Age int } var results []result - err := DB.Table("users").Select("name", "name = 'test example.com' as is_example", "age").Scan(&results).Error + err := DB.Table("users").Select("name = 'test example.com' as is_example", "age").Scan(&results).Error require.NoError(t, err) assert.False(t, results[0].IsExample) assert.Equal(t, results[0].Age, 30) // This time, an at-sign character is used in the select string. This causes the "age" string to not be included // as a column in select, thus resulting in age being a default zero. - err = DB.Table("users").Select("name", "name = 'test@example.com' as is_example", "age").Scan(&results).Error + err = DB.Table("users").Select("name = 'test@example.com' as is_example", "age").Scan(&results).Error assert.False(t, results[0].IsExample) assert.Equal(t, results[0].Age, 30)