14 if (!defined(
'ADODB_DIR')) die();
32 $len = $fieldobj->max_length;
34 switch (strtoupper($t)) {
40 if (isset($this) && $len <= $this->blobSize)
return 'C';
46 if (isset($this) && $len <= $this->blobSize)
return 'C2';
54 case 'LONG VARBINARY':
77 case 'C':
return 'VARCHAR';
81 case 'C2':
return 'NVARCHAR2';
82 case 'X2':
return 'NVARCHAR2(4000)';
84 case 'B':
return 'BLOB';
90 case 'T':
return 'DATE';
91 case 'L':
return 'NUMBER(1)';
92 case 'I1':
return 'NUMBER(3)';
93 case 'I2':
return 'NUMBER(5)';
95 case 'I4':
return 'NUMBER(10)';
97 case 'I8':
return 'NUMBER(20)';
98 case 'F':
return 'NUMBER';
99 case 'N':
return 'NUMBER';
100 case 'R':
return 'NUMBER(20)';
108 $options = $this->
_Options($options);
109 $password = isset($options[
'PASSWORD']) ? $options[
'PASSWORD'] :
'tiger';
110 $tablespace = isset($options[
"TABLESPACE"]) ?
" DEFAULT TABLESPACE ".$options[
"TABLESPACE"] :
'';
111 $sql[] =
"CREATE USER ".$dbname.
" IDENTIFIED BY ".$password.$tablespace;
112 $sql[] =
"GRANT CREATE SESSION, CREATE TABLE,UNLIMITED TABLESPACE,CREATE SEQUENCE TO $dbname";
120 list($lines,$pkey) = $this->
_GenFields($flds);
121 $s =
"ALTER TABLE $tabname ADD (";
122 foreach($lines as $v) {
126 $s .= implode(
', ',$f).
')';
134 list($lines,$pkey) = $this->
_GenFields($flds);
135 $s =
"ALTER TABLE $tabname MODIFY(";
136 foreach($lines as $v) {
139 $s .= implode(
', ',$f).
')';
146 if (!is_array($flds)) $flds = explode(
',',$flds);
147 foreach ($flds as $k => $v) $flds[$k] = $this->
NameQuote($v);
150 $s =
"ALTER TABLE $tabname DROP(";
151 $s .= implode(
', ',$flds).
') CASCADE CONSTRAINTS';
158 if (strpos($t,
'.') !==
false) {
159 $tarr = explode(
'.',$t);
160 return "drop sequence ".$tarr[0].
".seq_".$tarr[1];
162 return "drop sequence seq_".$t;
166 function _CreateSuffix($fname,&$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned)
170 if ($fdefault ==
"''" && $fnotnull) {
172 if ($this->debug) ADOConnection::outp(
"NOT NULL and DEFAULT='' illegal in Oracle");
175 if (strlen($fdefault)) $suffix .=
" DEFAULT $fdefault";
176 if ($fnotnull) $suffix .=
' NOT NULL';
178 if ($fautoinc) $this->seqField = $fname;
179 if ($fconstraint) $suffix .=
' '.$fconstraint;
194 if (!$this->seqField)
return array();
197 $t = strpos($tabname,
'.');
198 if ($t !==
false) $tab = substr($tabname,$t+1);
199 else $tab = $tabname;
200 $seqname = $this->schema.
'.'.$this->seqPrefix.$tab;
201 $trigname = $this->schema.
'.'.$this->trigPrefix.$this->seqPrefix.$tab;
203 $seqname = $this->seqPrefix.$tabname;
204 $trigname = $this->trigPrefix.$seqname;
207 if (strlen($seqname) > 30) {
208 $seqname = $this->seqPrefix.uniqid(
'');
210 if (strlen($trigname) > 30) {
211 $trigname = $this->trigPrefix.uniqid(
'');
214 if (isset($tableoptions[
'REPLACE'])) $sql[] =
"DROP SEQUENCE $seqname";
216 if (isset($tableoptions[
'SEQUENCE_CACHE'])){$seqCache = $tableoptions[
'SEQUENCE_CACHE'];}
218 if (isset($tableoptions[
'SEQUENCE_INCREMENT'])){$seqIncr =
' INCREMENT BY '.$tableoptions[
'SEQUENCE_INCREMENT'];}
220 if (isset($tableoptions[
'SEQUENCE_START'])){$seqIncr =
' START WITH '.$tableoptions[
'SEQUENCE_START'];}
221 $sql[] =
"CREATE SEQUENCE $seqname $seqStart $seqIncr $seqCache";
222 $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";
224 $this->seqField =
false;
246 function _IndexSQL($idxname, $tabname, $flds,$idxoptions)
250 if ( isset($idxoptions[
'REPLACE']) || isset($idxoptions[
'DROP']) ) {
251 $sql[] = sprintf ($this->dropIndex, $idxname, $tabname);
252 if ( isset($idxoptions[
'DROP']) )
256 if ( empty ($flds) ) {
260 if (isset($idxoptions[
'BITMAP'])) {
262 } elseif (isset($idxoptions[
'UNIQUE'])) {
268 if ( is_array($flds) )
269 $flds = implode(
', ',$flds);
270 $s =
'CREATE' . $unique .
' INDEX ' . $idxname .
' ON ' . $tabname .
' (' . $flds .
')';
272 if ( isset($idxoptions[$this->upperName]) )
273 $s .= $idxoptions[$this->upperName];
275 if (isset($idxoptions[
'oci8']))
276 $s .= $idxoptions[
'oci8'];
286 $table = $this->connection->qstr($table);
287 $col = $this->connection->qstr($col);
288 return "select comments from USER_COL_COMMENTS where TABLE_NAME=$table and COLUMN_NAME=$col";
293 $cmt = $this->connection->qstr($cmt);
294 return "COMMENT ON COLUMN $table.$col IS $cmt";