hamelin_sql 0.3.10

SQL generation utilities for Hamelin query language
Documentation
//! Translation implementations for array and map access functions

use crate::TranslationRegistry;
use hamelin_lib::{
    func::defs::{GetArray, GetMap},
    sql::expression::IndexLookup,
};

/// Register all access function translations.
pub fn register(registry: &mut TranslationRegistry) {
    // get(array, index) -> array[index]
    registry.register::<GetArray>(|_, mut bindings| {
        let array = bindings.take_by_name("array")?;
        let index = bindings.take_by_name("index")?;
        Ok(IndexLookup::new(array.sql, index.sql).into())
    });

    // get(map, key) -> map[key]
    registry.register::<GetMap>(|_, mut bindings| {
        let map = bindings.take_by_name("map")?;
        let key = bindings.take_by_name("key")?;
        Ok(IndexLookup::new(map.sql, key.sql).into())
    });
}