diff --git a/01.workspace/heave/src/fun/sqlite_persist_catalog.rs b/01.workspace/heave/src/fun/sqlite_persist_catalog.rs index 42edd3c..45a3dbd 100644 --- a/01.workspace/heave/src/fun/sqlite_persist_catalog.rs +++ b/01.workspace/heave/src/fun/sqlite_persist_catalog.rs @@ -33,7 +33,7 @@ fn write_attribute( transaction: &rusqlite::Transaction, ) -> result::Result<(), FailedTo> { let column = column(&attribute.value); - let attribute_values = (&attribute.id, &entity.id, &attribute.value.to_string()); + let attribute_values = (&attribute.id, &entity.id, &attribute.value); let insert_attribute_statement = INSERT_ATTRIBUTE_STATEMENT_TEMPLATE.replace("{column}", column); transaction diff --git a/01.workspace/heave/src/imp/mod.rs b/01.workspace/heave/src/imp/mod.rs index 295bf6c..64775a2 100644 --- a/01.workspace/heave/src/imp/mod.rs +++ b/01.workspace/heave/src/imp/mod.rs @@ -21,6 +21,7 @@ pub mod f64_try_from_value; pub mod i32_try_from_value; pub mod i64_try_from_value; pub mod string_try_from_value; +pub mod to_sql_value; pub mod u32_try_from_value; pub mod value_from_bool; pub mod value_from_f64; diff --git a/01.workspace/heave/src/imp/to_sql_value.rs b/01.workspace/heave/src/imp/to_sql_value.rs new file mode 100644 index 0000000..a5e3b8a --- /dev/null +++ b/01.workspace/heave/src/imp/to_sql_value.rs @@ -0,0 +1,13 @@ +use crate::*; + +impl rusqlite::ToSql for Value { + fn to_sql(&self) -> std::result::Result, rusqlite::Error> { + match self { + Value::Bool(value) => Ok(rusqlite::types::ToSqlOutput::from(*value as i64)), + Value::Real(value) => Ok(rusqlite::types::ToSqlOutput::from(*value)), + Value::SignedInt(value) => Ok(rusqlite::types::ToSqlOutput::from(*value)), + Value::Text(value) => Ok(rusqlite::types::ToSqlOutput::from(value.to_string())), + Value::UnsignedInt(value) => Ok(rusqlite::types::ToSqlOutput::from(*value as i64)), + } + } +}