Source for file oci.dbtools.php

Documentation is available at oci.dbtools.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage db_driver
  5. @author     Gwendal Jouannic
  6. @contributor Laurent Jouanneau
  7. @copyright  2008 Gwendal Jouannic, 2009-2011 Laurent Jouanneau
  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. class ociDbTools extends jDbTools {
  14.  
  15.     protected $typesInfo = array(
  16.       // type                  native type        unified type  minvalue     maxvalue   minlength  maxlength
  17.       'bool'            =>array('number',          'boolean',  0,           1,          null,     null),
  18.       'boolean'         =>array('boolean',          'boolean',  0,           1,          null,     null),
  19.       'bit'             =>array('bit',              'integer',  0,           1,          null,     null),
  20.       'tinyint'         =>array('tinyint',          'integer',  -128,        127,        null,     null),
  21.       'smallint'        =>array('smallint',         'integer',  -32768,      32767,      null,     null),
  22.       'mediumint'       =>array('mediumint',        'integer',  -8388608,    8388607,    null,     null),
  23.       'integer'         =>array('integer',          'integer',  -21474836482147483647null,     null),
  24.       'int'             =>array('integer',          'integer',  -21474836482147483647null,     null),
  25.       'bigint'          =>array('bigint',           'numeric',  '-9223372036854775808''9223372036854775807'nullnull),
  26.       'serial'          =>array('integer',          'numeric',  '-9223372036854775808''9223372036854775807'nullnull),
  27.       'bigserial'       =>array('integer',          'numeric',  '-9223372036854775808''9223372036854775807'nullnull),
  28.       'autoincrement'   =>array('integer',          'integer',  -21474836482147483647null,     null)// for old dao files
  29.       'bigautoincrement'=>array('bigint',           'numeric',  '-9223372036854775808''9223372036854775807'nullnull),// for old dao files
  30.  
  31.       'float'           =>array('float',            'float',    null,       null,       null,     null)//4bytes
  32.       'money'           =>array('float',            'float',    null,       null,       null,     null)//4bytes
  33.       'double precision'=>array('double precision''decimal',  null,       null,       null,     null)//8bytes
  34.       'double'          =>array('double precision''decimal',  null,       null,       null,     null)//8bytes
  35.       'real'            =>array('real',             'decimal',  null,       null,       null,     null)//8bytes
  36.       'number'          =>array('real',             'decimal',  null,       null,       null,     null)//8bytes
  37.       'binary_float'    =>array('float',            'float',    null,       null,       null,     null)//4bytes
  38.       'binary_double'   =>array('real',             'decimal',  null,       null,       null,     null)//8bytes
  39.       
  40.       'numeric'         =>array('numeric',          'numeric',  null,       null,       null,     null),
  41.       'decimal'         =>array('decimal',          'decimal',  null,       null,       null,     null),
  42.       'dec'             =>array('decimal',          'decimal',  null,       null,       null,     null),
  43.  
  44.       'date'            =>array('date',       'date',       null,       null,       10,    10),
  45.       'time'            =>array('time',       'time',       null,       null,       8,     8),
  46.       'datetime'        =>array('datetime',   'datetime',   null,       null,       19,    19),
  47.       'timestamp'       =>array('datetime',   'datetime',   null,       null,       19,    19)// oracle/pgsql timestamp
  48.       'utimestamp'      =>array('timestamp',  'integer',    0,          2147483647null,  null)// mysql timestamp
  49.       'year'            =>array('year',       'year',       null,       null,       2,     4),
  50.       'interval'        =>array('datetime',   'datetime',   null,       null,       19,    19),
  51.  
  52.       'char'            =>array('char',       'char',       null,       null,       0,     255),
  53.       'nchar'           =>array('char',       'char',       null,       null,       0,     255),
  54.       'varchar'         =>array('varchar',    'varchar',    null,       null,       0,     65535),
  55.       'varchar2'        =>array('varchar',    'varchar',    null,       null,       0,     4000),
  56.       'nvarchar2'       =>array('varchar',    'varchar',    null,       null,       0,     4000),
  57.       'character'       =>array('varchar',    'varchar',    null,       null,       0,     65535),
  58.       'character varying'=>array('varchar',   'varchar',    null,       null,       0,     65535),
  59.       'name'            =>array('varchar',    'varchar',    null,       null,       0,     64),
  60.       'longvarchar'     =>array('varchar',    'varchar',    null,       null,       0,     65535),
  61.       'string'          =>array('varchar',    'varchar',    null,       null,       0,     65535),// for old dao files
  62.  
  63.       'tinytext'        =>array('tinytext',   'text',       null,       null,       0,     255),
  64.       'text'            =>array('text',       'text',       null,       null,       0,     65535),
  65.       'mediumtext'      =>array('mediumtext''text',       null,       null,       0,     16777215),
  66.       'longtext'        =>array('longtext',   'text',       null,       null,       0,     0),
  67.       'long'            =>array('longtext',   'text',       null,       null,       0,     0),
  68.       'clob'            =>array('longtext',   'text',       null,       null,       0,     0),
  69.       'nclob'           =>array('longtext',   'text',       null,       null,       0,     0),
  70.  
  71.  
  72.       'tinyblob'        =>array('tinyblob',   'blob',       null,       null,       0,     255),
  73.       'blob'            =>array('blob',       'blob',       null,       null,       0,     65535),
  74.       'mediumblob'      =>array('mediumblob''blob',       null,       null,       0,     16777215),
  75.       'longblob'        =>array('longblob',   'blob',       null,       null,       0,     0),
  76.       'bfile'           =>array('longblob',   'blob',       null,       null,       0,     0),
  77.       
  78.       'bytea'           =>array('longblob',   'varbinary',  null,       null,       0,     0),
  79.       'binary'          =>array('binary',     'binary',     null,       null,       0,     255),
  80.       'varbinary'       =>array('varbinary',  'varbinary',  null,       null,       0,     255),
  81.       'raw'             =>array('varbinary',  'varbinary',  null,       null,       0,     2000),
  82.       'long raw'        =>array('varbinary',  'varbinary',  null,       null,       0,     0),
  83.  
  84.       'enum'            =>array('varchar',    'varchar',    null,       null,       0,     65535),
  85.       'set'             =>array('varchar',    'varchar',    null,       null,       0,     65535),
  86.       'xmltype'         =>array('varchar',    'varchar',    null,       null,       0,     65535),
  87.  
  88.       'point'           =>array('varchar',    'varchar',    null,       null,       0,     16),
  89.       'line'            =>array('varchar',    'varchar',    null,       null,       0,     32),
  90.       'lsed'            =>array('varchar',    'varchar',    null,       null,       0,     32),
  91.       'box'             =>array('varchar',    'varchar',    null,       null,       0,     32),
  92.       'path'            =>array('varchar',    'varchar',    null,       null,       0,     65535),
  93.       'polygon'         =>array('varchar',    'varchar',    null,       null,       0,     65535),
  94.       'circle'          =>array('varchar',    'varchar',    null,       null,       0,     24),
  95.       'cidr'            =>array('varchar',    'varchar',    null,       null,       0,     24),
  96.       'inet'            =>array('varchar',    'varchar',    null,       null,       0,     24),
  97.       'macaddr'         =>array('integer',    'integer',    0,          0xFFFFFFFFFFFFnull,       null),
  98.       'bit varying'     =>array('varchar',    'varchar',    null,       null,       0,     65535),
  99.       'arrays'          =>array('varchar',    'varchar',    null,       null,       0,     65535),
  100.       'complex types'   =>array('varchar',    'varchar',    null,       null,       0,     65535),
  101.     );
  102.  
  103.     /**
  104.     * returns the list of tables
  105.     * @return   array    list of table names
  106.     */
  107.     public function getTableList ({
  108.         $results array ();
  109.  
  110.         $rs $this->_conn->query ('SELECT TABLE_NAME FROM USER_TABLES');
  111.  
  112.         while ($line $rs->fetch ()){
  113.             $results[$line->table_name;
  114.         }
  115.  
  116.         return $results;
  117.     }
  118.  
  119.     /**
  120.     * retrieve the list of fields of a table
  121.     * @param string $tableName the name of the table
  122.     * @param string $sequence  the sequence used to auto increment the primary key
  123.     * @return   array    keys are field names and values are jDbFieldProperties objects
  124.     */
  125.     public function getFieldList ($tableName$sequence=''{
  126.         $tableName $this->_conn->prefixTable($tableName);
  127.         $results array ();
  128.  
  129.         $query 'SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_DEFAULT,  
  130.                         (SELECT CONSTRAINT_TYPE 
  131.                          FROM USER_CONSTRAINTS UC, USER_CONS_COLUMNS UCC 
  132.                          WHERE UCC.TABLE_NAME = UTC.TABLE_NAME
  133.                             AND UC.TABLE_NAME = UTC.TABLE_NAME
  134.                             AND UCC.COLUMN_NAME = UTC.COLUMN_NAME
  135.                             AND UC.CONSTRAINT_NAME = UCC.CONSTRAINT_NAME
  136.                             AND UC.CONSTRAINT_TYPE = \'P\') AS CONSTRAINT_TYPE
  137.                     FROM USER_TAB_COLUMNS UTC 
  138.                     WHERE UTC.TABLE_NAME = \''.strtoupper($tableName).'\'';
  139.  
  140.         $rs $this->_conn->query ($query);
  141.  
  142.         while ($line $rs->fetch ()){
  143.  
  144.             $field new jDbFieldProperties();
  145.  
  146.             $field->name strtolower($line->column_name);
  147.             $field->type strtolower($line->data_type);
  148.  
  149.             $typeinfo $this->getTypeInfo($field->type);
  150.             $field->unifiedType $typeinfo[1];
  151.             $field->maxValue $typeinfo[3];
  152.             $field->minValue $typeinfo[2];
  153.             $field->maxLength $typeinfo[5];
  154.             $field->minLength $typeinfo[4];
  155.  
  156.             if ($field->type == 'varchar2' || $field->type == 'varchar' ){
  157.                 $field->length intval($line->data_length);
  158.                 $field->maxLength $field->length;
  159.             }
  160.  
  161.             $field->notNull ($line->nullable == 'N');
  162.             $field->primary ($line->constraint_type == 'P');
  163.  
  164.             // FIXME, retrieve autoincrement property for other field than primary key
  165.             if ($field->primary{
  166.                 if ($sequence == '')
  167.                     $sequence $this->_getAISequenceName($tableName$field->name);
  168.                 if ($sequence != ''{
  169.                     $sqlai "SELECT 'Y' FROM USER_SEQUENCES US
  170.                                 WHERE US.SEQUENCE_NAME = '".$sequence."'";
  171.                     $rsai $this->_conn->query ($sqlai);
  172.                     if ($this->_conn->query($sqlai)->fetch()){
  173.                         $field->autoIncrement  true;
  174.                         $field->sequence $sequence;
  175.                     }
  176.                 }
  177.             }
  178.  
  179.             if ($line->data_default !== null || !($line->data_default === null && $field->notNull)){
  180.                 $field->hasDefault true;
  181.                 $field->default =  $line->data_default;
  182.             }
  183.  
  184.             $results[$field->name$field;
  185.         }
  186.         return $results;
  187.     }
  188.  
  189.     /**
  190.     * Get the sequence name corresponding to an auto_increment field
  191.     * @return string the sequence name, empty if not found
  192.     */
  193.     function _getAISequenceName($tbName$clName){
  194.         if (isset($this->_conn->profile['sequence_AI_pattern']))
  195.             return preg_replace(array('/\*tbName\*/''/\*clName\*/'),
  196.                             array(strtoupper($tbName)strtoupper($clName)),
  197.                             $this->_conn->profile['sequence_AI_pattern']);
  198.         return '';
  199.     }
  200. }

Documentation generated on Wed, 24 Sep 2014 22:03:57 +0200 by phpDocumentor 1.4.3