? 0-views-file_managed_extras.patch
? 563020_views_object_cache_0.patch
? 667950-javascript-states-revert_1.patch
? 667950-javascript-states-revert_1_0.patch
? 667950-javascript-states-revert_1_0_2_0.patch
? 694094-drupal_static.patch
? 741234_views_empty_arg_check_null.patch
? 863478-distinct-support-broken.patch
? 870792-validation.patch
? 870792_1.patch
? 881060.patch
? 884730.patch
? 894618-filter_date-between.patch
? 895046-field_multiple.patch
? 930582-fix.patch
? 931552-fix.patch
? 931886.patch
? 931886_0.patch
? 936196-direct-loading.patch
? 949526-external-db.patch
? 952636-filter.7.patch
? 960528-tablesort.patch
? 960596-quote.patch
? 963372-process_checkbox.patch
? 963454.patch
? 971326-join_deleted.patch
? 972934-try.patch
? 974542-notice-pre_render.patch
? 975400-refactor-field_render.patch
? 975400-refactor-field_render.ptach
? 976098-field-drupal_render-notice.patch
? FALSE,
? b
? d7_views_taxonomy_handlers.patch
? filter_format_4.patch
? foo.patch
? notices.patch
? revert.patch
? sites
? table-class-fix.patch
? views-field-comment-node-link-call-time-pass-by-reference.patch
? views-filter_numeric_test_0.patch
? views-or.patch
? views-term_fields_contain_tid_only.patch
? views-term_fields_contain_tid_only.patch.1
? views-test-user_argument_default.patch
? views.aggregator_feed_item_id.patch
? views_aggregator_fid_filter.patch
? views_formatter_settings-884730-
? views_formatter_settings-884730-43.patch
? views_formatter_settings-884730-61.patch
? views_formatter_settings-884730-63.patch
? views_formatter_settings.patch
? tests/taxonomy
Index: modules/field.views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/modules/Attic/field.views.inc,v
retrieving revision 1.1.2.14
diff -u -p -r1.1.2.14 field.views.inc
--- modules/field.views.inc	14 Nov 2010 12:45:56 -0000	1.1.2.14
+++ modules/field.views.inc	27 Nov 2010 22:49:41 -0000
@@ -57,10 +57,12 @@ function field_views_field_default_views
   // The list of entity:bundle that this field is used in.
   $bundles_names = array();
   $supports_revisions = FALSE;
+  $entity_tables = array();
 
   // Build the relationships between the field table and the entity tables.
   foreach ($field['bundles'] as $entity => $bundles) {
     $entity_info = entity_get_info($entity);
+    $entity_tables[$entity_info['base table']] = $entity;
 
     $data[$current_table]['table']['join'][$entity_info['base table']] = array(
       'left_field' => $entity_info['entity keys']['id'],
@@ -95,6 +97,11 @@ function field_views_field_default_views
     $tables[FIELD_LOAD_REVISION] = $revision_table;
   }
 
+  $add_fields = array('etid', 'delta', 'language');
+  foreach ($field['columns'] as $column_name => $attributes) {
+    $add_fields[] = _field_sql_storage_columnname($field['field_name'], $column_name);
+  }
+
   // Add the field handler for this field.
   $title_short = $field['field_name'];
   foreach ($tables as $type => $table) {
@@ -119,7 +126,9 @@ function field_views_field_default_views
       'handler' => 'views_handler_field_field',
       'click sortable' => TRUE,
       'field_name' => $field['field_name'],
-      'additional fields' => array('etid'),
+      'additional fields' => $add_fields,
+      'entity_tables' => $entity_tables,
+      'field_info' => $field,
     );
   }
 
