Skip to content

Commit

Permalink
ext/pdo_firebird: Do not implement new constants in PDO core (#14995)
Browse files Browse the repository at this point in the history
  • Loading branch information
SakiTakamachi authored Jul 17, 2024
1 parent b3a4a6b commit 4cb82b0
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 48 deletions.
6 changes: 3 additions & 3 deletions UPGRADING
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions ext/pdo_firebird/firebird_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down Expand Up @@ -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;
}

Expand Down
5 changes: 0 additions & 5 deletions ext/pdo_firebird/pdo_firebird.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
32 changes: 16 additions & 16 deletions ext/pdo_firebird/tests/transaction_access_mode.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -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";
Expand All @@ -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";
Expand All @@ -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);
?>
Expand Down
34 changes: 17 additions & 17 deletions ext/pdo_firebird/tests/transaction_isolation_level_attr.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -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";
Expand All @@ -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) {
Expand All @@ -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";
Expand All @@ -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";
}
Expand All @@ -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)
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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();
Expand Down Expand Up @@ -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();
Expand Down

0 comments on commit 4cb82b0

Please # to comment.