Source for file jDb.class.php

Documentation is available at jDb.class.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage db
  5. @author     Laurent Jouanneau
  6. @contributor
  7. @copyright  2005-2007 Laurent Jouanneau
  8. *
  9. *  API ideas of this class were get originally from the Copix project (CopixDbFactory, Copix 2.3dev20050901, http://www.copix.org)
  10. *  No lines of code are copyrighted by CopixTeam
  11. *
  12. @link      http://www.jelix.org
  13. @licence  http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
  14. */
  15.  
  16. /**
  17.  *
  18.  */
  19. require(JELIX_LIB_DB_PATH.'jDbConnection.class.php');
  20. require(JELIX_LIB_DB_PATH.'jDbResultSet.class.php');
  21.  
  22. /**
  23.  * factory for database connector and other db utilities
  24.  * @package  jelix
  25.  * @subpackage db
  26.  */
  27. class jDb {
  28.     /**
  29.     * return a database connector
  30.     * Use a local pool.
  31.     * @param string  $name  profil name to use. if empty, use the default one
  32.     * @return jDbConnection  connector
  33.     */
  34.     public static function getConnection ($name null){
  35.         static $cnxPool array();
  36.  
  37.         $profil self::getProfil ($name);
  38.  
  39.         // we set the name to avoid two connection for a same profil, when it is the default profil
  40.         // and when we call getConnection two times, one with no name and on with the name
  41.         if (!$name{
  42.             $name $profil['name'];
  43.         }
  44.  
  45.         if (!isset ($cnxPool[$name])){
  46.             $cnxPool[$nameself::_createConnector ($profil);
  47.         }
  48.         return $cnxPool[$name];
  49.     }
  50.  
  51.     /**
  52.      * create a new jDbWidget
  53.      * @param string  $name  profil name to use. if empty, use the default one
  54.      * @return jDbWidget 
  55.      */
  56.     public static function getDbWidget($name=null){
  57.         $dbw new jDbWidget(self::getConnection($name));
  58.         return $dbw;
  59.     }
  60.  
  61.     /**
  62.     * instancy a jDbTools object
  63.     * @param string $name profil name to use. if empty, use the default one
  64.     * @return jDbTools 
  65.     */
  66.     public static function getTools ($name=null){
  67.         $profil self::getProfil ($name);
  68.  
  69.         $driver $profil['driver'];
  70.  
  71.         if($driver == 'pdo'){
  72.             preg_match('/^(\w+)\:.*$/',$profil['dsn']$m);
  73.             $driver $m[1];
  74.         }
  75.  
  76.         global $gJConfig;
  77.         if(!isset($gJConfig->_pluginsPathList_db[$driver])
  78.             || !file_exists($gJConfig->_pluginsPathList_db[$driver]) ){
  79.             throw new jException('jelix~db.error.driver.notfound'$driver);
  80.         }
  81.         require_once($gJConfig->_pluginsPathList_db[$driver].$driver.'.dbtools.php');
  82.         $class $driver.'DbTools';
  83.  
  84.         //Création de l'objet
  85.         $cnx self::getConnection ($name);
  86.         $tools new $class ($cnx);
  87.         return $tools;
  88.     }
  89.  
  90.     /**
  91.     * load properties of a connector profil
  92.     *
  93.     * a profil is a section in the dbprofils.ini.php file
  94.     *
  95.     * with getProfil('myprofil') (or getProfil('myprofil', false)), you get the profil which
  96.     * has the name "myprofil". this name should correspond to a section name in the ini file
  97.     *
  98.     * with getProfil('myprofiltype',true), it will search a parameter named 'myprofiltype' in the ini file.
  99.     * This parameter should contains a profil name, and the corresponding profil will be loaded.
  100.     *
  101.     * with getProfil(), it will load the default profil, (so the profil of "default" type)
  102.     *
  103.     * @param string   $name  profil name or profil type to load. if empty, use the default one
  104.     * @param boolean  $nameIsProfilType  says if the name is a profil name or a profil type. this parameter exists since 1.0b2
  105.     * @return array  properties
  106.     */
  107.     public static function getProfil ($name=''$nameIsProfilType=false){
  108.         static $profils null;
  109.         global $gJConfig;
  110.         if($profils === null){
  111.             $profils parse_ini_file(JELIX_APP_CONFIG_PATH.$gJConfig->dbProfils true);
  112.         }
  113.  
  114.         if($name == ''){
  115.             if(isset($profils['default']))
  116.                 $name=$profils['default'];
  117.             else
  118.                 throw new jException('jelix~db.error.default.profil.unknow');
  119.         }elseif($nameIsProfilType){
  120.             if(isset($profils[$name]&& is_string($profils[$name])){
  121.                 $name $profils[$name];
  122.             }else{
  123.                 throw new jException('jelix~db.error.profil.type.unknow',$name);
  124.             }
  125.         }
  126.  
  127.         if(isset($profils[$name]&& is_array($profils[$name])){
  128.             $profils[$name]['name'$name;
  129.             return $profils[$name];
  130.         }else{
  131.             throw new jException('jelix~db.error.profil.unknow',$name);
  132.         }
  133.     }
  134.  
  135.     /**
  136.      * call it to test a profil (during an install for example)
  137.      * @param array  $profil  profil properties
  138.      * @return boolean  true if properties are ok
  139.      */
  140.     public function testProfil($profil){
  141.         try{
  142.             self::_createConnector ($profil);
  143.             $ok true;
  144.         }catch(Exception $e){
  145.             $ok false;
  146.         }
  147.         return $ok;
  148.     }
  149.  
  150.     /**
  151.     * create a connector
  152.     * @param array  $profil  profil properties
  153.     * @return jDbConnection|jDbPDOConnection database connector
  154.     */
  155.     private static function _createConnector ($profil){
  156.         if($profil['driver'== 'pdo'){
  157.             $dbh new jDbPDOConnection($profil);
  158.             return $dbh;
  159.         }else{
  160.             global $gJConfig;
  161.             if(!isset($gJConfig->_pluginsPathList_db[$profil['driver']])
  162.                 || !file_exists($gJConfig->_pluginsPathList_db[$profil['driver']]) ){
  163.                 throw new jException('jelix~db.error.driver.notfound'$profil['driver']);
  164.             }
  165.             $p $gJConfig->_pluginsPathList_db[$profil['driver']].$profil['driver'];
  166.             require_once($p.'.dbconnection.php');
  167.             require_once($p.'.dbresultset.php');
  168.  
  169.             //creating of the connection
  170.             $class $profil['driver'].'DbConnection';
  171.             $dbh new $class ($profil);
  172.             return $dbh;
  173.         }
  174.     }
  175. }
  176. ?>

Documentation generated on Wed, 07 Sep 2011 13:47:10 +0200 by phpDocumentor 1.4.3