From 4cb82b039e1ff6b1c89a566b897795d28dd6e2cd Mon Sep 17 00:00:00 2001 From: Saki Takamachi <34942839+SakiTakamachi@users.noreply.github.com> Date: Thu, 18 Jul 2024 08:12:17 +0900 Subject: [PATCH] ext/pdo_firebird: Do not implement new constants in PDO core (#14995) --- UPGRADING | 6 ++-- ext/pdo_firebird/firebird_driver.c | 8 ++--- ext/pdo_firebird/pdo_firebird.c | 5 --- .../tests/transaction_access_mode.phpt | 32 ++++++++--------- .../transaction_isolation_level_attr.phpt | 34 +++++++++---------- .../transaction_isolation_level_behavior.phpt | 6 ++-- 6 files changed, 43 insertions(+), 48 deletions(-) diff --git a/UPGRADING b/UPGRADING index 5e94fe7b8aa97..a25b16e6a34c9 100644 --- a/UPGRADING +++ b/UPGRADING @@ -504,9 +504,9 @@ PHP 8.4 UPGRADE NOTES . getAttribute, enabled to get values of FB_ATTR_DATE_FORMAT, FB_ATTR_TIME_FORMAT, FB_ATTR_TIMESTAMP_FORMAT. . Added new attributes to specify transaction isolation level and access mode. - Along with these, five constants (PDO::FB_TRANSACTION_ISOLATION_LEVEL, - PDO::FB_READ_COMMITTED, PDO::FB_REPEATABLE_READ, PDO::FB_SERIALIZABLE, - PDO::FB_WRITABLE_TRANSACTION) have been added. + Along with these, five constants (Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL, + Pdo\Firebird::READ_COMMITTED, Pdo\Firebird::REPEATABLE_READ, + Pdo\Firebird::SERIALIZABLE, Pdo\Firebird::WRITABLE_TRANSACTION) have been added. . When using persistent connections, there is now a liveness check in the constructor. . The content that is built changes depending on the value of FB_API_VER in diff --git a/ext/pdo_firebird/firebird_driver.c b/ext/pdo_firebird/firebird_driver.c index be4b8efe41b1b..2368682be9136 100644 --- a/ext/pdo_firebird/firebird_driver.c +++ b/ext/pdo_firebird/firebird_driver.c @@ -1080,8 +1080,8 @@ static bool pdo_firebird_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val */ H->txn_isolation_level = lval; } else { - zend_value_error("PDO::FB_TRANSACTION_ISOLATION_LEVEL must be a valid transaction isolation level " - "(PDO::FB_READ_COMMITTED, PDO::FB_REPEATABLE_READ, or PDO::FB_SERIALIZABLE)"); + zend_value_error("Pdo\\Firebird::TRANSACTION_ISOLATION_LEVEL must be a valid transaction isolation level " + "(Pdo\\Firebird::READ_COMMITTED, Pdo\\Firebird::REPEATABLE_READ, or Pdo\\Firebird::SERIALIZABLE)"); return false; } } @@ -1318,8 +1318,8 @@ static int pdo_firebird_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* ) { H->txn_isolation_level = txn_isolation_level; } else { - zend_value_error("PDO::FB_TRANSACTION_ISOLATION_LEVEL must be a valid transaction isolation level " - "(PDO::FB_READ_COMMITTED, PDO::FB_REPEATABLE_READ, or PDO::FB_SERIALIZABLE)"); + zend_value_error("Pdo\\Firebird::TRANSACTION_ISOLATION_LEVEL must be a valid transaction isolation level " + "(Pdo\\Firebird::READ_COMMITTED, Pdo\\Firebird::REPEATABLE_READ, or Pdo\\Firebird::SERIALIZABLE)"); ret = 0; } diff --git a/ext/pdo_firebird/pdo_firebird.c b/ext/pdo_firebird/pdo_firebird.c index ebc9018e879c1..4aa6943239260 100644 --- a/ext/pdo_firebird/pdo_firebird.c +++ b/ext/pdo_firebird/pdo_firebird.c @@ -60,11 +60,6 @@ PHP_MINIT_FUNCTION(pdo_firebird) /* {{{ */ REGISTER_PDO_CLASS_CONST_LONG("FB_ATTR_DATE_FORMAT", (zend_long) PDO_FB_ATTR_DATE_FORMAT); REGISTER_PDO_CLASS_CONST_LONG("FB_ATTR_TIME_FORMAT", (zend_long) PDO_FB_ATTR_TIME_FORMAT); REGISTER_PDO_CLASS_CONST_LONG("FB_ATTR_TIMESTAMP_FORMAT", (zend_long) PDO_FB_ATTR_TIMESTAMP_FORMAT); - REGISTER_PDO_CLASS_CONST_LONG("FB_TRANSACTION_ISOLATION_LEVEL", (zend_long) PDO_FB_TRANSACTION_ISOLATION_LEVEL); - REGISTER_PDO_CLASS_CONST_LONG("FB_READ_COMMITTED", (zend_long) PDO_FB_READ_COMMITTED); - REGISTER_PDO_CLASS_CONST_LONG("FB_REPEATABLE_READ", (zend_long) PDO_FB_REPEATABLE_READ); - REGISTER_PDO_CLASS_CONST_LONG("FB_SERIALIZABLE", (zend_long) PDO_FB_SERIALIZABLE); - REGISTER_PDO_CLASS_CONST_LONG("FB_WRITABLE_TRANSACTION", (zend_long) PDO_FB_WRITABLE_TRANSACTION); if (FAILURE == php_pdo_register_driver(&pdo_firebird_driver)) { return FAILURE; diff --git a/ext/pdo_firebird/tests/transaction_access_mode.phpt b/ext/pdo_firebird/tests/transaction_access_mode.phpt index 7614feccc7ae6..8eb3738ff47bf 100644 --- a/ext/pdo_firebird/tests/transaction_access_mode.phpt +++ b/ext/pdo_firebird/tests/transaction_access_mode.phpt @@ -29,11 +29,11 @@ foreach ($values as $value) { PDO_FIREBIRD_TEST_USER, PDO_FIREBIRD_TEST_PASS, [ - PDO::FB_WRITABLE_TRANSACTION => $value['val'], + Pdo\Firebird::WRITABLE_TRANSACTION => $value['val'], ], ); - if ($dbh->getAttribute(PDO::FB_WRITABLE_TRANSACTION) === $value['val']) { + if ($dbh->getAttribute(Pdo\Firebird::WRITABLE_TRANSACTION) === $value['val']) { echo "OK: {$value['label']}\n"; } else { echo "NG: {$value['label']}\n"; @@ -54,8 +54,8 @@ $dbh = new PDO( $dbh->query("CREATE TABLE {$table} (val INT)"); echo "writable\n"; -var_dump($dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, true)); -if ($dbh->getAttribute(PDO::FB_WRITABLE_TRANSACTION) === true) { +var_dump($dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, true)); +if ($dbh->getAttribute(Pdo\Firebird::WRITABLE_TRANSACTION) === true) { echo "OK: writable\n"; } else { echo "NG: writable\n"; @@ -67,8 +67,8 @@ var_dump($r->fetchAll()); echo "\n"; echo "readonly\n"; -var_dump($dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, false)); -if ($dbh->getAttribute(PDO::FB_WRITABLE_TRANSACTION) === false) { +var_dump($dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, false)); +if ($dbh->getAttribute(Pdo\Firebird::WRITABLE_TRANSACTION) === false) { echo "OK: readonly\n"; } else { echo "NG: readonly\n"; @@ -84,47 +84,47 @@ var_dump($r->fetchAll()); echo "\n"; echo "========== Set attr in setAttribute while transaction ==========\n"; -$dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, true); +$dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, true); $dbh->beginTransaction(); echo "writable to writable\n"; try { - $dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, true); + $dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, true); } catch (PDOException $e) { echo $e->getMessage()."\n"; } -var_dump($dbh->getAttribute(PDO::FB_WRITABLE_TRANSACTION)); +var_dump($dbh->getAttribute(Pdo\Firebird::WRITABLE_TRANSACTION)); echo "\n"; echo "writable to readonly\n"; try { - $dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, false); + $dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, false); } catch (PDOException $e) { echo $e->getMessage()."\n"; } -var_dump($dbh->getAttribute(PDO::FB_WRITABLE_TRANSACTION)); +var_dump($dbh->getAttribute(Pdo\Firebird::WRITABLE_TRANSACTION)); echo "\n"; $dbh->commit(); -$dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, false); +$dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, false); $dbh->beginTransaction(); echo "readonly to writable\n"; try { - $dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, true); + $dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, true); } catch (PDOException $e) { echo $e->getMessage()."\n"; } -var_dump($dbh->getAttribute(PDO::FB_WRITABLE_TRANSACTION)); +var_dump($dbh->getAttribute(Pdo\Firebird::WRITABLE_TRANSACTION)); echo "\n"; echo "readonly to readonly\n"; try { - $dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, false); + $dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, false); } catch (PDOException $e) { echo $e->getMessage()."\n"; } -var_dump($dbh->getAttribute(PDO::FB_WRITABLE_TRANSACTION)); +var_dump($dbh->getAttribute(Pdo\Firebird::WRITABLE_TRANSACTION)); unset($dbh); ?> diff --git a/ext/pdo_firebird/tests/transaction_isolation_level_attr.phpt b/ext/pdo_firebird/tests/transaction_isolation_level_attr.phpt index 5b6852286aad2..ac185b557f796 100644 --- a/ext/pdo_firebird/tests/transaction_isolation_level_attr.phpt +++ b/ext/pdo_firebird/tests/transaction_isolation_level_attr.phpt @@ -15,9 +15,9 @@ $dbh = getDbConnection(); unset($dbh); $levelStrs = [ - 'PDO::FB_READ_COMMITTED', - 'PDO::FB_REPEATABLE_READ', - 'PDO::FB_SERIALIZABLE', + 'Pdo\\Firebird::READ_COMMITTED', + 'Pdo\\Firebird::REPEATABLE_READ', + 'Pdo\\Firebird::SERIALIZABLE', ]; echo "========== Set attr in construct ==========\n"; @@ -29,11 +29,11 @@ foreach ($levelStrs as $levelStr) { PDO_FIREBIRD_TEST_USER, PDO_FIREBIRD_TEST_PASS, [ - PDO::FB_TRANSACTION_ISOLATION_LEVEL => $level, + Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL => $level, ], ); - if ($dbh->getAttribute(PDO::FB_TRANSACTION_ISOLATION_LEVEL) === $level) { + if ($dbh->getAttribute(Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL) === $level) { echo "OK: {$levelStr}\n"; } else { echo "NG: {$levelStr}\n"; @@ -49,7 +49,7 @@ try { PDO_FIREBIRD_TEST_USER, PDO_FIREBIRD_TEST_PASS, [ - PDO::FB_TRANSACTION_ISOLATION_LEVEL => PDO::ATTR_AUTOCOMMIT, // Invalid value + Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL => PDO::ATTR_AUTOCOMMIT, // Invalid value ], ); } catch (Throwable $e) { @@ -70,9 +70,9 @@ $dbh = new PDO( foreach ($levelStrs as $levelStr) { $level = constant($levelStr); - var_dump($dbh->setAttribute(PDO::FB_TRANSACTION_ISOLATION_LEVEL, $level)); + var_dump($dbh->setAttribute(Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL, $level)); - if ($dbh->getAttribute(PDO::FB_TRANSACTION_ISOLATION_LEVEL) === $level) { + if ($dbh->getAttribute(Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL) === $level) { echo "OK: {$levelStr}\n"; } else { echo "NG: {$levelStr}\n"; @@ -81,7 +81,7 @@ foreach ($levelStrs as $levelStr) { echo "Invalid value\n"; try { - $dbh->setAttribute(PDO::FB_TRANSACTION_ISOLATION_LEVEL, PDO::ATTR_AUTOCOMMIT); // Invalid value + $dbh->setAttribute(Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL, PDO::ATTR_AUTOCOMMIT); // Invalid value } catch (Throwable $e) { echo $e->getMessage()."\n"; } @@ -90,18 +90,18 @@ unset($dbh); ?> --EXPECT-- ========== Set attr in construct ========== -OK: PDO::FB_READ_COMMITTED -OK: PDO::FB_REPEATABLE_READ -OK: PDO::FB_SERIALIZABLE +OK: Pdo\Firebird::READ_COMMITTED +OK: Pdo\Firebird::REPEATABLE_READ +OK: Pdo\Firebird::SERIALIZABLE Invalid value -PDO::FB_TRANSACTION_ISOLATION_LEVEL must be a valid transaction isolation level (PDO::FB_READ_COMMITTED, PDO::FB_REPEATABLE_READ, or PDO::FB_SERIALIZABLE) +Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL must be a valid transaction isolation level (Pdo\Firebird::READ_COMMITTED, Pdo\Firebird::REPEATABLE_READ, or Pdo\Firebird::SERIALIZABLE) ========== Set attr in setAttribute ========== bool(true) -OK: PDO::FB_READ_COMMITTED +OK: Pdo\Firebird::READ_COMMITTED bool(true) -OK: PDO::FB_REPEATABLE_READ +OK: Pdo\Firebird::REPEATABLE_READ bool(true) -OK: PDO::FB_SERIALIZABLE +OK: Pdo\Firebird::SERIALIZABLE Invalid value -PDO::FB_TRANSACTION_ISOLATION_LEVEL must be a valid transaction isolation level (PDO::FB_READ_COMMITTED, PDO::FB_REPEATABLE_READ, or PDO::FB_SERIALIZABLE) +Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL must be a valid transaction isolation level (Pdo\Firebird::READ_COMMITTED, Pdo\Firebird::REPEATABLE_READ, or Pdo\Firebird::SERIALIZABLE) diff --git a/ext/pdo_firebird/tests/transaction_isolation_level_behavior.phpt b/ext/pdo_firebird/tests/transaction_isolation_level_behavior.phpt index e04b0a52338a5..737ecf5d837ac 100644 --- a/ext/pdo_firebird/tests/transaction_isolation_level_behavior.phpt +++ b/ext/pdo_firebird/tests/transaction_isolation_level_behavior.phpt @@ -51,7 +51,7 @@ $dbh = new PDO( PDO_FIREBIRD_TEST_DSN, PDO_FIREBIRD_TEST_USER, PDO_FIREBIRD_TEST_PASS, - [PDO::FB_TRANSACTION_ISOLATION_LEVEL => PDO::FB_READ_COMMITTED] + [Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL => Pdo\Firebird::READ_COMMITTED] ); echo "begin transaction\n"; $dbh->beginTransaction(); @@ -74,7 +74,7 @@ $dbh = new PDO( PDO_FIREBIRD_TEST_DSN, PDO_FIREBIRD_TEST_USER, PDO_FIREBIRD_TEST_PASS, - [PDO::FB_TRANSACTION_ISOLATION_LEVEL => PDO::FB_REPEATABLE_READ] + [Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL => Pdo\Firebird::REPEATABLE_READ] ); echo "begin transaction\n"; $dbh->beginTransaction(); @@ -104,7 +104,7 @@ $dbh = new PDO( PDO_FIREBIRD_TEST_DSN, PDO_FIREBIRD_TEST_USER, PDO_FIREBIRD_TEST_PASS, - [PDO::FB_TRANSACTION_ISOLATION_LEVEL => PDO::FB_SERIALIZABLE] + [Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL => Pdo\Firebird::SERIALIZABLE] ); echo "begin transaction\n"; $dbh->beginTransaction();