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 -----