gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

errors.go (1860B)


      1 // GoToSocial
      2 // Copyright (C) GoToSocial Authors admin@gotosocial.org
      3 // SPDX-License-Identifier: AGPL-3.0-or-later
      4 //
      5 // This program is free software: you can redistribute it and/or modify
      6 // it under the terms of the GNU Affero General Public License as published by
      7 // the Free Software Foundation, either version 3 of the License, or
      8 // (at your option) any later version.
      9 //
     10 // This program is distributed in the hope that it will be useful,
     11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 // GNU Affero General Public License for more details.
     14 //
     15 // You should have received a copy of the GNU Affero General Public License
     16 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
     17 
     18 package bundb
     19 
     20 import (
     21 	"github.com/jackc/pgconn"
     22 	"github.com/superseriousbusiness/gotosocial/internal/db"
     23 	"modernc.org/sqlite"
     24 	sqlite3 "modernc.org/sqlite/lib"
     25 )
     26 
     27 // processPostgresError processes an error, replacing any postgres specific errors with our own error type
     28 func processPostgresError(err error) db.Error {
     29 	// Attempt to cast as postgres
     30 	pgErr, ok := err.(*pgconn.PgError)
     31 	if !ok {
     32 		return err
     33 	}
     34 
     35 	// Handle supplied error code:
     36 	// (https://www.postgresql.org/docs/10/errcodes-appendix.html)
     37 	switch pgErr.Code {
     38 	case "23505" /* unique_violation */ :
     39 		return db.ErrAlreadyExists
     40 	default:
     41 		return err
     42 	}
     43 }
     44 
     45 // processSQLiteError processes an error, replacing any sqlite specific errors with our own error type
     46 func processSQLiteError(err error) db.Error {
     47 	// Attempt to cast as sqlite
     48 	sqliteErr, ok := err.(*sqlite.Error)
     49 	if !ok {
     50 		return err
     51 	}
     52 
     53 	// Handle supplied error code:
     54 	switch sqliteErr.Code() {
     55 	case sqlite3.SQLITE_CONSTRAINT_UNIQUE,
     56 		sqlite3.SQLITE_CONSTRAINT_PRIMARYKEY:
     57 		return db.ErrAlreadyExists
     58 	default:
     59 		return err
     60 	}
     61 }