? profiles/simpletest
? sites/default/modules
? sites/default/settings.php
Index: modules/block/block.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/block/block.admin.inc,v
retrieving revision 1.31
diff -u -p -r1.31 block.admin.inc
--- modules/block/block.admin.inc	22 Nov 2008 11:14:48 -0000	1.31
+++ modules/block/block.admin.inc	27 Nov 2008 05:22:21 -0000
@@ -99,9 +99,18 @@ function block_admin_display_form(&$form
  */
 function block_admin_display_form_submit($form, &$form_state) {
   foreach ($form_state['values'] as $block) {
-    $block['status'] = $block['region'] != BLOCK_REGION_NONE;
+    $block['status'] = (int) ($block['region'] != BLOCK_REGION_NONE);
     $block['region'] = $block['status'] ? $block['region'] : '';
-    db_query("UPDATE {block} SET status = %d, weight = %d, region = '%s' WHERE module = '%s' AND delta = '%s' AND theme = '%s'", $block['status'], $block['weight'], $block['region'], $block['module'], $block['delta'], $block['theme']);
+    db_update('block')
+      ->fields(array(
+        'status' => $block['status'],
+        'weight' => $block['weight'],
+        'region' => $block['region'],
+      ))
+      ->condition('module', $block['module'])
+      ->condition('delta', $block['delta'])
+      ->condition('theme', $block['theme'])
+      ->execute();
   }
   drupal_set_message(t('The block settings have been updated.'));
   cache_clear_all();
@@ -154,7 +163,7 @@ function block_admin_configure(&$form_st
     '#value' => $delta,
   );
 
-  $edit = db_fetch_array(db_query("SELECT pages, visibility, custom, title FROM {block} WHERE module = '%s' AND delta = '%s'", $module, $delta));
+  $edit = db_query("SELECT pages, visibility, custom, title FROM {block} WHERE module = :module AND delta = :delta", array(':module' => $module, ':delta' => $delta))->fetchAssoc();
 
   $form['block_settings'] = array(
     '#type' => 'fieldset',
@@ -208,7 +217,7 @@ function block_admin_configure(&$form_st
       '#type' => 'radios',
       '#title' => t('Show block on specific pages'),
       '#options' => $options,
-      '#default_value' => $edit['visibility'],
+      '#default_value' => (int) $edit['visibility'],
     );
     $form['page_vis_settings']['pages'] = array(
       '#type' => 'textarea',
@@ -219,16 +228,8 @@ function block_admin_configure(&$form_st
   }
 
   // Role-based visibility settings.
-  $default_role_options = array();
-  $result = db_query("SELECT rid FROM {block_role} WHERE module = '%s' AND delta = '%s'", $module, $delta);
-  while ($role = db_fetch_object($result)) {
-    $default_role_options[] = $role->rid;
-  }
-  $result = db_query('SELECT rid, name FROM {role} ORDER BY name');
-  $role_options = array();
-  while ($role = db_fetch_object($result)) {
-    $role_options[$role->rid] = $role->name;
-  }
+  $default_role_options = db_query("SELECT rid FROM {block_role} WHERE module = :module AND delta = :delta", array(':module' => $module, ':delta' => $delta))->fetchCol();
+  $role_options = db_query('SELECT rid, name FROM {role} ORDER BY name')->fetchAllKeyed();
   $form['role_vis_settings'] = array(
     '#type' => 'fieldset',
     '#title' => t('Role specific visibility settings'),
@@ -259,7 +260,7 @@ function block_admin_configure(&$form_st
       t('Hide this block by default but let individual users show it.')
     ),
     '#description' => t('Allow individual users to customize the visibility of this block in their account settings.'),
-    '#default_value' => $edit['custom'],
+    '#default_value' => (int) $edit['custom'],
   );
 
   $form['submit'] = array(
@@ -272,7 +273,7 @@ function block_admin_configure(&$form_st
 
 function block_admin_configure_validate($form, &$form_state) {
   if ($form_state['values']['module'] == 'block') {
-    if (empty($form_state['values']['info']) || db_result(db_query("SELECT COUNT(*) FROM {box} WHERE bid != %d AND info = '%s'", $form_state['values']['delta'], $form_state['values']['info']))) {
+    if (empty($form_state['values']['info']) || db_query("SELECT COUNT(*) FROM {box} WHERE bid <> :bid AND info = :info", array(':bid' => $form_state['values']['delta'], ':info' => $form_state['values']['info']))->fetchField()) {
       form_set_error('info', t('Please ensure that each block description is unique.'));
     }
   }
@@ -280,10 +281,28 @@ function block_admin_configure_validate(
 
 function block_admin_configure_submit($form, &$form_state) {
   if (!form_get_errors()) {
-    db_query("UPDATE {block} SET visibility = %d, pages = '%s', custom = %d, title = '%s' WHERE module = '%s' AND delta = '%s'", $form_state['values']['visibility'], trim($form_state['values']['pages']), $form_state['values']['custom'], $form_state['values']['title'], $form_state['values']['module'], $form_state['values']['delta']);
-    db_query("DELETE FROM {block_role} WHERE module = '%s' AND delta = '%s'", $form_state['values']['module'], $form_state['values']['delta']);
+    db_update('block')
+      ->fields(array(
+        'visibility' => $form_state['values']['visibility'],
+        'pages' => trim($form_state['values']['pages']),
+        'custom' => $form_state['values']['custom'],
+        'title' => $form_state['values']['title'],
+      ))
+      ->condition('module', $form_state['values']['module'])
+      ->condition('delta', $form_state['values']['delta'])
+      ->execute();
+    db_delete('block_role')
+      ->condition('module', $form_state['values']['module'])
+      ->condition('delta', $form_state['values']['delta'])
+      ->execute();
     foreach (array_filter($form_state['values']['roles']) as $rid) {
-      db_query("INSERT INTO {block_role} (rid, module, delta) VALUES (%d, '%s', '%s')", $rid, $form_state['values']['module'], $form_state['values']['delta']);
+      db_insert('block_role')
+        ->fields(array(
+        'rid' => $rid,
+        'module' => $form_state['values']['module'],
+        'delta' => $form_state['values']['delta'],
+      ))
+      ->execute();
     }
     module_invoke($form_state['values']['module'], 'block', 'save', $form_state['values']['delta'], $form_state['values']);
     drupal_set_message(t('The block configuration has been saved.'));
@@ -301,7 +320,7 @@ function block_add_block_form(&$form_sta
 }
 
 function block_add_block_form_validate($form, &$form_state) {
-  if (empty($form_state['values']['info']) || db_result(db_query("SELECT COUNT(*) FROM {box} WHERE info = '%s'", $form_state['values']['info']))) {
+  if (empty($form_state['values']['info']) || db_query("SELECT COUNT(*) FROM {box} WHERE info = :info", array(':info' => $form_state['values']['info']))->fetchField()) {
     form_set_error('info', t('Please ensure that each block description is unique.'));
   }
 }
@@ -310,17 +329,41 @@ function block_add_block_form_validate($
  * Save the new custom block.
  */
 function block_add_block_form_submit($form, &$form_state) {
-  db_query("INSERT INTO {box} (body, info, format) VALUES ('%s', '%s', %d)", $form_state['values']['body'], $form_state['values']['info'], $form_state['values']['body_format']);
-  $delta = db_last_insert_id('box', 'bid');
+  $delta = db_insert('box')
+    ->fields(array(
+      'body' => $form_state['values']['body'],
+      'info' => $form_state['values']['info'],
+      'format' => $form_state['values']['body_format'],
+    ))
+    ->execute();
 
   foreach (list_themes() as $key => $theme) {
     if ($theme->status) {
-      db_query("INSERT INTO {block} (visibility, pages, custom, title, module, theme, status, weight, delta, cache) VALUES(%d, '%s', %d, '%s', '%s', '%s', %d, %d, '%s', %d)", $form_state['values']['visibility'], trim($form_state['values']['pages']), $form_state['values']['custom'], $form_state['values']['title'], $form_state['values']['module'], $theme->name, 0, 0, $delta, BLOCK_NO_CACHE);
+      db_insert('block')
+        ->fields(array(
+          'visibility' => $form_state['values']['visibility'],
+          'pages' => trim($form_state['values']['pages']),
+          'custom' => $form_state['values']['custom'],
+          'title' => $form_state['values']['title'], 
+          'module' => $form_state['values']['module'],
+          'theme' => $theme->name, 
+          'status' => 0,
+          'weight' => 0,
+          'delta' => $delta, 
+          'cache' => BLOCK_NO_CACHE,
+        ))
+        ->execute();
     }
   }
 
   foreach (array_filter($form_state['values']['roles']) as $rid) {
-    db_query("INSERT INTO {block_role} (rid, module, delta) VALUES (%d, '%s', '%s')", $rid, $form_state['values']['module'], $delta);
+    db_insert('block_role')
+      ->fields(array(
+        'rid' => $rid,
+        'module' => $form_state['values']['module'],
+        'delta' => $delta,
+      ))
+      ->execute();
   }
 
   drupal_set_message(t('The block has been created.'));
@@ -344,8 +387,13 @@ function block_box_delete(&$form_state, 
  * Deletion of custom blocks.
  */
 function block_box_delete_submit($form, &$form_state) {
-  db_query('DELETE FROM {box} WHERE bid = %d', $form_state['values']['bid']);
-  db_query("DELETE FROM {block} WHERE module = 'block' AND delta = '%s'", $form_state['values']['bid']);
+  db_delete('box')
+    ->condition('bid', $form_state['values']['bid'])
+    ->execute();
+  db_delete('block')
+    ->condition('module', 'block')
+    ->condition('delta', $form_state['values']['bid'])
+    ->execute();
   drupal_set_message(t('The block %name has been removed.', array('%name' => $form_state['values']['info'])));
   cache_clear_all();
   $form_state['redirect'] = 'admin/build/block';
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 05:22:21 -0000
@@ -136,7 +136,7 @@ function block_schema() {
         'description' => "The block's {block}.bid.",
       ),
       'body' => array(
-        'type' => 'text',
+        'type' => 'blob',
         'not null' => FALSE,
         'size' => 'big',
         'description' => 'Block contents.',
@@ -166,4 +166,23 @@ 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
+ * @{
+ */
+
+/**
+ * Remap {boxes}.body as BLOB type.
+ */
+function block_update_7000() {
+  $ret = array();
+  db_change_field($ret, 'boxes', 'body', 'body', array('type' => 'blob', 'not null' => FALSE, 'size' => 'big'));
+  return $ret;
+}
+
+/**
+ * @} End of "defgroup updates-6.x-to-7.x"
+ * The next series of updates should start at 8000.
+ */
Index: modules/block/block.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/block/block.module,v
retrieving revision 1.315
diff -u -p -r1.315 block.module
--- modules/block/block.module	15 Nov 2008 08:23:07 -0000	1.315
+++ modules/block/block.module	27 Nov 2008 05:22:21 -0000
@@ -190,7 +190,7 @@ function block_block($op = 'list', $delt
       $blocks = array();
 
       $result = db_query('SELECT bid, info FROM {box} ORDER BY info');
-      while ($block = db_fetch_object($result)) {
+      foreach ($result as $block) {
         $blocks[$block->bid]['info'] = $block->info;
         // Not worth caching.
         $blocks[$block->bid]['cache'] = BLOCK_NO_CACHE;
@@ -212,7 +212,7 @@ function block_block($op = 'list', $delt
       break;
 
     case 'view':
-      $block = db_fetch_object(db_query('SELECT body, format FROM {box} WHERE bid = %d', $delta));
+      $block = db_query('SELECT body, format FROM {box} WHERE bid = :bid', array(':bid' => $delta))->fetchObject();
       $data['content'] = check_markup($block->body, $block->format, '', FALSE);
       return $data;
   }
@@ -229,9 +229,10 @@ function _block_rehash() {
 
   init_theme();
 
-  $result = db_query("SELECT * FROM {block} WHERE theme = '%s'", $theme_key);
   $old_blocks = array();
-  while ($old_block = db_fetch_array($result)) {
+  $result = db_query("SELECT * FROM {block} WHERE theme = :theme", array(':theme' => $theme_key));
+  foreach ($result as $old_block) {
+    $old_block = is_object($old_block) ? get_object_vars($old_block) : $old_block;
     $old_blocks[$old_block['module']][$old_block['delta']] = $old_block;
   }
 
@@ -289,14 +290,18 @@ function _block_rehash() {
   // Remove blocks that are no longer defined by the code from the database.
   foreach ($old_blocks as $module => $old_module_blocks) {
     foreach ($old_module_blocks as $delta => $block) {
-      db_query("DELETE FROM {block} WHERE module = '%s' AND delta = '%s' AND theme = '%s'", $module, $delta, $theme_key);
+      db_delete('block')
+        ->condition('module', $module)
+        ->condition('delta', $delta)
+        ->condition('theme', $theme_key)
+        ->execute();
     }
   }
   return $blocks;
 }
 
 function block_box_get($bid) {
-  return db_fetch_array(db_query("SELECT * FROM {box} WHERE bid = %d", $bid));
+  return db_query("SELECT * FROM {box} WHERE bid = :bid", array(':bid' => $bid))->fetchAssoc();
 }
 
 /**
@@ -335,7 +340,14 @@ function block_box_save($edit, $delta) {
     $edit['body_format'] = FILTER_FORMAT_DEFAULT;
   }
 
-  db_query("UPDATE {box} SET body = '%s', info = '%s', format = %d WHERE bid = %d", $edit['body'], $edit['info'], $edit['body_format'], $delta);
+  db_update('box')
+    ->fields(array(
+      'body' => $edit['body'],
+      'info' => $edit['info'],
+      'format' => $edit['body_format'],
+    ))
+    ->condition('bid', $delta)
+    ->execute();
 
   return TRUE;
 }
@@ -346,9 +358,21 @@ function block_box_save($edit, $delta) {
 function block_user_form(&$edit, &$account, $category = NULL) {
   if ($category == 'account') {
     $rids = array_keys($account->roles);
-    $result = db_query("SELECT DISTINCT b.* FROM {block} b LEFT JOIN {block_role} r ON b.module = r.module AND b.delta = r.delta WHERE b.status = 1 AND b.custom != 0 AND (r.rid IN (" . db_placeholders($rids) . ") OR r.rid IS NULL) ORDER BY b.weight, b.module", $rids);
+    $select = db_select('block', 'b');
+    $select->leftJoin('block_role', 'r', 'b.module = r.module AND b.delta = r.delta');
+    $select->fields('b');
+    $select->distinct();
+    $select->condition('b.status', 1);
+    $select->condition('b.custom', 0, '<>');
+    $select->condition(db_or()
+      ->condition('r.rid', $rids, 'IN')
+      ->condition('r.rid', NULL, 'IS')
+    );
+    $select->orderBy('b.weight');
+    $select->orderBy('b.module');
+    $result = $select->execute();
     $form['block'] = array('#type' => 'fieldset', '#title' => t('Block configuration'), '#weight' => 3, '#collapsible' => TRUE, '#tree' => TRUE);
-    while ($block = db_fetch_object($result)) {
+    foreach ($result as $block) {
       $data = module_invoke($block->module, 'block', 'list');
       if ($data[$block->delta]['info']) {
         $return = TRUE;
@@ -413,8 +437,9 @@ function _block_load_blocks() {
 
   $blocks = array();
   $rids = array_keys($user->roles);
+  // @todo: Revamp with DBTNG syntax.
   $result = db_query(db_rewrite_sql("SELECT DISTINCT b.* FROM {block} b LEFT JOIN {block_role} r ON b.module = r.module AND b.delta = r.delta WHERE b.theme = '%s' AND b.status = 1 AND (r.rid IN (" . db_placeholders($rids) . ") OR r.rid IS NULL) ORDER BY b.region, b.weight, b.module", 'b', 'bid'), array_merge(array($theme_key), $rids));
-  while ($block = db_fetch_object($result)) {
+  foreach ($result as $block) {
     if (!isset($blocks[$block->region])) {
       $blocks[$block->region] = array();
     }
