diff options
author | Teddy Wing | 2022-03-12 00:59:23 +0100 |
---|---|---|
committer | Teddy Wing | 2022-03-12 00:59:23 +0100 |
commit | 41b1d59419a18cc63386e8e246ad485a66dd603e (patch) | |
tree | 91dc7bbae19f752504ef16c22de75c8f8da54f23 | |
parent | 8fc5b5f373ef7c602d3abcfb2c1bf75c7a2300b8 (diff) | |
download | yaqlite-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.
-rw-r--r-- | src/main.rs | 25 |
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) + } +} |