Permalink
Browse files

Merge branch 'MDL-25948_m22' of git://github.com/markn86/moodle into …

…MOODLE_22_STABLE
  • Loading branch information...
2 parents 53cd3c2 + 08f68a7 commit 30b9d52d78f55dd37e3e3d535b459deed2e30da7 @stronk7 stronk7 committed Nov 9, 2012
Showing with 88 additions and 0 deletions.
  1. +88 −0 lib/db/upgrade.php
View
88 lib/db/upgrade.php
@@ -1061,6 +1061,8 @@ function xmldb_main_upgrade($oldversion) {
}
if ($oldversion < 2009010602) {
+ // Issue with field in the user table being null in postgres.
+ $DB->execute("UPDATE {user} SET lastip = '' WHERE lastip IS NULL");
/// Changing precision of field lastip on table user to (45)
$table = new xmldb_table('user');
@@ -4708,6 +4710,10 @@ function xmldb_main_upgrade($oldversion) {
if ($dbman->index_exists($table, $index)) {
$dbman->drop_index($table, $index);
}
+
+ // Issue with field in the user table being null in postgres.
+ $DB->execute("UPDATE {user} SET city = '' WHERE city IS NULL");
+
/// Changing precision of field city on table user to (120)
$field = new xmldb_field('city', XMLDB_TYPE_CHAR, '120', null, XMLDB_NOTNULL, null, null, 'address');
@@ -7159,5 +7165,87 @@ function xmldb_main_upgrade($oldversion) {
upgrade_main_savepoint(true, 2011120504.12);
}
+ if ($oldversion < 2011120505.08) {
+ // Issue with Moodle version < 1.7 using postgres having null values in the user table.
+ if ($DB->get_dbfamily() === 'postgres') {
+ // Array to store columns we may need to change.
+ $arrcolumns = array('idnumber', 'icq', 'skype', 'yahoo', 'aim', 'msn',
+ 'phone1', 'phone2', 'institution', 'department',
+ 'address', 'city', 'country', 'lastip', 'secret',
+ 'picture', 'url');
+ // OK, now we want to remove the columns that already have the default values before editing.
+ $columns = $DB->get_columns('user');
+ foreach ($columns as $c) {
+ if (in_array($c->name, $arrcolumns)) {
+ if ($c->has_default && $c->not_null) {
+ $arrcolumns = array_diff($arrcolumns, array($c->name));
+ } else {
+ if ($c->name == 'picture') {
+ $DB->execute("UPDATE {user} SET picture = '0' WHERE picture IS NULL");
+ } else {
+ $DB->execute("UPDATE {user} SET $c->name = '' WHERE $c->name IS NULL");
+ }
+ }
+ }
+ }
+ // Create user table object.
+ $table = new xmldb_table('user');
+ // Create array to store the indexes in the user table.
+ $arrindexes = array();
+ $arrindexes['idnumber'] = new xmldb_index('idnumber', XMLDB_INDEX_NOTUNIQUE, array('idnumber'));
+ $arrindexes['city'] = new xmldb_index('city', XMLDB_INDEX_NOTUNIQUE, array('city'));
+ $arrindexes['country'] = new xmldb_index('country', XMLDB_INDEX_NOTUNIQUE, array('country'));
+ // Loop through the indexes.
+ foreach ($arrindexes as $key => $index) {
+ // Check if it is not in the columns array and remove as it does not need editing.
+ if (!in_array($key, $arrcolumns)) {
+ unset($arrindexes[$key]);
+ }
+ }
+ // Remove the indexes that need to be removed.
+ foreach ($arrindexes as $index) {
+ if ($dbman->index_exists($table, $index)) {
+ $dbman->drop_index($table, $index);
+ }
+ }
+ // Create list of fields that potentially need changed.
+ $arrfields = array();
+ $arrfields['idnumber'] = new xmldb_field('idnumber', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'password');
+ $arrfields['icq'] = new xmldb_field('icq', XMLDB_TYPE_CHAR, '15', null, XMLDB_NOTNULL, null, null, 'emailstop');
+ $arrfields['skype'] = new xmldb_field('skype', XMLDB_TYPE_CHAR, '50', null, XMLDB_NOTNULL, null, null, 'icq');
+ $arrfields['yahoo'] = new xmldb_field('yahoo', XMLDB_TYPE_CHAR, '50', null, XMLDB_NOTNULL, null, null, 'skype');
+ $arrfields['aim'] = new xmldb_field('aim', XMLDB_TYPE_CHAR, '50', null, XMLDB_NOTNULL, null, null, 'yahoo');
+ $arrfields['msn'] = new xmldb_field('msn', XMLDB_TYPE_CHAR, '50', null, XMLDB_NOTNULL, null, null, 'aim');
+ $arrfields['phone1'] = new xmldb_field('phone1', XMLDB_TYPE_CHAR, '20', null, XMLDB_NOTNULL, null, null, 'msn');
+ $arrfields['phone2'] = new xmldb_field('phone2', XMLDB_TYPE_CHAR, '20', null, XMLDB_NOTNULL, null, null, 'phone1');
+ $arrfields['institution'] = new xmldb_field('institution', XMLDB_TYPE_CHAR, '40', null, XMLDB_NOTNULL, null, null, 'phone2');
+ $arrfields['department'] = new xmldb_field('department', XMLDB_TYPE_CHAR, '30', null, XMLDB_NOTNULL, null, null, 'institution');
+ $arrfields['address'] = new xmldb_field('address', XMLDB_TYPE_CHAR, '70', null, XMLDB_NOTNULL, null, null, 'department');
+ $arrfields['city'] = new xmldb_field('city', XMLDB_TYPE_CHAR, '120', null, XMLDB_NOTNULL, null, null, 'address');
+ $arrfields['country'] = new xmldb_field('country', XMLDB_TYPE_CHAR, '2', null, XMLDB_NOTNULL, null, null, 'city');
+ $arrfields['lastip'] = new xmldb_field('lastip', XMLDB_TYPE_CHAR, '45', null, XMLDB_NOTNULL, null, null, 'country');
+ $arrfields['secret'] = new xmldb_field('secret', XMLDB_TYPE_CHAR, '15', null, XMLDB_NOTNULL, null, null, 'lastip');
+ $arrfields['picture'] = new xmldb_field('picture', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, 0, 'secret');
+ $arrfields['url'] = new xmldb_field('url', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'picture');
+ foreach ($arrfields as $key => $field) {
+ // If it is in the columns array it needs editing.
+ if (in_array($key, $arrcolumns)) {
+ if ($dbman->field_exists($table, $field)) {
+ $dbman->change_field_notnull($table, $field);
+ }
+ }
+ }
+ // Re-add the indexes that were removed.
+ foreach ($arrindexes as $index) {
+ if (!$dbman->index_exists($table, $index)) {
+ $dbman->add_index($table, $index);
+ }
+ }
+ }
+
+ // Main savepoint reached.
+ upgrade_main_savepoint(true, 2011120505.08);
+ }
+
return true;
}

0 comments on commit 30b9d52

Please sign in to comment.