spine-tools / Spine-Database-API

Database interface to Spine generic data model
https://www.tools-for-energy-system-modelling.org/
GNU Lesser General Public License v3.0
6 stars 5 forks source link

Updating entity name does not update _MappedTable._id_by_unique_key_value #284

Closed soininen closed 9 months ago

soininen commented 9 months ago

After updating an entity's name, its parameter values cannot be found anymore, see the code below which raises an AssertionError:

from spinedb_api import DatabaseMapping, to_database

with DatabaseMapping("sqlite:///", create=True) as db_map:
    db_map.add_item("entity_class", name="fish")
    db_map.add_item("entity", class_name="fish", name="Nemo")
    db_map.add_item("parameter_definition", entity_class_name="fish", name="color")
    value, type_ = to_database("mainly orange")
    db_map.add_item(
        "parameter_value",
        entity_class_name="fish",
        entity_byname=("Nemo",),
        parameter_definition_name="color",
        alternative_name="Base",
        value=value,
        type=type_,
    )
    fish = db_map.get_item("entity", class_name="fish", name="Nemo")
    fish.update(name="NotNemo")
    color = db_map.get_item("parameter_value", entity_class_name="fish", entity_byname=("NotNemo",),
                            parameter_definition_name="color", alternative_name="Base")
    assert(color is not None)
manuelma commented 9 months ago

Ah yeah, nice catch. We need to update the lookup dictionaries obviously (MappedTable.update_item)