diff --git filefield.module filefield.module index 726b55b..db4a79e 100755 --- filefield.module +++ filefield.module @@ -927,14 +927,14 @@ function filefield_get_field_list($node_type = NULL, $field = NULL) { } /** - * Count the number of times the file is referenced within a field. + * Check if the file is referenced within a field. * * @param $file * A file object. * @param $field * Optional. The CCK field array or field name as a string. * @return - * An integer value. + * An positive integer, if the file is referenced, or 0. */ function filefield_get_file_reference_count($file, $field = NULL) { $fields = filefield_get_field_list(NULL, $field); @@ -943,28 +943,29 @@ function filefield_get_file_reference_count($file, $field = NULL) { $references = 0; foreach ($fields as $field) { $db_info = content_database_info($field); - $references += db_result(db_query( - 'SELECT count('. $db_info['columns']['fid']['column'] .') - FROM {'. $db_info['table'] .'} - WHERE '. $db_info['columns']['fid']['column'] .' = %d', $file->fid - )); - + $query = 'SELECT 1 FROM {'. $db_info['table'] .'} + WHERE '. $db_info['columns']['fid']['column'] .' = %d'; + $args = array($file->fid); + $offset = 0; + // If a field_name is present in the file object, the file is being deleted // from this field. if (isset($file->field_name) && $field['field_name'] == $file->field_name) { - // If deleting the entire node, count how many references to decrement. + // If deleting the entire node, skip node files. if (isset($file->delete_nid)) { - $node_references = db_result(db_query( - 'SELECT count('. $db_info['columns']['fid']['column'] .') - FROM {'. $db_info['table'] .'} - WHERE '. $db_info['columns']['fid']['column'] .' = %d AND nid = %d', $file->fid, $file->delete_nid - )); - $references = $references - $node_references; + $query .= " AND nid != %d"; + $args[] = $file->delete_nid; } else { - $references = $references - 1; + // We only care if there are any references besides the one being + // deleted. + $offset = 1; } } + $result = db_query_range($query, $args, $offset, 1); + if (db_fetch_array($result)) { + $references++; + } } return $references;