gluesql / gluesql

GlueSQL is quite sticky. It attaches to anywhere.

Home Page:https://gluesql.org/docs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Wrong ordering when using `.order_by("id, number ASC")`

gitmalong opened this issue · comments

The issue does not appear when the table has no id column and order_by("number ASC") is used.

#[wasm_bindgen_test]
async fn test_decimal_sorting() {
    let mut glue = GlueSqlStorage::glue(Some("test_decimal_sorting".into())).await;
    let table_name = "temp";
    let numbers = vec![dec!(-5), dec!(0), dec!(10), dec!(-10000)];
    let mut sorted_numbers = numbers.clone();
    sorted_numbers.sort_by(|a, b| a.partial_cmp(b).unwrap());

    table(table_name)
        .create_table()
        .add_column("id TEXT NOT NULL")
        .add_column("number DECIMAL NOT NULL")
        .execute(&mut glue)
        .await
        .unwrap();

    table(table_name)
        .insert()
        .values(vec![
            vec![text("v"), num(numbers[0].to_string())],
            vec![text("v"), num(numbers[1].to_string())],
            vec![text("v"), num(numbers[2].to_string())],
            vec![text("v"), num(numbers[3].to_string())],
        ])
        .execute(&mut glue)
        .await
        .unwrap();

    let res = table(table_name)
        .select()
        .order_by("id, number ASC")
        .execute(&mut glue)
        .await
        .unwrap();

    leptos::log!("res {:?}", res);
    match res {
        gluesql_core::prelude::Payload::Select { labels: _, rows } => {
            for (row, expected_number) in rows.iter().zip(sorted_numbers) {
                let val = row.get(1).unwrap();
                let loaded_number: Decimal = val.try_into().unwrap();
                assert_eq!(expected_number, loaded_number);
            }
        }
        _ => todo!(),
    }
}

Nevermind, my issue was caused by #1411