PCRS relies on the Relational Algebra Parser and Translator (RAPT) project to support relational algebra exercises. RAPT is a Python package created by two U of T students, Olessia Karpova and Noel D'Souza. The source is available.
RAPT is designed to be extensible and to be used as the basis for classroom tools. A set of basic tools for parsing, visualizing, and executing relational algebra statements, including a live interpreter, are available through the rapture project.
----- install rapt -----
$ pip install rapt
----- load some demo tables into a psql table -----
$ cat demo.psql
CREATE TABLE sauropods (
name character varying(80) NOT NULL,
age int NOT NULL,
happiness int NOT NULL
);
COPY sauropods (name, age, happiness) FROM stdin;
Brontosaurus 152000000 5
Diplodocus 152000000 14
Rapetosaurus 66000000 3
\.
CREATE TABLE raptors (
name character varying(80) NOT NULL,
happiness int NOT NULL
);
COPY raptors (name, happiness) FROM stdin;
Jonas 3
Kyle 7
DeMar 14
Bruno 11
Patrick 8
\.
CREATE TABLE astronauts (
name character varying(80) NOT NULL,
species character varying(80) NOT NULL,
happy boolean NOT NULL,
trips int NOT NULL
);
COPY astronauts (name, species, happy, trips) FROM stdin;
Gagarin Diplodocus t 1
Leonov Diplodocus t 2
Shepard Brontosaurus t 2
\.
$ psql -f demo.psql
----- fetch rapture and move into the base directory -----
$ cd ~/rapture
----- Use rapture to generate the sql from an RA statement -----
$ python3 rapture.py sql "\p_{raptors.name} (raptors \natural_join sauropods);"
SELECT raptors.name FROM (SELECT raptors.name, raptors.happiness FROM raptors) AS raptors NATURAL JOIN (SELECT sauropods.name, sauropods.age, sauropods.happiness FROM sauropods) AS sauropods
----- Use rapture to generate a PDF diagraming an RA statement -----
$ python3 rapture.py pdf "\p_{raptors.name} (raptors \natural_join sauropods);"
----- The pdf should be in out.pdf -----
$ ls -la out.pdf
19377506 -rw-r--r--@ 1 peters43 staff 18581 16 Feb 15:31 out.pdf
----- Use the interpreter to execute RA statements as a demo -----
$ python3 rapture.py repl
Welcome to the Rapture REPL.
The REPL uses Rapt to translate and execute relational
algebra statements on a database.
Type help or ? to list commands.
π raptors
name | happiness
---------+-----------
Jonas | 3
Kyle | 7
DeMar | 14
Bruno | 11
Patrick | 8
Jonas | 3
Kyle | 7
DeMar | 14
Bruno | 11
Patrick | 8
(10 rows)
SQL: SELECT raptors.name, raptors.happiness FROM raptors
π \s_{happiness > 5} raptors;
name | happiness
---------+-----------
Kyle | 7
DeMar | 14
Bruno | 11
Patrick | 8
Kyle | 7
DeMar | 14
Bruno | 11
Patrick | 8
(8 rows)
SQL: SELECT raptors.name, raptors.happiness FROM raptors WHERE happiness > 5
π draw out
----- The most recent statement will be emitted as a PDF diagram -----