Merge 'windows iterator returns no values for shorter slice' from Lâm Hoàng Phúc

Closes #2912
This commit is contained in:
Pekka Enberg
2025-09-04 13:10:18 +03:00
committed by GitHub

View File

@@ -679,11 +679,11 @@ pub(crate) fn type_from_name(type_name: &str) -> (Type, bool) {
return (Type::Integer, true);
}
if let Some(ty) = type_name.windows(4).find_map(|s| {
if contains_ignore_ascii_case!(s, b"INT") {
return Some(Type::Integer);
}
if contains_ignore_ascii_case!(type_name, b"INT") {
return (Type::Integer, false);
}
if let Some(ty) = type_name.windows(4).find_map(|s| {
match_ignore_ascii_case!(match s {
b"CHAR" | b"CLOB" | b"TEXT" => Some(Type::Text),
b"BLOB" => Some(Type::Blob),
@@ -1370,6 +1370,7 @@ pub fn extract_view_columns(select_stmt: &ast::Select, schema: &Schema) -> Vec<C
#[cfg(test)]
pub mod tests {
use super::*;
use crate::schema::Type as SchemaValueType;
use turso_parser::ast::{self, Expr, Literal, Name, Operator::*, Type};
#[test]
@@ -2359,4 +2360,26 @@ pub mod tests {
assert!(parse_pragma_bool(&Expr::Name(Name::Ident("10".into()))).is_err());
assert!(parse_pragma_bool(&Expr::Name(Name::Ident("-1".into()))).is_err());
}
#[test]
fn test_type_from_name() {
let tc = vec![
("", (SchemaValueType::Blob, false)),
("INTEGER", (SchemaValueType::Integer, true)),
("INT", (SchemaValueType::Integer, false)),
("CHAR", (SchemaValueType::Text, false)),
("CLOB", (SchemaValueType::Text, false)),
("TEXT", (SchemaValueType::Text, false)),
("BLOB", (SchemaValueType::Blob, false)),
("REAL", (SchemaValueType::Real, false)),
("FLOAT", (SchemaValueType::Real, false)),
("DOUBLE", (SchemaValueType::Real, false)),
("U128", (SchemaValueType::Numeric, false)),
];
for (input, expected) in tc {
let result = type_from_name(input);
assert_eq!(result, expected, "Failed for input: {input}");
}
}
}