From 361a77129e6e76cd71a80eb603dcffda499a4878 Mon Sep 17 00:00:00 2001 From: Roman Sharkov Date: Sun, 27 Jul 2025 12:13:43 +0200 Subject: [PATCH 1/3] refactor: Remove uber atomic in favor of stdlib --- database/cassandra/cassandra.go | 7 +++---- database/clickhouse/clickhouse.go | 6 +++--- database/cockroachdb/cockroachdb.go | 3 ++- database/firebird/firebird.go | 7 ++++--- database/mongodb/mongodb.go | 3 ++- database/mysql/mysql.go | 2 +- database/pgx/pgx.go | 2 +- database/pgx/v5/pgx.go | 2 +- database/postgres/postgres.go | 2 +- database/ql/ql.go | 7 ++++--- database/redshift/redshift.go | 6 +++--- database/rqlite/rqlite.go | 6 +++--- database/snowflake/snowflake.go | 6 +++--- database/spanner/spanner.go | 14 ++++---------- database/sqlcipher/sqlcipher.go | 6 +++--- database/sqlite/sqlite.go | 6 +++--- database/sqlite3/sqlite3.go | 6 +++--- database/sqlserver/sqlserver.go | 2 +- database/stub/stub.go | 6 +++--- database/util.go | 4 ++-- database/util_test.go | 16 +++++++++------- database/yugabytedb/yugabytedb.go | 3 ++- go.mod | 1 - go.sum | 2 -- 24 files changed, 61 insertions(+), 64 deletions(-) diff --git a/database/cassandra/cassandra.go b/database/cassandra/cassandra.go index 74eecc98e..de25313e0 100644 --- a/database/cassandra/cassandra.go +++ b/database/cassandra/cassandra.go @@ -7,10 +7,9 @@ import ( nurl "net/url" "strconv" "strings" + "sync/atomic" "time" - "go.uber.org/atomic" - "github.com/gocql/gocql" "github.com/golang-migrate/migrate/v4/database" "github.com/golang-migrate/migrate/v4/database/multistmt" @@ -199,14 +198,14 @@ func (c *Cassandra) Close() error { } func (c *Cassandra) Lock() error { - if !c.isLocked.CAS(false, true) { + if !c.isLocked.CompareAndSwap(false, true) { return database.ErrLocked } return nil } func (c *Cassandra) Unlock() error { - if !c.isLocked.CAS(true, false) { + if !c.isLocked.CompareAndSwap(true, false) { return database.ErrNotLocked } return nil diff --git a/database/clickhouse/clickhouse.go b/database/clickhouse/clickhouse.go index d2b65c0ce..0df84d5c0 100644 --- a/database/clickhouse/clickhouse.go +++ b/database/clickhouse/clickhouse.go @@ -9,7 +9,7 @@ import ( "strings" "time" - "go.uber.org/atomic" + "sync/atomic" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" @@ -291,14 +291,14 @@ func (ch *ClickHouse) Drop() (err error) { } func (ch *ClickHouse) Lock() error { - if !ch.isLocked.CAS(false, true) { + if !ch.isLocked.CompareAndSwap(false, true) { return database.ErrLocked } return nil } func (ch *ClickHouse) Unlock() error { - if !ch.isLocked.CAS(true, false) { + if !ch.isLocked.CompareAndSwap(true, false) { return database.ErrNotLocked } diff --git a/database/cockroachdb/cockroachdb.go b/database/cockroachdb/cockroachdb.go index 699b3facd..e2c29cb87 100644 --- a/database/cockroachdb/cockroachdb.go +++ b/database/cockroachdb/cockroachdb.go @@ -9,12 +9,13 @@ import ( "regexp" "strconv" + "sync/atomic" + "github.com/cockroachdb/cockroach-go/v2/crdb" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" "github.com/hashicorp/go-multierror" "github.com/lib/pq" - "go.uber.org/atomic" ) func init() { diff --git a/database/firebird/firebird.go b/database/firebird/firebird.go index e15ea96b8..31d82dba3 100644 --- a/database/firebird/firebird.go +++ b/database/firebird/firebird.go @@ -9,11 +9,12 @@ import ( "io" nurl "net/url" + "sync/atomic" + "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" "github.com/hashicorp/go-multierror" _ "github.com/nakagami/firebirdsql" - "go.uber.org/atomic" ) func init() { @@ -107,14 +108,14 @@ func (f *Firebird) Close() error { } func (f *Firebird) Lock() error { - if !f.isLocked.CAS(false, true) { + if !f.isLocked.CompareAndSwap(false, true) { return database.ErrLocked } return nil } func (f *Firebird) Unlock() error { - if !f.isLocked.CAS(true, false) { + if !f.isLocked.CompareAndSwap(true, false) { return database.ErrNotLocked } return nil diff --git a/database/mongodb/mongodb.go b/database/mongodb/mongodb.go index 3a9a6be9e..181cc2f36 100644 --- a/database/mongodb/mongodb.go +++ b/database/mongodb/mongodb.go @@ -9,6 +9,8 @@ import ( "strconv" "time" + "sync/atomic" + "github.com/cenkalti/backoff/v4" "github.com/golang-migrate/migrate/v4/database" "github.com/hashicorp/go-multierror" @@ -16,7 +18,6 @@ import ( "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/x/mongo/driver/connstring" - "go.uber.org/atomic" ) func init() { diff --git a/database/mysql/mysql.go b/database/mysql/mysql.go index 711ba5187..ab309cdff 100644 --- a/database/mysql/mysql.go +++ b/database/mysql/mysql.go @@ -15,7 +15,7 @@ import ( "strings" "time" - "go.uber.org/atomic" + "sync/atomic" "github.com/go-sql-driver/mysql" "github.com/golang-migrate/migrate/v4/database" diff --git a/database/pgx/pgx.go b/database/pgx/pgx.go index efe8bea80..e7a593ccc 100644 --- a/database/pgx/pgx.go +++ b/database/pgx/pgx.go @@ -13,7 +13,7 @@ import ( "strings" "time" - "go.uber.org/atomic" + "sync/atomic" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" diff --git a/database/pgx/v5/pgx.go b/database/pgx/v5/pgx.go index 303174495..741a67490 100644 --- a/database/pgx/v5/pgx.go +++ b/database/pgx/v5/pgx.go @@ -13,7 +13,7 @@ import ( "strings" "time" - "go.uber.org/atomic" + "sync/atomic" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" diff --git a/database/postgres/postgres.go b/database/postgres/postgres.go index 5e4519115..901a006c2 100644 --- a/database/postgres/postgres.go +++ b/database/postgres/postgres.go @@ -13,7 +13,7 @@ import ( "strings" "time" - "go.uber.org/atomic" + "sync/atomic" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" diff --git a/database/ql/ql.go b/database/ql/ql.go index 37c062455..b4c30df25 100644 --- a/database/ql/ql.go +++ b/database/ql/ql.go @@ -7,8 +7,9 @@ import ( nurl "net/url" "strings" + "sync/atomic" + "github.com/hashicorp/go-multierror" - "go.uber.org/atomic" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" @@ -166,13 +167,13 @@ func (m *Ql) Drop() (err error) { return nil } func (m *Ql) Lock() error { - if !m.isLocked.CAS(false, true) { + if !m.isLocked.CompareAndSwap(false, true) { return database.ErrLocked } return nil } func (m *Ql) Unlock() error { - if !m.isLocked.CAS(true, false) { + if !m.isLocked.CompareAndSwap(true, false) { return database.ErrNotLocked } return nil diff --git a/database/redshift/redshift.go b/database/redshift/redshift.go index 7687b9d9a..16fe2b236 100644 --- a/database/redshift/redshift.go +++ b/database/redshift/redshift.go @@ -11,7 +11,7 @@ import ( "strconv" "strings" - "go.uber.org/atomic" + "sync/atomic" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" @@ -127,14 +127,14 @@ func (p *Redshift) Close() error { // Redshift does not support advisory lock functions: https://docs.aws.amazon.com/redshift/latest/dg/c_unsupported-postgresql-functions.html func (p *Redshift) Lock() error { - if !p.isLocked.CAS(false, true) { + if !p.isLocked.CompareAndSwap(false, true) { return database.ErrLocked } return nil } func (p *Redshift) Unlock() error { - if !p.isLocked.CAS(true, false) { + if !p.isLocked.CompareAndSwap(true, false) { return database.ErrNotLocked } return nil diff --git a/database/rqlite/rqlite.go b/database/rqlite/rqlite.go index af0d53007..7da79839d 100644 --- a/database/rqlite/rqlite.go +++ b/database/rqlite/rqlite.go @@ -7,7 +7,7 @@ import ( "strconv" "strings" - "go.uber.org/atomic" + "sync/atomic" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" @@ -143,7 +143,7 @@ func (r *Rqlite) Close() error { // If the implementation can't provide this functionality, return nil. // Return database.ErrLocked if database is already locked. func (r *Rqlite) Lock() error { - if !r.isLocked.CAS(false, true) { + if !r.isLocked.CompareAndSwap(false, true) { return database.ErrLocked } return nil @@ -152,7 +152,7 @@ func (r *Rqlite) Lock() error { // Unlock should release the lock. Migrate will call this function after // all migrations have been run. func (r *Rqlite) Unlock() error { - if !r.isLocked.CAS(true, false) { + if !r.isLocked.CompareAndSwap(true, false) { return database.ErrNotLocked } return nil diff --git a/database/snowflake/snowflake.go b/database/snowflake/snowflake.go index 46ce30200..45f3e0db7 100644 --- a/database/snowflake/snowflake.go +++ b/database/snowflake/snowflake.go @@ -9,7 +9,7 @@ import ( "strconv" "strings" - "go.uber.org/atomic" + "sync/atomic" "github.com/golang-migrate/migrate/v4/database" "github.com/hashicorp/go-multierror" @@ -159,14 +159,14 @@ func (p *Snowflake) Close() error { } func (p *Snowflake) Lock() error { - if !p.isLocked.CAS(false, true) { + if !p.isLocked.CompareAndSwap(false, true) { return database.ErrLocked } return nil } func (p *Snowflake) Unlock() error { - if !p.isLocked.CAS(true, false) { + if !p.isLocked.CompareAndSwap(true, false) { return database.ErrNotLocked } return nil diff --git a/database/spanner/spanner.go b/database/spanner/spanner.go index b733302d5..506404a1b 100644 --- a/database/spanner/spanner.go +++ b/database/spanner/spanner.go @@ -10,6 +10,7 @@ import ( "regexp" "strconv" "strings" + "sync/atomic" "cloud.google.com/go/spanner" sdb "cloud.google.com/go/spanner/admin/database/apiv1" @@ -20,7 +21,6 @@ import ( adminpb "cloud.google.com/go/spanner/admin/database/apiv1/databasepb" "github.com/hashicorp/go-multierror" - uatomic "go.uber.org/atomic" "google.golang.org/api/iterator" ) @@ -32,11 +32,6 @@ func init() { // DefaultMigrationsTable is used if no custom table is specified const DefaultMigrationsTable = "SchemaMigrations" -const ( - unlockedVal = 0 - lockedVal = 1 -) - // Driver errors var ( ErrNilConfig = errors.New("no config") @@ -64,7 +59,7 @@ type Spanner struct { config *Config - lock *uatomic.Uint32 + lock *atomic.Bool } type DB struct { @@ -96,7 +91,6 @@ func WithInstance(instance *DB, config *Config) (database.Driver, error) { sx := &Spanner{ db: instance, config: config, - lock: uatomic.NewUint32(unlockedVal), } if err := sx.ensureVersionTable(); err != nil { @@ -153,7 +147,7 @@ func (s *Spanner) Close() error { // Lock implements database.Driver but doesn't do anything because Spanner only // enqueues the UpdateDatabaseDdlRequest. func (s *Spanner) Lock() error { - if swapped := s.lock.CAS(unlockedVal, lockedVal); swapped { + if swapped := s.lock.CompareAndSwap(false, true); swapped { return nil } return ErrLockHeld @@ -161,7 +155,7 @@ func (s *Spanner) Lock() error { // Unlock implements database.Driver but no action required, see Lock. func (s *Spanner) Unlock() error { - if swapped := s.lock.CAS(lockedVal, unlockedVal); swapped { + if swapped := s.lock.CompareAndSwap(true, false); swapped { return nil } return ErrLockNotHeld diff --git a/database/sqlcipher/sqlcipher.go b/database/sqlcipher/sqlcipher.go index f98fb3a21..98fdf58e6 100644 --- a/database/sqlcipher/sqlcipher.go +++ b/database/sqlcipher/sqlcipher.go @@ -8,7 +8,7 @@ import ( "strconv" "strings" - "go.uber.org/atomic" + "sync/atomic" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" @@ -178,14 +178,14 @@ func (m *Sqlite) Drop() (err error) { } func (m *Sqlite) Lock() error { - if !m.isLocked.CAS(false, true) { + if !m.isLocked.CompareAndSwap(false, true) { return database.ErrLocked } return nil } func (m *Sqlite) Unlock() error { - if !m.isLocked.CAS(true, false) { + if !m.isLocked.CompareAndSwap(true, false) { return database.ErrNotLocked } return nil diff --git a/database/sqlite/sqlite.go b/database/sqlite/sqlite.go index ce449dfa0..fac64ce49 100644 --- a/database/sqlite/sqlite.go +++ b/database/sqlite/sqlite.go @@ -8,7 +8,7 @@ import ( "strconv" "strings" - "go.uber.org/atomic" + "sync/atomic" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" @@ -178,14 +178,14 @@ func (m *Sqlite) Drop() (err error) { } func (m *Sqlite) Lock() error { - if !m.isLocked.CAS(false, true) { + if !m.isLocked.CompareAndSwap(false, true) { return database.ErrLocked } return nil } func (m *Sqlite) Unlock() error { - if !m.isLocked.CAS(true, false) { + if !m.isLocked.CompareAndSwap(true, false) { return database.ErrNotLocked } return nil diff --git a/database/sqlite3/sqlite3.go b/database/sqlite3/sqlite3.go index 56bb23338..f30784675 100644 --- a/database/sqlite3/sqlite3.go +++ b/database/sqlite3/sqlite3.go @@ -8,7 +8,7 @@ import ( "strconv" "strings" - "go.uber.org/atomic" + "sync/atomic" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" @@ -178,14 +178,14 @@ func (m *Sqlite) Drop() (err error) { } func (m *Sqlite) Lock() error { - if !m.isLocked.CAS(false, true) { + if !m.isLocked.CompareAndSwap(false, true) { return database.ErrLocked } return nil } func (m *Sqlite) Unlock() error { - if !m.isLocked.CAS(true, false) { + if !m.isLocked.CompareAndSwap(true, false) { return database.ErrNotLocked } return nil diff --git a/database/sqlserver/sqlserver.go b/database/sqlserver/sqlserver.go index 92834d1ad..c02b61908 100644 --- a/database/sqlserver/sqlserver.go +++ b/database/sqlserver/sqlserver.go @@ -9,7 +9,7 @@ import ( "strconv" "strings" - "go.uber.org/atomic" + "sync/atomic" "github.com/Azure/go-autorest/autorest/adal" "github.com/golang-migrate/migrate/v4" diff --git a/database/stub/stub.go b/database/stub/stub.go index ae502650b..485b8cd4a 100644 --- a/database/stub/stub.go +++ b/database/stub/stub.go @@ -4,7 +4,7 @@ import ( "io" "reflect" - "go.uber.org/atomic" + "sync/atomic" "github.com/golang-migrate/migrate/v4/database" ) @@ -50,14 +50,14 @@ func (s *Stub) Close() error { } func (s *Stub) Lock() error { - if !s.isLocked.CAS(false, true) { + if !s.isLocked.CompareAndSwap(false, true) { return database.ErrLocked } return nil } func (s *Stub) Unlock() error { - if !s.isLocked.CAS(true, false) { + if !s.isLocked.CompareAndSwap(true, false) { return database.ErrNotLocked } return nil diff --git a/database/util.go b/database/util.go index de66d5b80..c60fafb7c 100644 --- a/database/util.go +++ b/database/util.go @@ -2,9 +2,9 @@ package database import ( "fmt" - "go.uber.org/atomic" "hash/crc32" "strings" + "sync/atomic" ) const advisoryLockIDSalt uint = 1486364155 @@ -21,7 +21,7 @@ func GenerateAdvisoryLockId(databaseName string, additionalNames ...string) (str // CasRestoreOnErr CAS wrapper to automatically restore the lock state on error func CasRestoreOnErr(lock *atomic.Bool, o, n bool, casErr error, f func() error) error { - if !lock.CAS(o, n) { + if !lock.CompareAndSwap(o, n) { return casErr } if err := f(); err != nil { diff --git a/database/util_test.go b/database/util_test.go index 3f1dc73ae..9dfa3223f 100644 --- a/database/util_test.go +++ b/database/util_test.go @@ -2,7 +2,7 @@ package database import ( "errors" - "go.uber.org/atomic" + "sync/atomic" "testing" ) @@ -54,7 +54,7 @@ func TestCasRestoreOnErr(t *testing.T) { testcases := []struct { name string - lock *atomic.Bool + lock bool from bool to bool expectLock bool @@ -63,7 +63,7 @@ func TestCasRestoreOnErr(t *testing.T) { }{ { name: "Test positive CAS lock", - lock: atomic.NewBool(false), + lock: false, from: false, to: true, expectLock: true, @@ -72,7 +72,7 @@ func TestCasRestoreOnErr(t *testing.T) { }, { name: "Test negative CAS lock", - lock: atomic.NewBool(true), + lock: true, from: false, to: true, expectLock: true, @@ -81,7 +81,7 @@ func TestCasRestoreOnErr(t *testing.T) { }, { name: "Test negative with callback lock", - lock: atomic.NewBool(false), + lock: false, from: false, to: true, expectLock: false, @@ -92,13 +92,15 @@ func TestCasRestoreOnErr(t *testing.T) { for _, tc := range testcases { t.Run(tc.name, func(t *testing.T) { - if err := CasRestoreOnErr(tc.lock, tc.from, tc.to, casErr, func() error { + var lock atomic.Bool + lock.Store(tc.lock) + if err := CasRestoreOnErr(&lock, tc.from, tc.to, casErr, func() error { return tc.fErr }); err != tc.expectError { t.Error("Incorrect error value returned") } - if tc.lock.Load() != tc.expectLock { + if lock.Load() != tc.expectLock { t.Error("Incorrect state of lock") } }) diff --git a/database/yugabytedb/yugabytedb.go b/database/yugabytedb/yugabytedb.go index 764d23c02..71c5e4075 100644 --- a/database/yugabytedb/yugabytedb.go +++ b/database/yugabytedb/yugabytedb.go @@ -10,6 +10,8 @@ import ( "strconv" "time" + "sync/atomic" + "github.com/cenkalti/backoff/v4" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" @@ -17,7 +19,6 @@ import ( "github.com/jackc/pgconn" "github.com/jackc/pgerrcode" "github.com/lib/pq" - "go.uber.org/atomic" ) const ( diff --git a/go.mod b/go.mod index 3c20151f2..a167efe08 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,6 @@ require ( github.com/stretchr/testify v1.9.0 github.com/xanzy/go-gitlab v0.15.0 go.mongodb.org/mongo-driver v1.7.5 - go.uber.org/atomic v1.7.0 golang.org/x/oauth2 v0.18.0 golang.org/x/tools v0.24.0 google.golang.org/api v0.169.0 diff --git a/go.sum b/go.sum index e30a51a2a..1b11f2991 100644 --- a/go.sum +++ b/go.sum @@ -620,8 +620,6 @@ go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= From 13afc35aacc2dec29781b04df3327d2f25dda3ae Mon Sep 17 00:00:00 2001 From: Roman Sharkov Date: Sun, 27 Jul 2025 12:21:30 +0200 Subject: [PATCH 2/3] chore: gofmt the imports --- database/clickhouse/clickhouse.go | 3 +-- database/cockroachdb/cockroachdb.go | 1 - database/firebird/firebird.go | 1 - database/mongodb/mongodb.go | 3 +-- database/mysql/mysql.go | 3 +-- database/pgx/pgx.go | 3 +-- database/pgx/v5/pgx.go | 3 +-- database/postgres/postgres.go | 3 +-- database/ql/ql.go | 1 - database/redshift/redshift.go | 1 - database/rqlite/rqlite.go | 1 - database/snowflake/snowflake.go | 1 - database/sqlcipher/sqlcipher.go | 1 - database/sqlite/sqlite.go | 1 - database/sqlite3/sqlite3.go | 1 - database/sqlserver/sqlserver.go | 1 - database/stub/stub.go | 1 - database/yugabytedb/yugabytedb.go | 3 +-- 18 files changed, 7 insertions(+), 25 deletions(-) diff --git a/database/clickhouse/clickhouse.go b/database/clickhouse/clickhouse.go index 0df84d5c0..6bbce8120 100644 --- a/database/clickhouse/clickhouse.go +++ b/database/clickhouse/clickhouse.go @@ -7,9 +7,8 @@ import ( "net/url" "strconv" "strings" - "time" - "sync/atomic" + "time" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" diff --git a/database/cockroachdb/cockroachdb.go b/database/cockroachdb/cockroachdb.go index e2c29cb87..250f907b3 100644 --- a/database/cockroachdb/cockroachdb.go +++ b/database/cockroachdb/cockroachdb.go @@ -8,7 +8,6 @@ import ( nurl "net/url" "regexp" "strconv" - "sync/atomic" "github.com/cockroachdb/cockroach-go/v2/crdb" diff --git a/database/firebird/firebird.go b/database/firebird/firebird.go index 31d82dba3..bcece57f3 100644 --- a/database/firebird/firebird.go +++ b/database/firebird/firebird.go @@ -8,7 +8,6 @@ import ( "fmt" "io" nurl "net/url" - "sync/atomic" "github.com/golang-migrate/migrate/v4" diff --git a/database/mongodb/mongodb.go b/database/mongodb/mongodb.go index 181cc2f36..b1334223a 100644 --- a/database/mongodb/mongodb.go +++ b/database/mongodb/mongodb.go @@ -7,9 +7,8 @@ import ( "net/url" "os" "strconv" - "time" - "sync/atomic" + "time" "github.com/cenkalti/backoff/v4" "github.com/golang-migrate/migrate/v4/database" diff --git a/database/mysql/mysql.go b/database/mysql/mysql.go index ab309cdff..8e807c94b 100644 --- a/database/mysql/mysql.go +++ b/database/mysql/mysql.go @@ -13,9 +13,8 @@ import ( "os" "strconv" "strings" - "time" - "sync/atomic" + "time" "github.com/go-sql-driver/mysql" "github.com/golang-migrate/migrate/v4/database" diff --git a/database/pgx/pgx.go b/database/pgx/pgx.go index e7a593ccc..98ab5aa18 100644 --- a/database/pgx/pgx.go +++ b/database/pgx/pgx.go @@ -11,9 +11,8 @@ import ( "regexp" "strconv" "strings" - "time" - "sync/atomic" + "time" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" diff --git a/database/pgx/v5/pgx.go b/database/pgx/v5/pgx.go index 741a67490..3a442a050 100644 --- a/database/pgx/v5/pgx.go +++ b/database/pgx/v5/pgx.go @@ -11,9 +11,8 @@ import ( "regexp" "strconv" "strings" - "time" - "sync/atomic" + "time" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" diff --git a/database/postgres/postgres.go b/database/postgres/postgres.go index 901a006c2..6b8a77120 100644 --- a/database/postgres/postgres.go +++ b/database/postgres/postgres.go @@ -11,9 +11,8 @@ import ( "regexp" "strconv" "strings" - "time" - "sync/atomic" + "time" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" diff --git a/database/ql/ql.go b/database/ql/ql.go index b4c30df25..6db6ea303 100644 --- a/database/ql/ql.go +++ b/database/ql/ql.go @@ -6,7 +6,6 @@ import ( "io" nurl "net/url" "strings" - "sync/atomic" "github.com/hashicorp/go-multierror" diff --git a/database/redshift/redshift.go b/database/redshift/redshift.go index 16fe2b236..9379554ce 100644 --- a/database/redshift/redshift.go +++ b/database/redshift/redshift.go @@ -10,7 +10,6 @@ import ( nurl "net/url" "strconv" "strings" - "sync/atomic" "github.com/golang-migrate/migrate/v4" diff --git a/database/rqlite/rqlite.go b/database/rqlite/rqlite.go index 7da79839d..b0f8365c5 100644 --- a/database/rqlite/rqlite.go +++ b/database/rqlite/rqlite.go @@ -6,7 +6,6 @@ import ( nurl "net/url" "strconv" "strings" - "sync/atomic" "github.com/golang-migrate/migrate/v4" diff --git a/database/snowflake/snowflake.go b/database/snowflake/snowflake.go index 45f3e0db7..dc0290467 100644 --- a/database/snowflake/snowflake.go +++ b/database/snowflake/snowflake.go @@ -8,7 +8,6 @@ import ( nurl "net/url" "strconv" "strings" - "sync/atomic" "github.com/golang-migrate/migrate/v4/database" diff --git a/database/sqlcipher/sqlcipher.go b/database/sqlcipher/sqlcipher.go index 98fdf58e6..ce5fff9f4 100644 --- a/database/sqlcipher/sqlcipher.go +++ b/database/sqlcipher/sqlcipher.go @@ -7,7 +7,6 @@ import ( nurl "net/url" "strconv" "strings" - "sync/atomic" "github.com/golang-migrate/migrate/v4" diff --git a/database/sqlite/sqlite.go b/database/sqlite/sqlite.go index fac64ce49..bad5b83d2 100644 --- a/database/sqlite/sqlite.go +++ b/database/sqlite/sqlite.go @@ -7,7 +7,6 @@ import ( nurl "net/url" "strconv" "strings" - "sync/atomic" "github.com/golang-migrate/migrate/v4" diff --git a/database/sqlite3/sqlite3.go b/database/sqlite3/sqlite3.go index f30784675..9035dee33 100644 --- a/database/sqlite3/sqlite3.go +++ b/database/sqlite3/sqlite3.go @@ -7,7 +7,6 @@ import ( nurl "net/url" "strconv" "strings" - "sync/atomic" "github.com/golang-migrate/migrate/v4" diff --git a/database/sqlserver/sqlserver.go b/database/sqlserver/sqlserver.go index c02b61908..51e1b777a 100644 --- a/database/sqlserver/sqlserver.go +++ b/database/sqlserver/sqlserver.go @@ -8,7 +8,6 @@ import ( nurl "net/url" "strconv" "strings" - "sync/atomic" "github.com/Azure/go-autorest/autorest/adal" diff --git a/database/stub/stub.go b/database/stub/stub.go index 485b8cd4a..39edadea2 100644 --- a/database/stub/stub.go +++ b/database/stub/stub.go @@ -3,7 +3,6 @@ package stub import ( "io" "reflect" - "sync/atomic" "github.com/golang-migrate/migrate/v4/database" diff --git a/database/yugabytedb/yugabytedb.go b/database/yugabytedb/yugabytedb.go index 71c5e4075..f5abbf301 100644 --- a/database/yugabytedb/yugabytedb.go +++ b/database/yugabytedb/yugabytedb.go @@ -8,9 +8,8 @@ import ( "net/url" "regexp" "strconv" - "time" - "sync/atomic" + "time" "github.com/cenkalti/backoff/v4" "github.com/golang-migrate/migrate/v4" From d80f21dc9027c69072134a582a74d8b000ea719e Mon Sep 17 00:00:00 2001 From: Roman Sharkov Date: Sun, 27 Jul 2025 12:45:33 +0200 Subject: [PATCH 3/3] fix: Nil pointer deref --- database/spanner/spanner.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/spanner/spanner.go b/database/spanner/spanner.go index 506404a1b..b17280dea 100644 --- a/database/spanner/spanner.go +++ b/database/spanner/spanner.go @@ -59,7 +59,7 @@ type Spanner struct { config *Config - lock *atomic.Bool + lock atomic.Bool } type DB struct {