]> git.joonet.de Git - adminer.git/commitdiff
PHPStan: Fix level 3 errors
authorJakub Vrana <jakub@vrana.cz>
Wed, 26 Mar 2025 15:57:58 +0000 (16:57 +0100)
committerJakub Vrana <jakub@vrana.cz>
Wed, 26 Mar 2025 15:57:58 +0000 (16:57 +0100)
adminer/drivers/mysql.inc.php
adminer/drivers/pgsql.inc.php
adminer/drivers/sqlite.inc.php
adminer/include/driver.inc.php
adminer/include/editing.inc.php
adminer/include/functions.inc.php
adminer/include/html.inc.php
adminer/include/xxtea.inc.php
editor/include/editing.inc.php
phpstan.neon
plugins/drivers/elastic.php

index 177d178b1fbaccb6913924ada42ccff1c38b39b7..0447e95397632873fc0d784bf2b40fa15aa81816 100644 (file)
@@ -505,7 +505,7 @@ if (!defined('Adminer\DRIVER')) {
 
        /** Get database collation
        * @param string
-       * @param list<string>[] result of collations()
+       * @param string[][] result of collations()
        * @return string
        */
        function db_collation($db, $collations) {
@@ -705,7 +705,7 @@ if (!defined('Adminer\DRIVER')) {
        }
 
        /** Get sorted grouped list of collations
-       * @return list<string>[]
+       * @return string[][]
        */
        function collations() {
                $return = array();
@@ -743,7 +743,7 @@ if (!defined('Adminer\DRIVER')) {
        /** Create database
        * @param string
        * @param string
-       * @return string
+       * @return Result
        */
        function create_database($db, $collation) {
                return queries("CREATE DATABASE " . idf_escape($db) . ($collation ? " COLLATE " . q($collation) : ""));
@@ -813,7 +813,7 @@ if (!defined('Adminer\DRIVER')) {
        * @param string
        * @param string number
        * @param string
-       * @return bool
+       * @return Result|bool
        */
        function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
                global $connection;
@@ -852,7 +852,7 @@ if (!defined('Adminer\DRIVER')) {
        /** Run commands to alter indexes
        * @param string escaped table name
        * @param array{string, string, 'DROP'|list<string>} of ["index type", "name", ["column definition", ...]] or ["index type", "name", "DROP"]
-       * @return bool
+       * @return Result|bool
        */
        function alter_indexes($table, $alter) {
                foreach ($alter as $key => $val) {
@@ -874,7 +874,7 @@ if (!defined('Adminer\DRIVER')) {
 
        /** Drop views
        * @param list<string>
-       * @return bool
+       * @return Result|bool
        */
        function drop_views($views) {
                return queries("DROP VIEW " . implode(", ", array_map('Adminer\table', $views)));
@@ -882,7 +882,7 @@ if (!defined('Adminer\DRIVER')) {
 
        /** Drop tables
        * @param list<string>
-       * @return bool
+       * @return Result|bool
        */
        function drop_tables($tables) {
                return queries("DROP TABLE " . implode(", ", array_map('Adminer\table', $tables)));
@@ -1014,7 +1014,7 @@ if (!defined('Adminer\DRIVER')) {
                                "type" => strtolower($param[5]),
                                "length" => preg_replace_callback("~$enum~s", 'Adminer\normalize_enum', $param[6]),
                                "unsigned" => strtolower(preg_replace('~\s+~', ' ', trim("$param[8] $param[7]"))),
-                               "null" => 1,
+                               "null" => true,
                                "full_type" => $param[4],
                                "inout" => strtoupper($param[1]),
                                "collation" => strtolower($param[9]),
@@ -1073,7 +1073,7 @@ if (!defined('Adminer\DRIVER')) {
        /** Get approximate number of rows
        * @param TableStatus
        * @param list<string>
-       * @return int or null if approximate number can't be retrieved
+       * @return numeric-string|void null if approximate number can't be retrieved
        */
        function found_rows($table_status, $where) {
                return ($where || $table_status["Engine"] != "InnoDB" ? null : $table_status["Rows"]);
@@ -1222,7 +1222,7 @@ if (!defined('Adminer\DRIVER')) {
 
        /** Kill a process
        * @param int
-       * @return bool
+       * @return Result|bool
        */
        function kill_process($val) {
                return queries("KILL " . number($val));
@@ -1236,7 +1236,7 @@ if (!defined('Adminer\DRIVER')) {
        }
 
        /** Get maximum number of connections
-       * @return int
+       * @return numeric-string
        */
        function max_connections() {
                return get_val("SELECT @@max_connections");
index be4293af051f1407e41cedf364244dadc221b6e1..82e7166f15a582a9420b0a5d26285feaeb565c70 100644 (file)
@@ -789,7 +789,6 @@ ORDER BY SPECIFIC_NAME');
                if (preg_match("~ rows=([0-9]+)~", get_val("EXPLAIN SELECT * FROM " . idf_escape($table_status["Name"]) . ($where ? " WHERE " . implode(" AND ", $where) : "")), $regs)) {
                        return $regs[1];
                }
-               return false;
        }
 
        function types() {
index 252873b8ee20f75403c9e065b6ef6577ce0db5c4..bdd6cf585eb1dbd5d7348667cc1e4bd2cdb52e9a 100644 (file)
@@ -88,7 +88,7 @@ if (isset($_GET["sqlite"])) {
                        }
 
                        function __destruct() {
-                               return $this->result->finalize();
+                               $this->result->finalize();
                        }
                }
 
index 2ae93d9659f21136d6b29d6fc061a9a0320442e9..fc3397befc9a97794ec6c0828357d473f271853c 100644 (file)
@@ -53,7 +53,7 @@ abstract class SqlDriver {
        }
 
        /** Get structured types
-       * @return list<string>[] [$description => [$type, ...], ...]
+       * @return list<string>[]|list<string> [$description => [$type, ...], ...]
        */
        function structuredTypes() {
                return array_map('array_keys', $this->types);
@@ -82,7 +82,7 @@ abstract class SqlDriver {
        * @param int result of $adminer->selectLimitProcess()
        * @param int index of page starting at zero
        * @param bool whether to print the query
-       * @return Result
+       * @return Result|false
        */
        function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
                global $adminer;
@@ -109,7 +109,7 @@ abstract class SqlDriver {
        * @param string
        * @param string " WHERE ..."
        * @param int 0 or 1
-       * @return bool
+       * @return Result|bool
        */
        function delete($table, $queryWhere, $limit = 0) {
                $query = "FROM " . table($table);
@@ -122,7 +122,7 @@ abstract class SqlDriver {
        * @param string " WHERE ..."
        * @param int 0 or 1
        * @param string
-       * @return bool
+       * @return Result|bool
        */
        function update($table, $set, $queryWhere, $limit = 0, $separator = "\n") {
                $values = array();
@@ -136,7 +136,7 @@ abstract class SqlDriver {
        /** Insert data into table
        * @param string
        * @param string[] escaped columns in keys, quoted data in values
-       * @return bool
+       * @return Result|bool
        */
        function insert($table, $set) {
                return queries("INSERT INTO " . table($table) . ($set
@@ -145,7 +145,7 @@ abstract class SqlDriver {
                ) . $this->insertReturning($table));
        }
 
-       /** Get RETURNING clause for INSERT queries, PostgreSQL specific
+       /** Get RETURNING clause for INSERT queries (PostgreSQL specific)
        * @param string
        * @return string
        */
@@ -157,28 +157,28 @@ abstract class SqlDriver {
        * @param string
        * @param list<string[]> of arrays with escaped columns in keys and quoted data in values
        * @param int[] column names in keys
-       * @return bool
+       * @return Result|bool
        */
        function insertUpdate($table, $rows, $primary) {
                return false;
        }
 
        /** Begin transaction
-       * @return bool
+       * @return Result|bool
        */
        function begin() {
                return queries("BEGIN");
        }
 
        /** Commit transaction
-       * @return bool
+       * @return Result|bool
        */
        function commit() {
                return queries("COMMIT");
        }
 
        /** Rollback transaction
-       * @return bool
+       * @return Result|bool
        */
        function rollback() {
                return queries("ROLLBACK");
index 78bed1de2b3e380e42b2c8b4310da4fd4bbaa510..9981b43bab5b1417a969cff992631736ddef0a66 100644 (file)
@@ -435,7 +435,7 @@ function normalize_enum($match) {
 * @param list<string>
 * @param string
 * @param string
-* @return bool
+* @return Result|bool
 */
 function grant($grant, $privileges, $columns, $on) {
        if (!$privileges) {
@@ -502,7 +502,7 @@ function create_trigger($on, $row) {
 
 /** Generate SQL query for creating routine
 * @param string "PROCEDURE" or "FUNCTION"
-* @param string[] result of routine()
+* @param Routine result of routine()
 * @return string
 */
 function create_routine($routine, $row) {
index db3ca1289607653afc5d94112fec91e6003a50a4..002e113f07bfbd4e949c3876d2fb5e3c6c8dbc19 100644 (file)
@@ -722,7 +722,7 @@ function table_status1($table, $fast = false) {
 
 /** Find out foreign keys for each column
 * @param string
-* @return list<string>[] [$col => []]
+* @return list<ForeignKey>[] [$col => []]
 */
 function column_foreign_keys($table) {
        global $adminer;
@@ -814,7 +814,7 @@ function get_temp_dir() {
                } else {
                        $filename = @tempnam("", ""); // @ - temp directory can be disabled by open_basedir
                        if (!$filename) {
-                               return false;
+                               return '';
                        }
                        $return = dirname($filename);
                        unlink($filename);
@@ -825,7 +825,7 @@ function get_temp_dir() {
 
 /** Open and exclusively lock a file
 * @param string
-* @return resource or null for error
+* @return resource|void null for error
 */
 function file_open_lock($filename) {
        if (is_link($filename)) {
@@ -873,7 +873,7 @@ function first($array) {
 
 /** Read password from file adminer.key in temporary directory or create one
 * @param bool
-* @return string or false if the file can not be created
+* @return string|false false if the file can not be created
 */
 function password_file($create) {
        $filename = get_temp_dir() . "/adminer.key";
index a265a18f85c58e399d353430cf74e77962af5da7..9ef717c0eb80f864eac38217d69af44afc917c2a 100644 (file)
@@ -344,12 +344,12 @@ function input($field, $value, $function, $autofocus = false) {
 
 /** Process edit input field
 * @param Field one field from fields()
-* @return string or false to leave the original value
+* @return mixed false to leave the original value
 */
 function process_input($field) {
        global $adminer, $driver;
        if (stripos($field["default"], "GENERATED ALWAYS AS ") === 0) {
-               return null;
+               return;
        }
        $idf = bracket_escape($field["field"]);
        $function = idx($_POST["function"], $idf);
index b786623c1853da5114ba9537309e7bee3f76e133..4ae13733ee2dec87f1d1faff9b0cb8ea833f53bb 100644 (file)
@@ -75,7 +75,7 @@ function encrypt_string($str, $key) {
 /** Decipher
 * @param string binary cipher
 * @param string
-* @return string plain-text password
+* @return string|false plain-text password
 */
 function decrypt_string($str, $key) {
        if ($str == "") {
index 6dacd5106b59e47f65036fd52a71df74efb86565..b670d7351636fee4134882f7ed74fb4b1f7bdf10 100644 (file)
@@ -15,7 +15,7 @@ function email_header($header) {
 * @param string
 * @param string
 * @param string
-* @param array{error?:list<int>, type?:list<string>, name?:list<string>}
+* @param array{error?:list<int>, type?:list<string>, name?:list<string>, tmp_name?:list<string>}
 * @return bool
 */
 function send_mail($email, $subject, $message, $from = "", $files = array()) {
index ad5a02d775d2b87aed80059c5531a3f2c9e53e95..896fb8ffbd0f9f26ccd2d2ed0b8677844e88f186 100644 (file)
@@ -1,6 +1,13 @@
 parameters:
-       level: 2
+       level: 3
        ignoreErrors:
+               # diagnose
+               - "~Adminer\\\\Db::~"
+               
+               # need to fix
+               - "~^Function Adminer\\\\fields_from_edit\\(\\) should return~" # Mongo and SimpleDB
+               
+               # not real problems
                - identifier: include.fileNotFound # relative includes
                - identifier: includeOnce.fileNotFound # ./adminer-plugins.php
                - "~^Function (set_magic_quotes_runtime|mysql_)~" # PHP < 7 functions
@@ -8,7 +15,7 @@ parameters:
                - "~^Variable \\$(adminer|connection|driver|drivers|error|HTTPS|LANG|langs|permanent|has_token|token|translations|VERSION) might not be defined~" # declared in bootstrap.inc.php
                - "~^Comparison operation \"==\" between \\(array\\|float\\|int\\) and 1~" # false positive
                - "~OCI-?Lob~" # maybe include stub?
-               - "~Adminer\\\\Db::~" # diagnose!
+
        paths:
                - .
        phpVersion:
@@ -16,10 +23,10 @@ parameters:
                max: 80499
        checkMissingCallableSignature: true
        typeAliases:
-               TableStatus: "array{Name:string, Engine:string, Comment:string, Oid:int, Rows:int, Collation:string, Auto_increment:int, Data_length:int, Index_length:int, Data_free:int}"
-               Field: "array{field:string, full_type:string, type:string, length:int, unsigned:string, default:string, null:bool, auto_increment:bool, on_update:string, collation:string, privileges:int[], comment:string, primary:bool, generated:string}"
-               Index: "array{type:string, columns:list<string>, lengths:list<int>, descs:list<bool>}"
-               ForeignKey: "array{db:string, ns:string, table:string, source:list<string>, target:list<string>, on_delete:string, on_update:string}"
-               Trigger: "array{Trigger:string, Timing:string, Event:string, Of:string, Type:string, Statement:string}"
-               Routine: "array{fields:list<array{field:string, type:string, length:string, unsigned:string, null:bool, full_type:string, inout:string, collation:string}>, comment:string, returns:array, definition:string, language:string}"
+               TableStatus: "array{Name:string, Engine:string, Comment:string, Oid?:numeric-string, Rows:numeric-string, Collation:string, Auto_increment:numeric-string, Data_length:numeric-string, Index_length:numeric-string, Data_free:numeric-string, Create_options?:string, nspname?:string}"
+               Field: "array{field:string, full_type:string, type:string, length:numeric-string, unsigned:string, default:?string, null:bool, auto_increment:bool, on_update:string, collation:string, privileges:int[], comment:string, primary:bool, generated:string, orig?:string, on_delete?:string, inout?:string}"
+               Index: "array{type:string, columns:list<string>, lengths:list<numeric-string>, descs:list<?bool>}"
+               ForeignKey: "array{db:string, ns?:string, table:string, source:list<string>, target:list<string>, on_delete:string, on_update:string}"
+               Trigger: "array{Trigger?:string, Timing?:string, Event?:string, Of?:string, Type?:string, Statement?:string}"
+               Routine: "array{name?:string, fields:list<array{field:string, type:string, length:?string, unsigned:string, null:bool, full_type:string, inout:string, collation:string}>, comment:string, returns?:array, definition:string, language?:string}"
                BackwardKey: "array{name:string, keys:string[][]}"
index 55f3ff06eb9fe9fec563d35a5bf1959ef28f3e9b..7a6f332e629d994d5c081dfbbee64bbf092019e0 100644 (file)
@@ -294,7 +294,7 @@ if (isset($_GET["elastic"])) {
                                }
                        }
 
-                       return $this->conn->affected_rows;
+                       return !!$this->conn->affected_rows;
                }
 
                function convertOperator($operator) {
@@ -528,7 +528,6 @@ if (isset($_GET["elastic"])) {
        }
 
        function found_rows($table_status, $where) {
-               return null;
        }
 
        /** Alter type