source: trunk/phpgwapi/inc/adodb/datadict/datadict-oci8.inc.php @ 2

Revision 2, 6.9 KB checked in by niltonneto, 17 years ago (diff)

Removida todas as tags usadas pelo CVS ($Id, $Source).
Primeira versão no CVS externo.

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