aboutsummaryrefslogtreecommitdiff
path: root/internal/sqlutil
diff options
context:
space:
mode:
Diffstat (limited to 'internal/sqlutil')
-rw-r--r--internal/sqlutil/migrate.go5
-rw-r--r--internal/sqlutil/unique_constraint.go (renamed from internal/sqlutil/postgres_wasm.go)21
-rw-r--r--internal/sqlutil/unique_constraint_wasm.go (renamed from internal/sqlutil/postgres.go)17
3 files changed, 34 insertions, 9 deletions
diff --git a/internal/sqlutil/migrate.go b/internal/sqlutil/migrate.go
index 98e7d893..b6a8b1f2 100644
--- a/internal/sqlutil/migrate.go
+++ b/internal/sqlutil/migrate.go
@@ -155,5 +155,10 @@ func InsertMigration(ctx context.Context, db *sql.DB, migrationName string) erro
time.Now().Format(time.RFC3339),
internal.VersionString(),
)
+ // If the migration was already executed, we'll get a unique constraint error,
+ // return nil instead, to avoid unnecessary logging.
+ if IsUniqueConstraintViolationErr(err) {
+ return nil
+ }
return err
}
diff --git a/internal/sqlutil/postgres_wasm.go b/internal/sqlutil/unique_constraint.go
index 34086f45..4a1b7fd9 100644
--- a/internal/sqlutil/postgres_wasm.go
+++ b/internal/sqlutil/unique_constraint.go
@@ -12,12 +12,27 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-//go:build wasm
-// +build wasm
+//go:build !wasm
+// +build !wasm
package sqlutil
-// IsUniqueConstraintViolationErr no-ops for this architecture
+import (
+ "github.com/lib/pq"
+ "github.com/mattn/go-sqlite3"
+)
+
+// IsUniqueConstraintViolationErr returns true if the error is an unique_violation error
func IsUniqueConstraintViolationErr(err error) bool {
+ switch e := err.(type) {
+ case *pq.Error:
+ return e.Code == "23505"
+ case pq.Error:
+ return e.Code == "23505"
+ case *sqlite3.Error:
+ return e.Code == sqlite3.ErrConstraint
+ case sqlite3.Error:
+ return e.Code == sqlite3.ErrConstraint
+ }
return false
}
diff --git a/internal/sqlutil/postgres.go b/internal/sqlutil/unique_constraint_wasm.go
index 5e656b1d..02ceb585 100644
--- a/internal/sqlutil/postgres.go
+++ b/internal/sqlutil/unique_constraint_wasm.go
@@ -12,15 +12,20 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-//go:build !wasm
-// +build !wasm
+//go:build wasm
+// +build wasm
package sqlutil
-import "github.com/lib/pq"
+import "github.com/mattn/go-sqlite3"
-// IsUniqueConstraintViolationErr returns true if the error is a postgresql unique_violation error
+// IsUniqueConstraintViolationErr returns true if the error is an unique_violation error
func IsUniqueConstraintViolationErr(err error) bool {
- pqErr, ok := err.(*pq.Error)
- return ok && pqErr.Code == "23505"
+ switch e := err.(type) {
+ case *sqlite3.Error:
+ return e.Code == sqlite3.ErrConstraint
+ case sqlite3.Error:
+ return e.Code == sqlite3.ErrConstraint
+ }
+ return false
}