2005-05-22 23:24:09 +00:00
< ? PHP
//////////////////////////////////////////////////////////////////////////
// + $Id$
// +------------------------------------------------------------------+ //
// + Cake <https://developers.nextco.com/cake/> + //
// + Copyright: (c) 2005, Cake Authors/Developers + //
// + Author(s): Michal Tatarynowicz aka Pies <tatarynowicz@gmail.com> + //
// + Larry E. Masters aka PhpNut <nut@phpnut.com> + //
// + Kamil Dzielinski aka Brego <brego.dk@gmail.com> + //
// +------------------------------------------------------------------+ //
// + Licensed under The MIT License + //
// + Redistributions of files must retain the above copyright notice. + //
// + See: http://www.opensource.org/licenses/mit-license.php + //
//////////////////////////////////////////////////////////////////////////
/**
* Purpose : DBO_Postgres
* Enter description here ...
*
* @ filesource
* @ author Cake Authors / Developers
* @ copyright Copyright ( c ) 2005 , Cake Authors / Developers
* @ link https :// developers . nextco . com / cake / wiki / Authors Authors / Developers
* @ package cake
* @ subpackage cake . libs
* @ since Cake v 1.0 . 0.114
* @ version $Revision $
* @ modifiedby $LastChangedBy $
* @ lastmodified $Date $
* @ license http :// www . opensource . org / licenses / mit - license . php The MIT License
*/
/**
* Enter description here ...
*/
uses ( 'object' , 'dbo' );
/**
2005-06-02 19:37:06 +00:00
* PostgreSQL layer for DBO .
2005-05-22 23:24:09 +00:00
*
* @ package cake
* @ subpackage cake . libs
* @ since Cake v 1.0 . 0.114
*
*/
class DBO_Postgres extends DBO {
/**
2005-05-31 23:18:22 +00:00
* Connects to the database using options in the given configuration array .
2005-05-22 23:24:09 +00:00
*
2005-05-31 23:18:22 +00:00
* @ param array $config Configuration array for connecting
2005-05-22 23:24:09 +00:00
* @ return unknown
*/
function connect ( $config ) {
if ( $config ) {
$this -> config = $config ;
$this -> _conn = pg_pconnect ( " host= { $config [ 'host' ] } dbname= { $config [ 'database' ] } user= { $config [ 'login' ] } password= { $config [ 'password' ] } " );
}
$this -> connected = $this -> _conn ? true : false ;
if ( $this -> connected )
return true ;
else
die ( 'Could not connect to DB.' );
}
/**
2005-05-31 23:18:22 +00:00
* Disconnects from database .
2005-05-22 23:24:09 +00:00
*
* @ return unknown
*/
function disconnect () {
return pg_close ( $this -> _conn );
}
/**
2005-05-31 23:18:22 +00:00
* Executes given SQL statement .
2005-05-22 23:24:09 +00:00
*
2005-05-31 23:18:22 +00:00
* @ param string $sql
2005-05-22 23:24:09 +00:00
* @ return unknown
*/
function execute ( $sql ) {
return pg_query ( $this -> _conn , $sql );
}
/**
2005-05-31 23:18:22 +00:00
* Returns a row from given resultset .
2005-05-22 23:24:09 +00:00
*
* @ param unknown_type $res
* @ return unknown
*/
function fetchRow ( $res ) {
return pg_fetch_array ( $res );
}
/**
2005-05-31 23:18:22 +00:00
* Returns an array of tables in the database . If there are no tables , an error is raised and the application exits .
2005-05-22 23:24:09 +00:00
*
2005-05-31 23:18:22 +00:00
* @ return array Array of tablenames in the database
2005-05-22 23:24:09 +00:00
*/
function tables () {
$sql = " SELECT a.relname AS name
FROM pg_class a , pg_user b
WHERE ( relkind = 'r' ) and relname !~ '^pg_' AND relname !~ '^sql_'
AND relname !~ '^xin[vx][0-9]+' AND b . usesysid = a . relowner
AND NOT ( EXISTS ( SELECT viewname FROM pg_views WHERE viewname = a . relname )); " ;
$result = $this -> all ( $sql );
if ( ! $result ) {
trigger_error ( ERROR_NO_TABLE_LIST , E_USER_ERROR );
exit ;
}
else {
$tables = array ();
foreach ( $result as $item ) $tables [] = $item [ 'name' ];
return $tables ;
}
}
/**
2005-05-31 23:18:22 +00:00
* Returns an array of the fields in given table name .
2005-05-22 23:24:09 +00:00
*
2005-05-31 23:18:22 +00:00
* @ param string $table_name Name of database table to inspect
* @ return array Fields in table . Keys are name and type
2005-05-22 23:24:09 +00:00
*/
function fields ( $table_name ) {
$sql = " SELECT c.relname, a.attname, t.typname FROM pg_class c, pg_attribute a, pg_type t WHERE c.relname = ' { $table_name } ' AND a.attnum > 0 AND a.attrelid = c.oid AND a.atttypid = t.oid " ;
$fields = false ;
foreach ( $this -> all ( $sql ) as $field ) {
$fields [] = array (
'name' => $field [ 'attname' ],
'type' => $field [ 'typname' ]);
}
return $fields ;
}
/**
2005-05-31 23:18:22 +00:00
* Returns a quoted and escaped string of $data for use in an SQL statement .
2005-05-22 23:24:09 +00:00
*
2005-05-31 23:18:22 +00:00
* @ param string $data String to be prepared for use in an SQL statement
* @ return string Quoted and escaped
2005-05-22 23:24:09 +00:00
*/
function prepare ( $data ) {
2005-05-29 19:43:59 +00:00
return " ' " . pg_escape_string ( $data ) . " ' " ;
2005-05-22 23:24:09 +00:00
}
/**
2005-05-31 23:18:22 +00:00
* Returns a formatted error message from previous database operation .
2005-05-22 23:24:09 +00:00
*
2005-05-31 23:18:22 +00:00
* @ return string Error message
2005-05-22 23:24:09 +00:00
*/
function lastError () {
return pg_last_error () ? pg_last_error () : null ;
}
/**
2005-05-31 23:18:22 +00:00
* Returns number of affected rows in previous database operation . If no previous operation exists , this returns false .
2005-05-22 23:24:09 +00:00
*
2005-05-31 23:18:22 +00:00
* @ return int Number of affected rows
2005-05-22 23:24:09 +00:00
*/
function lastAffected () {
return $this -> _result ? pg_affected_rows ( $this -> _result ) : false ;
}
/**
2005-05-31 23:18:22 +00:00
* Returns number of rows in previous resultset . If no previous resultset exists , this returns false .
2005-05-22 23:24:09 +00:00
*
2005-05-31 23:18:22 +00:00
* @ return int
2005-05-22 23:24:09 +00:00
*/
function lastNumRows () {
return $this -> _result ? pg_num_rows ( $this -> _result ) : false ;
}
/**
2005-05-31 23:18:22 +00:00
* Returns the ID generated from the previous INSERT operation .
2005-05-22 23:24:09 +00:00
*
2005-05-31 23:18:22 +00:00
* @ param string $table Name of the database table
* @ param string $field Name of the ID database field . Defaults to " id "
2005-05-22 23:24:09 +00:00
* @ return unknown
*/
function lastInsertId ( $table , $field = 'id' ) {
$sql = " SELECT CURRVAL(' { $table } _ { $field } _seq') AS max " ;
$res = $this -> rawQuery ( $sql );
$data = $this -> fetchRow ( $res );
return $data [ 'max' ];
}
}
2005-05-16 23:14:37 +00:00
?>