Declare tentative return types for ext/sqlite3

Closes GH-7000
This commit is contained in:
Máté Kocsis 2021-05-17 19:42:57 +02:00
parent 37a3c9bc8d
commit a40cdd55f8
No known key found for this signature in database
GPG Key ID: FD055E41728BF310
3 changed files with 127 additions and 112 deletions

View File

@ -566,7 +566,7 @@ PHP_METHOD(SQLite3, query)
php_sqlite3_error(db_obj, "%s", errtext);
sqlite3_free(errtext);
}
return;
RETURN_FALSE;
}
object_init_ex(&stmt, php_sqlite3_stmt_entry);
@ -680,7 +680,7 @@ PHP_METHOD(SQLite3, querySingle)
php_sqlite3_error(db_obj, "%s", errtext);
sqlite3_free(errtext);
}
return;
RETURN_FALSE;
}
return_code = sqlite3_prepare_v2(db_obj->db, ZSTR_VAL(sql), ZSTR_LEN(sql), &stmt, NULL);
@ -1955,7 +1955,7 @@ PHP_METHOD(SQLite3Result, fetchArray)
case SQLITE_ROW:
/* If there was no return value then just skip fetching */
if (!USED_RET()) {
return;
RETURN_FALSE;
}
array_init(return_value);

View File

@ -10,131 +10,131 @@ class SQLite3
*/
public function __construct(string $filename, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, string $encryptionKey = "") {}
/** @return void */
public function open(string $filename, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, string $encryptionKey = "") {}
/** @tentative-return-type */
public function open(string $filename, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, string $encryptionKey = ""): void {}
/** @return bool */
public function close() {}
public function close() {} // TODO make return type void
/** @return array */
public static function version() {}
/** @tentative-return-type */
public static function version(): array {}
/** @return int */
public function lastInsertRowID() {}
/** @tentative-return-type */
public function lastInsertRowID(): int {}
/** @return int */
public function lastErrorCode() {}
/** @tentative-return-type */
public function lastErrorCode(): int {}
/** @return int */
public function lastExtendedErrorCode() {}
/** @tentative-return-type */
public function lastExtendedErrorCode(): int {}
/** @return string */
public function lastErrorMsg() {}
/** @tentative-return-type */
public function lastErrorMsg(): string {}
/** @return int */
public function changes() {}
/** @tentative-return-type */
public function changes(): int {}
/** @return bool */
public function busyTimeout(int $milliseconds) {}
/** @tentative-return-type */
public function busyTimeout(int $milliseconds): bool {}
#ifndef SQLITE_OMIT_LOAD_EXTENSION
/** @return bool */
public function loadExtension(string $name) {}
/** @tentative-return-type */
public function loadExtension(string $name): bool {}
#endif
#if SQLITE_VERSION_NUMBER >= 3006011
/** @return bool */
public function backup(SQLite3 $destination, string $sourceDatabase = "main", string $destinationDatabase = "main") {}
/** @tentative-return-type */
public function backup(SQLite3 $destination, string $sourceDatabase = "main", string $destinationDatabase = "main"): bool {}
#endif
/** @return string */
public static function escapeString(string $string) {}
/** @tentative-return-type */
public static function escapeString(string $string): string {}
/** @return SQLite3Stmt|false */
public function prepare(string $query) {}
/** @tentative-return-type */
public function prepare(string $query): SQLite3Stmt|false {}
/** @return bool */
public function exec(string $query) {}
/** @tentative-return-type */
public function exec(string $query): bool {}
/** @return SQLite3Result|false */
public function query(string $query) {}
/** @tentative-return-type */
public function query(string $query): SQLite3Result|false {}
/** @return mixed */
public function querySingle(string $query, bool $entireRow = false) {}
/** @tentative-return-type */
public function querySingle(string $query, bool $entireRow = false): mixed {}
/** @return bool */
public function createFunction(string $name, callable $callback, int $argCount = -1, int $flags = 0) {}
/** @tentative-return-type */
public function createFunction(string $name, callable $callback, int $argCount = -1, int $flags = 0): bool {}
/** @return bool */
public function createAggregate(string $name, callable $stepCallback, callable $finalCallback, int $argCount = -1) {}
/** @tentative-return-type */
public function createAggregate(string $name, callable $stepCallback, callable $finalCallback, int $argCount = -1): bool {}
/** @return bool */
public function createCollation(string $name, callable $callback) {}
/** @tentative-return-type */
public function createCollation(string $name, callable $callback): bool {}
/** @return resource|false */
public function openBlob(string $table, string $column, int $rowid, string $database = "main", int $flags = SQLITE3_OPEN_READONLY) {}
/** @return bool */
public function enableExceptions(bool $enable = false) {}
/** @tentative-return-type */
public function enableExceptions(bool $enable = false): bool {}
/** @return bool */
public function enableExtendedResultCodes(bool $enable = true) {}
/** @tentative-return-type */
public function enableExtendedResultCodes(bool $enable = true): bool {}
/** @return bool */
public function setAuthorizer(?callable $callback) {}
/** @tentative-return-type */
public function setAuthorizer(?callable $callback): bool {}
}
class SQLite3Stmt
{
private function __construct(SQLite3 $sqlite3, string $query) {}
/** @return bool */
public function bindParam(string|int $param, mixed &$var, int $type = SQLITE3_TEXT) {}
/** @tentative-return-type */
public function bindParam(string|int $param, mixed &$var, int $type = SQLITE3_TEXT): bool {}
/** @return bool */
public function bindValue(string|int $param, mixed $value, int $type = SQLITE3_TEXT) {}
/** @tentative-return-type */
public function bindValue(string|int $param, mixed $value, int $type = SQLITE3_TEXT): bool {}
/** @return bool */
public function clear() {}
/** @tentative-return-type */
public function clear(): bool {}
/** @return bool */
public function close() {}
/** @tentative-return-type */
public function close(): bool {}
/** @return SQLite3Result|false */
public function execute() {}
/** @tentative-return-type */
public function execute(): SQLite3Result|false {}
/** @return string|false */
public function getSQL(bool $expand = false) {}
/** @tentative-return-type */
public function getSQL(bool $expand = false): string|false {}
/** @return int */
public function paramCount() {}
/** @tentative-return-type */
public function paramCount(): int {}
/** @return bool */
public function readOnly() {}
/** @tentative-return-type */
public function readOnly(): bool {}
/** @return bool */
public function reset() {}
/** @tentative-return-type */
public function reset(): bool {}
}
class SQLite3Result
{
private function __construct() {}
/** @return int */
public function numColumns() {}
/** @tentative-return-type */
public function numColumns(): int {}
/** @return string|false */
public function columnName(int $column) {}
/** @tentative-return-type */
public function columnName(int $column): string|false {}
/** @return int|false */
public function columnType(int $column) {}
/** @tentative-return-type */
public function columnType(int $column): int|false {}
/** @return array|false */
public function fetchArray(int $mode = SQLITE3_BOTH) {}
/** @tentative-return-type */
public function fetchArray(int $mode = SQLITE3_BOTH): array|false {}
/** @tentative-return-type */
public function reset(): bool {}
/** @return bool */
public function reset() {}
/** @return bool */
public function finalize() {}
public function finalize() {} // TODO make return type void
}

