• Stars
    star
    149
  • Rank 248,619 (Top 5 %)
  • Language
    Go
  • License
    MIT License
  • Created over 6 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A Common DSL for Migrating Databases

Fizz

Actions Status Go Reference

A Common DSL for Migrating Databases

Supported Database Engines

Fizz supports minimum supported version of all supported database engines. Currently, the following database engines are officially supported. (Since Fizz is used with the migration feature of Pop, supported databases and the versions are correlated with Pop.)

  • PostgreSQL 10
  • MySQL 5.7 / MariaDB 10.3
  • SQLite3 3.22
  • CockroachDB v21.1
  • MSSQL 2017 (not fully supported)

Usage

Create a Table

create_table("users") {
  t.Column("id", "integer", {primary: true})
  t.Column("email", "string", {})
  t.Column("twitter_handle", "string", {"size": 50})
  t.Column("age", "integer", {"default": 0})
  t.Column("admin", "bool", {"default": false})
  t.Column("company_id", "uuid", {"default_raw": "uuid_generate_v1()"})
  t.Column("bio", "text", {"null": true})
  t.Column("joined_at", "timestamp", {})
  t.Index("email", {"unique": true})
}

create_table("todos") {
  t.Column("user_id", "integer", {})
  t.Column("title", "string", {"size": 100})
  t.Column("details", "text", {"null": true})
  t.ForeignKey("user_id", {"users": ["id"]}, {"on_delete": "cascade"})
}

The id column don't have to be an integer. For instance, your can use an UUID type instead:

create_table("users") {
  t.Column("id", "uuid", {primary: true})
  // ...
}

By default, fizz will generate two timestamp columns: created_at and updated_at.

The t.Columns method takes the following arguments: name of the column, the type of the field, and finally the last argument is any options you want to set on that column.

"Common" Types:

  • string
  • text
  • timestamp, time, datetime
  • integer
  • bool
  • uuid

Any other type passed it will be be passed straight through to the underlying database.

For example for PostgreSQL you could pass jsonband it will be supported, however, SQLite will yell very loudly at you if you do the same thing!

Supported Options:

  • size - The size of the column. For example if you wanted a varchar(50) in Postgres you would do: t.Column("column_name", "string", {"size": 50})
  • null - By default columns are not allowed to be null.
  • default - The default value you want for this column. By default this is null.
  • default_raw - The default value defined as a database function.
  • after - (MySQL Only) Add a column after another column in the table. example: {"after":"created_at"}
  • first - (MySQL Only) Add a column to the first position in the table. example: {"first": true}

Composite primary key

create_table("user_privileges") {
	t.Column("user_id", "int")
	t.Column("privilege_id", "int")
	t.PrimaryKey("user_id", "privilege_id")
}

Please note that the t.PrimaryKey statement MUST be after the columns definitions.

Drop a Table

drop_table("table_name")

Rename a Table

rename_table("old_table_name", "new_table_name")

Add a Column

add_column("table_name", "column_name", "string", {})

See above for more details on column types and options.

Alter a column

change_column("table_name", "column_name", "string", {})

Rename a Column

rename_column("table_name", "old_column_name", "new_column_name")

Drop a Column

drop_column("table_name", "column_name")

Add an Index

Supported Options:

  • name - This defaults to table_name_column_name_idx
  • unique

Simple Index:

add_index("table_name", "column_name", {})

Multi-Column Index:

add_index("table_name", ["column_1", "column_2"], {})

Unique Index:

add_index("table_name", "column_name", {"unique": true})

Index Names:

add_index("table_name", "column_name", {}) # name => table_name_column_name_idx
add_index("table_name", "column_name", {"name": "custom_index_name"})

Rename an Index

rename_index("table_name", "old_index_name", "new_index_name")

Drop an Index

drop_index("table_name", "index_name")

Add a Foreign Key

add_foreign_key("table_name", "field", {"ref_table_name": ["ref_column"]}, {
    "name": "optional_fk_name",
    "on_delete": "action",
    "on_update": "action",
})

Supported Options

  • name - This defaults to table_name_ref_table_name_ref_column_name_fk
  • on_delete - CASCADE, SET NULL, ...
  • on_update

Note: on_update and on_delete are not supported on CockroachDB yet.

Drop a Foreign Key

drop_foreign_key("table_name", "fk_name", {"if_exists": true})

Supported Options

  • if_exists - Adds IF EXISTS condition

Raw SQL

sql("select * from users;")

Execute an External Command

Sometimes during a migration you need to shell out to an external command.

exec("echo hello")

