func createOldMigrationFile(url, migrationsPath string) error { version := file.Version(20060102150405) filenamef := "%d_%s.%s.%s" name := "old" d, err := driver.New(url) if err != nil { return err } mfile := &file.MigrationFile{ Version: version, UpFile: &file.File{ Path: migrationsPath, FileName: fmt.Sprintf(filenamef, version, name, "up", d.FilenameExtension()), Name: name, Content: []byte(""), Direction: direction.Up, }, DownFile: &file.File{ Path: migrationsPath, FileName: fmt.Sprintf(filenamef, version, name, "down", d.FilenameExtension()), Name: name, Content: []byte(""), Direction: direction.Down, }, } err = ioutil.WriteFile(path.Join(mfile.UpFile.Path, mfile.UpFile.FileName), mfile.UpFile.Content, 0644) return err }
// Versions returns the list of applied migrations. func (driver *Driver) Versions() (file.Versions, error) { versions := file.Versions{} iter := driver.session.Query("SELECT version FROM " + tableName).Iter() var version int64 for iter.Scan(&version) { versions = append(versions, file.Version(version)) } err := iter.Close() sort.Sort(sort.Reverse(versions)) return versions, err }
// Create creates new migration files on disk. func Create(url, migrationsPath, name string) (*file.MigrationFile, error) { d, files, _, err := initDriverAndReadMigrationFilesAndGetVersions(url, migrationsPath) if err != nil { return nil, err } versionStr := time.Now().UTC().Format("20060102150405") v, _ := strconv.ParseUint(versionStr, 10, 64) version := file.Version(v) filenamef := "%d_%s.%s.%s" name = strings.Replace(name, " ", "_", -1) // if latest version has the same timestamp, increment version if len(files) > 0 { latest := files[len(files)-1].Version if latest >= version { version = latest + 1 } } mfile := &file.MigrationFile{ Version: version, UpFile: &file.File{ Path: migrationsPath, FileName: fmt.Sprintf(filenamef, version, name, "up", d.FilenameExtension()), Name: name, Content: []byte(""), Direction: direction.Up, }, DownFile: &file.File{ Path: migrationsPath, FileName: fmt.Sprintf(filenamef, version, name, "down", d.FilenameExtension()), Name: name, Content: []byte(""), Direction: direction.Down, }, } if err := ioutil.WriteFile(path.Join(mfile.UpFile.Path, mfile.UpFile.FileName), mfile.UpFile.Content, 0644); err != nil { return nil, err } if err := ioutil.WriteFile(path.Join(mfile.DownFile.Path, mfile.DownFile.FileName), mfile.DownFile.Content, 0644); err != nil { return nil, err } return mfile, nil }
// Version returns the current migration version. func (driver *Driver) Version() (file.Version, error) { return file.Version(0), nil }