Index: Sites/wordpress-trunk/wp-includes/post.php
===================================================================
--- Sites/wordpress-trunk/wp-includes/post.php	(revision 13915)
+++ Sites/wordpress-trunk/wp-includes/post.php	(working copy)
@@ -1653,8 +1653,10 @@
 	$comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = %d", $postid ));
 	if ( ! empty($comment_ids) ) {
 		do_action( 'delete_comment', $comment_ids );
-		$in_comment_ids = "'" . implode("', '", $comment_ids) . "'";
-		$wpdb->query( "DELETE FROM $wpdb->comments WHERE comment_ID IN($in_comment_ids)" );
+		foreach ( $comment_ids as $comment_id ) {
+			$force_delete_comment = true;
+			wp_delete_comment( $comment_id, $force_delete_comment );
+		}
 		do_action( 'deleted_comment', $comment_ids );
 	}
 
Index: Sites/wordpress-trunk/wp-includes/comment.php
===================================================================
--- Sites/wordpress-trunk/wp-includes/comment.php	(revision 13915)
+++ Sites/wordpress-trunk/wp-includes/comment.php	(working copy)
@@ -869,14 +869,15 @@
  * @uses wp_transition_comment_status() Passes new and old comment status along with $comment object
  *
  * @param int $comment_id Comment ID
+ * @param bool $force_delete Whether to bypass trash and force deletion
  * @return bool False if delete comment query failure, true on success.
  */
-function wp_delete_comment($comment_id) {
+function wp_delete_comment($comment_id, $force_delete = false) {
 	global $wpdb;
 	if (!$comment = get_comment($comment_id))
 		return false;
 
-	if (wp_get_comment_status($comment_id) != 'trash' && wp_get_comment_status($comment_id) != 'spam' && EMPTY_TRASH_DAYS > 0)
+	if ( !$force_delete && wp_get_comment_status( $comment_id ) != 'trash' && wp_get_comment_status( $comment_id ) != 'spam' && EMPTY_TRASH_DAYS > 0 )
 		return wp_trash_comment($comment_id);
 
 	do_action('delete_comment', $comment_id);
