diff options
author | Guillaume (ioguix) de Rorthais | 2009-10-02 02:05:21 +0000 |
---|---|---|
committer | Guillaume (ioguix) de Rorthais | 2009-10-02 02:05:21 +0000 |
commit | 71018e3c0668e50bc8dabdf3bb6338865d31e1f5 (patch) | |
tree | 6f9fcec66b87cdd356c325391afc075706a46747 | |
parent | a6da6f8ae536a8da187edd2ec5bdbe963452e790 (diff) |
Fix bug where many requests fail when a schema has a ' or a " in the Postgres* class files.
-rwxr-xr-x | classes/database/Postgres.php | 599 | ||||
-rw-r--r-- | classes/database/Postgres73.php | 30 | ||||
-rw-r--r-- | classes/database/Postgres74.php | 12 | ||||
-rw-r--r-- | classes/database/Postgres80.php | 4 | ||||
-rw-r--r-- | classes/database/Postgres81.php | 6 | ||||
-rw-r--r-- | classes/database/Postgres82.php | 24 |
6 files changed, 477 insertions, 198 deletions
diff --git a/classes/database/Postgres.php b/classes/database/Postgres.php index e7c88411..46a8e5d4 100755 --- a/classes/database/Postgres.php +++ b/classes/database/Postgres.php @@ -910,12 +910,11 @@ class Postgres extends ADODB_base { array_unshift($search_path, $schema); $status = $this->setSearchPath($search_path); if ($status == 0) { - $this->clean($schema); $this->_schema = $schema; return 0; } else return $status; - } + } /** * Sets the current schema search path @@ -1068,10 +1067,12 @@ class Postgres extends ADODB_base { * @return null error **/ function hasObjectID($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $sql = "SELECT relhasoids FROM pg_catalog.pg_class WHERE relname='{$table}' - AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$this->_schema}')"; + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')"; $rs = $this->selectSet($sql); if ($rs->recordCount() != 1) return null; @@ -1087,6 +1088,8 @@ class Postgres extends ADODB_base { * @return A recordset */ function getTable($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $sql = " @@ -1098,7 +1101,7 @@ class Postgres extends ADODB_base { LEFT JOIN pg_catalog.pg_user u ON u.usesysid = c.relowner LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind = 'r' - AND n.nspname = '{$this->_schema}' + AND n.nspname = '{$c_schema}' AND n.oid = c.relnamespace AND c.relname = '{$table}'"; @@ -1111,6 +1114,8 @@ class Postgres extends ADODB_base { * @return All tables, sorted alphabetically */ function getTables($all = false) { + $c_schema = $this->_schema; + $this->clean($c_schema); if ($all) { // Exclude pg_catalog and information_schema tables $sql = "SELECT schemaname AS nspname, tablename AS relname, tableowner AS relowner @@ -1125,7 +1130,7 @@ class Postgres extends ADODB_base { FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind = 'r' - AND nspname='{$this->_schema}' + AND nspname='{$c_schema}' ORDER BY c.relname"; } @@ -1139,6 +1144,8 @@ class Postgres extends ADODB_base { * @return All attributes in order */ function getTableAttributes($table, $field = '') { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $this->clean($field); @@ -1172,7 +1179,7 @@ class Postgres extends ADODB_base { WHERE a.attrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE - nspname = '{$this->_schema}')) + nspname = '{$c_schema}')) AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum"; } @@ -1194,7 +1201,7 @@ class Postgres extends ADODB_base { WHERE a.attrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE - nspname = '{$this->_schema}')) + nspname = '{$c_schema}')) AND a.attname = '{$field}'"; } @@ -1207,6 +1214,8 @@ class Postgres extends ADODB_base { * @return A recordset */ function getTableParents($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $sql = " @@ -1218,7 +1227,7 @@ class Postgres extends ADODB_base { pc.oid=pi.inhparent AND pc.relnamespace=pn.oid AND pi.inhrelid = (SELECT oid from pg_catalog.pg_class WHERE relname='{$table}' - AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = '{$this->_schema}')) + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = '{$c_schema}')) ORDER BY pi.inhseqno "; @@ -1232,6 +1241,8 @@ class Postgres extends ADODB_base { * @return A recordset */ function getTableChildren($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $sql = " @@ -1243,7 +1254,7 @@ class Postgres extends ADODB_base { pc.oid=pi.inhrelid AND pc.relnamespace=pn.oid AND pi.inhparent = (SELECT oid from pg_catalog.pg_class WHERE relname='{$table}' - AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = '{$this->_schema}')) + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = '{$c_schema}')) "; return $this->selectSet($sql); @@ -1265,6 +1276,7 @@ class Postgres extends ADODB_base { return null; } $this->fieldClean($t->fields['relname']); + $this->fieldClean($t->fields['nspname']); // Fetch attributes $atts = $this->getTableAttributes($table); @@ -1284,7 +1296,7 @@ class Postgres extends ADODB_base { $sql = $this->getChangeUserSQL($t->fields['relowner']) . "\n\n"; // Set schema search path - $sql .= "SET search_path = \"{$this->_schema}\", pg_catalog;\n\n"; + $sql .= "SET search_path = \"{$t->fields['nspname']}\", pg_catalog;\n\n"; // Begin CREATE TABLE definition $sql .= "-- Definition\n\n"; @@ -1292,8 +1304,8 @@ class Postgres extends ADODB_base { // in pg_catalog. if (!$clean) $sql .= "-- "; $sql .= "DROP TABLE "; - $sql .= "{$this->_schema}\"{$t->fields['relname']}\";\n"; - $sql .= "CREATE TABLE {$this->_schema}\"{$t->fields['relname']}\" (\n"; + $sql .= "\"{$t->fields['nspname']}\".\"{$t->fields['relname']}\";\n"; + $sql .= "CREATE TABLE \"{$t->fields['nspname']}\".\"{$t->fields['relname']}\" (\n"; // Output all table columns $col_comments_sql = ''; // Accumulate comments on columns @@ -1416,7 +1428,7 @@ class Postgres extends ADODB_base { $sql .= "\n"; $first = false; } - $sql .= "ALTER TABLE ONLY {$this->_schema}\"{$t->fields['relname']}\" ALTER COLUMN \"{$atts->fields['attname']}\" SET STATISTICS {$atts->fields['attstattarget']};\n"; + $sql .= "ALTER TABLE ONLY \"{$t->fields['nspname']}\".\"{$t->fields['relname']}\" ALTER COLUMN \"{$atts->fields['attname']}\" SET STATISTICS {$atts->fields['attstattarget']};\n"; } // Then storage if ($atts->fields['attstorage'] != $atts->fields['typstorage']) { @@ -1438,7 +1450,7 @@ class Postgres extends ADODB_base { $this->rollbackTransaction(); return null; } - $sql .= "ALTER TABLE ONLY {$this->_schema}\"{$t->fields['relname']}\" ALTER COLUMN \"{$atts->fields['attname']}\" SET STORAGE {$storage};\n"; + $sql .= "ALTER TABLE ONLY \"{$t->fields['nspname']}\".\"{$t->fields['relname']}\" ALTER COLUMN \"{$atts->fields['attname']}\" SET STORAGE {$storage};\n"; } $atts->moveNext(); @@ -1448,7 +1460,7 @@ class Postgres extends ADODB_base { if ($t->fields['relcomment'] !== null) { $this->clean($t->fields['relcomment']); $sql .= "\n-- Comment\n\n"; - $sql .= "COMMENT ON TABLE {$this->_schema}\"{$t->fields['relname']}\" IS '{$t->fields['relcomment']}';\n"; + $sql .= "COMMENT ON TABLE \"{$t->fields['nspname']}\".\"{$t->fields['relname']}\" IS '{$t->fields['relcomment']}';\n"; } // Add comments on columns, if any @@ -1468,7 +1480,7 @@ class Postgres extends ADODB_base { * wire-in knowledge about the default public privileges for different * kinds of objects. */ - $sql .= "REVOKE ALL ON TABLE {$this->_schema}\"{$t->fields['relname']}\" FROM PUBLIC;\n"; + $sql .= "REVOKE ALL ON TABLE \"{$t->fields['nspname']}\".\"{$t->fields['relname']}\" FROM PUBLIC;\n"; foreach ($privs as $v) { // Get non-GRANT OPTION privs $nongrant = array_diff($v[2], $v[4]); @@ -1642,6 +1654,8 @@ class Postgres extends ADODB_base { function createTable($name, $fields, $field, $type, $array, $length, $notnull, $default, $withoutoids, $colcomment, $tblcomment, $tablespace, $uniquekey, $primarykey) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($name); $this->clean($tblcomment); @@ -1651,7 +1665,7 @@ class Postgres extends ADODB_base { $found = false; $first = true; $comment_sql = ''; //Accumulate comments for the columns - $sql = "CREATE TABLE \"{$this->_schema}\".\"{$name}\" ("; + $sql = "CREATE TABLE \"{$f_schema}\".\"{$name}\" ("; for ($i = 0; $i < $fields; $i++) { $this->fieldClean($field[$i]); $this->clean($type[$i]); @@ -1691,7 +1705,7 @@ class Postgres extends ADODB_base { if (!isset($primarykey[$i])) { if (isset($uniquekey[$i])) $sql .= " UNIQUE"; if (isset($notnull[$i])) $sql .= " NOT NULL"; - } + } if ($default[$i] != '') $sql .= " DEFAULT {$default[$i]}"; if ($colcomment[$i] != '') $comment_sql .= "COMMENT ON COLUMN \"{$name}\".\"{$field[$i]}\" IS '{$colcomment[$i]}';\n"; @@ -1706,11 +1720,11 @@ class Postgres extends ADODB_base { for ($i = 0; $i < $fields; $i++) { if (isset($primarykey[$i])) { $primarykeycolumns[] = "\"{$field[$i]}\""; - } + } } if (count($primarykeycolumns) > 0) { $sql .= ", PRIMARY KEY (" . implode(", ", $primarykeycolumns) . ")"; - } + } $sql .= ")"; @@ -1722,7 +1736,7 @@ class Postgres extends ADODB_base { if ($this->hasTablespaces() && $tablespace != '') { $this->fieldClean($tablespace); $sql .= " TABLESPACE \"{$tablespace}\""; - } + } $status = $this->execute($sql); if ($status) { @@ -1761,8 +1775,10 @@ class Postgres extends ADODB_base { * @param $tablespace The tablespace name ('' means none/default) */ function createTableLike($name, $like, $defaults = false, $constraints = false, $idx = false, $tablespace = '') { - $this->fieldClean($name); + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($name); $this->fieldClean($like['schema']); $this->fieldClean($like['table']); $like = "\"{$like['schema']}\".\"{$like['table']}\""; @@ -1770,7 +1786,7 @@ class Postgres extends ADODB_base { $status = $this->beginTransaction(); if ($status != 0) return -1; - $sql = "CREATE TABLE \"{$this->_schema}\".\"{$name}\" (LIKE {$like}"; + $sql = "CREATE TABLE \"{$f_schema}\".\"{$name}\" (LIKE {$like}"; if ($defaults) $sql .= " INCLUDING DEFAULTS"; if ($this->hasCreateTableLikeWithConstraints() && $constraints) $sql .= " INCLUDING CONSTRAINTS"; @@ -1794,6 +1810,7 @@ class Postgres extends ADODB_base { /** * Alter a table's name + * /!\ this function is called from _alterTable which take care of escaping fields * @param $tblrs The table RecordSet returned by getTable() * @param $name The new table's name * @return 0 success @@ -1801,7 +1818,10 @@ class Postgres extends ADODB_base { function alterTableName($tblrs, $name = null) { // Rename (only if name has changed) if (!empty($name) && ($name != $tblrs->fields['relname'])) { - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$tblrs->fields['relname']}\" RENAME TO \"{$name}\""; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$tblrs->fields['relname']}\" RENAME TO \"{$name}\""; $status = $this->execute($sql); if ($status == 0) $tblrs->fields['relname'] = $name; @@ -1813,16 +1833,19 @@ class Postgres extends ADODB_base { /** * Alter a table's owner + * /!\ this function is called from _alterTable which take care of escaping fields * @param $tblrs The table RecordSet returned by getTable() * @param $name The new table's owner * @return 0 success */ function alterTableOwner($tblrs, $owner = null) { if (!empty($owner) && ($tblrs->fields['relowner'] != $owner)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); // If owner has been changed, then do the alteration. We are // careful to avoid this generally as changing owner is a // superuser only function. - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$tblrs->fields['relname']}\" OWNER TO \"{$owner}\""; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$tblrs->fields['relname']}\" OWNER TO \"{$owner}\""; return $this->execute($sql); } @@ -1831,15 +1854,19 @@ class Postgres extends ADODB_base { /** * Alter a table's tablespace + * /!\ this function is called from _alterTable which take care of escaping fields * @param $tblrs The table RecordSet returned by getTable() * @param $name The new table's tablespace * @return 0 success */ function alterTableTablespace($tblrs, $tablespace = null) { if (!empty($tablespace) && ($tblrs->fields['tablespace'] != $tablespace)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + // If tablespace has been changed, then do the alteration. We // don't want to do this unnecessarily. - $sql = "ALTER TABLE \"{$tblrs->fields['relname']}\" SET TABLESPACE \"{$tablespace}\""; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$tblrs->fields['relname']}\" SET TABLESPACE \"{$tablespace}\""; return $this->execute($sql); } @@ -1848,15 +1875,18 @@ class Postgres extends ADODB_base { /** * Alter a table's schema + * /!\ this function is called from _alterTable which take care of escaping fields * @param $tblrs The table RecordSet returned by getTable() * @param $name The new table's schema * @return 0 success */ function alterTableSchema($tblrs, $schema = null) { if (!empty($schema) && ($tblrs->fields['nspname'] != $schema)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); // If tablespace has been changed, then do the alteration. We // don't want to do this unnecessarily. - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$tblrs->fields['relname']}\" SET SCHEMA \"{$schema}\""; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$tblrs->fields['relname']}\" SET SCHEMA \"{$schema}\""; return $this->execute($sql); } @@ -1968,6 +1998,8 @@ class Postgres extends ADODB_base { * @return -2 wrong number of attributes found */ function getAttributeNames($table, $atts) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $this->arrayClean($atts); @@ -1977,7 +2009,7 @@ class Postgres extends ADODB_base { $sql = "SELECT attnum, attname FROM pg_catalog.pg_attribute WHERE attrelid=(SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' AND - relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$this->_schema}')) + relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')) AND attnum IN ('" . join("','", $atts) . "')"; $rs = $this->selectSet($sql); @@ -2000,9 +2032,11 @@ class Postgres extends ADODB_base { * @return 0 success */ function emptyTable($table) { - $this->fieldClean($table); + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); - $sql = "DELETE FROM \"{$this->_schema}\".\"{$table}\""; + $sql = "DELETE FROM \"{$f_schema}\".\"{$table}\""; return $this->execute($sql); } @@ -2014,9 +2048,11 @@ class Postgres extends ADODB_base { * @return 0 success */ function dropTable($table, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); - $sql = "DROP TABLE \"{$this->_schema}\".\"{$table}\""; + $sql = "DROP TABLE \"{$f_schema}\".\"{$table}\""; if ($cascade) $sql .= " CASCADE"; return $this->execute($sql); @@ -2034,6 +2070,8 @@ class Postgres extends ADODB_base { * @return 0 success */ function addColumn($table, $column, $type, $array, $length, $notnull, $default, $comment) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); $this->fieldClean($column); $this->clean($type); @@ -2041,7 +2079,7 @@ class Postgres extends ADODB_base { $this->clean($comment); if ($length == '') - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" {$type}"; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" {$type}"; else { switch ($type) { // Have to account for weird placing of length for with/without @@ -2049,15 +2087,15 @@ class Postgres extends ADODB_base { case 'timestamp with time zone': case 'timestamp without time zone': $qual = substr($type, 9); - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" timestamp({$length}){$qual}"; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" timestamp({$length}){$qual}"; break; case 'time with time zone': case 'time without time zone': $qual = substr($type, 4); - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" time({$length}){$qual}"; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" time({$length}){$qual}"; break; default: - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" {$type}({$length})"; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" {$type}({$length})"; } } @@ -2130,6 +2168,8 @@ class Postgres extends ADODB_base { } } + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($name); $this->fieldClean($table); $this->fieldClean($column); @@ -2182,7 +2222,7 @@ class Postgres extends ADODB_base { // Attempt to process the batch alteration, if anything has been changed if (!empty($toAlter)) { // Initialise an empty SQL string - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" " + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" " . implode(',', $toAlter); $status = $this->execute($sql); @@ -2210,11 +2250,13 @@ class Postgres extends ADODB_base { * @return 0 success */ function renameColumn($table, $column, $newName) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); $this->fieldClean($column); $this->fieldClean($newName); - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" RENAME COLUMN \"{$column}\" TO \"{$newName}\""; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" RENAME COLUMN \"{$column}\" TO \"{$newName}\""; return $this->execute($sql); } @@ -2227,10 +2269,12 @@ class Postgres extends ADODB_base { * @return 0 success */ function setColumnDefault($table, $column, $default) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); $this->fieldClean($column); - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" ALTER COLUMN \"{$column}\" SET DEFAULT {$default}"; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ALTER COLUMN \"{$column}\" SET DEFAULT {$default}"; return $this->execute($sql); } @@ -2243,10 +2287,12 @@ class Postgres extends ADODB_base { * @return 0 success */ function setColumnNull($table, $column, $state) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); $this->fieldClean($column); - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" ALTER COLUMN \"{$column}\" " . (($state) ? 'DROP' : 'SET') . " NOT NULL"; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ALTER COLUMN \"{$column}\" " . (($state) ? 'DROP' : 'SET') . " NOT NULL"; return $this->execute($sql); } @@ -2259,10 +2305,12 @@ class Postgres extends ADODB_base { * @return 0 success */ function dropColumn($table, $column, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); $this->fieldClean($column); - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" DROP COLUMN \"{$column}\""; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" DROP COLUMN \"{$column}\""; if ($cascade) $sql .= " CASCADE"; return $this->execute($sql); @@ -2275,10 +2323,12 @@ class Postgres extends ADODB_base { * @return 0 success */ function dropColumnDefault($table, $column) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); $this->fieldClean($column); - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" ALTER COLUMN \"{$column}\" DROP DEFAULT"; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ALTER COLUMN \"{$column}\" DROP DEFAULT"; return $this->execute($sql); } @@ -2336,6 +2386,8 @@ class Postgres extends ADODB_base { */ function getRowIdentifier($table) { $oldtable = $table; + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $status = $this->beginTransaction(); @@ -2350,7 +2402,7 @@ class Postgres extends ADODB_base { SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' AND relnamespace=( SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$this->_schema}' + WHERE nspname='{$c_schema}' ) ) AND indpred IS NULL AND indexprs IS NULL ORDER BY indisprimary DESC LIMIT 1"; @@ -2405,7 +2457,9 @@ class Postgres extends ADODB_base { if (count($values) > 0) { // Escape all field names $fields = array_map(array('Postgres','fieldClean'), $fields); + $f_schema = $this->_schema; $this->fieldClean($table); + $this->fieldClean($f_schema); $sql = ''; foreach($values as $i => $value) { @@ -2417,7 +2471,7 @@ class Postgres extends ADODB_base { $sql .= ',' . $this->formatValue($types[$i], $format[$i], $value); } - $sql = "INSERT INTO \"{$this->_schema}\".\"{$table}\" (\"". implode('","', $fields) ."\") + $sql = "INSERT INTO \"{$f_schema}\".\"{$table}\" (\"". implode('","', $fields) ."\") VALUES (". substr($sql, 1) .")"; return $this->execute($sql); @@ -2439,9 +2493,11 @@ class Postgres extends ADODB_base { * @return -1 invalid parameters */ function editRow($table, $vars, $nulls, $format, $types, $keyarr) { - if (!is_array($vars) || !is_array($nulls) || !is_array($format) - || !is_array($types)) return -1; + if (!is_array($vars) || !is_array($nulls) || !is_array($format) || !is_array($types)) + return -1; else { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); // Build clause @@ -2455,7 +2511,7 @@ class Postgres extends ADODB_base { else $tmp = $this->formatValue($types[$key], $format[$key], $value); if (isset($sql)) $sql .= ", \"{$key}\"={$tmp}"; - else $sql = "UPDATE \"{$this->_schema}\".\"{$table}\" SET \"{$key}\"={$tmp}"; + else $sql = "UPDATE \"{$f_schema}\".\"{$table}\" SET \"{$key}\"={$tmp}"; } $first = true; foreach ($keyarr as $k => $v) { @@ -2527,6 +2583,8 @@ class Postgres extends ADODB_base { * @return A recordset */ function getSequence($sequence) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->fieldClean($sequence); $sql = " @@ -2535,7 +2593,7 @@ class Postgres extends ADODB_base { u.usename AS seqowner, n.nspname FROM \"{$sequence}\" AS s, pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n WHERE c.relowner=u.usesysid AND c.relnamespace=n.oid - AND c.relname = '{$sequence}' AND c.relkind = 'S' AND n.nspname='{$this->_schema}' + AND c.relname = '{$sequence}' AND c.relkind = 'S' AND n.nspname='{$c_schema}' AND n.oid = c.relnamespace"; return $this->selectSet( $sql ); @@ -2555,11 +2613,13 @@ class Postgres extends ADODB_base { AND n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast') ORDER BY nspname, seqname"; } else { + $c_schema = $this->_schema; + $this->clean($c_schema); $sql = "SELECT c.relname AS seqname, u.usename AS seqowner, pg_catalog.obj_description(c.oid, 'pg_class') AS seqcomment, (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=c.reltablespace) AS tablespace FROM pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n WHERE c.relowner=u.usesysid AND c.relnamespace=n.oid - AND c.relkind = 'S' AND n.nspname='{$this->_schema}' ORDER BY seqname"; + AND c.relkind = 'S' AND n.nspname='{$c_schema}' ORDER BY seqname"; } return $this->selectSet( $sql ); @@ -2573,10 +2633,12 @@ class Postgres extends ADODB_base { */ function nextvalSequence($sequence) { /* This double-cleaning is deliberate */ + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($sequence); $this->clean($sequence); - $sql = "SELECT pg_catalog.NEXTVAL('\"{$this->_schema}\".\"{$sequence}\"')"; + $sql = "SELECT pg_catalog.NEXTVAL('\"{$f_schema}\".\"{$sequence}\"')"; return $this->execute($sql); } @@ -2589,12 +2651,14 @@ class Postgres extends ADODB_base { * @return -1 sequence not found */ function setvalSequence($sequence, $nextvalue) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); /* This double-cleaning is deliberate */ $this->fieldClean($sequence); $this->clean($sequence); $this->clean($nextvalue); - $sql = "SELECT pg_catalog.SETVAL('\"{$this->_schema}\".\"{$sequence}\"', '{$nextvalue}')"; + $sql = "SELECT pg_catalog.SETVAL('\"{$f_schema}\".\"{$sequence}\"', '{$nextvalue}')"; return $this->execute($sql); } @@ -2611,11 +2675,13 @@ class Postgres extends ADODB_base { if ($seq->recordCount() != 1) return -1; $minvalue = $seq->fields['min_value']; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); /* This double-cleaning is deliberate */ $this->fieldClean($sequence); $this->clean($sequence); - $sql = "SELECT pg_catalog.SETVAL('\"{$this->_schema}\".\"{$sequence}\"', {$minvalue})"; + $sql = "SELECT pg_catalog.SETVAL('\"{$f_schema}\".\"{$sequence}\"', {$minvalue})"; return $this->execute($sql); } @@ -2633,6 +2699,8 @@ class Postgres extends ADODB_base { */ function createSequence($sequence, $increment, $minvalue, $maxvalue, $startvalue, $cachevalue, $cycledvalue) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($sequence); $this->clean($increment); $this->clean($minvalue); @@ -2640,7 +2708,7 @@ class Postgres extends ADODB_base { $this->clean($startvalue); $this->clean($cachevalue); - $sql = "CREATE SEQUENCE \"{$this->_schema}\".\"{$sequence}\""; + $sql = "CREATE SEQUENCE \"{$f_schema}\".\"{$sequence}\""; if ($increment != '') $sql .= " INCREMENT {$increment}"; if ($minvalue != '') $sql .= " MINVALUE {$minvalue}"; if ($maxvalue != '') $sql .= " MAXVALUE {$maxvalue}"; @@ -2659,7 +2727,9 @@ class Postgres extends ADODB_base { */ function alterSequenceName($seqrs, $name) { if (!empty($name) && ($seqrs->fields['seqname'] != $name)) { - $sql = "ALTER SEQUENCE \"{$this->_schema}\".\"{$seqrs->fields['seqname']}\" RENAME TO \"{$name}\""; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" RENAME TO \"{$name}\""; $status = $this->execute($sql); if ($status == 0) $seqrs->fields['seqname'] = $name; @@ -2694,9 +2764,11 @@ class Postgres extends ADODB_base { */ function alterSequenceSchema($seqrs, $schema) { if (!empty($schema) && ($seqrs->fields['nspname'] != $schema)) { - $sql = "ALTER SEQUENCE \"{$this->_schema}\".\"{$seqrs->fields['seqname']}\" SET SCHEMA {$schema}"; - return $this->execute($sql); - } + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" SET SCHEMA {$schema}"; + return $this->execute($sql); + } return 0; } @@ -2712,7 +2784,7 @@ class Postgres extends ADODB_base { * @return 0 success */ function alterSequenceProps($seqrs, $increment, $minvalue, $maxvalue, - $startvalue, $cachevalue, $cycledvalue) { + $startvalue, $cachevalue, $cycledvalue) { $sql = ''; if (!empty($increment) && ($increment != $seqrs->fields['increment_by'])) $sql .= " INCREMENT {$increment}"; @@ -2723,7 +2795,9 @@ class Postgres extends ADODB_base { // toggle cycle yes/no if (!is_null($cycledvalue)) $sql .= (!$cycledvalue ? ' NO ' : '') . " CYCLE"; if ($sql != '') { - $sql = "ALTER SEQUENCE \"{$this->_schema}\".\"{$seqrs->fields['seqname']}\" {$sql}"; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" {$sql}"; return $this->execute($sql); } return 0; @@ -2847,9 +2921,11 @@ class Postgres extends ADODB_base { * @return 0 success */ function dropSequence($sequence, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($sequence); - $sql = "DROP SEQUENCE \"{$this->_schema}\".\"{$sequence}\""; + $sql = "DROP SEQUENCE \"{$f_schema}\".\"{$sequence}\""; if ($cascade) $sql .= " CASCADE"; return $this->execute($sql); @@ -2863,6 +2939,8 @@ class Postgres extends ADODB_base { * @return View info */ function getView($view) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($view); $sql = " @@ -2871,7 +2949,7 @@ class Postgres extends ADODB_base { pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) - WHERE (c.relname = '$view') AND n.nspname='{$this->_schema}'"; + WHERE (c.relname = '$view') AND n.nspname='{$c_schema}'"; return $this->selectSet($sql); } @@ -2881,12 +2959,14 @@ class Postgres extends ADODB_base { * @return All views */ function getViews() { + $c_schema = $this->_schema; + $this->clean($c_schema); $sql = " SELECT c.relname, pg_catalog.pg_get_userbyid(c.relowner) AS relowner, pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) - WHERE (n.nspname='{$this->_schema}') AND (c.relkind = 'v'::\"char\") + WHERE (n.nspname='{$c_schema}') AND (c.relkind = 'v'::\"char\") ORDER BY relname"; return $this->selectSet($sql); @@ -2916,6 +2996,8 @@ class Postgres extends ADODB_base { $status = $this->beginTransaction(); if ($status != 0) return -1; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($viewname); $this->clean($comment); @@ -2923,7 +3005,7 @@ class Postgres extends ADODB_base { $sql = "CREATE "; if ($replace) $sql .= "OR REPLACE "; - $sql .= "VIEW \"{$this->_schema}\".\"{$viewname}\" AS {$definition}"; + $sql .= "VIEW \"{$f_schema}\".\"{$viewname}\" AS {$definition}"; $status = $this->execute($sql); if ($status) { @@ -2951,7 +3033,9 @@ class Postgres extends ADODB_base { function alterViewName($vwrs, $name) { // Rename (only if name has changed) if (!empty($name) && ($name != $vwrs->fields['relname'])) { - $sql = "ALTER VIEW \"{$this->_schema}\".\"{$vwrs->fields['relname']}\" RENAME TO \"{$name}\""; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER VIEW \"{$f_schema}\".\"{$vwrs->fields['relname']}\" RENAME TO \"{$name}\""; $status = $this->execute($sql); if ($status == 0) $vwrs->fields['relname'] = $name; @@ -2969,10 +3053,12 @@ class Postgres extends ADODB_base { */ function alterViewOwner($vwrs, $owner = null) { if ((!empty($owner)) && ($vwrs->fields['relowner'] != $owner)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); // If owner has been changed, then do the alteration. We are // careful to avoid this generally as changing owner is a // superuser only function. - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$vwrs->fields['relname']}\" OWNER TO \"{$owner}\""; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$vwrs->fields['relname']}\" OWNER TO \"{$owner}\""; return $this->execute($sql); } return 0; @@ -2986,9 +3072,11 @@ class Postgres extends ADODB_base { */ function alterViewSchema($vwrs, $schema) { if (!empty($schema) && ($vwrs->fields['nspname'] != $schema)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); // If tablespace has been changed, then do the alteration. We // don't want to do this unnecessarily. - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$vwrs->fields['relname']}\" SET SCHEMA \"{$schema}\""; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$vwrs->fields['relname']}\" SET SCHEMA \"{$schema}\""; return $this->execute($sql); } return 0; @@ -3077,9 +3165,11 @@ class Postgres extends ADODB_base { * @return 0 success */ function dropView($viewname, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($viewname); - $sql = "DROP VIEW \"{$this->_schema}\".\"{$viewname}\""; + $sql = "DROP VIEW \"{$f_schema}\".\"{$viewname}\""; if ($cascade) $sql .= " CASCADE"; return $this->execute($sql); @@ -3122,6 +3212,8 @@ class Postgres extends ADODB_base { * @return 0 success */ function createIndex($name, $table, $columns, $type, $unique, $where, $tablespace, $concurrently) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($name); $this->fieldClean($table); @@ -3129,7 +3221,7 @@ class Postgres extends ADODB_base { if ($unique) $sql .= " UNIQUE"; $sql .= " INDEX"; if ($concurrently) $sql .= " CONCURRENTLY"; - $sql .= " \"{$name}\" ON \"{$this->_schema}\".\"{$table}\" USING {$type} "; + $sql .= " \"{$name}\" ON \"{$f_schema}\".\"{$table}\" USING {$type} "; if (is_array($columns)) { $this->arrayClean($columns); @@ -3159,9 +3251,11 @@ class Postgres extends ADODB_base { * @return 0 success */ function dropIndex($index, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($index); - $sql = "DROP INDEX \"{$this->_schema}\".\"{$index}\""; + $sql = "DROP INDEX \"{$f_schema}\".\"{$index}\""; if ($cascade) $sql .= " CASCADE"; return $this->execute($sql); @@ -3174,6 +3268,8 @@ class Postgres extends ADODB_base { * @param $force If true, recreates indexes forcedly in PostgreSQL 7.0-7.1, forces rebuild of system indexes in 7.2-7.3, ignored in >=7.4 */ function reindex($type, $name, $force = false) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($name); switch($type) { case 'DATABASE': @@ -3182,7 +3278,7 @@ class Postgres extends ADODB_base { break; case 'TABLE': case 'INDEX': - $sql = "REINDEX {$type} \"{$this->_schema}\".\"{$name}\""; + $sql = "REINDEX {$type} \"{$f_schema}\".\"{$name}\""; if ($force) $sql .= ' FORCE'; break; default: @@ -3200,12 +3296,14 @@ class Postgres extends ADODB_base { */ function clusterIndex($index, $table) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($index); $this->fieldClean($table); // We don't bother with a transaction here, as there's no point rolling // back an expensive cluster if a cheap analyze fails for whatever reason - $sql = "CLUSTER \"{$this->_schema}\".\"{$table}\" USING \"{$index}\""; + $sql = "CLUSTER \"{$f_schema}\".\"{$table}\" USING \"{$index}\""; return $this->execute($sql); } @@ -3218,6 +3316,8 @@ class Postgres extends ADODB_base { * @return A recordset */ function getConstraints($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); // This SQL is greatly complicated by the need to retrieve @@ -3246,7 +3346,7 @@ class Postgres extends ADODB_base { WHERE pc.conrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$this->_schema}')) + WHERE nspname='{$c_schema}')) ORDER BY 1 "; @@ -3264,6 +3364,8 @@ class Postgres extends ADODB_base { function getConstraintsWithFields($table) { global $data; + $c_schema = $this->_schema; + $this->clean($c_schema); $data->clean($table); // get the max number of col used in a constraint for the table @@ -3273,7 +3375,7 @@ class Postgres extends ADODB_base { JOIN pg_catalog.pg_class AS r ON (c.conrelid=r.oid) JOIN pg_catalog.pg_namespace AS ns ON (r.relnamespace=ns.oid) WHERE - r.relname = '$table' AND ns.nspname='". $this->_schema ."'"; + r.relname = '{$table}' AND ns.nspname='{$c_schema}'"; $rs = $this->selectSet($sql); @@ -3307,7 +3409,7 @@ class Postgres extends ADODB_base { $sql .= sprintf(")) WHERE r1.relname = '%s' AND ns1.nspname='%s' - ORDER BY 1", $table, $this->_schema); + ORDER BY 1", $table, $c_schema); return $this->selectSet($sql); } @@ -3323,12 +3425,14 @@ class Postgres extends ADODB_base { */ function addPrimaryKey($table, $fields, $name = '', $tablespace = '') { if (!is_array($fields) || sizeof($fields) == 0) return -1; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); $this->fieldArrayClean($fields); $this->fieldClean($name); $this->fieldClean($tablespace); - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" ADD "; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD "; if ($name != '') $sql .= "CONSTRAINT \"{$name}\" "; $sql .= "PRIMARY KEY (\"" . join('","', $fields) . "\")"; @@ -3349,12 +3453,14 @@ class Postgres extends ADODB_base { */ function addUniqueKey($table, $fields, $name = '', $tablespace = '') { if (!is_array($fields) || sizeof($fields) == 0) return -1; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); $this->fieldArrayClean($fields); $this->fieldClean($name); $this->fieldClean($tablespace); - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" ADD "; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD "; if ($name != '') $sql .= "CONSTRAINT \"{$name}\" "; $sql .= "UNIQUE (\"" . join('","', $fields) . "\")"; @@ -3372,11 +3478,13 @@ class Postgres extends ADODB_base { * @return 0 success */ function addCheckConstraint($table, $definition, $name = '') { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); $this->fieldClean($name); // @@ How the heck do you clean a definition??? - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" ADD "; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD "; if ($name != '') $sql .= "CONSTRAINT \"{$name}\" "; $sql .= "CHECK ({$definition})"; @@ -3393,6 +3501,10 @@ class Postgres extends ADODB_base { * @return -4 check drop error */ function dropCheckConstraint($table, $name) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $this->clean($name); @@ -3401,17 +3513,17 @@ class Postgres extends ADODB_base { if ($status != 0) return -2; // Properly lock the table - $sql = "LOCK TABLE \"{$this->_schema}\".\"{$table}\" IN ACCESS EXCLUSIVE MODE"; + $sql = "LOCK TABLE \"{$f_schema}\".\"{$table}\" IN ACCESS EXCLUSIVE MODE"; $status = $this->execute($sql); if ($status != 0) { $this->rollbackTransaction(); return -3; - } + } // Delete the check constraint $sql = "DELETE FROM pg_relcheck WHERE rcrelid=(SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' - AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE - nspname = '{$this->_schema}')) AND rcname='{$name}'"; + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE + nspname = '{$c_schema}')) AND rcname='{$name}'"; $status = $this->execute($sql); if ($status != 0) { $this->rollbackTransaction(); @@ -3422,7 +3534,7 @@ class Postgres extends ADODB_base { $sql = "UPDATE pg_class SET relchecks=(SELECT COUNT(*) FROM pg_relcheck WHERE rcrelid=(SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE - nspname = '{$this->_schema}'))) + nspname = '{$c_schema}'))) WHERE relname='{$table}'"; $status = $this->execute($sql); if ($status != 0) { @@ -3454,6 +3566,8 @@ class Postgres extends ADODB_base { $match, $deferrable, $initially, $name = '') { if (!is_array($sfields) || sizeof($sfields) == 0 || !is_array($tfields) || sizeof($tfields) == 0) return -1; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); $this->fieldClean($targschema); $this->fieldClean($targtable); @@ -3461,7 +3575,7 @@ class Postgres extends ADODB_base { $this->fieldArrayClean($tfields); $this->fieldClean($name); - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" ADD "; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD "; if ($name != '') $sql .= "CONSTRAINT \"{$name}\" "; $sql .= "FOREIGN KEY (\"" . join('","', $sfields) . "\") "; // Target table needs to be fully qualified @@ -3484,10 +3598,12 @@ class Postgres extends ADODB_base { * @return 0 success */ function dropConstraint($constraint, $relation, $type, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($constraint); $this->fieldClean($relation); - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$relation}\" DROP CONSTRAINT \"{$constraint}\""; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$relation}\" DROP CONSTRAINT \"{$constraint}\""; if ($cascade) $sql .= " CASCADE"; return $this->execute($sql); @@ -3583,6 +3699,9 @@ class Postgres extends ADODB_base { $status = $this->beginTransaction(); if ($status != 0) return -1; + $c_schema = $this->_schema; + $this->clean($c_schema); + $sql = " SELECT pn.nspname, @@ -3599,7 +3718,7 @@ class Postgres extends ADODB_base { AND pc.contype = 'f' AND confrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$this->_schema}')) + WHERE nspname='{$c_schema}')) ORDER BY 1,2,3 "; @@ -3614,6 +3733,8 @@ class Postgres extends ADODB_base { * @return A recordset */ function getDomain($domain) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($domain); $sql = " @@ -3630,7 +3751,7 @@ class Postgres extends ADODB_base { t.typtype = 'd' AND t.typname = '{$domain}' AND t.typnamespace = (SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname = '{$this->_schema}')"; + WHERE nspname = '{$c_schema}')"; return $this->selectSet($sql); } @@ -3640,6 +3761,9 @@ class Postgres extends ADODB_base { * @return All tables, sorted alphabetically */ function getDomains() { + $c_schema = $this->_schema; + $this->clean($c_schema); + $sql = " SELECT t.typname AS domname, @@ -3653,7 +3777,7 @@ class Postgres extends ADODB_base { WHERE t.typtype = 'd' AND t.typnamespace = (SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$this->_schema}') + WHERE nspname='{$c_schema}') ORDER BY t.typname"; return $this->selectSet($sql); @@ -3665,6 +3789,8 @@ class Postgres extends ADODB_base { * @return A recordset */ function getDomainConstraints($domain) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($domain); $sql = " @@ -3680,7 +3806,7 @@ class Postgres extends ADODB_base { WHERE typname='{$domain}' AND typnamespace = ( SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname = '{$this->_schema}') + WHERE nspname = '{$c_schema}') ) ORDER BY conname"; @@ -3699,9 +3825,11 @@ class Postgres extends ADODB_base { * @return 0 success */ function createDomain($domain, $type, $length, $array, $notnull, $default, $check) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($domain); - $sql = "CREATE DOMAIN \"{$this->_schema}\".\"{$domain}\" AS "; + $sql = "CREATE DOMAIN \"{$f_schema}\".\"{$domain}\" AS "; if ($length == '') $sql .= $type; @@ -3747,6 +3875,8 @@ class Postgres extends ADODB_base { * @return -4 owner error */ function alterDomain($domain, $domdefault, $domnotnull, $domowner) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($domain); $this->fieldClean($domowner); @@ -3758,9 +3888,9 @@ class Postgres extends ADODB_base { // Default if ($domdefault == '') - $sql = "ALTER DOMAIN \"{$this->_schema}\".\"{$domain}\" DROP DEFAULT"; + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" DROP DEFAULT"; else - $sql = "ALTER DOMAIN \"{$this->_schema}\".\"{$domain}\" SET DEFAULT {$domdefault}"; + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" SET DEFAULT {$domdefault}"; $status = $this->execute($sql); if ($status != 0) { @@ -3770,9 +3900,9 @@ class Postgres extends ADODB_base { // NOT NULL if ($domnotnull) - $sql = "ALTER DOMAIN \"{$this->_schema}\".\"{$domain}\" SET NOT NULL"; + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" SET NOT NULL"; else - $sql = "ALTER DOMAIN \"{$this->_schema}\".\"{$domain}\" DROP NOT NULL"; + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" DROP NOT NULL"; $status = $this->execute($sql); if ($status != 0) { @@ -3781,7 +3911,7 @@ class Postgres extends ADODB_base { } // Owner - $sql = "ALTER DOMAIN \"{$this->_schema}\".\"{$domain}\" OWNER TO \"{$domowner}\""; + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" OWNER TO \"{$domowner}\""; $status = $this->execute($sql); if ($status != 0) { @@ -3799,9 +3929,11 @@ class Postgres extends ADODB_base { * @return 0 success */ function dropDomain($domain, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($domain); - $sql = "DROP DOMAIN \"{$this->_schema}\".\"{$domain}\""; + $sql = "DROP DOMAIN \"{$f_schema}\".\"{$domain}\""; if ($cascade) $sql .= " CASCADE"; return $this->execute($sql); @@ -3815,10 +3947,12 @@ class Postgres extends ADODB_base { * @return 0 success */ function addDomainCheckConstraint($domain, $definition, $name = '') { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($domain); $this->fieldClean($name); - $sql = "ALTER DOMAIN \"{$this->_schema}\".\"{$domain}\" ADD "; + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" ADD "; if ($name != '') $sql .= "CONSTRAINT \"{$name}\" "; $sql .= "CHECK ({$definition})"; @@ -3833,10 +3967,12 @@ class Postgres extends ADODB_base { * @return 0 success */ function dropDomainConstraint($domain, $constraint, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($domain); $this->fieldClean($constraint); - $sql = "ALTER DOMAIN \"{$this->_schema}\".\"{$domain}\" DROP CONSTRAINT \"{$constraint}\""; + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" DROP CONSTRAINT \"{$constraint}\""; if ($cascade) $sql .= " CASCADE"; return $this->execute($sql); @@ -3890,7 +4026,9 @@ class Postgres extends ADODB_base { } } else { - $where = "n.nspname = '{$this->_schema}'"; + $c_schema = $this->_schema; + $this->clean($c_schema); + $where = "n.nspname = '{$c_schema}'"; $distinct = ''; } @@ -3989,10 +4127,13 @@ class Postgres extends ADODB_base { return $status; } + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + // Rename the function, if necessary $this->fieldClean($newname); if ($funcname != $newname) { - $sql = "ALTER FUNCTION \"{$this->_schema}\".\"{$funcname}\"({$args}) RENAME TO \"{$newname}\""; + $sql = "ALTER FUNCTION \"{$f_schema}\".\"{$funcname}\"({$args}) RENAME TO \"{$newname}\""; $status = $this->execute($sql); if ($status != 0) { $this->rollbackTransaction(); @@ -4006,7 +4147,7 @@ class Postgres extends ADODB_base { if ($this->hasFunctionAlterOwner()) { $this->fieldClean($newown); if ($funcown != $newown) { - $sql = "ALTER FUNCTION \"{$this->_schema}\".\"{$funcname}\"({$args}) OWNER TO \"{$newown}\""; + $sql = "ALTER FUNCTION \"{$f_schema}\".\"{$funcname}\"({$args}) OWNER TO \"{$newown}\""; $status = $this->execute($sql); if ($status != 0) { $this->rollbackTransaction(); @@ -4020,7 +4161,7 @@ class Postgres extends ADODB_base { if ($this->hasFunctionAlterSchema()) { $this->fieldClean($newschema); if ($funcschema != $newschema) { - $sql = "ALTER FUNCTION \"{$this->_schema}\".\"{$funcname}\"({$args}) SET SCHEMA \"{$newschema}\""; + $sql = "ALTER FUNCTION \"{$f_schema}\".\"{$funcname}\"({$args}) SET SCHEMA \"{$newschema}\""; $status = $this->execute($sql); if ($status != 0) { $this->rollbackTransaction(); @@ -4064,10 +4205,12 @@ class Postgres extends ADODB_base { $this->arrayClean($flags); $this->clean($cost); $this->clean($rows); + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $sql = "CREATE"; if ($replace) $sql .= " OR REPLACE"; - $sql .= " FUNCTION \"{$this->_schema}\".\"{$funcname}\" ("; + $sql .= " FUNCTION \"{$f_schema}\".\"{$funcname}\" ("; if ($args != '') $sql .= $args; @@ -4131,9 +4274,11 @@ class Postgres extends ADODB_base { function dropFunction($function_oid, $cascade) { // Function comes in with $object as function OID $fn = $this->getFunction($function_oid); + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($fn->fields['proname']); - $sql = "DROP FUNCTION \"{$this->_schema}\".\"{$fn->fields['proname']}\"({$fn->fields['proarguments']})"; + $sql = "DROP FUNCTION \"{$f_schema}\".\"{$fn->fields['proname']}\"({$fn->fields['proarguments']})"; if ($cascade) $sql .= " CASCADE"; return $this->execute($sql); @@ -4165,8 +4310,11 @@ class Postgres extends ADODB_base { function getTypes($all = false, $tabletypes = false, $domains = false) { if ($all) $where = '1 = 1'; - else - $where = "n.nspname = '{$this->_schema}'"; + else { + $c_schema = $this->_schema; + $this->clean($c_schema); + $where = "n.nspname = '{$c_schema}'"; + } // Never show system table types $where2 = "AND c.relnamespace NOT IN (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname LIKE 'pg@_%' ESCAPE '@')"; @@ -4203,13 +4351,15 @@ class Postgres extends ADODB_base { * @return 0 success */ function createType($typname, $typin, $typout, $typlen, $typdef, - $typelem, $typdelim, $typbyval, $typalign, $typstorage) { + $typelem, $typdelim, $typbyval, $typalign, $typstorage) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($typname); $this->fieldClean($typin); $this->fieldClean($typout); $sql = " - CREATE TYPE \"{$this->_schema}\".\"{$typname}\" ( + CREATE TYPE \"{$f_schema}\".\"{$typname}\" ( INPUT = \"{$typin}\", OUTPUT = \"{$typout}\", INTERNALLENGTH = {$typlen}"; @@ -4232,9 +4382,11 @@ class Postgres extends ADODB_base { * @return 0 success */ function dropType($typname, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($typname); - $sql = "DROP TYPE \"{$this->_schema}\".\"{$typname}\""; + $sql = "DROP TYPE \"{$f_schema}\".\"{$typname}\""; if ($cascade) $sql .= " CASCADE"; return $this->execute($sql); @@ -4250,6 +4402,8 @@ class Postgres extends ADODB_base { * @return -2 no values supplied */ function createEnumType($name, $values, $typcomment) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($name); $this->clean($typcomment); @@ -4265,7 +4419,7 @@ class Postgres extends ADODB_base { for ($i = 0; $i < $nbval; $i++) $this->clean($values[$i]); - $sql = "CREATE TYPE \"{$this->_schema}\".\"{$name}\" AS ENUM ('"; + $sql = "CREATE TYPE \"{$f_schema}\".\"{$name}\" AS ENUM ('"; $sql.= implode("','", $values); $sql .= "')"; @@ -4314,6 +4468,8 @@ class Postgres extends ADODB_base { * @return -1 no fields supplied */ function createCompositeType($name, $fields, $field, $type, $array, $length, $colcomment, $typcomment) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($name); $this->clean($typcomment); @@ -4323,7 +4479,7 @@ class Postgres extends ADODB_base { $found = false; $first = true; $comment_sql = ''; // Accumulate comments for the columns - $sql = "CREATE TYPE \"{$this->_schema}\".\"{$name}\" AS ("; + $sql = "CREATE TYPE \"{$f_schema}\".\"{$name}\" AS ("; for ($i = 0; $i < $fields; $i++) { $this->fieldClean($field[$i]); $this->clean($type[$i]); @@ -4360,7 +4516,7 @@ class Postgres extends ADODB_base { // Add array qualifier if necessary if ($array[$i] == '[]') $sql .= '[]'; - if ($colcomment[$i] != '') $comment_sql .= "COMMENT ON COLUMN \"{$this->_schema}\".\"{$name}\".\"{$field[$i]}\" IS '{$colcomment[$i]}';\n"; + if ($colcomment[$i] != '') $comment_sql .= "COMMENT ON COLUMN \"{$f_schema}\".\"{$name}\".\"{$field[$i]}\" IS '{$colcomment[$i]}';\n"; $found = true; } @@ -4440,6 +4596,8 @@ class Postgres extends ADODB_base { * @return All conversions */ function getConversions() { + $c_schema = $this->_schema; + $this->clean($c_schema); $sql = " SELECT c.conname, @@ -4449,7 +4607,7 @@ class Postgres extends ADODB_base { pg_catalog.obj_description(c.oid, 'pg_conversion') AS concomment FROM pg_catalog.pg_conversion c, pg_catalog.pg_namespace n WHERE n.oid = c.connamespace - AND n.nspname='{$this->_schema}' + AND n.nspname='{$c_schema}' ORDER BY 1; "; @@ -4464,13 +4622,15 @@ class Postgres extends ADODB_base { * @return A recordset */ function getRules($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $sql = " SELECT * FROM pg_catalog.pg_rules WHERE - schemaname='{$this->_schema}' AND tablename='{$table}' + schemaname='{$c_schema}' AND tablename='{$table}' ORDER BY rulename "; @@ -4507,13 +4667,15 @@ class Postgres extends ADODB_base { * @return -1 invalid event */ function createRule($name, $event, $table, $where, $instead, $type, $action, $replace = false) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($name); $this->fieldClean($table); if (!in_array($event, $this->rule_events)) return -1; $sql = "CREATE"; if ($replace) $sql .= " OR REPLACE"; - $sql .= " RULE \"{$name}\" AS ON {$event} TO \"{$this->_schema}\".\"{$table}\""; + $sql .= " RULE \"{$name}\" AS ON {$event} TO \"{$f_schema}\".\"{$table}\""; // Can't escape WHERE clause if ($where != '') $sql .= " WHERE {$where}"; $sql .= " DO"; @@ -4533,10 +4695,12 @@ class Postgres extends ADODB_base { * @return 0 success */ function dropRule($rule, $relation, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($rule); $this->fieldClean($relation); - $sql = "DROP RULE \"{$rule}\" ON \"{$this->_schema}\".\"{$relation}\""; + $sql = "DROP RULE \"{$rule}\" ON \"{$f_schema}\".\"{$relation}\""; if ($cascade) $sql .= " CASCADE"; return $this->execute($sql); @@ -4551,6 +4715,8 @@ class Postgres extends ADODB_base { * @return A recordset */ function getTrigger($table, $trigger) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $this->clean($trigger); @@ -4559,7 +4725,7 @@ class Postgres extends ADODB_base { WHERE t.tgrelid=c.oid AND c.relname='{$table}' AND t.tgname='{$trigger}' AND c.relnamespace=( SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$this->_schema}')"; + WHERE nspname='{$c_schema}')"; return $this->selectSet($sql); } @@ -4570,6 +4736,8 @@ class Postgres extends ADODB_base { * @return A recordset */ function getTriggers($table = '') { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $sql = "SELECT @@ -4579,7 +4747,7 @@ class Postgres extends ADODB_base { ns.nspname AS pronamespace FROM pg_catalog.pg_trigger t, pg_catalog.pg_proc p, pg_catalog.pg_namespace ns WHERE t.tgrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' - AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$this->_schema}')) + AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')) AND (NOT tgisconstraint OR NOT EXISTS (SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) @@ -4597,8 +4765,9 @@ class Postgres extends ADODB_base { * @return The trigger definition string */ function getTriggerDef($trigger) { - // Constants to figure out tgtype + $this->fieldArrayClean($trigger); + // Constants to figure out tgtype if (!defined('TRIGGER_TYPE_ROW')) define ('TRIGGER_TYPE_ROW', (1 << 0)); if (!defined('TRIGGER_TYPE_BEFORE')) define ('TRIGGER_TYPE_BEFORE', (1 << 1)); if (!defined('TRIGGER_TYPE_INSERT')) define ('TRIGGER_TYPE_INSERT', (1 << 2)); @@ -4643,8 +4812,10 @@ class Postgres extends ADODB_base { $tgdef .= ' UPDATE'; } + $f_schema = $this->_schema; + $this->fieldClean($f_schema); // Table name - $tgdef .= " ON \"{$this->_schema}\".\"{$trigger['relname']}\" "; + $tgdef .= " ON \"{$f_schema}\".\"{$trigger['relname']}\" "; // Deferrability if ($trigger['tgisconstraint']) { @@ -4706,13 +4877,15 @@ class Postgres extends ADODB_base { * @return 0 success */ function createTrigger($tgname, $table, $tgproc, $tgtime, $tgevent, $tgfrequency, $tgargs) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($tgname); $this->fieldClean($table); $this->fieldClean($tgproc); /* No Statement Level Triggers in PostgreSQL (by now) */ $sql = "CREATE TRIGGER \"{$tgname}\" {$tgtime} - {$tgevent} ON \"{$this->_schema}\".\"{$table}\" + {$tgevent} ON \"{$f_schema}\".\"{$table}\" FOR EACH {$tgfrequency} EXECUTE PROCEDURE \"{$tgproc}\"({$tgargs})"; return $this->execute($sql); @@ -4726,11 +4899,13 @@ class Postgres extends ADODB_base { * @return 0 success */ function alterTrigger($table, $trigger, $name) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); $this->fieldClean($trigger); $this->fieldClean($name); - $sql = "ALTER TRIGGER \"{$trigger}\" ON \"{$this->_schema}\".\"{$table}\" RENAME TO \"{$name}\""; + $sql = "ALTER TRIGGER \"{$trigger}\" ON \"{$f_schema}\".\"{$table}\" RENAME TO \"{$name}\""; return $this->execute($sql); } @@ -4743,10 +4918,12 @@ class Postgres extends ADODB_base { * @return 0 success */ function dropTrigger($tgname, $table, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($tgname); $this->fieldClean($table); - $sql = "DROP TRIGGER \"{$tgname}\" ON \"{$this->_schema}\".\"{$table}\""; + $sql = "DROP TRIGGER \"{$tgname}\" ON \"{$f_schema}\".\"{$table}\""; if ($cascade) $sql .= " CASCADE"; return $this->execute($sql); @@ -4759,10 +4936,12 @@ class Postgres extends ADODB_base { * @return 0 success */ function enableTrigger($tgname, $table) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($tgname); $this->fieldClean($table); - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" ENABLE TRIGGER \"{$tgname}\""; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ENABLE TRIGGER \"{$tgname}\""; return $this->execute($sql); } @@ -4774,10 +4953,12 @@ class Postgres extends ADODB_base { * @return 0 success */ function disableTrigger($tgname, $table) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($tgname); $this->fieldClean($table); - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$table}\" DISABLE TRIGGER \"{$tgname}\""; + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" DISABLE TRIGGER \"{$tgname}\""; return $this->execute($sql); } @@ -4789,6 +4970,8 @@ class Postgres extends ADODB_base { * @return All operators */ function getOperators() { + $c_schema = $this->_schema; + $this->clean($c_schema); // We stick with the subselects here, as you cannot ORDER BY a regtype $sql = " SELECT @@ -4800,7 +4983,7 @@ class Postgres extends ADODB_base { FROM pg_catalog.pg_operator po WHERE - po.oprnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$this->_schema}') + po.oprnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}') ORDER BY po.oprname, oprleftname, oprrightname "; @@ -4850,9 +5033,11 @@ class Postgres extends ADODB_base { function dropOperator($operator_oid, $cascade) { // Function comes in with $object as operator OID $opr = $this->getOperator($operator_oid); + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($opr->fields['oprname']); - $sql = "DROP OPERATOR \"{$this->_schema}\".{$opr->fields['oprname']} ("; + $sql = "DROP OPERATOR \"{$f_schema}\".{$opr->fields['oprname']} ("; // Quoting or formatting here??? if ($opr->fields['oprleftname'] !== null) $sql .= $opr->fields['oprleftname'] . ', '; else $sql .= "NONE, "; @@ -4873,7 +5058,8 @@ class Postgres extends ADODB_base { */ function getOpClasses() { - + $c_schema = $this->_schema; + $this->clean($c_schema); $sql = " SELECT pa.amname, po.opcname, @@ -4885,7 +5071,7 @@ class Postgres extends ADODB_base { WHERE po.opcmethod=pa.oid AND po.opcnamespace=pn.oid - AND pn.nspname='{$this->_schema}' + AND pn.nspname='{$c_schema}' ORDER BY 1,2 "; @@ -4907,9 +5093,11 @@ class Postgres extends ADODB_base { * @return 0 success */ function createFtsConfiguration($cfgname, $parser = '', $template = '', $comment = '') { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($cfgname); - $sql = "CREATE TEXT SEARCH CONFIGURATION \"{$this->_schema}\".\"{$cfgname}\" ("; + $sql = "CREATE TEXT SEARCH CONFIGURATION \"{$f_schema}\".\"{$cfgname}\" ("; if ($parser != '') { $this->fieldClean($parser['schema']); $this->fieldClean($parser['parser']); @@ -4957,7 +5145,8 @@ class Postgres extends ADODB_base { * @return A recordset */ function getFtsConfigurations($all = true) { - + $c_schema = $this->_schema; + $this->clean($c_schema); $sql = " SELECT n.nspname as schema, @@ -4970,7 +5159,7 @@ class Postgres extends ADODB_base { pg_catalog.pg_ts_config_is_visible(c.oid)"; if (!$all) - $sql.= " AND n.nspname='{$this->_schema}'\n"; + $sql.= " AND n.nspname='{$c_schema}'\n"; $sql.= "ORDER BY name"; @@ -4984,7 +5173,9 @@ class Postgres extends ADODB_base { * @return FTS configuration information */ function getFtsConfigurationByName($ftscfg) { - $this->clean($ftscfg); + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($ftscfg); $sql = " SELECT n.nspname as schema, @@ -4997,7 +5188,7 @@ class Postgres extends ADODB_base { LEFT JOIN pg_catalog.pg_ts_parser p ON p.oid = c.cfgparser WHERE pg_catalog.pg_ts_config_is_visible(c.oid) AND c.cfgname = '{$ftscfg}' - AND n.nspname='{$this->_schema}'"; + AND n.nspname='{$c_schema}'"; return $this->selectSet($sql); } @@ -5011,13 +5202,15 @@ class Postgres extends ADODB_base { */ function getFtsConfigurationMap($ftscfg) { - $this->fieldClean($ftscfg); + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->fieldClean($ftscfg); $oidSet = $this->selectSet("SELECT c.oid FROM pg_catalog.pg_ts_config AS c LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.cfgnamespace) WHERE c.cfgname = '{$ftscfg}' - AND n.nspname='{$this->_schema}'"); + AND n.nspname='{$c_schema}'"); $oid = $oidSet->fields['oid']; @@ -5046,7 +5239,8 @@ class Postgres extends ADODB_base { * @return RecordSet */ function getFtsParsers($all = true) { - + $c_schema = $this->_schema; + $this->clean($c_schema); $sql = " SELECT n.nspname as schema, @@ -5057,7 +5251,7 @@ class Postgres extends ADODB_base { WHERE pg_catalog.pg_ts_parser_is_visible(p.oid)"; if (!$all) - $sql.= " AND n.nspname='{$this->_schema}'\n"; + $sql.= " AND n.nspname='{$c_schema}'\n"; $sql.= "ORDER BY name"; @@ -5071,7 +5265,8 @@ class Postgres extends ADODB_base { * @returns RecordSet */ function getFtsDictionaries($all = true) { - + $c_schema = $this->_schema; + $this->clean($c_schema); $sql = " SELECT n.nspname as schema, d.dictname as name, @@ -5081,7 +5276,7 @@ class Postgres extends ADODB_base { WHERE pg_catalog.pg_ts_dict_is_visible(d.oid)"; if (!$all) - $sql.= " AND n.nspname='{$this->_schema}'\n"; + $sql.= " AND n.nspname='{$c_schema}'\n"; $sql.= "ORDER BY name;"; @@ -5122,9 +5317,11 @@ class Postgres extends ADODB_base { * @return 0 on success */ function dropFtsConfiguration($ftscfg, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($ftscfg); - $sql = "DROP TEXT SEARCH CONFIGURATION \"{$this->_schema}\".\"{$ftscfg}\""; + $sql = "DROP TEXT SEARCH CONFIGURATION \"{$f_schema}\".\"{$ftscfg}\""; if ($cascade) $sql .= ' CASCADE'; return $this->execute($sql); @@ -5139,10 +5336,12 @@ class Postgres extends ADODB_base { * @return 0 on success */ function dropFtsDictionary($ftsdict, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($ftsdict); $sql = "DROP TEXT SEARCH DICTIONARY"; - $sql .= " \"{$this->_schema}\".\"{$ftsdict}\""; + $sql .= " \"{$f_schema}\".\"{$ftsdict}\""; if ($cascade) $sql .= ' CASCADE'; return $this->execute($sql); @@ -5175,9 +5374,11 @@ class Postgres extends ADODB_base { // Only if the name has changed if ($name != $cfgname) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($name); - $sql = "ALTER TEXT SEARCH CONFIGURATION \"{$this->_schema}\".\"{$cfgname}\" RENAME TO \"{$name}\""; + $sql = "ALTER TEXT SEARCH CONFIGURATION \"{$f_schema}\".\"{$cfgname}\" RENAME TO \"{$name}\""; $status = $this->execute($sql); if ($status != 0) { $this->rollbackTransaction(); @@ -5202,7 +5403,9 @@ class Postgres extends ADODB_base { */ function createFtsDictionary($dictname, $isTemplate = false, $template = '', $lexize = '', $init = '', $option = '', $comment = '') { - + + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($dictname); $this->fieldClean($template); $this->fieldClean($lexize); @@ -5211,13 +5414,13 @@ class Postgres extends ADODB_base { $sql = "CREATE TEXT SEARCH"; if ($isTemplate) { - $sql .= " TEMPLATE \"{$this->_schema}\".\"{$dictname}\" ("; + $sql .= " TEMPLATE \"{$f_schema}\".\"{$dictname}\" ("; if ($lexize != '') $sql .= " LEXIZE = {$lexize}"; if ($init != '') $sql .= ", INIT = {$init}"; $sql .= ")"; $whatToComment = 'TEXT SEARCH TEMPLATE'; } else { - $sql .= " DICTIONARY \"{$this->_schema}\".\"{$dictname}\" ("; + $sql .= " DICTIONARY \"{$f_schema}\".\"{$dictname}\" ("; if ($template != '') { $this->fieldClean($template['schema']); $this->fieldClean($template['name']); @@ -5273,7 +5476,7 @@ class Postgres extends ADODB_base { $this->rollbackTransaction(); return -1; } - + $this->clean($comment); $this->fieldClean($dictname); $status = $this->setComment('TEXT SEARCH DICTIONARY', $dictname, '', $comment); @@ -5284,9 +5487,11 @@ class Postgres extends ADODB_base { // Only if the name has changed if ($name != $dictname) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($name); - $sql = "ALTER TEXT SEARCH DICTIONARY \"{$this->_schema}\".\"{$dictname}\" RENAME TO \"{$name}\""; + $sql = "ALTER TEXT SEARCH DICTIONARY \"{$f_schema}\".\"{$dictname}\" RENAME TO \"{$name}\""; $status = $this->execute($sql); if ($status != 0) { $this->rollbackTransaction(); @@ -5305,7 +5510,9 @@ class Postgres extends ADODB_base { */ function getFtsDictionaryByName($ftsdict) { - $this->clean($ftsdict); + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($ftsdict); $sql = "SELECT n.nspname as schema, @@ -5320,7 +5527,7 @@ class Postgres extends ADODB_base { LEFT JOIN pg_catalog.pg_namespace n ON n.oid = d.dictnamespace WHERE d.dictname = '{$ftsdict}' AND pg_catalog.pg_ts_dict_is_visible(d.oid) - AND n.nspname='{$this->_schema}' + AND n.nspname='{$c_schema}' ORDER BY name"; return $this->selectSet($sql); @@ -5338,6 +5545,8 @@ class Postgres extends ADODB_base { function changeFtsMapping($ftscfg, $mapping, $action, $dictname = null) { if (count($mapping) > 0) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($ftscfg); $this->fieldClean($dictname); $this->arrayClean($mapping); @@ -5354,7 +5563,7 @@ class Postgres extends ADODB_base { break; } - $sql = "ALTER TEXT SEARCH CONFIGURATION \"{$this->_schema}\".\"{$ftscfg}\" {$whatToDo} MAPPING FOR "; + $sql = "ALTER TEXT SEARCH CONFIGURATION \"{$f_schema}\".\"{$ftscfg}\" {$whatToDo} MAPPING FOR "; $sql .= implode(",", $mapping); if ($action != 'drop' && !empty($dictname)) { $sql .= " WITH {$dictname}"; @@ -5375,6 +5584,8 @@ class Postgres extends ADODB_base { * @return FTS configuration information */ function getFtsMappingByName($ftscfg, $mapping) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($ftscfg); $this->fieldClean($mapping); @@ -5382,7 +5593,7 @@ class Postgres extends ADODB_base { FROM pg_catalog.pg_ts_config AS c LEFT JOIN pg_catalog.pg_namespace AS n ON n.oid = c.cfgnamespace WHERE c.cfgname = '{$ftscfg}' - AND n.nspname='{$this->_schema}'"); + AND n.nspname='{$_schema}'"); $oid = $oidSet->fields['oid']; $cfgparser = $oidSet->fields['cfgparser']; @@ -5465,6 +5676,8 @@ class Postgres extends ADODB_base { * @return -1 error */ function createAggregate($name, $basetype, $sfunc, $stype, $ffunc, $initcond, $sortop, $comment) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($name); $this->fieldClean($basetype); $this->fieldClean($sfunc); @@ -5476,7 +5689,7 @@ class Postgres extends ADODB_base { $this->beginTransaction(); - $sql = "CREATE AGGREGATE \"{$this->_schema}\".\"{$name}\" (BASETYPE = \"{$basetype}\", SFUNC = \"{$sfunc}\", STYPE = \"{$stype}\""; + $sql = "CREATE AGGREGATE \"{$f_schema}\".\"{$name}\" (BASETYPE = \"{$basetype}\", SFUNC = \"{$sfunc}\", STYPE = \"{$stype}\""; if(trim($ffunc) != '') $sql .= ", FINALFUNC = \"{$ffunc}\""; if(trim($initcond) != '') $sql .= ", INITCOND = \"{$initcond}\""; if(trim($sortop) != '') $sql .= ", SORTOP = \"{$sortop}\""; @@ -5519,10 +5732,12 @@ class Postgres extends ADODB_base { * @return 0 success */ function dropAggregate($aggrname, $aggrtype, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($aggrname); $this->fieldClean($aggrtype); - $sql = "DROP AGGREGATE \"{$this->_schema}\".\"{$aggrname}\" (\"{$aggrtype}\")"; + $sql = "DROP AGGREGATE \"{$f_schema}\".\"{$aggrname}\" (\"{$aggrtype}\")"; if ($cascade) $sql .= " CASCADE"; return $this->execute($sql); @@ -5535,6 +5750,8 @@ class Postgres extends ADODB_base { * @return A recordset */ function getAggregate($name, $basetype) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->fieldclean($name); $this->fieldclean($basetype); @@ -5546,7 +5763,7 @@ class Postgres extends ADODB_base { a.agginitval, a.aggsortop, u.usename, pg_catalog.obj_description(p.oid, 'pg_proc') AS aggrcomment FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n, pg_catalog.pg_user u, pg_catalog.pg_aggregate a WHERE n.oid = p.pronamespace AND p.proowner=u.usesysid AND p.oid=a.aggfnoid - AND p.proisagg AND n.nspname='{$this->_schema}' + AND p.proisagg AND n.nspname='{$c_schema}' AND p.proname='" . $name . "' AND CASE p.proargtypes[0] WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN '' @@ -5561,12 +5778,14 @@ class Postgres extends ADODB_base { * @return A recordset */ function getAggregates() { + $c_schema = $this->_schema; + $this->clean($c_schema); $sql = "SELECT p.proname, CASE p.proargtypes[0] WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN NULL ELSE pg_catalog.format_type(p.proargtypes[0], NULL) END AS proargtypes, a.aggtransfn, u.usename, pg_catalog.obj_description(p.oid, 'pg_proc') AS aggrcomment FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n, pg_catalog.pg_user u, pg_catalog.pg_aggregate a WHERE n.oid = p.pronamespace AND p.proowner=u.usesysid AND p.oid=a.aggfnoid - AND p.proisagg AND n.nspname='{$this->_schema}' ORDER BY 1, 2"; + AND p.proisagg AND n.nspname='{$c_schema}' ORDER BY 1, 2"; return $this->selectSet($sql); } @@ -5579,7 +5798,11 @@ class Postgres extends ADODB_base { * @return 0 success */ function changeAggregateOwner($aggrname, $aggrtype, $newaggrowner) { - $sql = "ALTER AGGREGATE \"{$this->_schema}\".\"{$aggrname}\" (\"{$aggrtype}\") OWNER TO \"{$newaggrowner}\""; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($aggrname); + $this->fieldClean($newaggrowner); + $sql = "ALTER AGGREGATE \"{$f_schema}\".\"{$aggrname}\" (\"{$aggrtype}\") OWNER TO \"{$newaggrowner}\""; return $this->execute($sql); } @@ -5591,7 +5814,11 @@ class Postgres extends ADODB_base { * @return 0 success */ function changeAggregateSchema($aggrname, $aggrtype, $newaggrschema) { - $sql = "ALTER AGGREGATE \"{$this->_schema}\".\"{$aggrname}\" (\"{$aggrtype}\") SET SCHEMA \"{$newaggrschema}\""; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($aggrname); + $this->fieldClean($newaggrschema); + $sql = "ALTER AGGREGATE \"{$f_schema}\".\"{$aggrname}\" (\"{$aggrtype}\") SET SCHEMA \"{$newaggrschema}\""; return $this->execute($sql); } @@ -6397,6 +6624,8 @@ class Postgres extends ADODB_base { * @return -3 unknown privilege type */ function getPrivileges($object, $type, $table = null) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($object); switch ($type) { @@ -6407,7 +6636,7 @@ class Postgres extends ADODB_base { FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_class c ON (a.attrelid = c.oid) LEFT JOIN pg_catalog.pg_namespace n ON (c.relnamespace=n.oid) - WHERE n.nspname='{$this->_schema}' + WHERE n.nspname='{$c_schema}' AND c.relname='{$table}' AND a.attname='{$object}'"; break; @@ -6418,7 +6647,7 @@ class Postgres extends ADODB_base { SELECT relacl AS acl FROM pg_catalog.pg_class WHERE relname='{$object}' AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$this->_schema}')"; + WHERE nspname='{$c_schema}')"; break; case 'database': $sql = "SELECT datacl AS acl FROM pg_catalog.pg_database WHERE datname='{$object}'"; @@ -6470,6 +6699,8 @@ class Postgres extends ADODB_base { function setPrivileges($mode, $type, $object, $public, $usernames, $groupnames, $privileges, $grantoption, $cascade, $table ) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldArrayClean($usernames); $this->fieldArrayClean($groupnames); @@ -6505,7 +6736,7 @@ class Postgres extends ADODB_base { case 'view': case 'sequence': $this->fieldClean($object); - $sql .= " \"{$this->_schema}\".\"{$object}\""; + $sql .= " \"{$f_schema}\".\"{$object}\""; break; case 'database': $this->fieldClean($object); @@ -6515,7 +6746,7 @@ class Postgres extends ADODB_base { // Function comes in with $object as function OID $fn = $this->getFunction($object); $this->fieldClean($fn->fields['proname']); - $sql .= " FUNCTION \"{$this->_schema}\".\"{$fn->fields['proname']}\"({$fn->fields['proarguments']})"; + $sql .= " FUNCTION \"{$f_schema}\".\"{$fn->fields['proname']}\"({$fn->fields['proarguments']})"; break; case 'language': $this->fieldClean($object); @@ -6721,9 +6952,11 @@ class Postgres extends ADODB_base { */ function analyzeDB($table = '') { if ($table != '') { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); - $sql = "ANALYZE \"{$this->_schema}\".\"{$table}\""; + $sql = "ANALYZE \"{$f_schema}\".\"{$table}\""; } else $sql = "ANALYZE"; @@ -6745,8 +6978,10 @@ class Postgres extends ADODB_base { if ($freeze) $sql .= " FREEZE"; if ($analyze) $sql .= " ANALYZE"; if ($table != '') { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); - $sql .= " \"{$this->_schema}\".\"{$table}\""; + $sql .= " \"{$f_schema}\".\"{$table}\""; } return $this->execute($sql); @@ -6856,6 +7091,8 @@ class Postgres extends ADODB_base { */ function setComment($obj_type, $obj_name, $table, $comment, $basetype = NULL) { $sql = "COMMENT ON {$obj_type} " ; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->clean($comment); /* $this->fieldClean($table); @@ -6864,10 +7101,10 @@ class Postgres extends ADODB_base { switch ($obj_type) { case 'TABLE': - $sql .= "\"{$this->_schema}\".\"{$table}\" IS "; + $sql .= "\"{$f_schema}\".\"{$table}\" IS "; break; case 'COLUMN': - $sql .= "\"{$this->_schema}\".\"{$table}\".\"{$obj_name}\" IS "; + $sql .= "\"{$f_schema}\".\"{$table}\".\"{$obj_name}\" IS "; break; case 'SEQUENCE': case 'VIEW': @@ -6876,7 +7113,7 @@ class Postgres extends ADODB_base { case 'TEXT SEARCH TEMPLATE': case 'TEXT SEARCH PARSER': case 'TYPE': - $sql .= "\"{$this->_schema}\"."; + $sql .= "\"{$f_schema}\"."; case 'DATABASE': case 'ROLE': case 'SCHEMA': @@ -6884,10 +7121,10 @@ class Postgres extends ADODB_base { $sql .= "\"{$obj_name}\" IS "; break; case 'FUNCTION': - $sql .= "\"{$this->_schema}\".{$obj_name} IS "; + $sql .= "\"{$f_schema}\".{$obj_name} IS "; break; case 'AGGREGATE': - $sql .= "\"{$this->_schema}\".\"{$obj_name}\" (\"{$basetype}\") IS "; + $sql .= "\"{$f_schema}\".\"{$obj_name}\" (\"{$basetype}\") IS "; break; default: // Unknown object type @@ -7412,20 +7649,22 @@ class Postgres extends ADODB_base { * @return A recordset */ function browseRow($table, $key) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($table); - $sql = "SELECT * FROM \"{$this->_schema}\".\"{$table}\""; + $sql = "SELECT * FROM \"{$f_schema}\".\"{$table}\""; if (is_array($key) && sizeof($key) > 0) { $sql .= " WHERE true"; foreach ($key as $k => $v) { $this->fieldClean($k); $this->clean($v); $sql .= " AND \"{$k}\"='{$v}'"; - } - } + } + } return $this->selectSet($sql); - } + } // Type conversion routines @@ -7438,7 +7677,7 @@ class Postgres extends ADODB_base { else $parameter = 'f'; return $parameter; - } + } /** * Change a parameter from 't' or 'f' to a boolean, (others evaluate to false) @@ -7470,10 +7709,12 @@ class Postgres extends ADODB_base { * @return A recordset */ function getStatsTableTuples($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $sql = "SELECT * FROM pg_stat_all_tables - WHERE schemaname='{$this->_schema}' AND relname='{$table}'"; + WHERE schemaname='{$c_schema}' AND relname='{$table}'"; return $this->selectSet($sql); } @@ -7484,10 +7725,12 @@ class Postgres extends ADODB_base { * @return A recordset */ function getStatsTableIO($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $sql = "SELECT * FROM pg_statio_all_tables - WHERE schemaname='{$this->_schema}' AND relname='{$table}'"; + WHERE schemaname='{$c_schema}' AND relname='{$table}'"; return $this->selectSet($sql); } @@ -7498,10 +7741,12 @@ class Postgres extends ADODB_base { * @return A recordset */ function getStatsIndexTuples($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $sql = "SELECT * FROM pg_stat_all_indexes - WHERE schemaname='{$this->_schema}' AND relname='{$table}' ORDER BY indexrelname"; + WHERE schemaname='{$c_schema}' AND relname='{$table}' ORDER BY indexrelname"; return $this->selectSet($sql); } @@ -7512,10 +7757,12 @@ class Postgres extends ADODB_base { * @return A recordset */ function getStatsIndexIO($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $sql = "SELECT * FROM pg_statio_all_indexes - WHERE schemaname='{$this->_schema}' AND relname='{$table}' + WHERE schemaname='{$c_schema}' AND relname='{$table}' ORDER BY indexrelname"; return $this->selectSet($sql); diff --git a/classes/database/Postgres73.php b/classes/database/Postgres73.php index 1ebc89b4..996383f5 100644 --- a/classes/database/Postgres73.php +++ b/classes/database/Postgres73.php @@ -68,6 +68,8 @@ class Postgres73 extends Postgres74 { * @return A recordset */ function getTriggers($table = '') { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $sql = "SELECT t.tgname, t.tgisconstraint, t.tgdeferrable, t.tginitdeferred, t.tgtype, @@ -81,7 +83,7 @@ class Postgres73 extends Postgres74 { ON t.tgfoid=p.oid, pg_catalog.pg_class c WHERE t.tgrelid=c.oid AND c.relname='{$table}' - AND c.relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$this->_schema}') + AND c.relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}') AND (NOT tgisconstraint OR NOT EXISTS (SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) @@ -101,6 +103,8 @@ class Postgres73 extends Postgres74 { */ function getRowIdentifier($table) { $oldtable = $table; + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $status = $this->beginTransaction(); @@ -110,7 +114,7 @@ class Postgres73 extends Postgres74 { // is NOT a partial index. $sql = "SELECT indrelid, indkey FROM pg_catalog.pg_index WHERE indisunique AND indrelid=(SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' AND - relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$this->_schema}')) + relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')) AND indpred='' AND indproc='-' ORDER BY indisprimary DESC LIMIT 1"; $rs = $this->selectSet($sql); @@ -147,6 +151,8 @@ class Postgres73 extends Postgres74 { * @return View info */ function getView($view) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($view); $sql = " @@ -154,7 +160,7 @@ class Postgres73 extends Postgres74 { pg_catalog.pg_get_viewdef(c.oid) AS vwdefinition, pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) WHERE (c.relname = '$view') - AND n.nspname='{$this->_schema}'"; + AND n.nspname='{$c_schema}'"; return $this->selectSet($sql); } @@ -324,6 +330,8 @@ class Postgres73 extends Postgres74 { * @return A recordset */ function getConstraints($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); /* This query finds all foreign key and check constraints in the pg_constraint @@ -371,7 +379,7 @@ class Postgres73 extends Postgres74 { ) AS sub WHERE relid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$this->_schema}')) + WHERE nspname='{$c_schema}')) ORDER BY 1 "; @@ -390,6 +398,8 @@ class Postgres73 extends Postgres74 { global $data; $data->clean($table); + $c_schema = $this->_schema; + $this->clean($c_schema); // get the max number of col used in a constraint for the table $sql = "SELECT DISTINCT @@ -399,7 +409,7 @@ class Postgres73 extends Postgres74 { JOIN pg_catalog.pg_class AS r ON (c.conrelid = r.oid) JOIN pg_catalog.pg_namespace AS ns ON r.relnamespace=ns.oid WHERE - r.relname = '$table' AND ns.nspname='". $this->_schema ."'"; + r.relname = '{$table}' AND ns.nspname='{$c_schema}'"; $rs = $this->selectSet($sql); @@ -413,7 +423,7 @@ class Postgres73 extends Postgres74 { JOIN pg_catalog.pg_class AS r ON (i.indrelid = r.oid) JOIN pg_catalog.pg_namespace AS ns ON r.relnamespace=ns.oid WHERE - r.relname = '$table' AND ns.nspname='". $this->_schema ."'"; + r.relname = '{$table}' AND ns.nspname='{$c_schema}'"; /* parse our output to find the highest dimension of index keys since * i.indkey is stored in an int2vector */ @@ -423,7 +433,7 @@ class Postgres73 extends Postgres74 { $tmp = count(explode(' ', $rs->fields['indkey'])); $max_col_ind = $tmp > $max_col_ind ? $tmp : $max_col_ind; $rs->MoveNext(); - } + } $sql = " SELECT oid AS conid, contype, conname, consrc, ns1.nspname as p_schema, sub.relname as p_table, @@ -444,7 +454,7 @@ class Postgres73 extends Postgres74 { JOIN pg_catalog.pg_attribute AS f1 ON ((f1.attrelid=c.conrelid) AND (f1.attnum=c.conkey[1]"; for ($i = 2; $i <= $max_col_cstr; $i++) { $sql.= " OR f1.attnum=c.conkey[$i]"; - } + } $sql .= ")) LEFT JOIN ( pg_catalog.pg_class AS r2 JOIN pg_catalog.pg_namespace AS ns2 ON (r2.relnamespace=ns2.oid) @@ -471,7 +481,7 @@ class Postgres73 extends Postgres74 { JOIN pg_catalog.pg_attribute AS f1 ON ((f1.attrelid=pi.indrelid) AND (f1.attnum=pi.indkey[0]"; for ($i = 1; $i <= $max_col_ind; $i++) { $sql.= " OR f1.attnum=pi.indkey[$i]"; - } + } $sql .= ")) JOIN pg_catalog.pg_class r2 ON (pi.indrelid=r2.oid) WHERE @@ -488,7 +498,7 @@ class Postgres73 extends Postgres74 { JOIN pg_catalog.pg_namespace AS ns1 ON sub.relnamespace=ns1.oid WHERE conrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$this->_schema}')) + WHERE nspname='{$c_schema}')) ORDER BY 1 "; diff --git a/classes/database/Postgres74.php b/classes/database/Postgres74.php index b0955b3c..7afafcb5 100644 --- a/classes/database/Postgres74.php +++ b/classes/database/Postgres74.php @@ -219,6 +219,8 @@ class Postgres74 extends Postgres80 { * @return A recordset */ function getTable($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $sql = " @@ -229,7 +231,7 @@ class Postgres74 extends Postgres80 { LEFT JOIN pg_catalog.pg_user u ON u.usesysid = c.relowner LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind = 'r' - AND n.nspname = '{$this->_schema}' + AND n.nspname = '{$c_schema}' AND c.relname = '{$table}'"; return $this->selectSet($sql); @@ -241,6 +243,8 @@ class Postgres74 extends Postgres80 { * @return All tables, sorted alphabetically */ function getTables($all = false) { + $c_schema = $this->_schema; + $this->clean($c_schema); if ($all) { // Exclude pg_catalog and information_schema tables $sql = "SELECT schemaname AS nspname, tablename AS relname, tableowner AS relowner @@ -254,7 +258,7 @@ class Postgres74 extends Postgres80 { FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind = 'r' - AND nspname='{$this->_schema}' + AND nspname='{$c_schema}' ORDER BY c.relname"; } @@ -278,6 +282,8 @@ class Postgres74 extends Postgres80 { * @return A recordset */ function getSequences($all = false) { + $c_schema = $this->_schema; + $this->clean($c_schema); if ($all) { // Exclude pg_catalog and information_schema tables $sql = "SELECT n.nspname, c.relname AS seqname, u.usename AS seqowner @@ -290,7 +296,7 @@ class Postgres74 extends Postgres80 { $sql = "SELECT c.relname AS seqname, u.usename AS seqowner, pg_catalog.obj_description(c.oid, 'pg_class') AS seqcomment FROM pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n WHERE c.relowner=u.usesysid AND c.relnamespace=n.oid - AND c.relkind = 'S' AND n.nspname='{$this->_schema}' ORDER BY seqname"; + AND c.relkind = 'S' AND n.nspname='{$c_schema}' ORDER BY seqname"; } return $this->selectSet( $sql ); diff --git a/classes/database/Postgres80.php b/classes/database/Postgres80.php index 0cb4263b..6c400fb2 100644 --- a/classes/database/Postgres80.php +++ b/classes/database/Postgres80.php @@ -291,6 +291,8 @@ class Postgres80 extends Postgres81 { * @return A recordset */ function getAggregate($name, $basetype) { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->fieldclean($name); $this->fieldclean($basetype); @@ -303,7 +305,7 @@ class Postgres80 extends Postgres81 { a.aggfinalfn, a.agginitval, u.usename, pg_catalog.obj_description(p.oid, 'pg_proc') AS aggrcomment FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n, pg_catalog.pg_user u, pg_catalog.pg_aggregate a WHERE n.oid = p.pronamespace AND p.proowner=u.usesysid AND p.oid=a.aggfnoid - AND p.proisagg AND n.nspname='{$this->_schema}' + AND p.proisagg AND n.nspname='{$c_schema}' AND p.proname='" . $name . "' AND CASE p.proargtypes[0] WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN '' diff --git a/classes/database/Postgres81.php b/classes/database/Postgres81.php index d387592f..52955f9b 100644 --- a/classes/database/Postgres81.php +++ b/classes/database/Postgres81.php @@ -148,6 +148,8 @@ class Postgres81 extends Postgres82 { function getConstraintsWithFields($table) { global $data; + $c_schema = $this->_schema; + $this->clean($c_schema); $data->clean($table); // get the max number of col used in a constraint for the table @@ -158,7 +160,7 @@ class Postgres81 extends Postgres82 { JOIN pg_catalog.pg_class AS r ON (c.conrelid = r.oid) JOIN pg_catalog.pg_namespace AS ns ON r.relnamespace=ns.oid WHERE - r.relname = '$table' AND ns.nspname='". $this->_schema ."'"; + r.relname = '{$table}' AND ns.nspname='{$c_schema}'"; $rs = $this->selectSet($sql); @@ -193,7 +195,7 @@ class Postgres81 extends Postgres82 { $sql .= sprintf(")) WHERE r1.relname = '%s' AND ns1.nspname='%s' - ORDER BY 1", $table, $this->_schema); + ORDER BY 1", $table, $c_schema); return $this->selectSet($sql); } diff --git a/classes/database/Postgres82.php b/classes/database/Postgres82.php index b4eb0b77..16a8b0b6 100644 --- a/classes/database/Postgres82.php +++ b/classes/database/Postgres82.php @@ -65,7 +65,9 @@ class Postgres82 extends Postgres83 { */ function alterSequenceName($seqrs, $name) { if (!empty($name) && ($seqrs->fields['seqname'] != $name)) { - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$seqrs->fields['seqname']}\" RENAME TO \"{$name}\""; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER TABLE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" RENAME TO \"{$name}\""; $status = $this->execute($sql); if ($status == 0) $seqrs->fields['seqname'] = $name; @@ -87,7 +89,9 @@ class Postgres82 extends Postgres83 { function alterViewName($vwrs, $name) { // Rename (only if name has changed) if (!empty($name) && ($name != $vwrs->fields['relname'])) { - $sql = "ALTER TABLE \"{$this->_schema}\".\"{$vwrs->fields['relname']}\" RENAME TO \"{$name}\""; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER TABLE \"{$f_schema}\".\"{$vwrs->fields['relname']}\" RENAME TO \"{$name}\""; $status = $this->execute($sql); if ($status == 0) $vwrs->fields['relname'] = $name; @@ -105,6 +109,8 @@ class Postgres82 extends Postgres83 { * @return A recordset */ function getTriggers($table = '') { + $c_schema = $this->_schema; + $this->clean($c_schema); $this->clean($table); $sql = "SELECT @@ -113,7 +119,7 @@ class Postgres82 extends Postgres83 { ns.nspname AS pronamespace FROM pg_catalog.pg_trigger t, pg_catalog.pg_proc p, pg_catalog.pg_namespace ns WHERE t.tgrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' - AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$this->_schema}')) + AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')) AND (NOT tgisconstraint OR NOT EXISTS (SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) @@ -187,6 +193,8 @@ class Postgres82 extends Postgres83 { return -1; } + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($funcname); $this->clean($args); $this->clean($language); @@ -194,7 +202,7 @@ class Postgres82 extends Postgres83 { $sql = "CREATE"; if ($replace) $sql .= " OR REPLACE"; - $sql .= " FUNCTION \"{$this->_schema}\".\"{$funcname}\" ("; + $sql .= " FUNCTION \"{$f_schema}\".\"{$funcname}\" ("; if ($args != '') $sql .= $args; @@ -250,12 +258,14 @@ class Postgres82 extends Postgres83 { * @return 0 success */ function clusterIndex($index, $table) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); $this->fieldClean($index); $this->fieldClean($table); // We don't bother with a transaction here, as there's no point rolling // back an expensive cluster if a cheap analyze fails for whatever reason - $sql = "CLUSTER \"{$index}\" ON \"{$this->_schema}\".\"{$table}\""; + $sql = "CLUSTER \"{$index}\" ON \"{$f_schema}\".\"{$table}\""; return $this->execute($sql); } @@ -267,6 +277,8 @@ class Postgres82 extends Postgres83 { * @return A recordset */ function getOpClasses() { + $c_schema = $this->_schema; + $this->clean($c_schema); $sql = " SELECT pa.amname, @@ -279,7 +291,7 @@ class Postgres82 extends Postgres83 { WHERE po.opcamid=pa.oid AND po.opcnamespace=pn.oid - AND pn.nspname='{$this->_schema}' + AND pn.nspname='{$c_schema}' ORDER BY 1,2 "; |