Merge "API: Fix list=allusers with multiple values for augroup"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 12 Sep 2014 17:27:02 +0000 (17:27 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 12 Sep 2014 17:27:02 +0000 (17:27 +0000)
1  2 
includes/api/ApiQueryAllUsers.php

@@@ -111,35 -111,18 +111,18 @@@ class ApiQueryAllUsers extends ApiQuery
                        }
                }
  
-               if ( !is_null( $params['group'] ) && !is_null( $params['excludegroup'] ) ) {
-                       $this->dieUsage( 'group and excludegroup cannot be used together', 'group-excludegroup' );
-               }
                if ( !is_null( $params['group'] ) && count( $params['group'] ) ) {
-                       $useIndex = false;
                        // Filter only users that belong to a given group
-                       $this->addTables( 'user_groups', 'ug1' );
-                       $this->addJoinConds( array( 'ug1' => array( 'INNER JOIN', array( 'ug1.ug_user=user_id',
-                               'ug1.ug_group' => $params['group'] ) ) ) );
+                       $this->addWhere( 'EXISTS (' . $db->selectSQLText(
+                               'user_groups', '1', array( 'ug_user=user_id', 'ug_group' => $params['group'] )
+                       ) . ')' );
                }
  
                if ( !is_null( $params['excludegroup'] ) && count( $params['excludegroup'] ) ) {
-                       $useIndex = false;
                        // Filter only users don't belong to a given group
-                       $this->addTables( 'user_groups', 'ug1' );
-                       if ( count( $params['excludegroup'] ) == 1 ) {
-                               $exclude = array( 'ug1.ug_group' => $params['excludegroup'][0] );
-                       } else {
-                               $exclude = array( $db->makeList(
-                                       array( 'ug1.ug_group' => $params['excludegroup'] ),
-                                       LIST_OR
-                               ) );
-                       }
-                       $this->addJoinConds( array( 'ug1' => array( 'LEFT OUTER JOIN',
-                               array_merge( array( 'ug1.ug_user=user_id' ), $exclude )
-                       ) ) );
-                       $this->addWhere( 'ug1.ug_user IS NULL' );
+                       $this->addWhere( 'NOT EXISTS (' . $db->selectSQLText(
+                               'user_groups', '1', array( 'ug_user=user_id', 'ug_group' => $params['excludegroup'] )
+                       ) . ')' );
                }
  
                if ( $params['witheditsonly'] ) {
  
                        $this->addTables( 'user_groups', 'ug2' );
                        $this->addJoinConds( array( 'ug2' => array( 'LEFT JOIN', 'ug2.ug_user=user_id' ) ) );
 -                      $this->addFields( 'ug2.ug_group ug_group2' );
 +                      $this->addFields( array( 'ug_group2' => 'ug2.ug_group' ) );
                } else {
                        $sqlLimit = $limit + 1;
                }