use log::trace;
use crate::content::InformationSource;
use crate::content::RedirectData;
use crate::database::error::SmuggleDatabaseErrorExtension;
use crate::database::id::EntityGenerationId;
use crate::database::DatabaseError;
use crate::database::sqlite_helper::*;
use crate::database::summary::structs::SummaryDatabase;
use crate::summary::WithEntityGenerationId;
impl SummaryDatabase {
pub fn store_redirect_summary(
&mut self,
redirect: WithEntityGenerationId<RedirectData>,
) -> Result<(), DatabaseError> {
self.base().assert_writable("store_redirect_summary")?;
trace!("summary_db.store_redirect_summary()");
let to_url_id = self.base_mut().get_or_add_url_id(&redirect.data.to_url.clone().into())?;
self.connection().execute(
"INSERT INTO redirect_summary (
entity_generation_id,
to_url_id,
to_url_fragment,
information_source,
is_permanent,
by_security_policy
) Values (?,?,?,?, ?,?)
",(
redirect.entity_generation_id,
to_url_id,
redirect.data.to_url.fragment(),
redirect.data.information_source.to_number(),
redirect.data.is_permanent,
redirect.data.by_security_policy,
))?;
return Ok(());
}
pub fn get_redirect_summary(
&mut self,
entity_generation_id: EntityGenerationId,
) -> Result<RedirectData, DatabaseError> {
trace!("summary_db.get_redirect_summary()");
return self.connection().query_row(
"SELECT
to_url_id,
information_source,
is_permanent,
by_security_policy,
to_url_fragment
FROM file_summary
WHERE entity_generation_id = ?
",(entity_generation_id,),
|row| {
return Ok(RedirectData {
to_url: url_with_fragment_from_row(self.base(), row, 0, 4)
.smuggle_through_rusqlite()?,
information_source: InformationSource::from_number(row.get(1)?),
is_permanent: row.get(2)?,
by_security_policy: row.get(3)?,
})
}
).map_err(Into::into);
}
}