/src/typo3_src-4.2.0alpha1/typo3/sysext/adodb/adodb/datadict/datadict-oci8.inc.php

00001 <?php
00002 
00013 // security - hide paths
00014 if (!defined('ADODB_DIR')) die();
00015 
00016 class ADODB2_oci8 extends ADODB_DataDict {
00017         
00018         var $databaseType = 'oci8';
00019         var $seqField = false;
00020         var $seqPrefix = 'SEQ_';
00021         var $dropTable = "DROP TABLE %s CASCADE CONSTRAINTS";
00022         var $trigPrefix = 'TRIG_';
00023         var $alterCol = ' MODIFY ';
00024         var $typeX = 'VARCHAR(4000)';
00025         var $typeXL = 'CLOB';
00026         
00027         function MetaType($t,$len=-1)
00028         {
00029                 if (is_object($t)) {
00030                         $fieldobj = $t;
00031                         $t = $fieldobj->type;
00032                         $len = $fieldobj->max_length;
00033                 }
00034                 switch (strtoupper($t)) {
00035                 case 'VARCHAR':
00036                 case 'VARCHAR2':
00037                 case 'CHAR':
00038                 case 'VARBINARY':
00039                 case 'BINARY':
00040                         if (isset($this) && $len <= $this->blobSize) return 'C';
00041                         return 'X';
00042                 
00043                 case 'NCHAR':
00044                 case 'NVARCHAR2':
00045                 case 'NVARCHAR':
00046                         if (isset($this) && $len <= $this->blobSize) return 'C2';
00047                         return 'X2';
00048                         
00049                 case 'NCLOB':
00050                 case 'CLOB':
00051                         return 'XL';
00052                 
00053                 case 'LONG RAW':
00054                 case 'LONG VARBINARY':
00055                 case 'BLOB':
00056                         return 'B';
00057                 
00058                 case 'DATE': 
00059                         return 'T';
00060                 
00061                 case 'INT': 
00062                 case 'SMALLINT':
00063                 case 'INTEGER': 
00064                         return 'I';
00065                         
00066                 default:
00067                         return 'N';
00068                 }
00069         }
00070         
00071         function ActualType($meta)
00072         {
00073                 switch($meta) {
00074                 case 'C': return 'VARCHAR';
00075                 case 'X': return $this->typeX;
00076                 case 'XL': return $this->typeXL;
00077                 
00078                 case 'C2': return 'NVARCHAR2';
00079                 case 'X2': return 'NVARCHAR2(4000)';
00080                 
00081                 case 'B': return 'BLOB';
00082                         
00083                 case 'D': 
00084                 case 'T': return 'DATE';
00085                 case 'L': return 'DECIMAL(1)';
00086                 case 'I1': return 'DECIMAL(3)';
00087                 case 'I2': return 'DECIMAL(5)';
00088                 case 'I':
00089                 case 'I4': return 'DECIMAL(10)';
00090                 
00091                 case 'I8': return 'DECIMAL(20)';
00092                 case 'F': return 'DECIMAL';
00093                 case 'N': return 'DECIMAL';
00094                 default:
00095                         return $meta;
00096                 }       
00097         }
00098         
00099         function CreateDatabase($dbname, $options=false)
00100         {
00101                 $options = $this->_Options($options);
00102                 $password = isset($options['PASSWORD']) ? $options['PASSWORD'] : 'tiger';
00103                 $tablespace = isset($options["TABLESPACE"]) ? " DEFAULT TABLESPACE ".$options["TABLESPACE"] : '';
00104                 $sql[] = "CREATE USER ".$dbname." IDENTIFIED BY ".$password.$tablespace;
00105                 $sql[] = "GRANT CREATE SESSION, CREATE TABLE,UNLIMITED TABLESPACE,CREATE SEQUENCE TO $dbname";
00106                 
00107                 return $sql;
00108         }
00109         
00110         function AddColumnSQL($tabname, $flds)
00111         {
00112                 $tabname = $this->TableName ($tabname);
00113                 $f = array();
00114                 list($lines,$pkey) = $this->_GenFields($flds);
00115                 $s = "ALTER TABLE $tabname ADD (";
00116                 foreach($lines as $v) {
00117                         $f[] = "\n $v";
00118                 }
00119                 
00120                 $s .= implode(', ',$f).')';
00121                 $sql[] = $s;
00122                 return $sql;
00123         }
00124         
00125         function AlterColumnSQL($tabname, $flds)
00126         {
00127                 $tabname = $this->TableName ($tabname);
00128                 $f = array();
00129                 list($lines,$pkey) = $this->_GenFields($flds);
00130                 $s = "ALTER TABLE $tabname MODIFY(";
00131                 foreach($lines as $v) {
00132                         $f[] = "\n $v";
00133                 }
00134                 $s .= implode(', ',$f).')';
00135                 $sql[] = $s;
00136                 return $sql;
00137         }
00138         
00139         function DropColumnSQL($tabname, $flds)
00140         {
00141                 $tabname = $this->TableName ($tabname);
00142                 if (!is_array($flds)) $flds = explode(',',$flds);
00143                 foreach ($flds as $k => $v) $flds[$k] = $this->NameQuote($v);
00144                 
00145                 $sql = array();
00146                 $s = "ALTER TABLE $tabname DROP(";
00147                 $s .= implode(', ',$flds).') CASCADE CONSTRAINTS';
00148                 $sql[] = $s;
00149                 return $sql;
00150         }
00151         
00152         function _DropAutoIncrement($t)
00153         {
00154                 if (strpos($t,'.') !== false) {
00155                         $tarr = explode('.',$t);
00156                         return "drop sequence ".$tarr[0].".seq_".$tarr[1];
00157                 }
00158                 return "drop sequence seq_".$t;
00159         }
00160         
00161         // return string must begin with space
00162         function _CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned)
00163         {
00164                 $suffix = '';
00165                 
00166                 if ($fdefault == "''" && $fnotnull) {// this is null in oracle
00167                         $fnotnull = false;
00168                         if ($this->debug) ADOConnection::outp("NOT NULL and DEFAULT='' illegal in Oracle");
00169                 }
00170                 
00171                 if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault";
00172                 if ($fnotnull) $suffix .= ' NOT NULL';
00173                 
00174                 if ($fautoinc) $this->seqField = $fname;
00175                 if ($fconstraint) $suffix .= ' '.$fconstraint;
00176                 
00177                 return $suffix;
00178         }
00179         
00180 /*
00181 CREATE or replace TRIGGER jaddress_insert
00182 before insert on jaddress
00183 for each row
00184 begin
00185 select seqaddress.nextval into :new.A_ID from dual;
00186 end;
00187 */
00188         function _Triggers($tabname,$tableoptions)
00189         {
00190                 if (!$this->seqField) return array();
00191                 
00192                 if ($this->schema) {
00193                         $t = strpos($tabname,'.');
00194                         if ($t !== false) $tab = substr($tabname,$t+1);
00195                         else $tab = $tabname;
00196                         $seqname = $this->schema.'.'.$this->seqPrefix.$tab;
00197                         $trigname = $this->schema.'.'.$this->trigPrefix.$this->seqPrefix.$tab;
00198                 } else {
00199                         $seqname = $this->seqPrefix.$tabname;
00200                         $trigname = $this->trigPrefix.$seqname;
00201                 }
00202                 
00203                 if (strlen($seqname) > 30) {
00204                         $seqname = $this->seqPrefix.uniqid('');
00205                 } // end if
00206                 if (strlen($trigname) > 30) {
00207                         $trigname = $this->trigPrefix.uniqid('');
00208                 } // end if
00209 
00210                 if (isset($tableoptions['REPLACE'])) $sql[] = "DROP SEQUENCE $seqname";
00211                 $seqCache = '';
00212                 if (isset($tableoptions['SEQUENCE_CACHE'])){$seqCache = $tableoptions['SEQUENCE_CACHE'];}
00213                 $seqIncr = '';
00214                 if (isset($tableoptions['SEQUENCE_INCREMENT'])){$seqIncr = ' INCREMENT BY '.$tableoptions['SEQUENCE_INCREMENT'];}
00215                 $seqStart = '';
00216                 if (isset($tableoptions['SEQUENCE_START'])){$seqIncr = ' START WITH '.$tableoptions['SEQUENCE_START'];}
00217                 $sql[] = "CREATE SEQUENCE $seqname $seqStart $seqIncr $seqCache";
00218                 $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;";
00219                 
00220                 $this->seqField = false;
00221                 return $sql;
00222         }
00223         
00224         /*
00225         CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
00226                 [table_options] [select_statement]
00227                 create_definition:
00228                 col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
00229                 [PRIMARY KEY] [reference_definition]
00230                 or PRIMARY KEY (index_col_name,...)
00231                 or KEY [index_name] (index_col_name,...)
00232                 or INDEX [index_name] (index_col_name,...)
00233                 or UNIQUE [INDEX] [index_name] (index_col_name,...)
00234                 or FULLTEXT [INDEX] [index_name] (index_col_name,...)
00235                 or [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)
00236                 [reference_definition]
00237                 or CHECK (expr)
00238         */
00239         
00240 
00241         
00242         function _IndexSQL($idxname, $tabname, $flds,$idxoptions)
00243         {
00244                 $sql = array();
00245                 
00246                 if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) {
00247                         $sql[] = sprintf ($this->dropIndex, $idxname, $tabname);
00248                         if ( isset($idxoptions['DROP']) )
00249                                 return $sql;
00250                 }
00251                 
00252                 if ( empty ($flds) ) {
00253                         return $sql;
00254                 }
00255                 
00256                 if (isset($idxoptions['BITMAP'])) {
00257                         $unique = ' BITMAP'; 
00258                 } elseif (isset($idxoptions['UNIQUE'])) {
00259                         $unique = ' UNIQUE';
00260                 } else {
00261                         $unique = '';
00262                 }
00263                 
00264                 if ( is_array($flds) )
00265                         $flds = implode('", "',$flds);
00266                 $s = 'CREATE' . $unique . ' INDEX "' . $idxname . '" ON "' .$tabname . '" ("' . $flds . '")';
00267 
00268                 if ( isset($idxoptions[$this->upperName]) )
00269                         $s .= $idxoptions[$this->upperName];
00270                 
00271                 if (isset($idxoptions['oci8']))
00272                         $s .= $idxoptions['oci8'];
00273                 
00274 
00275                 $sql[] = $s;
00276                 
00277                 return $sql;
00278         }
00279         
00280         function GetCommentSQL($table,$col)
00281         {
00282                 $table = $this->connection->qstr($table);
00283                 $col = $this->connection->qstr($col);   
00284                 return "select comments from USER_COL_COMMENTS where TABLE_NAME=$table and COLUMN_NAME=$col";
00285         }
00286         
00287         function SetCommentSQL($table,$col,$cmt)
00288         {
00289                 $cmt = $this->connection->qstr($cmt);
00290                 return  "COMMENT ON COLUMN $table.$col IS $cmt";
00291         }
00292 }
00293 ?>

This documentation has been generated automatically from TYPO3 source code using Doxygen and is provided as is by Cast Iron Coding as a courtesy to other TYPO3 developers and users. Please consider Cast Iron Coding — a full-service web development agency in Portland, Oregon specializing in TYPO3 extension development — for all of your TYPO3 development and consulting needs!