## Migration from 1.X versions

## GdaValue and GdaDataModel changes

Libgda values were stored in `GdaValue` structures, this is no longer the case as the standard `GValue` container is now used. As a consequence data types are now identified by their `GType` identifier, there is thus no more any `GdaType` definition.

The `GdaDataModel` has been transformed into an interface (as defined by the Glib object system), and the old `GdaDataModel` has been replaced by the `GdaDataModelRow` class. No code using the `GdaDataModel` should assume that data is internally stored as rows (vectors) of values as it was the case in the previous stable release.

In the new version, many objects implement the `GdaDataModel` interface for various usages which did not exist in the previous version such as data import and filtering. `GdaDataModel` objects should now be considered as non writable, and if they need to be modified, the modifications permissions should be checked using the `gda_data_model_get_attributes_at()` function. See the section about the various data models for more information.

The following UML schema shows the various implementations of the `GdaDataModel` interface and what they are for. Note that the `GdaDataModelRow` should not be instantiated directly but either used as a base class, or used through its children classes.