Code Duplication    Length = 11-39 lines in 17 locations

src/database/Postgres84.php 1 location

@@ 37-59 (lines=23) @@
34
         * @param \PHPPgAdmin\Database\The|string $table The name of a table whose triggers to retrieve
35
         * @return \PHPPgAdmin\Database\A recordset
36
         */
37
        public function getTriggers($table = '')
38
        {
39
            $c_schema = $this->_schema;
40
            $this->clean($c_schema);
41
            $this->clean($table);
42
43
            $sql = "SELECT
44
				t.tgname, pg_catalog.pg_get_triggerdef(t.oid) AS tgdef,
45
				CASE WHEN t.tgenabled = 'D' THEN FALSE ELSE TRUE END AS tgenabled, p.oid AS prooid,
46
				p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto,
47
				ns.nspname AS pronamespace
48
			FROM pg_catalog.pg_trigger t, pg_catalog.pg_proc p, pg_catalog.pg_namespace ns
49
			WHERE t.tgrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}'
50
				AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}'))
51
				AND (NOT tgisconstraint OR NOT EXISTS
52
						(SELECT 1 FROM pg_catalog.pg_depend d    JOIN pg_catalog.pg_constraint c
53
							ON (d.refclassid = c.tableoid AND d.refobjid = c.oid)
54
						WHERE d.classid = t.tableoid AND d.objid = t.oid AND d.deptype = 'i' AND c.contype = 'f'))
55
				AND p.oid=t.tgfoid
56
				AND p.pronamespace = ns.oid";
57
58
            return $this->selectSet($sql);
59
        }
60
61
        /**
62
         * Searches all system catalogs to find objects that match a certain name.

src/database/Postgres.php 13 locations

@@ 1296-1317 (lines=22) @@
1293
     * @param $table The table to find the parents for
1294
     * @return A recordset
1295
     */
1296
    public function getTableParents($table)
1297
    {
1298
        $c_schema = $this->_schema;
1299
        $this->clean($c_schema);
1300
        $this->clean($table);
1301
1302
        $sql = "
1303
			SELECT
1304
				pn.nspname, relname
1305
			FROM
1306
				pg_catalog.pg_class pc, pg_catalog.pg_inherits pi, pg_catalog.pg_namespace pn
1307
			WHERE
1308
				pc.oid=pi.inhparent
1309
				AND pc.relnamespace=pn.oid
1310
				AND pi.inhrelid = (SELECT oid from pg_catalog.pg_class WHERE relname='{$table}'
1311
					AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = '{$c_schema}'))
1312
			ORDER BY
1313
				pi.inhseqno
1314
		";
1315
1316
        return $this->selectSet($sql);
1317
    }
1318
1319
    /**
1320
     * Finds the names and schemas of child tables
@@ 1325-1344 (lines=20) @@
1322
     * @param $table The table to find the children for
1323
     * @return A recordset
1324
     */
1325
    public function getTableChildren($table)
1326
    {
1327
        $c_schema = $this->_schema;
1328
        $this->clean($c_schema);
1329
        $this->clean($table);
1330
1331
        $sql = "
1332
			SELECT
1333
				pn.nspname, relname
1334
			FROM
1335
				pg_catalog.pg_class pc, pg_catalog.pg_inherits pi, pg_catalog.pg_namespace pn
1336
			WHERE
1337
				pc.oid=pi.inhrelid
1338
				AND pc.relnamespace=pn.oid
1339
				AND pi.inhparent = (SELECT oid from pg_catalog.pg_class WHERE relname='{$table}'
1340
					AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = '{$c_schema}'))
1341
		";
1342
1343
        return $this->selectSet($sql);
1344
    }
1345
1346
    /**
1347
     * Returns the SQL definition for the table.
@@ 1681-1701 (lines=21) @@
1678
     * @param $table The name of the table
1679
     * @return A recordset
1680
     */
1681
    public function getTable($table)
1682
    {
1683
        $c_schema = $this->_schema;
1684
        $this->clean($c_schema);
1685
        $this->clean($table);
1686
1687
        $sql = "
1688
			SELECT
1689
			  c.relname, n.nspname, u.usename AS relowner,
1690
			  pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment,
1691
			  (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=c.reltablespace) AS tablespace
1692
			FROM pg_catalog.pg_class c
1693
			     LEFT JOIN pg_catalog.pg_user u ON u.usesysid = c.relowner
1694
			     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
1695
			WHERE c.relkind = 'r'
1696
			      AND n.nspname = '{$c_schema}'
1697
			      AND n.oid = c.relnamespace
1698
			      AND c.relname = '{$table}'";
1699
1700
        return $this->selectSet($sql);
1701
    }
