Commit cc3244ea authored by Lukas Fleischer's avatar Lukas Fleischer
Browse files

Store package groups in the database



Signed-off-by: default avatarLukas Fleischer <archlinux@cryptocrack.de>
parent 3720bdf6
......@@ -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);
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment