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. Built from https://develop.svn.wordpress.org/trunk@34737 git-svn-id: http://core.svn.wordpress.org/trunk@34701 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
9caa7c4ba7
commit
3942226c90
|
@ -4,7 +4,7 @@
|
||||||
*
|
*
|
||||||
* @global string $wp_version
|
* @global string $wp_version
|
||||||
*/
|
*/
|
||||||
$wp_version = '4.4-alpha-34736';
|
$wp_version = '4.4-alpha-34737';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||||
|
|
|
@ -1779,6 +1779,7 @@ class wpdb {
|
||||||
* @param string $table Table name
|
* @param string $table Table name
|
||||||
* @param array $data Data to insert (in column => value pairs).
|
* @param array $data Data to insert (in column => value pairs).
|
||||||
* Both $data columns and $data values should be "raw" (neither should be SQL escaped).
|
* Both $data columns and $data values should be "raw" (neither should be SQL escaped).
|
||||||
|
* Sending a null value will cause the column to be set to NULL - the corresponding format is ignored in this case.
|
||||||
* @param array|string $format Optional. An array of formats to be mapped to each of the value in $data.
|
* @param array|string $format Optional. An array of formats to be mapped to each of the value in $data.
|
||||||
* If string, that format will be used for all of the values in $data.
|
* If string, that format will be used for all of the values in $data.
|
||||||
* A format is one of '%d', '%f', '%s' (integer, float, string).
|
* A format is one of '%d', '%f', '%s' (integer, float, string).
|
||||||
|
@ -1803,6 +1804,7 @@ class wpdb {
|
||||||
* @param string $table Table name
|
* @param string $table Table name
|
||||||
* @param array $data Data to insert (in column => value pairs).
|
* @param array $data Data to insert (in column => value pairs).
|
||||||
* Both $data columns and $data values should be "raw" (neither should be SQL escaped).
|
* Both $data columns and $data values should be "raw" (neither should be SQL escaped).
|
||||||
|
* Sending a null value will cause the column to be set to NULL - the corresponding format is ignored in this case.
|
||||||
* @param array|string $format Optional. An array of formats to be mapped to each of the value in $data.
|
* @param array|string $format Optional. An array of formats to be mapped to each of the value in $data.
|
||||||
* If string, that format will be used for all of the values in $data.
|
* If string, that format will be used for all of the values in $data.
|
||||||
* A format is one of '%d', '%f', '%s' (integer, float, string).
|
* A format is one of '%d', '%f', '%s' (integer, float, string).
|
||||||
|
@ -1827,6 +1829,7 @@ class wpdb {
|
||||||
* @param string $table Table name
|
* @param string $table Table name
|
||||||
* @param array $data Data to insert (in column => value pairs).
|
* @param array $data Data to insert (in column => value pairs).
|
||||||
* Both $data columns and $data values should be "raw" (neither should be SQL escaped).
|
* Both $data columns and $data values should be "raw" (neither should be SQL escaped).
|
||||||
|
* Sending a null value will cause the column to be set to NULL - the corresponding format is ignored in this case.
|
||||||
* @param array|string $format Optional. An array of formats to be mapped to each of the value in $data.
|
* @param array|string $format Optional. An array of formats to be mapped to each of the value in $data.
|
||||||
* If string, that format will be used for all of the values in $data.
|
* If string, that format will be used for all of the values in $data.
|
||||||
* A format is one of '%d', '%f', '%s' (integer, float, string).
|
* A format is one of '%d', '%f', '%s' (integer, float, string).
|
||||||
|
@ -1848,6 +1851,11 @@ class wpdb {
|
||||||
|
|
||||||
$formats = $values = array();
|
$formats = $values = array();
|
||||||
foreach ( $data as $value ) {
|
foreach ( $data as $value ) {
|
||||||
|
if ( is_null( $value['value'] ) ) {
|
||||||
|
$formats[] = 'NULL';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$formats[] = $value['format'];
|
$formats[] = $value['format'];
|
||||||
$values[] = $value['value'];
|
$values[] = $value['value'];
|
||||||
}
|
}
|
||||||
|
@ -1875,9 +1883,12 @@ class wpdb {
|
||||||
* @param string $table Table name
|
* @param string $table Table name
|
||||||
* @param array $data Data to update (in column => value pairs).
|
* @param array $data Data to update (in column => value pairs).
|
||||||
* Both $data columns and $data values should be "raw" (neither should be SQL escaped).
|
* Both $data columns and $data values should be "raw" (neither should be SQL escaped).
|
||||||
|
* Sending a null value will cause the column to be set to NULL - the corresponding
|
||||||
|
* format is ignored in this case.
|
||||||
* @param array $where A named array of WHERE clauses (in column => value pairs).
|
* @param array $where A named array of WHERE clauses (in column => value pairs).
|
||||||
* Multiple clauses will be joined with ANDs.
|
* Multiple clauses will be joined with ANDs.
|
||||||
* Both $where columns and $where values should be "raw".
|
* Both $where columns and $where values should be "raw".
|
||||||
|
* Sending a null value will create an IS NULL comparison - the corresponding format will be ignored in this case.
|
||||||
* @param array|string $format Optional. An array of formats to be mapped to each of the values in $data.
|
* @param array|string $format Optional. An array of formats to be mapped to each of the values in $data.
|
||||||
* If string, that format will be used for all of the values in $data.
|
* If string, that format will be used for all of the values in $data.
|
||||||
* A format is one of '%d', '%f', '%s' (integer, float, string).
|
* A format is one of '%d', '%f', '%s' (integer, float, string).
|
||||||
|
@ -1904,10 +1915,20 @@ class wpdb {
|
||||||
|
|
||||||
$fields = $conditions = $values = array();
|
$fields = $conditions = $values = array();
|
||||||
foreach ( $data as $field => $value ) {
|
foreach ( $data as $field => $value ) {
|
||||||
|
if ( is_null( $value['value'] ) ) {
|
||||||
|
$fields[] = "`$field` = NULL";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$fields[] = "`$field` = " . $value['format'];
|
$fields[] = "`$field` = " . $value['format'];
|
||||||
$values[] = $value['value'];
|
$values[] = $value['value'];
|
||||||
}
|
}
|
||||||
foreach ( $where as $field => $value ) {
|
foreach ( $where as $field => $value ) {
|
||||||
|
if ( is_null( $value['value'] ) ) {
|
||||||
|
$conditions[] = "`$field` IS NULL";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$conditions[] = "`$field` = " . $value['format'];
|
$conditions[] = "`$field` = " . $value['format'];
|
||||||
$values[] = $value['value'];
|
$values[] = $value['value'];
|
||||||
}
|
}
|
||||||
|
@ -1936,6 +1957,7 @@ class wpdb {
|
||||||
* @param array $where A named array of WHERE clauses (in column => value pairs).
|
* @param array $where A named array of WHERE clauses (in column => value pairs).
|
||||||
* Multiple clauses will be joined with ANDs.
|
* Multiple clauses will be joined with ANDs.
|
||||||
* Both $where columns and $where values should be "raw".
|
* Both $where columns and $where values should be "raw".
|
||||||
|
* Sending a null value will create an IS NULL comparison - the corresponding format will be ignored in this case.
|
||||||
* @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where.
|
* @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where.
|
||||||
* If string, that format will be used for all of the items in $where.
|
* If string, that format will be used for all of the items in $where.
|
||||||
* A format is one of '%d', '%f', '%s' (integer, float, string).
|
* A format is one of '%d', '%f', '%s' (integer, float, string).
|
||||||
|
@ -1954,6 +1976,11 @@ class wpdb {
|
||||||
|
|
||||||
$conditions = $values = array();
|
$conditions = $values = array();
|
||||||
foreach ( $where as $field => $value ) {
|
foreach ( $where as $field => $value ) {
|
||||||
|
if ( is_null( $value['value'] ) ) {
|
||||||
|
$conditions[] = "`$field` IS NULL";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$conditions[] = "`$field` = " . $value['format'];
|
$conditions[] = "`$field` = " . $value['format'];
|
||||||
$values[] = $value['value'];
|
$values[] = $value['value'];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue