]> granicus.if.org Git - php/commitdiff
Declare PDORow::queryString property
authorMáté Kocsis <kocsismate@woohoolabs.com>
Wed, 17 Mar 2021 08:39:54 +0000 (09:39 +0100)
committerMáté Kocsis <kocsismate@woohoolabs.com>
Wed, 17 Mar 2021 08:42:35 +0000 (09:42 +0100)
Relates GH-6742

ext/pdo/pdo_stmt.c
ext/pdo/pdo_stmt.stub.php
ext/pdo/pdo_stmt_arginfo.h
ext/pdo/tests/pdo_036.phpt
ext/pdo_sqlite/tests/bug44327_2.phpt

index c7d44028c2f3f815a3a6c0af980d7e5d77bca15c..cadfd664b8df5497b306aede31d4e9d267826829 100644 (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);
 
index 856232e796f978297757b1a9d65366ebcff40877..18e79e56b963287b610f2e8ca9cc494d95cf269e 100644 (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;
 }
index bccf354b88e473fbeb034da49cd194ff2347e950..282938f52a09014aad7cdbde83d1477bb29f5ff0 100644 (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;
 }
index 21c8241c99878dcf3297497aa6d55c123276db64..e27cc253ee19073c352525259a0c1f003f8025e9 100644 (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
index a9b428b2ccf13c119f88368d0d16d7a42862ad42..7229e41a2f99e2486340d3380602add3df152bd0 100644 (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"