# HG changeset patch # User Tom Gottfried # Date 1551985423 -3600 # Node ID 6b34d0fb44983b8542118f46878432841d133287 # Parent 5afca5bc1d7a00cadfde67773ffa3e5d95052795 Improve user facing error messages for stretch area generation diff -r 5afca5bc1d7a -r 6b34d0fb4498 pkg/imports/bn.go --- a/pkg/imports/bn.go Thu Mar 07 18:05:20 2019 +0100 +++ b/pkg/imports/bn.go Thu Mar 07 20:03:43 2019 +0100 @@ -281,7 +281,7 @@ ).Scan(&nid) if err != nil { feedback.Warn("Failed to insert '%s' into database", bn.OBJNAM) - feedback.Warn("%v", err) + feedback.Warn(handleError(err).Error()) return nil } diff -r 5afca5bc1d7a -r 6b34d0fb4498 pkg/imports/errors.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/imports/errors.go Thu Mar 07 20:03:43 2019 +0100 @@ -0,0 +1,50 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2019 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Tom Gottfried + +package imports + +import ( + "strings" + + "github.com/jackc/pgx" +) + +func handleError(err error) error { + switch e := err.(type) { + case pgx.PgError: + return dbError(e) + } + return err +} + +// Handle PostgreSQL error codes +const ( + noDataFound = "P0002" +) + +type dbError pgx.PgError + +func (err dbError) Error() string { + switch err.Code { + case noDataFound: + // Most recent line from stacktrace contains name of failed function + recent := strings.SplitN(err.Where, "\n", 1)[0] + switch { + case strings.Contains(recent, "isrsrange_points"): + return "No distance mark found for at least one given ISRS Location Code" + case strings.Contains(recent, "isrsrange_axis"): + return "No contiguous axis found between given ISRS Location Codes" + } + } + return "Unexpected database error: " + err.Message +} diff -r 5afca5bc1d7a -r 6b34d0fb4498 pkg/imports/st.go --- a/pkg/imports/st.go Thu Mar 07 18:05:20 2019 +0100 +++ b/pkg/imports/st.go Thu Mar 07 20:03:43 2019 +0100 @@ -192,7 +192,7 @@ st.Date.Time, st.Source, ).Scan(&id); err != nil { - return nil, err + return nil, handleError(err) } // store the associated countries.