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:
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
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue