Make WordPress Core

Ticket #15292: unit-meta-query.php

File unit-meta-query.php, 1.9 KB (added by scribu, 15 years ago)
Line 
1<?php
2
3add_action('template_redirect', function() {
4        global $wpdb;
5
6        assert_options(ASSERT_ACTIVE, 1);
7        assert_options(ASSERT_QUIET_EVAL, 1);
8        assert_options(ASSERT_WARNING, 0);
9        assert_options(ASSERT_CALLBACK, function ($file, $line, $code) use ( &$failed ) {
10                echo "Failed: $file (line $line)<hr />";
11        });
12
13        // 'meta_key' & 'meta_value' = 0
14        $qv = array(
15                'meta_key' => 'foo',
16                'meta_value' => 0,
17        );
18
19        $expected = array(
20                array(
21                        'key' => 'foo',
22                        'value' => '0'
23                )
24        );
25
26        _parse_meta_query( $qv );
27        assert( $qv['meta_query'] == $expected );
28
29        $expected = " AND wp_postmeta.meta_key = 'foo' AND CAST(wp_postmeta.meta_value AS CHAR) = '0'";
30
31        $clauses = _get_meta_sql( $qv['meta_query'], 'post', $wpdb->posts, 'ID' );
32        assert( $clauses['where'] == $expected );
33
34        // Only 'meta_key' (meta_value should be ignored)
35        $qv = array(
36                'meta_key' => 'foo',
37                'meta_value' => '',
38        );
39
40        $expected = array(
41                array(
42                        'key' => 'foo',
43                )
44        );
45
46        _parse_meta_query( $qv );
47        assert( $qv['meta_query'] == $expected );
48
49        $expected = " AND wp_postmeta.meta_key = 'foo'";
50
51        $clauses = _get_meta_sql( $qv['meta_query'], 'post', $wpdb->posts, 'ID' );
52        assert( $clauses['where'] == $expected );
53
54        // 'key' and 'value' (value should _not_ be ignored)
55        $meta_query = array(
56                array(
57                        'key' => 'foo',
58                        'value' => '',
59                        'compare' => '!='
60                )
61        );
62
63        $expected = " AND wp_postmeta.meta_key = 'foo' AND CAST(wp_postmeta.meta_value AS CHAR) != ''";
64
65        $clauses = _get_meta_sql( $meta_query, 'post', $wpdb->posts, 'ID' );
66        assert( $clauses['where'] == $expected );
67
68        // empty 'value' with 'IN' comparison ('value' should not be ignored)
69        $meta_query = array(
70                array(
71                        'key' => 'foo',
72                        'value' => '0',
73                        'compare' => 'NOT IN',
74                )
75        );
76
77        $expected = " AND wp_postmeta.meta_key = 'foo' AND CAST(wp_postmeta.meta_value AS CHAR) NOT IN ('0')";
78
79        $clauses = _get_meta_sql( $meta_query, 'post', $wpdb->posts, 'ID' );
80        assert( $clauses['where'] == $expected );
81});
82