---
description: >-
  This guide explains changes in the ViewDefinition resource and explains how to
  migrate to the updated structure
hidden: true
---

# Migrate to the spec-compliant ViewDefinition format

Aidbox's January 2024 release introduces an updated, SQL on FHIR spec-compliant `ViewDefinition` resource structure, including some minor breaking changes. These changes don't affect existing flat views, but alterations via `ViewDefinition` require adapting to the new format.

### Existing elements renames

* `alias` is now `name`
* `union` is now`unionAll`
* `constants` is now `constant`
* `from` is replaced with `forEach`

### New element: column

A `column` element is introduced in `select` for clearer, less nested column declarations. Move column-related details here.

#### Before:

```json
{
  "name": "patient_view",
  "resource": "Patient",
  "select": [
    {
      "alias": "id",
      "path": "id"
    },
    {
      "alias": "bod",
      "path": "birthDate"
    },
    {
      "alias": "gender",
      "path": "gender"
    }
  ]
}
```

#### After:

```json
{
  "name": "patient_view",
  "resource": "Patient",
  "select": [
    {
      "column": [
        {
          "name": "id",
          "path": "id"
        },
        {
           "name": "bod",
           "path": "birthDate"
        },
        {
           "name": "gender",
           "path": "gender"
        }
      ]
    }
  ]
}
```

For `select` containing `forEach`(or `forEachOrNull`), keep `forEach` outside the `column`. Nested `select` without `forEach` can directly be converted to `column`.

#### Before

```json
{
  "name": "unnesting",
  "description": "Element-related unnesting",
  "status": "draft",
  "resource": "Patient",
  "select": [
    {
      "alias": "id",
      "path": "id"
    },
    {
      "forEach": "name",
      "select": [
        {
          "alias": "family_name",
          "path": "family"
        },
        {
          "forEach": "given",
          "select": [
            {
              "alias": "given_name",
              "path": "$this"
            }
          ]
        }
      ]
    }
  ]
}
```

#### After

```json
{
  "name": "unnesting",
  "description": "Element-related unnesting",
  "status": "draft",
  "resource": "Patient",
  "select": [
    {
      "column": [
        {
          "name": "id",
          "path": "id"
        }
      ]
    },
    {
      "forEach": "name",
      "column": [
        {
          "name": "family_name",
          "path": "family"
        }
      ],
      "select": [
        {
          "forEach": "given",
          "column": [
            {
              "name": "given_name",
              "path": "$this"
            }
          ]
        }
      ]
    }
  ]
}
```
