Skip to content

Commit 3492bbd

Browse files
authored
Merge pull request #30 from php/pdo-class-8.5
PDO driver class and constant conversion for PHP 8.5
2 parents 0c4f384 + ce26896 commit 3492bbd

File tree

6 files changed

+271
-45
lines changed

6 files changed

+271
-45
lines changed

package.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ Universal Database, IBM Cloudscape, Apache Derby databases and IDS (Informix Dat
142142
<file baseinstalldir="pdo_ibm" name="ibm_driver.c" role="src" />
143143
<file baseinstalldir="pdo_ibm" name="ibm_statement.c" role="src" />
144144
<file baseinstalldir="pdo_ibm" name="pdo_ibm.c" role="src" />
145+
<file baseinstalldir="pdo_ibm" name="pdo_ibm_arginfo.h" role="src" />
146+
<file baseinstalldir="pdo_ibm" name="pdo_ibm.stub.php" role="src" />
145147
<file baseinstalldir="pdo_ibm" name="php_pdo_ibm.h" role="src" />
146148
<file baseinstalldir="pdo_ibm" name="php_pdo_ibm_int.h" role="src" />
147149
</dir>

pdo_ibm.c

Lines changed: 53 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,11 @@
3030
#include "php_pdo_ibm.h"
3131
#include "php_pdo_ibm_int.h"
3232

33-
/* If you declare any globals in php_pdo_ibm.h uncomment this:
34-
*/
33+
/* The class constants are only useful on 8.4+ */
34+
#if PHP_VERSION_ID >= 80400
35+
#include "pdo_ibm_arginfo.h"
36+
#endif
37+
3538
#ifdef PASE
3639
ZEND_DECLARE_MODULE_GLOBALS(pdo_ibm)
3740
#endif
@@ -40,39 +43,34 @@ ZEND_DECLARE_MODULE_GLOBALS(pdo_ibm)
4043
static int le_pdo_ibm;
4144
extern pdo_driver_t pdo_ibm_driver; /* the registration table */
4245

46+
static zend_class_entry *pdo_ibm_ce;
4347

4448
#ifdef PASE /* PASE i5/OS start-up */
4549
#include <as400_protos.h>
4650
#endif /* PASE */
4751

4852
/* {{{ pdo_ibm_deps
4953
*/
50-
#if ZEND_MODULE_API_NO >= 20041225
5154
static zend_module_dep pdo_ibm_deps[] = {
5255
ZEND_MOD_REQUIRED("pdo")
5356
{NULL, NULL, NULL}
5457
};
55-
#endif
5658
/* }}} */
5759

5860
/* {{{ pdo_ibm_module_entry
5961
*/
6062
zend_module_entry pdo_ibm_module_entry =
6163
{
62-
#if ZEND_MODULE_API_NO >= 20041225
6364
STANDARD_MODULE_HEADER_EX, NULL,
6465
pdo_ibm_deps,
65-
#else
66-
STANDARD_MODULE_HEADER,
67-
#endif
6866
"pdo_ibm",
6967
NULL,
7068
PHP_MINIT(pdo_ibm),
7169
PHP_MSHUTDOWN(pdo_ibm),
72-
PHP_RINIT(pdo_ibm), /* Replace with NULL if there's nothing to do at request start */
73-
PHP_RSHUTDOWN(pdo_ibm), /* Replace with NULL if there's nothing to do at request end */
70+
PHP_RINIT(pdo_ibm),
71+
PHP_RSHUTDOWN(pdo_ibm),
7472
PHP_MINFO(pdo_ibm),
75-
PDO_IBM_VERSION, /* Replace with version number for your extension */
73+
PDO_IBM_VERSION,
7674
STANDARD_MODULE_PROPERTIES
7775
};
7876
/* }}} */
@@ -111,6 +109,19 @@ static void php_pdo_ibm_init_globals(zend_pdo_ibm_globals *pdo_ibm_globals)
111109
/* }}} */
112110
#endif /* PASE */
113111

112+
/* PDO_IBM used both SQL_ and I5_ as prefixes for constants */
113+
#if PHP_VERSION_ID >= 80500
114+
#define REGISTER_PDO_IBM_CLASS_CONST_LONG_DEPRECATED_ALIAS_85(base_name, value) \
115+
REGISTER_PDO_CLASS_CONST_LONG_DEPRECATED_ALIAS_85(base_name, "SQL_", "Pdo\\Ibm::", value)
116+
#define REGISTER_PDO_IBM_I5_CLASS_CONST_LONG_DEPRECATED_ALIAS_85(base_name, value) \
117+
REGISTER_PDO_CLASS_CONST_LONG_DEPRECATED_ALIAS_85(base_name, "I5_", "Pdo\\Ibm::", value)
118+
#else
119+
#define REGISTER_PDO_IBM_CLASS_CONST_LONG_DEPRECATED_ALIAS_85(base_name, value) \
120+
REGISTER_PDO_CLASS_CONST_LONG("SQL_" base_name, value)
121+
#define REGISTER_PDO_IBM_I5_CLASS_CONST_LONG_DEPRECATED_ALIAS_85(base_name, value) \
122+
REGISTER_PDO_CLASS_CONST_LONG("I5_" base_name, value)
123+
#endif
124+
114125
/* {{{ PHP_MINIT_FUNCTION
115126
*/
116127
PHP_MINIT_FUNCTION(pdo_ibm)
@@ -121,33 +132,43 @@ PHP_MINIT_FUNCTION(pdo_ibm)
121132
REGISTER_INI_ENTRIES();
122133
#endif
123134

135+
if (FAILURE == php_pdo_register_driver(&pdo_ibm_driver)) {
136+
return FAILURE;
137+
}
138+
124139
#ifndef PASE /* i5/OS no support trusted */
125-
REGISTER_PDO_CLASS_CONST_LONG("SQL_ATTR_USE_TRUSTED_CONTEXT", (long) PDO_SQL_ATTR_USE_TRUSTED_CONTEXT);
126-
REGISTER_PDO_CLASS_CONST_LONG("SQL_ATTR_TRUSTED_CONTEXT_USERID", (long) PDO_SQL_ATTR_TRUSTED_CONTEXT_USERID);
127-
REGISTER_PDO_CLASS_CONST_LONG("SQL_ATTR_TRUSTED_CONTEXT_PASSWORD", (long) PDO_SQL_ATTR_TRUSTED_CONTEXT_PASSWORD);
140+
REGISTER_PDO_IBM_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("ATTR_USE_TRUSTED_CONTEXT", (long) PDO_SQL_ATTR_USE_TRUSTED_CONTEXT);
141+
REGISTER_PDO_IBM_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("ATTR_TRUSTED_CONTEXT_USERID", (long) PDO_SQL_ATTR_TRUSTED_CONTEXT_USERID);
142+
REGISTER_PDO_IBM_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("ATTR_TRUSTED_CONTEXT_PASSWORD", (long) PDO_SQL_ATTR_TRUSTED_CONTEXT_PASSWORD);
128143
#else /* PASE i5/OS introduced (1.3.4) */
129-
REGISTER_PDO_CLASS_CONST_LONG("I5_ATTR_DBC_SYS_NAMING", (long)PDO_I5_ATTR_DBC_SYS_NAMING);
144+
REGISTER_PDO_IBM_I5_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("ATTR_DBC_SYS_NAMING", (long)PDO_I5_ATTR_DBC_SYS_NAMING);
130145

131-
REGISTER_PDO_CLASS_CONST_LONG("I5_ATTR_COMMIT", (long)PDO_I5_ATTR_COMMIT);
132-
REGISTER_PDO_CLASS_CONST_LONG("I5_TXN_NO_COMMIT", (long)PDO_I5_TXN_NO_COMMIT);
133-
REGISTER_PDO_CLASS_CONST_LONG("I5_TXN_READ_UNCOMMITTED", (long)PDO_I5_TXN_READ_UNCOMMITTED);
134-
REGISTER_PDO_CLASS_CONST_LONG("I5_TXN_READ_COMMITTED", (long)PDO_I5_TXN_READ_COMMITTED);
135-
REGISTER_PDO_CLASS_CONST_LONG("I5_TXN_REPEATABLE_READ", (long)PDO_I5_TXN_REPEATABLE_READ);
136-
REGISTER_PDO_CLASS_CONST_LONG("I5_TXN_SERIALIZABLE", (long)PDO_I5_TXN_SERIALIZABLE);
137-
138-
REGISTER_PDO_CLASS_CONST_LONG("I5_ATTR_JOB_SORT", (long)PDO_I5_ATTR_JOB_SORT);
139-
REGISTER_PDO_CLASS_CONST_LONG("I5_ATTR_DBC_LIBL", (long)PDO_I5_ATTR_DBC_LIBL);
140-
REGISTER_PDO_CLASS_CONST_LONG("I5_ATTR_DBC_CURLIB", (long)PDO_I5_ATTR_DBC_CURLIB);
146+
REGISTER_PDO_IBM_I5_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("ATTR_COMMIT", (long)PDO_I5_ATTR_COMMIT);
147+
REGISTER_PDO_IBM_I5_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("TXN_NO_COMMIT", (long)PDO_I5_TXN_NO_COMMIT);
148+
REGISTER_PDO_IBM_I5_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("TXN_READ_UNCOMMITTED", (long)PDO_I5_TXN_READ_UNCOMMITTED);
149+
REGISTER_PDO_IBM_I5_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("TXN_READ_COMMITTED", (long)PDO_I5_TXN_READ_COMMITTED);
150+
REGISTER_PDO_IBM_I5_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("TXN_REPEATABLE_READ", (long)PDO_I5_TXN_REPEATABLE_READ);
151+
REGISTER_PDO_IBM_I5_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("TXN_SERIALIZABLE", (long)PDO_I5_TXN_SERIALIZABLE);
152+
153+
REGISTER_PDO_IBM_I5_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("ATTR_JOB_SORT", (long)PDO_I5_ATTR_JOB_SORT);
154+
REGISTER_PDO_IBM_I5_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("ATTR_DBC_LIBL", (long)PDO_I5_ATTR_DBC_LIBL);
155+
REGISTER_PDO_IBM_I5_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("ATTR_DBC_CURLIB", (long)PDO_I5_ATTR_DBC_CURLIB);
141156
#endif /* PASE */
142157

143158
/* Client information variables */
144-
REGISTER_PDO_CLASS_CONST_LONG("SQL_ATTR_INFO_USERID", (long) PDO_SQL_ATTR_INFO_USERID);
145-
REGISTER_PDO_CLASS_CONST_LONG("SQL_ATTR_INFO_ACCTSTR", (long) PDO_SQL_ATTR_INFO_ACCTSTR);
146-
REGISTER_PDO_CLASS_CONST_LONG("SQL_ATTR_INFO_APPLNAME", (long) PDO_SQL_ATTR_INFO_APPLNAME);
147-
REGISTER_PDO_CLASS_CONST_LONG("SQL_ATTR_INFO_WRKSTNNAME", (long) PDO_SQL_ATTR_INFO_WRKSTNNAME);
148-
149-
php_pdo_register_driver(&pdo_ibm_driver);
150-
return TRUE;
159+
REGISTER_PDO_IBM_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("ATTR_INFO_USERID", (long) PDO_SQL_ATTR_INFO_USERID);
160+
REGISTER_PDO_IBM_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("ATTR_INFO_ACCTSTR", (long) PDO_SQL_ATTR_INFO_ACCTSTR);
161+
REGISTER_PDO_IBM_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("ATTR_INFO_APPLNAME", (long) PDO_SQL_ATTR_INFO_APPLNAME);
162+
REGISTER_PDO_IBM_CLASS_CONST_LONG_DEPRECATED_ALIAS_85("ATTR_INFO_WRKSTNNAME", (long) PDO_SQL_ATTR_INFO_WRKSTNNAME);
163+
164+
#if PHP_VERSION_ID >= 80400
165+
pdo_ibm_ce = register_class_Pdo_Ibm(pdo_dbh_ce);
166+
pdo_ibm_ce->create_object = pdo_dbh_new;
167+
168+
return php_pdo_register_driver_specific_ce(&pdo_ibm_driver, pdo_ibm_ce);
169+
#else
170+
return TRUE;
171+
#endif
151172
}
152173
/* }}} */
153174

