Code Duplication    Length = 56-56 lines in 2 locations

src/database/Postgres.php 1 location

@@ 4546-4601 (lines=56) @@
4543
     * @param $table the table where we are looking for fk
4544
     * @return a recordset
4545
     */
4546
    public function getConstraintsWithFields($table)
4547
    {
4548
        $c_schema = $this->_schema;
4549
        $this->clean($c_schema);
4550
        $this->clean($table);
4551
4552
        // get the max number of col used in a constraint for the table
4553
        $sql = "SELECT DISTINCT
4554
			max(SUBSTRING(array_dims(c.conkey) FROM  \$patern\$^\\[.*:(.*)\\]$\$patern\$)) as nb
4555
		FROM pg_catalog.pg_constraint AS c
4556
			JOIN pg_catalog.pg_class AS r ON (c.conrelid=r.oid)
4557
			JOIN pg_catalog.pg_namespace AS ns ON (r.relnamespace=ns.oid)
4558
		WHERE
4559
			r.relname = '{$table}' AND ns.nspname='{$c_schema}'";
4560
4561
        $rs = $this->selectSet($sql);
4562
4563
        if ($rs->EOF) {
4564
            $max_col = 0;
4565
        } else {
4566
            $max_col = $rs->fields['nb'];
4567
        }
4568
4569
        $sql = '
4570
			SELECT
4571
				c.oid AS conid, c.contype, c.conname, pg_catalog.pg_get_constraintdef(c.oid, true) AS consrc,
4572
				ns1.nspname as p_schema, r1.relname as p_table, ns2.nspname as f_schema,
4573
				r2.relname as f_table, f1.attname as p_field, f1.attnum AS p_attnum, f2.attname as f_field,
4574
				f2.attnum AS f_attnum, pg_catalog.obj_description(c.oid, \'pg_constraint\') AS constcomment,
4575
				c.conrelid, c.confrelid
4576
			FROM
4577
				pg_catalog.pg_constraint AS c
4578
				JOIN pg_catalog.pg_class AS r1 ON (c.conrelid=r1.oid)
4579
				JOIN pg_catalog.pg_attribute AS f1 ON (f1.attrelid=r1.oid AND (f1.attnum=c.conkey[1]';
4580
        for ($i = 2; $i <= $rs->fields['nb']; $i++) {
4581
            $sql .= " OR f1.attnum=c.conkey[$i]";
4582
        }
4583
        $sql .= '))
4584
				JOIN pg_catalog.pg_namespace AS ns1 ON r1.relnamespace=ns1.oid
4585
				LEFT JOIN (
4586
					pg_catalog.pg_class AS r2 JOIN pg_catalog.pg_namespace AS ns2 ON (r2.relnamespace=ns2.oid)
4587
				) ON (c.confrelid=r2.oid)
4588
				LEFT JOIN pg_catalog.pg_attribute AS f2 ON
4589
					(f2.attrelid=r2.oid AND ((c.confkey[1]=f2.attnum AND c.conkey[1]=f1.attnum)';
4590
        for ($i = 2; $i <= $rs->fields['nb']; $i++) {
4591
            $sql .= " OR (c.confkey[$i]=f2.attnum AND c.conkey[$i]=f1.attnum)";
4592
        }
4593
4594
        $sql .= sprintf("))
4595
			WHERE
4596
				r1.relname = '%s' AND ns1.nspname='%s'
4597
			ORDER BY 1", $table, $c_schema);
4598
4599
        return $this->selectSet($sql);
4600
    }
4601
4602
    /**
4603
     * Adds a primary key constraint to a table
4604
     *

src/database/Postgres74.php 1 location

@@ 443-498 (lines=56) @@
440
         * @param $table the table where we are looking for fk
441
         * @return a recordset
442
         */
443
        public function getConstraintsWithFields($table)
444
        {
445
            $c_schema = $this->_schema;
446
            $this->clean($c_schema);
447
            $this->clean($table);
448
449
            // get the max number of col used in a constraint for the table
450
            $sql = "SELECT DISTINCT
451
			max(SUBSTRING(array_dims(c.conkey) FROM '^\\\\[.*:(.*)\\\\]$')) as nb
452
		FROM pg_catalog.pg_constraint AS c
453
			JOIN pg_catalog.pg_class AS r ON (c.conrelid=r.oid)
454
		    JOIN pg_catalog.pg_namespace AS ns ON (r.relnamespace=ns.oid)
455
		WHERE
456
			r.relname = '{$table}' AND ns.nspname='{$c_schema}'";
457
458
            $rs = $this->selectSet($sql);
459
460
            if ($rs->EOF) {
461
                $max_col = 0;
462
            } else {
463
                $max_col = $rs->fields['nb'];
464
            }
465
466
            $sql = '
467
			SELECT
468
				c.oid AS conid, c.contype, c.conname, pg_catalog.pg_get_constraintdef(c.oid, true) AS consrc,
469
				ns1.nspname as p_schema, r1.relname as p_table, ns2.nspname as f_schema,
470
				r2.relname as f_table, f1.attname as p_field, f1.attnum AS p_attnum, f2.attname as f_field,
471
				f2.attnum AS f_attnum, pg_catalog.obj_description(c.oid, \'pg_constraint\') AS constcomment,
472
				c.conrelid, c.confrelid
473
			FROM
474
				pg_catalog.pg_constraint AS c
475
				JOIN pg_catalog.pg_class AS r1 ON (c.conrelid=r1.oid)
476
				JOIN pg_catalog.pg_attribute AS f1 ON (f1.attrelid=r1.oid AND (f1.attnum=c.conkey[1]';
477
            for ($i = 2; $i <= $rs->fields['nb']; $i++) {
478
                $sql .= " OR f1.attnum=c.conkey[$i]";
479
            }
480
            $sql .= '))
481
				JOIN pg_catalog.pg_namespace AS ns1 ON r1.relnamespace=ns1.oid
482
				LEFT JOIN (
483
					pg_catalog.pg_class AS r2 JOIN pg_catalog.pg_namespace AS ns2 ON (r2.relnamespace=ns2.oid)
484
				) ON (c.confrelid=r2.oid)
485
				LEFT JOIN pg_catalog.pg_attribute AS f2 ON
486
					(f2.attrelid=r2.oid AND ((c.confkey[1]=f2.attnum AND c.conkey[1]=f1.attnum)';
487
            for ($i = 2; $i <= $rs->fields['nb']; $i++) {
488
                $sql .= " OR (c.confkey[$i]=f2.attnum AND c.conkey[$i]=f1.attnum)";
489
            }
490
491
            $sql .= sprintf("))
492
			WHERE
493
				r1.relname = '%s' AND ns1.nspname='%s'
494
			ORDER BY 1", $table, $c_schema);
495
496
            return $this->selectSet($sql);
497
        }
498
499
        // Constraint functions
500
501
        /**