# Column binding

### Przykład i opis body dla <mark style="color:yellow;">POST</mark> /compare/bind:

* `source/targetDatabaseConnectionInfo`-> informacje o źródłowej i docelowej bazie danych, opcje databaseType: `POSTGRES`, `ORACLE`, `SQLSERVER`
* `source/targetTables`-> lista tabel do sprawdzenia z bazy źródłowej i docelowej z informacją o nazwie schema, tabeli, kluczu głównym oraz porównywanych kolumnach poza kluczem w tabeli źródłowej i docelowej. serwis pobiera informację z bazy danych o kluczu głównym i indeksach. serwis pobiera pełną listę kolumn i sortuje ją alfanumerycznie.

```json
{
    "sourceDatabaseConnectionInfo": {
        "databaseType": "POSTGRES",
        "url": "jdbc:postgresql://localhost:5432/postgres",
        "username": "postgres",
        "password": "postgres"
    },
    "targetDatabaseConnectionInfo": {
        "databaseType": "ORACLE",
        "url": "jdbc:oracle:thin:@localhost:1521:ORCLCDB",
        "username": "system",
        "password": "Oracle_123"
    },
    "sourceTables": [
        {
            "schema": "test_data",
            "name": "cat"
        },
        {
            "schema": "test_data",
            "name": "cat2"
        },
    ],
    "targetTables": [
        {
            "schema": "SYSTEM",
            "name": "CAT"
        },
        {
            "schema": "SYSTEM",
            "name": "CAT2"
        },
    ]
}
```

### Przykład i opis response dla <mark style="color:yellow;">POST</mark> /compare/bind:

`result`  -> określa, czy w trakcie walidacji wystąpił jakiś ogólny błąd

`message` -> w przypadku błędu określa jego powód

`boundTablesList` -> lista wyników walidacji. Dla każdej tabeli z pary zwracane jest:

* lista informacji o indeksach - dla każdego indeksu nazwa, czy jest unikalny oraz lista indeksów kolumn w indeksie (indeksy odnoszą się do listy wszystkich kolumn)
* informacja o kluczu głównym - nazwa,  oraz lista indeksów kolumn w kluczu (indeksy odnoszą się do listy wszystkich kolumn)
* lista kolumn wraz z ich typami, posortowane po nazwach kolumn
* nazwa schematu i tabeli
* szacowany rozmiar tabeli w bajtach

W polu `result` zwracana jest informacja o walidacji dopasowania klucza głównego (`primaryKey`) i pozostałych kolumn (`columns`).

* `SUCCESS` - dopasowanie  się udało
* `WARNING` - dopasowanie jest możliwe, ale wymaga ustawienia odpowiednich flag. Lista warnings może zawierać następujące wartości:
  * &#x20;BOOLEAN\_TYPE\_MAPPING\_BINDING\_WARNING  - trzeba ustawić flagę `mapBooleanTypes` na true
  * POSTGRES\_MONEY\_TYPE\_MAPPING\_BINDING\_WARNING  - trzeba ustawić flagę `mapPostgresMoneyTypeToDouble` na true
  * ORACLE\_DATE\_TYPE\_MAPPING\_BINDING\_WARNING - trzeba ustawić flagę `treatOracleDateAsTimestamp` na true
* `ERROR` - dopasowanie niemożliwe, opis błędu w polu `message`

```json
{
    "boundTablesList": [
        {
            "sourceTable": {
                "schema": "test_data",
                "name": "cat",
                "columns": {
                    "names": [
                        "color",
                        "id",
                        "name",
                        "owner_id"
                    ],
                    "types": [
                        "STRING",
                        "BIGINT",
                        "STRING",
                        "BIGINT"
                    ]
                },
                "primaryKey": {
                    "columns": [
                        1
                    ],
                    "name": "cat_pkey",
                    "unique": true
                },
                "indexes": [{
                    "columns": [
                        1,3
                    ],
                    "name": "cat_idx_name_color",
                    "unique": false
                },],
                "size": 90112
            },
            "targetTable": {
                "schema": "SYSTEM",
                "name": "CAT",
                "columns": {
                    "names": [
                        "COLOR",
                        "ID",
                        "NAME",
                        "OWNER_ID"
                    ],
                    "types": [
                        "STRING",
                        "BIGINT",
                        "STRING",
                        "BIGINT"
                    ]
                },
                "primaryKey": {
                    "columns": [
                        1
                    ],
                    "name": "SYS_C008315",
                    "unique": true
                },
                "indexes": [],
                "size": 0
            },
            "result": {
                "primaryKey": {
                    "result": "SUCCESS",
                    "warnings": null,
                    "message": null
                },
                "columns": {
                    "result": "SUCCESS",
                    "warnings": null,
                    "message": null
                }
            }
        },
        {
            "sourceTable": {
                "schema": "test_data",
                "name": "cat2",
                "columns": {
                    "names": [
                        "color",
                        "name",
                        "owner_id"
                    ],
                    "types": [
                        "STRING",
                        "STRING",
                        "BIGINT"
                    ]
                },
                "primaryKey": {
                    "columns": [
                        1,
                        0
                    ],
                    "name": "cat2_pkey",
                    "unique": true
                },
                "indexes": [],
                "size": 65536
            },
            "targetTable": {
                "schema": "SYSTEM",
                "name": "CAT2",
                "columns": {
                    "names": [
                        "COLOR",
                        "NAME",
                        "OWNER_ID"
                    ],
                    "types": [
                        "STRING",
                        "STRING",
                        "BIGINT"
                    ]
                },
                "primaryKey": {
                    "columns": [
                        1,
                        0
                    ],
                    "name": "SYS_C008319",
                    "unique": true
                },
                "indexes": [],
                "size": 0
            },
            "result": {
                "primaryKey": {
                    "result": "SUCCESS",
                    "warnings": null,
                    "message": null
                },
                "columns": {
                    "result": "SUCCESS",
                    "warnings": null,
                    "message": null
                }
            }
        }
    ],
    "result": "SUCCESS",
    "message": null
}
```
