Files

46 lines
1.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package sqlite
import (
"database/sql"
"fmt"
"io/ioutil"
"path/filepath"
"strings"
)
func RunMigrations(db *sql.DB, migrationsPath string) error {
// Находим все .up.sql файлы
files, err := filepath.Glob(filepath.Join(migrationsPath, "*.up.sql"))
if err != nil {
return fmt.Errorf("failed to find migrations: %w", err)
}
for _, file := range files {
fmt.Printf("Applying migration: %s\n", file)
content, err := ioutil.ReadFile(file)
if err != nil {
return fmt.Errorf("failed to read migration file %s: %w", file, err)
}
// Разделяем SQL statements по точке с запятой
statements := strings.Split(string(content), ";")
for _, stmt := range statements {
stmt = strings.TrimSpace(stmt)
if stmt == "" {
continue
}
// Выполняем SQL
if _, err := db.Exec(stmt); err != nil {
// Игнорируем ошибку "table already exists"
if !strings.Contains(err.Error(), "already exists") {
return fmt.Errorf("failed to execute migration %s: %w\nSQL: %s", file, err, stmt)
}
}
}
}
return nil
}