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 /src | |
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.
Diffstat (limited to 'src')
-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) + } +} |