summaryrefslogtreecommitdiff
path: root/ext/sqlite3
diff options
context:
space:
mode:
Diffstat (limited to 'ext/sqlite3')
-rw-r--r--ext/sqlite3/php_sqlite3.h2
-rw-r--r--ext/sqlite3/php_sqlite3_structs.h2
-rw-r--r--ext/sqlite3/sqlite3.c258
-rw-r--r--ext/sqlite3/sqlite3.stub.php128
-rw-r--r--ext/sqlite3/sqlite3_arginfo.h143
-rw-r--r--ext/sqlite3/tests/sqlite3_33_reset.phpt4
-rw-r--r--ext/sqlite3/tests/sqlite3_enable_exceptions.phpt4
7 files changed, 340 insertions, 201 deletions
diff --git a/ext/sqlite3/php_sqlite3.h b/ext/sqlite3/php_sqlite3.h
index ca09e341ab..9dff343f90 100644
--- a/ext/sqlite3/php_sqlite3.h
+++ b/ext/sqlite3/php_sqlite3.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/ext/sqlite3/php_sqlite3_structs.h b/ext/sqlite3/php_sqlite3_structs.h
index f189ea30af..93bdc3b423 100644
--- a/ext/sqlite3/php_sqlite3_structs.h
+++ b/ext/sqlite3/php_sqlite3_structs.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c
index 1c337ee6cb..e66fc1b192 100644
--- a/ext/sqlite3/sqlite3.c
+++ b/ext/sqlite3/sqlite3.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -25,6 +23,7 @@
#include "ext/standard/info.h"
#include "php_sqlite3.h"
#include "php_sqlite3_structs.h"
+#include "sqlite3_arginfo.h"
#include "main/SAPI.h"
#include <sqlite3.h>
@@ -108,7 +107,7 @@ PHP_METHOD(sqlite3, open)
db_obj = Z_SQLITE3_DB_P(object);
- if (FAILURE == zend_parse_parameters_throw(ZEND_NUM_ARGS(), "p|ls", &filename, &filename_len, &flags, &encryption_key, &encryption_key_len)) {
+ if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS(), "p|ls", &filename, &filename_len, &flags, &encryption_key, &encryption_key_len)) {
return;
}
@@ -322,7 +321,7 @@ PHP_METHOD(sqlite3, enableExtendedResultCodes)
int ret;
SQLITE3_CHECK_INITIALIZED(db_obj, db_obj->db, SQLite3)
-
+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|b", &enable) == FAILURE) {
return;
}
@@ -1087,7 +1086,7 @@ PHP_METHOD(sqlite3, createCollation)
SQLITE3_CHECK_INITIALIZED(db_obj, db_obj->initialised, SQLite3)
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sz", &collation_name, &collation_name_len, &callback_func) == FAILURE) {
- RETURN_FALSE;
+ return;
}
if (!collation_name_len) {
@@ -1299,6 +1298,11 @@ PHP_METHOD(sqlite3, openBlob)
return;
}
+ if (ZEND_NUM_ARGS() >= 4 && CHECK_NULL_PATH(dbname, dbname_len)) {
+ zend_value_error("dbname must not contain NUL bytes");
+ return;
+ }
+
sqlite_flags = (flags & SQLITE_OPEN_READWRITE) ? 1 : 0;
if (sqlite3_blob_open(db_obj->db, dbname, table, column, rowid, sqlite_flags, &blob) != SQLITE_OK) {
@@ -1367,6 +1371,13 @@ PHP_METHOD(sqlite3, backup)
return;
}
+ if ((ZEND_NUM_ARGS() >= 2 && CHECK_NULL_PATH(source_dbname, source_dbname_length))
+ || (ZEND_NUM_ARGS() >= 3 && CHECK_NULL_PATH(destination_dbname, destination_dbname_length))
+ ) {
+ zend_value_error("dbname must not contain NUL bytes");
+ return;
+ }
+
destination_obj = Z_SQLITE3_DB_P(destination_zval);
SQLITE3_CHECK_INITIALIZED(destination_obj, destination_obj->initialised, SQLite3)
@@ -1734,9 +1745,8 @@ static int register_bound_parameter_to_sqlite(struct php_sqlite3_bound_param *pa
}
/* }}} */
-/* {{{ proto bool SQLite3Stmt::bindParam(int parameter_number, mixed parameter [, int type])
- Bind Parameter to a stmt variable. */
-PHP_METHOD(sqlite3stmt, bindParam)
+/* {{{ Common implementation of ::bindParam() and ::bindValue */
+static void sqlite3stmt_bind(INTERNAL_FUNCTION_PARAMETERS)
{
php_sqlite3_stmt *stmt_obj;
zval *object = ZEND_THIS;
@@ -1773,42 +1783,19 @@ PHP_METHOD(sqlite3stmt, bindParam)
}
/* }}} */
+/* {{{ proto bool SQLite3Stmt::bindParam(int parameter_number, mixed parameter [, int type])
+ Bind Parameter to a stmt variable. */
+PHP_METHOD(sqlite3stmt, bindParam)
+{
+ sqlite3stmt_bind(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+}
+/* }}} */
+
/* {{{ proto bool SQLite3Stmt::bindValue(int parameter_number, mixed parameter [, int type])
Bind Value of a parameter to a stmt variable. */
PHP_METHOD(sqlite3stmt, bindValue)
{
- php_sqlite3_stmt *stmt_obj;
- zval *object = ZEND_THIS;
- struct php_sqlite3_bound_param param = {0};
- zval *parameter;
- stmt_obj = Z_SQLITE3_STMT_P(object);
-
- param.param_number = -1;
- param.type = SQLITE3_TEXT;
-
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "lz|l", &param.param_number, &parameter, &param.type) == FAILURE) {
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "Sz|l", &param.name, &parameter, &param.type) == FAILURE) {
- return;
- }
- }
-
- SQLITE3_CHECK_INITIALIZED(stmt_obj->db_obj, stmt_obj->initialised, SQLite3);
- SQLITE3_CHECK_INITIALIZED_STMT(stmt_obj->stmt, SQLite3Stmt);
-
- ZVAL_COPY(&param.parameter, parameter);
-
- if (ZEND_NUM_ARGS() < 3) {
- PHP_SQLITE3_SET_TYPE(parameter, param);
- }
-
- if (!register_bound_parameter_to_sqlite(&param, stmt_obj)) {
- if (!Z_ISUNDEF(param.parameter)) {
- zval_ptr_dtor(&(param.parameter));
- ZVAL_UNDEF(&param.parameter);
- }
- RETURN_FALSE;
- }
- RETURN_TRUE;
+ sqlite3stmt_bind(INTERNAL_FUNCTION_PARAM_PASSTHRU);
}
/* }}} */
@@ -1890,7 +1877,7 @@ PHP_METHOD(sqlite3stmt, __construct)
stmt_obj = Z_SQLITE3_STMT_P(object);
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "OS", &db_zval, php_sqlite3_sc_entry, &sql) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "OS", &db_zval, php_sqlite3_sc_entry, &sql) == FAILURE) {
return;
}
@@ -2106,174 +2093,65 @@ PHP_METHOD(sqlite3result, __construct)
}
/* }}} */
-/* {{{ arginfo */
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3_open, 0, 0, 1)
- ZEND_ARG_INFO(0, filename)
- ZEND_ARG_INFO(0, flags)
- ZEND_ARG_INFO(0, encryption_key)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_sqlite3_busytimeout, 0)
- ZEND_ARG_INFO(0, ms)
-ZEND_END_ARG_INFO()
-
-#ifndef SQLITE_OMIT_LOAD_EXTENSION
-ZEND_BEGIN_ARG_INFO(arginfo_sqlite3_loadextension, 0)
- ZEND_ARG_INFO(0, shared_library)
-ZEND_END_ARG_INFO()
-#endif
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3_escapestring, 0, 0, 1)
- ZEND_ARG_INFO(0, value)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3_query, 0, 0, 1)
- ZEND_ARG_INFO(0, query)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3_querysingle, 0, 0, 1)
- ZEND_ARG_INFO(0, query)
- ZEND_ARG_INFO(0, entire_row)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3_createfunction, 0, 0, 2)
- ZEND_ARG_INFO(0, name)
- ZEND_ARG_INFO(0, callback)
- ZEND_ARG_INFO(0, argument_count)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3_createaggregate, 0, 0, 3)
- ZEND_ARG_INFO(0, name)
- ZEND_ARG_INFO(0, step_callback)
- ZEND_ARG_INFO(0, final_callback)
- ZEND_ARG_INFO(0, argument_count)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3_createcollation, 0, 0, 2)
- ZEND_ARG_INFO(0, name)
- ZEND_ARG_INFO(0, callback)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3_openblob, 0, 0, 3)
- ZEND_ARG_INFO(0, table)
- ZEND_ARG_INFO(0, column)
- ZEND_ARG_INFO(0, rowid)
- ZEND_ARG_INFO(0, dbname)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3_enableexceptions, 0, 0, 0)
- ZEND_ARG_INFO(0, enableExceptions)
-ZEND_END_ARG_INFO()
-
-#if SQLITE_VERSION_NUMBER >= 3006011
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3_backup, 0, 0, 1)
- ZEND_ARG_INFO(0, destination_db)
- ZEND_ARG_INFO(0, source_dbname)
- ZEND_ARG_INFO(0, destination_dbname)
-ZEND_END_ARG_INFO()
-#endif
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3stmt_bindparam, 0, 0, 2)
- ZEND_ARG_INFO(0, param_number)
- ZEND_ARG_INFO(1, param)
- ZEND_ARG_INFO(0, type)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3stmt_bindvalue, 0, 0, 2)
- ZEND_ARG_INFO(0, param_number)
- ZEND_ARG_INFO(0, param)
- ZEND_ARG_INFO(0, type)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3stmt_construct, 0, 0, 1)
- ZEND_ARG_INFO(0, sqlite3)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3stmt_getsql, 0, 0, 0)
- ZEND_ARG_INFO(0, expanded)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3result_columnname, 0, 0, 1)
- ZEND_ARG_INFO(0, column_number)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3result_columntype, 0, 0, 1)
- ZEND_ARG_INFO(0, column_number)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3result_fetcharray, 0, 0, 0)
- ZEND_ARG_INFO(0, mode)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_sqlite3_enableextended, 0, 0, 1)
- ZEND_ARG_INFO(0, enable)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_sqlite3_void, 0)
-ZEND_END_ARG_INFO()
-/* }}} */
-
/* {{{ php_sqlite3_class_methods */
static const zend_function_entry php_sqlite3_class_methods[] = {
- PHP_ME(sqlite3, open, arginfo_sqlite3_open, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, close, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, exec, arginfo_sqlite3_query, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, version, arginfo_sqlite3_void, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
- PHP_ME(sqlite3, lastInsertRowID, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, lastErrorCode, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, lastExtendedErrorCode, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, enableExtendedResultCodes, arginfo_sqlite3_enableextended, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, lastErrorMsg, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, busyTimeout, arginfo_sqlite3_busytimeout, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, open, arginfo_class_SQLite3_open, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, close, arginfo_class_SQLite3_close, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, exec, arginfo_class_SQLite3_query, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, version, arginfo_class_SQLite3_version, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
+ PHP_ME(sqlite3, lastInsertRowID, arginfo_class_SQLite3_lastInsertRowID, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, lastErrorCode, arginfo_class_SQLite3_lastErrorCode, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, lastExtendedErrorCode, arginfo_class_SQLite3_lastExtendedErrorCode, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, enableExtendedResultCodes, arginfo_class_SQLite3_enableExtendedResultCodes, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, lastErrorMsg, arginfo_class_SQLite3_lastErrorMsg, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, busyTimeout, arginfo_class_SQLite3_busyTimeout, ZEND_ACC_PUBLIC)
#ifndef SQLITE_OMIT_LOAD_EXTENSION
- PHP_ME(sqlite3, loadExtension, arginfo_sqlite3_loadextension, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, loadExtension, arginfo_class_SQLite3_loadExtension, ZEND_ACC_PUBLIC)
#endif
- PHP_ME(sqlite3, changes, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, escapeString, arginfo_sqlite3_escapestring, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
- PHP_ME(sqlite3, prepare, arginfo_sqlite3_query, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, query, arginfo_sqlite3_query, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, querySingle, arginfo_sqlite3_querysingle, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, createFunction, arginfo_sqlite3_createfunction, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, createAggregate, arginfo_sqlite3_createaggregate, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, createCollation, arginfo_sqlite3_createcollation, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, openBlob, arginfo_sqlite3_openblob, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3, enableExceptions, arginfo_sqlite3_enableexceptions, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, changes, arginfo_class_SQLite3_changes, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, escapeString, arginfo_class_SQLite3_escapeString, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
+ PHP_ME(sqlite3, prepare, arginfo_class_SQLite3_prepare, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, query, arginfo_class_SQLite3_query, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, querySingle, arginfo_class_SQLite3_querySingle, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, createFunction, arginfo_class_SQLite3_createFunction, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, createAggregate, arginfo_class_SQLite3_createAggregate, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, createCollation, arginfo_class_SQLite3_createCollation, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, openBlob, arginfo_class_SQLite3_openBlob, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, enableExceptions, arginfo_class_SQLite3_enableExceptions, ZEND_ACC_PUBLIC)
#if SQLITE_VERSION_NUMBER >= 3006011
- PHP_ME(sqlite3, backup, arginfo_sqlite3_backup, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3, backup, arginfo_class_SQLite3_backup, ZEND_ACC_PUBLIC)
#endif
/* Aliases */
- PHP_MALIAS(sqlite3, __construct, open, arginfo_sqlite3_open, ZEND_ACC_PUBLIC)
+ PHP_MALIAS(sqlite3, __construct, open, arginfo_class_SQLite3___construct, ZEND_ACC_PUBLIC)
PHP_FE_END
};
/* }}} */
/* {{{ php_sqlite3_stmt_class_methods */
static const zend_function_entry php_sqlite3_stmt_class_methods[] = {
- PHP_ME(sqlite3stmt, paramCount, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3stmt, close, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3stmt, reset, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3stmt, clear, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3stmt, execute, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3stmt, bindParam, arginfo_sqlite3stmt_bindparam, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3stmt, bindValue, arginfo_sqlite3stmt_bindvalue, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3stmt, readOnly, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3stmt, getSQL, arginfo_sqlite3stmt_getsql, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3stmt, __construct, arginfo_sqlite3stmt_construct, ZEND_ACC_PRIVATE)
+ PHP_ME(sqlite3stmt, paramCount, arginfo_class_SQLite3Stmt_paramCount, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3stmt, close, arginfo_class_SQLite3Stmt_close, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3stmt, reset, arginfo_class_SQLite3Stmt_reset, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3stmt, clear, arginfo_class_SQLite3Stmt_clear, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3stmt, execute, arginfo_class_SQLite3Stmt_execute, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3stmt, bindParam, arginfo_class_SQLite3Stmt_bindParam, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3stmt, bindValue, arginfo_class_SQLite3Stmt_bindValue, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3stmt, readOnly, arginfo_class_SQLite3Stmt_readOnly, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3stmt, getSQL, arginfo_class_SQLite3Stmt_getSQL, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3stmt, __construct, arginfo_class_SQLite3Stmt___construct, ZEND_ACC_PRIVATE)
PHP_FE_END
};
/* }}} */
/* {{{ php_sqlite3_result_class_methods */
static const zend_function_entry php_sqlite3_result_class_methods[] = {
- PHP_ME(sqlite3result, numColumns, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3result, columnName, arginfo_sqlite3result_columnname, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3result, columnType, arginfo_sqlite3result_columntype, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3result, fetchArray, arginfo_sqlite3result_fetcharray, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3result, reset, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3result, finalize, arginfo_sqlite3_void, ZEND_ACC_PUBLIC)
- PHP_ME(sqlite3result, __construct, arginfo_sqlite3_void, ZEND_ACC_PRIVATE)
+ PHP_ME(sqlite3result, numColumns, arginfo_class_SQLite3Result_numColumns, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3result, columnName, arginfo_class_SQLite3Result_columnName, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3result, columnType, arginfo_class_SQLite3Result_columnType, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3result, fetchArray, arginfo_class_SQLite3Result_fetchArray, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3result, reset, arginfo_class_SQLite3Result_reset, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3result, finalize, arginfo_class_SQLite3Result_finalize, ZEND_ACC_PUBLIC)
+ PHP_ME(sqlite3result, __construct, arginfo_class_SQLite3Result___construct, ZEND_ACC_PRIVATE)
PHP_FE_END
};
/* }}} */
diff --git a/ext/sqlite3/sqlite3.stub.php b/ext/sqlite3/sqlite3.stub.php
new file mode 100644
index 0000000000..ede86d0927
--- /dev/null
+++ b/ext/sqlite3/sqlite3.stub.php
@@ -0,0 +1,128 @@
+<?php
+
+class SQLite3
+{
+ function __construct(string $filename, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, string $encryption_key = '') {}
+
+ /** @return void */
+ function open(string $filename, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, string $encryption_key = '') {}
+
+ /** @return bool */
+ function close() {}
+
+ /** @return array */
+ function version() {}
+
+ /** @return int */
+ function lastInsertRowID() {}
+
+ /** @return int */
+ function lastErrorCode() {}
+
+ /** @return int */
+ function lastExtendedErrorCode() {}
+
+ /** @return string */
+ function lastErrorMsg() {}
+
+ /** @return int */
+ function changes() {}
+
+ /** @return bool */
+ function busyTimeout(int $ms) {}
+
+#ifndef SQLITE_OMIT_LOAD_EXTENSION
+ /** @return bool */
+ function loadExtension(string $shared_library) {}
+#endif
+
+#if SQLITE_VERSION_NUMBER >= 3006011
+ /** @return bool */
+ function backup(SQLite3 $destination_db, string $source_dbname = "main", string $destination_dbname = "main") {}
+#endif
+
+ /** @return string */
+ function escapeString(string $value) {}
+
+ /** @return SQLite3Stmt|false */
+ function prepare(string $query) {}
+
+ /** @return SQLite3Result|false|null */
+ function query(string $query) {}
+
+ /** @return mixed */
+ function querySingle(string $query, bool $entire_row = false) {}
+
+ /** @return bool */
+ function createFunction(string $name, $callback, int $argument_count = -1, int $flags = 0) {}
+
+ /** @return bool */
+ function createAggregate(string $name, $step_callback, $final_callback, int $argument_count = -1) {}
+
+ /** @return bool */
+ function createCollation(string $name, $callback) {}
+
+ /** @return resource|false */
+ function openBlob(string $table, string $column, int $rowid, string $dbname = "main", int $flags = SQLITE3_OPEN_READONLY) {}
+
+ /** @return bool */
+ function enableExceptions(bool $enableExceptions = false) {}
+
+ /** @return bool */
+ function enableExtendedResultCodes(bool $enable = true) {}
+}
+
+class SQLite3Stmt
+{
+ function __construct(SQLite3 $sqlite3, string $sql) {}
+
+ /** @return bool */
+ function bindParam($param_number, &$param, int $type = UNKNOWN) {}
+
+ /** @return bool */
+ function bindValue($param_number, $param, int $type = UNKNOWN) {}
+
+ /** @return bool */
+ function clear() {}
+
+ /** @return bool */
+ function close() {}
+
+ /** @return SQLite3Result|false */
+ function execute() {}
+
+ /** @return string|false */
+ function getSQL(bool $expanded = false) {}
+
+ /** @return int */
+ function paramCount() {}
+
+ /** @return bool */
+ function readOnly() {}
+
+ /** @return bool */
+ function reset() {}
+}
+
+class SQLite3Result
+{
+ function __construct() {}
+
+ /** @return int */
+ function numColumns() {}
+
+ /** @return string|false */
+ function columnName(int $column_number) {}
+
+ /** @return int|false */
+ function columnType(int $column_number) {}
+
+ /** @return array|false */
+ function fetchArray(int $mode = SQLITE3_BOTH) {}
+
+ /** @return bool */
+ function reset() {}
+
+ /** @return bool */
+ function finalize() {}
+}
diff --git a/ext/sqlite3/sqlite3_arginfo.h b/ext/sqlite3/sqlite3_arginfo.h
new file mode 100644
index 0000000000..554ecdf5eb
--- /dev/null
+++ b/ext/sqlite3/sqlite3_arginfo.h
@@ -0,0 +1,143 @@
+/* This is a generated file, edit the .stub.php file instead. */
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3___construct, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
+ ZEND_ARG_TYPE_INFO(0, encryption_key, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SQLite3_open arginfo_class_SQLite3___construct
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_close, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SQLite3_version arginfo_class_SQLite3_close
+
+#define arginfo_class_SQLite3_lastInsertRowID arginfo_class_SQLite3_close
+
+#define arginfo_class_SQLite3_lastErrorCode arginfo_class_SQLite3_close
+
+#define arginfo_class_SQLite3_lastExtendedErrorCode arginfo_class_SQLite3_close
+
+#define arginfo_class_SQLite3_lastErrorMsg arginfo_class_SQLite3_close
+
+#define arginfo_class_SQLite3_changes arginfo_class_SQLite3_close
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_busyTimeout, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, ms, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#if !defined(SQLITE_OMIT_LOAD_EXTENSION)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_loadExtension, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, shared_library, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+#endif
+
+#if SQLITE_VERSION_NUMBER >= 3006011
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_backup, 0, 0, 1)
+ ZEND_ARG_OBJ_INFO(0, destination_db, SQLite3, 0)
+ ZEND_ARG_TYPE_INFO(0, source_dbname, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, destination_dbname, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+#endif
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_escapeString, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_prepare, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SQLite3_query arginfo_class_SQLite3_prepare
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_querySingle, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, entire_row, _IS_BOOL, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_createFunction, 0, 0, 2)
+ ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
+ ZEND_ARG_INFO(0, callback)
+ ZEND_ARG_TYPE_INFO(0, argument_count, IS_LONG, 0)
+ ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_createAggregate, 0, 0, 3)
+ ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
+ ZEND_ARG_INFO(0, step_callback)
+ ZEND_ARG_INFO(0, final_callback)
+ ZEND_ARG_TYPE_INFO(0, argument_count, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_createCollation, 0, 0, 2)
+ ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
+ ZEND_ARG_INFO(0, callback)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_openBlob, 0, 0, 3)
+ ZEND_ARG_TYPE_INFO(0, table, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, column, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, rowid, IS_LONG, 0)
+ ZEND_ARG_TYPE_INFO(0, dbname, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_enableExceptions, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, enableExceptions, _IS_BOOL, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_enableExtendedResultCodes, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, enable, _IS_BOOL, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Stmt___construct, 0, 0, 2)
+ ZEND_ARG_OBJ_INFO(0, sqlite3, SQLite3, 0)
+ ZEND_ARG_TYPE_INFO(0, sql, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Stmt_bindParam, 0, 0, 2)
+ ZEND_ARG_INFO(0, param_number)
+ ZEND_ARG_INFO(1, param)
+ ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Stmt_bindValue, 0, 0, 2)
+ ZEND_ARG_INFO(0, param_number)
+ ZEND_ARG_INFO(0, param)
+ ZEND_ARG_TYPE_INFO(0, type, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SQLite3Stmt_clear arginfo_class_SQLite3_close
+
+#define arginfo_class_SQLite3Stmt_close arginfo_class_SQLite3_close
+
+#define arginfo_class_SQLite3Stmt_execute arginfo_class_SQLite3_close
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Stmt_getSQL, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, expanded, _IS_BOOL, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SQLite3Stmt_paramCount arginfo_class_SQLite3_close
+
+#define arginfo_class_SQLite3Stmt_readOnly arginfo_class_SQLite3_close
+
+#define arginfo_class_SQLite3Stmt_reset arginfo_class_SQLite3_close
+
+#define arginfo_class_SQLite3Result___construct arginfo_class_SQLite3_close
+
+#define arginfo_class_SQLite3Result_numColumns arginfo_class_SQLite3_close
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Result_columnName, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, column_number, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SQLite3Result_columnType arginfo_class_SQLite3Result_columnName
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Result_fetchArray, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SQLite3Result_reset arginfo_class_SQLite3_close
+
+#define arginfo_class_SQLite3Result_finalize arginfo_class_SQLite3_close
diff --git a/ext/sqlite3/tests/sqlite3_33_reset.phpt b/ext/sqlite3/tests/sqlite3_33_reset.phpt
index 531874ceb6..48abc829c7 100644
--- a/ext/sqlite3/tests/sqlite3_33_reset.phpt
+++ b/ext/sqlite3/tests/sqlite3_33_reset.phpt
@@ -15,13 +15,11 @@ $db->exec("INSERT INTO foo (id, bar) VALUES (1, 'This is a test')");
$stmt = $db->prepare('SELECT bar FROM foo WHERE id=:id');
$stmt->bindValue(':id', 1, SQLITE3_INTEGER);
-$stmt->reset("dummy");
$stmt->reset();
//var_dump($db);
//var_dump($db->close());
echo "Done\n";
?>
---EXPECTF--
-Warning: SQLite3Stmt::reset() expects exactly 0 parameters, 1 given in %s on line %d
+--EXPECT--
Done
diff --git a/ext/sqlite3/tests/sqlite3_enable_exceptions.phpt b/ext/sqlite3/tests/sqlite3_enable_exceptions.phpt
index 767f9d0065..d921b99dd7 100644
--- a/ext/sqlite3/tests/sqlite3_enable_exceptions.phpt
+++ b/ext/sqlite3/tests/sqlite3_enable_exceptions.phpt
@@ -17,7 +17,6 @@ try{
}
var_dump($db->enableExceptions(false));
$db->query("SELECT * FROM non_existent_table");
-var_dump($db->enableExceptions("wrong_type","wrong_type"));
echo "Closing database\n";
var_dump($db->close());
echo "Done\n";
@@ -28,9 +27,6 @@ no such table: non_existent_table
bool(true)
Warning: SQLite3::query(): no such table: non_existent_table in %s on line %d
-
-Warning: SQLite3::enableExceptions() expects at most 1 parameter, 2 given in %s on line %d
-NULL
Closing database
bool(true)
Done