Aleksander Machniak
2013-04-27 399db1b647e14947e97a865c09215969f56a7efe
program/lib/Roundcube/rcube_db.php
@@ -439,6 +439,32 @@
    }
    /**
     * Get number of rows for a SQL query
     * If no query handle is specified, the last query will be taken as reference
     *
     * @param mixed $result Optional query handle
     * @return mixed   Number of rows or false on failure
     * @deprecated This method shows very poor performance and should be avoided.
     */
    public function num_rows($result = null)
    {
        if ($result || ($result === null && ($result = $this->last_result))) {
            // repeat query with SELECT COUNT(*) ...
            if (preg_match('/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/ims', $result->queryString, $m)) {
                $query = $this->dbh->query('SELECT COUNT(*) FROM ' . $m[1], PDO::FETCH_NUM);
                return $query ? intval($query->fetchColumn(0)) : false;
            }
            else {
                $num = count($result->fetchAll());
                $result->execute();  // re-execute query because there's no seek(0)
                return $num;
            }
        }
        return false;
    }
    /**
     * Get last inserted record ID
     *
     * @param string $table Table name (to find the incremented sequence)
@@ -571,7 +597,7 @@
     * Formats input so it can be safely used in a query
     *
     * @param mixed  $input Value to quote
     * @param string $type  Type of data
     * @param string $type  Type of data (integer, bool, ident)
     *
     * @return string Quoted/converted string for use in query
     */
@@ -584,6 +610,10 @@
        if (is_null($input)) {
            return 'NULL';
        }
        if ($type == 'ident') {
            return $this->quote_identifier($input);
        }
        // create DB handle if not available
@@ -604,6 +634,22 @@
    }
    /**
     * Escapes a string so it can be safely used in a query
     *
     * @param string $str A string to escape
     *
     * @return string Escaped string for use in a query
     */
    public function escape($str)
    {
        if (is_null($str)) {
            return 'NULL';
        }
        return substr($this->quote($str), 1, -1);
    }
    /**
     * Quotes a string so it can be safely used as a table or column name
     *
     * @param string $str Value to quote
@@ -615,6 +661,20 @@
    public function quoteIdentifier($str)
    {
        return $this->quote_identifier($str);
    }
    /**
     * Escapes a string so it can be safely used in a query
     *
     * @param string $str A string to escape
     *
     * @return string Escaped string for use in a query
     * @deprecated    Replaced by rcube_db::escape
     * @see           rcube_db::escape
     */
    public function escapeSimple($str)
    {
        return $this->escape($str);
    }
    /**
@@ -635,7 +695,7 @@
            $name[] = $start . $elem . $end;
        }
        return  implode($name, '.');
        return implode($name, '.');
    }
    /**
@@ -652,7 +712,7 @@
     * Return list of elements for use with SQL's IN clause
     *
     * @param array  $arr  Input array
     * @param string $type Type of data
     * @param string $type Type of data (integer, bool, ident)
     *
     * @return string Comma-separated list of quoted values for use in query
     */
@@ -786,11 +846,9 @@
    {
        $rcube = rcube::get_instance();
        // return table name if configured
        $config_key = 'db_table_'.$table;
        if ($name = $rcube->config->get($config_key)) {
            return $name;
        // add prefix to the table name if configured
        if ($prefix = $rcube->config->get('db_prefix')) {
            return $prefix . $table;
        }
        return $table;