aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md10
-rw-r--r--example_test.go90
2 files changed, 97 insertions, 3 deletions
diff --git a/README.md b/README.md
index 1a4d34a..ec3d3b8 100644
--- a/README.md
+++ b/README.md
@@ -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
+}