github.com/goravel/framework@v1.13.9/database/console/migrate.go (about) 1 package console 2 3 import ( 4 "database/sql" 5 "errors" 6 "fmt" 7 8 "github.com/golang-migrate/migrate/v4" 9 "github.com/golang-migrate/migrate/v4/database/mysql" 10 "github.com/golang-migrate/migrate/v4/database/postgres" 11 "github.com/golang-migrate/migrate/v4/database/sqlserver" 12 13 "github.com/goravel/framework/contracts/config" 14 "github.com/goravel/framework/contracts/database/orm" 15 "github.com/goravel/framework/database/console/driver" 16 "github.com/goravel/framework/database/db" 17 "github.com/goravel/framework/support" 18 ) 19 20 func getMigrate(config config.Config) (*migrate.Migrate, error) { 21 connection := config.GetString("database.default") 22 driver := config.GetString("database.connections." + connection + ".driver") 23 dir := "file://./database/migrations" 24 if support.RelativePath != "" { 25 dir = fmt.Sprintf("file://%s/database/migrations", support.RelativePath) 26 } 27 28 gormConfig := db.NewConfigImpl(config, connection) 29 writeConfigs := gormConfig.Writes() 30 if len(writeConfigs) == 0 { 31 return nil, errors.New("not found database configuration") 32 } 33 34 switch orm.Driver(driver) { 35 case orm.DriverMysql: 36 dsn := db.NewDsnImpl(config, connection) 37 mysqlDsn := dsn.Mysql(writeConfigs[0]) 38 if mysqlDsn == "" { 39 return nil, nil 40 } 41 42 db, err := sql.Open("mysql", mysqlDsn) 43 if err != nil { 44 return nil, err 45 } 46 47 instance, err := mysql.WithInstance(db, &mysql.Config{ 48 MigrationsTable: config.GetString("database.migrations"), 49 }) 50 if err != nil { 51 return nil, err 52 } 53 54 return migrate.NewWithDatabaseInstance(dir, "mysql", instance) 55 case orm.DriverPostgresql: 56 dsn := db.NewDsnImpl(config, connection) 57 postgresqlDsn := dsn.Postgresql(writeConfigs[0]) 58 if postgresqlDsn == "" { 59 return nil, nil 60 } 61 62 db, err := sql.Open("postgres", postgresqlDsn) 63 if err != nil { 64 return nil, err 65 } 66 67 instance, err := postgres.WithInstance(db, &postgres.Config{ 68 MigrationsTable: config.GetString("database.migrations"), 69 }) 70 if err != nil { 71 return nil, err 72 } 73 74 return migrate.NewWithDatabaseInstance(dir, "postgres", instance) 75 case orm.DriverSqlite: 76 dsn := db.NewDsnImpl(config, "") 77 sqliteDsn := dsn.Sqlite(writeConfigs[0]) 78 if sqliteDsn == "" { 79 return nil, nil 80 } 81 82 db, err := sql.Open("sqlite", sqliteDsn) 83 if err != nil { 84 return nil, err 85 } 86 87 instance, err := sqlite.WithInstance(db, &sqlite.Config{ 88 MigrationsTable: config.GetString("database.migrations"), 89 }) 90 if err != nil { 91 return nil, err 92 } 93 94 return migrate.NewWithDatabaseInstance(dir, "sqlite3", instance) 95 case orm.DriverSqlserver: 96 dsn := db.NewDsnImpl(config, connection) 97 sqlserverDsn := dsn.Sqlserver(writeConfigs[0]) 98 if sqlserverDsn == "" { 99 return nil, nil 100 } 101 102 db, err := sql.Open("sqlserver", sqlserverDsn) 103 if err != nil { 104 return nil, err 105 } 106 107 instance, err := sqlserver.WithInstance(db, &sqlserver.Config{ 108 MigrationsTable: config.GetString("database.migrations"), 109 }) 110 111 if err != nil { 112 return nil, err 113 } 114 115 return migrate.NewWithDatabaseInstance(dir, "sqlserver", instance) 116 default: 117 return nil, errors.New("database driver only support mysql, postgresql, sqlite and sqlserver") 118 } 119 }