Skip to content

hetiansu5/migration

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Introduce

Database schema builder for golang.

Quick Start

package main

import (
	"database/sql"
	"fmt"
	"github.com/hetiansu5/migration/grammar/mysql"
	"github.com/hetiansu5/migration/grammar/mongo"
	"github.com/hetiansu5/migration/schema"
	mongodb "go.mongodb.org/mongo-driver/mongo"
)

func main() {
	//db connection need implemented by yourself
	var db *sql.DB

	// register grammar and db driver for default connection
	schema.Register(schema.DefaultConnection, mysql.Grammar{}, mysql.NewDriver(db))
	// create users table
	schema.Create("users", func(table *schema.Blueprint) {
		table.Increments("id")
		table.Integer("age").Default("0").Nullable().Comment("年龄")
		table.Integer("height").Nullable()
		table.String("name").Default("").Charset("utf8mb4").Collate("utf8mb4_unicode_ci").Comment("名字")
		table.Timestamp("created_at").UseCurrent()
		table.Enum("color", []string{"white", "red", "black"})
	})
	// drop users table
	schema.DropIfExists("users")

	// register mongo grammar and db driver for mongo connection
	var db2 *mongodb.Database
	schema.Register("mongo", mongo.Grammar{}, mongo.NewDriver(db2))
	// generate creating index statements
	statements := schema.Connection("mongo").TableSQL("users", func(table *schema.Blueprint) {
		table.Index("uid,pid", "name", "idx_uid_pid")
		table.Unique("session_id")
	})
	fmt.Println(statements)
}

Example

More to see example

自定义Grammar

不同的数据库有不同的语法,需要实现各自语法编译器的接口,Demo可参考grammar/mysql/grammar.go

type Grammar interface {
	Compile(*Blueprint, *Action) []string
}

type Compiler interface {
	CreateTable(*Blueprint, *Action) []string
	DropTable(*Blueprint, *Action) []string
	DropTableIfExists(*Blueprint, *Action) []string
	CreateIndex(*Blueprint, *Action) []string
	DropIndex(*Blueprint, *Action) []string
	AddColumn(*Blueprint, *Action) []string
	RenameColumn(*Blueprint, *Action) []string
	ChangeColumn(*Blueprint, *Action) []string
	DropColumn(*Blueprint, *Action) []string
}

自定义Driver

不同的数据库需要实现各个的驱动接口,比如通过语法编译输出的为ALTER TABLE users ADD size int,驱动需要能执行改语句。Demo可参考grammar/mysql/driver.go

type Driver interface {
	Run(statement string) error
}

License

MIT

About

Database schema builder

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages