From e2f8826fa83fe8915fe9a176080688111396b17a Mon Sep 17 00:00:00 2001 From: Petr Skoda Date: Tue, 15 Dec 2015 13:17:49 +1300 Subject: [PATCH] MDL-52511 dml: add support for PostgreSQL 9.5 The default definition behaviour has changed for some int values. --- lib/dml/pgsql_native_moodle_database.php | 27 +++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/dml/pgsql_native_moodle_database.php b/lib/dml/pgsql_native_moodle_database.php index e369d39b4e4..505288653c2 100644 --- a/lib/dml/pgsql_native_moodle_database.php +++ b/lib/dml/pgsql_native_moodle_database.php @@ -478,7 +478,14 @@ class pgsql_native_moodle_database extends moodle_database { $info->scale = null; $info->not_null = ($rawcolumn->attnotnull === 't'); if ($info->has_default) { - $info->default_value = trim($rawcolumn->adsrc, '()'); + // PG 9.5+ uses :: syntax for some defaults. + $parts = explode('::', $rawcolumn->adsrc); + if (count($parts) > 1) { + $info->default_value = reset($parts); + } else { + $info->default_value = $rawcolumn->adsrc; + } + $info->default_value = trim($info->default_value, "()'"); } else { $info->default_value = null; } @@ -496,7 +503,14 @@ class pgsql_native_moodle_database extends moodle_database { $info->not_null = ($rawcolumn->attnotnull === 't'); $info->has_default = ($rawcolumn->atthasdef === 't'); if ($info->has_default) { - $info->default_value = trim($rawcolumn->adsrc, '()'); + // PG 9.5+ uses :: syntax for some defaults. + $parts = explode('::', $rawcolumn->adsrc); + if (count($parts) > 1) { + $info->default_value = reset($parts); + } else { + $info->default_value = $rawcolumn->adsrc; + } + $info->default_value = trim($info->default_value, "()'"); } else { $info->default_value = null; } @@ -514,7 +528,14 @@ class pgsql_native_moodle_database extends moodle_database { $info->not_null = ($rawcolumn->attnotnull === 't'); $info->has_default = ($rawcolumn->atthasdef === 't'); if ($info->has_default) { - $info->default_value = trim($rawcolumn->adsrc, '()'); + // PG 9.5+ uses :: syntax for some defaults. + $parts = explode('::', $rawcolumn->adsrc); + if (count($parts) > 1) { + $info->default_value = reset($parts); + } else { + $info->default_value = $rawcolumn->adsrc; + } + $info->default_value = trim($info->default_value, "()'"); } else { $info->default_value = null; }