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
|
go-nostr
|
||||||
libsecp256k1
|
libsecp256k1
|
||||||
knowledge.md
|
|
||||||
|
@ -47,19 +47,91 @@ 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())
|
// db migrations
|
||||||
if err != nil {
|
if txn, err := sh.Beginx(); err != nil {
|
||||||
return SQLHints{}, err
|
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 version == 0 {
|
||||||
if err != nil {
|
if _, err := txn.Exec(`INSERT INTO nostr_sdk_db_version VALUES (0)`); err != nil {
|
||||||
return SQLHints{}, err
|
txn.Rollback()
|
||||||
}
|
return SQLHints{}, err
|
||||||
|
}
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_, err = sh.Exec(`CREATE INDEX IF NOT EXISTS bypk ON nostr_sdk_pubkey_relays (pubkey)`)
|
if version == 1 {
|
||||||
if err != nil {
|
version = 2
|
||||||
return SQLHints{}, err
|
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
|
// prepare statements
|
||||||
|
Loading…
x
Reference in New Issue
Block a user