aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTeddy Wing2022-03-12 00:59:23 +0100
committerTeddy Wing2022-03-12 00:59:23 +0100
commit41b1d59419a18cc63386e8e246ad485a66dd603e (patch)
tree91dc7bbae19f752504ef16c22de75c8f8da54f23 /src
parent8fc5b5f373ef7c602d3abcfb2c1bf75c7a2300b8 (diff)
downloadyaqlite-41b1d59419a18cc63386e8e246ad485a66dd603e.tar.bz2
Convert `yaml::Yaml` values to `rusqlite::ToSql`
This enables us to build a list of params for insertion and insert them into the database. Not sure if `NULL` makes sense for all of these types, but this at least gives us the type conversion necessary to get the YAML values into the SQL query, cool.
Diffstat (limited to 'src')
-rw-r--r--src/main.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs
index 0c445fe..d5849ff 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -70,7 +70,8 @@ fn yaml_extract(
)
).unwrap();
- // stmt.insert(rusqlite::params_from_iter(hash.values())).unwrap();
+ let values = hash.values().map(|v| Yaml(v));
+ stmt.insert(rusqlite::params_from_iter(values)).unwrap();
// tx.execute(
// r#"
@@ -132,3 +133,25 @@ fn get_column_names(dbconn: &rusqlite::Connection) -> HashMap<String, rusqlite::
column_names
}
+
+struct Yaml<'a>(&'a yaml::Yaml);
+
+impl<'a> rusqlite::ToSql for Yaml<'a> {
+ fn to_sql(&self) -> rusqlite::Result<rusqlite::types::ToSqlOutput<'_>> {
+ use rusqlite::types::ToSqlOutput;
+
+ let sql_output = match self.0 {
+ yaml::Yaml::Real(_) => ToSqlOutput::from(self.0.as_f64().unwrap()),
+ yaml::Yaml::Integer(_) => ToSqlOutput::from(self.0.as_i64().unwrap()),
+ yaml::Yaml::String(_) => ToSqlOutput::from(self.0.as_str().unwrap()),
+ yaml::Yaml::Boolean(_) => ToSqlOutput::from(self.0.as_bool().unwrap()),
+ yaml::Yaml::Array(_) => ToSqlOutput::from(rusqlite::types::Null),
+ yaml::Yaml::Hash(_) => ToSqlOutput::from(rusqlite::types::Null),
+ yaml::Yaml::Alias(_) => ToSqlOutput::from(rusqlite::types::Null),
+ yaml::Yaml::Null => ToSqlOutput::from(rusqlite::types::Null),
+ yaml::Yaml::BadValue => ToSqlOutput::from(rusqlite::types::Null),
+ };
+
+ Ok(sql_output)
+ }
+}