| 298 | } |
| 299 | |
| 300 | fn lookup_array(&self, name: &str) -> Option<ArrayCatalogView> { |
| 301 | use nodedb_array::schema::{ArraySchema, AttrType as EAT, DimType as EDT}; |
| 302 | use nodedb_array::types::domain::DomainBound; |
| 303 | use nodedb_sql::types_array::{ |
| 304 | ArrayAttrAst, ArrayAttrType, ArrayDimAst, ArrayDimType, ArrayDomainBound, |
| 305 | }; |
| 306 | |
| 307 | let handle = self.array_catalog.as_ref()?; |
| 308 | let entry = { |
| 309 | let cat = handle.read().ok()?; |
| 310 | cat.lookup_by_name(name)? |
| 311 | }; |
| 312 | let schema: ArraySchema = zerompk::from_msgpack(&entry.schema_msgpack).ok()?; |
| 313 | |
| 314 | let dims = schema |
| 315 | .dims |
| 316 | .iter() |
| 317 | .map(|d| ArrayDimAst { |
| 318 | name: d.name.clone(), |
| 319 | dtype: match d.dtype { |
| 320 | EDT::Int64 => ArrayDimType::Int64, |
| 321 | EDT::Float64 => ArrayDimType::Float64, |
| 322 | EDT::TimestampMs => ArrayDimType::TimestampMs, |
| 323 | EDT::String => ArrayDimType::String, |
| 324 | }, |
| 325 | lo: bound_engine_to_ast(&d.domain.lo), |
| 326 | hi: bound_engine_to_ast(&d.domain.hi), |
| 327 | }) |
| 328 | .collect(); |
| 329 | |
| 330 | let attrs = schema |
| 331 | .attrs |
| 332 | .iter() |
| 333 | .map(|a| ArrayAttrAst { |
| 334 | name: a.name.clone(), |
| 335 | dtype: match a.dtype { |
| 336 | EAT::Int64 => ArrayAttrType::Int64, |
| 337 | EAT::Float64 => ArrayAttrType::Float64, |
| 338 | EAT::String => ArrayAttrType::String, |
| 339 | EAT::Bytes => ArrayAttrType::Bytes, |
| 340 | }, |
| 341 | nullable: a.nullable, |
| 342 | }) |
| 343 | .collect(); |
| 344 | |
| 345 | let tile_extents = schema.tile_extents.iter().map(|n| *n as i64).collect(); |
| 346 | |
| 347 | // Closure-local helper. |
| 348 | fn bound_engine_to_ast(b: &DomainBound) -> ArrayDomainBound { |
| 349 | match b { |
| 350 | DomainBound::Int64(v) => ArrayDomainBound::Int64(*v), |
| 351 | DomainBound::Float64(v) => ArrayDomainBound::Float64(*v), |
| 352 | DomainBound::TimestampMs(v) => ArrayDomainBound::TimestampMs(*v), |
| 353 | DomainBound::String(v) => ArrayDomainBound::String(v.clone()), |
| 354 | } |
| 355 | } |
| 356 | |
| 357 | Some(ArrayCatalogView { |