diff --git a/core/translate/expr.rs b/core/translate/expr.rs index 3827dac63..02be1db8d 100644 --- a/core/translate/expr.rs +++ b/core/translate/expr.rs @@ -1602,29 +1602,34 @@ pub fn translate_expr( let args = if let Some(args) = args { if args.len() != 2 { crate::bail_parse_error!( - "likelihood function must have exactly 2 arguments", + "likelihood() function must have exactly 2 arguments", ); } args } else { - crate::bail_parse_error!("likelihood function with no arguments",); + crate::bail_parse_error!("likelihood() function with no arguments",); }; if let ast::Expr::Literal(ast::Literal::Numeric(ref value)) = args[1] { if let Ok(probability) = value.parse::() { - if probability < 0.0 || probability > 1.0 { + if !(0.0..=1.0).contains(&probability) { crate::bail_parse_error!( - "likelihood second argument must be between 0.0 and 1.0", + "second argument of likelihood() must be between 0.0 and 1.0", + ); + } + if !value.contains('.') { + crate::bail_parse_error!( + "second argument of likelihood() must be a floating point number with decimal point", ); } } else { crate::bail_parse_error!( - "likelihood second argument must be a floating point constant", + "second argument of likelihood() must be a floating point constant", ); } } else { crate::bail_parse_error!( - "likelihood second argument must be a numeric literal", + "second argument of likelihood() must be a numeric literal", ); } diff --git a/core/vdbe/execute.rs b/core/vdbe/execute.rs index 0dafeada2..8017e8c96 100644 --- a/core/vdbe/execute.rs +++ b/core/vdbe/execute.rs @@ -7188,7 +7188,7 @@ mod tests { assert_eq!(exec_likelihood(&value, &prob), value); let value = OwnedValue::Integer(100); - let prob = OwnedValue::Float(0.0625); + let prob = OwnedValue::Float(1.0); assert_eq!(exec_likelihood(&value, &prob), value); let value = OwnedValue::Float(12.34); @@ -7203,9 +7203,6 @@ mod tests { let prob = OwnedValue::Float(0.5); assert_eq!(exec_likelihood(&value, &prob), value); - let prob = OwnedValue::Integer(1); - assert_eq!(exec_likelihood(&value, &prob), value); - let prob = OwnedValue::build_text("0.5"); assert_eq!(exec_likelihood(&value, &prob), value); diff --git a/testing/scalar-functions.test b/testing/scalar-functions.test index a63e80467..807c4971d 100755 --- a/testing/scalar-functions.test +++ b/testing/scalar-functions.test @@ -224,7 +224,7 @@ do_execsql_test likelihood-integer { } {100} do_execsql_test likelihood-integer-probability-1 { - SELECT likelihood(42, 1); + SELECT likelihood(42, 1.0); } {42} do_execsql_test likelihood-decimal { @@ -240,11 +240,7 @@ do_execsql_test likelihood-blob { } {01020304} do_execsql_test likelihood-zero-probability { - SELECT likelihood(999, 0); -} {999} - -do_execsql_test likelihood-extreme-probability { - SELECT likelihood(999, 1); + SELECT likelihood(999, 0.0); } {999} do_execsql_test unhex-str-ab {