[ PHPXref.com ] [ Generated: Sun Jul 20 16:26:27 2008 ] [ ADOdb 4.80 ]
[ Index ]     [ Variables ]     [ Functions ]     [ Classes ]     [ Constants ]     [ Statistics ]

title

Body

[close]

/datadict/ -> datadict-oci8.inc.php (source)

   1  <?php
   2  
   3  /**
   4    V4.80 8 Mar 2006  (c) 2000-2006 John Lim (jlim@natsoft.com.my). All rights reserved.
   5    Released under both BSD license and Lesser GPL library license. 
   6    Whenever there is any discrepancy between the two licenses, 
   7    the BSD license will take precedence.
   8      
   9    Set tabs to 4 for best viewing.
  10   
  11  */
  12  
  13  // security - hide paths
  14  if (!defined('ADODB_DIR')) die();
  15  
  16  class ADODB2_oci8 extends ADODB_DataDict {
  17      
  18      var $databaseType = 'oci8';
  19      var $seqField = false;
  20      var $seqPrefix = 'SEQ_';
  21      var $dropTable = "DROP TABLE %s CASCADE CONSTRAINTS";
  22      var $trigPrefix = 'TRIG_';
  23      var $alterCol = ' MODIFY ';
  24      var $typeX = 'VARCHAR(4000)';
  25      var $typeXL = 'CLOB';
  26      
  27  	function MetaType($t,$len=-1)
  28      {
  29          if (is_object($t)) {
  30              $fieldobj = $t;
  31              $t = $fieldobj->type;
  32              $len = $fieldobj->max_length;
  33          }
  34          switch (strtoupper($t)) {
  35           case 'VARCHAR':
  36           case 'VARCHAR2':
  37          case 'CHAR':
  38          case 'VARBINARY':
  39          case 'BINARY':
  40              if (isset($this) && $len <= $this->blobSize) return 'C';
  41              return 'X';
  42          
  43          case 'NCHAR':
  44          case 'NVARCHAR2':
  45          case 'NVARCHAR':
  46              if (isset($this) && $len <= $this->blobSize) return 'C2';
  47              return 'X2';
  48              
  49          case 'NCLOB':
  50          case 'CLOB':
  51              return 'XL';
  52          
  53          case 'LONG RAW':
  54          case 'LONG VARBINARY':
  55          case 'BLOB':
  56              return 'B';
  57          
  58          case 'DATE': 
  59              return 'T';
  60          
  61          case 'INT': 
  62          case 'SMALLINT':
  63          case 'INTEGER': 
  64              return 'I';
  65              
  66          default:
  67              return 'N';
  68          }
  69      }
  70      
  71   	function ActualType($meta)
  72      {
  73          switch($meta) {
  74          case 'C': return 'VARCHAR';
  75          case 'X': return $this->typeX;
  76          case 'XL': return $this->typeXL;
  77          
  78          case 'C2': return 'NVARCHAR';
  79          case 'X2': return 'NVARCHAR(2000)';
  80          
  81          case 'B': return 'BLOB';
  82              
  83          case 'D': 
  84          case 'T': return 'DATE';
  85          case 'L': return 'DECIMAL(1)';
  86          case 'I1': return 'DECIMAL(3)';
  87          case 'I2': return 'DECIMAL(5)';
  88          case 'I':
  89          case 'I4': return 'DECIMAL(10)';
  90          
  91          case 'I8': return 'DECIMAL(20)';
  92          case 'F': return 'DECIMAL';
  93          case 'N': return 'DECIMAL';
  94          default:
  95              return $meta;
  96          }    
  97      }
  98      
  99  	function CreateDatabase($dbname, $options=false)
 100      {
 101          $options = $this->_Options($options);
 102          $password = isset($options['PASSWORD']) ? $options['PASSWORD'] : 'tiger';
 103          $tablespace = isset($options["TABLESPACE"]) ? " DEFAULT TABLESPACE ".$options["TABLESPACE"] : '';
 104          $sql[] = "CREATE USER ".$dbname." IDENTIFIED BY ".$password.$tablespace;
 105          $sql[] = "GRANT CREATE SESSION, CREATE TABLE,UNLIMITED TABLESPACE,CREATE SEQUENCE TO $dbname";
 106          
 107          return $sql;
 108      }
 109      
 110  	function AddColumnSQL($tabname, $flds)
 111      {
 112          $f = array();
 113          list($lines,$pkey) = $this->_GenFields($flds);
 114          $s = "ALTER TABLE $tabname ADD (";
 115          foreach($lines as $v) {
 116              $f[] = "\n $v";
 117          }
 118          
 119          $s .= implode(', ',$f).')';
 120          $sql[] = $s;
 121          return $sql;
 122      }
 123      
 124  	function AlterColumnSQL($tabname, $flds)
 125      {
 126          $f = array();
 127          list($lines,$pkey) = $this->_GenFields($flds);
 128          $s = "ALTER TABLE $tabname MODIFY(";
 129          foreach($lines as $v) {
 130              $f[] = "\n $v";
 131          }
 132          $s .= implode(', ',$f).')';
 133          $sql[] = $s;
 134          return $sql;
 135      }
 136      
 137  	function DropColumnSQL($tabname, $flds)
 138      {
 139          if (!is_array($flds)) $flds = explode(',',$flds);
 140          foreach ($flds as $k => $v) $flds[$k] = $this->NameQuote($v);
 141          
 142          $sql = array();
 143          $s = "ALTER TABLE $tabname DROP(";
 144          $s .= implode(', ',$flds).') CASCADE CONSTRAINTS';
 145          $sql[] = $s;
 146          return $sql;
 147      }
 148      
 149  	function _DropAutoIncrement($t)
 150      {
 151          if (strpos($t,'.') !== false) {
 152              $tarr = explode('.',$t);
 153              return "drop sequence ".$tarr[0].".seq_".$tarr[1];
 154          }
 155          return "drop sequence seq_".$t;
 156      }
 157      
 158      // return string must begin with space
 159  	function _CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned)
 160      {
 161          $suffix = '';
 162          
 163          if ($fdefault == "''" && $fnotnull) {// this is null in oracle
 164              $fnotnull = false;
 165              if ($this->debug) ADOConnection::outp("NOT NULL and DEFAULT='' illegal in Oracle");
 166          }
 167          
 168          if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault";
 169          if ($fnotnull) $suffix .= ' NOT NULL';
 170          
 171          if ($fautoinc) $this->seqField = $fname;
 172          if ($fconstraint) $suffix .= ' '.$fconstraint;
 173          
 174          return $suffix;
 175      }
 176      
 177  /*
 178  CREATE or replace TRIGGER jaddress_insert
 179  before insert on jaddress
 180  for each row
 181  begin
 182  select seqaddress.nextval into :new.A_ID from dual;
 183  end;
 184  */
 185  	function _Triggers($tabname,$tableoptions)
 186      {
 187          if (!$this->seqField) return array();
 188          
 189          if ($this->schema) {
 190              $t = strpos($tabname,'.');
 191              if ($t !== false) $tab = substr($tabname,$t+1);
 192              else $tab = $tabname;
 193              $seqname = $this->schema.'.'.$this->seqPrefix.$tab;
 194              $trigname = $this->schema.'.'.$this->trigPrefix.$this->seqPrefix.$tab;
 195          } else {
 196              $seqname = $this->seqPrefix.$tabname;
 197              $trigname = $this->trigPrefix.$seqname;
 198          }
 199          if (isset($tableoptions['REPLACE'])) $sql[] = "DROP SEQUENCE $seqname";
 200          $seqCache = '';
 201          if (isset($tableoptions['SEQUENCE_CACHE'])){$seqCache = $tableoptions['SEQUENCE_CACHE'];}
 202          $seqIncr = '';
 203          if (isset($tableoptions['SEQUENCE_INCREMENT'])){$seqIncr = ' INCREMENT BY '.$tableoptions['SEQUENCE_INCREMENT'];}
 204          $seqStart = '';
 205          if (isset($tableoptions['SEQUENCE_START'])){$seqIncr = ' START WITH '.$tableoptions['SEQUENCE_START'];}
 206          $sql[] = "CREATE SEQUENCE $seqname $seqStart $seqIncr $seqCache";
 207          $sql[] = "CREATE OR REPLACE TRIGGER $trigname BEFORE insert ON $tabname FOR EACH ROW WHEN (NEW.$this->seqField IS NULL OR NEW.$this->seqField = 0) BEGIN select $seqname.nextval into :new.$this->seqField from dual; END;";
 208          
 209          $this->seqField = false;
 210          return $sql;
 211      }
 212      
 213      /*
 214      CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
 215          [table_options] [select_statement]
 216          create_definition:
 217          col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
 218          [PRIMARY KEY] [reference_definition]
 219          or PRIMARY KEY (index_col_name,...)
 220          or KEY [index_name] (index_col_name,...)
 221          or INDEX [index_name] (index_col_name,...)
 222          or UNIQUE [INDEX] [index_name] (index_col_name,...)
 223          or FULLTEXT [INDEX] [index_name] (index_col_name,...)
 224          or [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)
 225          [reference_definition]
 226          or CHECK (expr)
 227      */
 228      
 229  
 230      
 231  	function _IndexSQL($idxname, $tabname, $flds,$idxoptions)
 232      {
 233          $sql = array();
 234          
 235          if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) {
 236              $sql[] = sprintf ($this->dropIndex, $idxname, $tabname);
 237              if ( isset($idxoptions['DROP']) )
 238                  return $sql;
 239          }
 240          
 241          if ( empty ($flds) ) {
 242              return $sql;
 243          }
 244          
 245          if (isset($idxoptions['BITMAP'])) {
 246              $unique = ' BITMAP'; 
 247          } elseif (isset($idxoptions['UNIQUE'])) {
 248              $unique = ' UNIQUE';
 249          } else {
 250              $unique = '';
 251          }
 252          
 253          if ( is_array($flds) )
 254              $flds = implode(', ',$flds);
 255          $s = 'CREATE' . $unique . ' INDEX ' . $idxname . ' ON ' . $tabname . ' (' . $flds . ')';
 256          
 257          if ( isset($idxoptions[$this->upperName]) )
 258              $s .= $idxoptions[$this->upperName];
 259          
 260          if (isset($idxoptions['oci8']))
 261              $s .= $idxoptions['oci8'];
 262          
 263  
 264          $sql[] = $s;
 265          
 266          return $sql;
 267      }
 268      
 269  	function GetCommentSQL($table,$col)
 270      {
 271          $table = $this->connection->qstr($table);
 272          $col = $this->connection->qstr($col);    
 273          return "select comments from USER_COL_COMMENTS where TABLE_NAME=$table and COLUMN_NAME=$col";
 274      }
 275      
 276  	function SetCommentSQL($table,$col,$cmt)
 277      {
 278          $cmt = $this->connection->qstr($cmt);
 279          return  "COMMENT ON COLUMN $table.$col IS $cmt";
 280      }
 281  }
 282  ?>


[ Powered by PHPXref - Served by Debian GNU/Linux ]