1702
1703
    /**
1704
     * Retrieve the attribute definition of a table
@@ 1781-1819 (lines=39) @@
1778
     * @param $table The table to find rules for
1779
     * @return A recordset
1780
     */
1781
    public function getConstraints($table)
1782
    {
1783
        $c_schema = $this->_schema;
1784
        $this->clean($c_schema);
1785
        $this->clean($table);
1786
1787
        // This SQL is greatly complicated by the need to retrieve
1788
        // index clustering information for primary and unique constraints
1789
        $sql = "SELECT
1790
				pc.conname,
1791
				pg_catalog.pg_get_constraintdef(pc.oid, true) AS consrc,
1792
				pc.contype,
1793
				CASE WHEN pc.contype='u' OR pc.contype='p' THEN (
1794
					SELECT
1795
						indisclustered
1796
					FROM
1797
						pg_catalog.pg_depend pd,
1798
						pg_catalog.pg_class pl,
1799
						pg_catalog.pg_index pi
1800
					WHERE
1801
						pd.refclassid=pc.tableoid
1802
						AND pd.refobjid=pc.oid
1803
						AND pd.objid=pl.oid
1804
						AND pl.oid=pi.indexrelid
1805
				) ELSE
1806
					NULL
1807
				END AS indisclustered
1808
			FROM
1809
				pg_catalog.pg_constraint pc
1810
			WHERE
1811
				pc.conrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}'
1812
					AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace
1813
					WHERE nspname='{$c_schema}'))
1814
			ORDER BY
1815
				1
1816
		";
1817
1818
        return $this->selectSet($sql);
1819
    }
1820
1821
    /**
1822
     * Returns the SQL for changing the current user
@@ 2301-2323 (lines=23) @@
2298
     * @param \PHPPgAdmin\Database\The|string $table The name of a table whose triggers to retrieve
2299
     * @return \PHPPgAdmin\Database\A recordset
2300
     */
2301
    public function getTriggers($table = '')
2302
    {
2303
        $c_schema = $this->_schema;
2304
        $this->clean($c_schema);
2305
        $this->clean($table);
2306
2307
        $sql = "SELECT
2308
				t.tgname, pg_catalog.pg_get_triggerdef(t.oid) AS tgdef,
2309
				CASE WHEN t.tgenabled = 'D' THEN FALSE ELSE TRUE END AS tgenabled, p.oid AS prooid,
2310
				p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto,
2311
				ns.nspname AS pronamespace
2312
			FROM pg_catalog.pg_trigger t, pg_catalog.pg_proc p, pg_catalog.pg_namespace ns
2313
			WHERE t.tgrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}'
2314
				AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}'))
2315
				AND ( tgconstraint = 0 OR NOT EXISTS
2316
						(SELECT 1 FROM pg_catalog.pg_depend d    JOIN pg_catalog.pg_constraint c
2317
							ON (d.refclassid = c.tableoid AND d.refobjid = c.oid)
2318
						WHERE d.classid = t.tableoid AND d.objid = t.oid AND d.deptype = 'i' AND c.contype = 'f'))
2319
				AND p.oid=t.tgfoid
2320
				AND p.pronamespace = ns.oid";
2321
2322
        return $this->selectSet($sql);
2323
    }
2324
2325
    /**
2326
     * Returns a list of all rules on a table OR view
@@ 2331-2346 (lines=16) @@
2328
     * @param $table The table to find rules for
2329
     * @return A recordset
2330
     */
2331
    public function getRules($table)
2332
    {
2333
        $c_schema = $this->_schema;
2334
        $this->clean($c_schema);
2335
        $this->clean($table);
2336
2337
        $sql = "
2338
			SELECT *
2339
			FROM pg_catalog.pg_rules
2340
			WHERE
2341
				schemaname='{$c_schema}' AND tablename='{$table}'
2342
			ORDER BY rulename
2343
		";
2344
2345
        return $this->selectSet($sql);
2346
    }
2347
2348
    /**
2349
     * Creates a new table in the database
@@ 4378-4396 (lines=19) @@
4375
     *
4376
     * @return true if the table has been already clustered
4377
     */
4378
    public function alreadyClustered($table)
