Index: cck/content_views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/content_views.inc,v
retrieving revision 1.4
diff -u -r1.4 content_views.inc
--- cck/content_views.inc	19 Dec 2006 00:54:50 -0000	1.4
+++ cck/content_views.inc	30 Dec 2006 14:39:58 -0000
@@ -129,7 +129,7 @@
     }
     $query = "SELECT ".implode(', ', $query_columns).
              " FROM {node} node".
-             " LEFT JOIN {node_data_$field[field_name]} node_data_$field[field_name] ON node.vid = node_data_$field[field_name].vid".
+             " LEFT JOIN {". $field_info['content_db_info']['table'] ."} node_data_$field[field_name] ON node.vid = ". $field_info['content_db_info']['table'] .".vid".
              " WHERE node.nid = ".$data->nid.
              " ORDER BY node_data_$field[field_name].delta";
     $result = db_query(db_rewrite_sql($query, 'node'));
Index: cck/content.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/content.module,v
retrieving revision 1.99
diff -u -r1.99 content.module
--- cck/content.module	22 Dec 2006 12:31:59 -0000	1.99
+++ cck/content.module	30 Dec 2006 15:08:28 -0000
@@ -208,9 +208,14 @@
  * Delete node type fields.
  */
 function content_delete(&$node) {
-  _content_field_invoke('delete', $node);
-  _content_field_invoke_default('delete', $node);
-  db_query('DELETE FROM {'. 'node_'. $node->type .'} WHERE nid = %d', $node->nid);
+  $type = content_types($node->type);
+  if (!empty($type['fields'])) {
+    _content_field_invoke('delete', $node);
+    _content_field_invoke_default('delete', $node);
+  }
+  if (db_table_exists($type['table'])) {
+    db_query('DELETE FROM {'. $type['table'] .'} WHERE nid = %d', $node->nid);
+  }
   cache_clear_all('content:'. $node->nid, 'cache', TRUE);
 }
 
