source_db: art_relations
dim_table: accounting_report_currencies
export_sql: >-
  SELECT
    id,
    ISO_4217_code,
    symbol_html_entity_code,
    currency_name,
    decimal_mark,
    thousands_separator,
    symbol_infront,
    subunit_to_unit,
    subunit_name,
    supported_payout_currency
  FROM
    currencies
insert_sql:
  - >-
    INSERT INTO
      {db}.{schema}.{dim_table}
    SELECT
      st.id,
      st.ISO_4217_code,
      st.symbol_html_entity_code,
      st.currency_name,
      st.decimal_mark,
      st.thousands_separator,
      st.symbol_infront,
      st.subunit_to_unit,
      st.subunit_name,
      st.supported_payout_currency,
      '{current_timestamp}',
      '{current_timestamp}'
    FROM
      {db}.{schema}.{staging_table} st
    LEFT JOIN
      {db}.{schema}.{dim_table} dc on dc.id = st.id
    WHERE
      dc.id is null
update_sql:
  - >-
    UPDATE
      {db}.{schema}.{dim_table}
    SET
      ISO_4217_code = st.ISO_4217_code,
      symbol_html_entity_code = st.symbol_html_entity_code,
      currency_name = st.currency_name,
      decimal_mark = st.decimal_mark,
      thousands_separator = st.thousands_separator,
      symbol_infront = st.symbol_infront,
      subunit_to_unit = st.subunit_to_unit,
      subunit_name = st.subunit_name,
      supported_payout_currency = st.supported_payout_currency,
      last_updated = '{current_timestamp}'
      FROM {db}.{schema}.{staging_table} st
    WHERE
      {db}.{schema}.{dim_table}.id = st.id AND
      (
        NOT (
          nvl({db}.{schema}.{dim_table}.ISO_4217_code = st.ISO_4217_code, false) OR
          ({db}.{schema}.{dim_table}.ISO_4217_code is null and st.ISO_4217_code is null)
        ) OR
        NOT (
          nvl({db}.{schema}.{dim_table}.symbol_html_entity_code = st.symbol_html_entity_code, false) OR
          ({db}.{schema}.{dim_table}.symbol_html_entity_code is null and st.symbol_html_entity_code is null)
        ) OR
        NOT (
          nvl({db}.{schema}.{dim_table}.currency_name = st.currency_name, false) OR
          ({db}.{schema}.{dim_table}.currency_name is null and st.currency_name is null)
        ) OR
        NOT (
          nvl({db}.{schema}.{dim_table}.decimal_mark = st.decimal_mark, false) OR
          ({db}.{schema}.{dim_table}.decimal_mark is null and st.decimal_mark is null)
        ) OR
        NOT (
          nvl({db}.{schema}.{dim_table}.thousands_separator = st.thousands_separator, false) OR
          ({db}.{schema}.{dim_table}.thousands_separator is null and st.thousands_separator is null)
        ) OR
        NOT (
          nvl({db}.{schema}.{dim_table}.symbol_infront = st.symbol_infront, false) OR
          ({db}.{schema}.{dim_table}.symbol_infront is null and st.symbol_infront is null)
        ) OR
        NOT (
          nvl({db}.{schema}.{dim_table}.subunit_to_unit = st.subunit_to_unit, false) OR
          ({db}.{schema}.{dim_table}.subunit_to_unit is null and st.subunit_to_unit is null)
        ) OR
        NOT (
          nvl({db}.{schema}.{dim_table}.subunit_name = st.subunit_name, false) OR
          ({db}.{schema}.{dim_table}.subunit_name is null and st.subunit_name is null)
        ) OR
        NOT (
          nvl({db}.{schema}.{dim_table}.supported_payout_currency = st.supported_payout_currency, false) OR
          ({db}.{schema}.{dim_table}.supported_payout_currency is null and st.supported_payout_currency is null)
        )
      )
