diff options
| -rw-r--r-- | README.md | 10 | ||||
| -rw-r--r-- | example_test.go | 90 |
2 files changed, 97 insertions, 3 deletions
@@ -4,15 +4,19 @@ A very simple migration library for your Go projects. ## Features -- Any database/sql drivers should work. See https://github.com/golang/go/wiki/SQLDrivers +- Any database/sql compatible drivers should work. See + https://github.com/golang/go/wiki/SQLDrivers - Each migration is run in a transaction so there should be no 'dirty' state. - Only migrates "up". I have never used a "down" migration. -- Enables a callback function to suit whatever logging implementation you choose. +- Enables a callback function to suit whatever logging implementation you + choose. -## Usage +- Supports Go1.16's io/fs interface for embedded migrations. + +## Example usage ```go import "src.userspace.com.au/go-migrate" diff --git a/example_test.go b/example_test.go new file mode 100644 index 0000000..c381a8b --- /dev/null +++ b/example_test.go @@ -0,0 +1,90 @@ +package migrate_test + +import ( + "database/sql" + "embed" + "fmt" + + "src.userspace.com.au/go-migrate" +) + +func ExampleNewFileMigrator() { + db, err := sql.Open("sqlite3", "file:test?mode=memory&cache=shared") + if err != nil { + fmt.Printf("error: %s\n", err) + } + defer db.Close() + + // Relative path to migration files + migrator, err := migrate.NewFileMigrator(db, "file://testdata/") + if err != nil { + fmt.Printf("error: %s\n", err) + } + + // Migrate all the way + err = migrator.Migrate() + if err != nil { + fmt.Printf("error: %s\n", err) + } + + v, err := migrator.Version() + fmt.Printf("database at version %d\n", v) + // Output: database at version 2 +} + +func ExampleNewFSMigrator() { + //go:embed testdata/*.sql + var migrations embed.FS + + db, err := sql.Open("sqlite3", "file:test?mode=memory&cache=shared") + if err != nil { + fmt.Printf("error: %s\n", err) + } + defer db.Close() + + // Relative path to migration files + migrator, err := migrate.NewFSMigrator(db, migrations) + if err != nil { + fmt.Printf("error: %s\n", err) + } + + // Migrate all the way + err = migrator.Migrate() + if err != nil { + fmt.Printf("error: %s\n", err) + } + + v, err := migrator.Version() + fmt.Printf("database at version %d\n", v) + // Output: database at version 2 +} + +func ExampleNewStringMigrator() { + + migrations := []string{ + "create table if not exists test1 (pk bigint not null primary key);", + "insert into test1 (pk) values (1)", + } + + db, err := sql.Open("sqlite3", "file:test?mode=memory&cache=shared") + if err != nil { + fmt.Printf("error: %s\n", err) + } + defer db.Close() + + // Relative path to migration files + migrator, err := migrate.NewStringMigrator(db, migrations) + if err != nil { + fmt.Printf("error: %s\n", err) + } + + // Migrate all the way + err = migrator.Migrate() + if err != nil { + fmt.Printf("error: %s\n", err) + } + + v, err := migrator.Version() + fmt.Printf("database at version %d\n", v) + // Output: database at version 2 +} |
