ext/pdo_firebird: Do not implement new constants in PDO core (#14995)

This commit is contained in:
Saki Takamachi 2024-07-18 08:12:17 +09:00 committed by GitHub
parent b3a4a6b1e1
commit 4cb82b039e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 43 additions and 48 deletions

View file

@ -504,9 +504,9 @@ PHP 8.4 UPGRADE NOTES
. getAttribute, enabled to get values of FB_ATTR_DATE_FORMAT, FB_ATTR_TIME_FORMAT, . getAttribute, enabled to get values of FB_ATTR_DATE_FORMAT, FB_ATTR_TIME_FORMAT,
FB_ATTR_TIMESTAMP_FORMAT. FB_ATTR_TIMESTAMP_FORMAT.
. Added new attributes to specify transaction isolation level and access mode. . Added new attributes to specify transaction isolation level and access mode.
Along with these, five constants (PDO::FB_TRANSACTION_ISOLATION_LEVEL, Along with these, five constants (Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL,
PDO::FB_READ_COMMITTED, PDO::FB_REPEATABLE_READ, PDO::FB_SERIALIZABLE, Pdo\Firebird::READ_COMMITTED, Pdo\Firebird::REPEATABLE_READ,
PDO::FB_WRITABLE_TRANSACTION) have been added. Pdo\Firebird::SERIALIZABLE, Pdo\Firebird::WRITABLE_TRANSACTION) have been added.
. When using persistent connections, there is now a liveness check in the . When using persistent connections, there is now a liveness check in the
constructor. constructor.
. The content that is built changes depending on the value of FB_API_VER in . The content that is built changes depending on the value of FB_API_VER in

View file

@ -1080,8 +1080,8 @@ static bool pdo_firebird_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val
*/ */
H->txn_isolation_level = lval; H->txn_isolation_level = lval;
} else { } else {
zend_value_error("PDO::FB_TRANSACTION_ISOLATION_LEVEL must be a valid transaction isolation level " zend_value_error("Pdo\\Firebird::TRANSACTION_ISOLATION_LEVEL must be a valid transaction isolation level "
"(PDO::FB_READ_COMMITTED, PDO::FB_REPEATABLE_READ, or PDO::FB_SERIALIZABLE)"); "(Pdo\\Firebird::READ_COMMITTED, Pdo\\Firebird::REPEATABLE_READ, or Pdo\\Firebird::SERIALIZABLE)");
return false; 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; H->txn_isolation_level = txn_isolation_level;
} else { } else {
zend_value_error("PDO::FB_TRANSACTION_ISOLATION_LEVEL must be a valid transaction isolation level " zend_value_error("Pdo\\Firebird::TRANSACTION_ISOLATION_LEVEL must be a valid transaction isolation level "
"(PDO::FB_READ_COMMITTED, PDO::FB_REPEATABLE_READ, or PDO::FB_SERIALIZABLE)"); "(Pdo\\Firebird::READ_COMMITTED, Pdo\\Firebird::REPEATABLE_READ, or Pdo\\Firebird::SERIALIZABLE)");
ret = 0; ret = 0;
} }

View file

