This commit is contained in:
bit-aloo
2025-10-18 15:05:36 +05:30
parent 64bbca9e12
commit b2769afffd
2 changed files with 47 additions and 2 deletions

View File

@@ -1376,7 +1376,7 @@ pub fn rewrite_column_references_if_needed(
#[cfg(test)]
pub mod tests {
use super::*;
use crate::schema::Type as SchemaValueType;
use crate::{schema::Type as SchemaValueType, types::Text};
use turso_parser::ast::{self, Expr, Literal, Name, Operator::*, Type};
#[test]
@@ -2387,4 +2387,44 @@ pub mod tests {
assert_eq!(result, expected, "Failed for input: {input}");
}
}
#[test]
fn test_checked_cast_text_to_numeric_lossless_property() {
use Value::*;
assert_eq!(checked_cast_text_to_numeric("1.xx", true), Err(()));
assert_eq!(checked_cast_text_to_numeric("abc", true), Err(()));
assert_eq!(checked_cast_text_to_numeric("--5", true), Err(()));
assert_eq!(checked_cast_text_to_numeric("12.34.56", true), Err(()));
assert_eq!(checked_cast_text_to_numeric("", true), Err(()));
assert_eq!(checked_cast_text_to_numeric(" ", true), Err(()));
assert_eq!(checked_cast_text_to_numeric("0", true), Ok(Integer(0)));
assert_eq!(checked_cast_text_to_numeric("42", true), Ok(Integer(42)));
assert_eq!(checked_cast_text_to_numeric("-42", true), Ok(Integer(-42)));
assert_eq!(
checked_cast_text_to_numeric("999999999999", true),
Ok(Integer(999_999_999_999))
);
assert_eq!(checked_cast_text_to_numeric("1.0", true), Ok(Float(1.0)));
assert_eq!(
checked_cast_text_to_numeric("-3.22", true),
Ok(Float(-3.22))
);
assert_eq!(
checked_cast_text_to_numeric("0.001", true),
Ok(Float(0.001))
);
assert_eq!(checked_cast_text_to_numeric("2e3", true), Ok(Float(2000.0)));
assert_eq!(
checked_cast_text_to_numeric("-5.5e-2", true),
Ok(Float(-0.055))
);
assert_eq!(
checked_cast_text_to_numeric(" 123 ", true),
Ok(Integer(123))
);
assert_eq!(
checked_cast_text_to_numeric("\t-3.22\n", true),
Ok(Float(-3.22))
);
}
}

View File

@@ -1008,6 +1008,11 @@ do_execsql_test_in_memory_error_content limit-expr-invalid-data-type-4 {
SELECT 1 LIMIT 4+NULL;
} {"datatype mismatch"}
do_execsql_test_in_memory_error_content limit-expression-invalid-type {
SELECT 1 LIMIT '1.xx';
} {"datatype mismatch"}
do_execsql_test_on_specific_db {:memory:} rowid-references {
CREATE TABLE test_table (id INTEGER);
INSERT INTO test_table VALUES (5),(5);
@@ -1093,4 +1098,4 @@ do_execsql_test_on_specific_db {:memory:} unambiguous-self-join {
2|3
3|1
3|2
3|3}
3|3}