Make WordPress Core


Ignore:
Timestamp:
10/01/2015 05:36:15 AM (11 years ago)
Author:
pento
Message:

WPDB: Allow null values in the CRUD functions.

Specifically, ::insert(), ::replace(), ::update(), and ::delete() can now set a column to NULL, or add the IS NULL condition to the WHERE clause.

This is based on ​[backpress 279].

Props pento, nbachiyski, sorich87.

Fixes #15158.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/db.php

    r33718 r34737  
    808808                return 'fake_col_charset';
    809809        }
     810
     811        /**
     812         * @ticket 15158
     813         */
     814        function test_null_insert() {
     815                global $wpdb;
     816
     817                $key = 'null_insert_key';
     818
     819                $wpdb->insert(
     820                        $wpdb->postmeta,
     821                        array(
     822                                'meta_key' => $key,
     823                                'meta_value' => NULL
     824                        ),
     825                        array( '%s', '%s' )
     826                );
     827
     828                $row = $wpdb->get_row( "SELECT * FROM $wpdb->postmeta WHERE meta_key='$key'" );
     829
     830                $this->assertNull( $row->meta_value );
     831        }
     832
     833        /**
     834         * @ticket 15158
     835         */
     836        function test_null_update_value() {
     837                global $wpdb;
     838
     839                $key = 'null_update_value_key';
     840                $value = 'null_update_value_key';
     841
     842                $wpdb->insert(
     843                        $wpdb->postmeta,
     844                        array(
     845                                'meta_key' => $key,
     846                                'meta_value' => $value
     847                        ),
     848                        array( '%s', '%s' )
     849                );
     850
     851                $row = $wpdb->get_row( "SELECT * FROM $wpdb->postmeta WHERE meta_key='$key'" );
     852
     853                $this->assertSame( $value, $row->meta_value );
     854
     855                $wpdb->update(
     856                        $wpdb->postmeta,
     857                        array( 'meta_value' => NULL ),
     858                        array(
     859                                'meta_key' => $key,
     860                                'meta_value' => $value
     861                        ),
     862                        array( '%s' ),
     863                        array( '%s', '%s' )
     864                );
     865
     866                $row = $wpdb->get_row( "SELECT * FROM $wpdb->postmeta WHERE meta_key='$key'" );
     867
     868                $this->assertNull( $row->meta_value );
     869        }
     870
     871        /**
     872         * @ticket 15158
     873         */
     874        function test_null_update_where() {
     875                global $wpdb;
     876
     877                $key = 'null_update_where_key';
     878                $value = 'null_update_where_key';
     879
     880                $wpdb->insert(
     881                        $wpdb->postmeta,
     882                        array(
     883                                'meta_key' => $key,
     884                                'meta_value' => NULL
     885                        ),
     886                        array( '%s', '%s' )
     887                );
     888
     889                $row = $wpdb->get_row( "SELECT * FROM $wpdb->postmeta WHERE meta_key='$key'" );
     890
     891                $this->assertNull( $row->meta_value );
     892
     893                $wpdb->update(
     894                        $wpdb->postmeta,
     895                        array( 'meta_value' => $value ),
     896                        array(
     897                                'meta_key' => $key,
     898                                'meta_value' => NULL
     899                        ),
     900                        array( '%s' ),
     901                        array( '%s', '%s' )
     902                );
     903
     904                $row = $wpdb->get_row( "SELECT * FROM $wpdb->postmeta WHERE meta_key='$key'" );
     905
     906                $this->assertSame( $value, $row->meta_value );
     907        }
     908
     909        /**
     910         * @ticket 15158
     911         */
     912        function test_null_delete() {
     913                global $wpdb;
     914
     915                $key = 'null_update_where_key';
     916                $value = 'null_update_where_key';
     917
     918                $wpdb->insert(
     919                        $wpdb->postmeta,
     920                        array(
     921                                'meta_key' => $key,
     922                                'meta_value' => NULL
     923                        ),
     924                        array( '%s', '%s' )
     925                );
     926
     927                $row = $wpdb->get_row( "SELECT * FROM $wpdb->postmeta WHERE meta_key='$key'" );
     928
     929                $this->assertNull( $row->meta_value );
     930
     931                $wpdb->delete(
     932                        $wpdb->postmeta,
     933                        array(
     934                                'meta_key' => $key,
     935                                'meta_value' => NULL
     936                        ),
     937                        array( '%s', '%s' )
     938                );
     939
     940                $row = $wpdb->get_row( "SELECT * FROM $wpdb->postmeta WHERE meta_key='$key'" );
     941
     942                $this->assertNull( $row );
     943        }
    810944}
    811 
Note: See TracChangeset for help on using the changeset viewer.