this post was submitted on 14 Sep 2024
851 points (98.9% liked)

Programmer Humor

32715 readers
1655 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[โ€“] [email protected] 4 points 3 months ago* (last edited 3 months ago) (2 children)

just started out rust and made a massive thing with sqlx only to find out the latest versions don't have mssql support anymore and the last version that did doesn't support decoding DateTime<Utc> ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ

had to rewrite the whole thing again with Tiberius, painful yet educational

[โ€“] [email protected] 2 points 3 months ago

Sadly sqlx seems to have gone semi-proprietary with their MSQL driver. Personally never understood the appeal of mssql when there's Postgres and SQLite, but hey, it does work.

I've started using welds as my new ORM of choice as SeaORM and Diesel is just not a friendly experience, and supports Mssql OOB. So it's nice there's still options for it.

[โ€“] [email protected] 1 points 3 months ago (2 children)

@bappity @RustyNova I was stuck on the same thing, there's no way to make it compatible? How do you handle dates?

[โ€“] [email protected] 2 points 3 months ago* (last edited 3 months ago)

No idea for Tiberius, but for SQLite I'm stuck with converting to timestamp and back. Ugly but works

P.S. add a getter to your data struct and you can be "seamless"

[โ€“] [email protected] 1 points 3 months ago* (last edited 3 months ago)

I switched to using tiberius

bit different but not too hard don't have my code on hand atm but this is how I started with it

    let mut config = Config::new();
    config.host("your_server_name");
    config.database("your_database_name");
    config.authentication(tiberius::AuthMethod::sql_server("your_username", "your_password"));
    config.trust_cert();

    let tcp = TcpStream::connect(config.get_addr()).await?;
    tcp.set_nodelay(true)?;
    
    let mut client = Client::connect(config, tcp.compat_write()).await?;

then I did something along the lines of

fn main() {
        let stream = client.query(&query, &[]).await?;
        let rows = stream.into_first_result().await?;

        let db_data: Vec<MyObject> = rows.into_iter().map(mapping_function_i_made_for_myobject).collect();
}

fn mapping_function_i_made_for_myobject(row: Row) -> MyObject {
    MyObject {
        my_date_field: row.get::<NaiveDateTime, _>("my_date_field").map(|dt| Local.from_local_datetime(&dt).unwrap()),
    }
}