From 637bedeece273774e547bc70527fa31c0580f344 Mon Sep 17 00:00:00 2001 From: Boone Gorges Date: Fri, 8 May 2015 19:44:06 +0000 Subject: [PATCH] Use table prefix for `comment__in` and `comment__not_in` SQL clauses of `WP_Comment_Query`. The prefix prevents ambiguity when joining against other tables. Props willgladstone. Fixes #32081. git-svn-id: https://develop.svn.wordpress.org/trunk@32461 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/comment.php | 4 +-- tests/phpunit/tests/comment/query.php | 47 +++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/comment.php b/src/wp-includes/comment.php index e2ed55386a..c5be35b13b 100644 --- a/src/wp-includes/comment.php +++ b/src/wp-includes/comment.php @@ -696,12 +696,12 @@ class WP_Comment_Query { // Parse comment IDs for an IN clause. if ( ! empty( $this->query_vars['comment__in'] ) ) { - $where[] = 'comment_ID IN ( ' . implode( ',', wp_parse_id_list( $this->query_vars['comment__in'] ) ) . ' )'; + $where[] = "$wpdb->comments.comment_ID IN ( " . implode( ',', wp_parse_id_list( $this->query_vars['comment__in'] ) ) . ' )'; } // Parse comment IDs for a NOT IN clause. if ( ! empty( $this->query_vars['comment__not_in'] ) ) { - $where[] = 'comment_ID NOT IN ( ' . implode( ',', wp_parse_id_list( $this->query_vars['comment__not_in'] ) ) . ' )'; + $where[] = "$wpdb->comments.comment_ID NOT IN ( " . implode( ',', wp_parse_id_list( $this->query_vars['comment__not_in'] ) ) . ' )'; } // Parse comment post IDs for an IN clause. diff --git a/tests/phpunit/tests/comment/query.php b/tests/phpunit/tests/comment/query.php index 19583105c0..0d7269c8f0 100644 --- a/tests/phpunit/tests/comment/query.php +++ b/tests/phpunit/tests/comment/query.php @@ -722,6 +722,53 @@ class Tests_Comment_Query extends WP_UnitTestCase { $this->assertEquals( array( $comments[2], $comments[0], $comments[1] ), $found ); } + /** + * @group 32081 + */ + public function test_meta_query_should_work_with_comment__in() { + $comments = $this->factory->comment->create_many( 3 ); + + add_comment_meta( $comments[0], 'foo', 'jjj' ); + add_comment_meta( $comments[1], 'foo', 'zzz' ); + add_comment_meta( $comments[2], 'foo', 'jjj' ); + + $q = new WP_Comment_Query( array( + 'comment__in' => array( $comments[1], $comments[2] ), + 'meta_query' => array( + array( + 'key' => 'foo', + 'value' => 'jjj', + ), + ), + 'fields' => 'ids', + ) ); + + $this->assertEquals( array( $comments[2] ), $q->get_comments() ); + } + + /** + * @group 32081 + */ + public function test_meta_query_should_work_with_comment__not_in() { + $comments = $this->factory->comment->create_many( 3 ); + + add_comment_meta( $comments[0], 'foo', 'jjj' ); + add_comment_meta( $comments[1], 'foo', 'zzz' ); + add_comment_meta( $comments[2], 'foo', 'jjj' ); + + $q = new WP_Comment_Query( array( + 'comment__not_in' => array( $comments[1], $comments[2] ), + 'meta_query' => array( + array( + 'key' => 'foo', + 'value' => 'jjj', + ), + ), + 'fields' => 'ids', + ) ); + + $this->assertEquals( array( $comments[0] ), $q->get_comments() ); + } /** * @ticket 27064