-
Notifications
You must be signed in to change notification settings - Fork 247
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
134 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package v6 | ||
|
||
import ( | ||
"fmt" | ||
|
||
v6db "github.com/forbole/callisto/v4/database/migrate/v6" | ||
parse "github.com/forbole/juno/v5/cmd/parse/types" | ||
"github.com/forbole/juno/v5/database" | ||
"github.com/forbole/juno/v5/database/postgresql" | ||
"github.com/forbole/juno/v5/types/config" | ||
) | ||
|
||
// RunMigration runs the migrations to v5 | ||
func RunMigration(parseConfig *parse.Config) error { | ||
cfg, err := GetConfig() | ||
if err != nil { | ||
return fmt.Errorf("error while reading config: %s", err) | ||
} | ||
|
||
// Migrate the database | ||
err = migrateDb(cfg, parseConfig) | ||
if err != nil { | ||
return fmt.Errorf("error while migrating database: %s", err) | ||
} | ||
|
||
return nil | ||
} | ||
|
||
func migrateDb(cfg config.Config, parseConfig *parse.Config) error { | ||
// Build the codec | ||
encodingConfig := parseConfig.GetEncodingConfigBuilder()() | ||
|
||
// Get the db | ||
databaseCtx := database.NewContext(cfg.Database, encodingConfig, parseConfig.GetLogger()) | ||
db, err := postgresql.Builder(databaseCtx) | ||
if err != nil { | ||
return fmt.Errorf("error while building the db: %s", err) | ||
} | ||
|
||
// Build the migrator and perform the migrations | ||
migrator := v6db.NewMigrator(db.(*postgresql.Database)) | ||
return migrator.Migrate() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package v6 | ||
|
||
import ( | ||
"fmt" | ||
"os" | ||
"path" | ||
|
||
"github.com/forbole/juno/v5/types/config" | ||
"gopkg.in/yaml.v3" | ||
) | ||
|
||
// GetConfig returns the configuration reading it from the config.yaml file present inside the home directory | ||
func GetConfig() (config.Config, error) { | ||
file := path.Join(config.HomePath, "config.yaml") | ||
|
||
// Make sure the path exists | ||
if _, err := os.Stat(file); os.IsNotExist(err) { | ||
return config.Config{}, fmt.Errorf("config file does not exist") | ||
} | ||
|
||
bz, err := os.ReadFile(file) | ||
if err != nil { | ||
return config.Config{}, fmt.Errorf("error while reading config file: %s", err) | ||
} | ||
|
||
var cfg config.Config | ||
err = yaml.Unmarshal(bz, &cfg) | ||
return cfg, err | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package v6 | ||
|
||
// Migrate implements database.Migrator | ||
func (db *Migrator) Migrate() error { | ||
stmt := ` | ||
BEGIN; | ||
DROP TABLE gov_params; | ||
CREATE TABLE gov_params | ||
( | ||
one_row_id BOOLEAN NOT NULL DEFAULT TRUE PRIMARY KEY, | ||
params JSONB NOT NULL, | ||
height BIGINT NOT NULL, | ||
CHECK (one_row_id) | ||
); | ||
ALTER TABLE proposal ADD COLUMN metadata TEXT NOT NULL DEFAULT ''; | ||
ALTER TABLE proposal DROP COLUMN proposal_route; | ||
ALTER TABLE proposal DROP COLUMN proposal_type; | ||
ALTER TABLE proposal_deposit ADD COLUMN transaction_hash TEXT NOT NULL DEFAULT ''; | ||
ALTER TABLE proposal_deposit DROP CONSTRAINT unique_deposit; | ||
ALTER TABLE proposal_deposit ADD CONSTRAINT unique_deposit UNIQUE (proposal_id, depositor_address, transaction_hash); | ||
ALTER TABLE proposal_vote ADD COLUMN weight TEXT NOT NULL DEFAULT '1.0'; | ||
ALTER TABLE proposal_vote DROP CONSTRAINT unique_vote; | ||
ALTER TABLE proposal_vote ADD CONSTRAINT unique_vote UNIQUE (proposal_id, voter_address, option); | ||
ALTER TABLE validator_voting_power ALTER COLUMN voting_power TYPE BIGINT USING voting_power::BIGINT; | ||
ALTER TABLE proposal_validator_status_snapshot ALTER COLUMN voting_power TYPE BIGINT USING voting_power::BIGINT; | ||
COMMIT; | ||
` | ||
|
||
_, err := db.SQL.Exec(stmt) | ||
|
||
return err | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package v6 | ||
|
||
import ( | ||
"github.com/jmoiron/sqlx" | ||
|
||
"github.com/forbole/juno/v5/database" | ||
"github.com/forbole/juno/v5/database/postgresql" | ||
) | ||
|
||
var _ database.Migrator = &Migrator{} | ||
|
||
// Migrator represents the database migrator that should be used to migrate from v4 of the database to v5 | ||
type Migrator struct { | ||
SQL *sqlx.DB | ||
} | ||
|
||
func NewMigrator(db *postgresql.Database) *Migrator { | ||
return &Migrator{ | ||
SQL: db.SQL, | ||
} | ||
} |