/migrator

Simple declarative schema migration for SQLite

Primary LanguageCommon LispMozilla Public License 2.0MPL-2.0

1 NAME
======

  migratory --- Simple declarative schema migration for SQLite.


2 VERSION
=========

  ,----
  | 0.1
  `----


3 SYNOPSIS
==========

  ,----
  | (sqlite:with-open-database (db "db.sqlite3")
  |   (migrator:migrate db #p"migrations/" :allow-deletions t))
  `----


4 DESCRIPTION
=============

  Migrates a database to the new schema given by the SQL text `schema`
  preserving the data.  We create any table that exists in schema,
  delete any old table that is no longer used and add/remove columns and
  indices as necessary.

  Under this scheme there are a set of changes that we can make to the
  schema and this script will handle it fine:

  1. Adding a new table
  2. Adding, deleting or modifying an index
  3. Adding a column to an existing table as long as the new column can
     be NULL or has a DEFAULT value specified.
  4. Changing a column to remove NULL or DEFAULT as long as all values
     in the database are not NULL
  5. Changing the type of a column
  6. Changing the user_version


  In addition this function is capable of:

  1. Deleting tables
  2. Deleting columns from tables

     But only if allow-deletions is non-nil.  If the new schema requires
     a column/table to be deleted and allow-deletions is T this function
     will raise an error.

     Note: When this function is called a transaction must not be held
     open on db.  A transaction will be used internally.  If you wish to
     perform additional migration steps as part of a migration use
     DBMigrator directly.

     Any internally generated rowid columns by SQLite may change values
     by this migration.

     But only if `allow-deletions' is non-nil.  If the new schema
     requires a column/table to be deleted and `allow-deletions' is nil
     this function will signal an error.

  `directory' must contain a `schema.sql' file that gets
  loaded. Optionally `directory' can contain a `pre.sql' and `post.sql'
  hooks to do some pre or post works, like data migrations etc.


5 AUTHOR
========

  Sebastian Christ (<mailto:rudolfo.christ@pm.me>)


6 LICENSE
=========

  Released under the MPL-2.0 license.


7 SEE ALSO
==========

  - [Simple declarative schema migration for SQLite]


[Simple declarative schema migration for SQLite]
<https://david.rothlis.net/declarative-schema-migration-for-sqlite/>