[Cpan-forum-commit] rev 245 - in trunk: . lib/CPAN/Forum/DB lib/CPAN/Forum/RM

svn at pti.co.il svn at pti.co.il
Fri Jul 6 08:26:31 IDT 2007


Author: gabor
Date: 2007-07-06 08:26:31 +0300 (Fri, 06 Jul 2007)
New Revision: 245

Modified:
   trunk/
   trunk/lib/CPAN/Forum/DB/Posts.pm
   trunk/lib/CPAN/Forum/RM/Notify.pm
Log:
replace the Class::DBI calls by plain DBI calls in the rss and atom feed generations



Property changes on: trunk
___________________________________________________________________
Name: svk:merge
   - 7bc34947-122d-0410-bc5a-f898d2bb5f81:/local/cpan-forum:4116
8c4c90e1-83eb-0310-96eb-e7cb62807872:/local/cpan-forum:12752
   + 7bc34947-122d-0410-bc5a-f898d2bb5f81:/local/cpan-forum:4117
8c4c90e1-83eb-0310-96eb-e7cb62807872:/local/cpan-forum:12752

Modified: trunk/lib/CPAN/Forum/DB/Posts.pm
===================================================================
--- trunk/lib/CPAN/Forum/DB/Posts.pm	2007-07-06 05:26:15 UTC (rev 244)
+++ trunk/lib/CPAN/Forum/DB/Posts.pm	2007-07-06 05:26:31 UTC (rev 245)
@@ -12,33 +12,12 @@
 __PACKAGE__->has_a(gid    => "CPAN::Forum::DB::Groups");
 
 __PACKAGE__->set_sql(latest         => "SELECT __ESSENTIAL__ FROM __TABLE__ ORDER BY DATE DESC LIMIT %s");
-#__PACKAGE__->set_sql(latest_threads => "SELECT A.id, A.thread, A.date FROM posts A WHERE 
-#            thread IN (SELECT DISTINCT B.thread FROM posts B ORDER BY B.date DESC LIMIT ?) 
-#            AND 
-#            id IN (SELECT max(id) FROM posts C WHERE C.thread=A.thread)
-#            ORDER BY A.date DESC");
 
