diff --git a/database/database.go b/database/database.go index cea35889..6e38c670 100644 --- a/database/database.go +++ b/database/database.go @@ -32,6 +32,17 @@ type Handler struct { // Implement methods if necessary } +func (h *Handler) DBClose() error { + db, err := h.DB.DB() + if err != nil { + return err + } + err = db.Close() //It ensures that all writes have completed and the database is not corrupted. + if err != nil { + return err + } + return nil +} func New(opts Options) (Handler, error) { switch opts.Engine { case POSTGRES: @@ -46,6 +57,7 @@ func New(opts Options) (Handler, error) { if err != nil { return Handler{}, ErrDatabaseOpen(err) } + return Handler{ db, &sync.Mutex{}, diff --git a/database/error.go b/database/error.go index 5ad6708e..d696d307 100644 --- a/database/error.go +++ b/database/error.go @@ -3,16 +3,16 @@ package database import "github.com/layer5io/meshkit/errors" var ( - ErrNoneDatabaseCode = "11010" - ErrDatabaseOpenCode = "11011" - ErrSQLMapUnmarshalJSONCode = "11012" - ErrSQLMapUnmarshalTextCode = "11013" - ErrSQLMapMarshalValueCode = "11014" - ErrSQLMapUnmarshalScannedCode = "11015" - ErrSQLMapInvalidScanCode = "11016" - - ErrNoneDatabase = errors.New(ErrNoneDatabaseCode, errors.Alert, []string{"No Database selected"}, []string{}, []string{"database name is empty"}, []string{"Input a name for the database"}) - ErrSQLMapInvalidScan = errors.New(ErrSQLMapUnmarshalScannedCode, errors.Alert, []string{"invalid data type: expected []byte"}, []string{}, []string{}, []string{}) + ErrNoneDatabaseCode = "11010" + ErrDatabaseOpenCode = "11011" + ErrSQLMapUnmarshalJSONCode = "11012" + ErrSQLMapUnmarshalTextCode = "11013" + ErrSQLMapMarshalValueCode = "11014" + ErrSQLMapUnmarshalScannedCode = "11015" + ErrSQLMapInvalidScanCode = "11016" + ErrClosingDatabaseConnectionCode = "11017" + ErrNoneDatabase = errors.New(ErrNoneDatabaseCode, errors.Alert, []string{"No Database selected"}, []string{}, []string{"database name is empty"}, []string{"Input a name for the database"}) + ErrSQLMapInvalidScan = errors.New(ErrSQLMapUnmarshalScannedCode, errors.Alert, []string{"invalid data type: expected []byte"}, []string{}, []string{}, []string{}) ) func ErrDatabaseOpen(err error) error { @@ -42,3 +42,8 @@ func ErrSQLMapMarshalValue(err error) error { func ErrSQLMapUnmarshalScanned(err error) error { return errors.New(ErrSQLMapUnmarshalScannedCode, errors.Alert, []string{"failed to unmarshal scanned data", err.Error()}, []string{err.Error()}, []string{}, []string{}) } + +//ErrClosingDatabaseConnection represents the error which will occur when the database connection fails to get closed +func ErrClosingDatabaseConnection(err error) error { + return errors.New(ErrClosingDatabaseConnectionCode, errors.Alert, []string{"failed to close database connection"}, []string{err.Error()}, []string{"Invalid database instance passed."}, []string{"Make sure the DB handler has a valid database instance."}) +}