/** * \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; }
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)); }