Add upstream patch to Postgresql/Schema.php fixing the access for PostgreSQL >= 12

(extracted from the github repo of Horde-Db)

Maintainer timeout: 2 weeks
This commit is contained in:
Michael Reifenberger 2020-11-14 12:34:55 +00:00
parent 87972e3c42
commit a54722d7f9
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=555110
2 changed files with 64 additions and 5 deletions

View file

@ -2,7 +2,7 @@
PORTNAME= Horde_Db PORTNAME= Horde_Db
PORTVERSION= 2.4.0 PORTVERSION= 2.4.0
PORTREVISION= 1 PORTREVISION= 2
CATEGORIES= databases www pear CATEGORIES= databases www pear
MAINTAINER= horde@FreeBSD.org MAINTAINER= horde@FreeBSD.org

View file

@ -1,5 +1,5 @@
--- lib/Horde/Db/Adapter/Postgresql/Schema.php.orig 2017-02-27 10:00:17 UTC --- lib/Horde/Db/Adapter/Postgresql/Schema.php.orig 2017-02-27 11:00:17.000000000 +0100
+++ lib/Horde/Db/Adapter/Postgresql/Schema.php +++ lib/Horde/Db/Adapter/Postgresql/Schema.php 2020-10-28 00:40:32.469743000 +0100
@@ -3,12 +3,15 @@ @@ -3,12 +3,15 @@
* Copyright 2007 Maintainable Software, LLC * Copyright 2007 Maintainable Software, LLC
* Copyright 2008-2017 Horde LLC (http://www.horde.org/) * Copyright 2008-2017 Horde LLC (http://www.horde.org/)
@ -29,7 +29,27 @@
* @package Db * @package Db
* @subpackage Adapter * @subpackage Adapter
*/ */
@@ -1057,13 +1062,32 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde @@ -383,12 +388,13 @@ class Horde_Db_Adapter_Postgresql_Schema
{
/* @todo See if we can get this from information_schema instead */
return $this->selectAll('
- SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
- FROM pg_attribute a LEFT JOIN pg_attrdef d
- ON a.attrelid = d.adrelid AND a.attnum = d.adnum
- WHERE a.attrelid = ' . $this->quote($tableName) . '::regclass
- AND a.attnum > 0 AND NOT a.attisdropped
- ORDER BY a.attnum', $name);
+ SELECT a.attname, format_type(a.atttypid, a.atttypmod),
+ pg_get_expr(d.adbin, d.adrelid) AS adsrc, a.attnotnull
+ FROM pg_attribute a
+ LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
+ WHERE a.attrelid = ' . $this->quote($tableName) . '::regclass
+ AND a.attnum > 0 AND NOT a.attisdropped
+ ORDER BY a.attnum;', $name);
}
/**
@@ -1057,13 +1063,32 @@ class Horde_Db_Adapter_Postgresql_Schema
$quotedSequence = $this->quoteSequenceName($sequence); $quotedSequence = $this->quoteSequenceName($sequence);
$quotedTable = $this->quoteTableName($table); $quotedTable = $this->quoteTableName($table);
$quotedPk = $this->quoteColumnName($pk); $quotedPk = $this->quoteColumnName($pk);
@ -69,7 +89,46 @@
$this->selectValue($sql, 'Reset sequence'); $this->selectValue($sql, 'Reset sequence');
} else { } else {
if ($this->_logger) { if ($this->_logger) {
@@ -1138,9 +1162,7 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde @@ -1103,28 +1128,20 @@ class Horde_Db_Adapter_Postgresql_Schema
$result = $this->selectOne($sql, 'PK and serial sequence');
if (!$result) {
- // If that fails, try parsing the primary key's default value.
- // Support the 7.x and 8.0 nextval('foo'::text) as well as
- // the 8.1+ nextval('foo'::regclass).
$sql = "
- SELECT attr.attname,
- CASE
- WHEN split_part(def.adsrc, '''', 2) ~ '.' THEN
- substr(split_part(def.adsrc, '''', 2),
- strpos(split_part(def.adsrc, '''', 2), '.')+1)
- ELSE split_part(def.adsrc, '''', 2)
- END AS relname
- FROM pg_class t
- JOIN pg_attribute attr ON (t.oid = attrelid)
- JOIN pg_attrdef def ON (adrelid = attrelid AND adnum = attnum)
- JOIN pg_constraint cons ON (conrelid = adrelid AND adnum = conkey[1])
- WHERE t.oid = '$table'::regclass
- AND cons.contype = 'p'
- AND def.adsrc ~* 'nextval'";
-
+ SELECT c.column_name, c.ordinal_position,
+ pg_get_serial_sequence(t.table_name, c.column_name) as relname
+ FROM information_schema.key_column_usage AS c
+ LEFT JOIN information_schema.table_constraints AS t
+ ON t.constraint_name = c.constraint_name
+ WHERE t.table_name = '$table' AND t.constraint_type = 'PRIMARY KEY';";
$result = $this->selectOne($sql, 'PK and custom sequence');
}
+ if (!$result) {
+ return array(null, null);
+ }
+
// [primary_key, sequence]
return array($result['attname'], $result['relname']);
}
@@ -1138,9 +1155,7 @@ class Horde_Db_Adapter_Postgresql_Schema
{ {
if (!$this->_version) { if (!$this->_version) {
try { try {