[ Index ] |
|
Code source de vtiger CRM 5.0.2 |
1 <?php 2 3 /** 4 V4.90 8 June 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 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 10:22:19 2007 | par Balluche grâce à PHPXref 0.7 |