source: Dev/trunk/rdfapi/util/adodb/datadict/datadict-oci8.inc.php @ 12

Last change on this file since 12 was 12, checked in by basvannuland, 14 years ago

Added RAP RDF API
Added RDF reader writer for save and load survey

File size: 7.5 KB
Line 
1<?php
2
3/**
4  V4.94 23 Jan 2007  (c) 2000-2007 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        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 'NVARCHAR2';
79                case 'X2': return 'NVARCHAR2(4000)';
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/*
178CREATE or replace TRIGGER jaddress_insert
179before insert on jaddress
180for each row
181begin
182select seqaddress.nextval into :new.A_ID from dual;
183end;
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               
200                if (strlen($seqname) > 30) {
201                        $seqname = $this->seqPrefix.uniqid('');
202                } // end if
203                if (strlen($trigname) > 30) {
204                        $trigname = $this->trigPrefix.uniqid('');
205                } // end if
206
207                if (isset($tableoptions['REPLACE'])) $sql[] = "DROP SEQUENCE $seqname";
208                $seqCache = '';
209                if (isset($tableoptions['SEQUENCE_CACHE'])){$seqCache = $tableoptions['SEQUENCE_CACHE'];}
210                $seqIncr = '';
211                if (isset($tableoptions['SEQUENCE_INCREMENT'])){$seqIncr = ' INCREMENT BY '.$tableoptions['SEQUENCE_INCREMENT'];}
212                $seqStart = '';
213                if (isset($tableoptions['SEQUENCE_START'])){$seqIncr = ' START WITH '.$tableoptions['SEQUENCE_START'];}
214                $sql[] = "CREATE SEQUENCE $seqname $seqStart $seqIncr $seqCache";
215                $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;";
216               
217                $this->seqField = false;
218                return $sql;
219        }
220       
221        /*
222        CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
223                [table_options] [select_statement]
224                create_definition:
225                col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
226                [PRIMARY KEY] [reference_definition]
227                or PRIMARY KEY (index_col_name,...)
228                or KEY [index_name] (index_col_name,...)
229                or INDEX [index_name] (index_col_name,...)
230                or UNIQUE [INDEX] [index_name] (index_col_name,...)
231                or FULLTEXT [INDEX] [index_name] (index_col_name,...)
232                or [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)
233                [reference_definition]
234                or CHECK (expr)
235        */
236       
237
238       
239        function _IndexSQL($idxname, $tabname, $flds,$idxoptions)
240        {
241                $sql = array();
242               
243                if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) {
244                        $sql[] = sprintf ($this->dropIndex, $idxname, $tabname);
245                        if ( isset($idxoptions['DROP']) )
246                                return $sql;
247                }
248               
249                if ( empty ($flds) ) {
250                        return $sql;
251                }
252               
253                if (isset($idxoptions['BITMAP'])) {
254                        $unique = ' BITMAP';
255                } elseif (isset($idxoptions['UNIQUE'])) {
256                        $unique = ' UNIQUE';
257                } else {
258                        $unique = '';
259                }
260               
261                if ( is_array($flds) )
262                        $flds = implode(', ',$flds);
263                $s = 'CREATE' . $unique . ' INDEX ' . $idxname . ' ON ' . $tabname . ' (' . $flds . ')';
264               
265                if ( isset($idxoptions[$this->upperName]) )
266                        $s .= $idxoptions[$this->upperName];
267               
268                if (isset($idxoptions['oci8']))
269                        $s .= $idxoptions['oci8'];
270               
271
272                $sql[] = $s;
273               
274                return $sql;
275        }
276       
277        function GetCommentSQL($table,$col)
278        {
279                $table = $this->connection->qstr($table);
280                $col = $this->connection->qstr($col);   
281                return "select comments from USER_COL_COMMENTS where TABLE_NAME=$table and COLUMN_NAME=$col";
282        }
283       
284        function SetCommentSQL($table,$col,$cmt)
285        {
286                $cmt = $this->connection->qstr($cmt);
287                return  "COMMENT ON COLUMN $table.$col IS $cmt";
288        }
289}
290?>
Note: See TracBrowser for help on using the repository browser.