> For the complete documentation index, see [llms.txt](https://goldenore.gitbook.io/goldenore-cdc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://goldenore.gitbook.io/goldenore-cdc/moduly-goldenore-cdc/cdc-compare-2.0/compare.md).

# Compare

## Endpointy

<table data-full-width="true"><thead><tr><th width="112">Method</th><th width="503">Endpoint</th><th></th></tr></thead><tbody><tr><td><mark style="color:yellow;">POST</mark></td><td>compare</td><td>Uruchom porównywanie</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/config</td><td>Opcje konfiguracyjne dla tworzonych porównań</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/status?page=1&#x26;size=10&#x26;sort=createDate,asc</td><td>Sprawdź statusy porównywań. Obsługuje pełny paging</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/status/<mark style="color:green;">{uuid}</mark></td><td>Sprawdź status porównywania</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/result/<mark style="color:green;">{uuid}</mark>/no_sql?page=1&#x26;size=10&#x26;sort=createDate,asc</td><td>Pobierz wyniki porównywania dla każdej z tabel. Obsługuje pełny paging</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/result/<mark style="color:green;">{uuid}</mark>/no_sql?ids=1,2,3</td><td>Pobierz wyniki porównywania dla wybrancyh z tabel z instrukcjami SQL</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/result/<mark style="color:green;">{uuid}</mark>/with_sql?page=1&#x26;size=10&#x26;sort=createDate,asc</td><td>Pobierz wyniki porównywania dla każdej z tabel z instrukcjami SQL. Obsługuje pełny paging</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/result/<mark style="color:green;">{uuid}</mark>/no_sql/<mark style="color:green;">{tableCompareId}</mark></td><td>Pobierz wyniki porównywania dla wybranej tabeli</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/result/<mark style="color:green;">{uuid}</mark>/with_sql/<mark style="color:green;">{tableCompareId}</mark></td><td>Pobierz wyniki porównywania dla wybranej tabeli z instrukcjami SQL</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/result/<mark style="color:green;">{uuid}</mark>/sql/<mark style="color:green;">{tableCompareId}</mark>/<mark style="color:green;">{queryType}</mark>?page=1&#x26;size=100</td><td>Pobierz instrukcje SQL konkretnego typu (UPDATE,DELETE,INSERT). Obsługuje paging bez sort</td></tr><tr><td><mark style="color:yellow;">POST</mark></td><td>compare/apply/<mark style="color:green;">{uuid}</mark>?ids=1,2,3</td><td>Zastosuj na bazie docelowej wyniki porównania dla wybranych tabel (kolejność tabel zgodna z tą podaną przy uruchomieniu)</td></tr></tbody></table>

<mark style="color:green;">uuid</mark> jest zwracane po poprawnym uruchomieniu porównania, które jest uruchamiane asynchronicznie.&#x20;

Przykłady użycia endpointów można znaleźć w Postmanie (GOLDENORE CDC -> Compare2.0 -> Compare backend)

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

* `maxErrorsCount` -> maksymalna ilość błędów per tabela, zanim porównanie zostanie przerwane
* `maxDBConnectionsCount` -> maksymalna ilość połączeń do bazy danych (dotyczy źródłowej i docelowej)
* `compareType`  -> patrz [CDC COMPARE 2.0](/goldenore-cdc/moduly-goldenore-cdc/cdc-compare-2.0.md#rodzaje-analizy)
* `recheckKeys` -> flaga sterująca ponownym sprwdzaniem kluczy wykrytych w pierwszej fazie analizy
* `keyRecheckWaitDurationMillis` -> czas oczekiwania między zakończeniem pierwszej fazy, a ponownym sprawdzeniem kluczy
* `source/targetDatabaseConfiguration`-> informacje o źródłowej i docelowej bazie danych, opcje databaseType: `POSTGRES`, `ORACLE`, `SQLSERVER`
* `tablesBindings` -> lista tabel do porównania z informacją o nazwie schema, tabeli oraz kluczu głównym w tabeli źródłowej i docelowej. Do tego per para tabel można ustawić opcje mapowania typów danych.
  * W polu `primaryKeyColumnNames` należy podać klucz główny, lub listę kolumn, które gwarantują unikalność, tak żeby nie było dwóch rzędów z taką samą wartością tych kolumn. W trakcie porównywania tabela jest sortowana po tych kolumnach, więc zalecane jest podawanie kolumn z indeksami (w poprawnej kolejności!). W przeciwnym wypadku porównanie będzie trwało bardzo długo i bardziej obciążało bazę.
  * W polu `includeColumnNames` można podać listę kolumn, których wartości będą porównywane (w podanej kolejności). \
    W polu `excludeColumnNames` można podać listę kolumn, które będą pomijane przy porównywaniu wartości.\
    Tylko jedna z tych opcji może być podana jednocześnie.  Gdy żadna nie jest podana wszystkie kolumny są brane pod uwagę w kolejności alfabetycznej. Podane w nich nazwy dotyczą tylko kolumn poza kluczem głównym, nie wpływają na kolumny podane w  `primaryKeyColumnNames`.&#x20;
  * w polu `dataTypesOptions` można ustawić opcje mapowania typów danych. Jeśli pole nie jest podane to wszystkie opcje są ustawione na false. patrz [Architektura](/goldenore-cdc/moduly-goldenore-cdc/cdc-compare-2.0/architektura.md#mapowanie-typow-danych)

```json
{
    "maxErrorsCount": 1000,
    "maxDBConnectionsCount": 1,
    "compareType": "DETAILED",
    "recheckKeys": true,
    "keyRecheckWaitDurationMillis": 1000,
    "sourceDatabaseConfiguration": {
        "databaseType": "POSTGRES",
        "url": "jdbc:postgresql://localhost:5433/go_source",
        "username": "admin",
        "password": "admin"
    },
    "targetDatabaseConfiguration": {
        "databaseType": "POSTGRES",
        "url": "jdbc:postgresql://localhost:5434/go_target",
        "username": "admin",
        "password": "admin"
    },
    "tablesBindings": [
        {
            "sourceTable": {
                "schema": "test_data",
                "tableName": "dog",
                "primaryKeyColumnNames": ["id"]
                //,"includeColumnNames": ["name","color"]
                //,"excludeColumnNames": ["owner_id"]
            },
            "targetTable": {
                "schema": "test_data_rep",
                "tableName": "rep_dog",
                "primaryKeyColumnNames": ["id"]
                //,"includeColumnNames": ["name","color"]
                //,"excludeColumnNames": ["owner_id"]
            },
            "dataTypesOptions": {
                "mapBooleanTypes": true
                "mapPostgresMoneyTypeToDouble": true,
                "treatOracleDateAsTimestamp": true
            }
        },
        {
            "sourceTable": {
                "schema": "test_data",
                "tableName": "cat",
                "primaryKeyColumnNames": ["name", "color"]
            },
            "targetTable": {
                "schema": "test_data_rep",
                "tableName": "rep_cat",
                "primaryKeyColumnNames": ["name", "color"]
            }
        }
    ]
}
```
