Ticket #26281: meta.php.patch
| File meta.php.patch, 2.6 KB (added by , 13 years ago) |
|---|
-
meta.php
769 769 foreach ( $key_only_queries as $key => $q ) 770 770 $where["key-only-$key"] = $wpdb->prepare( "$meta_table.meta_key = %s", trim( $q['key'] ) ); 771 771 } 772 773 // This is to handle most queries apart from the NOT EXISTS operator 774 $i = count( $join ); 775 $main_alias = $i ? 'mt' . $i : $meta_table; 772 776 777 $join[$i] = "INNER JOIN $meta_table"; 778 $join[$i] .= $i ? " AS $main_alias" : ''; 779 $join[$i] .= " ON ($primary_table.$primary_id_column = $main_alias.$meta_id_column)"; 780 781 // For each query, we'll use the main JOIN if the compare is not NOT EXISTS 773 782 foreach ( $queries as $k => $q ) { 774 783 $meta_key = isset( $q['key'] ) ? trim( $q['key'] ) : ''; 775 784 $meta_type = $this->get_cast_for_type( isset( $q['type'] ) ? $q['type'] : '' ); … … 791 800 ) ) ) 792 801 $meta_compare = '='; 793 802 794 $i = count( $join );795 $alias = $i ? 'mt' . $i : $meta_table;796 797 803 if ( 'NOT EXISTS' == $meta_compare ) { 804 $i = count( $join ); 805 $alias = $i ? 'mt' . $i : $meta_table; 806 798 807 $join[$i] = "LEFT JOIN $meta_table"; 799 808 $join[$i] .= $i ? " AS $alias" : ''; 800 809 $join[$i] .= " ON ($primary_table.$primary_id_column = $alias.$meta_id_column AND $alias.meta_key = '$meta_key')"; … … 804 813 continue; 805 814 } 806 815 807 $join[$i] = "INNER JOIN $meta_table";808 $join[$i] .= $i ? " AS $alias" : '';809 $join[$i] .= " ON ($primary_table.$primary_id_column = $alias.$meta_id_column)";810 811 816 $where[$k] = ''; 812 817 if ( !empty( $meta_key ) ) 813 $where[$k] = $wpdb->prepare( "$ alias.meta_key = %s", $meta_key );818 $where[$k] = $wpdb->prepare( "$main_alias.meta_key = %s", $meta_key ); 814 819 820 // 815 821 if ( is_null( $meta_value ) ) { 816 if ( empty( $where[$k] ) ) 817 unset( $join[$i] ); 822 if ( empty( $where[$k] ) ) { 823 // unset( $join[$i] ); 824 } 818 825 continue; 819 826 } 820 827 … … 823 830 $meta_value = preg_split( '/[,\s]+/', $meta_value ); 824 831 825 832 if ( empty( $meta_value ) ) { 826 unset( $join[$i] );833 //unset( $join[$i] ); 827 834 continue; 828 835 } 829 836 } else { … … 845 852 if ( ! empty( $where[$k] ) ) 846 853 $where[$k] .= ' AND '; 847 854 848 $where[$k] = ' (' . $where[$k] . $wpdb->prepare( "CAST($ alias.meta_value AS {$meta_type}) {$meta_compare} {$meta_compare_string})", $meta_value );855 $where[$k] = ' (' . $where[$k] . $wpdb->prepare( "CAST($main_alias.meta_value AS {$meta_type}) {$meta_compare} {$meta_compare_string})", $meta_value ); 849 856 } 850 857 851 858 $where = array_filter( $where );
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)