2020-01-14 14:14:16 -05:00
package main
import (
2020-01-14 14:29:00 -05:00
"encoding/json"
"github.com/openaccounting/oa-server/core/model/db"
"github.com/openaccounting/oa-server/core/model/types"
"log"
"os"
2020-01-14 14:14:16 -05:00
)
func main ( ) {
2020-01-14 14:29:00 -05:00
if len ( os . Args ) != 2 {
log . Fatal ( "Usage: migrate3.go <upgrade/downgrade>" )
}
2020-01-14 14:14:16 -05:00
2020-01-14 14:29:00 -05:00
command := os . Args [ 1 ]
2020-01-14 14:14:16 -05:00
2020-01-14 14:29:00 -05:00
if command != "upgrade" && command != "downgrade" {
log . Fatal ( "Usage: migrate3.go <upgrade/downgrade>" )
}
2020-01-14 14:14:16 -05:00
2020-01-14 14:29:00 -05:00
//filename is the path to the json config file
var config types . Config
file , err := os . Open ( "./config.json" )
2020-01-14 14:14:16 -05:00
2020-01-14 14:29:00 -05:00
if err != nil {
log . Fatal ( err )
}
2020-01-14 14:14:16 -05:00
2020-01-14 14:29:00 -05:00
decoder := json . NewDecoder ( file )
err = decoder . Decode ( & config )
2020-01-14 14:14:16 -05:00
2020-01-14 14:29:00 -05:00
if err != nil {
log . Fatal ( err )
}
2020-01-14 14:14:16 -05:00
2020-01-14 14:29:00 -05:00
connectionString := config . User + ":" + config . Password + "@/" + config . Database
db , err := db . NewDB ( connectionString )
2020-01-14 14:14:16 -05:00
2020-01-14 14:29:00 -05:00
if command == "upgrade" {
err = upgrade ( db )
} else {
err = downgrade ( db )
}
2020-01-14 14:14:16 -05:00
2020-01-14 14:29:00 -05:00
if err != nil {
log . Fatal ( err )
}
2020-01-14 14:14:16 -05:00
2020-01-14 14:29:00 -05:00
log . Println ( "done" )
2020-01-14 14:14:16 -05:00
}
func upgrade ( db * db . DB ) ( err error ) {
2020-01-14 14:29:00 -05:00
tx , err := db . Begin ( )
if err != nil {
return
}
defer func ( ) {
if p := recover ( ) ; p != nil {
tx . Rollback ( )
panic ( p ) // re-throw panic after Rollback
} else if err != nil {
tx . Rollback ( )
} else {
err = tx . Commit ( )
}
} ( )
query1 := "CREATE TABLE budgetitem (id INT UNSIGNED NOT NULL AUTO_INCREMENT, orgId BINARY(16) NOT NULL, accountId BINARY(16) NOT NULL, inserted BIGINT UNSIGNED NOT NULL, amount BIGINT NOT NULL, PRIMARY KEY(id)) ENGINE=InnoDB;"
if _ , err = tx . Exec ( query1 ) ; err != nil {
return
}
return
2020-01-14 14:14:16 -05:00
}
func downgrade ( db * db . DB ) ( err error ) {
2020-01-14 14:29:00 -05:00
tx , err := db . Begin ( )
if err != nil {
return
}
defer func ( ) {
if p := recover ( ) ; p != nil {
tx . Rollback ( )
panic ( p ) // re-throw panic after Rollback
} else if err != nil {
tx . Rollback ( )
} else {
err = tx . Commit ( )
}
} ( )
query1 := "DROP TABLE budgetitem"
if _ , err = tx . Exec ( query1 ) ; err != nil {
return
}
return
2020-01-14 14:14:16 -05:00
}