pdo_ibm.stub.php

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
3+
/**
4+
* @generate-class-entries
5+
*
6+
* This driver specific PDO class is only used for PHP 8.4+
7+
*/
8+
9+
namespace Pdo {
10+
/**
11+
* @strict-properties
12+
* @not-serializable
13+
*/
14+
class Ibm extends \PDO
15+
{
16+
/** @cvalue PDO_SQL_ATTR_INFO_USERID */
17+
public const int ATTR_INFO_USERID = UNKNOWN;
18+
19+
/** @cvalue PDO_SQL_ATTR_INFO_ACCTSTR */
20+
public const int ATTR_INFO_ACCTSTR = UNKNOWN;
21+
22+
/** @cvalue PDO_SQL_ATTR_INFO_APPLNAME */
23+
public const int ATTR_INFO_APPLNAME = UNKNOWN;
24+
25+
/** @cvalue PDO_SQL_ATTR_INFO_WRKSTNNAME */
26+
public const int ATTR_INFO_WRKSTNNAME = UNKNOWN;
27+
28+
#ifndef PASE
29+
/** @cvalue PDO_SQL_ATTR_USE_TRUSTED_CONTEXT */
30+
public const int ATTR_USE_TRUSTED_CONTEXT = UNKNOWN;
31+
32+
/** @cvalue PDO_SQL_ATTR_TRUSTED_CONTEXT_USERID */
33+
public const int ATTR_TRUSTED_CONTEXT_USERID = UNKNOWN;
34+
35+
/** @cvalue PDO_SQL_ATTR_TRUSTED_CONTEXT_PASSWORD */
36+
public const int ATTR_TRUSTED_CONTEXT_PASSWORD = UNKNOWN;
37+
#endif
38+
#ifdef PASE
39+
/** @cvalue PDO_I5_ATTR_DBC_SYS_NAMING */
40+
public const int ATTR_DBC_SYS_NAMING = UNKNOWN;
41+
42+
/** @cvalue PDO_I5_ATTR_COMMIT */
43+
public const int ATTR_COMMIT = UNKNOWN;
44+
45+
/** @cvalue PDO_I5_TXN_NO_COMMIT */
46+
public const int TXN_NO_COMMIT = UNKNOWN;
47+
48+
/** @cvalue PDO_I5_TXN_READ_UNCOMMITTED */
49+
public const int TXN_READ_UNCOMMITTED = UNKNOWN;
50+
51+
/** @cvalue PDO_I5_TXN_READ_COMMITTED */
52+
public const int TXN_READ_COMMITTED = UNKNOWN;
53+
54+
/** @cvalue PDO_I5_TXN_REPEATABLE_READ */
55+
public const int TXN_REPEATABLE_READ = UNKNOWN;
56+
57+
/** @cvalue PDO_I5_TXN_SERIALIZABLE */
58+
public const int TXN_SERIALIZABLE = UNKNOWN;
59+
60+
/** @cvalue PDO_I5_ATTR_JOB_SORT */
61+
public const int ATTR_JOB_SORT = UNKNOWN;
62+
63+
/** @cvalue PDO_I5_ATTR_DBC_LIBL */
64+
public const int ATTR_DBC_LIBL = UNKNOWN;
65+
66+
/** @cvalue PDO_I5_ATTR_DBC_CURLIB */
67+
public const int ATTR_DBC_CURLIB = UNKNOWN;
68+
#endif
69+
}
70+
}
71+

