/**
  * @param int|string $uploadId
  * @param array $agentNames used to determine the ars tables
  * @param string $dbViewName
  * @param int value 0 means non-prepared query
  */
 public function __construct($uploadId, $agentNames = array('nomos', 'monk'), $dbViewName = 'latest_scanner', $andEnabled = "AND agent_enabled")
 {
     if (empty($agentNames)) {
         throw new \Exception('empty set of scanners');
     }
     $this->uploadId = $uploadId;
     $subqueries = array();
     foreach ($agentNames as $name) {
         $subqueries[] = "SELECT * FROM (SELECT {$this->columns} FROM {$name}" . self::ARS_SUFFIX . ", agent\n        WHERE agent_fk=agent_pk AND upload_fk={$uploadId} {$andEnabled} ORDER BY agent_fk DESC limit 1) latest_{$name}";
     }
     $dbViewQuery = implode(' UNION ', $subqueries);
     parent::__construct($dbViewQuery, $dbViewName . "_" . implode("_", $agentNames));
 }
 /**
  * @param int $groupId
  * @param array $options
  * @param string $dbViewName
  */
 public function __construct($groupId, $options = array(), $dbViewName = 'license_all')
 {
     $this->groupId = $groupId;
     if ($groupId == 0) {
         $dbViewQuery = $this->queryOnlyLicenseRef($options);
         parent::__construct($dbViewQuery, $dbViewName);
         return;
     }
     $dbViewQuery = $this->queryLicenseCandidate($options);
     if (!array_key_exists('diff', $options)) {
         $dbViewQuery .= " UNION " . $this->queryOnlyLicenseRef($options);
     }
     parent::__construct($dbViewQuery, $dbViewName);
 }