Declare PDORow::queryString property

Relates GH-6742
This commit is contained in:
Máté Kocsis 2021-03-17 09:39:54 +01:00
parent 1494e87bd0
commit f15d52796e
No known key found for this signature in database
GPG key ID: FD055E41728BF310
5 changed files with 26 additions and 16 deletions

View file

@ -2262,7 +2262,9 @@ static zval *row_prop_read(zend_object *object, zend_string *name, int type, voi
ZEND_ASSERT(stmt);
ZVAL_NULL(rv);
if (is_numeric_string(ZSTR_VAL(name), ZSTR_LEN(name), &lval, NULL, 0) == IS_LONG) {
if (zend_string_equals_literal(name, "queryString")) {
return zend_std_read_property(&stmt->std, name, type, cache_slot, rv);
} else if (is_numeric_string(ZSTR_VAL(name), ZSTR_LEN(name), &lval, NULL, 0) == IS_LONG) {
if (lval >= 0 && lval < stmt->column_count) {
fetch_value(stmt, rv, lval, NULL);
}
@ -2275,9 +2277,6 @@ static zval *row_prop_read(zend_object *object, zend_string *name, int type, voi
return rv;
}
}
if (zend_string_equals_literal(name, "queryString")) {
return zend_std_read_property(&stmt->std, name, type, cache_slot, rv);
}
}
return rv;
@ -2306,6 +2305,10 @@ static zval *row_dim_read(zend_object *object, zval *member, int type, zval *rv)
return &EG(uninitialized_zval);
}
if (zend_string_equals_literal(Z_STR_P(member), "queryString")) {
return zend_std_read_property(&stmt->std, Z_STR_P(member), type, NULL, rv);
}
/* TODO: replace this with a hash of available column names to column
* numbers */
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)
return rv;
}
}
if (zend_string_equals_literal(Z_STR_P(member), "queryString")) {
return zend_std_read_property(&stmt->std, Z_STR_P(member), type, NULL, rv);
}
}
return rv;
@ -2428,6 +2428,10 @@ static HashTable *row_get_properties_for(zend_object *object, zend_prop_purpose
}
props = zend_array_dup(stmt->std.properties);
for (i = 0; i < stmt->column_count; i++) {
if (zend_string_equals_literal(stmt->columns[i].name, "queryString")) {
continue;
}
zval val;
fetch_value(stmt, &val, i, NULL);

View file

@ -4,8 +4,7 @@
class PDOStatement implements IteratorAggregate
{
/** @var string|null */
public $queryString;
public string $queryString;
/** @return bool */
public function bindColumn(string|int $column, mixed &$var, int $type = 0, int $maxLength = 0, mixed $driverOptions = null) {}
@ -69,4 +68,5 @@ class PDOStatement implements IteratorAggregate
final class PDORow
{
public string $queryString;
}

View file

@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: d25ba8b84022d6c6208dd45412772d72196c934f */
* Stub hash: 1b8043ec5e3e621819c85828daf9316136fef62e */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOStatement_bindColumn, 0, 0, 2)
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
zend_class_implements(class_entry, 1, class_entry_IteratorAggregate);
zval property_queryString_default_value;
ZVAL_NULL(&property_queryString_default_value);
ZVAL_UNDEF(&property_queryString_default_value);
zend_string *property_queryString_name = zend_string_init("queryString", sizeof("queryString") - 1, 1);
zend_declare_property_ex(class_entry, property_queryString_name, &property_queryString_default_value, ZEND_ACC_PUBLIC, NULL);
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));
zend_string_release(property_queryString_name);
return class_entry;
@ -160,5 +160,11 @@ static zend_class_entry *register_class_PDORow(void)
class_entry = zend_register_internal_class_ex(&ce, NULL);
class_entry->ce_flags |= ZEND_ACC_FINAL;
zval property_queryString_default_value;
ZVAL_UNDEF(&property_queryString_default_value);
zend_string *property_queryString_name = zend_string_init("queryString", sizeof("queryString") - 1, 1);
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));
zend_string_release(property_queryString_name);
return class_entry;
}

View file

@ -15,9 +15,9 @@ var_dump($x);
?>
--EXPECTF--
object(PDOStatement)#%d (1) {
object(PDOStatement)#%d (0) {
["queryString"]=>
NULL
uninitialized(string)
}
Fatal error: Uncaught PDOException: You may not create a PDORow manually in %spdo_036.php:8

View file

@ -45,6 +45,6 @@ object(PDOStatement)#%d (1) {
string(23) "select 1 as queryString"
object(PDORow)#%d (1) {
["queryString"]=>
int(1)
string(23) "select 1 as queryString"
}
int(1)
string(23) "select 1 as queryString"