Development

Testing

To run end-to-end tests, use

make test

If you made changes to the end-to-end tests and want to update the fixtures, run the following command a couple of times until tests pass:

REFRESH_FIXTURES=true make test

More Repositories

1

buffalo

Rapid Web Development w/ Go
Go
8,069
star
2

packr

The simple and easy way to embed static files into Go binaries.
Go
3,412
star
3

pop

A Tasty Treat For All Your Database Needs
Go
1,429
star
4

plush

The powerful template system that Go needs
Go
889
star
5

envy

Envy makes working with ENV variables in Go trivial.
Go
155
star
6

docs

The source for the Buffalo website
JavaScript
111
star
7

flect

An inflection engine for golang
Go
102
star
8

vuerecipe

A recipe for using Buffalo & Vue.js
Go
96
star
9

validate

This package provides a framework for writing validations for Go applications.
Go
95
star
10

velvet

A sweet velvety templating package
Go
73
star
11

genny

A framework for writing modular generators
Go
65
star
12

toodo

A Simple Todo Application Written in Buffalo
Go
60
star
13

tags

HTML tags in Go
Go
53
star
14

nulls

A collection of null types for the sql package
Go
44
star
15

buffalo-auth

Buffalo auth plugin helps adding username password authentication to your app
Go
41
star
16

authrecipe

A recipe for using Buffalo & Password Authentication
Go
29
star
17

suite

A test suite for Buffalo applications
Go
26
star
18

lush

Go
25
star
19

shoulders

SHOULDERS.md generator
Go
20
star
20

buffalo-pop

A plugin to use gobuffalo/pop with buffalo
Go
19
star
21

cli

The Buffalo CLI
Go
19
star
22

here

Go
16
star
23

buffalo-heroku

Sets up and deploys apps to Heroku
Go
16
star
24

events

Buffalo framework events management
Go
16
star
25

buffalo-plugins

This plugin has moved into github.com/gobuffalo/buffalo in buffalo v0.14.6. https://github.com/gobuffalo/buffalo
Go
16
star
26

gocraft-work-adapter

Implements the github.com/gobuffalo/buffalo/worker.Worker interface using the github.com/gocraft/work package.
Go
14
star
27

httptest

Go
14
star
28

mw-tokenauth

Buffalo token-based-authentication middleware
Go
13
star
29

buffalo-goth

Goth Generator for Buffalo
Go
12
star
30

toolkit

A tool discovery service for https://gobuffalo.io
Go
12
star
31

clara

Go
11
star
32

makr

File generation system
Go
11
star
33

packd

gobuffalo/packr interfaces
Go
9
star
34

buffalo-cli

Tools for developing Buffalo applications (v2 - WIP)
Go
9
star
35

logger

A common logging interface for the Buffalo ecosystem
Go
9
star
36

gothrecipe

A recipe for using Buffalo & Goth
Go
8
star
37

helpers

Go
8
star
38

release

Buffalo ecosystem release tool
Go
8
star
39

grift

Go based task runner
Go
8
star
40

mw-csrf

Buffalo CSRF Middleware
Go
7
star
41

mw-basicauth

Buffalo Basic Auth Middleware
Go
6
star
42

mw-i18n

Buffalo i18n Middleware
Go
6
star
43

homebrew-tap

Homebrew Formula for the buffalo projects binaries
Ruby
6
star
44

licenser

Go
5
star
45

meta

Introspection for buffalo applications
Go
5
star
46

buffalo-docker

This plugin has moved into github.com/gobuffalo/buffalo in buffalo v0.14.7.
Go
4
star
47

simple-ajax-recipe

A simple AJAX recipe for Buffalo
Go
4
star
48

soda

Soda is a CLI for https://github.com/gobuffalo/pop
Go
4
star
49

mw-forcessl

Buffalo Middleware to force SSL
Go
4
star
50

plugins

Go
4
star
51

mw-paramlogger

Buffalo Params Logger Middleware
Go
3
star
52

x

Collection of packages meant to be a "testing" ground for Buffalo packages
Go
3
star
53

mw-contenttype

Buffalo Content Type Middleware
Go
3
star
54

attrs

Go
2
star
55

plushgen

Go
2
star
56

pop-vgo

Shell
2
star
57

gogen

Go
1
star
58

replo

A GO REPL
Go
1
star
59

middleware

The default middleware for Buffalo apps
Go
1
star
60

mapgen

Go
1
star
61

mapi

Go
1
star
62

depgen

Go
1
star
63

gitgen

Makefile
1
star
64

syncx

Go
1
star