rfc:sqlite3_exceptions

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
rfc:sqlite3_exceptions [2022/10/24 02:40] – created bohwazrfc:sqlite3_exceptions [2023/07/17 04:06] (current) – Add links for implementations girgias
Line 1: Line 1:
-====== PHP RFC: use Exceptions in SQLite3 ======+====== PHP RFC: Use exceptions by default in SQLite3 extension ======
   * Version: 0.1   * Version: 0.1
   * Date: 2022-10-24   * Date: 2022-10-24
   * Author: BohwaZ, php at bohwaz dot net   * Author: BohwaZ, php at bohwaz dot net
-  * Status: Under discussion+  * Status: Implemented 
 +  * Implementation: https://github.com/php/php-src/commit/ddd9a08f566d86083d04de320e24f0751a1de759
   * First Published at: http://wiki.php.net/rfc/sqlite3_exceptions   * First Published at: http://wiki.php.net/rfc/sqlite3_exceptions
  
Line 9: Line 10:
 ===== Introduction ===== ===== Introduction =====
  
-The SQLite3 extension is still using PHP warnings by default. PDO is using Exceptions, like everyone else.+The SQLite3 extension is still using PHP warnings by default. PDO is using exceptions, like everyone else.
  
 It's time to move to exceptions. It's time to move to exceptions.
Line 15: Line 16:
 ===== Proposal ===== ===== Proposal =====
  
-  * Create a new Exception class SQLite3Exception, which extends the SPL RuntimeExceptionlike mysqli and PDO +Progressively deprecate warnings (PHP 8.3), make exceptions the default (9.0) and remove warnings (10.0). 
-  * Make SQLite3 throw exceptions of class SQLite3Exception by default + 
-  * Remove the SQLite3::enableExceptions method +In PHP 8.3: 
-  * Move SQLite error code off the error message to the exception code+ 
 +  * Create a new exception class ''SQLite3Exception'', which extends the ''Exception'' class 
 +  * Remove SQLite3 error code from the error message, and assign it to the exception code 
 +  * Make ''SQLite3::enableExceptions(true)'' throw SQLite3Exception instead of Exception 
 +  * Calling ''SQLite3::enableExceptions(false)'' raises ''E_DEPRECATED'' 
 +  * Default behavior is still to raise warnings (''enableExceptions(false)''
 + 
 +In PHP 9.0: 
 + 
 +  * Make SQLite3 throw exceptions of class ''SQLite3Exception'' by default, instead of raising warnings 
 +  * Calling ''SQLite3::enableExceptions(false)'' throws an error 
 +  * It's not possible to use warnings anymore. 
 +  * Calling ''SQLite3::enableExceptions(true)'' raises ''E_DEPRECATED'', to alert that the method will get removed 
 + 
 +In PHP 10.0: 
 + 
 +  * Remove the ''SQLite3::enableExceptions'' method
  
 ===== Backward Incompatible Changes ===== ===== Backward Incompatible Changes =====
  
-  * Calls to SQLite3::enableExceptions will break, but can be easily removed, or made optional using method_exists +In PHP 8.3: 
-  * Code relying on hiding warnings will break+ 
 +  * Code parsing the error message to get the error code may fail as the error code has been moved to be consistently at the end of the error message string. This is unlikely as the proper way is to use ''SQLite3::lastErrorCode()''.
   * Code already relying on exceptions will not see a difference, as previously \Exception was thrown, and \SQLite3Exception is a subclass of \Exception   * Code already relying on exceptions will not see a difference, as previously \Exception was thrown, and \SQLite3Exception is a subclass of \Exception
  
-Another option could be to keep the enableExceptions method for one version, but make throwing SQLite3Exceptions the default behaviour.+In PHP 9.0: 
 + 
 +  * Calls to SQLite3::enableExceptions(false) will break 
 +  * Code relying on hiding warnings will break 
 + 
 +In PHP 10.0: 
 + 
 +  * Calls to ''SQLite3::enableExceptions()'' will fail
  
 ===== Proposed PHP Version(s) ===== ===== Proposed PHP Version(s) =====
  
-Next PHP 8.x (8.3?)+PHP 8.3, 9.0, 10.0
  
 ===== RFC Impact ===== ===== RFC Impact =====
Line 64: Line 89:
 ===== Proposed Voting Choices ===== ===== Proposed Voting Choices =====
  
-  * Proposal 1: in 8.3 remove enableExceptions, throw SQLite3Exception by default +  * 1: accept proposal 
-  * Proposal 2: in 8.3 deprecate enableExceptions, throw SQLite3Exception by default, but allow to keep warnings instead of exceptions (but deprecate it), then in 8.4 remove enableExceptions and warnings +  * 2: don'change anything
-  * Choice 3: no change+
  
 ===== Patches and Tests ===== ===== Patches and Tests =====
  
-Pull request: https://github.com/php/php-src/pull/9816 (proposal 1)+Pull request
 + 
 +  * 8.3: https://github.com/php/php-src/pull/11058
  
 ===== Implementation ===== ===== Implementation =====
Line 82: Line 108:
 ===== References ===== ===== References =====
  
-Links to external referencesdiscussions or RFCs+  * https://externals.io/message/118873 
 + 
 + 
 + 
 +===== Vote ===== 
 + 
 +Voting started 2023-05-09 and has ended end 2023-05-23Europe/Paris timezone. 
 + 
 +<doodle title="Use exceptions by default in SQLite3 extension as described in this RFC?" auth="bohwaz" voteType="single" closed="true"> 
 +   * Yes 
 +   * No 
 +</doodle>
  
-===== Rejected Features ===== 
-Keep this updated with features that were discussed on the mail lists. 
rfc/sqlite3_exceptions.1666579235.txt.gz · Last modified: 2022/10/24 02:40 by bohwaz