Make WordPress Core

Changeset 26053


Ignore:
Timestamp:
11/08/2013 10:51:03 PM (11 years ago)
Author:
wonderboymusic
Message:

Respect the compare operator value in meta_query when value evaluates to null. Adds Unit Test.

Props bradyvercher, gradyetc.
Fixes #22967.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/meta.php

    r25583 r26053  
    754754        if ( 'OR' == $this->relation ) {
    755755            foreach ( $this->queries as $k => $q ) {
    756                 if ( ! isset( $q['value'] ) && ! empty( $q['key'] ) )
     756                if ( ! array_key_exists( 'value', $q ) && ! empty( $q['key'] ) )
    757757                    $key_only_queries[$k] = $q;
    758758                else
     
    774774            $meta_key = isset( $q['key'] ) ? trim( $q['key'] ) : '';
    775775            $meta_type = $this->get_cast_for_type( isset( $q['type'] ) ? $q['type'] : '' );
     776
     777            if ( array_key_exists( 'value', $q ) && is_null( $q['value'] ) )
     778                $q['value'] = '';
    776779
    777780            $meta_value = isset( $q['value'] ) ? $q['value'] : null;
  • trunk/tests/phpunit/tests/meta/query.php

    r25002 r26053  
    106106
    107107    }
     108
     109    /**
     110     * @ticket 22967
     111     */
     112    function test_null_value_sql() {
     113        global $wpdb;
     114
     115        $query = new WP_Meta_Query( array(
     116            array( 'key' => 'abc', 'value' => null, 'compare' => '=' )
     117        ) );
     118        $sql = $query->get_sql( 'post', $wpdb->posts, 'ID', $this );
     119
     120        $this->assertEquals( 1, substr_count( $sql['where'], "CAST($wpdb->postmeta.meta_value AS CHAR) = '')" ) );
     121    }
    108122}
Note: See TracChangeset for help on using the changeset viewer.