abstract.php

来自「Bug tracker, and reporter.」· PHP 代码 · 共 1,118 行 · 第 1/3 页

PHP
1,118
字号
        }        if ($value instanceof Zend_Db_Expr) {            return $value->__toString();        }        if (is_array($value)) {            foreach ($value as &$val) {                $val = $this->quote($val, $type);            }            return implode(', ', $value);        }        if ($type !== null && array_key_exists($type = strtoupper($type), $this->_numericDataTypes)) {            switch ($this->_numericDataTypes[$type]) {                case Zend_Db::INT_TYPE: // 32-bit integer                    return (string) intval($value);                    break;                case Zend_Db::BIGINT_TYPE: // 64-bit integer                    // ANSI SQL-style hex literals (e.g. x'[\dA-F]+')                    // are not supported here, because these are string                    // literals, not numeric literals.                    if (preg_match('/^(                          [+-]?                  # optional sign                          (?:                            0[Xx][\da-fA-F]+     # ODBC-style hexadecimal                            |\d+                 # decimal or octal, or MySQL ZEROFILL decimal                            (?:[eE][+-]?\d+)?    # optional exponent on decimals or octals                          )                        )/x',                        (string) $value, $matches)) {                        return $matches[1];                    }                    break;                case Zend_Db::FLOAT_TYPE: // float or decimal                    return (string) floatval($value);                    break;            }            return '0';        }        return $this->_quote($value);    }    /**     * Quotes a value and places into a piece of text at a placeholder.     *     * The placeholder is a question-mark; all placeholders will be replaced     * with the quoted value.   For example:     *     * <code>     * $text = "WHERE date < ?";     * $date = "2005-01-02";     * $safe = $sql->quoteInto($text, $date);     * // $safe = "WHERE date < '2005-01-02'"     * </code>     *     * @param string  $text  The text with a placeholder.     * @param mixed   $value The value to quote.     * @param string  $type  OPTIONAL SQL datatype     * @param integer $count OPTIONAL count of placeholders to replace     * @return string An SQL-safe quoted value placed into the orignal text.     */    public function quoteInto($text, $value, $type = null, $count = null)    {        if ($count === null) {            return str_replace('?', $this->quote($value, $type), $text);        } else {            while ($count > 0) {                if (strpos($text, '?') != false) {                    $text = substr_replace($text, $this->quote($value), strpos($text, '?'), 1);                }                --$count;            }            return $text;        }    }    /**     * Quotes an identifier.     *     * Accepts a string representing a qualified indentifier. For Example:     * <code>     * $adapter->quoteIdentifier('myschema.mytable')     * </code>     * Returns: "myschema"."mytable"     *     * Or, an array of one or more identifiers that may form a qualified identifier:     * <code>     * $adapter->quoteIdentifier(array('myschema','my.table'))     * </code>     * Returns: "myschema"."my.table"     *     * The actual quote character surrounding the identifiers may vary depending on     * the adapter.     *     * @param string|array|Zend_Db_Expr $ident The identifier.     * @param boolean $auto If true, heed the AUTO_QUOTE_IDENTIFIERS config option.     * @return string The quoted identifier.     */    public function quoteIdentifier($ident, $auto=false)    {        return $this->_quoteIdentifierAs($ident, null, $auto);    }    /**     * Quote a column identifier and alias.     *     * @param string|array|Zend_Db_Expr $ident The identifier or expression.     * @param string $alias An alias for the column.     * @param boolean $auto If true, heed the AUTO_QUOTE_IDENTIFIERS config option.     * @return string The quoted identifier and alias.     */    public function quoteColumnAs($ident, $alias, $auto=false)    {        return $this->_quoteIdentifierAs($ident, $alias, $auto);    }    /**     * Quote a table identifier and alias.     *     * @param string|array|Zend_Db_Expr $ident The identifier or expression.     * @param string $alias An alias for the table.     * @param boolean $auto If true, heed the AUTO_QUOTE_IDENTIFIERS config option.     * @return string The quoted identifier and alias.     */    public function quoteTableAs($ident, $alias = null, $auto=false)    {        return $this->_quoteIdentifierAs($ident, $alias, $auto);    }    /**     * Quote an identifier and an optional alias.     *     * @param string|array|Zend_Db_Expr $ident The identifier or expression.     * @param string $alias An optional alias.     * @param string $as The string to add between the identifier/expression and the alias.     * @param boolean $auto If true, heed the AUTO_QUOTE_IDENTIFIERS config option.     * @return string The quoted identifier and alias.     */    protected function _quoteIdentifierAs($ident, $alias = null, $auto = false, $as = ' AS ')    {        if ($ident instanceof Zend_Db_Expr) {            $quoted = $ident->__toString();        } elseif ($ident instanceof Zend_Db_Select) {            $quoted = '(' . $ident->__toString() . ')';        } else {            if (is_string($ident)) {                $ident = explode('.', $ident);            }            if (is_array($ident)) {                $segments = array();                foreach ($ident as $segment) {                    if ($segment instanceof Zend_Db_Expr) {                        $segments[] = $segment->__toString();                    } else {                        $segments[] = $this->_quoteIdentifier($segment, $auto);                    }                }                if ($alias !== null && end($ident) == $alias) {                    $alias = null;                }                $quoted = implode('.', $segments);            } else {                $quoted = $this->_quoteIdentifier($ident, $auto);            }        }        if ($alias !== null) {            $quoted .= $as . $this->_quoteIdentifier($alias, $auto);        }        return $quoted;    }    /**     * Quote an identifier.     *     * @param  string $value The identifier or expression.     * @param boolean $auto If true, heed the AUTO_QUOTE_IDENTIFIERS config option.     * @return string        The quoted identifier and alias.     */    protected function _quoteIdentifier($value, $auto=false)    {        if ($auto === false || $this->_autoQuoteIdentifiers === true) {            $q = $this->getQuoteIdentifierSymbol();            return ($q . str_replace("$q", "$q$q", $value) . $q);        }        return $value;    }    /**     * Returns the symbol the adapter uses for delimited identifiers.     *     * @return string     */    public function getQuoteIdentifierSymbol()    {        return '"';    }    /**     * Return the most recent value from the specified sequence in the database.     * This is supported only on RDBMS brands that support sequences     * (e.g. Oracle, PostgreSQL, DB2).  Other RDBMS brands return null.     *     * @param string $sequenceName     * @return string     */    public function lastSequenceId($sequenceName)    {        return null;    }    /**     * Generate a new value from the specified sequence in the database, and return it.     * This is supported only on RDBMS brands that support sequences     * (e.g. Oracle, PostgreSQL, DB2).  Other RDBMS brands return null.     *     * @param string $sequenceName     * @return string     */    public function nextSequenceId($sequenceName)    {        return null;    }    /**     * Helper method to change the case of the strings used     * when returning result sets in FETCH_ASSOC and FETCH_BOTH     * modes.     *     * This is not intended to be used by application code,     * but the method must be public so the Statement class     * can invoke it.     *     * @param string $key     * @returns string     */    public function foldCase($key)    {        switch ($this->_caseFolding) {            case Zend_Db::CASE_LOWER:                return strtolower((string) $key);            case Zend_Db::CASE_UPPER:                return strtoupper((string) $key);            case Zend_Db::CASE_NATURAL:            default:                return (string) $key;        }    }    /**     * Abstract Methods     */    /**     * Returns a list of the tables in the database.     *     * @return array     */    abstract public function listTables();    /**     * Returns the column descriptions for a table.     *     * The return value is an associative array keyed by the column name,     * as returned by the RDBMS.     *     * The value of each array element is an associative array     * with the following keys:     *     * SCHEMA_NAME => string; name of database or schema     * TABLE_NAME  => string;     * COLUMN_NAME => string; column name     * COLUMN_POSITION => number; ordinal position of column in table     * DATA_TYPE   => string; SQL datatype name of column     * DEFAULT     => string; default expression of column, null if none     * NULLABLE    => boolean; true if column can have nulls     * LENGTH      => number; length of CHAR/VARCHAR     * SCALE       => number; scale of NUMERIC/DECIMAL     * PRECISION   => number; precision of NUMERIC/DECIMAL     * UNSIGNED    => boolean; unsigned property of an integer type     * PRIMARY     => boolean; true if column is part of the primary key     * PRIMARY_POSITION => integer; position of column in primary key     *     * @param string $tableName     * @param string $schemaName OPTIONAL     * @return array     */    abstract public function describeTable($tableName, $schemaName = null);    /**     * Creates a connection to the database.     *     * @return void     */    abstract protected function _connect();    /**     * Force the connection to close.     *     * @return void     */    abstract public function closeConnection();    /**     * Prepare a statement and return a PDOStatement-like object.     *     * @param string|Zend_Db_Select $sql SQL query     * @return Zend_Db_Statment|PDOStatement     */    abstract public function prepare($sql);    /**     * Gets the last ID generated automatically by an IDENTITY/AUTOINCREMENT column.     *     * As a convention, on RDBMS brands that support sequences     * (e.g. Oracle, PostgreSQL, DB2), this method forms the name of a sequence     * from the arguments and returns the last id generated by that sequence.     * On RDBMS brands that support IDENTITY/AUTOINCREMENT columns, this method     * returns the last value generated for such a column, and the table name     * argument is disregarded.     *     * @param string $tableName   OPTIONAL Name of table.     * @param string $primaryKey  OPTIONAL Name of primary key column.     * @return string     */    abstract public function lastInsertId($tableName = null, $primaryKey = null);    /**     * Begin a transaction.     */    abstract protected function _beginTransaction();    /**     * Commit a transaction.     */    abstract protected function _commit();    /**     * Roll-back a transaction.     */    abstract protected function _rollBack();    /**     * Set the fetch mode.     *     * @param integer $mode     * @return void     * @throws Zend_Db_Adapter_Exception     */    abstract public function setFetchMode($mode);    /**     * Adds an adapter-specific LIMIT clause to the SELECT statement.     *     * @param mixed $sql     * @param integer $count     * @param integer $offset     * @return string     */    abstract public function limit($sql, $count, $offset = 0);    /**     * Check if the adapter supports real SQL parameters.     *     * @param string $type 'positional' or 'named'     * @return bool     */    abstract public function supportsParameters($type);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?