Source for file pgsql.dbtools.php

Documentation is available at pgsql.dbtools.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage db_driver
  5. @author     Laurent Jouanneau
  6. @contributor Laurent Jouanneau
  7. @contributor Nicolas Jeudy (patch ticket #99)
  8. @copyright  2005-2010 Laurent Jouanneau
  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. /**
  14.  *
  15.  * @package    jelix
  16.  * @subpackage db_driver
  17.  */
  18. class pgsqlDbTools extends jDbTools {
  19.  
  20.     public $trueValue = 'TRUE';
  21.     
  22.     public $falseValue = 'FALSE';
  23.  
  24.     protected $typesInfo = array(
  25.       // type                  native type        unified type  minvalue     maxvalue   minlength  maxlength
  26.       'bool'            =>array('boolean',          'boolean',  0,           1,          null,     null),
  27.       'boolean'         =>array('boolean',          'boolean',  0,           1,          null,     null),
  28.       'bit'             =>array('smallint',         'integer',  0,           1,          null,     null),
  29.       'tinyint'         =>array('smallint',         'integer',  -128,        127,        null,     null),
  30.       'smallint'        =>array('smallint',         'integer',  -32768,      32767,      null,     null),
  31.       'mediumint'       =>array('integer',          'integer',  -8388608,    8388607,    null,     null),
  32.       'integer'         =>array('integer',          'integer',  -21474836482147483647null,     null),
  33.       'int'             =>array('integer',          'integer',  -21474836482147483647null,     null),
  34.       'bigint'          =>array('bigint',           'numeric',  '-9223372036854775808''9223372036854775807'nullnull),
  35.       'serial'          =>array('serial',           'integer',  -21474836482147483647nullnull),
  36.       'bigserial'       =>array('bigserial',        'numeric',  '-9223372036854775808''9223372036854775807'nullnull),
  37.       'autoincrement'   =>array('serial',           'integer',  -21474836482147483647null,     null)// for old dao files
  38.       'bigautoincrement'=>array('bigserial',        'numeric',  '-9223372036854775808''9223372036854775807'nullnull),// for old dao files
  39.  
  40.       'float'           =>array('real',             'float',    null,       null,       null,     null)//4bytes
  41.       'money'           =>array('money',            'float',    null,       null,       null,     null)//4bytes
  42.       'double precision'=>array('double precision''decimal',  null,       null,       null,     null)//8bytes
  43.       'double'          =>array('double precision''decimal',  null,       null,       null,     null)//8bytes
  44.       'real'            =>array('real',             'float',    null,       null,       null,     null)//8bytes
  45.       'number'          =>array('double',           'decimal',  null,       null,       null,     null)//8bytes
  46.       'binary_float'    =>array('real',             'float',    null,       null,       null,     null)//4bytes
  47.       'binary_double'   =>array('double',           'decimal',  null,       null,       null,     null)//8bytes
  48.       
  49.       'numeric'         =>array('numeric',          'numeric',  null,       null,       null,     null),
  50.       'decimal'         =>array('decimal',          'decimal',  null,       null,       null,     null),
  51.       'dec'             =>array('decimal',          'decimal',  null,       null,       null,     null),
  52.  
  53.       'date'            =>array('date',       'date',       null,       null,       10,    10),
  54.       'time'            =>array('time',       'time',       null,       null,       8,     8),
  55.       'datetime'        =>array('datetime',   'datetime',   null,       null,       19,    19),
  56.       'timestamp'       =>array('datetime',   'datetime',   null,       null,       19,    19)// oracle/pgsql timestamp
  57.       'utimestamp'      =>array('timestamp',  'integer',    0,          2147483647null,  null)// mysql timestamp
  58.       'year'            =>array('year',       'year',       null,       null,       2,     4),
  59.       'interval'        =>array('interval',   'integer',    null,       null,       19,    19),
  60.  
  61.       'char'            =>array('char',       'char',       null,       null,       0,     255),
  62.       'nchar'           =>array('nchar',       'char',       null,       null,       0,     255),
  63.       'varchar'         =>array('varchar',    'varchar',    null,       null,       0,     0),
  64.       'varchar2'        =>array('varchar',    'varchar',    null,       null,       0,     0),
  65.       'nvarchar2'       =>array('nvarchar',    'varchar',    null,       null,       0,     0),
  66.       'character'       =>array('character',    'varchar',    null,       null,       0,     0),
  67.       'character varying'=>array('character varying',   'varchar',    null,       null,       0,     0),
  68.       'name'            =>array('name',    'varchar',    null,       null,       0,     64),
  69.       'longvarchar'     =>array('varchar',    'varchar',    null,       null,       0,     0),
  70.       'string'          =>array('varchar',    'varchar',    null,       null,       0,     0),// for old dao files
  71.  
  72.       'tinytext'        =>array('text',   'text',       null,       null,       0,     255),
  73.       'text'            =>array('text',   'text',       null,       null,       0,     0),
  74.       'mediumtext'      =>array('text',   'text',       null,       null,       0,     0),
  75.       'longtext'        =>array('text',   'text',       null,       null,       0,     0),
  76.       'long'            =>array('text',   'text',       null,       null,       0,     0),
  77.       'clob'            =>array('text',   'text',       null,       null,       0,     0),
  78.       'nclob'           =>array('text',   'text',       null,       null,       0,     0),
  79.  
  80.  
  81.       'tinyblob'        =>array('bytea',   'blob',       null,       null,       0,     255),
  82.       'blob'            =>array('bytea',   'blob',       null,       null,       0,     65535),
  83.       'mediumblob'      =>array('bytea',   'blob',       null,       null,       0,     16777215),
  84.       'longblob'        =>array('bytea',   'blob',       null,       null,       0,     0),
  85.       'bfile'           =>array('bytea',   'blob',       null,       null,       0,     0),
  86.       
  87.       'bytea'           =>array('bytea',  'varbinary',   null,       null,       0,     0),
  88.       'binary'          =>array('bytea',  'binary',      null,       null,       0,     255),
  89.       'varbinary'       =>array('bytea',  'varbinary',   null,       null,       0,     255),
  90.       'raw'             =>array('bytea',  'varbinary',   null,       null,       0,     2000),
  91.       'long raw'        =>array('bytea',  'varbinary',   null,       null,       0,     0),
  92.  
  93.       'enum'            =>array('varchar',    'varchar',    null,       null,       0,     65535),
  94.       'set'             =>array('varchar',    'varchar',    null,       null,       0,     65535),
  95.       'xmltype'         =>array('varchar',    'varchar',    null,       null,       0,     65535),
  96.  
  97.       'point'           =>array('point',    'varchar',    null,       null,       0,     16),
  98.       'line'            =>array('line',     'varchar',    null,       null,       0,     32),
  99.       'lsed'            =>array('lsed',     'varchar',    null,       null,       0,     32),
  100.       'box'             =>array('box',      'varchar',    null,       null,       0,     32),
  101.       'path'            =>array('path',     'varchar',    null,       null,       0,     65535),
  102.       'polygon'         =>array('polygon',  'varchar',    null,       null,       0,     65535),
  103.       'circle'          =>array('circle',   'varchar',    null,       null,       0,     24),
  104.       'cidr'            =>array('cidr',     'varchar',    null,       null,       0,     24),
  105.       'inet'            =>array('inet',     'varchar',    null,       null,       0,     24),
  106.       'macaddr'         =>array('macaddr',    'integer',    0,          0xFFFFFFFFFFFFnull,       null),
  107.       'bit varying'     =>array('bit varying''varchar'null,       null,       0,     65535),
  108.       'arrays'          =>array('array',    'varchar',    null,       null,       0,     65535),
  109.       'complex types'   =>array('complex',  'varchar',    null,       null,       0,     65535),
  110.     );
  111.  
  112.     public function encloseName($name){
  113.         return '"'.$name.'"';
  114.     }
  115.  
  116.    /*
  117.     * returns the list of tables 
  118.     * @return   array    list of table names
  119.    */
  120.    public function getTableList ({
  121.       $results array ();
  122.       $sql "SELECT tablename FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema') ORDER BY tablename";
  123.       $rs $this->_conn->query ($sql);
  124.       while ($line $rs->fetch()){
  125.          $results[$line->tablename;
  126.       }
  127.       return $results;
  128.    }
  129.  
  130.     /**
  131.     * retrieve the list of fields of a table
  132.     * @param string $tableName the name of the table
  133.     * @param string $sequence  the sequence used to auto increment the primary key
  134.     * @return   array    keys are field names and values are jDbFieldProperties objects
  135.     */
  136.     public function getFieldList ($tableName$sequence=''{
  137.         $tableName $this->_conn->prefixTable($tableName);
  138.         $results array ();
  139.         
  140.         // get table informations
  141.         $sql ='SELECT oid, relhaspkey, relhasindex FROM pg_class WHERE relname = \''.$tableName.'\'';
  142.         $rs $this->_conn->query ($sql);
  143.         if (($table $rs->fetch())) {
  144.             throw new Exception('dbtools, pgsql: unknown table');
  145.         }
  146.  
  147.         $pkeys array();
  148.         // get primary keys informations
  149.         if ($table->relhaspkey == 't'{
  150.             $sql 'SELECT indkey FROM pg_index WHERE indrelid = '.$table->oid.' and indisprimary = true';
  151.             $rs $this->_conn->query ($sql);
  152.             $pkeys preg_split("/[\s]+/"$rs->fetch()->indkey);
  153.         }
  154.  
  155.         // get field informations
  156.         $sql_get_fields "SELECT t.typname, a.attname, a.attnotnull, a.attnum, a.attlen, a.atttypmod,
  157.         a.atthasdef, d.adsrc
  158.         FROM pg_type t, pg_attribute a LEFT JOIN pg_attrdef d ON (d.adrelid=a.attrelid AND d.adnum=a.attnum)
  159.         WHERE
  160.           a.attnum > 0 AND a.attrelid = ".$table->oid." AND a.atttypid = t.oid
  161.         ORDER BY a.attnum";
  162.  
  163.         $toReturn=array();
  164.         $rs $this->_conn->query ($sql_get_fields);
  165.         while ($line $rs->fetch ()){
  166.             $field new jDbFieldProperties();
  167.             $field->name $line->attname;
  168.             $field->type preg_replace('/(\D*)\d*/','\\1',$line->typname);
  169.             $field->notNull ($line->attnotnull=='t');
  170.             $field->hasDefault ($line->atthasdef == 't');
  171.             $field->default $line->adsrc;
  172.  
  173.             $typeinfo $this->getTypeInfo($field->type);
  174.             $field->unifiedType $typeinfo[1];
  175.             $field->maxValue $typeinfo[3];
  176.             $field->minValue $typeinfo[2];
  177.             $field->maxLength $typeinfo[5];
  178.             $field->minLength $typeinfo[4];
  179.  
  180.             if(preg_match('/^nextval\(.*\)$/'$line->adsrc|| $typeinfo[6]){
  181.                 $field->autoIncrement=true;
  182.                 $field->default '';
  183.             }
  184.  
  185.             if(in_array($line->attnum$pkeys))
  186.                 $field->primary true;
  187.  
  188.             if($field->autoIncrement && $sequence && $field->primary)
  189.                 $field->sequence $sequence;
  190.  
  191.             if($line->attlen == -&& $line->atttypmod != -1{
  192.                 $field->length $line->atttypmod 4;
  193.                 $field->maxLength $field->length;
  194.             }
  195.  
  196.             $toReturn[$line->attname]=$field;
  197.         }
  198.  
  199.         return $toReturn;
  200.     }
  201.  
  202.     public function execSQLScript ($file{
  203.         if(!isset($this->_conn->profile['table_prefix']))
  204.             $prefix '';
  205.         else
  206.             $prefix $this->_conn->profile['table_prefix'];
  207.         $sqlQueries str_replace('%%PREFIX%%'$prefixfile_get_contents($file));
  208.         $this->_conn->query ($sqlQueries);
  209.     }
  210. }

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