cheese-shop/sql/def.sql

101 lines
2.4 KiB
MySQL
Raw Normal View History

2020-06-26 17:50:02 +02:00
DROP DATABASE IF EXISTS cheese_shop;
CREATE DATABASE cheese_shop;
USE cheese_shop;
2020-07-04 11:04:53 +02:00
CREATE TABLE contacts (
2020-06-28 05:00:21 +02:00
email varchar(255) PRIMARY KEY,
name varchar(255));
2020-07-04 20:21:31 +02:00
CREATE TABLE releases (
id smallint AUTO_INCREMENT PRIMARY KEY,
project varchar(32),
version varchar(32),
2020-06-26 17:50:02 +02:00
summary varchar(255),
homepage varchar(2083),
2020-06-28 05:00:21 +02:00
email varchar(255),
2020-07-04 20:21:31 +02:00
CONSTRAINT integrity UNIQUE (project, version),
2020-06-28 05:00:21 +02:00
FOREIGN KEY (email) REFERENCES contacts(email));
2020-06-26 17:50:02 +02:00
2020-07-04 11:04:53 +02:00
CREATE TABLE troves (
2020-06-28 05:00:21 +02:00
id smallint AUTO_INCREMENT PRIMARY KEY,
2020-07-04 18:05:06 +02:00
classifier varchar(255) UNIQUE);
2020-06-26 17:50:02 +02:00
2020-07-04 11:04:53 +02:00
CREATE TABLE classifiers (
2020-06-26 17:50:02 +02:00
release_id smallint,
trove_id smallint,
2020-06-28 05:00:21 +02:00
PRIMARY KEY (release_id, trove_id),
FOREIGN KEY (release_id) REFERENCES releases(id),
FOREIGN KEY (trove_id) REFERENCES troves(id));
2020-06-26 17:50:02 +02:00
2020-07-04 11:04:53 +02:00
CREATE TABLE keywords (
2020-06-26 17:50:02 +02:00
release_id smallint,
term varchar(32),
2020-06-28 05:00:21 +02:00
PRIMARY KEY (release_id, term),
FOREIGN KEY (release_id) REFERENCES releases(id));
2020-06-26 17:50:02 +02:00
2020-07-04 18:05:06 +02:00
CREATE TABLE dependencies (
release_id smallint,
dependency varchar(64),
PRIMARY KEY (release_id, dependency),
FOREIGN KEY (release_id) REFERENCES releases(id));
2020-07-04 11:04:53 +02:00
CREATE TABLE distributions (
2020-06-26 17:50:02 +02:00
release_id smallint,
filename varchar(255),
2020-07-04 18:05:06 +02:00
size int,
2020-06-26 17:50:02 +02:00
url varchar(255),
2020-07-04 18:05:06 +02:00
dist_type varchar(16),
2020-06-26 17:50:02 +02:00
python_version varchar(8),
requires_python varchar(32),
sha256 char(64),
md5 char(32),
2020-06-28 05:00:21 +02:00
PRIMARY KEY (release_id, filename),
FOREIGN KEY (release_id) REFERENCES releases(id));
2020-07-07 16:02:40 +02:00
CREATE INDEX contacts_name_idx
ON contacts (name);
CREATE INDEX releases_summary_idx
ON releases (summary);
2020-07-07 20:38:16 +02:00
CREATE VIEW authorships
AS SELECT name as author, project
FROM contacts NATURAL JOIN releases
GROUP BY author, project;
DELIMITER //
CREATE PROCEDURE browse(class varchar(255))
BEGIN
SELECT project, version
FROM releases, classifiers
WHERE id = release_id AND trove_id = (
SELECT id
FROM troves
WHERE classifier = class);
END//
CREATE PROCEDURE release_data(project varchar(32), version varchar(32))
BEGIN
DECLARE i smallint;
SET i = (
SELECT id
FROM releases
WHERE releases.project = project AND releases.version = version);
SELECT project, version, homepage, name as author, email, summary
FROM releases NATURAL JOIN contacts
WHERE id = i;
SELECT term as keyword
FROM keywords
WHERE release_id = i;
SELECT classifier
FROM classifiers, troves
WHERE release_id = i AND trove_id = troves.id;
2020-07-07 21:20:39 +02:00
SELECT dependency
FROM dependencies
WHERE release_id = i;
2020-07-07 20:38:16 +02:00
END//
DELIMITER ;