WordPress.org

Make WordPress Core

Ticket #19019: wpdb-condense.diff

File wpdb-condense.diff, 4.9 KB (added by wonderboymusic, 6 years ago)
  • wp-includes/wp-db.php

     
    11861186        }
    11871187
    11881188        /**
     1189         * Helper function for resolving form field formats
     1190         *
     1191         *
     1192         * @access private
     1193         * @since 3.5
     1194         * @see wpdb::$field_types
     1195         *
     1196         * @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.
     1197         *      A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types.
     1198         * @return string format of value.
     1199         */
     1200        function _field_format( $field, $format = null ) {
     1201                $formats = (array) $format;
     1202                if ( ! empty( $format ) )
     1203                        $form = ( $form = array_shift( $formats ) ) ? $form : $format[0];
     1204                elseif ( isset( $this->field_types[$field] ) )
     1205                        $form = $this->field_types[$field];
     1206                else
     1207                        $form = '%s';
     1208                return $form;
     1209        }
     1210       
     1211        /**
    11891212         * Helper function for insert and replace.
    11901213         *
    11911214         * Runs an insert or replace query based on $type argument.
     
    12061229        function _insert_replace_helper( $table, $data, $format = null, $type = 'INSERT' ) {
    12071230                if ( ! in_array( strtoupper( $type ), array( 'REPLACE', 'INSERT' ) ) )
    12081231                        return false;
    1209                 $formats = $format = (array) $format;
    12101232                $fields = array_keys( $data );
    12111233                $formatted_fields = array();
    1212                 foreach ( $fields as $field ) {
    1213                         if ( !empty( $format ) )
    1214                                 $form = ( $form = array_shift( $formats ) ) ? $form : $format[0];
    1215                         elseif ( isset( $this->field_types[$field] ) )
    1216                                 $form = $this->field_types[$field];
    1217                         else
    1218                                 $form = '%s';
    1219                         $formatted_fields[] = $form;
    1220                 }
     1234                foreach ( $fields as $field )
     1235                        $formatted_fields[] = $this->_field_format( $field, $format );
     1236
    12211237                $sql = "{$type} INTO `$table` (`" . implode( '`,`', $fields ) . "`) VALUES (" . implode( ",", $formatted_fields ) . ")";
    12221238                return $this->query( $this->prepare( $sql, $data ) );
    12231239        }
    12241240
    12251241        /**
     1242         * Helper function for format of WHERE clauses
     1243         *
     1244         * @since 3.5.0
     1245         * @see wpdb::$field_types
     1246         *
     1247         * @param array $where A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs. Both $where columns and $where values should be "raw".
     1248         * @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. A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $where will be treated as strings.
     1249         * @return array of formatted field = $value
     1250         */
     1251        function _where_clauses( $where, $where_format = null ) {
     1252                $wheres = array();
     1253                foreach ( (array) array_keys( $where ) as $field ) {
     1254                        $form = $this->_field_format( $field, $where_format );
     1255                        $wheres[] = "`$field` = {$form}";
     1256                }
     1257               
     1258                return $wheres;
     1259        }
     1260       
     1261        /**
    12261262         * Update a row in the table
    12271263         *
    12281264         * <code>
     
    12471283                if ( ! is_array( $data ) || ! is_array( $where ) )
    12481284                        return false;
    12491285
    1250                 $formats = $format = (array) $format;
    1251                 $bits = $wheres = array();
     1286                $bits = array();
    12521287                foreach ( (array) array_keys( $data ) as $field ) {
    1253                         if ( !empty( $format ) )
    1254                                 $form = ( $form = array_shift( $formats ) ) ? $form : $format[0];
    1255                         elseif ( isset($this->field_types[$field]) )
    1256                                 $form = $this->field_types[$field];
    1257                         else
    1258                                 $form = '%s';
     1288                        $form = $this->_field_format( $field, $format );
    12591289                        $bits[] = "`$field` = {$form}";
    12601290                }
    12611291
    1262                 $where_formats = $where_format = (array) $where_format;
    1263                 foreach ( (array) array_keys( $where ) as $field ) {
    1264                         if ( !empty( $where_format ) )
    1265                                 $form = ( $form = array_shift( $where_formats ) ) ? $form : $where_format[0];
    1266                         elseif ( isset( $this->field_types[$field] ) )
    1267                                 $form = $this->field_types[$field];
    1268                         else
    1269                                 $form = '%s';
    1270                         $wheres[] = "`$field` = {$form}";
    1271                 }
     1292                $wheres = $this->_where_clauses( $where, $where_format );
    12721293
    12731294                $sql = "UPDATE `$table` SET " . implode( ', ', $bits ) . ' WHERE ' . implode( ' AND ', $wheres );
    12741295                return $this->query( $this->prepare( $sql, array_merge( array_values( $data ), array_values( $where ) ) ) );
     
    12961317                if ( ! is_array( $where ) )
    12971318                        return false;
    12981319
    1299                 $bits = $wheres = array();
     1320                $wheres = $this->_where_clauses( $where, $where_format );
    13001321
    1301                 $where_formats = $where_format = (array) $where_format;
    1302 
    1303                 foreach ( array_keys( $where ) as $field ) {
    1304                         if ( !empty( $where_format ) ) {
    1305                                 $form = ( $form = array_shift( $where_formats ) ) ? $form : $where_format[0];
    1306                         } elseif ( isset( $this->field_types[ $field ] ) ) {
    1307                                 $form = $this->field_types[ $field ];
    1308                         } else {
    1309                                 $form = '%s';
    1310                         }
    1311 
    1312                         $wheres[] = "$field = $form";
    1313                 }
    1314 
    13151322                $sql = "DELETE FROM $table WHERE " . implode( ' AND ', $wheres );
    13161323                return $this->query( $this->prepare( $sql, $where ) );
    13171324        }