-__PACKAGE__->set_sql(latest_threads => "SELECT A.id, A.thread, A.date FROM posts A WHERE 
-            thread IN (
-                SELECT DISTINCT X.thread FROM posts X WHERE X.thread IN (
-                    SELECT B.thread FROM posts B ORDER BY B.date DESC LIMIT ?)) 
-            AND 
-            id IN (SELECT max(id) FROM posts C WHERE C.thread=A.thread)
-            ORDER BY A.date DESC");
-
 __PACKAGE__->set_sql(count_thread   => "SELECT count(*) FROM __TABLE__ WHERE thread=%s");
 __PACKAGE__->set_sql(count_where    => "SELECT count(*) FROM __TABLE__ WHERE %s='%s'");
 __PACKAGE__->set_sql(count_like     => "SELECT count(*) FROM __TABLE__ WHERE %s LIKE '%s'");
 #__PACKAGE__->add_constraint('subject_too_long', subject => sub { length $_[0] <= 70 and $_[0] !~ /</});
 #__PACKAGE__->add_constraint('text_format', text => \&check_text_format);
-__PACKAGE__->set_sql(post_by_pauseid => qq{
-                        SELECT posts.id id
-                        FROM posts
-                        WHERE gid IN (
-                            SELECT DISTINCT groups.id 
-                            FROM groups, authors
-                            WHERE groups.pauseid=authors.id and authors.pauseid=?)
-                        ORDER BY date DESC});
 __PACKAGE__->set_sql(stat_posts_by_group => qq{
             SELECT COUNT(*) cnt, groups.name gname
             FROM posts,groups 
@@ -56,14 +35,84 @@
             ORDER BY cnt DESC
             LIMIT ?
             });
+my $MORE_SQL = 'groups.name group_name, users.fname user_fname, users.lname user_lname, users.username user_username';
 
 sub retrieve_latest { 
-    my ($class, $count) = @_;
-    
-#   $where = $where ? "WHERE $where" : "";
-    return $class->sth_to_objects($class->sql_latest($count));
+    my ($self, $limit) = @_;
+
+    $limit ||= 10;
+    my $sql = "SELECT posts.id id, posts.subject, 
+                $MORE_SQL
+                FROM posts, groups, users
+                WHERE posts.gid=groups.id AND posts.uid=users.id
+                ORDER BY date DESC LIMIT ?";
+    #$self->log->debug("SQL: $sql");
+
+    return $self->_fetch_arrayref_of_hashes($sql, $limit);
 }
 
+sub search_post_by_groupname {
+    my ($self, $groupname, $limit) = @_;
+
+    return [] if not $groupname;
+    $limit ||= 10;
+    my $sql = qq{SELECT posts.id id, posts.subject,
+                        $MORE_SQL
+                        FROM posts, groups, users
+                        WHERE groups.name=?
+                            AND posts.gid=groups.id AND posts.uid=users.id
+                        ORDER BY date DESC LIMIT ?};
+    return $self->_fetch_arrayref_of_hashes($sql, $groupname, $limit);
+}
+sub search_post_by_pauseid {
+    my ($self, $pauseid, $limit) = @_;
+
+    return [] if not $pauseid;
+    $limit ||= 10;
+    my $sql = qq{SELECT posts.id id, posts.subject,
+                        $MORE_SQL
+                        FROM posts, groups, users
+                        WHERE gid IN (
+                            SELECT DISTINCT groups.id 
+                            FROM groups, authors
+                            WHERE groups.pauseid=authors.id and authors.pauseid=?)
+                            AND posts.gid=groups.id AND posts.uid=users.id
+                        ORDER BY date DESC LIMIT ?};
+    return $self->_fetch_arrayref_of_hashes($sql, $pauseid, $limit);
+}
+
+
+sub search_latest_threads {
+    my ($self, $limit) = @_;
+
+    $limit ||= 10;
+    my $sql = "SELECT A.id, A.thread, A.subject subject, A.date,
+            $MORE_SQL
+            FROM posts A, groups, users
+            WHERE 
+            thread IN (
+                SELECT DISTINCT X.thread FROM posts X WHERE X.thread IN (
+                    SELECT B.thread FROM posts B ORDER BY B.date DESC LIMIT ?)) 
+            AND 
+            A.id IN (SELECT max(id) FROM posts C WHERE C.thread=A.thread)
+            AND A.gid=groups.id AND A.uid=users.id
+            ORDER BY A.date DESC";
+
+    return $self->_fetch_arrayref_of_hashes($sql, $limit);
+}
+sub _fetch_arrayref_of_hashes {
+    my ($self, $sql, @args) = @_;
+
+    my $dbh = CPAN::Forum::DBI::db_Main();
+    my $sth = $dbh->prepare($sql);
+    $sth->execute(@args);
+    my @values;
+    while (my $hr = $sth->fetchrow_hashref) {
+        push @values, $hr;
+    }
+    return \@values;
+}
+
 sub mysearch {
     my ($self, $params) = @_;
 

Modified: trunk/lib/CPAN/Forum/RM/Notify.pm
===================================================================
--- trunk/lib/CPAN/Forum/RM/Notify.pm	2007-07-06 05:26:15 UTC (rev 244)
+++ trunk/lib/CPAN/Forum/RM/Notify.pm	2007-07-06 05:26:31 UTC (rev 245)
@@ -118,17 +118,17 @@
         id       => "$url/",
     );
  
-    if ($it) {
-        while (my $post = $it->next() and $limit--) {
-            my $title = sprintf "[%s] %s", $post->gid->name, $post->subject;
+    if (@$it) {
+        foreach my $post (@$it) {
+            my $title = sprintf "[%s] %s", $post->{group_name}, $post->{subject};
             my $author = {
                             name => sprintf("%s %s (%s)", 
-                                        ($post->uid->fname || ''),
-                                        ($post->uid->lname || ''),
-                                        $post->uid->username),
-                            uri  => "$url/users/" . $post->uid->username,
+                                        ($post->{user_fname} || ''),
+                                        ($post->{user_lname} || ''),
+                                        $post->{user_username}),
+                            uri  => "$url/users/" . $post->{user_username},
                         };
-            my $link = "$url/posts/" . $post->id();
+            my $link = "$url/posts/" . $post->{id};
             $feed->add_entry(
                 author => $author,
                 title  => $title, # TODO _subject_escape ?
@@ -162,10 +162,14 @@
     # TODO: replace this e-mail address with a configurable value
     $rss->webmaster('admin at cpanforum.com');
 
-    if ($it) {
-        while (my $post = $it->next() and $limit--) {
-            my $title = sprintf "[%s] %s", $post->gid->name, $post->subject;
-            $rss->item("$url/posts/" . $post->id(), $title); # TODO _subject_escape ?
+    if (@$it) {
+        #while (my $post = $it->next() and $limit--) {
+        #    my $title = sprintf "[%s] %s", $post->gid->name, $post->subject;
+        #    $rss->item("$url/posts/" . $post->id(), $title); # TODO _subject_escape ?
+        #}
+        foreach my $post (@$it) {
+            my $title = sprintf "[%s] %s", $post->{group_name}, $post->{subject};
+            $rss->item("$url/posts/" . $post->{id}, $title); # TODO _subject_escape ?
         }
     }
     else {
@@ -184,32 +188,28 @@
 
     my @params = @{$self->param("path_parameters")};
 
-    return if not @params;
+    return [] if not @params;
 
     if ($params[0] eq 'dist') {
         my $dist = $params[1] || '';
         $self->log->debug("rss of dist: '$dist'");
-        my ($group) = CPAN::Forum::DB::Groups->search({ name => $dist });
-        if ($group) {
-            $self->log->debug("aha");
-            return scalar CPAN::Forum::DB::Posts->search(gid => $group->id, {order_by => 'date DESC'});
-        }
+        return CPAN::Forum::DB::Posts->search_post_by_groupname($dist, $limit); #gid => $group->id, {order_by => 'date DESC'});
     }
 
     if ($params[0] eq 'author') {
         my $pauseid = uc($params[1]) || '';
         if ($pauseid) {
             $self->log->debug("rss of author: '$pauseid'");
-            return scalar CPAN::Forum::DB::Posts->search_post_by_pauseid($pauseid);
+            return CPAN::Forum::DB::Posts->search_post_by_pauseid($pauseid, $limit);
         }
     }
 
     if ($params[0] eq 'all') {
-        return scalar CPAN::Forum::DB::Posts->retrieve_latest($limit);
+        return CPAN::Forum::DB::Posts->retrieve_latest($limit);
     }
 
     if ($params[0] eq 'threads') {
-        return scalar CPAN::Forum::DB::Posts->search_latest_threads($limit);
+        return CPAN::Forum::DB::Posts->search_latest_threads($limit);
     }
 
     return;



More information about the Cpan-forum-commit mailing list