mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
Store package groups in the database
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
This commit is contained in:
parent
3720bdf6b2
commit
cc3244ea8a
4 changed files with 90 additions and 1 deletions
18
UPGRADING
18
UPGRADING
|
@ -199,6 +199,24 @@ CREATE TABLE PackageRelations (
|
|||
) ENGINE = InnoDB;
|
||||
----
|
||||
|
||||
17. Create tables to store package groups:
|
||||
|
||||
----
|
||||
CREATE TABLE Groups (
|
||||
ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
Name VARCHAR(64) NOT NULL,
|
||||
PRIMARY KEY (ID),
|
||||
UNIQUE (Name)
|
||||
) ENGINE = InnoDB;
|
||||
CREATE TABLE PackageGroups (
|
||||
PackageID INTEGER UNSIGNED NOT NULL,
|
||||
GroupID INTEGER UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (PackageID, GroupID),
|
||||
FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE,
|
||||
FOREIGN KEY (GroupID) REFERENCES Groups(ID) ON DELETE CASCADE
|
||||
) ENGINE = InnoDB;
|
||||
----
|
||||
|
||||
From 2.2.0 to 2.3.0
|
||||
-------------------
|
||||
|
||||
|
|
|
@ -133,6 +133,27 @@ CREATE TABLE Packages (
|
|||
) ENGINE = InnoDB;
|
||||
|
||||
|
||||
-- Information about groups
|
||||
--
|
||||
CREATE TABLE Groups (
|
||||
ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
Name VARCHAR(64) NOT NULL,
|
||||
PRIMARY KEY (ID),
|
||||
UNIQUE (Name)
|
||||
) ENGINE = InnoDB;
|
||||
|
||||
|
||||
-- Information about package-group-relations
|
||||
--
|
||||
CREATE TABLE PackageGroups (
|
||||
PackageID INTEGER UNSIGNED NOT NULL,
|
||||
GroupID INTEGER UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (PackageID, GroupID),
|
||||
FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE,
|
||||
FOREIGN KEY (GroupID) REFERENCES Groups(ID) ON DELETE CASCADE
|
||||
) ENGINE = InnoDB;
|
||||
|
||||
|
||||
-- Define the package dependency types
|
||||
--
|
||||
CREATE TABLE DependencyTypes (
|
||||
|
|
|
@ -151,6 +151,7 @@ if ($uid):
|
|||
}
|
||||
}
|
||||
$section_info = array(
|
||||
'groups' => array(),
|
||||
'depends' => array(),
|
||||
'makedepends' => array(),
|
||||
'checkdepends' => array(),
|
||||
|
@ -169,6 +170,7 @@ if ($uid):
|
|||
case 'license':
|
||||
$section_info[$key] = $value;
|
||||
break;
|
||||
case 'groups':
|
||||
case 'source':
|
||||
case 'depends':
|
||||
case 'makedepends':
|
||||
|
@ -196,7 +198,7 @@ if ($uid):
|
|||
if (!isset($pkgbase_info['pkgbase'])) {
|
||||
$pkgbase_info['pkgbase'] = $pkgbase_info['pkgname'];
|
||||
}
|
||||
foreach (array('source', 'depends', 'makedepends', 'checkdepends', 'optdepends', 'conflicts', 'provides', 'replaces') as $array_opt) {
|
||||
foreach (array('groups', 'source', 'depends', 'makedepends', 'checkdepends', 'optdepends', 'conflicts', 'provides', 'replaces') as $array_opt) {
|
||||
if (empty($pkgbase_info[$array_opt])) {
|
||||
$pkgbase_info[$array_opt] = array();
|
||||
} else {
|
||||
|
@ -357,6 +359,11 @@ if ($uid):
|
|||
foreach ($pkginfo as $pi) {
|
||||
$pkgid = pkg_create($base_id, $pi['pkgname'], $pi['license'], $pi['full-version'], $pi['pkgdesc'], $pi['url']);
|
||||
|
||||
foreach ($pi['groups'] as $grp) {
|
||||
$grpid = pkg_create_group($grp);
|
||||
pkg_add_grp($pkgid, $grpid);
|
||||
}
|
||||
|
||||
foreach (array('depends', 'makedepends', 'checkdepends', 'optdepends') as $deptype) {
|
||||
foreach ($pi[$deptype] as $dep) {
|
||||
$deppkgname = preg_replace("/(<|=|>).*/", "", $dep);
|
||||
|
|
|
@ -805,3 +805,46 @@ function pkg_add_src($pkgid, $pkgsrc) {
|
|||
|
||||
$dbh->exec($q);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new group and returns its ID
|
||||
*
|
||||
* If the groups already exists, the ID of the already existing group is
|
||||
* returned.
|
||||
*
|
||||
* @param string $name The name of the group to create
|
||||
*
|
||||
* @return int The ID of the group
|
||||
*/
|
||||
function pkg_create_group($name) {
|
||||
$dbh = DB::connect();
|
||||
$q = sprintf("SELECT ID FROM Groups WHERE Name = %s", $dbh->quote($name));
|
||||
$result = $dbh->query($q);
|
||||
if ($result) {
|
||||
$grpid = $result->fetch(PDO::FETCH_COLUMN, 0);
|
||||
if ($grpid > 0) {
|
||||
return $grpid;
|
||||
}
|
||||
}
|
||||
|
||||
$q = sprintf("INSERT INTO Groups (Name) VALUES (%s)", $dbh->quote($name));
|
||||
$dbh->exec($q);
|
||||
return $dbh->lastInsertId();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a package to a group
|
||||
*
|
||||
* @param int $pkgid The package ID of the package to add
|
||||
* @param int $grpid The group ID of the group to add the package to
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function pkg_add_grp($pkgid, $grpid) {
|
||||
$dbh = DB::connect();
|
||||
$q = sprintf("INSERT INTO PackageGroups (PackageID, GroupID) VALUES (%d, %d)",
|
||||
$pkgid,
|
||||
$grpid
|
||||
);
|
||||
$dbh->exec($q);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue