⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pgsql.php

📁 Piwik#Opensourcewebanalytics一款可以和GOOGLE媲美的开源统计系统,运用AJAX.功能强大.无色提示:按照需要PHP5.1以上和MySQL数据库支持。
💻 PHP
字号:
<?php/** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category   Zend * @package    Zend_Db * @subpackage Adapter * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License * @version    $Id: Pgsql.php 163 2008-01-14 04:40:16Z matt $ *//** * @see Zend_Db_Adapter_Pdo_Abstract */require_once 'Zend/Db/Adapter/Pdo/Abstract.php';/** * Class for connecting to PostgreSQL databases and performing common operations. * * @category   Zend * @package    Zend_Db * @subpackage Adapter * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License */class Zend_Db_Adapter_Pdo_Pgsql extends Zend_Db_Adapter_Pdo_Abstract{    /**     * PDO type.     *     * @var string     */    protected $_pdoType = 'pgsql';    /**     * Returns a list of the tables in the database.     *     * @return array     */    public function listTables()    {        // @todo use a better query with joins instead of subqueries        $sql = "SELECT c.relname AS table_name "             . "FROM pg_class c, pg_user u "             . "WHERE c.relowner = u.usesysid AND c.relkind = 'r' "             . "AND NOT EXISTS (SELECT 1 FROM pg_views WHERE viewname = c.relname) "             . "AND c.relname !~ '^(pg_|sql_)' "             . "UNION "             . "SELECT c.relname AS table_name "             . "FROM pg_class c "             . "WHERE c.relkind = 'r' "             . "AND NOT EXISTS (SELECT 1 FROM pg_views WHERE viewname = c.relname) "             . "AND NOT EXISTS (SELECT 1 FROM pg_user WHERE usesysid = c.relowner) "             . "AND c.relname !~ '^pg_'";        return $this->fetchCol($sql);    }    /**     * 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     * IDENTITY         => integer; true if column is auto-generated with unique values     *     * @todo Discover integer unsigned property.     *     * @param  string $tableName     * @param  string $schemaName OPTIONAL     * @return array     */    public function describeTable($tableName, $schemaName = null)    {        $sql = "SELECT                a.attnum,                n.nspname,                c.relname,                a.attname AS colname,                t.typname AS type,                a.atttypmod,                FORMAT_TYPE(a.atttypid, a.atttypmod) AS complete_type,                d.adsrc AS default_value,                a.attnotnull AS notnull,                a.attlen AS length,                co.contype,                ARRAY_TO_STRING(co.conkey, ',') AS conkey            FROM pg_attribute AS a                JOIN pg_class AS c ON a.attrelid = c.oid                JOIN pg_namespace AS n ON c.relnamespace = n.oid                JOIN pg_type AS t ON a.atttypid = t.oid                LEFT OUTER JOIN pg_constraint AS co ON (co.conrelid = c.oid                    AND a.attnum = ANY(co.conkey) AND co.contype = 'p')                LEFT OUTER JOIN pg_attrdef AS d ON d.adrelid = c.oid AND d.adnum = a.attnum            WHERE a.attnum > 0 AND c.relname = ".$this->quote($tableName);        if ($schemaName) {            $sql .= " AND n.nspname = ".$this->quote($schemaName);        }        $sql .= ' ORDER BY a.attnum';        $stmt = $this->query($sql);        // Use FETCH_NUM so we are not dependent on the CASE attribute of the PDO connection        $result = $stmt->fetchAll(Zend_Db::FETCH_NUM);        $attnum        = 0;        $nspname       = 1;        $relname       = 2;        $colname       = 3;        $type          = 4;        $atttypemod    = 5;        $complete_type = 6;        $default_value = 7;        $notnull       = 8;        $length        = 9;        $contype       = 10;        $conkey        = 11;        $desc = array();        foreach ($result as $key => $row) {            if ($row[$type] == 'varchar') {                if (preg_match('/character varying(?:\((\d+)\))?/', $row[$complete_type], $matches)) {                    if (isset($matches[1])) {                        $row[$length] = $matches[1];                    } else {                        $row[$length] = null; // unlimited                    }                }            }            list($primary, $primaryPosition, $identity) = array(false, null, false);            if ($row[$contype] == 'p') {                $primary = true;                $primaryPosition = array_search($row[$attnum], explode(',', $row[$conkey])) + 1;                $identity = (bool) (preg_match('/^nextval/', $row[$default_value]));            }            $desc[$this->foldCase($row[$colname])] = array(                'SCHEMA_NAME'      => $this->foldCase($row[$nspname]),                'TABLE_NAME'       => $this->foldCase($row[$relname]),                'COLUMN_NAME'      => $this->foldCase($row[$colname]),                'COLUMN_POSITION'  => $row[$attnum],                'DATA_TYPE'        => $row[$type],                'DEFAULT'          => $row[$default_value],                'NULLABLE'         => (bool) ($row[$notnull] != 't'),                'LENGTH'           => $row[$length],                'SCALE'            => null, // @todo                'PRECISION'        => null, // @todo                'UNSIGNED'         => null, // @todo                'PRIMARY'          => $primary,                'PRIMARY_POSITION' => $primaryPosition,                'IDENTITY'         => $identity            );        }        return $desc;    }    /**     * Adds an adapter-specific LIMIT clause to the SELECT statement.     *     * @param string $sql     * @param integer $count     * @param integer $offset OPTIONAL     * @return string     */    public function limit($sql, $count, $offset = 0)    {        $count = intval($count);        if ($count <= 0) {            /**             * @see Zend_Db_Adapter_Exception             */            require_once 'Zend/Db/Adapter/Exception.php';            throw new Zend_Db_Adapter_Exception("LIMIT argument count=$count is not valid");        }        $offset = intval($offset);        if ($offset < 0) {            /**             * @see Zend_Db_Adapter_Exception             */            require_once 'Zend/Db/Adapter/Exception.php';            throw new Zend_Db_Adapter_Exception("LIMIT argument offset=$offset is not valid");        }        $sql .= " LIMIT $count";        if ($offset > 0) {            $sql .= " OFFSET $offset";        }        return $sql;    }    /**     * 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 integer     */    public function lastSequenceId($sequenceName)    {        $this->_connect();        $value = $this->fetchOne("SELECT CURRVAL(".$this->quote($sequenceName).")");        return $value;    }    /**     * 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 integer     */    public function nextSequenceId($sequenceName)    {        $this->_connect();        $value = $this->fetchOne("SELECT NEXTVAL(".$this->quote($sequenceName).")");        return $value;    }    /**     * 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 integer     */    public function lastInsertId($tableName = null, $primaryKey = null)    {        if ($tableName !== null) {            $sequenceName = $tableName;            if ($primaryKey) {                $sequenceName .= "_$primaryKey";            }            $sequenceName .= '_seq';            return $this->lastSequenceId($sequenceName);        }        return $this->_connection->lastInsertId($tableName);    }}

⌨️ 快捷键说明

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