<?php

class DBM    {

    
/**
     *    Grab a new connection
     *    @access    private
     **/
    
    
function &getDriver()    {
        static 
$driver;
        if (!isset(
$driver) )    {
            require_once(
'db/drivers/mysql.class.php');
            
$driver    =    new MySQLDriver();
        }
        return 
$driver;
    }

    
/**
     *    Return a record
     *    @param    object Query
     *    @return    object record
     *    @access    public
     **/
    
    
function &getRecord(&$sql)    {
        
$driver    =&    DBM::getDriver();
        return 
$driver->getRecord($sql->generateSql() );
    }
    
    
/**
     *    Return a record set
     *    @param    object Query
     *    @return    object record set
     *    @access    public
     **/
    
    
function &getRecordSet(&$sql)    {
        
$driver    =&    DBM::getDriver();
        return 
$driver->getRecordSet($sql->generateSql() );
    }
    
    
/**
     *    Return a paged record set
     *    @param    object Query
     *    @param    object pager
     *    @return    object record set
     *    @access    public
     **/
    
    
function &getPagedRecordSet($sql, &$pager)    {
        
$driver    =&    DBM::getDriver();
        return 
$driver->getPagedRecordSet($sql->generateSql(), $pager);
    }

    
/**
     *    Return an array
     *    @param    object Query
     *    @return    array row
     *    @access    public
     **/
    
    
function getArray(&$sql)    {
        
$driver    =&    DBM::getDriver();
        return 
$driver->getArray($sql->generateSql() );
    }
    
    
/**
     *    Return an associative array
     *    @param    object Query
     *    @return    array data set
     *    @access    public
     **/
    
    
function getAssocArray(&$sql)    {
        
$driver    =&    DBM::getDriver();
        return 
$driver->getAssocArray($sql->generateSql() );
    }
    
    
/**
     *    Return a paged associative array
     *    @param    object Query
     *    @param    object pager
     *    @return    array data set
     *    @access    public
     **/
    
    
function getPagedAssocArray(&$sql, &$pager)    {
        
$driver    =&    DBM::getDriver();
        return 
$driver->getPagedAssocArray($sql->generateSql(), $pager);
    }

    
/**
     *    insert a record
     *    @param    object Query
     *    @return    int newly created primary key
     *    @access    public
     **/
    
    
function insert(&$sql)    {
        
$driver    =&    DBM::getDriver();
        return 
$driver->insert($sql->generateSql() );
    }

    
/**
     *    update a record (or two)
     *    @param    object Query
     *    @return    int affected rows
     *    @access    public
     **/
    
    
function update(&$sql)    {
        
$driver    =&    DBM::getDriver();
        return 
$driver->update($sql->generateSql() );
    }
    
    
/**
     *    delete a record (or two)
     *    @param    object Query
     *    @return    int affected rows
     *    @access    public
     **/
    
    
function delete(&$sql)    {
        
$driver    =&    DBM::getDriver();
        return 
$driver->delete($sql->generateSql() );
    }
}

?>