@@ -218,12 +223,15 @@
  * delete node type fields for a revision.
  */
 function content_delete_revision(&$node) {
-  if (content_types($node->type)) {
-    _content_field_invoke('delete revision', $node);
-    _content_field_invoke_default('delete revision', $node);
-    db_query('DELETE FROM {'. 'node_'. $node->type .'} WHERE vid = %d', $node->vid);
-    cache_clear_all('content:'. $node->nid .':'. $node->vid, 'cache');
+  $type = content_types($node->type);
+  if (!empty($type['fields'])) {
+     _content_field_invoke('delete revision', $node);
+     _content_field_invoke_default('delete revision', $node);
+  }
+  if (db_table_exists($type['table'])) {
+    db_query('DELETE FROM {'. $type['table'] .'} WHERE vid = %d', $node->vid);
   }
+  cache_clear_all('content:'. $node->nid .':'. $node->vid, 'cache');
 }
 
 /**
@@ -708,6 +716,7 @@
       $type_result = db_query('SELECT * FROM {node_type} nt ORDER BY nt.type ASC');
       while ($type = db_fetch_array($type_result)) {
         $type['url_str'] = str_replace('_', '-', $type['type']);
+        $type['table'] = _content_tablename($type['type']);
         $type['fields'] = array();
         $field_result = db_query("SELECT nfi.field_name, nfi.weight, nfi.label, nfi.widget_type, nfi.widget_settings, nfi.description FROM {node_field_instance} nfi WHERE nfi.type_name = '%s' ORDER BY nfi.weight ASC, nfi.label ASC", $type['type']);
         while ($field = db_fetch_array($field_result)) {
@@ -790,10 +799,11 @@
   $db_info = array();
 
   if ($field['db_storage'] == CONTENT_DB_STORAGE_PER_FIELD) {
-    $db_info['table'] = 'node_data_'. $field['field_name'];
+    $db_info['table'] = _content_tablename($field['field_name'], 'field');
   }
   else {
-    $db_info['table'] = 'node_'. $field['type_name'];
+    $type = content_types($field['type_name']);
+    $db_info['table'] = $type['table'];
   }
 
   if (is_array($columns) && count($columns)) {
@@ -907,3 +917,24 @@
 
   return $output;
 }
+
+
+/**
+ * Generate a table name for a field or a content type.
+ *
+ * @param $name
+ *   The name of the content type or content field
+ * @param $entity
+ *   'field' or 'type'
+ *
+ * @return
+ *   A string containing the generated name for the database table
+ */
+function _content_tablename($name, $entity = 'type') {
+  switch ($entity) {
+    case 'type' :
+      return 'node_'.$name;
+    case 'field' :
+      return 'node_data_'.$name;
+  }
+}
Index: cck/content_crud.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/content_crud.inc,v
retrieving revision 1.6
diff -u -r1.6 content_crud.inc
--- cck/content_crud.inc	20 Dec 2006 17:49:37 -0000	1.6
+++ cck/content_crud.inc	30 Dec 2006 15:40:53 -0000
@@ -21,11 +21,9 @@
   }
 
   foreach ($db_types as $content_type) {
-    // Find content types that are missing the node_ table and add it
-    if (!db_table_exists('node_'. $content_type['type']) && !db_table_exists('node_'. $content_type['orig_type'])) {
-      $info = new StdClass();
-      $info->type = $content_type['type'];
-      content_type_create($info);
+    // Find content types that are missing the content table and add it
+    if (!db_table_exists($content_type['table'])) {
+      content_type_create((object)array('type' => $content_type['type']));
     }
   }
   content_clear_type_cache();
@@ -39,11 +37,14 @@
  */
 function content_type_create($info) {
   
-  if (!db_table_exists('node_'. $info->type)) {
+  content_clear_type_cache();
+  $type = content_types($info->type);
+  if (!db_table_exists($type['table'])) {
+
     switch ($GLOBALS['db_type']) {
       case 'mysql':
       case 'mysqli':
-        db_query("CREATE TABLE {node_". $info->type ."} (
+        db_query("CREATE TABLE {". $type['table'] ."} (
           vid int unsigned NOT NULL default '0',
           nid int unsigned NOT NULL default '0',
           PRIMARY KEY (vid)
@@ -51,14 +52,14 @@
       break;
 
       case 'pgsql':
-        db_query("CREATE TABLE {node_". $info->type ."} (
+        db_query("CREATE TABLE {". $type['table'] ."} (
           vid integer unsigned NOT NULL default '0',
           nid integer unsigned NOT NULL default '0',
           PRIMARY KEY (vid)
         )");
       break;
     }
-    drupal_set_message(t('The content fields table node_%name has been created.', array('%name' => $info->type)));
+    drupal_set_message(t('The content fields table %name has been created.', array('%name' => $type['table'])));
   }
   content_clear_type_cache();
 }
@@ -76,19 +77,22 @@
     db_query("UPDATE {node_field_instance} SET type_name='%s' WHERE type_name='%s'", array($info->type, $info->old_type));
 
     // Rename the content fields table to match new content type name.
-    $old_name = 'node_'. $info->old_type;
-    $new_name = 'node_'. $info->type;
-    switch ($GLOBALS['db_type']) {
-      case 'mysql':
-      case 'mysqli':
-        db_query("RENAME TABLE {$old_name} TO {$new_name}");
-        break;
-
-      case 'pgsql':
-        db_query("ALTER TABLE {$old_name} RENAME TO {$new_name}");
-        break;
+    $old_type = content_types($info->old_type);
+    $old_name = $old_type['table'];
+    $new_name = _content_tablename($info->type);
+    if (db_table_exists($old_name)) {
+      switch ($GLOBALS['db_type']) {
+        case 'mysql':
+        case 'mysqli':
+          db_query("RENAME TABLE {$old_name} TO {$new_name}");
+          break;
+
+        case 'pgsql':
+          db_query("ALTER TABLE {$old_name} RENAME TO {$new_name}");
+          break;
+      }
+      drupal_set_message(t('Content fields table %old_name has been renamed to %new_name and field instances have been updated.', array('%old_name' => $old_name, '%new_name' => $new_name)));
     }
-    drupal_set_message(t('Content fields table %old_name has been renamed to %new_name and field instances have been updated.', array('%old_name' => $old_name, '%new_name' => $new_name)));
   }
   // reset all content type info
   content_clear_type_cache();
@@ -99,23 +103,18 @@
  *
  * @param $info
  *   value supplied by hook_node_type()
- * @return
- *   The number of fields deleted.
  */
 function content_type_delete($info) {
-
-  $result = db_query("SELECT field_name FROM {node_field_instance} WHERE type_name = '%s'", $info->type);
-  $field_names = array();
-  while ($type = db_fetch_array($result)) {
-    $field_names[] = $type['field_name'];
-  }
-  foreach ($field_names as $field_name) {
-    content_field_instance_delete(array('type_name' => $info->type, 'field_name' => $field_name));
+  // we grab the info here while it's still available
+  $type = content_types($info->type);
+  
+  foreach ($type['fields'] as $field) {
+    content_field_instance_delete(array('type_name' => $info->type, 'field_name' => $field['field_name']));
   }
 
-  if (db_table_exists("node_". $info->type)) {
-    db_query("DROP TABLE {node_". $info->type ."}");
-    drupal_set_message(t('The content fields table node_%name has been deleted.', array('%name' => $info->type)));
+  if (db_table_exists($type['table'])) {
+    db_query('DROP TABLE {'. $type['table'] .'}');
+    drupal_set_message(t('The content fields table %name has been deleted.', array('%name' => $type['table'])));
   }
 
   // reset all content type info
