Merge branch 'thh-bug37' into next
* thh-bug37: Create better newsgroup lists for SQL clause.
This commit is contained in:
		
						commit
						7c83a673e6
					
				
					 1 changed files with 36 additions and 4 deletions
				
			
		
							
								
								
									
										40
									
								
								NewsStats.pm
									
										
									
									
									
								
							
							
						
						
									
										40
									
								
								NewsStats.pm
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -577,14 +577,46 @@ sub SQLGroupList {
 | 
			
		|||
  return (undef,undef) if !CheckValidNewsgroups($Newsgroups);
 | 
			
		||||
  # just one newsgroup?
 | 
			
		||||
  return (SQLGroupWildcard($Newsgroups),$Newsgroups) if $Newsgroups !~ /:/;
 | 
			
		||||
  my ($SQL,@WildcardGroups,@NoWildcardGroups);
 | 
			
		||||
  # list of newsgroups separated by ':'
 | 
			
		||||
  my $SQL = '(';
 | 
			
		||||
  my @GroupList = split /:/, $Newsgroups;
 | 
			
		||||
  foreach (@GroupList) {
 | 
			
		||||
     $SQL .= ' OR ' if $SQL gt '(';
 | 
			
		||||
     $SQL .= SQLGroupWildcard($_);
 | 
			
		||||
    if ($_ !~ /%/) {
 | 
			
		||||
      # add to list of newsgroup names WITHOUT wildcard
 | 
			
		||||
      push (@NoWildcardGroups,$_);
 | 
			
		||||
    } else {
 | 
			
		||||
      # add to list of newsgroup names WITH wildcard
 | 
			
		||||
      push (@WildcardGroups,$_);
 | 
			
		||||
      # add wildcard to SQL clause
 | 
			
		||||
      # 'OR' if SQL clause is not empty
 | 
			
		||||
      $SQL .= ' OR ' if $SQL;
 | 
			
		||||
      $SQL .= 'newsgroup LIKE ?'
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
  $SQL .= ')';
 | 
			
		||||
  if (scalar(@NoWildcardGroups)) {
 | 
			
		||||
    # add 'OR' if SQL clause is not empty
 | 
			
		||||
    $SQL .= ' OR ' if $SQL;
 | 
			
		||||
    if (scalar(@NoWildcardGroups) < 2) {
 | 
			
		||||
      # special case: just one newsgroup without wildcard
 | 
			
		||||
      $SQL .= 'newsgroup = ?';
 | 
			
		||||
    } else {
 | 
			
		||||
      # create list of newsgroups to include: 'newsgroup IN (...)'
 | 
			
		||||
      $SQL .= 'newsgroup IN (';
 | 
			
		||||
      my $SQLin;
 | 
			
		||||
      foreach (@NoWildcardGroups) {
 | 
			
		||||
        $SQLin .= ',' if $SQLin;
 | 
			
		||||
        $SQLin .= '?';
 | 
			
		||||
      }
 | 
			
		||||
      # add list to SQL clause
 | 
			
		||||
      $SQL .= $SQLin .= ')';
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  # add brackets '()' to SQL clause as needed (more than one wildcard group)
 | 
			
		||||
  if (scalar(@WildcardGroups)) {
 | 
			
		||||
    $SQL = '(' . $SQL .')';
 | 
			
		||||
  }
 | 
			
		||||
  # rebuild @GroupList in (now) correct order
 | 
			
		||||
  @GroupList = (@WildcardGroups,@NoWildcardGroups);
 | 
			
		||||
  return ($SQL,@GroupList);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue