From: Steve Myers Date: Thu, 12 May 2022 00:33:32 +0000 (-0700) Subject: Update sqlite schema with unique index for utxos, change insert_utxo to upsert X-Git-Tag: v0.19.0~6^2~2 X-Git-Url: http://internal-gitweb-vhost/script/%22https:/%22example_cli/enum.Commands.html/struct.CommandStringError.html?a=commitdiff_plain;h=0b1a399f4e556a981bb992cc9b1d34318e260a7c;p=bdk Update sqlite schema with unique index for utxos, change insert_utxo to upsert --- diff --git a/src/database/sqlite.rs b/src/database/sqlite.rs index 8f57205c..645cda09 100644 --- a/src/database/sqlite.rs +++ b/src/database/sqlite.rs @@ -41,6 +41,16 @@ static MIGRATIONS: &[&str] = &[ "INSERT INTO transaction_details SELECT txid, timestamp, received, sent, fee, height FROM transaction_details_old;", "DROP TABLE transaction_details_old;", "ALTER TABLE utxos ADD COLUMN is_spent;", + // drop all data due to possible inconsistencies with duplicate utxos, re-sync required + "DELETE FROM checksums;", + "DELETE FROM last_derivation_indices;", + "DELETE FROM script_pubkeys;", + "DELETE FROM sync_time;", + "DELETE FROM transaction_details;", + "DELETE FROM transactions;", + "DELETE FROM utxos;", + "DROP INDEX idx_txid_vout;", + "CREATE UNIQUE INDEX idx_utxos_txid_vout ON utxos(txid, vout);" ]; /// Sqlite database stored on filesystem @@ -86,7 +96,7 @@ impl SqliteDatabase { script: &[u8], is_spent: bool, ) -> Result { - let mut statement = self.connection.prepare_cached("INSERT INTO utxos (value, keychain, vout, txid, script, is_spent) VALUES (:value, :keychain, :vout, :txid, :script, :is_spent)")?; + let mut statement = self.connection.prepare_cached("INSERT INTO utxos (value, keychain, vout, txid, script, is_spent) VALUES (:value, :keychain, :vout, :txid, :script, :is_spent) ON CONFLICT(txid, vout) DO UPDATE SET value=:value, keychain=:keychain, script=:script, is_spent=:is_spent")?; statement.execute(named_params! { ":value": value, ":keychain": keychain,