4379
    {
4380
        $c_schema = $this->_schema;
4381
        $this->clean($c_schema);
4382
        $this->clean($table);
4383
4384
        $sql = "SELECT i.indisclustered
4385
			FROM pg_catalog.pg_class c, pg_catalog.pg_index i
4386
			WHERE c.relname = '{$table}'
4387
				AND c.oid = i.indrelid AND i.indisclustered
4388
				AND c.relnamespace = (SELECT oid FROM pg_catalog.pg_namespace
4389
					WHERE nspname='{$c_schema}')
4390
				";
4391
4392
        $v = $this->selectSet($sql);
4393
4394
        return !($v->recordCount() == 0);
4395
    }
4396
4397
    /**
4398
     * Creates an index
4399
     *
@@ 4959-4992 (lines=34) @@
4956
     * @param $table The table to find referrers for
4957
     * @return A recordset
4958
     */
4959
    public function getReferrers($table)
4960
    {
4961
        $this->clean($table);
4962
4963
        $status = $this->beginTransaction();
4964
        if ($status != 0) {
4965
            return -1;
4966
        }
4967
4968
        $c_schema = $this->_schema;
4969
        $this->clean($c_schema);
4970
4971
        $sql = "
4972
			SELECT
4973
				pn.nspname,
4974
				pl.relname,
4975
				pc.conname,
4976
				pg_catalog.pg_get_constraintdef(pc.oid) AS consrc
4977
			FROM
4978
				pg_catalog.pg_constraint pc,
4979
				pg_catalog.pg_namespace pn,
4980
				pg_catalog.pg_class pl
4981
			WHERE
4982
				pc.connamespace = pn.oid
4983
				AND pc.conrelid = pl.oid
4984
				AND pc.contype = 'f'
4985
				AND confrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}'
4986
					AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace
4987
					WHERE nspname='{$c_schema}'))
4988
			ORDER BY 1,2,3
4989
		";
4990
4991
        return $this->selectSet($sql);
4992
    }
4993
4994
    // Type functions
4995
@@ 6128-6143 (lines=16) @@
6125
     * @param $trigger The name of the trigger to retrieve
6126
     * @return A recordset
6127
     */
6128
    public function getTrigger($table, $trigger)
6129
    {
6130
        $c_schema = $this->_schema;
6131
        $this->clean($c_schema);
6132
        $this->clean($table);
6133
        $this->clean($trigger);
6134
6135
        $sql = "
6136
			SELECT * FROM pg_catalog.pg_trigger t, pg_catalog.pg_class c
6137
			WHERE t.tgrelid=c.oid AND c.relname='{$table}' AND t.tgname='{$trigger}'
6138
				AND c.relnamespace=(
6139
					SELECT oid FROM pg_catalog.pg_namespace
6140
					WHERE nspname='{$c_schema}')";
6141
6142
        return $this->selectSet($sql);
6143
    }
6144
6145
    /**
6146
     * A helper function for getTriggers that translates
@@ 9357-9367 (lines=11) @@
9354
     * @param $table The table to fetch stats for
9355
     * @return A recordset
9356
     */
9357
    public function getStatsTableTuples($table)
9358
    {
9359
        $c_schema = $this->_schema;
9360
        $this->clean($c_schema);
9361
        $this->clean($table);
9362
9363
        $sql = "SELECT * FROM pg_stat_all_tables
9364
			WHERE schemaname='{$c_schema}' AND relname='{$table}'";
9365
9366
        return $this->selectSet($sql);
9367
    }
9368
9369
    /**
9370
     * Fetches I/0 statistics for a table
@@ 9375-9385 (lines=11) @@
9372
     * @param $table The table to fetch stats for
9373
     * @return A recordset
9374
     */
9375
    public function getStatsTableIO($table)
9376
    {
9377
        $c_schema = $this->_schema;
9378
        $this->clean($c_schema);
9379
        $this->clean($table);
9380
9381
        $sql = "SELECT * FROM pg_statio_all_tables
9382
			WHERE schemaname='{$c_schema}' AND relname='{$table}'";
9383
9384
        return $this->selectSet($sql);
9385
    }
9386
9387
    /**
9388
     * Fetches tuple statistics for all indexes on a table
@@ 9393-9403 (lines=11) @@
9390
     * @param $table The table to fetch index stats for
9391
     * @return A recordset
9392
     */
9393
    public function getStatsIndexTuples($table)
9394
    {
9395
        $c_schema = $this->_schema;
9396
        $this->clean($c_schema);
9397
        $this->clean($table);
9398
9399
        $sql = "SELECT * FROM pg_stat_all_indexes
9400
			WHERE schemaname='{$c_schema}' AND relname='{$table}' ORDER BY indexrelname";
9401
9402
        return $this->selectSet($sql);
9403
    }
9404
9405
    /**
9406
     * Fetches I/0 statistics for all indexes on a table
@@ 9411-9422 (lines=12) @@
9408
     * @param $table The table to fetch index stats for
9409
     * @return A recordset
9410
     */
9411
    public function getStatsIndexIO($table)
9412
    {
9413
        $c_schema = $this->_schema;
9414
        $this->clean($c_schema);
9415
        $this->clean($table);
9416
9417
        $sql = "SELECT * FROM pg_statio_all_indexes
9418
			WHERE schemaname='{$c_schema}' AND relname='{$table}'
9419
			ORDER BY indexrelname";
9420
9421
        return $this->selectSet($sql);
9422
    }
9423
9424
    public function hasAggregateSortOp()
9425
    {

src/database/Postgres74.php 1 location

@@ 373-391 (lines=19) @@
370
         * @param $table The name of the table
371
         * @return A recordset
372
         */
373
        public function getTable($table)
374
        {
375
            $c_schema = $this->_schema;
376
            $this->clean($c_schema);
377
            $this->clean($table);
378
379
            $sql = "
380
			SELECT
381
			  c.relname, n.nspname, u.usename AS relowner,
382
			  pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment
383
			FROM pg_catalog.pg_class c
384
			     LEFT JOIN pg_catalog.pg_user u ON u.usesysid = c.relowner
385
			     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
386
			WHERE c.relkind = 'r'
387
				AND n.nspname = '{$c_schema}'
388
			    AND c.relname = '{$table}'";
389
390
            return $this->selectSet($sql);
391
        }
392
393
        /**
394
         * Return all tables in current database (and schema)

src/database/Postgres80.php 1 location

@@ 171-195 (lines=25) @@
168
         * @param $basetype The input data type of the aggregate
169
         * @return A recordset
170
         */
171
        public function getAggregate($name, $basetype)
172
        {
173
            $c_schema = $this->_schema;
174
            $this->clean($c_schema);
175
            $this->clean($name);
176
            $this->clean($basetype);
177
178
            $sql = "
179
			SELECT p.proname,
180
				CASE p.proargtypes[0]
181
					WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN NULL
182
					ELSE pg_catalog.format_type(p.proargtypes[0], NULL)
183
				END AS proargtypes, a.aggtransfn, format_type(a.aggtranstype, NULL) AS aggstype,
184
				a.aggfinalfn, a.agginitval, u.usename, pg_catalog.obj_description(p.oid, 'pg_proc') AS aggrcomment
185
			FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n, pg_catalog.pg_user u, pg_catalog.pg_aggregate a
186
			WHERE n.oid = p.pronamespace AND p.proowner=u.usesysid AND p.oid=a.aggfnoid
187
				AND p.proisagg AND n.nspname='{$c_schema}'
188
				AND p.proname='{$name}'
189
				AND CASE p.proargtypes[0]
190
					WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN ''
191
					ELSE pg_catalog.format_type(p.proargtypes[0], NULL)
192
				END ='{$basetype}'";
193
194
            return $this->selectSet($sql);
195
        }
196
197
        // Sequence functions
198

src/database/Postgres82.php 1 location

@@ 131-152 (lines=22) @@
128
         * @param \PHPPgAdmin\Database\The|string $table The name of a table whose triggers to retrieve
129
         * @return \PHPPgAdmin\Database\A recordset
130
         */
131
        public function getTriggers($table = '')
132
        {
133
            $c_schema = $this->_schema;
134
            $this->clean($c_schema);
135
            $this->clean($table);
136
137
            $sql = "SELECT
138
				t.tgname, pg_catalog.pg_get_triggerdef(t.oid) AS tgdef, t.tgenabled, p.oid AS prooid,
139
				p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto,
140
				ns.nspname AS pronamespace
141
			FROM pg_catalog.pg_trigger t, pg_catalog.pg_proc p, pg_catalog.pg_namespace ns
142
			WHERE t.tgrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}'
143
				AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}'))
144
				AND (NOT tgisconstraint OR NOT EXISTS
145
						(SELECT 1 FROM pg_catalog.pg_depend d    JOIN pg_catalog.pg_constraint c
146
							ON (d.refclassid = c.tableoid AND d.refobjid = c.oid)
147
						WHERE d.classid = t.tableoid AND d.objid = t.oid AND d.deptype = 'i' AND c.contype = 'f'))
148
				AND p.oid=t.tgfoid
149
				AND p.pronamespace = ns.oid";
150
151
            return $this->selectSet($sql);
152
        }
153
154
        // Function functions
155