diff options
author | Guillaume (ioguix) de Rorthais | 2010-09-27 22:34:33 +0000 |
---|---|---|
committer | Guillaume (ioguix) de Rorthais | 2010-09-27 22:34:33 +0000 |
commit | 8bf7bd87cc4a69b05f4c1bee908542ac70baab61 (patch) | |
tree | 936ea07c4e69299a115b6df4b15c41a27a7d70ae | |
parent | c227265ba1a2fb35943402398ff7a4d8666e5ee1 (diff) |
Move overriding method getConstraintsWithFields to the class it really belongs
Method getConstraintsWithFields from Postgres.php is compatible down to 8.1,
so the version from Postgre81 must go to Postgres80 wich is actually not
compatible with the first one.
-rw-r--r-- | classes/database/Postgres80.php | 64 | ||||
-rw-r--r-- | classes/database/Postgres81.php | 66 |
2 files changed, 65 insertions, 65 deletions
diff --git a/classes/database/Postgres80.php b/classes/database/Postgres80.php index 860f56b6..b6a6b02b 100644 --- a/classes/database/Postgres80.php +++ b/classes/database/Postgres80.php @@ -165,6 +165,70 @@ class Postgres80 extends Postgres81 { return 0; } + + // Constraint functions + + /** + * Returns a list of all constraints on a table, + * including constraint name, definition, related col and referenced namespace, + * table and col if needed + * @param $table the table where we are looking for fk + * @return a recordset + */ + 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 + $sql = "SELECT DISTINCT + max(SUBSTRING(array_dims(c.conkey) FROM '^\\\[.*:(.*)\\\]$')) as nb + FROM pg_catalog.pg_constraint AS c + 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='{$c_schema}'"; + + $rs = $this->selectSet($sql); + + if ($rs->EOF) $max_col = 0; + else $max_col = $rs->fields['nb']; + + $sql = ' + SELECT + c.oid AS conid, c.contype, c.conname, pg_catalog.pg_get_constraintdef(c.oid, true) AS consrc, + ns1.nspname as p_schema, r1.relname as p_table, ns2.nspname as f_schema, + r2.relname as f_table, f1.attname as p_field, f1.attnum AS p_attnum, f2.attname as f_field, + f2.attnum AS f_attnum, pg_catalog.obj_description(c.oid, \'pg_constraint\') AS constcomment, + c.conrelid, c.confrelid + FROM + pg_catalog.pg_constraint AS c + JOIN pg_catalog.pg_class AS r1 ON (c.conrelid=r1.oid) + JOIN pg_catalog.pg_attribute AS f1 ON (f1.attrelid=r1.oid AND (f1.attnum=c.conkey[1]'; + for ($i = 2; $i <= $rs->fields['nb']; $i++) { + $sql.= " OR f1.attnum=c.conkey[$i]"; + } + $sql.= ')) + JOIN pg_catalog.pg_namespace AS ns1 ON r1.relnamespace=ns1.oid + LEFT JOIN ( + pg_catalog.pg_class AS r2 JOIN pg_catalog.pg_namespace AS ns2 ON (r2.relnamespace=ns2.oid) + ) ON (c.confrelid=r2.oid) + LEFT JOIN pg_catalog.pg_attribute AS f2 ON + (f2.attrelid=r2.oid AND ((c.confkey[1]=f2.attnum AND c.conkey[1]=f1.attnum)'; + for ($i = 2; $i <= $rs->fields['nb']; $i++) + $sql.= "OR (c.confkey[$i]=f2.attnum AND c.conkey[$i]=f1.attnum)"; + + $sql .= sprintf(")) + WHERE + r1.relname = '%s' AND ns1.nspname='%s' + ORDER BY 1", $table, $c_schema); + + return $this->selectSet($sql); + } + + // View functions /** diff --git a/classes/database/Postgres81.php b/classes/database/Postgres81.php index 91fa2aa7..71584d51 100644 --- a/classes/database/Postgres81.php +++ b/classes/database/Postgres81.php @@ -134,72 +134,8 @@ class Postgres81 extends Postgres82 { if ($status != 0) { $this->rollbackTransaction(); return -2; - } - return $this->endTransaction(); - } - - // Constraint functions - - /** - * Returns a list of all constraints on a table, - * including constraint name, definition, related col and referenced namespace, - * table and col if needed - * @param $table the table where we are looking for fk - * @return a recordset - */ - 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 - $sql = "SELECT DISTINCT - max(SUBSTRING(array_dims(c.conkey) FROM '^\\\[.*:(.*)\\\]$')) as nb - FROM - pg_catalog.pg_constraint AS c - 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='{$c_schema}'"; - - $rs = $this->selectSet($sql); - - if ($rs->EOF) $max_col = 0; - else $max_col = $rs->fields['nb']; - - $sql = ' - SELECT - c.oid AS conid, c.contype, c.conname, pg_catalog.pg_get_constraintdef(c.oid,true) AS consrc, - ns1.nspname as p_schema, r1.relname as p_table, ns2.nspname as f_schema, - r2.relname as f_table, f1.attname as p_field, f1.attnum AS p_attnum, - f2.attname as f_field, f2.attnum AS f_attnum, - pg_catalog.obj_description(c.oid, \'pg_constraint\') AS constcomment, - confrelid - FROM - pg_catalog.pg_constraint AS c - JOIN pg_catalog.pg_class AS r1 ON (c.conrelid=r1.oid) - JOIN pg_catalog.pg_attribute AS f1 ON (f1.attrelid=r1.oid AND (f1.attnum=c.conkey[1]'; - for ($i = 2; $i <= $rs->fields['nb']; $i++) { - $sql.= " OR f1.attnum=c.conkey[$i]"; } - $sql.= ')) - JOIN pg_catalog.pg_namespace AS ns1 ON r1.relnamespace=ns1.oid - LEFT JOIN ( - pg_catalog.pg_class AS r2 JOIN pg_catalog.pg_namespace AS ns2 ON (r2.relnamespace=ns2.oid) - ) ON (c.confrelid=r2.oid) - LEFT JOIN pg_catalog.pg_attribute AS f2 ON - (f2.attrelid=r2.oid AND ((c.confkey[1]=f2.attnum AND c.conkey[1]=f1.attnum)'; - for ($i = 2; $i <= $rs->fields['nb']; $i++) - $sql.= "OR (c.confkey[$i]=f2.attnum AND c.conkey[$i]=f1.attnum)"; - - $sql .= sprintf(")) - WHERE - r1.relname = '%s' AND ns1.nspname='%s' - ORDER BY 1", $table, $c_schema); - - return $this->selectSet($sql); + return $this->endTransaction(); } // Tablespace functions |