Simplify this logic a ton, and make it useful. Since we're using the
slow role, it's okay to hammer it with a heavy query.
Patch by mark.
diffs (54 lines):
diff -r 64da389a4bde -r f9e5fbf8f824 cgi-bin/DW/BusinessRules/InviteCodes/DWS.pm
--- a/cgi-bin/DW/BusinessRules/InviteCodes/DWS.pm Sun May 17 02:08:26
2009 +0000
+++ b/cgi-bin/DW/BusinessRules/InviteCodes/DWS.pm Sun May 17 03:22:46
2009 +0000
@@ -136,29 +136,19 @@ sub _search_noinvleft {
my ($uckey, $max_nusers) = @_;
my $dbslow = LJ::get_dbh( 'slow' ) or die "Can't get slow role";
- # Second column will be all 0 here (and is unneeded anyway), but putting it
- # in HAVING and not SELECT is non-standard SQL.
- my $sth = $dbslow->prepare( "SELECT userid, min(rcptid) FROM acctcode " .
- "GROUP BY userid HAVING min(rcptid) > 0 LIMIT
?" )
- or die $dbslow->errstr;
- # Keep only userid
- my $nomorecodes = $dbslow->selectcol_arrayref( $sth, { Columns => [1] },
- $max_nusers )
- or die $dbslow->errstr;
- # Users who haven't had any codes yet will have a row in user but not in
- # acctcode
- $sth = $dbslow->prepare( "SELECT user.userid FROM user LEFT JOIN acctcode
" .
- "ON user.userid = acctcode.userid " .
- "WHERE acctcode.userid IS NULL LIMIT ?" )
- or die $dbslow->errstr;
- my $noprevcodes = $dbslow->selectcol_arrayref( $sth, { Columns => [1] },
- $max_nusers )
- or die $dbslow->errstr;
-
- my $uids = [ @$nomorecodes, @$noprevcodes ];
-
- # Don't filter if too many, otherwise we lose that information
- return ($max_nusers <= scalar @$uids) ? $uids : _filter_pav( $uids );
+ # return all personal, active, visible journals... no need to use
_filter_pav
+ # later, when we can do it all on the user table to begin with. this
returns
+ # all users that either have no invites OR
+ my $uids = $dbslow->selectcol_arrayref(
+ q{SELECT DISTINCT u.userid
+ FROM user u
+ LEFT JOIN acctcode a
+ ON a.userid = u.userid AND a.rcptid = 0
+ WHERE (u.journaltype = 'P' AND u.status = 'A' AND u.statusvis = 'V')
+ AND a.userid IS NULL
+ }
+ );
+ return $uids;
}
# TODO: refactor into DW::InviteCodes
@@ -207,6 +197,7 @@ sub _filter_pav {
my @out_uids;
# TODO: make magic number configurable.
+ # TODO: use splice() # perldoc -f splice
for (my $start = 0; $start < @$in_uids; $start += 1000) {
my $end = ($start + 999 <= $#$in_uids) ? $start + 999 : $#$in_uids;
my $uhash = LJ::load_userids( @{$in_uids}[$start..$end] );
_______________________________________________
dw-changelog mailing list
[email protected]
http://lists.dwscoalition.org/mailman/listinfo/dw-changelog