? profiles/simpletest ? sites/default/modules ? sites/default/settings.php Index: includes/actions.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/actions.inc,v retrieving revision 1.22 diff -u -p -r1.22 actions.inc --- includes/actions.inc 8 Nov 2008 07:28:03 -0000 1.22 +++ includes/actions.inc 27 Nov 2008 04:33:21 -0000 @@ -71,7 +71,7 @@ function actions_do($action_ids, $object $query->condition('aid', $conditions, 'IN'); $result = $query->execute(); foreach ($result as $action) { - $actions[$action->aid] = $action->parameters ? unserialize($action->parameters) : array(); + $actions[$action->aid] = ($action->parameters != 'default') ? unserialize($action->parameters) : array(); $actions[$action->aid]['callback'] = $action->callback; $actions[$action->aid]['type'] = $action->type; } @@ -180,7 +180,7 @@ function actions_list($reset = FALSE) { function actions_get_all_actions() { $actions = db_query("SELECT aid, type, callback, parameters, description FROM {actions}")->fetchAllAssoc('aid', PDO::FETCH_ASSOC); foreach ($actions as &$action) { - $action['configurable'] = (bool) $action['parameters']; + $action['configurable'] = (bool) ($action['parameters'] != 'default'); unset($action['parameters']); unset($action['aid']); } @@ -236,7 +236,7 @@ function actions_function_lookup($hash) } // Must be an instance; must check database. - return db_query("SELECT aid FROM {actions} WHERE MD5(aid) = :hash AND parameters <> ''", array(':hash' => $hash))->fetchField(); + return db_query("SELECT aid FROM {actions} WHERE MD5(aid) = :hash AND parameters <> 'default'", array(':hash' => $hash))->fetchField(); } /** @@ -251,7 +251,7 @@ function actions_synchronize($actions_in if (!$actions_in_code) { $actions_in_code = actions_list(TRUE); } - $actions_in_db = db_query("SELECT aid, callback, description FROM {actions} WHERE parameters = ''")->fetchAllAssoc('callback', PDO::FETCH_ASSOC); + $actions_in_db = db_query("SELECT aid, callback, description FROM {actions} WHERE parameters = 'default'")->fetchAllAssoc('callback', PDO::FETCH_ASSOC); // Go through all the actions provided by modules. foreach ($actions_in_code as $callback => $array) { @@ -269,7 +269,7 @@ function actions_synchronize($actions_in 'aid' => $callback, 'type' => $array['type'], 'callback' => $callback, - 'parameters' => '', + 'parameters' => 'default', 'description' => $array['description'], )) ->execute(); Index: includes/form.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/form.inc,v retrieving revision 1.307 diff -u -p -r1.307 form.inc --- includes/form.inc 24 Nov 2008 00:40:44 -0000 1.307 +++ includes/form.inc 27 Nov 2008 04:33:21 -0000 @@ -2613,7 +2613,8 @@ function batch_process($redirect = NULL, // at least an empty string for the (not null) 'token' column. $batch['id'] = db_insert('batch') ->fields(array( - 'token' => '', + // token will soon replace with db_update(). + 'token' => 'default', 'timestamp' => REQUEST_TIME, )) ->execute(); Index: includes/locale.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/locale.inc,v retrieving revision 1.195 diff -u -p -r1.195 locale.inc --- includes/locale.inc 16 Nov 2008 19:41:14 -0000 1.195 +++ includes/locale.inc 27 Nov 2008 04:33:22 -0000 @@ -426,7 +426,7 @@ function locale_languages_delete_form_su _locale_rebuild_js($form_state['values']['langcode']); // Remove the language. db_query("DELETE FROM {languages} WHERE language = '%s'", $form_state['values']['langcode']); - db_query("UPDATE {node} SET language = '' WHERE language = '%s'", $form_state['values']['langcode']); + db_query("UPDATE {node} SET language = 'default' WHERE language = '%s'", $form_state['values']['langcode']); $variables = array('%locale' => $languages[$form_state['values']['langcode']]->name); drupal_set_message(t('The language %locale has been removed.', $variables)); watchdog('locale', 'The language %locale has been removed.', $variables); @@ -1215,7 +1215,7 @@ function _locale_import_message($message * @param $group * Text group to import PO file into (eg. 'default' for interface translations) */ -function _locale_import_one_string($op, $value = NULL, $mode = NULL, $lang = NULL, $file = NULL, $group = 'default') { +function _locale_import_one_string($op, $value = NULL, $mode = NULL, $lang = 'default', $file = NULL, $group = 'default') { static $report = array(0, 0, 0); static $headerdone = FALSE; static $strings = array(); Index: includes/path.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/path.inc,v retrieving revision 1.28 diff -u -p -r1.28 path.inc --- includes/path.inc 14 Oct 2008 11:01:08 -0000 1.28 +++ includes/path.inc 27 Nov 2008 04:33:22 -0000 @@ -43,12 +43,12 @@ function drupal_init_path() { * Either a Drupal system path, an aliased path, or FALSE if no path was * found. */ -function drupal_lookup_path($action, $path = '', $path_language = '') { +function drupal_lookup_path($action, $path = '', $path_language = 'default') { global $language; // $map is an array with language keys, holding arrays of Drupal paths to alias relations static $map = array(), $no_src = array(), $count; - $path_language = $path_language ? $path_language : $language->language; + $path_language = ($path_language != 'default') ? $path_language : $language->language; // Use $count to avoid looking up paths in subsequent calls if there simply are no aliases if (!isset($count)) { @@ -66,7 +66,7 @@ function drupal_lookup_path($action, $pa return $map[$path_language][$path]; } // Get the most fitting result falling back with alias without language - $alias = db_result(db_query("SELECT dst FROM {url_alias} WHERE src = '%s' AND language IN('%s', '') ORDER BY language DESC", $path, $path_language)); + $alias = db_result(db_query("SELECT dst FROM {url_alias} WHERE src = '%s' AND language IN('%s', 'default') ORDER BY language DESC", $path, $path_language)); $map[$path_language][$path] = $alias; return $alias; } @@ -77,7 +77,7 @@ function drupal_lookup_path($action, $pa $src = ''; if (!isset($map[$path_language]) || !($src = array_search($path, $map[$path_language]))) { // Get the most fitting result falling back with alias without language - if ($src = db_result(db_query("SELECT src FROM {url_alias} WHERE dst = '%s' AND language IN('%s', '') ORDER BY language DESC", $path, $path_language))) { + if ($src = db_result(db_query("SELECT src FROM {url_alias} WHERE dst = '%s' AND language IN('%s', 'default') ORDER BY language DESC", $path, $path_language))) { $map[$path_language][$src] = $path; } else { @@ -106,7 +106,7 @@ function drupal_lookup_path($action, $pa * An aliased path if one was found, or the original path if no alias was * found. */ -function drupal_get_path_alias($path, $path_language = '') { +function drupal_get_path_alias($path, $path_language = 'default') { $result = $path; if ($alias = drupal_lookup_path('alias', $path, $path_language)) { $result = $alias; @@ -126,7 +126,7 @@ function drupal_get_path_alias($path, $p * The internal path represented by the alias, or the original alias if no * internal path was found. */ -function drupal_get_normal_path($path, $path_language = '') { +function drupal_get_normal_path($path, $path_language = 'default') { $result = $path; if ($src = drupal_lookup_path('source', $path, $path_language)) { $result = $src; Index: includes/database/database.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/database/database.inc,v retrieving revision 1.29 diff -u -p -r1.29 database.inc --- includes/database/database.inc 22 Nov 2008 13:51:38 -0000 1.29 +++ includes/database/database.inc 27 Nov 2008 04:33:22 -0000 @@ -224,6 +224,8 @@ abstract class DatabaseConnection extend // Because the other methods don't seem to work right. $driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; + // Empty string is converted to NULL. + $driver_options[PDO::ATTR_ORACLE_NULLS] = PDO::NULL_EMPTY_STRING; // Call PDO::__construct and PDO::setAttribute. parent::__construct($dsn, $username, $password, $driver_options); @@ -2234,6 +2236,16 @@ function _db_query_process_args($query, $options['target'] = 'default'; } + // TODO: remove debug + openlog("drupal", LOG_PID | LOG_PERROR, LOG_LOCAL0); + if (preg_match("/''/", $query)) { + syslog(LOG_ERR, "INLINE EMPTY STRING: " . $query); + } + if (in_array('', $args, TRUE)) { + syslog(LOG_ERR, "ARGS EMPTY STRING: " . $query . ' ' . array_search('', $args, TRUE)); + } + closelog(); + // Temporary backward-compatibliity hacks. Remove later. $old_query = $query; $query = str_replace(array('%n', '%d', '%f', '%b', "'%s'", '%s'), '?', $old_query); Index: includes/database/mysql/schema.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/database/mysql/schema.inc,v retrieving revision 1.6 diff -u -p -r1.6 schema.inc --- includes/database/mysql/schema.inc 13 Nov 2008 20:52:13 -0000 1.6 +++ includes/database/mysql/schema.inc 27 Nov 2008 04:33:22 -0000 @@ -73,6 +73,18 @@ class DatabaseSchema_mysql extends Datab protected function createFieldSql($name, $spec) { $sql = "`" . $name . "` " . $spec['mysql_type']; + if ($spec['type'] == 'char' || $spec['type'] == 'varchar' || $spec['type'] == 'text' || $spec['type'] == 'blob') { + // Not allow default with '', so switch field as nullable. + if (isset($spec['default']) && $spec['default'] == '') { + unset($spec['default']); + $spec['not null'] = FALSE; + } + // Set field as nullable if no valid default value. + if (!isset($spec['default']) && !empty($spec['not null'])) { + $spec['not null'] = FALSE; + } + } + if (isset($spec['length'])) { $sql .= '(' . $spec['length'] . ')'; } Index: includes/database/pgsql/schema.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/database/pgsql/schema.inc,v retrieving revision 1.3 diff -u -p -r1.3 schema.inc --- includes/database/pgsql/schema.inc 26 Nov 2008 13:42:25 -0000 1.3 +++ includes/database/pgsql/schema.inc 27 Nov 2008 04:33:22 -0000 @@ -80,6 +80,18 @@ class DatabaseSchema_pgsql extends Datab protected function createFieldSql($name, $spec) { $sql = $name . ' ' . $spec['pgsql_type']; + if ($spec['type'] == 'char' || $spec['type'] == 'varchar' || $spec['type'] == 'text' || $spec['type'] == 'blob') { + // Not allow default with '', so switch field as nullable. + if (isset($spec['default']) && $spec['default'] == '') { + unset($spec['default']); + $spec['not null'] = FALSE; + } + // Set field as nullable if no valid default value. + if (!isset($spec['default']) && !empty($spec['not null'])) { + $spec['not null'] = FALSE; + } + } + if ($spec['type'] == 'serial') { unset($spec['not null']); } Index: modules/aggregator/aggregator.install =================================================================== RCS file: /cvs/drupal/drupal/modules/aggregator/aggregator.install,v retrieving revision 1.19 diff -u -p -r1.19 aggregator.install --- modules/aggregator/aggregator.install 15 Nov 2008 13:01:04 -0000 1.19 +++ modules/aggregator/aggregator.install 27 Nov 2008 04:33:22 -0000 @@ -37,13 +37,12 @@ function aggregator_schema() { 'title' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Title of the category.', ), 'description' => array( 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', 'description' => 'Description of the category', ), @@ -116,15 +115,13 @@ function aggregator_schema() { 'title' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Title of the feed.', ), 'url' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'URL to the feed.', ), 'refresh' => array( @@ -142,34 +139,31 @@ function aggregator_schema() { 'link' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The parent website of the feed; comes from the <link> element in the feed.', ), 'description' => array( 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', 'description' => "The parent website's description; comes from the <description> element in the feed.", ), 'image' => array( 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', 'description' => 'An image representing the feed.', ), 'hash' => array( 'type' => 'varchar', 'length' => 32, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Calculated md5 hash of the feed data, used for validating cache.', ), 'etag' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Entity tag HTTP response header, used for validating cache.', ), 'modified' => array( @@ -210,27 +204,24 @@ function aggregator_schema() { 'title' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Title of the feed item.', ), 'link' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Link to the feed item.', ), 'author' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Author of the feed item.', ), 'description' => array( 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', 'description' => 'Body of the feed item.', ), @@ -256,6 +247,11 @@ function aggregator_schema() { } /** + * @defgroup updates-6.x-to-7.x Aggregator updates from 6.x to 7.x + * @{ + */ + +/** * Add hash column to aggregator_feed table. */ function aggregator_update_7000() { @@ -263,3 +259,104 @@ function aggregator_update_7000() { db_add_field($ret, 'aggregator_feed', 'hash', array('type' => 'varchar', 'length' => 32, 'not null' => TRUE, 'default' => '')); return $ret; } + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function aggregator_update_7001() { + $ret = array(); + + $schema['aggregator_category'] = array( + 'fields' => array( + 'title' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'description' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + ), + ); + + $schema['aggregator_feed'] = array( + 'fields' => array( + 'title' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'url' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'link' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'description' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + 'image' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + 'hash' => array( + 'type' => 'varchar', + 'length' => 32, + 'not null' => FALSE, + ), + 'etag' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + $schema['aggregator_item'] = array( + 'fields' => array( + 'title' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'link' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'author' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'description' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/block/block.install =================================================================== RCS file: /cvs/drupal/drupal/modules/block/block.install,v retrieving revision 1.15 diff -u -p -r1.15 block.install --- modules/block/block.install 22 Nov 2008 21:21:34 -0000 1.15 +++ modules/block/block.install 27 Nov 2008 04:33:22 -0000 @@ -16,8 +16,7 @@ function block_schema() { 'module' => array( 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => "The module from which the block originates; for example, 'user' for the Who's Online block, and 'block' for any custom blocks.", ), 'delta' => array( @@ -30,8 +29,7 @@ function block_schema() { 'theme' => array( 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The theme under which the block settings apply.', ), 'status' => array( @@ -51,8 +49,7 @@ function block_schema() { 'region' => array( 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Theme region within which the block is set.', ), 'custom' => array( @@ -71,14 +68,13 @@ function block_schema() { ), 'pages' => array( 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'description' => 'Contents of the "Pages" block; contains either a list of paths on which to include/exclude the block or PHP code, depending on "visibility" setting.', ), 'title' => array( 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Custom title for the block. (Empty string will use block default title, <none> will remove the title, text will cause block to use specified title.)', ), 'cache' => array( @@ -104,13 +100,13 @@ function block_schema() { 'module' => array( 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, + 'not null' => FALSE, 'description' => "The block's origin module, from {block}.module.", ), 'delta' => array( 'type' => 'varchar', 'length' => 32, - 'not null' => TRUE, + 'not null' => FALSE, 'description' => "The block's unique delta within module, from {block}.delta.", ), 'rid' => array( @@ -144,8 +140,7 @@ function block_schema() { 'info' => array( 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Block description.', ), 'format' => array( @@ -166,4 +161,86 @@ function block_schema() { $schema['cache_block']['description'] = 'Cache table for the Block module to store already built blocks, identified by module, delta, and various contexts which may change the block, such as theme, locale, and caching mode defined for the block.'; return $schema; -} \ No newline at end of file +} + +/** + * @defgroup updates-6.x-to-7.x Block updates from 6.x to 7.x + * @{ + */ + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function block_update_7001() { + $ret = array(); + + $schema['block'] = array( + 'fields' => array( + 'module' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + 'theme' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + 'region' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + 'pages' => array( + 'type' => 'text', + 'not null' => FALSE, + ), + 'title' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + ), + ); + + $schema['block_role'] = array( + 'fields' => array( + 'module' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + 'delta' => array( + 'type' => 'varchar', + 'length' => 32, + 'not null' => FALSE, + ), + ), + ); + + $schema['box'] = array( + 'fields' => array( + 'info' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + ), + ); + + $schema['cache_block'] = drupal_get_schema_unprocessed('system', 'cache'); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/blogapi/blogapi.install =================================================================== RCS file: /cvs/drupal/drupal/modules/blogapi/blogapi.install,v retrieving revision 1.4 diff -u -p -r1.4 blogapi.install --- modules/blogapi/blogapi.install 15 Nov 2008 13:01:04 -0000 1.4 +++ modules/blogapi/blogapi.install 27 Nov 2008 04:33:22 -0000 @@ -40,8 +40,7 @@ function blogapi_schema() { 'description' => 'Path of the file relative to Drupal root.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'filesize' => array( 'description' => 'The size of the file in bytes.', @@ -93,3 +92,39 @@ function blogapi_update_6001() { * @} End of "defgroup updates-5.x-to-6.x" * The next series of updates should start at 7000. */ + +/** + * @defgroup updates-6.x-to-7.x Blog API updates from 6.x to 7.x + * @{ + */ + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function blogapi_update_7000() { + $ret = array(); + + $schema['blogapi_files'] = array( + 'fields' => array( + 'filepath' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/comment/comment.install =================================================================== RCS file: /cvs/drupal/drupal/modules/comment/comment.install,v retrieving revision 1.27 diff -u -p -r1.27 comment.install --- modules/comment/comment.install 15 Nov 2008 13:01:05 -0000 1.27 +++ modules/comment/comment.install 27 Nov 2008 04:33:22 -0000 @@ -109,6 +109,47 @@ function comment_update_7001() { } /** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function comment_update_7002() { + $ret = array(); + + $schema['comments'] = array( + 'fields' => array( + 'subject' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + 'comment' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + 'hostname' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + 'thread' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** * @} End of "defgroup updates-6.x-to-7.x" * The next series of updates should start at 8000. */ @@ -146,21 +187,19 @@ function comment_schema() { 'subject' => array( 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The comment title.', ), 'comment' => array( 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', 'description' => 'The comment body.', ), 'hostname' => array( 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => "The author's host name.", ), 'timestamp' => array( @@ -187,7 +226,7 @@ function comment_schema() { 'thread' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, + 'not null' => FALSE, 'description' => "The vancode representation of the comment's place in a thread.", ), 'name' => array( Index: modules/contact/contact.install =================================================================== RCS file: /cvs/drupal/drupal/modules/contact/contact.install,v retrieving revision 1.11 diff -u -p -r1.11 contact.install --- modules/contact/contact.install 15 Nov 2008 13:01:05 -0000 1.11 +++ modules/contact/contact.install 27 Nov 2008 04:33:22 -0000 @@ -37,19 +37,18 @@ function contact_schema() { 'category' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Category name.', ), 'recipients' => array( 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', 'description' => 'Comma-separated list of recipient e-mail addresses.', ), 'reply' => array( 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', 'description' => 'Text of the auto-reply message.', ), @@ -79,3 +78,49 @@ function contact_schema() { return $schema; } + +/** + * @defgroup updates-6.x-to-7.x Contact updates from 6.x to 7.x + * @{ + */ + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function contact_update_7000() { + $ret = array(); + + $schema['contact'] = array( + 'fields' => array( + 'category' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'recipients' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + 'reply' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/dblog/dblog.install =================================================================== RCS file: /cvs/drupal/drupal/modules/dblog/dblog.install,v retrieving revision 1.10 diff -u -p -r1.10 dblog.install --- modules/dblog/dblog.install 15 Nov 2008 13:01:05 -0000 1.10 +++ modules/dblog/dblog.install 27 Nov 2008 04:33:22 -0000 @@ -38,19 +38,18 @@ function dblog_schema() { 'type' => array( 'type' => 'varchar', 'length' => 16, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Type of log message, for example "user" or "page not found."', ), 'message' => array( 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', 'description' => 'Text of log message to be passed into the t() function.', ), 'variables' => array( 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', 'description' => 'Serialized array of variables that match the message string and that is passed into the t() function.', ), @@ -66,26 +65,23 @@ function dblog_schema() { 'type' => 'varchar', 'length' => 255, 'not null' => FALSE, - 'default' => '', 'description' => 'Link to view the result of the event.', ), 'location' => array( 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'description' => 'URL of the origin of the event.', ), 'referer' => array( 'type' => 'varchar', 'length' => 128, 'not null' => FALSE, - 'default' => '', 'description' => 'URL of referring page.', ), 'hostname' => array( 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Hostname of the user who triggered the event.', ), 'timestamp' => array( @@ -106,6 +102,11 @@ function dblog_schema() { } /** + * @defgroup updates-6.x-to-7.x Database logging updates from 6.x to 7.x + * @{ + */ + +/** * Allow NULL values for links. */ function dblog_update_7001() { @@ -123,3 +124,63 @@ function dblog_update_7002() { db_add_index($ret, 'watchdog', 'uid', array('uid')); return $ret; } + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function dblog_update_7003() { + $ret = array(); + + $schema['watchdog'] = array( + 'fields' => array( + 'type' => array( + 'type' => 'varchar', + 'length' => 16, + 'not null' => FALSE, + ), + 'message' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + 'variables' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + 'link' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'referer' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + 'location' => array( + 'type' => 'text', + 'not null' => FALSE, + ), + 'hostname' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/filter/filter.install =================================================================== RCS file: /cvs/drupal/drupal/modules/filter/filter.install,v retrieving revision 1.10 diff -u -p -r1.10 filter.install --- modules/filter/filter.install 15 Nov 2008 13:01:06 -0000 1.10 +++ modules/filter/filter.install 27 Nov 2008 04:33:22 -0000 @@ -22,8 +22,7 @@ function filter_schema() { 'module' => array( 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The origin module of the filter.', ), 'delta' => array( @@ -60,15 +59,13 @@ function filter_schema() { 'name' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Name of the input format (Filtered HTML).', ), 'roles' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'A comma-separated string of roles; references {role}.rid.', // This is bad since you can't use joins, nor index. ), 'cache' => array( @@ -99,6 +96,11 @@ function filter_schema() { } /** + * @defgroup updates-6.x-to-7.x Filter updates from 6.x to 7.x + * @{ + */ + +/** * Add a weight column to the filter formats table. */ function filter_update_7000() { @@ -122,3 +124,51 @@ function filter_update_7001() { } return $ret; } + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function filter_update_7002() { + $ret = array(); + + $schema['filters'] = array( + 'fields' => array( + 'module' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + ), + ); + + $schema['filter_formats'] = array( + 'fields' => array( + 'name' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'roles' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + $schema['cache_filter'] = drupal_get_schema_unprocessed('system', 'cache'); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/locale/locale.install =================================================================== RCS file: /cvs/drupal/drupal/modules/locale/locale.install,v retrieving revision 1.31 diff -u -p -r1.31 locale.install --- modules/locale/locale.install 15 Nov 2008 13:01:07 -0000 1.31 +++ modules/locale/locale.install 27 Nov 2008 04:33:22 -0000 @@ -12,7 +12,7 @@ function locale_install() { // Create tables. drupal_install_schema('locale'); - db_query("INSERT INTO {languages} (language, name, native, direction, enabled, weight, javascript) VALUES ('en', 'English', 'English', '0', '1', '0', '')"); + db_query("INSERT INTO {languages} (language, name, native, direction, enabled, weight, javascript) VALUES ('en', 'English', 'English', '0', '1', '0', NULL)"); } /** @@ -206,6 +206,130 @@ function locale_update_6005() { */ /** + * @defgroup updates-6.x-to-7.x Locale updates from 6.x to 7.x + * @{ + */ + +/** + * Replace default language from '' to 'default'. + */ +function locale_update_7000() { + $ret = array(); + + $schema['languages'] = array( + 'fields' => array( + 'language' => array( + 'type' => 'varchar', + 'length' => 12, + 'not null' => TRUE, + 'default' => 'default', + ), + ), + ); + + $schema['locales_target'] = array( + 'fields' => array( + 'language' => array( + 'type' => 'varchar', + 'length' => 12, + 'not null' => TRUE, + 'default' => 'default', + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = 'default' WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function locale_update_7001() { + $ret = array(); + + $schema['languages'] = array( + 'fields' => array( + 'name' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + 'native' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + 'formula' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + 'domain' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + 'prefix' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + 'javascript' => array( + 'type' => 'varchar', + 'length' => 32, + 'not null' => FALSE, + ), + ), + ); + + $schema['locales_source'] = array( + 'fields' => array( + 'location' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'source' => array( + 'type' => 'text', + 'mysql_type' => 'blob', + 'not null' => FALSE, + ), + ), + ); + + $schema['locales_target'] = array( + 'fields' => array( + 'translation' => array( + 'type' => 'text', + 'mysql_type' => 'blob', + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ + +/** * Implementation of hook_uninstall(). */ function locale_uninstall() { @@ -232,21 +356,19 @@ function locale_schema() { 'type' => 'varchar', 'length' => 12, 'not null' => TRUE, - 'default' => '', + 'default' => 'default', 'description' => "Language code, e.g. 'de' or 'en-US'.", ), 'name' => array( 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Language name in English.', ), 'native' => array( 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Native language name.', ), 'direction' => array( @@ -270,22 +392,19 @@ function locale_schema() { 'formula' => array( 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Plural formula in PHP code to evaluate to get plural indexes.', ), 'domain' => array( 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Domain to use for this language.', ), 'prefix' => array( 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Path prefix to use for this language.', ), 'weight' => array( @@ -297,8 +416,7 @@ function locale_schema() { 'javascript' => array( 'type' => 'varchar', 'length' => 32, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Location of JavaScript translation file.', ), ), @@ -319,8 +437,7 @@ function locale_schema() { 'location' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Drupal path in case of online discovered translations or file path in case of imported strings.', ), 'textgroup' => array( @@ -333,7 +450,7 @@ function locale_schema() { 'source' => array( 'type' => 'text', 'mysql_type' => 'blob', - 'not null' => TRUE, + 'not null' => FALSE, 'description' => 'The original string in English.', ), 'version' => array( @@ -362,14 +479,14 @@ function locale_schema() { 'translation' => array( 'type' => 'text', 'mysql_type' => 'blob', - 'not null' => TRUE, + 'not null' => FALSE, 'description' => 'Translation string value in this language.', ), 'language' => array( 'type' => 'varchar', 'length' => 12, 'not null' => TRUE, - 'default' => '', + 'default' => 'default', 'description' => 'Language code. References {languages}.language.', ), 'plid' => array( Index: modules/menu/menu.install =================================================================== RCS file: /cvs/drupal/drupal/modules/menu/menu.install,v retrieving revision 1.14 diff -u -p -r1.14 menu.install --- modules/menu/menu.install 15 Nov 2008 13:01:07 -0000 1.14 +++ modules/menu/menu.install 27 Nov 2008 04:33:22 -0000 @@ -33,15 +33,13 @@ function menu_schema() { 'menu_name' => array( 'type' => 'varchar', 'length' => 32, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Primary Key: Unique key for menu. This is used as a block delta so length is 32.', ), 'title' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Menu title; displayed at top of block.', ), 'description' => array( @@ -56,3 +54,43 @@ function menu_schema() { return $schema; } +/** + * @defgroup updates-6.x-to-7.x Menu updates from 6.x to 7.x + * @{ + */ + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function menu_update_7000() { + $ret = array(); + + $schema['menu_custom'] = array( + 'fields' => array( + 'menu_name' => array( + 'type' => 'varchar', + 'length' => 32, + 'not null' => FALSE, + ), + 'title' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/node/node.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.admin.inc,v retrieving revision 1.30 diff -u -p -r1.30 node.admin.inc --- modules/node/node.admin.inc 22 Nov 2008 14:09:41 -0000 1.30 +++ modules/node/node.admin.inc 27 Nov 2008 04:33:22 -0000 @@ -452,7 +452,7 @@ function node_admin_content($form_state) function node_admin_nodes() { // Enable language column if translation module is enabled // or if we have any node with language. - $multilanguage = (module_exists('translation') || db_result(db_query("SELECT COUNT(*) FROM {node} WHERE language != ''"))); + $multilanguage = (module_exists('translation') || db_result(db_query("SELECT COUNT(*) FROM {node} WHERE language <> 'default'"))); // Build the sortable table header. $header = array(); Index: modules/node/node.install =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.install,v retrieving revision 1.8 diff -u -p -r1.8 node.install --- modules/node/node.install 15 Nov 2008 13:01:08 -0000 1.8 +++ modules/node/node.install 27 Nov 2008 04:33:22 -0000 @@ -25,22 +25,20 @@ function node_schema() { 'description' => 'The {node_type}.type of this node.', 'type' => 'varchar', 'length' => 32, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'language' => array( 'description' => 'The {languages}.language of this node.', 'type' => 'varchar', 'length' => 12, 'not null' => TRUE, - 'default' => '', + 'default' => 'default', ), 'title' => array( 'description' => 'The title of this node, always treated as non-markup plain text.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'uid' => array( 'description' => 'The {users}.uid that owns this node; initially, this is the user that created it.', @@ -143,8 +141,7 @@ function node_schema() { 'description' => 'The realm in which the user must possess the grant ID. Each node access node can define one or more realms.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'grant_view' => array( 'description' => 'Boolean indicating whether a user with the realm/grant pair can view this node.', @@ -236,25 +233,24 @@ function node_schema() { 'description' => 'The title of this version.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'body' => array( 'description' => 'The body of this version.', 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', ), 'teaser' => array( 'description' => 'The teaser of this version.', 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', ), 'log' => array( 'description' => 'The log entry explaining the changes in this version.', 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', ), 'timestamp' => array( @@ -284,31 +280,30 @@ function node_schema() { 'description' => 'The machine-readable name of this type.', 'type' => 'varchar', 'length' => 32, - 'not null' => TRUE, + 'not null' => FALSE, ), 'name' => array( 'description' => 'The human-readable name of this type.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'base' => array( 'description' => 'The base string used to construct callbacks corresponding to this node type.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, + 'not null' => FALSE, ), 'description' => array( 'description' => 'A brief description of this type.', 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'medium', ), 'help' => array( 'description' => 'Help information shown to the user when creating a {node} of this type.', 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'medium', ), 'has_title' => array( @@ -322,8 +317,7 @@ function node_schema() { 'description' => 'The label displayed for the title field on the edit form.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'has_body' => array( 'description' => 'Boolean indicating whether this type uses the {node_revisions}.body field.', @@ -336,8 +330,7 @@ function node_schema() { 'description' => 'The label displayed for the body field on the edit form.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'min_word_count' => array( 'description' => 'The minimum number of words the body must contain.', @@ -371,8 +364,7 @@ function node_schema() { 'description' => 'The original machine-readable name of this node type. This may be different from the current type name if the locked field is 0.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), ), 'primary key' => array('type'), @@ -382,7 +374,8 @@ function node_schema() { } /** - * Drupal 6.x to 7.x updates + * @defgroup updates-6.x-to-7.x Node updates from 6.x to 7.x + * @{ */ /** @@ -398,5 +391,130 @@ function node_update_7000() { } /** - * End of 6.x to 7.x updates + * Replace default language from '' to 'default'. + */ +function node_update_7001() { + $ret = array(); + + $schema['node'] = array( + 'fields' => array( + 'language' => array( + 'type' => 'varchar', + 'length' => 12, + 'not null' => TRUE, + 'default' => 'default', + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = 'default' WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function node_update_7002() { + $ret = array(); + + $schema['node_access'] = array( + 'fields' => array( + 'realm' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + $schema['node_revisions'] = array( + 'fields' => array( + 'title' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'body' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + 'teaser' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + 'log' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + ), + ); + + $schema['node_type'] = array( + 'fields' => array( + 'type' => array( + 'type' => 'varchar', + 'length' => 32, + 'not null' => FALSE, + ), + 'name' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'base' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'description' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'medium', + ), + 'help' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'medium', + ), + 'title_label' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'body_label' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'orig_type' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + 'primary key' => array('type'), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. */ Index: modules/node/node.pages.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.pages.inc,v retrieving revision 1.45 diff -u -p -r1.45 node.pages.inc --- modules/node/node.pages.inc 13 Oct 2008 00:33:03 -0000 1.45 +++ modules/node/node.pages.inc 27 Nov 2008 04:33:22 -0000 @@ -57,7 +57,7 @@ function node_add($type) { // If a node type has been specified, validate its existence. if (isset($types[$type]) && node_access('create', $type)) { // Initialize settings: - $node = array('uid' => $user->uid, 'name' => (isset($user->name) ? $user->name : ''), 'type' => $type, 'language' => ''); + $node = array('uid' => $user->uid, 'name' => (isset($user->name) ? $user->name : ''), 'type' => $type, 'language' => 'default'); drupal_set_title(t('Create @name', array('@name' => $types[$type]->name)), PASS_THROUGH); $output = drupal_get_form($type . '_node_form', $node); Index: modules/openid/openid.install =================================================================== RCS file: /cvs/drupal/drupal/modules/openid/openid.install,v retrieving revision 1.4 diff -u -p -r1.4 openid.install --- modules/openid/openid.install 15 Nov 2008 13:01:08 -0000 1.4 +++ modules/openid/openid.install 27 Nov 2008 04:33:22 -0000 @@ -32,7 +32,7 @@ function openid_schema() { 'assoc_handle' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, + 'not null' => FALSE, 'description' => 'Primary Key: Used to refer to this association in subsequent messages.', ), 'assoc_type' => array( @@ -68,3 +68,39 @@ function openid_schema() { return $schema; } + +/** + * @defgroup updates-6.x-to-7.x OpenID updates from 6.x to 7.x + * @{ + */ + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function openid_update_7000() { + $ret = array(); + + $schema['openid_association'] = array( + 'fields' => array( + 'assoc_handle' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/path/path.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/path/path.admin.inc,v retrieving revision 1.15 diff -u -p -r1.15 path.admin.inc --- modules/path/path.admin.inc 22 Nov 2008 10:49:01 -0000 1.15 +++ modules/path/path.admin.inc 27 Nov 2008 04:33:22 -0000 @@ -15,7 +15,7 @@ function path_admin_overview($keys = NUL // Add the filter form above the overview table. $output = drupal_get_form('path_admin_filter_form', $keys); // Enable language column if locale is enabled or if we have any alias with language - $count = db_result(db_query("SELECT COUNT(*) FROM {url_alias} WHERE language != ''")); + $count = db_result(db_query("SELECT COUNT(*) FROM {url_alias} WHERE language <> 'default'")); $multilanguage = (module_exists('locale') || $count); if ($keys) { @@ -83,7 +83,7 @@ function path_admin_edit($pid = 0) { * @see path_admin_form_validate() * @see path_admin_form_submit() */ -function path_admin_form(&$form_state, $edit = array('src' => '', 'dst' => '', 'language' => '', 'pid' => NULL)) { +function path_admin_form(&$form_state, $edit = array('src' => '', 'dst' => '', 'language' => 'default', 'pid' => NULL)) { $form['#alias'] = $edit; @@ -132,7 +132,7 @@ function path_admin_form_validate($form, $dst = $form_state['values']['dst']; $pid = isset($form_state['values']['pid']) ? $form_state['values']['pid'] : 0; // Language is only set if locale module is enabled, otherwise save for all languages. - $language = isset($form_state['values']['language']) ? $form_state['values']['language'] : ''; + $language = $form_state['values']['language']; if (db_result(db_query("SELECT COUNT(dst) FROM {url_alias} WHERE pid != %d AND dst = '%s' AND language = '%s'", $pid, $dst, $language))) { form_set_error('dst', t('The alias %alias is already in use in this language.', array('%alias' => $dst))); @@ -148,7 +148,7 @@ function path_admin_form_validate($form, */ function path_admin_form_submit($form, &$form_state) { // Language is only set if locale module is enabled - path_set_alias($form_state['values']['src'], $form_state['values']['dst'], isset($form_state['values']['pid']) ? $form_state['values']['pid'] : 0, isset($form_state['values']['language']) ? $form_state['values']['language'] : ''); + path_set_alias($form_state['values']['src'], $form_state['values']['dst'], isset($form_state['values']['pid']) ? $form_state['values']['pid'] : 0, $form_state['values']['language']); drupal_set_message(t('The alias has been saved.')); $form_state['redirect'] = 'admin/build/path'; Index: modules/path/path.module =================================================================== RCS file: /cvs/drupal/drupal/modules/path/path.module,v retrieving revision 1.150 diff -u -p -r1.150 path.module --- modules/path/path.module 22 Nov 2008 10:49:01 -0000 1.150 +++ modules/path/path.module 27 Nov 2008 04:33:22 -0000 @@ -78,7 +78,7 @@ function path_admin_delete($pid = 0) { /** * Set an aliased path for a given Drupal path, preventing duplicates. */ -function path_set_alias($path = NULL, $alias = NULL, $pid = NULL, $language = '') { +function path_set_alias($path = NULL, $alias = NULL, $pid = NULL, $language = 'default') { $path = urldecode($path); $alias = urldecode($alias); // First we check if we deal with an existing alias and delete or modify it based on pid. @@ -123,7 +123,7 @@ function path_set_alias($path = NULL, $a function path_nodeapi_validate(&$node, $arg) { if (user_access('create url aliases') || user_access('administer url aliases')) { if (isset($node->path)) { - $language = isset($node->language) ? $node->language : ''; + $language = ($node->language != 'default') ? $node->language : 'default'; $node->path = trim($node->path); if (db_result(db_query("SELECT COUNT(dst) FROM {url_alias} WHERE dst = '%s' AND src != '%s' AND language = '%s'", $node->path, "node/$node->nid", $language))) { form_set_error('path', t('The path is already in use.')); @@ -136,7 +136,7 @@ function path_nodeapi_validate(&$node, $ * Implementation of hook_nodeapi_load(). */ function path_nodeapi_load(&$node, $arg) { - $language = isset($node->language) ? $node->language : ''; + $language = ($node->language != 'default') ? $node->language : 'default'; $path = 'node/' . $node->nid; $alias = drupal_get_path_alias($path, $language); if ($path != $alias) { @@ -149,7 +149,7 @@ function path_nodeapi_load(&$node, $arg) */ function path_nodeapi_insert(&$node, $arg) { if (user_access('create url aliases') || user_access('administer url aliases')) { - $language = isset($node->language) ? $node->language : ''; + $language = ($node->language != 'default') ? $node->language : 'default'; // Don't try to insert if path is NULL. We may have already set // the alias ahead of time. if (isset($node->path)) { @@ -163,7 +163,7 @@ function path_nodeapi_insert(&$node, $ar */ function path_nodeapi_update(&$node, $arg) { if (user_access('create url aliases') || user_access('administer url aliases')) { - $language = isset($node->language) ? $node->language : ''; + $language = ($node->language != 'default') ? $node->language : 'default'; path_set_alias('node/' . $node->nid, isset($node->path) ? $node->path : NULL, isset($node->pid) ? $node->pid : NULL, $language); } } @@ -173,7 +173,6 @@ function path_nodeapi_update(&$node, $ar */ function path_nodeapi_delete(&$node, $arg) { if (user_access('create url aliases') || user_access('administer url aliases')) { - $language = isset($node->language) ? $node->language : ''; $path = 'node/' . $node->nid; if (drupal_get_path_alias($path) != $path) { path_set_alias($path); Index: modules/php/php.install =================================================================== RCS file: /cvs/drupal/drupal/modules/php/php.install,v retrieving revision 1.2 diff -u -p -r1.2 php.install --- modules/php/php.install 14 Apr 2008 17:48:41 -0000 1.2 +++ modules/php/php.install 27 Nov 2008 04:33:22 -0000 @@ -11,7 +11,7 @@ function php_install() { // reliable method to identify the format in an uninstall hook or in // subsequent clean installs. if (!$format_exists) { - db_query("INSERT INTO {filter_formats} (name, roles, cache) VALUES ('PHP code', '', 0)"); + db_query("INSERT INTO {filter_formats} (name, roles, cache) VALUES ('PHP code', NULL, 0)"); $format = db_result(db_query("SELECT MAX(format) FROM {filter_formats}")); // Enable the PHP evaluator filter. Index: modules/poll/poll.install =================================================================== RCS file: /cvs/drupal/drupal/modules/poll/poll.install,v retrieving revision 1.16 diff -u -p -r1.16 poll.install --- modules/poll/poll.install 15 Nov 2008 13:01:08 -0000 1.16 +++ modules/poll/poll.install 27 Nov 2008 04:33:22 -0000 @@ -67,8 +67,7 @@ function poll_schema() { 'chtext' => array( 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The text for this choice.', ), 'chvotes' => array( @@ -116,8 +115,7 @@ function poll_schema() { 'hostname' => array( 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The IP address this vote is from unless the voter was logged in.', ), ), @@ -131,3 +129,49 @@ function poll_schema() { return $schema; } + +/** + * @defgroup updates-6.x-to-7.x Poll updates from 6.x to 7.x + * @{ + */ + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function poll_update_7000() { + $ret = array(); + + $schema['poll_choices'] = array( + 'fields' => array( + 'chtext' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + ), + ); + + $schema['poll_votes'] = array( + 'fields' => array( + 'hostname' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/profile/profile.install =================================================================== RCS file: /cvs/drupal/drupal/modules/profile/profile.install,v retrieving revision 1.14 diff -u -p -r1.14 profile.install --- modules/profile/profile.install 15 Nov 2008 13:01:08 -0000 1.14 +++ modules/profile/profile.install 27 Nov 2008 04:33:22 -0000 @@ -40,8 +40,7 @@ function profile_schema() { 'name' => array( 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Internal name of the field used in the form HTML and URLs.', ), 'explanation' => array( @@ -148,3 +147,39 @@ function profile_schema() { return $schema; } + +/** + * @defgroup updates-6.x-to-7.x Profile updates from 6.x to 7.x + * @{ + */ + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function profile_update_7000() { + $ret = array(); + + $schema['profile_fields'] = array( + 'fields' => array( + 'name' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/search/search.install =================================================================== RCS file: /cvs/drupal/drupal/modules/search/search.install,v retrieving revision 1.19 diff -u -p -r1.19 search.install --- modules/search/search.install 15 Nov 2008 13:01:09 -0000 1.19 +++ modules/search/search.install 27 Nov 2008 04:33:22 -0000 @@ -43,7 +43,7 @@ function search_schema() { ), 'data' => array( 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', 'description' => 'List of space-separated words from the item.', ), @@ -64,8 +64,7 @@ function search_schema() { 'word' => array( 'type' => 'varchar', 'length' => 50, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The {search_total}.word that is associated with the search item.', ), 'sid' => array( @@ -100,8 +99,7 @@ function search_schema() { 'description' => 'Primary Key: Unique word in the search index.', 'type' => 'varchar', 'length' => 50, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'count' => array( 'description' => "The count of the word in the index using Zipf's law to equalize the probability distribution.", @@ -125,8 +123,7 @@ function search_schema() { 'type' => array( 'type' => 'varchar', 'length' => 16, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The {search_dataset}.type of the searchable item containing the link to the node.', ), 'nid' => array( @@ -153,6 +150,11 @@ function search_schema() { } /** + * @defgroup updates-6.x-to-7.x Search updates from 6.x to 7.x + * @{ + */ + +/** * Replace unique keys in 'search_dataset' and 'search_index' by primary keys. */ function search_update_7000() { @@ -166,3 +168,64 @@ function search_update_7000() { return $ret; } + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function search_update_7001() { + $ret = array(); + + $schema['search_dataset'] = array( + 'fields' => array( + 'data' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + ), + ); + + $schema['search_index'] = array( + 'fields' => array( + 'word' => array( + 'type' => 'varchar', + 'length' => 50, + 'not null' => FALSE, + ), + ), + ); + + $schema['search_total'] = array( + 'fields' => array( + 'word' => array( + 'type' => 'varchar', + 'length' => 50, + 'not null' => FALSE, + ), + ), + ); + + $schema['search_node_links'] = array( + 'fields' => array( + 'type' => array( + 'type' => 'varchar', + 'length' => 16, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/simpletest/simpletest.install =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/simpletest.install,v retrieving revision 1.14 diff -u -p -r1.14 simpletest.install --- modules/simpletest/simpletest.install 15 Nov 2008 13:01:09 -0000 1.14 +++ modules/simpletest/simpletest.install 27 Nov 2008 04:33:22 -0000 @@ -148,34 +148,30 @@ function simpletest_schema() { 'test_class' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The name of the class that created this message.', ), 'status' => array( 'type' => 'varchar', 'length' => 9, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Message status. Core understands pass, fail, exception.', ), 'message' => array( 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'description' => 'The message itself.', ), 'message_group' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The message group this message belongs to. For example: warning, browser, user.', ), 'function' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Name of the assertion function or method that created this message.', ), 'line' => array( @@ -187,8 +183,7 @@ function simpletest_schema() { 'file' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Name of the file where the function is called.', ), ), @@ -211,3 +206,63 @@ function simpletest_schema() { ); return $schema; } + +/** + * @defgroup updates-6.x-to-7.x SimpleTest updates from 6.x to 7.x + * @{ + */ + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function simpletest_update_7000() { + $ret = array(); + + $schema['simpletest'] = array( + 'fields' => array( + 'test_class' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'status' => array( + 'type' => 'varchar', + 'length' => 9, + 'not null' => FALSE, + ), + 'message' => array( + 'type' => 'text', + 'not null' => FALSE, + ), + 'message_group' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'function' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'file' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/simpletest/tests/database_test.install =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/tests/database_test.install,v retrieving revision 1.3 diff -u -p -r1.3 database_test.install --- modules/simpletest/tests/database_test.install 8 Oct 2008 18:34:30 -0000 1.3 +++ modules/simpletest/tests/database_test.install 27 Nov 2008 04:33:22 -0000 @@ -22,8 +22,7 @@ function database_test_schema() { 'description' => "A person's name", 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'age' => array( 'description' => "The person's age", @@ -57,8 +56,7 @@ function database_test_schema() { 'description' => "A person's name", 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'age' => array( 'description' => "The person's age", @@ -71,8 +69,7 @@ function database_test_schema() { 'description' => "The person's job", 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), ), 'primary key' => array('job'), @@ -136,8 +133,7 @@ function database_test_schema() { 'description' => 'The task to be completed.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'priority' => array( 'description' => 'The priority of the task.', Index: modules/simpletest/tests/taxonomy_test.install =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/tests/taxonomy_test.install,v retrieving revision 1.2 diff -u -p -r1.2 taxonomy_test.install --- modules/simpletest/tests/taxonomy_test.install 15 Nov 2008 13:01:09 -0000 1.2 +++ modules/simpletest/tests/taxonomy_test.install 27 Nov 2008 04:33:22 -0000 @@ -23,8 +23,7 @@ function taxonomy_test_schema() { 'name' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The name of the antonym.', ), ), Index: modules/statistics/statistics.install =================================================================== RCS file: /cvs/drupal/drupal/modules/statistics/statistics.install,v retrieving revision 1.14 diff -u -p -r1.14 statistics.install --- modules/statistics/statistics.install 15 Nov 2008 13:01:09 -0000 1.14 +++ modules/statistics/statistics.install 27 Nov 2008 04:33:22 -0000 @@ -29,6 +29,42 @@ function statistics_update_1000() { } /** + * @defgroup updates-6.x-to-7.x Statistic updates from 6.x to 7.x + * @{ + */ + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function statistics_update_7000() { + $ret = array(); + + $schema['accesslog'] = array( + 'fields' => array( + 'sid' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ + +/** * Implementation of hook_uninstall(). */ function statistics_uninstall() { @@ -59,8 +95,7 @@ function statistics_schema() { 'sid' => array( 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Browser session ID of user that visited page.', ), 'title' => array( Index: modules/system/system.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v retrieving revision 1.110 diff -u -p -r1.110 system.admin.inc --- modules/system/system.admin.inc 26 Nov 2008 13:54:05 -0000 1.110 +++ modules/system/system.admin.inc 27 Nov 2008 04:33:22 -0000 @@ -1796,7 +1796,7 @@ function system_status($check = FALSE) { } // MySQL import might have set the uid of the anonymous user to autoincrement // value. Let's try fixing it. See http://drupal.org/node/204411 - db_query("UPDATE {users} SET uid = uid - uid WHERE name = '' AND pass = '' AND status = 0"); + db_query("UPDATE {users} SET uid = uid - uid WHERE name = 'default' AND pass = 'default' AND status = 0"); return theme('status_report', $requirements); } Index: modules/system/system.install =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.install,v retrieving revision 1.288 diff -u -p -r1.288 system.install --- modules/system/system.install 25 Nov 2008 13:16:39 -0000 1.288 +++ modules/system/system.install 27 Nov 2008 04:33:22 -0000 @@ -351,15 +351,15 @@ function system_install() { // uid 2 which is not what we want. So we insert the first user here, the // anonymous user. uid is 1 here for now, but very soon it will be changed // to 0. - db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', ''); + db_query("INSERT INTO {users} (name, pass, status) VALUES ('default', 'default', 0)"); // We need some placeholders here as name and mail are uniques and data is // presumed to be a serialized array. Install will change uid 1 immediately // anyways. So we insert the superuser here, the uid is 2 here for now, but // very soon it will be changed to 1. - db_query("INSERT INTO {users} (name, mail, created, status, data) VALUES('%s', '%s', %d, %d, '%s')", 'placeholder-for-uid-1', 'placeholder-for-uid-1', REQUEST_TIME, 1, serialize(array())); + db_query("INSERT INTO {users} (name, mail, created, status, data) VALUES ('%s', '%s', %d, %d, '%s')", 'placeholder-for-uid-1', 'placeholder-for-uid-1', REQUEST_TIME, 1, serialize(array())); // This sets the above two users uid 0 (anonymous). We avoid an explicit 0 // otherwise MySQL might insert the next auto_increment value. - db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", ''); + db_query("UPDATE {users} SET uid = uid - uid WHERE name = 'default'"); // This sets uid 1 (superuser). We skip uid 2 but that's not a big problem. db_query("UPDATE {users} SET uid = 1 WHERE name = '%s'", 'placeholder-for-uid-1'); @@ -378,15 +378,15 @@ function system_install() { db_query("INSERT INTO {variable} (name, value) VALUES ('%s', '%s')", 'theme_default', 's:7:"garland";'); db_query("UPDATE {system} SET status = %d WHERE type = '%s' AND name = '%s'", 1, 'theme', 'garland'); - db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', '%s', %d)", 'user', 'login', 'garland', 1, 0, 'left', '', -1); - db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', '%s', %d)", 'user', 'navigation', 'garland', 1, 0, 'left', '', -1); - db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', '%s', %d)", 'system', 'powered-by', 'garland', 1, 10, 'footer', '', -1); + db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', NULL, %d)", 'user', 'login', 'garland', 1, 0, 'left', -1); + db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', NULL, %d)", 'user', 'navigation', 'garland', 1, 0, 'left', -1); + db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', NULL, %d)", 'system', 'powered-by', 'garland', 1, 10, 'footer', -1); db_query("INSERT INTO {node_access} (nid, gid, realm, grant_view, grant_update, grant_delete) VALUES (%d, %d, '%s', %d, %d, %d)", 0, 0, 'all', 1, 0, 0); // Add input formats. db_query("INSERT INTO {filter_formats} (name, roles, cache) VALUES ('%s', '%s', %d)", 'Filtered HTML', ',1,2,', 1); - db_query("INSERT INTO {filter_formats} (name, roles, cache) VALUES ('%s', '%s', %d)", 'Full HTML', '', 1); + db_query("INSERT INTO {filter_formats} (name, roles, cache) VALUES ('%s', NULL, %d)", 'Full HTML', 1); // Enable filters for each input format. @@ -431,13 +431,12 @@ function system_schema() { 'description' => 'The name of the variable.', 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'value' => array( 'description' => 'The value of the variable.', 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', ), ), @@ -458,20 +457,18 @@ function system_schema() { 'description' => 'The object that that action acts on (node, user, comment, system or custom types.)', 'type' => 'varchar', 'length' => 32, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'callback' => array( 'description' => 'The callback function that executes when the action runs.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'parameters' => array( 'description' => 'Parameters to be passed to the callback function.', 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, 'size' => 'big', ), 'description' => array( @@ -511,7 +508,7 @@ function system_schema() { 'description' => "A string token generated against the current user's session id and the batch id, used to ensure that only the user who submitted the batch can effectively access it.", 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, + 'not null' => FALSE, ), 'timestamp' => array( 'description' => 'A Unix timestamp indicating when this batch was submitted for processing. Stale batches are purged at cron time.', @@ -544,8 +541,7 @@ function system_schema() { 'description' => 'IP address', 'type' => 'varchar', 'length' => 32, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), ), 'indexes' => array( @@ -561,8 +557,7 @@ function system_schema() { 'description' => 'Primary Key: Unique cache ID.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'data' => array( 'description' => 'A collection of data to cache.', @@ -630,22 +625,19 @@ function system_schema() { 'description' => 'Name of the file with no path components. This may differ from the basename of the filepath if the file is renamed to avoid overwriting an existing file.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'filepath' => array( 'description' => 'Path of the file relative to Drupal root.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'filemime' => array( 'description' => "The file's MIME type.", 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'filesize' => array( 'description' => 'The size of the file in bytes.', @@ -688,15 +680,13 @@ function system_schema() { 'description' => 'Name of event (e.g. contact).', 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'hostname' => array( 'description' => 'Hostname of the visitor.', 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'timestamp' => array( 'description' => 'Timestamp of the event.', @@ -745,25 +735,23 @@ function system_schema() { 'description' => 'Primary Key: the Drupal path this entry describes', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'load_functions' => array( 'description' => 'A serialized array of function names (like node_load) to be called to load an object corresponding to a part of the current path.', 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, ), 'to_arg_functions' => array( 'description' => 'A serialized array of function names (like user_uid_optional_to_arg) to be called to replace a part of the router path with another string.', 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, ), 'access_callback' => array( 'description' => 'The callback which determines the access to this router path. Defaults to user_access.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'access_arguments' => array( 'description' => 'A serialized array of arguments for the access callback.', @@ -774,8 +762,7 @@ function system_schema() { 'description' => 'The name of the function that renders the page.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'page_arguments' => array( 'description' => 'A serialized array of arguments for the page callback.', @@ -799,36 +786,31 @@ function system_schema() { 'description' => 'Only for local tasks (tabs) - the router path of the parent page (which may also be a local task).', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'tab_root' => array( 'description' => 'Router path of the closest non-tab parent page. For pages that are not local tasks, this will be the same as the path.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'title' => array( 'description' => 'The title for the current page, or the title for the tab if this is a local task.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'title_callback' => array( 'description' => 'A function which will alter the title. Defaults to t()', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'title_arguments' => array( 'description' => 'A serialized array of arguments for the title callback. If empty, the title will be used as the sole argument for the title callback.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'type' => array( 'description' => 'Numeric representation of the type of the menu item, like MENU_LOCAL_TASK.', @@ -840,20 +822,18 @@ function system_schema() { 'description' => 'Name of a function used to render the block on the system administration page for this item.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'description' => array( 'description' => 'A description of this item.', 'type' => 'text', - 'not null' => TRUE, + 'not null' => FALSE, ), 'position' => array( 'description' => 'The position of the block (left or right) on the system administration page for this item.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'weight' => array( 'description' => 'Weight of the element. Lighter weights are higher up, heavier weights go down.', @@ -876,8 +856,7 @@ function system_schema() { 'description' => "The menu name. All links with the same menu name (such as 'navigation') are part of the same menu.", 'type' => 'varchar', 'length' => 32, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'mlid' => array( 'description' => 'The menu link ID (mlid) is the integer primary key.', @@ -896,22 +875,19 @@ function system_schema() { 'description' => 'The Drupal path or external path this link points to.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'router_path' => array( 'description' => 'For links corresponding to a Drupal path (external = 0), this connects the link to a {menu_router}.path for joins.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'link_title' => array( - 'description' => 'The text displayed for the link, which may be modified by a title callback stored in {menu_router}.', + 'description' => 'The text displayed for the link, which may be modified by a title callback stored in {menu_router}.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'options' => array( 'description' => 'A serialized array of options to be passed to the url() or l() function, such as a query string or HTML attributes.', @@ -1060,35 +1036,31 @@ function system_schema() { 'description' => 'The name of the function, class, or interface.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'type' => array( 'description' => 'Either function or class or interface.', 'type' => 'varchar', 'length' => 9, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'filename' => array( 'description' => 'Name of the file.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, + 'not null' => FALSE, ), 'module' => array( 'description' => 'Name of the module the file belongs to.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '' + 'not null' => FALSE, ), 'suffix' => array( 'description' => "The part of the function name after the module, which is the hook this function implements, if any.", 'type' => 'varchar', 'length' => 68, - 'not null' => TRUE, - 'default' => '' + 'not null' => FALSE, ), 'weight' => array( 'description' => "The order in which this module's hooks should be invoked relative to other modules. Equal-weighted modules are ordered by name.", @@ -1110,13 +1082,13 @@ function system_schema() { 'description' => 'Path to the file.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, + 'not null' => FALSE, ), 'md5' => array( 'description' => "Md5 hash of the file's contents when last parsed.", 'type' => 'varchar', 'length' => 32, - 'not null' => TRUE, + 'not null' => FALSE, ), ), 'primary key' => array('filename'), @@ -1135,15 +1107,13 @@ function system_schema() { 'description' => "Primary key: A session ID. The value is generated by PHP's Session API.", 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'hostname' => array( 'description' => 'The IP address that last used this session ID (sid).', 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'timestamp' => array( 'description' => 'The Unix timestamp when this session last requested a page. Old records are purged by PHP automatically.', @@ -1178,29 +1148,25 @@ function system_schema() { 'description' => 'The path of the primary file for this item, relative to the Drupal root; e.g. modules/node/node.module.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'name' => array( 'description' => 'The name of the item; e.g. node.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'type' => array( 'description' => 'The type of the item, either module, theme, or theme_engine.', 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'owner' => array( 'description' => "A theme's 'parent' . Can be either a theme or an engine.", 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'status' => array( 'description' => 'Boolean indicating whether or not this item is enabled.', @@ -1246,22 +1212,20 @@ function system_schema() { 'description' => 'The Drupal path this alias is for; e.g. node/12.', 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'dst' => array( 'description' => 'The alias for this path; e.g. title-of-the-story.', 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, ), 'language' => array( - 'description' => 'The language this alias is for; if blank, the alias will be used for unknown languages. Each Drupal path can have an alias for each supported language.', + 'description' => 'The language this alias is for; if \'default\', the alias will be used for unknown languages. Each Drupal path can have an alias for each supported language.', 'type' => 'varchar', 'length' => 12, 'not null' => TRUE, - 'default' => '', + 'default' => 'default', ), ), 'unique keys' => array( @@ -3143,6 +3107,346 @@ function system_update_7015() { } /** + * Replace default language from '' to 'default'. + */ +function system_update_7016() { + $ret = array(); + + $schema['url_alias'] = array( + 'fields' => array( + 'language' => array( + 'type' => 'varchar', + 'length' => 12, + 'not null' => TRUE, + 'default' => 'default', + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = 'default' WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function system_update_7017() { + $ret = array(); + + $schema['variable'] = array( + 'fields' => array( + 'name' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + 'value' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + ), + ); + + $schema['actions'] = array( + 'fields' => array( + 'type' => array( + 'type' => 'varchar', + 'length' => 32, + 'not null' => FALSE, + ), + 'callback' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'parameters' => array( + 'type' => 'text', + 'not null' => FALSE, + 'size' => 'big', + ), + ), + ); + + $schema['batch'] = array( + 'fields' => array( + 'token' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + ), + ); + + $schema['blocked_ips'] = array( + 'fields' => array( + 'ip' => array( + 'type' => 'varchar', + 'length' => 32, + 'not null' => FALSE, + ), + ), + ); + + $schema['cache'] = array( + 'fields' => array( + 'cid' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + $schema['cache_form'] = $schema['cache']; + $schema['cache_page'] = $schema['cache']; + $schema['cache_menu'] = $schema['cache']; + $schema['cache_registry'] = $schema['cache']; + + $schema['files'] = array( + 'fields' => array( + 'filename' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'filepath' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'filemime' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + $schema['flood'] = array( + 'fields' => array( + 'event' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + 'hostname' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + ), + ); + + $schema['menu_router'] = array( + 'fields' => array( + 'path' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'load_functions' => array( + 'type' => 'text', + 'not null' => FALSE, + ), + 'to_arg_functions' => array( + 'type' => 'text', + 'not null' => FALSE, + ), + 'access_callback' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'page_callback' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'tab_parent' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'tab_root' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'title' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'title_callback' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'title_arguments' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'block_callback' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'position' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'description' => array( + 'type' => 'text', + 'not null' => FALSE, + ), + ), + ); + + $schema['menu_links'] = array( + 'fields' => array( + 'menu_name' => array( + 'type' => 'varchar', + 'length' => 32, + 'not null' => FALSE, + ), + 'link_path' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'router_path' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'link_title' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + $schema['registry'] = array( + 'fields' => array( + 'name' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'type' => array( + 'type' => 'varchar', + 'length' => 9, + 'not null' => FALSE, + ), + 'filename' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'module' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'suffix' => array( + 'type' => 'varchar', + 'length' => 68, + 'not null' => FALSE, + ), + ), + ); + + $schema['registry_file'] = array( + 'fields' => array( + 'filename' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'md5' => array( + 'type' => 'varchar', + 'length' => 32, + 'not null' => FALSE, + ), + ), + ); + + $schema['sessions'] = array( + 'fields' => array( + 'sid' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + 'hostname' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + ), + ); + + $schema['system'] = array( + 'fields' => array( + 'filename' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'name' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'type' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'owner' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + $schema['url_alias'] = array( + 'fields' => array( + 'src' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + 'dst' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** * @} End of "defgroup updates-6.x-to-7.x" * The next series of updates should start at 8000. */ Index: modules/system/system.module =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.module,v retrieving revision 1.649 diff -u -p -r1.649 system.module --- modules/system/system.module 26 Nov 2008 18:56:16 -0000 1.649 +++ modules/system/system.module 27 Nov 2008 04:33:22 -0000 @@ -1609,13 +1609,13 @@ function system_actions_manage() { } $row = array(); - $instances_present = db_fetch_object(db_query("SELECT aid FROM {actions} WHERE parameters <> ''")); + $instances_present = db_fetch_object(db_query("SELECT aid FROM {actions} WHERE parameters <> 'default'")); $header = array( array('data' => t('Action type'), 'field' => 'type'), array('data' => t('Description'), 'field' => 'description'), array('data' => $instances_present ? t('Operations') : '', 'colspan' => '2') ); - $sql = 'SELECT * FROM {actions}'; + $sql = "SELECT * FROM {actions} WHERE parameters <> 'default'"; $result = pager_query($sql . tablesort_sql($header), 50); while ($action = db_fetch_object($result)) { $row[] = array( @@ -1713,7 +1713,7 @@ function system_actions_configure($form_ if (is_numeric($action)) { $aid = $action; // Load stored parameter values from database. - $data = db_fetch_object(db_query("SELECT * FROM {actions} WHERE aid = '%s'", $aid)); + $data = db_fetch_object(db_query("SELECT * FROM {actions} WHERE aid = '%s' AND parameters <> 'default'", $aid)); $edit['actions_description'] = $data->description; $edit['actions_type'] = $data->type; $function = $data->callback; Index: modules/taxonomy/taxonomy.install =================================================================== RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.install,v retrieving revision 1.8 diff -u -p -r1.8 taxonomy.install --- modules/taxonomy/taxonomy.install 15 Nov 2008 13:01:10 -0000 1.8 +++ modules/taxonomy/taxonomy.install 27 Nov 2008 04:33:22 -0000 @@ -24,8 +24,7 @@ function taxonomy_schema() { 'name' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The term name.', ), 'description' => array( @@ -155,8 +154,7 @@ function taxonomy_schema() { 'name' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The name of the synonym.', ), ), @@ -179,8 +177,7 @@ function taxonomy_schema() { 'name' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Name of the vocabulary.', ), 'description' => array( @@ -192,8 +189,7 @@ function taxonomy_schema() { 'help' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Help text to display for the vocabulary.', ), 'relations' => array( @@ -239,8 +235,7 @@ function taxonomy_schema() { 'module' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The module which created the vocabulary.', ), 'weight' => array( @@ -270,8 +265,7 @@ function taxonomy_schema() { 'type' => array( 'type' => 'varchar', 'length' => 32, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'The {node}.type of the node type for which the vocabulary may be used.', ), ), @@ -284,3 +278,78 @@ function taxonomy_schema() { return $schema; } +/** + * @defgroup updates-6.x-to-7.x Taxonomy updates from 6.x to 7.x + * @{ + */ + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function taxonomy_update_7000() { + $ret = array(); + + $schema['term_data'] = array( + 'fields' => array( + 'name' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + $schema['term_synonym'] = array( + 'fields' => array( + 'name' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + $schema['vocabulary'] = array( + 'fields' => array( + 'name' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'help' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'module' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + $schema['vocabulary_node_types'] = array( + 'fields' => array( + 'type' => array( + 'type' => 'varchar', + 'length' => 32, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/trigger/trigger.install =================================================================== RCS file: /cvs/drupal/drupal/modules/trigger/trigger.install,v retrieving revision 1.6 diff -u -p -r1.6 trigger.install --- modules/trigger/trigger.install 15 Nov 2008 13:01:10 -0000 1.6 +++ modules/trigger/trigger.install 27 Nov 2008 04:33:22 -0000 @@ -30,22 +30,19 @@ function trigger_schema() { 'hook' => array( 'type' => 'varchar', 'length' => 32, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Primary Key: The name of the internal Drupal hook upon which an action is firing; for example, nodeapi.', ), 'op' => array( 'type' => 'varchar', 'length' => 32, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Primary Key: The specific operation of the hook upon which an action is firing: for example, presave.', ), 'aid' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => "Primary Key: Action's {actions}.aid.", ), 'weight' => array( @@ -57,7 +54,52 @@ function trigger_schema() { ), 'primary key' => array('hook', 'op', 'aid'), ); + return $schema; } +/** + * @defgroup updates-6.x-to-7.x Trigger updates from 6.x to 7.x + * @{ + */ + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function trigger_update_7000() { + $ret = array(); + + $schema['trigger_assignments'] = array( + 'fields' => array( + 'hook' => array( + 'type' => 'varchar', + 'length' => 32, + 'not null' => FALSE, + ), + 'op' => array( + 'type' => 'varchar', + 'length' => 32, + 'not null' => FALSE, + ), + 'aid' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/update/update.install =================================================================== RCS file: /cvs/drupal/drupal/modules/update/update.install,v retrieving revision 1.6 diff -u -p -r1.6 update.install --- modules/update/update.install 15 Nov 2008 13:01:11 -0000 1.6 +++ modules/update/update.install 27 Nov 2008 04:33:22 -0000 @@ -62,3 +62,31 @@ function update_update_6000() { _update_remove_update_status_variables(); return array(); } + +/** + * @defgroup updates-6.x-to-7.x Update updates from 6.x to 7.x + * @{ + */ + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function update_update_7000() { + $ret = array(); + + $schema['cache_update'] = drupal_get_schema_unprocessed('system', 'cache'); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/upload/upload.install =================================================================== RCS file: /cvs/drupal/drupal/modules/upload/upload.install,v retrieving revision 1.8 diff -u -p -r1.8 upload.install --- modules/upload/upload.install 15 Nov 2008 13:01:11 -0000 1.8 +++ modules/upload/upload.install 27 Nov 2008 04:33:22 -0000 @@ -52,8 +52,7 @@ function upload_schema() { 'description' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Description of the uploaded file.', ), 'list' => array( @@ -82,4 +81,38 @@ function upload_schema() { return $schema; } +/** + * @defgroup updates-6.x-to-7.x Upload updates from 6.x to 7.x + * @{ + */ + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. + */ +function upload_update_7000() { + $ret = array(); + + $schema['upload'] = array( + 'fields' => array( + 'description' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/user/user.install =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.install,v retrieving revision 1.15 diff -u -p -r1.15 user.install --- modules/user/user.install 20 Nov 2008 06:56:17 -0000 1.15 +++ modules/user/user.install 27 Nov 2008 04:33:22 -0000 @@ -23,15 +23,13 @@ function user_schema() { 'authname' => array( 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Unique authentication name.', ), 'module' => array( 'type' => 'varchar', 'length' => 128, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Module which is controlling the authentication.', ), ), @@ -53,8 +51,7 @@ function user_schema() { 'permission' => array( 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'A single permission granted to the role identified by rid.', ), ), @@ -76,8 +73,7 @@ function user_schema() { 'name' => array( 'type' => 'varchar', 'length' => 64, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => 'Unique role name.', ), ), @@ -100,35 +96,32 @@ function user_schema() { 'type' => 'varchar', 'length' => 60, 'not null' => TRUE, - 'default' => '', + 'default' => 'default', 'description' => 'Unique user name.', ), 'pass' => array( 'type' => 'varchar', 'length' => 128, 'not null' => TRUE, - 'default' => '', + 'default' => 'default', 'description' => "User's password (hashed).", ), 'mail' => array( 'type' => 'varchar', 'length' => 64, 'not null' => FALSE, - 'default' => '', 'description' => "User's email address.", ), 'theme' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => "User's default theme.", ), 'signature' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => "User's signature.", ), 'created' => array( @@ -166,21 +159,19 @@ function user_schema() { 'type' => 'varchar', 'length' => 12, 'not null' => TRUE, - 'default' => '', + 'default' => 'default', 'description' => "User's default language.", ), 'picture' => array( 'type' => 'varchar', 'length' => 255, - 'not null' => TRUE, - 'default' => '', + 'not null' => FALSE, 'description' => "Path to the user's uploaded picture.", ), 'init' => array( 'type' => 'varchar', 'length' => 64, 'not null' => FALSE, - 'default' => '', 'description' => 'Email address used for initial account creation.', ), 'data' => array( @@ -230,7 +221,7 @@ function user_schema() { } /** - * @defgroup user-updates-6.x-to-7.x User updates from 6.x to 7.x + * @defgroup updates-6.x-to-7.x User updates from 6.x to 7.x * @{ */ @@ -360,7 +351,149 @@ function user_update_7002(&$sandbox) { } /** - * @} End of "defgroup user-updates-6.x-to-7.x" - * The next series of updates should start at 8000. + * Replace default language from '' to 'default'. + */ +function user_update_7003() { + $ret = array(); + + $schema['users'] = array( + 'fields' => array( + 'language' => array( + 'type' => 'varchar', + 'length' => 12, + 'not null' => TRUE, + 'default' => 'default', + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = 'default' WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * Replace fields default value from '' to 'default'. + */ +function user_update_7004() { + $ret = array(); + + $schema['users'] = array( + 'fields' => array( + 'name' => array( + 'type' => 'varchar', + 'length' => 60, + 'not null' => TRUE, + 'default' => 'default', + 'description' => 'Unique user name.', + ), + 'pass' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => TRUE, + 'default' => 'default', + 'description' => "User's password (hashed).", + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = 'default' WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * Replace not null CHAR, VARCHAR, TEXT or BLOB fields with default '' as nullable. */ +function user_update_7005() { + $ret = array(); + $schema['authmap'] = array( + 'fields' => array( + 'authname' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + 'module' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => FALSE, + ), + ), + ); + + $schema['role_permission'] = array( + 'fields' => array( + 'permission' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + ), + ); + + $schema['role'] = array( + 'fields' => array( + 'name' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + ), + ); + + $schema['users'] = array( + 'fields' => array( + 'mail' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + 'theme' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'signature' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'picture' => array( + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + ), + 'init' => array( + 'type' => 'varchar', + 'length' => 64, + 'not null' => FALSE, + ), + ), + ); + + foreach ($schema as $table => $fields) { + foreach ($fields['fields'] as $field => $def) { + db_change_field($ret, $table, $field, $field, $def); + $ret[] = update_sql("UPDATE {" . $table . "} SET " . $field . " = NULL WHERE " . $field . " = ''"); + } + } + + return $ret; +} + +/** + * @} End of "defgroup updates-6.x-to-7.x" + * The next series of updates should start at 8000. + */ Index: modules/user/user.test =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.test,v retrieving revision 1.22 diff -u -p -r1.22 user.test --- modules/user/user.test 25 Nov 2008 13:14:29 -0000 1.22 +++ modules/user/user.test 27 Nov 2008 04:33:22 -0000 @@ -43,7 +43,7 @@ class UserRegistrationTestCase extends D $this->assertTrue(($user->created > REQUEST_TIME - 20 ), t('Correct creation time.')); $this->assertEqual($user->status, variable_get('user_register', 1) == 1 ? 1 : 0, t('Correct status field.')); $this->assertEqual($user->timezone, variable_get('date_default_timezone', NULL), t('Correct time zone field.')); - $this->assertEqual($user->language, '', t('Correct language field.')); + $this->assertEqual($user->language, 'default', t('Correct language field.')); $this->assertEqual($user->picture, '', t('Correct picture field.')); $this->assertEqual($user->init, $mail, t('Correct init field.'));