Source for file sqlite.dbtools.php

Documentation is available at sqlite.dbtools.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage db_driver
  5. @author     Loic Mathaud
  6. @contributor Laurent Jouanneau
  7. @copyright  2006 Loic Mathaud, 2007-2010 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.  * tools to manage a sqlite database
  14.  * @package    jelix
  15.  * @subpackage db_driver
  16.  */
  17. class sqliteDbTools extends jDbTools {
  18.  
  19.     protected $typesInfo = array(
  20.       // type                  native type        unified type  minvalue     maxvalue   minlength  maxlength
  21.       'bool'            =>array('integer',          'boolean',  0,           1,          null,     null),
  22.       'boolean'         =>array('integer',          'boolean',  0,           1,          null,     null),
  23.       'bit'             =>array('integer',          'integer',  0,           1,          null,     null),
  24.       'tinyint'         =>array('integer',          'integer',  -128,        127,        null,     null),
  25.       'smallint'        =>array('integer',          'integer',  -32768,      32767,      null,     null),
  26.       'mediumint'       =>array('integer',          'integer',  -8388608,    8388607,    null,     null),
  27.       'integer'         =>array('integer',          'integer',  -21474836482147483647null,     null),
  28.       'int'             =>array('integer',          'integer',  -21474836482147483647null,     null),
  29.       'bigint'          =>array('numeric',          'numeric',  '-9223372036854775808''9223372036854775807'nullnull),
  30.       'serial'          =>array('numeric',          'numeric',  '-9223372036854775808''9223372036854775807'nullnull),
  31.       'bigserial'       =>array('numeric',          'numeric',  '-9223372036854775808''9223372036854775807'nullnull),
  32.       'autoincrement'   =>array('integer',          'integer',  -21474836482147483647null,     null)// for old dao files
  33.       'bigautoincrement'=>array('numeric',           'numeric',  '-9223372036854775808''9223372036854775807'nullnull),// for old dao files
  34.  
  35.       'float'           =>array('float',            'float',    null,       null,       null,     null)//4bytes
  36.       'money'           =>array('real',             'float',    null,       null,       null,     null)//4bytes
  37.       'double precision'=>array('double',           'decimal',  null,       null,       null,     null)//8bytes
  38.       'double'          =>array('double',           'decimal',  null,       null,       null,     null)//8bytes
  39.       'real'            =>array('real',             'decimal',  null,       null,       null,     null)//8bytes
  40.       'number'          =>array('real',             'decimal',  null,       null,       null,     null)//8bytes
  41.       'binary_float'    =>array('double',           'float',    null,       null,       null,     null)//4bytes
  42.       'binary_double'   =>array('double',           'decimal',  null,       null,       null,     null)//8bytes
  43.       
  44.       'numeric'         =>array('numeric',          'numeric',  null,       null,       null,     null),
  45.       'decimal'         =>array('real',             'decimal',  null,       null,       null,     null),
  46.       'dec'             =>array('real',             'decimal',  null,       null,       null,     null),
  47.  
  48.       'date'            =>array('date',       'date',       null,       null,       10,    10),
  49.       'time'            =>array('time',       'time',       null,       null,       8,     8),
  50.       'datetime'        =>array('datetime',   'datetime',   null,       null,       19,    19),
  51.       'timestamp'       =>array('datetime',   'datetime',   null,       null,       19,    19)// oracle/pgsql timestamp
  52.       'utimestamp'      =>array('integer',    'integer',    0,          2147483647null,  null)// mysql timestamp
  53.       'year'            =>array('integer',    'year',       null,       null,       2,     4),
  54.       'interval'        =>array('datetime',   'datetime',   null,       null,       19,    19),
  55.  
  56.       'char'            =>array('char',       'char',       null,       null,       0,     255),
  57.       'nchar'           =>array('char',       'char',       null,       null,       0,     255),
  58.       'varchar'         =>array('varchar',    'varchar',    null,       null,       0,     65535),
  59.       'varchar2'        =>array('varchar',    'varchar',    null,       null,       0,     4000),
  60.       'nvarchar2'       =>array('varchar',    'varchar',    null,       null,       0,     4000),
  61.       'character'       =>array('varchar',    'varchar',    null,       null,       0,     65535),
  62.       'character varying'=>array('varchar',   'varchar',    null,       null,       0,     65535),
  63.       'name'            =>array('varchar',    'varchar',    null,       null,       0,     64),
  64.       'longvarchar'     =>array('varchar',    'varchar',    null,       null,       0,     65535),
  65.       'string'          =>array('varchar',    'varchar',    null,       null,       0,     65535),// for old dao files
  66.  
  67.       'tinytext'        =>array('text',   'text',       null,       null,       0,     255),
  68.       'text'            =>array('text',       'text',       null,       null,       0,     65535),
  69.       'mediumtext'      =>array('text''text',       null,       null,       0,     16777215),
  70.       'longtext'        =>array('text',   'text',       null,       null,       0,     0),
  71.       'long'            =>array('text',   'text',       null,       null,       0,     0),
  72.       'clob'            =>array('text',   'text',       null,       null,       0,     0),
  73.       'nclob'           =>array('text',   'text',       null,       null,       0,     0),
  74.  
  75.  
  76.       'tinyblob'        =>array('blob',   'blob',       null,       null,       0,     255),
  77.       'blob'            =>array('blob',       'blob',       null,       null,       0,     65535),
  78.       'mediumblob'      =>array('blob''blob',       null,       null,       0,     16777215),
  79.       'longblob'        =>array('blob',   'blob',       null,       null,       0,     0),
  80.       'bfile'           =>array('blob',   'blob',       null,       null,       0,     0),
  81.       
  82.       'bytea'           =>array('blob',   'varbinary',       null,       null,       0,     0),
  83.       'binary'          =>array('blob',     'binary',     null,       null,       0,     255),
  84.       'varbinary'       =>array('blob',  'varbinary',  null,       null,       0,     255),
  85.       'raw'             =>array('blob',  'varbinary',  null,       null,       0,     2000),
  86.       'long raw'        =>array('blob',  'varbinary',  null,       null,       0,     0),
  87.  
  88.       'enum'            =>array('varchar',    'varchar',    null,       null,       0,     65535),
  89.       'set'             =>array('varchar',    'varchar',    null,       null,       0,     65535),
  90.       'xmltype'         =>array('varchar',    'varchar',    null,       null,       0,     65535),
  91.  
  92.       'point'           =>array('varchar',    'varchar',    null,       null,       0,     16),
  93.       'line'            =>array('varchar',    'varchar',    null,       null,       0,     32),
  94.       'lsed'            =>array('varchar',    'varchar',    null,       null,       0,     32),
  95.       'box'             =>array('varchar',    'varchar',    null,       null,       0,     32),
  96.       'path'            =>array('varchar',    'varchar',    null,       null,       0,     65535),
  97.       'polygon'         =>array('varchar',    'varchar',    null,       null,       0,     65535),
  98.       'circle'          =>array('varchar',    'varchar',    null,       null,       0,     24),
  99.       'cidr'            =>array('varchar',    'varchar',    null,       null,       0,     24),
  100.       'inet'            =>array('varchar',    'varchar',    null,       null,       0,     24),
  101.       'macaddr'         =>array('integer',    'integer',    0,          0xFFFFFFFFFFFFnull,       null),
  102.       'bit varying'     =>array('varchar',    'varchar',    null,       null,       0,     65535),
  103.       'arrays'          =>array('varchar',    'varchar',    null,       null,       0,     65535),
  104.       'complex types'   =>array('varchar',    'varchar',    null,       null,       0,     65535),
  105.     );
  106.  
  107.     /**
  108.     * returns the list of tables
  109.     * @return   array    list of table names
  110.     */
  111.     public function getTableList (){
  112.         $results array ();
  113.  
  114.         $rs $this->_conn->query('SELECT name FROM sqlite_master WHERE type="table"');
  115.  
  116.         while ($line $rs->fetch ()){
  117.             $results[$line->name;
  118.         }
  119.  
  120.         return $results;
  121.     }
  122.  
  123.     /**
  124.     * retrieve the list of fields of a table
  125.     * @param string $tableName the name of the table
  126.     * @param string $sequence  the sequence used to auto increment the primary key (not supported here)
  127.     * @return   array    keys are field names and values are jDbFieldProperties objects
  128.     */
  129.     public function getFieldList ($tableName$sequence=''{
  130.  
  131.         $tableName $this->_conn->prefixTable($tableName);
  132.         $results array ();
  133.  
  134.         $query "PRAGMA table_info("sqlite_escape_string($tableName.")";
  135.         $rs $this->_conn->query($query);
  136.         while ($line $rs->fetch()) {
  137.             $field new jDbFieldProperties();
  138.             $field->name $line->name;
  139.             $field->primary  ($line->pk == 1);
  140.             $field->notNull   ($line->notnull == '99' || $line->pk == 1);
  141.  
  142.             if (preg_match('/^(\w+)\s*(\((\d+)\))?.*$/',$line->type,$m)) {
  143.                 $field->type strtolower($m[1]);
  144.                 if (isset($m[3])) {
  145.                     $field->length intval($m[3]);
  146.                 }
  147.             }
  148.             else {
  149.                 $field->type $line->type;
  150.             }
  151.  
  152.             $typeinfo $this->getTypeInfo($field->type);
  153.             $field->unifiedType $typeinfo[1];
  154.             $field->maxValue $typeinfo[3];
  155.             $field->minValue $typeinfo[2];
  156.             $field->maxLength $typeinfo[5];
  157.             $field->minLength $typeinfo[4];
  158.  
  159.             if ($field->length !=0)
  160.                 $field->maxLength $field->length;
  161.  
  162.             if ($field->type == 'integer' && $field->primary{
  163.                 $field->autoIncrement true;
  164.             }
  165.             if (!$field->primary{
  166.                 if ($line->dflt_value !== null || ($line->dflt_value === null && !$field->notNull)) {
  167.                     $field->hasDefault true;
  168.                     $field->default =  $line->dflt_value;
  169.                 }
  170.             }
  171.             $results[$line->name$field;
  172.         }
  173.         return $results;
  174.     }
  175. }

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