| 246 | } |
| 247 | |
| 248 | bool wallet_update_output_status(struct wallet *w, |
| 249 | const struct bitcoin_outpoint *outpoint, |
| 250 | enum output_status oldstatus, |
| 251 | enum output_status newstatus) |
| 252 | { |
| 253 | struct db_stmt *stmt; |
| 254 | size_t changes; |
| 255 | if (oldstatus != OUTPUT_STATE_ANY) { |
| 256 | stmt = db_prepare_v2( |
| 257 | w->db, SQL("UPDATE outputs SET status=? WHERE status=? AND " |
| 258 | "prev_out_tx=? AND prev_out_index=?")); |
| 259 | db_bind_int(stmt, 0, output_status_in_db(newstatus)); |
| 260 | db_bind_int(stmt, 1, output_status_in_db(oldstatus)); |
| 261 | db_bind_txid(stmt, 2, &outpoint->txid); |
| 262 | db_bind_int(stmt, 3, outpoint->n); |
| 263 | } else { |
| 264 | stmt = db_prepare_v2(w->db, |
| 265 | SQL("UPDATE outputs SET status=? WHERE " |
| 266 | "prev_out_tx=? AND prev_out_index=?")); |
| 267 | db_bind_int(stmt, 0, output_status_in_db(newstatus)); |
| 268 | db_bind_txid(stmt, 1, &outpoint->txid); |
| 269 | db_bind_int(stmt, 2, outpoint->n); |
| 270 | } |
| 271 | db_exec_prepared_v2(stmt); |
| 272 | changes = db_count_changes(stmt); |
| 273 | tal_free(stmt); |
| 274 | return changes > 0; |
| 275 | } |
| 276 | |
| 277 | struct utxo **wallet_get_utxos(const tal_t *ctx, struct wallet *w, const enum output_status state) |
| 278 | { |