Skip to content

Commit f15d527

Browse files
committed
Declare PDORow::queryString property
Relates GH-6742
1 parent 1494e87 commit f15d527

File tree

5 files changed

+26
-16
lines changed

5 files changed

+26
-16
lines changed

ext/pdo/pdo_stmt.c

+11-7
Original file line numberDiff line numberDiff line change
@@ -2262,7 +2262,9 @@ static zval *row_prop_read(zend_object *object, zend_string *name, int type, voi
22622262
ZEND_ASSERT(stmt);
22632263

22642264
ZVAL_NULL(rv);
2265-
if (is_numeric_string(ZSTR_VAL(name), ZSTR_LEN(name), &lval, NULL, 0) == IS_LONG) {
2265+
if (zend_string_equals_literal(name, "queryString")) {
2266+
return zend_std_read_property(&stmt->std, name, type, cache_slot, rv);
2267+
} else if (is_numeric_string(ZSTR_VAL(name), ZSTR_LEN(name), &lval, NULL, 0) == IS_LONG) {
22662268
if (lval >= 0 && lval < stmt->column_count) {
22672269
fetch_value(stmt, rv, lval, NULL);
22682270
}
@@ -2275,9 +2277,6 @@ static zval *row_prop_read(zend_object *object, zend_string *name, int type, voi
22752277
return rv;
22762278
}
22772279
}
2278-
if (zend_string_equals_literal(name, "queryString")) {
2279-
return zend_std_read_property(&stmt->std, name, type, cache_slot, rv);
2280-
}
22812280
}
22822281

22832282
return rv;
@@ -2306,6 +2305,10 @@ static zval *row_dim_read(zend_object *object, zval *member, int type, zval *rv)
23062305
return &EG(uninitialized_zval);
23072306
}
23082307

2308+
if (zend_string_equals_literal(Z_STR_P(member), "queryString")) {
2309+
return zend_std_read_property(&stmt->std, Z_STR_P(member), type, NULL, rv);
2310+
}
2311+
23092312
/* TODO: replace this with a hash of available column names to column
23102313
* numbers */
23112314
for (colno = 0; colno < stmt->column_count; colno++) {
@@ -2314,9 +2317,6 @@ static zval *row_dim_read(zend_object *object, zval *member, int type, zval *rv)
23142317
return rv;
23152318
}
23162319
}
2317-
if (zend_string_equals_literal(Z_STR_P(member), "queryString")) {
2318-
return zend_std_read_property(&stmt->std, Z_STR_P(member), type, NULL, rv);
2319-
}
23202320
}
23212321

23222322
return rv;
@@ -2428,6 +2428,10 @@ static HashTable *row_get_properties_for(zend_object *object, zend_prop_purpose
24282428
}
24292429
props = zend_array_dup(stmt->std.properties);
24302430
for (i = 0; i < stmt->column_count; i++) {
2431+
if (zend_string_equals_literal(stmt->columns[i].name, "queryString")) {
2432+
continue;
2433+
}
2434+
24312435
zval val;
24322436
fetch_value(stmt, &val, i, NULL);
24332437

ext/pdo/pdo_stmt.stub.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44

55
class PDOStatement implements IteratorAggregate
66
{
7-
/** @var string|null */
8-
public $queryString;
7+
public string $queryString;
98

109
/** @return bool */
1110
public function bindColumn(string|int $column, mixed &$var, int $type = 0, int $maxLength = 0, mixed $driverOptions = null) {}
@@ -69,4 +68,5 @@ public function getIterator(): Iterator {}
6968

7069
final class PDORow
7170
{
71+
public string $queryString;
7272
}

ext/pdo/pdo_stmt_arginfo.h

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: d25ba8b84022d6c6208dd45412772d72196c934f */
2+
* Stub hash: 1b8043ec5e3e621819c85828daf9316136fef62e */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_bindColumn, 0, 0, 2)
55
ZEND_ARG_TYPE_MASK(0, column, MAY_BE_STRING|MAY_BE_LONG, NULL)
@@ -144,9 +144,9 @@ static zend_class_entry *register_class_PDOStatement(zend_class_entry *class_ent
144144
zend_class_implements(class_entry, 1, class_entry_IteratorAggregate);
145145

146146
zval property_queryString_default_value;
147-
ZVAL_NULL(&property_queryString_default_value);
147+
ZVAL_UNDEF(&property_queryString_default_value);
148148
zend_string *property_queryString_name = zend_string_init("queryString", sizeof("queryString") - 1, 1);
149-
zend_declare_property_ex(class_entry, property_queryString_name, &property_queryString_default_value, ZEND_ACC_PUBLIC, NULL);
149+
zend_declare_typed_property(class_entry, property_queryString_name, &property_queryString_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));
150150
zend_string_release(property_queryString_name);
151151

152152
return class_entry;
@@ -160,5 +160,11 @@ static zend_class_entry *register_class_PDORow(void)
160160
class_entry = zend_register_internal_class_ex(&ce, NULL);
161161
class_entry->ce_flags |= ZEND_ACC_FINAL;
162162

163+
zval property_queryString_default_value;
164+
ZVAL_UNDEF(&property_queryString_default_value);
165+
zend_string *property_queryString_name = zend_string_init("queryString", sizeof("queryString") - 1, 1);
166+
zend_declare_typed_property(class_entry, property_queryString_name, &property_queryString_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));
167+
zend_string_release(property_queryString_name);
168+
163169
return class_entry;
164170
}

ext/pdo/tests/pdo_036.phpt

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ var_dump($x);
1515

1616
?>
1717
--EXPECTF--
18-
object(PDOStatement)#%d (1) {
18+
object(PDOStatement)#%d (0) {
1919
["queryString"]=>
20-
NULL
20+
uninitialized(string)
2121
}
2222

2323
Fatal error: Uncaught PDOException: You may not create a PDORow manually in %spdo_036.php:8

ext/pdo_sqlite/tests/bug44327_2.phpt

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,6 @@ object(PDOStatement)#%d (1) {
4545
string(23) "select 1 as queryString"
4646
object(PDORow)#%d (1) {
4747
["queryString"]=>
48-
int(1)
48+
string(23) "select 1 as queryString"
4949
}
50-
int(1)
50+
string(23) "select 1 as queryString"

0 commit comments

Comments
 (0)