Source for file jDbTable.class.php

Documentation is available at jDbTable.class.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage db
  5. @author     Laurent Jouanneau
  6. @copyright  2010 Laurent Jouanneau
  7. *
  8. @link        http://www.jelix.org
  9. @licence     http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
  10. */
  11.  
  12. /**
  13.  * 
  14.  */
  15. abstract class jDbTable {
  16.  
  17.     /**
  18.      * @var string the name of the table
  19.      */
  20.     protected $name;
  21.  
  22.     /**
  23.      * @var jDbSchema the schema which holds the table
  24.      */
  25.     protected $schema;
  26.   
  27.     /**
  28.      * @var array of jDbColumns. null means "columns are not loaded"
  29.      */
  30.     protected $columns = null;
  31.     
  32.     /**
  33.      * @var jDbPrimaryKey the primary key. null means "primary key is not loaded". false means : no primary key
  34.      */
  35.     protected $primaryKey = null;
  36.  
  37.     /**
  38.      * @var array list unique keys, jDbUniqueKey. null means "unique key are not loaded"
  39.      */
  40.     protected $uniqueKeys = null;
  41.  
  42.     /**
  43.      * @var array list of indexes, jDbIndex. null means "indexes are not loaded"
  44.      */
  45.     protected $indexes = null;
  46.  
  47.     /**
  48.      * @var array list of references, jDbReference. null means "references are not loaded"
  49.      */
  50.     protected $references = null;
  51.  
  52.     /**
  53.      * @param string $name the table name
  54.      * @param jDbSchema $schema 
  55.      */
  56.     function __construct($name$schema{
  57.         $this->name = $name;
  58.         $this->schema = $schema;
  59.     }
  60.  
  61.  
  62.     public function getName({
  63.         return $this->name;
  64.     }
  65.  
  66.     /**
  67.      *
  68.      * @return Iterator on jDbColumn
  69.      */
  70.     public function getColumns({
  71.         if ($this->columns === null{
  72.             $this->_loadColumns();
  73.         }
  74.         return $this->columns;
  75.     }
  76.  
  77.     public function getColumn($name{
  78.         if (isset($this->columns[$name])) {
  79.             return $this->columns[$name];
  80.         }
  81.         return null;
  82.     }
  83.  
  84.     public function addColumn(jDbColumn $column{
  85.         $this->_addColumn($column);
  86.         $this->columns[$column->name$column;
  87.     }
  88.  
  89.     public function alterColumn(jDbColumn $column$oldName ''{
  90.         $oldColumn $this->getColumn(($oldName?$oldName:$column->name));
  91.         if (!$oldColumn{
  92.             $this->addColumn($column);
  93.             return;
  94.         }
  95.     
  96.         $this->_alterColumn($oldColumn$column);
  97.         $this->columns[$column->name$column;
  98.     }
  99.  
  100.     public function dropColumn($name{
  101.         $conn $this->schema->getConn();
  102.         $sql 'ALTER TABLE '.$conn->encloseName($this->name).' DROP COLUMN '.$conn->encloseName($name);
  103.         $conn->exec($sql);
  104.     }
  105.  
  106.     /**
  107.      *    @return jDbPrimaryKey|false false if there is no primary key
  108.      */
  109.     public function getPrimaryKey({
  110.         if ($this->primaryKey === null)
  111.             $this->_loadIndexesAndKeys();
  112.         return $this->primaryKey;
  113.     }
  114.  
  115.     public function setPrimaryKey(jDbPrimaryKey $key{
  116.         $pk $this->getPrimaryKey();
  117.         if ($pk == $key)
  118.             return;
  119.         if ($pk !== false)
  120.             $this->_removeIndex($pk);
  121.         $this->_createIndex($key);
  122.         $this->primaryKey = $key;
  123.     }
  124.  
  125.     public function dropPrimaryKey({
  126.         $pk $this->getPrimaryKey();
  127.         if ($pk !== false{
  128.             $this->_removeIndex($pk);
  129.             $this->primaryKey = false;
  130.         }
  131.     }
  132.  
  133.     /**
  134.      *    @return array of jDbIndex
  135.      */
  136.     public function getIndexes({
  137.         if ($this->indexes === null)
  138.             $this->_loadIndexesAndKeys();
  139.         return $this->indexes;
  140.     }
  141.  
  142.     public function getIndex($name{
  143.         if ($this->indexes === null)
  144.             $this->_loadIndexesAndKeys();
  145.         if (isset($this->indexes[$name]))
  146.             return $this->indexes[$name];
  147.         return null;
  148.     }
  149.  
  150.     public function addIndex(jDbIndex $index{
  151.         $this->alterIndex($index);
  152.     }
  153.  
  154.     public function alterIndex(jDbIndex $index{
  155.         $idx $this->getIndex($index->name);
  156.         if ($idx{
  157.             $this->_dropIndex($idx);
  158.         }
  159.         $this->_createIndex($index);
  160.         $this->indexes[$index->name$index;
  161.     }
  162.     
  163.     public function dropIndex($indexName{
  164.         $idx $this->getIndex($indexName);
  165.         if ($idx{
  166.             $this->_dropIndex($idx);
  167.         }
  168.     }
  169.  
  170.     /**
  171.      *    @return array of jDbUniqueKey
  172.      */
  173.     public function getUniqueKeys({
  174.         if ($this->uniqueKeys === null)
  175.             $this->_loadIndexesAndKeys();
  176.         return $this->uniqueKeys;
  177.     }
  178.  
  179.     public function getUniqueKey($name{
  180.         if ($this->uniqueKeys === null)
  181.             $this->_loadIndexesAndKeys();
  182.         if (isset($this->uniqueKeys[$name]))
  183.             return $this->uniqueKeys[$name];
  184.         return null;
  185.     }
  186.  
  187.     public function addUniqueKey(jDbUniqueKey $key{
  188.         $this->alterUniqueKey($key);
  189.     }
  190.  
  191.     public function alterUniqueKey(jDbUniqueKey $key{
  192.         $idx $this->getUniqueKey($index->name);
  193.         if ($idx{
  194.             $this->_dropIndex($idx);
  195.         }
  196.         $this->_createIndex($index);
  197.         $this->uniqueKeys[$index->name$index;
  198.     }
  199.  
  200.     public function dropUniqueKey($indexName{
  201.         $idx $this->getUniqueKey($indexName);
  202.         if ($idx{
  203.             $this->_dropIndex($idx);
  204.         }
  205.     }
  206.  
  207.     /**
  208.      *    @return array of jDbReference
  209.      */
  210.     public function getReferences({
  211.         if ($this->references === null)
  212.             $this->_loadReferences();
  213.         return $this->references;
  214.     }
  215.  
  216.     public function getReference($refName{
  217.         if ($this->references === null)
  218.             $this->_loadReferences();
  219.  
  220.         if (isset($this->references[$refName]))
  221.             return $this->references[$refName];
  222.         return null;
  223.     }
  224.  
  225.     public function addReference(jDbReference $reference{
  226.         $this->alterReference($reference);
  227.     }
  228.  
  229.     public function alterReference(jDbReference $reference{
  230.         $ref $this->getReference($reference->name);
  231.         if ($ref{
  232.             $this->_dropReference($ref);
  233.         }
  234.         $this->_createReference($reference);
  235.         $this->references[$reference->name$reference;
  236.     }
  237.  
  238.     public function dropReference($refName{
  239.         $ref $this->getReference($refName);
  240.         if ($ref{
  241.             $this->_dropReference($ref);
  242.         }
  243.     }
  244.     
  245.     abstract protected function _loadColumns();
  246.  
  247.     abstract protected function _alterColumn(jDbColumn $oldjDbColumn $new);
  248.  
  249.     abstract protected function _addColumn(jDbColumn $new);
  250.  
  251.     abstract protected function _loadIndexesAndKeys();
  252.  
  253.     abstract protected function _createIndex(jDbIndex $index);
  254.  
  255.     abstract protected function _dropIndex(jDbIndex $index);
  256.  
  257.     abstract protected function _loadReferences();
  258.     
  259.     abstract protected function _createReference(jDbReference $ref);
  260.  
  261.     abstract protected function _dropReference(jDbReference $ref);
  262.  
  263. }

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