Source for file jDbSchema.class.php

Documentation is available at jDbSchema.class.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage db
  5. @author     Laurent Jouanneau
  6. @contributor AurĂ©lien Marcel
  7. @copyright  2010 Laurent Jouanneau, 2011 AurĂ©lien Marcel
  8. *
  9. @link        http://jelix.org
  10. @licence     http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
  11. */
  12.  
  13. require_once(JELIX_LIB_PATH.'db/jDbTable.class.php');
  14. require_once(JELIX_LIB_PATH.'db/jDbColumn.class.php');
  15.  
  16. /**
  17.  *
  18.  */
  19. abstract class jDbSchema {
  20.  
  21.     /**
  22.      * @var jDbConnection 
  23.      */
  24.     protected $conn;
  25.  
  26.     function __construct(jDbConnection $conn{
  27.         $this->conn = $conn;
  28.     }
  29.  
  30.     /**
  31.      * @return jDbConnection 
  32.      */
  33.     public function getConn({
  34.         return $this->conn;
  35.     }
  36.  
  37.     /**
  38.      * create the given table
  39.      * @return jDbTable the object corresponding to the created table
  40.      */
  41.     function createTable($name$columns$primaryKey$attributes array()) {
  42.         $name $this->conn->prefixTable($name);
  43.         if ($this->tables === null{
  44.             $this->tables = $this->_getTables();
  45.         }
  46.  
  47.         if (isset($this->tables[$name])) {
  48.             return null;
  49.         }
  50.  
  51.         $this->tables[$name$this->_createTable($name$columns$primaryKey$attributes);
  52.  
  53.         return $this->tables[$name];
  54.     }
  55.  
  56.     /**
  57.      * load informations of the given table
  58.      * @return jDbTable ready to make change
  59.      */
  60.     function getTable($name{
  61.         $name $this->conn->prefixTable($name);
  62.  
  63.         if ($this->tables === null{
  64.             $this->tables = $this->_getTables();
  65.         }
  66.  
  67.         if (isset($this->tables[$name])) {
  68.             return $this->tables[$name];
  69.         }
  70.         return null;
  71.     }
  72.  
  73.  
  74.     protected $tables = null;
  75.  
  76.     /**
  77.      * @return array of jDbTable
  78.      */
  79.     public function getTables({
  80.         if ($this->tables === null{
  81.             $this->tables = $this->_getTables();
  82.         }
  83.         return $this->tables;
  84.     }
  85.  
  86.  
  87.     public function dropTable(jDbTable $table{
  88.         if ($this->tables === null{
  89.             $this->tables = $this->_getTables();
  90.         }
  91.         $name $table->getName();
  92.         if (isset($this->tables[$name])) {
  93.             $this->_dropTable($name);
  94.             unset($this->tables[$name]);
  95.         }
  96.     }
  97.  
  98.     /**
  99.      * create the given table into the database
  100.      * @return jDbTable the object corresponding to the created table
  101.      */
  102.     abstract protected function _createTable($name$columns$primaryKey$attributes array());
  103.  
  104.     abstract protected function _getTables();
  105.  
  106.     protected function _dropTable($name{
  107.         $this->conn->exec('DROP TABLE '.$this->conn->encloseName($name));
  108.     }
  109.  
  110.     /**
  111.      * return the SQL string corresponding to the given column.
  112.      * private method, should be used only by a jDbTable object
  113.      * @param jDbColumn $col  the column
  114.      * @param jDbTools $tools 
  115.      * @return string the sql string
  116.      * @access private
  117.      */
  118.     function _prepareSqlColumn($col{
  119.         $this->normalizeColumn($col);
  120.         $colstr $this->conn->encloseName($col->name).' '.$col->nativeType;
  121.  
  122.         if ($col->length{
  123.             $colstr .= '('.$col->length.')';
  124.         }
  125.  
  126.         $colstr.= ($col->notNull?' NOT NULL':' NULL');
  127.  
  128.         if ($col->hasDefault && !$col->autoIncrement{
  129.             if (!($col->notNull && $col->default === null)) {
  130.                 if ($col->default === null)
  131.                     $colstr .= ' DEFAULT NULL';
  132.                 else
  133.                     $colstr .= ' DEFAULT '.$this->conn->quote($col->default);
  134.             }
  135.         }
  136.         return $colstr;
  137.     }
  138.  
  139.     /**
  140.      * fill correctly some properties of the column, depending of its type
  141.      * and other properties
  142.      * @param jDbColumn $col 
  143.      */
  144.     function normalizeColumn($col{
  145.         $type $this->conn->tools()->getTypeInfo($col->type);
  146.  
  147.         $col->nativeType $type[0];
  148.         if (!$col->length && $type[5]{
  149.             $col->length $type[5];
  150.         }
  151.  
  152.         if ($type[6]{
  153.             $col->autoIncrement true;
  154.             $col->notNull true;
  155.         }
  156.     }
  157. }

Documentation generated on Thu, 19 Sep 2013 00:04:07 +0200 by phpDocumentor 1.4.3