Changeset 621

Show
Ignore:
Timestamp:
10/26/07 18:22:08 (1 year ago)
Author:
laurentj
Message:

worked on ticket #101: implementing driver for jDaoGenerator

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/build/manifests/jelix-lib.mn

    r614 r621  
    300300  intuition.dbresultset.php 
    301301  intuition.dbtools.php 
     302  intuition.daobuilder.php 
    302303 
    303304cd lib/jelix/plugins/db/mysql 
     
    305306  mysql.dbresultset.php 
    306307  mysql.dbtools.php 
     308  mysql.daobuilder.php 
    307309 
    308310cd lib/jelix/plugins/db/postgresql 
     
    310312  postgresql.dbresultset.php 
    311313  postgresql.dbtools.php 
     314  postgresql.daobuilder.php 
    312315 
    313316cd lib/jelix/plugins/db/sqlite 
     
    315318  sqlite.dbresultset.php 
    316319  sqlite.dbtools.php 
     320  sqlite.daobuilder.php 
     321 
     322cd lib/jelix/plugins/db/oci8 
     323  oci8.daobuilder.php 
    317324 
    318325cd lib/jelix/plugins/tpl/common 
  • trunk/build/manifests/jelix-lib.mn

    r614 r621  
    300300  intuition.dbresultset.php 
    301301  intuition.dbtools.php 
     302  intuition.daobuilder.php 
    302303 
    303304cd lib/jelix/plugins/db/mysql 
     
    305306  mysql.dbresultset.php 
    306307  mysql.dbtools.php 
     308  mysql.daobuilder.php 
    307309 
    308310cd lib/jelix/plugins/db/postgresql 
     
    310312  postgresql.dbresultset.php 
    311313  postgresql.dbtools.php 
     314  postgresql.daobuilder.php 
    312315 
    313316cd lib/jelix/plugins/db/sqlite 
     
    315318  sqlite.dbresultset.php 
    316319  sqlite.dbtools.php 
     320  sqlite.daobuilder.php 
     321 
     322cd lib/jelix/plugins/db/oci8 
     323  oci8.daobuilder.php 
    317324 
    318325cd lib/jelix/plugins/tpl/common 
  • trunk/lib/jelix/dao/jDaoCompiler.class.php

    r582 r621  
    8787        $parser->parse(simplexml_import_dom($doc)); 
    8888 
    89         $generator = new jDaoGenerator($selector->getDaoClass(), $selector->getDaoRecordClass(), $parser); 
     89        global $gJConfig; 
     90#ifnot ENABLE_OPTIMIZED_SOURCE 
     91        if(!isset($gJConfig->_pluginsPathList_db[$selector->driver]) 
     92            || !file_exists($gJConfig->_pluginsPathList_db[$selector->driver]) ){ 
     93                throw new jException('jelix~db.error.driver.notfound', $profil['driver']); 
     94        } 
     95#endif 
     96        require_once($gJConfig->_pluginsPathList_db[$selector->driver].$selector->driver.'.daobuilder.php'); 
     97        $class = $selector->driver.'DaoBuilder'; 
     98        $generator = new $class ($selector->getDaoClass(), $selector->getDaoRecordClass(), $parser); 
    9099 
    91100        // génération des classes PHP correspondant à la définition de la DAO 
  • trunk/lib/jelix/dao/jDaoCompiler.class.php

    r582 r621  
    8787        $parser->parse(simplexml_import_dom($doc)); 
    8888 
    89         $generator = new jDaoGenerator($selector->getDaoClass(), $selector->getDaoRecordClass(), $parser); 
     89        global $gJConfig; 
     90#ifnot ENABLE_OPTIMIZED_SOURCE 
     91        if(!isset($gJConfig->_pluginsPathList_db[$selector->driver]) 
     92            || !file_exists($gJConfig->_pluginsPathList_db[$selector->driver]) ){ 
     93                throw new jException('jelix~db.error.driver.notfound', $profil['driver']); 
     94        } 
     95#endif 
     96        require_once($gJConfig->_pluginsPathList_db[$selector->driver].$selector->driver.'.daobuilder.php'); 
     97        $class = $selector->driver.'DaoBuilder'; 
     98        $generator = new $class ($selector->getDaoClass(), $selector->getDaoRecordClass(), $parser); 
    9099 
    91100        // génération des classes PHP correspondant à la définition de la DAO 
  • trunk/lib/jelix/dao/jDaoGenerator.class.php

    r614 r621  
    3030   * @var jDaoParser 
    3131   */ 
    32    private $_datasParser = null; 
     32   protected $_datasParser = null; 
    3333 
    3434   /** 
     
    3636   * @var string 
    3737   */ 
    38    private $_DaoRecordClassName = null; 
     38   protected $_DaoRecordClassName = null; 
    3939 
    4040   /** 
     
    4242   * @var string 
    4343   */ 
    44    private $_DaoClassName=null; 
     44   protected $_DaoClassName = null; 
     45 
     46 
     47   protected $propertiesListForInsert = 'PrimaryTable'; 
     48   protected $aliasWord = ' AS '; 
    4549 
    4650   /** 
     
    5862   * build all classes 
    5963   */ 
    60    public function buildClasses () { 
     64   public final function buildClasses () { 
    6165 
    6266      $src = array(); 
     
    146150         $src[] = '}else{'; 
    147151 
    148          if (($this->_dbtype=='mysql') || ($this->_dbtype=='sqlserver') || ($this->_dbtype=='postgresql')) { 
    149             $fields = $this->_getPropertiesBy('PrimaryFieldsExcludeAutoIncrement'); 
    150          }else{ 
    151             $fields = $this->_getPropertiesBy('PrimaryTable'); 
    152          } 
     152         $fields = $this->_getPropertiesBy($this->propertiesListForInsert); 
    153153      }else{ 
    154154         $fields = $this->_getPropertiesBy('PrimaryTable'); 
     
    176176      if($pkai !== null){ 
    177177         $src[] = '   if($result){'; 
    178          if ($this->_dbtype=='sqlserver') { 
    179             $src[] = '      if($record->'.$pkai->name.' < 1 ) $record->'.$pkai->name.'= $this->_conn->lastIdInTable(\''.$pkai->fieldName.'\',\''.$pTableRealName.'\');'; 
    180          }else if ($this->_dbtype=='postgresql') { 
    181             $src[] = '      if($record->'.$pkai->name.' < 1  ) $record->'.$pkai->name.'= $this->_conn->lastInsertId(\''.$pkai->sequenceName.'\');'; 
    182          }else{ 
    183             $src[] = '      if($record->'.$pkai->name.' < 1  ) $record->'.$pkai->name.'= $this->_conn->lastInsertId();'; 
    184          } 
    185          $src[] = '    return $result;'; 
    186          $src[] = ' }else return false;'; 
     178         $src[] = '      if($record->'.$pkai->name.' < 1 ) '; 
     179         $src[] = $this->genUpdateAutoIncrementPK($pkai, $pTableRealName); 
     180         $src[] = '      return $result;'; 
     181         $src[] = '   }else return false;'; 
    187182      }else{ 
    188183         $src[] = '    return $result;'; 
     
    354349    * @return array  FROM string and WHERE string 
    355350    */ 
    356     protected function _getFromClause(){ 
    357  
    358       $aliaslink = ($this->_dbtype == 'oci8'?' ':' AS '); 
     351    final protected function _getFromClause(){ 
    359352 
    360353      $sqlWhere = ''; 
     
    366359 
    367360      if($primarytable['name']!=$primarytable['realname']) 
    368          $sqlFrom =$ptrealname.$aliaslink.$ptname; 
     361         $sqlFrom =$ptrealname.$this->aliasWord.$ptname; 
    369362      else 
    370363         $sqlFrom =$ptrealname; 
     
    375368 
    376369         if($table['name']!=$table['realname']) 
    377             $r =$this->_encloseName($table['realname']).$aliaslink.$tablename; 
     370            $r =$this->_encloseName($table['realname']).$this->aliasWord.$tablename; 
    378371         else 
    379372            $r =$this->_encloseName($table['realname']); 
     
    397390            } 
    398391            $fieldjoin=substr($fieldjoin,4); 
    399             //$fieldjoin=$primarytable['name'].'.'.$table['onforeignkey'].'='.$table['name'].'.'.$table['primarykey']; 
     392 
    400393            if($tablejoin[1] == 0){ 
    401394               $sqlFrom.=' LEFT JOIN '.$r.' ON ('.$fieldjoin.')'; 
     
    410403         $tablename = $this->_encloseName($table['name']); 
    411404         if($table['name']!=$table['realname']) 
    412             $sqlFrom .=', '.$this->_encloseName($table['realname']).$aliaslink.$tablename; 
     405            $sqlFrom .=', '.$this->_encloseName($table['realname']).$this->aliasWord.$tablename; 
    413406        else 
    414407            $sqlFrom .=', '.$this->_encloseName($table['realname']); 
     
    417410           $sqlWhere.=' AND '.$ptname.'.'.$this->_encloseName($fk).'='.$tablename.'.'.$this->_encloseName($table['pk'][$k]); 
    418411        } 
    419          //$sqlWhere.=' AND '.$primarytable['name'].'.'.$table['onforeignkey'].'='.$table['name'].'.'.$table['primarykey']; 
    420412      } 
    421413 
     
    838830 
    839831    protected function _encloseName($name){ 
    840         if($this->_dbtype == 'mysql'){ 
    841             return '`'.$name.'`'; 
    842         }elseif($this->_dbtype == 'postgresql'){ 
    843             return '"'.$name.'"'; 
    844         }else 
    845             return $name; 
    846     } 
     832        return $name; 
     833    } 
     834 
     835    protected function genUpdateAutoIncrementPK($pkai, $pTableRealName) { 
     836        return '      if($record->'.$pkai->name.' < 1  ) $record->'.$pkai->name.'= $this->_conn->lastInsertId();'; 
     837    } 
     838 
     839 
    847840} 
    848841?> 
  • trunk/lib/jelix/dao/jDaoGenerator.class.php

    r614 r621  
    3030   * @var jDaoParser 
    3131   */ 
    32    private $_datasParser = null; 
     32   protected $_datasParser = null; 
    3333 
    3434   /** 
     
    3636   * @var string 
    3737   */ 
    38    private $_DaoRecordClassName = null; 
     38   protected $_DaoRecordClassName = null; 
    3939 
    4040   /** 
     
    4242   * @var string 
    4343   */ 
    44    private $_DaoClassName=null; 
     44   protected $_DaoClassName = null; 
     45 
     46 
     47   protected $propertiesListForInsert = 'PrimaryTable'; 
     48   protected $aliasWord = ' AS '; 
    4549 
    4650   /** 
     
    5862   * build all classes 
    5963   */ 
    60    public function buildClasses () { 
     64   public final function buildClasses () { 
    6165 
    6266      $src = array(); 
     
    146150         $src[] = '}else{'; 
    147151 
    148          if (($this->_dbtype=='mysql') || ($this->_dbtype=='sqlserver') || ($this->_dbtype=='postgresql')) { 
    149             $fields = $this->_getPropertiesBy('PrimaryFieldsExcludeAutoIncrement'); 
    150          }else{ 
    151             $fields = $this->_getPropertiesBy('PrimaryTable'); 
    152          } 
     152         $fields = $this->_getPropertiesBy($this->propertiesListForInsert); 
    153153      }else{ 
    154154         $fields = $this->_getPropertiesBy('PrimaryTable'); 
     
    176176      if($pkai !== null){ 
    177177         $src[] = '   if($result){'; 
    178          if ($this->_dbtype=='sqlserver') { 
    179             $src[] = '      if($record->'.$pkai->name.' < 1 ) $record->'.$pkai->name.'= $this->_conn->lastIdInTable(\''.$pkai->fieldName.'\',\''.$pTableRealName.'\');'; 
    180          }else if ($this->_dbtype=='postgresql') { 
    181             $src[] = '      if($record->'.$pkai->name.' < 1  ) $record->'.$pkai->name.'= $this->_conn->lastInsertId(\''.$pkai->sequenceName.'\');'; 
    182          }else{ 
    183             $src[] = '      if($record->'.$pkai->name.' < 1  ) $record->'.$pkai->name.'= $this->_conn->lastInsertId();'; 
    184          } 
    185          $src[] = '    return $result;'; 
    186          $src[] = ' }else return false;'; 
     178         $src[] = '      if($record->'.$pkai->name.' < 1 ) '; 
     179         $src[] = $this->genUpdateAutoIncrementPK($pkai, $pTableRealName); 
     180         $src[] = '      return $result;'; 
     181         $src[] = '   }else return false;'; 
    187182      }else{ 
    188183         $src[] = '    return $result;'; 
     
    354349    * @return array  FROM string and WHERE string 
    355350    */ 
    356     protected function _getFromClause(){ 
    357  
    358       $aliaslink = ($this->_dbtype == 'oci8'?' ':' AS '); 
     351    final protected function _getFromClause(){ 
    359352 
    360353      $sqlWhere = ''; 
     
    366359 
    367360      if($primarytable['name']!=$primarytable['realname']) 
    368          $sqlFrom =$ptrealname.$aliaslink.$ptname; 
     361         $sqlFrom =$ptrealname.$this->aliasWord.$ptname; 
    369362      else 
    370363         $sqlFrom =$ptrealname; 
     
    375368 
    376369         if($table['name']!=$table['realname']) 
    377             $r =$this->_encloseName($table['realname']).$aliaslink.$tablename; 
     370            $r =$this->_encloseName($table['realname']).$this->aliasWord.$tablename; 
    378371         else 
    379372            $r =$this->_encloseName($table['realname']); 
     
    397390            } 
    398391            $fieldjoin=substr($fieldjoin,4); 
    399             //$fieldjoin=$primarytable['name'].'.'.$table['onforeignkey'].'='.$table['name'].'.'.$table['primarykey']; 
     392 
    400393            if($tablejoin[1] == 0){ 
    401394               $sqlFrom.=' LEFT JOIN '.$r.' ON ('.$fieldjoin.')'; 
     
    410403         $tablename = $this->_encloseName($table['name']); 
    411404         if($table['name']!=$table['realname']) 
    412             $sqlFrom .=', '.$this->_encloseName($table['realname']).$aliaslink.$tablename; 
     405            $sqlFrom .=', '.$this->_encloseName($table['realname']).$this->aliasWord.$tablename; 
    413406        else 
    414407            $sqlFrom .=', '.$this->_encloseName($table['realname']); 
     
    417410           $sqlWhere.=' AND '.$ptname.'.'.$this->_encloseName($fk).'='.$tablename.'.'.$this->_encloseName($table['pk'][$k]); 
    418411        } 
    419          //$sqlWhere.=' AND '.$primarytable['name'].'.'.$table['onforeignkey'].'='.$table['name'].'.'.$table['primarykey']; 
    420412      } 
    421413 
     
    838830 
    839831    protected function _encloseName($name){ 
    840         if($this->_dbtype == 'mysql'){ 
    841             return '`'.$name.'`'; 
    842         }elseif($this->_dbtype == 'postgresql'){ 
    843             return '"'.$name.'"'; 
    844         }else 
    845             return $name; 
    846     } 
     832        return $name; 
     833    } 
     834 
     835    protected function genUpdateAutoIncrementPK($pkai, $pTableRealName) { 
     836        return '      if($record->'.$pkai->name.' < 1  ) $record->'.$pkai->name.'= $this->_conn->lastInsertId();'; 
     837    } 
     838 
     839 
    847840} 
    848841?> 
Download in other formats: Unified Diff Zip Archive