Age | Commit message (Collapse) | Author |
|
|
|
Use `anyhow` to add context to errors and a `main()` wrapper that prints
error messages and their context to standard error.
|
|
Since the primary key column is excluded by default, there's no way to
include it without excluding columns. Provide a way to include the
primary key column when no columns have been excluded.
Not a very good interface admittedly, but it enables a previously
impossible behaviour.
|
|
If no excluded columns are given, exclude the primary key column by
default. Otherwise, exclude only those columns in the `exclude_columns`
list.
|
|
Instead of only excluding the primary key column, exclude any columns in
the given list. This allows us to pass a list of excluded columns on the
command line.
|
|
Only works with `|` YAML instead of `>` flowed output.
Use a forked `yaml-rust` crate published by
https://github.com/davvid/yaml-rust that includes a patch to support
multiline output.
|
|
It turns out the `YamlEmitter` doesn't output a newline at the end.
Output a final newline as this is a command line program.
|
|
Create an adapter from `std::fmt::Write` to `std::io::Write` based on
the following idea in the standard library:
https://github.com/rust-lang/rust/blob/master/library/std/src/io/mod.rs#L1634-L1652
Since `yaml_rust::YamlEmitter::new()` requires a `std::fmt::Write`,
adapt standard output so the emitter can write to it.
|
|
Doesn't work this way as `YamlEmitter` requires `std::fmt::Write`
instead of `std::io::Write` (implemented by `Stdout`).
Looks like I'll need some kind of intermediary buffer or adapter to
convert between the different `Write` traits.
|
|
|
|
|
|
|
|
No longer necessary.
|
|
Either with a "-" argument or no file argument.
|
|
|
|
|
|
Change subcommand matcher to destructure the struct fields as I couldn't
access the fields with dot notation before.
|
|
Trying to match the subcommand enum, but apparently can't get a variant
(`Command::Insert`) out of the `@` binding, it seems it ends up being a
`Command` type.
|
|
|
|
Use a new `yaqlite::Error` type. Remove the other error types and use
this main error type everywhere. For now, that seems simpler.
The real reason why I centralised on one error type is that I wanted a
single `Error::Sqlite` variant for both `rusqlite::Error` and
`SqliteError` errors. However, I wasn't sure if it's possible to do that
with `thiserror`, and I didn't want to bother having to write my own
`std::error::Error` impls.
|
|
That is now moved to `yaqlite::insert()`.
|
|
Make an interface that more cleanly says "insert this YAML into this
database".
|
|
|
|
Remove the hard-coded table name.
|
|
|
|
|
|
|
|
Turns out I didn't need the type of the column, so get rid of that value
and resume using `Zero`.
|
|
Separate this code from the main binary file.
|
|
If a hash key in the input YAML does not match one of the column names
in the table we're inserting into, ignore that YAML field and use the
other columns for insertion.
|
|
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.
|
|
Doesn't work yet as I need a way to convert `Yaml` values to Rusqlite
SQL params.
|
|
Need to figure out what to do for NUMERIC affinity since Rusqlite
doesn't expose a variant for that pseudo-type.
|
|
|
|
Creates a map from column name to type.
|
|
|
|
Want to translate YAML types to SQLite types.
|
|
Need to figure out how to insert `table_columns.len()` values.
|
|
Possibly ugly passing `table_columns` into `yaml_extract`, but just
trying to get things working for now.
Query a "people" DB table instead as that matches the test YAML file.
|
|
Make it easier to find out if a column name exists in the table.
|
|
We probably don't even need a transaction for a `SELECT`. Get rid of
that code and remove the `mut` on `dbconn` which was only necessary for
the transaction.
|
|
Eliminated the transaction because of a borrow problem.
|
|
|
|
|
|
$ rustc --version
rustc 1.59.0 (9d1b2106e 2022-02-23)
$ cargo init --bin
|