function hotpot_upgrade($oldversion) { global $CFG; $ok = true; // set path to update functions $update_to_v2 = "{$CFG->dirroot}/mod/hotpot/db/update_to_v2.php"; // if the version number indicates this could be an early HotPot v2.1 (Moodle 1.6), // check this is not actually HotPot v2.0 (Moodle 1.5) with an overly advanced version number if ($oldversion > 2005031400 && $oldversion <= 2006082899) { require_once $update_to_v2; if (hotpot_db_field_exists('hotpot_attempts', 'details')) { $oldversion = 2005031400; } } // update from HotPot v1 to HotPot v2 if ($oldversion < 2005031400) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_from_v1(); } // update to HotPot v2.1 if ($oldversion < 2005090700) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_1(); } if ($oldversion > 2005031419 && $oldversion < 2005090702) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_1_2(); } if ($oldversion < 2005090706) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_1_6(); } if ($oldversion < 2005090708) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_1_8(); } if ($oldversion < 2006042103) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_1_16(); } if ($oldversion < 2006042602) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_1_17(); } if ($oldversion < 2006042803) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_1_18(); } if ($oldversion < 2006071600) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_1_21(); } if ($oldversion < 2006083101) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_2(); } ////// DO NOT ADD NEW THINGS HERE!! USE upgrade.php and the lib/ddllib.php functions. return $ok; }
function hotpot_upgrade($oldversion) { global $CFG; $ok = true; // set path to update functions $update_to_v2 = "{$CFG->dirroot}/mod/hotpot/db/update_to_v2.php"; // if the version number indicates this could be an early HotPot v2.1 (Moodle 1.6), // check this is not actually HotPot v1 or v2.0 (Moodle 1.5) with an overly advanced version number if ($oldversion > 2005031400 && $oldversion <= 2006082899) { require_once $update_to_v2; if (hotpot_db_table_exists('hotpot_attempts')) { if (hotpot_db_field_exists('hotpot_attempts', 'details')) { // HotPot v2.0 (Moodle 1.5) $oldversion = 2005031400; } } else { // HotPot v1 $oldversion = 2004122000; } } if ($oldversion < 2004021400) { execute_sql(" ALTER TABLE `{$CFG->prefix}hotpot_events` ADD `starttime` INT(10) unsigned NOT NULL DEFAULT '0' AFTER `time`"); execute_sql(" ALTER TABLE `{$CFG->prefix}hotpot_events` ADD `endtime` INT(10) unsigned NOT NULL DEFAULT '0' AFTER `time`"); } // update from HotPot v1 to HotPot v2 if ($oldversion < 2005031400) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_from_v1(); } if ($oldversion < 2005090700) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_1(); } if ($oldversion > 2005031419 && $oldversion < 2005090702) { // update to from HotPot v2.1.0 or v2.1.1 require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_1_2(); } if ($oldversion < 2006042103) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_1_16(); } if ($oldversion < 2006042601) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_1_17(); } if ($oldversion < 2006042803) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_1_18(); } if ($oldversion < 2006083101) { require_once $update_to_v2; $ok = $ok && hotpot_update_to_v2_2(); } ////// DO NOT ADD NEW THINGS HERE!! USE upgrade.php and the lib/ddllib.php functions. return $ok; }
function hotpot_db_update_field_type($table, $oldfield, $field, $type, $size, $unsigned, $notnull, $default = NULL, $after = NULL) { $ok = true; global $CFG, $db; // check validity of arguments, and adjust if necessary if ($oldfield && !hotpot_db_field_exists($table, $oldfield)) { $oldfield = ''; } if (empty($oldfield) && hotpot_db_field_exists($table, $field)) { $oldfield = $field; } if (is_string($unsigned)) { $unsigned = strtoupper($unsigned) == 'UNSIGNED'; } if (is_string($notnull)) { $notnull = strtoupper($notnull) == 'NOT NULL'; } if (isset($default)) { if (!is_numeric($default) && strtoupper($default) != 'NULL' && !preg_match("|^'.*'\$|", $default)) { $default = "'{$default}'"; } } // set full table name $table = "{$CFG->prefix}{$table}"; // update the field in the database switch (strtolower($CFG->dbfamily)) { case 'mysql': // optimize integer types switch (strtoupper($type)) { case 'TEXT': $size = ''; $unsigned = false; break; case 'INTEGER': if (!is_numeric($size)) { $size = ''; } else { if ($size <= 4) { $type = "TINYINT"; // 1 byte } else { if ($size <= 6) { $type = "SMALLINT"; // 2 bytes } else { if ($size <= 8) { $type = "MEDIUMINT"; // 3 bytes } else { if ($size <= 10) { $type = "INTEGER"; // 4 bytes (=INT) } else { if ($size > 10) { $type = "BIGINT"; // 8 bytes } } } } } } break; case 'VARCHAR': $unsigned = false; break; } // set action if (empty($oldfield)) { $action = "ADD"; } else { $action = "CHANGE `{$oldfield}`"; } // set fieldtype $fieldtype = $type; if ($size) { $fieldtype .= "({$size})"; } if ($unsigned) { $fieldtype .= ' UNSIGNED'; } if ($notnull) { $fieldtype .= ' NOT NULL'; } if (isset($default)) { $fieldtype .= " DEFAULT {$default}"; } if (!empty($after)) { $fieldtype .= " AFTER `{$after}`"; } $ok = $ok && execute_sql("ALTER TABLE `{$table}` {$action} `{$field}` {$fieldtype}"); break; case 'postgres': // get db version // N.B. $db->ServerInfo() usually returns blank // (except lib/adodb/drivers/adodb-postgre64-inc.php) $dbversion = ''; $rs = $db->Execute("SELECT version()"); if ($rs && $rs->RecordCount() > 0) { $records = $rs->GetArray(); if (preg_match('/\\d+\\.\\d+/', $records[0][0], $matches)) { $dbversion = $matches[0]; } } $tmpfield = 'temporary_' . $field . '_' . time(); switch (strtoupper($type)) { case "INTEGER": if (!is_numeric($size)) { $fieldtype = "INTEGER"; } else { if ($size <= 4) { $fieldtype = "INT2"; // 2 bytes } else { if ($size <= 10) { $fieldtype = "INT4"; // 4 bytes (=INTEGER) } else { if ($size > 10) { $fieldtype = "INT8"; // 8 bytes } } } } break; case "VARCHAR": $fieldtype = "VARCHAR({$size})"; break; default: $fieldtype = $type; } // start transaction execute_sql('BEGIN'); // create temporary field execute_sql('ALTER TABLE ' . $table . ' ADD COLUMN "' . $tmpfield . '" ' . $fieldtype); // set default if (isset($default)) { execute_sql('UPDATE ' . $table . ' SET "' . $tmpfield . '" = ' . $default); execute_sql('ALTER TABLE ' . $table . ' ALTER COLUMN "' . $tmpfield . '" SET DEFAULT ' . $default); } else { execute_sql('ALTER TABLE ' . $table . ' ALTER COLUMN "' . $tmpfield . '" DROP DEFAULT'); } // set not null if ($dbversion == '' || $dbversion >= "7.3") { $notnull = $notnull ? 'SET NOT NULL' : 'DROP NOT NULL'; execute_sql('ALTER TABLE ' . $table . ' ALTER COLUMN "' . $tmpfield . '" ' . $notnull); } else { execute_sql("\n UPDATE pg_attribute SET attnotnull=" . ($notnull ? 'TRUE' : 'FALSE') . " \n WHERE attname = '{$tmpfield}'\n AND attrelid = (SELECT oid FROM pg_class WHERE relname = '{$table}')\n "); } // transfer $oldfield values, if necessary if ($oldfield != '') { execute_sql('UPDATE ' . $table . ' SET "' . $tmpfield . '" = CAST ("' . $oldfield . '" AS ' . $fieldtype . ')'); execute_sql('ALTER TABLE ' . $table . ' DROP COLUMN "' . $oldfield . '"'); } // rename $tmpfield to $field execute_sql('ALTER TABLE ' . $table . ' RENAME COLUMN "' . $tmpfield . '" TO "' . $field . '"'); // do the transaction execute_sql('COMMIT'); // reclaim disk space (must be done outside transaction) if ($oldfield != '' && $dbversion >= "7.3") { execute_sql('UPDATE ' . $table . ' SET "' . $field . '" = "' . $field . '"'); execute_sql('VACUUM FULL ' . $table); } break; } // end switch $CGF->dbfamily return $ok; }