use miden_node_db::sqlite::WriteTx;
use miden_protocol::Word;
use miden_protocol::account::{AccountId, StorageMapKey, StorageSlotName};
use miden_protocol::block::BlockNumber;
use crate::db::queries::VALID_FOREVER;
use crate::errors::DatabaseError;
const SQL_CLOSE: &str = include_str!("close_storage_map_value_validity.sql");
const SQL_INSERT: &str = include_str!("insert_storage_map_value.sql");
pub(crate) fn insert_storage_map_value(
tx: &WriteTx<'_>,
account_id: AccountId,
block_num: BlockNumber,
slot_name: &StorageSlotName,
key: StorageMapKey,
value: Word,
) -> Result<usize, DatabaseError> {
insert_storage_map_value_inner(tx, account_id, block_num, slot_name, key, value, true)
}
pub(super) fn insert_storage_map_value_inner(
tx: &WriteTx<'_>,
account_id: AccountId,
block_num: BlockNumber,
slot_name: &StorageSlotName,
key: StorageMapKey,
value: Word,
invalidate_previous: bool,
) -> Result<usize, DatabaseError> {
let mut count = 0;
if invalidate_previous {
count +=
tx.execute(SQL_CLOSE, &[&block_num, &account_id, slot_name, &key, &VALID_FOREVER])?;
}
count += tx
.execute(SQL_INSERT, &[&account_id, &block_num, slot_name, &key, &value, &VALID_FOREVER])?;
Ok(count)
}