From dba70dbfa63b806b32fc0e27c43f8f7953690336 Mon Sep 17 00:00:00 2001 From: 0marq <45561584+0marq@users.noreply.github.com> Date: Tue, 19 Mar 2024 03:45:10 +0100 Subject: [PATCH 1/9] Fix same type comparing (#261) * Fix same type comparing `fieldColumnType.DatabaseTypeName()` returns non capitalized string, while `fileType.SQL` returns capitalized string. This commit aims to fix this and avoid detecting a type change when the type did not change. * Use strings.EqualFold to compare types --- migrator.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrator.go b/migrator.go index 6174e1c..4044e58 100644 --- a/migrator.go +++ b/migrator.go @@ -312,7 +312,7 @@ func (m Migrator) AlterColumn(value interface{}, field string) error { fileType := clause.Expr{SQL: m.DataTypeOf(field)} // check for typeName and SQL name isSameType := true - if fieldColumnType.DatabaseTypeName() != fileType.SQL { + if strings.EqualFold(fieldColumnType.DatabaseTypeName(), fileType.SQL) { isSameType = false // if different, also check for aliases aliases := m.GetTypeAliases(fieldColumnType.DatabaseTypeName()) From 01a761a24e029351d31044fb24e08af7c0ca7c9f Mon Sep 17 00:00:00 2001 From: 0marq <45561584+0marq@users.noreply.github.com> Date: Tue, 19 Mar 2024 10:44:56 +0100 Subject: [PATCH 2/9] Fix same type comparing --- migrator.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrator.go b/migrator.go index 4044e58..487404f 100644 --- a/migrator.go +++ b/migrator.go @@ -312,7 +312,7 @@ func (m Migrator) AlterColumn(value interface{}, field string) error { fileType := clause.Expr{SQL: m.DataTypeOf(field)} // check for typeName and SQL name isSameType := true - if strings.EqualFold(fieldColumnType.DatabaseTypeName(), fileType.SQL) { + if !strings.EqualFold(fieldColumnType.DatabaseTypeName(), fileType.SQL) { isSameType = false // if different, also check for aliases aliases := m.GetTypeAliases(fieldColumnType.DatabaseTypeName()) From be95574c1e896efae0a3df15fda67f56bce0ee25 Mon Sep 17 00:00:00 2001 From: James Styman <35004248+Namyts@users.noreply.github.com> Date: Tue, 26 Mar 2024 03:29:27 +0000 Subject: [PATCH 3/9] updated modules to fix pgx vuln (#267) --- go.mod | 10 ++++++---- go.sum | 20 ++++++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index c11e396..f8a4ac1 100644 --- a/go.mod +++ b/go.mod @@ -3,17 +3,19 @@ module gorm.io/driver/postgres go 1.18 require ( - github.com/jackc/pgx/v5 v5.4.3 - gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde + github.com/jackc/pgx/v5 v5.5.5 + gorm.io/gorm v1.25.8 ) require ( github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect + github.com/jackc/puddle/v2 v2.2.1 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/crypto v0.17.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/text v0.14.0 // indirect ) retract v1.5.5 // Published accidentally. diff --git a/go.sum b/go.sum index c6501f4..39550c2 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,10 @@ github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsI github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY= -github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= +github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw= +github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A= +github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= +github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= @@ -16,12 +18,14 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde h1:9DShaph9qhkIYw7QF91I/ynrr4cOO2PZra2PFD7Mfeg= -gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= +gorm.io/gorm v1.25.8 h1:WAGEZ/aEcznN4D03laj8DKnehe1e9gYQAjW8xyPRdeo= +gorm.io/gorm v1.25.8/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= From c010e95cee39e2cd99a0893f8c8e4a76571f7cf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C4=B1l=20S=CC=A7enay?= Date: Thu, 25 Apr 2024 21:29:58 +0300 Subject: [PATCH 4/9] Add new error for "Violation Check Constraint" --- error_translator.go | 1 + 1 file changed, 1 insertion(+) diff --git a/error_translator.go b/error_translator.go index 9c0ef25..f57db07 100644 --- a/error_translator.go +++ b/error_translator.go @@ -12,6 +12,7 @@ var errCodes = map[string]error{ "23505": gorm.ErrDuplicatedKey, "23503": gorm.ErrForeignKeyViolated, "42703": gorm.ErrInvalidField, + "23514": gorm.ErrCheckConstraintViolated, } type ErrMessage struct { From 60b5532450dff9655bfc4ebdb36afc83591e5c02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C4=B1l=20S=CC=A7enay?= Date: Fri, 26 Apr 2024 13:47:51 +0300 Subject: [PATCH 5/9] Upgrade gorm version --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index f8a4ac1..53b6d86 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/jackc/pgx/v5 v5.5.5 - gorm.io/gorm v1.25.8 + gorm.io/gorm v1.25.10 ) require ( diff --git a/go.sum b/go.sum index 39550c2..a65ad5b 100644 --- a/go.sum +++ b/go.sum @@ -27,5 +27,5 @@ golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gorm.io/gorm v1.25.8 h1:WAGEZ/aEcznN4D03laj8DKnehe1e9gYQAjW8xyPRdeo= -gorm.io/gorm v1.25.8/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= +gorm.io/gorm v1.25.10 h1:dQpO+33KalOA+aFYGlK+EfxcI5MbO7EP2yYygwh9h+s= +gorm.io/gorm v1.25.10/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= From 29f4c15630f6e8fbf60a6ad26d9ee4b0c1990ab6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C4=B1l=20S=CC=A7enay?= Date: Fri, 26 Apr 2024 13:54:08 +0300 Subject: [PATCH 6/9] Add test --- error_translator_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/error_translator_test.go b/error_translator_test.go index 612cef1..27769ec 100644 --- a/error_translator_test.go +++ b/error_translator_test.go @@ -36,6 +36,11 @@ func TestDialector_Translate(t *testing.T) { args: args{err: &pgconn.PgError{Code: "42703"}}, want: gorm.ErrInvalidField, }, + { + name: "it should return gorm.ErrCheckConstraintViolated error if the status code is 23514", + args: args{err: &pgconn.PgError{Code: "23514"}}, + want: gorm.ErrCheckConstraintViolated, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { From d1db25183a8996705fa6c5b1bfe9fda75cd5ecde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C4=B1l=20S=CC=A7enay?= Date: Wed, 8 May 2024 13:25:14 +0300 Subject: [PATCH 7/9] Add comment for postgresql docs reference --- error_translator.go | 1 + 1 file changed, 1 insertion(+) diff --git a/error_translator.go b/error_translator.go index f57db07..5f81350 100644 --- a/error_translator.go +++ b/error_translator.go @@ -8,6 +8,7 @@ import ( "github.com/jackc/pgx/v5/pgconn" ) +// The error codes to map PostgreSQL errors to gorm errors, here is the PostgreSQL error codes reference https://www.postgresql.org/docs/current/errcodes-appendix.html. var errCodes = map[string]error{ "23505": gorm.ErrDuplicatedKey, "23503": gorm.ErrForeignKeyViolated, From 27eff96d0a7bd7894385b4aa3ca4198dac2d4fd7 Mon Sep 17 00:00:00 2001 From: Lasse Hyldahl Jensen Date: Wed, 12 Jun 2024 05:57:20 +0200 Subject: [PATCH 8/9] Add missing postgres type aliases (#270) --- migrator.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/migrator.go b/migrator.go index 487404f..df18db1 100644 --- a/migrator.go +++ b/migrator.go @@ -38,6 +38,7 @@ WHERE ` var typeAliasMap = map[string][]string{ + "int": {"integer"}, "int2": {"smallint"}, "int4": {"integer"}, "int8": {"bigint"}, @@ -50,6 +51,15 @@ var typeAliasMap = map[string][]string{ "timestamp with time zone": {"timestamptz"}, "bool": {"boolean"}, "boolean": {"bool"}, + "serial2": {"smallserial"}, + "serial4": {"serial"}, + "serial8": {"bigserial"}, + "varbit": {"bit varying"}, + "char": {"character"}, + "varchar": {"character varying"}, + "float4": {"real"}, + "float8": {"double precision"}, + "timetz": {"time with time zone"}, } type Migrator struct { From ff0ad0cff0f592f9094b241e4d35eaabd1bee515 Mon Sep 17 00:00:00 2001 From: Yishuai Li Date: Wed, 12 Jun 2024 15:08:11 +0800 Subject: [PATCH 9/9] Requires Go 1.19 (#280) --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 53b6d86..20dc8c4 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module gorm.io/driver/postgres -go 1.18 +go 1.19 require ( github.com/jackc/pgx/v5 v5.5.5