2018-11-28 03:07:06 +00:00
< ? php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Think\Db\Driver ;
use Think\Db\Driver ;
/**
* Pgsql数据库驱动
*/
class Pgsql extends Driver {
/**
* 解析pdo连接的dsn信息
* @ access public
* @ param array $config 连接信息
* @ return string
*/
protected function parseDsn ( $config ){
$dsn = 'pgsql:dbname=' . $config [ 'database' ] . ';host=' . $config [ 'hostname' ];
if ( ! empty ( $config [ 'hostport' ])) {
$dsn .= ';port=' . $config [ 'hostport' ];
}
return $dsn ;
}
/**
* 取得数据表的字段信息
* @ access public
* @ return array
*/
public function getFields ( $tableName ) {
list ( $tableName ) = explode ( ' ' , $tableName );
$result = $this -> query ( 'select fields_name as "field",fields_type as "type",fields_not_null as "null",fields_key_name as "key",fields_default as "default",fields_default as "extra" from table_msg(' . $tableName . ');' );
$info = array ();
if ( $result ){
foreach ( $result as $key => $val ) {
$info [ $val [ 'field' ]] = array (
'name' => $val [ 'field' ],
'type' => $val [ 'type' ],
'notnull' => ( bool ) ( $val [ 'null' ] === '' ), // not null is empty, null is yes
'default' => $val [ 'default' ],
'primary' => ( strtolower ( $val [ 'key' ]) == 'pri' ),
'autoinc' => ( strtolower ( $val [ 'extra' ]) == 'auto_increment' ),
);
}
}
return $info ;
}
/**
* 取得数据库的表信息
* @ access public
* @ return array
*/
public function getTables ( $dbName = '' ) {
$result = $this -> query ( " select tablename as Tables_in_test from pg_tables where schemaname ='public' " );
$info = array ();
foreach ( $result as $key => $val ) {
$info [ $key ] = current ( $val );
}
return $info ;
}
/**
* limit分析
* @ access protected
* @ param mixed $lmit
* @ return string
*/
public function parseLimit ( $limit ) {
$limitStr = '' ;
if ( ! empty ( $limit )) {
$limit = explode ( ',' , $limit );
if ( count ( $limit ) > 1 ) {
$limitStr .= ' LIMIT ' . $limit [ 1 ] . ' OFFSET ' . $limit [ 0 ] . ' ' ;
} else {
$limitStr .= ' LIMIT ' . $limit [ 0 ] . ' ' ;
}
}
return $limitStr ;
}
}