FOSSology  4.7.1
Open Source License Compliance by Open Source Software
dbmigrate_legacy-license-names.php
Go to the documentation of this file.
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2026 Fossology contributors
4 
5  SPDX-License-Identifier: GPL-2.0-only
6 */
7 
9 
29 {
30  return array(
31  /* nomos reported GFDL-1.3 until the SPDX -only form was adopted */
32  'GFDL-1.3' => 'GFDL-1.3-only',
33  );
34 }
35 
41 {
42  return array(
43  array('clearing_event', 'rf_fk'),
44  array('custom_phrase_license_map', 'rf_fk'),
45  array('license_file', 'rf_fk'),
46  array('license_map', 'rf_fk'),
47  array('license_map', 'rf_parent'),
48  array('license_set_bulk', 'rf_fk'),
49  array('obligation_candidate_map', 'rf_fk'),
50  array('obligation_map', 'rf_fk'),
51  array('upload_clearing_license', 'rf_fk'),
52  array('comp_result', 'first_rf_fk'),
53  array('comp_result', 'second_rf_fk'),
54  array('license_rules', 'first_rf_fk'),
55  array('license_rules', 'second_rf_fk'),
56  );
57 }
58 
67 function legacyLicenseWrite(DbManager $dbManager, $sql, $params, $statementName)
68 {
69  $dbManager->prepare($statementName, $sql);
70  $res = $dbManager->execute($statementName, $params);
71  $dbManager->freeResult($res);
72 }
73 
82 function renameOrMergeLicense(DbManager $dbManager, $old, $new, $verbose = false)
83 {
84  $row = $dbManager->getSingleRow(
85  "SELECT
86  (SELECT rf_pk FROM license_ref WHERE rf_shortname=$1 LIMIT 1) AS old_id,
87  (SELECT rf_pk FROM license_ref WHERE rf_shortname=$2 LIMIT 1) AS new_id",
88  array($old, $new),
89  __FUNCTION__ . '.getIds'
90  );
91 
92  $oldId = (!empty($row) && !empty($row['old_id'])) ? intval($row['old_id']) : 0;
93  $newId = (!empty($row) && !empty($row['new_id'])) ? intval($row['new_id']) : 0;
94 
95  if ($oldId === 0 || $oldId === $newId) {
96  return;
97  }
98 
99  if ($newId === 0) {
100  legacyLicenseWrite($dbManager, "UPDATE license_ref SET rf_shortname=$1 WHERE rf_pk=$2",
101  array($new, $oldId), __FUNCTION__ . '.rename');
102  if ($verbose) {
103  print "renamed license $old to $new\n";
104  }
105  return;
106  }
107 
108  foreach (getLicenseRefReferences() as $ref) {
109  list ($table, $column) = $ref;
110  if (!$dbManager->existsTable($table)) {
111  continue;
112  }
113  legacyLicenseWrite($dbManager, "UPDATE $table SET $column=$1 WHERE $column=$2",
114  array($newId, $oldId), __FUNCTION__ . ".move.$table.$column");
115  }
116 
117  legacyLicenseWrite($dbManager, "DELETE FROM license_ref WHERE rf_pk=$1",
118  array($oldId), __FUNCTION__ . '.deleteLegacy');
119  if ($verbose) {
120  print "merged license $old into existing $new\n";
121  }
122 }
123 
129 function Migrate_Legacy_License_Names(DbManager $dbManager, $verbose = false)
130 {
131  if (!$dbManager->existsTable('license_ref')) {
132  return;
133  }
134 
135  $dbManager->begin();
136  foreach (getLegacyLicenseNames() as $old => $new) {
137  renameOrMergeLicense($dbManager, $old, $new, $verbose);
138  }
139  $dbManager->commit();
140 }
Migrate_Legacy_License_Names(DbManager $dbManager, $verbose=false)
getLicenseRefReferences()
Columns referencing license_ref.rf_pk, as table => column pairs.
legacyLicenseWrite(DbManager $dbManager, $sql, $params, $statementName)
Run a parameterised write; getSingleRow() would fetch a command result.
getLegacyLicenseNames()
Deprecated shortname => current shortname.
renameOrMergeLicense(DbManager $dbManager, $old, $new, $verbose=false)
Rename a license, or merge it away when the target already exists.