mirror of
https://github.com/nbd-wtf/go-nostr.git
synced 2025-03-17 13:22:56 +01:00
sdk/hints: implement sql migrations.
This commit is contained in:
parent
501b2a7679
commit
1ff5647b2d
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,2 @@
|
||||
go-nostr
|
||||
libsecp256k1
|
||||
knowledge.md
|
||||
|
@ -47,20 +47,92 @@ func NewSQLHints(db *sql.DB, driverName string) (SQLHints, error) {
|
||||
}
|
||||
}
|
||||
|
||||
_, err := sh.Exec(`CREATE TABLE IF NOT EXISTS nostr_sdk_pubkey_relays (pubkey text, relay text, ` + cols.String())
|
||||
if err != nil {
|
||||
// db migrations
|
||||
if txn, err := sh.Beginx(); err != nil {
|
||||
return SQLHints{}, err
|
||||
} else {
|
||||
if _, err := txn.Exec(`CREATE TABLE IF NOT EXISTS nostr_sdk_db_version (version int)`); err != nil {
|
||||
txn.Rollback()
|
||||
return SQLHints{}, err
|
||||
}
|
||||
var version int
|
||||
if err := txn.Get(&version, `SELECT version FROM nostr_sdk_db_version`); err != nil && err != sql.ErrNoRows {
|
||||
txn.Rollback()
|
||||
return SQLHints{}, err
|
||||
}
|
||||
|
||||
_, err = sh.Exec(`CREATE UNIQUE INDEX IF NOT EXISTS pkr ON nostr_sdk_pubkey_relays (pubkey, relay)`)
|
||||
if err != nil {
|
||||
if version == 0 {
|
||||
if _, err := txn.Exec(`INSERT INTO nostr_sdk_db_version VALUES (0)`); err != nil {
|
||||
txn.Rollback()
|
||||
return SQLHints{}, err
|
||||
}
|
||||
|
||||
_, err = sh.Exec(`CREATE INDEX IF NOT EXISTS bypk ON nostr_sdk_pubkey_relays (pubkey)`)
|
||||
if err != nil {
|
||||
version = 1
|
||||
if _, err := txn.Exec(
|
||||
`CREATE TABLE IF NOT EXISTS nostr_sdk_pubkey_relays (pubkey text, relay text, ` +
|
||||
cols.String(),
|
||||
); err != nil {
|
||||
txn.Rollback()
|
||||
return SQLHints{}, err
|
||||
}
|
||||
if _, err := txn.Exec(
|
||||
`CREATE UNIQUE INDEX IF NOT EXISTS pkr ON nostr_sdk_pubkey_relays (pubkey, relay)`,
|
||||
); err != nil {
|
||||
txn.Rollback()
|
||||
return SQLHints{}, err
|
||||
}
|
||||
if _, err := txn.Exec(
|
||||
`CREATE INDEX IF NOT EXISTS bypk ON nostr_sdk_pubkey_relays (pubkey)`,
|
||||
); err != nil {
|
||||
txn.Rollback()
|
||||
return SQLHints{}, err
|
||||
}
|
||||
}
|
||||
|
||||
if version == 1 {
|
||||
version = 2
|
||||
if _, err := txn.Exec(
|
||||
`ALTER TABLE nostr_sdk_pubkey_relays DROP COLUMN last_in_tag`,
|
||||
); err != nil {
|
||||
txn.Rollback()
|
||||
return SQLHints{}, err
|
||||
}
|
||||
if _, err := txn.Exec(
|
||||
`ALTER TABLE nostr_sdk_pubkey_relays DROP COLUMN last_in_nprofile`,
|
||||
); err != nil {
|
||||
txn.Rollback()
|
||||
return SQLHints{}, err
|
||||
}
|
||||
if _, err := txn.Exec(
|
||||
`ALTER TABLE nostr_sdk_pubkey_relays DROP COLUMN last_in_nevent`,
|
||||
); err != nil {
|
||||
txn.Rollback()
|
||||
return SQLHints{}, err
|
||||
}
|
||||
if _, err := txn.Exec(
|
||||
`ALTER TABLE nostr_sdk_pubkey_relays DROP COLUMN last_in_nip05`,
|
||||
); err != nil {
|
||||
txn.Rollback()
|
||||
return SQLHints{}, err
|
||||
}
|
||||
if _, err := txn.Exec(
|
||||
`ALTER TABLE nostr_sdk_pubkey_relays ADD COLUMN last_in_hint integer`,
|
||||
); err != nil {
|
||||
txn.Rollback()
|
||||
return SQLHints{}, err
|
||||
}
|
||||
}
|
||||
|
||||
if _, err := txn.Exec(
|
||||
fmt.Sprintf(`UPDATE nostr_sdk_db_version SET version = %d`, version),
|
||||
); err != nil {
|
||||
txn.Rollback()
|
||||
return SQLHints{}, err
|
||||
}
|
||||
if err := txn.Commit(); err != nil {
|
||||
txn.Rollback()
|
||||
return SQLHints{}, err
|
||||
}
|
||||
}
|
||||
|
||||
// prepare statements
|
||||
for i := range hints.KeyBasePoints {
|
||||
|
Loading…
x
Reference in New Issue
Block a user