Typescript can add type safety on top of that, of course. And there’s the option to prepare a query once and execute it multiple times.
Honestly, the idea of manipulating XML queries, if you mean anything more fancy than the equivalent of parameter injection, sounds over-complicated, but I’d love to see a more concrete example of what you mean by that.
I mean, that’s just a bad library interface. With a halfway decent interface, you can do something like
query('insert into foo (status, name) values (:status, :name)', ent)
No orm required. With tagged templates in JS, you can do
q`insert into foo (status, name) values (${ent.status}, ${ent.name})`
Even wrap it in a function with destructuring to get rid of
ent
:const addFoo = (q, {status, name}) => q`insert into foo (status, name) values (${status}, ${name})`
Typescript can add type safety on top of that, of course. And there’s the option to prepare a query once and execute it multiple times.
Honestly, the idea of manipulating XML queries, if you mean anything more fancy than the equivalent of parameter injection, sounds over-complicated, but I’d love to see a more concrete example of what you mean by that.
I was thinking along the lines of
Plenty of libraries can build the XML using structs/classes. e.g. with serde:
//Data type for row #[derive(serde::Serialize)] pub struct Foo { pub status: String, pub name: String, } //Example row let ent = Foo { status: "paid".into(), name: "bob".into(), } //Example execution sqlx::query(&serde_xml_rs::to_string(&InsertStmt{ table: "foo".into(), value: &ent, })?).execute(&conn)?;
Or with jackson-dataformat-xml:
//Data type for row public class Foo { public string status; public string name; } //Example row Foo ent = new Foo(); foo.status = "paid"; foo.value = "bob"; //Example execution XmlMapper xmlMapper = new XmlMapper(); String xml = xmlMapper.writeValueAsString(new InsertStmt("foo", ent)); try (Statement stmt = conn.createStatement()) { stmt.executeUpdate(xml) }
I don’t do JS (yet) but maybe JSX could also do similar things with XML queries.
No more matching $1, $2, … (or
?
for mysql) with individual columns, I could dump entire structs/objects into a query and it would work.