Wrong ordering when using `.order_by("id, number ASC")`
gitmalong opened this issue · comments
gitmalong commented
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!(),
}
}