@ -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_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_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_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)) { if (FAILURE == php_pdo_register_driver(&pdo_firebird_driver)) {
return FAILURE; return FAILURE;

View file

@ -29,11 +29,11 @@ foreach ($values as $value) {
PDO_FIREBIRD_TEST_USER, PDO_FIREBIRD_TEST_USER,
PDO_FIREBIRD_TEST_PASS, 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"; echo "OK: {$value['label']}\n";
} else { } else {
echo "NG: {$value['label']}\n"; echo "NG: {$value['label']}\n";
@ -54,8 +54,8 @@ $dbh = new PDO(
$dbh->query("CREATE TABLE {$table} (val INT)"); $dbh->query("CREATE TABLE {$table} (val INT)");
echo "writable\n"; echo "writable\n";
var_dump($dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, true)); var_dump($dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, true));
if ($dbh->getAttribute(PDO::FB_WRITABLE_TRANSACTION) === true) { if ($dbh->getAttribute(Pdo\Firebird::WRITABLE_TRANSACTION) === true) {
echo "OK: writable\n"; echo "OK: writable\n";
} else { } else {
echo "NG: writable\n"; echo "NG: writable\n";
@ -67,8 +67,8 @@ var_dump($r->fetchAll());
echo "\n"; echo "\n";
echo "readonly\n"; echo "readonly\n";
var_dump($dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, false)); var_dump($dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, false));
if ($dbh->getAttribute(PDO::FB_WRITABLE_TRANSACTION) === false) { if ($dbh->getAttribute(Pdo\Firebird::WRITABLE_TRANSACTION) === false) {
echo "OK: readonly\n"; echo "OK: readonly\n";
} else { } else {
echo "NG: readonly\n"; echo "NG: readonly\n";
@ -84,47 +84,47 @@ var_dump($r->fetchAll());
echo "\n"; echo "\n";
echo "========== Set attr in setAttribute while transaction ==========\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(); $dbh->beginTransaction();
echo "writable to writable\n"; echo "writable to writable\n";
try { try {
$dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, true); $dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, true);
} catch (PDOException $e) { } catch (PDOException $e) {
echo $e->getMessage()."\n"; echo $e->getMessage()."\n";
} }
var_dump($dbh->getAttribute(PDO::FB_WRITABLE_TRANSACTION)); var_dump($dbh->getAttribute(Pdo\Firebird::WRITABLE_TRANSACTION));
echo "\n"; echo "\n";
echo "writable to readonly\n"; echo "writable to readonly\n";
try { try {
$dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, false); $dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, false);
} catch (PDOException $e) { } catch (PDOException $e) {
echo $e->getMessage()."\n"; echo $e->getMessage()."\n";
} }
var_dump($dbh->getAttribute(PDO::FB_WRITABLE_TRANSACTION)); var_dump($dbh->getAttribute(Pdo\Firebird::WRITABLE_TRANSACTION));
echo "\n"; echo "\n";
$dbh->commit(); $dbh->commit();
$dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, false); $dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, false);
$dbh->beginTransaction(); $dbh->beginTransaction();
echo "readonly to writable\n"; echo "readonly to writable\n";
try { try {
$dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, true); $dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, true);
} catch (PDOException $e) { } catch (PDOException $e) {
echo $e->getMessage()."\n"; echo $e->getMessage()."\n";
} }
var_dump($dbh->getAttribute(PDO::FB_WRITABLE_TRANSACTION)); var_dump($dbh->getAttribute(Pdo\Firebird::WRITABLE_TRANSACTION));
echo "\n"; echo "\n";
echo "readonly to readonly\n"; echo "readonly to readonly\n";
try { try {
$dbh->setAttribute(PDO::FB_WRITABLE_TRANSACTION, false); $dbh->setAttribute(Pdo\Firebird::WRITABLE_TRANSACTION, false);
} catch (PDOException $e) { } catch (PDOException $e) {
echo $e->getMessage()."\n"; echo $e->getMessage()."\n";
} }
var_dump($dbh->getAttribute(PDO::FB_WRITABLE_TRANSACTION)); var_dump($dbh->getAttribute(Pdo\Firebird::WRITABLE_TRANSACTION));
unset($dbh); unset($dbh);
?> ?>

View file

@ -15,9 +15,9 @@ $dbh = getDbConnection();
unset($dbh); unset($dbh);
$levelStrs = [ $levelStrs = [
'PDO::FB_READ_COMMITTED', 'Pdo\\Firebird::READ_COMMITTED',
'PDO::FB_REPEATABLE_READ', 'Pdo\\Firebird::REPEATABLE_READ',
'PDO::FB_SERIALIZABLE', 'Pdo\\Firebird::SERIALIZABLE',
]; ];
echo "========== Set attr in construct ==========\n"; echo "========== Set attr in construct ==========\n";
@ -29,11 +29,11 @@ foreach ($levelStrs as $levelStr) {
PDO_FIREBIRD_TEST_USER, PDO_FIREBIRD_TEST_USER,
PDO_FIREBIRD_TEST_PASS, 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"; echo "OK: {$levelStr}\n";
} else { } else {
echo "NG: {$levelStr}\n"; echo "NG: {$levelStr}\n";
@ -49,7 +49,7 @@ try {
PDO_FIREBIRD_TEST_USER, PDO_FIREBIRD_TEST_USER,
PDO_FIREBIRD_TEST_PASS, 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) { } catch (Throwable $e) {
@ -70,9 +70,9 @@ $dbh = new PDO(
foreach ($levelStrs as $levelStr) { foreach ($levelStrs as $levelStr) {
$level = constant($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"; echo "OK: {$levelStr}\n";
} else { } else {
echo "NG: {$levelStr}\n"; echo "NG: {$levelStr}\n";
@ -81,7 +81,7 @@ foreach ($levelStrs as $levelStr) {
echo "Invalid value\n"; echo "Invalid value\n";
try { 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) { } catch (Throwable $e) {
echo $e->getMessage()."\n"; echo $e->getMessage()."\n";
} }
@ -90,18 +90,18 @@ unset($dbh);
?> ?>
--EXPECT-- --EXPECT--
========== Set attr in construct ========== ========== Set attr in construct ==========
OK: PDO::FB_READ_COMMITTED OK: Pdo\Firebird::READ_COMMITTED
OK: PDO::FB_REPEATABLE_READ OK: Pdo\Firebird::REPEATABLE_READ
OK: PDO::FB_SERIALIZABLE OK: Pdo\Firebird::SERIALIZABLE
Invalid value 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 ========== ========== Set attr in setAttribute ==========
bool(true) bool(true)
OK: PDO::FB_READ_COMMITTED OK: Pdo\Firebird::READ_COMMITTED
bool(true) bool(true)
OK: PDO::FB_REPEATABLE_READ OK: Pdo\Firebird::REPEATABLE_READ
bool(true) bool(true)
OK: PDO::FB_SERIALIZABLE OK: Pdo\Firebird::SERIALIZABLE
Invalid value 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)

View file

@ -51,7 +51,7 @@ $dbh = new PDO(
PDO_FIREBIRD_TEST_DSN, PDO_FIREBIRD_TEST_DSN,
PDO_FIREBIRD_TEST_USER, PDO_FIREBIRD_TEST_USER,
PDO_FIREBIRD_TEST_PASS, 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"; echo "begin transaction\n";
$dbh->beginTransaction(); $dbh->beginTransaction();
@ -74,7 +74,7 @@ $dbh = new PDO(
PDO_FIREBIRD_TEST_DSN, PDO_FIREBIRD_TEST_DSN,
PDO_FIREBIRD_TEST_USER, PDO_FIREBIRD_TEST_USER,
PDO_FIREBIRD_TEST_PASS, 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"; echo "begin transaction\n";
$dbh->beginTransaction(); $dbh->beginTransaction();
@ -104,7 +104,7 @@ $dbh = new PDO(
PDO_FIREBIRD_TEST_DSN, PDO_FIREBIRD_TEST_DSN,
PDO_FIREBIRD_TEST_USER, PDO_FIREBIRD_TEST_USER,
PDO_FIREBIRD_TEST_PASS, PDO_FIREBIRD_TEST_PASS,
[PDO::FB_TRANSACTION_ISOLATION_LEVEL => PDO::FB_SERIALIZABLE] [Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL => Pdo\Firebird::SERIALIZABLE]
); );
echo "begin transaction\n"; echo "begin transaction\n";
$dbh->beginTransaction(); $dbh->beginTransaction();