Index: backreference.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/backreference/backreference.module,v retrieving revision 1.1.2.3 diff -u -p -r1.1.2.3 backreference.module --- backreference.module 19 Aug 2010 03:55:39 -0000 1.1.2.3 +++ backreference.module 9 Feb 2011 10:24:06 -0000 @@ -242,7 +242,7 @@ function _backreference_old_values_remov function _backreference_linkback_multiple_field($right_table, $right_field_column, $left_nid, $right_vid, $right_nid, $left_multiple) { // This is a new reference, so we need to insert it after other references. // This was a race condition, but the LOCK TABLES should handle that. - $delta_row = db_fetch_array(db_query_range("SELECT delta, $right_field_column, nid FROM {". $right_table ."} WHERE nid = %d ORDER BY delta DESC", $right_nid, 0, 1)); + $delta_row = db_fetch_array(db_query_range("SELECT delta, $right_field_column, nid FROM {". $right_table ."} WHERE vid = %d ORDER BY delta DESC", $right_vid, 0, 1)); $delta = $delta_row['delta']; if ($delta == 0 && empty($delta_row[$right_field_column]) && !empty($delta_row['nid'])) { Index: tests/backreference_multi.test =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/backreference/tests/Attic/backreference_multi.test,v retrieving revision 1.1.2.1 diff -u -p -r1.1.2.1 backreference_multi.test --- tests/backreference_multi.test 19 Aug 2010 03:55:39 -0000 1.1.2.1 +++ tests/backreference_multi.test 9 Feb 2011 10:24:06 -0000 @@ -179,6 +179,78 @@ class BackReferenceMultipleValueTest ext $node_2->vid, $node->nid, 'node[1]', 'node[0]'); } + + /** + * Reference between fields with revisions on the node + */ + function testBasicNodeReferenceReferenceBetweenTypesAndRevisions() { + + $user = $this->drupalCreateUser($this->permissions); + $this->drupalLogin($user); + + $this->acquireContentTypes(2); + $field_settings_1 = array( + 'type' => 'nodereference', + 'widget_type' => 'nodereference_autocomplete', + 'type_name' => $this->content_types[0]->type, + 'label' => 'simpletest F1', + 'multiple' => 1, + ); + + $field_1 = $this->createField($field_settings_1, 0); + + $field_settings_2 = array( + 'type' => 'nodereference', + 'widget_type' => 'nodereference_autocomplete', + 'type_name' => $this->content_types[1]->type, + 'label' => 'simpletest F2', + 'multiple' => 1, + ); + + $field_2 = $this->createField($field_settings_2, 1); + + $field_1_db_info = content_database_info($field_1); + $field_2_db_info = content_database_info($field_2); + + db_query("INSERT INTO {backreference_field_symmetry} (field_left, field_right) VALUES ('%s', '%s')", + $field_1['field_name'], $field_2['field_name']); + db_query("INSERT INTO {backreference_field_symmetry} (field_left, field_right) VALUES ('%s', '%s')", + $field_2['field_name'], $field_1['field_name']); + + $result = db_query("SELECT * FROM {backreference_field_symmetry}"); + $table = array(); + while ($row = db_fetch_array($result)) { + $table[] = $row; + } + $this->pass(print_r($table, TRUE)); + + $this->acquireNodes(1); // create two nodes, one in each type. + + // Create a new revision of the destination node, having two versions + $node = node_load($this->nodes[1]->nid); + for ($i = 0; $i < 2; $i++) { + $node->revision = 1; + $node->log = "Test revision"; + node_save($node); + } + $node_dest_vid = $node->vid; + + $node = node_load($this->nodes[0]->nid); + $node->{$field_1['field_name']}[0] = $this->nodes[1]->nid; + node_save($node); + + // Test that node[0] points to node[1]: + $this->assertNodeReference($field_1_db_info['columns']['nid']['column'], + $field_1_db_info['table'], + $node->vid, $this->nodes[1]->nid, + 'node[0]', 'node[1]'); + + // Test that node[1] points to node[0]: + $this->assertNodeReference($field_2_db_info['columns']['nid']['column'], + $field_2_db_info['table'], + $node_dest_vid, $node->nid, + 'node[1]', 'node[0]'); + } } class BackReferenceMultipleValueThreeNodeTest extends BackReferenceMultipleTestCase {