akash_rawal, 1 year ago (edited 1 year ago) I was thinking along the lines of https://lemmy.world/pictrs/image/4ef7f59c-88c7-4cfa-8dd5-91c71d8ad801.jpeg Plenty of libraries can build the XML using structs/classes. e.g. with serde: <span style="font-style:italic;color:#969896;">//Data type for row </span><span style="color:#323232;">#[derive(serde::Serialize)] </span><span style="font-weight:bold;color:#a71d5d;">pub struct </span><span style="color:#323232;">Foo { </span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">pub </span><span style="color:#323232;">status: String, </span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">pub </span><span style="color:#323232;">name: String, </span><span style="color:#323232;">} </span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;">//Example row </span><span style="font-weight:bold;color:#a71d5d;">let</span><span style="color:#323232;"> ent </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> Foo { </span><span style="color:#323232;"> status: </span><span style="color:#183691;">"paid"</span><span style="color:#323232;">.</span><span style="color:#62a35c;">into</span><span style="color:#323232;">(), </span><span style="color:#323232;"> name: </span><span style="color:#183691;">"bob"</span><span style="color:#323232;">.</span><span style="color:#62a35c;">into</span><span style="color:#323232;">(), </span><span style="color:#323232;">} </span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;">//Example execution </span><span style="color:#323232;">sqlx::query(</span><span style="font-weight:bold;color:#a71d5d;">&</span><span style="color:#323232;">amp;serde_xml_rs::to_string(</span><span style="font-weight:bold;color:#a71d5d;">&</span><span style="color:#323232;">amp;InsertStmt{ </span><span style="color:#323232;"> table: </span><span style="color:#183691;">"foo"</span><span style="color:#323232;">.</span><span style="color:#62a35c;">into</span><span style="color:#323232;">(), </span><span style="color:#323232;"> value: </span><span style="font-weight:bold;color:#a71d5d;">&</span><span style="color:#323232;">amp;ent, </span><span style="color:#323232;">})</span><span style="font-weight:bold;color:#a71d5d;">?</span><span style="color:#323232;">).</span><span style="color:#62a35c;">execute</span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">&</span><span style="color:#323232;">amp;conn)</span><span style="font-weight:bold;color:#a71d5d;">?</span><span style="color:#323232;">; </span> Or with jackson-dataformat-xml: <span style="font-style:italic;color:#969896;">//Data type for row </span><span style="font-weight:bold;color:#a71d5d;">public class </span><span style="color:#0086b3;">Foo </span><span style="color:#323232;">{ </span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">public</span><span style="color:#323232;"> string status; </span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">public</span><span style="color:#323232;"> string name; </span><span style="color:#323232;">} </span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;">//Example row </span><span style="color:#0086b3;">Foo</span><span style="color:#323232;"> ent </span><span style="font-weight:bold;color:#a71d5d;">= new </span><span style="color:#0086b3;">Foo</span><span style="color:#323232;">(); </span><span style="color:#323232;">foo.status </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#183691;">"paid"</span><span style="color:#323232;">; </span><span style="color:#323232;">foo.value </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#183691;">"bob"</span><span style="color:#323232;">; </span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;">//Example execution </span><span style="color:#0086b3;">XmlMapper</span><span style="color:#323232;"> xmlMapper </span><span style="font-weight:bold;color:#a71d5d;">= new </span><span style="color:#0086b3;">XmlMapper</span><span style="color:#323232;">(); </span><span style="color:#0086b3;">String</span><span style="color:#323232;"> xml </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> xmlMapper.writeValueAsString(</span><span style="font-weight:bold;color:#a71d5d;">new </span><span style="color:#0086b3;">InsertStmt</span><span style="color:#323232;">(</span><span style="color:#183691;">"foo"</span><span style="color:#323232;">, ent)); </span><span style="font-weight:bold;color:#a71d5d;">try </span><span style="color:#323232;">(</span><span style="color:#0086b3;">Statement</span><span style="color:#323232;"> stmt </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> conn.createStatement()) { </span><span style="color:#323232;"> stmt.executeUpdate(xml) </span><span style="color:#323232;">} </span> 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.
I was thinking along the lines of
https://lemmy.world/pictrs/image/4ef7f59c-88c7-4cfa-8dd5-91c71d8ad801.jpeg
Plenty of libraries can build the XML using structs/classes. e.g. with serde:
<span style="font-style:italic;color:#969896;">//Data type for row </span><span style="color:#323232;">#[derive(serde::Serialize)] </span><span style="font-weight:bold;color:#a71d5d;">pub struct </span><span style="color:#323232;">Foo { </span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">pub </span><span style="color:#323232;">status: String, </span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">pub </span><span style="color:#323232;">name: String, </span><span style="color:#323232;">} </span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;">//Example row </span><span style="font-weight:bold;color:#a71d5d;">let</span><span style="color:#323232;"> ent </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> Foo { </span><span style="color:#323232;"> status: </span><span style="color:#183691;">"paid"</span><span style="color:#323232;">.</span><span style="color:#62a35c;">into</span><span style="color:#323232;">(), </span><span style="color:#323232;"> name: </span><span style="color:#183691;">"bob"</span><span style="color:#323232;">.</span><span style="color:#62a35c;">into</span><span style="color:#323232;">(), </span><span style="color:#323232;">} </span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;">//Example execution </span><span style="color:#323232;">sqlx::query(</span><span style="font-weight:bold;color:#a71d5d;">&</span><span style="color:#323232;">amp;serde_xml_rs::to_string(</span><span style="font-weight:bold;color:#a71d5d;">&</span><span style="color:#323232;">amp;InsertStmt{ </span><span style="color:#323232;"> table: </span><span style="color:#183691;">"foo"</span><span style="color:#323232;">.</span><span style="color:#62a35c;">into</span><span style="color:#323232;">(), </span><span style="color:#323232;"> value: </span><span style="font-weight:bold;color:#a71d5d;">&</span><span style="color:#323232;">amp;ent, </span><span style="color:#323232;">})</span><span style="font-weight:bold;color:#a71d5d;">?</span><span style="color:#323232;">).</span><span style="color:#62a35c;">execute</span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">&</span><span style="color:#323232;">amp;conn)</span><span style="font-weight:bold;color:#a71d5d;">?</span><span style="color:#323232;">; </span>
Or with jackson-dataformat-xml:
<span style="font-style:italic;color:#969896;">//Data type for row </span><span style="font-weight:bold;color:#a71d5d;">public class </span><span style="color:#0086b3;">Foo </span><span style="color:#323232;">{ </span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">public</span><span style="color:#323232;"> string status; </span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">public</span><span style="color:#323232;"> string name; </span><span style="color:#323232;">} </span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;">//Example row </span><span style="color:#0086b3;">Foo</span><span style="color:#323232;"> ent </span><span style="font-weight:bold;color:#a71d5d;">= new </span><span style="color:#0086b3;">Foo</span><span style="color:#323232;">(); </span><span style="color:#323232;">foo.status </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#183691;">"paid"</span><span style="color:#323232;">; </span><span style="color:#323232;">foo.value </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#183691;">"bob"</span><span style="color:#323232;">; </span><span style="color:#323232;"> </span><span style="font-style:italic;color:#969896;">//Example execution </span><span style="color:#0086b3;">XmlMapper</span><span style="color:#323232;"> xmlMapper </span><span style="font-weight:bold;color:#a71d5d;">= new </span><span style="color:#0086b3;">XmlMapper</span><span style="color:#323232;">(); </span><span style="color:#0086b3;">String</span><span style="color:#323232;"> xml </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> xmlMapper.writeValueAsString(</span><span style="font-weight:bold;color:#a71d5d;">new </span><span style="color:#0086b3;">InsertStmt</span><span style="color:#323232;">(</span><span style="color:#183691;">"foo"</span><span style="color:#323232;">, ent)); </span><span style="font-weight:bold;color:#a71d5d;">try </span><span style="color:#323232;">(</span><span style="color:#0086b3;">Statement</span><span style="color:#323232;"> stmt </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> conn.createStatement()) { </span><span style="color:#323232;"> stmt.executeUpdate(xml) </span><span style="color:#323232;">} </span>
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.
?