Open aminya opened 5 months ago
We do face the same issues. Currently, our work around for this is to use #[serde(alias = 'some_unique_name')]
for each of the fields of the struct. So considering your use case, it will look something like:
#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize, Default)]
pub struct User {
#[serde(alias='user_table_id')]
pub id: i32,
#[serde(alias='user_table_date')]
pub date: DateTime<Utc>,
#[serde(alias='user_table_group_id')]
pub group_id: i32,
}
#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize, Default)]
pub struct Group {
#[serde(alias='group_table_id')]
pub id: i32,
#[serde(alias='group_table_name')]
pub name: String,
}
And then modify your query to include those names, like so:
let rows = db_conn
.query(
"SELECT users.id as user_table_id,
users.date as user_table_date,
users.group_id as user_table_group_id,
groups.id as group_table_id,
groups.name as group_table_name
FROM users
JOIN groups ON users.group_id = groups.id
WHERE users.user_id = ?1 LIMIT ?2
",
params![user_id.clone(), 10],
)
.await?;
while let Some(row) = rows.next().await? {
let user = from_row<User>(&row)?;
let group = from_row<Group>(&row)?;
}
Although this seems like a lot of work, but since the query is mostly generated programmatically, this is a fair bit easier to work with. But I totally agree with you that if there was some solution to this directly from libsql, it would be a huge help.
i think it's ironic that this lib is written in rust but doesn't have builtin mechanism for struct building
I have this common use case where I join two tables and I want to deserialize a row into separate structs. However, each row cannot be easily deserialized into separate structs via
from_row
.The query is like
I have to do things like the following to be able to convert a
Row
into separate structs:To be able to do something like
Is there a way to support
from_row
for theJOIN
use cases maybe via tuples so that this manual work is not needed anymore?