pdo_ibm_arginfo.h

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
/* This is a generated file, edit the .stub.php file instead.
2+
* Stub hash: e6e91d0261810097515617adf9364f2ddf293a43 */
3+
4+
static zend_class_entry *register_class_Pdo_Ibm(zend_class_entry *class_entry_PDO)
5+
{
6+
zend_class_entry ce, *class_entry;
7+
8+
INIT_NS_CLASS_ENTRY(ce, "Pdo", "Ibm", NULL);
9+
class_entry = zend_register_internal_class_with_flags(&ce, class_entry_PDO, ZEND_ACC_NO_DYNAMIC_PROPERTIES|ZEND_ACC_NOT_SERIALIZABLE);
10+
11+
zval const_ATTR_INFO_USERID_value;
12+
ZVAL_LONG(&const_ATTR_INFO_USERID_value, PDO_SQL_ATTR_INFO_USERID);
13+
zend_string *const_ATTR_INFO_USERID_name = zend_string_init_interned("ATTR_INFO_USERID", sizeof("ATTR_INFO_USERID") - 1, 1);
14+
zend_declare_typed_class_constant(class_entry, const_ATTR_INFO_USERID_name, &const_ATTR_INFO_USERID_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
15+
zend_string_release(const_ATTR_INFO_USERID_name);
16+
17+
zval const_ATTR_INFO_ACCTSTR_value;
18+
ZVAL_LONG(&const_ATTR_INFO_ACCTSTR_value, PDO_SQL_ATTR_INFO_ACCTSTR);
19+
zend_string *const_ATTR_INFO_ACCTSTR_name = zend_string_init_interned("ATTR_INFO_ACCTSTR", sizeof("ATTR_INFO_ACCTSTR") - 1, 1);
20+
zend_declare_typed_class_constant(class_entry, const_ATTR_INFO_ACCTSTR_name, &const_ATTR_INFO_ACCTSTR_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
21+
zend_string_release(const_ATTR_INFO_ACCTSTR_name);
22+
23+
zval const_ATTR_INFO_APPLNAME_value;
24+
ZVAL_LONG(&const_ATTR_INFO_APPLNAME_value, PDO_SQL_ATTR_INFO_APPLNAME);
25+
zend_string *const_ATTR_INFO_APPLNAME_name = zend_string_init_interned("ATTR_INFO_APPLNAME", sizeof("ATTR_INFO_APPLNAME") - 1, 1);
26+
zend_declare_typed_class_constant(class_entry, const_ATTR_INFO_APPLNAME_name, &const_ATTR_INFO_APPLNAME_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
27+
zend_string_release(const_ATTR_INFO_APPLNAME_name);
28+
29+
zval const_ATTR_INFO_WRKSTNNAME_value;
30+
ZVAL_LONG(&const_ATTR_INFO_WRKSTNNAME_value, PDO_SQL_ATTR_INFO_WRKSTNNAME);
31+
zend_string *const_ATTR_INFO_WRKSTNNAME_name = zend_string_init_interned("ATTR_INFO_WRKSTNNAME", sizeof("ATTR_INFO_WRKSTNNAME") - 1, 1);
32+
zend_declare_typed_class_constant(class_entry, const_ATTR_INFO_WRKSTNNAME_name, &const_ATTR_INFO_WRKSTNNAME_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
33+
zend_string_release(const_ATTR_INFO_WRKSTNNAME_name);
34+
#if !defined(PASE)
35+
36+
zval const_ATTR_USE_TRUSTED_CONTEXT_value;
37+
ZVAL_LONG(&const_ATTR_USE_TRUSTED_CONTEXT_value, PDO_SQL_ATTR_USE_TRUSTED_CONTEXT);
38+
zend_string *const_ATTR_USE_TRUSTED_CONTEXT_name = zend_string_init_interned("ATTR_USE_TRUSTED_CONTEXT", sizeof("ATTR_USE_TRUSTED_CONTEXT") - 1, 1);
39+
zend_declare_typed_class_constant(class_entry, const_ATTR_USE_TRUSTED_CONTEXT_name, &const_ATTR_USE_TRUSTED_CONTEXT_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
40+
zend_string_release(const_ATTR_USE_TRUSTED_CONTEXT_name);
41+
42+
zval const_ATTR_TRUSTED_CONTEXT_USERID_value;
43+
ZVAL_LONG(&const_ATTR_TRUSTED_CONTEXT_USERID_value, PDO_SQL_ATTR_TRUSTED_CONTEXT_USERID);
44+
zend_string *const_ATTR_TRUSTED_CONTEXT_USERID_name = zend_string_init_interned("ATTR_TRUSTED_CONTEXT_USERID", sizeof("ATTR_TRUSTED_CONTEXT_USERID") - 1, 1);
45+
zend_declare_typed_class_constant(class_entry, const_ATTR_TRUSTED_CONTEXT_USERID_name, &const_ATTR_TRUSTED_CONTEXT_USERID_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
46+
zend_string_release(const_ATTR_TRUSTED_CONTEXT_USERID_name);
47+
48+
zval const_ATTR_TRUSTED_CONTEXT_PASSWORD_value;
49+
ZVAL_LONG(&const_ATTR_TRUSTED_CONTEXT_PASSWORD_value, PDO_SQL_ATTR_TRUSTED_CONTEXT_PASSWORD);
50+
zend_string *const_ATTR_TRUSTED_CONTEXT_PASSWORD_name = zend_string_init_interned("ATTR_TRUSTED_CONTEXT_PASSWORD", sizeof("ATTR_TRUSTED_CONTEXT_PASSWORD") - 1, 1);
51+
zend_declare_typed_class_constant(class_entry, const_ATTR_TRUSTED_CONTEXT_PASSWORD_name, &const_ATTR_TRUSTED_CONTEXT_PASSWORD_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
52+
zend_string_release(const_ATTR_TRUSTED_CONTEXT_PASSWORD_name);
53+
#endif
54+
#if defined(PASE)
55+
56+
zval const_ATTR_DBC_SYS_NAMING_value;
57+
ZVAL_LONG(&const_ATTR_DBC_SYS_NAMING_value, PDO_I5_ATTR_DBC_SYS_NAMING);
58+
zend_string *const_ATTR_DBC_SYS_NAMING_name = zend_string_init_interned("ATTR_DBC_SYS_NAMING", sizeof("ATTR_DBC_SYS_NAMING") - 1, 1);
59+
zend_declare_typed_class_constant(class_entry, const_ATTR_DBC_SYS_NAMING_name, &const_ATTR_DBC_SYS_NAMING_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
60+
zend_string_release(const_ATTR_DBC_SYS_NAMING_name);
61+
62+
zval const_ATTR_COMMIT_value;
63+
ZVAL_LONG(&const_ATTR_COMMIT_value, PDO_I5_ATTR_COMMIT);
64+
zend_string *const_ATTR_COMMIT_name = zend_string_init_interned("ATTR_COMMIT", sizeof("ATTR_COMMIT") - 1, 1);
65+
zend_declare_typed_class_constant(class_entry, const_ATTR_COMMIT_name, &const_ATTR_COMMIT_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
66+
zend_string_release(const_ATTR_COMMIT_name);
67+
68+
zval const_TXN_NO_COMMIT_value;
69+
ZVAL_LONG(&const_TXN_NO_COMMIT_value, PDO_I5_TXN_NO_COMMIT);
70+
zend_string *const_TXN_NO_COMMIT_name = zend_string_init_interned("TXN_NO_COMMIT", sizeof("TXN_NO_COMMIT") - 1, 1);
71+
zend_declare_typed_class_constant(class_entry, const_TXN_NO_COMMIT_name, &const_TXN_NO_COMMIT_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
72+
zend_string_release(const_TXN_NO_COMMIT_name);
73+
74+
zval const_TXN_READ_UNCOMMITTED_value;
75+
ZVAL_LONG(&const_TXN_READ_UNCOMMITTED_value, PDO_I5_TXN_READ_UNCOMMITTED);
76+
zend_string *const_TXN_READ_UNCOMMITTED_name = zend_string_init_interned("TXN_READ_UNCOMMITTED", sizeof("TXN_READ_UNCOMMITTED") - 1, 1);
77+
zend_declare_typed_class_constant(class_entry, const_TXN_READ_UNCOMMITTED_name, &const_TXN_READ_UNCOMMITTED_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
78+
zend_string_release(const_TXN_READ_UNCOMMITTED_name);
79+
80+
zval const_TXN_READ_COMMITTED_value;
81+
ZVAL_LONG(&const_TXN_READ_COMMITTED_value, PDO_I5_TXN_READ_COMMITTED);
82+
zend_string *const_TXN_READ_COMMITTED_name = zend_string_init_interned("TXN_READ_COMMITTED", sizeof("TXN_READ_COMMITTED") - 1, 1);
83+
zend_declare_typed_class_constant(class_entry, const_TXN_READ_COMMITTED_name, &const_TXN_READ_COMMITTED_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
84+
zend_string_release(const_TXN_READ_COMMITTED_name);
85+
86+
zval const_TXN_REPEATABLE_READ_value;
87+
ZVAL_LONG(&const_TXN_REPEATABLE_READ_value, PDO_I5_TXN_REPEATABLE_READ);
88+
zend_string *const_TXN_REPEATABLE_READ_name = zend_string_init_interned("TXN_REPEATABLE_READ", sizeof("TXN_REPEATABLE_READ") - 1, 1);
89+
zend_declare_typed_class_constant(class_entry, const_TXN_REPEATABLE_READ_name, &const_TXN_REPEATABLE_READ_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
90+
zend_string_release(const_TXN_REPEATABLE_READ_name);
91+
92+
zval const_TXN_SERIALIZABLE_value;
93+
ZVAL_LONG(&const_TXN_SERIALIZABLE_value, PDO_I5_TXN_SERIALIZABLE);
94+
zend_string *const_TXN_SERIALIZABLE_name = zend_string_init_interned("TXN_SERIALIZABLE", sizeof("TXN_SERIALIZABLE") - 1, 1);
95+
zend_declare_typed_class_constant(class_entry, const_TXN_SERIALIZABLE_name, &const_TXN_SERIALIZABLE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
96+
zend_string_release(const_TXN_SERIALIZABLE_name);
97+
98+
zval const_ATTR_JOB_SORT_value;
99+
ZVAL_LONG(&const_ATTR_JOB_SORT_value, PDO_I5_ATTR_JOB_SORT);
100+
zend_string *const_ATTR_JOB_SORT_name = zend_string_init_interned("ATTR_JOB_SORT", sizeof("ATTR_JOB_SORT") - 1, 1);
101+
zend_declare_typed_class_constant(class_entry, const_ATTR_JOB_SORT_name, &const_ATTR_JOB_SORT_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
102+
zend_string_release(const_ATTR_JOB_SORT_name);
103+
104+
zval const_ATTR_DBC_LIBL_value;
105+
ZVAL_LONG(&const_ATTR_DBC_LIBL_value, PDO_I5_ATTR_DBC_LIBL);
106+
zend_string *const_ATTR_DBC_LIBL_name = zend_string_init_interned("ATTR_DBC_LIBL", sizeof("ATTR_DBC_LIBL") - 1, 1);
107+
zend_declare_typed_class_constant(class_entry, const_ATTR_DBC_LIBL_name, &const_ATTR_DBC_LIBL_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
108+
zend_string_release(const_ATTR_DBC_LIBL_name);
109+
110+
zval const_ATTR_DBC_CURLIB_value;
111+
ZVAL_LONG(&const_ATTR_DBC_CURLIB_value, PDO_I5_ATTR_DBC_CURLIB);
112+
zend_string *const_ATTR_DBC_CURLIB_name = zend_string_init_interned("ATTR_DBC_CURLIB", sizeof("ATTR_DBC_CURLIB") - 1, 1);
113+
zend_declare_typed_class_constant(class_entry, const_ATTR_DBC_CURLIB_name, &const_ATTR_DBC_CURLIB_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
114+
zend_string_release(const_ATTR_DBC_CURLIB_name);
115+
#endif
116+
117+
return class_entry;
118+
}

tests/fvt.inc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ abstract class FVTTest
3939
public function connect($autoCommit=true, $useLibl=false, $useIsolation=false)
4040
{
4141
$options = array(PDO::ATTR_AUTOCOMMIT=>$autoCommit);
42-
$this->db = new PDO($this->dsn, $this->user, $this->pass, $options);
42+
// Use the driver subclass on PHP 8.4+
43+
$this->db = version_compare(PHP_VERSION, '8.4.0') >= 0
44+
? PDO::connect($this->dsn, $this->user, $this->pass, $options)
45+
: new PDO($this->dsn, $this->user, $this->pass, $options);
4346
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
4447
$this->db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
4548
$this->db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);

0 commit comments

Comments
 (0)