From a0b6ceb54961d7e0271603cf25cc5f1226a25aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Wed, 9 Oct 2019 09:50:18 +0200 Subject: [PATCH] Add stubs for PDO --- Zend/tests/bug71428.2.phpt | 4 +- ext/pdo/pdo.c | 6 +- ext/pdo/pdo.stub.php | 135 ++++++++++++++++++++ ext/pdo/pdo_arginfo.h | 128 +++++++++++++++++++ ext/pdo/pdo_dbh.c | 82 ++++-------- ext/pdo/pdo_stmt.c | 121 +++++------------- ext/pdo_mysql/tests/pdo_mysql_subclass.phpt | 2 +- 7 files changed, 318 insertions(+), 160 deletions(-) create mode 100644 ext/pdo/pdo.stub.php create mode 100644 ext/pdo/pdo_arginfo.h diff --git a/Zend/tests/bug71428.2.phpt b/Zend/tests/bug71428.2.phpt index 9fc15fc8c5418..0056bd8144a78 100644 --- a/Zend/tests/bug71428.2.phpt +++ b/Zend/tests/bug71428.2.phpt @@ -5,13 +5,13 @@ bug #71428.2: inheritance of ye olde dynamic interfaces --FILE-- row_count); } /* }}} */ @@ -1819,7 +1751,7 @@ static PHP_METHOD(PDOStatement, getColumnMeta) } /* }}} */ -/* {{{ proto bool PDOStatement::setFetchMode(int mode [mixed* params]) +/* {{{ proto bool PDOStatement::setFetchMode(int mode [, mixed* params]) Changes the default fetch mode for subsequent fetches (params have different meaning for different fetch modes) */ int pdo_stmt_setup_fetch_mode(INTERNAL_FUNCTION_PARAMETERS, pdo_stmt_t *stmt, int skip) @@ -2036,6 +1968,8 @@ static PHP_METHOD(PDOStatement, nextRowset) { PHP_STMT_GET_OBJ; + ZEND_PARSE_PARAMETERS_NONE(); + if (!stmt->methods->next_rowset) { pdo_raise_impl_error(stmt->dbh, stmt, "IM001", "driver does not support multiple rowsets"); RETURN_FALSE; @@ -2058,6 +1992,8 @@ static PHP_METHOD(PDOStatement, closeCursor) { PHP_STMT_GET_OBJ; + ZEND_PARSE_PARAMETERS_NONE(); + if (!stmt->methods->cursor_closer) { /* emulate it by fetching and discarding rows */ do { @@ -2095,6 +2031,8 @@ static PHP_METHOD(PDOStatement, debugDumpParams) struct pdo_bound_param_data *param; PHP_STMT_GET_OBJ; + ZEND_PARSE_PARAMETERS_NONE(); + if (out == NULL) { RETURN_FALSE; } @@ -2143,27 +2081,26 @@ static PHP_METHOD(PDOStatement, debugDumpParams) php_stream_close(out); } /* }}} */ - const zend_function_entry pdo_dbstmt_functions[] = { - PHP_ME(PDOStatement, execute, arginfo_pdostatement_execute, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, fetch, arginfo_pdostatement_fetch, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, bindParam, arginfo_pdostatement_bindparam, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, bindColumn, arginfo_pdostatement_bindcolumn, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, bindValue, arginfo_pdostatement_bindvalue, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, rowCount, arginfo_pdostatement__void, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, fetchColumn, arginfo_pdostatement_fetchcolumn, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, fetchAll, arginfo_pdostatement_fetchall, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, fetchObject, arginfo_pdostatement_fetchobject, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, errorCode, arginfo_pdostatement__void, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, errorInfo, arginfo_pdostatement__void, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, setAttribute, arginfo_pdostatement_setattribute, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, getAttribute, arginfo_pdostatement_getattribute, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, columnCount, arginfo_pdostatement__void, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, getColumnMeta, arginfo_pdostatement_getcolumnmeta, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, setFetchMode, arginfo_pdostatement_setfetchmode, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, nextRowset, arginfo_pdostatement__void, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, closeCursor, arginfo_pdostatement__void, ZEND_ACC_PUBLIC) - PHP_ME(PDOStatement, debugDumpParams, arginfo_pdostatement__void, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, execute, arginfo_class_PDOStatement_execute, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, fetch, arginfo_class_PDOStatement_fetch, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, bindParam, arginfo_class_PDOStatement_bindParam, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, bindColumn, arginfo_class_PDOStatement_bindColumn, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, bindValue, arginfo_class_PDOStatement_bindValue, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, rowCount, arginfo_class_PDOStatement_rowCount, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, fetchColumn, arginfo_class_PDOStatement_fetchColumn, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, fetchAll, arginfo_class_PDOStatement_fetchAll, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, fetchObject, arginfo_class_PDOStatement_fetchObject, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, errorCode, arginfo_class_PDOStatement_errorCode, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, errorInfo, arginfo_class_PDOStatement_errorInfo, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, setAttribute, arginfo_class_PDOStatement_setAttribute, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, getAttribute, arginfo_class_PDOStatement_getAttribute, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, columnCount, arginfo_class_PDOStatement_columnCount, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, getColumnMeta, arginfo_class_PDOStatement_getColumnMeta, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, setFetchMode, arginfo_class_PDOStatement_setFetchMode, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, nextRowset, arginfo_class_PDOStatement_nextRowset, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, closeCursor, arginfo_class_PDOStatement_closeCursor, ZEND_ACC_PUBLIC) + PHP_ME(PDOStatement, debugDumpParams, arginfo_class_PDOStatement_debugDumpParams, ZEND_ACC_PUBLIC) PHP_FE_END }; diff --git a/ext/pdo_mysql/tests/pdo_mysql_subclass.phpt b/ext/pdo_mysql/tests/pdo_mysql_subclass.phpt index 604a13bdb38cd..83158b3484110 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_subclass.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_subclass.phpt @@ -24,7 +24,7 @@ MySQLPDOTest::skip(); return parent::exec($statement); } - public function query() { + public function query($statement) { $this->protocol(); return call_user_func_array(array($this, 'parent::query'), func_get_args()); }