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

Revision 2, 5.5 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_postgres extends ADODB_DataDict {
17       
18        var $databaseType = 'postgres';
19        var $seqField = false;
20        var $seqPrefix = 'SEQ_';
21        var $addCol = ' ADD COLUMN';
22        var $quote = '"';
23       
24        function MetaType($t,$len=-1,$fieldobj=false)
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 'INTERVAL':
33                        case 'CHAR':
34                        case 'CHARACTER':
35                        case 'VARCHAR':
36                        case 'NAME':
37                        case 'BPCHAR':
38                                if ($len <= $this->blobSize) return 'C';
39                       
40                        case 'TEXT':
41                                return 'X';
42       
43                        case 'IMAGE': // user defined type
44                        case 'BLOB': // user defined type
45                        case 'BIT':     // This is a bit string, not a single bit, so don't return 'L'
46                        case 'VARBIT':
47                        case 'BYTEA':
48                                return 'B';
49                       
50                        case 'BOOL':
51                        case 'BOOLEAN':
52                                return 'L';
53                       
54                        case 'DATE':
55                                return 'D';
56                       
57                        case 'TIME':
58                        case 'DATETIME':
59                        case 'TIMESTAMP':
60                        case 'TIMESTAMPTZ':
61                                return 'T';
62                       
63                        case 'INTEGER': return (empty($fieldobj->primary_key) && empty($fieldobj->unique))? 'I' : 'R';
64                        case 'SMALLINT':
65                        case 'INT2': return (empty($fieldobj->primary_key) && empty($fieldobj->unique))? 'I2' : 'R';
66                        case 'INT4': return (empty($fieldobj->primary_key) && empty($fieldobj->unique))? 'I4' : 'R';
67                        case 'BIGINT':
68                        case 'INT8': return (empty($fieldobj->primary_key) && empty($fieldobj->unique))? 'I8' : 'R';
69                               
70                        case 'OID':
71                        case 'SERIAL':
72                                return 'R';
73                       
74                        case 'FLOAT4':
75                        case 'FLOAT8':
76                        case 'DOUBLE PRECISION':
77                        case 'REAL':
78                                return 'F';
79                               
80                         default:
81                                return 'N';
82                }
83        }
84       
85        function ActualType($meta)
86        {
87                switch($meta) {
88                case 'C': return 'VARCHAR';
89                case 'XL':
90                case 'X': return 'TEXT';
91               
92                case 'C2': return 'VARCHAR';
93                case 'X2': return 'TEXT';
94               
95                case 'B': return 'BYTEA';
96                       
97                case 'D': return 'DATE';
98                case 'T': return 'TIMESTAMP';
99               
100                case 'L': return 'SMALLINT';
101                case 'I': return 'INTEGER';
102                case 'I1': return 'SMALLINT';
103                case 'I2': return 'INT2';
104                case 'I4': return 'INT4';
105                case 'I8': return 'INT8';
106               
107                case 'F': return 'FLOAT8';
108                case 'N': return 'NUMERIC';
109                default:
110                        return $meta;
111                }
112        }
113       
114        /* The following does not work in Pg 6.0 - does anyone want to contribute code?
115       
116        //"ALTER TABLE table ALTER COLUMN column SET DEFAULT mydef" and
117        //"ALTER TABLE table ALTER COLUMN column DROP DEFAULT mydef"
118        //"ALTER TABLE table ALTER COLUMN column SET NOT NULL" and
119        //"ALTER TABLE table ALTER COLUMN column DROP NOT NULL"*/
120        function AlterColumnSQL($tabname, $flds)
121        {
122                if ($this->debug) ADOConnection::outp("AlterColumnSQL not supported for PostgreSQL");
123                return array();
124        }
125       
126       
127        function DropColumnSQL($tabname, $flds)
128        {
129                if ($this->debug) ADOConnection::outp("DropColumnSQL only works with PostgreSQL 7.3+");
130                return ADODB_DataDict::DropColumnSQL($tabname, $flds)."/* only works for PostgreSQL 7.3+ */";
131        }
132
133        // return string must begin with space
134        function _CreateSuffix($fname, &$ftype, $fnotnull,$fdefault,$fautoinc,$fconstraint)
135        {
136                if ($fautoinc) {
137                        $ftype = 'SERIAL';
138                        return '';
139                }
140                $suffix = '';
141                if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault";
142                if ($fnotnull) $suffix .= ' NOT NULL';
143                if ($fconstraint) $suffix .= ' '.$fconstraint;
144                return $suffix;
145        }
146       
147        function _DropAutoIncrement($t)
148        {
149                return "drop sequence ".$t."_m_id_seq";
150        }
151       
152        /*
153        CREATE [ [ LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name (
154        { column_name data_type [ DEFAULT default_expr ] [ column_constraint [, ... ] ]
155        | table_constraint } [, ... ]
156        )
157        [ INHERITS ( parent_table [, ... ] ) ]
158        [ WITH OIDS | WITHOUT OIDS ]
159        where column_constraint is:
160        [ CONSTRAINT constraint_name ]
161        { NOT NULL | NULL | UNIQUE | PRIMARY KEY |
162        CHECK (expression) |
163        REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL ]
164        [ ON DELETE action ] [ ON UPDATE action ] }
165        [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
166        and table_constraint is:
167        [ CONSTRAINT constraint_name ]
168        { UNIQUE ( column_name [, ... ] ) |
169        PRIMARY KEY ( column_name [, ... ] ) |
170        CHECK ( expression ) |
171        FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ]
172        [ MATCH FULL | MATCH PARTIAL ] [ ON DELETE action ] [ ON UPDATE action ] }
173        [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
174        */
175       
176       
177        /*
178        CREATE [ UNIQUE ] INDEX index_name ON table
179[ USING acc_method ] ( column [ ops_name ] [, ...] )
180[ WHERE predicate ]
181CREATE [ UNIQUE ] INDEX index_name ON table
182[ USING acc_method ] ( func_name( column [, ... ]) [ ops_name ] )
183[ WHERE predicate ]
184        */
185        function _IndexSQL($idxname, $tabname, $flds, $idxoptions)
186        {
187                $sql = array();
188               
189                if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) {
190                        $sql[] = sprintf ($this->dropIndex, $idxname, $tabname);
191                        if ( isset($idxoptions['DROP']) )
192                                return $sql;
193                }
194               
195                if ( empty ($flds) ) {
196                        return $sql;
197                }
198               
199                $unique = isset($idxoptions['UNIQUE']) ? ' UNIQUE' : '';
200               
201                $s = 'CREATE' . $unique . ' INDEX ' . $idxname . ' ON ' . $tabname . ' ';
202               
203                if (isset($idxoptions['HASH']))
204                        $s .= 'USING HASH ';
205               
206                if ( isset($idxoptions[$this->upperName]) )
207                        $s .= $idxoptions[$this->upperName];
208               
209                if ( is_array($flds) )
210                        $flds = implode(', ',$flds);
211                $s .= '(' . $flds . ')';
212                $sql[] = $s;
213               
214                return $sql;
215        }
216}
217?>
Note: See TracBrowser for help on using the repository browser.