/**
  * augmentSQL alters read requests to return the 'correct' DataObject, given the current Moderatable state setting
  */
 function augmentSQL(SQLQuery &$query)
 {
     /* If its disjunctive, throw an error. That would mean all approved objects would be included on all queries. */
     if ($query->connective == "OR") {
         throw new Exception("Moderatable can't filter on a disjunctive query");
     }
     $savedstage = Versioned::$reading_stage;
     $stageTable = $this->baseTable($this->defaultStage);
     $liveTable = $this->baseTable($this->liveStage);
     /* Handle the 'approved' & 'approved_if_latest' selections */
     if (ModeratableState::$state == 'approved' || ModeratableState::$state == 'approved_if_latest') {
         Versioned::$reading_stage = $this->liveStage;
         parent::augmentSQL($query);
         if (ModeratableState::$state == 'approved_if_latest') {
             $query->from["{$stageTable}VMVerCheck"] = "LEFT JOIN `{$stageTable}` ON `{$stageTable}`.ID = `{$liveTable}`.ID";
             $query->where['VMVerCheck'] = "`{$stageTable}`.Version <= `{$liveTable}`.Version";
         }
     } else {
         Versioned::$reading_stage = $this->defaultStage;
         parent::augmentSQL($query);
         if (ModeratableState::$state != 'any') {
             $query->where['VMSpamSplit'] = $this->where(ModeratableState::$state);
             $query->leftJoin($liveTable, "`{$stageTable}`.ID = `{$liveTable}`.ID");
             $query->where['VMVerCheck'] = "`{$liveTable}`.Version IS NULL OR `{$stageTable}`.Version > `{$liveTable}`.Version";
         }
     }
     Versioned::$reading_stage = $savedstage;
 }