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,
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

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;
} 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;
}

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_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;

View file

@ -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);
?>

View file

@ -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)

View file

@ -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();