Index: modules/field/views_handler_field_field.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/modules/field/Attic/views_handler_field_field.inc,v
retrieving revision 1.1.2.5
diff -u -p -r1.1.2.5 views_handler_field_field.inc
--- modules/field/views_handler_field_field.inc	19 Nov 2010 20:35:46 -0000	1.1.2.5
+++ modules/field/views_handler_field_field.inc	27 Nov 2010 22:49:42 -0000
@@ -36,10 +36,30 @@ class views_handler_field_field extends 
    * Called to add the field to a query.
    */
   function query() {
-    // TODO: we should try to use the data from the join if possible first.
-    // $join = $this->get_join();
-    // That would avoid joining at all the field table.
-    return parent::query();
+    parent::query();
+
+    $base_table = $this->view->base_table;
+    $this->entity_info = entity_get_info($this->definition['entity_tables'][$base_table]);
+
+    // Query for bundle, revision fields necessary for rendering fields.
+    // @TODO make this pluggable. Additional methods on the EntityController
+    // class? (See TaxonomyTermController->buildQuery() and how it is a
+    // protected method that would not also be usable by Views).
+    switch ($base_table) {
+      case 'taxonomy_term_data':
+        $this->aliases[$this->definition['field_name'] . '_' . 'bundle'] = $this->query->add_field('taxonomy_vocabulary', 'machine_name');
+        break;
+      case 'comment':
+        $this->aliases[$this->definition['field_name'] . '_' . 'bundle'] = $this->query->add_field($this->table, 'bundle');
+        break;
+      default:
+        foreach ($this->entity_info['entity keys'] as $key => $column) {
+          if (!empty($column) && ($key == 'bundle' || $key == 'revision')) {
+            $this->aliases[$this->definition['field_name'] . '_' . $key] = $this->query->add_field($base_table, $column);
+          }
+        }
+        break;
+    }
   }
 
   function option_definition() {
@@ -148,34 +168,47 @@ class views_handler_field_field extends 
    *   field in the View.
    */
   function pre_render(&$values) {
-    static $entity_type_map;
-
     if (!empty($values)) {
-      // Cache the entity type map for repeat usage.
-      if (empty($entity_type_map)) {
-        $entity_type_map = db_query('SELECT etid, type FROM {field_config_entity_type}')->fetchAllKeyed();
-      }
-
-      // Create an array mapping the Views values to their object types.
-      $objects_by_type = array();
+      $entity_info = $this->entity_info;
+      $entity_type = $this->definition['entity_tables'][$this->view->base_table];
 
-      foreach ($values as $key => $object) {
-        // Derive the entity type. For some field types, etid might be empty.
-        if (isset($object->{$this->aliases['etid']}) && isset($entity_type_map[$object->{$this->aliases['etid']}])) {
-          $entity_type = $entity_type_map[$object->{$this->aliases['etid']}];
-          $entity_id = $object->{$this->field_alias};
-          $objects_by_type[$entity_type][$key] = $entity_id;
+      // Build the objects.
+      $objects = array();
+      foreach ($values as $key => $row) {
+        if ($row->{$this->field_alias}) {
+          $object = new stdClass();
+          $object->{$entity_info['entity keys']['id']} = $row->{$this->field_alias};
+          $object->{$entity_info['entity keys']['bundle']} = $row->{$this->aliases[$this->definition['field_name'] . '_bundle']};
+          if (!empty($entity_info['entity keys']['revision'])) {
+            $object->{$entity_info['entity keys']['revision']} = $row->{$this->aliases[$this->definition['field_name'] . '_revision']};
+          }
+
+          $language = $row->{$this->aliases['language']};
+          $delta = $row->{$this->aliases['delta']};
+
+          $field_values = array();
+          foreach (array_keys($this->definition['field_info']['columns']) as $column_name) {
+            $alias = $this->aliases[_field_sql_storage_columnname($this->definition['field_name'], $column_name)];
+            $field_values[$language][$delta][$column_name] = $row->{$alias};
+          }
+          $object->{$this->definition['field_name']} = $field_values;
+          $objects[$row->{$this->field_alias}] = $object;
         }
       }
 
-      // Load the objects.
-      foreach ($objects_by_type as $entity_type => $oids) {
-        $objects = entity_load($entity_type, $oids);
+      // Invoke field-type module's hook_field_load().
+      _field_invoke_multiple('load', $entity_type, $objects);
 
-        foreach ($oids as $key => $entity_id) {
+      // Invoke hook_field_attach_load(): let other modules act on loading the
+      // entitiy.
+      module_invoke_all('field_attach_load', $entity_type, $objects);
+
+      foreach ($values as $key => $row) {
+        if ($row->{$this->field_alias}) {
+          // TODO call this _field_data...
           $values[$key]->_field_cache[$this->field_alias] = array(
             'entity_type' => $entity_type,
-            'object' => $objects[$entity_id],
+            'object' => $objects[$row->{$this->field_alias}],
           );
         }
       }
