@@ 21-38 (lines=18) @@ | ||
18 | * |
|
19 | * @return bool true if the table has been already clustered |
|
20 | */ |
|
21 | public function alreadyClustered($table) |
|
22 | { |
|
23 | $c_schema = $this->_schema; |
|
24 | $this->clean($c_schema); |
|
25 | $this->clean($table); |
|
26 | ||
27 | $sql = "SELECT i.indisclustered |
|
28 | FROM pg_catalog.pg_class c, pg_catalog.pg_index i |
|
29 | WHERE c.relname = '{$table}' |
|
30 | AND c.oid = i.indrelid AND i.indisclustered |
|
31 | AND c.relnamespace = (SELECT oid FROM pg_catalog.pg_namespace |
|
32 | WHERE nspname='{$c_schema}') |
|
33 | "; |
|
34 | ||
35 | $v = $this->selectSet($sql); |
|
36 | ||
37 | return !($v->RecordCount() == 0); |
|
38 | } |
|
39 | ||
40 | /** |
|
41 | * Creates an index. |
|
@@ 622-655 (lines=34) @@ | ||
619 | * |
|
620 | * @return int|\PHPPgAdmin\ADORecordSet A recordset or -1 in case of error |
|
621 | */ |
|
622 | public function getReferrers($table) |
|
623 | { |
|
624 | $this->clean($table); |
|
625 | ||
626 | $status = $this->beginTransaction(); |
|
627 | if ($status != 0) { |
|
628 | return -1; |
|
629 | } |
|
630 | ||
631 | $c_schema = $this->_schema; |
|
632 | $this->clean($c_schema); |
|
633 | ||
634 | $sql = " |
|
635 | SELECT |
|
636 | pn.nspname, |
|
637 | pl.relname, |
|
638 | pc.conname, |
|
639 | pg_catalog.pg_get_constraintdef(pc.oid) AS consrc |
|
640 | FROM |
|
641 | pg_catalog.pg_constraint pc, |
|
642 | pg_catalog.pg_namespace pn, |
|
643 | pg_catalog.pg_class pl |
|
644 | WHERE |
|
645 | pc.connamespace = pn.oid |
|
646 | AND pc.conrelid = pl.oid |
|
647 | AND pc.contype = 'f' |
|
648 | AND confrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' |
|
649 | AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace |
|
650 | WHERE nspname='{$c_schema}')) |
|
651 | ORDER BY 1,2,3 |
|
652 | "; |
|
653 | ||
654 | return $this->selectSet($sql); |
|
655 | } |
|
656 | ||
657 | abstract public function fieldClean(&$str); |
|
658 |
@@ 22-37 (lines=16) @@ | ||
19 | * |
|
20 | * @return \PHPPgAdmin\ADORecordSet A recordset |
|
21 | */ |
|
22 | public function getTrigger($table, $trigger) |
|
23 | { |
|
24 | $c_schema = $this->_schema; |
|
25 | $this->clean($c_schema); |
|
26 | $this->clean($table); |
|
27 | $this->clean($trigger); |
|
28 | ||
29 | $sql = " |
|
30 | SELECT * FROM pg_catalog.pg_trigger t, pg_catalog.pg_class c |
|
31 | WHERE t.tgrelid=c.oid AND c.relname='{$table}' AND t.tgname='{$trigger}' |
|
32 | AND c.relnamespace=( |
|
33 | SELECT oid FROM pg_catalog.pg_namespace |
|
34 | WHERE nspname='{$c_schema}')"; |
|
35 | ||
36 | return $this->selectSet($sql); |
|
37 | } |
|
38 | ||
39 | /** |
|
40 | * Creates a trigger. |
@@ 181-205 (lines=25) @@ | ||
178 | * |
|
179 | * @return \PHPPgAdmin\ADORecordSet A recordset |
|
180 | */ |
|
181 | public function getAggregate($name, $basetype) |
|
182 | { |
|
183 | $c_schema = $this->_schema; |
|
184 | $this->clean($c_schema); |
|
185 | $this->clean($name); |
|
186 | $this->clean($basetype); |
|
187 | ||
188 | $sql = " |
|
189 | SELECT p.proname, |
|
190 | CASE p.proargtypes[0] |
|
191 | WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN NULL |
|
192 | ELSE pg_catalog.format_type(p.proargtypes[0], NULL) |
|
193 | END AS proargtypes, a.aggtransfn, format_type(a.aggtranstype, NULL) AS aggstype, |
|
194 | a.aggfinalfn, a.agginitval, u.usename, pg_catalog.obj_description(p.oid, 'pg_proc') AS aggrcomment |
|
195 | FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n, pg_catalog.pg_user u, pg_catalog.pg_aggregate a |
|
196 | WHERE n.oid = p.pronamespace AND p.proowner=u.usesysid AND p.oid=a.aggfnoid |
|
197 | AND p.proisagg AND n.nspname='{$c_schema}' |
|
198 | AND p.proname='{$name}' |
|
199 | AND CASE p.proargtypes[0] |
|
200 | WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN '' |
|
201 | ELSE pg_catalog.format_type(p.proargtypes[0], NULL) |
|
202 | END ='{$basetype}'"; |
|
203 | ||
204 | return $this->selectSet($sql); |
|
205 | } |
|
206 | ||
207 | // Sequence functions |
|
208 |