From a3e2da1d36b285d6771b5f24ae6188f5c897a109 Mon Sep 17 00:00:00 2001 From: "J. King" Date: Wed, 8 Mar 2017 12:29:22 -0500 Subject: [PATCH] Flesh out most database exceptions - Fixes #46 - Some exception messages are tentative pending testing --- lib/AbstractException.php | 16 ++++++++++++---- lib/Db/SQLite3/ExceptionBuilder.php | 2 +- locale/en.php | 16 ++++++++++------ 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/lib/AbstractException.php b/lib/AbstractException.php index ac3be83..0f61763 100644 --- a/lib/AbstractException.php +++ b/lib/AbstractException.php @@ -27,10 +27,18 @@ abstract class AbstractException extends \Exception { "Db/Exception.updateFileUnreadable" => 10214, "Db/Exception.updateManual" => 10215, "Db/Exception.updateManualOnly" => 10216, - "Db/Exception.paramTypeInvalid" => 10301, - "Db/Exception.paramTypeUnknown" => 10302, - "Db/Exception.paramTypeMissing" => 10303, - "Db/Exception.engineErrorGeneral" => 10401, // this symbol can have engine-specific duplicates to accomodate engine-specific error string construction + "Db/Exception.paramTypeInvalid" => 10221, + "Db/Exception.paramTypeUnknown" => 10222, + "Db/Exception.paramTypeMissing" => 10223, + "Db/Exception.engineErrorGeneral" => 10224, // this symbol may have engine-specific duplicates to accomodate engine-specific error string construction + "Db/ExceptionInput.missing" => 10231, + "Db/ExceptionInput.whitespace" => 10232, + "Db/ExceptionInput.tooLong" => 10233, + "Db/ExceptionInput.tooShort" => 10234, + "Db/ExceptionInput.idMissing" => 10235, + "Db/ExceptionInput.constraintViolation" => 10236, + "Db/ExceptionInput.typeViolation" => 10237, + "Db/ExceptionTimeout.general" => 10241, "Conf/Exception.fileMissing" => 10302, "Conf/Exception.fileUnusable" => 10303, "Conf/Exception.fileUnreadable" => 10304, diff --git a/lib/Db/SQLite3/ExceptionBuilder.php b/lib/Db/SQLite3/ExceptionBuilder.php index 9f5c855..9660c17 100644 --- a/lib/Db/SQLite3/ExceptionBuilder.php +++ b/lib/Db/SQLite3/ExceptionBuilder.php @@ -11,7 +11,7 @@ trait ExceptionBuilder { public function exceptionBuild() { switch($this->db->lastErrorCode()) { case self::SQLITE_BUSY: - return [ExceptionTimeout::class, 'sqliteBusy', $this->db->lastErrorMsg()]; + return [ExceptionTimeout::class, 'general', $this->db->lastErrorMsg()]; case self::SQLITE_CONSTRAINT: return [ExceptionInput::class, 'constraintViolation', $this->db->lastErrorMsg()]; case self::SQLITE_MISMATCH: diff --git a/locale/en.php b/locale/en.php index c85293d..4b0c40a 100644 --- a/locale/en.php +++ b/locale/en.php @@ -1,26 +1,24 @@ 'Internal', + 'Driver.Db.SQLite3.Name' => 'SQLite 3', // this should only be encountered in testing (because tests should cover all exceptions!) 'Exception.JKingWeb/NewsSync/Exception.uncoded' => 'The specified exception symbol {0} has no code specified in AbstractException.php', // this should not usually be encountered 'Exception.JKingWeb/NewsSync/Exception.unknown' => 'An unknown error has occurred', - 'Exception.JKingWeb/NewsSync/Lang/Exception.defaultFileMissing' => 'Default language file "{0}" missing', 'Exception.JKingWeb/NewsSync/Lang/Exception.fileMissing' => 'Language file "{0}" is not available', 'Exception.JKingWeb/NewsSync/Lang/Exception.fileUnreadable' => 'Insufficient permissions to read language file "{0}"', 'Exception.JKingWeb/NewsSync/Lang/Exception.fileCorrupt' => 'Language file "{0}" is corrupt or does not conform to expected format', 'Exception.JKingWeb/NewsSync/Lang/Exception.stringMissing' => 'Message string "{msgID}" missing from all loaded language files ({fileList})', 'Exception.JKingWeb/NewsSync/Lang/Exception.stringInvalid' => 'Message string "{msgID}" is not a valid ICU message string (language files loaded: {fileList})', - 'Exception.JKingWeb/NewsSync/Conf/Exception.fileMissing' => 'Configuration file "{0}" does not exist', 'Exception.JKingWeb/NewsSync/Conf/Exception.fileUnreadable' => 'Insufficient permissions to read configuration file "{0}"', 'Exception.JKingWeb/NewsSync/Conf/Exception.fileUncreatable' => 'Insufficient permissions to write new configuration file "{0}"', 'Exception.JKingWeb/NewsSync/Conf/Exception.fileUnwritable' => 'Insufficient permissions to overwrite configuration file "{0}"', 'Exception.JKingWeb/NewsSync/Conf/Exception.fileCorrupt' => 'Configuration file "{0}" is corrupt or does not conform to expected format', - 'Exception.JKingWeb/NewsSync/Db/Exception.extMissing' => 'Required PHP extension for driver "{0}" not installed', 'Exception.JKingWeb/NewsSync/Db/Exception.fileMissing' => 'Database file "{0}" does not exist', 'Exception.JKingWeb/NewsSync/Db/Exception.fileUnreadable' => 'Insufficient permissions to open database file "{0}" for reading', @@ -28,7 +26,6 @@ return [ 'Exception.JKingWeb/NewsSync/Db/Exception.fileUnusable' => 'Insufficient permissions to open database file "{0}" for reading or writing', 'Exception.JKingWeb/NewsSync/Db/Exception.fileUncreatable' => 'Insufficient permissions to create new database file "{0}"', 'Exception.JKingWeb/NewsSync/Db/Exception.fileCorrupt' => 'Database file "{0}" is corrupt or not a valid database', - 'Exception.JKingWeb/NewsSync/Db/Exception.engineErrorGeneral' => '{0}', 'Exception.JKingWeb/NewsSync/Db/Exception.paramTypeInvalid' => 'Prepared statement parameter type "{0}" is invalid', 'Exception.JKingWeb/NewsSync/Db/Exception.paramTypeUnknown' => 'Prepared statement parameter type "{0}" is valid, but not implemented', 'Exception.JKingWeb/NewsSync/Db/Exception.paramTypeMissing' => 'Prepared statement parameter type for parameter #{0} was not specified', @@ -50,7 +47,15 @@ return [ 0 {Automatic updating of the {driver_name} database failed because it is already up to date with the requested version, {target}} other {Automatic updating of the {driver_name} database failed because its version, {current}, is newer than the requested version, {target}} }', - + 'Exception.JKingWeb/NewsSync/Db/Exception.engineErrorGeneral' => '{0}', + 'Exception.JKingWeb/NewsSync/Db/ExceptionInput.missing' => 'Required field "{field}" missing while performing action "{action}"', + 'Exception.JKingWeb/NewsSync/Db/ExceptionInput.whitespace' => 'Required field "{field}" of action "{action}" may not contain only whitespace', + 'Exception.JKingWeb/NewsSync/Db/ExceptionInput.tooLong' => 'Required field "{field}" of action "{action}" has a maximum length of {max}', + 'Exception.JKingWeb/NewsSync/Db/ExceptionInput.tooShort' => 'Required field "{field}" of action "{action}" has a minimum length of {min}', + 'Exception.JKingWeb/NewsSync/Db/ExceptionInput.idMissing' => 'Referenced ID in field "{field}" does not exist', + 'Exception.JKingWeb/NewsSync/Db/ExceptionInput.constraintViolation' => '{0}', + 'Exception.JKingWeb/NewsSync/Db/ExceptionInput.typeViolation' => '{0}', + 'Exception.JKingWeb/NewsSync/Db/ExceptionTimeout.general' => '{0}', 'Exception.JKingWeb/NewsSync/User/Exception.alreadyExists' => 'Could not perform action "{action}" because the user {user} already exists', 'Exception.JKingWeb/NewsSync/User/Exception.doesNotExist' => 'Could not perform action "{action}" because the user {user} does not exist', 'Exception.JKingWeb/NewsSync/User/Exception.authMissing' => 'Please log in to proceed', @@ -63,7 +68,6 @@ return [ }} other {Authenticated user is not authorized to perform the action "{action}" on behalf of {user}} }', - 'Exception.JKingWeb/NewsSync/Feed/Exception.invalidCertificate' => 'Could not download feed "{url}" because its server is serving an invalid SSL certificate', 'Exception.JKingWeb/NewsSync/Feed/Exception.invalidURL' => 'Feed URL "{url}" is invalid', 'Exception.JKingWeb/NewsSync/Feed/Exception.maxRedirect' => 'Could not download feed "{url}" because its server reached its maximum number of HTTP redirections',