Exemplo n.º 1
0
 /**
  * \brief get all the licenses for a single file or uploadtree
  *
  * @param ItemTreeBounds $itemTreeBounds
  * @param int
  * @return LicenseMatch[]
  */
 function getAgentFileLicenseMatches(ItemTreeBounds $itemTreeBounds, $usageId = LicenseMap::TRIVIAL)
 {
     $uploadTreeTableName = $itemTreeBounds->getUploadTreeTableName();
     $statementName = __METHOD__ . ".{$uploadTreeTableName}.{$usageId}";
     $params = array($itemTreeBounds->getUploadId(), $itemTreeBounds->getLeft(), $itemTreeBounds->getRight());
     if ($usageId == LicenseMap::TRIVIAL) {
         $licenseJoin = "ONLY license_ref mlr ON license_file.rf_fk = mlr.rf_pk";
     } else {
         $params[] = $usageId;
         $licenseMapCte = LicenseMap::getMappedLicenseRefView('$4');
         $licenseJoin = "({$licenseMapCte}) AS mlr ON license_file.rf_fk = mlr.rf_origin";
     }
     $this->dbManager->prepare($statementName, "SELECT   LFR.rf_shortname AS license_shortname,\n                  LFR.rf_fullname AS license_fullname,\n                  LFR.rf_pk AS license_id,\n                  LFR.fl_pk AS license_file_id,\n                  LFR.pfile_fk as file_id,\n                  LFR.rf_match_pct AS percent_match,\n                  AG.agent_name AS agent_name,\n                  AG.agent_pk AS agent_id,\n                  AG.agent_rev AS agent_revision\n          FROM ( SELECT mlr.rf_fullname, mlr.rf_shortname, mlr.rf_pk, license_file.fl_pk, license_file.agent_fk, license_file.pfile_fk, license_file.rf_match_pct\n               FROM license_file JOIN {$licenseJoin}) as LFR\n          INNER JOIN {$uploadTreeTableName} as UT ON UT.pfile_fk = LFR.pfile_fk\n          INNER JOIN agent as AG ON AG.agent_pk = LFR.agent_fk\n          WHERE AG.agent_enabled='true' and\n           UT.upload_fk=\$1 AND UT.lft BETWEEN \$2 and \$3\n          ORDER BY license_shortname ASC, percent_match DESC");
     $result = $this->dbManager->execute($statementName, $params);
     $matches = array();
     while ($row = $this->dbManager->fetchArray($result)) {
         $licenseRef = new LicenseRef(intval($row['license_id']), $row['license_shortname'], $row['license_fullname']);
         $agentRef = new AgentRef(intval($row['agent_id']), $row['agent_name'], $row['agent_revision']);
         $matches[] = new LicenseMatch(intval($row['file_id']), $licenseRef, $agentRef, intval($row['license_file_id']), intval($row['percent_match']));
     }
     $this->dbManager->freeResult($result);
     return $matches;
 }
Exemplo n.º 2
0
 public function testGetMappedLicenseRefView()
 {
     $this->testDb = new TestPgDb();
     $this->testDb->createPlainTables(array('license_ref', 'license_map'));
     $this->dbManager = $this->testDb->getDbManager();
     $this->dbManager->queryOnce("CREATE TABLE license_candidate (group_fk integer) INHERITS (license_ref)");
     $this->dbManager->insertTableRow('license_map', array('license_map_pk' => 0, 'rf_fk' => 2, 'rf_parent' => 1, 'usage' => LicenseMap::CONCLUSION));
     $this->dbManager->insertTableRow('license_ref', array('rf_pk' => 1, 'rf_shortname' => 'One', 'rf_fullname' => 'One-1'));
     $this->dbManager->insertTableRow('license_ref', array('rf_pk' => 2, 'rf_shortname' => 'Two', 'rf_fullname' => 'Two-2'));
     $this->dbManager->insertTableRow('license_candidate', array('rf_pk' => 3, 'rf_shortname' => 'Three', 'rf_fullname' => 'Three-3', 'group_fk' => $this->groupId));
     $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
     $view = LicenseMap::getMappedLicenseRefView(LicenseMap::CONCLUSION);
     $stmt = __METHOD__;
     $this->dbManager->prepare($stmt, $view);
     $res = $this->dbManager->execute($stmt);
     $map = $this->dbManager->fetchAll($res);
     $this->dbManager->freeResult($res);
     assertThat($map, is(arrayWithSize(2)));
     $expected = array(array('rf_origin' => 1, 'rf_pk' => 1, 'rf_shortname' => 'One', 'rf_fullname' => 'One-1'), array('rf_origin' => 2, 'rf_pk' => 1, 'rf_shortname' => 'One', 'rf_fullname' => 'One-1'));
     assertThat($map, containsInAnyOrder($expected));
 }