<?php
// Modification log
// (date)       (author)    (activity/purpose)
//
// Todo
// (date)       (author)    (activity/purpose)
//

/**
 * A DBTableInfo helper class, implementing database specific methods.
 *
 * @author Tommy Gildseth <tommy@akili.no>;
 * @copyright Tommy Gildseth, September 2004
 * @version 0.1
 * @access private
 * @package DBTableInfo
 */
class DBTIPgsql {

    
//{{{ parseFlags(flags)
    /**
     * Extract information about a column, from the string contained in $flags
     *
     * Example of possible values for the $flags string:
     * not_null default_nextval%28dogsorts.breed_breed_id_seq%29 primary_key
     * default_n%2Fa
     *
     * @param string    $flags  column flags as returned by the
     *                          DB_Common::tableInfo() function
     * @access public
     */
    
function parseFlags($flags) {
        
$flags explode(' 'urldecode($flags));

        
$return = array('primaryKey' => false,
                        
'required' => false,
                        
'default' => false);
        foreach(
$flags as $flag) {
            switch(
$flag) {
                case 
'not_null':
                    
$return['required'] = true;
                    break;
                case 
'primary_key':
                    
$return['primaryKey'] = true;
                    break;
                default:
                    if (
stristr($flag'nextval')) {
                        
preg_match('/\(.*\)/'$flag$matches);
                        
$return['sequence'] = str_replace(array('('')'), ''$matches[0]);
                        
$return['default'] = 'sequence';
                    } else if (
stristr($flag'default')) {
                        
$return['default'] = str_replace('default_'''$flag);
                    }
            }
        }
    return 
$return;
    } 
// }}} end parseFlags


    //{{{ pkValue(pearDB, flags)
    /**
     * Get the currval() for this tables sequence, if any.
     *
     * @param object    $pearDB An instance of the PEAR DB class.
     * @param array     $flags  column flags for all the columns in the table
     * @throws DBTIError
     * @access public
     */
    
function pkValue(&$pearDB$flags) {
        
$return ''//TODO: Fix errormessage.
        
foreach($flags as $colName=>$colVal) {
            if (isset(
$colVal['sequence'])) {
                
$query "SELECT currval('".$colVal['sequence']."')";
                
$res $pearDB->getOne($query);
                if (
DB::isError($res)) {
                    
$return = new DBTIError(DBTI_NO_CURRVAL);
                } else {
                    
$return = array($colName => $res);
                }
            }
        }
        return 
$return;
    } 
// }}} end pkValue

}
?>