WordPress.org

Make WordPress Core

Ticket #2659: comment_meta_002.diff

File comment_meta_002.diff, 12.6 KB (added by markjaquith, 12 years ago)

Take 2

  • wp-includes/version.php

     
    33// This just holds the version number, in a separate file so we can bump it without cluttering the SVN
    44
    55$wp_version = '2.1-alpha1';
    6 $wp_db_version = 3672;
     6$wp_db_version = 3673;
    77
    88?>
     9 No newline at end of file
  • wp-includes/functions-post.php

     
    574574
    575575        $wpdb->query("DELETE FROM $wpdb->posts WHERE ID = $postid");
    576576
     577        // A little extra effort here, but it saves us from having to store post_ids with comment meta
     578        $comment_ids = $wpdb->get_col("SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = $postid");
     579        $comment_ids = implode(',', $comment_ids);
     580        $wpdb->query("DELETE FROM $wpdb->commentmeta WHERE comment_ID IN ($comment_ids)");
     581
    577582        $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_post_ID = $postid");
    578583
    579584        $wpdb->query("DELETE FROM $wpdb->post2cat WHERE post_id = $postid");
  • wp-includes/functions.php

     
    428428        return true;
    429429}
    430430
     431function setup_meta_vars($type = 'post') {
     432        global $wpdb;
     433        if ( $type != 'post' && $type != 'comment' )
     434                return false; // Garbage control
     435        $return = array();
     436        $return['table'] = $type . 'meta';
     437        $return['table'] = $wpdb->$return['table'];
     438        $return['id_col'] = $type . '_id';
     439        $return['cache'] = $type . '_meta_cache';
     440        return $return;
     441}
     442
     443function add_comment_meta($comment_id, $key, $value, $unique = false) {
     444        return wp_add_meta($comment_id, $key, $value, $unique, 'comment');
     445}
     446
    431447function add_post_meta($post_id, $key, $value, $unique = false) {
    432         global $wpdb, $post_meta_cache;
     448        return wp_add_meta($post_id, $key, $value, $unique, 'post');
     449}
    433450
     451function wp_add_meta($id, $key, $value, $unique = false, $type = 'post') {
     452        global $wpdb;
     453
     454        if ( $vars = setup_meta_vars($type) ) {
     455                extract($vars);
     456                global $$cache;
     457        } else {
     458                return false;
     459        }
     460
    434461        if ( $unique ) {
    435                 if ( $wpdb->get_var("SELECT meta_key FROM $wpdb->postmeta WHERE meta_key
    436 = '$key' AND post_id = '$post_id'") ) {
     462                if ( $wpdb->get_var("SELECT meta_key FROM $table WHERE meta_key
     463= '$key' AND $id_col = '$id'") ) {
    437464                        return false;
    438465                }
    439466        }
     
    442469        if ( is_array($value) || is_object($value) )
    443470                $value = $wpdb->escape(serialize($value));
    444471
    445         $wpdb->query("INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value) VALUES ('$post_id','$key','$value')");
     472        $wpdb->query("INSERT INTO $table ($id_col,meta_key,meta_value) VALUES ('$id','$key','$value')");
    446473
    447         $post_meta_cache['$post_id'][$key][] = $original;
     474        ${$cache}['$id'][$key][] = $original;
    448475
    449476        return true;
    450477}
    451478
     479function delete_comment_meta($comment_id, $key, $value = '') {
     480        return wp_delete_meta($comment_id, $key, $value, 'comment');
     481}
     482
    452483function delete_post_meta($post_id, $key, $value = '') {
    453         global $wpdb, $post_meta_cache;
     484        return wp_delete_meta($post_id, $key, $value, 'post');
     485}
    454486
     487function wp_delete_meta($id, $key, $value = '', $type = 'post') {
     488        global $wpdb;
     489
     490        if ( $vars = setup_meta_vars($type) ) {
     491                extract($vars);
     492                global $$cache;
     493        } else {
     494                return false;
     495        }
     496
    455497        if ( empty($value) ) {
    456                 $meta_id = $wpdb->get_var("SELECT meta_id FROM $wpdb->postmeta WHERE
    457 post_id = '$post_id' AND meta_key = '$key'");
     498                $meta_id = $wpdb->get_var("SELECT meta_id FROM $table WHERE
     499$id_col = '$id' AND meta_key = '$key'");
    458500        } else {
    459                 $meta_id = $wpdb->get_var("SELECT meta_id FROM $wpdb->postmeta WHERE
    460 post_id = '$post_id' AND meta_key = '$key' AND meta_value = '$value'");
     501                $meta_id = $wpdb->get_var("SELECT meta_id FROM $table WHERE
     502$id_col = '$id' AND meta_key = '$key' AND meta_value = '$value'");
    461503        }
    462504
    463505        if ( !$meta_id )
    464506                return false;
    465507
    466508        if ( empty($value) ) {
    467                 $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = '$post_id'
     509                $wpdb->query("DELETE FROM $table WHERE $id_col = '$id'
    468510AND meta_key = '$key'");
    469                 unset($post_meta_cache['$post_id'][$key]);
     511                unset(${$cache}['$id'][$key]);
    470512        } else {
    471                 $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = '$post_id'
     513                $wpdb->query("DELETE FROM $table WHERE $id_col = '$id'
    472514AND meta_key = '$key' AND meta_value = '$value'");
    473                 $cache_key = $post_meta_cache['$post_id'][$key];
     515                $cache_key = ${$cache}['$id'][$key];
    474516                if ($cache_key) foreach ( $cache_key as $index => $data )
    475517                        if ( $data == $value )
    476                                 unset($post_meta_cache['$post_id'][$key][$index]);
     518                                unset(${$cache}['$id'][$key][$index]);
    477519        }
    478520
    479         unset($post_meta_cache['$post_id'][$key]);
     521        unset(${$cache}['$id'][$key]);
    480522
    481523        return true;
    482524}
    483525
     526function get_comment_meta($comment_id, $key, $single = false) {
     527        return wp_get_meta($comment_id, $key, $single, 'comment');
     528}
     529
    484530function get_post_meta($post_id, $key, $single = false) {
    485         global $wpdb, $post_meta_cache;
     531        return wp_get_meta($post_id, $key, $single, 'post');
     532}
    486533
    487         if ( isset($post_meta_cache[$post_id][$key]) ) {
     534function wp_get_meta($id, $key, $single = false, $type = 'post') {
     535        global $wpdb;
     536
     537        if ( $vars = setup_meta_vars($type) ) {
     538                extract($vars);
     539                global $$cache;
     540        } else {
     541                return false;
     542        }
     543
     544        if ( isset(${$cache}[$id][$key]) ) {
    488545                if ( $single ) {
    489                         return maybe_unserialize( $post_meta_cache[$post_id][$key][0] );
     546                        return maybe_unserialize( ${$cache}[$id][$key][0] );
    490547                } else {
    491                         return maybe_unserialize( $post_meta_cache[$post_id][$key] );
     548                        return maybe_unserialize( ${$cache}[$id][$key] );
    492549                }
    493550        }
    494551
    495         $metalist = $wpdb->get_results("SELECT meta_value FROM $wpdb->postmeta WHERE post_id = '$post_id' AND meta_key = '$key'", ARRAY_N);
     552        $metalist = $wpdb->get_results("SELECT meta_value FROM $table WHERE $id_col = '$id' AND meta_key = '$key'", ARRAY_N);
    496553
    497554        $values = array();
    498555        if ( $metalist ) {
     
    514571        return maybe_unserialize($return);
    515572}
    516573
     574function update_comment_meta($comment_id, $key, $value, $prev_value = '') {
     575        return wp_update_meta($comment_id, $key, $value, $prev_value, 'comment');
     576}
     577
    517578function update_post_meta($post_id, $key, $value, $prev_value = '') {
    518         global $wpdb, $post_meta_cache;
     579        return wp_update_meta($post_id, $key, $value, $prev_value, 'post');
     580}
    519581
     582function wp_update_meta($id, $key, $value, $prev_value = '', $type = 'post') {
     583        global $wpdb;
     584
     585        if ( $vars = setup_meta_vars($type) ) {
     586                extract($vars);
     587                global $$cache;
     588        } else {
     589                return false;
     590        }
     591
    520592        $original_value = $value;
    521593        if ( is_array($value) || is_object($value) )
    522594                $value = $wpdb->escape(serialize($value));
     
    525597        if ( is_array($prev_value) || is_object($prev_value) )
    526598                $prev_value = $wpdb->escape(serialize($prev_value));
    527599
    528         if (! $wpdb->get_var("SELECT meta_key FROM $wpdb->postmeta WHERE meta_key
    529 = '$key' AND post_id = '$post_id'") ) {
     600        if (! $wpdb->get_var("SELECT meta_key FROM $table WHERE meta_key
     601= '$key' AND $id_col = '$id'") ) {
    530602                return false;
    531603        }
    532604
    533605        if ( empty($prev_value) ) {
    534                 $wpdb->query("UPDATE $wpdb->postmeta SET meta_value = '$value' WHERE
    535 meta_key = '$key' AND post_id = '$post_id'");
    536                 $cache_key = $post_meta_cache['$post_id'][$key];
     606                $wpdb->query("UPDATE $table SET meta_value = '$value' WHERE
     607meta_key = '$key' AND $id_col = '$id'");
     608                $cache_key = ${$cache}['$id'][$key];
    537609                if ( !empty($cache_key) )
    538610                        foreach ($cache_key as $index => $data)
    539                                 $post_meta_cache['$post_id'][$key][$index] = $original_value;
     611                                ${$cache}['$id'][$key][$index] = $original_value;
    540612        } else {
    541                 $wpdb->query("UPDATE $wpdb->postmeta SET meta_value = '$value' WHERE
    542 meta_key = '$key' AND post_id = '$post_id' AND meta_value = '$prev_value'");
    543                 $cache_key = $post_meta_cache['$post_id'][$key];
     613                $wpdb->query("UPDATE $table SET meta_value = '$value' WHERE
     614meta_key = '$key' AND $id_col = '$id' AND meta_value = '$prev_value'");
     615                $cache_key = ${$cache}['$id'][$key];
    544616                if ( !empty($cache_key) )
    545617                        foreach ($cache_key as $index => $data)
    546618                                if ( $data == $original_prev )
    547                                         $post_meta_cache['$post_id'][$key][$index] = $original_value;
     619                                        ${$cache}['$id'][$key][$index] = $original_value;
    548620        }
    549621
    550622        return true;
  • wp-includes/comment-functions.php

     
    33// Template functions
    44
    55function comments_template( $file = '/comments.php' ) {
    6         global $wp_query, $withcomments, $post, $wpdb, $id, $comment, $user_login, $user_ID, $user_identity;
     6        global $wp_query, $withcomments, $post, $wpdb, $id, $comment, $comment_meta_cache, $user_login, $user_ID, $user_identity;
    77
    88        if ( is_single() || is_page() || $withcomments ) :
    99                $req = get_settings('require_name_email');
     
    3434                $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = '$post->ID' AND ( comment_approved = '1' OR ( comment_author = '$author_db' AND comment_author_email = '$email_db' AND comment_approved = '0' ) ) ORDER BY comment_date");
    3535        }
    3636
     37        // Comment Meta
     38        if ( $comments ) {
     39                $cid_list = array();
     40                foreach ( $comments as $c )
     41                        $cid_list[] =  $c->comment_ID;
     42                $cid_list = implode(',', $cid_list);
     43
     44                // Get comment-meta info
     45                if ( $meta_list = $wpdb->get_results("SELECT comment_id, meta_key, meta_value FROM $wpdb->commentmeta WHERE comment_id IN($cid_list) ORDER BY comment_id, meta_key", ARRAY_A) ) {
     46                        // Change from flat structure to hierarchical:
     47                        $comment_meta_cache = array();
     48                        foreach ($meta_list as $metarow) {
     49                                $mpid = $metarow['comment_id'];
     50                                $mkey = $metarow['meta_key'];
     51                                $mval = $metarow['meta_value'];
     52
     53                                // Force subkeys to be array type:
     54                                if ( !isset($comment_meta_cache[$mpid]) || !is_array($comment_meta_cache[$mpid]) )
     55                                        $comment_meta_cache[$mpid] = array();
     56                                if ( !isset($comment_meta_cache[$mpid]["$mkey"]) || !is_array($comment_meta_cache[$mpid]["$mkey"]) )
     57                                        $comment_meta_cache[$mpid]["$mkey"] = array();
     58
     59                                // Add a value to the current pid/key:
     60                                $comment_meta_cache[$mpid][$mkey][] = $mval;
     61                        }
     62                }
     63        }
     64
    3765        define('COMMENTS_TEMPLATE', true);
    3866        $include = apply_filters('comments_template', TEMPLATEPATH . $file );
    3967        if ( file_exists( $include ) )
     
    222250        if ( ! $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_ID='$comment_id' LIMIT 1") )
    223251                return false;
    224252
     253        $wpdb->query("DELETE FROM $wpdb->commentmeta WHERE comment_id = '$comment_id'");
     254
    225255        $post_id = $comment->comment_post_ID;
    226256        if ( $post_id && $comment->comment_approved == 1 )
    227257                $wpdb->query( "UPDATE $wpdb->posts SET comment_count = comment_count - 1 WHERE ID = '$post_id'" );
  • wp-content/plugins/wp-db-backup.php

     
    3131        var $backup_errors = array();
    3232        var $basename;
    3333        // Simple table name storage
    34         var     $wp_table_names = array('categories','comments','link2cat','links','options','post2cat','postmeta','posts','users','usermeta');
     34        var     $wp_table_names = array('categories','comments','commentmeta','link2cat','links','options','post2cat','postmeta','posts','users','usermeta');
    3535
    3636        function gzip() {
    3737                return function_exists('gzopen');
  • wp-settings.php

     
    7777$wpdb->categories       = $table_prefix . 'categories';
    7878$wpdb->post2cat         = $table_prefix . 'post2cat';
    7979$wpdb->comments         = $table_prefix . 'comments';
     80$wpdb->commentmeta      = $table_prefix . 'commentmeta';
    8081$wpdb->link2cat         = $table_prefix . 'link2cat';
    8182$wpdb->links            = $table_prefix . 'links';
    8283$wpdb->linkcategories   = $table_prefix . 'linkcategories';
  • wp-admin/upgrade-schema.php

     
    1414  PRIMARY KEY  (cat_ID),
    1515  KEY category_nicename (category_nicename)
    1616);
     17CREATE TABLE $wpdb->commentmeta (
     18  meta_id bigint(20) NOT NULL auto_increment,
     19  comment_id bigint(20) NOT NULL default '0',
     20  meta_key varchar(255) default NULL,
     21  meta_value longtext,
     22  PRIMARY KEY  (meta_id),
     23  KEY post_id (comment_id),
     24  KEY meta_key (meta_key)
     25);
    1726CREATE TABLE $wpdb->comments (
    1827  comment_ID bigint(20) unsigned NOT NULL auto_increment,
    1928  comment_post_ID int(11) NOT NULL default '0',