Opinionated sugar for SQLite table definitions
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
.gitignore
LICENSE
README.md
electric-boogaloo.cabal

README.md

This is a program that understands a shorthand for the kinds of SQL that I usually write, specifically targeting SQLite. It's hacky and bad and could use a lot of work, but it works fine enough for me.

The input language is of the form

-- line comments
table1
  field1 : type1
  field2 : type2

table2
  field3 : type3
  field4 : type4

Fields can be indented any number of spaces. A new table is started by an indentifier at the beginning of a line.

Types are either one of these built-in types:

null  int  integer  real  text  blob  date

or the name of a table declared in the source file. By default all values are given the NOT NULL qualifier, but this can be avoided by ending a type name with a ? operator. Additionally, rows can be made UNIQUE by adding a ! operator, and a default value can be set by adding = value to the end of a row for whatever value you choose.

All tables get an implicit id column of the form

  id INTEGER PRIMARY KEY ASC

and types which reference other tables are implicitly translated into integers with foreign key constraints on the other table. (This also means that it'll reject tables with an explicit id column.) For example, the following electric-boogaloo definition:

books
  title:       text!
  pages:       int = 0
  author_name: authors
  published:   date

authors
  name:   text
  gender: blob?

Produces the following SQLite table declarations:

CREATE TABLE IF NOT EXISTS books
  ( id INTEGER PRIMARY KEY ASC
  , title TEXT NOT NULL UNIQUE
  , pages INT NOT NULL DEFAULT 0
  , author_name INTEGER NOT NULL
  , published DATE NOT NULL
  , FOREIGN KEY(author_name) REFERENCES authors(id)
  );
CREATE TABLE IF NOT EXISTS authors
  ( id INTEGER PRIMARY KEY ASC
  , name TEXT NOT NULL
  , gender BLOB
  );