Dragonfly CMS logo Server sponsored and hosted by
DedicatedNOW
CVS logo  
.:: Home :: Dev. Resources :: Forums ::.
Dragonfly CMS CVS Repository
 Location: / cvs / html / includes / classes / sqlctrl / postgresql.php
This is a web interface to the Dragonfly CMS CVS tree. You can browse the file hierarchy by picking directories. If you pick a file, you will see the revision history for that file.
Selecting a revision number will show that revision of the file. There are links at each revision to display diffs, annotate and download.
Note: Info about CVS and our commits can be found at our CVS Info Forum
File name: html/includes/classes/sqlctrl/postgresql.php
Revision : 10.0 (3 years 5 months 2 weeks 4 days 4 hours 17 minutes 9 seconds ago) by djmaze
Changed : +2 -2 lines
Comment: Upgraded main revision number


# Author Rev Line
1 nanocaio 1.1 <?php
2 nanocaio 1.1 /*********************************************
3 nanocaio 1.1 CPG Dragonfly™ CMS
4 nanocaio 1.1 ********************************************
5 nanocaio 1.4 Copyright © 2004 - 2007 by CPG-Nuke Dev Team
6 nanocaio 1.1 http://dragonflycms.org
7 nanocaio 1.1  
8 nanocaio 1.1 Dragonfly is released under the terms and conditions
9 nanocaio 1.1 of the GNU GPL version 2 or any later version
10 nanocaio 1.1  
11 nanocaio 1.2 $Source: /cvs/html/includes/classes/sqlctrl/postgresql.php,v $
12 djmaze 10.0 $Revision: 1.6 $
13 nanocaio 1.2 $Author: nanocaiordo $
14 djmaze 10.0 $Date: 2010/07/09 09:32:39 $
15 nanocaio 1.1 **********************************************/
16 nanocaio 1.1 if (!defined('CPG_NUKE')) { exit; }
17 nanocaio 1.1  
18 nanocaio 1.1 class SQLCtrl extends DBCtrl {
19 nanocaio 1.1  
20 nanocaio 1.6 public static function backup($database, $tables, $filename, $structure=true, $data=true, $drop=true, $compress=true, $full=false)
21 nanocaio 1.1 {
22 nanocaio 1.1 global $db;
23 nanocaio 1.1 $schema = $database;
24 nanocaio 1.1 if (!is_array($tables) || empty($tables)) {
25 nanocaio 1.1 trigger_error('No tables to backup', E_USER_WARNING);
26 nanocaio 1.1 return false;
27 nanocaio 1.1 }
28 nanocaio 1.1 $crlf = "\n";
29 nanocaio 1.1 $current_user = $db->sql_ufetchrowset('SELECT CURRENT_USER', SQL_NUM);
30 nanocaio 1.1 $current_user = $current_user[0][0];
31 nanocaio 1.1 //$search_path = $db->sql_ufetchrowset('SELECT current_schemas(true)');
32 nanocaio 1.1 //$search_path = preg_replace('#^{(.*?)}$#', '\\1', $search_path[0][0]);
33 nanocaio 1.1 # doing some DOS-CRLF magic...
34 nanocaio 1.1 # this looks better under WinX
35 nanocaio 1.5 if (preg_match('#[^(]*\((.*)\)[^)]*#', $_SERVER['HTTP_USER_AGENT'], $regs)) {
36 nanocaio 1.5 if (false !== stripos($regs[1], 'Win')) { $crlf = "\r\n"; }
37 nanocaio 1.1 }
38 nanocaio 1.1  
39 nanocaio 1.1 if (GZIPSUPPORT) {
40 nanocaio 1.1 while (ob_end_clean());
41 nanocaio 1.1 header('Content-Encoding: ');
42 nanocaio 1.1 } else {
43 nanocaio 1.1 $compress = false;
44 nanocaio 1.1 }
45 nanocaio 1.1 if ($compress) {
46 nanocaio 1.1 $filename .= '.gz';
47 nanocaio 1.1 header("Content-Type: application/x-gzip; name=\"$filename\"");
48 nanocaio 1.1 } else {
49 nanocaio 1.1 header("Content-Type: text/x-delimtext; name=\"$filename\"");
50 nanocaio 1.1 }
51 nanocaio 1.1 header("Content-disposition: attachment; filename=$filename");
52 nanocaio 1.1  
53 nanocaio 1.1 $controls = "--$crlf-- PostgreSQL dump : $database$crlf"
54 nanocaio 1.5 ."-- "._ON." ".formatDateTime(time(), _DATESTRING)." !$crlf--$crlf$crlf"
55 nanocaio 1.1 ."SET client_encoding = '".pg_client_encoding()."';$crlf"
56 nanocaio 1.1 ."SET check_function_bodies = false;$crlf"
57 nanocaio 1.1 ."SET SESSION AUTHORIZATION '$current_user';$crlf$crlf";
58 nanocaio 1.1 if ($full) {
59 nanocaio 1.1 if ($drop) {
60 nanocaio 1.1 $controls .='DROP SCHEMA '.$schema.' CASCADE;'.$crlf;
61 nanocaio 1.1 }
62 nanocaio 1.1 $controls .="CREATE SCHEMA $schema AUTHORIZATION $current_user;$crlf"
63 nanocaio 1.1 ."REVOKE ALL ON SCHEMA $schema FROM PUBLIC;$crlf"
64 nanocaio 1.1 .'ALTER USER '.$current_user.' SET search_path TO '.$schema.";$crlf"
65 nanocaio 1.1 ."$crlf";
66 nanocaio 1.1 }
67 nanocaio 1.1 DBCtrl::output($controls, $compress);
68 nanocaio 1.1 set_time_limit(0);
69 nanocaio 1.1 if ($drop && !$full) {
70 nanocaio 1.1 SQLCtrl::drop_table_struct($schema, $tables, $crlf, $compress);
71 nanocaio 1.1 }
72 nanocaio 1.1 if ($structure) {
73 nanocaio 1.1 if ($full) {
74 nanocaio 1.1 DBCtrl::output(SQLCtrl::get_function($schema, $crlf), $compress);
75 nanocaio 1.1 }
76 nanocaio 1.1 SQLCtrl::get_table_struct($schema, $tables, $crlf, $compress);
77 nanocaio 1.1 }
78 nanocaio 1.1 if ($data) {
79 nanocaio 1.1 SQLCtrl::get_table_content($schema, $tables, $crlf, false, $compress);
80 nanocaio 1.1 }
81 nanocaio 1.1 if ($structure) {
82 nanocaio 1.1 SQLCtrl::get_index($schema, $tables, $crlf, $compress);
83 nanocaio 1.1 DBCtrl::output(SQLCtrl::get_sequence($schema, $tables, $crlf, $full), $compress);
84 nanocaio 1.1 }
85 nanocaio 1.1 DBCtrl::output($crlf.'VACUUM ANALYZE;', $compress);
86 nanocaio 1.1 if ($compress) { DBCtrl::output('', true, true); }
87 nanocaio 1.1 exit;
88 nanocaio 1.1 }
89 nanocaio 1.1  
90 nanocaio 1.6 public static function get_index($schema, $tables, $crlf, $compress)
91 nanocaio 1.1 {
92 nanocaio 1.1 //pg_get_constraintdef(constraint_oid)
93 nanocaio 1.1 global $db;
94 nanocaio 1.1 foreach ($tables as $table) {
95 nanocaio 1.1 $indexes = $db->list_indexes($table);
96 nanocaio 1.1 if (!count($indexes)) continue;
97 nanocaio 1.1 $list = $crlf.'--'.$crlf.'-- Index and Constraint for table '.$table.$crlf.'--'.$crlf;
98 nanocaio 1.1 foreach ($indexes as $relname => $data) {
99 nanocaio 1.1 // $row = $db->sql_ufetchrow("SELECT pg_get_indexdef($data[oid])", SQL_NUM);
100 nanocaio 1.1 // DBCtrl::output($list.$row[0].';', $compress);
101 nanocaio 1.1 if ($relname != 'PRIMARY') {
102 nanocaio 1.1 $columns = array();
103 nanocaio 1.1 foreach ($data['columns'] as $dummy => $column_name) {
104 nanocaio 1.1 $columns[] = $column_name['name'];
105 nanocaio 1.1 }
106 nanocaio 1.1 $columns = implode(', ', $columns);
107 nanocaio 1.1 $list .= 'CREATE '.(($data['unique'] == 1) ? 'UNIQUE ' : '') .'INDEX '.$table.'_'.$relname.' ON '.$table.' USING btree ('.$columns.');'.$crlf;
108 nanocaio 1.1 }
109 nanocaio 1.1 }
110 nanocaio 1.1 if (isset($indexes['PRIMARY'])) {
111 nanocaio 1.1 $columns = array();
112 nanocaio 1.1 foreach ($indexes['PRIMARY']['columns'] as $dummy => $column_name) {
113 nanocaio 1.1 $columns[] = $column_name['name'];
114 nanocaio 1.1 }
115 nanocaio 1.1 $columns = implode(', ', $columns);
116 nanocaio 1.1 $list .= "ALTER TABLE ONLY $table$crlf\t ADD CONSTRAINT ".$table."_pkey PRIMARY KEY ($columns);$crlf";
117 nanocaio 1.1 }
118 nanocaio 1.1 DBCtrl::output($list, $compress);
119 nanocaio 1.1 $list = '';
120 nanocaio 1.1 }
121 nanocaio 1.1 return;
122 nanocaio 1.1 }
123 nanocaio 1.1  
124 nanocaio 1.6 public static function drop_table_struct($schema, $tables, $crlf, $compress)
125 nanocaio 1.1 {
126 nanocaio 1.1 global $db;
127 nanocaio 1.1 foreach ($tables as $table) {
128 nanocaio 1.1 $schema_create = $crlf.'--'.$crlf.'-- Table structure for table '.$table.$crlf.'--'.$crlf;
129 nanocaio 1.1 $indexes = $db->list_indexes($table);
130 nanocaio 1.1 if (0 < count($indexes)) {
131 nanocaio 1.1 if (isset($indexes['PRIMARY'])) {
132 nanocaio 1.1 $schema_create .='ALTER TABLE ONLY '.$schema.'.'.$table.' DROP CONSTRAINT '.$table."_pkey;$crlf";
133 nanocaio 1.1 unset($indexes['PRIMARY']);
134 nanocaio 1.1 }
135 nanocaio 1.1 foreach ($indexes as $relname => $data) {
136 nanocaio 1.1 $schema_create .= 'DROP INDEX '.$schema.'.'.$table.'_'.$relname.";$crlf";
137 nanocaio 1.1 }
138 nanocaio 1.1 }
139 nanocaio 1.1 $schema_create .= 'DROP TABLE '.$schema.'.'.$table.';'.$crlf;
140 nanocaio 1.1 DBCtrl::output($schema_create, $compress);
141 nanocaio 1.1 }
142 nanocaio 1.1 return;
143 nanocaio 1.1 }
144 nanocaio 1.1  
145 nanocaio 1.1 // Return $table's CREATE definition
146 nanocaio 1.1 // Returns a string containing the CREATE statement on success
147 nanocaio 1.6 public static function get_table_struct($schema, $tables, $crlf, $compress)
148 nanocaio 1.1 {
149 nanocaio 1.1 global $db;
150 nanocaio 1.1 foreach ($tables as $table) {
151 nanocaio 1.1 $schema_create = $crlf.'--'.$crlf.'-- Table structure for table '.$table.$crlf.'--'.$crlf;
152 nanocaio 1.1 $schema_create .= "CREATE TABLE $table ($crlf";
153 nanocaio 1.1 $result = $db->list_columns($table, false, true);
154 nanocaio 1.1 foreach ($result as $row) {
155 nanocaio 1.1 $schema_create .= " $row[Field] $row[Type]";
156 nanocaio 1.1 if (!empty($row['Default']) || $row['Default'] == '0') $schema_create .= " DEFAULT $row[Default]";
157 nanocaio 1.1 if (!$row['Null']) $schema_create .= ' NOT NULL';
158 nanocaio 1.1 if (!empty($row['Extra'])) $schema_create .= " $row[Extra]";
159 nanocaio 1.1 if (next($result)) {
160 nanocaio 1.1 $schema_create .= ",$crlf";
161 nanocaio 1.1 } else {
162 nanocaio 1.1 $schema_create .= "$crlf";
163 nanocaio 1.1 }
164 nanocaio 1.1 }
165 nanocaio 1.1 $schema_create .= ') WITHOUT OIDS;'.$crlf;
166 nanocaio 1.1 DBCtrl::output($schema_create, $compress);
167 nanocaio 1.1 }
168 nanocaio 1.1 return;
169 nanocaio 1.1 }
170 nanocaio 1.1  
171 nanocaio 1.1 // Get the content of $table as a series of INSERT statements.
172 nanocaio 1.6 public static function get_table_content($schema, $tables, $crlf, $complete, $compress)
173 nanocaio 1.1 {
174 nanocaio 1.1 global $db;
175 nanocaio 1.1 foreach ($tables as $table) {
176 nanocaio 1.1 $str = $fields = '';
177 nanocaio 1.1 $result = $db->sql_query("SELECT * FROM $schema.$table");
178 nanocaio 1.1 $fieldcount = $db->sql_numfields($result);
179 nanocaio 1.1 if ($complete) {
180 nanocaio 1.1 $fields = array();
181 nanocaio 1.1 for ($j=0; $j<$fieldcount;$j++) {
182 nanocaio 1.1 $fields[] = $db->sql_fieldname($j, $result);
183 nanocaio 1.1 }
184 nanocaio 1.1 $fields = '('.implode(', ', $fields).') ';
185 nanocaio 1.1 }
186 nanocaio 1.1 while ($row = $db->sql_fetchrow($result, SQL_NUM)) {
187 nanocaio 1.1 $str .= "INSERT INTO $table $fields VALUES (";
188 nanocaio 1.1 for ($j=0; $j<$fieldcount;$j++) {
189 nanocaio 1.1 if ($j > 0) $str .= ', ';
190 nanocaio 1.1 # Can't use addslashes() as we don't know the value of magic_quotes_sybase.
191 nanocaio 1.1 if (!isset($row[$j])) { $str .= 'NULL'; }
192 nanocaio 1.1 elseif ($row[$j] != '') { $str .= "'".$db->escape_string($row[$j])."'"; }
193 nanocaio 1.1 else { $str .= "''"; }
194 nanocaio 1.1 }
195 nanocaio 1.1 $str .= ");$crlf";
196 nanocaio 1.1 DBCtrl::output($str, $compress);
197 nanocaio 1.1 $str = '';
198 nanocaio 1.1 }
199 nanocaio 1.1 $db->sql_freeresult($result);
200 nanocaio 1.1 }
201 nanocaio 1.1 return;
202 nanocaio 1.1 }
203 nanocaio 1.1  
204 nanocaio 1.6 public static function get_function($schema, $crlf)
205 nanocaio 1.1 {
206 nanocaio 1.1 global $db;
207 nanocaio 1.1 $ary_function = $db->sql_ufetchrowset (
208 nanocaio 1.1 "SELECT
209 nanocaio 1.1 proname,
210 nanocaio 1.1 proisstrict AS strict,
211 nanocaio 1.1 provolatile AS volatile,
212 nanocaio 1.1 prosrc AS definition,
213 nanocaio 1.1 pt.typname AS proresult,
214 nanocaio 1.1 pl.lanname AS prolanguage,
215 nanocaio 1.1 proname || '(' || oidvectortypes(pc.proargtypes) || ')' AS proproto,
216 nanocaio 1.1 CASE WHEN proretset THEN 'setof '::text ELSE '' END || pt.typname AS proreturns,
217 nanocaio 1.1 usename as proowner
218 nanocaio 1.1 FROM
219 nanocaio 1.1 pg_proc pc, pg_user pu, pg_type pt, pg_language pl
220 nanocaio 1.1 WHERE
221 nanocaio 1.1 pc.proowner = pu.usesysid
222 nanocaio 1.1 AND pronamespace = (SELECT oid FROM pg_namespace WHERE nspname='$schema')
223 nanocaio 1.1 AND pc.prorettype = pt.oid
224 nanocaio 1.1 AND pc.prolang = pl.oid
225 nanocaio 1.1 ORDER BY proname, proresult", SQL_ASSOC);
226 nanocaio 1.1 if (empty($ary_function)) return;
227 nanocaio 1.1 $list = $crlf.'--'.$crlf.'-- Function structure'.$crlf.'--'.$crlf;
228 nanocaio 1.1 $db->load_manager();
229 nanocaio 1.1 foreach($ary_function as $func) {
230 nanocaio 1.1 $provolatile = array('v'=>'', 'i'=>' IMMUTABLE', 's'=>' STABLE');
231 nanocaio 1.1 $strict = array('f'=>'', 't'=>' STRICT');
232 nanocaio 1.1 $uni = strtoupper($func['proresult']);
233 nanocaio 1.1 $definition = str_replace("'", "''", $func['definition']);
234 nanocaio 1.1 $result = isset($db->mngr->fields[$uni]) ? strtolower($db->mngr->fields[$uni]) : $func['proresult'];
235 nanocaio 1.1 $list .= "CREATE OR REPLACE FUNCTION $func[proproto] RETURNS $result$crlf\t"
236 nanocaio 1.1 ."AS '$definition'$crlf\t"
237 nanocaio 1.1 .'LANGUAGE '.$func['prolanguage'].''.$provolatile[$func['volatile']].''.$strict[$func['strict']].";$crlf$crlf";
238 nanocaio 1.1 }
239 nanocaio 1.1 return $list;
240 nanocaio 1.1 }
241 nanocaio 1.1  
242 nanocaio 1.6 public static function get_sequence($schema, $tables, $crlf, $full)
243 nanocaio 1.1 {
244 nanocaio 1.1 global $db;
245 nanocaio 1.2 $list = '';
246 nanocaio 1.1 if ($full) {
247 nanocaio 1.2 $sequence = $db->list_sequences($schema);
248 nanocaio 1.2 foreach ($sequence as $seq_name => $seq_data) {
249 nanocaio 1.2 $list .= "$crlf--$crlf-- SEQUENCE SET $seq_name$crlf--$crlf"
250 nanocaio 1.2 ."SELECT pg_catalog.setval('$seq_name', {$seq_data['last_value']}, {$seq_data['is_called']});$crlf";
251 nanocaio 1.1 }
252 nanocaio 1.1 } else {
253 nanocaio 1.1 foreach ($tables as $table) {
254 nanocaio 1.2 if ($sequence = $db->get_sequence($table)) {
255 nanocaio 1.2 $list .= "$crlf--$crlf-- SEQUENCE SET {$sequence['seqname']}$crlf--$crlf"
256 nanocaio 1.2 ."SELECT pg_catalog.setval('{$sequence['seqname']}', {$sequence['last_value']}, {$sequence['is_called']});$crlf";
257 nanocaio 1.1 }
258 nanocaio 1.1 }
259 nanocaio 1.1 }
260 nanocaio 1.1 return $list;
261 nanocaio 1.1 }
262 nanocaio 1.1  
263 nanocaio 1.1 }


Code Credits - Privacy Policy