Source for file pgsql.dbtools.php

Documentation is available at pgsql.dbtools.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage db_driver
  5. @author     Laurent Jouanneau
  6. @contributor Laurent Jouanneau
  7. @contributor Nicolas Jeudy (patch ticket #99)
  8. @copyright  2005-2007 Laurent Jouanneau
  9. @link        http://www.jelix.org
  10. @licence  http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
  11. */
  12.  
  13. /**
  14.  *
  15.  * @package    jelix
  16.  * @subpackage db_driver
  17.  */
  18. class pgsqlDbTools extends jDbTools {
  19.  
  20.    /*
  21.    * retourne la liste des tables
  22.    * @return   array    $tab[] = $nomDeTable
  23.    */
  24.    protected function _getTableList (){
  25.       $results array ();
  26.       $sql "SELECT tablename FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema') ORDER BY tablename";
  27.       $rs $this->_connector->query ($sql);
  28.       while ($line $rs->fetch()){
  29.          $results[$line->tablename;
  30.       }
  31.       return $results;
  32.    }
  33.     /**
  34.     * récupère la liste des champs pour une base donnée.
  35.     * @return    array    $tab[NomDuChamp] = obj avec prop (tye, length, lengthVar, notnull)
  36.     */
  37.     protected function _getFieldList ($tableName){
  38.         $results array ();
  39.         
  40.         // get table informations
  41.         $sql ='SELECT oid, relhaspkey, relhasindex FROM pg_class WHERE relname = \''.$tableName.'\'';
  42.         $rs $this->_connector->query ($sql);
  43.         if (($table $rs->fetch())) {
  44.             throw new Exception('dbtools, pgsql: unknown table');
  45.         }
  46.  
  47.         $pkeys array();
  48.         // get primary keys informations
  49.         if ($table->relhaspkey == 't'{
  50.             $sql 'SELECT indkey FROM pg_index WHERE indrelid = '.$table->oid.' and indisprimary = true';
  51.             $rs $this->_connector->query ($sql);
  52.             $pkeys preg_split("/[\s]+/"$rs->fetch()->indkey);
  53.         }
  54.  
  55.         // get field informations
  56.         $sql_get_fields "SELECT t.typname, a.attname, a.attnotnull, a.attnum, a.attlen, a.atttypmod,
  57.         a.atthasdef, d.adsrc
  58.         FROM pg_type t, pg_attribute a LEFT JOIN pg_attrdef d ON (d.adrelid=a.attrelid AND d.adnum=a.attnum)
  59.         WHERE
  60.           a.attnum > 0 AND a.attrelid = ".$table->oid." AND a.atttypid = t.oid
  61.         ORDER BY a.attnum";
  62.  
  63.         $toReturn=array();
  64.         $rs $this->_connector->query ($sql_get_fields);
  65.         while ($line $rs->fetch ()){
  66.             $field new jDbFieldProperties();
  67.             $field->name $line->attname;
  68.             $field->type preg_replace('/(\D*)\d*/','\\1',$line->typname);
  69.             $field->notNull ($line->attnotnull=='t');
  70.             $field->hasDefault ($line->atthasdef == 't');
  71.             $field->default $line->adsrc;
  72.  
  73.             if(preg_match('/^nextval\(.*\)$/'$line->adsrc)){
  74.                 $field->autoIncrement=true;
  75.                 $field->default '';
  76.             }
  77.  
  78.             if(in_array($line->attnum$pkeys))
  79.                 $field->primary true;
  80.  
  81.             if($line->attlen == -&& $line->atttypmod != -1)
  82.                 $field->length $line->atttypmod 4;
  83.  
  84.             $toReturn[$line->attname]=$field;
  85.         }
  86.  
  87.         return $toReturn;
  88.     }
  89.  
  90.     public function execSQLScript ($file{
  91.         $sqlQueries=file_get_contents($file);
  92.         $this->_connector->query ($sqlQueries);
  93.     }
  94. }
  95. ?>

Documentation generated on Wed, 07 Sep 2011 13:48:27 +0200 by phpDocumentor 1.4.3