View File

@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: edb21146ffbfccc998f922f9e6967738134b8b07 */
* Stub hash: 1d18ea0592ade188628e23fa6a65c06b36837c44 */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3___construct, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
@ -7,73 +7,84 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3___construct, 0, 0, 1)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encryptionKey, IS_STRING, 0, "\"\"")
ZEND_END_ARG_INFO()
#define arginfo_class_SQLite3_open arginfo_class_SQLite3___construct
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_open, 0, 1, IS_VOID, 0)
ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE")
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encryptionKey, IS_STRING, 0, "\"\"")
ZEND_END_ARG_INFO()
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
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_version, 0, 0, IS_ARRAY, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_SQLite3_lastInsertRowID arginfo_class_SQLite3_close
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_lastInsertRowID, 0, 0, IS_LONG, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_SQLite3_lastErrorCode arginfo_class_SQLite3_close
#define arginfo_class_SQLite3_lastErrorCode arginfo_class_SQLite3_lastInsertRowID
#define arginfo_class_SQLite3_lastExtendedErrorCode arginfo_class_SQLite3_close
#define arginfo_class_SQLite3_lastExtendedErrorCode arginfo_class_SQLite3_lastInsertRowID
#define arginfo_class_SQLite3_lastErrorMsg arginfo_class_SQLite3_close
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_lastErrorMsg, 0, 0, IS_STRING, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_SQLite3_changes arginfo_class_SQLite3_close
#define arginfo_class_SQLite3_changes arginfo_class_SQLite3_lastInsertRowID
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_busyTimeout, 0, 0, 1)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_busyTimeout, 0, 1, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, milliseconds, 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_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_loadExtension, 0, 1, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, name, 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_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_backup, 0, 1, _IS_BOOL, 0)
ZEND_ARG_OBJ_INFO(0, destination, SQLite3, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, sourceDatabase, IS_STRING, 0, "\"main\"")
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, destinationDatabase, IS_STRING, 0, "\"main\"")
ZEND_END_ARG_INFO()
#endif
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_escapeString, 0, 0, 1)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_escapeString, 0, 1, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_prepare, 0, 0, 1)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_SQLite3_prepare, 0, 1, SQLite3Stmt, MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_SQLite3_exec arginfo_class_SQLite3_prepare
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_exec, 0, 1, _IS_BOOL, 0)
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_WITH_TENTATIVE_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_SQLite3_query, 0, 1, SQLite3Result, MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_querySingle, 0, 0, 1)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_querySingle, 0, 1, IS_MIXED, 0)
ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, entireRow, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_createFunction, 0, 0, 2)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_createFunction, 0, 2, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, argCount, IS_LONG, 0, "-1")
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_createAggregate, 0, 0, 3)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_createAggregate, 0, 3, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, stepCallback, IS_CALLABLE, 0)
ZEND_ARG_TYPE_INFO(0, finalCallback, IS_CALLABLE, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, argCount, IS_LONG, 0, "-1")
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_createCollation, 0, 0, 2)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_createCollation, 0, 2, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_END_ARG_INFO()
@ -86,15 +97,15 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_openBlob, 0, 0, 3)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SQLITE3_OPEN_READONLY")
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_enableExceptions, 0, 0, 0)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_enableExceptions, 0, 0, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_enableExtendedResultCodes, 0, 0, 0)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_enableExtendedResultCodes, 0, 0, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 0, "true")
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3_setAuthorizer, 0, 0, 1)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3_setAuthorizer, 0, 1, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 1)
ZEND_END_ARG_INFO()
@ -103,49 +114,53 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Stmt___construct, 0, 0, 2)
ZEND_ARG_TYPE_INFO(0, query, IS_STRING, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Stmt_bindParam, 0, 0, 2)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3Stmt_bindParam, 0, 2, _IS_BOOL, 0)
ZEND_ARG_TYPE_MASK(0, param, MAY_BE_STRING|MAY_BE_LONG, NULL)
ZEND_ARG_TYPE_INFO(1, var, IS_MIXED, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "SQLITE3_TEXT")
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Stmt_bindValue, 0, 0, 2)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3Stmt_bindValue, 0, 2, _IS_BOOL, 0)
ZEND_ARG_TYPE_MASK(0, param, MAY_BE_STRING|MAY_BE_LONG, NULL)
ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, type, IS_LONG, 0, "SQLITE3_TEXT")
ZEND_END_ARG_INFO()
#define arginfo_class_SQLite3Stmt_clear arginfo_class_SQLite3_close
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SQLite3Stmt_clear, 0, 0, _IS_BOOL, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_SQLite3Stmt_close arginfo_class_SQLite3_close
#define arginfo_class_SQLite3Stmt_close arginfo_class_SQLite3Stmt_clear
#define arginfo_class_SQLite3Stmt_execute arginfo_class_SQLite3_close
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_SQLite3Stmt_execute, 0, 0, SQLite3Result, MAY_BE_FALSE)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Stmt_getSQL, 0, 0, 0)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SQLite3Stmt_getSQL, 0, 0, MAY_BE_STRING|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, expand, _IS_BOOL, 0, "false")
ZEND_END_ARG_INFO()
#define arginfo_class_SQLite3Stmt_paramCount arginfo_class_SQLite3_close
#define arginfo_class_SQLite3Stmt_paramCount arginfo_class_SQLite3_lastInsertRowID
#define arginfo_class_SQLite3Stmt_readOnly arginfo_class_SQLite3_close
#define arginfo_class_SQLite3Stmt_readOnly arginfo_class_SQLite3Stmt_clear
#define arginfo_class_SQLite3Stmt_reset arginfo_class_SQLite3_close
#define arginfo_class_SQLite3Stmt_reset arginfo_class_SQLite3Stmt_clear
#define arginfo_class_SQLite3Result___construct arginfo_class_SQLite3_close
#define arginfo_class_SQLite3Result_numColumns arginfo_class_SQLite3_close
#define arginfo_class_SQLite3Result_numColumns arginfo_class_SQLite3_lastInsertRowID
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Result_columnName, 0, 0, 1)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SQLite3Result_columnName, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, column, IS_LONG, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_SQLite3Result_columnType arginfo_class_SQLite3Result_columnName
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SQLite3Result_columnType, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO(0, column, IS_LONG, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SQLite3Result_fetchArray, 0, 0, 0)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SQLite3Result_fetchArray, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "SQLITE3_BOTH")
ZEND_END_ARG_INFO()
#define arginfo_class_SQLite3Result_reset arginfo_class_SQLite3_close
#define arginfo_class_SQLite3Result_reset arginfo_class_SQLite3Stmt_clear
#define arginfo_class_SQLite3Result_finalize arginfo_class_SQLite3_close