diff --git a/.buildkite/scripts/run_models.sh b/.buildkite/scripts/run_models.sh index 2bfb36c..0b3a59b 100644 --- a/.buildkite/scripts/run_models.sh +++ b/.buildkite/scripts/run_models.sh @@ -19,5 +19,7 @@ dbt deps dbt seed --target "$db" --full-refresh dbt run --target "$db" --full-refresh dbt test --target "$db" +dbt run --vars '{asana__using_tags: false, asana__using_task_tags: false, asana_tag_identifier: missing, asana_task_tag_identifier: missing}' --target "$db" --full-refresh +dbt test --target "$db" dbt run-operation fivetran_utils.drop_schemas_automation --target "$db" diff --git a/.gitignore b/.gitignore index 066b7fc..35caf46 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,6 @@ target/ dbt_modules/ logs/ .DS_Store -dbt_packages/ \ No newline at end of file +dbt_packages/ +env/ +package-lock.yml \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 4722f30..9f3acfc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,13 @@ -# dbt_asana_source version.version +# dbt_asana_source v0.8.1 +This release introduces the following updates: + +## Feature Updates +- Introduces variables `asana__using_tags` and `asana__using_task_tags` to disable the `stg_asana__tag` and `stg_asana__task_tag` models respectively. This allows the downstream models to run even if the respective source `tag` and `task_tag` tables don't exist. ([#37](https://github.com/fivetran/dbt_asana_source/pull/37)) + - For more information on how to configure these variables, refer to the [README](https://github.com/fivetran/dbt_asana_source/blob/main/README.md#step-4-enablingdisabling-models). + +## Under the Hood +- Added False configurations for `asana__using_tags` and `asana__using_task_tags` to our Buildkite `run_models.sh` script. ([#37](https://github.com/fivetran/dbt_asana_source/pull/37)) +- Updated `src_asana.yml` with the above variable configurations to the source tables `tag` and `task_tag`. ([#37](https://github.com/fivetran/dbt_asana_source/pull/37)) ## Documentation - Corrected references to connectors and connections in the README. ([#36](https://github.com/fivetran/dbt_asana_source/pull/36)) diff --git a/README.md b/README.md index b3263e0..000b174 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,20 @@ vars: asana_database: your_database_name asana_schema: your_schema_name ``` -### (Optional) Step 4: Additional configurations + +### Step 4: Enabling/Disabling Models + +Your Asana connection might not sync every table that this package expects. If your syncs exclude certain tables, it is either because you do not use that functionality in Asana or have actively excluded some tables from your syncs. In order to enable or disable the relevant tables in the package, you will need to add the following variable(s) to your `dbt_project.yml` file. + +By default, all variables are assumed to be `true`. + +```yml +vars: + asana__using_tags: false # default is true + asana__using_task_tags: false # default is true +``` + +### (Optional) Step 5: Additional configurations
Expand for configurations #### Passing Through Additional Columns @@ -80,7 +93,7 @@ vars:
-### (Optional) Step 5: Orchestrate your models with Fivetran Transformations for dbt Core™ +### (Optional) Step 6: Orchestrate your models with Fivetran Transformations for dbt Core™
Expand for more details Fivetran offers the ability for you to orchestrate your dbt project through [Fivetran Transformations for dbt Core™](https://fivetran.com/docs/transformations/dbt). Learn how to set up your project for orchestration through Fivetran in our [Transformations for dbt Core™ setup guides](https://fivetran.com/docs/transformations/dbt#setupguide). diff --git a/dbt_project.yml b/dbt_project.yml index 9695cc2..c856cce 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -1,6 +1,6 @@ config-version: 2 name: 'asana_source' -version: 0.8.0 +version: 0.8.1 require-dbt-version: [">=1.3.0", "<2.0.0"] models: asana_source: diff --git a/docs/catalog.json b/docs/catalog.json index 92bb87e..02cf483 100644 --- a/docs/catalog.json +++ b/docs/catalog.json @@ -1 +1 @@ -{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/catalog/v1.json", "dbt_version": "1.4.6", "generated_at": "2023-05-31T20:08:46.935344Z", "invocation_id": "00823da1-e18e-457d-9d71-744c7ed27b40", "env": {}}, "nodes": {"seed.asana_source_integration_tests.project_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "project_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "archived": {"type": "boolean", "index": 4, "name": "archived", "comment": null}, "color": {"type": "text", "index": 5, "name": "color", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "current_status": {"type": "text", "index": 7, "name": "current_status", "comment": null}, "due_date": {"type": "timestamp without time zone", "index": 8, "name": "due_date", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 9, "name": "modified_at", "comment": null}, "name": {"type": "text", "index": 10, "name": "name", "comment": null}, "notes": {"type": "text", "index": 11, "name": "notes", "comment": null}, "owner_id": {"type": "bigint", "index": 12, "name": "owner_id", "comment": null}, "public": {"type": "integer", "index": 13, "name": "public", "comment": null}, "team_id": {"type": "bigint", "index": 14, "name": "team_id", "comment": null}, "workspace_id": {"type": "bigint", "index": 15, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.project_data"}, "seed.asana_source_integration_tests.project_task_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "project_task_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"project_id": {"type": "bigint", "index": 1, "name": "project_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.project_task_data"}, "seed.asana_source_integration_tests.section_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "section_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 2, "name": "_fivetran_synced", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "project_id": {"type": "bigint", "index": 5, "name": "project_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.section_data"}, "seed.asana_source_integration_tests.story_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "story_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 2, "name": "_fivetran_synced", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "created_by_id": {"type": "bigint", "index": 4, "name": "created_by_id", "comment": null}, "hearted": {"type": "integer", "index": 5, "name": "hearted", "comment": null}, "num_hearts": {"type": "integer", "index": 6, "name": "num_hearts", "comment": null}, "source": {"type": "text", "index": 7, "name": "source", "comment": null}, "target_id": {"type": "bigint", "index": 8, "name": "target_id", "comment": null}, "text": {"type": "text", "index": 9, "name": "text", "comment": null}, "type": {"type": "text", "index": 10, "name": "type", "comment": null}, "assignee_status": {"type": "text", "index": 11, "name": "assignee_status", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.story_data"}, "seed.asana_source_integration_tests.tag_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "tag_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "color": {"type": "integer", "index": 4, "name": "color", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 5, "name": "created_at", "comment": null}, "message": {"type": "integer", "index": 6, "name": "message", "comment": null}, "name": {"type": "text", "index": 7, "name": "name", "comment": null}, "notes": {"type": "integer", "index": 8, "name": "notes", "comment": null}, "workspace_id": {"type": "bigint", "index": 9, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.tag_data"}, "seed.asana_source_integration_tests.task_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "task_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "assignee_id": {"type": "bigint", "index": 2, "name": "assignee_id", "comment": null}, "completed": {"type": "boolean", "index": 3, "name": "completed", "comment": null}, "completed_at": {"type": "timestamp without time zone", "index": 4, "name": "completed_at", "comment": null}, "completed_by_id": {"type": "bigint", "index": 5, "name": "completed_by_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "due_on": {"type": "timestamp without time zone", "index": 7, "name": "due_on", "comment": null}, "due_at": {"type": "timestamp without time zone", "index": 8, "name": "due_at", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 9, "name": "modified_at", "comment": null}, "name": {"type": "text", "index": 10, "name": "name", "comment": null}, "parent_id": {"type": "bigint", "index": 11, "name": "parent_id", "comment": null}, "start_on": {"type": "timestamp without time zone", "index": 12, "name": "start_on", "comment": null}, "notes": {"type": "text", "index": 13, "name": "notes", "comment": null}, "workspace_id": {"type": "bigint", "index": 14, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.task_data"}, "seed.asana_source_integration_tests.task_follower_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "task_follower_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"task_id": {"type": "bigint", "index": 1, "name": "task_id", "comment": null}, "user_id": {"type": "bigint", "index": 2, "name": "user_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.task_follower_data"}, "seed.asana_source_integration_tests.task_section_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "task_section_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"section_id": {"type": "bigint", "index": 1, "name": "section_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.task_section_data"}, "seed.asana_source_integration_tests.task_tag_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "task_tag_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"tag_id": {"type": "bigint", "index": 1, "name": "tag_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.task_tag_data"}, "seed.asana_source_integration_tests.team_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "team_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "organization_id": {"type": "bigint", "index": 5, "name": "organization_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.team_data"}, "seed.asana_source_integration_tests.user_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "user_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "email": {"type": "text", "index": 4, "name": "email", "comment": null}, "name": {"type": "text", "index": 5, "name": "name", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.user_data"}, "model.asana_source.stg_asana__project": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__project", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"project_id": {"type": "bigint", "index": 1, "name": "project_id", "comment": null}, "is_archived": {"type": "boolean", "index": 2, "name": "is_archived", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "current_status": {"type": "text", "index": 4, "name": "current_status", "comment": null}, "due_date": {"type": "timestamp without time zone", "index": 5, "name": "due_date", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 6, "name": "modified_at", "comment": null}, "project_name": {"type": "text", "index": 7, "name": "project_name", "comment": null}, "owner_user_id": {"type": "bigint", "index": 8, "name": "owner_user_id", "comment": null}, "is_public": {"type": "integer", "index": 9, "name": "is_public", "comment": null}, "team_id": {"type": "bigint", "index": 10, "name": "team_id", "comment": null}, "workspace_id": {"type": "bigint", "index": 11, "name": "workspace_id", "comment": null}, "notes": {"type": "text", "index": 12, "name": "notes", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__project"}, "model.asana_source.stg_asana__project_task": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__project_task", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"project_id": {"type": "bigint", "index": 1, "name": "project_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__project_task"}, "model.asana_source.stg_asana__project_task_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__project_task_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"project_id": {"type": "bigint", "index": 1, "name": "project_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__project_task_tmp"}, "model.asana_source.stg_asana__project_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__project_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "archived": {"type": "boolean", "index": 4, "name": "archived", "comment": null}, "color": {"type": "text", "index": 5, "name": "color", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "current_status": {"type": "text", "index": 7, "name": "current_status", "comment": null}, "due_date": {"type": "timestamp without time zone", "index": 8, "name": "due_date", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 9, "name": "modified_at", "comment": null}, "name": {"type": "text", "index": 10, "name": "name", "comment": null}, "notes": {"type": "text", "index": 11, "name": "notes", "comment": null}, "owner_id": {"type": "bigint", "index": 12, "name": "owner_id", "comment": null}, "public": {"type": "integer", "index": 13, "name": "public", "comment": null}, "team_id": {"type": "bigint", "index": 14, "name": "team_id", "comment": null}, "workspace_id": {"type": "bigint", "index": 15, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__project_tmp"}, "model.asana_source.stg_asana__section": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__section", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"section_id": {"type": "bigint", "index": 1, "name": "section_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 2, "name": "created_at", "comment": null}, "section_name": {"type": "text", "index": 3, "name": "section_name", "comment": null}, "project_id": {"type": "bigint", "index": 4, "name": "project_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__section"}, "model.asana_source.stg_asana__section_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__section_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 2, "name": "_fivetran_synced", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "project_id": {"type": "bigint", "index": 5, "name": "project_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__section_tmp"}, "model.asana_source.stg_asana__story": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__story", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"story_id": {"type": "bigint", "index": 1, "name": "story_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 2, "name": "created_at", "comment": null}, "created_by_user_id": {"type": "bigint", "index": 3, "name": "created_by_user_id", "comment": null}, "target_task_id": {"type": "bigint", "index": 4, "name": "target_task_id", "comment": null}, "story_content": {"type": "text", "index": 5, "name": "story_content", "comment": null}, "event_type": {"type": "text", "index": 6, "name": "event_type", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__story"}, "model.asana_source.stg_asana__story_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__story_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 2, "name": "_fivetran_synced", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "created_by_id": {"type": "bigint", "index": 4, "name": "created_by_id", "comment": null}, "hearted": {"type": "integer", "index": 5, "name": "hearted", "comment": null}, "num_hearts": {"type": "integer", "index": 6, "name": "num_hearts", "comment": null}, "source": {"type": "text", "index": 7, "name": "source", "comment": null}, "target_id": {"type": "bigint", "index": 8, "name": "target_id", "comment": null}, "text": {"type": "text", "index": 9, "name": "text", "comment": null}, "type": {"type": "text", "index": 10, "name": "type", "comment": null}, "assignee_status": {"type": "text", "index": 11, "name": "assignee_status", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__story_tmp"}, "model.asana_source.stg_asana__tag": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__tag", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"tag_id": {"type": "bigint", "index": 1, "name": "tag_id", "comment": null}, "tag_name": {"type": "text", "index": 2, "name": "tag_name", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__tag"}, "model.asana_source.stg_asana__tag_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__tag_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "color": {"type": "integer", "index": 4, "name": "color", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 5, "name": "created_at", "comment": null}, "message": {"type": "integer", "index": 6, "name": "message", "comment": null}, "name": {"type": "text", "index": 7, "name": "name", "comment": null}, "notes": {"type": "integer", "index": 8, "name": "notes", "comment": null}, "workspace_id": {"type": "bigint", "index": 9, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__tag_tmp"}, "model.asana_source.stg_asana__task": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"task_id": {"type": "bigint", "index": 1, "name": "task_id", "comment": null}, "assignee_user_id": {"type": "bigint", "index": 2, "name": "assignee_user_id", "comment": null}, "is_completed": {"type": "boolean", "index": 3, "name": "is_completed", "comment": null}, "completed_at": {"type": "timestamp without time zone", "index": 4, "name": "completed_at", "comment": null}, "completed_by_user_id": {"type": "bigint", "index": 5, "name": "completed_by_user_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "due_date": {"type": "timestamp without time zone", "index": 7, "name": "due_date", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 8, "name": "modified_at", "comment": null}, "task_name": {"type": "text", "index": 9, "name": "task_name", "comment": null}, "parent_task_id": {"type": "bigint", "index": 10, "name": "parent_task_id", "comment": null}, "start_date": {"type": "timestamp without time zone", "index": 11, "name": "start_date", "comment": null}, "task_description": {"type": "text", "index": 12, "name": "task_description", "comment": null}, "is_liked": {"type": "boolean", "index": 13, "name": "is_liked", "comment": null}, "number_of_likes": {"type": "integer", "index": 14, "name": "number_of_likes", "comment": null}, "workspace_id": {"type": "bigint", "index": 15, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task"}, "model.asana_source.stg_asana__task_follower": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_follower", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"task_id": {"type": "bigint", "index": 1, "name": "task_id", "comment": null}, "user_id": {"type": "bigint", "index": 2, "name": "user_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_follower"}, "model.asana_source.stg_asana__task_follower_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_follower_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"task_id": {"type": "bigint", "index": 1, "name": "task_id", "comment": null}, "user_id": {"type": "bigint", "index": 2, "name": "user_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_follower_tmp"}, "model.asana_source.stg_asana__task_section": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_section", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"section_id": {"type": "bigint", "index": 1, "name": "section_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_section"}, "model.asana_source.stg_asana__task_section_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_section_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"section_id": {"type": "bigint", "index": 1, "name": "section_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_section_tmp"}, "model.asana_source.stg_asana__task_tag": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_tag", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"tag_id": {"type": "bigint", "index": 1, "name": "tag_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_tag"}, "model.asana_source.stg_asana__task_tag_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_tag_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"tag_id": {"type": "bigint", "index": 1, "name": "tag_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_tag_tmp"}, "model.asana_source.stg_asana__task_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "assignee_id": {"type": "bigint", "index": 2, "name": "assignee_id", "comment": null}, "completed": {"type": "boolean", "index": 3, "name": "completed", "comment": null}, "completed_at": {"type": "timestamp without time zone", "index": 4, "name": "completed_at", "comment": null}, "completed_by_id": {"type": "bigint", "index": 5, "name": "completed_by_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "due_on": {"type": "timestamp without time zone", "index": 7, "name": "due_on", "comment": null}, "due_at": {"type": "timestamp without time zone", "index": 8, "name": "due_at", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 9, "name": "modified_at", "comment": null}, "name": {"type": "text", "index": 10, "name": "name", "comment": null}, "parent_id": {"type": "bigint", "index": 11, "name": "parent_id", "comment": null}, "start_on": {"type": "timestamp without time zone", "index": 12, "name": "start_on", "comment": null}, "notes": {"type": "text", "index": 13, "name": "notes", "comment": null}, "workspace_id": {"type": "bigint", "index": 14, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_tmp"}, "model.asana_source.stg_asana__team": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__team", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"team_id": {"type": "bigint", "index": 1, "name": "team_id", "comment": null}, "team_name": {"type": "text", "index": 2, "name": "team_name", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__team"}, "model.asana_source.stg_asana__team_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__team_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "organization_id": {"type": "bigint", "index": 5, "name": "organization_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__team_tmp"}, "model.asana_source.stg_asana__user": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__user", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"user_id": {"type": "bigint", "index": 1, "name": "user_id", "comment": null}, "email": {"type": "text", "index": 2, "name": "email", "comment": null}, "user_name": {"type": "text", "index": 3, "name": "user_name", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__user"}, "model.asana_source.stg_asana__user_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__user_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "email": {"type": "text", "index": 4, "name": "email", "comment": null}, "name": {"type": "text", "index": 5, "name": "name", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__user_tmp"}}, "sources": {"source.asana_source.asana.project": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "project_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "archived": {"type": "boolean", "index": 4, "name": "archived", "comment": null}, "color": {"type": "text", "index": 5, "name": "color", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "current_status": {"type": "text", "index": 7, "name": "current_status", "comment": null}, "due_date": {"type": "timestamp without time zone", "index": 8, "name": "due_date", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 9, "name": "modified_at", "comment": null}, "name": {"type": "text", "index": 10, "name": "name", "comment": null}, "notes": {"type": "text", "index": 11, "name": "notes", "comment": null}, "owner_id": {"type": "bigint", "index": 12, "name": "owner_id", "comment": null}, "public": {"type": "integer", "index": 13, "name": "public", "comment": null}, "team_id": {"type": "bigint", "index": 14, "name": "team_id", "comment": null}, "workspace_id": {"type": "bigint", "index": 15, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.project"}, "source.asana_source.asana.project_task": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "project_task_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"project_id": {"type": "bigint", "index": 1, "name": "project_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.project_task"}, "source.asana_source.asana.section": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "section_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 2, "name": "_fivetran_synced", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "project_id": {"type": "bigint", "index": 5, "name": "project_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.section"}, "source.asana_source.asana.story": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "story_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 2, "name": "_fivetran_synced", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "created_by_id": {"type": "bigint", "index": 4, "name": "created_by_id", "comment": null}, "hearted": {"type": "integer", "index": 5, "name": "hearted", "comment": null}, "num_hearts": {"type": "integer", "index": 6, "name": "num_hearts", "comment": null}, "source": {"type": "text", "index": 7, "name": "source", "comment": null}, "target_id": {"type": "bigint", "index": 8, "name": "target_id", "comment": null}, "text": {"type": "text", "index": 9, "name": "text", "comment": null}, "type": {"type": "text", "index": 10, "name": "type", "comment": null}, "assignee_status": {"type": "text", "index": 11, "name": "assignee_status", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.story"}, "source.asana_source.asana.tag": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "tag_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "color": {"type": "integer", "index": 4, "name": "color", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 5, "name": "created_at", "comment": null}, "message": {"type": "integer", "index": 6, "name": "message", "comment": null}, "name": {"type": "text", "index": 7, "name": "name", "comment": null}, "notes": {"type": "integer", "index": 8, "name": "notes", "comment": null}, "workspace_id": {"type": "bigint", "index": 9, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.tag"}, "source.asana_source.asana.task": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "task_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "assignee_id": {"type": "bigint", "index": 2, "name": "assignee_id", "comment": null}, "completed": {"type": "boolean", "index": 3, "name": "completed", "comment": null}, "completed_at": {"type": "timestamp without time zone", "index": 4, "name": "completed_at", "comment": null}, "completed_by_id": {"type": "bigint", "index": 5, "name": "completed_by_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "due_on": {"type": "timestamp without time zone", "index": 7, "name": "due_on", "comment": null}, "due_at": {"type": "timestamp without time zone", "index": 8, "name": "due_at", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 9, "name": "modified_at", "comment": null}, "name": {"type": "text", "index": 10, "name": "name", "comment": null}, "parent_id": {"type": "bigint", "index": 11, "name": "parent_id", "comment": null}, "start_on": {"type": "timestamp without time zone", "index": 12, "name": "start_on", "comment": null}, "notes": {"type": "text", "index": 13, "name": "notes", "comment": null}, "workspace_id": {"type": "bigint", "index": 14, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.task"}, "source.asana_source.asana.task_follower": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "task_follower_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"task_id": {"type": "bigint", "index": 1, "name": "task_id", "comment": null}, "user_id": {"type": "bigint", "index": 2, "name": "user_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.task_follower"}, "source.asana_source.asana.task_section": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "task_section_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"section_id": {"type": "bigint", "index": 1, "name": "section_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.task_section"}, "source.asana_source.asana.task_tag": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "task_tag_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"tag_id": {"type": "bigint", "index": 1, "name": "tag_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.task_tag"}, "source.asana_source.asana.team": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "team_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "organization_id": {"type": "bigint", "index": 5, "name": "organization_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.team"}, "source.asana_source.asana.user": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_02", "name": "user_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "email": {"type": "text", "index": 4, "name": "email", "comment": null}, "name": {"type": "text", "index": 5, "name": "name", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.user"}}, "errors": null} \ No newline at end of file +{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/catalog/v1.json", "dbt_version": "1.9.2", "generated_at": "2025-02-17T17:09:16.002197Z", "invocation_id": "13571468-110c-4b3f-8744-76d2e1f65abc", "env": {}}, "nodes": {"seed.asana_source_integration_tests.project_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "project_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "archived": {"type": "boolean", "index": 4, "name": "archived", "comment": null}, "color": {"type": "text", "index": 5, "name": "color", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "current_status": {"type": "text", "index": 7, "name": "current_status", "comment": null}, "due_date": {"type": "timestamp without time zone", "index": 8, "name": "due_date", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 9, "name": "modified_at", "comment": null}, "name": {"type": "text", "index": 10, "name": "name", "comment": null}, "notes": {"type": "text", "index": 11, "name": "notes", "comment": null}, "owner_id": {"type": "bigint", "index": 12, "name": "owner_id", "comment": null}, "public": {"type": "integer", "index": 13, "name": "public", "comment": null}, "team_id": {"type": "bigint", "index": 14, "name": "team_id", "comment": null}, "workspace_id": {"type": "bigint", "index": 15, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.project_data"}, "seed.asana_source_integration_tests.project_task_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "project_task_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"project_id": {"type": "bigint", "index": 1, "name": "project_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.project_task_data"}, "seed.asana_source_integration_tests.section_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "section_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 2, "name": "_fivetran_synced", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "project_id": {"type": "bigint", "index": 5, "name": "project_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.section_data"}, "seed.asana_source_integration_tests.story_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "story_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 2, "name": "_fivetran_synced", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "created_by_id": {"type": "bigint", "index": 4, "name": "created_by_id", "comment": null}, "hearted": {"type": "integer", "index": 5, "name": "hearted", "comment": null}, "num_hearts": {"type": "integer", "index": 6, "name": "num_hearts", "comment": null}, "source": {"type": "text", "index": 7, "name": "source", "comment": null}, "target_id": {"type": "bigint", "index": 8, "name": "target_id", "comment": null}, "text": {"type": "text", "index": 9, "name": "text", "comment": null}, "type": {"type": "text", "index": 10, "name": "type", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.story_data"}, "seed.asana_source_integration_tests.tag_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "tag_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "color": {"type": "integer", "index": 4, "name": "color", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 5, "name": "created_at", "comment": null}, "message": {"type": "integer", "index": 6, "name": "message", "comment": null}, "name": {"type": "text", "index": 7, "name": "name", "comment": null}, "notes": {"type": "integer", "index": 8, "name": "notes", "comment": null}, "workspace_id": {"type": "bigint", "index": 9, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.tag_data"}, "seed.asana_source_integration_tests.task_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "task_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "assignee_id": {"type": "bigint", "index": 2, "name": "assignee_id", "comment": null}, "completed": {"type": "boolean", "index": 3, "name": "completed", "comment": null}, "completed_at": {"type": "timestamp without time zone", "index": 4, "name": "completed_at", "comment": null}, "completed_by_id": {"type": "bigint", "index": 5, "name": "completed_by_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "due_on": {"type": "timestamp without time zone", "index": 7, "name": "due_on", "comment": null}, "due_at": {"type": "timestamp without time zone", "index": 8, "name": "due_at", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 9, "name": "modified_at", "comment": null}, "name": {"type": "text", "index": 10, "name": "name", "comment": null}, "parent_id": {"type": "bigint", "index": 11, "name": "parent_id", "comment": null}, "start_on": {"type": "timestamp without time zone", "index": 12, "name": "start_on", "comment": null}, "notes": {"type": "text", "index": 13, "name": "notes", "comment": null}, "workspace_id": {"type": "bigint", "index": 14, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.task_data"}, "seed.asana_source_integration_tests.task_follower_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "task_follower_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"task_id": {"type": "bigint", "index": 1, "name": "task_id", "comment": null}, "user_id": {"type": "bigint", "index": 2, "name": "user_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.task_follower_data"}, "seed.asana_source_integration_tests.task_section_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "task_section_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"section_id": {"type": "bigint", "index": 1, "name": "section_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.task_section_data"}, "seed.asana_source_integration_tests.task_tag_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "task_tag_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"tag_id": {"type": "bigint", "index": 1, "name": "tag_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.task_tag_data"}, "seed.asana_source_integration_tests.team_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "team_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "organization_id": {"type": "bigint", "index": 5, "name": "organization_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.team_data"}, "seed.asana_source_integration_tests.user_data": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "user_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "email": {"type": "text", "index": 4, "name": "email", "comment": null}, "name": {"type": "text", "index": 5, "name": "name", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.asana_source_integration_tests.user_data"}, "model.asana_source.stg_asana__project": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__project", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"project_id": {"type": "bigint", "index": 1, "name": "project_id", "comment": null}, "is_archived": {"type": "boolean", "index": 2, "name": "is_archived", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "current_status": {"type": "text", "index": 4, "name": "current_status", "comment": null}, "due_date": {"type": "timestamp without time zone", "index": 5, "name": "due_date", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 6, "name": "modified_at", "comment": null}, "project_name": {"type": "text", "index": 7, "name": "project_name", "comment": null}, "owner_user_id": {"type": "bigint", "index": 8, "name": "owner_user_id", "comment": null}, "is_public": {"type": "integer", "index": 9, "name": "is_public", "comment": null}, "team_id": {"type": "bigint", "index": 10, "name": "team_id", "comment": null}, "workspace_id": {"type": "bigint", "index": 11, "name": "workspace_id", "comment": null}, "notes": {"type": "text", "index": 12, "name": "notes", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__project"}, "model.asana_source.stg_asana__project_task": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__project_task", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"project_id": {"type": "bigint", "index": 1, "name": "project_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__project_task"}, "model.asana_source.stg_asana__project_task_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__project_task_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"project_id": {"type": "bigint", "index": 1, "name": "project_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__project_task_tmp"}, "model.asana_source.stg_asana__project_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__project_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "archived": {"type": "boolean", "index": 4, "name": "archived", "comment": null}, "color": {"type": "text", "index": 5, "name": "color", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "current_status": {"type": "text", "index": 7, "name": "current_status", "comment": null}, "due_date": {"type": "timestamp without time zone", "index": 8, "name": "due_date", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 9, "name": "modified_at", "comment": null}, "name": {"type": "text", "index": 10, "name": "name", "comment": null}, "notes": {"type": "text", "index": 11, "name": "notes", "comment": null}, "owner_id": {"type": "bigint", "index": 12, "name": "owner_id", "comment": null}, "public": {"type": "integer", "index": 13, "name": "public", "comment": null}, "team_id": {"type": "bigint", "index": 14, "name": "team_id", "comment": null}, "workspace_id": {"type": "bigint", "index": 15, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__project_tmp"}, "model.asana_source.stg_asana__section": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__section", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"section_id": {"type": "bigint", "index": 1, "name": "section_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 2, "name": "created_at", "comment": null}, "section_name": {"type": "text", "index": 3, "name": "section_name", "comment": null}, "project_id": {"type": "bigint", "index": 4, "name": "project_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__section"}, "model.asana_source.stg_asana__section_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__section_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 2, "name": "_fivetran_synced", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "project_id": {"type": "bigint", "index": 5, "name": "project_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__section_tmp"}, "model.asana_source.stg_asana__story": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__story", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"story_id": {"type": "bigint", "index": 1, "name": "story_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 2, "name": "created_at", "comment": null}, "created_by_user_id": {"type": "bigint", "index": 3, "name": "created_by_user_id", "comment": null}, "target_task_id": {"type": "bigint", "index": 4, "name": "target_task_id", "comment": null}, "story_content": {"type": "text", "index": 5, "name": "story_content", "comment": null}, "event_type": {"type": "text", "index": 6, "name": "event_type", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__story"}, "model.asana_source.stg_asana__story_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__story_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 2, "name": "_fivetran_synced", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "created_by_id": {"type": "bigint", "index": 4, "name": "created_by_id", "comment": null}, "hearted": {"type": "integer", "index": 5, "name": "hearted", "comment": null}, "num_hearts": {"type": "integer", "index": 6, "name": "num_hearts", "comment": null}, "source": {"type": "text", "index": 7, "name": "source", "comment": null}, "target_id": {"type": "bigint", "index": 8, "name": "target_id", "comment": null}, "text": {"type": "text", "index": 9, "name": "text", "comment": null}, "type": {"type": "text", "index": 10, "name": "type", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__story_tmp"}, "model.asana_source.stg_asana__tag": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__tag", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"tag_id": {"type": "bigint", "index": 1, "name": "tag_id", "comment": null}, "tag_name": {"type": "text", "index": 2, "name": "tag_name", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__tag"}, "model.asana_source.stg_asana__tag_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__tag_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "color": {"type": "integer", "index": 4, "name": "color", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 5, "name": "created_at", "comment": null}, "message": {"type": "integer", "index": 6, "name": "message", "comment": null}, "name": {"type": "text", "index": 7, "name": "name", "comment": null}, "notes": {"type": "integer", "index": 8, "name": "notes", "comment": null}, "workspace_id": {"type": "bigint", "index": 9, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__tag_tmp"}, "model.asana_source.stg_asana__task": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"task_id": {"type": "bigint", "index": 1, "name": "task_id", "comment": null}, "assignee_user_id": {"type": "bigint", "index": 2, "name": "assignee_user_id", "comment": null}, "is_completed": {"type": "boolean", "index": 3, "name": "is_completed", "comment": null}, "completed_at": {"type": "timestamp without time zone", "index": 4, "name": "completed_at", "comment": null}, "completed_by_user_id": {"type": "bigint", "index": 5, "name": "completed_by_user_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "due_date": {"type": "timestamp without time zone", "index": 7, "name": "due_date", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 8, "name": "modified_at", "comment": null}, "task_name": {"type": "text", "index": 9, "name": "task_name", "comment": null}, "parent_task_id": {"type": "bigint", "index": 10, "name": "parent_task_id", "comment": null}, "start_date": {"type": "timestamp without time zone", "index": 11, "name": "start_date", "comment": null}, "task_description": {"type": "text", "index": 12, "name": "task_description", "comment": null}, "is_liked": {"type": "boolean", "index": 13, "name": "is_liked", "comment": null}, "number_of_likes": {"type": "integer", "index": 14, "name": "number_of_likes", "comment": null}, "workspace_id": {"type": "bigint", "index": 15, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task"}, "model.asana_source.stg_asana__task_follower": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_follower", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"task_id": {"type": "bigint", "index": 1, "name": "task_id", "comment": null}, "user_id": {"type": "bigint", "index": 2, "name": "user_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_follower"}, "model.asana_source.stg_asana__task_follower_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_follower_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"task_id": {"type": "bigint", "index": 1, "name": "task_id", "comment": null}, "user_id": {"type": "bigint", "index": 2, "name": "user_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_follower_tmp"}, "model.asana_source.stg_asana__task_section": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_section", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"section_id": {"type": "bigint", "index": 1, "name": "section_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_section"}, "model.asana_source.stg_asana__task_section_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_section_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"section_id": {"type": "bigint", "index": 1, "name": "section_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_section_tmp"}, "model.asana_source.stg_asana__task_tag": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_tag", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"tag_id": {"type": "bigint", "index": 1, "name": "tag_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_tag"}, "model.asana_source.stg_asana__task_tag_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_tag_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"tag_id": {"type": "bigint", "index": 1, "name": "tag_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_tag_tmp"}, "model.asana_source.stg_asana__task_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "assignee_id": {"type": "bigint", "index": 2, "name": "assignee_id", "comment": null}, "completed": {"type": "boolean", "index": 3, "name": "completed", "comment": null}, "completed_at": {"type": "timestamp without time zone", "index": 4, "name": "completed_at", "comment": null}, "completed_by_id": {"type": "bigint", "index": 5, "name": "completed_by_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "due_on": {"type": "timestamp without time zone", "index": 7, "name": "due_on", "comment": null}, "due_at": {"type": "timestamp without time zone", "index": 8, "name": "due_at", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 9, "name": "modified_at", "comment": null}, "name": {"type": "text", "index": 10, "name": "name", "comment": null}, "parent_id": {"type": "bigint", "index": 11, "name": "parent_id", "comment": null}, "start_on": {"type": "timestamp without time zone", "index": 12, "name": "start_on", "comment": null}, "notes": {"type": "text", "index": 13, "name": "notes", "comment": null}, "workspace_id": {"type": "bigint", "index": 14, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__task_tmp"}, "model.asana_source.stg_asana__team": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__team", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"team_id": {"type": "bigint", "index": 1, "name": "team_id", "comment": null}, "team_name": {"type": "text", "index": 2, "name": "team_name", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__team"}, "model.asana_source.stg_asana__team_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__team_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "organization_id": {"type": "bigint", "index": 5, "name": "organization_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__team_tmp"}, "model.asana_source.stg_asana__user": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__user", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"user_id": {"type": "bigint", "index": 1, "name": "user_id", "comment": null}, "email": {"type": "text", "index": 2, "name": "email", "comment": null}, "user_name": {"type": "text", "index": 3, "name": "user_name", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__user"}, "model.asana_source.stg_asana__user_tmp": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__user_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "email": {"type": "text", "index": 4, "name": "email", "comment": null}, "name": {"type": "text", "index": 5, "name": "name", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.asana_source.stg_asana__user_tmp"}}, "sources": {"source.asana_source.asana.project": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "project_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "archived": {"type": "boolean", "index": 4, "name": "archived", "comment": null}, "color": {"type": "text", "index": 5, "name": "color", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "current_status": {"type": "text", "index": 7, "name": "current_status", "comment": null}, "due_date": {"type": "timestamp without time zone", "index": 8, "name": "due_date", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 9, "name": "modified_at", "comment": null}, "name": {"type": "text", "index": 10, "name": "name", "comment": null}, "notes": {"type": "text", "index": 11, "name": "notes", "comment": null}, "owner_id": {"type": "bigint", "index": 12, "name": "owner_id", "comment": null}, "public": {"type": "integer", "index": 13, "name": "public", "comment": null}, "team_id": {"type": "bigint", "index": 14, "name": "team_id", "comment": null}, "workspace_id": {"type": "bigint", "index": 15, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.project"}, "source.asana_source.asana.project_task": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "project_task_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"project_id": {"type": "bigint", "index": 1, "name": "project_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.project_task"}, "source.asana_source.asana.section": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "section_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 2, "name": "_fivetran_synced", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "project_id": {"type": "bigint", "index": 5, "name": "project_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.section"}, "source.asana_source.asana.story": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "story_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 2, "name": "_fivetran_synced", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "created_by_id": {"type": "bigint", "index": 4, "name": "created_by_id", "comment": null}, "hearted": {"type": "integer", "index": 5, "name": "hearted", "comment": null}, "num_hearts": {"type": "integer", "index": 6, "name": "num_hearts", "comment": null}, "source": {"type": "text", "index": 7, "name": "source", "comment": null}, "target_id": {"type": "bigint", "index": 8, "name": "target_id", "comment": null}, "text": {"type": "text", "index": 9, "name": "text", "comment": null}, "type": {"type": "text", "index": 10, "name": "type", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.story"}, "source.asana_source.asana.tag": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "tag_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "color": {"type": "integer", "index": 4, "name": "color", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 5, "name": "created_at", "comment": null}, "message": {"type": "integer", "index": 6, "name": "message", "comment": null}, "name": {"type": "text", "index": 7, "name": "name", "comment": null}, "notes": {"type": "integer", "index": 8, "name": "notes", "comment": null}, "workspace_id": {"type": "bigint", "index": 9, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.tag"}, "source.asana_source.asana.task": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "task_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "assignee_id": {"type": "bigint", "index": 2, "name": "assignee_id", "comment": null}, "completed": {"type": "boolean", "index": 3, "name": "completed", "comment": null}, "completed_at": {"type": "timestamp without time zone", "index": 4, "name": "completed_at", "comment": null}, "completed_by_id": {"type": "bigint", "index": 5, "name": "completed_by_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 6, "name": "created_at", "comment": null}, "due_on": {"type": "timestamp without time zone", "index": 7, "name": "due_on", "comment": null}, "due_at": {"type": "timestamp without time zone", "index": 8, "name": "due_at", "comment": null}, "modified_at": {"type": "timestamp without time zone", "index": 9, "name": "modified_at", "comment": null}, "name": {"type": "text", "index": 10, "name": "name", "comment": null}, "parent_id": {"type": "bigint", "index": 11, "name": "parent_id", "comment": null}, "start_on": {"type": "timestamp without time zone", "index": 12, "name": "start_on", "comment": null}, "notes": {"type": "text", "index": 13, "name": "notes", "comment": null}, "workspace_id": {"type": "bigint", "index": 14, "name": "workspace_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.task"}, "source.asana_source.asana.task_follower": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "task_follower_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"task_id": {"type": "bigint", "index": 1, "name": "task_id", "comment": null}, "user_id": {"type": "bigint", "index": 2, "name": "user_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.task_follower"}, "source.asana_source.asana.task_section": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "task_section_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"section_id": {"type": "bigint", "index": 1, "name": "section_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.task_section"}, "source.asana_source.asana.task_tag": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "task_tag_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"tag_id": {"type": "bigint", "index": 1, "name": "tag_id", "comment": null}, "task_id": {"type": "bigint", "index": 2, "name": "task_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.task_tag"}, "source.asana_source.asana.team": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "team_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "organization_id": {"type": "bigint", "index": 5, "name": "organization_id", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.team"}, "source.asana_source.asana.user": {"metadata": {"type": "BASE TABLE", "schema": "asana_source_integrations_tests_3", "name": "user_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "bigint", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "email": {"type": "text", "index": 4, "name": "email", "comment": null}, "name": {"type": "text", "index": 5, "name": "name", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.asana_source.asana.user"}}, "errors": null} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 0807e63..9be6f0f 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,30 +1,149 @@ - - - - - + + - dbt Docs - - + + + + dbt Docs + + + + + + + + + + + + + - - - - - - - - - - - - - - -
icons
-
- +*/var r = function (e, t) { this.recycle(e, t) }; function i() { return !1 } function o() { return !0 } r.prototype = { instanceString: function () { return "event" }, recycle: function (e, t) { if (this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = i, null != e && e.preventDefault ? (this.type = e.type, this.isDefaultPrevented = e.defaultPrevented ? o : i) : null != e && e.type ? t = e : this.type = e, null != t && (this.originalEvent = t.originalEvent, this.type = null != t.type ? t.type : this.type, this.cy = t.cy, this.target = t.target, this.position = t.position, this.renderedPosition = t.renderedPosition, this.namespace = t.namespace, this.layout = t.layout), null != this.cy && null != this.position && null == this.renderedPosition) { var n = this.position, r = this.cy.zoom(), a = this.cy.pan(); this.renderedPosition = { x: n.x * r + a.x, y: n.y * r + a.y } } this.timeStamp = e && e.timeStamp || Date.now() }, preventDefault: function () { this.isDefaultPrevented = o; var e = this.originalEvent; e && e.preventDefault && e.preventDefault() }, stopPropagation: function () { this.isPropagationStopped = o; var e = this.originalEvent; e && e.stopPropagation && e.stopPropagation() }, stopImmediatePropagation: function () { this.isImmediatePropagationStopped = o, this.stopPropagation() }, isDefaultPrevented: i, isPropagationStopped: i, isImmediatePropagationStopped: i }, e.exports = r + }, function (e, t, n) { "use strict"; var r = n(1); e.exports = function (e, t) { var n = e.cy().hasCompoundNodes(); function i(e) { var t = e.pstyle("z-compound-depth"); return "auto" === t.value ? n ? e.zDepth() : 0 : "bottom" === t.value ? -1 : "top" === t.value ? r.MAX_INT : 0 } var o = i(e) - i(t); if (0 !== o) return o; function a(e) { return "auto" === e.pstyle("z-index-compare").value && e.isNode() ? 1 : 0 } var s = a(e) - a(t); if (0 !== s) return s; var l = e.pstyle("z-index").value - t.pstyle("z-index").value; return 0 !== l ? l : e.poolIndex() - t.poolIndex() } }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(6), a = function e(t) { if (!(this instanceof e)) return new e(t); r.core(t) ? (this._private = { cy: t, coreStyle: {} }, this.length = 0, this.resetToDefault()) : i.error("A style must have a core reference") }, s = a.prototype; s.instanceString = function () { return "style" }, s.clear = function () { for (var e = 0; e < this.length; e++)this[e] = void 0; return this.length = 0, this._private.newStyle = !0, this }, s.resetToDefault = function () { return this.clear(), this.addDefaultStylesheet(), this }, s.core = function () { return this._private.coreStyle }, s.selector = function (e) { var t = "core" === e ? null : new o(e), n = this.length++; return this[n] = { selector: t, properties: [], mappedProperties: [], index: n }, this }, s.css = function () { var e = this, t = arguments; switch (t.length) { case 1: for (var n = t[0], r = 0; r < e.properties.length; r++) { var o = e.properties[r], a = n[o.name]; void 0 === a && (a = n[i.dash2camel(o.name)]), void 0 !== a && this.cssRule(o.name, a) } break; case 2: this.cssRule(t[0], t[1]) }return this }, s.style = s.css, s.cssRule = function (e, t) { var n = this.parse(e, t); if (n) { var r = this.length - 1; this[r].properties.push(n), this[r].properties[n.name] = n, n.name.match(/pie-(\d+)-background-size/) && n.value && (this._private.hasPie = !0), n.mapped && this[r].mappedProperties.push(n), !this[r].selector && (this._private.coreStyle[n.name] = n) } return this }, s.append = function (e) { return r.stylesheet(e) ? e.appendToStyle(this) : r.array(e) ? this.appendFromJson(e) : r.string(e) && this.appendFromString(e), this }, a.fromJson = function (e, t) { var n = new a(e); return n.fromJson(t), n }, a.fromString = function (e, t) { return new a(e).fromString(t) }, [n(85), n(86), n(87), n(88), n(89), n(90), n(91), n(92)].forEach((function (e) { i.extend(s, e) })), a.types = s.types, a.properties = s.properties, e.exports = a }, function (e, t, n) { "use strict"; var r = n(1); e.exports = { setupDequeueing: function (e) { return function () { var t = this, n = this.renderer; if (!t.dequeueingSetup) { t.dequeueingSetup = !0; var i = r.debounce((function () { n.redrawHint("eles", !0), n.redrawHint("drag", !0), n.redraw() }), e.deqRedrawThreshold), o = e.priority || r.noop; n.beforeRender((function (o, a) { for (var s = r.performanceNow(), l = n.averageRedrawTime, c = n.lastRedrawTime, u = [], d = n.cy.extent(), p = n.getPixelRatio(); ;) { var f = r.performanceNow(), h = f - s, g = f - a; if (c < 1e3 / 60) { var m = 1e3 / 60 - (o ? l : 0); if (g >= e.deqFastCost * m) break } else if (o) { if (h >= e.deqCost * c || h >= e.deqAvgCost * l) break } else if (g >= e.deqNoDrawCost * (1e3 / 60)) break; var v = e.deq(t, p, d); if (!(v.length > 0)) break; for (var b = 0; b < v.length; b++)u.push(v[b]) } u.length > 0 && (e.onDeqd(t, u), !o && e.shouldRedraw(t, u, p, d) && i()) }), o(t)) } } } } }, function (e, t, n) { "use strict"; var r = n(0), i = n(12), o = n(94), a = n(136), s = function (e) { return void 0 === e && (e = {}), r.plainObject(e) ? new i(e) : r.string(e) ? o.apply(o, arguments) : void 0 }; s.use = function (e) { var t = Array.prototype.slice.call(arguments, 1); return t.unshift(s), e.apply(null, t), this }, s.version = n(137), s.stylesheet = s.Stylesheet = a, e.exports = s }, function (e, t, n) { "use strict"; var r = n(0); e.exports = { hex2tuple: function (e) { if ((4 === e.length || 7 === e.length) && "#" === e[0]) { var t = void 0, n = void 0, r = void 0; return 4 === e.length ? (t = parseInt(e[1] + e[1], 16), n = parseInt(e[2] + e[2], 16), r = parseInt(e[3] + e[3], 16)) : (t = parseInt(e[1] + e[2], 16), n = parseInt(e[3] + e[4], 16), r = parseInt(e[5] + e[6], 16)), [t, n, r] } }, hsl2tuple: function (e) { var t = void 0, n = void 0, r = void 0, i = void 0, o = void 0, a = void 0, s = void 0, l = void 0; function c(e, t, n) { return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? e + 6 * (t - e) * n : n < .5 ? t : n < 2 / 3 ? e + (t - e) * (2 / 3 - n) * 6 : e } var u = new RegExp("^" + this.regex.hsla + "$").exec(e); if (u) { if ((n = parseInt(u[1])) < 0 ? n = (360 - -1 * n % 360) % 360 : n > 360 && (n %= 360), n /= 360, (r = parseFloat(u[2])) < 0 || r > 100) return; if (r /= 100, (i = parseFloat(u[3])) < 0 || i > 100) return; if (i /= 100, void 0 !== (o = u[4]) && ((o = parseFloat(o)) < 0 || o > 1)) return; if (0 === r) a = s = l = Math.round(255 * i); else { var d = i < .5 ? i * (1 + r) : i + r - i * r, p = 2 * i - d; a = Math.round(255 * c(p, d, n + 1 / 3)), s = Math.round(255 * c(p, d, n)), l = Math.round(255 * c(p, d, n - 1 / 3)) } t = [a, s, l, o] } return t }, rgb2tuple: function (e) { var t = void 0, n = new RegExp("^" + this.regex.rgba + "$").exec(e); if (n) { t = []; for (var r = [], i = 1; i <= 3; i++) { var o = n[i]; if ("%" === o[o.length - 1] && (r[i] = !0), o = parseFloat(o), r[i] && (o = o / 100 * 255), o < 0 || o > 255) return; t.push(Math.floor(o)) } var a = r[1] || r[2] || r[3], s = r[1] && r[2] && r[3]; if (a && !s) return; var l = n[4]; if (void 0 !== l) { if ((l = parseFloat(l)) < 0 || l > 1) return; t.push(l) } } return t }, colorname2tuple: function (e) { return this.colors[e.toLowerCase()] }, color2tuple: function (e) { return (r.array(e) ? e : null) || this.colorname2tuple(e) || this.hex2tuple(e) || this.rgb2tuple(e) || this.hsl2tuple(e) }, colors: { transparent: [0, 0, 0, 0], aliceblue: [240, 248, 255], antiquewhite: [250, 235, 215], aqua: [0, 255, 255], aquamarine: [127, 255, 212], azure: [240, 255, 255], beige: [245, 245, 220], bisque: [255, 228, 196], black: [0, 0, 0], blanchedalmond: [255, 235, 205], blue: [0, 0, 255], blueviolet: [138, 43, 226], brown: [165, 42, 42], burlywood: [222, 184, 135], cadetblue: [95, 158, 160], chartreuse: [127, 255, 0], chocolate: [210, 105, 30], coral: [255, 127, 80], cornflowerblue: [100, 149, 237], cornsilk: [255, 248, 220], crimson: [220, 20, 60], cyan: [0, 255, 255], darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgoldenrod: [184, 134, 11], darkgray: [169, 169, 169], darkgreen: [0, 100, 0], darkgrey: [169, 169, 169], darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47], darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], darksalmon: [233, 150, 122], darkseagreen: [143, 188, 143], darkslateblue: [72, 61, 139], darkslategray: [47, 79, 79], darkslategrey: [47, 79, 79], darkturquoise: [0, 206, 209], darkviolet: [148, 0, 211], deeppink: [255, 20, 147], deepskyblue: [0, 191, 255], dimgray: [105, 105, 105], dimgrey: [105, 105, 105], dodgerblue: [30, 144, 255], firebrick: [178, 34, 34], floralwhite: [255, 250, 240], forestgreen: [34, 139, 34], fuchsia: [255, 0, 255], gainsboro: [220, 220, 220], ghostwhite: [248, 248, 255], gold: [255, 215, 0], goldenrod: [218, 165, 32], gray: [128, 128, 128], grey: [128, 128, 128], green: [0, 128, 0], greenyellow: [173, 255, 47], honeydew: [240, 255, 240], hotpink: [255, 105, 180], indianred: [205, 92, 92], indigo: [75, 0, 130], ivory: [255, 255, 240], khaki: [240, 230, 140], lavender: [230, 230, 250], lavenderblush: [255, 240, 245], lawngreen: [124, 252, 0], lemonchiffon: [255, 250, 205], lightblue: [173, 216, 230], lightcoral: [240, 128, 128], lightcyan: [224, 255, 255], lightgoldenrodyellow: [250, 250, 210], lightgray: [211, 211, 211], lightgreen: [144, 238, 144], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], lightsalmon: [255, 160, 122], lightseagreen: [32, 178, 170], lightskyblue: [135, 206, 250], lightslategray: [119, 136, 153], lightslategrey: [119, 136, 153], lightsteelblue: [176, 196, 222], lightyellow: [255, 255, 224], lime: [0, 255, 0], limegreen: [50, 205, 50], linen: [250, 240, 230], magenta: [255, 0, 255], maroon: [128, 0, 0], mediumaquamarine: [102, 205, 170], mediumblue: [0, 0, 205], mediumorchid: [186, 85, 211], mediumpurple: [147, 112, 219], mediumseagreen: [60, 179, 113], mediumslateblue: [123, 104, 238], mediumspringgreen: [0, 250, 154], mediumturquoise: [72, 209, 204], mediumvioletred: [199, 21, 133], midnightblue: [25, 25, 112], mintcream: [245, 255, 250], mistyrose: [255, 228, 225], moccasin: [255, 228, 181], navajowhite: [255, 222, 173], navy: [0, 0, 128], oldlace: [253, 245, 230], olive: [128, 128, 0], olivedrab: [107, 142, 35], orange: [255, 165, 0], orangered: [255, 69, 0], orchid: [218, 112, 214], palegoldenrod: [238, 232, 170], palegreen: [152, 251, 152], paleturquoise: [175, 238, 238], palevioletred: [219, 112, 147], papayawhip: [255, 239, 213], peachpuff: [255, 218, 185], peru: [205, 133, 63], pink: [255, 192, 203], plum: [221, 160, 221], powderblue: [176, 224, 230], purple: [128, 0, 128], red: [255, 0, 0], rosybrown: [188, 143, 143], royalblue: [65, 105, 225], saddlebrown: [139, 69, 19], salmon: [250, 128, 114], sandybrown: [244, 164, 96], seagreen: [46, 139, 87], seashell: [255, 245, 238], sienna: [160, 82, 45], silver: [192, 192, 192], skyblue: [135, 206, 235], slateblue: [106, 90, 205], slategray: [112, 128, 144], slategrey: [112, 128, 144], snow: [255, 250, 250], springgreen: [0, 255, 127], steelblue: [70, 130, 180], tan: [210, 180, 140], teal: [0, 128, 128], thistle: [216, 191, 216], tomato: [255, 99, 71], turquoise: [64, 224, 208], violet: [238, 130, 238], wheat: [245, 222, 179], white: [255, 255, 255], whitesmoke: [245, 245, 245], yellow: [255, 255, 0], yellowgreen: [154, 205, 50] } } }, function (e, t, n) { "use strict"; var r = n(0); e.exports = { mapEmpty: function (e) { return null == e || 0 === Object.keys(e).length }, pushMap: function (e) { var t = this.getMap(e); null == t ? this.setMap(this.extend({}, e, { value: [e.value] })) : t.push(e.value) }, setMap: function (e) { for (var t = e.map, n = e.keys, i = n.length, o = 0; o < i; o++) { var a = n[o]; r.plainObject(a) && this.error("Tried to set map with object key"), o < n.length - 1 ? (null == t[a] && (t[a] = {}), t = t[a]) : t[a] = e.value } }, getMap: function (e) { for (var t = e.map, n = e.keys, i = n.length, o = 0; o < i; o++) { var a = n[o]; if (r.plainObject(a) && this.error("Tried to get map with object key"), null == (t = t[a])) return t } return t }, deleteMap: function (e) { for (var t = e.map, n = e.keys, i = n.length, o = e.keepChildren, a = 0; a < i; a++) { var s = n[a]; if (r.plainObject(s) && this.error("Tried to delete map with object key"), a === e.keys.length - 1) if (o) for (var l = Object.keys(t), c = 0; c < l.length; c++) { var u = l[c]; o[u] || (t[u] = void 0) } else t[s] = void 0; else t = t[s] } } } }, function (e, t, n) { "use strict"; var r = "(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))"; e.exports = { regex: { number: r, rgba: "rgb[a]?\\(((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)(?:\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)", rgbaNoBackRefs: "rgb[a]?\\((?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)(?:\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)", hsla: "hsl[a]?\\(((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?)))\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])(?:\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)", hslaNoBackRefs: "hsl[a]?\\((?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?)))\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])(?:\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)", hex3: "\\#[0-9a-fA-F]{3}", hex6: "\\#[0-9a-fA-F]{6}" } } }, function (e, t, n) { "use strict"; var r = n(13), i = n(0); e.exports = { camel2dash: r((function (e) { return e.replace(/([A-Z])/g, (function (e) { return "-" + e.toLowerCase() })) })), dash2camel: r((function (e) { return e.replace(/(-\w)/g, (function (e) { return e[1].toUpperCase() })) })), prependCamel: r((function (e, t) { return e + t[0].toUpperCase() + t.substring(1) }), (function (e, t) { return e + "$" + t })), capitalize: function (e) { return i.emptyString(e) ? e : e.charAt(0).toUpperCase() + e.substring(1) } } }, function (e, t, n) { "use strict"; var r = n(3), i = r ? r.performance : null, o = {}, a = i && i.now ? function () { return i.now() } : function () { return Date.now() }, s = function () { if (r) { if (r.requestAnimationFrame) return function (e) { r.requestAnimationFrame(e) }; if (r.mozRequestAnimationFrame) return function (e) { r.mozRequestAnimationFrame(e) }; if (r.webkitRequestAnimationFrame) return function (e) { r.webkitRequestAnimationFrame(e) }; if (r.msRequestAnimationFrame) return function (e) { r.msRequestAnimationFrame(e) } } return function (e) { e && setTimeout((function () { e(a()) }), 1e3 / 60) } }(); o.requestAnimationFrame = function (e) { s(e) }, o.performanceNow = a, o.debounce = n(26), o.now = function () { return Date.now() }, e.exports = o }, function (t, n) { t.exports = e }, function (e, t, n) { "use strict"; function r(e, t) { return e < t ? -1 : e > t ? 1 : 0 } e.exports = { sort: { ascending: r, descending: function (e, t) { return -1 * r(e, t) } } } }, function (e, t, n) { "use strict"; function r() { this._obj = {} } var i = r.prototype; i.set = function (e, t) { this._obj[e] = t }, i.delete = function (e) { this._obj[e] = null }, i.has = function (e) { return null != this._obj[e] }, i.get = function (e) { return this._obj[e] }, e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = {};[n(30), n(31), n(33), n(34), n(35), n(36), n(37), n(38), n(39), n(40), n(41)].forEach((function (e) { r.extend(i, e) })), e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = function (e) { return e = { bfs: e.bfs || !e.dfs, dfs: e.dfs || !e.bfs }, function (t, n, i) { var o; r.plainObject(t) && !r.elementOrCollection(t) && (t = (o = t).roots || o.root, n = o.visit, i = o.directed), i = 2 !== arguments.length || r.fn(n) ? i : n, n = r.fn(n) ? n : function () { }; for (var a, s = this._private.cy, l = t = r.string(t) ? this.filter(t) : t, c = [], u = [], d = {}, p = {}, f = {}, h = 0, g = this.nodes(), m = this.edges(), v = 0; v < l.length; v++)l[v].isNode() && (c.unshift(l[v]), e.bfs && (f[l[v].id()] = !0, u.push(l[v])), p[l[v].id()] = 0); for (; 0 !== c.length;) { if (l = e.bfs ? c.shift() : c.pop(), e.dfs) { if (f[l.id()]) continue; f[l.id()] = !0, u.push(l) } var b, y = p[l.id()], x = d[l.id()], w = null == x ? void 0 : x.connectedNodes().not(l)[0]; if (!0 === (b = n(l, x, w, h++, y))) { a = l; break } if (!1 === b) break; var k = l.connectedEdges(i ? function (e) { return e.data("source") === l.id() } : void 0).intersect(m); for (v = 0; v < k.length; v++) { var A = k[v], E = A.connectedNodes((function (e) { return e.id() !== l.id() })).intersect(g); 0 === E.length || f[E.id()] || (E = E[0], c.push(E), e.bfs && (f[E.id()] = !0, u.push(E)), d[E.id()] = A, p[E.id()] = p[l.id()] + 1) } } var S = []; for (v = 0; v < u.length; v++) { var $ = u[v], C = d[$.id()]; C && S.push(C), S.push($) } return { path: s.collection(S, { unique: !0 }), found: s.collection(a) } } }, o = { breadthFirstSearch: i({ bfs: !0 }), depthFirstSearch: i({ dfs: !0 }) }; o.bfs = o.breadthFirstSearch, o.dfs = o.depthFirstSearch, e.exports = o }, function (e, t, n) { "use strict"; var r = n(0), i = n(9), o = { dijkstra: function (e, t, n) { var o; r.plainObject(e) && !r.elementOrCollection(e) && (e = (o = e).root, t = o.weight, n = o.directed); var a = this._private.cy; t = r.fn(t) ? t : function () { return 1 }; for (var s = r.string(e) ? this.filter(e)[0] : e[0], l = {}, c = {}, u = {}, d = this.edges().filter((function (e) { return !e.isLoop() })), p = this.nodes(), f = function (e) { return l[e.id()] }, h = function (e, t) { l[e.id()] = t, g.updateItem(e) }, g = new i((function (e, t) { return f(e) - f(t) })), m = 0; m < p.length; m++) { var v = p[m]; l[v.id()] = v.same(s) ? 0 : 1 / 0, g.push(v) } for (var b = function (e, r) { for (var i, o = (n ? e.edgesTo(r) : e.edgesWith(r)).intersect(d), a = 1 / 0, s = 0; s < o.length; s++) { var l = o[s], c = t(l); (c < a || !i) && (a = c, i = l) } return { edge: i, dist: a } }; g.size() > 0;) { var y = g.pop(), x = f(y), w = y.id(); if (u[w] = x, x !== 1 / 0) { var k = y.neighborhood().intersect(p); for (m = 0; m < k.length; m++) { var A = k[m], E = A.id(), S = b(y, A), $ = x + S.dist; $ < f(A) && (h(A, $), c[E] = { node: y, edge: S.edge }) } } } return { distanceTo: function (e) { var t = r.string(e) ? p.filter(e)[0] : e[0]; return u[t.id()] }, pathTo: function (e) { var t = r.string(e) ? p.filter(e)[0] : e[0], n = [], i = t; if (t.length > 0) for (n.unshift(t); c[i.id()];) { var o = c[i.id()]; n.unshift(o.edge), n.unshift(o.node), i = o.node } return a.collection(n) } } } }; e.exports = o }, function (e, t) { e.exports = n }, function (e, t, n) { "use strict"; var r = n(0), i = { kruskal: function (e) { var t = this.cy(); function n(e) { for (var t = 0; t < o.length; t++) { var n = o[t]; if (n.anySame(e)) return { eles: n, index: t } } } e = r.fn(e) ? e : function () { return 1 }; for (var i = t.collection(t, []), o = [], a = this.nodes(), s = 0; s < a.length; s++)o.push(a[s].collection()); var l = this.edges().toArray().sort((function (t, n) { return e(t) - e(n) })); for (s = 0; s < l.length; s++) { var c = l[s], u = c.source()[0], d = c.target()[0], p = n(u), f = n(d); p.index !== f.index && (i = i.add(c), o[p.index] = p.eles.add(f.eles), o.splice(f.index, 1)) } return a.add(i) } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = { aStar: function (e) { e = e || {}; var t = function e(t, n, r, o) { if (t == n) return o.unshift(i.getElementById(n)), o; if (n in r) { var a = r[n], s = g[n]; return o.unshift(i.getElementById(s)), o.unshift(i.getElementById(n)), e(t, a, r, o) } }, n = function (e, t) { if (0 !== e.length) { for (var n = 0, r = t[e[0]], i = 1; i < e.length; i++) { var o = t[e[i]]; o < r && (r = o, n = i) } return n } }, i = this._private.cy; if (null != e && null != e.root) { var o = r.string(e.root) ? this.filter(e.root)[0] : e.root[0]; if (null != e.goal) { var a = r.string(e.goal) ? this.filter(e.goal)[0] : e.goal[0]; if (null != e.heuristic && r.fn(e.heuristic)) var s = e.heuristic; else s = function () { return 0 }; if (null != e.weight && r.fn(e.weight)) var l = e.weight; else l = function (e) { return 1 }; if (null != e.directed) var c = e.directed; else c = !1; var u = o.id(), d = a.id(), p = [], f = [u], h = {}, g = {}, m = {}, v = {}; m[u] = 0, v[u] = s(o); for (var b = 0; f.length > 0;) { var y = n(f, v), x = i.getElementById(f[y]), w = x.id(); if (b++, w == d) { var k = t(u, d, h, []); return { found: !0, distance: m[w], path: this.spawn(k), steps: b } } p.push(w), f.splice(y, 1); for (var A = x._private.edges, E = 0; E < A.length; E++) { var S = A[E]; if (this.hasElementWithId(S.id()) && (!c || S.data("source") === w)) { var $ = S.source(), C = S.target(), _ = $.id() !== w ? $ : C, O = _.id(); if (this.hasElementWithId(O) && -1 == p.indexOf(O)) { var T = m[w] + l(S); -1 != f.indexOf(O) ? T < m[O] && (m[O] = T, v[O] = T + s(_), h[O] = w) : (m[O] = T, v[O] = T + s(_), f.push(O), h[O] = w, g[O] = S.id()) } } } } return { found: !1, distance: void 0, path: void 0, steps: b } } } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = { floydWarshall: function (e) { e = e || {}; var t = this.cy(); if (null != e.weight && r.fn(e.weight)) var n = e.weight; else n = function (e) { return 1 }; if (null != e.directed) var i = e.directed; else i = !1; for (var o = this.edges().stdFilter((function (e) { return !e.isLoop() })), a = this.nodes(), s = a.length, l = {}, c = 0; c < s; c++)l[a[c].id()] = c; var u = []; for (c = 0; c < s; c++) { for (var d = new Array(s), p = 0; p < s; p++)d[p] = c == p ? 0 : 1 / 0; u.push(d) } var f = [], h = [], g = function (e) { for (var t = 0; t < s; t++) { for (var n = new Array(s), r = 0; r < s; r++)n[r] = void 0; e.push(n) } }; for (g(f), g(h), c = 0; c < o.length; c++) { var m = l[o[c].source().id()], v = l[o[c].target().id()], b = n(o[c]); u[m][v] > b && (u[m][v] = b, f[m][v] = v, h[m][v] = o[c]) } if (!i) for (c = 0; c < o.length; c++)m = l[o[c].target().id()], v = l[o[c].source().id()], b = n(o[c]), u[m][v] > b && (u[m][v] = b, f[m][v] = v, h[m][v] = o[c]); for (var y = 0; y < s; y++)for (c = 0; c < s; c++)for (p = 0; p < s; p++)u[c][y] + u[y][p] < u[c][p] && (u[c][p] = u[c][y] + u[y][p], f[c][p] = f[c][y]); var x = []; for (c = 0; c < s; c++)x.push(a[c].id()); return { distance: function (e, n) { if (r.string(e)) var i = t.filter(e)[0].id(); else i = e.id(); if (r.string(n)) var o = t.filter(n)[0].id(); else o = n.id(); return u[l[i]][l[o]] }, path: function (e, n) { if (r.string(e)) var i = t.filter(e)[0].id(); else i = e.id(); if (r.string(n)) var o = t.filter(n)[0].id(); else o = n.id(); var a = function (e, n, r, i, o) { if (e === n) return t.getElementById(i[e]); if (void 0 !== r[e][n]) { for (var a = [t.getElementById(i[e])], s = e; e !== n;) { s = e, e = r[e][n]; var l = o[s][e]; a.push(l), a.push(t.getElementById(i[e])) } return a } }(l[i], l[o], f, x, h); return t.collection(a) } } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = { bellmanFord: function (e) { var t = this; if (null != (e = e || {}).weight && r.fn(e.weight)) var n = e.weight; else n = function (e) { return 1 }; if (null != e.directed) var o = e.directed; else o = !1; if (null != e.root) { if (r.string(e.root)) var a = this.filter(e.root)[0]; else a = e.root[0]; for (var s = this._private.cy, l = this.edges().stdFilter((function (e) { return !e.isLoop() })), c = this.nodes(), u = c.length, d = {}, p = 0; p < u; p++)d[c[p].id()] = p; var f = [], h = [], g = []; for (p = 0; p < u; p++)c[p].id() === a.id() ? f[p] = 0 : f[p] = 1 / 0, h[p] = void 0; var m = !1; for (p = 1; p < u; p++) { m = !1; for (var v = 0; v < l.length; v++) { var b, y = d[l[v].source().id()], x = d[l[v].target().id()], w = n(l[v]); (b = f[y] + w) < f[x] && (f[x] = b, h[x] = y, g[x] = l[v], m = !0), o || (b = f[x] + w) < f[y] && (f[y] = b, h[y] = x, g[y] = l[v], m = !0) } if (!m) break } if (m) for (v = 0; v < l.length; v++)if (y = d[l[v].source().id()], x = d[l[v].target().id()], w = n(l[v]), f[y] + w < f[x]) return i.error("Graph contains a negative weight cycle for Bellman-Ford"), { pathTo: void 0, distanceTo: void 0, hasNegativeWeightCycle: !0 }; var k = []; for (p = 0; p < u; p++)k.push(c[p].id()); return { distanceTo: function (e) { if (r.string(e)) var t = s.filter(e)[0].id(); else t = e.id(); return f[d[t]] }, pathTo: function (e) { if (r.string(e)) var n = s.filter(e)[0].id(); else n = e.id(); var i = function (e, t, n, r, i, o) { for (; ;) { if (i.push(s.getElementById(r[n])), i.push(o[n]), t === n) return i; var a = e[n]; if (void 0 === a) return; n = a } }(h, d[a.id()], d[n], k, [], g); return null != i && i.reverse(), t.spawn(i) }, hasNegativeWeightCycle: !1 } } } }; e.exports = o }, function (e, t, n) { "use strict"; var r = n(1), i = { kargerStein: function (e) { e = e || {}; var t = function e(t, n, r, i) { return r <= i ? n : e(t, function (e, t, n) { for (var r = n[e], i = r[1], o = r[2], a = t[i], s = t[o], l = n.filter((function (e) { return !(t[e[1]] === a && t[e[2]] === s || t[e[1]] === s && t[e[2]] === a) })), c = 0; c < l.length; c++) { var u = l[c]; u[1] === s ? (l[c] = u.slice(0), l[c][1] = a) : u[2] === s && (l[c] = u.slice(0), l[c][2] = a) } for (c = 0; c < t.length; c++)t[c] === s && (t[c] = a); return l }(Math.floor(Math.random() * n.length), t, n), r - 1, i) }, n = this._private.cy, i = this.edges().stdFilter((function (e) { return !e.isLoop() })), o = this.nodes(), a = o.length, s = i.length, l = Math.ceil(Math.pow(Math.log(a) / Math.LN2, 2)), c = Math.floor(a / Math.sqrt(2)); if (!(a < 2)) { for (var u = {}, d = 0; d < a; d++)u[o[d].id()] = d; var p = []; for (d = 0; d < s; d++) { var f = i[d]; p.push([d, u[f.source().id()], u[f.target().id()]]) } var h, g = 1 / 0, m = []; for (d = 0; d < a; d++)m.push(d); for (var v = 0; v <= l; v++) { var b = m.slice(0), y = t(b, p, a, c), x = b.slice(0), w = t(b, y, c, 2), k = t(x, y, c, 2); w.length <= k.length && w.length < g ? (g = w.length, h = [w, b]) : k.length <= w.length && k.length < g && (g = k.length, h = [k, x]) } var A = h[0].map((function (e) { return i[e[0]] })), E = [], S = [], $ = h[1][0]; for (d = 0; d < h[1].length; d++)h[1][d] === $ ? E.push(o[d]) : S.push(o[d]); return { cut: this.spawn(n, A), partition1: this.spawn(E), partition2: this.spawn(S) } } r.error("At least 2 nodes are required for Karger-Stein algorithm") } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = { pageRank: function (e) { var t = function (e) { for (var t = e.length, n = 0, r = 0; r < t; r++)n += e[r]; for (r = 0; r < t; r++)e[r] = e[r] / n }; if (null != (e = e || {}) && null != e.dampingFactor) var n = e.dampingFactor; else n = .8; if (null != e && null != e.precision) var i = e.precision; else i = 1e-6; if (null != e && null != e.iterations) var o = e.iterations; else o = 200; if (null != e && null != e.weight && r.fn(e.weight)) var a = e.weight; else a = function (e) { return 1 }; for (var s = this._private.cy, l = this.edges().stdFilter((function (e) { return !e.isLoop() })), c = this.nodes(), u = c.length, d = l.length, p = {}, f = 0; f < u; f++)p[c[f].id()] = f; var h = [], g = [], m = (1 - n) / u; for (f = 0; f < u; f++) { for (var v = [], b = 0; b < u; b++)v.push(0); h.push(v), g.push(0) } for (f = 0; f < d; f++) { var y = l[f], x = p[y.source().id()], w = p[y.target().id()], k = a(y); h[w][x] += k, g[x] += k } var A = 1 / u + m; for (b = 0; b < u; b++)if (0 === g[b]) for (f = 0; f < u; f++)h[f][b] = A; else for (f = 0; f < u; f++)h[f][b] = h[f][b] / g[b] + m; var E, S = [], $ = []; for (f = 0; f < u; f++)S.push(1), $.push(0); for (var C = 0; C < o; C++) { var _ = $.slice(0); for (f = 0; f < u; f++)for (b = 0; b < u; b++)_[f] += h[f][b] * S[b]; t(_), E = S, S = _; var O = 0; for (f = 0; f < u; f++)O += Math.pow(E[f] - S[f], 2); if (O < i) break } return { rank: function (e) { if (r.string(e)) var t = s.filter(e)[0].id(); else t = e.id(); return S[p[t]] } } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = { degreeCentralityNormalized: function (e) { e = e || {}; var t = this.cy(); if (null != e.directed) var n = e.directed; else n = !1; var o = this.nodes(), a = o.length; if (n) { var s = {}, l = {}, c = 0, u = 0; for (f = 0; f < a; f++)h = o[f], g = this.degreeCentrality(i.extend({}, e, { root: h })), c < g.indegree && (c = g.indegree), u < g.outdegree && (u = g.outdegree), s[h.id()] = g.indegree, l[h.id()] = g.outdegree; return { indegree: function (e) { return 0 == c ? 0 : (e = r.string(e) ? t.filter(e)[0].id() : e.id(), s[e] / c) }, outdegree: function (e) { return 0 == u ? 0 : (e = r.string(e) ? t.filter(e)[0].id() : e.id(), l[e] / u) } } } for (var d = {}, p = 0, f = 0; f < a; f++) { var h = o[f], g = this.degreeCentrality(i.extend({}, e, { root: h })); p < g.degree && (p = g.degree), d[h.id()] = g.degree } return { degree: function (e) { return 0 == p ? 0 : (e = r.string(e) ? t.filter(e)[0].id() : e.id(), d[e] / p) } } }, degreeCentrality: function (e) { if (null != (e = e || {}) && null != e.root) { var t = r.string(e.root) ? this.filter(e.root)[0] : e.root[0]; if (null != e.weight && r.fn(e.weight)) var n = e.weight; else n = function (e) { return 1 }; if (null != e.directed) var i = e.directed; else i = !1; if (null != e.alpha && r.number(e.alpha)) var o = e.alpha; else o = 0; if (i) { var a = t.connectedEdges('edge[target = "' + t.id() + '"]').intersection(this), s = t.connectedEdges('edge[source = "' + t.id() + '"]').intersection(this), l = a.length, c = s.length, u = 0, d = 0; for (g = 0; g < a.length; g++)u += n(a[g]); for (g = 0; g < s.length; g++)d += n(s[g]); return { indegree: Math.pow(l, 1 - o) * Math.pow(u, o), outdegree: Math.pow(c, 1 - o) * Math.pow(d, o) } } for (var p = t.connectedEdges().intersection(this), f = p.length, h = 0, g = 0; g < p.length; g++)h += n(p[g]); return { degree: Math.pow(f, 1 - o) * Math.pow(h, o) } } } }; o.dc = o.degreeCentrality, o.dcn = o.degreeCentralityNormalised = o.degreeCentralityNormalized, e.exports = o }, function (e, t, n) { "use strict"; var r = n(0), i = { closenessCentralityNormalized: function (e) { e = e || {}; var t = this.cy(), n = e.harmonic; void 0 === n && (n = !0); for (var i = {}, o = 0, a = this.nodes(), s = this.floydWarshall({ weight: e.weight, directed: e.directed }), l = 0; l < a.length; l++) { for (var c = 0, u = 0; u < a.length; u++)if (l != u) { var d = s.distance(a[l], a[u]); c += n ? 1 / d : d } n || (c = 1 / c), o < c && (o = c), i[a[l].id()] = c } return { closeness: function (e) { return 0 == o ? 0 : (e = r.string(e) ? t.filter(e)[0].id() : e.id(), i[e] / o) } } }, closenessCentrality: function (e) { if (null != (e = e || {}).root) { if (r.string(e.root)) var t = this.filter(e.root)[0]; else t = e.root[0]; if (null != e.weight && r.fn(e.weight)) var n = e.weight; else n = function () { return 1 }; if (null != e.directed && r.bool(e.directed)) var i = e.directed; else i = !1; var o = e.harmonic; void 0 === o && (o = !0); for (var a = this.dijkstra({ root: t, weight: n, directed: i }), s = 0, l = this.nodes(), c = 0; c < l.length; c++)if (l[c].id() != t.id()) { var u = a.distanceTo(l[c]); s += o ? 1 / u : u } return o ? s : 1 / s } } }; i.cc = i.closenessCentrality, i.ccn = i.closenessCentralityNormalised = i.closenessCentralityNormalized, e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = n(9), o = { betweennessCentrality: function (e) { var t, n; e = e || {}, r.fn(e.weight) ? (n = e.weight, t = !0) : t = !1; for (var o = null != e.directed && e.directed, a = this._private.cy, s = this.nodes(), l = {}, c = {}, u = 0, d = function (e, t) { c[e] = t, t > u && (u = t) }, p = function (e) { return c[e] }, f = 0; f < s.length; f++)l[w = (k = s[f]).id()] = o ? k.outgoers().nodes() : k.openNeighborhood().nodes(), d(w, 0); for (var h = 0; h < s.length; h++) { var g = s[h].id(), m = [], v = {}, b = {}, y = {}, x = new i((function (e, t) { return y[e] - y[t] })); for (f = 0; f < s.length; f++) { var w; v[w = s[f].id()] = [], b[w] = 0, y[w] = 1 / 0 } for (b[g] = 1, y[g] = 0, x.push(g); !x.empty();) { var k = x.pop(); if (m.push(k), t) for (var A = 0; A < l[k].length; A++) { var E = l[k][A], S = a.getElementById(k), $ = n(S.edgesTo(E).length > 0 ? S.edgesTo(E)[0] : E.edgesTo(S)[0]); E = E.id(), y[E] > y[k] + $ && (y[E] = y[k] + $, x.nodes.indexOf(E) < 0 ? x.push(E) : x.updateItem(E), b[E] = 0, v[E] = []), y[E] == y[k] + $ && (b[E] = b[E] + b[k], v[E].push(k)) } else for (A = 0; A < l[k].length; A++)E = l[k][A].id(), y[E] == 1 / 0 && (x.push(E), y[E] = y[k] + 1), y[E] == y[k] + 1 && (b[E] = b[E] + b[k], v[E].push(k)) } var C = {}; for (f = 0; f < s.length; f++)C[s[f].id()] = 0; for (; m.length > 0;)for (E = m.pop(), A = 0; A < v[E].length; A++)C[k = v[E][A]] = C[k] + b[k] / b[E] * (1 + C[E]), E != s[h].id() && d(E, p(E) + C[E]) } var _ = { betweenness: function (e) { return e = r.string(e) ? a.filter(e).id() : e.id(), p(e) }, betweennessNormalized: function (e) { return 0 == u ? 0 : (e = r.string(e) ? a.filter(e).id() : e.id(), p(e) / u) } }; return _.betweennessNormalised = _.betweennessNormalized, _ } }; o.bc = o.betweennessCentrality, e.exports = o }, function (e, t, n) { "use strict"; var r = n(4), i = { animate: r.animate(), animation: r.animation(), animated: r.animated(), clearQueue: r.clearQueue(), delay: r.delay(), delayAnimation: r.delayAnimation(), stop: r.stop() }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(1), i = n(44), o = n(2), a = n(0), s = { animated: function () { return function () { var e = void 0 !== this.length ? this : [this]; if (!(this._private.cy || this).styleEnabled()) return !1; var t = e[0]; return t ? t._private.animation.current.length > 0 : void 0 } }, clearQueue: function () { return function () { var e = void 0 !== this.length ? this : [this]; if (!(this._private.cy || this).styleEnabled()) return this; for (var t = 0; t < e.length; t++)e[t]._private.animation.queue = []; return this } }, delay: function () { return function (e, t) { return (this._private.cy || this).styleEnabled() ? this.animate({ delay: e, duration: e, complete: t }) : this } }, delayAnimation: function () { return function (e, t) { return (this._private.cy || this).styleEnabled() ? this.animation({ delay: e, duration: e, complete: t }) : this } }, animation: function () { return function (e, t) { var n = void 0 !== this.length, s = n ? this : [this], l = this._private.cy || this, c = !n, u = !c; if (!l.styleEnabled()) return this; var d = l.style(); if (e = r.assign({}, e, t), 0 === Object.keys(e).length) return new i(s[0], e); switch (void 0 === e.duration && (e.duration = 400), e.duration) { case "slow": e.duration = 600; break; case "fast": e.duration = 200 }if (u && (e.style = d.getPropsList(e.style || e.css), e.css = void 0), u && null != e.renderedPosition) { var p = e.renderedPosition, f = l.pan(), h = l.zoom(); e.position = o.renderedToModelPosition(p, h, f) } if (c && null != e.panBy) { var g = e.panBy, m = l.pan(); e.pan = { x: m.x + g.x, y: m.y + g.y } } var v = e.center || e.centre; if (c && null != v) { var b = l.getCenterPan(v.eles, e.zoom); null != b && (e.pan = b) } if (c && null != e.fit) { var y = e.fit, x = l.getFitViewport(y.eles || y.boundingBox, y.padding); null != x && (e.pan = x.pan, e.zoom = x.zoom) } if (c && a.plainObject(e.zoom)) { var w = l.getZoomedViewport(e.zoom); null != w && (w.zoomed && (e.zoom = w.zoom), w.panned && (e.pan = w.pan)) } return new i(s[0], e) } }, animate: function () { return function (e, t) { var n = void 0 !== this.length ? this : [this]; if (!(this._private.cy || this).styleEnabled()) return this; t && (e = r.extend({}, e, t)); for (var i = 0; i < n.length; i++) { var o = n[i], a = o.animated() && (void 0 === e.queue || e.queue); o.animation(e, a ? { queue: !0 } : void 0).play() } return this } }, stop: function () { return function (e, t) { var n = void 0 !== this.length ? this : [this], r = this._private.cy || this; if (!r.styleEnabled()) return this; for (var i = 0; i < n.length; i++) { for (var o = n[i]._private, a = o.animation.current, s = 0; s < a.length; s++) { var l = a[s]._private; t && (l.duration = 0) } e && (o.animation.queue = []), t || (o.animation.current = []) } return r.notify({ eles: this, type: "draw" }), this } } }; e.exports = s }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = n(5), a = function (e, t, n) { var o = this._private = r.extend({ duration: 1e3 }, t, n); o.target = e, o.style = o.style || o.css, o.started = !1, o.playing = !1, o.hooked = !1, o.applying = !1, o.progress = 0, o.completes = [], o.frames = [], o.complete && i.fn(o.complete) && o.completes.push(o.complete), this.length = 1, this[0] = this }, s = a.prototype; r.extend(s, { instanceString: function () { return "animation" }, hook: function () { var e = this._private; if (!e.hooked) { var t = e.target._private.animation; (e.queue ? t.queue : t.current).push(this), i.elementOrCollection(e.target) && e.target.cy().addToAnimationPool(e.target), e.hooked = !0 } return this }, play: function () { var e = this._private; return 1 === e.progress && (e.progress = 0), e.playing = !0, e.started = !1, e.stopped = !1, this.hook(), this }, playing: function () { return this._private.playing }, apply: function () { var e = this._private; return e.applying = !0, e.started = !1, e.stopped = !1, this.hook(), this }, applying: function () { return this._private.applying }, pause: function () { var e = this._private; return e.playing = !1, e.started = !1, this }, stop: function () { var e = this._private; return e.playing = !1, e.started = !1, e.stopped = !0, this }, rewind: function () { return this.progress(0) }, fastforward: function () { return this.progress(1) }, time: function (e) { var t = this._private; return void 0 === e ? t.progress * t.duration : this.progress(e / t.duration) }, progress: function (e) { var t = this._private, n = t.playing; return void 0 === e ? t.progress : (n && this.pause(), t.progress = e, t.started = !1, n && this.play(), this) }, completed: function () { return 1 === this._private.progress }, reverse: function () { var e = this._private, t = e.playing; t && this.pause(), e.progress = 1 - e.progress, e.started = !1; var n = function (t, n) { var r = e[t]; null != r && (e[t] = e[n], e[n] = r) }; if (n("zoom", "startZoom"), n("pan", "startPan"), n("position", "startPosition"), e.style) for (var r = 0; r < e.style.length; r++) { var i = e.style[r], o = i.name, a = e.startStyle[o]; e.startStyle[o] = i, e.style[r] = a } return t && this.play(), this }, promise: function (e) { var t = this._private, n = void 0; switch (e) { case "frame": n = t.frames; break; default: case "complete": case "completed": n = t.completes }return new o((function (e, t) { n.push((function () { e() })) })) } }), s.complete = s.completed, e.exports = a }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = { data: function (e) { return e = r.extend({}, { field: "data", bindingEvent: "data", allowBinding: !1, allowSetting: !1, allowGetting: !1, settingEvent: "data", settingTriggersEvent: !1, triggerFnName: "trigger", immutableKeys: {}, updateStyle: !1, beforeGet: function (e) { }, beforeSet: function (e, t) { }, onSet: function (e) { }, canSet: function (e) { return !0 } }, e), function (t, n) { var r = e, o = void 0 !== this.length, a = o ? this : [this], s = o ? this[0] : this; if (i.string(t)) { if (r.allowGetting && void 0 === n) { var l = void 0; return s && (r.beforeGet(s), l = s._private[r.field][t]), l } if (r.allowSetting && void 0 !== n && !r.immutableKeys[t]) { var c = function (e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }({}, t, n); r.beforeSet(this, c); for (var u = 0, d = a.length; u < d; u++) { var p = a[u]; r.canSet(p) && (p._private[r.field][t] = n) } r.updateStyle && this.updateStyle(), r.onSet(this), r.settingTriggersEvent && this[r.triggerFnName](r.settingEvent) } } else if (r.allowSetting && i.plainObject(t)) { var f = t, h = void 0, g = void 0, m = Object.keys(f); r.beforeSet(this, f); for (var v = 0; v < m.length; v++)if (g = f[h = m[v]], !r.immutableKeys[h]) for (var b = 0; b < a.length; b++) { var y = a[b]; r.canSet(y) && (y._private[r.field][h] = g) } r.updateStyle && this.updateStyle(), r.onSet(this), r.settingTriggersEvent && this[r.triggerFnName](r.settingEvent) } else if (r.allowBinding && i.fn(t)) { var x = t; this.on(r.bindingEvent, x) } else if (r.allowGetting && void 0 === t) { var w = void 0; return s && (r.beforeGet(s), w = s._private[r.field]), w } return this } }, removeData: function (e) { return e = r.extend({}, { field: "data", event: "data", triggerFnName: "trigger", triggerEvent: !1, immutableKeys: {} }, e), function (t) { var n = e, r = void 0 !== this.length ? this : [this]; if (i.string(t)) { for (var o = t.split(/\s+/), a = o.length, s = 0; s < a; s++) { var l = o[s]; if (!i.emptyString(l) && !n.immutableKeys[l]) for (var c = 0, u = r.length; c < u; c++)r[c]._private[n.field][l] = void 0 } n.triggerEvent && this[n.triggerFnName](n.event) } else if (void 0 === t) { for (var d = 0, p = r.length; d < p; d++)for (var f = r[d]._private[n.field], h = Object.keys(f), g = 0; g < h.length; g++) { var m = h[g]; !n.immutableKeys[m] && (f[m] = void 0) } n.triggerEvent && this[n.triggerFnName](n.event) } return this } } }; e.exports = o }, function (e, t, n) { "use strict"; var r = n(5), i = { eventAliasesOn: function (e) { var t = e; t.addListener = t.listen = t.bind = t.on, t.unlisten = t.unbind = t.off = t.removeListener, t.trigger = t.emit, t.pon = t.promiseOn = function (e, t) { var n = this, i = Array.prototype.slice.call(arguments, 0); return new r((function (e, t) { var r = i.concat([function (t) { n.off.apply(n, o), e(t) }]), o = r.concat([]); n.on.apply(n, r) })) } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(8), i = { classes: function (e) { e = (e || "").match(/\S+/g) || []; for (var t = this, n = [], i = new r(e), o = function (e) { var o = t[e], a = o._private, s = a.classes, l = !1; i.forEach((function (e) { s.has(e) || (l = !0) })), l || s.forEach((function (e) { i.has(e) || (l = !0) })), l && (a.classes = new r(i), n.push(o)) }, a = 0; a < t.length; a++)o(a); return n.length > 0 && this.spawn(n).updateStyle().emit("class"), t }, addClass: function (e) { return this.toggleClass(e, !0) }, hasClass: function (e) { var t = this[0]; return null != t && t._private.classes.has(e) }, toggleClass: function (e, t) { for (var n = e.match(/\S+/g) || [], r = [], i = 0, o = this.length; i < o; i++)for (var a = this[i], s = !1, l = 0; l < n.length; l++) { var c = n[l], u = a._private.classes, d = u.has(c); t || void 0 === t && !d ? (u.add(c), d || s || (r.push(a), s = !0)) : (u.delete(c), d && !s && (r.push(a), s = !0)) } return r.length > 0 && this.spawn(r).updateStyle().emit("class"), this }, removeClass: function (e) { return this.toggleClass(e, !1) }, flashClass: function (e, t) { var n = this; if (null == t) t = 250; else if (0 === t) return n; return n.addClass(e), setTimeout((function () { n.removeClass(e) }), t), n } }; e.exports = i }, function (e, t, n) { "use strict"; n(0); var r = n(6), i = { allAre: function (e) { var t = new r(e); return this.every((function (e) { return t.matches(e) })) }, is: function (e) { var t = new r(e); return this.some((function (e) { return t.matches(e) })) }, some: function (e, t) { for (var n = 0; n < this.length; n++)if (t ? e.apply(t, [this[n], n, this]) : e(this[n], n, this)) return !0; return !1 }, every: function (e, t) { for (var n = 0; n < this.length; n++)if (!(t ? e.apply(t, [this[n], n, this]) : e(this[n], n, this))) return !1; return !0 }, same: function (e) { return e = this.cy().collection(e), this.length === e.length && this.every((function (t) { return e.hasElementWithId(t.id()) })) }, anySame: function (e) { return e = this.cy().collection(e), this.some((function (t) { return e.hasElementWithId(t.id()) })) }, allAreNeighbors: function (e) { e = this.cy().collection(e); var t = this.neighborhood(); return e.every((function (e) { return t.hasElementWithId(e.id()) })) }, contains: function (e) { e = this.cy().collection(e); var t = this; return e.every((function (e) { return t.hasElementWithId(e.id()) })) } }; i.allAreNeighbours = i.allAreNeighbors, i.has = i.contains, e.exports = i }, function (e, t, n) { "use strict"; var r = n(1), i = n(50), o = n(10), a = function (e) { for (var t = void 0, n = void 0, r = void 0, o = 0; o < i.length; o++) { var a = i[o], s = a.name, l = e.match(a.regexObj); if (null != l) { n = l, t = a, r = s; var c = l[0]; e = e.substring(c.length); break } } return { expr: t, match: n, name: r, remaining: e } }; e.exports = { parse: function (e) { var t = this._private.selectorText = e, n = this[0] = o(); for (this.length = 1, t = function (e) { var t = e.match(/^\s+/); if (t) { var n = t[0]; e = e.substring(n.length) } return e }(t); ;) { var i = a(t); if (null == i.expr) return r.error("The selector `" + e + "`is invalid"), !1; var s = i.match.slice(1), l = i.expr.populate(this, n, s); if (!1 === l) return !1; if (null != l && (n = l), (t = i.remaining).match(/^\s*$/)) break } for (var c = 0; c < this.length; c++) { var u = this[c]; if (null != u.subject) { for (; u.subject !== u;)if (null != u.parent) { var d = u.parent, p = u; p.parent = null, d.child = p, u = d } else { if (null == u.ancestor) return u.source || u.target || u.connectedNodes ? (r.error("The selector `" + this.text() + "` can not contain a subject selector that applies to the source or target of an edge selector"), !1) : (r.error("When adjusting references for the selector `" + this.text() + "`, neither parent nor ancestor was found"), !1); var f = u.ancestor, h = u; h.ancestor = null, f.descendant = h, u = f } this[c] = u.subject } } return !0 } } }, function (e, t, n) { "use strict"; var r = function (e, t) { if (Array.isArray(e)) return e; if (Symbol.iterator in Object(e)) return function (e, t) { var n = [], r = !0, i = !1, o = void 0; try { for (var a, s = e[Symbol.iterator](); !(r = (a = s.next()).done) && (n.push(a.value), !t || n.length !== t); r = !0); } catch (e) { i = !0, o = e } finally { try { !r && s.return && s.return() } finally { if (i) throw o } } return n }(e, t); throw new TypeError("Invalid attempt to destructure non-iterable instance") }, i = n(15).stateSelectorRegex, o = n(51), a = n(1), s = n(10), l = function (e) { return e.replace(new RegExp("\\\\(" + o.metaChar + ")", "g"), (function (e, t) { return t })) }, c = function (e, t, n) { t === e[e.length - 1] && (e[e.length - 1] = n) }, u = [{ name: "group", query: !0, regex: "(" + o.group + ")", populate: function (e, t, n) { var i = r(n, 1)[0]; t.group = "*" === i ? i : i + "s" } }, { name: "state", query: !0, regex: i, populate: function (e, t, n) { var i = r(n, 1)[0]; t.colonSelectors.push(i) } }, { name: "id", query: !0, regex: "\\#(" + o.id + ")", populate: function (e, t, n) { var i = r(n, 1)[0]; t.ids.push(l(i)) } }, { name: "className", query: !0, regex: "\\.(" + o.className + ")", populate: function (e, t, n) { var i = r(n, 1)[0]; t.classes.push(l(i)) } }, { name: "dataExists", query: !0, regex: "\\[\\s*(" + o.variable + ")\\s*\\]", populate: function (e, t, n) { var i = r(n, 1)[0]; t.data.push({ field: l(i) }) } }, { name: "dataCompare", query: !0, regex: "\\[\\s*(" + o.variable + ")\\s*(" + o.comparatorOp + ")\\s*(" + o.value + ")\\s*\\]", populate: function (e, t, n) { var i = r(n, 3), a = i[0], s = i[1], c = i[2]; c = null != new RegExp("^" + o.string + "$").exec(c) ? c.substring(1, c.length - 1) : parseFloat(c), t.data.push({ field: l(a), operator: s, value: c }) } }, { name: "dataBool", query: !0, regex: "\\[\\s*(" + o.boolOp + ")\\s*(" + o.variable + ")\\s*\\]", populate: function (e, t, n) { var i = r(n, 2), o = i[0], a = i[1]; t.data.push({ field: l(a), operator: o }) } }, { name: "metaCompare", query: !0, regex: "\\[\\[\\s*(" + o.meta + ")\\s*(" + o.comparatorOp + ")\\s*(" + o.number + ")\\s*\\]\\]", populate: function (e, t, n) { var i = r(n, 3), o = i[0], a = i[1], s = i[2]; t.meta.push({ field: l(o), operator: a, value: parseFloat(s) }) } }, { name: "nextQuery", separator: !0, regex: o.separator, populate: function (e) { var t = e[e.length++] = s(); return e.currentSubject = null, t } }, { name: "directedEdge", separator: !0, regex: o.directedEdge, populate: function (e, t) { var n = s(), r = t, i = s(); return n.group = "edges", n.target = i, n.source = r, n.subject = e.currentSubject, c(e, t, n), i } }, { name: "undirectedEdge", separator: !0, regex: o.undirectedEdge, populate: function (e, t) { var n = s(), r = t, i = s(); return n.group = "edges", n.connectedNodes = [r, i], n.subject = e.currentSubject, c(e, t, n), i } }, { name: "child", separator: !0, regex: o.child, populate: function (e, t) { var n = s(); return n.parent = t, n.subject = e.currentSubject, c(e, t, n), n } }, { name: "descendant", separator: !0, regex: o.descendant, populate: function (e, t) { var n = s(); return n.ancestor = t, n.subject = e.currentSubject, c(e, t, n), n } }, { name: "subject", modifier: !0, regex: o.subject, populate: function (e, t) { if (null != e.currentSubject && t.subject != t) return a.error("Redefinition of subject in selector `" + e.toString() + "`"), !1; e.currentSubject = t, t.subject = t, e[e.length - 1].subject = t } }]; u.forEach((function (e) { return e.regexObj = new RegExp("^" + e.regex) })), e.exports = u }, function (e, t, n) { "use strict"; var r = { metaChar: "[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]", comparatorOp: "=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=", boolOp: "\\?|\\!|\\^", string: "\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'", number: n(1).regex.number, meta: "degree|indegree|outdegree", separator: "\\s*,\\s*", descendant: "\\s+", child: "\\s+>\\s+", subject: "\\$", group: "node|edge|\\*", directedEdge: "\\s+->\\s+", undirectedEdge: "\\s+<->\\s+" }; r.variable = "(?:[\\w-]|(?:\\\\" + r.metaChar + "))+", r.value = r.string + "|" + r.number, r.className = r.variable, r.id = r.variable, function () { var e = void 0, t = void 0, n = void 0; for (e = r.comparatorOp.split("|"), n = 0; n < e.length; n++)t = e[n], r.comparatorOp += "|@" + t; for (e = r.comparatorOp.split("|"), n = 0; n < e.length; n++)(t = e[n]).indexOf("!") >= 0 || "=" !== t && (r.comparatorOp += "|\\!" + t) }(), e.exports = r }, function (e, t, n) { "use strict"; var r = n(15).stateSelectorMatches, i = n(0), o = function (e, t) { for (var n = !0, r = 0; r < e[t.name].length; r++) { var o = e[t.name][r], a = o.operator, s = o.value, l = o.field, c = void 0, u = t.fieldValue(l); if (null != a && null != s) { var d = i.string(u) || i.number(u) ? "" + u : "", p = "" + s, f = !1; a.indexOf("@") >= 0 && (d = d.toLowerCase(), p = p.toLowerCase(), a = a.replace("@", ""), f = !0); var h = !1; a.indexOf("!") >= 0 && (a = a.replace("!", ""), h = !0), f && (s = p.toLowerCase(), u = d.toLowerCase()); var g = !1; switch (a) { case "*=": c = d.indexOf(p) >= 0; break; case "$=": c = d.indexOf(p, d.length - p.length) >= 0; break; case "^=": c = 0 === d.indexOf(p); break; case "=": c = u === s; break; case ">": g = !0, c = u > s; break; case ">=": g = !0, c = u >= s; break; case "<": g = !0, c = u < s; break; case "<=": g = !0, c = u <= s; break; default: c = !1 }!h || null == u && g || (c = !c) } else if (null != a) switch (a) { case "?": c = !!u; break; case "!": c = !u; break; case "^": c = void 0 === u } else c = void 0 !== u; if (!c) { n = !1; break } } return n }, a = function (e, t, n) { if (null != e) { var r = !1; if (!t) return !1; n = n(); for (var i = 0; i < n.length; i++)if (s(e, n[i])) { r = !0; break } return r } return !0 }, s = function (e, t) { if (e.groupOnly) return "*" === e.group || e.group === t.group(); if (null != e.group && "*" != e.group && e.group != t.group()) return !1; var n = t.cy(), i = void 0, s = !0; for (i = 0; i < e.colonSelectors.length; i++) { var l = e.colonSelectors[i]; if (!(s = r(l, t))) break } if (!s) return !1; var c = !0; for (i = 0; i < e.ids.length; i++) { var u = e.ids[i], d = t.id(); if (!(c = c && u == d)) break } if (!c) return !1; var p = !0; for (i = 0; i < e.classes.length; i++) { var f = e.classes[i]; if (!(p = p && t.hasClass(f))) break } if (!p) return !1; if (!o(e, { name: "data", fieldValue: function (e) { return t.data(e) } })) return !1; if (!o(e, { name: "meta", fieldValue: function (e) { return t[e]() } })) return !1; if (null != e.collection && !e.collection.hasElementWithId(t.id())) return !1; if (null != e.filter && t.collection().some(e.filter)) return !1; var h = n.hasCompoundNodes(), g = function () { return t.source() }, m = function () { return t.target() }; if (!a(e.parent, h, (function () { return t.parent() }))) return !1; if (!a(e.ancestor, h, (function () { return t.parents() }))) return !1; if (!a(e.child, h, (function () { return t.children() }))) return !1; if (!a(e.descendant, h, (function () { return t.descendants() }))) return !1; if (!a(e.source, !0, g)) return !1; if (!a(e.target, !0, m)) return !1; if (e.connectedNodes) { var v = e.connectedNodes[0], b = e.connectedNodes[1]; if (a(v, !0, g) && a(b, !0, m)); else if (!a(v, !0, m) || !a(b, !0, g)) return !1 } return !0 }; e.exports = { matches: function (e) { if (this.invalid()) return !1; for (var t = 0; t < this.length; t++) { var n = this[t]; if (s(n, e)) return !0 } return !1 }, filter: function (e) { var t = this, n = e.cy(); if (t.invalid()) return n.collection(); if (1 === t.length && 1 === t[0].length && 1 === t[0].ids.length) return e.getElementById(t[0].ids[0]).collection(); var r = function (e) { for (var n = 0; n < t.length; n++) { var r = t[n]; if (s(r, e)) return !0 } return !1 }; return null == t.text() && (r = function () { return !0 }), e.filter(r) } } }, function (e, t, n) { "use strict"; var r = n(8), i = { parent: function (e) { var t = []; if (1 === this.length) { var n = this[0]._private.parent; if (n) return n } for (var r = 0; r < this.length; r++) { var i = this[r]._private.parent; i && t.push(i) } return this.spawn(t, { unique: !0 }).filter(e) }, parents: function (e) { for (var t = [], n = this.parent(); n.nonempty();) { for (var r = 0; r < n.length; r++) { var i = n[r]; t.push(i) } n = n.parent() } return this.spawn(t, { unique: !0 }).filter(e) }, commonAncestors: function (e) { for (var t = void 0, n = 0; n < this.length; n++) { var r = this[n].parents(); t = (t = t || r).intersect(r) } return t.filter(e) }, orphans: function (e) { return this.stdFilter((function (e) { return e.isOrphan() })).filter(e) }, nonorphans: function (e) { return this.stdFilter((function (e) { return e.isChild() })).filter(e) }, children: function (e) { for (var t = [], n = 0; n < this.length; n++) { var r = this[n]; t = t.concat(r._private.children) } return this.spawn(t, { unique: !0 }).filter(e) }, siblings: function (e) { return this.parent().children().not(this).filter(e) }, isParent: function () { var e = this[0]; if (e) return e.isNode() && 0 !== e._private.children.length }, isChildless: function () { var e = this[0]; if (e) return e.isNode() && 0 === e._private.children.length }, isChild: function () { var e = this[0]; if (e) return e.isNode() && null != e._private.parent }, isOrphan: function () { var e = this[0]; if (e) return e.isNode() && null == e._private.parent }, descendants: function (e) { var t = []; return function e(n) { for (var r = 0; r < n.length; r++) { var i = n[r]; t.push(i), i.children().nonempty() && e(i.children()) } }(this.children()), this.spawn(t, { unique: !0 }).filter(e) } }; function o(e, t, n, i) { for (var o = [], a = new r, s = e.cy().hasCompoundNodes(), l = 0; l < e.length; l++) { var c = e[l]; n ? o.push(c) : s && i(o, a, c) } for (; o.length > 0;) { var u = o.shift(); t(u), a.add(u.id()), s && i(o, a, u) } return e } function a(e, t, n) { if (n.isParent()) for (var r = n._private.children, i = 0; i < r.length; i++) { var o = r[i]; t.has(o.id()) || e.push(o) } } function s(e, t, n) { if (n.isChild()) { var r = n._private.parent; t.has(r.id()) || e.push(r) } } function l(e, t, n) { s(e, t, n), a(e, t, n) } i.forEachDown = function (e) { var t = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1]; return o(this, e, t, a) }, i.forEachUp = function (e) { var t = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1]; return o(this, e, t, s) }, i.forEachUpAndDown = function (e) { var t = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1]; return o(this, e, t, l) }, i.ancestors = i.parents, e.exports = i }, function (e, t, n) { "use strict"; var r, i = n(4), o = void 0; (o = r = { data: i.data({ field: "data", bindingEvent: "data", allowBinding: !0, allowSetting: !0, settingEvent: "data", settingTriggersEvent: !0, triggerFnName: "trigger", allowGetting: !0, immutableKeys: { id: !0, source: !0, target: !0, parent: !0 }, updateStyle: !0 }), removeData: i.removeData({ field: "data", event: "data", triggerFnName: "trigger", triggerEvent: !0, immutableKeys: { id: !0, source: !0, target: !0, parent: !0 }, updateStyle: !0 }), scratch: i.data({ field: "scratch", bindingEvent: "scratch", allowBinding: !0, allowSetting: !0, settingEvent: "scratch", settingTriggersEvent: !0, triggerFnName: "trigger", allowGetting: !0, updateStyle: !0 }), removeScratch: i.removeData({ field: "scratch", event: "scratch", triggerFnName: "trigger", triggerEvent: !0, updateStyle: !0 }), rscratch: i.data({ field: "rscratch", allowBinding: !1, allowSetting: !0, settingTriggersEvent: !1, allowGetting: !0 }), removeRscratch: i.removeData({ field: "rscratch", triggerEvent: !1 }), id: function () { var e = this[0]; if (e) return e._private.data.id } }).attr = o.data, o.removeAttr = o.removeData, e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = {}; function o(e) { return function (t) { if (void 0 === t && (t = !0), 0 !== this.length && this.isNode() && !this.removed()) { for (var n = 0, r = this[0], i = r._private.edges, o = 0; o < i.length; o++) { var a = i[o]; !t && a.isLoop() || (n += e(r, a)) } return n } } } function a(e, t) { return function (n) { for (var r = void 0, i = this.nodes(), o = 0; o < i.length; o++) { var a = i[o][e](n); void 0 === a || void 0 !== r && !t(a, r) || (r = a) } return r } } r.extend(i, { degree: o((function (e, t) { return t.source().same(t.target()) ? 2 : 1 })), indegree: o((function (e, t) { return t.target().same(e) ? 1 : 0 })), outdegree: o((function (e, t) { return t.source().same(e) ? 1 : 0 })) }), r.extend(i, { minDegree: a("degree", (function (e, t) { return e < t })), maxDegree: a("degree", (function (e, t) { return e > t })), minIndegree: a("indegree", (function (e, t) { return e < t })), maxIndegree: a("indegree", (function (e, t) { return e > t })), minOutdegree: a("outdegree", (function (e, t) { return e < t })), maxOutdegree: a("outdegree", (function (e, t) { return e > t })) }), r.extend(i, { totalDegree: function (e) { for (var t = 0, n = this.nodes(), r = 0; r < n.length; r++)t += n[r].degree(e); return t } }), e.exports = i }, function (e, t, n) { "use strict"; var r = n(1), i = n(57), o = n(58), a = n(59), s = n(60); e.exports = r.assign({}, i, o, a, s) }, function (e, t, n) { "use strict"; var r, i = n(4), o = n(0), a = n(2), s = void 0, l = function (e, t) { for (var n = 0; n < e.length; n++) { var r = e[n]; if (r.isParent() && !r.locked()) { var i = r._private.position, o = { x: t.x - i.x, y: t.y - i.y }; e.children().shift(o) } } }; (s = r = { position: i.data({ field: "position", bindingEvent: "position", allowBinding: !0, allowSetting: !0, settingEvent: "position", settingTriggersEvent: !0, triggerFnName: "emitAndNotify", allowGetting: !0, validKeys: ["x", "y"], beforeGet: function (e) { e.updateCompoundBounds() }, beforeSet: l, onSet: function (e) { e.dirtyCompoundBoundsCache() }, canSet: function (e) { return !e.locked() } }), silentPosition: i.data({ field: "position", bindingEvent: "position", allowBinding: !1, allowSetting: !0, settingEvent: "position", settingTriggersEvent: !1, triggerFnName: "trigger", allowGetting: !1, validKeys: ["x", "y"], beforeSet: l, onSet: function (e) { e.dirtyCompoundBoundsCache() }, canSet: function (e) { return !e.locked() } }), positions: function (e, t) { if (o.plainObject(e)) t ? this.silentPosition(e) : this.position(e); else if (o.fn(e)) { var n = e, r = this.cy(); r.startBatch(); for (var i = 0; i < this.length; i++) { var a, s = this[i]; (a = n(s, i)) && (t ? s.silentPosition(a) : s.position(a)) } r.endBatch() } return this }, silentPositions: function (e) { return this.positions(e, !0) }, shift: function (e, t) { var n = void 0; if (o.plainObject(e) ? n = e : o.string(e) && o.number(t) && ((n = { x: 0, y: 0 })[e] = t), null != n) for (var r = 0; r < this.length; r++) { var i = this[r], a = i.position(); i.position({ x: a.x + n.x, y: a.y + n.y }) } return this }, renderedPosition: function (e, t) { var n = this[0], r = this.cy(), i = r.zoom(), s = r.pan(), l = o.plainObject(e) ? e : void 0, c = void 0 !== l || void 0 !== t && o.string(e); if (n && n.isNode()) { if (!c) { var u = n.position(); return l = a.modelToRenderedPosition(u, i, s), void 0 === e ? l : l[e] } for (var d = 0; d < this.length; d++) { var p = this[d]; void 0 !== t ? p.position(e, (t - s[e]) / i) : void 0 !== l && p.position(a.renderedToModelPosition(l, i, s)) } } else if (!c) return; return this }, relativePosition: function (e, t) { var n = this[0], r = this.cy(), i = o.plainObject(e) ? e : void 0, a = void 0 !== i || void 0 !== t && o.string(e), s = r.hasCompoundNodes(); if (n && n.isNode()) { if (!a) { var l = n.position(), c = s ? n.parent() : null, u = c && c.length > 0, d = u; u && (c = c[0]); var p = d ? c.position() : { x: 0, y: 0 }; return i = { x: l.x - p.x, y: l.y - p.y }, void 0 === e ? i : i[e] } for (var f = 0; f < this.length; f++) { var h = this[f], g = s ? h.parent() : null, m = g && g.length > 0, v = m; m && (g = g[0]); var b = v ? g.position() : { x: 0, y: 0 }; void 0 !== t ? h.position(e, t + b[e]) : void 0 !== i && h.position({ x: i.x + b.x, y: i.y + b.y }) } } else if (!a) return; return this } }).modelPosition = s.point = s.position, s.modelPositions = s.points = s.positions, s.renderedPoint = s.renderedPosition, s.relativePoint = s.relativePosition, e.exports = r }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(2), a = void 0, s = void 0; a = s = {}, s.renderedBoundingBox = function (e) { var t = this.boundingBox(e), n = this.cy(), r = n.zoom(), i = n.pan(), o = t.x1 * r + i.x, a = t.x2 * r + i.x, s = t.y1 * r + i.y, l = t.y2 * r + i.y; return { x1: o, x2: a, y1: s, y2: l, w: a - o, h: l - s } }, s.dirtyCompoundBoundsCache = function () { var e = this.cy(); return e.styleEnabled() && e.hasCompoundNodes() ? (this.forEachUp((function (e) { e._private.compoundBoundsClean = !1, e.isParent() && e.emit("bounds") })), this) : this }, s.updateCompoundBounds = function () { var e = this.cy(); if (!e.styleEnabled() || !e.hasCompoundNodes()) return this; if (e.batching()) return this; var t = []; function n(e) { if (e.isParent()) { var n = e._private, r = e.children(), i = "include" === e.pstyle("compound-sizing-wrt-labels").value, o = { width: { val: e.pstyle("min-width").pfValue, left: e.pstyle("min-width-bias-left"), right: e.pstyle("min-width-bias-right") }, height: { val: e.pstyle("min-height").pfValue, top: e.pstyle("min-height-bias-top"), bottom: e.pstyle("min-height-bias-bottom") } }, a = r.boundingBox({ includeLabels: i, includeOverlays: !1, useCache: !1 }), s = n.position; 0 !== a.w && 0 !== a.h || ((a = { w: e.pstyle("width").pfValue, h: e.pstyle("height").pfValue }).x1 = s.x - a.w / 2, a.x2 = s.x + a.w / 2, a.y1 = s.y - a.h / 2, a.y2 = s.y + a.h / 2); var l = o.width.left.value; "px" === o.width.left.units && o.width.val > 0 && (l = 100 * l / o.width.val); var c = o.width.right.value; "px" === o.width.right.units && o.width.val > 0 && (c = 100 * c / o.width.val); var u = o.height.top.value; "px" === o.height.top.units && o.height.val > 0 && (u = 100 * u / o.height.val); var d = o.height.bottom.value; "px" === o.height.bottom.units && o.height.val > 0 && (d = 100 * d / o.height.val); var p = b(o.width.val - a.w, l, c), f = p.biasDiff, h = p.biasComplementDiff, g = b(o.height.val - a.h, u, d), m = g.biasDiff, v = g.biasComplementDiff; n.autoPadding = function (e, t, n, r) { if ("%" !== n.units) return "px" === n.units ? n.pfValue : 0; switch (r) { case "width": return e > 0 ? n.pfValue * e : 0; case "height": return t > 0 ? n.pfValue * t : 0; case "average": return e > 0 && t > 0 ? n.pfValue * (e + t) / 2 : 0; case "min": return e > 0 && t > 0 ? e > t ? n.pfValue * t : n.pfValue * e : 0; case "max": return e > 0 && t > 0 ? e > t ? n.pfValue * e : n.pfValue * t : 0; default: return 0 } }(a.w, a.h, e.pstyle("padding"), e.pstyle("padding-relative-to").value), n.autoWidth = Math.max(a.w, o.width.val), s.x = (-f + a.x1 + a.x2 + h) / 2, n.autoHeight = Math.max(a.h, o.height.val), s.y = (-m + a.y1 + a.y2 + v) / 2, t.push(e) } function b(e, t, n) { var r = 0, i = 0, o = t + n; return e > 0 && o > 0 && (r = t / o * e, i = n / o * e), { biasDiff: r, biasComplementDiff: i } } } for (var r = 0; r < this.length; r++) { var i = this[r], o = i._private; o.compoundBoundsClean || (n(i), e._private.batchingStyle || (o.compoundBoundsClean = !0)) } return this }; var l = function (e) { return e === 1 / 0 || e === -1 / 0 ? 0 : e }, c = function (e, t, n, r, i) { r - t != 0 && i - n != 0 && null != t && null != n && null != r && null != i && (e.x1 = t < e.x1 ? t : e.x1, e.x2 = r > e.x2 ? r : e.x2, e.y1 = n < e.y1 ? n : e.y1, e.y2 = i > e.y2 ? i : e.y2) }, u = function (e, t, n) { return i.getPrefixedProperty(e, t, n) }, d = function (e, t, n) { if (!t.cy().headless()) { var r = t._private.rstyle, i = r.arrowWidth / 2, o = void 0, a = void 0; "none" !== t.pstyle(n + "-arrow-shape").value && ("source" === n ? (o = r.srcX, a = r.srcY) : "target" === n ? (o = r.tgtX, a = r.tgtY) : (o = r.midX, a = r.midY), c(e, o - i, a - i, o + i, a + i)) } }, p = function (e, t, n) { if (!t.cy().headless()) { var r = void 0; r = n ? n + "-" : ""; var i = t._private, o = i.rstyle; if (t.pstyle(r + "label").strValue) { var a = t.pstyle("text-halign"), s = t.pstyle("text-valign"), l = u(o, "labelWidth", n), d = u(o, "labelHeight", n), p = u(o, "labelX", n), f = u(o, "labelY", n), h = t.pstyle(r + "text-margin-x").pfValue, g = t.pstyle(r + "text-margin-y").pfValue, m = t.isEdge(), v = t.pstyle(r + "text-rotation"), b = t.pstyle("text-outline-width").pfValue, y = t.pstyle("text-border-width").pfValue / 2, x = t.pstyle("text-background-padding").pfValue, w = d + 2 * x, k = l + 2 * x, A = k / 2, E = w / 2, S = void 0, $ = void 0, C = void 0, _ = void 0; if (m) S = p - A, $ = p + A, C = f - E, _ = f + E; else { switch (a.value) { case "left": S = p - k, $ = p; break; case "center": S = p - A, $ = p + A; break; case "right": S = p, $ = p + k }switch (s.value) { case "top": C = f - w, _ = f; break; case "center": C = f - E, _ = f + E; break; case "bottom": C = f, _ = f + w } } var O = m && "autorotate" === v.strValue, T = null != v.pfValue && 0 !== v.pfValue; if (O || T) { var j = O ? u(i.rstyle, "labelAngle", n) : v.pfValue, P = Math.cos(j), D = Math.sin(j), R = function (e, t) { return { x: (e -= p) * P - (t -= f) * D + p, y: e * D + t * P + f } }, I = R(S, C), N = R(S, _), M = R($, C), z = R($, _); S = Math.min(I.x, N.x, M.x, z.x), $ = Math.max(I.x, N.x, M.x, z.x), C = Math.min(I.y, N.y, M.y, z.y), _ = Math.max(I.y, N.y, M.y, z.y) } S += h - Math.max(b, y), $ += h + Math.max(b, y), C += g - Math.max(b, y), _ += g + Math.max(b, y), c(e, S, C, $, _) } return e } }, f = function (e) { return e ? "t" : "f" }, h = function (e) { var t = ""; return t += f(e.incudeNodes), t += f(e.includeEdges), t += f(e.includeLabels), t += f(e.includeOverlays) }, g = function (e, t) { var n = e._private, r = void 0, i = e.cy().headless(), a = t === m ? v : h(t); return t.useCache && !i && n.bbCache && n.bbCache[a] ? r = n.bbCache[a] : (r = function (e, t) { var n = e._private.cy, r = n.styleEnabled(), i = n.headless(), a = { x1: 1 / 0, y1: 1 / 0, x2: -1 / 0, y2: -1 / 0 }, s = e._private, u = r ? e.pstyle("display").value : "element", f = e.isNode(), h = e.isEdge(), g = void 0, m = void 0, v = void 0, b = void 0, y = void 0, x = void 0, w = "none" !== u; if (w) { var k = 0; r && t.includeOverlays && 0 !== e.pstyle("overlay-opacity").value && (k = e.pstyle("overlay-padding").value); var A = 0; if (r && (A = e.pstyle("width").pfValue / 2), f && t.includeNodes) { var E = e.position(); y = E.x, x = E.y; var S = e.outerWidth() / 2, $ = e.outerHeight() / 2; c(a, g = y - S - k, v = x - $ - k, m = y + S + k, b = x + $ + k) } else if (h && t.includeEdges) { var C = s.rstyle || {}; if (r && !i && (g = Math.min(C.srcX, C.midX, C.tgtX), m = Math.max(C.srcX, C.midX, C.tgtX), v = Math.min(C.srcY, C.midY, C.tgtY), b = Math.max(C.srcY, C.midY, C.tgtY), c(a, g -= A, v -= A, m += A, b += A)), r && !i && "haystack" === e.pstyle("curve-style").strValue) { var _ = C.haystackPts || []; if (g = _[0].x, v = _[0].y, g > (m = _[1].x)) { var O = g; g = m, m = O } if (v > (b = _[1].y)) { var T = v; v = b, b = T } c(a, g - A, v - A, m + A, b + A) } else { for (var j = C.bezierPts || C.linePts || [], P = 0; P < j.length; P++) { var D = j[P]; g = D.x - A, m = D.x + A, v = D.y - A, b = D.y + A, c(a, g, v, m, b) } if (0 === j.length) { var R = e.source().position(), I = e.target().position(); if ((g = R.x) > (m = I.x)) { var N = g; g = m, m = N } if ((v = R.y) > (b = I.y)) { var M = v; v = b, b = M } c(a, g -= A, v -= A, m += A, b += A) } } } if (r && t.includeEdges && h && (d(a, e, "mid-source"), d(a, e, "mid-target"), d(a, e, "source"), d(a, e, "target")), r && "yes" === e.pstyle("ghost").value) { var z = e.pstyle("ghost-offset-x").pfValue, L = e.pstyle("ghost-offset-y").pfValue; c(a, a.x1 + z, a.y1 + L, a.x2 + z, a.y2 + L) } r && (g = a.x1, m = a.x2, v = a.y1, b = a.y2, c(a, g - k, v - k, m + k, b + k)), r && t.includeLabels && (p(a, e, null), h && (p(a, e, "source"), p(a, e, "target"))) } return a.x1 = l(a.x1), a.y1 = l(a.y1), a.x2 = l(a.x2), a.y2 = l(a.y2), a.w = l(a.x2 - a.x1), a.h = l(a.y2 - a.y1), a.w > 0 && a.h > 0 && w && o.expandBoundingBox(a, 1), a }(e, t), i || (n.bbCache = n.bbCache || {}, n.bbCache[a] = r)), r }, m = { includeNodes: !0, includeEdges: !0, includeLabels: !0, includeOverlays: !0, useCache: !0 }, v = h(m); function b(e) { return { includeNodes: i.default(e.includeNodes, m.includeNodes), includeEdges: i.default(e.includeEdges, m.includeEdges), includeLabels: i.default(e.includeLabels, m.includeLabels), includeOverlays: i.default(e.includeOverlays, m.includeOverlays), useCache: i.default(e.useCache, m.useCache) } } s.boundingBox = function (e) { if (1 === this.length && this[0]._private.bbCache && (void 0 === e || void 0 === e.useCache || !0 === e.useCache)) return e = void 0 === e ? m : b(e), g(this[0], e); var t = { x1: 1 / 0, y1: 1 / 0, x2: -1 / 0, y2: -1 / 0 }, n = b(e = e || i.staticEmptyObject()), r = this.cy().styleEnabled(); r && this.recalculateRenderedStyle(n.useCache), this.updateCompoundBounds(); for (var o, a, s = {}, u = 0; u < this.length; u++) { var d = this[u]; if (r && d.isEdge() && "bezier" === d.pstyle("curve-style").strValue && !s[d.id()]) { for (var p = d.parallelEdges(), f = 0; f < p.length; f++)s[p[f].id()] = !0; p.recalculateRenderedStyle(n.useCache) } o = t, a = g(d, n), c(o, a.x1, a.y1, a.x2, a.y2) } return t.x1 = l(t.x1), t.y1 = l(t.y1), t.x2 = l(t.x2), t.y2 = l(t.y2), t.w = l(t.x2 - t.x1), t.h = l(t.y2 - t.y1), t }, s.boundingBoxAt = function (e) { var t = this.nodes(); if (r.plainObject(e)) { var n = e; e = function () { return n } } for (var i = 0; i < t.length; i++) { var o = t[i], a = o._private, s = a.position, l = e.call(o, o, i); a.bbAtOldPos = { x: s.x, y: s.y }, l && (s.x = l.x, s.y = l.y) } this.emit("dirty"), t.dirtyCompoundBoundsCache().updateCompoundBounds(); for (var c = this.boundingBox({ useCache: !1 }), u = 0; u < t.length; u++) { var d = t[u], p = d._private, f = d._private.position, h = p.bbAtOldPos; f.x = h.x, f.y = h.y } return t.dirtyCompoundBoundsCache(), this.emit("dirty"), c }, a.boundingbox = a.boundingBox, a.renderedBoundingbox = a.renderedBoundingBox, e.exports = s }, function (e, t, n) { "use strict"; var r = n(1), i = void 0, o = void 0; i = o = {}; var a = function (e) { e.uppercaseName = r.capitalize(e.name), e.autoName = "auto" + e.uppercaseName, e.labelName = "label" + e.uppercaseName, e.outerName = "outer" + e.uppercaseName, e.uppercaseOuterName = r.capitalize(e.outerName), i[e.name] = function () { var t = this[0], n = t._private, r = n.cy._private.styleEnabled; if (t) { if (!r) return 1; if (t.isParent()) return t.updateCompoundBounds(), n[e.autoName] || 0; var i = t.pstyle(e.name); switch (i.strValue) { case "label": return t.recalculateRenderedStyle(), n.rstyle[e.labelName] || 0; default: return i.pfValue } } }, i["outer" + e.uppercaseName] = function () { var t = this[0], n = t._private.cy._private.styleEnabled; if (t) return n ? t[e.name]() + t.pstyle("border-width").pfValue + 2 * t.padding() : 1 }, i["rendered" + e.uppercaseName] = function () { var t = this[0]; if (t) return t[e.name]() * this.cy().zoom() }, i["rendered" + e.uppercaseOuterName] = function () { var t = this[0]; if (t) return t[e.outerName]() * this.cy().zoom() } }; a({ name: "width" }), a({ name: "height" }), o.padding = function () { var e = this[0], t = e._private; return e.isParent() ? (e.updateCompoundBounds(), void 0 !== t.autoPadding ? t.autoPadding : e.pstyle("padding").pfValue) : e.pstyle("padding").pfValue }, e.exports = o }, function (e, t, n) { "use strict"; var r = function (e, t) { if (e.isEdge()) return t(e.renderer()) }; e.exports = { controlPoints: function () { var e = this; return r(this, (function (t) { return t.getControlPoints(e) })) }, segmentPoints: function () { var e = this; return r(this, (function (t) { return t.getSegmentPoints(e) })) }, sourceEndpoint: function () { var e = this; return r(this, (function (t) { return t.getSourceEndpoint(e) })) }, targetEndpoint: function () { var e = this; return r(this, (function (t) { return t.getTargetEndpoint(e) })) }, midpoint: function () { var e = this; return r(this, (function (t) { return t.getEdgeMidpoint(e) })) } } }, function (e, t, n) { "use strict"; var r = n(11), i = n(4), o = n(0), a = n(1), s = n(6), l = { qualifierCompare: function (e, t) { return null == e || null == t ? null == e && null == t : e.sameText(t) }, eventMatches: function (e, t, n) { var r = t.qualifier; return null == r || e !== n.target && o.element(n.target) && r.matches(n.target) }, eventFields: function (e) { return { cy: e.cy(), target: e } }, callbackContext: function (e, t, n) { return null != t.qualifier ? n.target : e }, beforeEmit: function (e, t) { t.conf && t.conf.once && t.conf.onceCollection.removeListener(t.event, t.qualifier, t.callback) }, bubble: function () { return !0 }, parent: function (e) { return e.isChild() ? e.parent() : e.cy() } }, c = function (e) { return o.string(e) ? new s(e) : e }, u = { createEmitter: function () { for (var e = 0; e < this.length; e++) { var t = this[e], n = t._private; n.emitter || (n.emitter = new r(a.assign({ context: t }, l))) } return this }, emitter: function () { return this._private.emitter }, on: function (e, t, n) { for (var r = 0; r < this.length; r++)this[r].emitter().on(e, c(t), n); return this }, removeListener: function (e, t, n) { for (var r = 0; r < this.length; r++)this[r].emitter().removeListener(e, c(t), n); return this }, one: function (e, t, n) { for (var r = 0; r < this.length; r++)this[r].emitter().one(e, c(t), n); return this }, once: function (e, t, n) { for (var r = 0; r < this.length; r++)this[r].emitter().on(e, c(t), n, { once: !0, onceCollection: this }) }, emit: function (e, t) { for (var n = 0; n < this.length; n++)this[n].emitter().emit(e, t); return this }, emitAndNotify: function (e, t) { if (0 !== this.length) return this.cy().notify({ type: e, eles: this }), this.emit(e, t), this } }; i.eventAliasesOn(u), e.exports = u }, function (e, t, n) { "use strict"; var r = n(0), i = n(6), o = { nodes: function (e) { return this.filter((function (e) { return e.isNode() })).filter(e) }, edges: function (e) { return this.filter((function (e) { return e.isEdge() })).filter(e) }, filter: function (e, t) { if (void 0 === e) return this; if (r.string(e) || r.elementOrCollection(e)) return new i(e).filter(this); if (r.fn(e)) { for (var n = this.spawn(), o = 0; o < this.length; o++) { var a = this[o]; (t ? e.apply(t, [a, o, this]) : e(a, o, this)) && n.merge(a) } return n } return this.spawn() }, not: function (e) { if (e) { r.string(e) && (e = this.filter(e)); for (var t = [], n = e._private.map, i = 0; i < this.length; i++) { var o = this[i]; n.has(o.id()) || t.push(o) } return this.spawn(t) } return this }, absoluteComplement: function () { return this.cy().mutableElements().not(this) }, intersect: function (e) { if (r.string(e)) { var t = e; return this.filter(t) } for (var n = [], i = e, o = this.length < e.length, a = o ? i._private.map : this._private.map, s = o ? this : i, l = 0; l < s.length; l++) { var c = s[l]._private.data.id, u = a.get(c); u && n.push(u.ele) } return this.spawn(n) }, xor: function (e) { var t = this._private.cy; r.string(e) && (e = t.$(e)); var n = [], i = e, o = function (e, t) { for (var r = 0; r < e.length; r++) { var i = e[r], o = i._private.data.id; t.hasElementWithId(o) || n.push(i) } }; return o(this, i), o(i, this), this.spawn(n) }, diff: function (e) { var t = this._private.cy; r.string(e) && (e = t.$(e)); var n = [], i = [], o = [], a = e, s = function (e, t, n) { for (var r = 0; r < e.length; r++) { var i = e[r], a = i._private.data.id; t.hasElementWithId(a) ? o.push(i) : n.push(i) } }; return s(this, a, n), s(a, this, i), { left: this.spawn(n, { unique: !0 }), right: this.spawn(i, { unique: !0 }), both: this.spawn(o, { unique: !0 }) } }, add: function (e) { var t = this._private.cy; if (!e) return this; if (r.string(e)) { var n = e; e = t.mutableElements().filter(n) } for (var i = [], o = 0; o < this.length; o++)i.push(this[o]); for (var a = this._private.map, s = 0; s < e.length; s++) { var l = !a.has(e[s].id()); l && i.push(e[s]) } return this.spawn(i) }, merge: function (e) { var t = this._private, n = t.cy; if (!e) return this; if (e && r.string(e)) { var i = e; e = n.mutableElements().filter(i) } for (var o = t.map, a = 0; a < e.length; a++) { var s = e[a], l = s._private.data.id; if (o.has(l)) { var c = o.get(l).index; this[c] = s, o.set(l, { ele: s, index: c }) } else { var u = this.length++; this[u] = s, o.set(l, { ele: s, index: u }) } } return this }, unmergeOne: function (e) { e = e[0]; var t = this._private, n = e._private.data.id, r = t.map, i = r.get(n); if (!i) return this; var o = i.index; this[o] = void 0, r.delete(n); var a = o === this.length - 1; if (this.length > 1 && !a) { var s = this.length - 1, l = this[s], c = l._private.data.id; this[s] = void 0, this[o] = l, r.set(c, { ele: l, index: o }) } return this.length--, this }, unmerge: function (e) { var t = this._private.cy; if (!e) return this; if (e && r.string(e)) { var n = e; e = t.mutableElements().filter(n) } for (var i = 0; i < e.length; i++)this.unmergeOne(e[i]); return this }, map: function (e, t) { for (var n = [], r = 0; r < this.length; r++) { var i = this[r], o = t ? e.apply(t, [i, r, this]) : e(i, r, this); n.push(o) } return n }, reduce: function (e, t) { for (var n = t, r = 0; r < this.length; r++)n = e(n, this[r], r, this); return n }, max: function (e, t) { for (var n = -1 / 0, r = void 0, i = 0; i < this.length; i++) { var o = this[i], a = t ? e.apply(t, [o, i, this]) : e(o, i, this); a > n && (n = a, r = o) } return { value: n, ele: r } }, min: function (e, t) { for (var n = 1 / 0, r = void 0, i = 0; i < this.length; i++) { var o = this[i], a = t ? e.apply(t, [o, i, this]) : e(o, i, this); a < n && (n = a, r = o) } return { value: n, ele: r } } }, a = o; a.u = a["|"] = a["+"] = a.union = a.or = a.add, a["\\"] = a["!"] = a["-"] = a.difference = a.relativeComplement = a.subtract = a.not, a.n = a["&"] = a["."] = a.and = a.intersection = a.intersect, a["^"] = a["(+)"] = a["(-)"] = a.symmetricDifference = a.symdiff = a.xor, a.fnFilter = a.filterFn = a.stdFilter = a.filter, a.complement = a.abscomp = a.absoluteComplement, e.exports = o }, function (e, t, n) { "use strict"; e.exports = { isNode: function () { return "nodes" === this.group() }, isEdge: function () { return "edges" === this.group() }, isLoop: function () { return this.isEdge() && this.source().id() === this.target().id() }, isSimple: function () { return this.isEdge() && this.source().id() !== this.target().id() }, group: function () { var e = this[0]; if (e) return e._private.group } } }, function (e, t, n) { "use strict"; var r = n(0), i = n(17), o = n(1), a = { forEach: function (e, t) { if (r.fn(e)) for (var n = 0; n < this.length; n++) { var i = this[n]; if (!1 === (t ? e.apply(t, [i, n, this]) : e(i, n, this))) break } return this }, toArray: function () { for (var e = [], t = 0; t < this.length; t++)e.push(this[t]); return e }, slice: function (e, t) { var n = [], r = this.length; null == t && (t = r), null == e && (e = 0), e < 0 && (e = r + e), t < 0 && (t = r + t); for (var i = e; i >= 0 && i < t && i < r; i++)n.push(this[i]); return this.spawn(n) }, size: function () { return this.length }, eq: function (e) { return this[e] || this.spawn() }, first: function () { return this[0] || this.spawn() }, last: function () { return this[this.length - 1] || this.spawn() }, empty: function () { return 0 === this.length }, nonempty: function () { return !this.empty() }, sort: function (e) { if (!r.fn(e)) return this; var t = this.toArray().sort(e); return this.spawn(t) }, sortByZIndex: function () { return this.sort(i) }, zDepth: function () { var e = this[0]; if (e) { var t = e._private; if ("nodes" === t.group) { var n = t.data.parent ? e.parents().size() : 0; return e.isParent() ? n : o.MAX_INT - 1 } var r = t.source, i = t.target, a = r.zDepth(), s = i.zDepth(); return Math.max(a, s, 0) } } }; a.each = a.forEach, e.exports = a }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(5), a = n(2), s = { layoutDimensions: function (e) { if ((e = i.assign({ nodeDimensionsIncludeLabels: !0 }, e)).nodeDimensionsIncludeLabels) { var t = this.boundingBox(); return { w: t.w, h: t.h } } return { w: this.outerWidth(), h: this.outerHeight() } }, layoutPositions: function (e, t, n) { var s = this.nodes(), l = this.cy(), c = t.eles, u = function (e, t) { return e.id() + "$" + t }, d = i.memoize(n, u); e.emit({ type: "layoutstart", layout: e }), e.animations = []; var p = t.spacingFactor && 1 !== t.spacingFactor, f = function () { if (!p) return null; for (var e = a.makeBoundingBox(), t = 0; t < s.length; t++) { var n = s[t], r = d(n, t); a.expandBoundingBoxByPoint(e, r.x, r.y) } return e }(), h = i.memoize((function (e, n) { var i = d(e, n), o = e.position(); return r.number(o.x) && r.number(o.y) || e.silentPosition({ x: 0, y: 0 }), p && (i = function (e, t, n) { var r = t.x1 + t.w / 2, i = t.y1 + t.h / 2; return { x: r + (n.x - r) * e, y: i + (n.y - i) * e } }(Math.abs(t.spacingFactor), f, i)), null != t.transform && (i = t.transform(e, i)), i }), u); if (t.animate) { for (var g = 0; g < s.length; g++) { var m = s[g], v = h(m, g); if (null == t.animateFilter || t.animateFilter(m, g)) { var b = m.animation({ position: v, duration: t.animationDuration, easing: t.animationEasing }); e.animations.push(b), b.play() } else m.position(v) } if (t.fit) { var y = l.animation({ fit: { boundingBox: c.boundingBoxAt(h), padding: t.padding }, duration: t.animationDuration, easing: t.animationEasing }); e.animations.push(y), y.play() } else if (void 0 !== t.zoom && void 0 !== t.pan) { var x = l.animation({ zoom: t.zoom, pan: t.pan, duration: t.animationDuration, easing: t.animationEasing }); e.animations.push(x), x.play() } e.one("layoutready", t.ready), e.emit({ type: "layoutready", layout: e }), o.all(e.animations.map((function (e) { return e.promise() }))).then((function () { e.one("layoutstop", t.stop), e.emit({ type: "layoutstop", layout: e }) })) } else s.positions(h), t.fit && l.fit(t.eles, t.padding), null != t.zoom && l.zoom(t.zoom), t.pan && l.pan(t.pan), e.one("layoutready", t.ready), e.emit({ type: "layoutready", layout: e }), e.one("layoutstop", t.stop), e.emit({ type: "layoutstop", layout: e }); return this }, layout: function (e) { return this.cy().makeLayout(i.extend({}, e, { eles: this })) } }; s.createLayout = s.makeLayout = s.layout, e.exports = s }, function (e, t, n) { "use strict"; var r = n(0); function i(e, t, n) { var r, i = n._private, o = i.styleCache = i.styleCache || {}; return null != (r = o[e]) ? r : r = o[e] = t(n) } function o(e, t) { return function (n) { return i(e, t, n) } } function a(e, t) { var n = function (e) { return t.call(e) }; return function () { var t = this[0]; if (t) return i(e, n, t) } } var s = { recalculateRenderedStyle: function (e) { var t = this.cy(), n = t.renderer(), r = t.styleEnabled(); return n && r && n.recalculateRenderedStyle(this, e), this }, dirtyStyleCache: function () { var e = this.cy(), t = function (e) { return e._private.styleCache = {} }; if (e.hasCompoundNodes()) { var n = void 0; (n = this.spawnSelf().merge(this.descendants()).merge(this.parents())).merge(n.connectedEdges()), n.forEach(t) } else this.forEach((function (e) { t(e), e.connectedEdges().forEach(t) })); return this }, updateStyle: function (e) { var t = this._private.cy; if (!t.styleEnabled()) return this; if (t._private.batchingStyle) return t._private.batchStyleEles.merge(this), this; var n = t.hasCompoundNodes(), r = t.style(), i = this; e = !(!e && void 0 !== e), n && (i = this.spawnSelf().merge(this.descendants()).merge(this.parents())); var o = r.apply(i); return o.dirtyStyleCache(), o.dirtyCompoundBoundsCache(), e ? o.emitAndNotify("style") : o.emit("style"), this }, updateMappers: function (e) { var t = this._private.cy, n = t.style(); if (e = !(!e && void 0 !== e), !t.styleEnabled()) return this; var r = n.updateMappers(this); return r.dirtyStyleCache(), r.dirtyCompoundBoundsCache(), e ? r.emitAndNotify("style") : r.emit("style"), this }, parsedStyle: function (e) { var t = this[0], n = t.cy(); if (n.styleEnabled()) return t ? t._private.style[e] || n.style().getDefaultProperty(e) : void 0 }, numericStyle: function (e) { var t = this[0]; if (t.cy().styleEnabled() && t) { var n = t.pstyle(e); return void 0 !== n.pfValue ? n.pfValue : n.value } }, numericStyleUnits: function (e) { var t = this[0]; if (t.cy().styleEnabled()) return t ? t.pstyle(e).units : void 0 }, renderedStyle: function (e) { var t = this.cy(); if (!t.styleEnabled()) return this; var n = this[0]; return n ? t.style().getRenderedStyle(n, e) : void 0 }, style: function (e, t) { var n = this.cy(); if (!n.styleEnabled()) return this; var i = n.style(); if (r.plainObject(e)) { var o = e; i.applyBypass(this, o, !1), this.dirtyStyleCache(), this.dirtyCompoundBoundsCache(), this.emitAndNotify("style") } else if (r.string(e)) { if (void 0 === t) { var a = this[0]; return a ? i.getStylePropertyValue(a, e) : void 0 } i.applyBypass(this, e, t, !1), this.dirtyStyleCache(), this.dirtyCompoundBoundsCache(), this.emitAndNotify("style") } else if (void 0 === e) { var s = this[0]; return s ? i.getRawStyle(s) : void 0 } return this }, removeStyle: function (e) { var t = this.cy(); if (!t.styleEnabled()) return this; var n = t.style(); if (void 0 === e) for (var r = 0; r < this.length; r++) { var i = this[r]; n.removeAllBypasses(i, !1) } else { e = e.split(/\s+/); for (var o = 0; o < this.length; o++) { var a = this[o]; n.removeBypasses(a, e, !1) } } return this.dirtyStyleCache(), this.dirtyCompoundBoundsCache(), this.emitAndNotify("style"), this }, show: function () { return this.css("display", "element"), this }, hide: function () { return this.css("display", "none"), this }, effectiveOpacity: function () { var e = this.cy(); if (!e.styleEnabled()) return 1; var t = e.hasCompoundNodes(), n = this[0]; if (n) { var r = n._private, i = n.pstyle("opacity").value; if (!t) return i; var o = r.data.parent ? n.parents() : null; if (o) for (var a = 0; a < o.length; a++)i *= o[a].pstyle("opacity").value; return i } }, transparent: function () { if (!this.cy().styleEnabled()) return !1; var e = this[0], t = e.cy().hasCompoundNodes(); return e ? t ? 0 === e.effectiveOpacity() : 0 === e.pstyle("opacity").value : void 0 }, backgrounding: function () { return !!this.cy().styleEnabled() && !!this[0]._private.backgrounding } }; function l(e, t) { var n = e._private.data.parent ? e.parents() : null; if (n) for (var r = 0; r < n.length; r++)if (!t(n[r])) return !1; return !0 } function c(e) { var t = e.ok, n = e.edgeOkViaNode || e.ok, r = e.parentOk || e.ok; return function () { var e = this.cy(); if (!e.styleEnabled()) return !0; var i = this[0], o = e.hasCompoundNodes(); if (i) { var a = i._private; if (!t(i)) return !1; if (i.isNode()) return !o || l(i, r); var s = a.source, c = a.target; return n(s) && (!o || l(s, n)) && (s === c || n(c) && (!o || l(c, n))) } } } var u = o("eleTakesUpSpace", (function (e) { return "element" === e.pstyle("display").value && 0 !== e.width() && (!e.isNode() || 0 !== e.height()) })); s.takesUpSpace = a("takesUpSpace", c({ ok: u })); var d = o("eleInteractive", (function (e) { return "yes" === e.pstyle("events").value && "visible" === e.pstyle("visibility").value && u(e) })), p = o("parentInteractive", (function (e) { return "visible" === e.pstyle("visibility").value && u(e) })); s.interactive = a("interactive", c({ ok: d, parentOk: p, edgeOkViaNode: u })), s.noninteractive = function () { var e = this[0]; if (e) return !e.interactive() }; var f = o("eleVisible", (function (e) { return "visible" === e.pstyle("visibility").value && 0 !== e.pstyle("opacity").pfValue && u(e) })), h = u; s.visible = a("visible", c({ ok: f, edgeOkViaNode: h })), s.hidden = function () { var e = this[0]; if (e) return !e.visible() }, s.bypass = s.css = s.style, s.renderedCss = s.renderedStyle, s.removeBypass = s.removeCss = s.removeStyle, s.pstyle = s.parsedStyle, e.exports = s }, function (e, t, n) { "use strict"; var r = {}; function i(e) { return function () { var t = arguments, n = []; if (2 === t.length) { var r = t[0], i = t[1]; this.on(e.event, r, i) } else if (1 === t.length) { var o = t[0]; this.on(e.event, o) } else if (0 === t.length) { for (var a = 0; a < this.length; a++) { var s = this[a], l = !e.ableField || s._private[e.ableField], c = s._private[e.field] != e.value; if (e.overrideAble) { var u = e.overrideAble(s); if (void 0 !== u && (l = u, !u)) return this } l && (s._private[e.field] = e.value, c && n.push(s)) } var d = this.spawn(n); d.updateStyle(), d.emit(e.event) } return this } } function o(e) { r[e.field] = function () { var t = this[0]; if (t) { if (e.overrideField) { var n = e.overrideField(t); if (void 0 !== n) return n } return t._private[e.field] } }, r[e.on] = i({ event: e.on, field: e.field, ableField: e.ableField, overrideAble: e.overrideAble, value: !0 }), r[e.off] = i({ event: e.off, field: e.field, ableField: e.ableField, overrideAble: e.overrideAble, value: !1 }) } o({ field: "locked", overrideField: function (e) { return !!e.cy().autolock() || void 0 }, on: "lock", off: "unlock" }), o({ field: "grabbable", overrideField: function (e) { return !e.cy().autoungrabify() && void 0 }, on: "grabify", off: "ungrabify" }), o({ field: "selected", ableField: "selectable", overrideAble: function (e) { return !e.cy().autounselectify() && void 0 }, on: "select", off: "unselect" }), o({ field: "selectable", overrideField: function (e) { return !e.cy().autounselectify() && void 0 }, on: "selectify", off: "unselectify" }), r.deselect = r.unselect, r.grabbed = function () { var e = this[0]; if (e) return e._private.grabbed }, o({ field: "active", on: "activate", off: "unactivate" }), r.inactive = function () { var e = this[0]; if (e) return !e._private.active }, e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = {}, a = function (e, t) { return function (n, r, o, a) { var s = n, l = void 0; if (null == s ? l = "null" : i.elementOrCollection(s) && 1 === s.length && (l = "#" + s.id()), 1 === this.length && l) { var c = this[0]._private, u = c.traversalCache = c.traversalCache || {}, d = u[t] = u[t] || {}, p = d[l]; return p || (d[l] = e.call(this, n, r, o, a)) } return e.call(this, n, r, o, a) } }, s = function (e) { return function (t) { for (var n = [], r = 0; r < this.length; r++) { var i = this[r]; if (i.isNode()) { for (var o = !1, a = i.connectedEdges(), s = 0; s < a.length; s++) { var l = a[s], c = l.source(), u = l.target(); if (e.noIncomingEdges && u === i && c !== i || e.noOutgoingEdges && c === i && u !== i) { o = !0; break } } o || n.push(i) } } return this.spawn(n, { unique: !0 }).filter(t) } }, l = function (e) { return function (t) { for (var n = [], r = 0; r < this.length; r++) { var i = this[r]; if (i.isNode()) for (var o = i.connectedEdges(), a = 0; a < o.length; a++) { var s = o[a], l = s.source(), c = s.target(); e.outgoing && l === i ? (n.push(s), n.push(c)) : e.incoming && c === i && (n.push(s), n.push(l)) } } return this.spawn(n, { unique: !0 }).filter(t) } }, c = function (e) { return function (t) { for (var n = this, r = [], i = {}; ;) { var o = e.outgoing ? n.outgoers() : n.incomers(); if (0 === o.length) break; for (var a = !1, s = 0; s < o.length; s++) { var l = o[s], c = l.id(); i[c] || (i[c] = !0, r.push(l), a = !0) } if (!a) break; n = o } return this.spawn(r, { unique: !0 }).filter(t) } }; function u(e) { return function (t) { for (var n = [], r = 0; r < this.length; r++) { var i = this[r]._private[e.attr]; i && n.push(i) } return this.spawn(n, { unique: !0 }).filter(t) } } function d(e) { return function (t) { var n = [], r = this._private.cy, o = e || {}; i.string(t) && (t = r.$(t)); for (var a = 0; a < t.length; a++)for (var s = t[a]._private.edges, l = 0; l < s.length; l++) { var c = s[l], u = c._private.data, d = this.hasElementWithId(u.source) && t.hasElementWithId(u.target), p = t.hasElementWithId(u.source) && this.hasElementWithId(u.target); if (d || p) { if (o.thisIsSrc || o.thisIsTgt) { if (o.thisIsSrc && !d) continue; if (o.thisIsTgt && !p) continue } n.push(c) } } return this.spawn(n, { unique: !0 }) } } function p(e) { return e = r.extend({}, { codirected: !1 }, e), function (t) { for (var n = [], r = this.edges(), i = e, o = 0; o < r.length; o++)for (var a = r[o]._private, s = a.source, l = s._private.data.id, c = a.data.target, u = s._private.edges, d = 0; d < u.length; d++) { var p = u[d], f = p._private.data, h = f.target, g = f.source, m = h === c && g === l, v = l === h && c === g; (i.codirected && m || !i.codirected && (m || v)) && n.push(p) } return this.spawn(n, { unique: !0 }).filter(t) } } o.clearTraversalCache = function () { for (var e = 0; e < this.length; e++)this[e]._private.traversalCache = null }, r.extend(o, { roots: s({ noIncomingEdges: !0 }), leaves: s({ noOutgoingEdges: !0 }), outgoers: a(l({ outgoing: !0 }), "outgoers"), successors: c({ outgoing: !0 }), incomers: a(l({ incoming: !0 }), "incomers"), predecessors: c({ incoming: !0 }) }), r.extend(o, { neighborhood: a((function (e) { for (var t = [], n = this.nodes(), r = 0; r < n.length; r++)for (var i = n[r], o = i.connectedEdges(), a = 0; a < o.length; a++) { var s = o[a], l = s.source(), c = s.target(), u = i === l ? c : l; u.length > 0 && t.push(u[0]), t.push(s[0]) } return this.spawn(t, { unique: !0 }).filter(e) }), "neighborhood"), closedNeighborhood: function (e) { return this.neighborhood().add(this).filter(e) }, openNeighborhood: function (e) { return this.neighborhood(e) } }), o.neighbourhood = o.neighborhood, o.closedNeighbourhood = o.closedNeighborhood, o.openNeighbourhood = o.openNeighborhood, r.extend(o, { source: a((function (e) { var t = this[0], n = void 0; return t && (n = t._private.source || t.cy().collection()), n && e ? n.filter(e) : n }), "source"), target: a((function (e) { var t = this[0], n = void 0; return t && (n = t._private.target || t.cy().collection()), n && e ? n.filter(e) : n }), "target"), sources: u({ attr: "source" }), targets: u({ attr: "target" }) }), r.extend(o, { edgesWith: a(d(), "edgesWith"), edgesTo: a(d({ thisIsSrc: !0 }), "edgesTo") }), r.extend(o, { connectedEdges: a((function (e) { for (var t = [], n = 0; n < this.length; n++) { var r = this[n]; if (r.isNode()) for (var i = r._private.edges, o = 0; o < i.length; o++) { var a = i[o]; t.push(a) } } return this.spawn(t, { unique: !0 }).filter(e) }), "connectedEdges"), connectedNodes: a((function (e) { for (var t = [], n = 0; n < this.length; n++) { var r = this[n]; r.isEdge() && (t.push(r.source()[0]), t.push(r.target()[0])) } return this.spawn(t, { unique: !0 }).filter(e) }), "connectedNodes"), parallelEdges: a(p(), "parallelEdges"), codirectedEdges: a(p({ codirected: !0 }), "codirectedEdges") }), r.extend(o, { components: function () { var e = this, t = e.cy(), n = e.spawn(), r = e.nodes().spawnSelf(), i = [], o = function (e, t) { n.merge(e), r.unmerge(e), t.merge(e) }; if (r.empty()) return e.spawn(); var a = function () { var n = t.collection(); i.push(n); var a = r[0]; o(a, n), e.bfs({ directed: !1, roots: a, visit: function (e, t, r, i, a) { o(e, n) } }) }; do { a() } while (r.length > 0); return i.map((function (e) { var t = e.connectedEdges().stdFilter((function (t) { return e.anySame(t.source()) && e.anySame(t.target()) })); return e.union(t) })) } }), e.exports = o }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(7), a = n(14), s = { add: function (e) { var t = void 0, n = this; if (r.elementOrCollection(e)) { var s = e; if (s._private.cy === n) t = s.restore(); else { for (var l = [], c = 0; c < s.length; c++) { var u = s[c]; l.push(u.json()) } t = new o(n, l) } } else if (r.array(e)) t = new o(n, e); else if (r.plainObject(e) && (r.array(e.nodes) || r.array(e.edges))) { for (var d = e, p = [], f = ["nodes", "edges"], h = 0, g = f.length; h < g; h++) { var m = f[h], v = d[m]; if (r.array(v)) for (var b = 0, y = v.length; b < y; b++) { var x = i.extend({ group: m }, v[b]); p.push(x) } } t = new o(n, p) } else t = new a(n, e).collection(); return t }, remove: function (e) { if (r.elementOrCollection(e)); else if (r.string(e)) { var t = e; e = this.$(t) } return e.remove() } }; e.exports = s }, function (e, t, n) { "use strict"; var r = n(4), i = n(1), o = n(71), a = { animate: r.animate(), animation: r.animation(), animated: r.animated(), clearQueue: r.clearQueue(), delay: r.delay(), delayAnimation: r.delayAnimation(), stop: r.stop(), addToAnimationPool: function (e) { this.styleEnabled() && this._private.aniEles.merge(e) }, stopAnimationLoop: function () { this._private.animationsRunning = !1 }, startAnimationLoop: function () { var e = this; if (e._private.animationsRunning = !0, e.styleEnabled()) { var t = e.renderer(); t && t.beforeRender ? t.beforeRender((function (t, n) { o(n, e) }), t.beforeRenderPriorities.animations) : function t() { e._private.animationsRunning && i.requestAnimationFrame((function (n) { o(n, e), t() })) }() } } }; e.exports = a }, function (e, t, n) { "use strict"; var r = n(72), i = n(77); e.exports = function (e, t) { var n = t._private.aniEles, o = []; function a(t, n) { var a = t._private, s = a.animation.current, l = a.animation.queue, c = !1; if (!n && "none" === t.pstyle("display").value) { s = s.splice(0, s.length).concat(l.splice(0, l.length)); for (var u = 0; u < s.length; u++)s[u].stop() } if (0 === s.length) { var d = l.shift(); d && s.push(d) } for (var p = function (e) { for (var t = e.length - 1; t >= 0; t--)(0, e[t])(); e.splice(0, e.length) }, f = s.length - 1; f >= 0; f--) { var h = s[f], g = h._private; g.stopped ? (s.splice(f, 1), g.hooked = !1, g.playing = !1, g.started = !1, p(g.frames)) : (g.playing || g.applying) && (g.playing && g.applying && (g.applying = !1), g.started || i(t, h, e, n), r(t, h, e, n), g.applying && (g.applying = !1), p(g.frames), h.completed() && (s.splice(f, 1), g.hooked = !1, g.playing = !1, g.started = !1, p(g.completes)), c = !0) } return n || 0 !== s.length || 0 !== l.length || o.push(t), c } for (var s = !1, l = 0; l < n.length; l++) { var c = a(n[l]); s = s || c } var u = a(t, !0); (s || u) && (n.length > 0 ? (n.dirtyCompoundBoundsCache(), t.notify({ type: "draw", eles: n })) : t.notify({ type: "draw" })), n.unmerge(o), t.emit("step") } }, function (e, t, n) { "use strict"; var r = n(73), i = n(76), o = n(0); function a(e, t) { return !!(null != e && null != t && (o.number(e) && o.number(t) || e && t)) } e.exports = function (e, t, n, s) { var l = !s, c = e._private, u = t._private, d = u.easing, p = u.startTime, f = (s ? e : e.cy()).style(); if (!u.easingImpl) if (null == d) u.easingImpl = r.linear; else { var h = void 0; h = o.string(d) ? f.parse("transition-timing-function", d).value : d; var g = void 0, m = void 0; o.string(h) ? (g = h, m = []) : (g = h[1], m = h.slice(2).map((function (e) { return +e }))), m.length > 0 ? ("spring" === g && m.push(u.duration), u.easingImpl = r[g].apply(null, m)) : u.easingImpl = r[g] } var v = u.easingImpl, b = void 0; if (b = 0 === u.duration ? 1 : (n - p) / u.duration, u.applying && (b = u.progress), b < 0 ? b = 0 : b > 1 && (b = 1), null == u.delay) { var y = u.startPosition, x = u.position; if (x && l && !e.locked()) { var w = e.position(); a(y.x, x.x) && (w.x = i(y.x, x.x, b, v)), a(y.y, x.y) && (w.y = i(y.y, x.y, b, v)), e.emit("position") } var k = u.startPan, A = u.pan, E = c.pan, S = null != A && s; S && (a(k.x, A.x) && (E.x = i(k.x, A.x, b, v)), a(k.y, A.y) && (E.y = i(k.y, A.y, b, v)), e.emit("pan")); var $ = u.startZoom, C = u.zoom, _ = null != C && s; _ && (a($, C) && (c.zoom = i($, C, b, v)), e.emit("zoom")), (S || _) && e.emit("viewport"); var O = u.style; if (O && O.length > 0 && l) { for (var T = 0; T < O.length; T++) { var j = O[T], P = j.name, D = j, R = u.startStyle[P], I = f.properties[R.name], N = i(R, D, b, v, I); f.overrideBypass(e, P, N) } e.emit("style") } } return u.progress = b, b } }, function (e, t, n) { "use strict"; var r = n(74), i = n(75), o = function (e, t, n, i) { var o = r(e, t, n, i); return function (e, t, n) { return e + (t - e) * o(n) } }, a = { linear: function (e, t, n) { return e + (t - e) * n }, ease: o(.25, .1, .25, 1), "ease-in": o(.42, 0, 1, 1), "ease-out": o(0, 0, .58, 1), "ease-in-out": o(.42, 0, .58, 1), "ease-in-sine": o(.47, 0, .745, .715), "ease-out-sine": o(.39, .575, .565, 1), "ease-in-out-sine": o(.445, .05, .55, .95), "ease-in-quad": o(.55, .085, .68, .53), "ease-out-quad": o(.25, .46, .45, .94), "ease-in-out-quad": o(.455, .03, .515, .955), "ease-in-cubic": o(.55, .055, .675, .19), "ease-out-cubic": o(.215, .61, .355, 1), "ease-in-out-cubic": o(.645, .045, .355, 1), "ease-in-quart": o(.895, .03, .685, .22), "ease-out-quart": o(.165, .84, .44, 1), "ease-in-out-quart": o(.77, 0, .175, 1), "ease-in-quint": o(.755, .05, .855, .06), "ease-out-quint": o(.23, 1, .32, 1), "ease-in-out-quint": o(.86, 0, .07, 1), "ease-in-expo": o(.95, .05, .795, .035), "ease-out-expo": o(.19, 1, .22, 1), "ease-in-out-expo": o(1, 0, 0, 1), "ease-in-circ": o(.6, .04, .98, .335), "ease-out-circ": o(.075, .82, .165, 1), "ease-in-out-circ": o(.785, .135, .15, .86), spring: function (e, t, n) { if (0 === n) return a.linear; var r = i(e, t, n); return function (e, t, n) { return e + (t - e) * r(n) } }, "cubic-bezier": o }; e.exports = a }, function (e, t, n) { + "use strict"; +/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */e.exports = function (e, t, n, r) { var i = 4, o = .001, a = 1e-7, s = 10, l = 11, c = 1 / (l - 1), u = "undefined" != typeof Float32Array; if (4 !== arguments.length) return !1; for (var d = 0; d < 4; ++d)if ("number" != typeof arguments[d] || isNaN(arguments[d]) || !isFinite(arguments[d])) return !1; e = Math.min(e, 1), n = Math.min(n, 1), e = Math.max(e, 0), n = Math.max(n, 0); var p = u ? new Float32Array(l) : new Array(l); function f(e, t) { return 1 - 3 * t + 3 * e } function h(e, t) { return 3 * t - 6 * e } function g(e) { return 3 * e } function m(e, t, n) { return ((f(t, n) * e + h(t, n)) * e + g(t)) * e } function v(e, t, n) { return 3 * f(t, n) * e * e + 2 * h(t, n) * e + g(t) } function b(t, r) { for (var o = 0; o < i; ++o) { var a = v(r, e, n); if (0 === a) return r; r -= (m(r, e, n) - t) / a } return r } function y() { for (var t = 0; t < l; ++t)p[t] = m(t * c, e, n) } function x(t, r, i) { var o = void 0, l = void 0, c = 0; do { (o = m(l = r + (i - r) / 2, e, n) - t) > 0 ? i = l : r = l } while (Math.abs(o) > a && ++c < s); return l } function w(t) { for (var r = 0, i = 1, a = l - 1; i !== a && p[i] <= t; ++i)r += c; --i; var s = r + (t - p[i]) / (p[i + 1] - p[i]) * c, u = v(s, e, n); return u >= o ? b(t, s) : 0 === u ? s : x(t, r, r + c) } var k = !1; function A() { k = !0, e === t && n === r || y() } var E = function (i) { return k || A(), e === t && n === r ? i : 0 === i ? 0 : 1 === i ? 1 : m(w(i), t, r) }; E.getControlPoints = function () { return [{ x: e, y: t }, { x: n, y: r }] }; var S = "generateBezier(" + [e, t, n, r] + ")"; return E.toString = function () { return S }, E } + }, function (e, t, n) { + "use strict"; +/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */var r = function () { function e(e) { return -e.tension * e.x - e.friction * e.v } function t(t, n, r) { var i = { x: t.x + r.dx * n, v: t.v + r.dv * n, tension: t.tension, friction: t.friction }; return { dx: i.v, dv: e(i) } } function n(n, r) { var i = { dx: n.v, dv: e(n) }, o = t(n, .5 * r, i), a = t(n, .5 * r, o), s = t(n, r, a), l = 1 / 6 * (i.dx + 2 * (o.dx + a.dx) + s.dx), c = 1 / 6 * (i.dv + 2 * (o.dv + a.dv) + s.dv); return n.x = n.x + l * r, n.v = n.v + c * r, n } return function e(t, r, i) { var o, a = { x: -1, v: 0, tension: null, friction: null }, s = [0], l = 0, c = void 0, u = void 0; for (t = parseFloat(t) || 500, r = parseFloat(r) || 20, i = i || null, a.tension = t, a.friction = r, c = (o = null !== i) ? (l = e(t, r)) / i * .016 : .016; u = n(u || a, c), s.push(1 + u.x), l += 16, Math.abs(u.x) > 1e-4 && Math.abs(u.v) > 1e-4;); return o ? function (e) { return s[e * (s.length - 1) | 0] } : l } }(); e.exports = r + }, function (e, t, n) { "use strict"; var r = n(0); function i(e, t, n, r, i) { if (1 === r) return n; var o = i(t, n, r); return null == e || ((e.roundValue || e.color) && (o = Math.round(o)), void 0 !== e.min && (o = Math.max(o, e.min)), void 0 !== e.max && (o = Math.min(o, e.max))), o } function o(e, t) { return null != e.pfValue || null != e.value ? null == e.pfValue || null != t && "%" === t.type.units ? e.value : e.pfValue : e } e.exports = function (e, t, n, a, s) { var l = null != s ? s.type : null; n < 0 ? n = 0 : n > 1 && (n = 1); var c = o(e, s), u = o(t, s); if (r.number(c) && r.number(u)) return i(l, c, u, n, a); if (r.array(c) && r.array(u)) { for (var d = [], p = 0; p < u.length; p++) { var f = c[p], h = u[p]; if (null != f && null != h) { var g = i(l, f, h, n, a); d.push(g) } else d.push(h) } return d } } }, function (e, t, n) { "use strict"; e.exports = function (e, t, n, r) { var i = !r, o = e, a = t._private, s = r ? e : e.cy(), l = s.style(); if (i) { var c = o.position(); a.startPosition = a.startPosition || { x: c.x, y: c.y }, a.startStyle = a.startStyle || l.getAnimationStartStyle(o, a.style) } if (r) { var u = s._private.pan; a.startPan = a.startPan || { x: u.x, y: u.y }, a.startZoom = null != a.startZoom ? a.startZoom : s._private.zoom } a.started = !0, a.startTime = n - a.progress * a.duration } }, function (e, t, n) { "use strict"; var r = n(11), i = n(4), o = n(0), a = n(1), s = n(6), l = { qualifierCompare: function (e, t) { return null == e || null == t ? null == e && null == t : e.sameText(t) }, eventMatches: function (e, t, n) { var r = t.qualifier; return null == r || e !== n.target && o.element(n.target) && r.matches(n.target) }, eventFields: function (e) { return { cy: e, target: e } }, callbackContext: function (e, t, n) { return null != t.qualifier ? n.target : e } }, c = function (e) { return o.string(e) ? new s(e) : e }, u = { createEmitter: function () { var e = this._private; return e.emitter || (e.emitter = new r(a.assign({ context: this }, l))), this }, emitter: function () { return this._private.emitter }, on: function (e, t, n) { return this.emitter().on(e, c(t), n), this }, removeListener: function (e, t, n) { return this.emitter().removeListener(e, c(t), n), this }, one: function (e, t, n) { return this.emitter().one(e, c(t), n), this }, once: function (e, t, n) { return this.emitter().one(e, c(t), n), this }, emit: function (e, t) { return this.emitter().emit(e, t), this } }; i.eventAliasesOn(u), e.exports = u }, function (e, t, n) { "use strict"; var r = { png: function (e) { return e = e || {}, this._private.renderer.png(e) }, jpg: function (e) { var t = this._private.renderer; return (e = e || {}).bg = e.bg || "#fff", t.jpg(e) } }; r.jpeg = r.jpg, e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = { layout: function (e) { if (null != e) if (null != e.name) { var t = e.name, n = this.extension("layout", t); if (null != n) { var o = void 0; o = i.string(e.eles) ? this.$(e.eles) : null != e.eles ? e.eles : this.$(); var a = new n(r.extend({}, e, { cy: this, eles: o })); return a } r.error("Can not apply layout: No such layout `" + t + "` found; did you include its JS file?") } else r.error("A `name` must be specified to make a layout"); else r.error("Layout options must be specified to make a layout") } }; o.createLayout = o.makeLayout = o.layout, e.exports = o }, function (e, t, n) { "use strict"; var r = { notify: function (e) { var t = this._private; if (t.batchingNotify) { var n = t.batchNotifyEles, r = t.batchNotifyTypes; return e.eles && n.merge(e.eles), void (r.ids[e.type] || (r.push(e.type), r.ids[e.type] = !0)) } if (t.notificationsEnabled) { var i = this.renderer(); !this.isDestroyed() && i && i.notify(e) } }, notifications: function (e) { var t = this._private; if (void 0 === e) return t.notificationsEnabled; t.notificationsEnabled = !!e }, noNotifications: function (e) { this.notifications(!1), e(), this.notifications(!0) }, batching: function () { return this._private.batchCount > 0 }, startBatch: function () { var e = this._private; return null == e.batchCount && (e.batchCount = 0), 0 === e.batchCount && (e.batchingStyle = e.batchingNotify = !0, e.batchStyleEles = this.collection(), e.batchNotifyEles = this.collection(), e.batchNotifyTypes = [], e.batchNotifyTypes.ids = {}), e.batchCount++, this }, endBatch: function () { var e = this._private; return e.batchCount--, 0 === e.batchCount && (e.batchingStyle = !1, e.batchStyleEles.updateStyle(), e.batchingNotify = !1, this.notify({ type: e.batchNotifyTypes, eles: e.batchNotifyEles })), this }, batch: function (e) { return this.startBatch(), e(), this.endBatch(), this }, batchData: function (e) { var t = this; return this.batch((function () { for (var n = Object.keys(e), r = 0; r < n.length; r++) { var i = n[r], o = e[i]; t.getElementById(i).data(o) } })) } }; e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = { renderTo: function (e, t, n, r) { return this._private.renderer.renderTo(e, t, n, r), this }, renderer: function () { return this._private.renderer }, forceRender: function () { return this.notify({ type: "draw" }), this }, resize: function () { return this.invalidateSize(), this.notify({ type: "resize" }), this.emit("resize"), this }, initRenderer: function (e) { var t = this.extension("renderer", e.name); null != t ? (this._private.renderer = new t(r.extend({}, e, { cy: this })), this.notify({ type: "init" })) : r.error("Can not initialise: No such renderer `%s` found; did you include its JS file?", e.name) }, destroyRenderer: function () { this.notify({ type: "destroy" }); var e = this.container(); if (e) for (e._cyreg = null; e.childNodes.length > 0;)e.removeChild(e.childNodes[0]); this._private.renderer = null }, onRender: function (e) { return this.on("render", e) }, offRender: function (e) { return this.off("render", e) } }; i.invalidateDimensions = i.resize, e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = n(7), o = { collection: function (e, t) { return r.string(e) ? this.$(e) : r.elementOrCollection(e) ? e.collection() : r.array(e) ? new i(this, e, t) : new i(this) }, nodes: function (e) { var t = this.$((function (e) { return e.isNode() })); return e ? t.filter(e) : t }, edges: function (e) { var t = this.$((function (e) { return e.isEdge() })); return e ? t.filter(e) : t }, $: function (e) { var t = this._private.elements; return e ? t.filter(e) : t.spawnSelf() }, mutableElements: function () { return this._private.elements } }; o.elements = o.filter = o.$, e.exports = o }, function (e, t, n) { "use strict"; var r = n(0), i = n(18), o = { style: function (e) { return e && this.setStyle(e).update(), this._private.style }, setStyle: function (e) { var t = this._private; return r.stylesheet(e) ? t.style = e.generateStyle(this) : r.array(e) ? t.style = i.fromJson(this, e) : r.string(e) ? t.style = i.fromString(this, e) : t.style = i(this), t.style } }; e.exports = o }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = n(5), a = { apply: function (e) { var t = this._private, n = t.cy.collection(); t.newStyle && (t.contextStyles = {}, t.propDiffs = {}, this.cleanElements(e, !0)); for (var r = 0; r < e.length; r++) { var i = e[r], o = this.getContextMeta(i); if (!o.empty) { n.merge(i); var a = this.getContextStyle(o), s = this.applyContextStyle(o, a, i); t.newStyle || this.updateTransitions(i, s.diffProps), this.updateStyleHints(i) } } return t.newStyle = !1, n }, getPropertiesDiff: function (e, t) { var n = this._private.propDiffs = this._private.propDiffs || {}, r = e + "-" + t, i = n[r]; if (i) return i; for (var o = [], a = {}, s = 0; s < this.length; s++) { var l = this[s], c = "t" === e[s] != ("t" === t[s]), u = l.mappedProperties.length > 0; if (c || u) { var d = void 0; c && u || c ? d = l.properties : u && (d = l.mappedProperties); for (var p = 0; p < d.length; p++) { for (var f = d[p], h = f.name, g = !1, m = s + 1; m < this.length; m++) { var v = this[m]; if ("t" === t[m] && (g = null != v.properties[f.name])) break } a[h] || g || (a[h] = !0, o.push(h)) } } } return n[r] = o, o }, getContextMeta: function (e) { var t, n = "", r = e._private.styleCxtKey || ""; this._private.newStyle && (r = ""); for (var i = 0; i < this.length; i++) { var o = this[i]; n += o.selector && o.selector.matches(e) ? "t" : "f" } return t = this.getPropertiesDiff(r, n), e._private.styleCxtKey = n, { key: n, diffPropNames: t, empty: 0 === t.length } }, getContextStyle: function (e) { var t = e.key, n = this._private.contextStyles = this._private.contextStyles || {}; if (n[t]) return n[t]; for (var r = { _private: { key: t } }, i = 0; i < this.length; i++) { var o = this[i]; if ("t" === t[i]) for (var a = 0; a < o.properties.length; a++) { var s = o.properties[a]; r[s.name] = s } } return n[t] = r, r }, applyContextStyle: function (e, t, n) { for (var r = e.diffPropNames, i = {}, o = 0; o < r.length; o++) { var a = r[o], s = t[a], l = n.pstyle(a); if (!s) { if (!l) continue; s = l.bypass ? { name: a, deleteBypassed: !0 } : { name: a, delete: !0 } } if (l !== s) { var c = i[a] = { prev: l }; this.applyParsedProperty(n, s), c.next = n.pstyle(a), c.next && c.next.bypass && (c.next = c.next.bypassed) } } return { diffProps: i } }, updateStyleHints: function (e) { var t = e._private; if (!e.removed()) { var n = !1; if ("nodes" === t.group) for (var r = 1; r <= this.pieBackgroundN; r++)if (e.pstyle("pie-" + r + "-background-size").value > 0) { n = !0; break } t.hasPie = n; var i = e.pstyle("text-transform").strValue, o = e.pstyle("label").strValue, a = e.pstyle("source-label").strValue, s = e.pstyle("target-label").strValue, l = e.pstyle("font-style").strValue, c = e.pstyle("font-size").pfValue + "px", u = e.pstyle("font-family").strValue, d = e.pstyle("font-weight").strValue, p = l + "$" + c + "$" + u + "$" + d + "$" + i + "$" + e.pstyle("text-valign").strValue + "$" + e.pstyle("text-valign").strValue + "$" + e.pstyle("text-outline-width").pfValue + "$" + e.pstyle("text-wrap").strValue + "$" + e.pstyle("text-max-width").pfValue; t.labelStyleKey = p, t.sourceLabelKey = p + "$" + a, t.targetLabelKey = p + "$" + s, t.labelKey = p + "$" + o, t.fontKey = l + "$" + d + "$" + c + "$" + u, t.styleKey = Date.now() } }, applyParsedProperty: function (e, t) { var n = this, o = t, a = e._private.style, s = void 0, l = n.types, c = n.properties[o.name].type, u = o.bypass, d = a[o.name], p = d && d.bypass, f = e._private, h = function () { n.checkZOrderTrigger(e, o.name, d ? d.value : null, o.value) }; if ("curve-style" === t.name && "haystack" === t.value && e.isEdge() && (e.isLoop() || e.source().isParent() || e.target().isParent()) && (o = t = this.parse(t.name, "bezier", u)), o.delete) return a[o.name] = void 0, h(), !0; if (o.deleteBypassed) return d ? !!d.bypass && (d.bypassed = void 0, h(), !0) : (h(), !0); if (o.deleteBypass) return d ? !!d.bypass && (a[o.name] = d.bypassed, h(), !0) : (h(), !0); var g = function () { r.error("Do not assign mappings to elements without corresponding data (e.g. ele `" + e.id() + "` for property `" + o.name + "` with data field `" + o.field + "`); try a `[" + o.field + "]` selector to limit scope to elements with `" + o.field + "` defined") }; switch (o.mapped) { case l.mapData: for (var m = o.field.split("."), v = f.data, b = 0; b < m.length && v; b++)v = v[m[b]]; var y = void 0; if ((y = i.number(v) ? (v - o.fieldMin) / (o.fieldMax - o.fieldMin) : 0) < 0 ? y = 0 : y > 1 && (y = 1), c.color) { var x = o.valueMin[0], w = o.valueMax[0], k = o.valueMin[1], A = o.valueMax[1], E = o.valueMin[2], S = o.valueMax[2], $ = null == o.valueMin[3] ? 1 : o.valueMin[3], C = null == o.valueMax[3] ? 1 : o.valueMax[3], _ = [Math.round(x + (w - x) * y), Math.round(k + (A - k) * y), Math.round(E + (S - E) * y), Math.round($ + (C - $) * y)]; s = { bypass: o.bypass, name: o.name, value: _, strValue: "rgb(" + _[0] + ", " + _[1] + ", " + _[2] + ")" } } else { if (!c.number) return !1; var O = o.valueMin + (o.valueMax - o.valueMin) * y; s = this.parse(o.name, O, o.bypass, "mapping") } s || (s = this.parse(o.name, d.strValue, o.bypass, "mapping")), s || g(), s.mapping = o, o = s; break; case l.data: var T = o.field.split("."), j = f.data; if (j) for (var P = 0; P < T.length; P++)j = j[T[P]]; if (!(s = this.parse(o.name, j, o.bypass, "mapping"))) { var D = d ? d.strValue : ""; s = this.parse(o.name, D, o.bypass, "mapping") } s || g(), s.mapping = o, o = s; break; case l.fn: var R = (0, o.value)(e); (s = this.parse(o.name, R, o.bypass, "mapping")).mapping = o, o = s; break; case void 0: break; default: return !1 }return u ? (o.bypassed = p ? d.bypassed : d, a[o.name] = o) : p ? d.bypassed = o : a[o.name] = o, h(), !0 }, cleanElements: function (e, t) { for (var n = this.properties, r = 0; r < e.length; r++) { var i = e[r]; if (t) for (var o = i._private.style, a = 0; a < n.length; a++) { var s = n[a], l = o[s.name]; l && (l.bypass ? l.bypassed = null : o[s.name] = null) } else i._private.style = {} } }, update: function () { this._private.cy.mutableElements().updateStyle() }, updateMappers: function (e) { for (var t = this._private.cy.collection(), n = 0; n < e.length; n++) { for (var r = e[n], i = r._private.style, o = !1, a = 0; a < this.properties.length; a++) { var s = i[this.properties[a].name]; if (s && s.mapping) { var l = s.mapping; this.applyParsedProperty(r, l), o = !0 } } o && (this.updateStyleHints(r), t.merge(r)) } return t }, updateTransitions: function (e, t, n) { var r = this, a = e._private, s = e.pstyle("transition-property").value, l = e.pstyle("transition-duration").pfValue, c = e.pstyle("transition-delay").pfValue; if (s.length > 0 && l > 0) { for (var u = {}, d = !1, p = 0; p < s.length; p++) { var f = s[p], h = e.pstyle(f), g = t[f]; if (g) { var m = g.prev, v = null != g.next ? g.next : h, b = !1, y = void 0; m && (i.number(m.pfValue) && i.number(v.pfValue) ? (b = v.pfValue - m.pfValue, y = m.pfValue + 1e-6 * b) : i.number(m.value) && i.number(v.value) ? (b = v.value - m.value, y = m.value + 1e-6 * b) : i.array(m.value) && i.array(v.value) && (b = m.value[0] !== v.value[0] || m.value[1] !== v.value[1] || m.value[2] !== v.value[2], y = m.strValue), b && (u[f] = v.strValue, this.applyBypass(e, f, y), d = !0)) } } if (!d) return; a.transitioning = !0, new o((function (t) { c > 0 ? e.delayAnimation(c).play().promise().then(t) : t() })).then((function () { return e.animation({ style: u, duration: l, easing: e.pstyle("transition-timing-function").value, queue: !1 }).play().promise() })).then((function () { r.removeBypasses(e, s), e.emitAndNotify("style"), a.transitioning = !1 })) } else a.transitioning && (this.removeBypasses(e, s), e.emitAndNotify("style"), a.transitioning = !1) }, checkZOrderTrigger: function (e, t, n, r) { var i = this.properties[t]; null == i.triggersZOrder || null != n && !i.triggersZOrder(n, r) || this._private.cy.notify({ type: "zorder", eles: e }) } }; e.exports = a }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = { applyBypass: function (e, t, n, o) { var a = []; if ("*" === t || "**" === t) { if (void 0 !== n) for (var s = 0; s < this.properties.length; s++) { var l = this.properties[s].name, c = this.parse(l, n, !0); c && a.push(c) } } else if (r.string(t)) { var u = this.parse(t, n, !0); u && a.push(u) } else { if (!r.plainObject(t)) return !1; var d = t; o = n; for (var p = Object.keys(d), f = 0; f < p.length; f++) { var h = p[f], g = (this.properties[h], d[h]); if (void 0 === g && (g = d[i.dash2camel(h)]), void 0 !== g) { var m = this.parse(h, g, !0); m && a.push(m) } } } if (0 === a.length) return !1; for (var v = !1, b = 0; b < e.length; b++) { for (var y = e[b], x = {}, w = void 0, k = 0; k < a.length; k++) { var A = a[k]; if (o) { var E = y.pstyle(A.name); w = x[A.name] = { prev: E } } v = this.applyParsedProperty(y, A) || v, o && (w.next = y.pstyle(A.name)) } v && this.updateStyleHints(y), o && this.updateTransitions(y, x, !0) } return v }, overrideBypass: function (e, t, n) { t = i.camel2dash(t); for (var r = 0; r < e.length; r++) { var o = e[r], a = o._private.style[t], s = this.properties[t].type, l = s.color, c = s.mutiple; if (a && a.bypass) { var u = null != a.pfValue ? a.pfValue : a.value; a.value = n, null != a.pfValue && (a.pfValue = n), a.strValue = l ? "rgb(" + n.join(",") + ")" : c ? n.join(" ") : "" + n, this.checkZOrderTrigger(o, t, u, n) } else this.applyBypass(o, t, n) } }, removeAllBypasses: function (e, t) { return this.removeBypasses(e, this.propertyNames, t) }, removeBypasses: function (e, t, n) { for (var r = 0; r < e.length; r++) { for (var i = e[r], o = {}, a = 0; a < t.length; a++) { var s = t[a], l = this.properties[s], c = i.pstyle(l.name); if (c && c.bypass) { var u = this.parse(s, "", !0), d = o[l.name] = { prev: c }; this.applyParsedProperty(i, u), d.next = i.pstyle(l.name) } } this.updateStyleHints(i), n && this.updateTransitions(i, o, !0) } } }; e.exports = o }, function (e, t, n) { "use strict"; var r = n(3), i = { getEmSizeInPixels: function () { var e = this.containerCss("font-size"); return null != e ? parseFloat(e) : 1 }, containerCss: function (e) { var t = this._private.cy.container(); if (r && t && r.getComputedStyle) return r.getComputedStyle(t).getPropertyValue(e) } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = { getRenderedStyle: function (e, t) { return t ? this.getStylePropertyValue(e, t, !0) : this.getRawStyle(e, !0) }, getRawStyle: function (e, t) { if (e = e[0]) { for (var n = {}, i = 0; i < this.properties.length; i++) { var o = this.properties[i], a = this.getStylePropertyValue(e, o.name, t); null != a && (n[o.name] = a, n[r.dash2camel(o.name)] = a) } return n } }, getIndexedStyle: function (e, t, n, r) { var i = e.pstyle(t)[n][r]; return null != i ? i : e.cy().style().getDefaultProperty(t)[n][0] }, getStylePropertyValue: function (e, t, n) { if (e = e[0]) { var r = this.properties[t]; r.alias && (r = r.pointsTo); var i = r.type, o = e.pstyle(r.name), a = e.cy().zoom(); if (o) { var s = o.units ? i.implicitUnits || "px" : null; return s ? [].concat(o.pfValue).map((function (e) { return e * (n ? a : 1) + s })).join(" ") : o.strValue } } }, getAnimationStartStyle: function (e, t) { for (var n = {}, r = 0; r < t.length; r++) { var o = t[r].name, a = e.pstyle(o); void 0 !== a && (a = i.plainObject(a) ? this.parse(o, a.strValue) : this.parse(o, a)), a && (n[o] = a) } return n }, getPropsList: function (e) { var t = [], n = e, i = this.properties; if (n) for (var o = Object.keys(n), a = 0; a < o.length; a++) { var s = o[a], l = n[s], c = i[s] || i[r.camel2dash(s)], u = this.parse(c.name, l); u && t.push(u) } return t } }; e.exports = o }, function (e, t, n) { "use strict"; var r = { appendFromJson: function (e) { for (var t = 0; t < e.length; t++) { var n = e[t], r = n.selector, i = n.style || n.css, o = Object.keys(i); this.selector(r); for (var a = 0; a < o.length; a++) { var s = o[a], l = i[s]; this.css(s, l) } } return this }, fromJson: function (e) { return this.resetToDefault(), this.appendFromJson(e), this }, json: function () { for (var e = [], t = this.defaultLength; t < this.length; t++) { for (var n = this[t], r = n.selector, i = n.properties, o = {}, a = 0; a < i.length; a++) { var s = i[a]; o[s.name] = s.strValue } e.push({ selector: r ? r.toString() : "core", style: o }) } return e } }; e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = n(6), o = { appendFromString: function (e) { var t = "" + e, n = void 0, o = void 0, a = void 0; function s() { t = t.length > n.length ? t.substr(n.length) : "" } function l() { o = o.length > a.length ? o.substr(a.length) : "" } for (t = t.replace(/[/][*](\s|.)+?[*][/]/g, ""); !t.match(/^\s*$/);) { var c = t.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/); if (!c) { r.error("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: " + t); break } n = c[0]; var u = c[1]; if ("core" !== u && new i(u)._private.invalid) r.error("Skipping parsing of block: Invalid selector found in string stylesheet: " + u), s(); else { var d = c[2], p = !1; o = d; for (var f = []; !o.match(/^\s*$/);) { var h = o.match(/^\s*(.+?)\s*:\s*(.+?)\s*;/); if (!h) { r.error("Skipping parsing of block: Invalid formatting of style property and value definitions found in:" + d), p = !0; break } a = h[0]; var g = h[1], m = h[2]; this.properties[g] ? this.parse(g, m) ? (f.push({ name: g, val: m }), l()) : (r.error("Skipping property: Invalid property definition in: " + a), l()) : (r.error("Skipping property: Invalid property name in: " + a), l()) } if (p) { s(); break } this.selector(u); for (var v = 0; v < f.length; v++) { var b = f[v]; this.css(b.name, b.val) } s() } } return this }, fromString: function (e) { return this.resetToDefault(), this.appendFromString(e), this } }; e.exports = o }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = {}; !function () { var e = r.regex.number, t = r.regex.rgbaNoBackRefs, n = r.regex.hslaNoBackRefs, a = r.regex.hex3, s = r.regex.hex6, l = function (e) { return "^" + e + "\\s*\\(\\s*([\\w\\.]+)\\s*\\)$" }, c = function (r) { var i = e + "|\\w+|" + t + "|" + n + "|" + a + "|" + s; return "^" + r + "\\s*\\(([\\w\\.]+)\\s*\\,\\s*(" + e + ")\\s*\\,\\s*(" + e + ")\\s*,\\s*(" + i + ")\\s*\\,\\s*(" + i + ")\\)$" }, u = ["^url\\s*\\(\\s*['\"]?(.+?)['\"]?\\s*\\)$", "^(none)$", "^(.+)$"]; o.types = { time: { number: !0, min: 0, units: "s|ms", implicitUnits: "ms" }, percent: { number: !0, min: 0, max: 100, units: "%", implicitUnits: "%" }, zeroOneNumber: { number: !0, min: 0, max: 1, unitless: !0 }, zeroOneNumbers: { number: !0, min: 0, max: 1, unitless: !0, multiple: !0 }, nOneOneNumber: { number: !0, min: -1, max: 1, unitless: !0 }, nonNegativeInt: { number: !0, min: 0, integer: !0, unitless: !0 }, position: { enums: ["parent", "origin"] }, nodeSize: { number: !0, min: 0, enums: ["label"] }, number: { number: !0, unitless: !0 }, numbers: { number: !0, unitless: !0, multiple: !0 }, positiveNumber: { number: !0, unitless: !0, min: 0, strictMin: !0 }, size: { number: !0, min: 0 }, bidirectionalSize: { number: !0 }, bidirectionalSizes: { number: !0, multiple: !0 }, sizeMaybePercent: { number: !0, min: 0, allowPercent: !0 }, paddingRelativeTo: { enums: ["width", "height", "average", "min", "max"] }, bgWH: { number: !0, min: 0, allowPercent: !0, enums: ["auto"], multiple: !0 }, bgPos: { number: !0, allowPercent: !0, multiple: !0 }, bgRelativeTo: { enums: ["inner", "include-padding"], multiple: !0 }, bgRepeat: { enums: ["repeat", "repeat-x", "repeat-y", "no-repeat"], multiple: !0 }, bgFit: { enums: ["none", "contain", "cover"], multiple: !0 }, bgCrossOrigin: { enums: ["anonymous", "use-credentials"], multiple: !0 }, bgClip: { enums: ["none", "node"] }, color: { color: !0 }, bool: { enums: ["yes", "no"] }, lineStyle: { enums: ["solid", "dotted", "dashed"] }, borderStyle: { enums: ["solid", "dotted", "dashed", "double"] }, curveStyle: { enums: ["bezier", "unbundled-bezier", "haystack", "segments"] }, fontFamily: { regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$' }, fontletiant: { enums: ["small-caps", "normal"] }, fontStyle: { enums: ["italic", "normal", "oblique"] }, fontWeight: { enums: ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900] }, textDecoration: { enums: ["none", "underline", "overline", "line-through"] }, textTransform: { enums: ["none", "uppercase", "lowercase"] }, textWrap: { enums: ["none", "wrap", "ellipsis"] }, textBackgroundShape: { enums: ["rectangle", "roundrectangle"] }, nodeShape: { enums: ["rectangle", "roundrectangle", "cutrectangle", "bottomroundrectangle", "barrel", "ellipse", "triangle", "square", "pentagon", "hexagon", "concavehexagon", "heptagon", "octagon", "tag", "star", "diamond", "vee", "rhomboid", "polygon"] }, compoundIncludeLabels: { enums: ["include", "exclude"] }, arrowShape: { enums: ["tee", "triangle", "triangle-tee", "triangle-cross", "triangle-backcurve", "half-triangle-overshot", "vee", "square", "circle", "diamond", "none"] }, arrowFill: { enums: ["filled", "hollow"] }, display: { enums: ["element", "none"] }, visibility: { enums: ["hidden", "visible"] }, zCompoundDepth: { enums: ["bottom", "orphan", "auto", "top"] }, zIndexCompare: { enums: ["auto", "manual"] }, valign: { enums: ["top", "center", "bottom"] }, halign: { enums: ["left", "center", "right"] }, text: { string: !0 }, data: { mapping: !0, regex: l("data") }, layoutData: { mapping: !0, regex: l("layoutData") }, scratch: { mapping: !0, regex: l("scratch") }, mapData: { mapping: !0, regex: c("mapData") }, mapLayoutData: { mapping: !0, regex: c("mapLayoutData") }, mapScratch: { mapping: !0, regex: c("mapScratch") }, fn: { mapping: !0, fn: !0 }, url: { regexes: u, singleRegexMatchValue: !0 }, urls: { regexes: u, singleRegexMatchValue: !0, multiple: !0 }, propList: { propList: !0 }, angle: { number: !0, units: "deg|rad", implicitUnits: "rad" }, textRotation: { number: !0, units: "deg|rad", implicitUnits: "rad", enums: ["none", "autorotate"] }, polygonPointList: { number: !0, multiple: !0, evenMultiple: !0, min: -1, max: 1, unitless: !0 }, edgeDistances: { enums: ["intersection", "node-position"] }, edgeEndpoint: { number: !0, multiple: !0, units: "%|px|em|deg|rad", implicitUnits: "px", enums: ["inside-to-node", "outside-to-node", "outside-to-line"], singleEnum: !0, validate: function (e, t) { switch (e.length) { case 2: return "deg" !== t[0] && "rad" !== t[0] && "deg" !== t[1] && "rad" !== t[1]; case 1: return i.string(e[0]) || "deg" === t[0] || "rad" === t[0]; default: return !1 } } }, easing: { regexes: ["^(spring)\\s*\\(\\s*(" + e + ")\\s*,\\s*(" + e + ")\\s*\\)$", "^(cubic-bezier)\\s*\\(\\s*(" + e + ")\\s*,\\s*(" + e + ")\\s*,\\s*(" + e + ")\\s*,\\s*(" + e + ")\\s*\\)$"], enums: ["linear", "ease", "ease-in", "ease-out", "ease-in-out", "ease-in-sine", "ease-out-sine", "ease-in-out-sine", "ease-in-quad", "ease-out-quad", "ease-in-out-quad", "ease-in-cubic", "ease-out-cubic", "ease-in-out-cubic", "ease-in-quart", "ease-out-quart", "ease-in-out-quart", "ease-in-quint", "ease-out-quint", "ease-in-out-quint", "ease-in-expo", "ease-out-expo", "ease-in-out-expo", "ease-in-circ", "ease-out-circ", "ease-in-out-circ"] } }; var d = { zeroNonZero: function (e, t) { return 0 === e && 0 !== t || 0 !== e && 0 === t }, anyDiff: function (e, t) { return e !== t } }, p = o.types, f = o.properties = [{ name: "label", type: p.text }, { name: "text-rotation", type: p.textRotation }, { name: "text-margin-x", type: p.bidirectionalSize }, { name: "text-margin-y", type: p.bidirectionalSize }, { name: "source-label", type: p.text }, { name: "source-text-rotation", type: p.textRotation }, { name: "source-text-margin-x", type: p.bidirectionalSize }, { name: "source-text-margin-y", type: p.bidirectionalSize }, { name: "source-text-offset", type: p.size }, { name: "target-label", type: p.text }, { name: "target-text-rotation", type: p.textRotation }, { name: "target-text-margin-x", type: p.bidirectionalSize }, { name: "target-text-margin-y", type: p.bidirectionalSize }, { name: "target-text-offset", type: p.size }, { name: "text-valign", type: p.valign }, { name: "text-halign", type: p.halign }, { name: "color", type: p.color }, { name: "text-outline-color", type: p.color }, { name: "text-outline-width", type: p.size }, { name: "text-outline-opacity", type: p.zeroOneNumber }, { name: "text-opacity", type: p.zeroOneNumber }, { name: "text-background-color", type: p.color }, { name: "text-background-opacity", type: p.zeroOneNumber }, { name: "text-background-padding", type: p.size }, { name: "text-border-opacity", type: p.zeroOneNumber }, { name: "text-border-color", type: p.color }, { name: "text-border-width", type: p.size }, { name: "text-border-style", type: p.borderStyle }, { name: "text-background-shape", type: p.textBackgroundShape }, { name: "text-transform", type: p.textTransform }, { name: "text-wrap", type: p.textWrap }, { name: "text-max-width", type: p.size }, { name: "text-events", type: p.bool }, { name: "font-family", type: p.fontFamily }, { name: "font-style", type: p.fontStyle }, { name: "font-weight", type: p.fontWeight }, { name: "font-size", type: p.size }, { name: "min-zoomed-font-size", type: p.size }, { name: "events", type: p.bool }, { name: "display", type: p.display, triggersZOrder: d.anyDiff }, { name: "visibility", type: p.visibility, triggersZOrder: d.anyDiff }, { name: "opacity", type: p.zeroOneNumber, triggersZOrder: d.zeroNonZero }, { name: "z-compound-depth", type: p.zCompoundDepth, triggersZOrder: d.anyDiff }, { name: "z-index-compare", type: p.zIndexCompare, triggersZOrder: d.anyDiff }, { name: "z-index", type: p.nonNegativeInt, triggersZOrder: d.anyDiff }, { name: "overlay-padding", type: p.size }, { name: "overlay-color", type: p.color }, { name: "overlay-opacity", type: p.zeroOneNumber }, { name: "transition-property", type: p.propList }, { name: "transition-duration", type: p.time }, { name: "transition-delay", type: p.time }, { name: "transition-timing-function", type: p.easing }, { name: "height", type: p.nodeSize }, { name: "width", type: p.nodeSize }, { name: "shape", type: p.nodeShape }, { name: "shape-polygon-points", type: p.polygonPointList }, { name: "background-color", type: p.color }, { name: "background-opacity", type: p.zeroOneNumber }, { name: "background-blacken", type: p.nOneOneNumber }, { name: "padding", type: p.sizeMaybePercent }, { name: "padding-relative-to", type: p.paddingRelativeTo }, { name: "border-color", type: p.color }, { name: "border-opacity", type: p.zeroOneNumber }, { name: "border-width", type: p.size }, { name: "border-style", type: p.borderStyle }, { name: "background-image", type: p.urls }, { name: "background-image-crossorigin", type: p.bgCrossOrigin }, { name: "background-image-opacity", type: p.zeroOneNumbers }, { name: "background-position-x", type: p.bgPos }, { name: "background-position-y", type: p.bgPos }, { name: "background-width-relative-to", type: p.bgRelativeTo }, { name: "background-height-relative-to", type: p.bgRelativeTo }, { name: "background-repeat", type: p.bgRepeat }, { name: "background-fit", type: p.bgFit }, { name: "background-clip", type: p.bgClip }, { name: "background-width", type: p.bgWH }, { name: "background-height", type: p.bgWH }, { name: "position", type: p.position }, { name: "compound-sizing-wrt-labels", type: p.compoundIncludeLabels }, { name: "min-width", type: p.size }, { name: "min-width-bias-left", type: p.sizeMaybePercent }, { name: "min-width-bias-right", type: p.sizeMaybePercent }, { name: "min-height", type: p.size }, { name: "min-height-bias-top", type: p.sizeMaybePercent }, { name: "min-height-bias-bottom", type: p.sizeMaybePercent }, { name: "line-style", type: p.lineStyle }, { name: "line-color", type: p.color }, { name: "curve-style", type: p.curveStyle }, { name: "haystack-radius", type: p.zeroOneNumber }, { name: "source-endpoint", type: p.edgeEndpoint }, { name: "target-endpoint", type: p.edgeEndpoint }, { name: "control-point-step-size", type: p.size }, { name: "control-point-distances", type: p.bidirectionalSizes }, { name: "control-point-weights", type: p.numbers }, { name: "segment-distances", type: p.bidirectionalSizes }, { name: "segment-weights", type: p.numbers }, { name: "edge-distances", type: p.edgeDistances }, { name: "arrow-scale", type: p.positiveNumber }, { name: "loop-direction", type: p.angle }, { name: "loop-sweep", type: p.angle }, { name: "source-distance-from-node", type: p.size }, { name: "target-distance-from-node", type: p.size }, { name: "ghost", type: p.bool }, { name: "ghost-offset-x", type: p.bidirectionalSize }, { name: "ghost-offset-y", type: p.bidirectionalSize }, { name: "ghost-opacity", type: p.zeroOneNumber }, { name: "selection-box-color", type: p.color }, { name: "selection-box-opacity", type: p.zeroOneNumber }, { name: "selection-box-border-color", type: p.color }, { name: "selection-box-border-width", type: p.size }, { name: "active-bg-color", type: p.color }, { name: "active-bg-opacity", type: p.zeroOneNumber }, { name: "active-bg-size", type: p.size }, { name: "outside-texture-bg-color", type: p.color }, { name: "outside-texture-bg-opacity", type: p.zeroOneNumber }], h = o.aliases = [{ name: "content", pointsTo: "label" }, { name: "control-point-distance", pointsTo: "control-point-distances" }, { name: "control-point-weight", pointsTo: "control-point-weights" }, { name: "edge-text-rotation", pointsTo: "text-rotation" }, { name: "padding-left", pointsTo: "padding" }, { name: "padding-right", pointsTo: "padding" }, { name: "padding-top", pointsTo: "padding" }, { name: "padding-bottom", pointsTo: "padding" }]; o.pieBackgroundN = 16, f.push({ name: "pie-size", type: p.sizeMaybePercent }); for (var g = 1; g <= o.pieBackgroundN; g++)f.push({ name: "pie-" + g + "-background-color", type: p.color }), f.push({ name: "pie-" + g + "-background-size", type: p.percent }), f.push({ name: "pie-" + g + "-background-opacity", type: p.zeroOneNumber }); var m = o.arrowPrefixes = ["source", "mid-source", "target", "mid-target"];[{ name: "arrow-shape", type: p.arrowShape }, { name: "arrow-color", type: p.color }, { name: "arrow-fill", type: p.arrowFill }].forEach((function (e) { m.forEach((function (t) { var n = t + "-" + e.name, r = e.type; f.push({ name: n, type: r }) })) }), {}), o.propertyNames = f.map((function (e) { return e.name })); for (var v = 0; v < f.length; v++) { var b = f[v]; f[b.name] = b } for (var y = 0; y < h.length; y++) { var x = h[y], w = f[x.pointsTo], k = { name: x.name, alias: !0, pointsTo: w }; f.push(k), f[x.name] = k } }(), o.getDefaultProperty = function (e) { return this.getDefaultProperties()[e] }, o.getDefaultProperties = r.memoize((function () { for (var e = r.extend({ events: "yes", "text-events": "no", "text-valign": "top", "text-halign": "center", color: "#000", "text-outline-color": "#000", "text-outline-width": 0, "text-outline-opacity": 1, "text-opacity": 1, "text-decoration": "none", "text-transform": "none", "text-wrap": "none", "text-max-width": 9999, "text-background-color": "#000", "text-background-opacity": 0, "text-background-shape": "rectangle", "text-background-padding": 0, "text-border-opacity": 0, "text-border-width": 0, "text-border-style": "solid", "text-border-color": "#000", "font-family": "Helvetica Neue, Helvetica, sans-serif", "font-style": "normal", "font-weight": "normal", "font-size": 16, "min-zoomed-font-size": 0, "text-rotation": "none", "source-text-rotation": "none", "target-text-rotation": "none", visibility: "visible", display: "element", opacity: 1, "z-compound-depth": "auto", "z-index-compare": "auto", "z-index": 0, label: "", "text-margin-x": 0, "text-margin-y": 0, "source-label": "", "source-text-offset": 0, "source-text-margin-x": 0, "source-text-margin-y": 0, "target-label": "", "target-text-offset": 0, "target-text-margin-x": 0, "target-text-margin-y": 0, "overlay-opacity": 0, "overlay-color": "#000", "overlay-padding": 10, "transition-property": "none", "transition-duration": 0, "transition-delay": 0, "transition-timing-function": "linear", "background-blacken": 0, "background-color": "#999", "background-opacity": 1, "background-image": "none", "background-image-crossorigin": "anonymous", "background-image-opacity": 1, "background-position-x": "50%", "background-position-y": "50%", "background-width-relative-to": "include-padding", "background-height-relative-to": "include-padding", "background-repeat": "no-repeat", "background-fit": "none", "background-clip": "node", "background-width": "auto", "background-height": "auto", "border-color": "#000", "border-opacity": 1, "border-width": 0, "border-style": "solid", height: 30, width: 30, shape: "ellipse", "shape-polygon-points": "-1, -1, 1, -1, 1, 1, -1, 1", ghost: "no", "ghost-offset-y": 0, "ghost-offset-x": 0, "ghost-opacity": 0, padding: 0, "padding-relative-to": "width", position: "origin", "compound-sizing-wrt-labels": "include", "min-width": 0, "min-width-bias-left": 0, "min-width-bias-right": 0, "min-height": 0, "min-height-bias-top": 0, "min-height-bias-bottom": 0 }, { "pie-size": "100%" }, [{ name: "pie-{{i}}-background-color", value: "black" }, { name: "pie-{{i}}-background-size", value: "0%" }, { name: "pie-{{i}}-background-opacity", value: 1 }].reduce((function (e, t) { for (var n = 1; n <= o.pieBackgroundN; n++) { var r = t.name.replace("{{i}}", n), i = t.value; e[r] = i } return e }), {}), { "line-style": "solid", "line-color": "#999", "control-point-step-size": 40, "control-point-weights": .5, "segment-weights": .5, "segment-distances": 20, "edge-distances": "intersection", "curve-style": "bezier", "haystack-radius": 0, "arrow-scale": 1, "loop-direction": "-45deg", "loop-sweep": "-90deg", "source-distance-from-node": 0, "target-distance-from-node": 0, "source-endpoint": "outside-to-node", "target-endpoint": "outside-to-node" }, [{ name: "arrow-shape", value: "none" }, { name: "arrow-color", value: "#999" }, { name: "arrow-fill", value: "filled" }].reduce((function (e, t) { return o.arrowPrefixes.forEach((function (n) { var r = n + "-" + t.name, i = t.value; e[r] = i })), e }), {})), t = {}, n = 0; n < this.properties.length; n++) { var i = this.properties[n]; if (!i.pointsTo) { var a = i.name, s = e[a], l = this.parse(a, s); t[a] = l } } return t })), o.addDefaultStylesheet = function () { this.selector("$node > node").css({ shape: "rectangle", padding: 10, "background-color": "#eee", "border-color": "#ccc", "border-width": 1 }).selector("edge").css({ width: 3, "curve-style": "haystack" }).selector(":parent <-> node").css({ "curve-style": "bezier", "source-endpoint": "outside-to-line", "target-endpoint": "outside-to-line" }).selector(":selected").css({ "background-color": "#0169D9", "line-color": "#0169D9", "source-arrow-color": "#0169D9", "target-arrow-color": "#0169D9", "mid-source-arrow-color": "#0169D9", "mid-target-arrow-color": "#0169D9" }).selector("node:parent:selected").css({ "background-color": "#CCE1F9", "border-color": "#aec8e5" }).selector(":active").css({ "overlay-color": "black", "overlay-padding": 10, "overlay-opacity": .25 }).selector("core").css({ "selection-box-color": "#ddd", "selection-box-opacity": .65, "selection-box-border-color": "#aaa", "selection-box-border-width": 1, "active-bg-color": "black", "active-bg-opacity": .15, "active-bg-size": 30, "outside-texture-bg-color": "#000", "outside-texture-bg-opacity": .125 }), this.defaultLength = this.length }, e.exports = o }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = n(2), a = { parse: function (e, t, n, o) { if (i.fn(t)) return this.parseImplWarn(e, t, n, o); var a = [e, t, n, "mapping" === o || !0 === o || !1 === o || null == o ? "dontcare" : o].join("$"), s = this.propCache = this.propCache || {}, l = void 0; return (l = s[a]) || (l = s[a] = this.parseImplWarn(e, t, n, o)), (n || "mapping" === o) && (l = r.copy(l)) && (l.value = r.copy(l.value)), l }, parseImplWarn: function (e, t, n, i) { var o = this.parseImpl(e, t, n, i); return o || null == t || r.error("The style property `%s: %s` is invalid", e, t), o }, parseImpl: function (e, t, n, a) { e = r.camel2dash(e); var s = this.properties[e], l = t, c = this.types; if (!s) return null; if (void 0 === t) return null; s.alias && (s = s.pointsTo, e = s.name); var u = i.string(t); u && (t = t.trim()); var d = s.type; if (!d) return null; if (n && ("" === t || null === t)) return { name: e, value: t, bypass: !0, deleteBypass: !0 }; if (i.fn(t)) return { name: e, value: t, strValue: "fn", mapped: c.fn, bypass: n }; var p = void 0, f = void 0; if (!u || a); else { if (p = new RegExp(c.data.regex).exec(t)) { if (n) return !1; var h = c.data; return { name: e, value: p, strValue: "" + t, mapped: h, field: p[1], bypass: n } } if (f = new RegExp(c.mapData.regex).exec(t)) { if (n) return !1; if (d.multiple) return !1; var g = c.mapData; if (!d.color && !d.number) return !1; var m = this.parse(e, f[4]); if (!m || m.mapped) return !1; var v = this.parse(e, f[5]); if (!v || v.mapped) return !1; if (m.value === v.value) return !1; if (d.color) { var b = m.value, y = v.value; if (!(b[0] !== y[0] || b[1] !== y[1] || b[2] !== y[2] || b[3] !== y[3] && (null != b[3] && 1 !== b[3] || null != y[3] && 1 !== y[3]))) return !1 } return { name: e, value: f, strValue: "" + t, mapped: g, field: f[1], fieldMin: parseFloat(f[2]), fieldMax: parseFloat(f[3]), valueMin: m.value, valueMax: v.value, bypass: n } } } if (d.multiple && "multiple" !== a) { var x = void 0; if (x = u ? t.split(/\s+/) : i.array(t) ? t : [t], d.evenMultiple && x.length % 2 != 0) return null; for (var w = [], k = [], A = [], E = !1, S = 0; S < x.length; S++) { var $ = this.parse(e, x[S], n, "multiple"); E = E || i.string($.value), w.push($.value), A.push(null != $.pfValue ? $.pfValue : $.value), k.push($.units) } return d.validate && !d.validate(w, k) ? null : d.singleEnum && E ? 1 === w.length && i.string(w[0]) ? { name: e, value: w[0], strValue: w[0], bypass: n } : null : { name: e, value: w, pfValue: A, strValue: w.map((function (e, t) { return e + (k[t] || "") })).join(" "), bypass: n, units: k } } var C = function () { for (var r = 0; r < d.enums.length; r++)if (d.enums[r] === t) return { name: e, value: t, strValue: "" + t, bypass: n }; return null }; if (d.number) { var _ = void 0, O = "px"; if (d.units && (_ = d.units), d.implicitUnits && (O = d.implicitUnits), !d.unitless) if (u) { var T = "px|em" + (d.allowPercent ? "|\\%" : ""); _ && (T = _); var j = t.match("^(" + r.regex.number + ")(" + T + ")?$"); j && (t = j[1], _ = j[2] || O) } else _ && !d.implicitUnits || (_ = O); if (t = parseFloat(t), isNaN(t) && void 0 === d.enums) return null; if (isNaN(t) && void 0 !== d.enums) return t = l, C(); if (d.integer && !i.integer(t)) return null; if (void 0 !== d.min && (t < d.min || d.strictMin && t === d.min) || void 0 !== d.max && (t > d.max || d.strictMax && t === d.max)) return null; var P = { name: e, value: t, strValue: "" + t + (_ || ""), units: _, bypass: n }; return d.unitless || "px" !== _ && "em" !== _ ? P.pfValue = t : P.pfValue = "px" !== _ && _ ? this.getEmSizeInPixels() * t : t, "ms" !== _ && "s" !== _ || (P.pfValue = "ms" === _ ? t : 1e3 * t), "deg" !== _ && "rad" !== _ || (P.pfValue = "rad" === _ ? t : o.deg2rad(t)), "%" === _ && (P.pfValue = t / 100), P } if (d.propList) { var D = [], R = "" + t; if ("none" === R); else { for (var I = R.split(","), N = 0; N < I.length; N++) { var M = I[N].trim(); this.properties[M] && D.push(M) } if (0 === D.length) return null } return { name: e, value: D, strValue: 0 === D.length ? "none" : D.join(", "), bypass: n } } if (d.color) { var z = r.color2tuple(t); return z ? { name: e, value: z, pfValue: z, strValue: "" + t, bypass: n } : null } if (d.regex || d.regexes) { if (d.enums) { var L = C(); if (L) return L } for (var B = d.regexes ? d.regexes : [d.regex], F = 0; F < B.length; F++) { var q = new RegExp(B[F]).exec(t); if (q) return { name: e, value: d.singleRegexMatchValue ? q[1] : q, strValue: "" + t, bypass: n } } return null } return d.string ? { name: e, value: "" + t, strValue: "" + t, bypass: n } : d.enums ? C() : null } }; e.exports = a }, function (e, t, n) { "use strict"; var r = n(0), i = n(3), o = n(2), a = { autolock: function (e) { return void 0 === e ? this._private.autolock : (this._private.autolock = !!e, this) }, autoungrabify: function (e) { return void 0 === e ? this._private.autoungrabify : (this._private.autoungrabify = !!e, this) }, autounselectify: function (e) { return void 0 === e ? this._private.autounselectify : (this._private.autounselectify = !!e, this) }, panningEnabled: function (e) { return void 0 === e ? this._private.panningEnabled : (this._private.panningEnabled = !!e, this) }, userPanningEnabled: function (e) { return void 0 === e ? this._private.userPanningEnabled : (this._private.userPanningEnabled = !!e, this) }, zoomingEnabled: function (e) { return void 0 === e ? this._private.zoomingEnabled : (this._private.zoomingEnabled = !!e, this) }, userZoomingEnabled: function (e) { return void 0 === e ? this._private.userZoomingEnabled : (this._private.userZoomingEnabled = !!e, this) }, boxSelectionEnabled: function (e) { return void 0 === e ? this._private.boxSelectionEnabled : (this._private.boxSelectionEnabled = !!e, this) }, pan: function () { var e = arguments, t = this._private.pan, n = void 0, i = void 0, o = void 0, a = void 0, s = void 0; switch (e.length) { case 0: return t; case 1: if (r.string(e[0])) return t[n = e[0]]; if (r.plainObject(e[0])) { if (!this._private.panningEnabled) return this; a = (o = e[0]).x, s = o.y, r.number(a) && (t.x = a), r.number(s) && (t.y = s), this.emit("pan viewport") } break; case 2: if (!this._private.panningEnabled) return this; n = e[0], i = e[1], "x" !== n && "y" !== n || !r.number(i) || (t[n] = i), this.emit("pan viewport") }return this.notify({ type: "viewport" }), this }, panBy: function (e, t) { var n = arguments, i = this._private.pan, o = void 0, a = void 0, s = void 0, l = void 0, c = void 0; if (!this._private.panningEnabled) return this; switch (n.length) { case 1: r.plainObject(e) && (l = (s = n[0]).x, c = s.y, r.number(l) && (i.x += l), r.number(c) && (i.y += c), this.emit("pan viewport")); break; case 2: a = t, "x" !== (o = e) && "y" !== o || !r.number(a) || (i[o] += a), this.emit("pan viewport") }return this.notify({ type: "viewport" }), this }, fit: function (e, t) { var n = this.getFitViewport(e, t); if (n) { var r = this._private; r.zoom = n.zoom, r.pan = n.pan, this.emit("pan zoom viewport"), this.notify({ type: "viewport" }) } return this }, getFitViewport: function (e, t) { if (r.number(e) && void 0 === t && (t = e, e = void 0), this._private.panningEnabled && this._private.zoomingEnabled) { var n = void 0; if (r.string(e)) { var i = e; e = this.$(i) } else if (r.boundingBox(e)) { var o = e; (n = { x1: o.x1, y1: o.y1, x2: o.x2, y2: o.y2 }).w = n.x2 - n.x1, n.h = n.y2 - n.y1 } else r.elementOrCollection(e) || (e = this.mutableElements()); if (!r.elementOrCollection(e) || !e.empty()) { n = n || e.boundingBox(); var a = this.width(), s = this.height(), l = void 0; if (t = r.number(t) ? t : 0, !isNaN(a) && !isNaN(s) && a > 0 && s > 0 && !isNaN(n.w) && !isNaN(n.h) && n.w > 0 && n.h > 0) return { zoom: l = (l = (l = Math.min((a - 2 * t) / n.w, (s - 2 * t) / n.h)) > this._private.maxZoom ? this._private.maxZoom : l) < this._private.minZoom ? this._private.minZoom : l, pan: { x: (a - l * (n.x1 + n.x2)) / 2, y: (s - l * (n.y1 + n.y2)) / 2 } } } } }, minZoom: function (e) { return void 0 === e ? this._private.minZoom : (r.number(e) && (this._private.minZoom = e), this) }, maxZoom: function (e) { return void 0 === e ? this._private.maxZoom : (r.number(e) && (this._private.maxZoom = e), this) }, getZoomedViewport: function (e) { var t = this._private, n = t.pan, i = t.zoom, a = void 0, s = void 0, l = !1; if (t.zoomingEnabled || (l = !0), r.number(e) ? s = e : r.plainObject(e) && (s = e.level, null != e.position ? a = o.modelToRenderedPosition(e.position, i, n) : null != e.renderedPosition && (a = e.renderedPosition), null == a || t.panningEnabled || (l = !0)), s = (s = s > t.maxZoom ? t.maxZoom : s) < t.minZoom ? t.minZoom : s, l || !r.number(s) || s === i || null != a && (!r.number(a.x) || !r.number(a.y))) return null; if (null != a) { var c = n, u = i, d = s; return { zoomed: !0, panned: !0, zoom: d, pan: { x: -d / u * (a.x - c.x) + a.x, y: -d / u * (a.y - c.y) + a.y } } } return { zoomed: !0, panned: !1, zoom: s, pan: n } }, zoom: function (e) { if (void 0 === e) return this._private.zoom; var t = this.getZoomedViewport(e), n = this._private; return null != t && t.zoomed ? (n.zoom = t.zoom, t.panned && (n.pan.x = t.pan.x, n.pan.y = t.pan.y), this.emit("zoom" + (t.panned ? " pan" : "") + " viewport"), this.notify({ type: "viewport" }), this) : this }, viewport: function (e) { var t = this._private, n = !0, i = !0, o = [], a = !1, s = !1; if (!e) return this; if (r.number(e.zoom) || (n = !1), r.plainObject(e.pan) || (i = !1), !n && !i) return this; if (n) { var l = e.zoom; l < t.minZoom || l > t.maxZoom || !t.zoomingEnabled ? a = !0 : (t.zoom = l, o.push("zoom")) } if (i && (!a || !e.cancelOnFailedZoom) && t.panningEnabled) { var c = e.pan; r.number(c.x) && (t.pan.x = c.x, s = !1), r.number(c.y) && (t.pan.y = c.y, s = !1), s || o.push("pan") } return o.length > 0 && (o.push("viewport"), this.emit(o.join(" ")), this.notify({ type: "viewport" })), this }, center: function (e) { var t = this.getCenterPan(e); return t && (this._private.pan = t, this.emit("pan viewport"), this.notify({ type: "viewport" })), this }, getCenterPan: function (e, t) { if (this._private.panningEnabled) { if (r.string(e)) { var n = e; e = this.mutableElements().filter(n) } else r.elementOrCollection(e) || (e = this.mutableElements()); if (0 !== e.length) { var i = e.boundingBox(), o = this.width(), a = this.height(); return { x: (o - (t = void 0 === t ? this._private.zoom : t) * (i.x1 + i.x2)) / 2, y: (a - t * (i.y1 + i.y2)) / 2 } } } }, reset: function () { return this._private.panningEnabled && this._private.zoomingEnabled ? (this.viewport({ pan: { x: 0, y: 0 }, zoom: 1 }), this) : this }, invalidateSize: function () { this._private.sizeCache = null }, size: function () { var e, t, n = this._private, r = n.container; return n.sizeCache = n.sizeCache || (r ? (e = i.getComputedStyle(r), t = function (t) { return parseFloat(e.getPropertyValue(t)) }, { width: r.clientWidth - t("padding-left") - t("padding-right"), height: r.clientHeight - t("padding-top") - t("padding-bottom") }) : { width: 1, height: 1 }) }, width: function () { return this.size().width }, height: function () { return this.size().height }, extent: function () { var e = this._private.pan, t = this._private.zoom, n = this.renderedExtent(), r = { x1: (n.x1 - e.x) / t, x2: (n.x2 - e.x) / t, y1: (n.y1 - e.y) / t, y2: (n.y2 - e.y) / t }; return r.w = r.x2 - r.x1, r.h = r.y2 - r.y1, r }, renderedExtent: function () { var e = this.width(), t = this.height(); return { x1: 0, y1: 0, x2: e, y2: t, w: e, h: t } } }; a.centre = a.center, a.autolockNodes = a.autolock, a.autoungrabifyNodes = a.autoungrabify, e.exports = a }, function (e, t, n) { "use strict"; var r = n(1), i = n(4), o = n(7), a = n(12), s = n(95), l = n(0), c = n(11), u = {}, d = {}; function p(e, t, n) { var s = n, d = function (n) { r.error("Can not register `" + t + "` for `" + e + "` since `" + n + "` already exists in the prototype and can not be overridden") }; if ("core" === e) { if (a.prototype[t]) return d(t); a.prototype[t] = n } else if ("collection" === e) { if (o.prototype[t]) return d(t); o.prototype[t] = n } else if ("layout" === e) { for (var p = function (e) { this.options = e, n.call(this, e), l.plainObject(this._private) || (this._private = {}), this._private.cy = e.cy, this._private.listeners = [], this.createEmitter() }, h = p.prototype = Object.create(n.prototype), g = [], m = 0; m < g.length; m++) { var v = g[m]; h[v] = h[v] || function () { return this } } h.start && !h.run ? h.run = function () { return this.start(), this } : !h.start && h.run && (h.start = function () { return this.run(), this }); var b = n.prototype.stop; h.stop = function () { var e = this.options; if (e && e.animate) { var t = this.animations; if (t) for (var n = 0; n < t.length; n++)t[n].stop() } return b ? b.call(this) : this.emit("layoutstop"), this }, h.destroy || (h.destroy = function () { return this }), h.cy = function () { return this._private.cy }; var y = function (e) { return e._private.cy }; r.assign(h, { createEmitter: function () { return this._private.emitter = new c({ eventFields: function (e) { return { layout: e, cy: y(e), target: e } }, bubble: function () { return !0 }, parent: function (e) { return y(e) }, context: this }), this }, emitter: function () { return this._private.emitter }, on: function (e, t) { return this.emitter().on(e, t), this }, one: function (e, t) { return this.emitter().one(e, t), this }, once: function (e, t) { return this.emitter().one(e, t), this }, removeListener: function (e, t) { return this.emitter().removeListener(e, t), this }, emit: function (e, t) { return this.emitter().emit(e, t), this } }), i.eventAliasesOn(h), s = p } else if ("renderer" === e && "null" !== t && "base" !== t) { var x = f("renderer", "base"), w = x.prototype, k = n, A = n.prototype, E = function () { x.apply(this, arguments), k.apply(this, arguments) }, S = E.prototype; for (var $ in w) { var C = w[$]; if (null != A[$]) return d($); S[$] = C } for (var _ in A) S[_] = A[_]; w.clientFunctions.forEach((function (e) { S[e] = S[e] || function () { r.error("Renderer does not implement `renderer." + e + "()` on its prototype") } })), s = E } return r.setMap({ map: u, keys: [e, t], value: s }) } function f(e, t) { return r.getMap({ map: u, keys: [e, t] }) } function h(e, t, n, i, o) { return r.setMap({ map: d, keys: [e, t, n, i], value: o }) } function g(e, t, n, i) { return r.getMap({ map: d, keys: [e, t, n, i] }) } var m = function () { return 2 === arguments.length ? f.apply(null, arguments) : 3 === arguments.length ? p.apply(null, arguments) : 4 === arguments.length ? g.apply(null, arguments) : 5 === arguments.length ? h.apply(null, arguments) : void r.error("Invalid extension access syntax") }; a.prototype.extension = m, s.forEach((function (e) { e.extensions.forEach((function (t) { p(e.type, t.name, t.impl) })) })), e.exports = m }, function (e, t, n) { "use strict"; e.exports = [{ type: "layout", extensions: n(96) }, { type: "renderer", extensions: n(105) }] }, function (e, t, n) { "use strict"; e.exports = [{ name: "breadthfirst", impl: n(97) }, { name: "circle", impl: n(98) }, { name: "concentric", impl: n(99) }, { name: "cose", impl: n(100) }, { name: "grid", impl: n(101) }, { name: "null", impl: n(102) }, { name: "preset", impl: n(103) }, { name: "random", impl: n(104) }] }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = n(0), a = { fit: !0, directed: !1, padding: 30, circle: !1, spacingFactor: 1.75, boundingBox: void 0, avoidOverlap: !0, nodeDimensionsIncludeLabels: !1, roots: void 0, maximalAdjustments: 0, animate: !1, animationDuration: 500, animationEasing: void 0, animateFilter: function (e, t) { return !0 }, ready: void 0, stop: void 0, transform: function (e, t) { return t } }; function s(e) { this.options = r.extend({}, a, e) } s.prototype.run = function () { var e = this.options, t = e, n = e.cy, r = t.eles, a = r.nodes().not(":parent"), s = r, l = i.makeBoundingBox(t.boundingBox ? t.boundingBox : { x1: 0, y1: 0, w: n.width(), h: n.height() }), c = void 0; if (o.elementOrCollection(t.roots)) c = t.roots; else if (o.array(t.roots)) { for (var u = [], d = 0; d < t.roots.length; d++) { var p = t.roots[d], f = n.getElementById(p); u.push(f) } c = n.collection(u) } else if (o.string(t.roots)) c = n.$(t.roots); else if (t.directed) c = a.roots(); else { for (var h = [], g = a, m = function () { var e = n.collection(); r.bfs({ roots: g[0], visit: function (t, n, r, i, o) { e = e.add(t) }, directed: !1 }), g = g.not(e), h.push(e) }; g.length > 0;)m(); c = n.collection(); for (var v = function (e) { var t = h[e], n = t.maxDegree(!1), r = t.filter((function (e) { return e.degree(!1) === n })); c = c.add(r) }, b = 0; b < h.length; b++)v(b) } var y = [], x = {}, w = {}, k = {}, A = {}, E = {}; s.bfs({ roots: c, directed: t.directed, visit: function (e, t, n, r, i) { var o = e[0], a = o.id(); if (y[i] || (y[i] = []), y[i].push(o), x[a] = !0, w[a] = i, k[a] = n, A[a] = t, n) { var s = n.id(); (E[s] = E[s] || []).push(e) } } }); for (var S = [], $ = 0; $ < a.length; $++) { var C = a[$]; x[C.id()] || S.push(C) } for (var _ = 3 * S.length, O = 0; 0 !== S.length && O < _;) { for (var T = S.shift(), j = T.neighborhood().nodes(), P = !1, D = 0; D < j.length; D++) { var R = w[j[D].id()]; if (void 0 !== R) { y[R].push(T), P = !0; break } } P || S.push(T), O++ } for (; 0 !== S.length;) { var I = S.shift(); 0 === y.length && y.push([]), y[0].push(I) } var N = function () { for (var e = 0; e < y.length; e++)for (var t = y[e], n = 0; n < t.length; n++) { var r = t[n]; null != r ? r._private.scratch.breadthfirst = { depth: e, index: n } : (t.splice(n, 1), n--) } }; N(); for (var M = function (e) { for (var t = e.connectedEdges((function (t) { return t.data("target") === e.id() })), n = e._private.scratch.breadthfirst, r = 0, i = void 0, o = 0; o < t.length; o++) { var a = t[o].source()[0], s = a._private.scratch.breadthfirst; n.depth <= s.depth && r < s.depth && (r = s.depth, i = a) } return i }, z = 0; z < t.maximalAdjustments; z++) { for (var L = y.length, B = [], F = 0; F < L; F++)for (var q = y[F], V = q.length, U = 0; U < V; U++) { var H = q[U], G = H._private.scratch.breadthfirst, W = M(H); W && (G.intEle = W, B.push(H)) } for (var Y = 0; Y < B.length; Y++) { var X = B[Y], Z = X._private.scratch.breadthfirst, Q = Z.intEle._private.scratch.breadthfirst; y[Z.depth][Z.index] = null; for (var J = Q.depth + 1; J > y.length - 1;)y.push([]); y[J].push(X), Z.depth = J, Z.index = y[J].length - 1 } N() } var K = 0; if (t.avoidOverlap) for (var ee = 0; ee < a.length; ee++) { var te = a[ee].layoutDimensions(t), ne = te.w, re = te.h; K = Math.max(K, ne, re) } for (var ie = {}, oe = function (e) { if (ie[e.id()]) return ie[e.id()]; for (var t = e._private.scratch.breadthfirst.depth, n = e.neighborhood().nodes().not(":parent").intersection(a), r = 0, i = 0, o = 0; o < n.length; o++) { var s = n[o]._private.scratch.breadthfirst, l = s.index, c = s.depth, u = y[c].length; (t > c || 0 === t) && (r += l / u, i++) } return r /= i = Math.max(1, i), 0 === i && (r = void 0), ie[e.id()] = r, r }, ae = function (e, t) { return oe(e) - oe(t) }, se = 0; se < 3; se++) { for (var le = 0; le < y.length; le++)y[le] = y[le].sort(ae); N() } for (var ce = 0, ue = 0; ue < y.length; ue++)ce = Math.max(y[ue].length, ce); for (var de = l.x1 + l.w / 2, pe = l.x1 + l.h / 2, fe = function (e, n) { var r = e._private.scratch.breadthfirst, i = r.depth, o = r.index, a = y[i].length, s = Math.max(l.w / (a + 1), K), c = Math.max(l.h / (y.length + 1), K), u = Math.min(l.w / 2 / y.length, l.h / 2 / y.length); if (u = Math.max(u, K), t.circle) { if (t.circle) { var d = u * i + u - (y.length > 0 && y[0].length <= 3 ? u / 2 : 0), p = 2 * Math.PI / y[i].length * o; return 0 === i && 1 === y[0].length && (d = 1), { x: de + d * Math.cos(p), y: pe + d * Math.sin(p) } } return { x: de + (o + 1 - (a + 1) / 2) * s, y: (i + 1) * c } } var f = { x: de + (o + 1 - (a + 1) / 2) * s, y: (i + 1) * c }; return f }, he = {}, ge = y.length - 1; ge >= 0; ge--)for (var me = y[ge], ve = 0; ve < me.length; ve++) { var be = me[ve]; he[be.id()] = fe(be, y.length) } return a.layoutPositions(this, t, (function (e) { return he[e.id()] })), this }, e.exports = s }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = n(0), a = { fit: !0, padding: 30, boundingBox: void 0, avoidOverlap: !0, nodeDimensionsIncludeLabels: !1, spacingFactor: void 0, radius: void 0, startAngle: 1.5 * Math.PI, sweep: void 0, clockwise: !0, sort: void 0, animate: !1, animationDuration: 500, animationEasing: void 0, animateFilter: function (e, t) { return !0 }, ready: void 0, stop: void 0, transform: function (e, t) { return t } }; function s(e) { this.options = r.extend({}, a, e) } s.prototype.run = function () { var e = this.options, t = e, n = e.cy, r = t.eles, a = void 0 !== t.counterclockwise ? !t.counterclockwise : t.clockwise, s = r.nodes().not(":parent"); t.sort && (s = s.sort(t.sort)); for (var l = i.makeBoundingBox(t.boundingBox ? t.boundingBox : { x1: 0, y1: 0, w: n.width(), h: n.height() }), c = l.x1 + l.w / 2, u = l.y1 + l.h / 2, d = (void 0 === t.sweep ? 2 * Math.PI - 2 * Math.PI / s.length : t.sweep) / Math.max(1, s.length - 1), p = void 0, f = 0, h = 0; h < s.length; h++) { var g = s[h].layoutDimensions(t), m = g.w, v = g.h; f = Math.max(f, m, v) } if (p = o.number(t.radius) ? t.radius : s.length <= 1 ? 0 : Math.min(l.h, l.w) / 2 - f, s.length > 1 && t.avoidOverlap) { f *= 1.75; var b = Math.cos(d) - Math.cos(0), y = Math.sin(d) - Math.sin(0), x = Math.sqrt(f * f / (b * b + y * y)); p = Math.max(x, p) } return s.layoutPositions(this, t, (function (e, n) { var r = t.startAngle + n * d * (a ? 1 : -1), i = p * Math.cos(r), o = p * Math.sin(r); return { x: c + i, y: u + o } })), this }, e.exports = s }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = { fit: !0, padding: 30, startAngle: 1.5 * Math.PI, sweep: void 0, clockwise: !0, equidistant: !1, minNodeSpacing: 10, boundingBox: void 0, avoidOverlap: !0, nodeDimensionsIncludeLabels: !1, height: void 0, width: void 0, spacingFactor: void 0, concentric: function (e) { return e.degree() }, levelWidth: function (e) { return e.maxDegree() / 4 }, animate: !1, animationDuration: 500, animationEasing: void 0, animateFilter: function (e, t) { return !0 }, ready: void 0, stop: void 0, transform: function (e, t) { return t } }; function a(e) { this.options = r.extend({}, o, e) } a.prototype.run = function () { for (var e = this.options, t = e, n = void 0 !== t.counterclockwise ? !t.counterclockwise : t.clockwise, r = e.cy, o = t.eles.nodes().not(":parent"), a = i.makeBoundingBox(t.boundingBox ? t.boundingBox : { x1: 0, y1: 0, w: r.width(), h: r.height() }), s = a.x1 + a.w / 2, l = a.y1 + a.h / 2, c = [], u = (t.startAngle, 0), d = 0; d < o.length; d++) { var p, f = o[d]; p = t.concentric(f), c.push({ value: p, node: f }), f._private.scratch.concentric = p } o.updateStyle(); for (var h = 0; h < o.length; h++) { var g = o[h].layoutDimensions(t); u = Math.max(u, g.w, g.h) } c.sort((function (e, t) { return t.value - e.value })); for (var m = t.levelWidth(o), v = [[]], b = v[0], y = 0; y < c.length; y++) { var x = c[y]; b.length > 0 && Math.abs(b[0].value - x.value) >= m && (b = [], v.push(b)), b.push(x) } var w = u + t.minNodeSpacing; if (!t.avoidOverlap) { var k = v.length > 0 && v[0].length > 1, A = (Math.min(a.w, a.h) / 2 - w) / (v.length + k ? 1 : 0); w = Math.min(w, A) } for (var E = 0, S = 0; S < v.length; S++) { var $ = v[S], C = void 0 === t.sweep ? 2 * Math.PI - 2 * Math.PI / $.length : t.sweep, _ = $.dTheta = C / Math.max(1, $.length - 1); if ($.length > 1 && t.avoidOverlap) { var O = Math.cos(_) - Math.cos(0), T = Math.sin(_) - Math.sin(0), j = Math.sqrt(w * w / (O * O + T * T)); E = Math.max(j, E) } $.r = E, E += w } if (t.equidistant) { for (var P = 0, D = 0, R = 0; R < v.length; R++) { var I = v[R].r - D; P = Math.max(P, I) } D = 0; for (var N = 0; N < v.length; N++) { var M = v[N]; 0 === N && (D = M.r), M.r = D, D += P } } for (var z = {}, L = 0; L < v.length; L++)for (var B = v[L], F = B.dTheta, q = B.r, V = 0; V < B.length; V++) { var U = B[V], H = t.startAngle + (n ? 1 : -1) * F * V, G = { x: s + q * Math.cos(H), y: l + q * Math.sin(H) }; z[U.node.id()] = G } return o.layoutPositions(this, t, (function (e) { var t = e.id(); return z[t] })), this }, e.exports = a }, function (e, t, n) { "use strict"; var r, i = n(1), o = n(2), a = n(0), s = n(5), l = { ready: function () { }, stop: function () { }, animate: !0, animationEasing: void 0, animationDuration: void 0, animateFilter: function (e, t) { return !0 }, animationThreshold: 250, refresh: 20, fit: !0, padding: 30, boundingBox: void 0, nodeDimensionsIncludeLabels: !1, randomize: !1, componentSpacing: 40, nodeRepulsion: function (e) { return 2048 }, nodeOverlap: 4, idealEdgeLength: function (e) { return 32 }, edgeElasticity: function (e) { return 32 }, nestingFactor: 1.2, gravity: 1, numIter: 1e3, initialTemp: 1e3, coolingFactor: .99, minTemp: 1, weaver: !1 }; function c(e) { this.options = i.extend({}, l, e), this.options.layout = this } c.prototype.run = function () { var e = this.options, t = e.cy, n = this, o = this.thread, l = e.weaver ? e.weaver.Thread : null, c = { listeners: [], on: function (e, t) { return this.listeners.push({ event: e, callback: t }), this }, trigger: function (e) { a.string(e) && (e = { type: e }); var t = function (t) { t.callback(e) }; return this.listeners.filter((function (t) { return t.event === e.type })).forEach(t), this }, pass: function (e) { return this.pass = e, this }, run: function (e) { var t = this.pass; return new s((function (n) { n(e(t)) })) }, stop: function () { return this }, stopped: function () { return !0 } }; o && !o.stopped() || (o = this.thread = l ? new l : c), n.stopped = !1, !0 !== e.animate && !1 !== e.animate || n.emit({ type: "layoutstart", layout: n }), r = !0 === e.debug; var d = u(t, n, e); r && f(d), e.randomize && h(d, t); var p = Date.now(), m = !1, v = function (n) { n = n || {}, m && !n.next || !n.force && Date.now() - p < e.animationThreshold || (m = !0, i.requestAnimationFrame((function () { g(d, t, e), !0 === e.fit && t.fit(e.padding), m = !1, n.next && n.next() }))) }; o.on("message", (function (e) { var t = e.message; d.layoutNodes = t, v() })), o.pass({ layoutInfo: d, options: { animate: e.animate, refresh: e.refresh, componentSpacing: e.componentSpacing, nodeOverlap: e.nodeOverlap, nestingFactor: e.nestingFactor, gravity: e.gravity, numIter: e.numIter, initialTemp: e.initialTemp, coolingFactor: e.coolingFactor, minTemp: e.minTemp } }).run((function (e) { var t, n, r = e.layoutInfo, i = e.options, o = function (e, t) { for (var n = 0; n < e.graphSet.length; n++)for (var r = e.graphSet[n], i = r.length, o = 0; o < i; o++)for (var a = e.layoutNodes[e.idToIndex[r[o]]], l = o + 1; l < i; l++) { var c = e.layoutNodes[e.idToIndex[r[l]]]; s(a, c, e, t) } }, a = function (e) { return -e + 2 * e * Math.random() }, s = function (e, t, n, r) { if (e.cmptId === t.cmptId || n.isCompound) { var i = t.positionX - e.positionX, o = t.positionY - e.positionY; 0 === i && 0 === o && (i = a(1), o = a(1)); var s = l(e, t, i, o); if (s > 0) var c = (p = r.nodeOverlap * s) * i / (b = Math.sqrt(i * i + o * o)), d = p * o / b; else { var p, f = u(e, i, o), h = u(t, -1 * i, -1 * o), g = h.x - f.x, m = h.y - f.y, v = g * g + m * m, b = Math.sqrt(v); c = (p = (e.nodeRepulsion + t.nodeRepulsion) / v) * g / b, d = p * m / b } e.isLocked || (e.offsetX -= c, e.offsetY -= d), t.isLocked || (t.offsetX += c, t.offsetY += d) } }, l = function (e, t, n, r) { if (n > 0) var i = e.maxX - t.minX; else i = t.maxX - e.minX; if (r > 0) var o = e.maxY - t.minY; else o = t.maxY - e.minY; return i >= 0 && o >= 0 ? Math.sqrt(i * i + o * o) : 0 }, u = function (e, t, n) { var r = e.positionX, i = e.positionY, o = e.height || 1, a = e.width || 1, s = n / t, l = o / a, c = {}; return 0 === t && 0 < n || 0 === t && 0 > n ? (c.x = r, c.y = i + o / 2, c) : 0 < t && -1 * l <= s && s <= l ? (c.x = r + a / 2, c.y = i + a * n / 2 / t, c) : 0 > t && -1 * l <= s && s <= l ? (c.x = r - a / 2, c.y = i - a * n / 2 / t, c) : 0 < n && (s <= -1 * l || s >= l) ? (c.x = r + o * t / 2 / n, c.y = i + o / 2, c) : 0 > n && (s <= -1 * l || s >= l) ? (c.x = r - o * t / 2 / n, c.y = i - o / 2, c) : c }, d = function (e, t) { for (var n = 0; n < e.edgeSize; n++) { var r = e.layoutEdges[n], i = e.idToIndex[r.sourceId], o = e.layoutNodes[i], a = e.idToIndex[r.targetId], s = e.layoutNodes[a], l = s.positionX - o.positionX, c = s.positionY - o.positionY; if (0 !== l || 0 !== c) { var d = u(o, l, c), p = u(s, -1 * l, -1 * c), f = p.x - d.x, h = p.y - d.y, g = Math.sqrt(f * f + h * h), m = Math.pow(r.idealLength - g, 2) / r.elasticity; if (0 !== g) var v = m * f / g, b = m * h / g; else v = 0, b = 0; o.isLocked || (o.offsetX += v, o.offsetY += b), s.isLocked || (s.offsetX -= v, s.offsetY -= b) } } }, p = function (e, t) { for (var n = 0; n < e.graphSet.length; n++) { var r = e.graphSet[n], i = r.length; if (0 === n) var o = e.clientHeight / 2, a = e.clientWidth / 2; else { var s = e.layoutNodes[e.idToIndex[r[0]]], l = e.layoutNodes[e.idToIndex[s.parentId]]; o = l.positionX, a = l.positionY } for (var c = 0; c < i; c++) { var u = e.layoutNodes[e.idToIndex[r[c]]]; if (!u.isLocked) { var d = o - u.positionX, p = a - u.positionY, f = Math.sqrt(d * d + p * p); if (f > 1) { var h = t.gravity * d / f, g = t.gravity * p / f; u.offsetX += h, u.offsetY += g } } } } }, f = function (e, t) { var n = [], r = 0, i = -1; for (n.push.apply(n, e.graphSet[0]), i += e.graphSet[0].length; r <= i;) { var o = n[r++], a = e.idToIndex[o], s = e.layoutNodes[a], l = s.children; if (0 < l.length && !s.isLocked) { for (var c = s.offsetX, u = s.offsetY, d = 0; d < l.length; d++) { var p = e.layoutNodes[e.idToIndex[l[d]]]; p.offsetX += c, p.offsetY += u, n[++i] = l[d] } s.offsetX = 0, s.offsetY = 0 } } }, h = function (e, t) { for (var n = 0; n < e.nodeSize; n++)0 < (i = e.layoutNodes[n]).children.length && (i.maxX = void 0, i.minX = void 0, i.maxY = void 0, i.minY = void 0); for (n = 0; n < e.nodeSize; n++)if (!(0 < (i = e.layoutNodes[n]).children.length || i.isLocked)) { var r = g(i.offsetX, i.offsetY, e.temperature); i.positionX += r.x, i.positionY += r.y, i.offsetX = 0, i.offsetY = 0, i.minX = i.positionX - i.width, i.maxX = i.positionX + i.width, i.minY = i.positionY - i.height, i.maxY = i.positionY + i.height, m(i, e) } for (n = 0; n < e.nodeSize; n++) { var i; 0 < (i = e.layoutNodes[n]).children.length && !i.isLocked && (i.positionX = (i.maxX + i.minX) / 2, i.positionY = (i.maxY + i.minY) / 2, i.width = i.maxX - i.minX, i.height = i.maxY - i.minY) } }, g = function (e, t, n) { var r = Math.sqrt(e * e + t * t); if (r > n) var i = { x: n * e / r, y: n * t / r }; else i = { x: e, y: t }; return i }, m = function e(t, n) { var r = t.parentId; if (null != r) { var i = n.layoutNodes[n.idToIndex[r]], o = !1; return (null == i.maxX || t.maxX + i.padRight > i.maxX) && (i.maxX = t.maxX + i.padRight, o = !0), (null == i.minX || t.minX - i.padLeft < i.minX) && (i.minX = t.minX - i.padLeft, o = !0), (null == i.maxY || t.maxY + i.padBottom > i.maxY) && (i.maxY = t.maxY + i.padBottom, o = !0), (null == i.minY || t.minY - i.padTop < i.minY) && (i.minY = t.minY - i.padTop, o = !0), o ? e(i, n) : void 0 } }, v = function (e) { return function (e, t, n) { o(e, t), d(e, t), p(e, t), f(e, t), h(e, t) }(r, i), r.temperature = r.temperature * i.coolingFactor, !(r.temperature < i.minTemp) }, b = 0; do { for (var y = 0; y < i.refresh && b < i.numIter;) { var x; if (!(x = v())) break; y++, b++ } !0 === i.animate && (t = r.layoutNodes, n = void 0, n = { type: "message", message: t }, c.trigger(n)) } while (x && b + 1 < i.numIter); return function (e, t) { for (var n = r.layoutNodes, i = [], o = 0; o < n.length; o++) { var a = n[o], s = a.cmptId; (i[s] = i[s] || []).push(a) } var l = 0; for (o = 0; o < i.length; o++)if (m = i[o]) { m.x1 = 1 / 0, m.x2 = -1 / 0, m.y1 = 1 / 0, m.y2 = -1 / 0; for (var c = 0; c < m.length; c++) { var u = m[c]; m.x1 = Math.min(m.x1, u.positionX - u.width / 2), m.x2 = Math.max(m.x2, u.positionX + u.width / 2), m.y1 = Math.min(m.y1, u.positionY - u.height / 2), m.y2 = Math.max(m.y2, u.positionY + u.height / 2) } m.w = m.x2 - m.x1, m.h = m.y2 - m.y1, l += m.w * m.h } i.sort((function (e, t) { return t.w * t.h - e.w * e.h })); var d = 0, p = 0, f = 0, h = 0, g = Math.sqrt(l) * r.clientWidth / r.clientHeight; for (o = 0; o < i.length; o++) { var m; if (m = i[o]) { for (c = 0; c < m.length; c++)(u = m[c]).isLocked || (u.positionX += d, u.positionY += p); d += m.w + t.componentSpacing, f += m.w + t.componentSpacing, h = Math.max(h, m.h), f > g && (p += h + t.componentSpacing, d = 0, f = 0, h = 0) } } }(0, i), r })).then((function (e) { d.layoutNodes = e.layoutNodes, o.stop(), b() })); var b = function () { !0 === e.animate || !1 === e.animate ? v({ force: !0, next: function () { n.one("layoutstop", e.stop), n.emit({ type: "layoutstop", layout: n }) } }) : e.eles.nodes().layoutPositions(n, e, (function (e) { var t = d.layoutNodes[d.idToIndex[e.data("id")]]; return { x: t.positionX, y: t.positionY } })) }; return this }, c.prototype.stop = function () { return this.stopped = !0, this.thread && this.thread.stop(), this.emit("layoutstop"), this }, c.prototype.destroy = function () { return this.thread && this.thread.stop(), this }; var u = function (e, t, n) { for (var r = n.eles.edges(), i = n.eles.nodes(), s = { isCompound: e.hasCompoundNodes(), layoutNodes: [], idToIndex: {}, nodeSize: i.size(), graphSet: [], indexToGraph: [], layoutEdges: [], edgeSize: r.size(), temperature: n.initialTemp, clientWidth: e.width(), clientHeight: e.width(), boundingBox: o.makeBoundingBox(n.boundingBox ? n.boundingBox : { x1: 0, y1: 0, w: e.width(), h: e.height() }) }, l = n.eles.components(), c = {}, u = 0; u < l.length; u++)for (var p = l[u], f = 0; f < p.length; f++)c[p[f].id()] = u; for (u = 0; u < s.nodeSize; u++) { var h = (y = i[u]).layoutDimensions(n); (I = {}).isLocked = y.locked(), I.id = y.data("id"), I.parentId = y.data("parent"), I.cmptId = c[y.id()], I.children = [], I.positionX = y.position("x"), I.positionY = y.position("y"), I.offsetX = 0, I.offsetY = 0, I.height = h.w, I.width = h.h, I.maxX = I.positionX + I.width / 2, I.minX = I.positionX - I.width / 2, I.maxY = I.positionY + I.height / 2, I.minY = I.positionY - I.height / 2, I.padLeft = parseFloat(y.style("padding")), I.padRight = parseFloat(y.style("padding")), I.padTop = parseFloat(y.style("padding")), I.padBottom = parseFloat(y.style("padding")), I.nodeRepulsion = a.fn(n.nodeRepulsion) ? n.nodeRepulsion(y) : n.nodeRepulsion, s.layoutNodes.push(I), s.idToIndex[I.id] = u } var g = [], m = 0, v = -1, b = []; for (u = 0; u < s.nodeSize; u++) { var y, x = (y = s.layoutNodes[u]).parentId; null != x ? s.layoutNodes[s.idToIndex[x]].children.push(y.id) : (g[++v] = y.id, b.push(y.id)) } for (s.graphSet.push(b); m <= v;) { var w = g[m++], k = s.idToIndex[w], A = s.layoutNodes[k].children; if (A.length > 0) for (s.graphSet.push(A), u = 0; u < A.length; u++)g[++v] = A[u] } for (u = 0; u < s.graphSet.length; u++) { var E = s.graphSet[u]; for (f = 0; f < E.length; f++) { var S = s.idToIndex[E[f]]; s.indexToGraph[S] = u } } for (u = 0; u < s.edgeSize; u++) { var $ = r[u], C = {}; C.id = $.data("id"), C.sourceId = $.data("source"), C.targetId = $.data("target"); var _ = a.fn(n.idealEdgeLength) ? n.idealEdgeLength($) : n.idealEdgeLength, O = a.fn(n.edgeElasticity) ? n.edgeElasticity($) : n.edgeElasticity, T = s.idToIndex[C.sourceId], j = s.idToIndex[C.targetId]; if (s.indexToGraph[T] != s.indexToGraph[j]) { for (var P = d(C.sourceId, C.targetId, s), D = s.graphSet[P], R = 0, I = s.layoutNodes[T]; -1 === D.indexOf(I.id);)I = s.layoutNodes[s.idToIndex[I.parentId]], R++; for (I = s.layoutNodes[j]; -1 === D.indexOf(I.id);)I = s.layoutNodes[s.idToIndex[I.parentId]], R++; _ *= R * n.nestingFactor } C.idealLength = _, C.elasticity = O, s.layoutEdges.push(C) } return s }, d = function (e, t, n) { var r = p(e, t, 0, n); return 2 > r.count ? 0 : r.graph }, p = function e(t, n, r, i) { var o = i.graphSet[r]; if (-1 < o.indexOf(t) && -1 < o.indexOf(n)) return { count: 2, graph: r }; for (var a = 0, s = 0; s < o.length; s++) { var l = o[s], c = i.idToIndex[l], u = i.layoutNodes[c].children; if (0 !== u.length) { var d = e(t, n, i.indexToGraph[i.idToIndex[u[0]]], i); if (0 !== d.count) { if (1 !== d.count) return d; if (2 == ++a) break } } } return { count: a, graph: r } }, f = function (e) { if (r) { console.debug("layoutNodes:"); for (var t = 0; t < e.nodeSize; t++) { var n = e.layoutNodes[t], i = "\nindex: " + t + "\nId: " + n.id + "\nChildren: " + n.children.toString() + "\nparentId: " + n.parentId + "\npositionX: " + n.positionX + "\npositionY: " + n.positionY + "\nOffsetX: " + n.offsetX + "\nOffsetY: " + n.offsetY + "\npadLeft: " + n.padLeft + "\npadRight: " + n.padRight + "\npadTop: " + n.padTop + "\npadBottom: " + n.padBottom; console.debug(i) } for (var t in console.debug("idToIndex"), e.idToIndex) console.debug("Id: " + t + "\nIndex: " + e.idToIndex[t]); console.debug("Graph Set"); var o = e.graphSet; for (t = 0; t < o.length; t++)console.debug("Set : " + t + ": " + o[t].toString()); for (i = "IndexToGraph", t = 0; t < e.indexToGraph.length; t++)i += "\nIndex : " + t + " Graph: " + e.indexToGraph[t]; for (console.debug(i), i = "Layout Edges", t = 0; t < e.layoutEdges.length; t++) { var a = e.layoutEdges[t]; i += "\nEdge Index: " + t + " ID: " + a.id + " SouceID: " + a.sourceId + " TargetId: " + a.targetId + " Ideal Length: " + a.idealLength } console.debug(i), i = "nodeSize: " + e.nodeSize, i += "\nedgeSize: " + e.edgeSize, i += "\ntemperature: " + e.temperature, console.debug(i) } }, h = function (e, t) { for (var n = e.clientWidth, r = e.clientHeight, i = 0; i < e.nodeSize; i++) { var o = e.layoutNodes[i]; 0 !== o.children.length || o.isLocked || (o.positionX = Math.random() * n, o.positionY = Math.random() * r) } }, g = function (e, t, n) { var r = n.layout, i = n.eles.nodes(), o = e.boundingBox, a = { x1: 1 / 0, x2: -1 / 0, y1: 1 / 0, y2: -1 / 0 }; n.boundingBox && (i.forEach((function (t) { var n = e.layoutNodes[e.idToIndex[t.data("id")]]; a.x1 = Math.min(a.x1, n.positionX), a.x2 = Math.max(a.x2, n.positionX), a.y1 = Math.min(a.y1, n.positionY), a.y2 = Math.max(a.y2, n.positionY) })), a.w = a.x2 - a.x1, a.h = a.y2 - a.y1), i.positions((function (t, r) { var i = e.layoutNodes[e.idToIndex[t.data("id")]]; if (n.boundingBox) { var s = (i.positionX - a.x1) / a.w, l = (i.positionY - a.y1) / a.h; return { x: o.x1 + s * o.w, y: o.y1 + l * o.h } } return { x: i.positionX, y: i.positionY } })), !0 !== e.ready && (e.ready = !0, r.one("layoutready", n.ready), r.emit({ type: "layoutready", layout: this })) }; e.exports = c }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = { fit: !0, padding: 30, boundingBox: void 0, avoidOverlap: !0, avoidOverlapPadding: 10, nodeDimensionsIncludeLabels: !1, spacingFactor: void 0, condense: !1, rows: void 0, cols: void 0, position: function (e) { }, sort: void 0, animate: !1, animationDuration: 500, animationEasing: void 0, animateFilter: function (e, t) { return !0 }, ready: void 0, stop: void 0, transform: function (e, t) { return t } }; function a(e) { this.options = r.extend({}, o, e) } a.prototype.run = function () { var e = this.options, t = e, n = e.cy, r = t.eles.nodes().not(":parent"); t.sort && (r = r.sort(t.sort)); var o = i.makeBoundingBox(t.boundingBox ? t.boundingBox : { x1: 0, y1: 0, w: n.width(), h: n.height() }); if (0 === o.h || 0 === o.w) r.layoutPositions(this, t, (function (e) { return { x: o.x1, y: o.y1 } })); else { var a = r.size(), s = Math.sqrt(a * o.h / o.w), l = Math.round(s), c = Math.round(o.w / o.h * s), u = function (e) { if (null == e) return Math.min(l, c); Math.min(l, c) == l ? l = e : c = e }, d = function (e) { if (null == e) return Math.max(l, c); Math.max(l, c) == l ? l = e : c = e }, p = t.rows, f = null != t.cols ? t.cols : t.columns; if (null != p && null != f) l = p, c = f; else if (null != p && null == f) l = p, c = Math.ceil(a / l); else if (null == p && null != f) c = f, l = Math.ceil(a / c); else if (c * l > a) { var h = u(), g = d(); (h - 1) * g >= a ? u(h - 1) : (g - 1) * h >= a && d(g - 1) } else for (; c * l < a;) { var m = u(), v = d(); (v + 1) * m >= a ? d(v + 1) : u(m + 1) } var b = o.w / c, y = o.h / l; if (t.condense && (b = 0, y = 0), t.avoidOverlap) for (var x = 0; x < r.length; x++) { var w = r[x], k = w._private.position; null != k.x && null != k.y || (k.x = 0, k.y = 0); var A = w.layoutDimensions(t), E = t.avoidOverlapPadding, S = A.w + E, $ = A.h + E; b = Math.max(b, S), y = Math.max(y, $) } for (var C = {}, _ = function (e, t) { return !!C["c-" + e + "-" + t] }, O = function (e, t) { C["c-" + e + "-" + t] = !0 }, T = 0, j = 0, P = function () { ++j >= c && (j = 0, T++) }, D = {}, R = 0; R < r.length; R++) { var I = r[R], N = t.position(I); if (N && (void 0 !== N.row || void 0 !== N.col)) { var M = { row: N.row, col: N.col }; if (void 0 === M.col) for (M.col = 0; _(M.row, M.col);)M.col++; else if (void 0 === M.row) for (M.row = 0; _(M.row, M.col);)M.row++; D[I.id()] = M, O(M.row, M.col) } } r.layoutPositions(this, t, (function (e, t) { var n = void 0, r = void 0; if (e.locked() || e.isParent()) return !1; var i = D[e.id()]; if (i) n = i.col * b + b / 2 + o.x1, r = i.row * y + y / 2 + o.y1; else { for (; _(T, j);)P(); n = j * b + b / 2 + o.x1, r = T * y + y / 2 + o.y1, O(T, j), P() } return { x: n, y: r } })) } return this }, e.exports = a }, function (e, t, n) { "use strict"; var r = n(1), i = { ready: function () { }, stop: function () { } }; function o(e) { this.options = r.extend({}, i, e) } o.prototype.run = function () { var e = this.options, t = e.eles; return e.cy, this.emit("layoutstart"), t.nodes().positions((function () { return { x: 0, y: 0 } })), this.one("layoutready", e.ready), this.emit("layoutready"), this.one("layoutstop", e.stop), this.emit("layoutstop"), this }, o.prototype.stop = function () { return this }, e.exports = o }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = { positions: void 0, zoom: void 0, pan: void 0, fit: !0, padding: 30, animate: !1, animationDuration: 500, animationEasing: void 0, animateFilter: function (e, t) { return !0 }, ready: void 0, stop: void 0, transform: function (e, t) { return t } }; function a(e) { this.options = r.extend({}, o, e) } a.prototype.run = function () { var e = this.options, t = e.eles.nodes(), n = i.fn(e.positions); return t.layoutPositions(this, e, (function (t, r) { var i = function (t) { if (null == e.positions) return null; if (n) return e.positions(t); var r = e.positions[t._private.data.id]; return null == r ? null : r }(t); return !t.locked() && null != i && i })), this }, e.exports = a }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = { fit: !0, padding: 30, boundingBox: void 0, animate: !1, animationDuration: 500, animationEasing: void 0, animateFilter: function (e, t) { return !0 }, ready: void 0, stop: void 0, transform: function (e, t) { return t } }; function a(e) { this.options = r.extend({}, o, e) } a.prototype.run = function () { var e = this.options, t = e.cy, n = e.eles.nodes().not(":parent"), r = i.makeBoundingBox(e.boundingBox ? e.boundingBox : { x1: 0, y1: 0, w: t.width(), h: t.height() }); return n.layoutPositions(this, e, (function (e, t) { return { x: r.x1 + Math.round(Math.random() * r.w), y: r.y1 + Math.round(Math.random() * r.h) } })), this }, e.exports = a }, function (e, t, n) { "use strict"; e.exports = [{ name: "null", impl: n(106) }, { name: "base", impl: n(107) }, { name: "canvas", impl: n(123) }] }, function (e, t, n) { "use strict"; function r(e) { this.options = e, this.notifications = 0 } var i = function () { }; r.prototype = { recalculateRenderedStyle: i, notify: function () { this.notifications++ }, init: i }, e.exports = r }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(3), a = function (e) { this.init(e) }, s = a.prototype; s.clientFunctions = ["redrawHint", "render", "renderTo", "matchCanvasSize", "nodeShapeImpl", "arrowShapeImpl"], s.init = function (e) { var t = this; t.options = e, t.cy = e.cy; var n = t.container = e.cy.container(); if (o) { var r = o.document, a = r.head, s = "__________cytoscape_container", l = null != r.getElementById("__________cytoscape_stylesheet"); if (n.className.indexOf(s) < 0 && (n.className = (n.className || "") + " " + s), !l) { var c = r.createElement("style"); c.id = "__________cytoscape_stylesheet", c.innerHTML = "." + s + " { position: relative; }", a.insertBefore(c, a.children[0]) } "static" === o.getComputedStyle(n).getPropertyValue("position") && i.error("A Cytoscape container has style position:static and so can not use UI extensions properly") } t.selection = [void 0, void 0, void 0, void 0, 0], t.bezierProjPcts = [.05, .225, .4, .5, .6, .775, .95], t.hoverData = { down: null, last: null, downTime: null, triggerMode: null, dragging: !1, initialPan: [null, null], capture: !1 }, t.dragData = { possibleDragElements: [] }, t.touchData = { start: null, capture: !1, startPosition: [null, null, null, null, null, null], singleTouchStartTime: null, singleTouchMoved: !0, now: [null, null, null, null, null, null], earlier: [null, null, null, null, null, null] }, t.redraws = 0, t.showFps = e.showFps, t.debug = e.debug, t.hideEdgesOnViewport = e.hideEdgesOnViewport, t.hideLabelsOnViewport = e.hideLabelsOnViewport, t.textureOnViewport = e.textureOnViewport, t.wheelSensitivity = e.wheelSensitivity, t.motionBlurEnabled = e.motionBlur, t.forcedPixelRatio = e.pixelRatio, t.motionBlur = e.motionBlur, t.motionBlurOpacity = e.motionBlurOpacity, t.motionBlurTransparency = 1 - t.motionBlurOpacity, t.motionBlurPxRatio = 1, t.mbPxRBlurry = 1, t.minMbLowQualFrames = 4, t.fullQualityMb = !1, t.clearedForMotionBlur = [], t.desktopTapThreshold = e.desktopTapThreshold, t.desktopTapThreshold2 = e.desktopTapThreshold * e.desktopTapThreshold, t.touchTapThreshold = e.touchTapThreshold, t.touchTapThreshold2 = e.touchTapThreshold * e.touchTapThreshold, t.tapholdDuration = 500, t.bindings = [], t.beforeRenderCallbacks = [], t.beforeRenderPriorities = { animations: 400, eleCalcs: 300, eleTxrDeq: 200, lyrTxrDeq: 100 }, t.registerNodeShapes(), t.registerArrowShapes(), t.registerCalculationListeners() }, s.notify = function (e) { var t, n = this; if (!this.destroyed) { t = r.array(e.type) ? e.type : [e.type]; for (var i = {}, o = 0; o < t.length; o++)i[t[o]] = !0; i.init ? n.load() : i.destroy ? n.destroy() : ((i.add || i.remove || i.load || i.zorder) && n.invalidateCachedZSortedEles(), i.viewport && n.redrawHint("select", !0), (i.load || i.resize) && (n.invalidateContainerClientCoordsCache(), n.matchCanvasSize(n.container)), n.redrawHint("eles", !0), n.redrawHint("drag", !0), this.startRenderLoop(), this.redraw()) } }, s.destroy = function () { var e = this; e.destroyed = !0, e.cy.stopAnimationLoop(); for (var t = 0; t < e.bindings.length; t++) { var n = e.bindings[t], r = n.target; (r.off || r.removeEventListener).apply(r, n.args) } if (e.bindings = [], e.beforeRenderCallbacks = [], e.onUpdateEleCalcsFns = [], e.removeObserver && e.removeObserver.disconnect(), e.styleObserver && e.styleObserver.disconnect(), e.labelCalcDiv) try { document.body.removeChild(e.labelCalcDiv) } catch (e) { } }, [n(108), n(109), n(119), n(120), n(121), n(122)].forEach((function (e) { i.extend(s, e) })), e.exports = a }, function (e, t, n) { "use strict"; var r = n(2), i = n(0), o = n(1), a = { arrowShapeWidth: .3, registerArrowShapes: function () { var e = this.arrowShapes = {}, t = this, n = function (e, t, n, r, i, o, a) { var s = i.x - n / 2 - a, l = i.x + n / 2 + a, c = i.y - n / 2 - a, u = i.y + n / 2 + a; return s <= e && e <= l && c <= t && t <= u }, a = function (e, t, n, r, i) { var o = e * Math.cos(r) - t * Math.sin(r), a = (e * Math.sin(r) + t * Math.cos(r)) * n; return { x: o * n + i.x, y: a + i.y } }, s = function (e, t, n, r) { for (var i = [], o = 0; o < e.length; o += 2) { var s = e[o], l = e[o + 1]; i.push(a(s, l, t, n, r)) } return i }, l = function (e) { for (var t = [], n = 0; n < e.length; n++) { var r = e[n]; t.push(r.x, r.y) } return t }, c = function (e) { return e.pstyle("width").pfValue * e.pstyle("arrow-scale").pfValue * 2 }, u = function (a, u) { i.string(u) && (u = e[u]), e[a] = o.extend({ name: a, points: [-.15, -.3, .15, -.3, .15, .3, -.15, .3], collide: function (e, t, n, i, o, a) { var c = l(s(this.points, n + 2 * a, i, o)); return r.pointInsidePolygonPoints(e, t, c) }, roughCollide: n, draw: function (e, n, r, i) { var o = s(this.points, n, r, i); t.arrowShapeImpl("polygon")(e, o) }, spacing: function (e) { return 0 }, gap: c }, u) }; u("none", { collide: o.falsify, roughCollide: o.falsify, draw: o.noop, spacing: o.zeroify, gap: o.zeroify }), u("triangle", { points: [-.15, -.3, 0, 0, .15, -.3] }), u("arrow", "triangle"), u("triangle-backcurve", { points: e.triangle.points, controlPoint: [0, -.15], roughCollide: n, draw: function (e, n, r, i, o) { var l = s(this.points, n, r, i), c = this.controlPoint, u = a(c[0], c[1], n, r, i); t.arrowShapeImpl(this.name)(e, l, u) }, gap: function (e) { return .8 * c(e) } }), u("triangle-tee", { points: [-.15, -.3, 0, 0, .15, -.3, -.15, -.3], pointsTee: [-.15, -.4, -.15, -.5, .15, -.5, .15, -.4], collide: function (e, t, n, i, o, a, c) { var u = l(s(this.points, n + 2 * c, i, o)), d = l(s(this.pointsTee, n + 2 * c, i, o)); return r.pointInsidePolygonPoints(e, t, u) || r.pointInsidePolygonPoints(e, t, d) }, draw: function (e, n, r, i, o) { var a = s(this.points, n, r, i), l = s(this.pointsTee, n, r, i); t.arrowShapeImpl(this.name)(e, a, l) } }), u("triangle-cross", { points: [-.15, -.3, 0, 0, .15, -.3, -.15, -.3], baseCrossLinePts: [-.15, -.4, -.15, -.4, .15, -.4, .15, -.4], crossLinePts: function (e, t) { var n = this.baseCrossLinePts.slice(), r = t / e; return n[3] = n[3] - r, n[5] = n[5] - r, n }, collide: function (e, t, n, i, o, a, c) { var u = l(s(this.points, n + 2 * c, i, o)), d = l(s(this.crossLinePts(n, a), n + 2 * c, i, o)); return r.pointInsidePolygonPoints(e, t, u) || r.pointInsidePolygonPoints(e, t, d) }, draw: function (e, n, r, i, o) { var a = s(this.points, n, r, i), l = s(this.crossLinePts(n, o), n, r, i); t.arrowShapeImpl(this.name)(e, a, l) } }), u("vee", { points: [-.15, -.3, 0, 0, .15, -.3, 0, -.15], gap: function (e) { return .525 * c(e) } }), u("circle", { radius: .15, collide: function (e, t, n, r, i, o, a) { var s = i; return Math.pow(s.x - e, 2) + Math.pow(s.y - t, 2) <= Math.pow((n + 2 * a) * this.radius, 2) }, draw: function (e, n, r, i, o) { t.arrowShapeImpl(this.name)(e, i.x, i.y, this.radius * n) }, spacing: function (e) { return t.getArrowWidth(e.pstyle("width").pfValue, e.pstyle("arrow-scale").value) * this.radius } }), u("tee", { points: [-.15, 0, -.15, -.1, .15, -.1, .15, 0], spacing: function (e) { return 1 }, gap: function (e) { return 1 } }), u("square", { points: [-.15, 0, .15, 0, .15, -.3, -.15, -.3] }), u("diamond", { points: [-.15, -.15, 0, -.3, .15, -.15, 0, 0], gap: function (e) { return e.pstyle("width").pfValue * e.pstyle("arrow-scale").value } }) } }; e.exports = a }, function (e, t, n) { "use strict"; var r = n(1), i = {};[n(110), n(111), n(112), n(113), n(114), n(115), n(116), n(117), n(118)].forEach((function (e) { r.extend(i, e) })), e.exports = i }, function (e, t, n) { "use strict"; var r = n(3), i = n(2), o = n(1), a = (r = n(3), { projectIntoViewport: function (e, t) { var n = this.cy, r = this.findContainerClientCoords(), i = r[0], o = r[1], a = r[4], s = n.pan(), l = n.zoom(); return [((e - i) / a - s.x) / l, ((t - o) / a - s.y) / l] }, findContainerClientCoords: function () { if (this.containerBB) return this.containerBB; var e = this.container, t = e.getBoundingClientRect(), n = r.getComputedStyle(e), i = function (e) { return parseFloat(n.getPropertyValue(e)) }, o = i("padding-left"), a = i("padding-right"), s = i("padding-top"), l = i("padding-bottom"), c = i("border-left-width"), u = i("border-right-width"), d = i("border-top-width"), p = (i("border-bottom-width"), e.clientWidth), f = e.clientHeight, h = o + a, g = s + l, m = c + u, v = t.width / (p + m), b = p - h, y = f - g, x = (t.width, t.height, t.left + o + c), w = t.top + s + d; return this.containerBB = [x, w, b, y, v] }, invalidateContainerClientCoordsCache: function () { this.containerBB = null }, findNearestElement: function (e, t, n, r) { return this.findNearestElements(e, t, n, r)[0] }, findNearestElements: function (e, t, n, r) { var a, s, l = this, c = this, u = c.getCachedZSortedEles(), d = [], p = c.cy.zoom(), f = c.cy.hasCompoundNodes(), h = (r ? 24 : 8) / p, g = (r ? 8 : 2) / p, m = (r ? 8 : 2) / p, v = 1 / 0; function b(e, t) { if (e.isNode()) { if (s) return; s = e, d.push(e) } if (e.isEdge() && (null == t || t < v)) if (a) { if (a.pstyle("z-index").value === e.pstyle("z-index").value) for (var n = 0; n < d.length; n++)if (d[n].isEdge()) { d[n] = e, a = e, v = null != t ? t : v; break } } else d.push(e), a = e, v = null != t ? t : v } function y(n) { var r = n.outerWidth() + 2 * g, i = n.outerHeight() + 2 * g, o = r / 2, a = i / 2, s = n.position(); if (s.x - o <= e && e <= s.x + o && s.y - a <= t && t <= s.y + a && c.nodeShapes[l.getNodeShape(n)].checkPoint(e, t, 0, r, i, s.x, s.y)) return b(n, 0), !0 } function x(n) { var r, o = n._private, a = o.rscratch, s = n.pstyle("width").pfValue, u = n.pstyle("arrow-scale").value, p = s / 2 + h, g = p * p, m = 2 * p, v = o.source, x = o.target; if ("segments" === a.edgeType || "straight" === a.edgeType || "haystack" === a.edgeType) { for (var w = a.allpts, k = 0; k + 3 < w.length; k += 2)if (i.inLineVicinity(e, t, w[k], w[k + 1], w[k + 2], w[k + 3], m) && g > (r = i.sqdistToFiniteLine(e, t, w[k], w[k + 1], w[k + 2], w[k + 3]))) return b(n, r), !0 } else if ("bezier" === a.edgeType || "multibezier" === a.edgeType || "self" === a.edgeType || "compound" === a.edgeType) for (w = a.allpts, k = 0; k + 5 < a.allpts.length; k += 4)if (i.inBezierVicinity(e, t, w[k], w[k + 1], w[k + 2], w[k + 3], w[k + 4], w[k + 5], m) && g > (r = i.sqdistToQuadraticBezier(e, t, w[k], w[k + 1], w[k + 2], w[k + 3], w[k + 4], w[k + 5]))) return b(n, r), !0; v = v || o.source, x = x || o.target; var A = l.getArrowWidth(s, u), E = [{ name: "source", x: a.arrowStartX, y: a.arrowStartY, angle: a.srcArrowAngle }, { name: "target", x: a.arrowEndX, y: a.arrowEndY, angle: a.tgtArrowAngle }, { name: "mid-source", x: a.midX, y: a.midY, angle: a.midsrcArrowAngle }, { name: "mid-target", x: a.midX, y: a.midY, angle: a.midtgtArrowAngle }]; for (k = 0; k < E.length; k++) { var S = E[k], $ = c.arrowShapes[n.pstyle(S.name + "-arrow-shape").value], C = n.pstyle("width").pfValue; if ($.roughCollide(e, t, A, S.angle, { x: S.x, y: S.y }, C, h) && $.collide(e, t, A, S.angle, { x: S.x, y: S.y }, C, h)) return b(n), !0 } f && d.length > 0 && (y(v), y(x)) } function w(e, t, n) { return o.getPrefixedProperty(e, t, n) } function k(n, r) { var o, a = n._private, s = m; o = r ? r + "-" : ""; var l = n.pstyle(o + "label").value; if ("yes" === n.pstyle("text-events").strValue && l) { var c = a.rstyle, u = n.pstyle("text-border-width").pfValue, d = n.pstyle("text-background-padding").pfValue, p = w(c, "labelWidth", r) + u + 2 * s + 2 * d, f = w(c, "labelHeight", r) + u + 2 * s + 2 * d, h = w(c, "labelX", r), g = w(c, "labelY", r), v = w(a.rscratch, "labelAngle", r), y = h - p / 2, x = h + p / 2, k = g - f / 2, A = g + f / 2; if (v) { var E = Math.cos(v), S = Math.sin(v), $ = function (e, t) { return { x: (e -= h) * E - (t -= g) * S + h, y: e * S + t * E + g } }, C = $(y, k), _ = $(y, A), O = $(x, k), T = $(x, A), j = [C.x, C.y, O.x, O.y, T.x, T.y, _.x, _.y]; if (i.pointInsidePolygonPoints(e, t, j)) return b(n), !0 } else { var P = { w: p, h: f, x1: y, x2: x, y1: k, y2: A }; if (i.inBoundingBox(P, e, t)) return b(n), !0 } } } n && (u = u.interactive); for (var A = u.length - 1; A >= 0; A--) { var E = u[A]; E.isNode() ? y(E) || k(E) : x(E) || k(E) || k(E, "source") || k(E, "target") } return d }, getAllInBox: function (e, t, n, r) { var o = this.getCachedZSortedEles().interactive, a = [], s = Math.min(e, n), l = Math.max(e, n), c = Math.min(t, r), u = Math.max(t, r); e = s, n = l, t = c, r = u; for (var d = i.makeBoundingBox({ x1: e, y1: t, x2: n, y2: r }), p = 0; p < o.length; p++) { var f = o[p]; if (f.isNode()) { var h = f, g = h.boundingBox({ includeNodes: !0, includeEdges: !1, includeLabels: !1 }); i.boundingBoxesIntersect(d, g) && !i.boundingBoxInBoundingBox(g, d) && a.push(h) } else { var m = f, v = m._private, b = v.rscratch; if (null != b.startX && null != b.startY && !i.inBoundingBox(d, b.startX, b.startY)) continue; if (null != b.endX && null != b.endY && !i.inBoundingBox(d, b.endX, b.endY)) continue; if ("bezier" === b.edgeType || "multibezier" === b.edgeType || "self" === b.edgeType || "compound" === b.edgeType || "segments" === b.edgeType || "haystack" === b.edgeType) { for (var y = v.rstyle.bezierPts || v.rstyle.linePts || v.rstyle.haystackPts, x = !0, w = 0; w < y.length; w++)if (!i.pointInBoundingBox(d, y[w])) { x = !1; break } x && a.push(m) } else "haystack" !== b.edgeType && "straight" !== b.edgeType || a.push(m) } } return a } }); e.exports = a }, function (e, t, n) { "use strict"; var r = n(2), i = { calculateArrowAngles: function (e) { var t, n, i, o, a, s, l = e._private.rscratch, c = "haystack" === l.edgeType, u = "bezier" === l.edgeType, d = "multibezier" === l.edgeType, p = "segments" === l.edgeType, f = "compound" === l.edgeType, h = "self" === l.edgeType; if (c ? (i = l.haystackPts[0], o = l.haystackPts[1], a = l.haystackPts[2], s = l.haystackPts[3]) : (i = l.arrowStartX, o = l.arrowStartY, a = l.arrowEndX, s = l.arrowEndY), m = l.midX, v = l.midY, p) t = i - l.segpts[0], n = o - l.segpts[1]; else if (d || f || h || u) { var g = l.allpts; t = i - r.qbezierAt(g[0], g[2], g[4], .1), n = o - r.qbezierAt(g[1], g[3], g[5], .1) } else t = i - m, n = o - v; l.srcArrowAngle = r.getAngleFromDisp(t, n); var m = l.midX, v = l.midY; if (c && (m = (i + a) / 2, v = (o + s) / 2), t = a - i, n = s - o, p) if ((g = l.allpts).length / 2 % 2 == 0) { var b = (y = g.length / 2) - 2; t = g[y] - g[b], n = g[y + 1] - g[b + 1] } else { b = (y = g.length / 2 - 1) - 2; var y, x = y + 2; t = g[y] - g[b], n = g[y + 1] - g[b + 1] } else if (d || f || h) { var w, k, A, E, g = l.allpts; if (l.ctrlpts.length / 2 % 2 == 0) { var S = 2 + ($ = 2 + (C = g.length / 2 - 1)); w = r.qbezierAt(g[C], g[$], g[S], 0), k = r.qbezierAt(g[C + 1], g[$ + 1], g[S + 1], 0), A = r.qbezierAt(g[C], g[$], g[S], 1e-4), E = r.qbezierAt(g[C + 1], g[$ + 1], g[S + 1], 1e-4) } else { var $, C = ($ = g.length / 2 - 1) - 2; S = $ + 2, w = r.qbezierAt(g[C], g[$], g[S], .4999), k = r.qbezierAt(g[C + 1], g[$ + 1], g[S + 1], .4999), A = r.qbezierAt(g[C], g[$], g[S], .5), E = r.qbezierAt(g[C + 1], g[$ + 1], g[S + 1], .5) } t = A - w, n = E - k } if (l.midtgtArrowAngle = r.getAngleFromDisp(t, n), l.midDispX = t, l.midDispY = n, t *= -1, n *= -1, p && ((g = l.allpts).length / 2 % 2 == 0 || (t = -(g[x = 2 + (y = g.length / 2 - 1)] - g[y]), n = -(g[x + 1] - g[y + 1]))), l.midsrcArrowAngle = r.getAngleFromDisp(t, n), p) t = a - l.segpts[l.segpts.length - 2], n = s - l.segpts[l.segpts.length - 1]; else if (d || f || h || u) { var _ = (g = l.allpts).length; t = a - r.qbezierAt(g[_ - 6], g[_ - 4], g[_ - 2], .9), n = s - r.qbezierAt(g[_ - 5], g[_ - 3], g[_ - 1], .9) } else t = a - m, n = s - v; l.tgtArrowAngle = r.getAngleFromDisp(t, n) } }; i.getArrowWidth = i.getArrowHeight = function (e, t) { var n = this.arrowWidthCache = this.arrowWidthCache || {}, r = n[e + ", " + t]; return r || (r = Math.max(Math.pow(13.37 * e, .9), 29) * t, n[e + ", " + t] = r, r) }, e.exports = i }, function (e, t, n) { "use strict"; var r = n(2), i = n(0), o = {}; function a(e) { var t = []; if (null != e) { for (var n = 0; n < e.length; n += 2) { var r = e[n], i = e[n + 1]; t.push({ x: r, y: i }) } return t } } o.findEdgeControlPoints = function (e) { if (e && 0 !== e.length) { for (var t, n, o, a, s, l = this, c = l.cy.hasCompoundNodes(), u = {}, d = [], p = [], f = 0; f < e.length; f++) { var h = (Ft = (Bt = e[f])._private).data, g = "unbundled-bezier" === (D = Bt.pstyle("curve-style").value) || "segments" === D, m = "unbundled-bezier" === D || "bezier" === D; if ("none" !== Bt.pstyle("display").value) if ("haystack" !== D) { var v = h.source, b = h.target; t = v > b ? b + "$-$" + v : v + "$-$" + b, g && (t = "unbundled$-$" + h.id); var y = u[t]; null == y && (y = u[t] = [], d.push(t)), y.push(Bt), g && (y.hasUnbundled = !0), m && (y.hasBezier = !0) } else p.push(Bt) } for (var x = 0; x < d.length; x++) { var w = u[t = d[x]]; if (w.sort((function (e, t) { return e.poolIndex() - t.poolIndex() })), Ht = w[0]._private.source, Gt = w[0]._private.target, !w.hasUnbundled && Ht.id() > Gt.id()) { var k = Ht; Ht = Gt, Gt = k } Wt = Ht.position(), Yt = Gt.position(), Xt = Ht.outerWidth(), Qt = Ht.outerHeight(), Zt = Gt.outerWidth(), Jt = Gt.outerHeight(), n = l.nodeShapes[this.getNodeShape(Ht)], o = l.nodeShapes[this.getNodeShape(Gt)], s = !1; var A = { north: 0, west: 0, south: 0, east: 0, northwest: 0, southwest: 0, northeast: 0, southeast: 0 }, E = Wt.x, S = Wt.y, $ = Xt, C = Qt, _ = Yt.x, O = Yt.y, T = Zt, j = Jt, P = w.length; for (f = 0; f < w.length; f++) { var D, R, I = (Vt = (Bt = w[f])._private.rscratch).lastEdgeIndex, N = f, M = Vt.lastNumEdges, z = (g = "unbundled-bezier" === (D = Bt.pstyle("curve-style").value) || "segments" === D, Ht.id() !== Bt.source().id()), L = Bt.pstyle("control-point-distances"), B = Bt.pstyle("loop-direction").pfValue, F = Bt.pstyle("loop-sweep").pfValue, q = Bt.pstyle("control-point-weights"), V = L && q ? Math.min(L.value.length, q.value.length) : 1, U = Bt.pstyle("control-point-step-size").pfValue, H = L ? L.pfValue[0] : void 0, G = q.value[0], W = Bt.pstyle("edge-distances").value, Y = Bt.pstyle("segment-weights"), X = Bt.pstyle("segment-distances"), Z = Math.min(Y.pfValue.length, X.pfValue.length), Q = Bt.pstyle("source-endpoint").value, J = Bt.pstyle("target-endpoint").value, K = Bt.pstyle("source-arrow-shape").value, ee = Bt.pstyle("target-arrow-shape").value, te = Bt.pstyle("arrow-scale").value, ne = Bt.pstyle("width").pfValue, re = Vt.lastSrcCtlPtX, ie = Vt.lastSrcCtlPtY, oe = Vt.lastSrcCtlPtW, ae = Vt.lastSrcCtlPtH, se = Vt.lastTgtCtlPtX, le = Vt.lastTgtCtlPtY, ce = Vt.lastTgtCtlPtW, ue = Vt.lastTgtCtlPtH, de = Vt.lastCurveStyle, pe = D, fe = Vt.lastCtrlptDists, he = L ? L.strValue : null, ge = Vt.lastCtrlptWs, me = q.strValue, ve = Vt.lastSegmentWs, be = Y.strValue, ye = Vt.lastSegmentDs, xe = X.strValue, we = Vt.lastStepSize, ke = U, Ae = Vt.lastLoopDir, Ee = B, Se = Vt.lastLoopSwp, $e = F, Ce = Vt.lastEdgeDistances, _e = W, Oe = Vt.lastSrcEndpt, Te = Q, je = Vt.lastTgtEndpt, Pe = J, De = Vt.lastSrcArr, Re = K, Ie = Vt.lastTgtArr, Ne = ee, Me = Vt.lastLineW, ze = ne, Le = Vt.lastArrScl, Be = te; if (Vt.badBezier = !!s, re === E && ie === S && oe === $ && ae === C && se === _ && le === O && ce === T && ue === j && de === pe && fe === he && ge === me && ve === be && ye === xe && we === ke && Ae === Ee && Se === $e && Ce === _e && Oe === Te && je === Pe && De === Re && Ie === Ne && Me === ze && Le === Be && (I === N && M === P || g) ? R = !0 : (R = !1, Vt.lastSrcCtlPtX = E, Vt.lastSrcCtlPtY = S, Vt.lastSrcCtlPtW = $, Vt.lastSrcCtlPtH = C, Vt.lastTgtCtlPtX = _, Vt.lastTgtCtlPtY = O, Vt.lastTgtCtlPtW = T, Vt.lastTgtCtlPtH = j, Vt.lastEdgeIndex = N, Vt.lastNumEdges = P, Vt.lastCurveStyle = pe, Vt.lastCtrlptDists = he, Vt.lastCtrlptWs = me, Vt.lastSegmentDs = xe, Vt.lastSegmentWs = be, Vt.lastStepSize = ke, Vt.lastLoopDir = Ee, Vt.lastLoopSwp = $e, Vt.lastEdgeDistances = _e, Vt.lastSrcEndpt = Te, Vt.lastTgtEndpt = Pe, Vt.lastSrcArr = Re, Vt.lastTgtArr = Ne, Vt.lastLineW = ze, Vt.lastArrScl = Be), !R) { if (!w.calculatedIntersection && Ht !== Gt && (w.hasBezier || w.hasUnbundled)) { w.calculatedIntersection = !0; var Fe = n.intersectLine(Wt.x, Wt.y, Xt, Qt, Yt.x, Yt.y, 0); w.srcIntn = Fe; var qe = o.intersectLine(Yt.x, Yt.y, Zt, Jt, Wt.x, Wt.y, 0); w.tgtIntn = qe; var Ve = { x1: Fe[0], x2: qe[0], y1: Fe[1], y2: qe[1] }, Ue = { x1: Wt.x, x2: Yt.x, y1: Wt.y, y2: Yt.y }, He = qe[1] - Fe[1], Ge = qe[0] - Fe[0], We = Math.sqrt(Ge * Ge + He * He), Ye = { x: Ge, y: He }, Xe = { x: Ye.x / We, y: Ye.y / We }; a = { x: -Xe.y, y: Xe.x }, o.checkPoint(Fe[0], Fe[1], 0, Zt, Jt, Yt.x, Yt.y) && n.checkPoint(qe[0], qe[1], 0, Xt, Qt, Wt.x, Wt.y) && (a = {}, s = !0) } if (z ? (Vt.srcIntn = w.tgtIntn, Vt.tgtIntn = w.srcIntn) : (Vt.srcIntn = w.srcIntn, Vt.tgtIntn = w.tgtIntn), Ht === Gt) { Vt.edgeType = "self"; var Ze = f, Qe = U; g && (Ze = 0, Qe = H); var Je = B - Math.PI / 2, Ke = Je - F / 2, et = Je + F / 2, tt = String(B + "_" + F); Ze = void 0 === A[tt] ? A[tt] = 0 : ++A[tt], Vt.ctrlpts = [Wt.x + 1.4 * Math.cos(Ke) * Qe * (Ze / 3 + 1), Wt.y + 1.4 * Math.sin(Ke) * Qe * (Ze / 3 + 1), Wt.x + 1.4 * Math.cos(et) * Qe * (Ze / 3 + 1), Wt.y + 1.4 * Math.sin(et) * Qe * (Ze / 3 + 1)] } else if (c && (Ht.isParent() || Ht.isChild() || Gt.isParent() || Gt.isChild()) && (Ht.parents().anySame(Gt) || Gt.parents().anySame(Ht))) { Vt.edgeType = "compound", Vt.badBezier = !1, Ze = f, Qe = U, g && (Ze = 0, Qe = H); var nt = { x: Wt.x - Xt / 2, y: Wt.y - Qt / 2 }, rt = { x: Yt.x - Zt / 2, y: Yt.y - Jt / 2 }, it = { x: Math.min(nt.x, rt.x), y: Math.min(nt.y, rt.y) }, ot = Math.max(.5, Math.log(.01 * Xt)), at = Math.max(.5, Math.log(.01 * Zt)); Vt.ctrlpts = [it.x, it.y - (1 + Math.pow(50, 1.12) / 100) * Qe * (Ze / 3 + 1) * ot, it.x - (1 + Math.pow(50, 1.12) / 100) * Qe * (Ze / 3 + 1) * at, it.y] } else if ("segments" === D) { Vt.edgeType = "segments", Vt.segpts = []; for (var st = 0; st < Z; st++) { var lt = Y.pfValue[st], ct = X.pfValue[st], ut = 1 - lt, dt = lt, pt = { x: (bt = "node-position" === W ? Ue : Ve).x1 * ut + bt.x2 * dt, y: bt.y1 * ut + bt.y2 * dt }; Vt.segpts.push(pt.x + a.x * ct, pt.y + a.y * ct) } } else if (w.length % 2 != 1 || f !== Math.floor(w.length / 2) || g) { var ft = g; Vt.edgeType = ft ? "multibezier" : "bezier", Vt.ctrlpts = []; for (var ht = 0; ht < V; ht++) { var gt, mt = (.5 - w.length / 2 + f) * U, vt = r.signum(mt); ft && (H = L ? L.pfValue[ht] : U, G = q.value[ht]); var bt, yt = void 0 !== (gt = g ? H : void 0 !== H ? vt * H : void 0) ? gt : mt; ut = 1 - G, dt = G, z && (k = ut, ut = dt, dt = k), pt = { x: (bt = "node-position" === W ? Ue : Ve).x1 * ut + bt.x2 * dt, y: bt.y1 * ut + bt.y2 * dt }, Vt.ctrlpts.push(pt.x + a.x * yt, pt.y + a.y * yt) } } else Vt.edgeType = "straight"; this.findEndpoints(Bt); var xt = !i.number(Vt.startX) || !i.number(Vt.startY), wt = !i.number(Vt.arrowStartX) || !i.number(Vt.arrowStartY), kt = !i.number(Vt.endX) || !i.number(Vt.endY), At = !i.number(Vt.arrowEndX) || !i.number(Vt.arrowEndY), Et = this.getArrowWidth(Bt.pstyle("width").pfValue, Bt.pstyle("arrow-scale").value) * this.arrowShapeWidth * 3; if ("bezier" === Vt.edgeType) { var St = r.dist({ x: Vt.ctrlpts[0], y: Vt.ctrlpts[1] }, { x: Vt.startX, y: Vt.startY }), $t = St < Et, Ct = r.dist({ x: Vt.ctrlpts[0], y: Vt.ctrlpts[1] }, { x: Vt.endX, y: Vt.endY }), _t = Ct < Et, Ot = !1; if (xt || wt || $t) { Ot = !0; var Tt = { x: Vt.ctrlpts[0] - Wt.x, y: Vt.ctrlpts[1] - Wt.y }, jt = Math.sqrt(Tt.x * Tt.x + Tt.y * Tt.y), Pt = { x: Tt.x / jt, y: Tt.y / jt }, Dt = Math.max(Xt, Qt), Rt = { x: Vt.ctrlpts[0] + 2 * Pt.x * Dt, y: Vt.ctrlpts[1] + 2 * Pt.y * Dt }, It = n.intersectLine(Wt.x, Wt.y, Xt, Qt, Rt.x, Rt.y, 0); $t ? (Vt.ctrlpts[0] = Vt.ctrlpts[0] + Pt.x * (Et - St), Vt.ctrlpts[1] = Vt.ctrlpts[1] + Pt.y * (Et - St)) : (Vt.ctrlpts[0] = It[0] + Pt.x * Et, Vt.ctrlpts[1] = It[1] + Pt.y * Et) } if (kt || At || _t) { Ot = !0, Tt = { x: Vt.ctrlpts[0] - Yt.x, y: Vt.ctrlpts[1] - Yt.y }, jt = Math.sqrt(Tt.x * Tt.x + Tt.y * Tt.y), Pt = { x: Tt.x / jt, y: Tt.y / jt }, Dt = Math.max(Xt, Qt), Rt = { x: Vt.ctrlpts[0] + 2 * Pt.x * Dt, y: Vt.ctrlpts[1] + 2 * Pt.y * Dt }; var Nt = o.intersectLine(Yt.x, Yt.y, Zt, Jt, Rt.x, Rt.y, 0); _t ? (Vt.ctrlpts[0] = Vt.ctrlpts[0] + Pt.x * (Et - Ct), Vt.ctrlpts[1] = Vt.ctrlpts[1] + Pt.y * (Et - Ct)) : (Vt.ctrlpts[0] = Nt[0] + Pt.x * Et, Vt.ctrlpts[1] = Nt[1] + Pt.y * Et) } Ot && this.findEndpoints(Bt) } if ("multibezier" === Vt.edgeType || "bezier" === Vt.edgeType || "self" === Vt.edgeType || "compound" === Vt.edgeType) { for (Vt.allpts = [], Vt.allpts.push(Vt.startX, Vt.startY), ht = 0; ht + 1 < Vt.ctrlpts.length; ht += 2)Vt.allpts.push(Vt.ctrlpts[ht], Vt.ctrlpts[ht + 1]), ht + 3 < Vt.ctrlpts.length && Vt.allpts.push((Vt.ctrlpts[ht] + Vt.ctrlpts[ht + 2]) / 2, (Vt.ctrlpts[ht + 1] + Vt.ctrlpts[ht + 3]) / 2); var Mt; Vt.allpts.push(Vt.endX, Vt.endY), Vt.ctrlpts.length / 2 % 2 == 0 ? (Mt = Vt.allpts.length / 2 - 1, Vt.midX = Vt.allpts[Mt], Vt.midY = Vt.allpts[Mt + 1]) : (Mt = Vt.allpts.length / 2 - 3, Vt.midX = r.qbezierAt(Vt.allpts[Mt], Vt.allpts[Mt + 2], Vt.allpts[Mt + 4], .5), Vt.midY = r.qbezierAt(Vt.allpts[Mt + 1], Vt.allpts[Mt + 3], Vt.allpts[Mt + 5], .5)) } else if ("straight" === Vt.edgeType) Vt.allpts = [Vt.startX, Vt.startY, Vt.endX, Vt.endY], Vt.midX = (Vt.startX + Vt.endX + Vt.arrowStartX + Vt.arrowEndX) / 4, Vt.midY = (Vt.startY + Vt.endY + Vt.arrowStartY + Vt.arrowEndY) / 4; else if ("segments" === Vt.edgeType) if (Vt.allpts = [], Vt.allpts.push(Vt.startX, Vt.startY), Vt.allpts.push.apply(Vt.allpts, Vt.segpts), Vt.allpts.push(Vt.endX, Vt.endY), Vt.segpts.length % 4 == 0) { var zt = Vt.segpts.length / 2, Lt = zt - 2; Vt.midX = (Vt.segpts[Lt] + Vt.segpts[zt]) / 2, Vt.midY = (Vt.segpts[Lt + 1] + Vt.segpts[zt + 1]) / 2 } else Lt = Vt.segpts.length / 2 - 1, Vt.midX = Vt.segpts[Lt], Vt.midY = Vt.segpts[Lt + 1]; this.storeEdgeProjections(Bt), this.calculateArrowAngles(Bt) } this.recalculateEdgeLabelProjections(Bt), this.calculateLabelAngles(Bt) } } for (f = 0; f < p.length; f++) { var Bt, Ft, qt = (Ft = (Bt = p[f])._private).rscratch, Vt = qt; if (!qt.haystack) { var Ut = 2 * Math.random() * Math.PI; qt.source = { x: Math.cos(Ut), y: Math.sin(Ut) }, Ut = 2 * Math.random() * Math.PI, qt.target = { x: Math.cos(Ut), y: Math.sin(Ut) } } var Ht = Ft.source, Gt = Ft.target, Wt = Ht.position(), Yt = Gt.position(), Xt = Ht.width(), Zt = Gt.width(), Qt = Ht.height(), Jt = Gt.height(), Kt = (Dt = Bt.pstyle("haystack-radius").value) / 2; Vt.haystackPts = Vt.allpts = [Vt.source.x * Xt * Kt + Wt.x, Vt.source.y * Qt * Kt + Wt.y, Vt.target.x * Zt * Kt + Yt.x, Vt.target.y * Jt * Kt + Yt.y], Vt.midX = (Vt.allpts[0] + Vt.allpts[2]) / 2, Vt.midY = (Vt.allpts[1] + Vt.allpts[3]) / 2, qt.edgeType = qt.lastCurveStyle = "haystack", qt.haystack = !0, this.storeEdgeProjections(Bt), this.calculateArrowAngles(Bt), this.recalculateEdgeLabelProjections(Bt), this.calculateLabelAngles(Bt) } } }, o.getSegmentPoints = function (e) { var t = e[0]._private.rscratch; if ("segments" === t.edgeType) return a(t.segpts) }, o.getControlPoints = function (e) { var t = e[0]._private.rscratch, n = t.edgeType; if ("bezier" === n || "multibezier" === n || "self" === n || "compound" === n) return a(t.ctrlpts) }, o.getEdgeMidpoint = function (e) { var t = e[0]._private.rscratch; return { x: t.midX, y: t.midY } }, e.exports = o }, function (e, t, n) { "use strict"; var r = n(2), i = n(0), o = { manualEndptToPx: function (e, t) { var n = e.position(), r = e.outerWidth(), i = e.outerHeight(); if (2 === t.value.length) { var o = [t.pfValue[0], t.pfValue[1]]; return "%" === t.units[0] && (o[0] = o[0] * r), "%" === t.units[1] && (o[1] = o[1] * i), o[0] += n.x, o[1] += n.y, o } var a = t.pfValue[0]; a = -Math.PI / 2 + a; var s = 2 * Math.max(r, i), l = [n.x + Math.cos(a) * s, n.y + Math.sin(a) * s]; return this.nodeShapes[this.getNodeShape(e)].intersectLine(n.x, n.y, r, i, l[0], l[1], 0) }, findEndpoints: function (e) { var t = this, n = void 0, o = e.source()[0], a = e.target()[0], s = o.position(), l = a.position(), c = e.pstyle("target-arrow-shape").value, u = e.pstyle("source-arrow-shape").value, d = e.pstyle("target-distance-from-node").pfValue, p = e.pstyle("source-distance-from-node").pfValue, f = e._private.rscratch, h = f.edgeType, g = "self" === h || "compound" === h, m = "bezier" === h || "multibezier" === h || g, v = "bezier" !== h, b = "straight" === h || "segments" === h, y = "segments" === h, x = m || v || b, w = e.pstyle("source-endpoint"), k = g ? "outside-to-node" : w.value, A = e.pstyle("target-endpoint"), E = g ? "outside-to-node" : A.value; f.srcManEndpt = w, f.tgtManEndpt = A; var S = void 0, $ = void 0, C = void 0, _ = void 0; if (m) { var O = [f.ctrlpts[0], f.ctrlpts[1]]; S = v ? [f.ctrlpts[f.ctrlpts.length - 2], f.ctrlpts[f.ctrlpts.length - 1]] : O, $ = O } else if (b) { var T = y ? f.segpts.slice(0, 2) : [l.x, l.y]; S = y ? f.segpts.slice(f.segpts.length - 2) : [s.x, s.y], $ = T } "inside-to-node" === E ? n = [l.x, l.y] : A.units ? n = this.manualEndptToPx(a, A) : "outside-to-line" === E ? n = f.tgtIntn : ("outside-to-node" === E ? C = S : "outside-to-line" === E && (C = [s.x, s.y]), n = t.nodeShapes[this.getNodeShape(a)].intersectLine(l.x, l.y, a.outerWidth(), a.outerHeight(), C[0], C[1], 0)); var j = r.shortenIntersection(n, S, t.arrowShapes[c].spacing(e) + d), P = r.shortenIntersection(n, S, t.arrowShapes[c].gap(e) + d); e.hasClass("horizontal") ? (f.endX = n[0] - d, f.endY = n[1], f.arrowEndX = n[0] - d / 2, f.arrowEndY = n[1]) : e.hasClass("vertical") ? (f.endX = n[0], f.endY = n[1] - d, f.arrowEndX = n[0], f.arrowEndY = n[1] - d / 2) : (f.endX = P[0], f.endY = P[1], f.arrowEndX = j[0], f.arrowEndY = j[1]), "inside-to-node" === k ? n = [s.x, s.y] : w.units ? n = this.manualEndptToPx(o, w) : "outside-to-line" === k ? n = f.srcIntn : ("outside-to-node" === k ? _ = $ : "outside-to-line" === k && (_ = [l.x, l.y]), n = t.nodeShapes[this.getNodeShape(o)].intersectLine(s.x, s.y, o.outerWidth(), o.outerHeight(), _[0], _[1], 0)); var D = r.shortenIntersection(n, $, t.arrowShapes[u].spacing(e) + p), R = r.shortenIntersection(n, $, t.arrowShapes[u].gap(e) + p); f.startX = R[0], f.startY = R[1], f.arrowStartX = D[0], f.arrowStartY = D[1], x && (i.number(f.startX) && i.number(f.startY) && i.number(f.endX) && i.number(f.endY) ? f.badLine = !1 : f.badLine = !0) }, getSourceEndpoint: function (e) { var t = e[0]._private.rscratch; switch (t.edgeType) { case "haystack": return { x: t.haystackPts[0], y: t.haystackPts[1] }; default: return { x: t.arrowStartX, y: t.arrowStartY } } }, getTargetEndpoint: function (e) { var t = e[0]._private.rscratch; switch (t.edgeType) { case "haystack": return { x: t.haystackPts[2], y: t.haystackPts[3] }; default: return { x: t.arrowEndX, y: t.arrowEndY } } } }; e.exports = o }, function (e, t, n) { "use strict"; var r = n(2), i = {}; function o(e, t, n) { for (var i = function (e, t, n, i) { return r.qbezierAt(e, t, n, i) }, o = t._private.rstyle.bezierPts, a = 0; a < e.bezierProjPcts.length; a++) { var s = e.bezierProjPcts[a]; o.push({ x: i(n[0], n[2], n[4], s), y: i(n[1], n[3], n[5], s) }) } } i.storeEdgeProjections = function (e) { var t = e._private, n = t.rscratch, r = n.edgeType; if (t.rstyle.bezierPts = null, t.rstyle.linePts = null, t.rstyle.haystackPts = null, "multibezier" === r || "bezier" === r || "self" === r || "compound" === r) { t.rstyle.bezierPts = []; for (var i = 0; i + 5 < n.allpts.length; i += 4)o(this, e, n.allpts.slice(i, i + 6)) } else if ("segments" === r) { var a = t.rstyle.linePts = []; for (i = 0; i + 1 < n.allpts.length; i += 2)a.push({ x: n.allpts[i], y: n.allpts[i + 1] }) } else if ("haystack" === r) { var s = n.haystackPts; t.rstyle.haystackPts = [{ x: s[0], y: s[1] }, { x: s[2], y: s[3] }] } t.rstyle.arrowWidth = this.getArrowWidth(e.pstyle("width").pfValue, e.pstyle("arrow-scale").value) * this.arrowShapeWidth }, i.recalculateEdgeProjections = function (e) { this.findEdgeControlPoints(e) }, e.exports = i }, function (e, t, n) { "use strict"; var r = n(2), i = n(0), o = n(1), a = { recalculateNodeLabelProjection: function (e) { var t = e.pstyle("label").strValue; if (!i.emptyString(t)) { var n, r, o = e._private, a = e.width(), s = e.height(), l = e.padding(), c = e.position(), u = e.pstyle("text-halign").strValue, d = e.pstyle("text-valign").strValue, p = o.rscratch, f = o.rstyle; switch (u) { case "left": n = c.x - a / 2 - l; break; case "right": n = c.x + a / 2 + l; break; default: n = c.x }switch (d) { case "top": r = c.y - s / 2 - l; break; case "bottom": r = c.y + s / 2 + l; break; default: r = c.y }p.labelX = n, p.labelY = r, f.labelX = n, f.labelY = r, this.applyLabelDimensions(e) } }, recalculateEdgeLabelProjections: function (e) { var t, n = e._private, i = n.rscratch, a = this, s = { mid: e.pstyle("label").strValue, source: e.pstyle("source-label").strValue, target: e.pstyle("target-label").strValue }; if (s.mid || s.source || s.target) { t = { x: i.midX, y: i.midY }; var l = function (e, t, r) { o.setPrefixedProperty(n.rscratch, e, t, r), o.setPrefixedProperty(n.rstyle, e, t, r) }; l("labelX", null, t.x), l("labelY", null, t.y); var c = function (o) { var c, u = "source" === o; if (s[o]) { var d = e.pstyle(o + "-text-offset").pfValue, p = function (e, t) { var n = t.x - e.x, r = t.y - e.y; return Math.atan(r / n) }; switch (i.edgeType) { case "self": case "compound": case "bezier": case "multibezier": for (var f, h = function e() { if (e.cache) return e.cache; for (var t = [], o = 0; o + 5 < i.allpts.length; o += 4) { var s = { x: i.allpts[o], y: i.allpts[o + 1] }, l = { x: i.allpts[o + 2], y: i.allpts[o + 3] }, c = { x: i.allpts[o + 4], y: i.allpts[o + 5] }; t.push({ p0: s, p1: l, p2: c, startDist: 0, length: 0, segments: [] }) } var u = n.rstyle.bezierPts, d = a.bezierProjPcts.length; function p(e, t, n, i, o) { var a = r.dist(t, n), s = e.segments[e.segments.length - 1], l = { p0: t, p1: n, t0: i, t1: o, startDist: s ? s.startDist + s.length : 0, length: a }; e.segments.push(l), e.length += a } for (o = 0; o < t.length; o++) { var f = t[o], h = t[o - 1]; h && (f.startDist = h.startDist + h.length), p(f, f.p0, u[o * d], 0, a.bezierProjPcts[0]); for (var g = 0; g < d - 1; g++)p(f, u[o * d + g], u[o * d + g + 1], a.bezierProjPcts[g], a.bezierProjPcts[g + 1]); p(f, u[o * d + d - 1], f.p2, a.bezierProjPcts[d - 1], 1) } return e.cache = t }(), g = 0, m = 0, v = 0; v < h.length; v++) { for (var b = h[u ? v : h.length - 1 - v], y = 0; y < b.segments.length; y++) { var x = b.segments[u ? y : b.segments.length - 1 - y], w = v === h.length - 1 && y === b.segments.length - 1; if (g = m, (m += x.length) >= d || w) { f = { cp: b, segment: x }; break } } if (f) break } b = f.cp; var k = (d - g) / (x = f.segment).length, A = x.t1 - x.t0, E = u ? x.t0 + A * k : x.t1 - A * k; E = r.bound(0, E, 1), t = r.qbezierPtAt(b.p0, b.p1, b.p2, E), c = function (e, t, n, i) { var o = r.bound(0, i - .001, 1), a = r.bound(0, i + .001, 1), s = r.qbezierPtAt(e, t, n, o), l = r.qbezierPtAt(e, t, n, a); return p(s, l) }(b.p0, b.p1, b.p2, E); break; case "straight": case "segments": case "haystack": var S, $, C, _, O = 0, T = i.allpts.length; for (v = 0; v + 3 < T && (u ? (C = { x: i.allpts[v], y: i.allpts[v + 1] }, _ = { x: i.allpts[v + 2], y: i.allpts[v + 3] }) : (C = { x: i.allpts[T - 2 - v], y: i.allpts[T - 1 - v] }, _ = { x: i.allpts[T - 4 - v], y: i.allpts[T - 3 - v] }), $ = O, !((O += S = r.dist(C, _)) >= d)); v += 2); E = (d - $) / S, E = r.bound(0, E, 1), t = r.lineAt(C, _, E), c = p(C, _) }l("labelX", o, t.x), l("labelY", o, t.y), l("labelAutoAngle", o, c) } }; c("source"), c("target"), this.applyLabelDimensions(e) } }, applyLabelDimensions: function (e) { this.applyPrefixedLabelDimensions(e), e.isEdge() && (this.applyPrefixedLabelDimensions(e, "source"), this.applyPrefixedLabelDimensions(e, "target")) }, applyPrefixedLabelDimensions: function (e, t) { var n = e._private, r = this.getLabelText(e, t), i = this.calculateLabelDimensions(e, r); o.setPrefixedProperty(n.rstyle, "labelWidth", t, i.width), o.setPrefixedProperty(n.rscratch, "labelWidth", t, i.width), o.setPrefixedProperty(n.rstyle, "labelHeight", t, i.height), o.setPrefixedProperty(n.rscratch, "labelHeight", t, i.height) }, getLabelText: function (e, t) { var n = e._private, r = t ? t + "-" : "", i = e.pstyle(r + "label").strValue, a = e.pstyle("text-transform").value, s = function (e, r) { return r ? (o.setPrefixedProperty(n.rscratch, e, t, r), r) : o.getPrefixedProperty(n.rscratch, e, t) }; "none" == a || ("uppercase" == a ? i = i.toUpperCase() : "lowercase" == a && (i = i.toLowerCase())); var l = e.pstyle("text-wrap").value; if ("wrap" === l) { var c = s("labelKey"); if (c && s("labelWrapKey") === c) return s("labelWrapCachedText"); for (var u = i.split("\n"), d = e.pstyle("text-max-width").pfValue, p = [], f = 0; f < u.length; f++) { var h = u[f]; if (this.calculateLabelDimensions(e, h, "line=" + h).width > d) { for (var g = h.split(/\s+/), m = "", v = 0; v < g.length; v++) { var b = g[v], y = 0 === m.length ? b : m + " " + b; this.calculateLabelDimensions(e, y, "testLine=" + y).width <= d ? m += b + " " : (p.push(m), m = b + " ") } m.match(/^\s+$/) || p.push(m) } else p.push(h) } s("labelWrapCachedLines", p), i = s("labelWrapCachedText", p.join("\n")), s("labelWrapKey", c) } else if ("ellipsis" === l) { d = e.pstyle("text-max-width").pfValue; for (var x = "", w = !1, k = 0; k < i.length && !(this.calculateLabelDimensions(e, x + i[k] + "…").width > d); k++)x += i[k], k === i.length - 1 && (w = !0); return w || (x += "…"), x } return i }, calculateLabelDimensions: function (e, t, n) { var r = e._private.labelStyleKey + "$@$" + t; n && (r += "$@$" + n); var i = this.labelDimCache || (this.labelDimCache = {}); if (i[r]) return i[r]; var o = e.pstyle("font-style").strValue, a = 1 * e.pstyle("font-size").pfValue + "px", s = e.pstyle("font-family").strValue, l = e.pstyle("font-weight").strValue, c = this.labelCalcDiv; c || (c = this.labelCalcDiv = document.createElement("div"), document.body.appendChild(c)); var u = c.style; return u.fontFamily = s, u.fontStyle = o, u.fontSize = a, u.fontWeight = l, u.position = "absolute", u.left = "-9999px", u.top = "-9999px", u.zIndex = "-1", u.visibility = "hidden", u.pointerEvents = "none", u.padding = "0", u.lineHeight = "1", "wrap" === e.pstyle("text-wrap").value ? u.whiteSpace = "pre" : u.whiteSpace = "normal", c.textContent = t, i[r] = { width: Math.ceil(c.clientWidth / 1), height: Math.ceil(c.clientHeight / 1) }, i[r] }, calculateLabelAngles: function (e) { var t = e._private.rscratch, n = e.isEdge(), r = e.pstyle("text-rotation"), i = r.strValue; "none" === i ? t.labelAngle = t.sourceLabelAngle = t.targetLabelAngle = 0 : n && "autorotate" === i ? (t.labelAngle = Math.atan(t.midDispY / t.midDispX), t.sourceLabelAngle = t.sourceLabelAutoAngle, t.targetLabelAngle = t.targetLabelAutoAngle) : t.labelAngle = t.sourceLabelAngle = t.targetLabelAngle = "autorotate" === i ? 0 : r.pfValue } }; e.exports = a }, function (e, t, n) { "use strict"; var r = { getNodeShape: function (e) { var t = e.pstyle("shape").value; if (e.isParent()) return "rectangle" === t || "roundrectangle" === t || "cutrectangle" === t || "barrel" === t ? t : "rectangle"; if ("polygon" === t) { var n = e.pstyle("shape-polygon-points").value; return this.nodeShapes.makePolygon(n).name } return t } }; e.exports = r }, function (e, t, n) { "use strict"; var r = { registerCalculationListeners: function () { var e = this.cy, t = e.collection(), n = this, r = function (e, n) { var r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; t.merge(e); for (var i = 0; i < e.length; i++) { var o = e[i], a = o._private, s = a.rstyle; r && (s.clean = !1, a.bbCache = null); var l = s.dirtyEvents = s.dirtyEvents || { length: 0 }; l[n.type] || (l[n.type] = !0, l.length++) } }; n.binder(e).on("position.* style.* free.* bounds.*", "node", (function (e) { var t = e.target; r(t, e), r(t.connectedEdges(), e) })).on("add.*", "node", (function (e) { var t = e.target; r(t, e) })).on("background.*", "node", (function (e) { var t = e.target; r(t, e, !1) })).on("add.* style.*", "edge", (function (e) { var t = e.target; r(t, e), r(t.parallelEdges(), e) })).on("remove.*", "edge", (function (e) { for (var t = e.target.parallelEdges(), n = 0; n < t.length; n++) { var i = t[n]; i.removed() || r(i, e) } })).on("dirty.*", "node", (function (e) { var t = e.target; r(t, e) })), n.beforeRender((function (r) { if (r) { var i = n.onUpdateEleCalcsFns; if (i) for (var o = 0; o < i.length; o++)(0, i[o])(r, t); for (n.recalculateRenderedStyle(t, !1), o = 0; o < t.length; o++)t[o]._private.rstyle.dirtyEvents = null; t = e.collection() } }), n.beforeRenderPriorities.eleCalcs) }, onUpdateEleCalcs: function (e) { (this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || []).push(e) }, recalculateRenderedStyle: function (e, t) { var n = [], r = []; if (!this.destroyed) { void 0 === t && (t = !0); for (var i = 0; i < e.length; i++) { var o = (l = (s = e[i])._private).rstyle; t && o.clean || s.removed() || "none" !== s.pstyle("display").value && ("nodes" === l.group ? r.push(s) : n.push(s), o.clean = !0) } for (i = 0; i < r.length; i++) { o = (l = (s = r[i])._private).rstyle; var a = s.position(); this.recalculateNodeLabelProjection(s), o.nodeX = a.x, o.nodeY = a.y, o.nodeW = s.pstyle("width").pfValue, o.nodeH = s.pstyle("height").pfValue } for (this.recalculateEdgeProjections(n), i = 0; i < n.length; i++) { o = (l = (s = n[i])._private).rstyle; var s, l, c = l.rscratch; this.recalculateEdgeLabelProjections(s), o.srcX = c.arrowStartX, o.srcY = c.arrowStartY, o.tgtX = c.arrowEndX, o.tgtY = c.arrowEndY, o.midX = c.midX, o.midY = c.midY, o.labelAngle = c.labelAngle, o.sourceLabelAngle = c.sourceLabelAngle, o.targetLabelAngle = c.targetLabelAngle } } } }; e.exports = r }, function (e, t, n) { "use strict"; var r = n(17), i = { updateCachedGrabbedEles: function () { var e = this.cachedZSortedEles; if (e) { e.drag = [], e.nondrag = []; for (var t = [], n = 0; n < e.length; n++) { var r = (i = e[n])._private.rscratch; i.grabbed() && !i.isParent() ? t.push(i) : r.inDragLayer ? e.drag.push(i) : e.nondrag.push(i) } for (n = 0; n < t.length; n++) { var i = t[n]; e.drag.push(i) } } }, invalidateCachedZSortedEles: function () { this.cachedZSortedEles = null }, getCachedZSortedEles: function (e) { if (e || !this.cachedZSortedEles) { var t = this.cy.mutableElements().toArray(); t.sort(r), t.interactive = t.filter((function (e) { return e.interactive() })), this.cachedZSortedEles = t, this.updateCachedGrabbedEles() } else t = this.cachedZSortedEles; return t } }; e.exports = i }, function (e, t, n) { "use strict"; var r = { getCachedImage: function (e, t, n) { var r = this.imageCache = this.imageCache || {}, i = r[e]; if (i) return i.image.complete || i.image.addEventListener("load", n), i.image; var o = (i = r[e] = r[e] || {}).image = new Image; return o.addEventListener("load", n), o.addEventListener("error", (function () { o.error = !0 })), "data:" === e.substring(0, "data:".length).toLowerCase() || (o.crossOrigin = t), o.src = e, o } }; e.exports = r }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(2), a = (n(16), { registerBinding: function (e, t, n, r) { var i = Array.prototype.slice.apply(arguments, [1]), o = this.binder(e); return o.on.apply(o, i) }, binder: function (e) { var t = this, n = e === window || e === document || e === document.body || r.domElement(e); if (null == t.supportsPassiveEvents) { var i = !1; try { var o = Object.defineProperty({}, "passive", { get: function () { i = !0 } }); window.addEventListener("test", null, o) } catch (e) { } t.supportsPassiveEvents = i } var a = function (r, i, o) { var a = Array.prototype.slice.call(arguments); return n && t.supportsPassiveEvents && (a[2] = { capture: null != o && o, passive: !1, once: !1 }), t.bindings.push({ target: e, args: a }), (e.addEventListener || e.on).apply(e, a), this }; return { on: a, addEventListener: a, addListener: a, bind: a } }, nodeIsDraggable: function (e) { return e && e.isNode() && !e.locked() && e.grabbable() }, nodeIsGrabbable: function (e) { return this.nodeIsDraggable(e) && e.interactive() } }); a.load = function () { var e = this, t = function (t, n, r, o) { null == t && (t = e.cy); for (var a = 0; a < n.length; a++) { var s = n[a]; t.emit(i.extend({ originalEvent: r, type: s }, o)) } }, n = function (e) { return e.shiftKey || e.metaKey || e.ctrlKey }, a = function (t, n) { var r = !0; if (e.cy.hasCompoundNodes() && t && t.isEdge()) { for (var i = 0; n && i < n.length; i++)if ((t = n[i]).isNode() && t.isParent()) { r = !1; break } } else r = !0; return r }, s = function (e) { e[0]._private.rscratch.inDragLayer = !0 }, l = function (e) { e[0]._private.rscratch.isGrabTarget = !0 }, c = function (t, n) { var r = function (t) { var n; if (t.addToList && e.cy.hasCompoundNodes()) { if (!t.addToList.hasId) { t.addToList.hasId = {}; for (var r = 0; r < t.addToList.length; r++) { var i = t.addToList[r]; t.addToList.hasId[i.id()] = !0 } } n = t.addToList.hasId } return n || {} }(n); r[t.id()] || (n.addToList.push(t), r[t.id()] = !0, function (e) { e[0]._private.grabbed = !0 }(t)) }, u = function (t, n) { n = n || {}; var r = t.cy().hasCompoundNodes(); n.inDragLayer && (t.forEach(s), t.neighborhood().stdFilter((function (e) { return !r || e.isEdge() })).forEach(s)), n.addToList && t.forEach((function (e) { c(e, n) })), function (e, t) { if (e.cy().hasCompoundNodes() && (null != t.inDragLayer || null != t.addToList)) { var n = e.descendants(); t.inDragLayer && (n.forEach(s), n.connectedEdges().forEach(s)), t.addToList && n.forEach((function (e) { c(e, t) })) } }(t, n), f(t, { inDragLayer: n.inDragLayer }), e.updateCachedGrabbedEles() }, d = u, p = function (t) { t && (t.hasId = {}, e.getCachedZSortedEles().forEach((function (e) { !function (e) { e[0]._private.grabbed = !1 }(e), function (e) { e[0]._private.rscratch.inDragLayer = !1 }(e), function (e) { e[0]._private.rscratch.isGrabTarget = !1 }(e) })), e.updateCachedGrabbedEles()) }, f = function (e, t) { if ((null != t.inDragLayer || null != t.addToList) && e.cy().hasCompoundNodes()) { var n = e.ancestors().orphans(); if (!n.same(e)) { var r = n.descendants().spawnSelf().merge(n).unmerge(e).unmerge(e.descendants()), i = r.connectedEdges(); t.inDragLayer && (i.forEach(s), r.forEach(s)), t.addToList && r.forEach((function (e) { c(e, t) })) } } }, h = "undefined" != typeof MutationObserver; h ? (e.removeObserver = new MutationObserver((function (t) { for (var n = 0; n < t.length; n++) { var r = t[n].removedNodes; if (r) for (var i = 0; i < r.length; i++)if (r[i] === e.container) { e.destroy(); break } } })), e.container.parentNode && e.removeObserver.observe(e.container.parentNode, { childList: !0 })) : e.registerBinding(e.container, "DOMNodeRemoved", (function (t) { e.destroy() })); var g = i.debounce((function () { e.cy.resize() }), 100); h && (e.styleObserver = new MutationObserver(g), e.styleObserver.observe(e.container, { attributes: !0 })), e.registerBinding(window, "resize", g); var m = function () { e.invalidateContainerClientCoordsCache() }; !function (e, t) { for (; null != e;)t(e), e = e.parentNode }(e.container, (function (t) { e.registerBinding(t, "transitionend", m), e.registerBinding(t, "animationend", m), e.registerBinding(t, "scroll", m) })), e.registerBinding(e.container, "contextmenu", (function (e) { e.preventDefault() })); var v, b, y, x, w, k, A, E, S, $, C, _, O, T = function (t) { for (var n = e.findContainerClientCoords(), r = n[0], i = n[1], o = n[2], a = n[3], s = t.touches ? t.touches : [t], l = !1, c = 0; c < s.length; c++) { var u = s[c]; if (r <= u.clientX && u.clientX <= r + o && i <= u.clientY && u.clientY <= i + a) { l = !0; break } } if (!l) return !1; for (var d = e.container, p = t.target.parentNode, f = !1; p;) { if (p === d) { f = !0; break } p = p.parentNode } return !!f }; e.registerBinding(e.container, "mousedown", (function (n) { if (T(n)) { n.preventDefault(), e.hoverData.capture = !0, e.hoverData.which = n.which; var r = e.cy, i = [n.clientX, n.clientY], o = e.projectIntoViewport(i[0], i[1]), a = e.selection, s = e.findNearestElements(o[0], o[1], !0, !1), c = s[0], p = e.dragData.possibleDragElements; if (e.hoverData.mdownPos = o, e.hoverData.mdownGPos = i, 3 == n.which) { e.hoverData.cxtStarted = !0; var f = { originalEvent: n, type: "cxttapstart", position: { x: o[0], y: o[1] } }; c ? (c.activate(), c.emit(f), e.hoverData.down = c) : r.emit(f), e.hoverData.downTime = (new Date).getTime(), e.hoverData.cxtDragged = !1 } else if (1 == n.which) { if (c && c.activate(), null != c && e.nodeIsGrabbable(c)) { var h = function (e) { return { originalEvent: n, type: e, position: { x: o[0], y: o[1] } } }; if (l(c), c.selected()) { p = e.dragData.possibleDragElements = []; var g = r.$((function (t) { return t.isNode() && t.selected() && e.nodeIsGrabbable(t) })); u(g, { addToList: p }), c.emit(h("grabon")), g.forEach((function (e) { e.emit(h("grab")) })) } else p = e.dragData.possibleDragElements = [], d(c, { addToList: p }), c.emit(h("grabon")).emit(h("grab")); e.redrawHint("eles", !0), e.redrawHint("drag", !0) } e.hoverData.down = c, e.hoverData.downs = s, e.hoverData.downTime = (new Date).getTime(), t(c, ["mousedown", "tapstart", "vmousedown"], n, { position: { x: o[0], y: o[1] } }), null == c ? (a[4] = 1, e.data.bgActivePosistion = { x: o[0], y: o[1] }, e.redrawHint("select", !0), e.redraw()) : c.isEdge() && (a[4] = 1), e.hoverData.tapholdCancelled = !1, clearTimeout(e.hoverData.tapholdTimeout), e.hoverData.tapholdTimeout = setTimeout((function () { if (!e.hoverData.tapholdCancelled) { var t = e.hoverData.down; t ? t.emit({ originalEvent: n, type: "taphold", position: { x: o[0], y: o[1] } }) : r.emit({ originalEvent: n, type: "taphold", position: { x: o[0], y: o[1] } }) } }), e.tapholdDuration) } a[0] = a[2] = o[0], a[1] = a[3] = o[1] } }), !1), e.registerBinding(window, "mousemove", (function (i) { if (e.hoverData.capture || T(i)) { var s = !1, l = e.cy, c = l.zoom(), d = [i.clientX, i.clientY], f = e.projectIntoViewport(d[0], d[1]), h = e.hoverData.mdownPos, g = e.hoverData.mdownGPos, m = e.selection, v = null; e.hoverData.draggingEles || e.hoverData.dragging || e.hoverData.selecting || (v = e.findNearestElement(f[0], f[1], !0, !1)); var b, y = e.hoverData.last, x = e.hoverData.down, w = [f[0] - m[2], f[1] - m[3]], k = e.dragData.possibleDragElements; if (g) { var A = d[0] - g[0], E = A * A, S = d[1] - g[1], $ = E + S * S; e.hoverData.isOverThresholdDrag = b = $ >= e.desktopTapThreshold2 } var C = n(i); b && (e.hoverData.tapholdCancelled = !0), s = !0, t(v, ["mousemove", "vmousemove", "tapdrag"], i, { position: { x: f[0], y: f[1] } }); var _ = function () { e.data.bgActivePosistion = void 0, e.hoverData.selecting || l.emit("boxstart"), m[4] = 1, e.hoverData.selecting = !0, e.redrawHint("select", !0), e.redraw() }; if (3 === e.hoverData.which) { if (b) { var O = { originalEvent: i, type: "cxtdrag", position: { x: f[0], y: f[1] } }; x ? x.emit(O) : l.emit(O), e.hoverData.cxtDragged = !0, e.hoverData.cxtOver && v === e.hoverData.cxtOver || (e.hoverData.cxtOver && e.hoverData.cxtOver.emit({ originalEvent: i, type: "cxtdragout", position: { x: f[0], y: f[1] } }), e.hoverData.cxtOver = v, v && v.emit({ originalEvent: i, type: "cxtdragover", position: { x: f[0], y: f[1] } })) } } else if (e.hoverData.dragging) { if (s = !0, l.panningEnabled() && l.userPanningEnabled()) { var j; if (e.hoverData.justStartedPan) { var P = e.hoverData.mdownPos; j = { x: (f[0] - P[0]) * c, y: (f[1] - P[1]) * c }, e.hoverData.justStartedPan = !1 } else j = { x: w[0] * c, y: w[1] * c }; l.panBy(j), e.hoverData.dragged = !0 } f = e.projectIntoViewport(i.clientX, i.clientY) } else if (1 != m[4] || null != x && !x.isEdge()) { if (x && x.isEdge() && x.active() && x.unactivate(), x && x.grabbed() || v == y || (y && t(y, ["mouseout", "tapdragout"], i, { position: { x: f[0], y: f[1] } }), v && t(v, ["mouseover", "tapdragover"], i, { position: { x: f[0], y: f[1] } }), e.hoverData.last = v), x) if (b) { if (l.boxSelectionEnabled() && C) x && x.grabbed() && (p(k), x.emit("free")), _(); else if (x && x.grabbed() && e.nodeIsDraggable(x)) { var D = !e.dragData.didDrag; D && e.redrawHint("eles", !0), e.dragData.didDrag = !0; var R = []; e.hoverData.draggingEles || u(l.collection(k), { inDragLayer: !0 }); for (var I = 0; I < k.length; I++) { var N = k[I]; if (e.nodeIsDraggable(N) && N.grabbed()) { var M = N.position(); if (R.push(N), r.number(w[0]) && r.number(w[1]) && (M.x += w[0], M.y += w[1], D)) { var z = e.hoverData.dragDelta; z && r.number(z[0]) && r.number(z[1]) && (M.x += z[0], M.y += z[1]) } } } e.hoverData.draggingEles = !0; var L = l.collection(R); L.dirtyCompoundBoundsCache(), L.emit("position drag"), e.redrawHint("drag", !0), e.redraw() } } else !function () { var t = e.hoverData.dragDelta = e.hoverData.dragDelta || []; 0 === t.length ? (t.push(w[0]), t.push(w[1])) : (t[0] += w[0], t[1] += w[1]) }(); s = !0 } else b && (e.hoverData.dragging || !l.boxSelectionEnabled() || !C && l.panningEnabled() && l.userPanningEnabled() ? !e.hoverData.selecting && l.panningEnabled() && l.userPanningEnabled() && a(x, e.hoverData.downs) && (e.hoverData.dragging = !0, e.hoverData.justStartedPan = !0, m[4] = 0, e.data.bgActivePosistion = o.array2point(h), e.redrawHint("select", !0), e.redraw()) : _(), x && x.isEdge() && x.active() && x.unactivate()); return m[2] = f[0], m[3] = f[1], s ? (i.stopPropagation && i.stopPropagation(), i.preventDefault && i.preventDefault(), !1) : void 0 } }), !1), e.registerBinding(window, "mouseup", (function (r) { if (e.hoverData.capture) { e.hoverData.capture = !1; var i = e.cy, o = e.projectIntoViewport(r.clientX, r.clientY), a = e.selection, s = e.findNearestElement(o[0], o[1], !0, !1), l = e.dragData.possibleDragElements, c = e.hoverData.down, u = n(r); if (e.data.bgActivePosistion && (e.redrawHint("select", !0), e.redraw()), e.hoverData.tapholdCancelled = !0, e.data.bgActivePosistion = void 0, c && c.unactivate(), 3 === e.hoverData.which) { var d = { originalEvent: r, type: "cxttapend", position: { x: o[0], y: o[1] } }; if (c ? c.emit(d) : i.emit(d), !e.hoverData.cxtDragged) { var f = { originalEvent: r, type: "cxttap", position: { x: o[0], y: o[1] } }; c ? c.emit(f) : i.emit(f) } e.hoverData.cxtDragged = !1, e.hoverData.which = null } else if (1 === e.hoverData.which) { if (null != c || e.dragData.didDrag || e.hoverData.selecting || e.hoverData.dragged || n(r) || (i.$((function (e) { return e.selected() })).unselect(), l.length > 0 && e.redrawHint("eles", !0), e.dragData.possibleDragElements = l = []), t(s, ["mouseup", "tapend", "vmouseup"], r, { position: { x: o[0], y: o[1] } }), e.dragData.didDrag || e.hoverData.dragged || e.hoverData.selecting || e.hoverData.isOverThresholdDrag || t(c, ["click", "tap", "vclick"], r, { position: { x: o[0], y: o[1] } }), s != c || e.dragData.didDrag || e.hoverData.selecting || null != s && s._private.selectable && (e.hoverData.dragging || ("additive" === i.selectionType() || u ? s.selected() ? s.unselect() : s.select() : u || (i.$(":selected").unmerge(s).unselect(), s.select())), e.redrawHint("eles", !0)), e.hoverData.selecting) { var h = i.collection(e.getAllInBox(a[0], a[1], a[2], a[3])); e.redrawHint("select", !0), h.length > 0 && e.redrawHint("eles", !0), i.emit("boxend"); var g = function (e) { return e.selectable() && !e.selected() }; "additive" === i.selectionType() || u || i.$(":selected").unmerge(h).unselect(), h.emit("box").stdFilter(g).select().emit("boxselect"), e.redraw() } if (e.hoverData.dragging && (e.hoverData.dragging = !1, e.redrawHint("select", !0), e.redrawHint("eles", !0), e.redraw()), !a[4]) { e.redrawHint("drag", !0), e.redrawHint("eles", !0); var m = c && c.grabbed(); p(l), m && c.emit("free") } } a[4] = 0, e.hoverData.down = null, e.hoverData.cxtStarted = !1, e.hoverData.draggingEles = !1, e.hoverData.selecting = !1, e.hoverData.isOverThresholdDrag = !1, e.dragData.didDrag = !1, e.hoverData.dragged = !1, e.hoverData.dragDelta = [], e.hoverData.mdownPos = null, e.hoverData.mdownGPos = null } }), !1), e.registerBinding(e.container, "wheel", (function (t) { if (!e.scrollingPage) { var n, r = e.cy, i = e.projectIntoViewport(t.clientX, t.clientY), o = [i[0] * r.zoom() + r.pan().x, i[1] * r.zoom() + r.pan().y]; e.hoverData.draggingEles || e.hoverData.dragging || e.hoverData.cxtStarted || 0 !== e.selection[4] ? t.preventDefault() : r.panningEnabled() && r.userPanningEnabled() && r.zoomingEnabled() && r.userZoomingEnabled() && (t.preventDefault(), e.data.wheelZooming = !0, clearTimeout(e.data.wheelTimeout), e.data.wheelTimeout = setTimeout((function () { e.data.wheelZooming = !1, e.redrawHint("eles", !0), e.redraw() }), 150), n = null != t.deltaY ? t.deltaY / -250 : null != t.wheelDeltaY ? t.wheelDeltaY / 1e3 : t.wheelDelta / 1e3, n *= e.wheelSensitivity, 1 === t.deltaMode && (n *= 33), r.zoom({ level: r.zoom() * Math.pow(10, n), renderedPosition: { x: o[0], y: o[1] } })) } }), !0), e.registerBinding(window, "scroll", (function (t) { e.scrollingPage = !0, clearTimeout(e.scrollingPageTimeout), e.scrollingPageTimeout = setTimeout((function () { e.scrollingPage = !1 }), 250) }), !0), e.registerBinding(e.container, "mouseout", (function (t) { var n = e.projectIntoViewport(t.clientX, t.clientY); e.cy.emit({ originalEvent: t, type: "mouseout", position: { x: n[0], y: n[1] } }) }), !1), e.registerBinding(e.container, "mouseover", (function (t) { var n = e.projectIntoViewport(t.clientX, t.clientY); e.cy.emit({ originalEvent: t, type: "mouseover", position: { x: n[0], y: n[1] } }) }), !1); var j, P, D, R, I = function (e, t, n, r) { return Math.sqrt((n - e) * (n - e) + (r - t) * (r - t)) }, N = function (e, t, n, r) { return (n - e) * (n - e) + (r - t) * (r - t) }; if (e.registerBinding(e.container, "touchstart", j = function (n) { if (T(n)) { e.touchData.capture = !0, e.data.bgActivePosistion = void 0; var r = e.cy, i = e.touchData.now, o = e.touchData.earlier; if (n.touches[0]) { var a = e.projectIntoViewport(n.touches[0].clientX, n.touches[0].clientY); i[0] = a[0], i[1] = a[1] } if (n.touches[1] && (a = e.projectIntoViewport(n.touches[1].clientX, n.touches[1].clientY), i[2] = a[0], i[3] = a[1]), n.touches[2] && (a = e.projectIntoViewport(n.touches[2].clientX, n.touches[2].clientY), i[4] = a[0], i[5] = a[1]), n.touches[1]) { p(e.dragData.touchDragEles); var s = e.findContainerClientCoords(); S = s[0], $ = s[1], C = s[2], _ = s[3], v = n.touches[0].clientX - S, b = n.touches[0].clientY - $, y = n.touches[1].clientX - S, x = n.touches[1].clientY - $, O = 0 <= v && v <= C && 0 <= y && y <= C && 0 <= b && b <= _ && 0 <= x && x <= _; var c = r.pan(), f = r.zoom(); if (w = I(v, b, y, x), k = N(v, b, y, x), E = [((A = [(v + y) / 2, (b + x) / 2])[0] - c.x) / f, (A[1] - c.y) / f], k < 4e4 && !n.touches[2]) { var h = e.findNearestElement(i[0], i[1], !0, !0), g = e.findNearestElement(i[2], i[3], !0, !0); return h && h.isNode() ? (h.activate().emit({ originalEvent: n, type: "cxttapstart", position: { x: i[0], y: i[1] } }), e.touchData.start = h) : g && g.isNode() ? (g.activate().emit({ originalEvent: n, type: "cxttapstart", position: { x: i[0], y: i[1] } }), e.touchData.start = g) : r.emit({ originalEvent: n, type: "cxttapstart", position: { x: i[0], y: i[1] } }), e.touchData.start && (e.touchData.start._private.grabbed = !1), e.touchData.cxt = !0, e.touchData.cxtDragged = !1, e.data.bgActivePosistion = void 0, void e.redraw() } } if (n.touches[2]); else if (n.touches[1]); else if (n.touches[0]) { var m = e.findNearestElements(i[0], i[1], !0, !0), j = m[0]; if (null != j && (j.activate(), e.touchData.start = j, e.touchData.starts = m, e.nodeIsGrabbable(j))) { var P = e.dragData.touchDragEles = [], D = null; e.redrawHint("eles", !0), e.redrawHint("drag", !0), j.selected() ? (D = r.$((function (t) { return t.selected() && e.nodeIsGrabbable(t) })), u(D, { addToList: P })) : d(j, { addToList: P }), l(j); var R = function (e) { return { originalEvent: n, type: e, position: { x: i[0], y: i[1] } } }; j.emit(R("grabon")), D ? D.forEach((function (e) { e.emit(R("grab")) })) : j.emit(R("grab")) } t(j, ["touchstart", "tapstart", "vmousedown"], n, { position: { x: i[0], y: i[1] } }), null == j && (e.data.bgActivePosistion = { x: a[0], y: a[1] }, e.redrawHint("select", !0), e.redraw()), e.touchData.singleTouchMoved = !1, e.touchData.singleTouchStartTime = +new Date, clearTimeout(e.touchData.tapholdTimeout), e.touchData.tapholdTimeout = setTimeout((function () { !1 !== e.touchData.singleTouchMoved || e.pinching || e.touchData.selecting || (t(e.touchData.start, ["taphold"], n, { position: { x: i[0], y: i[1] } }), e.touchData.start || r.$(":selected").unselect()) }), e.tapholdDuration) } if (n.touches.length >= 1) { for (var M = e.touchData.startPosition = [], z = 0; z < i.length; z++)M[z] = o[z] = i[z]; var L = n.touches[0]; e.touchData.startGPosition = [L.clientX, L.clientY] } } }, !1), e.registerBinding(window, "touchmove", P = function (n) { var i = e.touchData.capture; if (i || T(n)) { var s = e.selection, l = e.cy, c = e.touchData.now, d = e.touchData.earlier, f = l.zoom(); if (n.touches[0]) { var h = e.projectIntoViewport(n.touches[0].clientX, n.touches[0].clientY); c[0] = h[0], c[1] = h[1] } n.touches[1] && (h = e.projectIntoViewport(n.touches[1].clientX, n.touches[1].clientY), c[2] = h[0], c[3] = h[1]), n.touches[2] && (h = e.projectIntoViewport(n.touches[2].clientX, n.touches[2].clientY), c[4] = h[0], c[5] = h[1]); var g, m = e.touchData.startGPosition; if (i && n.touches[0] && m) { for (var A = [], C = 0; C < c.length; C++)A[C] = c[C] - d[C]; var _ = n.touches[0].clientX - m[0], j = _ * _, P = n.touches[0].clientY - m[1]; g = j + P * P >= e.touchTapThreshold2 } if (i && e.touchData.cxt) { n.preventDefault(); var D = n.touches[0].clientX - S, R = n.touches[0].clientY - $, M = n.touches[1].clientX - S, z = n.touches[1].clientY - $, L = N(D, R, M, z); if (L / k >= 2.25 || L >= 22500) { e.touchData.cxt = !1, e.data.bgActivePosistion = void 0, e.redrawHint("select", !0); var B = { originalEvent: n, type: "cxttapend", position: { x: c[0], y: c[1] } }; e.touchData.start ? (e.touchData.start.unactivate().emit(B), e.touchData.start = null) : l.emit(B) } } if (i && e.touchData.cxt) { B = { originalEvent: n, type: "cxtdrag", position: { x: c[0], y: c[1] } }, e.data.bgActivePosistion = void 0, e.redrawHint("select", !0), e.touchData.start ? e.touchData.start.emit(B) : l.emit(B), e.touchData.start && (e.touchData.start._private.grabbed = !1), e.touchData.cxtDragged = !0; var F = e.findNearestElement(c[0], c[1], !0, !0); e.touchData.cxtOver && F === e.touchData.cxtOver || (e.touchData.cxtOver && e.touchData.cxtOver.emit({ originalEvent: n, type: "cxtdragout", position: { x: c[0], y: c[1] } }), e.touchData.cxtOver = F, F && F.emit({ originalEvent: n, type: "cxtdragover", position: { x: c[0], y: c[1] } })) } else if (i && n.touches[2] && l.boxSelectionEnabled()) n.preventDefault(), e.data.bgActivePosistion = void 0, this.lastThreeTouch = +new Date, e.touchData.selecting || l.emit("boxstart"), e.touchData.selecting = !0, e.redrawHint("select", !0), s && 0 !== s.length && void 0 !== s[0] ? (s[2] = (c[0] + c[2] + c[4]) / 3, s[3] = (c[1] + c[3] + c[5]) / 3) : (s[0] = (c[0] + c[2] + c[4]) / 3, s[1] = (c[1] + c[3] + c[5]) / 3, s[2] = (c[0] + c[2] + c[4]) / 3 + 1, s[3] = (c[1] + c[3] + c[5]) / 3 + 1), s[4] = 1, e.touchData.selecting = !0, e.redraw(); else if (i && n.touches[1] && l.zoomingEnabled() && l.panningEnabled() && l.userZoomingEnabled() && l.userPanningEnabled()) { if (n.preventDefault(), e.data.bgActivePosistion = void 0, e.redrawHint("select", !0), ee = e.dragData.touchDragEles) { e.redrawHint("drag", !0); for (var q = 0; q < ee.length; q++) { var V = ee[q]._private; V.grabbed = !1, V.rscratch.inDragLayer = !1 } } D = n.touches[0].clientX - S, R = n.touches[0].clientY - $, M = n.touches[1].clientX - S, z = n.touches[1].clientY - $; var U = I(D, R, M, z), H = U / w; if (O) { var G = (D - v + (M - y)) / 2, W = (R - b + (z - x)) / 2, Y = l.zoom(), X = Y * H, Z = l.pan(), Q = E[0] * Y + Z.x, J = E[1] * Y + Z.y, K = { x: -X / Y * (Q - Z.x - G) + Q, y: -X / Y * (J - Z.y - W) + J }; if (e.touchData.start && e.touchData.start.active()) { var ee = e.dragData.touchDragEles; p(ee), e.redrawHint("drag", !0), e.redrawHint("eles", !0), e.touchData.start.unactivate().emit("free") } l.viewport({ zoom: X, pan: K, cancelOnFailedZoom: !0 }), w = U, v = D, b = R, y = M, x = z, e.pinching = !0 } n.touches[0] && (h = e.projectIntoViewport(n.touches[0].clientX, n.touches[0].clientY), c[0] = h[0], c[1] = h[1]), n.touches[1] && (h = e.projectIntoViewport(n.touches[1].clientX, n.touches[1].clientY), c[2] = h[0], c[3] = h[1]), n.touches[2] && (h = e.projectIntoViewport(n.touches[2].clientX, n.touches[2].clientY), c[4] = h[0], c[5] = h[1]) } else if (n.touches[0]) { var te = e.touchData.start, ne = e.touchData.last; if (e.hoverData.draggingEles || e.swipePanning || (F = e.findNearestElement(c[0], c[1], !0, !0)), i && null != te && n.preventDefault(), i && null != te && e.nodeIsDraggable(te)) if (g) { ee = e.dragData.touchDragEles; var re = !e.dragData.didDrag; re && u(l.collection(ee), { inDragLayer: !0 }); for (var ie = 0; ie < ee.length; ie++) { var oe = ee[ie]; if (e.nodeIsDraggable(oe) && oe.grabbed()) { e.dragData.didDrag = !0; var ae = oe.position(); r.number(A[0]) && r.number(A[1]) && (ae.x += A[0], ae.y += A[1]), re && (e.redrawHint("eles", !0), (le = e.touchData.dragDelta) && r.number(le[0]) && r.number(le[1]) && (ae.x += le[0], ae.y += le[1])) } } var se = l.collection(ee); se.dirtyCompoundBoundsCache(), se.emit("position drag"), e.hoverData.draggingEles = !0, e.redrawHint("drag", !0), e.touchData.startPosition[0] == d[0] && e.touchData.startPosition[1] == d[1] && e.redrawHint("eles", !0), e.redraw() } else { var le; 0 === (le = e.touchData.dragDelta = e.touchData.dragDelta || []).length ? (le.push(A[0]), le.push(A[1])) : (le[0] += A[0], le[1] += A[1]) } if (t(te || F, ["touchmove", "tapdrag", "vmousemove"], n, { position: { x: c[0], y: c[1] } }), te && te.grabbed() || F == ne || (ne && ne.emit({ originalEvent: n, type: "tapdragout", position: { x: c[0], y: c[1] } }), F && F.emit({ originalEvent: n, type: "tapdragover", position: { x: c[0], y: c[1] } })), e.touchData.last = F, i) for (q = 0; q < c.length; q++)c[q] && e.touchData.startPosition[q] && g && (e.touchData.singleTouchMoved = !0); i && (null == te || te.isEdge()) && l.panningEnabled() && l.userPanningEnabled() && (a(te, e.touchData.starts) && (n.preventDefault(), e.swipePanning ? l.panBy({ x: A[0] * f, y: A[1] * f }) : g && (e.swipePanning = !0, l.panBy({ x: _ * f, y: P * f }), te && (te.unactivate(), e.data.bgActivePosistion || (e.data.bgActivePosistion = o.array2point(e.touchData.startPosition)), e.redrawHint("select", !0), e.touchData.start = null))), h = e.projectIntoViewport(n.touches[0].clientX, n.touches[0].clientY), c[0] = h[0], c[1] = h[1]) } for (C = 0; C < c.length; C++)d[C] = c[C] } }, !1), e.registerBinding(window, "touchcancel", D = function (t) { var n = e.touchData.start; e.touchData.capture = !1, n && n.unactivate() }), e.registerBinding(window, "touchend", R = function (n) { var r = e.touchData.start; if (e.touchData.capture) { e.touchData.capture = !1, n.preventDefault(); var i = e.selection; e.swipePanning = !1, e.hoverData.draggingEles = !1; var o, a = e.cy, s = a.zoom(), l = e.touchData.now, c = e.touchData.earlier; if (n.touches[0]) { var u = e.projectIntoViewport(n.touches[0].clientX, n.touches[0].clientY); l[0] = u[0], l[1] = u[1] } if (n.touches[1] && (u = e.projectIntoViewport(n.touches[1].clientX, n.touches[1].clientY), l[2] = u[0], l[3] = u[1]), n.touches[2] && (u = e.projectIntoViewport(n.touches[2].clientX, n.touches[2].clientY), l[4] = u[0], l[5] = u[1]), r && r.unactivate(), e.touchData.cxt) { if (o = { originalEvent: n, type: "cxttapend", position: { x: l[0], y: l[1] } }, r ? r.emit(o) : a.emit(o), !e.touchData.cxtDragged) { var d = { originalEvent: n, type: "cxttap", position: { x: l[0], y: l[1] } }; r ? r.emit(d) : a.emit(d) } return e.touchData.start && (e.touchData.start._private.grabbed = !1), e.touchData.cxt = !1, e.touchData.start = null, void e.redraw() } if (!n.touches[2] && a.boxSelectionEnabled() && e.touchData.selecting) { e.touchData.selecting = !1; var f = a.collection(e.getAllInBox(i[0], i[1], i[2], i[3])); i[0] = void 0, i[1] = void 0, i[2] = void 0, i[3] = void 0, i[4] = 0, e.redrawHint("select", !0), a.emit("boxend"), f.emit("box").stdFilter((function (e) { return e.selectable() && !e.selected() })).select().emit("boxselect"), f.nonempty() && e.redrawHint("eles", !0), e.redraw() } if (null != r && r.unactivate(), n.touches[2]) e.data.bgActivePosistion = void 0, e.redrawHint("select", !0); else if (n.touches[1]); else if (n.touches[0]); else if (!n.touches[0]) { e.data.bgActivePosistion = void 0, e.redrawHint("select", !0); var h = e.dragData.touchDragEles; if (null != r) { var g = r._private.grabbed; p(h), e.redrawHint("drag", !0), e.redrawHint("eles", !0), g && r.emit("free"), t(r, ["touchend", "tapend", "vmouseup", "tapdragout"], n, { position: { x: l[0], y: l[1] } }), r.unactivate(), e.touchData.start = null } else { var m = e.findNearestElement(l[0], l[1], !0, !0); t(m, ["touchend", "tapend", "vmouseup", "tapdragout"], n, { position: { x: l[0], y: l[1] } }) } var v = e.touchData.startPosition[0] - l[0], b = v * v, y = e.touchData.startPosition[1] - l[1], x = (b + y * y) * s * s; null != r && !e.dragData.didDrag && r._private.selectable && x < e.touchTapThreshold2 && !e.pinching && ("single" === a.selectionType() ? (a.$(":selected").unmerge(r).unselect(), r.select()) : r.selected() ? r.unselect() : r.select(), e.redrawHint("eles", !0)), e.touchData.singleTouchMoved || t(r, ["tap", "vclick"], n, { position: { x: l[0], y: l[1] } }), e.touchData.singleTouchMoved = !0 } for (var w = 0; w < l.length; w++)c[w] = l[w]; e.dragData.didDrag = !1, 0 === n.touches.length && (e.touchData.dragDelta = [], e.touchData.startPosition = null, e.touchData.startGPosition = null), n.touches.length < 2 && (e.pinching = !1, e.redrawHint("eles", !0), e.redraw()) } }, !1), "undefined" == typeof TouchEvent) { var M = [], z = function (e) { return { clientX: e.clientX, clientY: e.clientY, force: 1, identifier: e.pointerId, pageX: e.pageX, pageY: e.pageY, radiusX: e.width / 2, radiusY: e.height / 2, screenX: e.screenX, screenY: e.screenY, target: e.target } }, L = function (e) { M.push(function (e) { return { event: e, touch: z(e) } }(e)) }, B = function (e) { for (var t = 0; t < M.length; t++)if (M[t].event.pointerId === e.pointerId) return void M.splice(t, 1) }, F = function (e) { e.touches = M.map((function (e) { return e.touch })) }, q = function (e) { return "mouse" === e.pointerType || 4 === e.pointerType }; e.registerBinding(e.container, "pointerdown", (function (e) { q(e) || (e.preventDefault(), L(e), F(e), j(e)) })), e.registerBinding(e.container, "pointerup", (function (e) { q(e) || (B(e), F(e), R(e)) })), e.registerBinding(e.container, "pointercancel", (function (e) { q(e) || (B(e), F(e), D()) })), e.registerBinding(e.container, "pointermove", (function (e) { q(e) || (e.preventDefault(), function (e) { var t = M.filter((function (t) { return t.event.pointerId === e.pointerId }))[0]; t.event = e, t.touch = z(e) }(e), F(e), P(e)) })) } }, e.exports = a }, function (e, t, n) { "use strict"; var r = n(2), i = { generatePolygon: function (e, t) { return this.nodeShapes[e] = { renderer: this, name: e, points: t, draw: function (e, t, n, r, i) { this.renderer.nodeShapeImpl("polygon", e, t, n, r, i, this.points) }, intersectLine: function (e, t, n, i, o, a, s) { return r.polygonIntersectLine(o, a, this.points, e, t, n / 2, i / 2, s) }, checkPoint: function (e, t, n, i, o, a, s) { return r.pointInsidePolygon(e, t, this.points, a, s, i, o, [0, -1], n) } } }, generateEllipse: function () { return this.nodeShapes.ellipse = { renderer: this, name: "ellipse", draw: function (e, t, n, r, i) { this.renderer.nodeShapeImpl(this.name, e, t, n, r, i) }, intersectLine: function (e, t, n, i, o, a, s) { return r.intersectLineEllipse(o, a, e, t, n / 2 + s, i / 2 + s) }, checkPoint: function (e, t, n, i, o, a, s) { return r.checkInEllipse(e, t, i, o, a, s, n) } } }, generateRoundRectangle: function () { return this.nodeShapes.roundrectangle = { renderer: this, name: "roundrectangle", points: r.generateUnitNgonPointsFitToSquare(4, 0), draw: function (e, t, n, r, i) { this.renderer.nodeShapeImpl(this.name, e, t, n, r, i) }, intersectLine: function (e, t, n, i, o, a, s) { return r.roundRectangleIntersectLine(o, a, e, t, n, i, s) }, checkPoint: function (e, t, n, i, o, a, s) { var l = r.getRoundRectangleRadius(i, o), c = 2 * l; return !!(r.pointInsidePolygon(e, t, this.points, a, s, i, o - c, [0, -1], n) || r.pointInsidePolygon(e, t, this.points, a, s, i - c, o, [0, -1], n) || r.checkInEllipse(e, t, c, c, a - i / 2 + l, s - o / 2 + l, n) || r.checkInEllipse(e, t, c, c, a + i / 2 - l, s - o / 2 + l, n) || r.checkInEllipse(e, t, c, c, a + i / 2 - l, s + o / 2 - l, n) || r.checkInEllipse(e, t, c, c, a - i / 2 + l, s + o / 2 - l, n)) } } }, generateCutRectangle: function () { return this.nodeShapes.cutrectangle = { renderer: this, name: "cutrectangle", cornerLength: r.getCutRectangleCornerLength(), points: r.generateUnitNgonPointsFitToSquare(4, 0), draw: function (e, t, n, r, i) { this.renderer.nodeShapeImpl(this.name, e, t, n, r, i) }, generateCutTrianglePts: function (e, t, n, r) { var i = this.cornerLength, o = t / 2, a = e / 2, s = n - a, l = n + a, c = r - o, u = r + o; return { topLeft: [s, c + i, s + i, c, s + i, c + i], topRight: [l - i, c, l, c + i, l - i, c + i], bottomRight: [l, u - i, l - i, u, l - i, u - i], bottomLeft: [s + i, u, s, u - i, s + i, u - i] } }, intersectLine: function (e, t, n, i, o, a, s) { var l = this.generateCutTrianglePts(n + 2 * s, i + 2 * s, e, t), c = [].concat.apply([], [l.topLeft.splice(0, 4), l.topRight.splice(0, 4), l.bottomRight.splice(0, 4), l.bottomLeft.splice(0, 4)]); return r.polygonIntersectLine(o, a, c, e, t) }, checkPoint: function (e, t, n, i, o, a, s) { if (r.pointInsidePolygon(e, t, this.points, a, s, i, o - 2 * this.cornerLength, [0, -1], n)) return !0; if (r.pointInsidePolygon(e, t, this.points, a, s, i - 2 * this.cornerLength, o, [0, -1], n)) return !0; var l = this.generateCutTrianglePts(i, o, a, s); return r.pointInsidePolygonPoints(e, t, l.topLeft) || r.pointInsidePolygonPoints(e, t, l.topRight) || r.pointInsidePolygonPoints(e, t, l.bottomRight) || r.pointInsidePolygonPoints(e, t, l.bottomLeft) } } }, generateBarrel: function () { return this.nodeShapes.barrel = { renderer: this, name: "barrel", points: r.generateUnitNgonPointsFitToSquare(4, 0), draw: function (e, t, n, r, i) { this.renderer.nodeShapeImpl(this.name, e, t, n, r, i) }, intersectLine: function (e, t, n, i, o, a, s) { var l = this.generateBarrelBezierPts(n + 2 * s, i + 2 * s, e, t), c = function (e) { var t = r.qbezierPtAt({ x: e[0], y: e[1] }, { x: e[2], y: e[3] }, { x: e[4], y: e[5] }, .15), n = r.qbezierPtAt({ x: e[0], y: e[1] }, { x: e[2], y: e[3] }, { x: e[4], y: e[5] }, .5), i = r.qbezierPtAt({ x: e[0], y: e[1] }, { x: e[2], y: e[3] }, { x: e[4], y: e[5] }, .85); return [e[0], e[1], t.x, t.y, n.x, n.y, i.x, i.y, e[4], e[5]] }, u = [].concat(c(l.topLeft), c(l.topRight), c(l.bottomRight), c(l.bottomLeft)); return r.polygonIntersectLine(o, a, u, e, t) }, generateBarrelBezierPts: function (e, t, n, i) { var o = t / 2, a = e / 2, s = n - a, l = n + a, c = i - o, u = i + o, d = r.getBarrelCurveConstants(e, t), p = d.heightOffset, f = d.widthOffset, h = d.ctrlPtOffsetPct * e, g = { topLeft: [s, c + p, s + h, c, s + f, c], topRight: [l - f, c, l - h, c, l, c + p], bottomRight: [l, u - p, l - h, u, l - f, u], bottomLeft: [s + f, u, s + h, u, s, u - p] }; return g.topLeft.isTop = !0, g.topRight.isTop = !0, g.bottomLeft.isBottom = !0, g.bottomRight.isBottom = !0, g }, checkPoint: function (e, t, n, i, o, a, s) { var l = r.getBarrelCurveConstants(i, o), c = l.heightOffset, u = l.widthOffset; if (r.pointInsidePolygon(e, t, this.points, a, s, i, o - 2 * c, [0, -1], n)) return !0; if (r.pointInsidePolygon(e, t, this.points, a, s, i - 2 * u, o, [0, -1], n)) return !0; for (var d = this.generateBarrelBezierPts(i, o, a, s), p = function (e, t, n) { var i = n[4], o = n[2], a = n[0], s = n[5], l = n[1], c = Math.min(i, a), u = Math.max(i, a), d = Math.min(s, l), p = Math.max(s, l); if (c <= e && e <= u && d <= t && t <= p) { var f = r.bezierPtsToQuadCoeff(i, o, a), h = r.solveQuadratic(f[0], f[1], f[2], e).filter((function (e) { return 0 <= e && e <= 1 })); if (h.length > 0) return h[0] } return null }, f = Object.keys(d), h = 0; h < f.length; h++) { var g = d[f[h]], m = p(e, t, g); if (null != m) { var v = g[5], b = g[3], y = g[1], x = r.qbezierAt(v, b, y, m); if (g.isTop && x <= t) return !0; if (g.isBottom && t <= x) return !0 } } return !1 } } }, generateBottomRoundrectangle: function () { return this.nodeShapes.bottomroundrectangle = { renderer: this, name: "bottomroundrectangle", points: r.generateUnitNgonPointsFitToSquare(4, 0), draw: function (e, t, n, r, i) { this.renderer.nodeShapeImpl(this.name, e, t, n, r, i) }, intersectLine: function (e, t, n, i, o, a, s) { var l = e - (n / 2 + s), c = t - (i / 2 + s), u = c, d = e + (n / 2 + s), p = r.finiteLinesIntersect(o, a, e, t, l, c, d, u, !1); return p.length > 0 ? p : r.roundRectangleIntersectLine(o, a, e, t, n, i, s) }, checkPoint: function (e, t, n, i, o, a, s) { var l = r.getRoundRectangleRadius(i, o), c = 2 * l; if (r.pointInsidePolygon(e, t, this.points, a, s, i, o - c, [0, -1], n)) return !0; if (r.pointInsidePolygon(e, t, this.points, a, s, i - c, o, [0, -1], n)) return !0; var u = i / 2 + 2 * n, d = o / 2 + 2 * n, p = [a - u, s - d, a - u, s, a + u, s, a + u, s - d]; return !!r.pointInsidePolygonPoints(e, t, p) || !!r.checkInEllipse(e, t, c, c, a + i / 2 - l, s + o / 2 - l, n) || !!r.checkInEllipse(e, t, c, c, a - i / 2 + l, s + o / 2 - l, n) } } }, registerNodeShapes: function () { var e = this.nodeShapes = {}, t = this; this.generateEllipse(), this.generatePolygon("triangle", r.generateUnitNgonPointsFitToSquare(3, 0)), this.generatePolygon("rectangle", r.generateUnitNgonPointsFitToSquare(4, 0)), e.square = e.rectangle, this.generateRoundRectangle(), this.generateCutRectangle(), this.generateBarrel(), this.generateBottomRoundrectangle(), this.generatePolygon("diamond", [0, 1, 1, 0, 0, -1, -1, 0]), this.generatePolygon("pentagon", r.generateUnitNgonPointsFitToSquare(5, 0)), this.generatePolygon("hexagon", r.generateUnitNgonPointsFitToSquare(6, 0)), this.generatePolygon("heptagon", r.generateUnitNgonPointsFitToSquare(7, 0)), this.generatePolygon("octagon", r.generateUnitNgonPointsFitToSquare(8, 0)); var n = new Array(20), i = r.generateUnitNgonPoints(5, 0), o = r.generateUnitNgonPoints(5, Math.PI / 5), a = .5 * (3 - Math.sqrt(5)); a *= 1.57; for (var s = 0; s < o.length / 2; s++)o[2 * s] *= a, o[2 * s + 1] *= a; for (s = 0; s < 5; s++)n[4 * s] = i[2 * s], n[4 * s + 1] = i[2 * s + 1], n[4 * s + 2] = o[2 * s], n[4 * s + 3] = o[2 * s + 1]; n = r.fitPolygonToSquare(n), this.generatePolygon("star", n), this.generatePolygon("vee", [-1, -1, 0, -.333, 1, -1, 0, 1]), this.generatePolygon("rhomboid", [-1, -1, .333, -1, 1, 1, -.333, 1]), this.generatePolygon("concavehexagon", [-1, -.95, -.75, 0, -1, .95, 1, .95, .75, 0, 1, -.95]), this.generatePolygon("tag", [-1, -1, .25, -1, 1, 0, .25, 1, -1, 1]), e.makePolygon = function (e) { var n, r = "polygon-" + e.join("$"); return (n = this[r]) ? n : t.generatePolygon(r, e) } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(1), i = { timeToRender: function () { return this.redrawTotalTime / this.redrawCount }, redraw: function (e) { e = e || r.staticEmptyObject(); var t = this; void 0 === t.averageRedrawTime && (t.averageRedrawTime = 0), void 0 === t.lastRedrawTime && (t.lastRedrawTime = 0), void 0 === t.lastDrawTime && (t.lastDrawTime = 0), t.requestedFrame = !0, t.renderOptions = e }, beforeRender: function (e, t) { if (!this.destroyed) { t = t || 0; var n = this.beforeRenderCallbacks; n.push({ fn: e, priority: t }), n.sort((function (e, t) { return t.priority - e.priority })) } } }, o = function (e, t, n) { for (var r = e.beforeRenderCallbacks, i = 0; i < r.length; i++)r[i].fn(t, n) }; i.startRenderLoop = function () { var e = this; e.renderLoopStarted || (e.renderLoopStarted = !0, r.requestAnimationFrame((function t(n) { if (!e.destroyed) { if (e.requestedFrame && !e.skipFrame) { o(e, !0, n); var i = r.performanceNow(); e.render(e.renderOptions); var a = e.lastDrawTime = r.performanceNow(); void 0 === e.averageRedrawTime && (e.averageRedrawTime = a - i), void 0 === e.redrawCount && (e.redrawCount = 0), e.redrawCount++, void 0 === e.redrawTotalTime && (e.redrawTotalTime = 0); var s = a - i; e.redrawTotalTime += s, e.lastRedrawTime = s, e.averageRedrawTime = e.averageRedrawTime / 2 + s / 2, e.requestedFrame = !1 } else o(e, !1, n); e.skipFrame = !1, r.requestAnimationFrame(t) } }))) }, e.exports = i }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = n(124), a = n(125), s = c, l = c.prototype; function c(e) { var t = this; t.data = { canvases: new Array(l.CANVAS_LAYERS), contexts: new Array(l.CANVAS_LAYERS), canvasNeedsRedraw: new Array(l.CANVAS_LAYERS), bufferCanvases: new Array(l.BUFFER_COUNT), bufferContexts: new Array(l.CANVAS_LAYERS) }; var n = "-webkit-tap-highlight-color: rgba(0,0,0,0);"; t.data.canvasContainer = document.createElement("div"); var r = t.data.canvasContainer.style; t.data.canvasContainer.setAttribute("style", n), r.position = "relative", r.zIndex = "0", r.overflow = "hidden"; var s = e.cy.container(); s.appendChild(t.data.canvasContainer), (s.getAttribute("style") || "").indexOf(n) < 0 && s.setAttribute("style", (s.getAttribute("style") || "") + n); for (var c = 0; c < l.CANVAS_LAYERS; c++) { var u = t.data.canvases[c] = document.createElement("canvas"); t.data.contexts[c] = u.getContext("2d"), u.setAttribute("style", "-webkit-user-select: none; -moz-user-select: -moz-none; user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); outline-style: none;" + (i.ms() ? " -ms-touch-action: none; touch-action: none; " : "")), u.style.position = "absolute", u.setAttribute("data-id", "layer" + c), u.style.zIndex = String(l.CANVAS_LAYERS - c), t.data.canvasContainer.appendChild(u), t.data.canvasNeedsRedraw[c] = !1 } for (t.data.topCanvas = t.data.canvases[0], t.data.canvases[l.NODE].setAttribute("data-id", "layer" + l.NODE + "-node"), t.data.canvases[l.SELECT_BOX].setAttribute("data-id", "layer" + l.SELECT_BOX + "-selectbox"), t.data.canvases[l.DRAG].setAttribute("data-id", "layer" + l.DRAG + "-drag"), c = 0; c < l.BUFFER_COUNT; c++)t.data.bufferCanvases[c] = document.createElement("canvas"), t.data.bufferContexts[c] = t.data.bufferCanvases[c].getContext("2d"), t.data.bufferCanvases[c].style.position = "absolute", t.data.bufferCanvases[c].setAttribute("data-id", "buffer" + c), t.data.bufferCanvases[c].style.zIndex = String(-c - 1), t.data.bufferCanvases[c].style.visibility = "hidden"; t.pathsEnabled = !0, t.data.eleTxrCache = new o(t), t.data.lyrTxrCache = new a(t, t.data.eleTxrCache), t.onUpdateEleCalcs((function (e, n) { for (var r = 0; r < n.length; r++) { var i = n[r], o = i._private.rstyle, a = o.dirtyEvents; if (i.isNode() && a && 1 === a.length && a.position); else if (t.data.eleTxrCache.invalidateElement(i), i.isParent() && a.style) { var s = o.prevParentOpacity, l = i.pstyle("opacity").pfValue; if (o.prevParentOpacity = l, s !== l) for (var c = i.descendants(), u = 0; u < c.length; u++)t.data.eleTxrCache.invalidateElement(c[u]) } } n.length > 0 && t.data.lyrTxrCache.invalidateElements(n) })) } l.CANVAS_LAYERS = 3, l.SELECT_BOX = 0, l.DRAG = 1, l.NODE = 2, l.BUFFER_COUNT = 3, l.TEXTURE_BUFFER = 0, l.MOTIONBLUR_BUFFER_NODE = 1, l.MOTIONBLUR_BUFFER_DRAG = 2, l.redrawHint = function (e, t) { var n = this; switch (e) { case "eles": n.data.canvasNeedsRedraw[l.NODE] = t; break; case "drag": n.data.canvasNeedsRedraw[l.DRAG] = t; break; case "select": n.data.canvasNeedsRedraw[l.SELECT_BOX] = t } }; var u = "undefined" != typeof Path2D; l.path2dEnabled = function (e) { if (void 0 === e) return this.pathsEnabled; this.pathsEnabled = !!e }, l.usePaths = function () { return u && this.pathsEnabled }, [n(126), n(127), n(128), n(129), n(130), n(131), n(132), n(133), n(134), n(135)].forEach((function (e) { r.extend(l, e) })), e.exports = s }, function (e, t, n) { "use strict"; var r = n(2), i = n(1), o = n(9), a = n(19), s = { dequeue: "dequeue", downscale: "downscale", highQuality: "highQuality" }, l = function (e) { this.renderer = e, this.onDequeues = [], this.setupDequeueing() }, c = l.prototype; c.reasons = s, c.getTextureQueue = function (e) { return this.eleImgCaches = this.eleImgCaches || {}, this.eleImgCaches[e] = this.eleImgCaches[e] || [] }, c.getRetiredTextureQueue = function (e) { var t = this.eleImgCaches.retired = this.eleImgCaches.retired || {}; return t[e] = t[e] || [] }, c.getElementQueue = function () { return this.eleCacheQueue = this.eleCacheQueue || new o((function (e, t) { return t.reqs - e.reqs })) }, c.getElementIdToQueue = function () { return this.eleIdToCacheQueue = this.eleIdToCacheQueue || {} }, c.getElement = function (e, t, n, i, o) { var a = this, l = this.renderer, c = e._private.rscratch, u = l.cy.zoom(); if (0 === t.w || 0 === t.h || !e.visible()) return null; if (null == i && (i = Math.ceil(r.log2(u * n))), i < -4) i = -4; else if (u >= 3.99 || i > 2) return null; var d, p = Math.pow(2, i), f = t.h * p, h = t.w * p, g = c.imgCaches = c.imgCaches || {}, m = g[i]; if (m) return m; if (d = f <= 25 ? 25 : f <= 50 ? 50 : 50 * Math.ceil(f / 50), f > 1024 || h > 1024 || e.isEdge() || e.isParent()) return null; var v = a.getTextureQueue(d), b = v[v.length - 2], y = function () { return a.recycleTexture(d, h) || a.addTexture(d, h) }; b || (b = v[v.length - 1]), b || (b = y()), b.width - b.usedWidth < h && (b = y()); for (var x, w = l.eleTextBiggerThanMin(e, p), k = function (e) { return e && e.scaledLabelShown === w }, A = o && o === s.dequeue, E = o && o === s.highQuality, S = o && o === s.downscale, $ = i + 1; $ <= 2; $++)if (T = g[$]) { x = T; break } var C = x && x.level === i + 1 ? x : null, _ = function () { b.context.drawImage(C.texture.canvas, C.x, 0, C.width, C.height, b.usedWidth, 0, h, f) }; if (b.context.setTransform(1, 0, 0, 1, 0, 0), b.context.clearRect(b.usedWidth, 0, h, d), k(C)) _(); else if (k(x)) { if (!E) return a.queueElement(e, x.level - 1), x; for ($ = x.level; $ > i; $--)C = a.getElement(e, t, n, $, s.downscale); _() } else { var O; if (!A && !E && !S) for ($ = i - 1; $ >= -4; $--) { var T; if (T = g[$]) { O = T; break } } if (k(O)) return a.queueElement(e, i), O; b.context.translate(b.usedWidth, 0), b.context.scale(p, p), l.drawElement(b.context, e, t, w), b.context.scale(1 / p, 1 / p), b.context.translate(-b.usedWidth, 0) } return m = g[i] = { ele: e, x: b.usedWidth, texture: b, level: i, scale: p, width: h, height: f, scaledLabelShown: w }, b.usedWidth += Math.ceil(h + 8), b.eleCaches.push(m), a.checkTextureFullness(b), m }, c.invalidateElement = function (e) { var t = e._private.rscratch.imgCaches; if (t) for (var n = -4; n <= 2; n++) { var r = t[n]; if (r) { var o = r.texture; o.invalidatedWidth += r.width, t[n] = null, i.removeFromArray(o.eleCaches, r), this.removeFromQueue(e), this.checkTextureUtility(o) } } }, c.checkTextureUtility = function (e) { e.invalidatedWidth >= .5 * e.width && this.retireTexture(e) }, c.checkTextureFullness = function (e) { var t = this.getTextureQueue(e.height); e.usedWidth / e.width > .8 && e.fullnessChecks >= 10 ? i.removeFromArray(t, e) : e.fullnessChecks++ }, c.retireTexture = function (e) { var t = e.height, n = this.getTextureQueue(t); i.removeFromArray(n, e), e.retired = !0; for (var r = e.eleCaches, o = 0; o < r.length; o++) { var a = r[o], s = a.ele, l = a.level, c = s._private.rscratch.imgCaches; c && (c[l] = null) } i.clearArray(r), this.getRetiredTextureQueue(t).push(e) }, c.addTexture = function (e, t) { var n = {}; return this.getTextureQueue(e).push(n), n.eleCaches = [], n.height = e, n.width = Math.max(1024, t), n.usedWidth = 0, n.invalidatedWidth = 0, n.fullnessChecks = 0, n.canvas = document.createElement("canvas"), n.canvas.width = n.width, n.canvas.height = n.height, n.context = n.canvas.getContext("2d"), n }, c.recycleTexture = function (e, t) { for (var n = this.getTextureQueue(e), r = this.getRetiredTextureQueue(e), o = 0; o < r.length; o++) { var a = r[o]; if (a.width >= t) return a.retired = !1, a.usedWidth = 0, a.invalidatedWidth = 0, a.fullnessChecks = 0, i.clearArray(a.eleCaches), a.context.setTransform(1, 0, 0, 1, 0, 0), a.context.clearRect(0, 0, a.width, a.height), i.removeFromArray(r, a), n.push(a), a } }, c.queueElement = function (e, t) { var n = this.getElementQueue(), r = this.getElementIdToQueue(), i = e.id(), o = r[i]; if (o) o.level = Math.max(o.level, t), o.reqs++, n.updateItem(o); else { var a = { ele: e, level: t, reqs: 1 }; n.push(a), r[i] = a } }, c.dequeue = function (e) { for (var t = this.getElementQueue(), n = this.getElementIdToQueue(), r = [], i = 0; i < 1 && t.size() > 0; i++) { var o = t.pop(), a = o.ele; if (null == a._private.rscratch.imgCaches[o.level]) { n[a.id()] = null, r.push(o); var l = a.boundingBox(); this.getElement(a, l, e, o.level, s.dequeue) } } return r }, c.removeFromQueue = function (e) { var t = this.getElementQueue(), n = this.getElementIdToQueue(), r = n[e.id()]; null != r && (r.reqs = i.MAX_INT, t.updateItem(r), t.pop(), n[e.id()] = null) }, c.onDequeue = function (e) { this.onDequeues.push(e) }, c.offDequeue = function (e) { i.removeFromArray(this.onDequeues, e) }, c.setupDequeueing = a.setupDequeueing({ deqRedrawThreshold: 100, deqCost: .15, deqAvgCost: .1, deqNoDrawCost: .9, deqFastCost: .9, deq: function (e, t, n) { return e.dequeue(t, n) }, onDeqd: function (e, t) { for (var n = 0; n < e.onDequeues.length; n++)(0, e.onDequeues[n])(t) }, shouldRedraw: function (e, t, n, i) { for (var o = 0; o < t.length; o++) { var a = t[o].ele.boundingBox(); if (r.boundingBoxesIntersect(a, i)) return !0 } return !1 }, priority: function (e) { return e.renderer.beforeRenderPriorities.eleTxrDeq } }), e.exports = l }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = n(9), a = n(0), s = n(19), l = function (e, t) { var n = this, i = n.renderer = e; n.layersByLevel = {}, n.firstGet = !0, n.lastInvalidationTime = r.performanceNow() - 500, n.skipping = !1, i.beforeRender((function (e, t) { t - n.lastInvalidationTime <= 250 ? n.skipping = !0 : n.skipping = !1 })), n.layersQueue = new o((function (e, t) { return t.reqs - e.reqs })), n.eleTxrCache = t, n.setupEleCacheInvalidation(), n.setupDequeueing() }, c = l.prototype, u = 0, d = Math.pow(2, 53) - 1; function p(e, t) { null != e.imageSmoothingEnabled ? e.imageSmoothingEnabled = t : (e.webkitImageSmoothingEnabled = t, e.mozImageSmoothingEnabled = t, e.msImageSmoothingEnabled = t) } c.makeLayer = function (e, t) { var n = Math.pow(2, t), r = Math.ceil(e.w * n), i = Math.ceil(e.h * n), o = document.createElement("canvas"); o.width = r, o.height = i; var a = { id: u = ++u % d, bb: e, level: t, width: r, height: i, canvas: o, context: o.getContext("2d"), eles: [], elesQueue: [], reqs: 0 }, s = a.context, l = -a.bb.x1, c = -a.bb.y1; return s.scale(n, n), s.translate(l, c), a }, c.getLayers = function (e, t, n) { var o = this, a = o.renderer.cy.zoom(), s = o.firstGet; if (o.firstGet = !1, null == n) if ((n = Math.ceil(i.log2(a * t))) < -4) n = -4; else if (a >= 3.99 || n > 2) return null; o.validateLayersElesOrdering(n, e); var l, c, u = o.layersByLevel, d = Math.pow(2, n), p = u[n] = u[n] || []; if (o.levelIsComplete(n, e)) return p; !function () { var t = function (t) { if (o.validateLayersElesOrdering(t, e), o.levelIsComplete(t, e)) return c = u[t], !0 }, i = function (e) { if (!c) for (var r = n + e; -4 <= r && r <= 2 && !t(r); r += e); }; i(1), i(-1); for (var a = p.length - 1; a >= 0; a--) { var s = p[a]; s.invalid && r.removeFromArray(p, s) } }(); var f = function (t) { var r = (t = t || {}).after; if (function () { if (!l) { l = i.makeBoundingBox(); for (var t = 0; t < e.length; t++)i.updateBoundingBox(l, e[t].boundingBox()) } }(), l.w * d * (l.h * d) > 16e6) return null; var a = o.makeLayer(l, n); if (null != r) { var s = p.indexOf(r) + 1; p.splice(s, 0, a) } else (void 0 === t.insert || t.insert) && p.unshift(a); return a }; if (o.skipping && !s) return null; for (var h = null, g = e.length / 1, m = !s, v = 0; v < e.length; v++) { var b = e[v], y = b._private.rscratch, x = y.imgLayerCaches = y.imgLayerCaches || {}, w = x[n]; if (w) h = w; else { if ((!h || h.eles.length >= g || !i.boundingBoxInBoundingBox(h.bb, b.boundingBox())) && !(h = f({ insert: !0, after: h }))) return null; c || m ? o.queueLayer(h, b) : o.drawEleInLayer(h, b, n, t), h.eles.push(b), x[n] = h } } return c || (m ? null : p) }, c.getEleLevelForLayerLevel = function (e, t) { return e }, c.drawEleInLayer = function (e, t, n, r) { var i = this.renderer, o = e.context, a = t.boundingBox(); if (0 !== a.w && 0 !== a.h && t.visible()) { var s = this.eleTxrCache, l = s.reasons.highQuality; n = this.getEleLevelForLayerLevel(n, r); var c = s.getElement(t, a, null, n, l); c ? (p(o, !1), o.drawImage(c.texture.canvas, c.x, 0, c.width, c.height, a.x1, a.y1, a.w, a.h), p(o, !0)) : i.drawElement(o, t) } }, c.levelIsComplete = function (e, t) { var n = this.layersByLevel[e]; if (!n || 0 === n.length) return !1; for (var r = 0, i = 0; i < n.length; i++) { var o = n[i]; if (o.reqs > 0) return !1; if (o.invalid) return !1; r += o.eles.length } return r === t.length }, c.validateLayersElesOrdering = function (e, t) { var n = this.layersByLevel[e]; if (n) for (var r = 0; r < n.length; r++) { for (var i = n[r], o = -1, a = 0; a < t.length; a++)if (i.eles[0] === t[a]) { o = a; break } if (o < 0) this.invalidateLayer(i); else { var s = o; for (a = 0; a < i.eles.length; a++)if (i.eles[a] !== t[s + a]) { this.invalidateLayer(i); break } } } }, c.updateElementsInLayers = function (e, t) { for (var n = a.element(e[0]), r = 0; r < e.length; r++)for (var i = n ? null : e[r], o = n ? e[r] : e[r].ele, s = o._private.rscratch, l = s.imgLayerCaches = s.imgLayerCaches || {}, c = -4; c <= 2; c++) { var u = l[c]; u && (i && this.getEleLevelForLayerLevel(u.level) !== i.level || t(u, o, i)) } }, c.haveLayers = function () { for (var e = !1, t = -4; t <= 2; t++) { var n = this.layersByLevel[t]; if (n && n.length > 0) { e = !0; break } } return e }, c.invalidateElements = function (e) { var t = this; t.lastInvalidationTime = r.performanceNow(), 0 !== e.length && t.haveLayers() && t.updateElementsInLayers(e, (function (e, n, r) { t.invalidateLayer(e) })) }, c.invalidateLayer = function (e) { if (this.lastInvalidationTime = r.performanceNow(), !e.invalid) { var t = e.level, n = e.eles, i = this.layersByLevel[t]; r.removeFromArray(i, e), e.elesQueue = [], e.invalid = !0, e.replacement && (e.replacement.invalid = !0); for (var o = 0; o < n.length; o++) { var a = n[o]._private.rscratch.imgLayerCaches; a && (a[t] = null) } } }, c.refineElementTextures = function (e) { var t = this; t.updateElementsInLayers(e, (function (e, n, r) { var i = e.replacement; if (i || ((i = e.replacement = t.makeLayer(e.bb, e.level)).replaces = e, i.eles = e.eles), !i.reqs) for (var o = 0; o < i.eles.length; o++)t.queueLayer(i, i.eles[o]) })) }, c.setupEleCacheInvalidation = function () { var e = this, t = [], n = r.debounce((function () { e.refineElementTextures(t), t = [] }), 50); e.eleTxrCache.onDequeue((function (e) { for (var r = 0; r < e.length; r++)t.push(e[r]); n() })) }, c.queueLayer = function (e, t) { var n = this.layersQueue, r = e.elesQueue, i = r.hasId = r.hasId || {}; if (!e.replacement) { if (t) { if (i[t.id()]) return; r.push(t), i[t.id()] = !0 } e.reqs ? (e.reqs++, n.updateItem(e)) : (e.reqs = 1, n.push(e)) } }, c.dequeue = function (e) { for (var t = this.layersQueue, n = [], r = 0; r < 1 && 0 !== t.size();) { var i = t.peek(); if (i.replacement) t.pop(); else if (i.replaces && i !== i.replaces.replacement) t.pop(); else if (i.invalid) t.pop(); else { var o = i.elesQueue.shift(); o && (this.drawEleInLayer(i, o, i.level, e), r++), 0 === n.length && n.push(!0), 0 === i.elesQueue.length && (t.pop(), i.reqs = 0, i.replaces && this.applyLayerReplacement(i), this.requestRedraw()) } } return n }, c.applyLayerReplacement = function (e) { var t = this.layersByLevel[e.level], n = e.replaces, r = t.indexOf(n); if (!(r < 0 || n.invalid)) { t[r] = e; for (var i = 0; i < e.eles.length; i++) { var o = e.eles[i]._private, a = o.imgLayerCaches = o.imgLayerCaches || {}; a && (a[e.level] = e) } this.requestRedraw() } }, c.requestRedraw = r.debounce((function () { var e = this.renderer; e.redrawHint("eles", !0), e.redrawHint("drag", !0), e.redraw() }), 100), c.setupDequeueing = s.setupDequeueing({ deqRedrawThreshold: 50, deqCost: .15, deqAvgCost: .1, deqNoDrawCost: .9, deqFastCost: .9, deq: function (e, t) { return e.dequeue(t) }, onDeqd: r.noop, shouldRedraw: r.trueify, priority: function (e) { return e.renderer.beforeRenderPriorities.lyrTxrDeq } }), e.exports = l }, function (e, t, n) { "use strict"; var r, i = { arrowShapeImpl: function (e) { return (r || (r = { polygon: function (e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; e.lineTo(r.x, r.y) } }, "triangle-backcurve": function (e, t, n) { for (var r, i = 0; i < t.length; i++) { var o = t[i]; 0 === i && (r = o), e.lineTo(o.x, o.y) } e.quadraticCurveTo(n.x, n.y, r.x, r.y) }, "triangle-tee": function (e, t, n) { e.beginPath && e.beginPath(); for (var r = t, i = 0; i < r.length; i++) { var o = r[i]; e.lineTo(o.x, o.y) } e.closePath && e.closePath(), e.beginPath && e.beginPath(); var a = n, s = n[0]; for (e.moveTo(s.x, s.y), i = 0; i < a.length; i++)o = a[i], e.lineTo(o.x, o.y); e.closePath && e.closePath() }, "triangle-cross": function (e, t, n) { e.beginPath && e.beginPath(); for (var r = t, i = 0; i < r.length; i++) { var o = r[i]; e.lineTo(o.x, o.y) } e.closePath && e.closePath(), e.beginPath && e.beginPath(); var a = n, s = n[0]; for (e.moveTo(s.x, s.y), i = 0; i < a.length; i++)o = a[i], e.lineTo(o.x, o.y); e.closePath && e.closePath() }, circle: function (e, t, n, r) { e.arc(t, n, r, 0, 2 * Math.PI, !1) } }))[e] } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(2), i = { drawElement: function (e, t, n, r) { t.isNode() ? this.drawNode(e, t, n, r) : this.drawEdge(e, t, n, r) }, drawCachedElement: function (e, t, n, i) { var o = t.boundingBox(); if (0 !== o.w && 0 !== o.h && (!i || r.boundingBoxesIntersect(o, i))) { var a = this.data.eleTxrCache.getElement(t, o, n); null != a ? e.drawImage(a.texture.canvas, a.x, 0, a.width, a.height, o.x1, o.y1, o.w, o.h) : this.drawElement(e, t) } }, drawElements: function (e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; this.drawElement(e, r) } }, drawCachedElements: function (e, t, n, r) { for (var i = 0; i < t.length; i++) { var o = t[i]; this.drawCachedElement(e, o, n, r) } }, drawCachedNodes: function (e, t, n, r) { for (var i = 0; i < t.length; i++) { var o = t[i]; o.isNode() && this.drawCachedElement(e, o, n, r) } }, drawLayeredElements: function (e, t, n, r) { var i = this.data.lyrTxrCache.getLayers(t, n); if (i) for (var o = 0; o < i.length; o++) { var a = i[o], s = a.bb; 0 !== s.w && 0 !== s.h && e.drawImage(a.canvas, s.x1, s.y1, s.w, s.h) } else this.drawCachedElements(e, t, n, r) }, drawDebugPoints: function (e, t) { for (var n = function (t, n, r) { e.fillStyle = r, e.fillRect(t - 1, n - 1, 3, 3) }, r = 0; r < t.length; r++) { var i = t[r], o = i._private.rscratch; if (i.isNode()) { var a = i.position(); n(a.x, a.y, "magenta") } else { for (var s = o.allpts, l = 0; l + 1 < s.length; l += 2)n(s[l], s[l + 1], "cyan"); n(o.midX, o.midY, "yellow") } } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = { drawEdge: function (e, t, n, r) { var i = this, o = t._private.rscratch, a = i.usePaths(); if (t.visible() && !o.badLine && null != o.allpts && !isNaN(o.allpts[0])) { var s = void 0; n && (s = n, e.translate(-s.x1, -s.y1)); var l = 2 * t.pstyle("overlay-padding").pfValue, c = t.pstyle("overlay-opacity").value, u = t.pstyle("overlay-color").value, d = t.pstyle("line-color").value, p = t.pstyle("opacity").value, f = t.pstyle("line-style").value, h = t.pstyle("width").pfValue, g = function () { var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : p; e.lineWidth = h, e.lineCap = "butt", i.strokeStyle(e, d[0], d[1], d[2], n), i.drawEdgePath(t, e, o.allpts, f) }, m = function () { var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : p; i.drawArrowheads(e, t, n) }; if (e.lineJoin = "round", "yes" === t.pstyle("ghost").value) { var v = t.pstyle("ghost-offset-x").pfValue, b = t.pstyle("ghost-offset-y").pfValue, y = t.pstyle("ghost-opacity").value, x = p * y; e.translate(v, b), g(x), m(x), e.translate(-v, -b) } g(), m(), function () { var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : c; e.lineWidth = l, "self" !== o.edgeType || a ? e.lineCap = "round" : e.lineCap = "butt", i.strokeStyle(e, u[0], u[1], u[2], n), i.drawEdgePath(t, e, o.allpts, "solid") }(), i.drawElementText(e, t, r), n && e.translate(s.x1, s.y1) } }, drawEdgePath: function (e, t, n, r) { var i = e._private.rscratch, o = t, a = void 0, s = !1, l = this.usePaths(); if (l) { var c = n.join("$"); i.pathCacheKey && i.pathCacheKey === c ? (a = t = i.pathCache, s = !0) : (a = t = new Path2D, i.pathCacheKey = c, i.pathCache = a) } if (o.setLineDash) switch (r) { case "dotted": o.setLineDash([1, 1]); break; case "dashed": o.setLineDash([6, 3]); break; case "solid": o.setLineDash([]) }if (!s && !i.badLine) switch (t.beginPath && t.beginPath(), t.moveTo(n[0], n[1]), i.edgeType) { case "bezier": case "self": case "compound": case "multibezier": if (e.hasClass("horizontal")) { var u = n[4], d = n[5], p = (n[0] + n[4]) / 2; t.lineTo(n[0] + 10, n[1]), t.bezierCurveTo(p, n[1], p, n[5], n[4] - 10, n[5]), t.lineTo(u, d) } else if (e.hasClass("vertical")) { var f = n[4], h = n[5], g = (n[1] + n[5]) / 2; t.bezierCurveTo(n[0], g, n[4], g, n[4], n[5] - 10), t.lineTo(f, h) } else for (var m = 2; m + 3 < n.length; m += 4)t.quadraticCurveTo(n[m], n[m + 1], n[m + 2], n[m + 3]); break; case "straight": case "segments": case "haystack": for (var v = 2; v + 1 < n.length; v += 2)t.lineTo(n[v], n[v + 1]) }t = o, l ? t.stroke(a) : t.stroke(), t.setLineDash && t.setLineDash([]) }, drawArrowheads: function (e, t, n) { var r = t._private.rscratch, i = "haystack" === r.edgeType; i || this.drawArrowhead(e, t, "source", r.arrowStartX, r.arrowStartY, r.srcArrowAngle, n), this.drawArrowhead(e, t, "mid-target", r.midX, r.midY, r.midtgtArrowAngle, n), this.drawArrowhead(e, t, "mid-source", r.midX, r.midY, r.midsrcArrowAngle, n), i || (t.hasClass("horizontal") ? this.drawArrowhead(e, t, "target", r.arrowEndX, r.arrowEndY, -Math.PI / 2, n) : t.hasClass("vertical") ? this.drawArrowhead(e, t, "target", r.arrowEndX, r.arrowEndY, 0, n) : this.drawArrowhead(e, t, "target", r.arrowEndX, r.arrowEndY, r.tgtArrowAngle, n)) }, drawArrowhead: function (e, t, n, r, i, o, a) { if (!(isNaN(r) || null == r || isNaN(i) || null == i || isNaN(o) || null == o)) { var s = t.pstyle(n + "-arrow-shape").value; if ("none" !== s) { var l = "hollow" === t.pstyle(n + "-arrow-fill").value ? "both" : "filled", c = t.pstyle(n + "-arrow-fill").value, u = t.pstyle("width").pfValue, d = t.pstyle("opacity").value; void 0 === a && (a = d); var p = e.globalCompositeOperation; 1 === a && "hollow" !== c || (e.globalCompositeOperation = "destination-out", this.fillStyle(e, 255, 255, 255, 1), this.strokeStyle(e, 255, 255, 255, 1), this.drawArrowShape(t, n, e, l, u, s, r, i, o), e.globalCompositeOperation = p); var f = t.pstyle(n + "-arrow-color").value; this.fillStyle(e, f[0], f[1], f[2], a), this.strokeStyle(e, f[0], f[1], f[2], a), this.drawArrowShape(t, n, e, c, u, s, r, i, o) } } }, drawArrowShape: function (e, t, n, r, i, o, a, s, l) { var c = this.usePaths(), u = e._private.rscratch, d = !1, p = void 0, f = n, h = { x: a, y: s }, g = e.pstyle("arrow-scale").value, m = this.getArrowWidth(i, g), v = this.arrowShapes[o]; if (c) { var b = m + "$" + o + "$" + l + "$" + a + "$" + s; u.arrowPathCacheKey = u.arrowPathCacheKey || {}, u.arrowPathCache = u.arrowPathCache || {}, u.arrowPathCacheKey[t] === b ? (p = n = u.arrowPathCache[t], d = !0) : (p = n = new Path2D, u.arrowPathCacheKey[t] = b, u.arrowPathCache[t] = p) } n.beginPath && n.beginPath(), d || v.draw(n, m, l, h, i), !v.leavePathOpen && n.closePath && n.closePath(), n = f, "filled" !== r && "both" !== r || (c ? n.fill(p) : n.fill()), "hollow" !== r && "both" !== r || (n.lineWidth = v.matchEdgeWidth ? i : 1, n.lineJoin = "miter", c ? n.stroke(p) : n.stroke()) } }; e.exports = r }, function (e, t, n) { "use strict"; var r = { safeDrawImage: function (e, t, n, r, i, o, a, s, l, c) { i <= 0 || o <= 0 || l <= 0 || c <= 0 || e.drawImage(t, n, r, i, o, a, s, l, c) }, drawInscribedImage: function (e, t, n, r, i) { var o = this, a = n.position(), s = a.x, l = a.y, c = n.cy().style(), u = c.getIndexedStyle.bind(c), d = u(n, "background-fit", "value", r), p = u(n, "background-repeat", "value", r), f = n.width(), h = n.height(), g = 2 * n.padding(), m = f + ("inner" === u(n, "background-width-relative-to", "value", r) ? 0 : g), v = h + ("inner" === u(n, "background-height-relative-to", "value", r) ? 0 : g), b = n._private.rscratch, y = "node" === n.pstyle("background-clip").value, x = u(n, "background-image-opacity", "value", r) * i, w = t.width || t.cachedW, k = t.height || t.cachedH; null != w && null != k || (document.body.appendChild(t), w = t.cachedW = t.width || t.offsetWidth, k = t.cachedH = t.height || t.offsetHeight, document.body.removeChild(t)); var A = w, E = k; if ("auto" !== u(n, "background-width", "value", r) && (A = "%" === u(n, "background-width", "units", r) ? u(n, "background-width", "pfValue", r) * m : u(n, "background-width", "pfValue", r)), "auto" !== u(n, "background-height", "value", r) && (E = "%" === u(n, "background-height", "units", r) ? u(n, "background-height", "pfValue", r) * v : u(n, "background-height", "pfValue", r)), 0 !== A && 0 !== E) { if ("contain" === d) A *= S = Math.min(m / A, v / E), E *= S; else if ("cover" === d) { var S; A *= S = Math.max(m / A, v / E), E *= S } var $ = s - m / 2; "%" === u(n, "background-position-x", "units", r) ? $ += (m - A) * u(n, "background-position-x", "pfValue", r) : $ += u(n, "background-position-x", "pfValue", r); var C = l - v / 2; "%" === u(n, "background-position-y", "units", r) ? C += (v - E) * u(n, "background-position-y", "pfValue", r) : C += u(n, "background-position-y", "pfValue", r), b.pathCache && ($ -= s, C -= l, s = 0, l = 0); var _ = e.globalAlpha; if (e.globalAlpha = x, "no-repeat" === p) y && (e.save(), b.pathCache ? e.clip(b.pathCache) : (o.nodeShapes[o.getNodeShape(n)].draw(e, s, l, m, v), e.clip())), o.safeDrawImage(e, t, 0, 0, w, k, $, C, A, E), y && e.restore(); else { var O = e.createPattern(t, p); e.fillStyle = O, o.nodeShapes[o.getNodeShape(n)].draw(e, s, l, m, v), e.translate($, C), e.fill(), e.translate(-$, -C) } e.globalAlpha = _ } } }; e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = { eleTextBiggerThanMin: function (e, t) { if (!t) { var n = e.cy().zoom(), r = this.getPixelRatio(), o = Math.ceil(i.log2(n * r)); t = Math.pow(2, o) } return !(e.pstyle("font-size").pfValue * t < e.pstyle("min-zoomed-font-size").pfValue) }, drawElementText: function (e, t, n) { var r = this; if (void 0 === n) { if (!r.eleTextBiggerThanMin(t)) return } else if (!n) return; if (t.isNode()) { if (!(o = t.pstyle("label")) || !o.value) return; var i = t.pstyle("text-halign").strValue; switch (t.pstyle("text-valign").strValue, i) { case "left": e.textAlign = "right"; break; case "right": e.textAlign = "left"; break; default: e.textAlign = "center" }e.textBaseline = "bottom" } else { var o = t.pstyle("label"), a = t.pstyle("source-label"), s = t.pstyle("target-label"); if (!(o && o.value || a && a.value || s && s.value)) return; e.textAlign = "center", e.textBaseline = "bottom" } r.drawText(e, t), t.isEdge() && (r.drawText(e, t, "source"), r.drawText(e, t, "target")) } }; o.drawNodeText = o.drawEdgeText = o.drawElementText, o.getFontCache = function (e) { var t; this.fontCaches = this.fontCaches || []; for (var n = 0; n < this.fontCaches.length; n++)if ((t = this.fontCaches[n]).context === e) return t; return t = { context: e }, this.fontCaches.push(t), t }, o.setupTextStyle = function (e, t) { var n = t.effectiveOpacity(), r = t.pstyle("font-style").strValue, i = t.pstyle("font-size").pfValue + "px", o = t.pstyle("font-family").strValue, a = t.pstyle("font-weight").strValue, s = t.pstyle("text-opacity").value * t.pstyle("opacity").value * n, l = t.pstyle("text-outline-opacity").value * s, c = t.pstyle("color").value, u = t.pstyle("text-outline-color").value, d = t._private.fontKey, p = this.getFontCache(e); p.key !== d && (e.font = r + " " + a + " " + i + " " + o, p.key = d), e.lineJoin = "round", this.fillStyle(e, c[0], c[1], c[2], s), this.strokeStyle(e, u[0], u[1], u[2], l) }, o.drawText = function (e, t, n) { var i = t._private.rscratch, o = t.effectiveOpacity(); if (0 !== o && 0 !== t.pstyle("text-opacity").value) { var a, s, l, c, u, d, p = r.getPrefixedProperty(i, "labelX", n), f = r.getPrefixedProperty(i, "labelY", n), h = this.getLabelText(t, n); if (null != h && "" !== h && !isNaN(p) && !isNaN(f)) { this.setupTextStyle(e, t); var g = n ? n + "-" : "", m = r.getPrefixedProperty(i, "labelWidth", n), v = r.getPrefixedProperty(i, "labelHeight", n), b = r.getPrefixedProperty(i, "labelAngle", n), y = t.pstyle(g + "text-margin-x").pfValue, x = t.pstyle(g + "text-margin-y").pfValue, w = t.isEdge(), k = (t.isNode(), t.pstyle("text-halign").value), A = t.pstyle("text-valign").value; w && (k = "center", A = "center"), p += y, f += x; var E, S = t.pstyle("text-rotation"); if (0 !== (E = "autorotate" === S.strValue ? w ? b : 0 : "none" === S.strValue ? 0 : S.pfValue)) { var $ = p, C = f; e.translate($, C), e.rotate(E), p = 0, f = 0 } switch (A) { case "top": break; case "center": f += v / 2; break; case "bottom": f += v }var _ = t.pstyle("text-background-opacity").value, O = t.pstyle("text-border-opacity").value, T = t.pstyle("text-border-width").pfValue, j = t.pstyle("text-background-padding").pfValue; if (_ > 0 || T > 0 && O > 0) { var P = p - j; switch (k) { case "left": P -= m; break; case "center": P -= m / 2 }var D = f - v - j, R = m + 2 * j, I = v + 2 * j; if (_ > 0) { var N = e.fillStyle, M = t.pstyle("text-background-color").value; e.fillStyle = "rgba(" + M[0] + "," + M[1] + "," + M[2] + "," + _ * o + ")", "roundrectangle" == t.pstyle("text-background-shape").strValue ? (s = P, l = D, c = R, u = I, d = (d = 2) || 5, (a = e).beginPath(), a.moveTo(s + d, l), a.lineTo(s + c - d, l), a.quadraticCurveTo(s + c, l, s + c, l + d), a.lineTo(s + c, l + u - d), a.quadraticCurveTo(s + c, l + u, s + c - d, l + u), a.lineTo(s + d, l + u), a.quadraticCurveTo(s, l + u, s, l + u - d), a.lineTo(s, l + d), a.quadraticCurveTo(s, l, s + d, l), a.closePath(), a.fill()) : e.fillRect(P, D, R, I), e.fillStyle = N } if (T > 0 && O > 0) { var z = e.strokeStyle, L = e.lineWidth, B = t.pstyle("text-border-color").value, F = t.pstyle("text-border-style").value; if (e.strokeStyle = "rgba(" + B[0] + "," + B[1] + "," + B[2] + "," + O * o + ")", e.lineWidth = T, e.setLineDash) switch (F) { case "dotted": e.setLineDash([1, 1]); break; case "dashed": e.setLineDash([4, 2]); break; case "double": e.lineWidth = T / 4, e.setLineDash([]); break; case "solid": e.setLineDash([]) }if (e.strokeRect(P, D, R, I), "double" === F) { var q = T / 2; e.strokeRect(P + q, D + q, R - 2 * q, I - 2 * q) } e.setLineDash && e.setLineDash([]), e.lineWidth = L, e.strokeStyle = z } } var V = 2 * t.pstyle("text-outline-width").pfValue; if (V > 0 && (e.lineWidth = V), "wrap" === t.pstyle("text-wrap").value) { var U = r.getPrefixedProperty(i, "labelWrapCachedLines", n), H = v / U.length; switch (A) { case "top": f -= (U.length - 1) * H; break; case "center": case "bottom": f -= (U.length - 1) * H }for (var G = 0; G < U.length; G++)V > 0 && e.strokeText(U[G], p, f), e.fillText(U[G], p, f), f += H } else V > 0 && e.strokeText(h, p, f), e.fillText(h, p, f); 0 !== E && (e.rotate(-E), e.translate(-$, -C)) } } }, e.exports = o }, function (e, t, n) { "use strict"; var r = n(0), i = { drawNode: function (e, t, n, i) { var o, a, s = this, l = t._private, c = l.rscratch, u = t.position(); if (r.number(u.x) && r.number(u.y) && t.visible()) { var d = t.effectiveOpacity(), p = s.usePaths(), f = void 0, h = !1, g = t.padding(); o = t.width() + 2 * g, a = t.height() + 2 * g; var m = void 0; n && (m = n, e.translate(-m.x1, -m.y1)); for (var v = t.pstyle("background-image").value, b = new Array(v.length), y = new Array(v.length), x = 0, w = 0; w < v.length; w++) { var k = v[w]; if (b[w] = null != k && "none" !== k) { var A = t.cy().style().getIndexedStyle(t, "background-image-crossorigin", "value", w); x++, y[w] = s.getCachedImage(k, A, (function () { t.emitAndNotify("background") })) } } var E = t.pstyle("background-blacken").value, S = t.pstyle("border-width").pfValue, $ = t.pstyle("background-color").value, C = t.pstyle("background-opacity").value * d, _ = t.pstyle("border-color").value, O = t.pstyle("border-style").value, T = t.pstyle("border-opacity").value * d; e.lineJoin = "miter"; var j = function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : C; s.fillStyle(e, $[0], $[1], $[2], t) }, P = function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : T; s.strokeStyle(e, _[0], _[1], _[2], t) }, D = t.pstyle("shape").strValue, R = t.pstyle("shape-polygon-points").pfValue; if (p) { var I = D + "$" + o + "$" + a + ("polygon" === D ? "$" + R.join("$") : ""); e.translate(u.x, u.y), c.pathCacheKey === I ? (f = c.pathCache, h = !0) : (f = new Path2D, c.pathCacheKey = I, c.pathCache = f) } var N, M, z, L = function () { if (!h) { var n = u; p && (n = { x: 0, y: 0 }), s.nodeShapes[s.getNodeShape(t)].draw(f || e, n.x, n.y, o, a) } p ? e.fill(f) : e.fill() }, B = function () { for (var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : d, r = l.backgrounding, i = 0, o = 0; o < y.length; o++)b[o] && y[o].complete && !y[o].error && (i++, s.drawInscribedImage(e, y[o], t, o, n)); l.backgrounding = !(i === x), r !== l.backgrounding && t.updateStyle(!1) }, F = function () { var n = arguments.length > 0 && void 0 !== arguments[0] && arguments[0], r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : d; s.hasPie(t) && (s.drawPie(e, t, r), n && (p || s.nodeShapes[s.getNodeShape(t)].draw(e, u.x, u.y, o, a))) }, q = function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : d, n = (E > 0 ? E : -E) * t, r = E > 0 ? 0 : 255; 0 !== E && (s.fillStyle(e, r, r, r, n), p ? e.fill(f) : e.fill()) }, V = function () { if (S > 0) { if (e.lineWidth = S, e.lineCap = "butt", e.setLineDash) switch (O) { case "dotted": e.setLineDash([1, 1]); break; case "dashed": e.setLineDash([4, 2]); break; case "solid": case "double": e.setLineDash([]) }if (p ? e.stroke(f) : e.stroke(), "double" === O) { e.lineWidth = S / 3; var t = e.globalCompositeOperation; e.globalCompositeOperation = "destination-out", p ? e.stroke(f) : e.stroke(), e.globalCompositeOperation = t } e.setLineDash && e.setLineDash([]) } }; if ("yes" === t.pstyle("ghost").value) { var U = t.pstyle("ghost-offset-x").pfValue, H = t.pstyle("ghost-offset-y").pfValue, G = t.pstyle("ghost-opacity").value, W = G * d; e.translate(U, H), j(G * C), L(), B(W), F(0 !== E || 0 !== S), q(W), P(G * T), V(), e.translate(-U, -H) } j(), L(), B(), F(0 !== E || 0 !== S), q(), P(), V(), p && e.translate(-u.x, -u.y), s.drawElementText(e, t, i), N = t.pstyle("overlay-padding").pfValue, M = t.pstyle("overlay-opacity").value, z = t.pstyle("overlay-color").value, M > 0 && (s.fillStyle(e, z[0], z[1], z[2], M), s.nodeShapes.roundrectangle.draw(e, u.x, u.y, o + 2 * N, a + 2 * N), e.fill()), n && e.translate(m.x1, m.y1) } }, hasPie: function (e) { return (e = e[0])._private.hasPie }, drawPie: function (e, t, n, r) { t = t[0], r = r || t.position(); var i = t.cy().style(), o = t.pstyle("pie-size"), a = r.x, s = r.y, l = t.width(), c = t.height(), u = Math.min(l, c) / 2, d = 0; this.usePaths() && (a = 0, s = 0), "%" === o.units ? u *= o.pfValue : void 0 !== o.pfValue && (u = o.pfValue / 2); for (var p = 1; p <= i.pieBackgroundN; p++) { var f = t.pstyle("pie-" + p + "-background-size").value, h = t.pstyle("pie-" + p + "-background-color").value, g = t.pstyle("pie-" + p + "-background-opacity").value * n, m = f / 100; m + d > 1 && (m = 1 - d); var v = 1.5 * Math.PI + 2 * Math.PI * d, b = v + 2 * Math.PI * m; 0 === f || d >= 1 || d + m > 1 || (e.beginPath(), e.moveTo(a, s), e.arc(a, s, u, v, b), e.closePath(), this.fillStyle(e, h[0], h[1], h[2], g), e.fill(), d += m) } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = {}, i = n(1); r.getPixelRatio = function () { var e = this.data.contexts[0]; if (null != this.forcedPixelRatio) return this.forcedPixelRatio; var t = e.backingStorePixelRatio || e.webkitBackingStorePixelRatio || e.mozBackingStorePixelRatio || e.msBackingStorePixelRatio || e.oBackingStorePixelRatio || e.backingStorePixelRatio || 1; return (window.devicePixelRatio || 1) / t }, r.paintCache = function (e) { for (var t, n = this.paintCaches = this.paintCaches || [], r = !0, i = 0; i < n.length; i++)if ((t = n[i]).context === e) { r = !1; break } return r && (t = { context: e }, n.push(t)), t }, r.fillStyle = function (e, t, n, r, i) { e.fillStyle = "rgba(" + t + "," + n + "," + r + "," + i + ")" }, r.strokeStyle = function (e, t, n, r, i) { e.strokeStyle = "rgba(" + t + "," + n + "," + r + "," + i + ")" }, r.matchCanvasSize = function (e) { var t = this, n = t.data, r = t.findContainerClientCoords(), i = r[2], o = r[3], a = t.getPixelRatio(), s = t.motionBlurPxRatio; e !== t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE] && e !== t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG] || (a = s); var l, c = i * a, u = o * a; if (c !== t.canvasWidth || u !== t.canvasHeight) { t.fontCaches = null; var d = n.canvasContainer; d.style.width = i + "px", d.style.height = o + "px"; for (var p = 0; p < t.CANVAS_LAYERS; p++)(l = n.canvases[p]).width = c, l.height = u, l.style.width = i + "px", l.style.height = o + "px"; for (p = 0; p < t.BUFFER_COUNT; p++)(l = n.bufferCanvases[p]).width = c, l.height = u, l.style.width = i + "px", l.style.height = o + "px"; t.textureMult = 1, a <= 1 && (l = n.bufferCanvases[t.TEXTURE_BUFFER], t.textureMult = 2, l.width = c * t.textureMult, l.height = u * t.textureMult), t.canvasWidth = c, t.canvasHeight = u } }, r.renderTo = function (e, t, n, r) { this.render({ forcedContext: e, forcedZoom: t, forcedPan: n, drawAllLayers: !0, forcedPxRatio: r }) }, r.render = function (e) { var t = (e = e || i.staticEmptyObject()).forcedContext, n = e.drawAllLayers, r = e.drawOnlyNodeLayer, o = e.forcedZoom, a = e.forcedPan, s = this, l = void 0 === e.forcedPxRatio ? this.getPixelRatio() : e.forcedPxRatio, c = s.cy, u = s.data, d = u.canvasNeedsRedraw, p = s.textureOnViewport && !t && (s.pinching || s.hoverData.dragging || s.swipePanning || s.data.wheelZooming), f = void 0 !== e.motionBlur ? e.motionBlur : s.motionBlur, h = s.motionBlurPxRatio, g = c.hasCompoundNodes(), m = s.hoverData.draggingEles, v = !(!s.hoverData.selecting && !s.touchData.selecting), b = f = f && !t && s.motionBlurEnabled && !v; t || (s.prevPxRatio !== l && (s.invalidateContainerClientCoordsCache(), s.matchCanvasSize(s.container), s.redrawHint("eles", !0), s.redrawHint("drag", !0)), s.prevPxRatio = l), !t && s.motionBlurTimeout && clearTimeout(s.motionBlurTimeout), f && (null == s.mbFrames && (s.mbFrames = 0), s.mbFrames++, s.mbFrames < 3 && (b = !1), s.mbFrames > s.minMbLowQualFrames && (s.motionBlurPxRatio = s.mbPxRBlurry)), s.clearingMotionBlur && (s.motionBlurPxRatio = 1), s.textureDrawLastFrame && !p && (d[s.NODE] = !0, d[s.SELECT_BOX] = !0); var y = c.style()._private.coreStyle, x = c.zoom(), w = void 0 !== o ? o : x, k = c.pan(), A = { x: k.x, y: k.y }, E = { zoom: x, pan: { x: k.x, y: k.y } }, S = s.prevViewport; void 0 === S || E.zoom !== S.zoom || E.pan.x !== S.pan.x || E.pan.y !== S.pan.y || m && !g || (s.motionBlurPxRatio = 1), a && (A = a), w *= l, A.x *= l, A.y *= l; var $ = s.getCachedZSortedEles(); function C(e, t, n, r, i) { var o = e.globalCompositeOperation; e.globalCompositeOperation = "destination-out", s.fillStyle(e, 255, 255, 255, s.motionBlurTransparency), e.fillRect(t, n, r, i), e.globalCompositeOperation = o } function _(e, r) { var i, l, c, d; s.clearingMotionBlur || e !== u.bufferContexts[s.MOTIONBLUR_BUFFER_NODE] && e !== u.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG] ? (i = A, l = w, c = s.canvasWidth, d = s.canvasHeight) : (i = { x: k.x * h, y: k.y * h }, l = x * h, c = s.canvasWidth * h, d = s.canvasHeight * h), e.setTransform(1, 0, 0, 1, 0, 0), "motionBlur" === r ? C(e, 0, 0, c, d) : t || void 0 !== r && !r || e.clearRect(0, 0, c, d), n || (e.translate(i.x, i.y), e.scale(l, l)), a && e.translate(a.x, a.y), o && e.scale(o, o) } if (p || (s.textureDrawLastFrame = !1), p) { if (s.textureDrawLastFrame = !0, !s.textureCache) { s.textureCache = {}, s.textureCache.bb = c.mutableElements().boundingBox(), s.textureCache.texture = s.data.bufferCanvases[s.TEXTURE_BUFFER]; var O = s.data.bufferContexts[s.TEXTURE_BUFFER]; O.setTransform(1, 0, 0, 1, 0, 0), O.clearRect(0, 0, s.canvasWidth * s.textureMult, s.canvasHeight * s.textureMult), s.render({ forcedContext: O, drawOnlyNodeLayer: !0, forcedPxRatio: l * s.textureMult }), (E = s.textureCache.viewport = { zoom: c.zoom(), pan: c.pan(), width: s.canvasWidth, height: s.canvasHeight }).mpan = { x: (0 - E.pan.x) / E.zoom, y: (0 - E.pan.y) / E.zoom } } d[s.DRAG] = !1, d[s.NODE] = !1; var T = u.contexts[s.NODE], j = s.textureCache.texture; E = s.textureCache.viewport, s.textureCache.bb, T.setTransform(1, 0, 0, 1, 0, 0), f ? C(T, 0, 0, E.width, E.height) : T.clearRect(0, 0, E.width, E.height); var P = y["outside-texture-bg-color"].value, D = y["outside-texture-bg-opacity"].value; s.fillStyle(T, P[0], P[1], P[2], D), T.fillRect(0, 0, E.width, E.height), x = c.zoom(), _(T, !1), T.clearRect(E.mpan.x, E.mpan.y, E.width / E.zoom / l, E.height / E.zoom / l), T.drawImage(j, E.mpan.x, E.mpan.y, E.width / E.zoom / l, E.height / E.zoom / l) } else s.textureOnViewport && !t && (s.textureCache = null); var R = c.extent(), I = s.pinching || s.hoverData.dragging || s.swipePanning || s.data.wheelZooming || s.hoverData.draggingEles, N = s.hideEdgesOnViewport && I, M = []; if (M[s.NODE] = !d[s.NODE] && f && !s.clearedForMotionBlur[s.NODE] || s.clearingMotionBlur, M[s.NODE] && (s.clearedForMotionBlur[s.NODE] = !0), M[s.DRAG] = !d[s.DRAG] && f && !s.clearedForMotionBlur[s.DRAG] || s.clearingMotionBlur, M[s.DRAG] && (s.clearedForMotionBlur[s.DRAG] = !0), d[s.NODE] || n || r || M[s.NODE]) { var z = f && !M[s.NODE] && 1 !== h; _(T = t || (z ? s.data.bufferContexts[s.MOTIONBLUR_BUFFER_NODE] : u.contexts[s.NODE]), f && !z ? "motionBlur" : void 0), N ? s.drawCachedNodes(T, $.nondrag, l, R) : s.drawLayeredElements(T, $.nondrag, l, R), s.debug && s.drawDebugPoints(T, $.nondrag), n || f || (d[s.NODE] = !1) } if (!r && (d[s.DRAG] || n || M[s.DRAG]) && (z = f && !M[s.DRAG] && 1 !== h, _(T = t || (z ? s.data.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG] : u.contexts[s.DRAG]), f && !z ? "motionBlur" : void 0), N ? s.drawCachedNodes(T, $.drag, l, R) : s.drawCachedElements(T, $.drag, l, R), s.debug && s.drawDebugPoints(T, $.drag), n || f || (d[s.DRAG] = !1)), s.showFps || !r && d[s.SELECT_BOX] && !n) { if (_(T = t || u.contexts[s.SELECT_BOX]), 1 == s.selection[4] && (s.hoverData.selecting || s.touchData.selecting)) { x = s.cy.zoom(); var L = y["selection-box-border-width"].value / x; T.lineWidth = L, T.fillStyle = "rgba(" + y["selection-box-color"].value[0] + "," + y["selection-box-color"].value[1] + "," + y["selection-box-color"].value[2] + "," + y["selection-box-opacity"].value + ")", T.fillRect(s.selection[0], s.selection[1], s.selection[2] - s.selection[0], s.selection[3] - s.selection[1]), L > 0 && (T.strokeStyle = "rgba(" + y["selection-box-border-color"].value[0] + "," + y["selection-box-border-color"].value[1] + "," + y["selection-box-border-color"].value[2] + "," + y["selection-box-opacity"].value + ")", T.strokeRect(s.selection[0], s.selection[1], s.selection[2] - s.selection[0], s.selection[3] - s.selection[1])) } if (u.bgActivePosistion && !s.hoverData.selecting) { x = s.cy.zoom(); var B = u.bgActivePosistion; T.fillStyle = "rgba(" + y["active-bg-color"].value[0] + "," + y["active-bg-color"].value[1] + "," + y["active-bg-color"].value[2] + "," + y["active-bg-opacity"].value + ")", T.beginPath(), T.arc(B.x, B.y, y["active-bg-size"].pfValue / x, 0, 2 * Math.PI), T.fill() } var F = s.lastRedrawTime; if (s.showFps && F) { F = Math.round(F); var q = Math.round(1e3 / F); T.setTransform(1, 0, 0, 1, 0, 0), T.fillStyle = "rgba(255, 0, 0, 0.75)", T.strokeStyle = "rgba(255, 0, 0, 0.75)", T.lineWidth = 1, T.fillText("1 frame = " + F + " ms = " + q + " fps", 0, 20), T.strokeRect(0, 30, 250, 20), T.fillRect(0, 30, 250 * Math.min(q / 60, 1), 20) } n || (d[s.SELECT_BOX] = !1) } if (f && 1 !== h) { var V = u.contexts[s.NODE], U = s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_NODE], H = u.contexts[s.DRAG], G = s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_DRAG], W = function (e, t, n) { e.setTransform(1, 0, 0, 1, 0, 0), n || !b ? e.clearRect(0, 0, s.canvasWidth, s.canvasHeight) : C(e, 0, 0, s.canvasWidth, s.canvasHeight); var r = h; e.drawImage(t, 0, 0, s.canvasWidth * r, s.canvasHeight * r, 0, 0, s.canvasWidth, s.canvasHeight) }; (d[s.NODE] || M[s.NODE]) && (W(V, U, M[s.NODE]), d[s.NODE] = !1), (d[s.DRAG] || M[s.DRAG]) && (W(H, G, M[s.DRAG]), d[s.DRAG] = !1) } s.prevViewport = E, s.clearingMotionBlur && (s.clearingMotionBlur = !1, s.motionBlurCleared = !0, s.motionBlur = !0), f && (s.motionBlurTimeout = setTimeout((function () { s.motionBlurTimeout = null, s.clearedForMotionBlur[s.NODE] = !1, s.clearedForMotionBlur[s.DRAG] = !1, s.motionBlur = !1, s.clearingMotionBlur = !p, s.mbFrames = 0, d[s.NODE] = !0, d[s.DRAG] = !0, s.redraw() }), 100)), t || c.emit("render") }, e.exports = r }, function (e, t, n) { "use strict"; for (var r = n(2), i = { drawPolygonPath: function (e, t, n, r, i, o) { var a = r / 2, s = i / 2; e.beginPath && e.beginPath(), e.moveTo(t + a * o[0], n + s * o[1]); for (var l = 1; l < o.length / 2; l++)e.lineTo(t + a * o[2 * l], n + s * o[2 * l + 1]); e.closePath() }, drawRoundRectanglePath: function (e, t, n, i, o) { var a = i / 2, s = o / 2, l = r.getRoundRectangleRadius(i, o); e.beginPath && e.beginPath(), e.moveTo(t, n - s), e.arcTo(t + a, n - s, t + a, n, l), e.arcTo(t + a, n + s, t, n + s, l), e.arcTo(t - a, n + s, t - a, n, l), e.arcTo(t - a, n - s, t, n - s, l), e.lineTo(t, n - s), e.closePath() }, drawBottomRoundRectanglePath: function (e, t, n, i, o) { var a = i / 2, s = o / 2, l = r.getRoundRectangleRadius(i, o); e.beginPath && e.beginPath(), e.moveTo(t, n - s), e.lineTo(t + a, n - s), e.lineTo(t + a, n), e.arcTo(t + a, n + s, t, n + s, l), e.arcTo(t - a, n + s, t - a, n, l), e.lineTo(t - a, n - s), e.lineTo(t, n - s), e.closePath() }, drawCutRectanglePath: function (e, t, n, i, o) { var a = i / 2, s = o / 2, l = r.getCutRectangleCornerLength(); e.beginPath && e.beginPath(), e.moveTo(t - a + l, n - s), e.lineTo(t + a - l, n - s), e.lineTo(t + a, n - s + l), e.lineTo(t + a, n + s - l), e.lineTo(t + a - l, n + s), e.lineTo(t - a + l, n + s), e.lineTo(t - a, n + s - l), e.lineTo(t - a, n - s + l), e.closePath() }, drawBarrelPath: function (e, t, n, i, o) { var a = i / 2, s = o / 2, l = t - a, c = t + a, u = n - s, d = n + s, p = r.getBarrelCurveConstants(i, o), f = p.widthOffset, h = p.heightOffset, g = p.ctrlPtOffsetPct * f; e.beginPath && e.beginPath(), e.moveTo(l, u + h), e.lineTo(l, d - h), e.quadraticCurveTo(l + g, d, l + f, d), e.lineTo(c - f, d), e.quadraticCurveTo(c - g, d, c, d - h), e.lineTo(c, u + h), e.quadraticCurveTo(c - g, u, c - f, u), e.lineTo(l + f, u), e.quadraticCurveTo(l + g, u, l, u + h), e.closePath() } }, o = Math.sin(0), a = Math.cos(0), s = {}, l = {}, c = Math.PI / 40, u = 0 * Math.PI; u < 2 * Math.PI; u += c)s[u] = Math.sin(u), l[u] = Math.cos(u); i.drawEllipsePath = function (e, t, n, r, i) { if (e.beginPath && e.beginPath(), e.ellipse) e.ellipse(t, n, r / 2, i / 2, 0, 0, 2 * Math.PI); else for (var u, d, p = r / 2, f = i / 2, h = 0 * Math.PI; h < 2 * Math.PI; h += c)u = t - p * s[h] * o + p * l[h] * a, d = n + f * l[h] * o + f * s[h] * a, 0 === h ? e.moveTo(u, d) : e.lineTo(u, d); e.closePath() }, e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = {}; function o(e) { var t = e.indexOf(","); return e.substr(t + 1) } function a(e, t, n) { var r = t.toDataURL(n, e.quality); switch (e.output) { case "blob": return function (e, t) { for (var n = atob(e), r = new ArrayBuffer(n.length), i = new Uint8Array(r), o = 0; o < n.length; o++)i[o] = n.charCodeAt(o); return new Blob([r], { type: t }) }(o(r), n); case "base64": return o(r); case "base64uri": default: return r } } i.createBuffer = function (e, t) { var n = document.createElement("canvas"); return n.width = e, n.height = t, [n, n.getContext("2d")] }, i.bufferCanvasImage = function (e) { var t = this.cy, n = t.mutableElements().boundingBox(), i = this.findContainerClientCoords(), o = e.full ? Math.ceil(n.w) : i[2], a = e.full ? Math.ceil(n.h) : i[3], s = r.number(e.maxWidth) || r.number(e.maxHeight), l = this.getPixelRatio(), c = 1; if (void 0 !== e.scale) o *= e.scale, a *= e.scale, c = e.scale; else if (s) { var u = 1 / 0, d = 1 / 0; r.number(e.maxWidth) && (u = c * e.maxWidth / o), r.number(e.maxHeight) && (d = c * e.maxHeight / a), o *= c = Math.min(u, d), a *= c } s || (o *= l, a *= l, c *= l); var p = document.createElement("canvas"); p.width = o, p.height = a, p.style.width = o + "px", p.style.height = a + "px"; var f = p.getContext("2d"); if (o > 0 && a > 0) { f.clearRect(0, 0, o, a), f.globalCompositeOperation = "source-over"; var h = this.getCachedZSortedEles(); if (e.full) f.translate(-n.x1 * c, -n.y1 * c), f.scale(c, c), this.drawElements(f, h), f.scale(1 / c, 1 / c), f.translate(n.x1 * c, n.y1 * c); else { var g = t.pan(), m = { x: g.x * c, y: g.y * c }; c *= t.zoom(), f.translate(m.x, m.y), f.scale(c, c), this.drawElements(f, h), f.scale(1 / c, 1 / c), f.translate(-m.x, -m.y) } e.bg && (f.globalCompositeOperation = "destination-over", f.fillStyle = e.bg, f.rect(0, 0, o, a), f.fill()) } return p }, i.png = function (e) { return a(e, this.bufferCanvasImage(e), "image/png") }, i.jpg = function (e) { return a(e, this.bufferCanvasImage(e), "image/jpeg") }, e.exports = i }, function (e, t, n) { "use strict"; var r = { nodeShapeImpl: function (e, t, n, r, i, o, a) { switch (e) { case "ellipse": return this.drawEllipsePath(t, n, r, i, o); case "polygon": return this.drawPolygonPath(t, n, r, i, o, a); case "roundrectangle": return this.drawRoundRectanglePath(t, n, r, i, o); case "cutrectangle": return this.drawCutRectanglePath(t, n, r, i, o); case "bottomroundrectangle": return this.drawBottomRoundRectanglePath(t, n, r, i, o); case "barrel": return this.drawBarrelPath(t, n, r, i, o) } } }; e.exports = r }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(18), a = function e() { if (!(this instanceof e)) return new e; this.length = 0 }, s = a.prototype; s.instanceString = function () { return "stylesheet" }, s.selector = function (e) { return this[this.length++] = { selector: e, properties: [] }, this }, s.css = function (e, t) { var n = this.length - 1; if (r.string(e)) this[n].properties.push({ name: e, value: t }); else if (r.plainObject(e)) for (var a = e, s = 0; s < o.properties.length; s++) { var l = o.properties[s], c = a[l.name]; if (void 0 === c && (c = a[i.dash2camel(l.name)]), void 0 !== c) { var u = l.name, d = c; this[n].properties.push({ name: u, value: d }) } } return this }, s.style = s.css, s.generateStyle = function (e) { var t = new o(e); return this.appendToStyle(t) }, s.appendToStyle = function (e) { for (var t = 0; t < this.length; t++) { var n = this[t], r = n.selector, i = n.properties; e.selector(r); for (var o = 0; o < i.length; o++) { var a = i[o]; e.css(a.name, a.value) } } return e }, e.exports = a }, function (e, t, n) { "use strict"; e.exports = "snapshot-2fd4aa6cc2-1531011493999" }]) + }, e.exports = r(n(241), n(242)) + }).call(this, n(238).setImmediate) + }, function (e, t, n) { (function (e) { var r = void 0 !== e && e || "undefined" != typeof self && self || window, i = Function.prototype.apply; function o(e, t) { this._id = e, this._clearFn = t } t.setTimeout = function () { return new o(i.call(setTimeout, r, arguments), clearTimeout) }, t.setInterval = function () { return new o(i.call(setInterval, r, arguments), clearInterval) }, t.clearTimeout = t.clearInterval = function (e) { e && e.close() }, o.prototype.unref = o.prototype.ref = function () { }, o.prototype.close = function () { this._clearFn.call(r, this._id) }, t.enroll = function (e, t) { clearTimeout(e._idleTimeoutId), e._idleTimeout = t }, t.unenroll = function (e) { clearTimeout(e._idleTimeoutId), e._idleTimeout = -1 }, t._unrefActive = t.active = function (e) { clearTimeout(e._idleTimeoutId); var t = e._idleTimeout; t >= 0 && (e._idleTimeoutId = setTimeout((function () { e._onTimeout && e._onTimeout() }), t)) }, n(239), t.setImmediate = "undefined" != typeof self && self.setImmediate || void 0 !== e && e.setImmediate || this && this.setImmediate, t.clearImmediate = "undefined" != typeof self && self.clearImmediate || void 0 !== e && e.clearImmediate || this && this.clearImmediate }).call(this, n(35)) }, function (e, t, n) { (function (e, t) { !function (e, n) { "use strict"; if (!e.setImmediate) { var r, i, o, a, s, l = 1, c = {}, u = !1, d = e.document, p = Object.getPrototypeOf && Object.getPrototypeOf(e); p = p && p.setTimeout ? p : e, "[object process]" === {}.toString.call(e.process) ? r = function (e) { t.nextTick((function () { h(e) })) } : !function () { if (e.postMessage && !e.importScripts) { var t = !0, n = e.onmessage; return e.onmessage = function () { t = !1 }, e.postMessage("", "*"), e.onmessage = n, t } }() ? e.MessageChannel ? ((o = new MessageChannel).port1.onmessage = function (e) { h(e.data) }, r = function (e) { o.port2.postMessage(e) }) : d && "onreadystatechange" in d.createElement("script") ? (i = d.documentElement, r = function (e) { var t = d.createElement("script"); t.onreadystatechange = function () { h(e), t.onreadystatechange = null, i.removeChild(t), t = null }, i.appendChild(t) }) : r = function (e) { setTimeout(h, 0, e) } : (a = "setImmediate$" + Math.random() + "$", s = function (t) { t.source === e && "string" == typeof t.data && 0 === t.data.indexOf(a) && h(+t.data.slice(a.length)) }, e.addEventListener ? e.addEventListener("message", s, !1) : e.attachEvent("onmessage", s), r = function (t) { e.postMessage(a + t, "*") }), p.setImmediate = function (e) { "function" != typeof e && (e = new Function("" + e)); for (var t = new Array(arguments.length - 1), n = 0; n < t.length; n++)t[n] = arguments[n + 1]; var i = { callback: e, args: t }; return c[l] = i, r(l), l++ }, p.clearImmediate = f } function f(e) { delete c[e] } function h(e) { if (u) setTimeout(h, 0, e); else { var t = c[e]; if (t) { u = !0; try { !function (e) { var t = e.callback, n = e.args; switch (n.length) { case 0: t(); break; case 1: t(n[0]); break; case 2: t(n[0], n[1]); break; case 3: t(n[0], n[1], n[2]); break; default: t.apply(void 0, n) } }(t) } finally { f(e), u = !1 } } } } }("undefined" == typeof self ? void 0 === e ? this : e : self) }).call(this, n(35), n(240)) }, function (e, t) { var n, r, i = e.exports = {}; function o() { throw new Error("setTimeout has not been defined") } function a() { throw new Error("clearTimeout has not been defined") } function s(e) { if (n === setTimeout) return setTimeout(e, 0); if ((n === o || !n) && setTimeout) return n = setTimeout, setTimeout(e, 0); try { return n(e, 0) } catch (t) { try { return n.call(null, e, 0) } catch (t) { return n.call(this, e, 0) } } } !function () { try { n = "function" == typeof setTimeout ? setTimeout : o } catch (e) { n = o } try { r = "function" == typeof clearTimeout ? clearTimeout : a } catch (e) { r = a } }(); var l, c = [], u = !1, d = -1; function p() { u && l && (u = !1, l.length ? c = l.concat(c) : d = -1, c.length && f()) } function f() { if (!u) { var e = s(p); u = !0; for (var t = c.length; t;) { for (l = c, c = []; ++d < t;)l && l[d].run(); d = -1, t = c.length } l = null, u = !1, function (e) { if (r === clearTimeout) return clearTimeout(e); if ((r === a || !r) && clearTimeout) return r = clearTimeout, clearTimeout(e); try { r(e) } catch (t) { try { return r.call(null, e) } catch (t) { return r.call(this, e) } } }(e) } } function h(e, t) { this.fun = e, this.array = t } function g() { } i.nextTick = function (e) { var t = new Array(arguments.length - 1); if (arguments.length > 1) for (var n = 1; n < arguments.length; n++)t[n - 1] = arguments[n]; c.push(new h(e, t)), 1 !== c.length || u || s(f) }, h.prototype.run = function () { this.fun.apply(null, this.array) }, i.title = "browser", i.browser = !0, i.env = {}, i.argv = [], i.version = "", i.versions = {}, i.on = g, i.addListener = g, i.once = g, i.off = g, i.removeListener = g, i.removeAllListeners = g, i.emit = g, i.prependListener = g, i.prependOnceListener = g, i.listeners = function (e) { return [] }, i.binding = function (e) { throw new Error("process.binding is not supported") }, i.cwd = function () { return "/" }, i.chdir = function (e) { throw new Error("process.chdir is not supported") }, i.umask = function () { return 0 } }, function (e, t, n) { (function (t) { var n = /^\s+|\s+$/g, r = /^[-+]0x[0-9a-f]+$/i, i = /^0b[01]+$/i, o = /^0o[0-7]+$/i, a = parseInt, s = "object" == typeof t && t && t.Object === Object && t, l = "object" == typeof self && self && self.Object === Object && self, c = s || l || Function("return this")(), u = Object.prototype.toString, d = Math.max, p = Math.min, f = function () { return c.Date.now() }; function h(e) { var t = typeof e; return !!e && ("object" == t || "function" == t) } function g(e) { if ("number" == typeof e) return e; if (function (e) { return "symbol" == typeof e || function (e) { return !!e && "object" == typeof e }(e) && "[object Symbol]" == u.call(e) }(e)) return NaN; if (h(e)) { var t = "function" == typeof e.valueOf ? e.valueOf() : e; e = h(t) ? t + "" : t } if ("string" != typeof e) return 0 === e ? e : +e; e = e.replace(n, ""); var s = i.test(e); return s || o.test(e) ? a(e.slice(2), s ? 2 : 8) : r.test(e) ? NaN : +e } e.exports = function (e, t, n) { var r, i, o, a, s, l, c = 0, u = !1, m = !1, v = !0; if ("function" != typeof e) throw new TypeError("Expected a function"); function b(t) { var n = r, o = i; return r = i = void 0, c = t, a = e.apply(o, n) } function y(e) { return c = e, s = setTimeout(w, t), u ? b(e) : a } function x(e) { var n = e - l; return void 0 === l || n >= t || n < 0 || m && e - c >= o } function w() { var e = f(); if (x(e)) return k(e); s = setTimeout(w, function (e) { var n = t - (e - l); return m ? p(n, o - (e - c)) : n }(e)) } function k(e) { return s = void 0, v && r ? b(e) : (r = i = void 0, a) } function A() { var e = f(), n = x(e); if (r = arguments, i = this, l = e, n) { if (void 0 === s) return y(l); if (m) return s = setTimeout(w, t), b(l) } return void 0 === s && (s = setTimeout(w, t)), a } return t = g(t) || 0, h(n) && (u = !!n.leading, o = (m = "maxWait" in n) ? d(g(n.maxWait) || 0, t) : o, v = "trailing" in n ? !!n.trailing : v), A.cancel = function () { void 0 !== s && clearTimeout(s), c = 0, r = l = i = s = void 0 }, A.flush = function () { return void 0 === s ? a : k(f()) }, A } }).call(this, n(35)) }, function (e, t, n) { e.exports = n(243) }, function (e, t, n) { var r, i, o; (function () { var n, a, s, l, c, u, d, p, f, h, g, m, v, b, y; s = Math.floor, h = Math.min, a = function (e, t) { return e < t ? -1 : e > t ? 1 : 0 }, f = function (e, t, n, r, i) { var o; if (null == n && (n = 0), null == i && (i = a), n < 0) throw new Error("lo must be non-negative"); for (null == r && (r = e.length); n < r;)i(t, e[o = s((n + r) / 2)]) < 0 ? r = o : n = o + 1; return [].splice.apply(e, [n, n - n].concat(t)), t }, u = function (e, t, n) { return null == n && (n = a), e.push(t), b(e, 0, e.length - 1, n) }, c = function (e, t) { var n, r; return null == t && (t = a), n = e.pop(), e.length ? (r = e[0], e[0] = n, y(e, 0, t)) : r = n, r }, p = function (e, t, n) { var r; return null == n && (n = a), r = e[0], e[0] = t, y(e, 0, n), r }, d = function (e, t, n) { var r; return null == n && (n = a), e.length && n(e[0], t) < 0 && (t = (r = [e[0], t])[0], e[0] = r[1], y(e, 0, n)), t }, l = function (e, t) { var n, r, i, o, l, c; for (null == t && (t = a), l = [], r = 0, i = (o = function () { c = []; for (var t = 0, n = s(e.length / 2); 0 <= n ? t < n : t > n; 0 <= n ? t++ : t--)c.push(t); return c }.apply(this).reverse()).length; r < i; r++)n = o[r], l.push(y(e, n, t)); return l }, v = function (e, t, n) { var r; if (null == n && (n = a), -1 !== (r = e.indexOf(t))) return b(e, 0, r, n), y(e, r, n) }, g = function (e, t, n) { var r, i, o, s, c; if (null == n && (n = a), !(i = e.slice(0, t)).length) return i; for (l(i, n), o = 0, s = (c = e.slice(t)).length; o < s; o++)r = c[o], d(i, r, n); return i.sort(n).reverse() }, m = function (e, t, n) { var r, i, o, s, u, d, p, g, m; if (null == n && (n = a), 10 * t <= e.length) { if (!(o = e.slice(0, t).sort(n)).length) return o; for (i = o[o.length - 1], s = 0, d = (p = e.slice(t)).length; s < d; s++)n(r = p[s], i) < 0 && (f(o, r, 0, null, n), o.pop(), i = o[o.length - 1]); return o } for (l(e, n), m = [], u = 0, g = h(t, e.length); 0 <= g ? u < g : u > g; 0 <= g ? ++u : --u)m.push(c(e, n)); return m }, b = function (e, t, n, r) { var i, o, s; for (null == r && (r = a), i = e[n]; n > t && r(i, o = e[s = n - 1 >> 1]) < 0;)e[n] = o, n = s; return e[n] = i }, y = function (e, t, n) { var r, i, o, s, l; for (null == n && (n = a), i = e.length, l = t, o = e[t], r = 2 * t + 1; r < i;)(s = r + 1) < i && !(n(e[r], e[s]) < 0) && (r = s), e[t] = e[r], r = 2 * (t = r) + 1; return e[t] = o, b(e, l, t, n) }, n = function () { function e(e) { this.cmp = null != e ? e : a, this.nodes = [] } return e.push = u, e.pop = c, e.replace = p, e.pushpop = d, e.heapify = l, e.updateItem = v, e.nlargest = g, e.nsmallest = m, e.prototype.push = function (e) { return u(this.nodes, e, this.cmp) }, e.prototype.pop = function () { return c(this.nodes, this.cmp) }, e.prototype.peek = function () { return this.nodes[0] }, e.prototype.contains = function (e) { return -1 !== this.nodes.indexOf(e) }, e.prototype.replace = function (e) { return p(this.nodes, e, this.cmp) }, e.prototype.pushpop = function (e) { return d(this.nodes, e, this.cmp) }, e.prototype.heapify = function () { return l(this.nodes, this.cmp) }, e.prototype.updateItem = function (e) { return v(this.nodes, e, this.cmp) }, e.prototype.clear = function () { return this.nodes = [] }, e.prototype.empty = function () { return 0 === this.nodes.length }, e.prototype.size = function () { return this.nodes.length }, e.prototype.clone = function () { var t; return (t = new e).nodes = this.nodes.slice(0), t }, e.prototype.toArray = function () { return this.nodes.slice(0) }, e.prototype.insert = e.prototype.push, e.prototype.top = e.prototype.peek, e.prototype.front = e.prototype.peek, e.prototype.has = e.prototype.contains, e.prototype.copy = e.prototype.clone, e }(), i = [], void 0 === (o = "function" == typeof (r = function () { return n }) ? r.apply(t, i) : r) || (e.exports = o) }).call(this) }, function (e, t, n) { var r; !function () { "use strict"; var i = "undefined" == typeof jQuery ? null : jQuery, o = function (e, t) { if (e) { var n, r = { menuItems: [], menuItemClasses: [], contextMenuClasses: [] }; e("core", "contextMenus", (function (e) { var i = this; i.scratch("cycontextmenus") || i.scratch("cycontextmenus", {}); var o, a = l("options"), s = l("cxtMenu"); function l(e) { return i.scratch("cycontextmenus")[e] } function c(e, t) { i.scratch("cycontextmenus")[e] = t } function u(e) { for (var t = "", n = 0; n < e.length; n++) { t += e[n], n !== e.length - 1 && (t += " ") } return t } function d(e) { e.css("display", "block") } function p(e) { e.css("display", "none") } function f(e, n, r) { function o(n) { c("currentCyEvent", n), function (e) { var n = l("cxtMenuPosition"), r = e.position || e.cyPosition; if (n != r) { s.children().css("display", "none"), c("anyVisibleChild", !1), c("cxtMenuPosition", r); var o = t(i.container()).offset(), a = e.renderedPosition || e.cyRenderedPosition, u = o.left + a.x, d = o.top + a.y; s.css("left", u), s.css("top", d) } }(n), e.data("show") && (s.is(":visible") || d(s), c("anyVisibleChild", !0), d(e)), !l("anyVisibleChild") && s.is(":visible") && p(s) } var a, u; r && i.on("cxttap", u = function (e) { (e.target || e.cyTarget) == i && o(e) }), n && i.on("cxttap", n, a = function (e) { o(e) }), e.data("cy-context-menus-cxtfcn", a), e.data("cy-context-menus-cxtcorefcn", u) } function h(e, t, n, r) { !function (e, t) { var n; e.on("click", n = function () { t(l("currentCyEvent")) }), e.data("call-on-click-function", n) }(e, t), f(e, n, r) } function g(e) { for (var t = 0; t < e.length; t++)m(e[t]) } function m(e) { var t, n = b(e); t = n, s.append(t), function (e) { e.click((function () { p(s), c("cxtMenuPosition", void 0) })) }(t), h(n, e.onClickFunction, e.selector, e.coreAsWell) } function v(e, n) { var r, i, o = b(e); r = o, i = t("#" + n), r.insertBefore(i), h(o, e.onClickFunction, e.selector, e.coreAsWell) } function b(e) { var n, r, i, o = (n = a.menuItemClasses, r = e.hasTrailingDivider, i = u(n), i += " cy-context-menus-cxt-menuitem", r && (i += " cy-context-menus-divider"), i), s = '" : s += ">" + e.content + ""; var l = t(s); return l.data("selector", e.selector), l.data("on-click-function", e.onClickFunction), l.data("show", void 0 === e.show || e.show), l } function y() { var e; l("active") && (e = s.children(), t(e).each((function () { x(t(this)) })), i.off("tapstart", n), s.remove(), c(s = void 0, void 0), c("active", !1), c("anyVisibleChild", !1)) } function x(e) { var n = "string" == typeof e ? t("#" + e) : e, r = n.data("cy-context-menus-cxtfcn"), o = n.data("selector"), a = n.data("call-on-click-function"), s = n.data("cy-context-menus-cxtcorefcn"); r && i.off("cxttap", o, r), s && i.off("cxttap", s), a && n.off("click", a), n.remove() } "get" !== e && (c("options", a = function (e, t) { var n = {}; for (var r in e) n[r] = e[r]; for (var r in t) n[r] = t[r]; return n }(r, e)), l("active") && y(), c("active", !0), o = u(a.contextMenuClasses), (s = t("
")).addClass("cy-context-menus-cxt-menu"), c("cxtMenu", s), t("body").append(s), s = s, g(a.menuItems), i.on("tapstart", n = function () { p(s), c("cxtMenuPosition", void 0), c("currentCyEvent", void 0) }), t(".cy-context-menus-cxt-menu").contextmenu((function () { return !1 }))); return function (e) { return { isActive: function () { return l("active") }, appendMenuItem: function (t) { return m(t), e }, appendMenuItems: function (t) { return g(t), e }, removeMenuItem: function (t) { return x(t), e }, setTrailingDivider: function (n, r) { return function (e, n) { var r = t("#" + e); n ? r.addClass("cy-context-menus-divider") : r.removeClass("cy-context-menus-divider") }(n, r), e }, insertBeforeMenuItem: function (t, n) { return v(t, n), e }, moveBeforeOtherMenuItem: function (n, r) { return function (e, n) { if (e !== n) { var r = t("#" + e).detach(), i = t("#" + n); r.insertBefore(i) } }(n, r), e }, disableMenuItem: function (n) { return t("#" + n).attr("disabled", !0), e }, enableMenuItem: function (n) { return t("#" + n).attr("disabled", !1), e }, hideMenuItem: function (n) { return t("#" + n).data("show", !1), p(t("#" + n)), e }, showMenuItem: function (n) { return t("#" + n).data("show", !0), d(t("#" + n)), e }, destroy: function () { return y(), e } } }(this) })) } }; e.exports && (e.exports = o), void 0 === (r = function () { return o }.call(t, n, t, e)) || (e.exports = r), "undefined" != typeof cytoscape && i && o(cytoscape, i) }() }, function (e, t, n) { var r; r = function (e) { return function (e) { var t = {}; function n(r) { if (t[r]) return t[r].exports; var i = t[r] = { i: r, l: !1, exports: {} }; return e[r].call(i.exports, i, i.exports, n), i.l = !0, i.exports } return n.m = e, n.c = t, n.d = function (e, t, r) { n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r }) }, n.r = function (e) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) }, n.t = function (e, t) { if (1 & t && (e = n(e)), 8 & t) return e; if (4 & t && "object" == typeof e && e && e.__esModule) return e; var r = Object.create(null); if (n.r(r), Object.defineProperty(r, "default", { enumerable: !0, value: e }), 2 & t && "string" != typeof e) for (var i in e) n.d(r, i, function (t) { return e[t] }.bind(null, i)); return r }, n.n = function (e) { var t = e && e.__esModule ? function () { return e.default } : function () { return e }; return n.d(t, "a", t), t }, n.o = function (e, t) { return Object.prototype.hasOwnProperty.call(e, t) }, n.p = "", n(n.s = 0) }([function (e, t, n) { var r = n(1), i = function (e) { e && e("layout", "dagre", r) }; "undefined" != typeof cytoscape && i(cytoscape), e.exports = i }, function (e, t, n) { function r(e) { return (r = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) { return typeof e } : function (e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e })(e) } var i = n(2), o = n(3), a = n(4); function s(e) { this.options = o({}, i, e) } s.prototype.run = function () { var e = this.options, t = e.cy, n = e.eles, i = function (e, t) { return "function" == typeof t ? t.apply(e, [e]) : t }, o = e.boundingBox || { x1: 0, y1: 0, w: t.width(), h: t.height() }; void 0 === o.x2 && (o.x2 = o.x1 + o.w), void 0 === o.w && (o.w = o.x2 - o.x1), void 0 === o.y2 && (o.y2 = o.y1 + o.h), void 0 === o.h && (o.h = o.y2 - o.y1); var s = new a.graphlib.Graph({ multigraph: !0, compound: !0 }), l = {}, c = function (e, t) { null != t && (l[e] = t) }; c("nodesep", e.nodeSep), c("edgesep", e.edgeSep), c("ranksep", e.rankSep), c("rankdir", e.rankDir), c("ranker", e.ranker), s.setGraph(l), s.setDefaultEdgeLabel((function () { return {} })), s.setDefaultNodeLabel((function () { return {} })); for (var u = n.nodes(), d = 0; d < u.length; d++) { var p = u[d], f = p.layoutDimensions(e); s.setNode(p.id(), { width: f.w, height: f.h, name: p.id() }) } for (var h = 0; h < u.length; h++) { var g = u[h]; g.isChild() && s.setParent(g.id(), g.parent().id()) } for (var m = n.edges().stdFilter((function (e) { return !e.source().isParent() && !e.target().isParent() })), v = 0; v < m.length; v++) { var b = m[v]; s.setEdge(b.source().id(), b.target().id(), { minlen: i(b, e.minLen), weight: i(b, e.edgeWeight), name: b.id() }, b.id()) } a.layout(s); for (var y, x = s.nodes(), w = 0; w < x.length; w++) { var k = x[w], A = s.node(k); t.getElementById(k).scratch().dagre = A } return e.boundingBox ? (y = { x1: 1 / 0, x2: -1 / 0, y1: 1 / 0, y2: -1 / 0 }, u.forEach((function (e) { var t = e.scratch().dagre; y.x1 = Math.min(y.x1, t.x), y.x2 = Math.max(y.x2, t.x), y.y1 = Math.min(y.y1, t.y), y.y2 = Math.max(y.y2, t.y) })), y.w = y.x2 - y.x1, y.h = y.y2 - y.y1) : y = o, u.layoutPositions(this, e, (function (t) { var n = (t = "object" === r(t) ? t : this).scratch().dagre; return function (t) { if (e.boundingBox) { var n = 0 === y.w ? 0 : (t.x - y.x1) / y.w, r = 0 === y.h ? 0 : (t.y - y.y1) / y.h; return { x: o.x1 + n * o.w, y: o.y1 + r * o.h } } return t }({ x: n.x, y: n.y }) })), this }, e.exports = s }, function (e, t) { var n = { nodeSep: void 0, edgeSep: void 0, rankSep: void 0, rankDir: void 0, ranker: void 0, minLen: function (e) { return 1 }, edgeWeight: function (e) { return 1 }, fit: !0, padding: 30, spacingFactor: void 0, nodeDimensionsIncludeLabels: !1, animate: !1, animateFilter: function (e, t) { return !0 }, animationDuration: 500, animationEasing: void 0, boundingBox: void 0, transform: function (e, t) { return t }, ready: function () { }, stop: function () { } }; e.exports = n }, function (e, t) { e.exports = null != Object.assign ? Object.assign.bind(Object) : function (e) { for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++)n[r - 1] = arguments[r]; return n.forEach((function (t) { Object.keys(t).forEach((function (n) { return e[n] = t[n] })) })), e } }, function (t, n) { t.exports = e }]) }, e.exports = r(n(246)) }, function (e, t, n) { e.exports = { graphlib: n(30), layout: n(359), debug: n(420), util: { time: n(20).time, notime: n(20).notime }, version: n(421) } }, function (e, t, n) { e.exports = { Graph: n(116), version: n(348) } }, function (e, t, n) { var r = n(149); e.exports = function (e) { return r(e, 4) } }, function (e, t) { e.exports = function () { this.__data__ = [], this.size = 0 } }, function (e, t, n) { var r = n(75), i = Array.prototype.splice; e.exports = function (e) { var t = this.__data__, n = r(t, e); return !(n < 0) && (n == t.length - 1 ? t.pop() : i.call(t, n, 1), --this.size, !0) } }, function (e, t, n) { var r = n(75); e.exports = function (e) { var t = this.__data__, n = r(t, e); return n < 0 ? void 0 : t[n][1] } }, function (e, t, n) { var r = n(75); e.exports = function (e) { return r(this.__data__, e) > -1 } }, function (e, t, n) { var r = n(75); e.exports = function (e, t) { var n = this.__data__, i = r(n, e); return i < 0 ? (++this.size, n.push([e, t])) : n[i][1] = t, this } }, function (e, t, n) { var r = n(74); e.exports = function () { this.__data__ = new r, this.size = 0 } }, function (e, t) { e.exports = function (e) { var t = this.__data__, n = t.delete(e); return this.size = t.size, n } }, function (e, t) { e.exports = function (e) { return this.__data__.get(e) } }, function (e, t) { e.exports = function (e) { return this.__data__.has(e) } }, function (e, t, n) { var r = n(74), i = n(117), o = n(118); e.exports = function (e, t) { var n = this.__data__; if (n instanceof r) { var a = n.__data__; if (!i || a.length < 199) return a.push([e, t]), this.size = ++n.size, this; n = this.__data__ = new o(a) } return n.set(e, t), this.size = n.size, this } }, function (e, t, n) { var r = n(64), i = n(262), o = n(23), a = n(151), s = /^\[object .+?Constructor\]$/, l = Function.prototype, c = Object.prototype, u = l.toString, d = c.hasOwnProperty, p = RegExp("^" + u.call(d).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"); e.exports = function (e) { return !(!o(e) || i(e)) && (r(e) ? p : s).test(a(e)) } }, function (e, t, n) { var r = n(58), i = Object.prototype, o = i.hasOwnProperty, a = i.toString, s = r ? r.toStringTag : void 0; e.exports = function (e) { var t = o.call(e, s), n = e[s]; try { e[s] = void 0; var r = !0 } catch (e) { } var i = a.call(e); return r && (t ? e[s] = n : delete e[s]), i } }, function (e, t) { var n = Object.prototype.toString; e.exports = function (e) { return n.call(e) } }, function (e, t, n) { var r, i = n(263), o = (r = /[^.]+$/.exec(i && i.keys && i.keys.IE_PROTO || "")) ? "Symbol(src)_1." + r : ""; e.exports = function (e) { return !!o && o in e } }, function (e, t, n) { var r = n(31)["__core-js_shared__"]; e.exports = r }, function (e, t) { e.exports = function (e, t) { return null == e ? void 0 : e[t] } }, function (e, t, n) { var r = n(266), i = n(74), o = n(117); e.exports = function () { this.size = 0, this.__data__ = { hash: new r, map: new (o || i), string: new r } } }, function (e, t, n) { var r = n(267), i = n(268), o = n(269), a = n(270), s = n(271); function l(e) { var t = -1, n = null == e ? 0 : e.length; for (this.clear(); ++t < n;) { var r = e[t]; this.set(r[0], r[1]) } } l.prototype.clear = r, l.prototype.delete = i, l.prototype.get = o, l.prototype.has = a, l.prototype.set = s, e.exports = l }, function (e, t, n) { var r = n(76); e.exports = function () { this.__data__ = r ? r(null) : {}, this.size = 0 } }, function (e, t) { e.exports = function (e) { var t = this.has(e) && delete this.__data__[e]; return this.size -= t ? 1 : 0, t } }, function (e, t, n) { var r = n(76), i = Object.prototype.hasOwnProperty; e.exports = function (e) { var t = this.__data__; if (r) { var n = t[e]; return "__lodash_hash_undefined__" === n ? void 0 : n } return i.call(t, e) ? t[e] : void 0 } }, function (e, t, n) { var r = n(76), i = Object.prototype.hasOwnProperty; e.exports = function (e) { var t = this.__data__; return r ? void 0 !== t[e] : i.call(t, e) } }, function (e, t, n) { var r = n(76); e.exports = function (e, t) { var n = this.__data__; return this.size += this.has(e) ? 0 : 1, n[e] = r && void 0 === t ? "__lodash_hash_undefined__" : t, this } }, function (e, t, n) { var r = n(77); e.exports = function (e) { var t = r(this, e).delete(e); return this.size -= t ? 1 : 0, t } }, function (e, t) { e.exports = function (e) { var t = typeof e; return "string" == t || "number" == t || "symbol" == t || "boolean" == t ? "__proto__" !== e : null === e } }, function (e, t, n) { var r = n(77); e.exports = function (e) { return r(this, e).get(e) } }, function (e, t, n) { var r = n(77); e.exports = function (e) { return r(this, e).has(e) } }, function (e, t, n) { var r = n(77); e.exports = function (e, t) { var n = r(this, e), i = n.size; return n.set(e, t), this.size += n.size == i ? 0 : 1, this } }, function (e, t, n) { var r = n(65), i = n(41); e.exports = function (e, t) { return e && r(t, i(t), e) } }, function (e, t) { e.exports = function (e, t) { for (var n = -1, r = Array(e); ++n < e;)r[n] = t(n); return r } }, function (e, t, n) { var r = n(47), i = n(34); e.exports = function (e) { return i(e) && "[object Arguments]" == r(e) } }, function (e, t) { e.exports = function () { return !1 } }, function (e, t, n) { var r = n(47), i = n(120), o = n(34), a = {}; a["[object Float32Array]"] = a["[object Float64Array]"] = a["[object Int8Array]"] = a["[object Int16Array]"] = a["[object Int32Array]"] = a["[object Uint8Array]"] = a["[object Uint8ClampedArray]"] = a["[object Uint16Array]"] = a["[object Uint32Array]"] = !0, a["[object Arguments]"] = a["[object Array]"] = a["[object ArrayBuffer]"] = a["[object Boolean]"] = a["[object DataView]"] = a["[object Date]"] = a["[object Error]"] = a["[object Function]"] = a["[object Map]"] = a["[object Number]"] = a["[object Object]"] = a["[object RegExp]"] = a["[object Set]"] = a["[object String]"] = a["[object WeakMap]"] = !1, e.exports = function (e) { return o(e) && i(e.length) && !!a[r(e)] } }, function (e, t, n) { var r = n(154)(Object.keys, Object); e.exports = r }, function (e, t, n) { var r = n(65), i = n(48); e.exports = function (e, t) { return e && r(t, i(t), e) } }, function (e, t, n) { var r = n(23), i = n(83), o = n(285), a = Object.prototype.hasOwnProperty; e.exports = function (e) { if (!r(e)) return o(e); var t = i(e), n = []; for (var s in e) ("constructor" != s || !t && a.call(e, s)) && n.push(s); return n } }, function (e, t) { e.exports = function (e) { var t = []; if (null != e) for (var n in Object(e)) t.push(n); return t } }, function (e, t, n) { var r = n(65), i = n(123); e.exports = function (e, t) { return r(e, i(e), t) } }, function (e, t, n) { var r = n(65), i = n(159); e.exports = function (e, t) { return r(e, i(e), t) } }, function (e, t, n) { var r = n(161), i = n(159), o = n(48); e.exports = function (e) { return r(e, o, i) } }, function (e, t, n) { var r = n(46)(n(31), "DataView"); e.exports = r }, function (e, t, n) { var r = n(46)(n(31), "Promise"); e.exports = r }, function (e, t, n) { var r = n(46)(n(31), "WeakMap"); e.exports = r }, function (e, t) { var n = Object.prototype.hasOwnProperty; e.exports = function (e) { var t = e.length, r = new e.constructor(t); return t && "string" == typeof e[0] && n.call(e, "index") && (r.index = e.index, r.input = e.input), r } }, function (e, t, n) { var r = n(125), i = n(294), o = n(295), a = n(296), s = n(164); e.exports = function (e, t, n) { var l = e.constructor; switch (t) { case "[object ArrayBuffer]": return r(e); case "[object Boolean]": case "[object Date]": return new l(+e); case "[object DataView]": return i(e, n); case "[object Float32Array]": case "[object Float64Array]": case "[object Int8Array]": case "[object Int16Array]": case "[object Int32Array]": case "[object Uint8Array]": case "[object Uint8ClampedArray]": case "[object Uint16Array]": case "[object Uint32Array]": return s(e, n); case "[object Map]": return new l; case "[object Number]": case "[object String]": return new l(e); case "[object RegExp]": return o(e); case "[object Set]": return new l; case "[object Symbol]": return a(e) } } }, function (e, t, n) { var r = n(125); e.exports = function (e, t) { var n = t ? r(e.buffer) : e.buffer; return new e.constructor(n, e.byteOffset, e.byteLength) } }, function (e, t) { var n = /\w*$/; e.exports = function (e) { var t = new e.constructor(e.source, n.exec(e)); return t.lastIndex = e.lastIndex, t } }, function (e, t, n) { var r = n(58), i = r ? r.prototype : void 0, o = i ? i.valueOf : void 0; e.exports = function (e) { return o ? Object(o.call(e)) : {} } }, function (e, t, n) { var r = n(298), i = n(82), o = n(121), a = o && o.isMap, s = a ? i(a) : r; e.exports = s }, function (e, t, n) { var r = n(60), i = n(34); e.exports = function (e) { return i(e) && "[object Map]" == r(e) } }, function (e, t, n) { var r = n(300), i = n(82), o = n(121), a = o && o.isSet, s = a ? i(a) : r; e.exports = s }, function (e, t, n) { var r = n(60), i = n(34); e.exports = function (e) { return i(e) && "[object Set]" == r(e) } }, function (e, t) { e.exports = function (e) { return function (t, n, r) { for (var i = -1, o = Object(t), a = r(t), s = a.length; s--;) { var l = a[e ? s : ++i]; if (!1 === n(o[l], l, o)) break } return t } } }, function (e, t, n) { var r = n(36); e.exports = function (e, t) { return function (n, i) { if (null == n) return n; if (!r(n)) return e(n, i); for (var o = n.length, a = t ? o : -1, s = Object(n); (t ? a-- : ++a < o) && !1 !== i(s[a], a, s);); return n } } }, function (e, t, n) { var r = n(85); e.exports = function (e, t) { var n = []; return r(e, (function (e, r, i) { t(e, r, i) && n.push(e) })), n } }, function (e, t, n) { var r = n(305), i = n(313), o = n(176); e.exports = function (e) { var t = i(e); return 1 == t.length && t[0][2] ? o(t[0][0], t[0][1]) : function (n) { return n === e || r(n, e, t) } } }, function (e, t, n) { var r = n(73), i = n(171); e.exports = function (e, t, n, o) { var a = n.length, s = a, l = !o; if (null == e) return !s; for (e = Object(e); a--;) { var c = n[a]; if (l && c[2] ? c[1] !== e[c[0]] : !(c[0] in e)) return !1 } for (; ++a < s;) { var u = (c = n[a])[0], d = e[u], p = c[1]; if (l && c[2]) { if (void 0 === d && !(u in e)) return !1 } else { var f = new r; if (o) var h = o(d, p, u, e, t, f); if (!(void 0 === h ? i(p, d, 3, o, f) : h)) return !1 } } return !0 } }, function (e, t, n) { var r = n(73), i = n(172), o = n(310), a = n(312), s = n(60), l = n(13), c = n(59), u = n(67), d = "[object Object]", p = Object.prototype.hasOwnProperty; e.exports = function (e, t, n, f, h, g) { var m = l(e), v = l(t), b = m ? "[object Array]" : s(e), y = v ? "[object Array]" : s(t), x = (b = "[object Arguments]" == b ? d : b) == d, w = (y = "[object Arguments]" == y ? d : y) == d, k = b == y; if (k && c(e)) { if (!c(t)) return !1; m = !0, x = !1 } if (k && !x) return g || (g = new r), m || u(e) ? i(e, t, n, f, h, g) : o(e, t, b, n, f, h, g); if (!(1 & n)) { var A = x && p.call(e, "__wrapped__"), E = w && p.call(t, "__wrapped__"); if (A || E) { var S = A ? e.value() : e, $ = E ? t.value() : t; return g || (g = new r), h(S, $, n, f, g) } } return !!k && (g || (g = new r), a(e, t, n, f, h, g)) } }, function (e, t) { e.exports = function (e) { return this.__data__.set(e, "__lodash_hash_undefined__"), this } }, function (e, t) { e.exports = function (e) { return this.__data__.has(e) } }, function (e, t) { e.exports = function (e, t) { for (var n = -1, r = null == e ? 0 : e.length; ++n < r;)if (t(e[n], n, e)) return !0; return !1 } }, function (e, t, n) { var r = n(58), i = n(163), o = n(57), a = n(172), s = n(311), l = n(129), c = r ? r.prototype : void 0, u = c ? c.valueOf : void 0; e.exports = function (e, t, n, r, c, d, p) { switch (n) { case "[object DataView]": if (e.byteLength != t.byteLength || e.byteOffset != t.byteOffset) return !1; e = e.buffer, t = t.buffer; case "[object ArrayBuffer]": return !(e.byteLength != t.byteLength || !d(new i(e), new i(t))); case "[object Boolean]": case "[object Date]": case "[object Number]": return o(+e, +t); case "[object Error]": return e.name == t.name && e.message == t.message; case "[object RegExp]": case "[object String]": return e == t + ""; case "[object Map]": var f = s; case "[object Set]": var h = 1 & r; if (f || (f = l), e.size != t.size && !h) return !1; var g = p.get(e); if (g) return g == t; r |= 2, p.set(e, t); var m = a(f(e), f(t), r, c, d, p); return p.delete(e), m; case "[object Symbol]": if (u) return u.call(e) == u.call(t) }return !1 } }, function (e, t) { e.exports = function (e) { var t = -1, n = Array(e.size); return e.forEach((function (e, r) { n[++t] = [r, e] })), n } }, function (e, t, n) { var r = n(160), i = Object.prototype.hasOwnProperty; e.exports = function (e, t, n, o, a, s) { var l = 1 & n, c = r(e), u = c.length; if (u != r(t).length && !l) return !1; for (var d = u; d--;) { var p = c[d]; if (!(l ? p in t : i.call(t, p))) return !1 } var f = s.get(e), h = s.get(t); if (f && h) return f == t && h == e; var g = !0; s.set(e, t), s.set(t, e); for (var m = l; ++d < u;) { var v = e[p = c[d]], b = t[p]; if (o) var y = l ? o(b, v, p, t, e, s) : o(v, b, p, e, t, s); if (!(void 0 === y ? v === b || a(v, b, n, o, s) : y)) { g = !1; break } m || (m = "constructor" == p) } if (g && !m) { var x = e.constructor, w = t.constructor; x == w || !("constructor" in e) || !("constructor" in t) || "function" == typeof x && x instanceof x && "function" == typeof w && w instanceof w || (g = !1) } return s.delete(e), s.delete(t), g } }, function (e, t, n) { var r = n(175), i = n(41); e.exports = function (e) { for (var t = i(e), n = t.length; n--;) { var o = t[n], a = e[o]; t[n] = [o, a, r(a)] } return t } }, function (e, t, n) { var r = n(171), i = n(315), o = n(178), a = n(130), s = n(175), l = n(176), c = n(68); e.exports = function (e, t) { return a(e) && s(t) ? l(c(e), t) : function (n) { var a = i(n, e); return void 0 === a && a === t ? o(n, e) : r(t, a, 3) } } }, function (e, t, n) { var r = n(86); e.exports = function (e, t, n) { var i = null == e ? void 0 : r(e, t); return void 0 === i ? n : i } }, function (e, t, n) { var r = n(317), i = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, o = /\\(\\)?/g, a = r((function (e) { var t = []; return 46 === e.charCodeAt(0) && t.push(""), e.replace(i, (function (e, n, r, i) { t.push(r ? i.replace(o, "$1") : n || e) })), t })); e.exports = a }, function (e, t, n) { var r = n(318); e.exports = function (e) { var t = r(e, (function (e) { return 500 === n.size && n.clear(), e })), n = t.cache; return t } }, function (e, t, n) { var r = n(118); function i(e, t) { if ("function" != typeof e || null != t && "function" != typeof t) throw new TypeError("Expected a function"); var n = function () { var r = arguments, i = t ? t.apply(this, r) : r[0], o = n.cache; if (o.has(i)) return o.get(i); var a = e.apply(this, r); return n.cache = o.set(i, a) || o, a }; return n.cache = new (i.Cache || r), n } i.Cache = r, e.exports = i }, function (e, t, n) { var r = n(58), i = n(88), o = n(13), a = n(61), s = r ? r.prototype : void 0, l = s ? s.toString : void 0; e.exports = function e(t) { if ("string" == typeof t) return t; if (o(t)) return i(t, e) + ""; if (a(t)) return l ? l.call(t) : ""; var n = t + ""; return "0" == n && 1 / t == -1 / 0 ? "-0" : n } }, function (e, t) { e.exports = function (e, t) { return null != e && t in Object(e) } }, function (e, t, n) { var r = n(180), i = n(322), o = n(130), a = n(68); e.exports = function (e) { return o(e) ? r(a(e)) : i(e) } }, function (e, t, n) { var r = n(86); e.exports = function (e) { return function (t) { return r(t, e) } } }, function (e, t) { var n = Object.prototype.hasOwnProperty; e.exports = function (e, t) { return null != e && n.call(e, t) } }, function (e, t, n) { var r = n(122), i = n(60), o = n(66), a = n(13), s = n(36), l = n(59), c = n(83), u = n(67), d = Object.prototype.hasOwnProperty; e.exports = function (e) { if (null == e) return !0; if (s(e) && (a(e) || "string" == typeof e || "function" == typeof e.splice || l(e) || u(e) || o(e))) return !e.length; var t = i(e); if ("[object Map]" == t || "[object Set]" == t) return !e.size; if (c(e)) return !r(e).length; for (var n in e) if (d.call(e, n)) return !1; return !0 } }, function (e, t) { e.exports = function (e, t, n, r) { var i = -1, o = null == e ? 0 : e.length; for (r && o && (n = e[++i]); ++i < o;)n = t(n, e[i], i, e); return n } }, function (e, t) { e.exports = function (e, t, n, r, i) { return i(e, (function (e, i, o) { n = r ? (r = !1, e) : t(n, e, i, o) })), n } }, function (e, t, n) { var r = n(122), i = n(60), o = n(36), a = n(328), s = n(329); e.exports = function (e) { if (null == e) return 0; if (o(e)) return a(e) ? s(e) : e.length; var t = i(e); return "[object Map]" == t || "[object Set]" == t ? e.size : r(e).length } }, function (e, t, n) { var r = n(47), i = n(13), o = n(34); e.exports = function (e) { return "string" == typeof e || !i(e) && o(e) && "[object String]" == r(e) } }, function (e, t, n) { var r = n(330), i = n(331), o = n(332); e.exports = function (e) { return i(e) ? o(e) : r(e) } }, function (e, t, n) { var r = n(180)("length"); e.exports = r }, function (e, t) { var n = RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]"); e.exports = function (e) { return n.test(e) } }, function (e, t) { var n = "[\\ud800-\\udfff]", r = "[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]", i = "\\ud83c[\\udffb-\\udfff]", o = "[^\\ud800-\\udfff]", a = "(?:\\ud83c[\\udde6-\\uddff]){2}", s = "[\\ud800-\\udbff][\\udc00-\\udfff]", l = "(?:" + r + "|" + i + ")" + "?", c = "[\\ufe0e\\ufe0f]?" + l + ("(?:\\u200d(?:" + [o, a, s].join("|") + ")[\\ufe0e\\ufe0f]?" + l + ")*"), u = "(?:" + [o + r + "?", r, a, s, n].join("|") + ")", d = RegExp(i + "(?=" + i + ")|" + u + c, "g"); e.exports = function (e) { for (var t = d.lastIndex = 0; d.test(e);)++t; return t } }, function (e, t, n) { var r = n(119), i = n(166), o = n(127), a = n(37), s = n(84), l = n(13), c = n(59), u = n(64), d = n(23), p = n(67); e.exports = function (e, t, n) { var f = l(e), h = f || c(e) || p(e); if (t = a(t, 4), null == n) { var g = e && e.constructor; n = h ? f ? new g : [] : d(e) && u(g) ? i(s(e)) : {} } return (h ? r : o)(e, (function (e, r, i) { return t(n, e, r, i) })), n } }, function (e, t, n) { var r = n(131), i = n(89), o = n(339), a = n(189), s = i((function (e) { return o(r(e, 1, a, !0)) })); e.exports = s }, function (e, t, n) { var r = n(58), i = n(66), o = n(13), a = r ? r.isConcatSpreadable : void 0; e.exports = function (e) { return o(e) || i(e) || !!(a && e && e[a]) } }, function (e, t) { e.exports = function (e, t, n) { switch (n.length) { case 0: return e.call(t); case 1: return e.call(t, n[0]); case 2: return e.call(t, n[0], n[1]); case 3: return e.call(t, n[0], n[1], n[2]) }return e.apply(t, n) } }, function (e, t, n) { var r = n(126), i = n(152), o = n(49), a = i ? function (e, t) { return i(e, "toString", { configurable: !0, enumerable: !1, value: r(t), writable: !0 }) } : o; e.exports = a }, function (e, t) { var n = Date.now; e.exports = function (e) { var t = 0, r = 0; return function () { var i = n(), o = 16 - (i - r); if (r = i, o > 0) { if (++t >= 800) return arguments[0] } else t = 0; return e.apply(void 0, arguments) } } }, function (e, t, n) { var r = n(173), i = n(340), o = n(344), a = n(174), s = n(345), l = n(129); e.exports = function (e, t, n) { var c = -1, u = i, d = e.length, p = !0, f = [], h = f; if (n) p = !1, u = o; else if (d >= 200) { var g = t ? null : s(e); if (g) return l(g); p = !1, u = a, h = new r } else h = t ? [] : f; e: for (; ++c < d;) { var m = e[c], v = t ? t(m) : m; if (m = n || 0 !== m ? m : 0, p && v == v) { for (var b = h.length; b--;)if (h[b] === v) continue e; t && h.push(v), f.push(m) } else u(h, v, n) || (h !== f && h.push(v), f.push(m)) } return f } }, function (e, t, n) { var r = n(341); e.exports = function (e, t) { return !!(null == e ? 0 : e.length) && r(e, t, 0) > -1 } }, function (e, t, n) { var r = n(188), i = n(342), o = n(343); e.exports = function (e, t, n) { return t == t ? o(e, t, n) : r(e, i, n) } }, function (e, t) { e.exports = function (e) { return e != e } }, function (e, t) { e.exports = function (e, t, n) { for (var r = n - 1, i = e.length; ++r < i;)if (e[r] === t) return r; return -1 } }, function (e, t) { e.exports = function (e, t, n) { for (var r = -1, i = null == e ? 0 : e.length; ++r < i;)if (n(t, e[r])) return !0; return !1 } }, function (e, t, n) { var r = n(162), i = n(346), o = n(129), a = r && 1 / o(new r([, -0]))[1] == 1 / 0 ? function (e) { return new r(e) } : i; e.exports = a }, function (e, t) { e.exports = function () { } }, function (e, t, n) { var r = n(88); e.exports = function (e, t) { return r(t, (function (t) { return e[t] })) } }, function (e, t) { e.exports = "2.1.8" }, function (e, t, n) { var r = n(22), i = n(116); function o(e) { return r.map(e.nodes(), (function (t) { var n = e.node(t), i = e.parent(t), o = { v: t }; return r.isUndefined(n) || (o.value = n), r.isUndefined(i) || (o.parent = i), o })) } function a(e) { return r.map(e.edges(), (function (t) { var n = e.edge(t), i = { v: t.v, w: t.w }; return r.isUndefined(t.name) || (i.name = t.name), r.isUndefined(n) || (i.value = n), i })) } e.exports = { write: function (e) { var t = { options: { directed: e.isDirected(), multigraph: e.isMultigraph(), compound: e.isCompound() }, nodes: o(e), edges: a(e) }; r.isUndefined(e.graph()) || (t.value = r.clone(e.graph())); return t }, read: function (e) { var t = new i(e.options).setGraph(e.value); return r.each(e.nodes, (function (e) { t.setNode(e.v, e.value), e.parent && t.setParent(e.v, e.parent) })), r.each(e.edges, (function (e) { t.setEdge({ v: e.v, w: e.w, name: e.name }, e.value) })), t } } }, function (e, t, n) { e.exports = { components: n(351), dijkstra: n(191), dijkstraAll: n(352), findCycles: n(353), floydWarshall: n(354), isAcyclic: n(355), postorder: n(356), preorder: n(357), prim: n(358), tarjan: n(193), topsort: n(194) } }, function (e, t, n) { var r = n(22); e.exports = function (e) { var t, n = {}, i = []; function o(i) { r.has(n, i) || (n[i] = !0, t.push(i), r.each(e.successors(i), o), r.each(e.predecessors(i), o)) } return r.each(e.nodes(), (function (e) { t = [], o(e), t.length && i.push(t) })), i } }, function (e, t, n) { var r = n(191), i = n(22); e.exports = function (e, t, n) { return i.transform(e.nodes(), (function (i, o) { i[o] = r(e, o, t, n) }), {}) } }, function (e, t, n) { var r = n(22), i = n(193); e.exports = function (e) { return r.filter(i(e), (function (t) { return t.length > 1 || 1 === t.length && e.hasEdge(t[0], t[0]) })) } }, function (e, t, n) { var r = n(22); e.exports = function (e, t, n) { return function (e, t, n) { var r = {}, i = e.nodes(); return i.forEach((function (e) { r[e] = {}, r[e][e] = { distance: 0 }, i.forEach((function (t) { e !== t && (r[e][t] = { distance: Number.POSITIVE_INFINITY }) })), n(e).forEach((function (n) { var i = n.v === e ? n.w : n.v, o = t(n); r[e][i] = { distance: o, predecessor: e } })) })), i.forEach((function (e) { var t = r[e]; i.forEach((function (n) { var o = r[n]; i.forEach((function (n) { var r = o[e], i = t[n], a = o[n], s = r.distance + i.distance; s < a.distance && (a.distance = s, a.predecessor = i.predecessor) })) })) })), r }(e, t || i, n || function (t) { return e.outEdges(t) }) }; var i = r.constant(1) }, function (e, t, n) { var r = n(194); e.exports = function (e) { try { r(e) } catch (e) { if (e instanceof r.CycleException) return !1; throw e } return !0 } }, function (e, t, n) { var r = n(195); e.exports = function (e, t) { return r(e, t, "post") } }, function (e, t, n) { var r = n(195); e.exports = function (e, t) { return r(e, t, "pre") } }, function (e, t, n) { var r = n(22), i = n(116), o = n(192); e.exports = function (e, t) { var n, a = new i, s = {}, l = new o; function c(e) { var r = e.v === n ? e.w : e.v, i = l.priority(r); if (void 0 !== i) { var o = t(e); o < i && (s[r] = n, l.decrease(r, o)) } } if (0 === e.nodeCount()) return a; r.each(e.nodes(), (function (e) { l.add(e, Number.POSITIVE_INFINITY), a.setNode(e) })), l.decrease(e.nodes()[0], 0); var u = !1; for (; l.size() > 0;) { if (n = l.removeMin(), r.has(s, n)) a.setEdge(n, s[n]); else { if (u) throw new Error("Input graph is not connected: " + e); u = !0 } e.nodeEdges(n).forEach(c) } return a } }, function (e, t, n) { "use strict"; var r = n(11), i = n(399), o = n(402), a = n(403), s = n(20).normalizeRanks, l = n(405), c = n(20).removeEmptyRanks, u = n(406), d = n(407), p = n(408), f = n(409), h = n(418), g = n(20), m = n(30).Graph; e.exports = function (e, t) { var n = t && t.debugTiming ? g.time : g.notime; n("layout", (function () { var t = n(" buildLayoutGraph", (function () { return function (e) { var t = new m({ multigraph: !0, compound: !0 }), n = $(e.graph()); return t.setGraph(r.merge({}, b, S(n, v), r.pick(n, y))), r.forEach(e.nodes(), (function (n) { var i = $(e.node(n)); t.setNode(n, r.defaults(S(i, x), w)), t.setParent(n, e.parent(n)) })), r.forEach(e.edges(), (function (n) { var i = $(e.edge(n)); t.setEdge(n, r.merge({}, A, S(i, k), r.pick(i, E))) })), t }(e) })); n(" runLayout", (function () { !function (e, t) { t(" makeSpaceForEdgeLabels", (function () { !function (e) { var t = e.graph(); t.ranksep /= 2, r.forEach(e.edges(), (function (n) { var r = e.edge(n); r.minlen *= 2, "c" !== r.labelpos.toLowerCase() && ("TB" === t.rankdir || "BT" === t.rankdir ? r.width += r.labeloffset : r.height += r.labeloffset) })) }(e) })), t(" removeSelfEdges", (function () { !function (e) { r.forEach(e.edges(), (function (t) { if (t.v === t.w) { var n = e.node(t.v); n.selfEdges || (n.selfEdges = []), n.selfEdges.push({ e: t, label: e.edge(t) }), e.removeEdge(t) } })) }(e) })), t(" acyclic", (function () { i.run(e) })), t(" nestingGraph.run", (function () { u.run(e) })), t(" rank", (function () { a(g.asNonCompoundGraph(e)) })), t(" injectEdgeLabelProxies", (function () { !function (e) { r.forEach(e.edges(), (function (t) { var n = e.edge(t); if (n.width && n.height) { var r = e.node(t.v), i = { rank: (e.node(t.w).rank - r.rank) / 2 + r.rank, e: t }; g.addDummyNode(e, "edge-proxy", i, "_ep") } })) }(e) })), t(" removeEmptyRanks", (function () { c(e) })), t(" nestingGraph.cleanup", (function () { u.cleanup(e) })), t(" normalizeRanks", (function () { s(e) })), t(" assignRankMinMax", (function () { !function (e) { var t = 0; r.forEach(e.nodes(), (function (n) { var i = e.node(n); i.borderTop && (i.minRank = e.node(i.borderTop).rank, i.maxRank = e.node(i.borderBottom).rank, t = r.max(t, i.maxRank)) })), e.graph().maxRank = t }(e) })), t(" removeEdgeLabelProxies", (function () { !function (e) { r.forEach(e.nodes(), (function (t) { var n = e.node(t); "edge-proxy" === n.dummy && (e.edge(n.e).labelRank = n.rank, e.removeNode(t)) })) }(e) })), t(" normalize.run", (function () { o.run(e) })), t(" parentDummyChains", (function () { l(e) })), t(" addBorderSegments", (function () { d(e) })), t(" order", (function () { f(e) })), t(" insertSelfEdges", (function () { !function (e) { var t = g.buildLayerMatrix(e); r.forEach(t, (function (t) { var n = 0; r.forEach(t, (function (t, i) { var o = e.node(t); o.order = i + n, r.forEach(o.selfEdges, (function (t) { g.addDummyNode(e, "selfedge", { width: t.label.width, height: t.label.height, rank: o.rank, order: i + ++n, e: t.e, label: t.label }, "_se") })), delete o.selfEdges })) })) }(e) })), t(" adjustCoordinateSystem", (function () { p.adjust(e) })), t(" position", (function () { h(e) })), t(" positionSelfEdges", (function () { !function (e) { r.forEach(e.nodes(), (function (t) { var n = e.node(t); if ("selfedge" === n.dummy) { var r = e.node(n.e.v), i = r.x + r.width / 2, o = r.y, a = n.x - i, s = r.height / 2; e.setEdge(n.e, n.label), e.removeNode(t), n.label.points = [{ x: i + 2 * a / 3, y: o - s }, { x: i + 5 * a / 6, y: o - s }, { x: i + a, y: o }, { x: i + 5 * a / 6, y: o + s }, { x: i + 2 * a / 3, y: o + s }], n.label.x = n.x, n.label.y = n.y } })) }(e) })), t(" removeBorderNodes", (function () { !function (e) { r.forEach(e.nodes(), (function (t) { if (e.children(t).length) { var n = e.node(t), i = e.node(n.borderTop), o = e.node(n.borderBottom), a = e.node(r.last(n.borderLeft)), s = e.node(r.last(n.borderRight)); n.width = Math.abs(s.x - a.x), n.height = Math.abs(o.y - i.y), n.x = a.x + n.width / 2, n.y = i.y + n.height / 2 } })), r.forEach(e.nodes(), (function (t) { "border" === e.node(t).dummy && e.removeNode(t) })) }(e) })), t(" normalize.undo", (function () { o.undo(e) })), t(" fixupEdgeLabelCoords", (function () { !function (e) { r.forEach(e.edges(), (function (t) { var n = e.edge(t); if (r.has(n, "x")) switch ("l" !== n.labelpos && "r" !== n.labelpos || (n.width -= n.labeloffset), n.labelpos) { case "l": n.x -= n.width / 2 + n.labeloffset; break; case "r": n.x += n.width / 2 + n.labeloffset } })) }(e) })), t(" undoCoordinateSystem", (function () { p.undo(e) })), t(" translateGraph", (function () { !function (e) { var t = Number.POSITIVE_INFINITY, n = 0, i = Number.POSITIVE_INFINITY, o = 0, a = e.graph(), s = a.marginx || 0, l = a.marginy || 0; function c(e) { var r = e.x, a = e.y, s = e.width, l = e.height; t = Math.min(t, r - s / 2), n = Math.max(n, r + s / 2), i = Math.min(i, a - l / 2), o = Math.max(o, a + l / 2) } r.forEach(e.nodes(), (function (t) { c(e.node(t)) })), r.forEach(e.edges(), (function (t) { var n = e.edge(t); r.has(n, "x") && c(n) })), t -= s, i -= l, r.forEach(e.nodes(), (function (n) { var r = e.node(n); r.x -= t, r.y -= i })), r.forEach(e.edges(), (function (n) { var o = e.edge(n); r.forEach(o.points, (function (e) { e.x -= t, e.y -= i })), r.has(o, "x") && (o.x -= t), r.has(o, "y") && (o.y -= i) })), a.width = n - t + s, a.height = o - i + l }(e) })), t(" assignNodeIntersects", (function () { !function (e) { r.forEach(e.edges(), (function (t) { var n, r, i = e.edge(t), o = e.node(t.v), a = e.node(t.w); i.points ? (n = i.points[0], r = i.points[i.points.length - 1]) : (i.points = [], n = a, r = o), i.points.unshift(g.intersectRect(o, n)), i.points.push(g.intersectRect(a, r)) })) }(e) })), t(" reversePoints", (function () { !function (e) { r.forEach(e.edges(), (function (t) { var n = e.edge(t); n.reversed && n.points.reverse() })) }(e) })), t(" acyclic.undo", (function () { i.undo(e) })) }(t, n) })), n(" updateInputGraph", (function () { !function (e, t) { r.forEach(e.nodes(), (function (n) { var r = e.node(n), i = t.node(n); r && (r.x = i.x, r.y = i.y, t.children(n).length && (r.width = i.width, r.height = i.height)) })), r.forEach(e.edges(), (function (n) { var i = e.edge(n), o = t.edge(n); i.points = o.points, r.has(o, "x") && (i.x = o.x, i.y = o.y) })), e.graph().width = t.graph().width, e.graph().height = t.graph().height }(e, t) })) })) }; var v = ["nodesep", "edgesep", "ranksep", "marginx", "marginy"], b = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: "tb" }, y = ["acyclicer", "ranker", "rankdir", "align"], x = ["width", "height"], w = { width: 0, height: 0 }, k = ["minlen", "weight", "width", "height", "labeloffset"], A = { minlen: 1, weight: 1, width: 0, height: 0, labeloffset: 10, labelpos: "r" }, E = ["labelpos"]; function S(e, t) { return r.mapValues(r.pick(e, t), Number) } function $(e) { var t = {}; return r.forEach(e, (function (e, n) { t[n.toLowerCase()] = e })), t } }, function (e, t, n) { var r = n(149); e.exports = function (e) { return r(e, 5) } }, function (e, t, n) { var r = n(89), i = n(57), o = n(90), a = n(48), s = Object.prototype, l = s.hasOwnProperty, c = r((function (e, t) { e = Object(e); var n = -1, r = t.length, c = r > 2 ? t[2] : void 0; for (c && o(t[0], t[1], c) && (r = 1); ++n < r;)for (var u = t[n], d = a(u), p = -1, f = d.length; ++p < f;) { var h = d[p], g = e[h]; (void 0 === g || i(g, s[h]) && !l.call(e, h)) && (e[h] = u[h]) } return e })); e.exports = c }, function (e, t, n) { var r = n(363)(n(364)); e.exports = r }, function (e, t, n) { var r = n(37), i = n(36), o = n(41); e.exports = function (e) { return function (t, n, a) { var s = Object(t); if (!i(t)) { var l = r(n, 3); t = o(t), n = function (e) { return l(s[e], e, s) } } var c = e(t, n, a); return c > -1 ? s[l ? t[c] : c] : void 0 } } }, function (e, t, n) { var r = n(188), i = n(37), o = n(365), a = Math.max; e.exports = function (e, t, n) { var s = null == e ? 0 : e.length; if (!s) return -1; var l = null == n ? 0 : o(n); return l < 0 && (l = a(s + l, 0)), r(e, i(t, 3), l) } }, function (e, t, n) { var r = n(196); e.exports = function (e) { var t = r(e), n = t % 1; return t == t ? n ? t - n : t : 0 } }, function (e, t, n) { var r = n(367), i = n(23), o = n(61), a = /^[-+]0x[0-9a-f]+$/i, s = /^0b[01]+$/i, l = /^0o[0-7]+$/i, c = parseInt; e.exports = function (e) { if ("number" == typeof e) return e; if (o(e)) return NaN; if (i(e)) { var t = "function" == typeof e.valueOf ? e.valueOf() : e; e = i(t) ? t + "" : t } if ("string" != typeof e) return 0 === e ? e : +e; e = r(e); var n = s.test(e); return n || l.test(e) ? c(e.slice(2), n ? 2 : 8) : a.test(e) ? NaN : +e } }, function (e, t, n) { var r = n(368), i = /^\s+/; e.exports = function (e) { return e ? e.slice(0, r(e) + 1).replace(i, "") : e } }, function (e, t) { var n = /\s/; e.exports = function (e) { for (var t = e.length; t-- && n.test(e.charAt(t));); return t } }, function (e, t, n) { var r = n(128), i = n(169), o = n(48); e.exports = function (e, t) { return null == e ? e : r(e, i(t), o) } }, function (e, t) { e.exports = function (e) { var t = null == e ? 0 : e.length; return t ? e[t - 1] : void 0 } }, function (e, t, n) { var r = n(79), i = n(127), o = n(37); e.exports = function (e, t) { var n = {}; return t = o(t, 3), i(e, (function (e, i, o) { r(n, i, t(e, i, o)) })), n } }, function (e, t, n) { var r = n(132), i = n(373), o = n(49); e.exports = function (e) { return e && e.length ? r(e, o, i) : void 0 } }, function (e, t) { e.exports = function (e, t) { return e > t } }, function (e, t, n) { var r = n(375), i = n(379)((function (e, t, n) { r(e, t, n) })); e.exports = i }, function (e, t, n) { var r = n(73), i = n(198), o = n(128), a = n(376), s = n(23), l = n(48), c = n(199); e.exports = function e(t, n, u, d, p) { t !== n && o(n, (function (o, l) { if (p || (p = new r), s(o)) a(t, n, l, u, e, d, p); else { var f = d ? d(c(t, l), o, l + "", t, n, p) : void 0; void 0 === f && (f = o), i(t, l, f) } }), l) } }, function (e, t, n) { var r = n(198), i = n(155), o = n(164), a = n(156), s = n(165), l = n(66), c = n(13), u = n(189), d = n(59), p = n(64), f = n(23), h = n(377), g = n(67), m = n(199), v = n(378); e.exports = function (e, t, n, b, y, x, w) { var k = m(e, n), A = m(t, n), E = w.get(A); if (E) r(e, n, E); else { var S = x ? x(k, A, n + "", e, t, w) : void 0, $ = void 0 === S; if ($) { var C = c(A), _ = !C && d(A), O = !C && !_ && g(A); S = A, C || _ || O ? c(k) ? S = k : u(k) ? S = a(k) : _ ? ($ = !1, S = i(A, !0)) : O ? ($ = !1, S = o(A, !0)) : S = [] : h(A) || l(A) ? (S = k, l(k) ? S = v(k) : f(k) && !p(k) || (S = s(A))) : $ = !1 } $ && (w.set(A, S), y(S, A, b, x, w), w.delete(A)), r(e, n, S) } } }, function (e, t, n) { var r = n(47), i = n(84), o = n(34), a = Function.prototype, s = Object.prototype, l = a.toString, c = s.hasOwnProperty, u = l.call(Object); e.exports = function (e) { if (!o(e) || "[object Object]" != r(e)) return !1; var t = i(e); if (null === t) return !0; var n = c.call(t, "constructor") && t.constructor; return "function" == typeof n && n instanceof n && l.call(n) == u } }, function (e, t, n) { var r = n(65), i = n(48); e.exports = function (e) { return r(e, i(e)) } }, function (e, t, n) { var r = n(89), i = n(90); e.exports = function (e) { return r((function (t, n) { var r = -1, o = n.length, a = o > 1 ? n[o - 1] : void 0, s = o > 2 ? n[2] : void 0; for (a = e.length > 3 && "function" == typeof a ? (o--, a) : void 0, s && i(n[0], n[1], s) && (a = o < 3 ? void 0 : a, o = 1), t = Object(t); ++r < o;) { var l = n[r]; l && e(t, l, r, a) } return t })) } }, function (e, t, n) { var r = n(132), i = n(200), o = n(49); e.exports = function (e) { return e && e.length ? r(e, o, i) : void 0 } }, function (e, t, n) { var r = n(132), i = n(37), o = n(200); e.exports = function (e, t) { return e && e.length ? r(e, i(t, 2), o) : void 0 } }, function (e, t, n) { var r = n(31); e.exports = function () { return r.Date.now() } }, function (e, t, n) { var r = n(384), i = n(387)((function (e, t) { return null == e ? {} : r(e, t) })); e.exports = i }, function (e, t, n) { var r = n(385), i = n(178); e.exports = function (e, t) { return r(e, t, (function (t, n) { return i(e, n) })) } }, function (e, t, n) { var r = n(86), i = n(386), o = n(87); e.exports = function (e, t, n) { for (var a = -1, s = t.length, l = {}; ++a < s;) { var c = t[a], u = r(e, c); n(u, c) && i(l, o(c, e), u) } return l } }, function (e, t, n) { var r = n(78), i = n(87), o = n(81), a = n(23), s = n(68); e.exports = function (e, t, n, l) { if (!a(e)) return e; for (var c = -1, u = (t = i(t, e)).length, d = u - 1, p = e; null != p && ++c < u;) { var f = s(t[c]), h = n; if ("__proto__" === f || "constructor" === f || "prototype" === f) return e; if (c != d) { var g = p[f]; void 0 === (h = l ? l(g, f, p) : void 0) && (h = a(g) ? g : o(t[c + 1]) ? [] : {}) } r(p, f, h), p = p[f] } return e } }, function (e, t, n) { var r = n(197), i = n(186), o = n(187); e.exports = function (e) { return o(i(e, void 0, r), e + "") } }, function (e, t, n) { var r = n(389)(); e.exports = r }, function (e, t, n) { var r = n(390), i = n(90), o = n(196); e.exports = function (e) { return function (t, n, a) { return a && "number" != typeof a && i(t, n, a) && (n = a = void 0), t = o(t), void 0 === n ? (n = t, t = 0) : n = o(n), a = void 0 === a ? t < n ? 1 : -1 : o(a), r(t, n, a, e) } } }, function (e, t) { var n = Math.ceil, r = Math.max; e.exports = function (e, t, i, o) { for (var a = -1, s = r(n((t - e) / (i || 1)), 0), l = Array(s); s--;)l[o ? s : ++a] = e, e += i; return l } }, function (e, t, n) { var r = n(131), i = n(392), o = n(89), a = n(90), s = o((function (e, t) { if (null == e) return []; var n = t.length; return n > 1 && a(e, t[0], t[1]) ? t = [] : n > 2 && a(t[0], t[1], t[2]) && (t = [t[0]]), i(e, r(t, 1), []) })); e.exports = s }, function (e, t, n) { var r = n(88), i = n(86), o = n(37), a = n(184), s = n(393), l = n(82), c = n(394), u = n(49), d = n(13); e.exports = function (e, t, n) { t = t.length ? r(t, (function (e) { return d(e) ? function (t) { return i(t, 1 === e.length ? e[0] : e) } : e })) : [u]; var p = -1; t = r(t, l(o)); var f = a(e, (function (e, n, i) { return { criteria: r(t, (function (t) { return t(e) })), index: ++p, value: e } })); return s(f, (function (e, t) { return c(e, t, n) })) } }, function (e, t) { e.exports = function (e, t) { var n = e.length; for (e.sort(t); n--;)e[n] = e[n].value; return e } }, function (e, t, n) { var r = n(395); e.exports = function (e, t, n) { for (var i = -1, o = e.criteria, a = t.criteria, s = o.length, l = n.length; ++i < s;) { var c = r(o[i], a[i]); if (c) return i >= l ? c : c * ("desc" == n[i] ? -1 : 1) } return e.index - t.index } }, function (e, t, n) { var r = n(61); e.exports = function (e, t) { if (e !== t) { var n = void 0 !== e, i = null === e, o = e == e, a = r(e), s = void 0 !== t, l = null === t, c = t == t, u = r(t); if (!l && !u && !a && e > t || a && s && c && !l && !u || i && s && c || !n && c || !o) return 1; if (!i && !a && !u && e < t || u && n && o && !i && !a || l && n && o || !s && o || !c) return -1 } return 0 } }, function (e, t, n) { var r = n(177), i = 0; e.exports = function (e) { var t = ++i; return r(e) + t } }, function (e, t, n) { var r = n(78), i = n(398); e.exports = function (e, t) { return i(e || [], t || [], r) } }, function (e, t) { e.exports = function (e, t, n) { for (var r = -1, i = e.length, o = t.length, a = {}; ++r < i;) { var s = r < o ? t[r] : void 0; n(a, e[r], s) } return a } }, function (e, t, n) { "use strict"; var r = n(11), i = n(400); e.exports = { run: function (e) { var t = "greedy" === e.graph().acyclicer ? i(e, function (e) { return function (t) { return e.edge(t).weight } }(e)) : function (e) { var t = [], n = {}, i = {}; function o(a) { r.has(i, a) || (i[a] = !0, n[a] = !0, r.forEach(e.outEdges(a), (function (e) { r.has(n, e.w) ? t.push(e) : o(e.w) })), delete n[a]) } return r.forEach(e.nodes(), o), t }(e); r.forEach(t, (function (t) { var n = e.edge(t); e.removeEdge(t), n.forwardName = t.name, n.reversed = !0, e.setEdge(t.w, t.v, n, r.uniqueId("rev")) })) }, undo: function (e) { r.forEach(e.edges(), (function (t) { var n = e.edge(t); if (n.reversed) { e.removeEdge(t); var r = n.forwardName; delete n.reversed, delete n.forwardName, e.setEdge(t.w, t.v, n, r) } })) } } }, function (e, t, n) { var r = n(11), i = n(30).Graph, o = n(401); e.exports = function (e, t) { if (e.nodeCount() <= 1) return []; var n = function (e, t) { var n = new i, a = 0, s = 0; r.forEach(e.nodes(), (function (e) { n.setNode(e, { v: e, in: 0, out: 0 }) })), r.forEach(e.edges(), (function (e) { var r = n.edge(e.v, e.w) || 0, i = t(e), o = r + i; n.setEdge(e.v, e.w, o), s = Math.max(s, n.node(e.v).out += i), a = Math.max(a, n.node(e.w).in += i) })); var c = r.range(s + a + 3).map((function () { return new o })), u = a + 1; return r.forEach(n.nodes(), (function (e) { l(c, u, n.node(e)) })), { graph: n, buckets: c, zeroIdx: u } }(e, t || a), c = function (e, t, n) { var r, i = [], o = t[t.length - 1], a = t[0]; for (; e.nodeCount();) { for (; r = a.dequeue();)s(e, t, n, r); for (; r = o.dequeue();)s(e, t, n, r); if (e.nodeCount()) for (var l = t.length - 2; l > 0; --l)if (r = t[l].dequeue()) { i = i.concat(s(e, t, n, r, !0)); break } } return i }(n.graph, n.buckets, n.zeroIdx); return r.flatten(r.map(c, (function (t) { return e.outEdges(t.v, t.w) })), !0) }; var a = r.constant(1); function s(e, t, n, i, o) { var a = o ? [] : void 0; return r.forEach(e.inEdges(i.v), (function (r) { var i = e.edge(r), s = e.node(r.v); o && a.push({ v: r.v, w: r.w }), s.out -= i, l(t, n, s) })), r.forEach(e.outEdges(i.v), (function (r) { var i = e.edge(r), o = r.w, a = e.node(o); a.in -= i, l(t, n, a) })), e.removeNode(i.v), a } function l(e, t, n) { n.out ? n.in ? e[n.out - n.in + t].enqueue(n) : e[e.length - 1].enqueue(n) : e[0].enqueue(n) } }, function (e, t) { function n() { var e = {}; e._next = e._prev = e, this._sentinel = e } function r(e) { e._prev._next = e._next, e._next._prev = e._prev, delete e._next, delete e._prev } function i(e, t) { if ("_next" !== e && "_prev" !== e) return t } e.exports = n, n.prototype.dequeue = function () { var e = this._sentinel, t = e._prev; if (t !== e) return r(t), t }, n.prototype.enqueue = function (e) { var t = this._sentinel; e._prev && e._next && r(e), e._next = t._next, t._next._prev = e, t._next = e, e._prev = t }, n.prototype.toString = function () { for (var e = [], t = this._sentinel, n = t._prev; n !== t;)e.push(JSON.stringify(n, i)), n = n._prev; return "[" + e.join(", ") + "]" } }, function (e, t, n) { "use strict"; var r = n(11), i = n(20); e.exports = { run: function (e) { e.graph().dummyChains = [], r.forEach(e.edges(), (function (t) { !function (e, t) { var n, r, o, a = t.v, s = e.node(a).rank, l = t.w, c = e.node(l).rank, u = t.name, d = e.edge(t), p = d.labelRank; if (c === s + 1) return; for (e.removeEdge(t), o = 0, ++s; s < c; ++o, ++s)d.points = [], r = { width: 0, height: 0, edgeLabel: d, edgeObj: t, rank: s }, n = i.addDummyNode(e, "edge", r, "_d"), s === p && (r.width = d.width, r.height = d.height, r.dummy = "edge-label", r.labelpos = d.labelpos), e.setEdge(a, n, { weight: d.weight }, u), 0 === o && e.graph().dummyChains.push(n), a = n; e.setEdge(a, l, { weight: d.weight }, u) }(e, t) })) }, undo: function (e) { r.forEach(e.graph().dummyChains, (function (t) { var n, r = e.node(t), i = r.edgeLabel; for (e.setEdge(r.edgeObj, i); r.dummy;)n = e.successors(t)[0], e.removeNode(t), i.points.push({ x: r.x, y: r.y }), "edge-label" === r.dummy && (i.x = r.x, i.y = r.y, i.width = r.width, i.height = r.height), t = n, r = e.node(t) })) } } }, function (e, t, n) { "use strict"; var r = n(91).longestPath, i = n(201), o = n(404); e.exports = function (e) { switch (e.graph().ranker) { case "network-simplex": s(e); break; case "tight-tree": !function (e) { r(e), i(e) }(e); break; case "longest-path": a(e); break; default: s(e) } }; var a = r; function s(e) { o(e) } }, function (e, t, n) { "use strict"; var r = n(11), i = n(201), o = n(91).slack, a = n(91).longestPath, s = n(30).alg.preorder, l = n(30).alg.postorder, c = n(20).simplify; function u(e) { e = c(e), a(e); var t, n = i(e); for (f(n), d(n, e); t = g(n);)v(n, e, t, m(n, e, t)) } function d(e, t) { var n = l(e, e.nodes()); n = n.slice(0, n.length - 1), r.forEach(n, (function (n) { !function (e, t, n) { var r = e.node(n).parent; e.edge(n, r).cutvalue = p(e, t, n) }(e, t, n) })) } function p(e, t, n) { var i = e.node(n).parent, o = !0, a = t.edge(n, i), s = 0; return a || (o = !1, a = t.edge(i, n)), s = a.weight, r.forEach(t.nodeEdges(n), (function (r) { var a, l, c = r.v === n, u = c ? r.w : r.v; if (u !== i) { var d = c === o, p = t.edge(r).weight; if (s += d ? p : -p, a = n, l = u, e.hasEdge(a, l)) { var f = e.edge(n, u).cutvalue; s += d ? -f : f } } })), s } function f(e, t) { arguments.length < 2 && (t = e.nodes()[0]), h(e, {}, 1, t) } function h(e, t, n, i, o) { var a = n, s = e.node(i); return t[i] = !0, r.forEach(e.neighbors(i), (function (o) { r.has(t, o) || (n = h(e, t, n, o, i)) })), s.low = a, s.lim = n++, o ? s.parent = o : delete s.parent, n } function g(e) { return r.find(e.edges(), (function (t) { return e.edge(t).cutvalue < 0 })) } function m(e, t, n) { var i = n.v, a = n.w; t.hasEdge(i, a) || (i = n.w, a = n.v); var s = e.node(i), l = e.node(a), c = s, u = !1; s.lim > l.lim && (c = l, u = !0); var d = r.filter(t.edges(), (function (t) { return u === b(e, e.node(t.v), c) && u !== b(e, e.node(t.w), c) })); return r.minBy(d, (function (e) { return o(t, e) })) } function v(e, t, n, i) { var o = n.v, a = n.w; e.removeEdge(o, a), e.setEdge(i.v, i.w, {}), f(e), d(e, t), function (e, t) { var n = r.find(e.nodes(), (function (e) { return !t.node(e).parent })), i = s(e, n); i = i.slice(1), r.forEach(i, (function (n) { var r = e.node(n).parent, i = t.edge(n, r), o = !1; i || (i = t.edge(r, n), o = !0), t.node(n).rank = t.node(r).rank + (o ? i.minlen : -i.minlen) })) }(e, t) } function b(e, t, n) { return n.low <= t.lim && t.lim <= n.lim } e.exports = u, u.initLowLimValues = f, u.initCutValues = d, u.calcCutValue = p, u.leaveEdge = g, u.enterEdge = m, u.exchangeEdges = v }, function (e, t, n) { var r = n(11); e.exports = function (e) { var t = function (e) { var t = {}, n = 0; function i(o) { var a = n; r.forEach(e.children(o), i), t[o] = { low: a, lim: n++ } } return r.forEach(e.children(), i), t }(e); r.forEach(e.graph().dummyChains, (function (n) { for (var r = e.node(n), i = r.edgeObj, o = function (e, t, n, r) { var i, o, a = [], s = [], l = Math.min(t[n].low, t[r].low), c = Math.max(t[n].lim, t[r].lim); i = n; do { i = e.parent(i), a.push(i) } while (i && (t[i].low > l || c > t[i].lim)); o = i, i = r; for (; (i = e.parent(i)) !== o;)s.push(i); return { path: a.concat(s.reverse()), lca: o } }(e, t, i.v, i.w), a = o.path, s = o.lca, l = 0, c = a[l], u = !0; n !== i.w;) { if (r = e.node(n), u) { for (; (c = a[l]) !== s && e.node(c).maxRank < r.rank;)l++; c === s && (u = !1) } if (!u) { for (; l < a.length - 1 && e.node(c = a[l + 1]).minRank <= r.rank;)l++; c = a[l] } e.setParent(n, c), n = e.successors(n)[0] } })) } }, function (e, t, n) { var r = n(11), i = n(20); e.exports = { run: function (e) { var t = i.addDummyNode(e, "root", {}, "_root"), n = function (e) { var t = {}; return r.forEach(e.children(), (function (n) { !function n(i, o) { var a = e.children(i); a && a.length && r.forEach(a, (function (e) { n(e, o + 1) })); t[i] = o }(n, 1) })), t }(e), o = r.max(r.values(n)) - 1, a = 2 * o + 1; e.graph().nestingRoot = t, r.forEach(e.edges(), (function (t) { e.edge(t).minlen *= a })); var s = function (e) { return r.reduce(e.edges(), (function (t, n) { return t + e.edge(n).weight }), 0) }(e) + 1; r.forEach(e.children(), (function (l) { !function e(t, n, o, a, s, l, c) { var u = t.children(c); if (!u.length) return void (c !== n && t.setEdge(n, c, { weight: 0, minlen: o })); var d = i.addBorderNode(t, "_bt"), p = i.addBorderNode(t, "_bb"), f = t.node(c); t.setParent(d, c), f.borderTop = d, t.setParent(p, c), f.borderBottom = p, r.forEach(u, (function (r) { e(t, n, o, a, s, l, r); var i = t.node(r), u = i.borderTop ? i.borderTop : r, f = i.borderBottom ? i.borderBottom : r, h = i.borderTop ? a : 2 * a, g = u !== f ? 1 : s - l[c] + 1; t.setEdge(d, u, { weight: h, minlen: g, nestingEdge: !0 }), t.setEdge(f, p, { weight: h, minlen: g, nestingEdge: !0 }) })), t.parent(c) || t.setEdge(n, d, { weight: 0, minlen: s + l[c] }) }(e, t, a, s, o, n, l) })), e.graph().nodeRankFactor = a }, cleanup: function (e) { var t = e.graph(); e.removeNode(t.nestingRoot), delete t.nestingRoot, r.forEach(e.edges(), (function (t) { e.edge(t).nestingEdge && e.removeEdge(t) })) } } }, function (e, t, n) { var r = n(11), i = n(20); function o(e, t, n, r, o, a) { var s = { width: 0, height: 0, rank: a, borderType: t }, l = o[t][a - 1], c = i.addDummyNode(e, "border", s, n); o[t][a] = c, e.setParent(c, r), l && e.setEdge(l, c, { weight: 1 }) } e.exports = function (e) { r.forEach(e.children(), (function t(n) { var i = e.children(n), a = e.node(n); if (i.length && r.forEach(i, t), r.has(a, "minRank")) { a.borderLeft = [], a.borderRight = []; for (var s = a.minRank, l = a.maxRank + 1; s < l; ++s)o(e, "borderLeft", "_bl", n, a, s), o(e, "borderRight", "_br", n, a, s) } })) } }, function (e, t, n) { "use strict"; var r = n(11); function i(e) { r.forEach(e.nodes(), (function (t) { o(e.node(t)) })), r.forEach(e.edges(), (function (t) { o(e.edge(t)) })) } function o(e) { var t = e.width; e.width = e.height, e.height = t } function a(e) { e.y = -e.y } function s(e) { var t = e.x; e.x = e.y, e.y = t } e.exports = { adjust: function (e) { var t = e.graph().rankdir.toLowerCase(); "lr" !== t && "rl" !== t || i(e) }, undo: function (e) { var t = e.graph().rankdir.toLowerCase(); "bt" !== t && "rl" !== t || function (e) { r.forEach(e.nodes(), (function (t) { a(e.node(t)) })), r.forEach(e.edges(), (function (t) { var n = e.edge(t); r.forEach(n.points, a), r.has(n, "y") && a(n) })) }(e); "lr" !== t && "rl" !== t || (!function (e) { r.forEach(e.nodes(), (function (t) { s(e.node(t)) })), r.forEach(e.edges(), (function (t) { var n = e.edge(t); r.forEach(n.points, s), r.has(n, "x") && s(n) })) }(e), i(e)) } } }, function (e, t, n) { "use strict"; var r = n(11), i = n(410), o = n(411), a = n(412), s = n(416), l = n(417), c = n(30).Graph, u = n(20); function d(e, t, n) { return r.map(t, (function (t) { return s(e, t, n) })) } function p(e, t) { var n = new c; r.forEach(e, (function (e) { var i = e.graph().root, o = a(e, i, n, t); r.forEach(o.vs, (function (t, n) { e.node(t).order = n })), l(e, n, o.vs) })) } function f(e, t) { r.forEach(t, (function (t) { r.forEach(t, (function (t, n) { e.node(t).order = n })) })) } e.exports = function (e) { var t = u.maxRank(e), n = d(e, r.range(1, t + 1), "inEdges"), a = d(e, r.range(t - 1, -1, -1), "outEdges"), s = i(e); f(e, s); for (var l, c = Number.POSITIVE_INFINITY, h = 0, g = 0; g < 4; ++h, ++g) { p(h % 2 ? n : a, h % 4 >= 2), s = u.buildLayerMatrix(e); var m = o(e, s); m < c && (g = 0, l = r.cloneDeep(s), c = m) } f(e, l) } }, function (e, t, n) { "use strict"; var r = n(11); e.exports = function (e) { var t = {}, n = r.filter(e.nodes(), (function (t) { return !e.children(t).length })), i = r.max(r.map(n, (function (t) { return e.node(t).rank }))), o = r.map(r.range(i + 1), (function () { return [] })); var a = r.sortBy(n, (function (t) { return e.node(t).rank })); return r.forEach(a, (function n(i) { if (r.has(t, i)) return; t[i] = !0; var a = e.node(i); o[a.rank].push(i), r.forEach(e.successors(i), n) })), o } }, function (e, t, n) { "use strict"; var r = n(11); function i(e, t, n) { for (var i = r.zipObject(n, r.map(n, (function (e, t) { return t }))), o = r.flatten(r.map(t, (function (t) { return r.sortBy(r.map(e.outEdges(t), (function (t) { return { pos: i[t.w], weight: e.edge(t).weight } })), "pos") })), !0), a = 1; a < n.length;)a <<= 1; var s = 2 * a - 1; a -= 1; var l = r.map(new Array(s), (function () { return 0 })), c = 0; return r.forEach(o.forEach((function (e) { var t = e.pos + a; l[t] += e.weight; for (var n = 0; t > 0;)t % 2 && (n += l[t + 1]), l[t = t - 1 >> 1] += e.weight; c += e.weight * n }))), c } e.exports = function (e, t) { for (var n = 0, r = 1; r < t.length; ++r)n += i(e, t[r - 1], t[r]); return n } }, function (e, t, n) { var r = n(11), i = n(413), o = n(414), a = n(415); e.exports = function e(t, n, s, l) { var c = t.children(n), u = t.node(n), d = u ? u.borderLeft : void 0, p = u ? u.borderRight : void 0, f = {}; d && (c = r.filter(c, (function (e) { return e !== d && e !== p }))); var h = i(t, c); r.forEach(h, (function (n) { if (t.children(n.v).length) { var i = e(t, n.v, s, l); f[n.v] = i, r.has(i, "barycenter") && (o = n, a = i, r.isUndefined(o.barycenter) ? (o.barycenter = a.barycenter, o.weight = a.weight) : (o.barycenter = (o.barycenter * o.weight + a.barycenter * a.weight) / (o.weight + a.weight), o.weight += a.weight)) } var o, a })); var g = o(h, s); !function (e, t) { r.forEach(e, (function (e) { e.vs = r.flatten(e.vs.map((function (e) { return t[e] ? t[e].vs : e })), !0) })) }(g, f); var m = a(g, l); if (d && (m.vs = r.flatten([d, m.vs, p], !0), t.predecessors(d).length)) { var v = t.node(t.predecessors(d)[0]), b = t.node(t.predecessors(p)[0]); r.has(m, "barycenter") || (m.barycenter = 0, m.weight = 0), m.barycenter = (m.barycenter * m.weight + v.order + b.order) / (m.weight + 2), m.weight += 2 } return m } }, function (e, t, n) { var r = n(11); e.exports = function (e, t) { return r.map(t, (function (t) { var n = e.inEdges(t); if (n.length) { var i = r.reduce(n, (function (t, n) { var r = e.edge(n), i = e.node(n.v); return { sum: t.sum + r.weight * i.order, weight: t.weight + r.weight } }), { sum: 0, weight: 0 }); return { v: t, barycenter: i.sum / i.weight, weight: i.weight } } return { v: t } })) } }, function (e, t, n) { "use strict"; var r = n(11); e.exports = function (e, t) { var n = {}; return r.forEach(e, (function (e, t) { var i = n[e.v] = { indegree: 0, in: [], out: [], vs: [e.v], i: t }; r.isUndefined(e.barycenter) || (i.barycenter = e.barycenter, i.weight = e.weight) })), r.forEach(t.edges(), (function (e) { var t = n[e.v], i = n[e.w]; r.isUndefined(t) || r.isUndefined(i) || (i.indegree++, t.out.push(n[e.w])) })), function (e) { var t = []; function n(e) { return function (t) { t.merged || (r.isUndefined(t.barycenter) || r.isUndefined(e.barycenter) || t.barycenter >= e.barycenter) && function (e, t) { var n = 0, r = 0; e.weight && (n += e.barycenter * e.weight, r += e.weight); t.weight && (n += t.barycenter * t.weight, r += t.weight); e.vs = t.vs.concat(e.vs), e.barycenter = n / r, e.weight = r, e.i = Math.min(t.i, e.i), t.merged = !0 }(e, t) } } function i(t) { return function (n) { n.in.push(t), 0 == --n.indegree && e.push(n) } } for (; e.length;) { var o = e.pop(); t.push(o), r.forEach(o.in.reverse(), n(o)), r.forEach(o.out, i(o)) } return r.map(r.filter(t, (function (e) { return !e.merged })), (function (e) { return r.pick(e, ["vs", "i", "barycenter", "weight"]) })) }(r.filter(n, (function (e) { return !e.indegree }))) } }, function (e, t, n) { var r = n(11), i = n(20); function o(e, t, n) { for (var i; t.length && (i = r.last(t)).i <= n;)t.pop(), e.push(i.vs), n++; return n } e.exports = function (e, t) { var n = i.partition(e, (function (e) { return r.has(e, "barycenter") })), a = n.lhs, s = r.sortBy(n.rhs, (function (e) { return -e.i })), l = [], c = 0, u = 0, d = 0; a.sort((p = !!t, function (e, t) { return e.barycenter < t.barycenter ? -1 : e.barycenter > t.barycenter ? 1 : p ? t.i - e.i : e.i - t.i })), d = o(l, s, d), r.forEach(a, (function (e) { d += e.vs.length, l.push(e.vs), c += e.barycenter * e.weight, u += e.weight, d = o(l, s, d) })); var p; var f = { vs: r.flatten(l, !0) }; u && (f.barycenter = c / u, f.weight = u); return f } }, function (e, t, n) { var r = n(11), i = n(30).Graph; e.exports = function (e, t, n) { var o = function (e) { var t; for (; e.hasNode(t = r.uniqueId("_root"));); return t }(e), a = new i({ compound: !0 }).setGraph({ root: o }).setDefaultNodeLabel((function (t) { return e.node(t) })); return r.forEach(e.nodes(), (function (i) { var s = e.node(i), l = e.parent(i); (s.rank === t || s.minRank <= t && t <= s.maxRank) && (a.setNode(i), a.setParent(i, l || o), r.forEach(e[n](i), (function (t) { var n = t.v === i ? t.w : t.v, o = a.edge(n, i), s = r.isUndefined(o) ? 0 : o.weight; a.setEdge(n, i, { weight: e.edge(t).weight + s }) })), r.has(s, "minRank") && a.setNode(i, { borderLeft: s.borderLeft[t], borderRight: s.borderRight[t] })) })), a } }, function (e, t, n) { var r = n(11); e.exports = function (e, t, n) { var i, o = {}; r.forEach(n, (function (n) { for (var r, a, s = e.parent(n); s;) { if ((r = e.parent(s)) ? (a = o[r], o[r] = s) : (a = i, i = s), a && a !== s) return void t.setEdge(a, s); s = r } })) } }, function (e, t, n) { "use strict"; var r = n(11), i = n(20), o = n(419).positionX; e.exports = function (e) { (function (e) { var t = i.buildLayerMatrix(e), n = e.graph().ranksep, o = 0; r.forEach(t, (function (t) { var i = r.max(r.map(t, (function (t) { return e.node(t).height }))); r.forEach(t, (function (t) { e.node(t).y = o + i / 2 })), o += i + n })) })(e = i.asNonCompoundGraph(e)), r.forEach(o(e), (function (t, n) { e.node(n).x = t })) } }, function (e, t, n) { "use strict"; var r = n(11), i = n(30).Graph, o = n(20); function a(e, t) { var n = {}; return r.reduce(t, (function (t, i) { var o = 0, a = 0, s = t.length, c = r.last(i); return r.forEach(i, (function (t, u) { var d = function (e, t) { if (e.node(t).dummy) return r.find(e.predecessors(t), (function (t) { return e.node(t).dummy })) }(e, t), p = d ? e.node(d).order : s; (d || t === c) && (r.forEach(i.slice(a, u + 1), (function (t) { r.forEach(e.predecessors(t), (function (r) { var i = e.node(r), a = i.order; !(a < o || p < a) || i.dummy && e.node(t).dummy || l(n, r, t) })) })), a = u + 1, o = p) })), i })), n } function s(e, t) { var n = {}; function i(t, i, o, a, s) { var c; r.forEach(r.range(i, o), (function (i) { c = t[i], e.node(c).dummy && r.forEach(e.predecessors(c), (function (t) { var r = e.node(t); r.dummy && (r.order < a || r.order > s) && l(n, t, c) })) })) } return r.reduce(t, (function (t, n) { var o, a = -1, s = 0; return r.forEach(n, (function (r, l) { if ("border" === e.node(r).dummy) { var c = e.predecessors(r); c.length && (o = e.node(c[0]).order, i(n, s, l, a, o), s = l, a = o) } i(n, s, n.length, o, t.length) })), n })), n } function l(e, t, n) { if (t > n) { var r = t; t = n, n = r } var i = e[t]; i || (e[t] = i = {}), i[n] = !0 } function c(e, t, n) { if (t > n) { var i = t; t = n, n = i } return r.has(e[t], n) } function u(e, t, n, i) { var o = {}, a = {}, s = {}; return r.forEach(t, (function (e) { r.forEach(e, (function (e, t) { o[e] = e, a[e] = e, s[e] = t })) })), r.forEach(t, (function (e) { var t = -1; r.forEach(e, (function (e) { var l = i(e); if (l.length) for (var u = ((l = r.sortBy(l, (function (e) { return s[e] }))).length - 1) / 2, d = Math.floor(u), p = Math.ceil(u); d <= p; ++d) { var f = l[d]; a[e] === e && t < s[f] && !c(n, e, f) && (a[f] = e, a[e] = o[e] = o[f], t = s[f]) } })) })), { root: o, align: a } } function d(e, t, n, o, a) { var s = {}, l = function (e, t, n, o) { var a = new i, s = e.graph(), l = function (e, t, n) { return function (i, o, a) { var s, l = i.node(o), c = i.node(a), u = 0; if (u += l.width / 2, r.has(l, "labelpos")) switch (l.labelpos.toLowerCase()) { case "l": s = -l.width / 2; break; case "r": s = l.width / 2 }if (s && (u += n ? s : -s), s = 0, u += (l.dummy ? t : e) / 2, u += (c.dummy ? t : e) / 2, u += c.width / 2, r.has(c, "labelpos")) switch (c.labelpos.toLowerCase()) { case "l": s = c.width / 2; break; case "r": s = -c.width / 2 }return s && (u += n ? s : -s), s = 0, u } }(s.nodesep, s.edgesep, o); return r.forEach(t, (function (t) { var i; r.forEach(t, (function (t) { var r = n[t]; if (a.setNode(r), i) { var o = n[i], s = a.edge(o, r); a.setEdge(o, r, Math.max(l(e, t, i), s || 0)) } i = t })) })), a }(e, t, n, a), c = a ? "borderLeft" : "borderRight"; function u(e, t) { for (var n = l.nodes(), r = n.pop(), i = {}; r;)i[r] ? e(r) : (i[r] = !0, n.push(r), n = n.concat(t(r))), r = n.pop() } return u((function (e) { s[e] = l.inEdges(e).reduce((function (e, t) { return Math.max(e, s[t.v] + l.edge(t)) }), 0) }), l.predecessors.bind(l)), u((function (t) { var n = l.outEdges(t).reduce((function (e, t) { return Math.min(e, s[t.w] - l.edge(t)) }), Number.POSITIVE_INFINITY), r = e.node(t); n !== Number.POSITIVE_INFINITY && r.borderType !== c && (s[t] = Math.max(s[t], n)) }), l.successors.bind(l)), r.forEach(o, (function (e) { s[e] = s[n[e]] })), s } function p(e, t) { return r.minBy(r.values(t), (function (t) { var n = Number.NEGATIVE_INFINITY, i = Number.POSITIVE_INFINITY; return r.forIn(t, (function (t, r) { var o = function (e, t) { return e.node(t).width }(e, r) / 2; n = Math.max(t + o, n), i = Math.min(t - o, i) })), n - i })) } function f(e, t) { var n = r.values(t), i = r.min(n), o = r.max(n); r.forEach(["u", "d"], (function (n) { r.forEach(["l", "r"], (function (a) { var s, l = n + a, c = e[l]; if (c !== t) { var u = r.values(c); (s = "l" === a ? i - r.min(u) : o - r.max(u)) && (e[l] = r.mapValues(c, (function (e) { return e + s }))) } })) })) } function h(e, t) { return r.mapValues(e.ul, (function (n, i) { if (t) return e[t.toLowerCase()][i]; var o = r.sortBy(r.map(e, i)); return (o[1] + o[2]) / 2 })) } e.exports = { positionX: function (e) { var t, n = o.buildLayerMatrix(e), i = r.merge(a(e, n), s(e, n)), l = {}; r.forEach(["u", "d"], (function (o) { t = "u" === o ? n : r.values(n).reverse(), r.forEach(["l", "r"], (function (n) { "r" === n && (t = r.map(t, (function (e) { return r.values(e).reverse() }))); var a = ("u" === o ? e.predecessors : e.successors).bind(e), s = u(e, t, i, a), c = d(e, t, s.root, s.align, "r" === n); "r" === n && (c = r.mapValues(c, (function (e) { return -e }))), l[o + n] = c })) })); var c = p(e, l); return f(l, c), h(l, e.graph().align) }, findType1Conflicts: a, findType2Conflicts: s, addConflict: l, hasConflict: c, verticalAlignment: u, horizontalCompaction: d, alignCoordinates: f, findSmallestWidthAlignment: p, balance: h } }, function (e, t, n) { var r = n(11), i = n(20), o = n(30).Graph; e.exports = { debugOrdering: function (e) { var t = i.buildLayerMatrix(e), n = new o({ compound: !0, multigraph: !0 }).setGraph({}); return r.forEach(e.nodes(), (function (t) { n.setNode(t, { label: t }), n.setParent(t, "layer" + e.node(t).rank) })), r.forEach(e.edges(), (function (e) { n.setEdge(e.v, e.w, {}, e.name) })), r.forEach(t, (function (e, t) { var i = "layer" + t; n.setNode(i, { rank: "same" }), r.reduce(e, (function (e, t) { return n.setEdge(e, t, { style: "invis" }), t })) })), n } } }, function (e, t) { e.exports = "0.8.5" }, function (e, t, n) { "use strict"; const r = n(423); angular.module("dbt").directive("modelTree", [function () { return { scope: { tree: "=" }, templateUrl: r, link: function (e) { e.nav_selected = "project" } } }]) }, function (e, t) { var n = "/components/model_tree/model_tree.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n\n') }]), e.exports = n }, function (e, t, n) { "use strict"; const r = n(425), i = n(21); n(426), angular.module("dbt").directive("modelTreeLine", ["$state", function (e) { return { scope: { item: "=", depth: "<", resourceType: "@" }, replace: !0, templateUrl: r, link: function (t, n, r, o) { t.depth || (t.depth = 0); var a = t.item.name; if (a) { var s = i.last(a, 15).join(""), l = i.initial(a, s.length).join(""); t.name = { name: a, start: l, end: s }, t.name_start = l, t.name_end = s, t.onFolderClick = function (n) { if (n.active = !n.active, "source" == t.resourceType) { var r = n.name; e.go("dbt.source_list", { source: r }) } else 0 === t.depth && "database" !== n.type && e.go("dbt.project_overview", { project_name: n.name }) }, t.activate = function (n) { t.$emit("clearSearch"), n.active = !0; var r = "dbt." + n.node.resource_type; e.go(r, { unique_id: n.unique_id }) }, t.getIcon = function (e, t) { return "#" + { header: { on: "icn-down", off: "icn-right" }, database: { on: "icn-db-on", off: "icn-db" }, schema: { on: "icn-tree-on", off: "icn-tree" }, table: { on: "icn-doc-on", off: "icn-doc" }, folder: { on: "icn-dir-on", off: "icn-dir" }, file: { on: "icn-doc-on", off: "icn-doc" }, group: { on: "icn-filter", off: "icn-filter" } }[e][t] }, t.getClass = function (e) { return { active: e.active, "menu-tree": "header" == e.type || "schema" == e.type || "folder" == e.type, "menu-main": "header" == e.type, "menu-node": "file" == e.type || "table" == e.type } } } } } }]) }, function (e, t) { var n = "/components/model_tree/model_tree_line.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
  • \n\n \n \n \n \n \n \n {{name.start}}\n {{name.end}}\n \n \n\n \n \n \n \n \n \n {{name.start}}\n {{name.end}}\n \n \n\n \n
  • \n') }]), e.exports = n }, function (e, t, n) { var r = n(427); "string" == typeof r && (r = [[e.i, r, ""]]); var i = { hmr: !0, transform: void 0, insertInto: void 0 }; n(40)(r, i); r.locals && (e.exports = r.locals) }, function (e, t, n) { (e.exports = n(39)(!1)).push([e.i, "\n.unselectable{\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n", ""]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(429); n(33); n(206), r.module("dbt").directive("docsSearch", ["$sce", "project", function (e, t) { return { scope: { query: "=", results: "=", onSelect: "&" }, replace: !0, templateUrl: i, link: function (n) { n.max_results = 20, n.show_all = !1, n.max_results_columns = 3, n.limit_columns = {}, n.checkboxStatus = { show_names: !1, show_descriptions: !1, show_columns: !1, show_column_descriptions: !1, show_code: !1, show_tags: !1 }, n.limit_search = function (e, t, r) { return t < n.max_results || n.show_all }, n.getState = function (e) { return "dbt." + e.resource_type }, n.getModelName = function (e) { return "source" == e.resource_type ? e.source_name + "." + e.name : "macro" == e.resource_type ? e.package_name + "." + e.name : "metric" == e.resource_type ? e.label : "semantic_model" == e.resource_type || "saved_query" == e.resource_type ? e.name : "exposure" == e.resource_type || "model" == e.resource_type && null != e.version ? e.label : e.name }; function r(e) { return e.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&") } function i(e) { return _.words(e.toLowerCase()) } n.$watchGroup(["query", "checkboxStatus.show_names", "checkboxStatus.show_descriptions", "checkboxStatus.show_columns", "checkboxStatus.show_column_descriptions", "checkboxStatus.show_code", "checkboxStatus.show_tags"], (function () { n.results = function (e, t) { if (!_.some(_.values(t))) return e; let n = [], r = []; const { show_names: i, show_descriptions: o, show_columns: a, show_column_descriptions: s, show_code: l, show_tags: c } = t; return _.each(e, (function (e) { _.each(e.matches, (function (t) { if (!r.includes(e.model.unique_id)) { const u = i && ("name" === t.key || "label" == t.key), d = o && "description" == t.key, p = a && "columns" === t.key, f = s && "column_description" === t.key, h = l && "raw_code" === t.key, g = c && "tags" === t.key; (u || d || p || f || h || g) && (r.push(e.model.unique_id), n.push(e)) } })) })), n }(t.search(n.query), n.checkboxStatus) })), n.shorten = function (e) { if (null != e && e.trim().length > 0 && null != n.query && n.query.trim().length > 0) { let t = e.replace(/\s+/g, " "), o = r(i(n.query)[0]), a = t.search(new RegExp(o)), s = a - 75 < 0 ? 0 : a - 75, l = a + 75 > t.length ? t.length : a + 75; return "..." + t.substring(s, l) + "..." } return e }, n.highlight = function (t) { if (!n.query || !t) return e.trustAsHtml(t); let o = "(" + i(n.query).map(e => r(e)).join(")|(") + ")"; return e.trustAsHtml(t.replace(new RegExp(o, "gi"), '$&')) }, n.$watch("query", (function (e, t) { 0 == e.length && (n.show_all = !1, n.limit_columns = {}) })), n.columnFilter = function (e) { var t = []; let r = i(n.query); for (var o in e) r.every(e => -1 != o.toLowerCase().indexOf(e)) && t.push(o); return t }, n.limitColumns = function (e) { return void 0 !== n.limit_columns[e] ? n.limit_columns[e] : 3 } } } }]) }, function (e, t) { var n = "/components/search/search.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    \n \n
    \n
    \n

    \n {{ query }}\n {{ results.length }} search results\n

    \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n

    \n \n {{result.model.resource_type}}\n

    \n

    \n
    \n
    \n
    \n \n columns:\n \n \n \n Show {{ columnFilter(result.model.columns).length - max_results_columns }} more\n
    \n
    \n \n \n \n
    \n
    \n \n tags:\n \n \n \n
    \n
    \n Show {{ results.length - max_results }} more\n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { e.exports = { getQuoteChar: function (e) { var t = (e || {}).adapter_type; return ["bigquery", "spark", "databricks"].indexOf(t) >= 0 ? "`" : '"' } } }, function (e, t, n) { "use strict"; const r = n(432); n(433); const i = n(21); angular.module("dbt").directive("tableDetails", ["$sce", "$filter", "project", function (e, t, n) { return { scope: { model: "=", extras: "=", exclude: "<" }, templateUrl: r, link: function (e) { function r(e, t) { if (0 == e) return "0 bytes"; if (e < 1 && (e *= 1e6), isNaN(parseFloat(e)) || !isFinite(e)) return "-"; void 0 === t && (t = 0); var n = Math.floor(Math.log(e) / Math.log(1024)); return (e / Math.pow(1024, Math.floor(n))).toFixed(t) + " " + ["bytes", "KB", "MB", "GB", "TB", "PB"][n] } function o(e, n) { return void 0 === n && (n = 2), t("number")(100 * e, n) + "%" } function a(e, n) { return void 0 === n && (n = 0), t("number")(e, n) } function s(e) { var t, r, o = !e.metadata, a = e.metadata || {}; t = e.database ? e.database + "." : "", r = o ? void 0 : "source" == e.resource_type ? t + e.schema + "." + e.identifier : t + e.schema + "." + e.alias; const s = e.group ? function (e) { const { name: t, email: r } = n.project.groups[e].owner, i = []; if (t && i.push(t), r) { const e = i.length > 0 ? `<${r}>` : r; i.push(e) } return i.join(" ") }(`group.${e.package_name}.${e.group}`) : a.owner, l = !(!e.hasOwnProperty("config") || !e.config.hasOwnProperty("contract")) && e.config.contract.enforced; var c, u = [{ name: "Owner", value: s }, { name: "Type", value: o ? void 0 : (c = a.type, "BASE TABLE" == c ? { type: "table", name: "table" } : "LATE BINDING VIEW" == c ? { type: "view", name: "late binding view" } : { type: c.toLowerCase(), name: c.toLowerCase() }).name }, { name: "Package", value: e.package_name }, { name: "Language", value: e.language }, { name: "Relation", value: r }, { name: "Access", value: e.access }, { name: "Version", value: e.version }, { name: "Contract", value: l ? "Enforced" : "Not Enforced" }]; return i.filter(u, (function (e) { return void 0 !== e.value })) } e.details = [], e.extended = [], e.exclude = e.exclude || [], e.meta = null, e._show_expanded = !1, e.show_expanded = function (t) { return void 0 !== t && (e._show_expanded = t), e._show_expanded }, e.hasData = function (e) { return !(!e || i.isEmpty(e)) && (1 != e.length || 0 != e[0].include) }, e.$watch("model", (function (t, n) { i.property(["metadata", "type"])(t); var l, c, u, d = t.hasOwnProperty("sources") && null != t.sources[0] ? t.sources[0].source_meta : null; if (e.meta = t.meta || d, e.details = s(t), e.extended = (l = t.stats, c = { rows: a, row_count: a, num_rows: a, max_varchar: a, pct_used: o, size: r, bytes: r, num_bytes: r }, u = i.sortBy(i.values(l), "label"), i.map(u, (function (e) { var t = i.clone(e), n = c[e.id]; return n && (t.value = n(e.value), t.label = e.label.replace("Approximate", "~"), t.label = e.label.replace("Utilization", "Used")), t }))), e.extras) { var p = i.filter(e.extras, (function (e) { return void 0 !== e.value && null !== e.value })); e.details = e.details.concat(p) } e.show_extended = i.where(e.extended, { include: !0 }).length > 0 })), e.queryTag = function (t) { e.$emit("query", t) } } } }]) }, function (e, t) { var n = "/components/table_details/table_details.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    \n
    Details
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{ k }}
    \n
    {{ v }}
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    Tags
    \n
    \n {{ tag }} \n
    \n
    untagged
    \n
    \n
    \n
    {{ item.name }}
    \n
    {{ item.value }}
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{ item.label }}
    \n
    {{ item.value }}
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t, n) { var r = n(434); "string" == typeof r && (r = [[e.i, r, ""]]); var i = { hmr: !0, transform: void 0, insertInto: void 0 }; n(40)(r, i); r.locals && (e.exports = r.locals) }, function (e, t, n) { (e.exports = n(39)(!1)).push([e.i, "\n\n.details-content {\n table-layout: fixed;\n}\n\n.detail-body {\n white-space: nowrap;\n overflow-x: scroll;\n}\n", ""]) }, function (e, t, n) { "use strict"; const r = n(436), i = n(21); angular.module("dbt").directive("columnDetails", ["project", function (e) { return { scope: { model: "=" }, templateUrl: r, link: function (t) { t.has_test = function (e, t) { return -1 != i.pluck(e.tests, "short").indexOf(t) }, t.has_constraint = function (e, t) { return !!e.hasOwnProperty("constraints") && e.constraints.some(e => e.type === t) }, t.has_more_info = function (e) { var t = e.tests || [], n = e.description || "", r = e.meta || {}, o = e.constraints || []; return t.length || n.length || o.length || !i.isEmpty(r) }, t.toggle_column_expanded = function (e) { t.has_more_info(e) && (e.expanded = !e.expanded) }, t.getState = function (e) { return "dbt." + e.resource_type }, t.get_col_name = function (t) { return e.caseColumn(t) }, t.get_columns = function (e) { var t = i.chain(e.columns).values().sortBy("index").value(); return i.each(t, (function (e, t) { e.index = t })), t } } } }]) }, function (e, t) { var n = "/components/column_details/column_details.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    \n
    \n
    \n Column information is not available for this seed\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    ColumnTypeDescriptionConstraintsData TestsMore?
    \n
    \n {{ get_col_name(column.name) }}\n
    \n
    \n {{ column.type }}

    \n
    \n {{ column.description }}\n \n \n N\n PK\n FK\n C\n +\n \n \n \n U\n N\n F\n A\n +\n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    Details
    \n
    \n
    \n
    \n
    {{ k }}
    \n
    {{ v }}
    \n
    \n
    \n
    \n
    \n\n
    \n
    Description
    \n \n
    \n\n
    \n
    Constraints
    \n
    \n
    \n
    \n
    Name
    \n
    {{ constraint.name }}
    \n
    Type
    \n
    {{ constraint.type }}
    \n
    Expression
    \n
    {{ constraint.expression }}
    \n
    \n
    \n
    \n
    \n\n
    \n
    Generic Data Tests
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t, n) { "use strict"; const r = n(438); n(33), n(439); function i(e) { return "python" === e ? "language-python" : "language-sql" } angular.module("dbt").directive("codeBlock", ["code", "$timeout", function (e, t) { return { scope: { versions: "=", default: "<", language: "=" }, restrict: "E", templateUrl: r, link: function (n, r) { n.selected_version = n.default, n.language_class = i(n.language), n.source = null, n.setSelected = function (r) { n.selected_version = r, n.source = n.versions[r] || ""; const i = n.source.trim(); n.highlighted = e.highlight(i, n.language), t((function () { Prism.highlightAll() })) }, n.titleCase = function (e) { return e.charAt(0).toUpperCase() + e.substring(1) }, n.copied = !1, n.copy_to_clipboard = function () { e.copy_to_clipboard(n.source), n.copied = !0, setTimeout((function () { n.$apply((function () { n.copied = !1 })) }), 1e3) }, n.$watch("language", (function (e, t) { e && e != t && (n.language_class = i(e)) }), !0), n.$watch("versions", (function (e, t) { if (e) if (n.default) n.setSelected(n.default); else { var r = Object.keys(n.versions); r.length > 0 && n.setSelected(r[0]) } }), !0) } } }]) }, function (e, t) { var n = "/components/code_block/code_block.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    Code
    \n
    \n \n
    \n') }]), e.exports = n }, function (e, t, n) { var r = n(440); "string" == typeof r && (r = [[e.i, r, ""]]); var i = { hmr: !0, transform: void 0, insertInto: void 0 }; n(40)(r, i); r.locals && (e.exports = r.locals) }, function (e, t, n) { (e.exports = n(39)(!1)).push([e.i, "pre.code {\n border: none !important;\n overflow-y: visible !important;\n overflow-x: scroll !important;\n padding-bottom: 10px;\n}\n\npre.code code {\n font-family: Monaco, monospace !important;\n font-weight: 400 !important;\n}\n\n.line-numbers-rows {\n border: none !important;\n}\n", ""]) }, function (e, t, n) { "use strict"; const r = n(442); angular.module("dbt").directive("macroArguments", [function () { return { scope: { macro: "=" }, templateUrl: r, link: function (e) { _.each(e.macro.arguments, (function (e) { e.expanded = !1 })) } } }]) }, function (e, t) { var n = "/components/macro_arguments/index.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n
    \n
    \n Details are not available for this macro. This may be due to the fact that this macro doesn\'t have any\n arguments or that they haven\'t been documented yet.\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    ArgumentTypeDescriptionMore?
    \n
    \n {{ arg.name }}\n
    \n
    \n {{ arg.type }}

    \n
    \n {{ arg.description }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    Description
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t, n) { "use strict"; const r = n(444); angular.module("dbt").directive("referenceList", ["$state", function (e) { return { scope: { references: "=", node: "=" }, restrict: "E", templateUrl: r, link: function (t) { t.selected_type = null, t.setType = function (e) { t.selected_type = e, t.nodes = t.references[t.selected_type] }, t.getNodeUrl = function (t) { var n = "dbt." + t.resource_type; return e.href(n, { unique_id: t.unique_id, "#": null }) }, t.mapResourceType = function (e) { return "model" == e ? "Models" : "seed" == e ? "Seeds" : "test" == e ? "Data Tests" : "unit_test" == e ? "Unit Tests" : "snapshot" == e ? "Snapshots" : "analysis" == e ? "Analyses" : "macro" == e ? "Macros" : "exposure" == e ? "Exposures" : "metric" == e ? "Metrics" : "semantic_model" == e ? "Semantic Models" : "saved_query" == e ? "Saved Queries" : "operation" == e ? "Operations" : "Nodes" }, t.$watch("references", (function (e) { e && _.size(e) > 0 ? (t.selected_type = _.keys(e)[0], t.has_references = !0, t.nodes = t.references[t.selected_type]) : t.has_references = !1 })) } } }]) }, function (e, t) { var n = "/components/references/index.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    \n
    \n No resources reference this {{ node.resource_type }}\n
    \n
    \n \n
    \n \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t, n) { n(446), n(448), n(449), n(450), n(451), n(452), n(453), n(454), n(455), n(456), n(457), n(458) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("ModelCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.tab = t.params.tab, e.project = n, e.codeService = r, e.versions = {}, e.copied = !1, e.copy_to_clipboard = function (t) { r.copy_to_clipboard(t), e.copied = !0, setTimeout((function () { e.$apply((function () { e.copied = !1 })) }), 1e3) }, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.language = n.language; e.versions = { Source: e.model.raw_code, Compiled: e.model.compiled_code || "\n-- compiled code not found for this model\n" }, setTimeout((function () { o() }), 0) })) }]) }, function (e, t, n) { (e.exports = n(39)(!1)).push([e.i, "\n.nav-tabs li.nav-pull-right {\n flex: 1 0 auto;\n text-align: right;\n}\n\ntr.column-row-selected {\n\n}\n\ntd.column-expanded{\n padding: 0px !important;\n}\n\ntd.column-expanded > div {\n padding: 5px 10px;\n margin-left: 20px;\n height: 100%;\n\n border-left: 1px solid #ccc !important;\n}\n", ""]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("SourceCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.project = n, e.codeService = r, e.extra_table_fields = [], e.versions = {}, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.versions = { "Sample SQL": r.generateSourceSQL(e.model) }, e.extra_table_fields = [{ name: "Loader", value: e.model.loader }, { name: "Source", value: e.model.source_name }] })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("SeedCtrl", ["$scope", "$state", "project", "code", "$transitions", "$anchorScroll", "$location", function (e, t, n, r, o, a, s) { e.model_uid = t.params.unique_id, e.tab = t.params.tab, e.project = n, e.codeService = r, e.versions = {}, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.versions = { "Example SQL": r.generateSourceSQL(e.model) } })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("SnapshotCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.tab = t.params.tab, e.project = n, e.codeService = r, e.versions = {}, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.language = n.language; e.versions = { Source: e.model.raw_code, Compiled: e.model.compiled_code || "Compiled SQL is not available for this snapshot" }, setTimeout((function () { o() }), 0) })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("TestCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.tab = t.params.tab, e.project = n, e.codeService = r, e.versions = {}, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.language = n.language; e.versions = { Source: e.model.raw_code, Compiled: e.model.compiled_code || "\n-- compiled code not found for this model\n" }, setTimeout((function () { o() }), 0) })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(21), o = n(24); n(25), r.module("dbt").controller("MacroCtrl", ["$scope", "$state", "project", "code", "$transitions", "$anchorScroll", "$location", function (e, t, n, r, a, s, l) { e.model_uid = t.params.unique_id, e.tab = t.params.tab, e.project = n, e.codeService = r, e.macro = {}, n.ready((function (t) { let n = t.macros[e.model_uid]; if (e.macro = n, e.references = o.getMacroReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = o.getMacroParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.macro.is_adapter_macro) { var r = t.metadata.adapter_type; e.versions = n.impls, n.impls[r] ? e.default_version = r : n.impls.default ? e.default_version = "default" : e.default_version = i.keys(n.impls)[0] } else e.default_version = "Source", e.versions = { Source: e.macro.macro_sql } })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("AnalysisCtrl", ["$scope", "$state", "project", "code", "$transitions", "$anchorScroll", "$location", function (e, t, n, r, o, a, s) { e.model_uid = t.params.unique_id, e.project = n, e.codeService = r, e.default_version = "Source", e.versions = { Source: "", Compiled: "" }, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.language = n.language, e.versions = { Source: e.model.raw_code, Compiled: e.model.compiled_code } })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("ExposureCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.project = n, e.codeService = r, e.extra_table_fields = [], e.versions = {}, e.exposure = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; var r; e.exposure = n, e.parents = i.getParents(t, n), e.parentsLength = e.parents.length, e.language = n.language, e.exposure.owner.name && e.exposure.owner.email ? r = `${e.exposure.owner.name} <${e.exposure.owner.email}>` : e.exposure.owner.name ? r = "" + e.exposure.owner.name : e.exposure.owner.email && (r = "" + e.exposure.owner.email), e.extra_table_fields = [{ name: "Maturity", value: e.exposure.maturity }, { name: "Owner", value: r }, { name: "Exposure name", value: e.exposure.name }] })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("MetricCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.project = n, e.codeService = r, e.extra_table_fields = [], e.versions = {}, e.metric = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.metric = n, e.parents = i.getParents(t, n), e.parentsLength = e.parents.length; const r = "expression" === e.metric.type ? "Expression metric" : "Aggregate metric"; e.extra_table_fields = [{ name: "Metric Type", value: r }, { name: "Metric name", value: e.metric.name }] })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("SemanticModelCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.project = n, e.codeService = r, e.extra_table_fields = [], e.versions = {}, e.semantic_model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.semantic_model = n, e.parents = i.getParents(t, n), e.parentsLength = e.parents.length; const r = "expression" === e.semantic_model.type ? "Expression semantic_model" : "Aggregate semantic_model"; e.extra_table_fields = [{ name: "Semantic Model Type", value: r }, { name: "Semantic Model name", value: e.semantic_model.name }] })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("SavedQueryCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.project = n, e.codeService = r, e.extra_table_fields = [], e.versions = {}, e.saved_query = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.saved_query = n, e.parents = i.getParents(t, n), e.parentsLength = e.parents.length; const r = "expression" === e.saved_query.type ? "Expression saved_query" : "Aggregate saved_query"; e.extra_table_fields = [{ name: "Saved Query Type", value: r }, { name: "Saved Query name", value: e.saved_query.name }] })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("OperationCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.tab = t.params.tab, e.project = n, e.codeService = r, e.versions = {}, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.language = n.language; e.versions = { Source: e.model.raw_code, Compiled: e.model.compiled_code || "\n-- compiled code not found for this model\n" }, setTimeout((function () { o() }), 0) })) }]) }, function (e, t, n) { "use strict"; n(8).module("dbt").controller("GraphCtrl", ["$scope", "$state", "$window", "graph", "project", "selectorService", function (e, t, n, r, i, o) { function a(e) { return e && "source" == e.resource_type ? "source:" + e.source_name + "." + e.name : e && "exposure" == e.resource_type ? "exposure:" + e.name : e && "metric" == e.resource_type ? "metric:" + e.name : e && "semantic_model" == e.resource_type ? "semantic_model:" + e.name : e && "saved_query" == e.resource_type ? "saved_query:" + e.name : e && "model" == e.resource_type && null != e.version ? e.label : e.name ? e.name : "*" } e.graph = r.graph, e.graphService = r, e.graphRendered = function (e) { r.setGraphReady(e) }, e.$watch((function () { return t.params.unique_id }), (function (e, t) { e && e != t && i.find_by_id(e, (function (e) { e && ("sidebar" == r.orientation ? r.showVerticalGraph(a(e), !1) : r.showFullGraph(a(e))) })), e || o.clearViewNode() })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(21), o = n(33), a = n(461); n(462), n(206), n(470), n(472), n(475), n(479), r.module("dbt").controller("MainController", ["$scope", "$route", "$state", "project", "graph", "selectorService", "trackingService", "locationService", "$transitions", function (e, t, n, r, s, l, c, u, d) { function p(t) { e.model_uid = t; var n = r.node(t); n && l.resetSelection(n) } function f(e) { e && setTimeout((function () { var t = o("*[data-nav-unique-id='" + e + "']"); t.length && t[0].scrollIntoView && t[0].scrollIntoView({ behavior: "smooth", block: "center", inline: "center" }) }), 1) } e.tree = { database: {}, project: {}, sources: {} }, e.search = { query: "", results: [], is_focused: !1 }, e.logo = a, e.model_uid = null, e.project = {}, o("body").bind("keydown", (function (e) { "t" == event.key && "INPUT" != event.target.tagName && (o("#search").focus(), event.preventDefault()) })), e.onSearchFocus = function (t, n) { e.search.is_focused = n }, e.clearSearch = function () { e.search.is_focused = !1, e.search.query = "", e.search.results = [], o("#search").blur() }, e.$on("clearSearch", (function () { e.clearSearch() })), e.$on("query", (function (t, n) { e.search.is_focused = !0, e.search.query = n })), e.onSearchKeypress = function (t) { "Escape" == t.key && (e.clearSearch(), t.preventDefault()) }, r.getModelTree(n.params.unique_id, (function (t) { e.tree.database = t.database, e.tree.project = t.project, e.tree.sources = t.sources, e.tree.exposures = t.exposures, e.tree.metrics = t.metrics, e.tree.semantic_models = t.semantic_models, e.tree.saved_queries = t.saved_queries, e.tree.groups = t.groups, setTimeout((function () { f(e.model_uid) })) })), d.onSuccess({}, (function (t, n) { var i = t.router.globals.params, o = l.getViewNode(), a = o ? o.unique_id : null, s = i.unique_id, u = !0; if (t.from().name == t.to().name && a == s && (u = !1), u && i.unique_id) { var d = r.updateSelected(i.unique_id); e.tree.database = d.database, e.tree.groups = d.groups, e.tree.project = d.project, e.tree.sources = d.sources, e.search.query = "", p(i.unique_id), setTimeout((function () { f(i.unique_id) })) } u && c.track_pageview() })), e.$watch("search.query", (function (t) { e.search.results = function (t) { if ("" === e.search.query) return t; let n = { name: 10, tags: 5, description: 3, raw_code: 2, columns: 1 }; return i.each(t, (function (t) { t.overallWeight = 0, i.each(Object.keys(n), (function (r) { if (null != t.model[r]) { let o = 0, a = t.model[r], s = e.search.query.toLowerCase(); if ("columns" === r) i.each(a, (function (e) { if (e.name) { let t = e.name.toLowerCase(), n = 0; for (; -1 != n;)n = t.indexOf(s, n), -1 != n && (o++, n++) } })); else if ("tags" === r) i.each(a, (function (e) { let t = e.toLowerCase(), n = 0; for (; -1 != n;)n = t.indexOf(s, n), -1 != n && (o++, n++) })); else { a = a.toLowerCase(); let e = 0; for (; -1 != e;)e = a.indexOf(s, e), -1 != e && (o++, e++) } t.overallWeight += o * n[r] } })) })), t }(r.search(t)) })), r.init(), r.ready((function (t) { e.project = t, e.search.results = r.search(""); var o = i.unique(i.pluck(i.values(t.nodes), "package_name")).sort(), a = [null]; i.each(t.nodes, (function (e) { var t = e.tags; a = i.union(a, t).sort() })), l.init({ packages: o, tags: a }), p(n.params.unique_id); var d = u.parseState(n.params); d.show_graph && s.ready((function () { i.assign(l.selection.dirty, d.selected); var e = l.updateSelection(); s.updateGraph(e) })); var f = t.metadata || {}; c.init({ track: f.send_anonymous_usage_stats, project_id: f.project_id }) })) }]) }, function (e, t) { e.exports = "data:image/svg+xml,%3Csvg width='242' height='90' viewBox='0 0 242 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath d='M240.384 74.5122L239.905 75.8589H239.728L239.249 74.5156V75.8589H238.941V74.0234H239.324L239.816 75.3872L240.309 74.0234H240.691V75.8589H240.384V74.5122ZM238.671 74.3003H238.169V75.8589H237.858V74.3003H237.352V74.0234H238.671V74.3003Z' fill='%23262A38'/%3E %3Cpath d='M154.123 13.915V75.3527H141.672V69.0868C140.37 71.2839 138.499 73.0742 136.22 74.2134C133.779 75.434 131.012 76.085 128.246 76.085C124.828 76.1664 121.41 75.1899 118.562 73.2369C115.633 71.2839 113.354 68.5986 111.889 65.425C110.262 61.7631 109.448 57.8572 109.529 53.8698C109.448 49.8825 110.262 45.9765 111.889 42.3961C113.354 39.3038 115.633 36.6185 118.481 34.7469C121.41 32.8753 124.828 31.9801 128.246 32.0615C130.931 32.0615 133.616 32.6311 135.976 33.8517C138.255 34.991 140.126 36.6999 141.428 38.8156V18.0651L154.123 13.915ZM139.15 63.2279C140.777 61.1121 141.672 58.0199 141.672 54.0326C141.672 50.0452 140.859 47.0344 139.15 44.9187C137.441 42.8029 134.755 41.5823 131.989 41.6637C129.222 41.5009 126.537 42.7215 124.746 44.8373C123.038 46.953 122.142 49.9639 122.142 53.8698C122.142 57.8572 123.038 60.9494 124.746 63.1465C126.455 65.3436 129.222 66.5642 131.989 66.4828C135.081 66.4828 137.522 65.3436 139.15 63.2279Z' fill='%23262A38'/%3E %3Cpath d='M198.635 34.6655C201.564 36.5371 203.843 39.2225 205.226 42.3147C206.853 45.8952 207.667 49.8011 207.586 53.7885C207.667 57.7758 206.853 61.7632 205.226 65.3436C203.761 68.5172 201.483 71.2026 198.553 73.1556C195.705 75.0272 192.287 76.0037 188.87 75.9223C186.103 76.0037 183.336 75.3527 180.895 74.0507C178.617 72.9114 176.745 71.1212 175.524 68.9241V75.2713H162.993V18.0651L175.606 13.915V38.9783C176.826 36.7812 178.698 34.991 180.976 33.8517C183.418 32.5498 186.103 31.8988 188.87 31.9801C192.287 31.8988 195.705 32.8753 198.635 34.6655ZM192.45 63.1465C194.159 60.9494 194.973 57.8572 194.973 53.7885C194.973 49.8825 194.159 46.8716 192.45 44.7559C190.741 42.6402 188.381 41.5823 185.289 41.5823C182.523 41.4196 179.837 42.6402 178.047 44.8373C176.338 47.0344 175.524 50.0452 175.524 53.9512C175.524 57.9386 176.338 61.0308 178.047 63.1465C179.756 65.3436 182.441 66.5642 185.289 66.4015C188.056 66.5642 190.741 65.3436 192.45 63.1465Z' fill='%23262A38'/%3E %3Cpath d='M225 42.4774V58.915C225 61.2749 225.651 62.9838 226.791 64.0416C228.093 65.1809 229.801 65.7505 231.592 65.6691C232.975 65.6691 234.44 65.425 235.742 65.0995V74.8644C233.382 75.6782 230.941 76.085 228.499 76.0037C223.292 76.0037 219.304 74.5389 216.537 71.6094C213.771 68.68 212.387 64.5299 212.387 59.1592V23.1103L225 19.0416V33.038H235.742V42.4774H225Z' fill='%23262A38'/%3E %3Cpath d='M86.1754 3.74322C88.2911 5.77758 89.6745 8.46293 90 11.3924C90 12.613 89.6745 13.4268 88.9421 14.9729C88.2098 16.519 79.1772 32.1429 76.4919 36.4557C74.9458 38.9783 74.132 41.9892 74.132 44.9186C74.132 47.9295 74.9458 50.859 76.4919 53.3816C79.1772 57.6944 88.2098 73.3996 88.9421 74.9457C89.6745 76.4919 90 77.2242 90 78.4448C89.6745 81.3743 88.3725 84.0597 86.2568 86.0127C84.2224 88.1284 81.5371 89.5118 78.689 89.7559C77.4684 89.7559 76.6546 89.4304 75.1899 88.698C73.7251 87.9656 57.7758 79.1772 53.4629 76.4919C53.1374 76.3291 52.8119 76.085 52.4051 75.9222L31.085 63.3092C31.5732 67.3779 33.3635 71.2839 36.2929 74.132C36.8626 74.7016 37.4322 75.1899 38.0832 75.6781C37.5949 75.9222 37.0253 76.1664 36.5371 76.4919C32.2242 79.1772 16.519 88.2098 14.9729 88.9421C13.4268 89.6745 12.6944 90 11.3924 90C8.46293 89.6745 5.77758 88.3725 3.82459 86.2568C1.70886 84.2224 0.325497 81.5371 0 78.6076C0.0813743 77.387 0.406872 76.1664 1.05787 75.1085C1.79024 73.5624 10.8228 57.8571 13.5081 53.5443C15.0542 51.0217 15.868 48.0922 15.868 45.0814C15.868 42.0705 15.0542 39.141 13.5081 36.6184C10.8228 32.1429 1.70886 16.4376 1.05787 14.8915C0.406872 13.8336 0.0813743 12.613 0 11.3924C0.325497 8.46293 1.62749 5.77758 3.74322 3.74322C5.77758 1.62749 8.46293 0.325497 11.3924 0C12.613 0.0813743 13.8336 0.406872 14.9729 1.05787C16.2749 1.62749 27.7486 8.30018 33.8517 11.8807L35.2351 12.6944C35.7233 13.0199 36.1302 13.264 36.4557 13.4268L37.1067 13.8336L58.8336 26.6908C58.3454 21.8083 55.8228 17.3327 51.9168 14.3219C52.4051 14.0778 52.9747 13.8336 53.4629 13.5081C57.7758 10.8228 73.481 1.70886 75.0271 1.05787C76.085 0.406872 77.3056 0.0813743 78.6076 0C81.4557 0.325497 84.1411 1.62749 86.1754 3.74322ZM46.1392 50.7776L50.7776 46.1392C51.4286 45.4882 51.4286 44.5118 50.7776 43.8608L46.1392 39.2224C45.4882 38.5714 44.5118 38.5714 43.8608 39.2224L39.2224 43.8608C38.5714 44.5118 38.5714 45.4882 39.2224 46.1392L43.8608 50.7776C44.4304 51.3472 45.4882 51.3472 46.1392 50.7776Z' fill='%23FF694A'/%3E %3C/svg%3E" }, function (e, t, n) { "use strict"; n.r(t); var r = n(63), i = n.n(r); n(463), n(464), n(465), n(466), n(468); const o = n(8), a = (n(33), n(21)); window.Prism = i.a, o.module("dbt").factory("code", ["$sce", function (e) { var t = { copied: !1, highlight: function (t, n = "sql") { if ("sql" == n) var r = i.a.highlight(t, i.a.languages.sql, "sql"); else if ("python" == n) r = i.a.highlight(t, i.a.languages.python, "python"); return e.trustAsHtml(r) }, copy_to_clipboard: function (e) { var t = document.createElement("textarea"); t.value = e, t.setAttribute("readonly", ""), t.style.position = "absolute", t.style.left = "-9999px", document.body.appendChild(t), t.select(), document.execCommand("copy"), document.body.removeChild(t) }, generateSourceSQL: function (e) { var t = ["select"], n = a.size(e.columns), r = a.keys(e.columns); a.each(r, (function (e, r) { var i = " " + e; r + 1 != n && (i += ","), t.push(i) })); const i = (e.database ? e.database + "." : "") + e.schema + "." + e.identifier; return t.push("from " + i), t.join("\n") } }; return t }]) }, function (e, t) { Prism.languages.sql = { comment: { pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/, lookbehind: !0 }, variable: [{ pattern: /@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/, greedy: !0 }, /@[\w.$]+/], string: { pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/, greedy: !0, lookbehind: !0 }, identifier: { pattern: /(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/, greedy: !0, lookbehind: !0, inside: { punctuation: /^`|`$/ } }, function: /\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i, keyword: /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i, boolean: /\b(?:FALSE|NULL|TRUE)\b/i, number: /\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i, operator: /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i, punctuation: /[;[\]()`,.]/ } }, function (e, t) { Prism.languages.python = { comment: { pattern: /(^|[^\\])#.*/, lookbehind: !0, greedy: !0 }, "string-interpolation": { pattern: /(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i, greedy: !0, inside: { interpolation: { pattern: /((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/, lookbehind: !0, inside: { "format-spec": { pattern: /(:)[^:(){}]+(?=\}$)/, lookbehind: !0 }, "conversion-option": { pattern: /![sra](?=[:}]$)/, alias: "punctuation" }, rest: null } }, string: /[\s\S]+/ } }, "triple-quoted-string": { pattern: /(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i, greedy: !0, alias: "string" }, string: { pattern: /(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i, greedy: !0 }, function: { pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g, lookbehind: !0 }, "class-name": { pattern: /(\bclass\s+)\w+/i, lookbehind: !0 }, decorator: { pattern: /(^[\t ]*)@\w+(?:\.\w+)*/m, lookbehind: !0, alias: ["annotation", "punctuation"], inside: { punctuation: /\./ } }, keyword: /\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/, builtin: /\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/, boolean: /\b(?:False|None|True)\b/, number: /\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i, operator: /[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/, punctuation: /[{}[\];(),.:]/ }, Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest = Prism.languages.python, Prism.languages.py = Prism.languages.python }, function (e, t) { !function () { if ("undefined" != typeof Prism && "undefined" != typeof document) { var e = /\n(?!$)/g, t = Prism.plugins.lineNumbers = { getLine: function (e, t) { if ("PRE" === e.tagName && e.classList.contains("line-numbers")) { var n = e.querySelector(".line-numbers-rows"); if (n) { var r = parseInt(e.getAttribute("data-start"), 10) || 1, i = r + (n.children.length - 1); t < r && (t = r), t > i && (t = i); var o = t - r; return n.children[o] } } }, resize: function (e) { r([e]) }, assumeViewportIndependence: !0 }, n = void 0; window.addEventListener("resize", (function () { t.assumeViewportIndependence && n === window.innerWidth || (n = window.innerWidth, r(Array.prototype.slice.call(document.querySelectorAll("pre.line-numbers")))) })), Prism.hooks.add("complete", (function (t) { if (t.code) { var n = t.element, i = n.parentNode; if (i && /pre/i.test(i.nodeName) && !n.querySelector(".line-numbers-rows") && Prism.util.isActive(n, "line-numbers")) { n.classList.remove("line-numbers"), i.classList.add("line-numbers"); var o, a = t.code.match(e), s = a ? a.length + 1 : 1, l = new Array(s + 1).join(""); (o = document.createElement("span")).setAttribute("aria-hidden", "true"), o.className = "line-numbers-rows", o.innerHTML = l, i.hasAttribute("data-start") && (i.style.counterReset = "linenumber " + (parseInt(i.getAttribute("data-start"), 10) - 1)), t.element.appendChild(o), r([i]), Prism.hooks.run("line-numbers", t) } } })), Prism.hooks.add("line-numbers", (function (e) { e.plugins = e.plugins || {}, e.plugins.lineNumbers = !0 })) } function r(t) { if (0 != (t = t.filter((function (e) { var t = function (e) { if (!e) return null; return window.getComputedStyle ? getComputedStyle(e) : e.currentStyle || null }(e)["white-space"]; return "pre-wrap" === t || "pre-line" === t }))).length) { var n = t.map((function (t) { var n = t.querySelector("code"), r = t.querySelector(".line-numbers-rows"); if (n && r) { var i = t.querySelector(".line-numbers-sizer"), o = n.textContent.split(e); i || ((i = document.createElement("span")).className = "line-numbers-sizer", n.appendChild(i)), i.innerHTML = "0", i.style.display = "block"; var a = i.getBoundingClientRect().height; return i.innerHTML = "", { element: t, lines: o, lineHeights: [], oneLinerHeight: a, sizer: i } } })).filter(Boolean); n.forEach((function (e) { var t = e.sizer, n = e.lines, r = e.lineHeights, i = e.oneLinerHeight; r[n.length - 1] = void 0, n.forEach((function (e, n) { if (e && e.length > 1) { var o = t.appendChild(document.createElement("span")); o.style.display = "block", o.textContent = e } else r[n] = i })) })), n.forEach((function (e) { for (var t = e.sizer, n = e.lineHeights, r = 0, i = 0; i < n.length; i++)void 0 === n[i] && (n[i] = t.children[r++].getBoundingClientRect().height) })), n.forEach((function (e) { var t = e.sizer, n = e.element.querySelector(".line-numbers-rows"); t.style.display = "none", t.innerHTML = "", e.lineHeights.forEach((function (e, t) { n.children[t].style.height = e + "px" })) })) } } }() }, function (e, t, n) { var r = n(467); "string" == typeof r && (r = [[e.i, r, ""]]); var i = { hmr: !0, transform: void 0, insertInto: void 0 }; n(40)(r, i); r.locals && (e.exports = r.locals) }, function (e, t, n) { (e.exports = n(39)(!1)).push([e.i, 'pre[class*="language-"].line-numbers {\n\tposition: relative;\n\tpadding-left: 3.8em;\n\tcounter-reset: linenumber;\n}\n\npre[class*="language-"].line-numbers > code {\n\tposition: relative;\n\twhite-space: inherit;\n}\n\n.line-numbers .line-numbers-rows {\n\tposition: absolute;\n\tpointer-events: none;\n\ttop: 0;\n\tfont-size: 100%;\n\tleft: -3.8em;\n\twidth: 3em; /* works for line-numbers below 1000 lines */\n\tletter-spacing: -1px;\n\tborder-right: 1px solid #999;\n\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n}\n\n\t.line-numbers-rows > span {\n\t\tdisplay: block;\n\t\tcounter-increment: linenumber;\n\t}\n\n\t\t.line-numbers-rows > span:before {\n\t\t\tcontent: counter(linenumber);\n\t\t\tcolor: #999;\n\t\t\tdisplay: block;\n\t\t\tpadding-right: 0.8em;\n\t\t\ttext-align: right;\n\t\t}\n', ""]) }, function (e, t, n) { var r = n(469); "string" == typeof r && (r = [[e.i, r, ""]]); var i = { hmr: !0, transform: void 0, insertInto: void 0 }; n(40)(r, i); r.locals && (e.exports = r.locals) }, function (e, t, n) { (e.exports = n(39)(!1)).push([e.i, '/**\n * GHColors theme by Avi Aryan (http://aviaryan.in)\n * Inspired by Github syntax coloring\n */\n\ncode[class*="language-"],\npre[class*="language-"] {\n\tcolor: #393A34;\n\tfont-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;\n\tdirection: ltr;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tfont-size: .9em;\n\tline-height: 1.2em;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre > code[class*="language-"] {\n\tfont-size: 1em;\n}\n\npre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,\ncode[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {\n\tbackground: #b3d4fc;\n}\n\npre[class*="language-"]::selection, pre[class*="language-"] ::selection,\ncode[class*="language-"]::selection, code[class*="language-"] ::selection {\n\tbackground: #b3d4fc;\n}\n\n/* Code blocks */\npre[class*="language-"] {\n\tpadding: 1em;\n\tmargin: .5em 0;\n\toverflow: auto;\n\tborder: 1px solid #dddddd;\n\tbackground-color: white;\n}\n\n/* Inline code */\n:not(pre) > code[class*="language-"] {\n\tpadding: .2em;\n\tpadding-top: 1px;\n\tpadding-bottom: 1px;\n\tbackground: #f8f8f8;\n\tborder: 1px solid #dddddd;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: #999988;\n\tfont-style: italic;\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n.token.string,\n.token.attr-value {\n\tcolor: #e3116c;\n}\n\n.token.punctuation,\n.token.operator {\n\tcolor: #393A34; /* no highlight */\n}\n\n.token.entity,\n.token.url,\n.token.symbol,\n.token.number,\n.token.boolean,\n.token.variable,\n.token.constant,\n.token.property,\n.token.regex,\n.token.inserted {\n\tcolor: #36acaa;\n}\n\n.token.atrule,\n.token.keyword,\n.token.attr-name,\n.language-autohotkey .token.selector {\n\tcolor: #00a4db;\n}\n\n.token.function,\n.token.deleted,\n.language-autohotkey .token.tag {\n\tcolor: #9a050f;\n}\n\n.token.tag,\n.token.selector,\n.language-autohotkey .token.keyword {\n\tcolor: #00009f;\n}\n\n.token.important,\n.token.function,\n.token.bold {\n\tfont-weight: bold;\n}\n\n.token.italic {\n\tfont-style: italic;\n}\n', ""]) }, function (e, t, n) { n(33); const r = n(21), i = n(148), o = n(203), a = n(471); angular.module("dbt").factory("graph", ["$state", "$window", "$q", "selectorService", "project", "locationService", function (e, t, n, s, l, c) { var u = { vertical: { userPanningEnabled: !1, boxSelectionEnabled: !1, maxZoom: 1.5 }, horizontal: { userPanningEnabled: !0, boxSelectionEnabled: !1, maxZoom: 1, minZoom: .05 } }, d = { none: { name: "null" }, left_right: { name: "dagre", rankDir: "LR", rankSep: 200, edgeSep: 30, nodeSep: 50 }, top_down: { name: "preset", positions: function (t) { var n = e.params.unique_id; if (!n) return { x: 0, y: 0 }; var a = p.graph.pristine.dag, s = r.sortBy(o.ancestorNodes(a, n, 1)), l = r.sortBy(o.descendentNodes(a, n, 1)), c = r.partial(r.includes, s), u = r.partial(r.includes, l), d = a.filterNodes(c), f = a.filterNodes(u); return function (e, t, n, i) { var o, a = 100 / (1 + Math.max(t.length, n.length)); if (e == i) return { x: 0, y: 0 }; if (r.includes(t, i)) o = { set: t, index: r.indexOf(t, i), factor: -1, type: "parent" }; else { if (!r.includes(n, i)) return { x: 0, y: 0 }; o = { set: n, index: r.indexOf(n, i), factor: 1, type: "child" } } var s = o.set.length; if ("parent" == o.type) var l = { x: (0 + o.index) * a, y: -200 - 100 * (s - o.index - 1) }; else l = { x: (0 + o.index) * a, y: 200 + 100 * (s - o.index - 1) }; return l }(n, i.alg.topsort(d), i.alg.topsort(f).reverse(), t.data("id")) } } }, p = { loading: !0, loaded: n.defer(), graph_element: null, orientation: "sidebar", expanded: !1, graph: { options: u.vertical, pristine: { nodes: {}, edges: {}, dag: null }, elements: [], layout: d.none, style: [{ selector: "edge.vertical", style: { "curve-style": "unbundled-bezier", "target-arrow-shape": "triangle-backcurve", "target-arrow-color": "#027599", "arrow-scale": 1.5, "line-color": "#027599", width: 3, "target-distance-from-node": "5px", "source-endpoint": "0% 50%", "target-endpoint": "0deg" } }, { selector: "edge.horizontal", style: { "curve-style": "unbundled-bezier", "target-arrow-shape": "triangle-backcurve", "target-arrow-color": "#006f8a", "arrow-scale": 1.5, "target-distance-from-node": "10px", "source-distance-from-node": "5px", "line-color": "#006f8a", width: 3, "source-endpoint": "50% 0%", "target-endpoint": "270deg" } }, { selector: "edge[selected=1]", style: { "line-color": "#bd6bb6", "target-arrow-color": "#bd6bb6", "z-index": 1 } }, { selector: 'node[display="none"]', style: { display: "none" } }, { selector: "node.vertical", style: { "text-margin-x": "5px", "background-color": "#0094b3", "border-color": "#0094b3", "font-size": "16px", shape: "ellipse", color: "#fff", width: "5px", height: "5px", padding: "5px", content: "data(label)", "font-weight": 300, "text-valign": "center", "text-halign": "right" } }, { selector: "node.horizontal", style: { "background-color": "#0094b3", "border-color": "#0094b3", "font-size": "24px", shape: "roundrectangle", color: "#fff", width: "label", height: "label", padding: "12px", content: "data(label)", "font-weight": 300, "font-family": '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Helvetica, Arial, sans-serif', "text-valign": "center", "text-halign": "center", ghost: "yes", "ghost-offset-x": "2px", "ghost-offset-y": "4px", "ghost-opacity": .5, "text-outline-color": "#000", "text-outline-width": "1px", "text-outline-opacity": .2 } }, { selector: 'node[resource_type="source"]', style: { "background-color": "#5fb825", "border-color": "#5fb825" } }, { selector: 'node[resource_type="exposure"]', style: { "background-color": "#ff694b", "border-color": "#ff694b" } }, { selector: 'node[resource_type="metric"]', style: { "background-color": "#ff5688", "border-color": "#ff5688" } }, { selector: 'node[resource_type="semantic_model"]', style: { "background-color": "#ffa8c2", "border-color": "#ffa8c2" } }, { selector: 'node[resource_type="saved_query"]', style: { "background-color": "#ff7f50", "border-color": "#ff7f50" } }, { selector: 'node[language="python"]', style: { "background-color": "#6a5acd", "border-color": "#6a5acd" } }, { selector: "node[node_color]", style: { "background-color": "data(node_color)", "border-color": "data(node_color)" } }, { selector: "node[selected=1]", style: { "background-color": "#bd6bb6", "border-color": "#bd6bb6" } }, { selector: "node.horizontal[selected=1]", style: { "background-color": "#88447d", "border-color": "#88447d" } }, { selector: "node.horizontal.dirty", style: { "background-color": "#919599", "border-color": "#919599" } }, { selector: "node[hidden=1]", style: { "background-color": "#919599", "border-color": "#919599", "background-opacity": .5 } }, { selector: 'node[access="private"]', style: { "background-opacity": .2, "border-width": 2, ghost: "no" } }], ready: function (e) { console.log("graph ready") } } }; function f(e, t, n) { var i = r.map(e, (function (e) { return p.graph.pristine.nodes[e] })), o = []; r.flatten(r.each(e, (function (t) { var n = p.graph.pristine.edges[t]; r.each(n, (function (t) { r.includes(e, t.data.target) && r.includes(e, t.data.source) && o.push(t) })) }))); var s = r.compact(i).concat(r.compact(o)); return r.each(p.graph.elements, (function (e) { e.data.display = "none", e.data.selected = 0, e.data.hidden = 0, e.classes = n })), r.each(s, (function (e) { e.data.display = "element", e.classes = n, t && r.includes(t, e.data.unique_id) && (e.data.selected = 1), r.get(e, ["data", "docs", "show"], !0) || (e.data.hidden = 1); var i = r.get(e, ["data", "docs", "node_color"]); i && a.isValidColor(i) && (e.data.node_color = i) })), p.graph.elements = r.filter(s, (function (e) { return "element" == e.data.display })), e } function h(e, t, n) { var r = p.graph.pristine.dag; if (r) { var i = p.graph.pristine.nodes, o = s.selectNodes(r, i, e), a = n ? o.matched : []; return f(o.selected, a, t) } } return p.setGraphReady = function (e) { p.loading = !1, p.loaded.resolve(), p.graph_element = e }, p.ready = function (e) { p.loaded.promise.then((function () { e(p) })) }, p.manifest = {}, p.packages = [], p.selected_node = null, p.getCanvasHeight = function () { return .8 * t.innerHeight + "px" }, l.ready((function (e) { p.manifest = e, p.packages = r.uniq(r.map(p.manifest.nodes, "package_name")), r.each(r.filter(p.manifest.nodes, (function (e) { var t = r.includes(["model", "seed", "source", "snapshot", "analysis", "exposure", "metric", "semantic_model", "operation", "saved_query"], e.resource_type), n = "test" === e.resource_type && !e.hasOwnProperty("test_metadata"), i = "unit_test" === e.resource_type; return t || n || i })), (function (e) { var t = { group: "nodes", data: r.assign(e, { parent: e.package_name, id: e.unique_id, is_group: "false" }) }; p.graph.pristine.nodes[e.unique_id] = t })), r.each(p.manifest.parent_map, (function (e, t) { r.each(e, (function (e) { var n = p.manifest.nodes[e], i = p.manifest.nodes[t]; if (r.includes(["model", "source", "seed", "snapshot", "metric", "semantic_model", "saved_query"], n.resource_type) && ("test" != i.resource_type || !i.hasOwnProperty("test_metadata"))) { var o = n.unique_id + "|" + i.unique_id, a = { group: "edges", data: { source: n.unique_id, target: i.unique_id, unique_id: o } }, s = i.unique_id; p.graph.pristine.edges[s] || (p.graph.pristine.edges[s] = []), p.graph.pristine.edges[s].push(a) } })) })); var t = new i.Graph({ directed: !0 }); r.each(p.graph.pristine.nodes, (function (e) { t.setNode(e.data.unique_id, e.data.name) })), r.each(p.graph.pristine.edges, (function (e) { r.each(e, (function (e) { t.setEdge(e.data.source, e.data.target) })) })), p.graph.pristine.dag = t, p.graph.elements = r.flatten(r.values(p.graph.pristine.nodes).concat(r.values(p.graph.pristine.edges))), f(t.nodes()) })), p.hideGraph = function () { p.orientation = "sidebar", p.expanded = !1 }, p.showVerticalGraph = function (e, t) { p.orientation = "sidebar", t && (p.expanded = !0); var n = h(r.assign({}, s.options, { include: "+" + e + "+", exclude: "", hops: 1 }), "vertical", !0); return p.graph.layout = d.top_down, p.graph.options = u.vertical, n }, p.showFullGraph = function (e) { p.orientation = "fullscreen", p.expanded = !0; var t = r.assign({}, s.options); e ? (t.include = "+" + e + "+", t.exclude = "") : (t.include = "", t.exclude = ""); var n = h(t, "horizontal", !0); return p.graph.layout = d.left_right, p.graph.options = u.horizontal, c.setState(t), n }, p.updateGraph = function (e) { p.orientation = "fullscreen", p.expanded = !0; var t = h(e, "horizontal", !1); return p.graph.layout = d.left_right, p.graph.options = u.horizontal, c.setState(e), t }, p.deselectNodes = function () { "fullscreen" == p.orientation && p.graph_element.elements().data("selected", 0) }, p.selectNode = function (e) { if ("fullscreen" == p.orientation) { p.graph.pristine.nodes[e]; var t = p.graph.pristine.dag, n = r.indexBy(o.ancestorNodes(t, e)), i = r.indexBy(o.descendentNodes(t, e)); n[e] = e, i[e] = e; var a = p.graph_element; r.each(p.graph.elements, (function (t) { var r = a.$id(t.data.id); n[t.data.source] && n[t.data.target] || i[t.data.source] && i[t.data.target] || t.data.unique_id == e ? r.data("selected", 1) : r.data("selected", 0) })) } }, p.markDirty = function (e) { p.markAllClean(), r.each(e, (function (e) { p.graph_element.$id(e).addClass("dirty") })) }, p.markAllClean = function () { p.graph_element && p.graph_element.elements().removeClass("dirty") }, p }]) }, function (e, t, n) { "use strict"; n.r(t), n.d(t, "isValidColor", (function () { return i })); const r = new Set(["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "ghostwhite", "gold", "goldenrod", "gray", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", "lightsalmon", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen"]); function i(e) { if (!e) return !1; const t = e.trim().toLowerCase(); if ("" === t) return !1; const n = t.match(/^#([A-Fa-f0-9]{3}){1,2}$/), i = r.has(t); return Boolean(n) || i } }, function (e, t, n) { n(33); const r = n(21), i = n(473); angular.module("dbt").factory("selectorService", ["$state", function (e) { var t = { include: "", exclude: "", packages: [], tags: [null], resource_types: ["model", "seed", "snapshot", "source", "test", "unit_test", "analysis", "exposure", "metric", "semantic_model", "saved_query"], depth: 1 }, n = { view_node: null, selection: { clean: r.clone(t), dirty: r.clone(t) }, options: { packages: [], tags: [null], resource_types: ["model", "seed", "snapshot", "source", "test", "analysis", "exposure", "metric", "semantic_model", "unit_test", "saved_query"] }, init: function (e) { r.each(e, (function (e, r) { n.options[r] = e, t[r] = e, n.selection.clean[r] = e, n.selection.dirty[r] = e })) }, resetSelection: function (e) { var i = { include: e && r.includes(["model", "seed", "snapshot"], e.resource_type) ? "+" + e.name + "+" : e && "source" == e.resource_type ? "+source:" + e.source_name + "." + e.name + "+" : e && "exposure" == e.resource_type ? "+exposure:" + e.name : e && "metric" == e.resource_type ? "+metric:" + e.name : e && "semantic_model" == e.resource_type ? "+semantic_model:" + e.name : e && "saved_query" == e.resource_type ? "+saved_query:" + e.name : e && r.includes(["analysis", "test", "unit_test"], e.resource_type) ? "+" + e.name : "" }, o = r.assign({}, t, i); n.selection.clean = r.clone(o), n.selection.dirty = r.clone(o), n.view_node = e }, getViewNode: function () { return n.view_node }, excludeNode: function (e, t) { var r, i = n.selection.dirty.exclude, o = t.parents ? "+" : "", a = t.children ? "+" : "", s = i.length > 0 ? " " : ""; "source" == e.resource_type ? (o += "source:", r = e.source_name + "." + e.name) : ["exposure", "metric", "semantic_model", "saved_query"].indexOf(e.resource_type) > -1 ? (o += e.resource_type + ":", r = e.name) : r = e.name; var l = i + s + o + r + a; return n.selection.dirty.exclude = l, n.updateSelection() }, selectSource: function (e, t) { var r = "source:" + e + (t.children ? "+" : ""); return n.selection.dirty.include = r, n.updateSelection() }, clearViewNode: function () { n.view_node = null }, isDirty: function () { return !r.isEqual(n.selection.clean, n.selection.dirty) }, updateSelection: function () { return n.selection.clean = r.clone(n.selection.dirty), n.selection.clean }, selectNodes: function (e, t, n) { return i.selectNodes(e, t, n) } }; return n }]) }, function (e, t, n) { const r = n(21), i = n(474); function o(e, t) { return t || (t = " "), r.filter(r.uniq(e.split(t)), (function (e) { return e.length > 0 })) } function a(e) { var t = { raw: e, select_at: !1, select_children: !1, children_depth: null, select_parents: !1, parents_depth: null }; const n = new RegExp("" + /^/.source + /(?(\@))?/.source + /(?((?(\d*))\+))?/.source + /((?([\w.]+)):)?/.source + /(?(.*?))/.source + /(?(\+(?(\d*))))?/.source + /$/.source).exec(e).groups; t.select_at = "@" == n.childs_parents, t.select_parents = !!n.parents, t.select_children = !!n.children, n.parents_depth && (t.parents_depth = parseInt(n.parents_depth)), n.children_depth && (t.children_depth = parseInt(n.children_depth)); var r = n.method, i = n.value; return r ? -1 != r.indexOf(".") && ([r, selector_modifier] = r.split(".", 2), i = { config: selector_modifier, value: i }) : r = "implicit", t.selector_type = r, t.selector_value = i, t } function s(e) { var t = o(e, " "); return r.map(t, (function (e) { var t = o(e, ","); return t.length > 1 ? { method: "intersect", selectors: r.map(t, a) } : { method: "none", selectors: r.map([e], a) } })) } function l(e, t) { var n = s(e), i = null, o = null; return r.each(n, (function (e) { var n = "intersect" == e.method ? r.intersection : r.union; r.each(e.selectors, (function (e) { var r = t(e); null === i ? (i = r.matched, o = r.selected) : (i = n(i, r.matched), o = n(o, r.selected)) })) })), { matched: i || [], selected: o || [] } } e.exports = { splitSpecs: o, parseSpec: a, parseSpecs: s, buildSpec: function (e, t, n) { return { include: s(e), exclude: s(t), hops: n } }, applySpec: l, selectNodes: function (e, t, n) { n.include, n.exclude; var o, a = r.partial(i.getNodesFromSpec, e, t, n.hops); r.values(t), o = 0 == n.include.trim().length ? { selected: e.nodes(), matched: [] } : l(n.include, a); var s = l(n.exclude, a), c = o.selected, u = o.matched; c = r.difference(c, s.selected), u = r.difference(u, s.matched); var d = []; return r.each(c, (function (e) { var i = t[e]; i.data.tags || (i.data.tags = []); var o = r.includes(n.packages, i.data.package_name), a = r.intersection(n.tags, i.data.tags).length > 0, s = r.includes(n.tags, null) && 0 == i.data.tags.length, l = r.includes(n.resource_types, i.data.resource_type); o && (a || s) && l || d.push(i.data.unique_id) })), { selected: r.difference(c, d), matched: r.difference(u, d) } } } }, function (e, t, n) { const r = n(21), i = n(203); var o = "fqn", a = "tag", s = "source", l = "exposure", c = "metric", u = "semantic_model", d = "saved_query", p = "group", f = "path", h = "file", g = "package", m = "config", v = "test_name", b = "test_type", y = {}; function x(e, t, n) { var r = e.slice(-1)[0], i = e.slice(-2, -1)[0]; if (t === r) return !0; if (version_options = [i, i + "_" + r, i + "." + r], n && version_options.includes(t)) return !0; var o = e.reduce((e, t) => e.concat(t.split(".")), []), a = t.split("."); if (o.length < a.length) return !1; for (var s = 0; s < a.length; s++) { var l = a[s]; if ("*" == l) return !0; if (o[s] != l) return !1 } return !0 } function w(e, t) { var n = []; return r.each(e, (function (e) { var i = e.data, o = i.fqn, a = null !== i.version; if (o && "source" != i.resource_type && "exposure" != i.resource_type && "metric" != i.resource_type && "semantic_model" != i.resource_type && "saved_query" != i.resource_type) { var s = r.rest(o); (x(o, t, a) || x(s, t, a)) && n.push(i) } })), r.uniq(n) } function k(e, t) { var n = [], i = t.split("/"); return r.each(e, (function (e) { var t = (e.data.original_file_path || "").split("/"), o = !0; r.each(i, (function (e, n) { "*" == e || "" == e || e != t[n] && (o = !1) })), o && n.push(e.data) })), n } function A(e, t) { var n = []; return r.each(e, (function (e) { var i = e.data.original_file_path.split("/"); r.last(i) == t && n.push(e.data) })), n } function E(e, t) { var n = []; return r.each(e, (function (e) { var i = e.data.tags; r.includes(i, t) && n.push(e.data) })), n } function S(e, t) { var n = []; return r.each(e, (function (e) { e.data.package_name == t && n.push(e.data) })), n } function $(e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; r.config && r.config[t.config] == t.value && n.push(r) })), n } function C(e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; r.test_metadata && r.test_metadata.name == t && n.push(r) })), n } function _(e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; if ("test" != r.resource_type) return !1; (r.hasOwnProperty("test_metadata") && ["schema", "generic"].indexOf(t) > -1 || !r.hasOwnProperty("test_metadata") && ["data", "singular"].indexOf(t) > -1) && n.push(r) })), n } function O(e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; if ("source" == r.resource_type) { var i, o, a = r.source_name, s = r.name; -1 != t.indexOf(".") ? [i, o] = t.split(".", 2) : (i = t, o = null), ("*" == i || i == a && "*" === o || i == a && o === s || i == a && null === o) && n.push(e.data) } })), n } y["implicit"] = function (e, t) { var n = w(e, t), i = k(e, t), o = []; t.toLowerCase().endsWith(".sql") && (o = A(e, t)); var a = r.uniq([].concat(r.map(n, "unique_id"), r.map(i, "unique_id"), r.map(o, "unique_id"))); return r.map(a, t => e[t].data) }, y[o] = w, y[a] = E, y[s] = O, y[l] = function (e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; if ("exposure" == r.resource_type) { var i = r.name; ("*" == t || t == i) && n.push(e.data) } })), n }, y[c] = function (e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; if ("metric" == r.resource_type) { var i = r.name; ("*" == t || t == i) && n.push(e.data) } })), n }, y[u] = function (e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; if ("semantic_model" == r.resource_type) { var i = r.name; ("*" == t || t == i) && n.push(e.data) } })), n }, y[d] = function (e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; if ("saved_query" == r.resource_type) { var i = r.name; ("*" == t || t == i) && n.push(e.data) } })), n }, y[p] = function (e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; r.group == t && n.push(r) })), n }, y[f] = k, y[h] = A, y[g] = S, y[m] = $, y[v] = C, y[b] = _, e.exports = { isFQNMatch: x, getNodesByFQN: w, getNodesByTag: E, getNodesBySource: O, getNodesByPath: k, getNodesByPackage: S, getNodesByConfig: $, getNodesByTestName: C, getNodesByTestType: _, getNodesFromSpec: function (e, t, n, o) { const a = y[o.selector_type]; if (!a) return { selected: [], matched: [] }; var s = a(t, o.selector_value), l = [], c = []; return r.each(s, (function (t) { var a = t.unique_id; c.push(t.unique_id); var s = [], u = [], d = []; if (o.select_at && (d = r.union(i.selectAt(e, a))), o.select_parents) { var p = n || o.parents_depth; s = i.ancestorNodes(e, a, p) } if (o.select_children) { p = n || o.children_depth; u = i.descendentNodes(e, a, p) } l = r.union([a], l, u, s, d) })), { selected: l, matched: c } } } }, function (e, t, n) { const r = n(8); n(476); r.module("dbt").factory("trackingService", ["$location", "selectorService", "$rootScope", function (e, t, n) { var r = { initialized: !1, snowplow: null, project_id: null, init: function (e) { r.initialized || (r.initialized = !0, r.project_id = e.project_id, !0 === e.track && r.turn_on_tracking()) }, isHosted: function () { return hostedgetdbt = window.location.hostname.indexOf(".getdbt.com") > -1, hosteddbt = window.location.hostname.indexOf(".dbt.com") > -1, hostedgetdbt || hosteddbt }, turn_on_tracking: function () { var e, t, n, i, o, a; e = window, t = document, n = "script", e[i = "snowplow"] || (e.GlobalSnowplowNamespace = e.GlobalSnowplowNamespace || [], e.GlobalSnowplowNamespace.push(i), e[i] = function () { (e[i].q = e[i].q || []).push(arguments) }, e[i].q = e[i].q || [], o = t.createElement(n), a = t.getElementsByTagName(n)[0], o.async = 1, o.src = "//d1fc8wv8zag5ca.cloudfront.net/2.9.0/sp.js", a.parentNode.insertBefore(o, a)); var s = { appId: "dbt-docs", forceSecureTracker: !0, respectDoNotTrack: !0, userFingerprint: !1, contexts: { webPage: !0 } }; r.isHosted() && (window.location.hostname.indexOf(".getdbt.com") > -1 ? s.cookieDomain = ".getdbt.com" : s.cookieDomain = ".dbt.com"), r.snowplow = window.snowplow, r.snowplow("newTracker", "sp", "fishtownanalytics.sinter-collect.com", s), r.snowplow("enableActivityTracking", 30, 30), r.track_pageview() }, fuzzUrls: function () { r.isHosted() || (r.snowplow("setCustomUrl", "https://fuzzed.getdbt.com/"), r.snowplow("setReferrerUrl", "https://fuzzed.getdbt.com/")) }, getContext: function () { return [{ schema: "iglu:com.dbt/dbt_docs/jsonschema/1-0-0", data: { is_cloud_hosted: r.isHosted(), core_project_id: r.project_id } }] }, track_pageview: function () { if (r.snowplow) { r.fuzzUrls(); r.snowplow("trackPageView", null, r.getContext()) } }, track_event: function (e, t, n, i) { r.snowplow && (r.fuzzUrls(), r.snowplow("trackStructEvent", "dbt-docs", e, t, n, i, r.getContext())) }, track_graph_interaction: function (e, t) { r.snowplow && (r.fuzzUrls(), r.track_event("graph", "interact", e, t)) } }; return r }]) }, function (e, t, n) { var r, i, o, a, s; r = n(477), i = n(204).utf8, o = n(478), a = n(204).bin, (s = function (e, t) { e.constructor == String ? e = t && "binary" === t.encoding ? a.stringToBytes(e) : i.stringToBytes(e) : o(e) ? e = Array.prototype.slice.call(e, 0) : Array.isArray(e) || e.constructor === Uint8Array || (e = e.toString()); for (var n = r.bytesToWords(e), l = 8 * e.length, c = 1732584193, u = -271733879, d = -1732584194, p = 271733878, f = 0; f < n.length; f++)n[f] = 16711935 & (n[f] << 8 | n[f] >>> 24) | 4278255360 & (n[f] << 24 | n[f] >>> 8); n[l >>> 5] |= 128 << l % 32, n[14 + (l + 64 >>> 9 << 4)] = l; var h = s._ff, g = s._gg, m = s._hh, v = s._ii; for (f = 0; f < n.length; f += 16) { var b = c, y = u, x = d, w = p; c = h(c, u, d, p, n[f + 0], 7, -680876936), p = h(p, c, u, d, n[f + 1], 12, -389564586), d = h(d, p, c, u, n[f + 2], 17, 606105819), u = h(u, d, p, c, n[f + 3], 22, -1044525330), c = h(c, u, d, p, n[f + 4], 7, -176418897), p = h(p, c, u, d, n[f + 5], 12, 1200080426), d = h(d, p, c, u, n[f + 6], 17, -1473231341), u = h(u, d, p, c, n[f + 7], 22, -45705983), c = h(c, u, d, p, n[f + 8], 7, 1770035416), p = h(p, c, u, d, n[f + 9], 12, -1958414417), d = h(d, p, c, u, n[f + 10], 17, -42063), u = h(u, d, p, c, n[f + 11], 22, -1990404162), c = h(c, u, d, p, n[f + 12], 7, 1804603682), p = h(p, c, u, d, n[f + 13], 12, -40341101), d = h(d, p, c, u, n[f + 14], 17, -1502002290), c = g(c, u = h(u, d, p, c, n[f + 15], 22, 1236535329), d, p, n[f + 1], 5, -165796510), p = g(p, c, u, d, n[f + 6], 9, -1069501632), d = g(d, p, c, u, n[f + 11], 14, 643717713), u = g(u, d, p, c, n[f + 0], 20, -373897302), c = g(c, u, d, p, n[f + 5], 5, -701558691), p = g(p, c, u, d, n[f + 10], 9, 38016083), d = g(d, p, c, u, n[f + 15], 14, -660478335), u = g(u, d, p, c, n[f + 4], 20, -405537848), c = g(c, u, d, p, n[f + 9], 5, 568446438), p = g(p, c, u, d, n[f + 14], 9, -1019803690), d = g(d, p, c, u, n[f + 3], 14, -187363961), u = g(u, d, p, c, n[f + 8], 20, 1163531501), c = g(c, u, d, p, n[f + 13], 5, -1444681467), p = g(p, c, u, d, n[f + 2], 9, -51403784), d = g(d, p, c, u, n[f + 7], 14, 1735328473), c = m(c, u = g(u, d, p, c, n[f + 12], 20, -1926607734), d, p, n[f + 5], 4, -378558), p = m(p, c, u, d, n[f + 8], 11, -2022574463), d = m(d, p, c, u, n[f + 11], 16, 1839030562), u = m(u, d, p, c, n[f + 14], 23, -35309556), c = m(c, u, d, p, n[f + 1], 4, -1530992060), p = m(p, c, u, d, n[f + 4], 11, 1272893353), d = m(d, p, c, u, n[f + 7], 16, -155497632), u = m(u, d, p, c, n[f + 10], 23, -1094730640), c = m(c, u, d, p, n[f + 13], 4, 681279174), p = m(p, c, u, d, n[f + 0], 11, -358537222), d = m(d, p, c, u, n[f + 3], 16, -722521979), u = m(u, d, p, c, n[f + 6], 23, 76029189), c = m(c, u, d, p, n[f + 9], 4, -640364487), p = m(p, c, u, d, n[f + 12], 11, -421815835), d = m(d, p, c, u, n[f + 15], 16, 530742520), c = v(c, u = m(u, d, p, c, n[f + 2], 23, -995338651), d, p, n[f + 0], 6, -198630844), p = v(p, c, u, d, n[f + 7], 10, 1126891415), d = v(d, p, c, u, n[f + 14], 15, -1416354905), u = v(u, d, p, c, n[f + 5], 21, -57434055), c = v(c, u, d, p, n[f + 12], 6, 1700485571), p = v(p, c, u, d, n[f + 3], 10, -1894986606), d = v(d, p, c, u, n[f + 10], 15, -1051523), u = v(u, d, p, c, n[f + 1], 21, -2054922799), c = v(c, u, d, p, n[f + 8], 6, 1873313359), p = v(p, c, u, d, n[f + 15], 10, -30611744), d = v(d, p, c, u, n[f + 6], 15, -1560198380), u = v(u, d, p, c, n[f + 13], 21, 1309151649), c = v(c, u, d, p, n[f + 4], 6, -145523070), p = v(p, c, u, d, n[f + 11], 10, -1120210379), d = v(d, p, c, u, n[f + 2], 15, 718787259), u = v(u, d, p, c, n[f + 9], 21, -343485551), c = c + b >>> 0, u = u + y >>> 0, d = d + x >>> 0, p = p + w >>> 0 } return r.endian([c, u, d, p]) })._ff = function (e, t, n, r, i, o, a) { var s = e + (t & n | ~t & r) + (i >>> 0) + a; return (s << o | s >>> 32 - o) + t }, s._gg = function (e, t, n, r, i, o, a) { var s = e + (t & r | n & ~r) + (i >>> 0) + a; return (s << o | s >>> 32 - o) + t }, s._hh = function (e, t, n, r, i, o, a) { var s = e + (t ^ n ^ r) + (i >>> 0) + a; return (s << o | s >>> 32 - o) + t }, s._ii = function (e, t, n, r, i, o, a) { var s = e + (n ^ (t | ~r)) + (i >>> 0) + a; return (s << o | s >>> 32 - o) + t }, s._blocksize = 16, s._digestsize = 16, e.exports = function (e, t) { if (null == e) throw new Error("Illegal argument " + e); var n = r.wordsToBytes(s(e, t)); return t && t.asBytes ? n : t && t.asString ? a.bytesToString(n) : r.bytesToHex(n) } }, function (e, t) { var n, r; n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", r = { rotl: function (e, t) { return e << t | e >>> 32 - t }, rotr: function (e, t) { return e << 32 - t | e >>> t }, endian: function (e) { if (e.constructor == Number) return 16711935 & r.rotl(e, 8) | 4278255360 & r.rotl(e, 24); for (var t = 0; t < e.length; t++)e[t] = r.endian(e[t]); return e }, randomBytes: function (e) { for (var t = []; e > 0; e--)t.push(Math.floor(256 * Math.random())); return t }, bytesToWords: function (e) { for (var t = [], n = 0, r = 0; n < e.length; n++, r += 8)t[r >>> 5] |= e[n] << 24 - r % 32; return t }, wordsToBytes: function (e) { for (var t = [], n = 0; n < 32 * e.length; n += 8)t.push(e[n >>> 5] >>> 24 - n % 32 & 255); return t }, bytesToHex: function (e) { for (var t = [], n = 0; n < e.length; n++)t.push((e[n] >>> 4).toString(16)), t.push((15 & e[n]).toString(16)); return t.join("") }, hexToBytes: function (e) { for (var t = [], n = 0; n < e.length; n += 2)t.push(parseInt(e.substr(n, 2), 16)); return t }, bytesToBase64: function (e) { for (var t = [], r = 0; r < e.length; r += 3)for (var i = e[r] << 16 | e[r + 1] << 8 | e[r + 2], o = 0; o < 4; o++)8 * r + 6 * o <= 8 * e.length ? t.push(n.charAt(i >>> 6 * (3 - o) & 63)) : t.push("="); return t.join("") }, base64ToBytes: function (e) { e = e.replace(/[^A-Z0-9+\/]/gi, ""); for (var t = [], r = 0, i = 0; r < e.length; i = ++r % 4)0 != i && t.push((n.indexOf(e.charAt(r - 1)) & Math.pow(2, -2 * i + 8) - 1) << 2 * i | n.indexOf(e.charAt(r)) >>> 6 - 2 * i); return t } }, e.exports = r }, function (e, t) { + function n(e) { return !!e.constructor && "function" == typeof e.constructor.isBuffer && e.constructor.isBuffer(e) } + /*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ + e.exports = function (e) { return null != e && (n(e) || function (e) { return "function" == typeof e.readFloatLE && "function" == typeof e.slice && n(e.slice(0, 0)) }(e) || !!e._isBuffer) } + }, function (e, t, n) { n(8).module("dbt").factory("locationService", ["$state", function (e) { var t = {}; return t.parseState = function (e) { return function (e) { return { selected: { include: e.g_i || "", exclude: e.g_e || "" }, show_graph: !!e.g_v } }(e) }, t.setState = function (t) { var n = function (e) { var t = { g_v: 1 }; return t.g_i = e.include, t.g_e = e.exclude, t }(t), r = e.current.name; e.go(r, n) }, t.clearState = function () { var t = e.current.name; e.go(t, { g_i: null, g_e: null, g_v: null }) }, t }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(202); r.module("dbt").controller("OverviewCtrl", ["$scope", "$state", "project", function (e, t, n) { e.overview_md = "(loading)", n.ready((function (n) { let r = t.params.project_name ? t.params.project_name : null; var o = n.docs["doc.dbt.__overview__"], a = i.filter(n.docs, { name: "__overview__" }); if (i.each(a, (function (e) { "dbt" != e.package_name && (o = e) })), null !== r) { o = n.docs[`doc.${r}.__${r}__`] || o; let e = i.filter(n.docs, { name: `__${r}__` }); i.each(e, e => { e.package_name !== r && (o = e) }) } e.overview_md = o.block_contents })) }]) }, function (e, t, n) { "use strict"; n(8).module("dbt").controller("SourceListCtrl", ["$scope", "$state", "project", function (e, t, n) { e.source = t.params.source, e.model = {}, e.extra_table_fields = [], e.has_more_info = function (e) { return (e.description || "").length }, e.toggle_source_expanded = function (t) { e.has_more_info(t) && (t.expanded = !t.expanded) }, n.ready((function (t) { var n = _.filter(t.nodes, (function (t) { return t.source_name == e.source })); if (0 != n.length) { n.sort((e, t) => e.name.localeCompare(t.name)); var r = n[0]; e.model = { name: e.source, source_description: r.source_description, sources: n }; var i = _.uniq(_.map(n, "metadata.owner")), o = _.uniq(_.map(n, "database")), a = _.uniq(_.map(n, "schema")); e.extra_table_fields = [{ name: "Loader", value: r.loader }, { name: 1 == i.length ? "Owner" : "Owners", value: i.join(", ") }, { name: 1 == o.length ? "Database" : "Databases", value: o.join(", ") }, { name: 1 == a.length ? "Schema" : "Schemas", value: a.join(", ") }, { name: "Tables", value: n.length }] } })) }]) }, function (e, t, n) { const r = n(8), i = { main: n(483), overview: n(484), graph: n(485), source: n(205), source_list: n(486), model: n(487), source: n(205), snapshot: n(488), seed: n(489), unit_test: n(490), test: n(491), analysis: n(492), macro: n(493), exposure: n(494), metric: n(495), semantic_model: n(496), saved_query: n(497), operation: n(498) }; r.module("dbt").config(["$stateProvider", "$urlRouterProvider", function (e, t) { var n = "g_v&g_i&g_e&g_p&g_n"; t.otherwise("/overview"), e.state("dbt", { url: "/", abstract: !0, controller: "MainController", templateUrl: i.main }).state("dbt.overview", { url: "overview?" + n, controller: "OverviewCtrl", templateUrl: i.overview }).state("dbt.project_overview", { url: "overview/:project_name?" + n, controller: "OverviewCtrl", templateUrl: i.overview, params: { project_name: { type: "string" } } }).state("dbt.graph", { url: "graph", controller: "GraphCtrl", templateUrl: i.graph }).state("dbt.model", { url: "model/:unique_id?section&" + n, controller: "ModelCtrl", templateUrl: i.model, params: { unique_id: { type: "string" } } }).state("dbt.seed", { url: "seed/:unique_id?section&" + n, controller: "SeedCtrl", templateUrl: i.seed, params: { unique_id: { type: "string" } } }).state("dbt.snapshot", { url: "snapshot/:unique_id?section&" + n, controller: "SnapshotCtrl", templateUrl: i.snapshot, params: { unique_id: { type: "string" } } }).state("dbt.unit_test", { url: "unit_test/:unique_id?section&" + n, controller: "TestCtrl", templateUrl: i.unit_test, params: { unique_id: { type: "string" } } }).state("dbt.test", { url: "test/:unique_id?section&" + n, controller: "TestCtrl", templateUrl: i.test, params: { unique_id: { type: "string" } } }).state("dbt.analysis", { url: "analysis/:unique_id?section&" + n, controller: "AnalysisCtrl", templateUrl: i.analysis, params: { unique_id: { type: "string" } } }).state("dbt.source", { url: "source/:unique_id?section&" + n, controller: "SourceCtrl", templateUrl: i.source, params: { unique_id: { type: "string" } } }).state("dbt.source_list", { url: "source_list/:source?section&" + n, controller: "SourceListCtrl", templateUrl: i.source_list, params: { source: { type: "string" } } }).state("dbt.macro", { url: "macro/:unique_id?section", controller: "MacroCtrl", templateUrl: i.macro, params: { unique_id: { type: "string" } } }).state("dbt.exposure", { url: "exposure/:unique_id?section&" + n, controller: "ExposureCtrl", templateUrl: i.exposure, params: { unique_id: { type: "string" } } }).state("dbt.metric", { url: "metric/:unique_id?section&" + n, controller: "MetricCtrl", templateUrl: i.metric, params: { unique_id: { type: "string" } } }).state("dbt.semantic_model", { url: "semantic_model/:unique_id?section&" + n, controller: "SemanticModelCtrl", templateUrl: i.semantic_model, params: { unique_id: { type: "string" } } }).state("dbt.saved_query", { url: "saved_query/:unique_id?section&" + n, controller: "SavedQueryCtrl", templateUrl: i.saved_query, params: { unique_id: { type: "string" } } }).state("dbt.operation", { url: "operation/:unique_id?section&" + n, controller: "OperationCtrl", templateUrl: i.operation, params: { unique_id: { type: "string" } } }) }]) }, function (e, t) { var n = "/main/main.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/overview/overview.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    \n \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/graph/graph.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    \n
    \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/sources/source_list.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n\n
    \n
    \n
    \n
    Source Tables
    \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    SourceTableDescriptionLinkMore?
    \n
    \n {{ source.source_name }}\n
    \n
    \n {{ source.name }}

    \n
    \n {{ source.description }}\n \n View docs\n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    Description
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/model.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Columns
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Referenced By
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/snapshot.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Columns
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Referenced By
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/seed.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    Columns
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Referenced By
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/unit_test.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/test.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/analysis.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/macro.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ macro.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Arguments
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Referenced By
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/exposure.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n\n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ exposure.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/metric.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n\n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ metric.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/semantic_model.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n\n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ semantic_model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Entities
    \n\n
    \n
    \n
    \n
    \n
    Name
    \n
    {{ entity.name }}
    \n
    None
    \n
    Type
    \n
    {{ entity.type }}
    \n
    None
    \n
    Expression
    \n
    {{ entity.expr }}
    \n
    None
    \n
    \n
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/saved_query.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n\n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ saved_query.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Entities
    \n\n
    \n
    \n
    \n
    \n
    Name
    \n
    {{ entity.name }}
    \n
    None
    \n
    Type
    \n
    {{ entity.type }}
    \n
    None
    \n
    Expression
    \n
    {{ entity.expr }}
    \n
    None
    \n
    \n
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    ') }]), e.exports = n }, function (e, t) { var n = "/docs/operation.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }]); + //# sourceMappingURL=main.js.map + + diff --git a/docs/manifest.json b/docs/manifest.json index 717487f..f163ba9 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1 +1 @@ -{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v8.json", "dbt_version": "1.4.6", "generated_at": "2023-05-31T20:08:41.725553Z", "invocation_id": "00823da1-e18e-457d-9d71-744c7ed27b40", "env": {}, "project_id": "8026034a61eef02391ef24b373ea0dc0", "user_id": "8268eefe-e8f7-472e-ab2a-a92f0135d76d", "send_anonymous_usage_stats": true, "adapter_type": "postgres"}, "nodes": {"seed.asana_source_integration_tests.project_task_data": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "project_task_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "project_task_data.csv", "original_file_path": "seeds/project_task_data.csv", "unique_id": "seed.asana_source_integration_tests.project_task_data", "fqn": ["asana_source_integration_tests", "project_task_data"], "alias": "project_task_data", "checksum": {"name": "sha256", "checksum": "b8ae363c3ab40609f8b5b0eee30e198bd124d781198ecda72e5409178aab17cd"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "project_id": "bigint", "task_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "quote_columns": false, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"project_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "task_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1685563702.371213, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"project_task_data\"", "raw_code": "", "root_path": "/Users/catherinefritz/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.story_data": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "story_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "story_data.csv", "original_file_path": "seeds/story_data.csv", "unique_id": "seed.asana_source_integration_tests.story_data", "fqn": ["asana_source_integration_tests", "story_data"], "alias": "story_data", "checksum": {"name": "sha256", "checksum": "207847a91c60ba0de1269fd0aef2a0e1f9d2c3e2b0fbae231ce69fce909dd15a"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint", "created_by_id": "bigint", "target_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "quote_columns": false, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "created_by_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "target_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1685563702.378221, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"story_data\"", "raw_code": "", "root_path": "/Users/catherinefritz/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.task_tag_data": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "task_tag_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "task_tag_data.csv", "original_file_path": "seeds/task_tag_data.csv", "unique_id": "seed.asana_source_integration_tests.task_tag_data", "fqn": ["asana_source_integration_tests", "task_tag_data"], "alias": "task_tag_data", "checksum": {"name": "sha256", "checksum": "0209673eda201e499fc6c588fbc799e08b44a60168cabaa4dc3cee39bb250cbd"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "tag_id": "bigint", "task_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "quote_columns": false, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"tag_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "task_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1685563702.3799438, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"task_tag_data\"", "raw_code": "", "root_path": "/Users/catherinefritz/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.task_section_data": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "task_section_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "task_section_data.csv", "original_file_path": "seeds/task_section_data.csv", "unique_id": "seed.asana_source_integration_tests.task_section_data", "fqn": ["asana_source_integration_tests", "task_section_data"], "alias": "task_section_data", "checksum": {"name": "sha256", "checksum": "d0aab9b6565fdb541b9ed5122d66cc9fad61287d3374d8af41c25eaf9bcd5805"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "section_id": "bigint", "task_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "quote_columns": false, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"section_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "task_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1685563702.38172, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"task_section_data\"", "raw_code": "", "root_path": "/Users/catherinefritz/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.task_data": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "task_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "task_data.csv", "original_file_path": "seeds/task_data.csv", "unique_id": "seed.asana_source_integration_tests.task_data", "fqn": ["asana_source_integration_tests", "task_data"], "alias": "task_data", "checksum": {"name": "sha256", "checksum": "dc304269ae0d5003e65aa0b8f5be6093ec114874b7bca0bf4784ffed187338cd"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint", "assignee_id": "bigint", "completed_by_id": "bigint", "parent_id": "bigint", "workspace_id": "bigint", "completed_at": "timestamp", "created_at": "timestamp", "due_on": "timestamp", "due_at": "timestamp", "modified_at": "timestamp", "start_on": "timestamp"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "quote_columns": false, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "assignee_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "completed_by_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "parent_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "workspace_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "completed_at": "timestamp", "created_at": "timestamp", "due_on": "timestamp", "due_at": "timestamp", "modified_at": "timestamp", "start_on": "timestamp", "_fivetran_synced": "timestamp"}}, "created_at": 1685563702.383424, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"task_data\"", "raw_code": "", "root_path": "/Users/catherinefritz/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.task_follower_data": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "task_follower_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "task_follower_data.csv", "original_file_path": "seeds/task_follower_data.csv", "unique_id": "seed.asana_source_integration_tests.task_follower_data", "fqn": ["asana_source_integration_tests", "task_follower_data"], "alias": "task_follower_data", "checksum": {"name": "sha256", "checksum": "6171210df6abad2ffba8ff8d10c1feb73c13c41c8e86b32e59f5aa29a4571678"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "user_id": "bigint", "task_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "quote_columns": false, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"user_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "task_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1685563702.385098, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"task_follower_data\"", "raw_code": "", "root_path": "/Users/catherinefritz/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.tag_data": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "tag_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "tag_data.csv", "original_file_path": "seeds/tag_data.csv", "unique_id": "seed.asana_source_integration_tests.tag_data", "fqn": ["asana_source_integration_tests", "tag_data"], "alias": "tag_data", "checksum": {"name": "sha256", "checksum": "e74c86b7fda7a484687ac7e16fd759233a2066632e6dd27acb481b0afa852548"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint", "workspace_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "quote_columns": false, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "workspace_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1685563702.3868842, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"tag_data\"", "raw_code": "", "root_path": "/Users/catherinefritz/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.project_data": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "project_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "project_data.csv", "original_file_path": "seeds/project_data.csv", "unique_id": "seed.asana_source_integration_tests.project_data", "fqn": ["asana_source_integration_tests", "project_data"], "alias": "project_data", "checksum": {"name": "sha256", "checksum": "cf12cd38b9bdb3ec36cac1757ae4a17e7a8dc4182cb65995ec3fc9b7c2668378"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint", "owner_id": "bigint", "team_id": "bigint", "workspace_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "quote_columns": false, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "owner_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "team_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "workspace_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1685563702.388523, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"project_data\"", "raw_code": "", "root_path": "/Users/catherinefritz/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.user_data": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "user_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "user_data.csv", "original_file_path": "seeds/user_data.csv", "unique_id": "seed.asana_source_integration_tests.user_data", "fqn": ["asana_source_integration_tests", "user_data"], "alias": "user_data", "checksum": {"name": "sha256", "checksum": "237db906018d65bbeeb08bd57c3cd23a91428412a882a0b59994658d564a9ad3"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "quote_columns": false, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1685563702.3902678, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"user_data\"", "raw_code": "", "root_path": "/Users/catherinefritz/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.team_data": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "team_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "team_data.csv", "original_file_path": "seeds/team_data.csv", "unique_id": "seed.asana_source_integration_tests.team_data", "fqn": ["asana_source_integration_tests", "team_data"], "alias": "team_data", "checksum": {"name": "sha256", "checksum": "96c14731f1382783fd83b114321e23b5c2813b94f96a6e5422a5aca66157a1cd"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint", "organization_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "quote_columns": false, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "organization_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1685563702.391985, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"team_data\"", "raw_code": "", "root_path": "/Users/catherinefritz/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.section_data": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "section_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "section_data.csv", "original_file_path": "seeds/section_data.csv", "unique_id": "seed.asana_source_integration_tests.section_data", "fqn": ["asana_source_integration_tests", "section_data"], "alias": "section_data", "checksum": {"name": "sha256", "checksum": "ca6f6bf502e9d65fcbe59590756a42979e31af8bf1db841a9292b56512252bde"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint", "project_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "quote_columns": false, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "project_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1685563702.393774, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"section_data\"", "raw_code": "", "root_path": "/Users/catherinefritz/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "model.asana_source.stg_asana__user": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__user", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__user.sql", "original_file_path": "models/stg_asana__user.sql", "unique_id": "model.asana_source.stg_asana__user", "fqn": ["asana_source", "stg_asana__user"], "alias": "stg_asana__user", "checksum": {"name": "sha256", "checksum": "4e7279a7f3d7b9754c574de24021781c98bbbc1c0a99e0c7b3495c57a6d33e18"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "Table of all accounts in the organization", "columns": {"user_id": {"name": "user_id", "description": "System generated unique ID for each user", "meta": {}, "data_type": null, "quote": null, "tags": []}, "email": {"name": "email", "description": "The user's email", "meta": {}, "data_type": null, "quote": null, "tags": []}, "user_name": {"name": "user_name", "description": "The name of the user as it appears in the UI", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.586041, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__user\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__user_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__user_tmp')),\n staging_columns=get_user_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n id as user_id,\n email,\n name as user_name\n from fields\n where not coalesce(_fivetran_deleted, false)\n)\n\nselect * \nfrom final", "language": "sql", "refs": [["stg_asana__user_tmp"], ["stg_asana__user_tmp"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_user_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.asana_source.stg_asana__user_tmp", "model.asana_source.stg_asana__user_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__user.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__user_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_deleted\n \n as \n \n _fivetran_deleted\n \n, \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n email\n \n as \n \n email\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n id as user_id,\n email,\n name as user_name\n from fields\n where not coalesce(_fivetran_deleted, false)\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__task": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__task.sql", "original_file_path": "models/stg_asana__task.sql", "unique_id": "model.asana_source.stg_asana__task", "fqn": ["asana_source", "stg_asana__task"], "alias": "stg_asana__task", "checksum": {"name": "sha256", "checksum": "e47fb0deb8252314befe05ea75c1fb10b1a73e483e7bcad705c042eefa2d9a3b"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "Table containing all created tasks", "columns": {"task_id": {"name": "task_id", "description": "System generated unique ID of the task", "meta": {}, "data_type": null, "quote": null, "tags": []}, "assignee_user_id": {"name": "assignee_user_id", "description": "Foreign key referencing the USER that is currently assigned the task.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "assignee_status": {"name": "assignee_status", "description": "Scheduling status for the assignee that the task is or will eventually be assigned to. This maps to the sections of \"My Tasks\"", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_completed": {"name": "is_completed", "description": "Boolean that is true if the task is currently marked complete.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "completed_at": {"name": "completed_at", "description": "Timestamp of when the task was marked complete.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "completed_by_user_id": {"name": "completed_by_user_id", "description": "Foreign key referencing the USER who completed the task.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Timestamp of when the task was created", "meta": {}, "data_type": null, "quote": null, "tags": []}, "due_date": {"name": "due_date", "description": "Date the task is due, if provided.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "modified_at": {"name": "modified_at", "description": "Timestamp of when the task was last modified", "meta": {}, "data_type": null, "quote": null, "tags": []}, "task_name": {"name": "task_name", "description": "User-facing name of the task.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "parent_task_id": {"name": "parent_task_id", "description": "Self-referential id of the parent TASK that this is a subtask of.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "start_date": {"name": "start_date", "description": "The start date of the task, if a date range is given.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "task_description": {"name": "task_description", "description": "Free-form text describing the task, as seen in the UI.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_liked": {"name": "is_liked", "description": "A boolean that's true if the task has been liked.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "number_of_likes": {"name": "number_of_likes", "description": "An integer indicating the number of likes on a task.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "workspace_id": {"name": "workspace_id", "description": "ID of the organization's Asana workspace. Irrelevant unless working with multiple companies.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.582508, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__task_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__task_tmp')),\n staging_columns=get_task_columns()\n )\n }}\n\n --The below script allows for pass through columns.\n {% if var('task_pass_through_columns') %}\n ,\n {{ var('task_pass_through_columns') | join (\", \") }}\n\n {% endif %}\n\n from base\n),\n\nfinal as (\n \n select \n id as task_id,\n assignee_id as assignee_user_id,\n completed as is_completed,\n cast(completed_at as {{ dbt.type_timestamp() }}) as completed_at,\n completed_by_id as completed_by_user_id,\n cast(created_at as {{ dbt.type_timestamp() }}) as created_at,\n cast(coalesce(due_on, due_at) as {{ dbt.type_timestamp() }}) as due_date,\n cast(modified_at as {{ dbt.type_timestamp() }}) as modified_at,\n name as task_name,\n parent_id as parent_task_id,\n cast(start_on as {{ dbt.type_timestamp() }}) as start_date,\n notes as task_description,\n liked as is_liked,\n num_likes as number_of_likes,\n workspace_id\n\n --The below script allows for pass through columns.\n {% if var('task_pass_through_columns') %}\n ,\n {{ var('task_pass_through_columns') | join (\", \") }}\n\n {% endif %}\n\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [["stg_asana__task_tmp"], ["stg_asana__task_tmp"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_task_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt.type_timestamp"], "nodes": ["model.asana_source.stg_asana__task_tmp", "model.asana_source.stg_asana__task_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__task.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_tmp\"\n\n),\n\nfields as (\n\n select\n \n cast(null as TIMESTAMP) as \n \n _fivetran_synced\n \n , \n \n \n assignee_id\n \n as \n \n assignee_id\n \n, \n \n \n completed\n \n as \n \n completed\n \n, \n \n \n completed_at\n \n as \n \n completed_at\n \n, \n \n \n completed_by_id\n \n as \n \n completed_by_id\n \n, \n \n \n created_at\n \n as \n \n created_at\n \n, \n \n \n due_at\n \n as \n \n due_at\n \n, \n \n \n due_on\n \n as \n \n due_on\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n modified_at\n \n as \n \n modified_at\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n notes\n \n as \n \n notes\n \n, \n cast(null as boolean) as \n \n liked\n \n , \n cast(null as INT) as \n \n num_likes\n \n , \n \n \n parent_id\n \n as \n \n parent_id\n \n, \n \n \n start_on\n \n as \n \n start_on\n \n, \n \n \n workspace_id\n \n as \n \n workspace_id\n \n\n\n\n\n --The below script allows for pass through columns.\n \n\n from base\n),\n\nfinal as (\n \n select \n id as task_id,\n assignee_id as assignee_user_id,\n completed as is_completed,\n cast(completed_at as TIMESTAMP) as completed_at,\n completed_by_id as completed_by_user_id,\n cast(created_at as TIMESTAMP) as created_at,\n cast(coalesce(due_on, due_at) as TIMESTAMP) as due_date,\n cast(modified_at as TIMESTAMP) as modified_at,\n name as task_name,\n parent_id as parent_task_id,\n cast(start_on as TIMESTAMP) as start_date,\n notes as task_description,\n liked as is_liked,\n num_likes as number_of_likes,\n workspace_id\n\n --The below script allows for pass through columns.\n \n\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__task_section": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_section", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__task_section.sql", "original_file_path": "models/stg_asana__task_section.sql", "unique_id": "model.asana_source.stg_asana__task_section", "fqn": ["asana_source", "stg_asana__task_section"], "alias": "stg_asana__task_section", "checksum": {"name": "sha256", "checksum": "4ead107e3627f57920f45d190c273a0fe706c9f911998f67769818fcd1bb4797"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "Table of tasks and the section that they live under. Section-less tasks within projects appear here, but project-less tasks do not", "columns": {"task_id": {"name": "task_id", "description": "Foreign key referencing the ID of the TASK", "meta": {}, "data_type": null, "quote": null, "tags": []}, "section_id": {"name": "section_id", "description": "Foreign key referencing the ID of the SECTION housing the task", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.583901, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_section\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__task_section_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__task_section_tmp')),\n staging_columns=get_task_section_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n section_id,\n task_id\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [["stg_asana__task_section_tmp"], ["stg_asana__task_section_tmp"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_task_section_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.asana_source.stg_asana__task_section_tmp", "model.asana_source.stg_asana__task_section_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__task_section.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_section_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n section_id\n \n as \n \n section_id\n \n, \n \n \n task_id\n \n as \n \n task_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n section_id,\n task_id\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__section": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__section", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__section.sql", "original_file_path": "models/stg_asana__section.sql", "unique_id": "model.asana_source.stg_asana__section", "fqn": ["asana_source", "stg_asana__section"], "alias": "stg_asana__section", "checksum": {"name": "sha256", "checksum": "4c0310af5b1832f35eef93c4ab66969242ffeecc545c6b27510c81534786b2cd"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "Table of all sections within projects. If tasks in a project are not in an explicit user-made section, a default section called \"(no section)\" is created here", "columns": {"section_id": {"name": "section_id", "description": "System-generated unique ID of the section", "meta": {}, "data_type": null, "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Timestamp of when the section was created", "meta": {}, "data_type": null, "quote": null, "tags": []}, "section_name": {"name": "section_name", "description": "User-facing name of the section.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "project_id": {"name": "project_id", "description": "Foreign key referencing the id of the PROJECT the section lives in.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.5775092, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__section\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__section_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__section_tmp')),\n staging_columns=get_section_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n id as section_id,\n cast(created_at as {{ dbt.type_timestamp() }}) as created_at,\n name as section_name,\n project_id\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [["stg_asana__section_tmp"], ["stg_asana__section_tmp"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_section_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt.type_timestamp"], "nodes": ["model.asana_source.stg_asana__section_tmp", "model.asana_source.stg_asana__section_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__section.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__section_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n created_at\n \n as \n \n created_at\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n project_id\n \n as \n \n project_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n id as section_id,\n cast(created_at as TIMESTAMP) as created_at,\n name as section_name,\n project_id\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__team": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__team", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__team.sql", "original_file_path": "models/stg_asana__team.sql", "unique_id": "model.asana_source.stg_asana__team", "fqn": ["asana_source", "stg_asana__team"], "alias": "stg_asana__team", "checksum": {"name": "sha256", "checksum": "d2a65dca096a0320f59cc16346eb1854a1bc78135e11eb6b010fcc41fc49e4a0"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "Table of the teams within the organization", "columns": {"team_id": {"name": "team_id", "description": "System generated unique ID for each team", "meta": {}, "data_type": null, "quote": null, "tags": []}, "team_name": {"name": "team_name", "description": "User-facing name of the team", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.585191, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__team\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__team_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__team_tmp')),\n staging_columns=get_team_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n id as team_id,\n name as team_name\n from fields\n where not coalesce(_fivetran_deleted, false)\n)\n\nselect * \nfrom final", "language": "sql", "refs": [["stg_asana__team_tmp"], ["stg_asana__team_tmp"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_team_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.asana_source.stg_asana__team_tmp", "model.asana_source.stg_asana__team_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__team.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__team_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_deleted\n \n as \n \n _fivetran_deleted\n \n, \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n organization_id\n \n as \n \n organization_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n id as team_id,\n name as team_name\n from fields\n where not coalesce(_fivetran_deleted, false)\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__task_tag": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_tag", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__task_tag.sql", "original_file_path": "models/stg_asana__task_tag.sql", "unique_id": "model.asana_source.stg_asana__task_tag", "fqn": ["asana_source", "stg_asana__task_tag"], "alias": "stg_asana__task_tag", "checksum": {"name": "sha256", "checksum": "7eba4b0f2dabd68e0a77d515c8406bb57bd6263b9ef551de3f06eded4c085de8"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "Table of tasks with the tags attached to them. Tasks without tags (and vice versa) do not appear here.", "columns": {"tag_id": {"name": "tag_id", "description": "Foreign key referencing the ID of the TAG attached to the task", "meta": {}, "data_type": null, "quote": null, "tags": []}, "task_id": {"name": "task_id", "description": "Foreign key referencing the ID of the TASK", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.584568, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_tag\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__task_tag_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__task_tag_tmp')),\n staging_columns=get_task_tag_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n tag_id,\n task_id\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [["stg_asana__task_tag_tmp"], ["stg_asana__task_tag_tmp"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_task_tag_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.asana_source.stg_asana__task_tag_tmp", "model.asana_source.stg_asana__task_tag_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__task_tag.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_tag_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n tag_id\n \n as \n \n tag_id\n \n, \n \n \n task_id\n \n as \n \n task_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n tag_id,\n task_id\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__story": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__story", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__story.sql", "original_file_path": "models/stg_asana__story.sql", "unique_id": "model.asana_source.stg_asana__story", "fqn": ["asana_source", "stg_asana__story"], "alias": "stg_asana__story", "checksum": {"name": "sha256", "checksum": "099c294f4f7a424d61579bc6cc3ec84860097149701eac404a71c07ca3f0e2b0"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "Table containing all stories -- stories are actions taken on tasks", "columns": {"story_id": {"name": "story_id", "description": "System generated unique ID of the story/action taken on a task.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Timestamp of when the story occurred.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "created_by_user_id": {"name": "created_by_user_id", "description": "Foreign key referencing the USER who took the action (sometimes null)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "target_task_id": {"name": "target_task_id", "description": "Foreign key referencing the TASK that the action was taken on.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "story_content": {"name": "story_content", "description": "Free-form text that is either the content of a comment (event_type=comment) or the description of an action (event_type=system)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "event_type": {"name": "event_type", "description": "The origin type of the story - a comment or change to the backend (ie altering a task somehow)", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.578837, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__story\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__story_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__story_tmp')),\n staging_columns=get_story_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n id as story_id,\n cast(created_at as {{ dbt.type_timestamp() }}) as created_at,\n created_by_id as created_by_user_id,\n target_id as target_task_id,\n text as story_content,\n type as event_type\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [["stg_asana__story_tmp"], ["stg_asana__story_tmp"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_story_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt.type_timestamp"], "nodes": ["model.asana_source.stg_asana__story_tmp", "model.asana_source.stg_asana__story_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__story.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__story_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n created_at\n \n as \n \n created_at\n \n, \n \n \n created_by_id\n \n as \n \n created_by_id\n \n, \n \n \n hearted\n \n as \n \n hearted\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n num_hearts\n \n as \n \n num_hearts\n \n, \n \n \n source\n \n as \n \n source\n \n, \n \n \n target_id\n \n as \n \n target_id\n \n, \n \n \n text\n \n as \n \n text\n \n, \n \n \n type\n \n as \n \n type\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n id as story_id,\n cast(created_at as TIMESTAMP) as created_at,\n created_by_id as created_by_user_id,\n target_id as target_task_id,\n text as story_content,\n type as event_type\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__tag": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__tag", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__tag.sql", "original_file_path": "models/stg_asana__tag.sql", "unique_id": "model.asana_source.stg_asana__tag", "fqn": ["asana_source", "stg_asana__tag"], "alias": "stg_asana__tag", "checksum": {"name": "sha256", "checksum": "5e2b49fc8c3d6c591b03b5c689d05423d6f9b798f79197e398690f9180459f2c"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "Table of the custom tags made in the organization", "columns": {"tag_id": {"name": "tag_id", "description": "System generated unique ID of the tag", "meta": {}, "data_type": null, "quote": null, "tags": []}, "tag_name": {"name": "tag_name", "description": "User-facing name of the tag.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Timestamp of when the tag was created", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.579634, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__tag\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__tag_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__tag_tmp')),\n staging_columns=get_tag_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n id as tag_id,\n name as tag_name,\n cast(created_at as {{ dbt.type_timestamp() }}) as created_at\n from fields\n where not _fivetran_deleted\n)\n\nselect * \nfrom final", "language": "sql", "refs": [["stg_asana__tag_tmp"], ["stg_asana__tag_tmp"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_tag_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt.type_timestamp"], "nodes": ["model.asana_source.stg_asana__tag_tmp", "model.asana_source.stg_asana__tag_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__tag.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__tag_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_deleted\n \n as \n \n _fivetran_deleted\n \n, \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n color\n \n as \n \n color\n \n, \n \n \n created_at\n \n as \n \n created_at\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n message\n \n as \n \n message\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n notes\n \n as \n \n notes\n \n, \n \n \n workspace_id\n \n as \n \n workspace_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n id as tag_id,\n name as tag_name,\n cast(created_at as TIMESTAMP) as created_at\n from fields\n where not _fivetran_deleted\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__project_task": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__project_task", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__project_task.sql", "original_file_path": "models/stg_asana__project_task.sql", "unique_id": "model.asana_source.stg_asana__project_task", "fqn": ["asana_source", "stg_asana__project_task"], "alias": "stg_asana__project_task", "checksum": {"name": "sha256", "checksum": "95153bcb4c7e9ccc7302710d14cf8d8120817eece7378f1f7c26f27b48129469"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "Table of tasks and the project(s) they each belong to. If a project doesn't have a task, it won't be in here (and vice versa)", "columns": {"project_id": {"name": "project_id", "description": "Foreign key referencing the ID of the PROJECT", "meta": {}, "data_type": null, "quote": null, "tags": []}, "task_id": {"name": "task_id", "description": "Foreign key referencing the ID of the TASK", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.576458, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__project_task\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__project_task_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__project_task_tmp')),\n staging_columns=get_project_task_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n project_id,\n task_id\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [["stg_asana__project_task_tmp"], ["stg_asana__project_task_tmp"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_project_task_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.asana_source.stg_asana__project_task_tmp", "model.asana_source.stg_asana__project_task_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__project_task.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__project_task_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n project_id\n \n as \n \n project_id\n \n, \n \n \n task_id\n \n as \n \n task_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n project_id,\n task_id\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__project": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__project", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__project.sql", "original_file_path": "models/stg_asana__project.sql", "unique_id": "model.asana_source.stg_asana__project", "fqn": ["asana_source", "stg_asana__project"], "alias": "stg_asana__project", "checksum": {"name": "sha256", "checksum": "650704717a66d2223ae458831cbcfdfa0a1045be4e365f0731a1a88f1fc77162"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "Table containing all projects", "columns": {"project_id": {"name": "project_id", "description": "System-generated unique ID of the project", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_archived": {"name": "is_archived", "description": "Boolean representing if the project has been archived in the UI", "meta": {}, "data_type": null, "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Timestamp of when the project was created", "meta": {}, "data_type": null, "quote": null, "tags": []}, "current_status": {"name": "current_status", "description": "The most recent progress status update for the project (free-form string)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "due_date": {"name": "due_date", "description": "The date the project is due on, if given", "meta": {}, "data_type": null, "quote": null, "tags": []}, "modified_at": {"name": "modified_at", "description": "Timestamp of when the project was last modified (doesn't include comments or tasks)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "project_name": {"name": "project_name", "description": "The user-facing name of the project", "meta": {}, "data_type": null, "quote": null, "tags": []}, "owner_user_id": {"name": "owner_user_id", "description": "Foreign key referencing the USER who owns the project.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "is_public": {"name": "is_public", "description": "Boolean that is true if the project is public to all users in the organization", "meta": {}, "data_type": null, "quote": null, "tags": []}, "team_id": {"name": "team_id", "description": "Foreign key referencing the TEAM that the project is shared with.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "workspace_id": {"name": "workspace_id", "description": "The ID of the organization's entire Asana workspace. Not relevant unless you're looking at multiple orgs", "meta": {}, "data_type": null, "quote": null, "tags": []}, "notes": {"name": "notes", "description": "Free-form textual notes associated with the project.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.575731, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__project\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__project_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__project_tmp')),\n staging_columns=get_project_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n id as project_id,\n archived as is_archived,\n cast(created_at as {{ dbt.type_timestamp() }}) as created_at,\n current_status,\n cast(due_date as {{ dbt.type_timestamp() }}) as due_date,\n cast(modified_at as {{ dbt.type_timestamp() }}) as modified_at,\n name as project_name,\n owner_id as owner_user_id,\n public as is_public,\n team_id,\n workspace_id,\n notes\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [["stg_asana__project_tmp"], ["stg_asana__project_tmp"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_project_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt.type_timestamp"], "nodes": ["model.asana_source.stg_asana__project_tmp", "model.asana_source.stg_asana__project_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__project.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__project_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_deleted\n \n as \n \n _fivetran_deleted\n \n, \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n archived\n \n as \n \n archived\n \n, \n \n \n color\n \n as \n \n color\n \n, \n \n \n created_at\n \n as \n \n created_at\n \n, \n \n \n current_status\n \n as \n \n current_status\n \n, \n \n \n due_date\n \n as \n \n due_date\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n modified_at\n \n as \n \n modified_at\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n notes\n \n as \n \n notes\n \n, \n \n \n owner_id\n \n as \n \n owner_id\n \n, \n \n \n public\n \n as \n \n public\n \n, \n \n \n team_id\n \n as \n \n team_id\n \n, \n \n \n workspace_id\n \n as \n \n workspace_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n id as project_id,\n archived as is_archived,\n cast(created_at as TIMESTAMP) as created_at,\n current_status,\n cast(due_date as TIMESTAMP) as due_date,\n cast(modified_at as TIMESTAMP) as modified_at,\n name as project_name,\n owner_id as owner_user_id,\n public as is_public,\n team_id,\n workspace_id,\n notes\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__task_follower": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_follower", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__task_follower.sql", "original_file_path": "models/stg_asana__task_follower.sql", "unique_id": "model.asana_source.stg_asana__task_follower", "fqn": ["asana_source", "stg_asana__task_follower"], "alias": "stg_asana__task_follower", "checksum": {"name": "sha256", "checksum": "8eb6b3969960cac92d44612ecb9f7486545bb7e92bcf1c96064a4f384ffed3e4"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "Table of tasks with the users that are following them. Tasks without users do not appear here.", "columns": {"task_id": {"name": "task_id", "description": "Foreign key referencing the ID of the TASK being followed.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "user_id": {"name": "user_id", "description": "Foreign key referencing the ID of the USER following the task.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.5832472, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_follower\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__task_follower_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__task_follower_tmp')),\n staging_columns=get_task_follower_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n task_id,\n user_id\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [["stg_asana__task_follower_tmp"], ["stg_asana__task_follower_tmp"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_task_follower_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.asana_source.stg_asana__task_follower_tmp", "model.asana_source.stg_asana__task_follower_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__task_follower.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_follower_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n task_id\n \n as \n \n task_id\n \n, \n \n \n user_id\n \n as \n \n user_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n task_id,\n user_id\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__story_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__story_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__story_tmp.sql", "original_file_path": "models/tmp/stg_asana__story_tmp.sql", "unique_id": "model.asana_source.stg_asana__story_tmp", "fqn": ["asana_source", "tmp", "stg_asana__story_tmp"], "alias": "stg_asana__story_tmp", "checksum": {"name": "sha256", "checksum": "699a08f0282626b405f0b4e5216cdbaa879e399314594a61b63ff4a7b042f677"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.5226922, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__story_tmp\"", "raw_code": "select * \nfrom {{ var('story') }}", "language": "sql", "refs": [], "sources": [["asana", "story"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.story"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__story_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_02\".\"story_data\"", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__team_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__team_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__team_tmp.sql", "original_file_path": "models/tmp/stg_asana__team_tmp.sql", "unique_id": "model.asana_source.stg_asana__team_tmp", "fqn": ["asana_source", "tmp", "stg_asana__team_tmp"], "alias": "stg_asana__team_tmp", "checksum": {"name": "sha256", "checksum": "8c107692c9394962da82e0c2460045e6686d962c1eefe0cff564c618aed7a17d"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.527812, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__team_tmp\"", "raw_code": "select * \nfrom {{ var('team') }}", "language": "sql", "refs": [], "sources": [["asana", "team"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.team"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__team_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_02\".\"team_data\"", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__task_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__task_tmp.sql", "original_file_path": "models/tmp/stg_asana__task_tmp.sql", "unique_id": "model.asana_source.stg_asana__task_tmp", "fqn": ["asana_source", "tmp", "stg_asana__task_tmp"], "alias": "stg_asana__task_tmp", "checksum": {"name": "sha256", "checksum": "ffb26301a2c952951441cf068b916101fb5cbb9841242e3511499262ffabd879"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.531362, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_tmp\"", "raw_code": "select * \nfrom {{ var('task') }}", "language": "sql", "refs": [], "sources": [["asana", "task"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.task"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__task_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_02\".\"task_data\"", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__task_follower_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_follower_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__task_follower_tmp.sql", "original_file_path": "models/tmp/stg_asana__task_follower_tmp.sql", "unique_id": "model.asana_source.stg_asana__task_follower_tmp", "fqn": ["asana_source", "tmp", "stg_asana__task_follower_tmp"], "alias": "stg_asana__task_follower_tmp", "checksum": {"name": "sha256", "checksum": "d03af085dd9a99b6a0d491b3729504de132fe2a3c8b930f72cb6d6774f714896"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.5352361, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_follower_tmp\"", "raw_code": "select * \nfrom {{ var('task_follower') }}", "language": "sql", "refs": [], "sources": [["asana", "task_follower"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.task_follower"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__task_follower_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_02\".\"task_follower_data\"", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__tag_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__tag_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__tag_tmp.sql", "original_file_path": "models/tmp/stg_asana__tag_tmp.sql", "unique_id": "model.asana_source.stg_asana__tag_tmp", "fqn": ["asana_source", "tmp", "stg_asana__tag_tmp"], "alias": "stg_asana__tag_tmp", "checksum": {"name": "sha256", "checksum": "c394a64eb436d4592c23e4c1876d4e001907bdf6de6fa1267f9bd47c83678711"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.538993, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__tag_tmp\"", "raw_code": "select * \nfrom {{ var('tag') }}", "language": "sql", "refs": [], "sources": [["asana", "tag"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.tag"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__tag_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_02\".\"tag_data\"", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__task_section_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_section_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__task_section_tmp.sql", "original_file_path": "models/tmp/stg_asana__task_section_tmp.sql", "unique_id": "model.asana_source.stg_asana__task_section_tmp", "fqn": ["asana_source", "tmp", "stg_asana__task_section_tmp"], "alias": "stg_asana__task_section_tmp", "checksum": {"name": "sha256", "checksum": "453db03084996d17e88a0f1ffda90ee349df4f262db7a3523578f5d4c6a4e5e6"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.542484, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_section_tmp\"", "raw_code": "select * \nfrom {{ var('task_section') }}", "language": "sql", "refs": [], "sources": [["asana", "task_section"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.task_section"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__task_section_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_02\".\"task_section_data\"", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__task_tag_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__task_tag_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__task_tag_tmp.sql", "original_file_path": "models/tmp/stg_asana__task_tag_tmp.sql", "unique_id": "model.asana_source.stg_asana__task_tag_tmp", "fqn": ["asana_source", "tmp", "stg_asana__task_tag_tmp"], "alias": "stg_asana__task_tag_tmp", "checksum": {"name": "sha256", "checksum": "00c6fa0be01310e2a827ce46dbadeb2cf3cc24dda4dc22142ed81b7bb0f85a4d"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.5459242, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_tag_tmp\"", "raw_code": "select * \nfrom {{ var('task_tag') }}", "language": "sql", "refs": [], "sources": [["asana", "task_tag"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.task_tag"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__task_tag_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_02\".\"task_tag_data\"", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__user_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__user_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__user_tmp.sql", "original_file_path": "models/tmp/stg_asana__user_tmp.sql", "unique_id": "model.asana_source.stg_asana__user_tmp", "fqn": ["asana_source", "tmp", "stg_asana__user_tmp"], "alias": "stg_asana__user_tmp", "checksum": {"name": "sha256", "checksum": "6a45d1112d3ae79f22784f5fd5723a27b7894d57aea5795a37921842affc0085"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.550115, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__user_tmp\"", "raw_code": "select * \nfrom {{ var('user') }}", "language": "sql", "refs": [], "sources": [["asana", "user"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.user"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__user_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_02\".\"user_data\"", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__section_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__section_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__section_tmp.sql", "original_file_path": "models/tmp/stg_asana__section_tmp.sql", "unique_id": "model.asana_source.stg_asana__section_tmp", "fqn": ["asana_source", "tmp", "stg_asana__section_tmp"], "alias": "stg_asana__section_tmp", "checksum": {"name": "sha256", "checksum": "83155348ae27cce121000df7d3d07cd4f734098dca2747df7dd5affde1c84188"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.553529, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__section_tmp\"", "raw_code": "select * \nfrom {{ var('section') }}", "language": "sql", "refs": [], "sources": [["asana", "section"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.section"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__section_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_02\".\"section_data\"", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__project_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__project_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__project_tmp.sql", "original_file_path": "models/tmp/stg_asana__project_tmp.sql", "unique_id": "model.asana_source.stg_asana__project_tmp", "fqn": ["asana_source", "tmp", "stg_asana__project_tmp"], "alias": "stg_asana__project_tmp", "checksum": {"name": "sha256", "checksum": "2c1320ac7d1c876b9aa540a4aa0a07bcacfa92e35d74a60cb09a5948ac6869ad"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.556968, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__project_tmp\"", "raw_code": "select * \nfrom {{ var('project') }}", "language": "sql", "refs": [], "sources": [["asana", "project"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.project"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__project_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_02\".\"project_data\"", "extra_ctes_injected": true, "extra_ctes": []}, "model.asana_source.stg_asana__project_task_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_02_stg_asana", "name": "stg_asana__project_task_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__project_task_tmp.sql", "original_file_path": "models/tmp/stg_asana__project_task_tmp.sql", "unique_id": "model.asana_source.stg_asana__project_task_tmp", "fqn": ["asana_source", "tmp", "stg_asana__project_task_tmp"], "alias": "stg_asana__project_task_tmp", "checksum": {"name": "sha256", "checksum": "2ad5271ec001d7cb80698feb2fcc08b189f360d756f86feb074bbd904002b10e"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1685563702.56039, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__project_task_tmp\"", "raw_code": "select * \nfrom {{ var('project_task') }}", "language": "sql", "refs": [], "sources": [["asana", "project_task"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.project_task"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__project_task_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_02\".\"project_task_data\"", "extra_ctes_injected": true, "extra_ctes": []}, "test.asana_source.unique_stg_asana__project_project_id.67bfab1228": {"test_metadata": {"name": "unique", "kwargs": {"column_name": "project_id", "model": "{{ get_where_subquery(ref('stg_asana__project')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "unique_stg_asana__project_project_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__project_project_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__project_project_id.67bfab1228", "fqn": ["asana_source", "unique_stg_asana__project_project_id"], "alias": "unique_stg_asana__project_project_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.5947158, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__project"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__project"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__project_project_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n project_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__project\"\nwhere project_id is not null\ngroup by project_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "project_id", "file_key_name": "models.stg_asana__project"}, "test.asana_source.not_null_stg_asana__project_project_id.d27dae84fa": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "project_id", "model": "{{ get_where_subquery(ref('stg_asana__project')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__project_project_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__project_project_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__project_project_id.d27dae84fa", "fqn": ["asana_source", "not_null_stg_asana__project_project_id"], "alias": "not_null_stg_asana__project_project_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.59618, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__project"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__project"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__project_project_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect project_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__project\"\nwhere project_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "project_id", "file_key_name": "models.stg_asana__project"}, "test.asana_source.not_null_stg_asana__project_task_project_id.e2450d16b1": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "project_id", "model": "{{ get_where_subquery(ref('stg_asana__project_task')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__project_task_project_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__project_task_project_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__project_task_project_id.e2450d16b1", "fqn": ["asana_source", "not_null_stg_asana__project_task_project_id"], "alias": "not_null_stg_asana__project_task_project_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.597485, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__project_task"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__project_task"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__project_task_project_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect project_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__project_task\"\nwhere project_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "project_id", "file_key_name": "models.stg_asana__project_task"}, "test.asana_source.not_null_stg_asana__project_task_task_id.9479566014": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "task_id", "model": "{{ get_where_subquery(ref('stg_asana__project_task')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__project_task_task_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__project_task_task_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__project_task_task_id.9479566014", "fqn": ["asana_source", "not_null_stg_asana__project_task_task_id"], "alias": "not_null_stg_asana__project_task_task_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.598756, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__project_task"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__project_task"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__project_task_task_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect task_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__project_task\"\nwhere task_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "task_id", "file_key_name": "models.stg_asana__project_task"}, "test.asana_source.unique_stg_asana__section_section_id.0495dd3d2f": {"test_metadata": {"name": "unique", "kwargs": {"column_name": "section_id", "model": "{{ get_where_subquery(ref('stg_asana__section')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "unique_stg_asana__section_section_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__section_section_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__section_section_id.0495dd3d2f", "fqn": ["asana_source", "unique_stg_asana__section_section_id"], "alias": "unique_stg_asana__section_section_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.600526, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__section"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__section"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__section_section_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n section_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__section\"\nwhere section_id is not null\ngroup by section_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "section_id", "file_key_name": "models.stg_asana__section"}, "test.asana_source.not_null_stg_asana__section_section_id.389ebce958": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "section_id", "model": "{{ get_where_subquery(ref('stg_asana__section')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__section_section_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__section_section_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__section_section_id.389ebce958", "fqn": ["asana_source", "not_null_stg_asana__section_section_id"], "alias": "not_null_stg_asana__section_section_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.6018822, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__section"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__section"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__section_section_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect section_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__section\"\nwhere section_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "section_id", "file_key_name": "models.stg_asana__section"}, "test.asana_source.unique_stg_asana__story_story_id.414f25bb84": {"test_metadata": {"name": "unique", "kwargs": {"column_name": "story_id", "model": "{{ get_where_subquery(ref('stg_asana__story')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "unique_stg_asana__story_story_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__story_story_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__story_story_id.414f25bb84", "fqn": ["asana_source", "unique_stg_asana__story_story_id"], "alias": "unique_stg_asana__story_story_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.6031759, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__story"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__story"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__story_story_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n story_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__story\"\nwhere story_id is not null\ngroup by story_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "story_id", "file_key_name": "models.stg_asana__story"}, "test.asana_source.not_null_stg_asana__story_story_id.ca847d0848": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "story_id", "model": "{{ get_where_subquery(ref('stg_asana__story')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__story_story_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__story_story_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__story_story_id.ca847d0848", "fqn": ["asana_source", "not_null_stg_asana__story_story_id"], "alias": "not_null_stg_asana__story_story_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.6044521, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__story"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__story"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__story_story_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect story_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__story\"\nwhere story_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "story_id", "file_key_name": "models.stg_asana__story"}, "test.asana_source.not_null_stg_asana__story_target_task_id.3f971de06e": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "target_task_id", "model": "{{ get_where_subquery(ref('stg_asana__story')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__story_target_task_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__story_target_task_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__story_target_task_id.3f971de06e", "fqn": ["asana_source", "not_null_stg_asana__story_target_task_id"], "alias": "not_null_stg_asana__story_target_task_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.605838, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__story"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__story"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__story_target_task_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect target_task_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__story\"\nwhere target_task_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "target_task_id", "file_key_name": "models.stg_asana__story"}, "test.asana_source.unique_stg_asana__tag_tag_id.fd78b190c7": {"test_metadata": {"name": "unique", "kwargs": {"column_name": "tag_id", "model": "{{ get_where_subquery(ref('stg_asana__tag')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "unique_stg_asana__tag_tag_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__tag_tag_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__tag_tag_id.fd78b190c7", "fqn": ["asana_source", "unique_stg_asana__tag_tag_id"], "alias": "unique_stg_asana__tag_tag_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.607083, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__tag"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__tag"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__tag_tag_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n tag_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__tag\"\nwhere tag_id is not null\ngroup by tag_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "tag_id", "file_key_name": "models.stg_asana__tag"}, "test.asana_source.not_null_stg_asana__tag_tag_id.c6a8187ca2": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "tag_id", "model": "{{ get_where_subquery(ref('stg_asana__tag')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__tag_tag_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__tag_tag_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__tag_tag_id.c6a8187ca2", "fqn": ["asana_source", "not_null_stg_asana__tag_tag_id"], "alias": "not_null_stg_asana__tag_tag_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.6083379, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__tag"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__tag"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__tag_tag_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect tag_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__tag\"\nwhere tag_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "tag_id", "file_key_name": "models.stg_asana__tag"}, "test.asana_source.unique_stg_asana__task_task_id.a5271275a5": {"test_metadata": {"name": "unique", "kwargs": {"column_name": "task_id", "model": "{{ get_where_subquery(ref('stg_asana__task')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "unique_stg_asana__task_task_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__task_task_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__task_task_id.a5271275a5", "fqn": ["asana_source", "unique_stg_asana__task_task_id"], "alias": "unique_stg_asana__task_task_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.609589, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__task"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__task_task_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n task_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task\"\nwhere task_id is not null\ngroup by task_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "task_id", "file_key_name": "models.stg_asana__task"}, "test.asana_source.not_null_stg_asana__task_task_id.924cc69000": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "task_id", "model": "{{ get_where_subquery(ref('stg_asana__task')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__task_task_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__task_task_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__task_task_id.924cc69000", "fqn": ["asana_source", "not_null_stg_asana__task_task_id"], "alias": "not_null_stg_asana__task_task_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.61097, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__task"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__task_task_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect task_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task\"\nwhere task_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "task_id", "file_key_name": "models.stg_asana__task"}, "test.asana_source.not_null_stg_asana__task_follower_task_id.5af35f322c": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "task_id", "model": "{{ get_where_subquery(ref('stg_asana__task_follower')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__task_follower_task_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__task_follower_task_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__task_follower_task_id.5af35f322c", "fqn": ["asana_source", "not_null_stg_asana__task_follower_task_id"], "alias": "not_null_stg_asana__task_follower_task_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.6122088, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__task_follower"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task_follower"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__task_follower_task_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect task_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_follower\"\nwhere task_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "task_id", "file_key_name": "models.stg_asana__task_follower"}, "test.asana_source.not_null_stg_asana__task_follower_user_id.e0aea0b15e": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "user_id", "model": "{{ get_where_subquery(ref('stg_asana__task_follower')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__task_follower_user_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__task_follower_user_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__task_follower_user_id.e0aea0b15e", "fqn": ["asana_source", "not_null_stg_asana__task_follower_user_id"], "alias": "not_null_stg_asana__task_follower_user_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.613448, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__task_follower"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task_follower"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__task_follower_user_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect user_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_follower\"\nwhere user_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "user_id", "file_key_name": "models.stg_asana__task_follower"}, "test.asana_source.not_null_stg_asana__task_section_task_id.ab81301de8": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "task_id", "model": "{{ get_where_subquery(ref('stg_asana__task_section')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__task_section_task_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__task_section_task_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__task_section_task_id.ab81301de8", "fqn": ["asana_source", "not_null_stg_asana__task_section_task_id"], "alias": "not_null_stg_asana__task_section_task_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.614689, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__task_section"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task_section"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__task_section_task_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect task_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_section\"\nwhere task_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "task_id", "file_key_name": "models.stg_asana__task_section"}, "test.asana_source.not_null_stg_asana__task_section_section_id.b0977a4cfe": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "section_id", "model": "{{ get_where_subquery(ref('stg_asana__task_section')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__task_section_section_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__task_section_section_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__task_section_section_id.b0977a4cfe", "fqn": ["asana_source", "not_null_stg_asana__task_section_section_id"], "alias": "not_null_stg_asana__task_section_section_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.616064, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__task_section"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task_section"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__task_section_section_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect section_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_section\"\nwhere section_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "section_id", "file_key_name": "models.stg_asana__task_section"}, "test.asana_source.not_null_stg_asana__task_tag_tag_id.d523de41d8": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "tag_id", "model": "{{ get_where_subquery(ref('stg_asana__task_tag')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__task_tag_tag_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__task_tag_tag_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__task_tag_tag_id.d523de41d8", "fqn": ["asana_source", "not_null_stg_asana__task_tag_tag_id"], "alias": "not_null_stg_asana__task_tag_tag_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.617306, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__task_tag"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task_tag"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__task_tag_tag_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect tag_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_tag\"\nwhere tag_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "tag_id", "file_key_name": "models.stg_asana__task_tag"}, "test.asana_source.not_null_stg_asana__task_tag_task_id.9d27624748": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "task_id", "model": "{{ get_where_subquery(ref('stg_asana__task_tag')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__task_tag_task_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__task_tag_task_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__task_tag_task_id.9d27624748", "fqn": ["asana_source", "not_null_stg_asana__task_tag_task_id"], "alias": "not_null_stg_asana__task_tag_task_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.6185422, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__task_tag"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task_tag"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__task_tag_task_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect task_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__task_tag\"\nwhere task_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "task_id", "file_key_name": "models.stg_asana__task_tag"}, "test.asana_source.unique_stg_asana__team_team_id.111fe15873": {"test_metadata": {"name": "unique", "kwargs": {"column_name": "team_id", "model": "{{ get_where_subquery(ref('stg_asana__team')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "unique_stg_asana__team_team_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__team_team_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__team_team_id.111fe15873", "fqn": ["asana_source", "unique_stg_asana__team_team_id"], "alias": "unique_stg_asana__team_team_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.619794, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__team"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__team"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__team_team_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n team_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__team\"\nwhere team_id is not null\ngroup by team_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "team_id", "file_key_name": "models.stg_asana__team"}, "test.asana_source.not_null_stg_asana__team_team_id.e12b563474": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "team_id", "model": "{{ get_where_subquery(ref('stg_asana__team')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__team_team_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__team_team_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__team_team_id.e12b563474", "fqn": ["asana_source", "not_null_stg_asana__team_team_id"], "alias": "not_null_stg_asana__team_team_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.6211681, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__team"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__team"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__team_team_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect team_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__team\"\nwhere team_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "team_id", "file_key_name": "models.stg_asana__team"}, "test.asana_source.unique_stg_asana__user_user_id.73808d6267": {"test_metadata": {"name": "unique", "kwargs": {"column_name": "user_id", "model": "{{ get_where_subquery(ref('stg_asana__user')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "unique_stg_asana__user_user_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__user_user_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__user_user_id.73808d6267", "fqn": ["asana_source", "unique_stg_asana__user_user_id"], "alias": "unique_stg_asana__user_user_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.622452, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__user"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__user"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__user_user_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n user_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__user\"\nwhere user_id is not null\ngroup by user_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "user_id", "file_key_name": "models.stg_asana__user"}, "test.asana_source.not_null_stg_asana__user_user_id.4e900e8ec6": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "user_id", "model": "{{ get_where_subquery(ref('stg_asana__user')) }}"}, "namespace": null}, "database": "postgres", "schema": "asana_source_integrations_tests_02_dbt_test__audit", "name": "not_null_stg_asana__user_user_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__user_user_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__user_user_id.4e900e8ec6", "fqn": ["asana_source", "not_null_stg_asana__user_user_id"], "alias": "not_null_stg_asana__user_user_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1685563702.623806, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [["stg_asana__user"]], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__user"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__user_user_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect user_id\nfrom \"postgres\".\"asana_source_integrations_tests_02_stg_asana\".\"stg_asana__user\"\nwhere user_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "column_name": "user_id", "file_key_name": "models.stg_asana__user"}}, "sources": {"source.asana_source.asana.user": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "user", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.user", "fqn": ["asana_source", "asana", "user"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "user_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of all accounts in the organization", "columns": {"id": {"name": "id", "description": "System generated unique ID for a user", "meta": {}, "data_type": null, "quote": null, "tags": []}, "email": {"name": "email", "description": "Email associated with the user", "meta": {}, "data_type": null, "quote": null, "tags": []}, "name": {"name": "name", "description": "Given name for the user as it appears in the UI", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"user_data\"", "created_at": 1685563702.648191}, "source.asana_source.asana.task": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "task", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.task", "fqn": ["asana_source", "asana", "task"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "task_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 72, "period": "hour"}, "error_after": {"count": 96, "period": "hour"}, "filter": null}, "external": null, "description": "Table containing all created tasks", "columns": {"id": {"name": "id", "description": "System generated unique identifier for the task", "meta": {}, "data_type": null, "quote": null, "tags": []}, "assignee_id": {"name": "assignee_id", "description": "Foreign key referencing the USER assigned to this task (note that a task may not have an assignee)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "completed": {"name": "completed", "description": "Boolean that's true if the task is *currently* marked completed. Note that a task can be unmarked complete", "meta": {}, "data_type": null, "quote": null, "tags": []}, "completed_at": {"name": "completed_at", "description": "Timestamp of when the task was completed, if still currently completed.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "completed_by_id": {"name": "completed_by_id", "description": "Foreign key that references the USER who completed the task, if currently completed.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Timestamp of when the task was first made", "meta": {}, "data_type": null, "quote": null, "tags": []}, "due_on": {"name": "due_on", "description": "The date on which the task is due. Note that not tasks may not have a due date", "meta": {}, "data_type": null, "quote": null, "tags": []}, "due_at": {"name": "due_at", "description": "The date and time at which the task is due, only if a specific time is given.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "modified_at": {"name": "modified_at", "description": "The last time the task was updated. Does not include comments nor changes in associations (ie their projects)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "name": {"name": "name", "description": "The title of the task", "meta": {}, "data_type": null, "quote": null, "tags": []}, "notes": {"name": "notes", "description": "Free-form textual description of the task (as seen in the UI).", "meta": {}, "data_type": null, "quote": null, "tags": []}, "liked": {"name": "liked", "description": "A boolean that's true if the task has been liked.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "num_likes": {"name": "num_likes", "description": "An integer indicating the number of likes on a task.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "parent_id": {"name": "parent_id", "description": "The ID of the parent of the task, if it is a subtask. Self-refers to TASK", "meta": {}, "data_type": null, "quote": null, "tags": []}, "start_on": {"name": "start_on", "description": "The start date of the task, if given with the due date", "meta": {}, "data_type": null, "quote": null, "tags": []}, "workspace_id": {"name": "workspace_id", "description": "The id of an organization's workspace in asana. Not necessary unless you have access to multiple organization's asanas.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"task_data\"", "created_at": 1685563702.648355}, "source.asana_source.asana.project": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "project", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.project", "fqn": ["asana_source", "asana", "project"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "project_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table containing all projects", "columns": {"id": {"name": "id", "description": "System generated unique ID of the project.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "archived": {"name": "archived", "description": "Boolean representing whether the project has been archived (removed from asana UI).", "meta": {}, "data_type": null, "quote": null, "tags": []}, "color": {"name": "color", "description": "Color of the project as seen in the UI.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Timestamp of when the story was made/the action was logged.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "current_status": {"name": "current_status", "description": "The most recent progress status update for the project. This is sent to all project followers.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "due_date": {"name": "due_date", "description": "The date the project is due.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "modified_at": {"name": "modified_at", "description": "The last time the project was updated. Does not include comments nor changes in associations (ie new tasks).", "meta": {}, "data_type": null, "quote": null, "tags": []}, "name": {"name": "name", "description": "The given name of the project.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "notes": {"name": "notes", "description": "Free-form textual notes associated with the project.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "owner_id": {"name": "owner_id", "description": "Foreign key referencing the USER who owns the project.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "public": {"name": "public", "description": "Boolean that is true if the project is public to the whole organization, false if not.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "team_id": {"name": "team_id", "description": "Foreign key referencing the TEAM that the project is shared with.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "workspace_id": {"name": "workspace_id", "description": "The id of an organization's workspace in asana. Not necessary unless you have access to multiple asana workspaces.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"project_data\"", "created_at": 1685563702.64849}, "source.asana_source.asana.story": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "story", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.story", "fqn": ["asana_source", "asana", "story"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "story_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 72, "period": "hour"}, "error_after": {"count": 96, "period": "hour"}, "filter": null}, "external": null, "description": "Table containing all stories -- stories are actions taken on tasks", "columns": {"id": {"name": "id", "description": "System generated unique ID of the story/action taken", "meta": {}, "data_type": null, "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Timestamp of when the story was made/the action was logged", "meta": {}, "data_type": null, "quote": null, "tags": []}, "created_by_id": {"name": "created_by_id", "description": "Foreign key referencing the USER who created the story/took the action on the task (sometimes null)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "target_id": {"name": "target_id", "description": "Foreign key referencing the TASK that the story is about.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "text": {"name": "text", "description": "Free-form text describing the action that was taken (if type = system), or the content of a comment (if type = comment)", "meta": {}, "data_type": null, "quote": null, "tags": []}, "type": {"name": "type", "description": "The origin type of the story - a comment or change to the backend/altering a task", "meta": {}, "data_type": null, "quote": null, "tags": []}, "source": {"name": "source", "description": "Where the story occurred (web, mobile, email, or api)", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"story_data\"", "created_at": 1685563702.648658}, "source.asana_source.asana.team": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "team", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.team", "fqn": ["asana_source", "asana", "team"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "team_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of the teams within the organization", "columns": {"id": {"name": "id", "description": "System generated unique ID for each team", "meta": {}, "data_type": null, "quote": null, "tags": []}, "name": {"name": "name", "description": "Provided name for each team. There can be duplicates", "meta": {}, "data_type": null, "quote": null, "tags": []}, "organization_id": {"name": "organization_id", "description": "Equivalent to the workspace_id, as organizations are a kind of workspace. Probably not relevant unless working with multiple orgs.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"team_data\"", "created_at": 1685563702.648767}, "source.asana_source.asana.tag": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "tag", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.tag", "fqn": ["asana_source", "asana", "tag"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "tag_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of the custom tags made in the organization", "columns": {"id": {"name": "id", "description": "System generated ID for each tag", "meta": {}, "data_type": null, "quote": null, "tags": []}, "name": {"name": "name", "description": "The name of the tag as it appears in the UI. There can be duplicates.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Timestamp of when the tag was created", "meta": {}, "data_type": null, "quote": null, "tags": []}, "color": {"name": "color", "description": "Chosen color of the tag as it appears in the UI", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"tag_data\"", "created_at": 1685563702.648878}, "source.asana_source.asana.section": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "section", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.section", "fqn": ["asana_source", "asana", "section"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "section_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of all sections within projects. If tasks in a project are not in an explicit user-made section, a default section called \"(no section)\" is created here", "columns": {"id": {"name": "id", "description": "System generated unique ID for each section", "meta": {}, "data_type": null, "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Timestamp of when the section was created by a user", "meta": {}, "data_type": null, "quote": null, "tags": []}, "name": {"name": "name", "description": "The given name of the section as it appears in the UI. Is stored as \"(no section)\" when this is the default bucket for tasks with a section in a project", "meta": {}, "data_type": null, "quote": null, "tags": []}, "project_id": {"name": "project_id", "description": "Foreign key referencing the PROJECT that the section lives in", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"section_data\"", "created_at": 1685563702.6489868}, "source.asana_source.asana.project_task": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "project_task", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.project_task", "fqn": ["asana_source", "asana", "project_task"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "project_task_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of tasks and the project(s) they each belong to. If a project doesn't have a task, it won't be in here (and vice versa)", "columns": {"project_id": {"name": "project_id", "description": "Foreign key referencing a PROJECT the task belongs to", "meta": {}, "data_type": null, "quote": null, "tags": []}, "task_id": {"name": "task_id", "description": "Foreign key referencing the TASK in the project", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"project_task_data\"", "created_at": 1685563702.64909}, "source.asana_source.asana.task_follower": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "task_follower", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.task_follower", "fqn": ["asana_source", "asana", "task_follower"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "task_follower_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of tasks with the users that are following them. Tasks without users do not appear here.", "columns": {"task_id": {"name": "task_id", "description": "Foreign key referencing the TASK being followed", "meta": {}, "data_type": null, "quote": null, "tags": []}, "user_id": {"name": "user_id", "description": "Foreign key referencing the USER that is following the task", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"task_follower_data\"", "created_at": 1685563702.649194}, "source.asana_source.asana.task_tag": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "task_tag", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.task_tag", "fqn": ["asana_source", "asana", "task_tag"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "task_tag_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of tasks with the tags attached to them. Tasks without tags (and vice versa) do not appear here.", "columns": {"task_id": {"name": "task_id", "description": "Foreign key referencing the TASK that is tagged", "meta": {}, "data_type": null, "quote": null, "tags": []}, "tag_id": {"name": "tag_id", "description": "Foreign key referencing the TAG that is applied to the task", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"task_tag_data\"", "created_at": 1685563702.649297}, "source.asana_source.asana.task_section": {"database": "postgres", "schema": "asana_source_integrations_tests_02", "name": "task_section", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.task_section", "fqn": ["asana_source", "asana", "task_section"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "task_section_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of tasks and the section that they live under. Section-less tasks within projects appear here, but project-less tasks do not", "columns": {"section_id": {"name": "section_id", "description": "Foreign key referencing the SECTION that the task lives under.", "meta": {}, "data_type": null, "quote": null, "tags": []}, "task_id": {"name": "task_id", "description": "Foreign key referencing the TASK that lives in a section.", "meta": {}, "data_type": null, "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_02\".\"task_section_data\"", "created_at": 1685563702.6494029}}, "macros": {"macro.dbt_postgres.postgres__current_timestamp": {"name": "postgres__current_timestamp", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp", "macro_sql": "{% macro postgres__current_timestamp() -%}\n now()\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.856939, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_string_as_time": {"name": "postgres__snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_string_as_time", "macro_sql": "{% macro postgres__snapshot_string_as_time(timestamp) -%}\n {%- set result = \"'\" ~ timestamp ~ \"'::timestamp without time zone\" -%}\n {{ return(result) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.857197, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_get_time": {"name": "postgres__snapshot_get_time", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_get_time", "macro_sql": "{% macro postgres__snapshot_get_time() -%}\n {{ current_timestamp() }}::timestamp without time zone\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.857315, "supported_languages": null}, "macro.dbt_postgres.postgres__current_timestamp_backcompat": {"name": "postgres__current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp_backcompat", "macro_sql": "{% macro postgres__current_timestamp_backcompat() %}\n current_timestamp::{{ type_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.857427, "supported_languages": null}, "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat": {"name": "postgres__current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat", "macro_sql": "{% macro postgres__current_timestamp_in_utc_backcompat() %}\n (current_timestamp at time zone 'utc')::{{ type_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.857536, "supported_languages": null}, "macro.dbt_postgres.postgres__get_catalog": {"name": "postgres__get_catalog", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/catalog.sql", "original_file_path": "macros/catalog.sql", "unique_id": "macro.dbt_postgres.postgres__get_catalog", "macro_sql": "{% macro postgres__get_catalog(information_schema, schemas) -%}\n\n {%- call statement('catalog', fetch_result=True) -%}\n {#\n If the user has multiple databases set and the first one is wrong, this will fail.\n But we won't fail in the case where there are multiple quoting-difference-only dbs, which is better.\n #}\n {% set database = information_schema.database %}\n {{ adapter.verify_database(database) }}\n\n select\n '{{ database }}' as table_database,\n sch.nspname as table_schema,\n tbl.relname as table_name,\n case tbl.relkind\n when 'v' then 'VIEW'\n else 'BASE TABLE'\n end as table_type,\n tbl_desc.description as table_comment,\n col.attname as column_name,\n col.attnum as column_index,\n pg_catalog.format_type(col.atttypid, col.atttypmod) as column_type,\n col_desc.description as column_comment,\n pg_get_userbyid(tbl.relowner) as table_owner\n\n from pg_catalog.pg_namespace sch\n join pg_catalog.pg_class tbl on tbl.relnamespace = sch.oid\n join pg_catalog.pg_attribute col on col.attrelid = tbl.oid\n left outer join pg_catalog.pg_description tbl_desc on (tbl_desc.objoid = tbl.oid and tbl_desc.objsubid = 0)\n left outer join pg_catalog.pg_description col_desc on (col_desc.objoid = tbl.oid and col_desc.objsubid = col.attnum)\n\n where (\n {%- for schema in schemas -%}\n upper(sch.nspname) = upper('{{ schema }}'){%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n )\n and not pg_is_other_temp_schema(sch.oid) -- not a temporary schema belonging to another session\n and tbl.relpersistence in ('p', 'u') -- [p]ermanent table or [u]nlogged table. Exclude [t]emporary tables\n and tbl.relkind in ('r', 'v', 'f', 'p') -- o[r]dinary table, [v]iew, [f]oreign table, [p]artitioned table. Other values are [i]ndex, [S]equence, [c]omposite type, [t]OAST table, [m]aterialized view\n and col.attnum > 0 -- negative numbers are used for system columns such as oid\n and not col.attisdropped -- column as not been dropped\n\n order by\n sch.nspname,\n tbl.relname,\n col.attnum\n\n {%- endcall -%}\n\n {{ return(load_result('catalog').table) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.858804, "supported_languages": null}, "macro.dbt_postgres.postgres_get_relations": {"name": "postgres_get_relations", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations.sql", "original_file_path": "macros/relations.sql", "unique_id": "macro.dbt_postgres.postgres_get_relations", "macro_sql": "{% macro postgres_get_relations () -%}\n\n {#\n -- in pg_depend, objid is the dependent, refobjid is the referenced object\n -- > a pg_depend entry indicates that the referenced object cannot be\n -- > dropped without also dropping the dependent object.\n #}\n\n {%- call statement('relations', fetch_result=True) -%}\n with relation as (\n select\n pg_rewrite.ev_class as class,\n pg_rewrite.oid as id\n from pg_rewrite\n ),\n class as (\n select\n oid as id,\n relname as name,\n relnamespace as schema,\n relkind as kind\n from pg_class\n ),\n dependency as (\n select distinct\n pg_depend.objid as id,\n pg_depend.refobjid as ref\n from pg_depend\n ),\n schema as (\n select\n pg_namespace.oid as id,\n pg_namespace.nspname as name\n from pg_namespace\n where nspname != 'information_schema' and nspname not like 'pg\\_%'\n ),\n referenced as (\n select\n relation.id AS id,\n referenced_class.name ,\n referenced_class.schema ,\n referenced_class.kind\n from relation\n join class as referenced_class on relation.class=referenced_class.id\n where referenced_class.kind in ('r', 'v')\n ),\n relationships as (\n select\n referenced.name as referenced_name,\n referenced.schema as referenced_schema_id,\n dependent_class.name as dependent_name,\n dependent_class.schema as dependent_schema_id,\n referenced.kind as kind\n from referenced\n join dependency on referenced.id=dependency.id\n join class as dependent_class on dependency.ref=dependent_class.id\n where\n (referenced.name != dependent_class.name or\n referenced.schema != dependent_class.schema)\n )\n\n select\n referenced_schema.name as referenced_schema,\n relationships.referenced_name as referenced_name,\n dependent_schema.name as dependent_schema,\n relationships.dependent_name as dependent_name\n from relationships\n join schema as dependent_schema on relationships.dependent_schema_id=dependent_schema.id\n join schema as referenced_schema on relationships.referenced_schema_id=referenced_schema.id\n group by referenced_schema, referenced_name, dependent_schema, dependent_name\n order by referenced_schema, referenced_name, dependent_schema, dependent_name;\n\n {%- endcall -%}\n\n {{ return(load_result('relations').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.859505, "supported_languages": null}, "macro.dbt_postgres.postgres__create_table_as": {"name": "postgres__create_table_as", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__create_table_as", "macro_sql": "{% macro postgres__create_table_as(temporary, relation, sql) -%}\n {%- set unlogged = config.get('unlogged', default=false) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create {% if temporary -%}\n temporary\n {%- elif unlogged -%}\n unlogged\n {%- endif %} table {{ relation }}\n as (\n {{ sql }}\n );\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8660722, "supported_languages": null}, "macro.dbt_postgres.postgres__get_create_index_sql": {"name": "postgres__get_create_index_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_create_index_sql", "macro_sql": "{% macro postgres__get_create_index_sql(relation, index_dict) -%}\n {%- set index_config = adapter.parse_index(index_dict) -%}\n {%- set comma_separated_columns = \", \".join(index_config.columns) -%}\n {%- set index_name = index_config.render(relation) -%}\n\n create {% if index_config.unique -%}\n unique\n {%- endif %} index if not exists\n \"{{ index_name }}\"\n on {{ relation }} {% if index_config.type -%}\n using {{ index_config.type }}\n {%- endif %}\n ({{ comma_separated_columns }});\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.866722, "supported_languages": null}, "macro.dbt_postgres.postgres__create_schema": {"name": "postgres__create_schema", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__create_schema", "macro_sql": "{% macro postgres__create_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier().include(database=False) }}\n {%- endcall -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.867096, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_schema": {"name": "postgres__drop_schema", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__drop_schema", "macro_sql": "{% macro postgres__drop_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier().include(database=False) }} cascade\n {%- endcall -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.867431, "supported_languages": null}, "macro.dbt_postgres.postgres__get_columns_in_relation": {"name": "postgres__get_columns_in_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_columns_in_relation", "macro_sql": "{% macro postgres__get_columns_in_relation(relation) -%}\n {% call statement('get_columns_in_relation', fetch_result=True) %}\n select\n column_name,\n data_type,\n character_maximum_length,\n numeric_precision,\n numeric_scale\n\n from {{ relation.information_schema('columns') }}\n where table_name = '{{ relation.identifier }}'\n {% if relation.schema %}\n and table_schema = '{{ relation.schema }}'\n {% endif %}\n order by ordinal_position\n\n {% endcall %}\n {% set table = load_result('get_columns_in_relation').table %}\n {{ return(sql_convert_columns_in_relation(table)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.sql_convert_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.867936, "supported_languages": null}, "macro.dbt_postgres.postgres__list_relations_without_caching": {"name": "postgres__list_relations_without_caching", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__list_relations_without_caching", "macro_sql": "{% macro postgres__list_relations_without_caching(schema_relation) %}\n {% call statement('list_relations_without_caching', fetch_result=True) -%}\n select\n '{{ schema_relation.database }}' as database,\n tablename as name,\n schemaname as schema,\n 'table' as type\n from pg_tables\n where schemaname ilike '{{ schema_relation.schema }}'\n union all\n select\n '{{ schema_relation.database }}' as database,\n viewname as name,\n schemaname as schema,\n 'view' as type\n from pg_views\n where schemaname ilike '{{ schema_relation.schema }}'\n {% endcall %}\n {{ return(load_result('list_relations_without_caching').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8684218, "supported_languages": null}, "macro.dbt_postgres.postgres__information_schema_name": {"name": "postgres__information_schema_name", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__information_schema_name", "macro_sql": "{% macro postgres__information_schema_name(database) -%}\n {% if database_name -%}\n {{ adapter.verify_database(database_name) }}\n {%- endif -%}\n information_schema\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.868646, "supported_languages": null}, "macro.dbt_postgres.postgres__list_schemas": {"name": "postgres__list_schemas", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__list_schemas", "macro_sql": "{% macro postgres__list_schemas(database) %}\n {% if database -%}\n {{ adapter.verify_database(database) }}\n {%- endif -%}\n {% call statement('list_schemas', fetch_result=True, auto_begin=False) %}\n select distinct nspname from pg_namespace\n {% endcall %}\n {{ return(load_result('list_schemas').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.869018, "supported_languages": null}, "macro.dbt_postgres.postgres__check_schema_exists": {"name": "postgres__check_schema_exists", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__check_schema_exists", "macro_sql": "{% macro postgres__check_schema_exists(information_schema, schema) -%}\n {% if information_schema.database -%}\n {{ adapter.verify_database(information_schema.database) }}\n {%- endif -%}\n {% call statement('check_schema_exists', fetch_result=True, auto_begin=False) %}\n select count(*) from pg_namespace where nspname = '{{ schema }}'\n {% endcall %}\n {{ return(load_result('check_schema_exists').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8694131, "supported_languages": null}, "macro.dbt_postgres.postgres__make_relation_with_suffix": {"name": "postgres__make_relation_with_suffix", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_relation_with_suffix", "macro_sql": "{% macro postgres__make_relation_with_suffix(base_relation, suffix, dstring) %}\n {% if dstring %}\n {% set dt = modules.datetime.datetime.now() %}\n {% set dtstring = dt.strftime(\"%H%M%S%f\") %}\n {% set suffix = suffix ~ dtstring %}\n {% endif %}\n {% set suffix_length = suffix|length %}\n {% set relation_max_name_length = base_relation.relation_max_name_length() %}\n {% if suffix_length > relation_max_name_length %}\n {% do exceptions.raise_compiler_error('Relation suffix is too long (' ~ suffix_length ~ ' characters). Maximum length is ' ~ relation_max_name_length ~ ' characters.') %}\n {% endif %}\n {% set identifier = base_relation.identifier[:relation_max_name_length - suffix_length] ~ suffix %}\n\n {{ return(base_relation.incorporate(path={\"identifier\": identifier })) }}\n\n {% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.870341, "supported_languages": null}, "macro.dbt_postgres.postgres__make_intermediate_relation": {"name": "postgres__make_intermediate_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_intermediate_relation", "macro_sql": "{% macro postgres__make_intermediate_relation(base_relation, suffix) %}\n {{ return(postgres__make_relation_with_suffix(base_relation, suffix, dstring=False)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.870547, "supported_languages": null}, "macro.dbt_postgres.postgres__make_temp_relation": {"name": "postgres__make_temp_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_temp_relation", "macro_sql": "{% macro postgres__make_temp_relation(base_relation, suffix) %}\n {% set temp_relation = postgres__make_relation_with_suffix(base_relation, suffix, dstring=True) %}\n {{ return(temp_relation.incorporate(path={\"schema\": none,\n \"database\": none})) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.870871, "supported_languages": null}, "macro.dbt_postgres.postgres__make_backup_relation": {"name": "postgres__make_backup_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_backup_relation", "macro_sql": "{% macro postgres__make_backup_relation(base_relation, backup_relation_type, suffix) %}\n {% set backup_relation = postgres__make_relation_with_suffix(base_relation, suffix, dstring=False) %}\n {{ return(backup_relation.incorporate(type=backup_relation_type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.871148, "supported_languages": null}, "macro.dbt_postgres.postgres_escape_comment": {"name": "postgres_escape_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres_escape_comment", "macro_sql": "{% macro postgres_escape_comment(comment) -%}\n {% if comment is not string %}\n {% do exceptions.raise_compiler_error('cannot escape a non-string: ' ~ comment) %}\n {% endif %}\n {%- set magic = '$dbt_comment_literal_block$' -%}\n {%- if magic in comment -%}\n {%- do exceptions.raise_compiler_error('The string ' ~ magic ~ ' is not allowed in comments.') -%}\n {%- endif -%}\n {{ magic }}{{ comment }}{{ magic }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.871575, "supported_languages": null}, "macro.dbt_postgres.postgres__alter_relation_comment": {"name": "postgres__alter_relation_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__alter_relation_comment", "macro_sql": "{% macro postgres__alter_relation_comment(relation, comment) %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n comment on {{ relation.type }} {{ relation }} is {{ escaped_comment }};\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres_escape_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.871802, "supported_languages": null}, "macro.dbt_postgres.postgres__alter_column_comment": {"name": "postgres__alter_column_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__alter_column_comment", "macro_sql": "{% macro postgres__alter_column_comment(relation, column_dict) %}\n {% set existing_columns = adapter.get_columns_in_relation(relation) | map(attribute=\"name\") | list %}\n {% for column_name in column_dict if (column_name in existing_columns) %}\n {% set comment = column_dict[column_name]['description'] %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n comment on column {{ relation }}.{{ adapter.quote(column_name) if column_dict[column_name]['quote'] else column_name }} is {{ escaped_comment }};\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres_escape_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.872416, "supported_languages": null}, "macro.dbt_postgres.postgres__get_show_grant_sql": {"name": "postgres__get_show_grant_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_show_grant_sql", "macro_sql": "\n\n{%- macro postgres__get_show_grant_sql(relation) -%}\n select grantee, privilege_type\n from {{ relation.information_schema('role_table_grants') }}\n where grantor = current_role\n and grantee != current_role\n and table_schema = '{{ relation.schema }}'\n and table_name = '{{ relation.identifier }}'\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8726242, "supported_languages": null}, "macro.dbt_postgres.postgres__copy_grants": {"name": "postgres__copy_grants", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__copy_grants", "macro_sql": "{% macro postgres__copy_grants() %}\n {{ return(False) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.872739, "supported_languages": null}, "macro.dbt_postgres.postgres__get_incremental_default_sql": {"name": "postgres__get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/incremental_strategies.sql", "original_file_path": "macros/materializations/incremental_strategies.sql", "unique_id": "macro.dbt_postgres.postgres__get_incremental_default_sql", "macro_sql": "{% macro postgres__get_incremental_default_sql(arg_dict) %}\n\n {% if arg_dict[\"unique_key\"] %}\n {% do return(get_incremental_delete_insert_sql(arg_dict)) %}\n {% else %}\n {% do return(get_incremental_append_sql(arg_dict)) %}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_delete_insert_sql", "macro.dbt.get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.873138, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_merge_sql": {"name": "postgres__snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshot_merge.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_merge_sql", "macro_sql": "{% macro postgres__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n update {{ target }}\n set dbt_valid_to = DBT_INTERNAL_SOURCE.dbt_valid_to\n from {{ source }} as DBT_INTERNAL_SOURCE\n where DBT_INTERNAL_SOURCE.dbt_scd_id::text = {{ target }}.dbt_scd_id::text\n and DBT_INTERNAL_SOURCE.dbt_change_type::text in ('update'::text, 'delete'::text)\n and {{ target }}.dbt_valid_to is null;\n\n insert into {{ target }} ({{ insert_cols_csv }})\n select {% for column in insert_cols -%}\n DBT_INTERNAL_SOURCE.{{ column }} {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n from {{ source }} as DBT_INTERNAL_SOURCE\n where DBT_INTERNAL_SOURCE.dbt_change_type::text = 'insert'::text;\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.873864, "supported_languages": null}, "macro.dbt_postgres.postgres__dateadd": {"name": "postgres__dateadd", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt_postgres.postgres__dateadd", "macro_sql": "{% macro postgres__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {{ from_date_or_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.874079, "supported_languages": null}, "macro.dbt_postgres.postgres__listagg": {"name": "postgres__listagg", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt_postgres.postgres__listagg", "macro_sql": "{% macro postgres__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n {% if limit_num -%}\n array_to_string(\n (array_agg(\n {{ measure }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n ))[1:{{ limit_num }}],\n {{ delimiter_text }}\n )\n {%- else %}\n string_agg(\n {{ measure }},\n {{ delimiter_text }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n )\n {%- endif %}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8747258, "supported_languages": null}, "macro.dbt_postgres.postgres__datediff": {"name": "postgres__datediff", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt_postgres.postgres__datediff", "macro_sql": "{% macro postgres__datediff(first_date, second_date, datepart) -%}\n\n {% if datepart == 'year' %}\n (date_part('year', ({{second_date}})::date) - date_part('year', ({{first_date}})::date))\n {% elif datepart == 'quarter' %}\n ({{ datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ datediff(first_date, second_date, 'year') }} * 12 + date_part('month', ({{second_date}})::date) - date_part('month', ({{first_date}})::date))\n {% elif datepart == 'day' %}\n (({{second_date}})::date - ({{first_date}})::date)\n {% elif datepart == 'week' %}\n ({{ datediff(first_date, second_date, 'day') }} / 7 + case\n when date_part('dow', ({{first_date}})::timestamp) <= date_part('dow', ({{second_date}})::timestamp) then\n case when {{first_date}} <= {{second_date}} then 0 else -1 end\n else\n case when {{first_date}} <= {{second_date}} then 1 else 0 end\n end)\n {% elif datepart == 'hour' %}\n ({{ datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60 + floor(date_part('second', ({{second_date}})::timestamp)) - floor(date_part('second', ({{first_date}})::timestamp)))\n {% elif datepart == 'millisecond' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60000 + floor(date_part('millisecond', ({{second_date}})::timestamp)) - floor(date_part('millisecond', ({{first_date}})::timestamp)))\n {% elif datepart == 'microsecond' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60000000 + floor(date_part('microsecond', ({{second_date}})::timestamp)) - floor(date_part('microsecond', ({{first_date}})::timestamp)))\n {% else %}\n {{ exceptions.raise_compiler_error(\"Unsupported datepart for macro datediff in postgres: {!r}\".format(datepart)) }}\n {% endif %}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.87813, "supported_languages": null}, "macro.dbt_postgres.postgres__any_value": {"name": "postgres__any_value", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt_postgres.postgres__any_value", "macro_sql": "{% macro postgres__any_value(expression) -%}\n\n min({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8782878, "supported_languages": null}, "macro.dbt_postgres.postgres__last_day": {"name": "postgres__last_day", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt_postgres.postgres__last_day", "macro_sql": "{% macro postgres__last_day(date, datepart) -%}\n\n {%- if datepart == 'quarter' -%}\n -- postgres dateadd does not support quarter interval.\n cast(\n {{dbt.dateadd('day', '-1',\n dbt.dateadd('month', '3', dbt.date_trunc(datepart, date))\n )}}\n as date)\n {%- else -%}\n {{dbt.default_last_day(date, datepart)}}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.date_trunc", "macro.dbt.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.878795, "supported_languages": null}, "macro.dbt_postgres.postgres__split_part": {"name": "postgres__split_part", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt_postgres.postgres__split_part", "macro_sql": "{% macro postgres__split_part(string_text, delimiter_text, part_number) %}\n\n {% if part_number >= 0 %}\n {{ dbt.default__split_part(string_text, delimiter_text, part_number) }}\n {% else %}\n {{ dbt._split_part_negative(string_text, delimiter_text, part_number) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__split_part", "macro.dbt._split_part_negative"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8792121, "supported_languages": null}, "macro.dbt.run_hooks": {"name": "run_hooks", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.run_hooks", "macro_sql": "{% macro run_hooks(hooks, inside_transaction=True) %}\n {% for hook in hooks | selectattr('transaction', 'equalto', inside_transaction) %}\n {% if not inside_transaction and loop.first %}\n {% call statement(auto_begin=inside_transaction) %}\n commit;\n {% endcall %}\n {% endif %}\n {% set rendered = render(hook.get('sql')) | trim %}\n {% if (rendered | length) > 0 %}\n {% call statement(auto_begin=inside_transaction) %}\n {{ rendered }}\n {% endcall %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.880358, "supported_languages": null}, "macro.dbt.make_hook_config": {"name": "make_hook_config", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.make_hook_config", "macro_sql": "{% macro make_hook_config(sql, inside_transaction) %}\n {{ tojson({\"sql\": sql, \"transaction\": inside_transaction}) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.880672, "supported_languages": null}, "macro.dbt.before_begin": {"name": "before_begin", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.before_begin", "macro_sql": "{% macro before_begin(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.880851, "supported_languages": null}, "macro.dbt.in_transaction": {"name": "in_transaction", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.in_transaction", "macro_sql": "{% macro in_transaction(sql) %}\n {{ make_hook_config(sql, inside_transaction=True) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8809988, "supported_languages": null}, "macro.dbt.after_commit": {"name": "after_commit", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.after_commit", "macro_sql": "{% macro after_commit(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.881142, "supported_languages": null}, "macro.dbt.set_sql_header": {"name": "set_sql_header", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.set_sql_header", "macro_sql": "{% macro set_sql_header(config) -%}\n {{ config.set('sql_header', caller()) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.881562, "supported_languages": null}, "macro.dbt.should_full_refresh": {"name": "should_full_refresh", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.should_full_refresh", "macro_sql": "{% macro should_full_refresh() %}\n {% set config_full_refresh = config.get('full_refresh') %}\n {% if config_full_refresh is none %}\n {% set config_full_refresh = flags.FULL_REFRESH %}\n {% endif %}\n {% do return(config_full_refresh) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8818922, "supported_languages": null}, "macro.dbt.should_store_failures": {"name": "should_store_failures", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.should_store_failures", "macro_sql": "{% macro should_store_failures() %}\n {% set config_store_failures = config.get('store_failures') %}\n {% if config_store_failures is none %}\n {% set config_store_failures = flags.STORE_FAILURES %}\n {% endif %}\n {% do return(config_store_failures) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.88222, "supported_languages": null}, "macro.dbt.snapshot_merge_sql": {"name": "snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "unique_id": "macro.dbt.snapshot_merge_sql", "macro_sql": "{% macro snapshot_merge_sql(target, source, insert_cols) -%}\n {{ adapter.dispatch('snapshot_merge_sql', 'dbt')(target, source, insert_cols) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.882672, "supported_languages": null}, "macro.dbt.default__snapshot_merge_sql": {"name": "default__snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "unique_id": "macro.dbt.default__snapshot_merge_sql", "macro_sql": "{% macro default__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on DBT_INTERNAL_SOURCE.dbt_scd_id = DBT_INTERNAL_DEST.dbt_scd_id\n\n when matched\n and DBT_INTERNAL_DEST.dbt_valid_to is null\n and DBT_INTERNAL_SOURCE.dbt_change_type in ('update', 'delete')\n then update\n set dbt_valid_to = DBT_INTERNAL_SOURCE.dbt_valid_to\n\n when not matched\n and DBT_INTERNAL_SOURCE.dbt_change_type = 'insert'\n then insert ({{ insert_cols_csv }})\n values ({{ insert_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.882953, "supported_languages": null}, "macro.dbt.strategy_dispatch": {"name": "strategy_dispatch", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.strategy_dispatch", "macro_sql": "{% macro strategy_dispatch(name) -%}\n{% set original_name = name %}\n {% if '.' in name %}\n {% set package_name, name = name.split(\".\", 1) %}\n {% else %}\n {% set package_name = none %}\n {% endif %}\n\n {% if package_name is none %}\n {% set package_context = context %}\n {% elif package_name in context %}\n {% set package_context = context[package_name] %}\n {% else %}\n {% set error_msg %}\n Could not find package '{{package_name}}', called with '{{original_name}}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n\n {%- set search_name = 'snapshot_' ~ name ~ '_strategy' -%}\n\n {% if search_name not in package_context %}\n {% set error_msg %}\n The specified strategy macro '{{name}}' was not found in package '{{ package_name }}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n {{ return(package_context[search_name]) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.88659, "supported_languages": null}, "macro.dbt.snapshot_hash_arguments": {"name": "snapshot_hash_arguments", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_hash_arguments", "macro_sql": "{% macro snapshot_hash_arguments(args) -%}\n {{ adapter.dispatch('snapshot_hash_arguments', 'dbt')(args) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.886834, "supported_languages": null}, "macro.dbt.default__snapshot_hash_arguments": {"name": "default__snapshot_hash_arguments", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.default__snapshot_hash_arguments", "macro_sql": "{% macro default__snapshot_hash_arguments(args) -%}\n md5({%- for arg in args -%}\n coalesce(cast({{ arg }} as varchar ), '')\n {% if not loop.last %} || '|' || {% endif %}\n {%- endfor -%})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8870652, "supported_languages": null}, "macro.dbt.snapshot_timestamp_strategy": {"name": "snapshot_timestamp_strategy", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_timestamp_strategy", "macro_sql": "{% macro snapshot_timestamp_strategy(node, snapshotted_rel, current_rel, config, target_exists) %}\n {% set primary_key = config['unique_key'] %}\n {% set updated_at = config['updated_at'] %}\n {% set invalidate_hard_deletes = config.get('invalidate_hard_deletes', false) %}\n\n {#/*\n The snapshot relation might not have an {{ updated_at }} value if the\n snapshot strategy is changed from `check` to `timestamp`. We\n should use a dbt-created column for the comparison in the snapshot\n table instead of assuming that the user-supplied {{ updated_at }}\n will be present in the historical data.\n\n See https://github.com/dbt-labs/dbt-core/issues/2350\n */ #}\n {% set row_changed_expr -%}\n ({{ snapshotted_rel }}.dbt_valid_from < {{ current_rel }}.{{ updated_at }})\n {%- endset %}\n\n {% set scd_id_expr = snapshot_hash_arguments([primary_key, updated_at]) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes\n }) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.887796, "supported_languages": null}, "macro.dbt.snapshot_string_as_time": {"name": "snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_string_as_time", "macro_sql": "{% macro snapshot_string_as_time(timestamp) -%}\n {{ adapter.dispatch('snapshot_string_as_time', 'dbt')(timestamp) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_string_as_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.887962, "supported_languages": null}, "macro.dbt.default__snapshot_string_as_time": {"name": "default__snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.default__snapshot_string_as_time", "macro_sql": "{% macro default__snapshot_string_as_time(timestamp) %}\n {% do exceptions.raise_not_implemented(\n 'snapshot_string_as_time macro not implemented for adapter '+adapter.type()\n ) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.88814, "supported_languages": null}, "macro.dbt.snapshot_check_all_get_existing_columns": {"name": "snapshot_check_all_get_existing_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_check_all_get_existing_columns", "macro_sql": "{% macro snapshot_check_all_get_existing_columns(node, target_exists, check_cols_config) -%}\n {%- if not target_exists -%}\n {#-- no table yet -> return whatever the query does --#}\n {{ return((false, query_columns)) }}\n {%- endif -%}\n\n {#-- handle any schema changes --#}\n {%- set target_relation = adapter.get_relation(database=node.database, schema=node.schema, identifier=node.alias) -%}\n\n {% if check_cols_config == 'all' %}\n {%- set query_columns = get_columns_in_query(node['compiled_code']) -%}\n\n {% elif check_cols_config is iterable and (check_cols_config | length) > 0 %}\n {#-- query for proper casing/quoting, to support comparison below --#}\n {%- set select_check_cols_from_target -%}\n select {{ check_cols_config | join(', ') }} from ({{ node['compiled_code'] }}) subq\n {%- endset -%}\n {% set query_columns = get_columns_in_query(select_check_cols_from_target) %}\n\n {% else %}\n {% do exceptions.raise_compiler_error(\"Invalid value for 'check_cols': \" ~ check_cols_config) %}\n {% endif %}\n\n {%- set existing_cols = adapter.get_columns_in_relation(target_relation) | map(attribute = 'name') | list -%}\n {%- set ns = namespace() -%} {#-- handle for-loop scoping with a namespace --#}\n {%- set ns.column_added = false -%}\n\n {%- set intersection = [] -%}\n {%- for col in query_columns -%}\n {%- if col in existing_cols -%}\n {%- do intersection.append(adapter.quote(col)) -%}\n {%- else -%}\n {% set ns.column_added = true %}\n {%- endif -%}\n {%- endfor -%}\n {{ return((ns.column_added, intersection)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8895428, "supported_languages": null}, "macro.dbt.snapshot_check_strategy": {"name": "snapshot_check_strategy", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_check_strategy", "macro_sql": "{% macro snapshot_check_strategy(node, snapshotted_rel, current_rel, config, target_exists) %}\n {% set check_cols_config = config['check_cols'] %}\n {% set primary_key = config['unique_key'] %}\n {% set invalidate_hard_deletes = config.get('invalidate_hard_deletes', false) %}\n {% set updated_at = config.get('updated_at', snapshot_get_time()) %}\n\n {% set column_added = false %}\n\n {% set column_added, check_cols = snapshot_check_all_get_existing_columns(node, target_exists, check_cols_config) %}\n\n {%- set row_changed_expr -%}\n (\n {%- if column_added -%}\n {{ get_true_sql() }}\n {%- else -%}\n {%- for col in check_cols -%}\n {{ snapshotted_rel }}.{{ col }} != {{ current_rel }}.{{ col }}\n or\n (\n (({{ snapshotted_rel }}.{{ col }} is null) and not ({{ current_rel }}.{{ col }} is null))\n or\n ((not {{ snapshotted_rel }}.{{ col }} is null) and ({{ current_rel }}.{{ col }} is null))\n )\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n {%- endif -%}\n )\n {%- endset %}\n\n {% set scd_id_expr = snapshot_hash_arguments([primary_key, updated_at]) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes\n }) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.snapshot_get_time", "macro.dbt.snapshot_check_all_get_existing_columns", "macro.dbt.get_true_sql", "macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.891038, "supported_languages": null}, "macro.dbt.create_columns": {"name": "create_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.create_columns", "macro_sql": "{% macro create_columns(relation, columns) %}\n {{ adapter.dispatch('create_columns', 'dbt')(relation, columns) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.895374, "supported_languages": null}, "macro.dbt.default__create_columns": {"name": "default__create_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__create_columns", "macro_sql": "{% macro default__create_columns(relation, columns) %}\n {% for column in columns %}\n {% call statement() %}\n alter table {{ relation }} add column \"{{ column.name }}\" {{ column.data_type }};\n {% endcall %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8956769, "supported_languages": null}, "macro.dbt.post_snapshot": {"name": "post_snapshot", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.post_snapshot", "macro_sql": "{% macro post_snapshot(staging_relation) %}\n {{ adapter.dispatch('post_snapshot', 'dbt')(staging_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.895854, "supported_languages": null}, "macro.dbt.default__post_snapshot": {"name": "default__post_snapshot", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__post_snapshot", "macro_sql": "{% macro default__post_snapshot(staging_relation) %}\n {# no-op #}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.895942, "supported_languages": null}, "macro.dbt.get_true_sql": {"name": "get_true_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_true_sql", "macro_sql": "{% macro get_true_sql() %}\n {{ adapter.dispatch('get_true_sql', 'dbt')() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_true_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.896089, "supported_languages": null}, "macro.dbt.default__get_true_sql": {"name": "default__get_true_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__get_true_sql", "macro_sql": "{% macro default__get_true_sql() %}\n {{ return('TRUE') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8962061, "supported_languages": null}, "macro.dbt.snapshot_staging_table": {"name": "snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.snapshot_staging_table", "macro_sql": "{% macro snapshot_staging_table(strategy, source_sql, target_relation) -%}\n {{ adapter.dispatch('snapshot_staging_table', 'dbt')(strategy, source_sql, target_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__snapshot_staging_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.896418, "supported_languages": null}, "macro.dbt.default__snapshot_staging_table": {"name": "default__snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__snapshot_staging_table", "macro_sql": "{% macro default__snapshot_staging_table(strategy, source_sql, target_relation) -%}\n\n with snapshot_query as (\n\n {{ source_sql }}\n\n ),\n\n snapshotted_data as (\n\n select *,\n {{ strategy.unique_key }} as dbt_unique_key\n\n from {{ target_relation }}\n where dbt_valid_to is null\n\n ),\n\n insertions_source_data as (\n\n select\n *,\n {{ strategy.unique_key }} as dbt_unique_key,\n {{ strategy.updated_at }} as dbt_updated_at,\n {{ strategy.updated_at }} as dbt_valid_from,\n nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}) as dbt_valid_to,\n {{ strategy.scd_id }} as dbt_scd_id\n\n from snapshot_query\n ),\n\n updates_source_data as (\n\n select\n *,\n {{ strategy.unique_key }} as dbt_unique_key,\n {{ strategy.updated_at }} as dbt_updated_at,\n {{ strategy.updated_at }} as dbt_valid_from,\n {{ strategy.updated_at }} as dbt_valid_to\n\n from snapshot_query\n ),\n\n {%- if strategy.invalidate_hard_deletes %}\n\n deletes_source_data as (\n\n select\n *,\n {{ strategy.unique_key }} as dbt_unique_key\n from snapshot_query\n ),\n {% endif %}\n\n insertions as (\n\n select\n 'insert' as dbt_change_type,\n source_data.*\n\n from insertions_source_data as source_data\n left outer join snapshotted_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where snapshotted_data.dbt_unique_key is null\n or (\n snapshotted_data.dbt_unique_key is not null\n and (\n {{ strategy.row_changed }}\n )\n )\n\n ),\n\n updates as (\n\n select\n 'update' as dbt_change_type,\n source_data.*,\n snapshotted_data.dbt_scd_id\n\n from updates_source_data as source_data\n join snapshotted_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where (\n {{ strategy.row_changed }}\n )\n )\n\n {%- if strategy.invalidate_hard_deletes -%}\n ,\n\n deletes as (\n\n select\n 'delete' as dbt_change_type,\n source_data.*,\n {{ snapshot_get_time() }} as dbt_valid_from,\n {{ snapshot_get_time() }} as dbt_updated_at,\n {{ snapshot_get_time() }} as dbt_valid_to,\n snapshotted_data.dbt_scd_id\n\n from snapshotted_data\n left join deletes_source_data as source_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where source_data.dbt_unique_key is null\n )\n {%- endif %}\n\n select * from insertions\n union all\n select * from updates\n {%- if strategy.invalidate_hard_deletes %}\n union all\n select * from deletes\n {%- endif %}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8973382, "supported_languages": null}, "macro.dbt.build_snapshot_table": {"name": "build_snapshot_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.build_snapshot_table", "macro_sql": "{% macro build_snapshot_table(strategy, sql) -%}\n {{ adapter.dispatch('build_snapshot_table', 'dbt')(strategy, sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__build_snapshot_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.897534, "supported_languages": null}, "macro.dbt.default__build_snapshot_table": {"name": "default__build_snapshot_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__build_snapshot_table", "macro_sql": "{% macro default__build_snapshot_table(strategy, sql) %}\n\n select *,\n {{ strategy.scd_id }} as dbt_scd_id,\n {{ strategy.updated_at }} as dbt_updated_at,\n {{ strategy.updated_at }} as dbt_valid_from,\n nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}) as dbt_valid_to\n from (\n {{ sql }}\n ) sbq\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.89779, "supported_languages": null}, "macro.dbt.build_snapshot_staging_table": {"name": "build_snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.build_snapshot_staging_table", "macro_sql": "{% macro build_snapshot_staging_table(strategy, sql, target_relation) %}\n {% set temp_relation = make_temp_relation(target_relation) %}\n\n {% set select = snapshot_staging_table(strategy, sql, target_relation) %}\n\n {% call statement('build_snapshot_staging_relation') %}\n {{ create_table_as(True, temp_relation, select) }}\n {% endcall %}\n\n {% do return(temp_relation) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_temp_relation", "macro.dbt.snapshot_staging_table", "macro.dbt.statement", "macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.8982332, "supported_languages": null}, "macro.dbt.materialization_snapshot_default": {"name": "materialization_snapshot_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot.sql", "original_file_path": "macros/materializations/snapshots/snapshot.sql", "unique_id": "macro.dbt.materialization_snapshot_default", "macro_sql": "{% materialization snapshot, default %}\n {%- set config = model['config'] -%}\n\n {%- set target_table = model.get('alias', model.get('name')) -%}\n\n {%- set strategy_name = config.get('strategy') -%}\n {%- set unique_key = config.get('unique_key') %}\n -- grab current tables grants config for comparision later on\n {%- set grant_config = config.get('grants') -%}\n\n {% set target_relation_exists, target_relation = get_or_create_relation(\n database=model.database,\n schema=model.schema,\n identifier=target_table,\n type='table') -%}\n\n {%- if not target_relation.is_table -%}\n {% do exceptions.relation_wrong_type(target_relation, 'table') %}\n {%- endif -%}\n\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set strategy_macro = strategy_dispatch(strategy_name) %}\n {% set strategy = strategy_macro(model, \"snapshotted_data\", \"source_data\", config, target_relation_exists) %}\n\n {% if not target_relation_exists %}\n\n {% set build_sql = build_snapshot_table(strategy, model['compiled_code']) %}\n {% set final_sql = create_table_as(False, target_relation, build_sql) %}\n\n {% else %}\n\n {{ adapter.valid_snapshot_target(target_relation) }}\n\n {% set staging_table = build_snapshot_staging_table(strategy, sql, target_relation) %}\n\n -- this may no-op if the database does not require column expansion\n {% do adapter.expand_target_column_types(from_relation=staging_table,\n to_relation=target_relation) %}\n\n {% set missing_columns = adapter.get_missing_columns(staging_table, target_relation)\n | rejectattr('name', 'equalto', 'dbt_change_type')\n | rejectattr('name', 'equalto', 'DBT_CHANGE_TYPE')\n | rejectattr('name', 'equalto', 'dbt_unique_key')\n | rejectattr('name', 'equalto', 'DBT_UNIQUE_KEY')\n | list %}\n\n {% do create_columns(target_relation, missing_columns) %}\n\n {% set source_columns = adapter.get_columns_in_relation(staging_table)\n | rejectattr('name', 'equalto', 'dbt_change_type')\n | rejectattr('name', 'equalto', 'DBT_CHANGE_TYPE')\n | rejectattr('name', 'equalto', 'dbt_unique_key')\n | rejectattr('name', 'equalto', 'DBT_UNIQUE_KEY')\n | list %}\n\n {% set quoted_source_columns = [] %}\n {% for column in source_columns %}\n {% do quoted_source_columns.append(adapter.quote(column.name)) %}\n {% endfor %}\n\n {% set final_sql = snapshot_merge_sql(\n target = target_relation,\n source = staging_table,\n insert_cols = quoted_source_columns\n )\n %}\n\n {% endif %}\n\n {% call statement('main') %}\n {{ final_sql }}\n {% endcall %}\n\n {% set should_revoke = should_revoke(target_relation_exists, full_refresh_mode=False) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if not target_relation_exists %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {% if staging_table is defined %}\n {% do post_snapshot(staging_table) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.get_or_create_relation", "macro.dbt.run_hooks", "macro.dbt.strategy_dispatch", "macro.dbt.build_snapshot_table", "macro.dbt.create_table_as", "macro.dbt.build_snapshot_staging_table", "macro.dbt.create_columns", "macro.dbt.snapshot_merge_sql", "macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs", "macro.dbt.create_indexes", "macro.dbt.post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9048388, "supported_languages": ["sql"]}, "macro.dbt.materialization_test_default": {"name": "materialization_test_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/test.sql", "original_file_path": "macros/materializations/tests/test.sql", "unique_id": "macro.dbt.materialization_test_default", "macro_sql": "{%- materialization test, default -%}\n\n {% set relations = [] %}\n\n {% if should_store_failures() %}\n\n {% set identifier = model['alias'] %}\n {% set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n {% set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database, type='table') -%} %}\n\n {% if old_relation %}\n {% do adapter.drop_relation(old_relation) %}\n {% endif %}\n\n {% call statement(auto_begin=True) %}\n {{ create_table_as(False, target_relation, sql) }}\n {% endcall %}\n\n {% do relations.append(target_relation) %}\n\n {% set main_sql %}\n select *\n from {{ target_relation }}\n {% endset %}\n\n {{ adapter.commit() }}\n\n {% else %}\n\n {% set main_sql = sql %}\n\n {% endif %}\n\n {% set limit = config.get('limit') %}\n {% set fail_calc = config.get('fail_calc') %}\n {% set warn_if = config.get('warn_if') %}\n {% set error_if = config.get('error_if') %}\n\n {% call statement('main', fetch_result=True) -%}\n\n {{ get_test_sql(main_sql, fail_calc, warn_if, error_if, limit)}}\n\n {%- endcall %}\n\n {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.should_store_failures", "macro.dbt.statement", "macro.dbt.create_table_as", "macro.dbt.get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.906956, "supported_languages": ["sql"]}, "macro.dbt.get_test_sql": {"name": "get_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.get_test_sql", "macro_sql": "{% macro get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n {{ adapter.dispatch('get_test_sql', 'dbt')(main_sql, fail_calc, warn_if, error_if, limit) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9074109, "supported_languages": null}, "macro.dbt.default__get_test_sql": {"name": "default__get_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.default__get_test_sql", "macro_sql": "{% macro default__get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n select\n {{ fail_calc }} as failures,\n {{ fail_calc }} {{ warn_if }} as should_warn,\n {{ fail_calc }} {{ error_if }} as should_error\n from (\n {{ main_sql }}\n {{ \"limit \" ~ limit if limit != none }}\n ) dbt_internal_test\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.907733, "supported_languages": null}, "macro.dbt.get_where_subquery": {"name": "get_where_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "unique_id": "macro.dbt.get_where_subquery", "macro_sql": "{% macro get_where_subquery(relation) -%}\n {% do return(adapter.dispatch('get_where_subquery', 'dbt')(relation)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_where_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.908114, "supported_languages": null}, "macro.dbt.default__get_where_subquery": {"name": "default__get_where_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "unique_id": "macro.dbt.default__get_where_subquery", "macro_sql": "{% macro default__get_where_subquery(relation) -%}\n {% set where = config.get('where', '') %}\n {% if where %}\n {%- set filtered -%}\n (select * from {{ relation }} where {{ where }}) dbt_subquery\n {%- endset -%}\n {% do return(filtered) %}\n {%- else -%}\n {% do return(relation) %}\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.908499, "supported_languages": null}, "macro.dbt.get_quoted_csv": {"name": "get_quoted_csv", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.get_quoted_csv", "macro_sql": "{% macro get_quoted_csv(column_names) %}\n\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote(col)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9101598, "supported_languages": null}, "macro.dbt.diff_columns": {"name": "diff_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.diff_columns", "macro_sql": "{% macro diff_columns(source_columns, target_columns) %}\n\n {% set result = [] %}\n {% set source_names = source_columns | map(attribute = 'column') | list %}\n {% set target_names = target_columns | map(attribute = 'column') | list %}\n\n {# --check whether the name attribute exists in the target - this does not perform a data type check #}\n {% for sc in source_columns %}\n {% if sc.name not in target_names %}\n {{ result.append(sc) }}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9107132, "supported_languages": null}, "macro.dbt.diff_column_data_types": {"name": "diff_column_data_types", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.diff_column_data_types", "macro_sql": "{% macro diff_column_data_types(source_columns, target_columns) %}\n\n {% set result = [] %}\n {% for sc in source_columns %}\n {% set tc = target_columns | selectattr(\"name\", \"equalto\", sc.name) | list | first %}\n {% if tc %}\n {% if sc.data_type != tc.data_type and not sc.can_expand_to(other_column=tc) %}\n {{ result.append( { 'column_name': tc.name, 'new_type': sc.data_type } ) }}\n {% endif %}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.911391, "supported_languages": null}, "macro.dbt.get_merge_update_columns": {"name": "get_merge_update_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.get_merge_update_columns", "macro_sql": "{% macro get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) %}\n {{ return(adapter.dispatch('get_merge_update_columns', 'dbt')(merge_update_columns, merge_exclude_columns, dest_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_update_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.911629, "supported_languages": null}, "macro.dbt.default__get_merge_update_columns": {"name": "default__get_merge_update_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.default__get_merge_update_columns", "macro_sql": "{% macro default__get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) %}\n {%- set default_cols = dest_columns | map(attribute=\"quoted\") | list -%}\n\n {%- if merge_update_columns and merge_exclude_columns -%}\n {{ exceptions.raise_compiler_error(\n 'Model cannot specify merge_update_columns and merge_exclude_columns. Please update model to use only one config'\n )}}\n {%- elif merge_update_columns -%}\n {%- set update_columns = merge_update_columns -%}\n {%- elif merge_exclude_columns -%}\n {%- set update_columns = [] -%}\n {%- for column in dest_columns -%}\n {% if column.column | lower not in merge_exclude_columns | map(\"lower\") | list %}\n {%- do update_columns.append(column.quoted) -%}\n {% endif %}\n {%- endfor -%}\n {%- else -%}\n {%- set update_columns = default_cols -%}\n {%- endif -%}\n\n {{ return(update_columns) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.912351, "supported_languages": null}, "macro.dbt.get_merge_sql": {"name": "get_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_merge_sql", "macro_sql": "{% macro get_merge_sql(target, source, unique_key, dest_columns, incremental_predicates=none) -%}\n -- back compat for old kwarg name\n {% set incremental_predicates = kwargs.get('predicates', incremental_predicates) %}\n {{ adapter.dispatch('get_merge_sql', 'dbt')(target, source, unique_key, dest_columns, incremental_predicates) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.919225, "supported_languages": null}, "macro.dbt.default__get_merge_sql": {"name": "default__get_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_merge_sql", "macro_sql": "{% macro default__get_merge_sql(target, source, unique_key, dest_columns, incremental_predicates=none) -%}\n {%- set predicates = [] if incremental_predicates is none else [] + incremental_predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set merge_update_columns = config.get('merge_update_columns') -%}\n {%- set merge_exclude_columns = config.get('merge_exclude_columns') -%}\n {%- set update_columns = get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {% if unique_key %}\n {% if unique_key is sequence and unique_key is not mapping and unique_key is not string %}\n {% for key in unique_key %}\n {% set this_key_match %}\n DBT_INTERNAL_SOURCE.{{ key }} = DBT_INTERNAL_DEST.{{ key }}\n {% endset %}\n {% do predicates.append(this_key_match) %}\n {% endfor %}\n {% else %}\n {% set unique_key_match %}\n DBT_INTERNAL_SOURCE.{{ unique_key }} = DBT_INTERNAL_DEST.{{ unique_key }}\n {% endset %}\n {% do predicates.append(unique_key_match) %}\n {% endif %}\n {% else %}\n {% do predicates.append('FALSE') %}\n {% endif %}\n\n {{ sql_header if sql_header is not none }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on {{\"(\" ~ predicates | join(\") and (\") ~ \")\"}}\n\n {% if unique_key %}\n when matched then update set\n {% for column_name in update_columns -%}\n {{ column_name }} = DBT_INTERNAL_SOURCE.{{ column_name }}\n {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n {% endif %}\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv", "macro.dbt.get_merge_update_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.921045, "supported_languages": null}, "macro.dbt.get_delete_insert_merge_sql": {"name": "get_delete_insert_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_delete_insert_merge_sql", "macro_sql": "{% macro get_delete_insert_merge_sql(target, source, unique_key, dest_columns, incremental_predicates) -%}\n {{ adapter.dispatch('get_delete_insert_merge_sql', 'dbt')(target, source, unique_key, dest_columns, incremental_predicates) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9213362, "supported_languages": null}, "macro.dbt.default__get_delete_insert_merge_sql": {"name": "default__get_delete_insert_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_delete_insert_merge_sql", "macro_sql": "{% macro default__get_delete_insert_merge_sql(target, source, unique_key, dest_columns, incremental_predicates) -%}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n {% if unique_key %}\n {% if unique_key is sequence and unique_key is not string %}\n delete from {{target }}\n using {{ source }}\n where (\n {% for key in unique_key %}\n {{ source }}.{{ key }} = {{ target }}.{{ key }}\n {{ \"and \" if not loop.last}}\n {% endfor %}\n {% if incremental_predicates %}\n {% for predicate in incremental_predicates %}\n and {{ predicate }}\n {% endfor %}\n {% endif %}\n );\n {% else %}\n delete from {{ target }}\n where (\n {{ unique_key }}) in (\n select ({{ unique_key }})\n from {{ source }}\n )\n {%- if incremental_predicates %}\n {% for predicate in incremental_predicates %}\n and {{ predicate }}\n {% endfor %}\n {%- endif -%};\n\n {% endif %}\n {% endif %}\n\n insert into {{ target }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ source }}\n )\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.922406, "supported_languages": null}, "macro.dbt.get_insert_overwrite_merge_sql": {"name": "get_insert_overwrite_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_insert_overwrite_merge_sql", "macro_sql": "{% macro get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header=false) -%}\n {{ adapter.dispatch('get_insert_overwrite_merge_sql', 'dbt')(target, source, dest_columns, predicates, include_sql_header) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.922688, "supported_languages": null}, "macro.dbt.default__get_insert_overwrite_merge_sql": {"name": "default__get_insert_overwrite_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_insert_overwrite_merge_sql", "macro_sql": "{% macro default__get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header) -%}\n {#-- The only time include_sql_header is True: --#}\n {#-- BigQuery + insert_overwrite strategy + \"static\" partitions config --#}\n {#-- We should consider including the sql header at the materialization level instead --#}\n\n {%- set predicates = [] if predicates is none else [] + predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none and include_sql_header }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on FALSE\n\n when not matched by source\n {% if predicates %} and {{ predicates | join(' and ') }} {% endif %}\n then delete\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9233658, "supported_languages": null}, "macro.dbt.is_incremental": {"name": "is_incremental", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/is_incremental.sql", "original_file_path": "macros/materializations/models/incremental/is_incremental.sql", "unique_id": "macro.dbt.is_incremental", "macro_sql": "{% macro is_incremental() %}\n {#-- do not run introspective queries in parsing #}\n {% if not execute %}\n {{ return(False) }}\n {% else %}\n {% set relation = adapter.get_relation(this.database, this.schema, this.table) %}\n {{ return(relation is not none\n and relation.type == 'table'\n and model.config.materialized == 'incremental'\n and not should_full_refresh()) }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9240372, "supported_languages": null}, "macro.dbt.get_incremental_append_sql": {"name": "get_incremental_append_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_append_sql", "macro_sql": "{% macro get_incremental_append_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_append_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9249852, "supported_languages": null}, "macro.dbt.default__get_incremental_append_sql": {"name": "default__get_incremental_append_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_append_sql", "macro_sql": "{% macro default__get_incremental_append_sql(arg_dict) %}\n\n {% do return(get_insert_into_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"dest_columns\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_insert_into_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.925236, "supported_languages": null}, "macro.dbt.get_incremental_delete_insert_sql": {"name": "get_incremental_delete_insert_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_delete_insert_sql", "macro_sql": "{% macro get_incremental_delete_insert_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_delete_insert_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_delete_insert_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.925434, "supported_languages": null}, "macro.dbt.default__get_incremental_delete_insert_sql": {"name": "default__get_incremental_delete_insert_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_delete_insert_sql", "macro_sql": "{% macro default__get_incremental_delete_insert_sql(arg_dict) %}\n\n {% do return(get_delete_insert_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"unique_key\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9257421, "supported_languages": null}, "macro.dbt.get_incremental_merge_sql": {"name": "get_incremental_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_merge_sql", "macro_sql": "{% macro get_incremental_merge_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_merge_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9259362, "supported_languages": null}, "macro.dbt.default__get_incremental_merge_sql": {"name": "default__get_incremental_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_merge_sql", "macro_sql": "{% macro default__get_incremental_merge_sql(arg_dict) %}\n\n {% do return(get_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"unique_key\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.92624, "supported_languages": null}, "macro.dbt.get_incremental_insert_overwrite_sql": {"name": "get_incremental_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_insert_overwrite_sql", "macro_sql": "{% macro get_incremental_insert_overwrite_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_insert_overwrite_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_insert_overwrite_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9264371, "supported_languages": null}, "macro.dbt.default__get_incremental_insert_overwrite_sql": {"name": "default__get_incremental_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_insert_overwrite_sql", "macro_sql": "{% macro default__get_incremental_insert_overwrite_sql(arg_dict) %}\n\n {% do return(get_insert_overwrite_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.926715, "supported_languages": null}, "macro.dbt.get_incremental_default_sql": {"name": "get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_default_sql", "macro_sql": "{% macro get_incremental_default_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_default_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_incremental_default_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9269109, "supported_languages": null}, "macro.dbt.default__get_incremental_default_sql": {"name": "default__get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_default_sql", "macro_sql": "{% macro default__get_incremental_default_sql(arg_dict) %}\n\n {% do return(get_incremental_append_sql(arg_dict)) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.927066, "supported_languages": null}, "macro.dbt.get_insert_into_sql": {"name": "get_insert_into_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_insert_into_sql", "macro_sql": "{% macro get_insert_into_sql(target_relation, temp_relation, dest_columns) %}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n insert into {{ target_relation }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ temp_relation }}\n )\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.927354, "supported_languages": null}, "macro.dbt.materialization_incremental_default": {"name": "materialization_incremental_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/incremental.sql", "original_file_path": "macros/materializations/models/incremental/incremental.sql", "unique_id": "macro.dbt.materialization_incremental_default", "macro_sql": "{% materialization incremental, default -%}\n\n -- relations\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='table') -%}\n {%- set temp_relation = make_temp_relation(target_relation)-%}\n {%- set intermediate_relation = make_intermediate_relation(target_relation)-%}\n {%- set backup_relation_type = 'table' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n\n -- configs\n {%- set unique_key = config.get('unique_key') -%}\n {%- set full_refresh_mode = (should_full_refresh() or existing_relation.is_view) -%}\n {%- set on_schema_change = incremental_validate_on_schema_change(config.get('on_schema_change'), default='ignore') -%}\n\n -- the temp_ and backup_ relations should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation. This has to happen before\n -- BEGIN, in a separate transaction\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation)-%}\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set to_drop = [] %}\n\n {% if existing_relation is none %}\n {% set build_sql = get_create_table_as_sql(False, target_relation, sql) %}\n {% elif full_refresh_mode %}\n {% set build_sql = get_create_table_as_sql(False, intermediate_relation, sql) %}\n {% set need_swap = true %}\n {% else %}\n {% do run_query(get_create_table_as_sql(True, temp_relation, sql)) %}\n {% do adapter.expand_target_column_types(\n from_relation=temp_relation,\n to_relation=target_relation) %}\n {#-- Process schema changes. Returns dict of changes if successful. Use source columns for upserting/merging --#}\n {% set dest_columns = process_schema_changes(on_schema_change, temp_relation, existing_relation) %}\n {% if not dest_columns %}\n {% set dest_columns = adapter.get_columns_in_relation(existing_relation) %}\n {% endif %}\n\n {#-- Get the incremental_strategy, the macro to use for the strategy, and build the sql --#}\n {% set incremental_strategy = config.get('incremental_strategy') or 'default' %}\n {% set incremental_predicates = config.get('predicates', none) or config.get('incremental_predicates', none) %}\n {% set strategy_sql_macro_func = adapter.get_incremental_strategy_macro(context, incremental_strategy) %}\n {% set strategy_arg_dict = ({'target_relation': target_relation, 'temp_relation': temp_relation, 'unique_key': unique_key, 'dest_columns': dest_columns, 'incremental_predicates': incremental_predicates }) %}\n {% set build_sql = strategy_sql_macro_func(strategy_arg_dict) %}\n\n {% endif %}\n\n {% call statement(\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% if need_swap %}\n {% do adapter.rename_relation(target_relation, backup_relation) %}\n {% do adapter.rename_relation(intermediate_relation, target_relation) %}\n {% do to_drop.append(backup_relation) %}\n {% endif %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if existing_relation is none or existing_relation.is_view or should_full_refresh() %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {% do adapter.commit() %}\n\n {% for rel in to_drop %}\n {% do adapter.drop_relation(rel) %}\n {% endfor %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_temp_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.should_full_refresh", "macro.dbt.incremental_validate_on_schema_change", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks", "macro.dbt.get_create_table_as_sql", "macro.dbt.run_query", "macro.dbt.process_schema_changes", "macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs", "macro.dbt.create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.932844, "supported_languages": ["sql"]}, "macro.dbt.incremental_validate_on_schema_change": {"name": "incremental_validate_on_schema_change", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.incremental_validate_on_schema_change", "macro_sql": "{% macro incremental_validate_on_schema_change(on_schema_change, default='ignore') %}\n\n {% if on_schema_change not in ['sync_all_columns', 'append_new_columns', 'fail', 'ignore'] %}\n\n {% set log_message = 'Invalid value for on_schema_change (%s) specified. Setting default value of %s.' % (on_schema_change, default) %}\n {% do log(log_message) %}\n\n {{ return(default) }}\n\n {% else %}\n\n {{ return(on_schema_change) }}\n\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.938942, "supported_languages": null}, "macro.dbt.check_for_schema_changes": {"name": "check_for_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.check_for_schema_changes", "macro_sql": "{% macro check_for_schema_changes(source_relation, target_relation) %}\n\n {% set schema_changed = False %}\n\n {%- set source_columns = adapter.get_columns_in_relation(source_relation) -%}\n {%- set target_columns = adapter.get_columns_in_relation(target_relation) -%}\n {%- set source_not_in_target = diff_columns(source_columns, target_columns) -%}\n {%- set target_not_in_source = diff_columns(target_columns, source_columns) -%}\n\n {% set new_target_types = diff_column_data_types(source_columns, target_columns) %}\n\n {% if source_not_in_target != [] %}\n {% set schema_changed = True %}\n {% elif target_not_in_source != [] or new_target_types != [] %}\n {% set schema_changed = True %}\n {% elif new_target_types != [] %}\n {% set schema_changed = True %}\n {% endif %}\n\n {% set changes_dict = {\n 'schema_changed': schema_changed,\n 'source_not_in_target': source_not_in_target,\n 'target_not_in_source': target_not_in_source,\n 'source_columns': source_columns,\n 'target_columns': target_columns,\n 'new_target_types': new_target_types\n } %}\n\n {% set msg %}\n In {{ target_relation }}:\n Schema changed: {{ schema_changed }}\n Source columns not in target: {{ source_not_in_target }}\n Target columns not in source: {{ target_not_in_source }}\n New column types: {{ new_target_types }}\n {% endset %}\n\n {% do log(msg) %}\n\n {{ return(changes_dict) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.diff_columns", "macro.dbt.diff_column_data_types"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.940228, "supported_languages": null}, "macro.dbt.sync_column_schemas": {"name": "sync_column_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.sync_column_schemas", "macro_sql": "{% macro sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n\n {%- set add_to_target_arr = schema_changes_dict['source_not_in_target'] -%}\n\n {%- if on_schema_change == 'append_new_columns'-%}\n {%- if add_to_target_arr | length > 0 -%}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, none) -%}\n {%- endif -%}\n\n {% elif on_schema_change == 'sync_all_columns' %}\n {%- set remove_from_target_arr = schema_changes_dict['target_not_in_source'] -%}\n {%- set new_target_types = schema_changes_dict['new_target_types'] -%}\n\n {% if add_to_target_arr | length > 0 or remove_from_target_arr | length > 0 %}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, remove_from_target_arr) -%}\n {% endif %}\n\n {% if new_target_types != [] %}\n {% for ntt in new_target_types %}\n {% set column_name = ntt['column_name'] %}\n {% set new_type = ntt['new_type'] %}\n {% do alter_column_type(target_relation, column_name, new_type) %}\n {% endfor %}\n {% endif %}\n\n {% endif %}\n\n {% set schema_change_message %}\n In {{ target_relation }}:\n Schema change approach: {{ on_schema_change }}\n Columns added: {{ add_to_target_arr }}\n Columns removed: {{ remove_from_target_arr }}\n Data types changed: {{ new_target_types }}\n {% endset %}\n\n {% do log(schema_change_message) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.alter_relation_add_remove_columns", "macro.dbt.alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9414542, "supported_languages": null}, "macro.dbt.process_schema_changes": {"name": "process_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.process_schema_changes", "macro_sql": "{% macro process_schema_changes(on_schema_change, source_relation, target_relation) %}\n\n {% if on_schema_change == 'ignore' %}\n\n {{ return({}) }}\n\n {% else %}\n\n {% set schema_changes_dict = check_for_schema_changes(source_relation, target_relation) %}\n\n {% if schema_changes_dict['schema_changed'] %}\n\n {% if on_schema_change == 'fail' %}\n\n {% set fail_msg %}\n The source and target schemas on this incremental model are out of sync!\n They can be reconciled in several ways:\n - set the `on_schema_change` config to either append_new_columns or sync_all_columns, depending on your situation.\n - Re-run the incremental model with `full_refresh: True` to update the target schema.\n - update the schema manually and re-run the process.\n\n Additional troubleshooting context:\n Source columns not in target: {{ schema_changes_dict['source_not_in_target'] }}\n Target columns not in source: {{ schema_changes_dict['target_not_in_source'] }}\n New column types: {{ schema_changes_dict['new_target_types'] }}\n {% endset %}\n\n {% do exceptions.raise_compiler_error(fail_msg) %}\n\n {# -- unless we ignore, run the sync operation per the config #}\n {% else %}\n\n {% do sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n\n {% endif %}\n\n {% endif %}\n\n {{ return(schema_changes_dict['source_columns']) }}\n\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.check_for_schema_changes", "macro.dbt.sync_column_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.942316, "supported_languages": null}, "macro.dbt.materialization_table_default": {"name": "materialization_table_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table/table.sql", "original_file_path": "macros/materializations/models/table/table.sql", "unique_id": "macro.dbt.materialization_table_default", "macro_sql": "{% materialization table, default %}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='table') %}\n {%- set intermediate_relation = make_intermediate_relation(target_relation) -%}\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%}\n /*\n See ../view/view.sql for more information about this relation.\n */\n {%- set backup_relation_type = 'table' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_table_as_sql(False, intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n {% if existing_relation is not none %}\n {{ adapter.rename_relation(existing_relation, backup_relation) }}\n {% endif %}\n\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% do create_indexes(target_relation) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n -- finally, drop the existing/backup relation after the commit\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.get_create_table_as_sql", "macro.dbt.create_indexes", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.944928, "supported_languages": ["sql"]}, "macro.dbt.get_create_table_as_sql": {"name": "get_create_table_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table/create_table_as.sql", "original_file_path": "macros/materializations/models/table/create_table_as.sql", "unique_id": "macro.dbt.get_create_table_as_sql", "macro_sql": "{% macro get_create_table_as_sql(temporary, relation, sql) -%}\n {{ adapter.dispatch('get_create_table_as_sql', 'dbt')(temporary, relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_create_table_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.94546, "supported_languages": null}, "macro.dbt.default__get_create_table_as_sql": {"name": "default__get_create_table_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table/create_table_as.sql", "original_file_path": "macros/materializations/models/table/create_table_as.sql", "unique_id": "macro.dbt.default__get_create_table_as_sql", "macro_sql": "{% macro default__get_create_table_as_sql(temporary, relation, sql) -%}\n {{ return(create_table_as(temporary, relation, sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.945656, "supported_languages": null}, "macro.dbt.create_table_as": {"name": "create_table_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table/create_table_as.sql", "original_file_path": "macros/materializations/models/table/create_table_as.sql", "unique_id": "macro.dbt.create_table_as", "macro_sql": "{% macro create_table_as(temporary, relation, compiled_code, language='sql') -%}\n {# backward compatibility for create_table_as that does not support language #}\n {% if language == \"sql\" %}\n {{ adapter.dispatch('create_table_as', 'dbt')(temporary, relation, compiled_code)}}\n {% else %}\n {{ adapter.dispatch('create_table_as', 'dbt')(temporary, relation, compiled_code, language) }}\n {% endif %}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.946103, "supported_languages": null}, "macro.dbt.default__create_table_as": {"name": "default__create_table_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table/create_table_as.sql", "original_file_path": "macros/materializations/models/table/create_table_as.sql", "unique_id": "macro.dbt.default__create_table_as", "macro_sql": "{% macro default__create_table_as(temporary, relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create {% if temporary: -%}temporary{%- endif %} table\n {{ relation.include(database=(not temporary), schema=(not temporary)) }}\n as (\n {{ sql }}\n );\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.946514, "supported_languages": null}, "macro.dbt.materialization_view_default": {"name": "materialization_view_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/view/view.sql", "original_file_path": "macros/materializations/models/view/view.sql", "unique_id": "macro.dbt.materialization_view_default", "macro_sql": "{%- materialization view, default -%}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='view') -%}\n {%- set intermediate_relation = make_intermediate_relation(target_relation) -%}\n\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%}\n /*\n This relation (probably) doesn't exist yet. If it does exist, it's a leftover from\n a previous run, and we're going to try to drop it immediately. At the end of this\n materialization, we're going to rename the \"existing_relation\" to this identifier,\n and then we're going to drop it. In order to make sure we run the correct one of:\n - drop view ...\n - drop table ...\n\n We need to set the type of this relation to be the type of the existing_relation, if it exists,\n or else \"view\" as a sane default if it does not. Note that if the existing_relation does not\n exist, then there is nothing to move out of the way and subsequentally drop. In that case,\n this relation will be effectively unused.\n */\n {%- set backup_relation_type = 'view' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n -- move the existing view out of the way\n {% if existing_relation is not none %}\n {{ adapter.rename_relation(existing_relation, backup_relation) }}\n {% endif %}\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.run_hooks", "macro.dbt.drop_relation_if_exists", "macro.dbt.statement", "macro.dbt.get_create_view_as_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.949125, "supported_languages": ["sql"]}, "macro.dbt.handle_existing_table": {"name": "handle_existing_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/view/helpers.sql", "original_file_path": "macros/materializations/models/view/helpers.sql", "unique_id": "macro.dbt.handle_existing_table", "macro_sql": "{% macro handle_existing_table(full_refresh, old_relation) %}\n {{ adapter.dispatch('handle_existing_table', 'dbt')(full_refresh, old_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__handle_existing_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.949427, "supported_languages": null}, "macro.dbt.default__handle_existing_table": {"name": "default__handle_existing_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/view/helpers.sql", "original_file_path": "macros/materializations/models/view/helpers.sql", "unique_id": "macro.dbt.default__handle_existing_table", "macro_sql": "{% macro default__handle_existing_table(full_refresh, old_relation) %}\n {{ log(\"Dropping relation \" ~ old_relation ~ \" because it is of type \" ~ old_relation.type) }}\n {{ adapter.drop_relation(old_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9496572, "supported_languages": null}, "macro.dbt.create_or_replace_view": {"name": "create_or_replace_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/view/create_or_replace_view.sql", "original_file_path": "macros/materializations/models/view/create_or_replace_view.sql", "unique_id": "macro.dbt.create_or_replace_view", "macro_sql": "{% macro create_or_replace_view() %}\n {%- set identifier = model['alias'] -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database,\n type='view') -%}\n {% set grant_config = config.get('grants') %}\n\n {{ run_hooks(pre_hooks) }}\n\n -- If there's a table with the same name and we weren't told to full refresh,\n -- that's an error. If we were told to full refresh, drop it. This behavior differs\n -- for Snowflake and BigQuery, so multiple dispatch is used.\n {%- if old_relation is not none and old_relation.is_table -%}\n {{ handle_existing_table(should_full_refresh(), old_relation) }}\n {%- endif -%}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(target_relation, sql) }}\n {%- endcall %}\n\n {% set should_revoke = should_revoke(exists_as_view, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=True) %}\n\n {{ run_hooks(post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.handle_existing_table", "macro.dbt.should_full_refresh", "macro.dbt.statement", "macro.dbt.get_create_view_as_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9511821, "supported_languages": null}, "macro.dbt.get_create_view_as_sql": {"name": "get_create_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/view/create_view_as.sql", "original_file_path": "macros/materializations/models/view/create_view_as.sql", "unique_id": "macro.dbt.get_create_view_as_sql", "macro_sql": "{% macro get_create_view_as_sql(relation, sql) -%}\n {{ adapter.dispatch('get_create_view_as_sql', 'dbt')(relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_create_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.951541, "supported_languages": null}, "macro.dbt.default__get_create_view_as_sql": {"name": "default__get_create_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/view/create_view_as.sql", "original_file_path": "macros/materializations/models/view/create_view_as.sql", "unique_id": "macro.dbt.default__get_create_view_as_sql", "macro_sql": "{% macro default__get_create_view_as_sql(relation, sql) -%}\n {{ return(create_view_as(relation, sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.951703, "supported_languages": null}, "macro.dbt.create_view_as": {"name": "create_view_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/view/create_view_as.sql", "original_file_path": "macros/materializations/models/view/create_view_as.sql", "unique_id": "macro.dbt.create_view_as", "macro_sql": "{% macro create_view_as(relation, sql) -%}\n {{ adapter.dispatch('create_view_as', 'dbt')(relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.951884, "supported_languages": null}, "macro.dbt.default__create_view_as": {"name": "default__create_view_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/view/create_view_as.sql", "original_file_path": "macros/materializations/models/view/create_view_as.sql", "unique_id": "macro.dbt.default__create_view_as", "macro_sql": "{% macro default__create_view_as(relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n create view {{ relation }} as (\n {{ sql }}\n );\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9521542, "supported_languages": null}, "macro.dbt.materialization_seed_default": {"name": "materialization_seed_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/seed.sql", "original_file_path": "macros/materializations/seeds/seed.sql", "unique_id": "macro.dbt.materialization_seed_default", "macro_sql": "{% materialization seed, default %}\n\n {%- set identifier = model['alias'] -%}\n {%- set full_refresh_mode = (should_full_refresh()) -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n\n {%- set exists_as_table = (old_relation is not none and old_relation.is_table) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set grant_config = config.get('grants') -%}\n {%- set agate_table = load_agate_table() -%}\n -- grab current tables grants config for comparision later on\n\n {%- do store_result('agate_table', response='OK', agate_table=agate_table) -%}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% set create_table_sql = \"\" %}\n {% if exists_as_view %}\n {{ exceptions.raise_compiler_error(\"Cannot seed to '{}', it is a view\".format(old_relation)) }}\n {% elif exists_as_table %}\n {% set create_table_sql = reset_csv_table(model, full_refresh_mode, old_relation, agate_table) %}\n {% else %}\n {% set create_table_sql = create_csv_table(model, agate_table) %}\n {% endif %}\n\n {% set code = 'CREATE' if full_refresh_mode else 'INSERT' %}\n {% set rows_affected = (agate_table.rows | length) %}\n {% set sql = load_csv_rows(model, agate_table) %}\n\n {% call noop_statement('main', code ~ ' ' ~ rows_affected, code, rows_affected) %}\n {{ get_csv_sql(create_table_sql, sql) }};\n {% endcall %}\n\n {% set target_relation = this.incorporate(type='table') %}\n\n {% set should_revoke = should_revoke(old_relation, full_refresh_mode) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if full_refresh_mode or not exists_as_table %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh", "macro.dbt.run_hooks", "macro.dbt.reset_csv_table", "macro.dbt.create_csv_table", "macro.dbt.load_csv_rows", "macro.dbt.noop_statement", "macro.dbt.get_csv_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs", "macro.dbt.create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.955539, "supported_languages": ["sql"]}, "macro.dbt.create_csv_table": {"name": "create_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.create_csv_table", "macro_sql": "{% macro create_csv_table(model, agate_table) -%}\n {{ adapter.dispatch('create_csv_table', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.961004, "supported_languages": null}, "macro.dbt.default__create_csv_table": {"name": "default__create_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__create_csv_table", "macro_sql": "{% macro default__create_csv_table(model, agate_table) %}\n {%- set column_override = model['config'].get('column_types', {}) -%}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n\n {% set sql %}\n create table {{ this.render() }} (\n {%- for col_name in agate_table.column_names -%}\n {%- set inferred_type = adapter.convert_type(agate_table, loop.index0) -%}\n {%- set type = column_override.get(col_name, inferred_type) -%}\n {%- set column_name = (col_name | string) -%}\n {{ adapter.quote_seed_column(column_name, quote_seed_column) }} {{ type }} {%- if not loop.last -%}, {%- endif -%}\n {%- endfor -%}\n )\n {% endset %}\n\n {% call statement('_') -%}\n {{ sql }}\n {%- endcall %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.961934, "supported_languages": null}, "macro.dbt.reset_csv_table": {"name": "reset_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.reset_csv_table", "macro_sql": "{% macro reset_csv_table(model, full_refresh, old_relation, agate_table) -%}\n {{ adapter.dispatch('reset_csv_table', 'dbt')(model, full_refresh, old_relation, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__reset_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9621708, "supported_languages": null}, "macro.dbt.default__reset_csv_table": {"name": "default__reset_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__reset_csv_table", "macro_sql": "{% macro default__reset_csv_table(model, full_refresh, old_relation, agate_table) %}\n {% set sql = \"\" %}\n {% if full_refresh %}\n {{ adapter.drop_relation(old_relation) }}\n {% set sql = create_csv_table(model, agate_table) %}\n {% else %}\n {{ adapter.truncate_relation(old_relation) }}\n {% set sql = \"truncate table \" ~ old_relation %}\n {% endif %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.962661, "supported_languages": null}, "macro.dbt.get_csv_sql": {"name": "get_csv_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_csv_sql", "macro_sql": "{% macro get_csv_sql(create_or_truncate_sql, insert_sql) %}\n {{ adapter.dispatch('get_csv_sql', 'dbt')(create_or_truncate_sql, insert_sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_csv_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9628549, "supported_languages": null}, "macro.dbt.default__get_csv_sql": {"name": "default__get_csv_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_csv_sql", "macro_sql": "{% macro default__get_csv_sql(create_or_truncate_sql, insert_sql) %}\n {{ create_or_truncate_sql }};\n -- dbt seed --\n {{ insert_sql }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.962986, "supported_languages": null}, "macro.dbt.get_binding_char": {"name": "get_binding_char", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_binding_char", "macro_sql": "{% macro get_binding_char() -%}\n {{ adapter.dispatch('get_binding_char', 'dbt')() }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.963124, "supported_languages": null}, "macro.dbt.default__get_binding_char": {"name": "default__get_binding_char", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_binding_char", "macro_sql": "{% macro default__get_binding_char() %}\n {{ return('%s') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9632409, "supported_languages": null}, "macro.dbt.get_batch_size": {"name": "get_batch_size", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_batch_size", "macro_sql": "{% macro get_batch_size() -%}\n {{ return(adapter.dispatch('get_batch_size', 'dbt')()) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_batch_size"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.963403, "supported_languages": null}, "macro.dbt.default__get_batch_size": {"name": "default__get_batch_size", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_batch_size", "macro_sql": "{% macro default__get_batch_size() %}\n {{ return(10000) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.963518, "supported_languages": null}, "macro.dbt.get_seed_column_quoted_csv": {"name": "get_seed_column_quoted_csv", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_seed_column_quoted_csv", "macro_sql": "{% macro get_seed_column_quoted_csv(model, column_names) %}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote_seed_column(col, quote_seed_column)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.964, "supported_languages": null}, "macro.dbt.load_csv_rows": {"name": "load_csv_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.load_csv_rows", "macro_sql": "{% macro load_csv_rows(model, agate_table) -%}\n {{ adapter.dispatch('load_csv_rows', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__load_csv_rows"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.964194, "supported_languages": null}, "macro.dbt.default__load_csv_rows": {"name": "default__load_csv_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__load_csv_rows", "macro_sql": "{% macro default__load_csv_rows(model, agate_table) %}\n\n {% set batch_size = get_batch_size() %}\n\n {% set cols_sql = get_seed_column_quoted_csv(model, agate_table.column_names) %}\n {% set bindings = [] %}\n\n {% set statements = [] %}\n\n {% for chunk in agate_table.rows | batch(batch_size) %}\n {% set bindings = [] %}\n\n {% for row in chunk %}\n {% do bindings.extend(row) %}\n {% endfor %}\n\n {% set sql %}\n insert into {{ this.render() }} ({{ cols_sql }}) values\n {% for row in chunk -%}\n ({%- for column in agate_table.column_names -%}\n {{ get_binding_char() }}\n {%- if not loop.last%},{%- endif %}\n {%- endfor -%})\n {%- if not loop.last%},{%- endif %}\n {%- endfor %}\n {% endset %}\n\n {% do adapter.add_query(sql, bindings=bindings, abridge_sql_log=True) %}\n\n {% if loop.index0 == 0 %}\n {% do statements.append(sql) %}\n {% endif %}\n {% endfor %}\n\n {# Return SQL so we can render it out into the compiled files #}\n {{ return(statements[0]) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_batch_size", "macro.dbt.get_seed_column_quoted_csv", "macro.dbt.get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.965485, "supported_languages": null}, "macro.dbt.generate_alias_name": {"name": "generate_alias_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "unique_id": "macro.dbt.generate_alias_name", "macro_sql": "{% macro generate_alias_name(custom_alias_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_alias_name', 'dbt')(custom_alias_name, node)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_alias_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.965871, "supported_languages": null}, "macro.dbt.default__generate_alias_name": {"name": "default__generate_alias_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "unique_id": "macro.dbt.default__generate_alias_name", "macro_sql": "{% macro default__generate_alias_name(custom_alias_name=none, node=none) -%}\n\n {%- if custom_alias_name is none -%}\n\n {{ node.name }}\n\n {%- else -%}\n\n {{ custom_alias_name | trim }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.966104, "supported_languages": null}, "macro.dbt.generate_schema_name": {"name": "generate_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.generate_schema_name", "macro_sql": "{% macro generate_schema_name(custom_schema_name=none, node=none) -%}\n {{ return(adapter.dispatch('generate_schema_name', 'dbt')(custom_schema_name, node)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.966628, "supported_languages": null}, "macro.dbt.default__generate_schema_name": {"name": "default__generate_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.default__generate_schema_name", "macro_sql": "{% macro default__generate_schema_name(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if custom_schema_name is none -%}\n\n {{ default_schema }}\n\n {%- else -%}\n\n {{ default_schema }}_{{ custom_schema_name | trim }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.966892, "supported_languages": null}, "macro.dbt.generate_schema_name_for_env": {"name": "generate_schema_name_for_env", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.generate_schema_name_for_env", "macro_sql": "{% macro generate_schema_name_for_env(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if target.name == 'prod' and custom_schema_name is not none -%}\n\n {{ custom_schema_name | trim }}\n\n {%- else -%}\n\n {{ default_schema }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.967186, "supported_languages": null}, "macro.dbt.generate_database_name": {"name": "generate_database_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "unique_id": "macro.dbt.generate_database_name", "macro_sql": "{% macro generate_database_name(custom_database_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_database_name', 'dbt')(custom_database_name, node)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_database_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.967584, "supported_languages": null}, "macro.dbt.default__generate_database_name": {"name": "default__generate_database_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "unique_id": "macro.dbt.default__generate_database_name", "macro_sql": "{% macro default__generate_database_name(custom_database_name=none, node=none) -%}\n {%- set default_database = target.database -%}\n {%- if custom_database_name is none -%}\n\n {{ default_database }}\n\n {%- else -%}\n\n {{ custom_database_name }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9678369, "supported_languages": null}, "macro.dbt.default__test_relationships": {"name": "default__test_relationships", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/relationships.sql", "original_file_path": "macros/generic_test_sql/relationships.sql", "unique_id": "macro.dbt.default__test_relationships", "macro_sql": "{% macro default__test_relationships(model, column_name, to, field) %}\n\nwith child as (\n select {{ column_name }} as from_field\n from {{ model }}\n where {{ column_name }} is not null\n),\n\nparent as (\n select {{ field }} as to_field\n from {{ to }}\n)\n\nselect\n from_field\n\nfrom child\nleft join parent\n on child.from_field = parent.to_field\n\nwhere parent.to_field is null\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.968183, "supported_languages": null}, "macro.dbt.default__test_not_null": {"name": "default__test_not_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/not_null.sql", "original_file_path": "macros/generic_test_sql/not_null.sql", "unique_id": "macro.dbt.default__test_not_null", "macro_sql": "{% macro default__test_not_null(model, column_name) %}\n\n{% set column_list = '*' if should_store_failures() else column_name %}\n\nselect {{ column_list }}\nfrom {{ model }}\nwhere {{ column_name }} is null\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_store_failures"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.968481, "supported_languages": null}, "macro.dbt.default__test_unique": {"name": "default__test_unique", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/unique.sql", "original_file_path": "macros/generic_test_sql/unique.sql", "unique_id": "macro.dbt.default__test_unique", "macro_sql": "{% macro default__test_unique(model, column_name) %}\n\nselect\n {{ column_name }} as unique_field,\n count(*) as n_records\n\nfrom {{ model }}\nwhere {{ column_name }} is not null\ngroup by {{ column_name }}\nhaving count(*) > 1\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9687302, "supported_languages": null}, "macro.dbt.default__test_accepted_values": {"name": "default__test_accepted_values", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/accepted_values.sql", "original_file_path": "macros/generic_test_sql/accepted_values.sql", "unique_id": "macro.dbt.default__test_accepted_values", "macro_sql": "{% macro default__test_accepted_values(model, column_name, values, quote=True) %}\n\nwith all_values as (\n\n select\n {{ column_name }} as value_field,\n count(*) as n_records\n\n from {{ model }}\n group by {{ column_name }}\n\n)\n\nselect *\nfrom all_values\nwhere value_field not in (\n {% for value in values -%}\n {% if quote -%}\n '{{ value }}'\n {%- else -%}\n {{ value }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {%- endfor %}\n)\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9693031, "supported_languages": null}, "macro.dbt.statement": {"name": "statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.statement", "macro_sql": "\n{%- macro statement(name=None, fetch_result=False, auto_begin=True, language='sql') -%}\n {%- if execute: -%}\n {%- set compiled_code = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime {} for node \"{}\"'.format(language, model['unique_id'])) }}\n {{ write(compiled_code) }}\n {%- endif -%}\n {%- if language == 'sql'-%}\n {%- set res, table = adapter.execute(compiled_code, auto_begin=auto_begin, fetch=fetch_result) -%}\n {%- elif language == 'python' -%}\n {%- set res = submit_python_job(model, compiled_code) -%}\n {#-- TODO: What should table be for python models? --#}\n {%- set table = None -%}\n {%- else -%}\n {% do exceptions.raise_compiler_error(\"statement macro didn't get supported language\") %}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_result(name, response=res, agate_table=table) }}\n {%- endif -%}\n\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.970796, "supported_languages": null}, "macro.dbt.noop_statement": {"name": "noop_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.noop_statement", "macro_sql": "{% macro noop_statement(name=None, message=None, code=None, rows_affected=None, res=None) -%}\n {%- set sql = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime SQL for node \"{}\"'.format(model['unique_id'])) }}\n {{ write(sql) }}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_raw_result(name, message=message, code=code, rows_affected=rows_affected, agate_table=res) }}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.971383, "supported_languages": null}, "macro.dbt.run_query": {"name": "run_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.run_query", "macro_sql": "{% macro run_query(sql) %}\n {% call statement(\"run_query_statement\", fetch_result=true, auto_begin=false) %}\n {{ sql }}\n {% endcall %}\n\n {% do return(load_result(\"run_query_statement\").table) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.971678, "supported_languages": null}, "macro.dbt.convert_datetime": {"name": "convert_datetime", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.convert_datetime", "macro_sql": "{% macro convert_datetime(date_str, date_fmt) %}\n\n {% set error_msg -%}\n The provided partition date '{{ date_str }}' does not match the expected format '{{ date_fmt }}'\n {%- endset %}\n\n {% set res = try_or_compiler_error(error_msg, modules.datetime.datetime.strptime, date_str.strip(), date_fmt) %}\n {{ return(res) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.973609, "supported_languages": null}, "macro.dbt.dates_in_range": {"name": "dates_in_range", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.dates_in_range", "macro_sql": "{% macro dates_in_range(start_date_str, end_date_str=none, in_fmt=\"%Y%m%d\", out_fmt=\"%Y%m%d\") %}\n {% set end_date_str = start_date_str if end_date_str is none else end_date_str %}\n\n {% set start_date = convert_datetime(start_date_str, in_fmt) %}\n {% set end_date = convert_datetime(end_date_str, in_fmt) %}\n\n {% set day_count = (end_date - start_date).days %}\n {% if day_count < 0 %}\n {% set msg -%}\n Partiton start date is after the end date ({{ start_date }}, {{ end_date }})\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg, model) }}\n {% endif %}\n\n {% set date_list = [] %}\n {% for i in range(0, day_count + 1) %}\n {% set the_date = (modules.datetime.timedelta(days=i) + start_date) %}\n {% if not out_fmt %}\n {% set _ = date_list.append(the_date) %}\n {% else %}\n {% set _ = date_list.append(the_date.strftime(out_fmt)) %}\n {% endif %}\n {% endfor %}\n\n {{ return(date_list) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.convert_datetime"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.974869, "supported_languages": null}, "macro.dbt.partition_range": {"name": "partition_range", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.partition_range", "macro_sql": "{% macro partition_range(raw_partition_date, date_fmt='%Y%m%d') %}\n {% set partition_range = (raw_partition_date | string).split(\",\") %}\n\n {% if (partition_range | length) == 1 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = none %}\n {% elif (partition_range | length) == 2 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = partition_range[1] %}\n {% else %}\n {{ exceptions.raise_compiler_error(\"Invalid partition time. Expected format: {Start Date}[,{End Date}]. Got: \" ~ raw_partition_date) }}\n {% endif %}\n\n {{ return(dates_in_range(start_date, end_date, in_fmt=date_fmt)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.dates_in_range"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.975626, "supported_languages": null}, "macro.dbt.py_current_timestring": {"name": "py_current_timestring", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.py_current_timestring", "macro_sql": "{% macro py_current_timestring() %}\n {% set dt = modules.datetime.datetime.now() %}\n {% do return(dt.strftime(\"%Y%m%d%H%M%S%f\")) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.975861, "supported_languages": null}, "macro.dbt.except": {"name": "except", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/except.sql", "original_file_path": "macros/utils/except.sql", "unique_id": "macro.dbt.except", "macro_sql": "{% macro except() %}\n {{ return(adapter.dispatch('except', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.976088, "supported_languages": null}, "macro.dbt.default__except": {"name": "default__except", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/except.sql", "original_file_path": "macros/utils/except.sql", "unique_id": "macro.dbt.default__except", "macro_sql": "{% macro default__except() %}\n\n except\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.976162, "supported_languages": null}, "macro.dbt.replace": {"name": "replace", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/replace.sql", "original_file_path": "macros/utils/replace.sql", "unique_id": "macro.dbt.replace", "macro_sql": "{% macro replace(field, old_chars, new_chars) -%}\n {{ return(adapter.dispatch('replace', 'dbt') (field, old_chars, new_chars)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__replace"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.97649, "supported_languages": null}, "macro.dbt.default__replace": {"name": "default__replace", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/replace.sql", "original_file_path": "macros/utils/replace.sql", "unique_id": "macro.dbt.default__replace", "macro_sql": "{% macro default__replace(field, old_chars, new_chars) %}\n\n replace(\n {{ field }},\n {{ old_chars }},\n {{ new_chars }}\n )\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9766579, "supported_languages": null}, "macro.dbt.concat": {"name": "concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/concat.sql", "original_file_path": "macros/utils/concat.sql", "unique_id": "macro.dbt.concat", "macro_sql": "{% macro concat(fields) -%}\n {{ return(adapter.dispatch('concat', 'dbt')(fields)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.976903, "supported_languages": null}, "macro.dbt.default__concat": {"name": "default__concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/concat.sql", "original_file_path": "macros/utils/concat.sql", "unique_id": "macro.dbt.default__concat", "macro_sql": "{% macro default__concat(fields) -%}\n {{ fields|join(' || ') }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.977024, "supported_languages": null}, "macro.dbt.length": {"name": "length", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/length.sql", "original_file_path": "macros/utils/length.sql", "unique_id": "macro.dbt.length", "macro_sql": "{% macro length(expression) -%}\n {{ return(adapter.dispatch('length', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__length"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.977273, "supported_languages": null}, "macro.dbt.default__length": {"name": "default__length", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/length.sql", "original_file_path": "macros/utils/length.sql", "unique_id": "macro.dbt.default__length", "macro_sql": "{% macro default__length(expression) %}\n\n length(\n {{ expression }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.977377, "supported_languages": null}, "macro.dbt.dateadd": {"name": "dateadd", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt.dateadd", "macro_sql": "{% macro dateadd(datepart, interval, from_date_or_timestamp) %}\n {{ return(adapter.dispatch('dateadd', 'dbt')(datepart, interval, from_date_or_timestamp)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.977717, "supported_languages": null}, "macro.dbt.default__dateadd": {"name": "default__dateadd", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt.default__dateadd", "macro_sql": "{% macro default__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_date_or_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9778829, "supported_languages": null}, "macro.dbt.intersect": {"name": "intersect", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/intersect.sql", "original_file_path": "macros/utils/intersect.sql", "unique_id": "macro.dbt.intersect", "macro_sql": "{% macro intersect() %}\n {{ return(adapter.dispatch('intersect', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__intersect"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.978105, "supported_languages": null}, "macro.dbt.default__intersect": {"name": "default__intersect", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/intersect.sql", "original_file_path": "macros/utils/intersect.sql", "unique_id": "macro.dbt.default__intersect", "macro_sql": "{% macro default__intersect() %}\n\n intersect\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.978178, "supported_languages": null}, "macro.dbt.escape_single_quotes": {"name": "escape_single_quotes", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/escape_single_quotes.sql", "original_file_path": "macros/utils/escape_single_quotes.sql", "unique_id": "macro.dbt.escape_single_quotes", "macro_sql": "{% macro escape_single_quotes(expression) %}\n {{ return(adapter.dispatch('escape_single_quotes', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__escape_single_quotes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.978441, "supported_languages": null}, "macro.dbt.default__escape_single_quotes": {"name": "default__escape_single_quotes", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/escape_single_quotes.sql", "original_file_path": "macros/utils/escape_single_quotes.sql", "unique_id": "macro.dbt.default__escape_single_quotes", "macro_sql": "{% macro default__escape_single_quotes(expression) -%}\n{{ expression | replace(\"'\",\"''\") }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.978591, "supported_languages": null}, "macro.dbt.right": {"name": "right", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/right.sql", "original_file_path": "macros/utils/right.sql", "unique_id": "macro.dbt.right", "macro_sql": "{% macro right(string_text, length_expression) -%}\n {{ return(adapter.dispatch('right', 'dbt') (string_text, length_expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__right"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.978883, "supported_languages": null}, "macro.dbt.default__right": {"name": "default__right", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/right.sql", "original_file_path": "macros/utils/right.sql", "unique_id": "macro.dbt.default__right", "macro_sql": "{% macro default__right(string_text, length_expression) %}\n\n right(\n {{ string_text }},\n {{ length_expression }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9790301, "supported_languages": null}, "macro.dbt.listagg": {"name": "listagg", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt.listagg", "macro_sql": "{% macro listagg(measure, delimiter_text=\"','\", order_by_clause=none, limit_num=none) -%}\n {{ return(adapter.dispatch('listagg', 'dbt') (measure, delimiter_text, order_by_clause, limit_num)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__listagg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.979677, "supported_languages": null}, "macro.dbt.default__listagg": {"name": "default__listagg", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt.default__listagg", "macro_sql": "{% macro default__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n {% if limit_num -%}\n array_to_string(\n array_slice(\n array_agg(\n {{ measure }}\n ){% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n ,0\n ,{{ limit_num }}\n ),\n {{ delimiter_text }}\n )\n {%- else %}\n listagg(\n {{ measure }},\n {{ delimiter_text }}\n )\n {% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n {%- endif %}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.980156, "supported_languages": null}, "macro.dbt.datediff": {"name": "datediff", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt.datediff", "macro_sql": "{% macro datediff(first_date, second_date, datepart) %}\n {{ return(adapter.dispatch('datediff', 'dbt')(first_date, second_date, datepart)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.980492, "supported_languages": null}, "macro.dbt.default__datediff": {"name": "default__datediff", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt.default__datediff", "macro_sql": "{% macro default__datediff(first_date, second_date, datepart) -%}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9806552, "supported_languages": null}, "macro.dbt.safe_cast": {"name": "safe_cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/safe_cast.sql", "original_file_path": "macros/utils/safe_cast.sql", "unique_id": "macro.dbt.safe_cast", "macro_sql": "{% macro safe_cast(field, type) %}\n {{ return(adapter.dispatch('safe_cast', 'dbt') (field, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__safe_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.980937, "supported_languages": null}, "macro.dbt.default__safe_cast": {"name": "default__safe_cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/safe_cast.sql", "original_file_path": "macros/utils/safe_cast.sql", "unique_id": "macro.dbt.default__safe_cast", "macro_sql": "{% macro default__safe_cast(field, type) %}\n {# most databases don't support this function yet\n so we just need to use cast #}\n cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.981077, "supported_languages": null}, "macro.dbt.hash": {"name": "hash", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/hash.sql", "original_file_path": "macros/utils/hash.sql", "unique_id": "macro.dbt.hash", "macro_sql": "{% macro hash(field) -%}\n {{ return(adapter.dispatch('hash', 'dbt') (field)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__hash"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.981335, "supported_languages": null}, "macro.dbt.default__hash": {"name": "default__hash", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/hash.sql", "original_file_path": "macros/utils/hash.sql", "unique_id": "macro.dbt.default__hash", "macro_sql": "{% macro default__hash(field) -%}\n md5(cast({{ field }} as {{ api.Column.translate_type('string') }}))\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.981496, "supported_languages": null}, "macro.dbt.cast_bool_to_text": {"name": "cast_bool_to_text", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast_bool_to_text.sql", "original_file_path": "macros/utils/cast_bool_to_text.sql", "unique_id": "macro.dbt.cast_bool_to_text", "macro_sql": "{% macro cast_bool_to_text(field) %}\n {{ adapter.dispatch('cast_bool_to_text', 'dbt') (field) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.981739, "supported_languages": null}, "macro.dbt.default__cast_bool_to_text": {"name": "default__cast_bool_to_text", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast_bool_to_text.sql", "original_file_path": "macros/utils/cast_bool_to_text.sql", "unique_id": "macro.dbt.default__cast_bool_to_text", "macro_sql": "{% macro default__cast_bool_to_text(field) %}\n cast({{ field }} as {{ api.Column.translate_type('string') }})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.981895, "supported_languages": null}, "macro.dbt.any_value": {"name": "any_value", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt.any_value", "macro_sql": "{% macro any_value(expression) -%}\n {{ return(adapter.dispatch('any_value', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__any_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.982141, "supported_languages": null}, "macro.dbt.default__any_value": {"name": "default__any_value", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt.default__any_value", "macro_sql": "{% macro default__any_value(expression) -%}\n\n any_value({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.982246, "supported_languages": null}, "macro.dbt.position": {"name": "position", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/position.sql", "original_file_path": "macros/utils/position.sql", "unique_id": "macro.dbt.position", "macro_sql": "{% macro position(substring_text, string_text) -%}\n {{ return(adapter.dispatch('position', 'dbt') (substring_text, string_text)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__position"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.982534, "supported_languages": null}, "macro.dbt.default__position": {"name": "default__position", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/position.sql", "original_file_path": "macros/utils/position.sql", "unique_id": "macro.dbt.default__position", "macro_sql": "{% macro default__position(substring_text, string_text) %}\n\n position(\n {{ substring_text }} in {{ string_text }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.982669, "supported_languages": null}, "macro.dbt.string_literal": {"name": "string_literal", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/literal.sql", "original_file_path": "macros/utils/literal.sql", "unique_id": "macro.dbt.string_literal", "macro_sql": "{%- macro string_literal(value) -%}\n {{ return(adapter.dispatch('string_literal', 'dbt') (value)) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__string_literal"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.982913, "supported_languages": null}, "macro.dbt.default__string_literal": {"name": "default__string_literal", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/literal.sql", "original_file_path": "macros/utils/literal.sql", "unique_id": "macro.dbt.default__string_literal", "macro_sql": "{% macro default__string_literal(value) -%}\n '{{ value }}'\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.983016, "supported_languages": null}, "macro.dbt.type_string": {"name": "type_string", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_string", "macro_sql": "\n\n{%- macro type_string() -%}\n {{ return(adapter.dispatch('type_string', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.983943, "supported_languages": null}, "macro.dbt.default__type_string": {"name": "default__type_string", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_string", "macro_sql": "{% macro default__type_string() %}\n {{ return(api.Column.translate_type(\"string\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.984094, "supported_languages": null}, "macro.dbt.type_timestamp": {"name": "type_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_timestamp", "macro_sql": "\n\n{%- macro type_timestamp() -%}\n {{ return(adapter.dispatch('type_timestamp', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.984254, "supported_languages": null}, "macro.dbt.default__type_timestamp": {"name": "default__type_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_timestamp", "macro_sql": "{% macro default__type_timestamp() %}\n {{ return(api.Column.translate_type(\"timestamp\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.984404, "supported_languages": null}, "macro.dbt.type_float": {"name": "type_float", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_float", "macro_sql": "\n\n{%- macro type_float() -%}\n {{ return(adapter.dispatch('type_float', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_float"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.984575, "supported_languages": null}, "macro.dbt.default__type_float": {"name": "default__type_float", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_float", "macro_sql": "{% macro default__type_float() %}\n {{ return(api.Column.translate_type(\"float\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9847832, "supported_languages": null}, "macro.dbt.type_numeric": {"name": "type_numeric", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_numeric", "macro_sql": "\n\n{%- macro type_numeric() -%}\n {{ return(adapter.dispatch('type_numeric', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9849432, "supported_languages": null}, "macro.dbt.default__type_numeric": {"name": "default__type_numeric", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_numeric", "macro_sql": "{% macro default__type_numeric() %}\n {{ return(api.Column.numeric_type(\"numeric\", 28, 6)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.985124, "supported_languages": null}, "macro.dbt.type_bigint": {"name": "type_bigint", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_bigint", "macro_sql": "\n\n{%- macro type_bigint() -%}\n {{ return(adapter.dispatch('type_bigint', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_bigint"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.985284, "supported_languages": null}, "macro.dbt.default__type_bigint": {"name": "default__type_bigint", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_bigint", "macro_sql": "{% macro default__type_bigint() %}\n {{ return(api.Column.translate_type(\"bigint\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9854379, "supported_languages": null}, "macro.dbt.type_int": {"name": "type_int", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_int", "macro_sql": "\n\n{%- macro type_int() -%}\n {{ return(adapter.dispatch('type_int', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_int"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.985597, "supported_languages": null}, "macro.dbt.default__type_int": {"name": "default__type_int", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_int", "macro_sql": "{%- macro default__type_int() -%}\n {{ return(api.Column.translate_type(\"integer\")) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.98574, "supported_languages": null}, "macro.dbt.type_boolean": {"name": "type_boolean", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_boolean", "macro_sql": "\n\n{%- macro type_boolean() -%}\n {{ return(adapter.dispatch('type_boolean', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_boolean"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.985902, "supported_languages": null}, "macro.dbt.default__type_boolean": {"name": "default__type_boolean", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_boolean", "macro_sql": "{%- macro default__type_boolean() -%}\n {{ return(api.Column.translate_type(\"boolean\")) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.986044, "supported_languages": null}, "macro.dbt.array_concat": {"name": "array_concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_concat.sql", "original_file_path": "macros/utils/array_concat.sql", "unique_id": "macro.dbt.array_concat", "macro_sql": "{% macro array_concat(array_1, array_2) -%}\n {{ return(adapter.dispatch('array_concat', 'dbt')(array_1, array_2)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.986321, "supported_languages": null}, "macro.dbt.default__array_concat": {"name": "default__array_concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_concat.sql", "original_file_path": "macros/utils/array_concat.sql", "unique_id": "macro.dbt.default__array_concat", "macro_sql": "{% macro default__array_concat(array_1, array_2) -%}\n array_cat({{ array_1 }}, {{ array_2 }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.986454, "supported_languages": null}, "macro.dbt.bool_or": {"name": "bool_or", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/bool_or.sql", "original_file_path": "macros/utils/bool_or.sql", "unique_id": "macro.dbt.bool_or", "macro_sql": "{% macro bool_or(expression) -%}\n {{ return(adapter.dispatch('bool_or', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__bool_or"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.986699, "supported_languages": null}, "macro.dbt.default__bool_or": {"name": "default__bool_or", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/bool_or.sql", "original_file_path": "macros/utils/bool_or.sql", "unique_id": "macro.dbt.default__bool_or", "macro_sql": "{% macro default__bool_or(expression) -%}\n\n bool_or({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.986807, "supported_languages": null}, "macro.dbt.last_day": {"name": "last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.last_day", "macro_sql": "{% macro last_day(date, datepart) %}\n {{ return(adapter.dispatch('last_day', 'dbt') (date, datepart)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.987155, "supported_languages": null}, "macro.dbt.default_last_day": {"name": "default_last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.default_last_day", "macro_sql": "\n\n{%- macro default_last_day(date, datepart) -%}\n cast(\n {{dbt.dateadd('day', '-1',\n dbt.dateadd(datepart, '1', dbt.date_trunc(datepart, date))\n )}}\n as date)\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.987422, "supported_languages": null}, "macro.dbt.default__last_day": {"name": "default__last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.default__last_day", "macro_sql": "{% macro default__last_day(date, datepart) -%}\n {{dbt.default_last_day(date, datepart)}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9875681, "supported_languages": null}, "macro.dbt.split_part": {"name": "split_part", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt.split_part", "macro_sql": "{% macro split_part(string_text, delimiter_text, part_number) %}\n {{ return(adapter.dispatch('split_part', 'dbt') (string_text, delimiter_text, part_number)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__split_part"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.988099, "supported_languages": null}, "macro.dbt.default__split_part": {"name": "default__split_part", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt.default__split_part", "macro_sql": "{% macro default__split_part(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n {{ part_number }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.988265, "supported_languages": null}, "macro.dbt._split_part_negative": {"name": "_split_part_negative", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt._split_part_negative", "macro_sql": "{% macro _split_part_negative(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n length({{ string_text }})\n - length(\n replace({{ string_text }}, {{ delimiter_text }}, '')\n ) + 2 {{ part_number }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9884858, "supported_languages": null}, "macro.dbt.date_trunc": {"name": "date_trunc", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_trunc.sql", "original_file_path": "macros/utils/date_trunc.sql", "unique_id": "macro.dbt.date_trunc", "macro_sql": "{% macro date_trunc(datepart, date) -%}\n {{ return(adapter.dispatch('date_trunc', 'dbt') (datepart, date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.988766, "supported_languages": null}, "macro.dbt.default__date_trunc": {"name": "default__date_trunc", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_trunc.sql", "original_file_path": "macros/utils/date_trunc.sql", "unique_id": "macro.dbt.default__date_trunc", "macro_sql": "{% macro default__date_trunc(datepart, date) -%}\n date_trunc('{{datepart}}', {{date}})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.988896, "supported_languages": null}, "macro.dbt.array_construct": {"name": "array_construct", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_construct.sql", "original_file_path": "macros/utils/array_construct.sql", "unique_id": "macro.dbt.array_construct", "macro_sql": "{% macro array_construct(inputs=[], data_type=api.Column.translate_type('integer')) -%}\n {{ return(adapter.dispatch('array_construct', 'dbt')(inputs, data_type)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_construct"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.989271, "supported_languages": null}, "macro.dbt.default__array_construct": {"name": "default__array_construct", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_construct.sql", "original_file_path": "macros/utils/array_construct.sql", "unique_id": "macro.dbt.default__array_construct", "macro_sql": "{% macro default__array_construct(inputs, data_type) -%}\n {% if inputs|length > 0 %}\n array[ {{ inputs|join(' , ') }} ]\n {% else %}\n array[]::{{data_type}}[]\n {% endif %}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.989583, "supported_languages": null}, "macro.dbt.array_append": {"name": "array_append", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_append.sql", "original_file_path": "macros/utils/array_append.sql", "unique_id": "macro.dbt.array_append", "macro_sql": "{% macro array_append(array, new_element) -%}\n {{ return(adapter.dispatch('array_append', 'dbt')(array, new_element)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_append"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9898639, "supported_languages": null}, "macro.dbt.default__array_append": {"name": "default__array_append", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_append.sql", "original_file_path": "macros/utils/array_append.sql", "unique_id": "macro.dbt.default__array_append", "macro_sql": "{% macro default__array_append(array, new_element) -%}\n array_append({{ array }}, {{ new_element }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9899971, "supported_languages": null}, "macro.dbt.create_schema": {"name": "create_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.create_schema", "macro_sql": "{% macro create_schema(relation) -%}\n {{ adapter.dispatch('create_schema', 'dbt')(relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__create_schema"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.990368, "supported_languages": null}, "macro.dbt.default__create_schema": {"name": "default__create_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.default__create_schema", "macro_sql": "{% macro default__create_schema(relation) -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier() }}\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.99055, "supported_languages": null}, "macro.dbt.drop_schema": {"name": "drop_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.drop_schema", "macro_sql": "{% macro drop_schema(relation) -%}\n {{ adapter.dispatch('drop_schema', 'dbt')(relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_schema"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.990714, "supported_languages": null}, "macro.dbt.default__drop_schema": {"name": "default__drop_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.default__drop_schema", "macro_sql": "{% macro default__drop_schema(relation) -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier() }} cascade\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9908962, "supported_languages": null}, "macro.dbt.current_timestamp": {"name": "current_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp", "macro_sql": "{%- macro current_timestamp() -%}\n {{ adapter.dispatch('current_timestamp', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.991381, "supported_languages": null}, "macro.dbt.default__current_timestamp": {"name": "default__current_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp", "macro_sql": "{% macro default__current_timestamp() -%}\n {{ exceptions.raise_not_implemented(\n 'current_timestamp macro not implemented for adapter ' + adapter.type()) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.991533, "supported_languages": null}, "macro.dbt.snapshot_get_time": {"name": "snapshot_get_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.snapshot_get_time", "macro_sql": "\n\n{%- macro snapshot_get_time() -%}\n {{ adapter.dispatch('snapshot_get_time', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.991677, "supported_languages": null}, "macro.dbt.default__snapshot_get_time": {"name": "default__snapshot_get_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__snapshot_get_time", "macro_sql": "{% macro default__snapshot_get_time() %}\n {{ current_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9917812, "supported_languages": null}, "macro.dbt.current_timestamp_backcompat": {"name": "current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp_backcompat", "macro_sql": "{% macro current_timestamp_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.991946, "supported_languages": null}, "macro.dbt.default__current_timestamp_backcompat": {"name": "default__current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp_backcompat", "macro_sql": "{% macro default__current_timestamp_backcompat() %}\n current_timestamp::timestamp\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.992021, "supported_languages": null}, "macro.dbt.current_timestamp_in_utc_backcompat": {"name": "current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp_in_utc_backcompat", "macro_sql": "{% macro current_timestamp_in_utc_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_in_utc_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9921868, "supported_languages": null}, "macro.dbt.default__current_timestamp_in_utc_backcompat": {"name": "default__current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp_in_utc_backcompat", "macro_sql": "{% macro default__current_timestamp_in_utc_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp_backcompat", "macro.dbt_postgres.postgres__current_timestamp_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9923542, "supported_languages": null}, "macro.dbt.get_create_index_sql": {"name": "get_create_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_create_index_sql", "macro_sql": "{% macro get_create_index_sql(relation, index_dict) -%}\n {{ return(adapter.dispatch('get_create_index_sql', 'dbt')(relation, index_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.992815, "supported_languages": null}, "macro.dbt.default__get_create_index_sql": {"name": "default__get_create_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_create_index_sql", "macro_sql": "{% macro default__get_create_index_sql(relation, index_dict) -%}\n {% do return(None) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.992949, "supported_languages": null}, "macro.dbt.create_indexes": {"name": "create_indexes", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.create_indexes", "macro_sql": "{% macro create_indexes(relation) -%}\n {{ adapter.dispatch('create_indexes', 'dbt')(relation) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9931068, "supported_languages": null}, "macro.dbt.default__create_indexes": {"name": "default__create_indexes", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__create_indexes", "macro_sql": "{% macro default__create_indexes(relation) -%}\n {%- set _indexes = config.get('indexes', default=[]) -%}\n\n {% for _index_dict in _indexes %}\n {% set create_index_sql = get_create_index_sql(relation, _index_dict) %}\n {% if create_index_sql %}\n {% do run_query(create_index_sql) %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_create_index_sql", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.993505, "supported_languages": null}, "macro.dbt.make_intermediate_relation": {"name": "make_intermediate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_intermediate_relation", "macro_sql": "{% macro make_intermediate_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_intermediate_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_intermediate_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.996938, "supported_languages": null}, "macro.dbt.default__make_intermediate_relation": {"name": "default__make_intermediate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_intermediate_relation", "macro_sql": "{% macro default__make_intermediate_relation(base_relation, suffix) %}\n {{ return(default__make_temp_relation(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.997165, "supported_languages": null}, "macro.dbt.make_temp_relation": {"name": "make_temp_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_temp_relation", "macro_sql": "{% macro make_temp_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_temp_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.997382, "supported_languages": null}, "macro.dbt.default__make_temp_relation": {"name": "default__make_temp_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_temp_relation", "macro_sql": "{% macro default__make_temp_relation(base_relation, suffix) %}\n {%- set temp_identifier = base_relation.identifier ~ suffix -%}\n {%- set temp_relation = base_relation.incorporate(\n path={\"identifier\": temp_identifier}) -%}\n\n {{ return(temp_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.997671, "supported_languages": null}, "macro.dbt.make_backup_relation": {"name": "make_backup_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_backup_relation", "macro_sql": "{% macro make_backup_relation(base_relation, backup_relation_type, suffix='__dbt_backup') %}\n {{ return(adapter.dispatch('make_backup_relation', 'dbt')(base_relation, backup_relation_type, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_backup_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9979131, "supported_languages": null}, "macro.dbt.default__make_backup_relation": {"name": "default__make_backup_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_backup_relation", "macro_sql": "{% macro default__make_backup_relation(base_relation, backup_relation_type, suffix) %}\n {%- set backup_identifier = base_relation.identifier ~ suffix -%}\n {%- set backup_relation = base_relation.incorporate(\n path={\"identifier\": backup_identifier},\n type=backup_relation_type\n ) -%}\n {{ return(backup_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.998231, "supported_languages": null}, "macro.dbt.drop_relation": {"name": "drop_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.drop_relation", "macro_sql": "{% macro drop_relation(relation) -%}\n {{ return(adapter.dispatch('drop_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__drop_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.998413, "supported_languages": null}, "macro.dbt.default__drop_relation": {"name": "default__drop_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__drop_relation", "macro_sql": "{% macro default__drop_relation(relation) -%}\n {% call statement('drop_relation', auto_begin=False) -%}\n drop {{ relation.type }} if exists {{ relation }} cascade\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.998625, "supported_languages": null}, "macro.dbt.truncate_relation": {"name": "truncate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.truncate_relation", "macro_sql": "{% macro truncate_relation(relation) -%}\n {{ return(adapter.dispatch('truncate_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__truncate_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.998805, "supported_languages": null}, "macro.dbt.default__truncate_relation": {"name": "default__truncate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__truncate_relation", "macro_sql": "{% macro default__truncate_relation(relation) -%}\n {% call statement('truncate_relation') -%}\n truncate table {{ relation }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.9989681, "supported_languages": null}, "macro.dbt.rename_relation": {"name": "rename_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.rename_relation", "macro_sql": "{% macro rename_relation(from_relation, to_relation) -%}\n {{ return(adapter.dispatch('rename_relation', 'dbt')(from_relation, to_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__rename_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.99917, "supported_languages": null}, "macro.dbt.default__rename_relation": {"name": "default__rename_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__rename_relation", "macro_sql": "{% macro default__rename_relation(from_relation, to_relation) -%}\n {% set target_name = adapter.quote_as_configured(to_relation.identifier, 'identifier') %}\n {% call statement('rename_relation') -%}\n alter table {{ from_relation }} rename to {{ target_name }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.999454, "supported_languages": null}, "macro.dbt.get_or_create_relation": {"name": "get_or_create_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.get_or_create_relation", "macro_sql": "{% macro get_or_create_relation(database, schema, identifier, type) -%}\n {{ return(adapter.dispatch('get_or_create_relation', 'dbt')(database, schema, identifier, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_or_create_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563701.999706, "supported_languages": null}, "macro.dbt.default__get_or_create_relation": {"name": "default__get_or_create_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__get_or_create_relation", "macro_sql": "{% macro default__get_or_create_relation(database, schema, identifier, type) %}\n {%- set target_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n\n {% if target_relation %}\n {% do return([true, target_relation]) %}\n {% endif %}\n\n {%- set new_relation = api.Relation.create(\n database=database,\n schema=schema,\n identifier=identifier,\n type=type\n ) -%}\n {% do return([false, new_relation]) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.000256, "supported_languages": null}, "macro.dbt.load_cached_relation": {"name": "load_cached_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.load_cached_relation", "macro_sql": "{% macro load_cached_relation(relation) %}\n {% do return(adapter.get_relation(\n database=relation.database,\n schema=relation.schema,\n identifier=relation.identifier\n )) -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0004869, "supported_languages": null}, "macro.dbt.load_relation": {"name": "load_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.load_relation", "macro_sql": "{% macro load_relation(relation) %}\n {{ return(load_cached_relation(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.000632, "supported_languages": null}, "macro.dbt.drop_relation_if_exists": {"name": "drop_relation_if_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.drop_relation_if_exists", "macro_sql": "{% macro drop_relation_if_exists(relation) %}\n {% if relation is not none %}\n {{ adapter.drop_relation(relation) }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.000823, "supported_languages": null}, "macro.dbt.collect_freshness": {"name": "collect_freshness", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness', 'dbt')(source, loaded_at_field, filter))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.001247, "supported_languages": null}, "macro.dbt.default__collect_freshness": {"name": "default__collect_freshness", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.default__collect_freshness", "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n select\n max({{ loaded_at_field }}) as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endcall %}\n {{ return(load_result('collect_freshness').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.001664, "supported_languages": null}, "macro.dbt.copy_grants": {"name": "copy_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.copy_grants", "macro_sql": "{% macro copy_grants() %}\n {{ return(adapter.dispatch('copy_grants', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__copy_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.003403, "supported_languages": null}, "macro.dbt.default__copy_grants": {"name": "default__copy_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__copy_grants", "macro_sql": "{% macro default__copy_grants() %}\n {{ return(True) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.003524, "supported_languages": null}, "macro.dbt.support_multiple_grantees_per_dcl_statement": {"name": "support_multiple_grantees_per_dcl_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.support_multiple_grantees_per_dcl_statement", "macro_sql": "{% macro support_multiple_grantees_per_dcl_statement() %}\n {{ return(adapter.dispatch('support_multiple_grantees_per_dcl_statement', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__support_multiple_grantees_per_dcl_statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0036962, "supported_languages": null}, "macro.dbt.default__support_multiple_grantees_per_dcl_statement": {"name": "default__support_multiple_grantees_per_dcl_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__support_multiple_grantees_per_dcl_statement", "macro_sql": "\n\n{%- macro default__support_multiple_grantees_per_dcl_statement() -%}\n {{ return(True) }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0038111, "supported_languages": null}, "macro.dbt.should_revoke": {"name": "should_revoke", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.should_revoke", "macro_sql": "{% macro should_revoke(existing_relation, full_refresh_mode=True) %}\n\n {% if not existing_relation %}\n {#-- The table doesn't already exist, so no grants to copy over --#}\n {{ return(False) }}\n {% elif full_refresh_mode %}\n {#-- The object is being REPLACED -- whether grants are copied over depends on the value of user config --#}\n {{ return(copy_grants()) }}\n {% else %}\n {#-- The table is being merged/upserted/inserted -- grants will be carried over --#}\n {{ return(True) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.copy_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.004216, "supported_languages": null}, "macro.dbt.get_show_grant_sql": {"name": "get_show_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_show_grant_sql", "macro_sql": "{% macro get_show_grant_sql(relation) %}\n {{ return(adapter.dispatch(\"get_show_grant_sql\", \"dbt\")(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_show_grant_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0044029, "supported_languages": null}, "macro.dbt.default__get_show_grant_sql": {"name": "default__get_show_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_show_grant_sql", "macro_sql": "{% macro default__get_show_grant_sql(relation) %}\n show grants on {{ relation }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.004502, "supported_languages": null}, "macro.dbt.get_grant_sql": {"name": "get_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_grant_sql", "macro_sql": "{% macro get_grant_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_grant_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_grant_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.004728, "supported_languages": null}, "macro.dbt.default__get_grant_sql": {"name": "default__get_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_grant_sql", "macro_sql": "\n\n{%- macro default__get_grant_sql(relation, privilege, grantees) -%}\n grant {{ privilege }} on {{ relation }} to {{ grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.004919, "supported_languages": null}, "macro.dbt.get_revoke_sql": {"name": "get_revoke_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_revoke_sql", "macro_sql": "{% macro get_revoke_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_revoke_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_revoke_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.005146, "supported_languages": null}, "macro.dbt.default__get_revoke_sql": {"name": "default__get_revoke_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_revoke_sql", "macro_sql": "\n\n{%- macro default__get_revoke_sql(relation, privilege, grantees) -%}\n revoke {{ privilege }} on {{ relation }} from {{ grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.005332, "supported_languages": null}, "macro.dbt.get_dcl_statement_list": {"name": "get_dcl_statement_list", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_dcl_statement_list", "macro_sql": "{% macro get_dcl_statement_list(relation, grant_config, get_dcl_macro) %}\n {{ return(adapter.dispatch('get_dcl_statement_list', 'dbt')(relation, grant_config, get_dcl_macro)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_dcl_statement_list"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.005565, "supported_languages": null}, "macro.dbt.default__get_dcl_statement_list": {"name": "default__get_dcl_statement_list", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_dcl_statement_list", "macro_sql": "\n\n{%- macro default__get_dcl_statement_list(relation, grant_config, get_dcl_macro) -%}\n {#\n -- Unpack grant_config into specific privileges and the set of users who need them granted/revoked.\n -- Depending on whether this database supports multiple grantees per statement, pass in the list of\n -- all grantees per privilege, or (if not) template one statement per privilege-grantee pair.\n -- `get_dcl_macro` will be either `get_grant_sql` or `get_revoke_sql`\n #}\n {%- set dcl_statements = [] -%}\n {%- for privilege, grantees in grant_config.items() %}\n {%- if support_multiple_grantees_per_dcl_statement() and grantees -%}\n {%- set dcl = get_dcl_macro(relation, privilege, grantees) -%}\n {%- do dcl_statements.append(dcl) -%}\n {%- else -%}\n {%- for grantee in grantees -%}\n {% set dcl = get_dcl_macro(relation, privilege, [grantee]) %}\n {%- do dcl_statements.append(dcl) -%}\n {% endfor -%}\n {%- endif -%}\n {%- endfor -%}\n {{ return(dcl_statements) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.support_multiple_grantees_per_dcl_statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.006239, "supported_languages": null}, "macro.dbt.call_dcl_statements": {"name": "call_dcl_statements", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.call_dcl_statements", "macro_sql": "{% macro call_dcl_statements(dcl_statement_list) %}\n {{ return(adapter.dispatch(\"call_dcl_statements\", \"dbt\")(dcl_statement_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__call_dcl_statements"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.006429, "supported_languages": null}, "macro.dbt.default__call_dcl_statements": {"name": "default__call_dcl_statements", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__call_dcl_statements", "macro_sql": "{% macro default__call_dcl_statements(dcl_statement_list) %}\n {#\n -- By default, supply all grant + revoke statements in a single semicolon-separated block,\n -- so that they're all processed together.\n\n -- Some databases do not support this. Those adapters will need to override this macro\n -- to run each statement individually.\n #}\n {% call statement('grants') %}\n {% for dcl_statement in dcl_statement_list %}\n {{ dcl_statement }};\n {% endfor %}\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.006675, "supported_languages": null}, "macro.dbt.apply_grants": {"name": "apply_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.apply_grants", "macro_sql": "{% macro apply_grants(relation, grant_config, should_revoke) %}\n {{ return(adapter.dispatch(\"apply_grants\", \"dbt\")(relation, grant_config, should_revoke)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0069041, "supported_languages": null}, "macro.dbt.default__apply_grants": {"name": "default__apply_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__apply_grants", "macro_sql": "{% macro default__apply_grants(relation, grant_config, should_revoke=True) %}\n {#-- If grant_config is {} or None, this is a no-op --#}\n {% if grant_config %}\n {% if should_revoke %}\n {#-- We think previous grants may have carried over --#}\n {#-- Show current grants and calculate diffs --#}\n {% set current_grants_table = run_query(get_show_grant_sql(relation)) %}\n {% set current_grants_dict = adapter.standardize_grants_dict(current_grants_table) %}\n {% set needs_granting = diff_of_two_dicts(grant_config, current_grants_dict) %}\n {% set needs_revoking = diff_of_two_dicts(current_grants_dict, grant_config) %}\n {% if not (needs_granting or needs_revoking) %}\n {{ log('On ' ~ relation ~': All grants are in place, no revocation or granting needed.')}}\n {% endif %}\n {% else %}\n {#-- We don't think there's any chance of previous grants having carried over. --#}\n {#-- Jump straight to granting what the user has configured. --#}\n {% set needs_revoking = {} %}\n {% set needs_granting = grant_config %}\n {% endif %}\n {% if needs_granting or needs_revoking %}\n {% set revoke_statement_list = get_dcl_statement_list(relation, needs_revoking, get_revoke_sql) %}\n {% set grant_statement_list = get_dcl_statement_list(relation, needs_granting, get_grant_sql) %}\n {% set dcl_statement_list = revoke_statement_list + grant_statement_list %}\n {% if dcl_statement_list %}\n {{ call_dcl_statements(dcl_statement_list) }}\n {% endif %}\n {% endif %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.get_show_grant_sql", "macro.dbt.get_dcl_statement_list", "macro.dbt.call_dcl_statements"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.008053, "supported_languages": null}, "macro.dbt.alter_column_comment": {"name": "alter_column_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.alter_column_comment", "macro_sql": "{% macro alter_column_comment(relation, column_dict) -%}\n {{ return(adapter.dispatch('alter_column_comment', 'dbt')(relation, column_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.008748, "supported_languages": null}, "macro.dbt.default__alter_column_comment": {"name": "default__alter_column_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__alter_column_comment", "macro_sql": "{% macro default__alter_column_comment(relation, column_dict) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_column_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.00892, "supported_languages": null}, "macro.dbt.alter_relation_comment": {"name": "alter_relation_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.alter_relation_comment", "macro_sql": "{% macro alter_relation_comment(relation, relation_comment) -%}\n {{ return(adapter.dispatch('alter_relation_comment', 'dbt')(relation, relation_comment)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__alter_relation_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.009123, "supported_languages": null}, "macro.dbt.default__alter_relation_comment": {"name": "default__alter_relation_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__alter_relation_comment", "macro_sql": "{% macro default__alter_relation_comment(relation, relation_comment) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_relation_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0092921, "supported_languages": null}, "macro.dbt.persist_docs": {"name": "persist_docs", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.persist_docs", "macro_sql": "{% macro persist_docs(relation, model, for_relation=true, for_columns=true) -%}\n {{ return(adapter.dispatch('persist_docs', 'dbt')(relation, model, for_relation, for_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.009561, "supported_languages": null}, "macro.dbt.default__persist_docs": {"name": "default__persist_docs", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__persist_docs", "macro_sql": "{% macro default__persist_docs(relation, model, for_relation, for_columns) -%}\n {% if for_relation and config.persist_relation_docs() and model.description %}\n {% do run_query(alter_relation_comment(relation, model.description)) %}\n {% endif %}\n\n {% if for_columns and config.persist_column_docs() and model.columns %}\n {% do run_query(alter_column_comment(relation, model.columns)) %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.alter_relation_comment", "macro.dbt.alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.010047, "supported_languages": null}, "macro.dbt.get_catalog": {"name": "get_catalog", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog", "macro_sql": "{% macro get_catalog(information_schema, schemas) -%}\n {{ return(adapter.dispatch('get_catalog', 'dbt')(information_schema, schemas)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.011589, "supported_languages": null}, "macro.dbt.default__get_catalog": {"name": "default__get_catalog", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog", "macro_sql": "{% macro default__get_catalog(information_schema, schemas) -%}\n\n {% set typename = adapter.type() %}\n {% set msg -%}\n get_catalog not implemented for {{ typename }}\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0118458, "supported_languages": null}, "macro.dbt.information_schema_name": {"name": "information_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.information_schema_name", "macro_sql": "{% macro information_schema_name(database) %}\n {{ return(adapter.dispatch('information_schema_name', 'dbt')(database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__information_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.012034, "supported_languages": null}, "macro.dbt.default__information_schema_name": {"name": "default__information_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__information_schema_name", "macro_sql": "{% macro default__information_schema_name(database) -%}\n {%- if database -%}\n {{ database }}.INFORMATION_SCHEMA\n {%- else -%}\n INFORMATION_SCHEMA\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.012258, "supported_languages": null}, "macro.dbt.list_schemas": {"name": "list_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_schemas", "macro_sql": "{% macro list_schemas(database) -%}\n {{ return(adapter.dispatch('list_schemas', 'dbt')(database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__list_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.012439, "supported_languages": null}, "macro.dbt.default__list_schemas": {"name": "default__list_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_schemas", "macro_sql": "{% macro default__list_schemas(database) -%}\n {% set sql %}\n select distinct schema_name\n from {{ information_schema_name(database) }}.SCHEMATA\n where catalog_name ilike '{{ database }}'\n {% endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.information_schema_name", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.012686, "supported_languages": null}, "macro.dbt.check_schema_exists": {"name": "check_schema_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.check_schema_exists", "macro_sql": "{% macro check_schema_exists(information_schema, schema) -%}\n {{ return(adapter.dispatch('check_schema_exists', 'dbt')(information_schema, schema)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__check_schema_exists"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0128908, "supported_languages": null}, "macro.dbt.default__check_schema_exists": {"name": "default__check_schema_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__check_schema_exists", "macro_sql": "{% macro default__check_schema_exists(information_schema, schema) -%}\n {% set sql -%}\n select count(*)\n from {{ information_schema.replace(information_schema_view='SCHEMATA') }}\n where catalog_name='{{ information_schema.database }}'\n and schema_name='{{ schema }}'\n {%- endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.replace", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.013194, "supported_languages": null}, "macro.dbt.list_relations_without_caching": {"name": "list_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_relations_without_caching", "macro_sql": "{% macro list_relations_without_caching(schema_relation) %}\n {{ return(adapter.dispatch('list_relations_without_caching', 'dbt')(schema_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__list_relations_without_caching"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.013381, "supported_languages": null}, "macro.dbt.default__list_relations_without_caching": {"name": "default__list_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_relations_without_caching", "macro_sql": "{% macro default__list_relations_without_caching(schema_relation) %}\n {{ exceptions.raise_not_implemented(\n 'list_relations_without_caching macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.013545, "supported_languages": null}, "macro.dbt.get_columns_in_relation": {"name": "get_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_columns_in_relation", "macro_sql": "{% macro get_columns_in_relation(relation) -%}\n {{ return(adapter.dispatch('get_columns_in_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.015313, "supported_languages": null}, "macro.dbt.default__get_columns_in_relation": {"name": "default__get_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_columns_in_relation", "macro_sql": "{% macro default__get_columns_in_relation(relation) -%}\n {{ exceptions.raise_not_implemented(\n 'get_columns_in_relation macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.015479, "supported_languages": null}, "macro.dbt.sql_convert_columns_in_relation": {"name": "sql_convert_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.sql_convert_columns_in_relation", "macro_sql": "{% macro sql_convert_columns_in_relation(table) -%}\n {% set columns = [] %}\n {% for row in table %}\n {% do columns.append(api.Column(*row)) %}\n {% endfor %}\n {{ return(columns) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0157912, "supported_languages": null}, "macro.dbt.get_columns_in_query": {"name": "get_columns_in_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_columns_in_query", "macro_sql": "{% macro get_columns_in_query(select_sql) -%}\n {{ return(adapter.dispatch('get_columns_in_query', 'dbt')(select_sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0159738, "supported_languages": null}, "macro.dbt.default__get_columns_in_query": {"name": "default__get_columns_in_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_columns_in_query", "macro_sql": "{% macro default__get_columns_in_query(select_sql) %}\n {% call statement('get_columns_in_query', fetch_result=True, auto_begin=False) -%}\n select * from (\n {{ select_sql }}\n ) as __dbt_sbq\n where false\n limit 0\n {% endcall %}\n\n {{ return(load_result('get_columns_in_query').table.columns | map(attribute='name') | list) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.016311, "supported_languages": null}, "macro.dbt.alter_column_type": {"name": "alter_column_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.alter_column_type", "macro_sql": "{% macro alter_column_type(relation, column_name, new_column_type) -%}\n {{ return(adapter.dispatch('alter_column_type', 'dbt')(relation, column_name, new_column_type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.016541, "supported_languages": null}, "macro.dbt.default__alter_column_type": {"name": "default__alter_column_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__alter_column_type", "macro_sql": "{% macro default__alter_column_type(relation, column_name, new_column_type) -%}\n {#\n 1. Create a new column (w/ temp name and correct type)\n 2. Copy data over to it\n 3. Drop the existing column (cascade!)\n 4. Rename the new column to existing column\n #}\n {%- set tmp_column = column_name + \"__dbt_alter\" -%}\n\n {% call statement('alter_column_type') %}\n alter table {{ relation }} add column {{ adapter.quote(tmp_column) }} {{ new_column_type }};\n update {{ relation }} set {{ adapter.quote(tmp_column) }} = {{ adapter.quote(column_name) }};\n alter table {{ relation }} drop column {{ adapter.quote(column_name) }} cascade;\n alter table {{ relation }} rename column {{ adapter.quote(tmp_column) }} to {{ adapter.quote(column_name) }}\n {% endcall %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.017141, "supported_languages": null}, "macro.dbt.alter_relation_add_remove_columns": {"name": "alter_relation_add_remove_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.alter_relation_add_remove_columns", "macro_sql": "{% macro alter_relation_add_remove_columns(relation, add_columns = none, remove_columns = none) -%}\n {{ return(adapter.dispatch('alter_relation_add_remove_columns', 'dbt')(relation, add_columns, remove_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__alter_relation_add_remove_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.017398, "supported_languages": null}, "macro.dbt.default__alter_relation_add_remove_columns": {"name": "default__alter_relation_add_remove_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__alter_relation_add_remove_columns", "macro_sql": "{% macro default__alter_relation_add_remove_columns(relation, add_columns, remove_columns) %}\n\n {% if add_columns is none %}\n {% set add_columns = [] %}\n {% endif %}\n {% if remove_columns is none %}\n {% set remove_columns = [] %}\n {% endif %}\n\n {% set sql -%}\n\n alter {{ relation.type }} {{ relation }}\n\n {% for column in add_columns %}\n add column {{ column.name }} {{ column.data_type }}{{ ',' if not loop.last }}\n {% endfor %}{{ ',' if add_columns and remove_columns }}\n\n {% for column in remove_columns %}\n drop column {{ column.name }}{{ ',' if not loop.last }}\n {% endfor %}\n\n {%- endset -%}\n\n {% do run_query(sql) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.018183, "supported_languages": null}, "macro.dbt.resolve_model_name": {"name": "resolve_model_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.resolve_model_name", "macro_sql": "{% macro resolve_model_name(input_model_name) %}\n {{ return(adapter.dispatch('resolve_model_name', 'dbt')(input_model_name)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.01959, "supported_languages": null}, "macro.dbt.default__resolve_model_name": {"name": "default__resolve_model_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.default__resolve_model_name", "macro_sql": "\n\n{%- macro default__resolve_model_name(input_model_name) -%}\n {{ input_model_name | string | replace('\"', '\\\"') }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.019745, "supported_languages": null}, "macro.dbt.build_ref_function": {"name": "build_ref_function", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_ref_function", "macro_sql": "{% macro build_ref_function(model) %}\n\n {%- set ref_dict = {} -%}\n {%- for _ref in model.refs -%}\n {%- set resolved = ref(*_ref) -%}\n {%- do ref_dict.update({_ref | join('.'): resolve_model_name(resolved)}) -%}\n {%- endfor -%}\n\ndef ref(*args,dbt_load_df_function):\n refs = {{ ref_dict | tojson }}\n key = '.'.join(args)\n return dbt_load_df_function(refs[key])\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.020149, "supported_languages": null}, "macro.dbt.build_source_function": {"name": "build_source_function", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_source_function", "macro_sql": "{% macro build_source_function(model) %}\n\n {%- set source_dict = {} -%}\n {%- for _source in model.sources -%}\n {%- set resolved = source(*_source) -%}\n {%- do source_dict.update({_source | join('.'): resolve_model_name(resolved)}) -%}\n {%- endfor -%}\n\ndef source(*args, dbt_load_df_function):\n sources = {{ source_dict | tojson }}\n key = '.'.join(args)\n return dbt_load_df_function(sources[key])\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.02062, "supported_languages": null}, "macro.dbt.build_config_dict": {"name": "build_config_dict", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_config_dict", "macro_sql": "{% macro build_config_dict(model) %}\n {%- set config_dict = {} -%}\n {% set config_dbt_used = zip(model.config.config_keys_used, model.config.config_keys_defaults) | list %}\n {%- for key, default in config_dbt_used -%}\n {# weird type testing with enum, would be much easier to write this logic in Python! #}\n {%- if key == \"language\" -%}\n {%- set value = \"python\" -%}\n {%- endif -%}\n {%- set value = model.config.get(key, default) -%}\n {%- do config_dict.update({key: value}) -%}\n {%- endfor -%}\nconfig_dict = {{ config_dict }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.021199, "supported_languages": null}, "macro.dbt.py_script_postfix": {"name": "py_script_postfix", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.py_script_postfix", "macro_sql": "{% macro py_script_postfix(model) %}\n# This part is user provided model code\n# you will need to copy the next section to run the code\n# COMMAND ----------\n# this part is dbt logic for get ref work, do not modify\n\n{{ build_ref_function(model ) }}\n{{ build_source_function(model ) }}\n{{ build_config_dict(model) }}\n\nclass config:\n def __init__(self, *args, **kwargs):\n pass\n\n @staticmethod\n def get(key, default=None):\n return config_dict.get(key, default)\n\nclass this:\n \"\"\"dbt.this() or dbt.this.identifier\"\"\"\n database = \"{{ this.database }}\"\n schema = \"{{ this.schema }}\"\n identifier = \"{{ this.identifier }}\"\n {% set this_relation_name = resolve_model_name(this) %}\n def __repr__(self):\n return '{{ this_relation_name }}'\n\n\nclass dbtObj:\n def __init__(self, load_df_function) -> None:\n self.source = lambda *args: source(*args, dbt_load_df_function=load_df_function)\n self.ref = lambda *args: ref(*args, dbt_load_df_function=load_df_function)\n self.config = config\n self.this = this()\n self.is_incremental = {{ is_incremental() }}\n\n# COMMAND ----------\n{{py_script_comment()}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.build_ref_function", "macro.dbt.build_source_function", "macro.dbt.build_config_dict", "macro.dbt.resolve_model_name", "macro.dbt.is_incremental", "macro.dbt.py_script_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0216792, "supported_languages": null}, "macro.dbt.py_script_comment": {"name": "py_script_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.py_script_comment", "macro_sql": "{%macro py_script_comment()%}\n{%endmacro%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.021751, "supported_languages": null}, "macro.dbt.test_unique": {"name": "test_unique", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_unique", "macro_sql": "{% test unique(model, column_name) %}\n {% set macro = adapter.dispatch('test_unique', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_unique"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0222661, "supported_languages": null}, "macro.dbt.test_not_null": {"name": "test_not_null", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_not_null", "macro_sql": "{% test not_null(model, column_name) %}\n {% set macro = adapter.dispatch('test_not_null', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_not_null"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0224938, "supported_languages": null}, "macro.dbt.test_accepted_values": {"name": "test_accepted_values", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_accepted_values", "macro_sql": "{% test accepted_values(model, column_name, values, quote=True) %}\n {% set macro = adapter.dispatch('test_accepted_values', 'dbt') %}\n {{ macro(model, column_name, values, quote) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.02278, "supported_languages": null}, "macro.dbt.test_relationships": {"name": "test_relationships", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_relationships", "macro_sql": "{% test relationships(model, column_name, to, field) %}\n {% set macro = adapter.dispatch('test_relationships', 'dbt') %}\n {{ macro(model, column_name, to, field) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_relationships"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.023057, "supported_languages": null}, "macro.dbt_utils.get_url_host": {"name": "get_url_host", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_host.sql", "original_file_path": "macros/web/get_url_host.sql", "unique_id": "macro.dbt_utils.get_url_host", "macro_sql": "{% macro get_url_host(field) -%}\n {{ return(adapter.dispatch('get_url_host', 'dbt_utils')(field)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_url_host"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.023412, "supported_languages": null}, "macro.dbt_utils.default__get_url_host": {"name": "default__get_url_host", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_host.sql", "original_file_path": "macros/web/get_url_host.sql", "unique_id": "macro.dbt_utils.default__get_url_host", "macro_sql": "{% macro default__get_url_host(field) -%}\n\n{%- set parsed =\n dbt.split_part(\n dbt.split_part(\n dbt.replace(\n dbt.replace(\n dbt.replace(field, \"'android-app://'\", \"''\"\n ), \"'http://'\", \"''\"\n ), \"'https://'\", \"''\"\n ), \"'/'\", 1\n ), \"'?'\", 1\n )\n\n-%}\n\n\n {{ dbt.safe_cast(\n parsed,\n dbt.type_string()\n )}}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.split_part", "macro.dbt.replace", "macro.dbt.safe_cast", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.023894, "supported_languages": null}, "macro.dbt_utils.get_url_path": {"name": "get_url_path", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_path.sql", "original_file_path": "macros/web/get_url_path.sql", "unique_id": "macro.dbt_utils.get_url_path", "macro_sql": "{% macro get_url_path(field) -%}\n {{ return(adapter.dispatch('get_url_path', 'dbt_utils')(field)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_url_path"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.024378, "supported_languages": null}, "macro.dbt_utils.default__get_url_path": {"name": "default__get_url_path", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_path.sql", "original_file_path": "macros/web/get_url_path.sql", "unique_id": "macro.dbt_utils.default__get_url_path", "macro_sql": "{% macro default__get_url_path(field) -%}\n\n {%- set stripped_url =\n dbt.replace(\n dbt.replace(field, \"'http://'\", \"''\"), \"'https://'\", \"''\")\n -%}\n\n {%- set first_slash_pos -%}\n coalesce(\n nullif({{ dbt.position(\"'/'\", stripped_url) }}, 0),\n {{ dbt.position(\"'?'\", stripped_url) }} - 1\n )\n {%- endset -%}\n\n {%- set parsed_path =\n dbt.split_part(\n dbt.right(\n stripped_url,\n dbt.length(stripped_url) ~ \"-\" ~ first_slash_pos\n ),\n \"'?'\", 1\n )\n -%}\n\n {{ dbt.safe_cast(\n parsed_path,\n dbt.type_string()\n )}}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.replace", "macro.dbt.position", "macro.dbt.split_part", "macro.dbt.right", "macro.dbt.length", "macro.dbt.safe_cast", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.02504, "supported_languages": null}, "macro.dbt_utils.get_url_parameter": {"name": "get_url_parameter", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_parameter.sql", "original_file_path": "macros/web/get_url_parameter.sql", "unique_id": "macro.dbt_utils.get_url_parameter", "macro_sql": "{% macro get_url_parameter(field, url_parameter) -%}\n {{ return(adapter.dispatch('get_url_parameter', 'dbt_utils')(field, url_parameter)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.025352, "supported_languages": null}, "macro.dbt_utils.default__get_url_parameter": {"name": "default__get_url_parameter", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_parameter.sql", "original_file_path": "macros/web/get_url_parameter.sql", "unique_id": "macro.dbt_utils.default__get_url_parameter", "macro_sql": "{% macro default__get_url_parameter(field, url_parameter) -%}\n\n{%- set formatted_url_parameter = \"'\" + url_parameter + \"='\" -%}\n\n{%- set split = dbt.split_part(dbt.split_part(field, formatted_url_parameter, 2), \"'&'\", 1) -%}\n\nnullif({{ split }},'')\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.split_part"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.025672, "supported_languages": null}, "macro.dbt_utils.test_fewer_rows_than": {"name": "test_fewer_rows_than", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/fewer_rows_than.sql", "original_file_path": "macros/generic_tests/fewer_rows_than.sql", "unique_id": "macro.dbt_utils.test_fewer_rows_than", "macro_sql": "{% test fewer_rows_than(model, compare_model, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_fewer_rows_than', 'dbt_utils')(model, compare_model, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_fewer_rows_than"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.026758, "supported_languages": null}, "macro.dbt_utils.default__test_fewer_rows_than": {"name": "default__test_fewer_rows_than", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/fewer_rows_than.sql", "original_file_path": "macros/generic_tests/fewer_rows_than.sql", "unique_id": "macro.dbt_utils.default__test_fewer_rows_than", "macro_sql": "{% macro default__test_fewer_rows_than(model, compare_model, group_by_columns) %}\n\n{{ config(fail_calc = 'sum(coalesce(row_count_delta, 0))') }}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set join_gb_cols %}\n {% for c in group_by_columns %}\n and a.{{c}} = b.{{c}}\n {% endfor %}\n {% endset %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n{#-- We must add a fake join key in case additional grouping variables are not provided --#}\n{#-- Redshift does not allow for dynamically created join conditions (e.g. full join on 1 = 1 --#}\n{#-- The same logic is used in equal_rowcount. In case of changes, maintain consistent logic --#}\n{% set group_by_columns = ['id_dbtutils_test_fewer_rows_than'] + group_by_columns %}\n{% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n\n\nwith a as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_fewer_rows_than,\n count(*) as count_our_model \n from {{ model }}\n {{ groupby_gb_cols }}\n\n),\nb as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_fewer_rows_than,\n count(*) as count_comparison_model \n from {{ compare_model }}\n {{ groupby_gb_cols }}\n\n),\ncounts as (\n\n select\n\n {% for c in group_by_columns -%}\n a.{{c}} as {{c}}_a,\n b.{{c}} as {{c}}_b,\n {% endfor %}\n\n count_our_model,\n count_comparison_model\n from a\n full join b on \n a.id_dbtutils_test_fewer_rows_than = b.id_dbtutils_test_fewer_rows_than\n {{ join_gb_cols }}\n\n),\nfinal as (\n\n select *,\n case\n -- fail the test if we have more rows than the reference model and return the row count delta\n when count_our_model > count_comparison_model then (count_our_model - count_comparison_model)\n -- fail the test if they are the same number\n when count_our_model = count_comparison_model then 1\n -- pass the test if the delta is positive (i.e. return the number 0)\n else 0\n end as row_count_delta\n from counts\n\n)\n\nselect * from final\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.027788, "supported_languages": null}, "macro.dbt_utils.test_equal_rowcount": {"name": "test_equal_rowcount", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equal_rowcount.sql", "original_file_path": "macros/generic_tests/equal_rowcount.sql", "unique_id": "macro.dbt_utils.test_equal_rowcount", "macro_sql": "{% test equal_rowcount(model, compare_model, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_equal_rowcount', 'dbt_utils')(model, compare_model, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_equal_rowcount"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0286531, "supported_languages": null}, "macro.dbt_utils.default__test_equal_rowcount": {"name": "default__test_equal_rowcount", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equal_rowcount.sql", "original_file_path": "macros/generic_tests/equal_rowcount.sql", "unique_id": "macro.dbt_utils.default__test_equal_rowcount", "macro_sql": "{% macro default__test_equal_rowcount(model, compare_model, group_by_columns) %}\n\n{#-- Needs to be set at parse time, before we return '' below --#}\n{{ config(fail_calc = 'sum(coalesce(diff_count, 0))') }}\n\n{#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n{%- if not execute -%}\n {{ return('') }}\n{% endif %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(', ') + ', ' %}\n {% set join_gb_cols %}\n {% for c in group_by_columns %}\n and a.{{c}} = b.{{c}}\n {% endfor %}\n {% endset %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n{#-- We must add a fake join key in case additional grouping variables are not provided --#}\n{#-- Redshift does not allow for dynamically created join conditions (e.g. full join on 1 = 1 --#}\n{#-- The same logic is used in fewer_rows_than. In case of changes, maintain consistent logic --#}\n{% set group_by_columns = ['id_dbtutils_test_equal_rowcount'] + group_by_columns %}\n{% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n\nwith a as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_equal_rowcount,\n count(*) as count_a \n from {{ model }}\n {{groupby_gb_cols}}\n\n\n),\nb as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_equal_rowcount,\n count(*) as count_b \n from {{ compare_model }}\n {{groupby_gb_cols}}\n\n),\nfinal as (\n\n select\n \n {% for c in group_by_columns -%}\n a.{{c}} as {{c}}_a,\n b.{{c}} as {{c}}_b,\n {% endfor %}\n\n count_a,\n count_b,\n abs(count_a - count_b) as diff_count\n\n from a\n full join b\n on\n a.id_dbtutils_test_equal_rowcount = b.id_dbtutils_test_equal_rowcount\n {{join_gb_cols}}\n\n\n)\n\nselect * from final\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0298061, "supported_languages": null}, "macro.dbt_utils.test_relationships_where": {"name": "test_relationships_where", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/relationships_where.sql", "original_file_path": "macros/generic_tests/relationships_where.sql", "unique_id": "macro.dbt_utils.test_relationships_where", "macro_sql": "{% test relationships_where(model, column_name, to, field, from_condition=\"1=1\", to_condition=\"1=1\") %}\n {{ return(adapter.dispatch('test_relationships_where', 'dbt_utils')(model, column_name, to, field, from_condition, to_condition)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_relationships_where"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.030459, "supported_languages": null}, "macro.dbt_utils.default__test_relationships_where": {"name": "default__test_relationships_where", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/relationships_where.sql", "original_file_path": "macros/generic_tests/relationships_where.sql", "unique_id": "macro.dbt_utils.default__test_relationships_where", "macro_sql": "{% macro default__test_relationships_where(model, column_name, to, field, from_condition=\"1=1\", to_condition=\"1=1\") %}\n\n{# T-SQL has no boolean data type so we use 1=1 which returns TRUE #}\n{# ref https://stackoverflow.com/a/7170753/3842610 #}\n\nwith left_table as (\n\n select\n {{column_name}} as id\n\n from {{model}}\n\n where {{column_name}} is not null\n and {{from_condition}}\n\n),\n\nright_table as (\n\n select\n {{field}} as id\n\n from {{to}}\n\n where {{field}} is not null\n and {{to_condition}}\n\n),\n\nexceptions as (\n\n select\n left_table.id,\n right_table.id as right_id\n\n from left_table\n\n left join right_table\n on left_table.id = right_table.id\n\n where right_table.id is null\n\n)\n\nselect * from exceptions\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.030807, "supported_languages": null}, "macro.dbt_utils.test_recency": {"name": "test_recency", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/recency.sql", "original_file_path": "macros/generic_tests/recency.sql", "unique_id": "macro.dbt_utils.test_recency", "macro_sql": "{% test recency(model, field, datepart, interval, ignore_time_component=False, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_recency', 'dbt_utils')(model, field, datepart, interval, ignore_time_component, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_recency"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0315351, "supported_languages": null}, "macro.dbt_utils.default__test_recency": {"name": "default__test_recency", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/recency.sql", "original_file_path": "macros/generic_tests/recency.sql", "unique_id": "macro.dbt_utils.default__test_recency", "macro_sql": "{% macro default__test_recency(model, field, datepart, interval, ignore_time_component, group_by_columns) %}\n\n{% set threshold = 'cast(' ~ dbt.dateadd(datepart, interval * -1, dbt.current_timestamp()) ~ ' as ' ~ ('date' if ignore_time_component else dbt.type_timestamp()) ~ ')' %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n\nwith recency as (\n\n select \n\n {{ select_gb_cols }}\n {% if ignore_time_component %}\n cast(max({{ field }}) as date) as most_recent\n {%- else %}\n max({{ field }}) as most_recent\n {%- endif %}\n\n from {{ model }}\n\n {{ groupby_gb_cols }}\n\n)\n\nselect\n\n {{ select_gb_cols }}\n most_recent,\n {{ threshold }} as threshold\n\nfrom recency\nwhere most_recent < {{ threshold }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.current_timestamp", "macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0323882, "supported_languages": null}, "macro.dbt_utils.test_not_constant": {"name": "test_not_constant", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_constant.sql", "original_file_path": "macros/generic_tests/not_constant.sql", "unique_id": "macro.dbt_utils.test_not_constant", "macro_sql": "{% test not_constant(model, column_name, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_not_constant', 'dbt_utils')(model, column_name, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_constant"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0328362, "supported_languages": null}, "macro.dbt_utils.default__test_not_constant": {"name": "default__test_not_constant", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_constant.sql", "original_file_path": "macros/generic_tests/not_constant.sql", "unique_id": "macro.dbt_utils.default__test_not_constant", "macro_sql": "{% macro default__test_not_constant(model, column_name, group_by_columns) %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n\nselect\n {# In TSQL, subquery aggregate columns need aliases #}\n {# thus: a filler col name, 'filler_column' #}\n {{select_gb_cols}}\n count(distinct {{ column_name }}) as filler_column\n\nfrom {{ model }}\n\n {{groupby_gb_cols}}\n\nhaving count(distinct {{ column_name }}) = 1\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0332968, "supported_languages": null}, "macro.dbt_utils.test_accepted_range": {"name": "test_accepted_range", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/accepted_range.sql", "original_file_path": "macros/generic_tests/accepted_range.sql", "unique_id": "macro.dbt_utils.test_accepted_range", "macro_sql": "{% test accepted_range(model, column_name, min_value=none, max_value=none, inclusive=true) %}\n {{ return(adapter.dispatch('test_accepted_range', 'dbt_utils')(model, column_name, min_value, max_value, inclusive)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_accepted_range"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.033907, "supported_languages": null}, "macro.dbt_utils.default__test_accepted_range": {"name": "default__test_accepted_range", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/accepted_range.sql", "original_file_path": "macros/generic_tests/accepted_range.sql", "unique_id": "macro.dbt_utils.default__test_accepted_range", "macro_sql": "{% macro default__test_accepted_range(model, column_name, min_value=none, max_value=none, inclusive=true) %}\n\nwith meet_condition as(\n select *\n from {{ model }}\n),\n\nvalidation_errors as (\n select *\n from meet_condition\n where\n -- never true, defaults to an empty result set. Exists to ensure any combo of the `or` clauses below succeeds\n 1 = 2\n\n {%- if min_value is not none %}\n -- records with a value >= min_value are permitted. The `not` flips this to find records that don't meet the rule.\n or not {{ column_name }} > {{- \"=\" if inclusive }} {{ min_value }}\n {%- endif %}\n\n {%- if max_value is not none %}\n -- records with a value <= max_value are permitted. The `not` flips this to find records that don't meet the rule.\n or not {{ column_name }} < {{- \"=\" if inclusive }} {{ max_value }}\n {%- endif %}\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0343812, "supported_languages": null}, "macro.dbt_utils.test_not_accepted_values": {"name": "test_not_accepted_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_accepted_values.sql", "original_file_path": "macros/generic_tests/not_accepted_values.sql", "unique_id": "macro.dbt_utils.test_not_accepted_values", "macro_sql": "{% test not_accepted_values(model, column_name, values, quote=True) %}\n {{ return(adapter.dispatch('test_not_accepted_values', 'dbt_utils')(model, column_name, values, quote)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.034942, "supported_languages": null}, "macro.dbt_utils.default__test_not_accepted_values": {"name": "default__test_not_accepted_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_accepted_values.sql", "original_file_path": "macros/generic_tests/not_accepted_values.sql", "unique_id": "macro.dbt_utils.default__test_not_accepted_values", "macro_sql": "{% macro default__test_not_accepted_values(model, column_name, values, quote=True) %}\nwith all_values as (\n\n select distinct\n {{ column_name }} as value_field\n\n from {{ model }}\n\n),\n\nvalidation_errors as (\n\n select\n value_field\n\n from all_values\n where value_field in (\n {% for value in values -%}\n {% if quote -%}\n '{{ value }}'\n {%- else -%}\n {{ value }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {%- endfor %}\n )\n\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.035329, "supported_languages": null}, "macro.dbt_utils.test_at_least_one": {"name": "test_at_least_one", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/at_least_one.sql", "original_file_path": "macros/generic_tests/at_least_one.sql", "unique_id": "macro.dbt_utils.test_at_least_one", "macro_sql": "{% test at_least_one(model, column_name, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_at_least_one', 'dbt_utils')(model, column_name, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_at_least_one"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.035786, "supported_languages": null}, "macro.dbt_utils.default__test_at_least_one": {"name": "default__test_at_least_one", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/at_least_one.sql", "original_file_path": "macros/generic_tests/at_least_one.sql", "unique_id": "macro.dbt_utils.default__test_at_least_one", "macro_sql": "{% macro default__test_at_least_one(model, column_name, group_by_columns) %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\nselect *\nfrom (\n select\n {# In TSQL, subquery aggregate columns need aliases #}\n {# thus: a filler col name, 'filler_column' #}\n {{select_gb_cols}}\n count({{ column_name }}) as filler_column\n\n from {{ model }}\n\n {{groupby_gb_cols}}\n\n having count({{ column_name }}) = 0\n\n) validation_errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.036255, "supported_languages": null}, "macro.dbt_utils.test_unique_combination_of_columns": {"name": "test_unique_combination_of_columns", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/unique_combination_of_columns.sql", "original_file_path": "macros/generic_tests/unique_combination_of_columns.sql", "unique_id": "macro.dbt_utils.test_unique_combination_of_columns", "macro_sql": "{% test unique_combination_of_columns(model, combination_of_columns, quote_columns=false) %}\n {{ return(adapter.dispatch('test_unique_combination_of_columns', 'dbt_utils')(model, combination_of_columns, quote_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_unique_combination_of_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.036885, "supported_languages": null}, "macro.dbt_utils.default__test_unique_combination_of_columns": {"name": "default__test_unique_combination_of_columns", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/unique_combination_of_columns.sql", "original_file_path": "macros/generic_tests/unique_combination_of_columns.sql", "unique_id": "macro.dbt_utils.default__test_unique_combination_of_columns", "macro_sql": "{% macro default__test_unique_combination_of_columns(model, combination_of_columns, quote_columns=false) %}\n\n{% if not quote_columns %}\n {%- set column_list=combination_of_columns %}\n{% elif quote_columns %}\n {%- set column_list=[] %}\n {% for column in combination_of_columns -%}\n {% set column_list = column_list.append( adapter.quote(column) ) %}\n {%- endfor %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`quote_columns` argument for unique_combination_of_columns test must be one of [True, False] Got: '\" ~ quote ~\"'.'\"\n ) }}\n{% endif %}\n\n{%- set columns_csv=column_list | join(', ') %}\n\n\nwith validation_errors as (\n\n select\n {{ columns_csv }}\n from {{ model }}\n group by {{ columns_csv }}\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.037534, "supported_languages": null}, "macro.dbt_utils.test_cardinality_equality": {"name": "test_cardinality_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/cardinality_equality.sql", "original_file_path": "macros/generic_tests/cardinality_equality.sql", "unique_id": "macro.dbt_utils.test_cardinality_equality", "macro_sql": "{% test cardinality_equality(model, column_name, to, field) %}\n {{ return(adapter.dispatch('test_cardinality_equality', 'dbt_utils')(model, column_name, to, field)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_cardinality_equality"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.038078, "supported_languages": null}, "macro.dbt_utils.default__test_cardinality_equality": {"name": "default__test_cardinality_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/cardinality_equality.sql", "original_file_path": "macros/generic_tests/cardinality_equality.sql", "unique_id": "macro.dbt_utils.default__test_cardinality_equality", "macro_sql": "{% macro default__test_cardinality_equality(model, column_name, to, field) %}\n\n{# T-SQL does not let you use numbers as aliases for columns #}\n{# Thus, no \"GROUP BY 1\" #}\n\nwith table_a as (\nselect\n {{ column_name }},\n count(*) as num_rows\nfrom {{ model }}\ngroup by {{ column_name }}\n),\n\ntable_b as (\nselect\n {{ field }},\n count(*) as num_rows\nfrom {{ to }}\ngroup by {{ field }}\n),\n\nexcept_a as (\n select *\n from table_a\n {{ dbt.except() }}\n select *\n from table_b\n),\n\nexcept_b as (\n select *\n from table_b\n {{ dbt.except() }}\n select *\n from table_a\n),\n\nunioned as (\n select *\n from except_a\n union all\n select *\n from except_b\n)\n\nselect *\nfrom unioned\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0384252, "supported_languages": null}, "macro.dbt_utils.test_expression_is_true": {"name": "test_expression_is_true", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/expression_is_true.sql", "original_file_path": "macros/generic_tests/expression_is_true.sql", "unique_id": "macro.dbt_utils.test_expression_is_true", "macro_sql": "{% test expression_is_true(model, expression, column_name=None) %}\n {{ return(adapter.dispatch('test_expression_is_true', 'dbt_utils')(model, expression, column_name)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_expression_is_true"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.038829, "supported_languages": null}, "macro.dbt_utils.default__test_expression_is_true": {"name": "default__test_expression_is_true", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/expression_is_true.sql", "original_file_path": "macros/generic_tests/expression_is_true.sql", "unique_id": "macro.dbt_utils.default__test_expression_is_true", "macro_sql": "{% macro default__test_expression_is_true(model, expression, column_name) %}\n\n{% set column_list = '*' if should_store_failures() else \"1\" %}\n\nselect\n {{ column_list }}\nfrom {{ model }}\n{% if column_name is none %}\nwhere not({{ expression }})\n{%- else %}\nwhere not({{ column_name }} {{ expression }})\n{%- endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_store_failures"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.039191, "supported_languages": null}, "macro.dbt_utils.test_not_null_proportion": {"name": "test_not_null_proportion", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_null_proportion.sql", "original_file_path": "macros/generic_tests/not_null_proportion.sql", "unique_id": "macro.dbt_utils.test_not_null_proportion", "macro_sql": "{% macro test_not_null_proportion(model, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_not_null_proportion', 'dbt_utils')(model, group_by_columns, **kwargs)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_null_proportion"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.03984, "supported_languages": null}, "macro.dbt_utils.default__test_not_null_proportion": {"name": "default__test_not_null_proportion", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_null_proportion.sql", "original_file_path": "macros/generic_tests/not_null_proportion.sql", "unique_id": "macro.dbt_utils.default__test_not_null_proportion", "macro_sql": "{% macro default__test_not_null_proportion(model, group_by_columns) %}\n\n{% set column_name = kwargs.get('column_name', kwargs.get('arg')) %}\n{% set at_least = kwargs.get('at_least', kwargs.get('arg')) %}\n{% set at_most = kwargs.get('at_most', kwargs.get('arg', 1)) %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\nwith validation as (\n select\n {{select_gb_cols}}\n sum(case when {{ column_name }} is null then 0 else 1 end) / cast(count(*) as numeric) as not_null_proportion\n from {{ model }}\n {{groupby_gb_cols}}\n),\nvalidation_errors as (\n select\n {{select_gb_cols}}\n not_null_proportion\n from validation\n where not_null_proportion < {{ at_least }} or not_null_proportion > {{ at_most }}\n)\nselect\n *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.040843, "supported_languages": null}, "macro.dbt_utils.test_sequential_values": {"name": "test_sequential_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/sequential_values.sql", "original_file_path": "macros/generic_tests/sequential_values.sql", "unique_id": "macro.dbt_utils.test_sequential_values", "macro_sql": "{% test sequential_values(model, column_name, interval=1, datepart=None, group_by_columns = []) %}\n\n {{ return(adapter.dispatch('test_sequential_values', 'dbt_utils')(model, column_name, interval, datepart, group_by_columns)) }}\n\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_sequential_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.041758, "supported_languages": null}, "macro.dbt_utils.default__test_sequential_values": {"name": "default__test_sequential_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/sequential_values.sql", "original_file_path": "macros/generic_tests/sequential_values.sql", "unique_id": "macro.dbt_utils.default__test_sequential_values", "macro_sql": "{% macro default__test_sequential_values(model, column_name, interval=1, datepart=None, group_by_columns = []) %}\n\n{% set previous_column_name = \"previous_\" ~ dbt_utils.slugify(column_name) %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(',') + ', ' %}\n {% set partition_gb_cols = 'partition by ' + group_by_columns|join(',') %}\n{% endif %}\n\nwith windowed as (\n\n select\n {{ select_gb_cols }}\n {{ column_name }},\n lag({{ column_name }}) over (\n {{partition_gb_cols}}\n order by {{ column_name }}\n ) as {{ previous_column_name }}\n from {{ model }}\n),\n\nvalidation_errors as (\n select\n *\n from windowed\n {% if datepart %}\n where not(cast({{ column_name }} as {{ dbt.type_timestamp() }})= cast({{ dbt.dateadd(datepart, interval, previous_column_name) }} as {{ dbt.type_timestamp() }}))\n {% else %}\n where not({{ column_name }} = {{ previous_column_name }} + {{ interval }})\n {% endif %}\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.slugify", "macro.dbt.type_timestamp", "macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.042677, "supported_languages": null}, "macro.dbt_utils.test_equality": {"name": "test_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equality.sql", "original_file_path": "macros/generic_tests/equality.sql", "unique_id": "macro.dbt_utils.test_equality", "macro_sql": "{% test equality(model, compare_model, compare_columns=None) %}\n {{ return(adapter.dispatch('test_equality', 'dbt_utils')(model, compare_model, compare_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_equality"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0433972, "supported_languages": null}, "macro.dbt_utils.default__test_equality": {"name": "default__test_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equality.sql", "original_file_path": "macros/generic_tests/equality.sql", "unique_id": "macro.dbt_utils.default__test_equality", "macro_sql": "{% macro default__test_equality(model, compare_model, compare_columns=None) %}\n\n{% set set_diff %}\n count(*) + coalesce(abs(\n sum(case when which_diff = 'a_minus_b' then 1 else 0 end) -\n sum(case when which_diff = 'b_minus_a' then 1 else 0 end)\n ), 0)\n{% endset %}\n\n{#-- Needs to be set at parse time, before we return '' below --#}\n{{ config(fail_calc = set_diff) }}\n\n{#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n{%- if not execute -%}\n {{ return('') }}\n{% endif %}\n\n-- setup\n{%- do dbt_utils._is_relation(model, 'test_equality') -%}\n\n{#-\nIf the compare_cols arg is provided, we can run this test without querying the\ninformation schema\u00a0\u2014 this allows the model to be an ephemeral model\n-#}\n\n{%- if not compare_columns -%}\n {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%}\n {%- set compare_columns = adapter.get_columns_in_relation(model) | map(attribute='quoted') -%}\n{%- endif -%}\n\n{% set compare_cols_csv = compare_columns | join(', ') %}\n\nwith a as (\n\n select * from {{ model }}\n\n),\n\nb as (\n\n select * from {{ compare_model }}\n\n),\n\na_minus_b as (\n\n select {{compare_cols_csv}} from a\n {{ dbt.except() }}\n select {{compare_cols_csv}} from b\n\n),\n\nb_minus_a as (\n\n select {{compare_cols_csv}} from b\n {{ dbt.except() }}\n select {{compare_cols_csv}} from a\n\n),\n\nunioned as (\n\n select 'a_minus_b' as which_diff, a_minus_b.* from a_minus_b\n union all\n select 'b_minus_a' as which_diff, b_minus_a.* from b_minus_a\n\n)\n\nselect * from unioned\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt.except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.044302, "supported_languages": null}, "macro.dbt_utils.test_not_empty_string": {"name": "test_not_empty_string", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_empty_string.sql", "original_file_path": "macros/generic_tests/not_empty_string.sql", "unique_id": "macro.dbt_utils.test_not_empty_string", "macro_sql": "{% test not_empty_string(model, column_name, trim_whitespace=true) %}\n\n {{ return(adapter.dispatch('test_not_empty_string', 'dbt_utils')(model, column_name, trim_whitespace)) }}\n\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_empty_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.044818, "supported_languages": null}, "macro.dbt_utils.default__test_not_empty_string": {"name": "default__test_not_empty_string", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_empty_string.sql", "original_file_path": "macros/generic_tests/not_empty_string.sql", "unique_id": "macro.dbt_utils.default__test_not_empty_string", "macro_sql": "{% macro default__test_not_empty_string(model, column_name, trim_whitespace=true) %}\n\n with\n \n all_values as (\n\n select \n\n\n {% if trim_whitespace == true -%}\n\n trim({{ column_name }}) as {{ column_name }}\n\n {%- else -%}\n\n {{ column_name }}\n\n {%- endif %}\n \n from {{ model }}\n\n ),\n\n errors as (\n\n select * from all_values\n where {{ column_name }} = ''\n\n )\n\n select * from errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0451179, "supported_languages": null}, "macro.dbt_utils.test_mutually_exclusive_ranges": {"name": "test_mutually_exclusive_ranges", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/mutually_exclusive_ranges.sql", "original_file_path": "macros/generic_tests/mutually_exclusive_ranges.sql", "unique_id": "macro.dbt_utils.test_mutually_exclusive_ranges", "macro_sql": "{% test mutually_exclusive_ranges(model, lower_bound_column, upper_bound_column, partition_by=None, gaps='allowed', zero_length_range_allowed=False) %}\n {{ return(adapter.dispatch('test_mutually_exclusive_ranges', 'dbt_utils')(model, lower_bound_column, upper_bound_column, partition_by, gaps, zero_length_range_allowed)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_mutually_exclusive_ranges"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.048673, "supported_languages": null}, "macro.dbt_utils.default__test_mutually_exclusive_ranges": {"name": "default__test_mutually_exclusive_ranges", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/mutually_exclusive_ranges.sql", "original_file_path": "macros/generic_tests/mutually_exclusive_ranges.sql", "unique_id": "macro.dbt_utils.default__test_mutually_exclusive_ranges", "macro_sql": "{% macro default__test_mutually_exclusive_ranges(model, lower_bound_column, upper_bound_column, partition_by=None, gaps='allowed', zero_length_range_allowed=False) %}\n{% if gaps == 'not_allowed' %}\n {% set allow_gaps_operator='=' %}\n {% set allow_gaps_operator_in_words='equal_to' %}\n{% elif gaps == 'allowed' %}\n {% set allow_gaps_operator='<=' %}\n {% set allow_gaps_operator_in_words='less_than_or_equal_to' %}\n{% elif gaps == 'required' %}\n {% set allow_gaps_operator='<' %}\n {% set allow_gaps_operator_in_words='less_than' %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`gaps` argument for mutually_exclusive_ranges test must be one of ['not_allowed', 'allowed', 'required'] Got: '\" ~ gaps ~\"'.'\"\n ) }}\n{% endif %}\n{% if not zero_length_range_allowed %}\n {% set allow_zero_length_operator='<' %}\n {% set allow_zero_length_operator_in_words='less_than' %}\n{% elif zero_length_range_allowed %}\n {% set allow_zero_length_operator='<=' %}\n {% set allow_zero_length_operator_in_words='less_than_or_equal_to' %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`zero_length_range_allowed` argument for mutually_exclusive_ranges test must be one of [true, false] Got: '\" ~ zero_length_range_allowed ~\"'.'\"\n ) }}\n{% endif %}\n\n{% set partition_clause=\"partition by \" ~ partition_by if partition_by else '' %}\n\nwith window_functions as (\n\n select\n {% if partition_by %}\n {{ partition_by }} as partition_by_col,\n {% endif %}\n {{ lower_bound_column }} as lower_bound,\n {{ upper_bound_column }} as upper_bound,\n\n lead({{ lower_bound_column }}) over (\n {{ partition_clause }}\n order by {{ lower_bound_column }}, {{ upper_bound_column }}\n ) as next_lower_bound,\n\n row_number() over (\n {{ partition_clause }}\n order by {{ lower_bound_column }} desc, {{ upper_bound_column }} desc\n ) = 1 as is_last_record\n\n from {{ model }}\n\n),\n\ncalc as (\n -- We want to return records where one of our assumptions fails, so we'll use\n -- the `not` function with `and` statements so we can write our assumptions more cleanly\n select\n *,\n\n -- For each record: lower_bound should be < upper_bound.\n -- Coalesce it to return an error on the null case (implicit assumption\n -- these columns are not_null)\n coalesce(\n lower_bound {{ allow_zero_length_operator }} upper_bound,\n false\n ) as lower_bound_{{ allow_zero_length_operator_in_words }}_upper_bound,\n\n -- For each record: upper_bound {{ allow_gaps_operator }} the next lower_bound.\n -- Coalesce it to handle null cases for the last record.\n coalesce(\n upper_bound {{ allow_gaps_operator }} next_lower_bound,\n is_last_record,\n false\n ) as upper_bound_{{ allow_gaps_operator_in_words }}_next_lower_bound\n\n from window_functions\n\n),\n\nvalidation_errors as (\n\n select\n *\n from calc\n\n where not(\n -- THE FOLLOWING SHOULD BE TRUE --\n lower_bound_{{ allow_zero_length_operator_in_words }}_upper_bound\n and upper_bound_{{ allow_gaps_operator_in_words }}_next_lower_bound\n )\n)\n\nselect * from validation_errors\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.050215, "supported_languages": null}, "macro.dbt_utils.pretty_log_format": {"name": "pretty_log_format", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_log_format.sql", "original_file_path": "macros/jinja_helpers/pretty_log_format.sql", "unique_id": "macro.dbt_utils.pretty_log_format", "macro_sql": "{% macro pretty_log_format(message) %}\n {{ return(adapter.dispatch('pretty_log_format', 'dbt_utils')(message)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__pretty_log_format"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.050484, "supported_languages": null}, "macro.dbt_utils.default__pretty_log_format": {"name": "default__pretty_log_format", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_log_format.sql", "original_file_path": "macros/jinja_helpers/pretty_log_format.sql", "unique_id": "macro.dbt_utils.default__pretty_log_format", "macro_sql": "{% macro default__pretty_log_format(message) %}\n {{ return( dbt_utils.pretty_time() ~ ' + ' ~ message) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.pretty_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0506508, "supported_languages": null}, "macro.dbt_utils._is_relation": {"name": "_is_relation", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/_is_relation.sql", "original_file_path": "macros/jinja_helpers/_is_relation.sql", "unique_id": "macro.dbt_utils._is_relation", "macro_sql": "{% macro _is_relation(obj, macro) %}\n {%- if not (obj is mapping and obj.get('metadata', {}).get('type', '').endswith('Relation')) -%}\n {%- do exceptions.raise_compiler_error(\"Macro \" ~ macro ~ \" expected a Relation but received the value: \" ~ obj) -%}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.051092, "supported_languages": null}, "macro.dbt_utils.pretty_time": {"name": "pretty_time", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_time.sql", "original_file_path": "macros/jinja_helpers/pretty_time.sql", "unique_id": "macro.dbt_utils.pretty_time", "macro_sql": "{% macro pretty_time(format='%H:%M:%S') %}\n {{ return(adapter.dispatch('pretty_time', 'dbt_utils')(format)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__pretty_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.051368, "supported_languages": null}, "macro.dbt_utils.default__pretty_time": {"name": "default__pretty_time", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_time.sql", "original_file_path": "macros/jinja_helpers/pretty_time.sql", "unique_id": "macro.dbt_utils.default__pretty_time", "macro_sql": "{% macro default__pretty_time(format='%H:%M:%S') %}\n {{ return(modules.datetime.datetime.now().strftime(format)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0515661, "supported_languages": null}, "macro.dbt_utils.log_info": {"name": "log_info", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/log_info.sql", "original_file_path": "macros/jinja_helpers/log_info.sql", "unique_id": "macro.dbt_utils.log_info", "macro_sql": "{% macro log_info(message) %}\n {{ return(adapter.dispatch('log_info', 'dbt_utils')(message)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__log_info"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.05182, "supported_languages": null}, "macro.dbt_utils.default__log_info": {"name": "default__log_info", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/log_info.sql", "original_file_path": "macros/jinja_helpers/log_info.sql", "unique_id": "macro.dbt_utils.default__log_info", "macro_sql": "{% macro default__log_info(message) %}\n {{ log(dbt_utils.pretty_log_format(message), info=True) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.pretty_log_format"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0519948, "supported_languages": null}, "macro.dbt_utils.slugify": {"name": "slugify", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/slugify.sql", "original_file_path": "macros/jinja_helpers/slugify.sql", "unique_id": "macro.dbt_utils.slugify", "macro_sql": "{% macro slugify(string) %}\n\n{#- Lower case the string -#}\n{% set string = string | lower %}\n{#- Replace spaces and dashes with underscores -#}\n{% set string = modules.re.sub('[ -]+', '_', string) %}\n{#- Only take letters, numbers, and underscores -#}\n{% set string = modules.re.sub('[^a-z0-9_]+', '', string) %}\n{#- Prepends \"_\" if string begins with a number -#}\n{% set string = modules.re.sub('^[0-9]', '_' + string[0], string) %}\n\n{{ return(string) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0526102, "supported_languages": null}, "macro.dbt_utils._is_ephemeral": {"name": "_is_ephemeral", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/_is_ephemeral.sql", "original_file_path": "macros/jinja_helpers/_is_ephemeral.sql", "unique_id": "macro.dbt_utils._is_ephemeral", "macro_sql": "{% macro _is_ephemeral(obj, macro) %}\n {%- if obj.is_cte -%}\n {% set ephemeral_prefix = api.Relation.add_ephemeral_prefix('') %}\n {% if obj.name.startswith(ephemeral_prefix) %}\n {% set model_name = obj.name[(ephemeral_prefix|length):] %}\n {% else %}\n {% set model_name = obj.name %}\n {%- endif -%}\n {% set error_message %}\nThe `{{ macro }}` macro cannot be used with ephemeral models, as it relies on the information schema.\n\n`{{ model_name }}` is an ephemeral model. Consider making it a view or table instead.\n {% endset %}\n {%- do exceptions.raise_compiler_error(error_message) -%}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0534499, "supported_languages": null}, "macro.dbt_utils.get_intervals_between": {"name": "get_intervals_between", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.get_intervals_between", "macro_sql": "{% macro get_intervals_between(start_date, end_date, datepart) -%}\n {{ return(adapter.dispatch('get_intervals_between', 'dbt_utils')(start_date, end_date, datepart)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_intervals_between"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0541599, "supported_languages": null}, "macro.dbt_utils.default__get_intervals_between": {"name": "default__get_intervals_between", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.default__get_intervals_between", "macro_sql": "{% macro default__get_intervals_between(start_date, end_date, datepart) -%}\n {%- call statement('get_intervals_between', fetch_result=True) %}\n\n select {{ dbt.datediff(start_date, end_date, datepart) }}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_intervals_between') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values[0]) }}\n {%- else -%}\n {{ return(1) }}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.054827, "supported_languages": null}, "macro.dbt_utils.date_spine": {"name": "date_spine", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.date_spine", "macro_sql": "{% macro date_spine(datepart, start_date, end_date) %}\n {{ return(adapter.dispatch('date_spine', 'dbt_utils')(datepart, start_date, end_date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.055062, "supported_languages": null}, "macro.dbt_utils.default__date_spine": {"name": "default__date_spine", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.default__date_spine", "macro_sql": "{% macro default__date_spine(datepart, start_date, end_date) %}\n\n\n{# call as follows:\n\ndate_spine(\n \"day\",\n \"to_date('01/01/2016', 'mm/dd/yyyy')\",\n \"dbt.dateadd(week, 1, current_date)\"\n) #}\n\n\nwith rawdata as (\n\n {{dbt_utils.generate_series(\n dbt_utils.get_intervals_between(start_date, end_date, datepart)\n )}}\n\n),\n\nall_periods as (\n\n select (\n {{\n dbt.dateadd(\n datepart,\n \"row_number() over (order by 1) - 1\",\n start_date\n )\n }}\n ) as date_{{datepart}}\n from rawdata\n\n),\n\nfiltered as (\n\n select *\n from all_periods\n where date_{{datepart}} <= {{ end_date }}\n\n)\n\nselect * from filtered\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.generate_series", "macro.dbt_utils.get_intervals_between", "macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.055427, "supported_languages": null}, "macro.dbt_utils.safe_subtract": {"name": "safe_subtract", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_subtract.sql", "original_file_path": "macros/sql/safe_subtract.sql", "unique_id": "macro.dbt_utils.safe_subtract", "macro_sql": "{%- macro safe_subtract(field_list) -%}\n {{ return(adapter.dispatch('safe_subtract', 'dbt_utils')(field_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__safe_subtract"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.055819, "supported_languages": null}, "macro.dbt_utils.default__safe_subtract": {"name": "default__safe_subtract", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_subtract.sql", "original_file_path": "macros/sql/safe_subtract.sql", "unique_id": "macro.dbt_utils.default__safe_subtract", "macro_sql": "\n\n{%- macro default__safe_subtract(field_list) -%}\n\n{%- if field_list is not iterable or field_list is string or field_list is mapping -%}\n\n{%- set error_message = '\nWarning: the `safe_subtract` macro takes a single list argument instead of \\\nstring arguments. The {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.raise_compiler_error(error_message) -%}\n\n{%- endif -%}\n\n{% set fields = [] %}\n\n{%- for field in field_list -%}\n\n {% do fields.append(\"coalesce(\" ~ field ~ \", 0)\") %}\n\n{%- endfor -%}\n\n{{ fields|join(' -\\n ') }}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.056364, "supported_languages": null}, "macro.dbt_utils.nullcheck_table": {"name": "nullcheck_table", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck_table.sql", "original_file_path": "macros/sql/nullcheck_table.sql", "unique_id": "macro.dbt_utils.nullcheck_table", "macro_sql": "{% macro nullcheck_table(relation) %}\n {{ return(adapter.dispatch('nullcheck_table', 'dbt_utils')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__nullcheck_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.056679, "supported_languages": null}, "macro.dbt_utils.default__nullcheck_table": {"name": "default__nullcheck_table", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck_table.sql", "original_file_path": "macros/sql/nullcheck_table.sql", "unique_id": "macro.dbt_utils.default__nullcheck_table", "macro_sql": "{% macro default__nullcheck_table(relation) %}\n\n {%- do dbt_utils._is_relation(relation, 'nullcheck_table') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'nullcheck_table') -%}\n {% set cols = adapter.get_columns_in_relation(relation) %}\n\n select {{ dbt_utils.nullcheck(cols) }}\n from {{relation}}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.nullcheck"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0570261, "supported_languages": null}, "macro.dbt_utils.get_relations_by_pattern": {"name": "get_relations_by_pattern", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_pattern.sql", "original_file_path": "macros/sql/get_relations_by_pattern.sql", "unique_id": "macro.dbt_utils.get_relations_by_pattern", "macro_sql": "{% macro get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_relations_by_pattern', 'dbt_utils')(schema_pattern, table_pattern, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.057732, "supported_languages": null}, "macro.dbt_utils.default__get_relations_by_pattern": {"name": "default__get_relations_by_pattern", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_pattern.sql", "original_file_path": "macros/sql/get_relations_by_pattern.sql", "unique_id": "macro.dbt_utils.default__get_relations_by_pattern", "macro_sql": "{% macro default__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n {{ dbt_utils.get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude, database) }}\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=database,\n schema=row.table_schema,\n identifier=row.table_name,\n type=row.table_type\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0585861, "supported_languages": null}, "macro.dbt_utils.get_powers_of_two": {"name": "get_powers_of_two", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.get_powers_of_two", "macro_sql": "{% macro get_powers_of_two(upper_bound) %}\n {{ return(adapter.dispatch('get_powers_of_two', 'dbt_utils')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.059445, "supported_languages": null}, "macro.dbt_utils.default__get_powers_of_two": {"name": "default__get_powers_of_two", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.default__get_powers_of_two", "macro_sql": "{% macro default__get_powers_of_two(upper_bound) %}\n\n {% if upper_bound <= 0 %}\n {{ exceptions.raise_compiler_error(\"upper bound must be positive\") }}\n {% endif %}\n\n {% for _ in range(1, 100) %}\n {% if upper_bound <= 2 ** loop.index %}{{ return(loop.index) }}{% endif %}\n {% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0598679, "supported_languages": null}, "macro.dbt_utils.generate_series": {"name": "generate_series", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.generate_series", "macro_sql": "{% macro generate_series(upper_bound) %}\n {{ return(adapter.dispatch('generate_series', 'dbt_utils')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__generate_series"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0600598, "supported_languages": null}, "macro.dbt_utils.default__generate_series": {"name": "default__generate_series", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.default__generate_series", "macro_sql": "{% macro default__generate_series(upper_bound) %}\n\n {% set n = dbt_utils.get_powers_of_two(upper_bound) %}\n\n with p as (\n select 0 as generated_number union all select 1\n ), unioned as (\n\n select\n\n {% for i in range(n) %}\n p{{i}}.generated_number * power(2, {{i}})\n {% if not loop.last %} + {% endif %}\n {% endfor %}\n + 1\n as generated_number\n\n from\n\n {% for i in range(n) %}\n p as p{{i}}\n {% if not loop.last %} cross join {% endif %}\n {% endfor %}\n\n )\n\n select *\n from unioned\n where generated_number <= {{upper_bound}}\n order by generated_number\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.060587, "supported_languages": null}, "macro.dbt_utils.get_relations_by_prefix": {"name": "get_relations_by_prefix", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_prefix.sql", "original_file_path": "macros/sql/get_relations_by_prefix.sql", "unique_id": "macro.dbt_utils.get_relations_by_prefix", "macro_sql": "{% macro get_relations_by_prefix(schema, prefix, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_relations_by_prefix', 'dbt_utils')(schema, prefix, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_relations_by_prefix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.061292, "supported_languages": null}, "macro.dbt_utils.default__get_relations_by_prefix": {"name": "default__get_relations_by_prefix", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_prefix.sql", "original_file_path": "macros/sql/get_relations_by_prefix.sql", "unique_id": "macro.dbt_utils.default__get_relations_by_prefix", "macro_sql": "{% macro default__get_relations_by_prefix(schema, prefix, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n {{ dbt_utils.get_tables_by_prefix_sql(schema, prefix, exclude, database) }}\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=database,\n schema=row.table_schema,\n identifier=row.table_name,\n type=row.table_type\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.get_tables_by_prefix_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.062144, "supported_languages": null}, "macro.dbt_utils.get_tables_by_prefix_sql": {"name": "get_tables_by_prefix_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_prefix_sql.sql", "original_file_path": "macros/sql/get_tables_by_prefix_sql.sql", "unique_id": "macro.dbt_utils.get_tables_by_prefix_sql", "macro_sql": "{% macro get_tables_by_prefix_sql(schema, prefix, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_tables_by_prefix_sql', 'dbt_utils')(schema, prefix, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_tables_by_prefix_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0625489, "supported_languages": null}, "macro.dbt_utils.default__get_tables_by_prefix_sql": {"name": "default__get_tables_by_prefix_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_prefix_sql.sql", "original_file_path": "macros/sql/get_tables_by_prefix_sql.sql", "unique_id": "macro.dbt_utils.default__get_tables_by_prefix_sql", "macro_sql": "{% macro default__get_tables_by_prefix_sql(schema, prefix, exclude='', database=target.database) %}\n\n {{ dbt_utils.get_tables_by_pattern_sql(\n schema_pattern = schema,\n table_pattern = prefix ~ '%',\n exclude = exclude,\n database = database\n ) }}\n \n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.062834, "supported_languages": null}, "macro.dbt_utils.star": {"name": "star", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/star.sql", "original_file_path": "macros/sql/star.sql", "unique_id": "macro.dbt_utils.star", "macro_sql": "{% macro star(from, relation_alias=False, except=[], prefix='', suffix='', quote_identifiers=True) -%}\r\n {{ return(adapter.dispatch('star', 'dbt_utils')(from, relation_alias, except, prefix, suffix, quote_identifiers)) }}\r\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__star"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.064157, "supported_languages": null}, "macro.dbt_utils.default__star": {"name": "default__star", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/star.sql", "original_file_path": "macros/sql/star.sql", "unique_id": "macro.dbt_utils.default__star", "macro_sql": "{% macro default__star(from, relation_alias=False, except=[], prefix='', suffix='', quote_identifiers=True) -%}\r\n {%- do dbt_utils._is_relation(from, 'star') -%}\r\n {%- do dbt_utils._is_ephemeral(from, 'star') -%}\r\n\r\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\r\n {%- if not execute -%}\r\n {% do return('*') %}\r\n {%- endif -%}\r\n\r\n {% set cols = dbt_utils.get_filtered_columns_in_relation(from, except) %}\r\n\r\n {%- if cols|length <= 0 -%}\r\n {% if flags.WHICH == 'compile' %}\r\n {% set response %}\r\n*\r\n/* No columns were returned. Maybe the relation doesn't exist yet \r\nor all columns were excluded. This star is only output during \r\ndbt compile, and exists to keep SQLFluff happy. */\r\n {% endset %}\r\n {% do return(response) %}\r\n {% else %}\r\n {% do return(\"/* no columns returned from star() macro */\") %}\r\n {% endif %}\r\n {%- else -%}\r\n {%- for col in cols %}\r\n {%- if relation_alias %}{{ relation_alias }}.{% else %}{%- endif -%}\r\n {%- if quote_identifiers -%}\r\n {{ adapter.quote(col)|trim }} {%- if prefix!='' or suffix!='' %} as {{ adapter.quote(prefix ~ col ~ suffix)|trim }} {%- endif -%}\r\n {%- else -%}\r\n {{ col|trim }} {%- if prefix!='' or suffix!='' %} as {{ (prefix ~ col ~ suffix)|trim }} {%- endif -%}\r\n {% endif %}\r\n {%- if not loop.last %},{{ '\\n ' }}{%- endif -%}\r\n {%- endfor -%}\r\n {% endif %}\r\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.get_filtered_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0656629, "supported_languages": null}, "macro.dbt_utils.unpivot": {"name": "unpivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/unpivot.sql", "original_file_path": "macros/sql/unpivot.sql", "unique_id": "macro.dbt_utils.unpivot", "macro_sql": "{% macro unpivot(relation=none, cast_to='varchar', exclude=none, remove=none, field_name='field_name', value_name='value') -%}\n {{ return(adapter.dispatch('unpivot', 'dbt_utils')(relation, cast_to, exclude, remove, field_name, value_name)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__unpivot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.06707, "supported_languages": null}, "macro.dbt_utils.default__unpivot": {"name": "default__unpivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/unpivot.sql", "original_file_path": "macros/sql/unpivot.sql", "unique_id": "macro.dbt_utils.default__unpivot", "macro_sql": "{% macro default__unpivot(relation=none, cast_to='varchar', exclude=none, remove=none, field_name='field_name', value_name='value') -%}\n\n {% if not relation %}\n {{ exceptions.raise_compiler_error(\"Error: argument `relation` is required for `unpivot` macro.\") }}\n {% endif %}\n\n {%- set exclude = exclude if exclude is not none else [] %}\n {%- set remove = remove if remove is not none else [] %}\n\n {%- set include_cols = [] %}\n\n {%- set table_columns = {} %}\n\n {%- do table_columns.update({relation: []}) %}\n\n {%- do dbt_utils._is_relation(relation, 'unpivot') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'unpivot') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) %}\n\n {%- for col in cols -%}\n {%- if col.column.lower() not in remove|map('lower') and col.column.lower() not in exclude|map('lower') -%}\n {% do include_cols.append(col) %}\n {%- endif %}\n {%- endfor %}\n\n\n {%- for col in include_cols -%}\n select\n {%- for exclude_col in exclude %}\n {{ exclude_col }},\n {%- endfor %}\n\n cast('{{ col.column }}' as {{ dbt.type_string() }}) as {{ field_name }},\n cast( {% if col.data_type == 'boolean' %}\n {{ dbt.cast_bool_to_text(col.column) }}\n {% else %}\n {{ col.column }}\n {% endif %}\n as {{ cast_to }}) as {{ value_name }}\n\n from {{ relation }}\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n {%- endfor -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt.type_string", "macro.dbt.cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.068691, "supported_languages": null}, "macro.dbt_utils.safe_divide": {"name": "safe_divide", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_divide.sql", "original_file_path": "macros/sql/safe_divide.sql", "unique_id": "macro.dbt_utils.safe_divide", "macro_sql": "{% macro safe_divide(numerator, denominator) -%}\n {{ return(adapter.dispatch('safe_divide', 'dbt_utils')(numerator, denominator)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__safe_divide"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.068985, "supported_languages": null}, "macro.dbt_utils.default__safe_divide": {"name": "default__safe_divide", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_divide.sql", "original_file_path": "macros/sql/safe_divide.sql", "unique_id": "macro.dbt_utils.default__safe_divide", "macro_sql": "{% macro default__safe_divide(numerator, denominator) %}\n ( {{ numerator }} ) / nullif( ( {{ denominator }} ), 0)\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.069119, "supported_languages": null}, "macro.dbt_utils.union_relations": {"name": "union_relations", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/union.sql", "original_file_path": "macros/sql/union.sql", "unique_id": "macro.dbt_utils.union_relations", "macro_sql": "{%- macro union_relations(relations, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_relation', where=none) -%}\n {{ return(adapter.dispatch('union_relations', 'dbt_utils')(relations, column_override, include, exclude, source_column_name, where)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__union_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.072532, "supported_languages": null}, "macro.dbt_utils.default__union_relations": {"name": "default__union_relations", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/union.sql", "original_file_path": "macros/sql/union.sql", "unique_id": "macro.dbt_utils.default__union_relations", "macro_sql": "\n\n{%- macro default__union_relations(relations, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_relation', where=none) -%}\n\n {%- if exclude and include -%}\n {{ exceptions.raise_compiler_error(\"Both an exclude and include list were provided to the `union` macro. Only one is allowed\") }}\n {%- endif -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. -#}\n {%- if not execute %}\n {{ return('') }}\n {% endif -%}\n\n {%- set column_override = column_override if column_override is not none else {} -%}\n\n {%- set relation_columns = {} -%}\n {%- set column_superset = {} -%}\n {%- set all_excludes = [] -%}\n {%- set all_includes = [] -%}\n\n {%- if exclude -%}\n {%- for exc in exclude -%}\n {%- do all_excludes.append(exc | lower) -%}\n {%- endfor -%}\n {%- endif -%}\n\n {%- if include -%}\n {%- for inc in include -%}\n {%- do all_includes.append(inc | lower) -%}\n {%- endfor -%}\n {%- endif -%}\n\n {%- for relation in relations -%}\n\n {%- do relation_columns.update({relation: []}) -%}\n\n {%- do dbt_utils._is_relation(relation, 'union_relations') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'union_relations') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) -%}\n {%- for col in cols -%}\n\n {#- If an exclude list was provided and the column is in the list, do nothing -#}\n {%- if exclude and col.column | lower in all_excludes -%}\n\n {#- If an include list was provided and the column is not in the list, do nothing -#}\n {%- elif include and col.column | lower not in all_includes -%}\n\n {#- Otherwise add the column to the column superset -#}\n {%- else -%}\n\n {#- update the list of columns in this relation -#}\n {%- do relation_columns[relation].append(col.column) -%}\n\n {%- if col.column in column_superset -%}\n\n {%- set stored = column_superset[col.column] -%}\n {%- if col.is_string() and stored.is_string() and col.string_size() > stored.string_size() -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif %}\n\n {%- else -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif -%}\n\n {%- endif -%}\n\n {%- endfor -%}\n {%- endfor -%}\n\n {%- set ordered_column_names = column_superset.keys() -%}\n {%- set dbt_command = flags.WHICH -%}\n\n\n {% if dbt_command in ['run', 'build'] %}\n {% if (include | length > 0 or exclude | length > 0) and not column_superset.keys() %}\n {%- set relations_string -%}\n {%- for relation in relations -%}\n {{ relation.name }}\n {%- if not loop.last %}, {% endif -%}\n {%- endfor -%}\n {%- endset -%}\n\n {%- set error_message -%}\n There were no columns found to union for relations {{ relations_string }}\n {%- endset -%}\n\n {{ exceptions.raise_compiler_error(error_message) }}\n {%- endif -%}\n {%- endif -%}\n\n {%- for relation in relations %}\n\n (\n select\n\n {%- if source_column_name is not none %}\n cast({{ dbt.string_literal(relation) }} as {{ dbt.type_string() }}) as {{ source_column_name }},\n {%- endif %}\n\n {% for col_name in ordered_column_names -%}\n\n {%- set col = column_superset[col_name] %}\n {%- set col_type = column_override.get(col.column, col.data_type) %}\n {%- set col_name = adapter.quote(col_name) if col_name in relation_columns[relation] else 'null' %}\n cast({{ col_name }} as {{ col_type }}) as {{ col.quoted }} {% if not loop.last %},{% endif -%}\n\n {%- endfor %}\n\n from {{ relation }}\n\n {% if where -%}\n where {{ where }}\n {%- endif %}\n )\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n\n {%- endfor -%}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt.string_literal", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0760372, "supported_languages": null}, "macro.dbt_utils.group_by": {"name": "group_by", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/groupby.sql", "original_file_path": "macros/sql/groupby.sql", "unique_id": "macro.dbt_utils.group_by", "macro_sql": "{%- macro group_by(n) -%}\n {{ return(adapter.dispatch('group_by', 'dbt_utils')(n)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__group_by"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.076342, "supported_languages": null}, "macro.dbt_utils.default__group_by": {"name": "default__group_by", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/groupby.sql", "original_file_path": "macros/sql/groupby.sql", "unique_id": "macro.dbt_utils.default__group_by", "macro_sql": "\n\n{%- macro default__group_by(n) -%}\n\n group by {% for i in range(1, n + 1) -%}\n {{ i }}{{ ',' if not loop.last }} \n {%- endfor -%}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0765922, "supported_languages": null}, "macro.dbt_utils.deduplicate": {"name": "deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.deduplicate", "macro_sql": "{%- macro deduplicate(relation, partition_by, order_by) -%}\n {{ return(adapter.dispatch('deduplicate', 'dbt_utils')(relation, partition_by, order_by)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.postgres__deduplicate"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.07734, "supported_languages": null}, "macro.dbt_utils.default__deduplicate": {"name": "default__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.default__deduplicate", "macro_sql": "\n\n{%- macro default__deduplicate(relation, partition_by, order_by) -%}\n\n with row_numbered as (\n select\n _inner.*,\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) as rn\n from {{ relation }} as _inner\n )\n\n select\n distinct data.*\n from {{ relation }} as data\n {#\n -- Not all DBs will support natural joins but the ones that do include:\n -- Oracle, MySQL, SQLite, Redshift, Teradata, Materialize, Databricks\n -- Apache Spark, SingleStore, Vertica\n -- Those that do not appear to support natural joins include:\n -- SQLServer, Trino, Presto, Rockset, Athena\n #}\n natural join row_numbered\n where row_numbered.rn = 1\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.077559, "supported_languages": null}, "macro.dbt_utils.redshift__deduplicate": {"name": "redshift__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.redshift__deduplicate", "macro_sql": "{% macro redshift__deduplicate(relation, partition_by, order_by) -%}\n\n {{ return(dbt_utils.default__deduplicate(relation, partition_by, order_by=order_by)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__deduplicate"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.077767, "supported_languages": null}, "macro.dbt_utils.postgres__deduplicate": {"name": "postgres__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.postgres__deduplicate", "macro_sql": "\n{%- macro postgres__deduplicate(relation, partition_by, order_by) -%}\n\n select\n distinct on ({{ partition_by }}) *\n from {{ relation }}\n order by {{ partition_by }}{{ ',' ~ order_by }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0779579, "supported_languages": null}, "macro.dbt_utils.snowflake__deduplicate": {"name": "snowflake__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.snowflake__deduplicate", "macro_sql": "\n{%- macro snowflake__deduplicate(relation, partition_by, order_by) -%}\n\n select *\n from {{ relation }}\n qualify\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) = 1\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.07813, "supported_languages": null}, "macro.dbt_utils.bigquery__deduplicate": {"name": "bigquery__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.bigquery__deduplicate", "macro_sql": "\n{%- macro bigquery__deduplicate(relation, partition_by, order_by) -%}\n\n select unique.*\n from (\n select\n array_agg (\n original\n order by {{ order_by }}\n limit 1\n )[offset(0)] unique\n from {{ relation }} original\n group by {{ partition_by }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.078302, "supported_languages": null}, "macro.dbt_utils.surrogate_key": {"name": "surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/surrogate_key.sql", "original_file_path": "macros/sql/surrogate_key.sql", "unique_id": "macro.dbt_utils.surrogate_key", "macro_sql": "{%- macro surrogate_key(field_list) -%}\n {% set frustrating_jinja_feature = varargs %}\n {{ return(adapter.dispatch('surrogate_key', 'dbt_utils')(field_list, *varargs)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__surrogate_key"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0786922, "supported_languages": null}, "macro.dbt_utils.default__surrogate_key": {"name": "default__surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/surrogate_key.sql", "original_file_path": "macros/sql/surrogate_key.sql", "unique_id": "macro.dbt_utils.default__surrogate_key", "macro_sql": "\n\n{%- macro default__surrogate_key(field_list) -%}\n\n{%- set error_message = '\nWarning: `dbt_utils.surrogate_key` has been replaced by \\\n`dbt_utils.generate_surrogate_key`. The new macro treats null values \\\ndifferently to empty strings. To restore the behaviour of the original \\\nmacro, add a global variable in dbt_project.yml called \\\n`surrogate_key_treat_nulls_as_empty_strings` to your \\\ndbt_project.yml file with a value of True. \\\nThe {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.raise_compiler_error(error_message) -%}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.078933, "supported_languages": null}, "macro.dbt_utils.safe_add": {"name": "safe_add", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_add.sql", "original_file_path": "macros/sql/safe_add.sql", "unique_id": "macro.dbt_utils.safe_add", "macro_sql": "{%- macro safe_add(field_list) -%}\n {{ return(adapter.dispatch('safe_add', 'dbt_utils')(field_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__safe_add"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.079318, "supported_languages": null}, "macro.dbt_utils.default__safe_add": {"name": "default__safe_add", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_add.sql", "original_file_path": "macros/sql/safe_add.sql", "unique_id": "macro.dbt_utils.default__safe_add", "macro_sql": "\n\n{%- macro default__safe_add(field_list) -%}\n\n{%- if field_list is not iterable or field_list is string or field_list is mapping -%}\n\n{%- set error_message = '\nWarning: the `safe_add` macro now takes a single list argument instead of \\\nstring arguments. The {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.warn(error_message) -%}\n\n{%- endif -%}\n\n{% set fields = [] %}\n\n{%- for field in field_list -%}\n\n {% do fields.append(\"coalesce(\" ~ field ~ \", 0)\") %}\n\n{%- endfor -%}\n\n{{ fields|join(' +\\n ') }}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.079862, "supported_languages": null}, "macro.dbt_utils.nullcheck": {"name": "nullcheck", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck.sql", "original_file_path": "macros/sql/nullcheck.sql", "unique_id": "macro.dbt_utils.nullcheck", "macro_sql": "{% macro nullcheck(cols) %}\n {{ return(adapter.dispatch('nullcheck', 'dbt_utils')(cols)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__nullcheck"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.080207, "supported_languages": null}, "macro.dbt_utils.default__nullcheck": {"name": "default__nullcheck", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck.sql", "original_file_path": "macros/sql/nullcheck.sql", "unique_id": "macro.dbt_utils.default__nullcheck", "macro_sql": "{% macro default__nullcheck(cols) %}\n{%- for col in cols %}\n\n {% if col.is_string() -%}\n\n nullif({{col.name}},'') as {{col.name}}\n\n {%- else -%}\n\n {{col.name}}\n\n {%- endif -%}\n\n{%- if not loop.last -%} , {%- endif -%}\n\n{%- endfor -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.08054, "supported_languages": null}, "macro.dbt_utils.get_tables_by_pattern_sql": {"name": "get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.get_tables_by_pattern_sql", "macro_sql": "{% macro get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_tables_by_pattern_sql', 'dbt_utils')\n (schema_pattern, table_pattern, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0823412, "supported_languages": null}, "macro.dbt_utils.default__get_tables_by_pattern_sql": {"name": "default__get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.default__get_tables_by_pattern_sql", "macro_sql": "{% macro default__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n select distinct\n table_schema as {{ adapter.quote('table_schema') }},\n table_name as {{ adapter.quote('table_name') }},\n {{ dbt_utils.get_table_types_sql() }}\n from {{ database }}.information_schema.tables\n where table_schema ilike '{{ schema_pattern }}'\n and table_name ilike '{{ table_pattern }}'\n and table_name not ilike '{{ exclude }}'\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.082707, "supported_languages": null}, "macro.dbt_utils.bigquery__get_tables_by_pattern_sql": {"name": "bigquery__get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.bigquery__get_tables_by_pattern_sql", "macro_sql": "{% macro bigquery__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {% if '%' in schema_pattern %}\n {% set schemata=dbt_utils._bigquery__get_matching_schemata(schema_pattern, database) %}\n {% else %}\n {% set schemata=[schema_pattern] %}\n {% endif %}\n\n {% set sql %}\n {% for schema in schemata %}\n select distinct\n table_schema,\n table_name,\n {{ dbt_utils.get_table_types_sql() }}\n\n from {{ adapter.quote(database) }}.{{ schema }}.INFORMATION_SCHEMA.TABLES\n where lower(table_name) like lower ('{{ table_pattern }}')\n and lower(table_name) not like lower ('{{ exclude }}')\n\n {% if not loop.last %} union all {% endif %}\n\n {% endfor %}\n {% endset %}\n\n {{ return(sql) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._bigquery__get_matching_schemata", "macro.dbt_utils.get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.083494, "supported_languages": null}, "macro.dbt_utils._bigquery__get_matching_schemata": {"name": "_bigquery__get_matching_schemata", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils._bigquery__get_matching_schemata", "macro_sql": "{% macro _bigquery__get_matching_schemata(schema_pattern, database) %}\n {% if execute %}\n\n {% set sql %}\n select schema_name from {{ adapter.quote(database) }}.INFORMATION_SCHEMA.SCHEMATA\n where lower(schema_name) like lower('{{ schema_pattern }}')\n {% endset %}\n\n {% set results=run_query(sql) %}\n\n {% set schemata=results.columns['schema_name'].values() %}\n\n {{ return(schemata) }}\n\n {% else %}\n\n {{ return([]) }}\n\n {% endif %}\n\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0840058, "supported_languages": null}, "macro.dbt_utils.get_column_values": {"name": "get_column_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_column_values.sql", "original_file_path": "macros/sql/get_column_values.sql", "unique_id": "macro.dbt_utils.get_column_values", "macro_sql": "{% macro get_column_values(table, column, order_by='count(*) desc', max_records=none, default=none, where=none) -%}\n {{ return(adapter.dispatch('get_column_values', 'dbt_utils')(table, column, order_by, max_records, default, where)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_column_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0851798, "supported_languages": null}, "macro.dbt_utils.default__get_column_values": {"name": "default__get_column_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_column_values.sql", "original_file_path": "macros/sql/get_column_values.sql", "unique_id": "macro.dbt_utils.default__get_column_values", "macro_sql": "{% macro default__get_column_values(table, column, order_by='count(*) desc', max_records=none, default=none, where=none) -%}\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n {%- if not execute -%}\n {% set default = [] if not default %}\n {{ return(default) }}\n {% endif %}\n\n {%- do dbt_utils._is_ephemeral(table, 'get_column_values') -%}\n\n {# Not all relations are tables. Renaming for internal clarity without breaking functionality for anyone using named arguments #}\n {# TODO: Change the method signature in a future 0.x.0 release #}\n {%- set target_relation = table -%}\n\n {# adapter.load_relation is a convenience wrapper to avoid building a Relation when we already have one #}\n {% set relation_exists = (load_relation(target_relation)) is not none %}\n\n {%- call statement('get_column_values', fetch_result=true) %}\n\n {%- if not relation_exists and default is none -%}\n\n {{ exceptions.raise_compiler_error(\"In get_column_values(): relation \" ~ target_relation ~ \" does not exist and no default value was provided.\") }}\n\n {%- elif not relation_exists and default is not none -%}\n\n {{ log(\"Relation \" ~ target_relation ~ \" does not exist. Returning the default value: \" ~ default) }}\n\n {{ return(default) }}\n\n {%- else -%}\n\n\n select\n {{ column }} as value\n\n from {{ target_relation }}\n\n {% if where is not none %}\n where {{ where }}\n {% endif %}\n\n group by {{ column }}\n order by {{ order_by }}\n\n {% if max_records is not none %}\n limit {{ max_records }}\n {% endif %}\n\n {% endif %}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_column_values') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values) }}\n {%- else -%}\n {{ return(default) }}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_ephemeral", "macro.dbt.load_relation", "macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0867069, "supported_languages": null}, "macro.dbt_utils.pivot": {"name": "pivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/pivot.sql", "original_file_path": "macros/sql/pivot.sql", "unique_id": "macro.dbt_utils.pivot", "macro_sql": "{% macro pivot(column,\n values,\n alias=True,\n agg='sum',\n cmp='=',\n prefix='',\n suffix='',\n then_value=1,\n else_value=0,\n quote_identifiers=True,\n distinct=False) %}\n {{ return(adapter.dispatch('pivot', 'dbt_utils')(column, values, alias, agg, cmp, prefix, suffix, then_value, else_value, quote_identifiers, distinct)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__pivot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.087786, "supported_languages": null}, "macro.dbt_utils.default__pivot": {"name": "default__pivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/pivot.sql", "original_file_path": "macros/sql/pivot.sql", "unique_id": "macro.dbt_utils.default__pivot", "macro_sql": "{% macro default__pivot(column,\n values,\n alias=True,\n agg='sum',\n cmp='=',\n prefix='',\n suffix='',\n then_value=1,\n else_value=0,\n quote_identifiers=True,\n distinct=False) %}\n {% for value in values %}\n {{ agg }}(\n {% if distinct %} distinct {% endif %}\n case\n when {{ column }} {{ cmp }} '{{ dbt.escape_single_quotes(value) }}'\n then {{ then_value }}\n else {{ else_value }}\n end\n )\n {% if alias %}\n {% if quote_identifiers %}\n as {{ adapter.quote(prefix ~ value ~ suffix) }}\n {% else %}\n as {{ dbt_utils.slugify(prefix ~ value ~ suffix) }}\n {% endif %}\n {% endif %}\n {% if not loop.last %},{% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.escape_single_quotes", "macro.dbt_utils.slugify"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0886369, "supported_languages": null}, "macro.dbt_utils.get_filtered_columns_in_relation": {"name": "get_filtered_columns_in_relation", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_filtered_columns_in_relation.sql", "original_file_path": "macros/sql/get_filtered_columns_in_relation.sql", "unique_id": "macro.dbt_utils.get_filtered_columns_in_relation", "macro_sql": "{% macro get_filtered_columns_in_relation(from, except=[]) -%}\n {{ return(adapter.dispatch('get_filtered_columns_in_relation', 'dbt_utils')(from, except)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_filtered_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.089112, "supported_languages": null}, "macro.dbt_utils.default__get_filtered_columns_in_relation": {"name": "default__get_filtered_columns_in_relation", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_filtered_columns_in_relation.sql", "original_file_path": "macros/sql/get_filtered_columns_in_relation.sql", "unique_id": "macro.dbt_utils.default__get_filtered_columns_in_relation", "macro_sql": "{% macro default__get_filtered_columns_in_relation(from, except=[]) -%}\n {%- do dbt_utils._is_relation(from, 'get_filtered_columns_in_relation') -%}\n {%- do dbt_utils._is_ephemeral(from, 'get_filtered_columns_in_relation') -%}\n\n {# -- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n {%- if not execute -%}\n {{ return('') }}\n {% endif %}\n\n {%- set include_cols = [] %}\n {%- set cols = adapter.get_columns_in_relation(from) -%}\n {%- set except = except | map(\"lower\") | list %}\n {%- for col in cols -%}\n {%- if col.column|lower not in except -%}\n {% do include_cols.append(col.column) %}\n {%- endif %}\n {%- endfor %}\n\n {{ return(include_cols) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.089847, "supported_languages": null}, "macro.dbt_utils.width_bucket": {"name": "width_bucket", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/width_bucket.sql", "original_file_path": "macros/sql/width_bucket.sql", "unique_id": "macro.dbt_utils.width_bucket", "macro_sql": "{% macro width_bucket(expr, min_value, max_value, num_buckets) %}\n {{ return(adapter.dispatch('width_bucket', 'dbt_utils') (expr, min_value, max_value, num_buckets)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__width_bucket"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.090639, "supported_languages": null}, "macro.dbt_utils.default__width_bucket": {"name": "default__width_bucket", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/width_bucket.sql", "original_file_path": "macros/sql/width_bucket.sql", "unique_id": "macro.dbt_utils.default__width_bucket", "macro_sql": "{% macro default__width_bucket(expr, min_value, max_value, num_buckets) -%}\n\n {% set bin_size -%}\n (( {{ max_value }} - {{ min_value }} ) / {{ num_buckets }} )\n {%- endset %}\n (\n -- to break ties when the amount is eaxtly at the bucket egde\n case\n when\n mod(\n {{ dbt.safe_cast(expr, dbt.type_numeric() ) }},\n {{ dbt.safe_cast(bin_size, dbt.type_numeric() ) }}\n ) = 0\n then 1\n else 0\n end\n ) +\n -- Anything over max_value goes the N+1 bucket\n least(\n ceil(\n ({{ expr }} - {{ min_value }})/{{ bin_size }}\n ),\n {{ num_buckets }} + 1\n )\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.safe_cast", "macro.dbt.type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.091105, "supported_languages": null}, "macro.dbt_utils.snowflake__width_bucket": {"name": "snowflake__width_bucket", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/width_bucket.sql", "original_file_path": "macros/sql/width_bucket.sql", "unique_id": "macro.dbt_utils.snowflake__width_bucket", "macro_sql": "{% macro snowflake__width_bucket(expr, min_value, max_value, num_buckets) %}\n width_bucket({{ expr }}, {{ min_value }}, {{ max_value }}, {{ num_buckets }} )\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.091296, "supported_languages": null}, "macro.dbt_utils.get_query_results_as_dict": {"name": "get_query_results_as_dict", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_query_results_as_dict.sql", "original_file_path": "macros/sql/get_query_results_as_dict.sql", "unique_id": "macro.dbt_utils.get_query_results_as_dict", "macro_sql": "{% macro get_query_results_as_dict(query) %}\n {{ return(adapter.dispatch('get_query_results_as_dict', 'dbt_utils')(query)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_query_results_as_dict"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0916889, "supported_languages": null}, "macro.dbt_utils.default__get_query_results_as_dict": {"name": "default__get_query_results_as_dict", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_query_results_as_dict.sql", "original_file_path": "macros/sql/get_query_results_as_dict.sql", "unique_id": "macro.dbt_utils.default__get_query_results_as_dict", "macro_sql": "{% macro default__get_query_results_as_dict(query) %}\n\n{# This macro returns a dictionary of the form {column_name: (tuple_of_results)} #}\n\n {%- call statement('get_query_results', fetch_result=True,auto_begin=false) -%}\n\n {{ query }}\n\n {%- endcall -%}\n\n {% set sql_results={} %}\n\n {%- if execute -%}\n {% set sql_results_table = load_result('get_query_results').table.columns %}\n {% for column_name, column in sql_results_table.items() %}\n {% do sql_results.update({column_name: column.values()}) %}\n {% endfor %}\n {%- endif -%}\n\n {{ return(sql_results) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.092288, "supported_languages": null}, "macro.dbt_utils.generate_surrogate_key": {"name": "generate_surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_surrogate_key.sql", "original_file_path": "macros/sql/generate_surrogate_key.sql", "unique_id": "macro.dbt_utils.generate_surrogate_key", "macro_sql": "{%- macro generate_surrogate_key(field_list) -%}\n {{ return(adapter.dispatch('generate_surrogate_key', 'dbt_utils')(field_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__generate_surrogate_key"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.092757, "supported_languages": null}, "macro.dbt_utils.default__generate_surrogate_key": {"name": "default__generate_surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_surrogate_key.sql", "original_file_path": "macros/sql/generate_surrogate_key.sql", "unique_id": "macro.dbt_utils.default__generate_surrogate_key", "macro_sql": "\n\n{%- macro default__generate_surrogate_key(field_list) -%}\n\n{%- if var('surrogate_key_treat_nulls_as_empty_strings', False) -%}\n {%- set default_null_value = \"\" -%}\n{%- else -%}\n {%- set default_null_value = '_dbt_utils_surrogate_key_null_' -%}\n{%- endif -%}\n\n{%- set fields = [] -%}\n\n{%- for field in field_list -%}\n\n {%- do fields.append(\n \"coalesce(cast(\" ~ field ~ \" as \" ~ dbt.type_string() ~ \"), '\" ~ default_null_value ~\"')\"\n ) -%}\n\n {%- if not loop.last %}\n {%- do fields.append(\"'-'\") -%}\n {%- endif -%}\n\n{%- endfor -%}\n\n{{ dbt.hash(dbt.concat(fields)) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.hash", "macro.dbt.concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0933912, "supported_languages": null}, "macro.dbt_utils.get_table_types_sql": {"name": "get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.get_table_types_sql", "macro_sql": "{%- macro get_table_types_sql() -%}\n {{ return(adapter.dispatch('get_table_types_sql', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_utils.postgres__get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.093933, "supported_languages": null}, "macro.dbt_utils.default__get_table_types_sql": {"name": "default__get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.default__get_table_types_sql", "macro_sql": "{% macro default__get_table_types_sql() %}\n case table_type\n when 'BASE TABLE' then 'table'\n when 'EXTERNAL TABLE' then 'external'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as {{ adapter.quote('table_type') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.094072, "supported_languages": null}, "macro.dbt_utils.postgres__get_table_types_sql": {"name": "postgres__get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.postgres__get_table_types_sql", "macro_sql": "{% macro postgres__get_table_types_sql() %}\n case table_type\n when 'BASE TABLE' then 'table'\n when 'FOREIGN' then 'external'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as {{ adapter.quote('table_type') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.094209, "supported_languages": null}, "macro.dbt_utils.databricks__get_table_types_sql": {"name": "databricks__get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.databricks__get_table_types_sql", "macro_sql": "{% macro databricks__get_table_types_sql() %}\n case table_type\n when 'MANAGED' then 'table'\n when 'BASE TABLE' then 'table'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as {{ adapter.quote('table_type') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0943491, "supported_languages": null}, "macro.dbt_utils.get_single_value": {"name": "get_single_value", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_single_value.sql", "original_file_path": "macros/sql/get_single_value.sql", "unique_id": "macro.dbt_utils.get_single_value", "macro_sql": "{% macro get_single_value(query, default=none) %}\n {{ return(adapter.dispatch('get_single_value', 'dbt_utils')(query, default)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_single_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0948758, "supported_languages": null}, "macro.dbt_utils.default__get_single_value": {"name": "default__get_single_value", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_single_value.sql", "original_file_path": "macros/sql/get_single_value.sql", "unique_id": "macro.dbt_utils.default__get_single_value", "macro_sql": "{% macro default__get_single_value(query, default) %}\n\n{# This macro returns the (0, 0) record in a query, i.e. the first row of the first column #}\n\n {%- call statement('get_query_result', fetch_result=True, auto_begin=false) -%}\n\n {{ query }}\n\n {%- endcall -%}\n\n {%- if execute -%}\n\n {% set r = load_result('get_query_result').table.columns[0].values() %}\n {% if r | length == 0 %}\n {% do print('Query `' ~ query ~ '` returned no rows. Using the default value: ' ~ default) %}\n {% set sql_result = default %}\n {% else %}\n {% set sql_result = r[0] %}\n {% endif %}\n \n {%- else -%}\n \n {% set sql_result = default %}\n \n {%- endif -%}\n\n {% do return(sql_result) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.095687, "supported_languages": null}, "macro.dbt_utils.degrees_to_radians": {"name": "degrees_to_radians", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.degrees_to_radians", "macro_sql": "{% macro degrees_to_radians(degrees) -%}\n acos(-1) * {{degrees}} / 180\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.096799, "supported_languages": null}, "macro.dbt_utils.haversine_distance": {"name": "haversine_distance", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.haversine_distance", "macro_sql": "{% macro haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n {{ return(adapter.dispatch('haversine_distance', 'dbt_utils')(lat1,lon1,lat2,lon2,unit)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__haversine_distance"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.09708, "supported_languages": null}, "macro.dbt_utils.default__haversine_distance": {"name": "default__haversine_distance", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.default__haversine_distance", "macro_sql": "{% macro default__haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n{%- if unit == 'mi' %}\n {% set conversion_rate = 1 %}\n{% elif unit == 'km' %}\n {% set conversion_rate = 1.60934 %}\n{% else %}\n {{ exceptions.raise_compiler_error(\"unit input must be one of 'mi' or 'km'. Got \" ~ unit) }}\n{% endif %}\n\n 2 * 3961 * asin(sqrt(power((sin(radians(({{ lat2 }} - {{ lat1 }}) / 2))), 2) +\n cos(radians({{lat1}})) * cos(radians({{lat2}})) *\n power((sin(radians(({{ lon2 }} - {{ lon1 }}) / 2))), 2))) * {{ conversion_rate }}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.097664, "supported_languages": null}, "macro.dbt_utils.bigquery__haversine_distance": {"name": "bigquery__haversine_distance", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.bigquery__haversine_distance", "macro_sql": "{% macro bigquery__haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n{% set radians_lat1 = dbt_utils.degrees_to_radians(lat1) %}\n{% set radians_lat2 = dbt_utils.degrees_to_radians(lat2) %}\n{% set radians_lon1 = dbt_utils.degrees_to_radians(lon1) %}\n{% set radians_lon2 = dbt_utils.degrees_to_radians(lon2) %}\n{%- if unit == 'mi' %}\n {% set conversion_rate = 1 %}\n{% elif unit == 'km' %}\n {% set conversion_rate = 1.60934 %}\n{% else %}\n {{ exceptions.raise_compiler_error(\"unit input must be one of 'mi' or 'km'. Got \" ~ unit) }}\n{% endif %}\n 2 * 3961 * asin(sqrt(power(sin(({{ radians_lat2 }} - {{ radians_lat1 }}) / 2), 2) +\n cos({{ radians_lat1 }}) * cos({{ radians_lat2 }}) *\n power(sin(({{ radians_lon2 }} - {{ radians_lon1 }}) / 2), 2))) * {{ conversion_rate }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.degrees_to_radians"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.0984802, "supported_languages": null}, "macro.asana_source.get_story_columns": {"name": "get_story_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_story_columns.sql", "original_file_path": "macros/get_story_columns.sql", "unique_id": "macro.asana_source.get_story_columns", "macro_sql": "{% macro get_story_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"created_by_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"hearted\", \"datatype\": \"boolean\"},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"num_hearts\", \"datatype\": dbt.type_int()},\n {\"name\": \"source\", \"datatype\": dbt.type_string()},\n {\"name\": \"target_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"text\", \"datatype\": dbt.type_string()},\n {\"name\": \"type\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string", "macro.dbt.type_int"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.099649, "supported_languages": null}, "macro.asana_source.get_task_tag_columns": {"name": "get_task_tag_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_task_tag_columns.sql", "original_file_path": "macros/get_task_tag_columns.sql", "unique_id": "macro.asana_source.get_task_tag_columns", "macro_sql": "{% macro get_task_tag_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"tag_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"task_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.100142, "supported_languages": null}, "macro.asana_source.get_task_columns": {"name": "get_task_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_task_columns.sql", "original_file_path": "macros/get_task_columns.sql", "unique_id": "macro.asana_source.get_task_columns", "macro_sql": "{% macro get_task_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"assignee_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"completed\", \"datatype\": \"boolean\"},\n {\"name\": \"completed_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"completed_by_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"due_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"due_on\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"modified_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"notes\", \"datatype\": dbt.type_string()},\n {\"name\": \"liked\", \"datatype\": \"boolean\"},\n {\"name\": \"num_likes\", \"datatype\": dbt.type_int()},\n {\"name\": \"parent_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"start_on\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"workspace_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string", "macro.dbt.type_int"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.102012, "supported_languages": null}, "macro.asana_source.get_task_section_columns": {"name": "get_task_section_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_task_section_columns.sql", "original_file_path": "macros/get_task_section_columns.sql", "unique_id": "macro.asana_source.get_task_section_columns", "macro_sql": "{% macro get_task_section_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"section_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"task_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.102509, "supported_languages": null}, "macro.asana_source.get_team_columns": {"name": "get_team_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_team_columns.sql", "original_file_path": "macros/get_team_columns.sql", "unique_id": "macro.asana_source.get_team_columns", "macro_sql": "{% macro get_team_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_deleted\", \"datatype\": \"boolean\"},\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"organization_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.10318, "supported_languages": null}, "macro.asana_source.get_user_columns": {"name": "get_user_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_user_columns.sql", "original_file_path": "macros/get_user_columns.sql", "unique_id": "macro.asana_source.get_user_columns", "macro_sql": "{% macro get_user_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_deleted\", \"datatype\": \"boolean\"},\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"email\", \"datatype\": dbt.type_string()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1038442, "supported_languages": null}, "macro.asana_source.get_project_columns": {"name": "get_project_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_project_columns.sql", "original_file_path": "macros/get_project_columns.sql", "unique_id": "macro.asana_source.get_project_columns", "macro_sql": "{% macro get_project_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_deleted\", \"datatype\": \"boolean\"},\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"archived\", \"datatype\": \"boolean\"},\n {\"name\": \"color\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"current_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"due_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"modified_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"notes\", \"datatype\": dbt.type_string()},\n {\"name\": \"owner_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"public\", \"datatype\": \"boolean\"},\n {\"name\": \"team_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"workspace_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.105495, "supported_languages": null}, "macro.asana_source.get_task_follower_columns": {"name": "get_task_follower_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_task_follower_columns.sql", "original_file_path": "macros/get_task_follower_columns.sql", "unique_id": "macro.asana_source.get_task_follower_columns", "macro_sql": "{% macro get_task_follower_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"task_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"user_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1059892, "supported_languages": null}, "macro.asana_source.get_section_columns": {"name": "get_section_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_section_columns.sql", "original_file_path": "macros/get_section_columns.sql", "unique_id": "macro.asana_source.get_section_columns", "macro_sql": "{% macro get_section_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"project_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.106669, "supported_languages": null}, "macro.asana_source.get_project_task_columns": {"name": "get_project_task_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_project_task_columns.sql", "original_file_path": "macros/get_project_task_columns.sql", "unique_id": "macro.asana_source.get_project_task_columns", "macro_sql": "{% macro get_project_task_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"project_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"task_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1071591, "supported_languages": null}, "macro.asana_source.get_tag_columns": {"name": "get_tag_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_tag_columns.sql", "original_file_path": "macros/get_tag_columns.sql", "unique_id": "macro.asana_source.get_tag_columns", "macro_sql": "{% macro get_tag_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_deleted\", \"datatype\": \"boolean\"},\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"color\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"message\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"notes\", \"datatype\": dbt.type_string()},\n {\"name\": \"workspace_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1082208, "supported_languages": null}, "macro.fivetran_utils.enabled_vars": {"name": "enabled_vars", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/enabled_vars.sql", "original_file_path": "macros/enabled_vars.sql", "unique_id": "macro.fivetran_utils.enabled_vars", "macro_sql": "{% macro enabled_vars(vars) %}\n\n{% for v in vars %}\n \n {% if var(v, True) == False %}\n {{ return(False) }}\n {% endif %}\n\n{% endfor %}\n\n{{ return(True) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.10862, "supported_languages": null}, "macro.fivetran_utils.percentile": {"name": "percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.percentile", "macro_sql": "{% macro percentile(percentile_field, partition_field, percent) -%}\n\n{{ adapter.dispatch('percentile', 'fivetran_utils') (percentile_field, partition_field, percent) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__percentile"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.109586, "supported_languages": null}, "macro.fivetran_utils.default__percentile": {"name": "default__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.default__percentile", "macro_sql": "{% macro default__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n over ( partition by {{ partition_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1097548, "supported_languages": null}, "macro.fivetran_utils.redshift__percentile": {"name": "redshift__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.redshift__percentile", "macro_sql": "{% macro redshift__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n over ( partition by {{ partition_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.109919, "supported_languages": null}, "macro.fivetran_utils.bigquery__percentile": {"name": "bigquery__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.bigquery__percentile", "macro_sql": "{% macro bigquery__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percentile_field }}, \n {{ percent }}) \n over (partition by {{ partition_field }} \n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.110147, "supported_languages": null}, "macro.fivetran_utils.postgres__percentile": {"name": "postgres__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.postgres__percentile", "macro_sql": "{% macro postgres__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n /* have to group by partition field */\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.110296, "supported_languages": null}, "macro.fivetran_utils.spark__percentile": {"name": "spark__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.spark__percentile", "macro_sql": "{% macro spark__percentile(percentile_field, partition_field, percent) %}\n\n percentile( \n {{ percentile_field }}, \n {{ percent }}) \n over (partition by {{ partition_field }} \n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1104589, "supported_languages": null}, "macro.fivetran_utils.pivot_json_extract": {"name": "pivot_json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/pivot_json_extract.sql", "original_file_path": "macros/pivot_json_extract.sql", "unique_id": "macro.fivetran_utils.pivot_json_extract", "macro_sql": "{% macro pivot_json_extract(string, list_of_properties) %}\n\n{%- for property in list_of_properties -%}\n{%- if property is mapping -%}\nreplace( {{ fivetran_utils.json_extract(string, property.name) }}, '\"', '') as {{ property.alias if property.alias else property.name | replace(' ', '_') | replace('.', '_') | lower }}\n\n{%- else -%}\nreplace( {{ fivetran_utils.json_extract(string, property) }}, '\"', '') as {{ property | replace(' ', '_') | lower }}\n\n{%- endif -%}\n{%- if not loop.last -%},{%- endif %}\n{% endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.json_extract"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.111257, "supported_languages": null}, "macro.fivetran_utils.persist_pass_through_columns": {"name": "persist_pass_through_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/persist_pass_through_columns.sql", "original_file_path": "macros/persist_pass_through_columns.sql", "unique_id": "macro.fivetran_utils.persist_pass_through_columns", "macro_sql": "{% macro persist_pass_through_columns(pass_through_variable, identifier=none, transform='') %}\n\n{% if var(pass_through_variable, none) %}\n {% for field in var(pass_through_variable) %}\n , {{ transform ~ '(' ~ (identifier ~ '.' if identifier else '') ~ (field.alias if field.alias else field.name) ~ ')' }} as {{ field.alias if field.alias else field.name }}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.111907, "supported_languages": null}, "macro.fivetran_utils.json_parse": {"name": "json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.json_parse", "macro_sql": "{% macro json_parse(string, string_path) -%}\n\n{{ adapter.dispatch('json_parse', 'fivetran_utils') (string, string_path) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__json_parse"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.113045, "supported_languages": null}, "macro.fivetran_utils.default__json_parse": {"name": "default__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.default__json_parse", "macro_sql": "{% macro default__json_parse(string, string_path) %}\n\n json_extract_path_text({{string}}, {%- for s in string_path -%}'{{ s }}'{%- if not loop.last -%},{%- endif -%}{%- endfor -%} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1132941, "supported_languages": null}, "macro.fivetran_utils.redshift__json_parse": {"name": "redshift__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.redshift__json_parse", "macro_sql": "{% macro redshift__json_parse(string, string_path) %}\n\n json_extract_path_text({{string}}, {%- for s in string_path -%}'{{ s }}'{%- if not loop.last -%},{%- endif -%}{%- endfor -%} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1135428, "supported_languages": null}, "macro.fivetran_utils.bigquery__json_parse": {"name": "bigquery__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.bigquery__json_parse", "macro_sql": "{% macro bigquery__json_parse(string, string_path) %}\n\n \n json_extract_scalar({{string}}, '$.{%- for s in string_path -%}{{ s }}{%- if not loop.last -%}.{%- endif -%}{%- endfor -%} ')\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1137831, "supported_languages": null}, "macro.fivetran_utils.postgres__json_parse": {"name": "postgres__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.postgres__json_parse", "macro_sql": "{% macro postgres__json_parse(string, string_path) %}\n\n {{string}}::json #>> '{ {%- for s in string_path -%}{{ s }}{%- if not loop.last -%},{%- endif -%}{%- endfor -%} }'\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.114021, "supported_languages": null}, "macro.fivetran_utils.snowflake__json_parse": {"name": "snowflake__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.snowflake__json_parse", "macro_sql": "{% macro snowflake__json_parse(string, string_path) %}\n\n parse_json( {{string}} ) {%- for s in string_path -%}{% if s is number %}[{{ s }}]{% else %}['{{ s }}']{% endif %}{%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1142871, "supported_languages": null}, "macro.fivetran_utils.spark__json_parse": {"name": "spark__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.spark__json_parse", "macro_sql": "{% macro spark__json_parse(string, string_path) %}\n\n {{string}} : {%- for s in string_path -%}{% if s is number %}[{{ s }}]{% else %}['{{ s }}']{% endif %}{%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.114548, "supported_languages": null}, "macro.fivetran_utils.max_bool": {"name": "max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.max_bool", "macro_sql": "{% macro max_bool(boolean_field) -%}\n\n{{ adapter.dispatch('max_bool', 'fivetran_utils') (boolean_field) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__max_bool"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.11487, "supported_languages": null}, "macro.fivetran_utils.default__max_bool": {"name": "default__max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.default__max_bool", "macro_sql": "{% macro default__max_bool(boolean_field) %}\n\n bool_or( {{ boolean_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1149719, "supported_languages": null}, "macro.fivetran_utils.snowflake__max_bool": {"name": "snowflake__max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.snowflake__max_bool", "macro_sql": "{% macro snowflake__max_bool(boolean_field) %}\n\n max( {{ boolean_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.115069, "supported_languages": null}, "macro.fivetran_utils.bigquery__max_bool": {"name": "bigquery__max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.bigquery__max_bool", "macro_sql": "{% macro bigquery__max_bool(boolean_field) %}\n\n max( {{ boolean_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.115169, "supported_languages": null}, "macro.fivetran_utils.calculated_fields": {"name": "calculated_fields", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/calculated_fields.sql", "original_file_path": "macros/calculated_fields.sql", "unique_id": "macro.fivetran_utils.calculated_fields", "macro_sql": "{% macro calculated_fields(variable) -%}\n\n{% if var(variable, none) %}\n {% for field in var(variable) %}\n , {{ field.transform_sql }} as {{ field.name }} \n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.115536, "supported_languages": null}, "macro.fivetran_utils.drop_schemas_automation": {"name": "drop_schemas_automation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/drop_schemas_automation.sql", "original_file_path": "macros/drop_schemas_automation.sql", "unique_id": "macro.fivetran_utils.drop_schemas_automation", "macro_sql": "{% macro drop_schemas_automation(drop_target_schema=true) %}\n {{ return(adapter.dispatch('drop_schemas_automation', 'fivetran_utils')(drop_target_schema)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__drop_schemas_automation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.116239, "supported_languages": null}, "macro.fivetran_utils.default__drop_schemas_automation": {"name": "default__drop_schemas_automation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/drop_schemas_automation.sql", "original_file_path": "macros/drop_schemas_automation.sql", "unique_id": "macro.fivetran_utils.default__drop_schemas_automation", "macro_sql": "{% macro default__drop_schemas_automation(drop_target_schema=true) %}\n\n{% set fetch_list_sql %}\n {% if target.type not in ('databricks', 'spark') %}\n select schema_name\n from \n {{ wrap_in_quotes(target.database) }}.INFORMATION_SCHEMA.SCHEMATA\n where lower(schema_name) like '{{ target.schema | lower }}{%- if not drop_target_schema -%}_{%- endif -%}%'\n {% else %}\n SHOW SCHEMAS LIKE '{{ target.schema }}{%- if not drop_target_schema -%}_{%- endif -%}*'\n {% endif %}\n{% endset %}\n\n{% set results = run_query(fetch_list_sql) %}\n\n{% if execute %}\n {% set results_list = results.columns[0].values() %}\n{% else %}\n {% set results_list = [] %}\n{% endif %}\n\n{% for schema_to_drop in results_list %}\n {% do adapter.drop_schema(api.Relation.create(database=target.database, schema=schema_to_drop)) %}\n {{ print('Schema ' ~ schema_to_drop ~ ' successfully dropped from the ' ~ target.database ~ ' database.\\n')}}\n{% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.wrap_in_quotes", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.117326, "supported_languages": null}, "macro.fivetran_utils.seed_data_helper": {"name": "seed_data_helper", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/seed_data_helper.sql", "original_file_path": "macros/seed_data_helper.sql", "unique_id": "macro.fivetran_utils.seed_data_helper", "macro_sql": "{% macro seed_data_helper(seed_name, warehouses) %}\n\n{% if target.type in warehouses %}\n {% for w in warehouses %}\n {% if target.type == w %}\n {{ return(ref(seed_name ~ \"_\" ~ w ~ \"\")) }}\n {% endif %}\n {% endfor %}\n{% else %}\n{{ return(ref(seed_name)) }}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.117918, "supported_languages": null}, "macro.fivetran_utils.fill_pass_through_columns": {"name": "fill_pass_through_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fill_pass_through_columns.sql", "original_file_path": "macros/fill_pass_through_columns.sql", "unique_id": "macro.fivetran_utils.fill_pass_through_columns", "macro_sql": "{% macro fill_pass_through_columns(pass_through_variable) %}\n\n{% if var(pass_through_variable) %}\n {% for field in var(pass_through_variable) %}\n {% if field is mapping %}\n {% if field.transform_sql %}\n , {{ field.transform_sql }} as {{ field.alias if field.alias else field.name }}\n {% else %}\n , {{ field.alias if field.alias else field.name }}\n {% endif %}\n {% else %}\n , {{ field }}\n {% endif %}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.118718, "supported_languages": null}, "macro.fivetran_utils.string_agg": {"name": "string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.string_agg", "macro_sql": "{% macro string_agg(field_to_agg, delimiter) -%}\n\n{{ adapter.dispatch('string_agg', 'fivetran_utils') (field_to_agg, delimiter) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__string_agg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.119196, "supported_languages": null}, "macro.fivetran_utils.default__string_agg": {"name": "default__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.default__string_agg", "macro_sql": "{% macro default__string_agg(field_to_agg, delimiter) %}\n string_agg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.119329, "supported_languages": null}, "macro.fivetran_utils.snowflake__string_agg": {"name": "snowflake__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.snowflake__string_agg", "macro_sql": "{% macro snowflake__string_agg(field_to_agg, delimiter) %}\n listagg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.119457, "supported_languages": null}, "macro.fivetran_utils.redshift__string_agg": {"name": "redshift__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.redshift__string_agg", "macro_sql": "{% macro redshift__string_agg(field_to_agg, delimiter) %}\n listagg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.119582, "supported_languages": null}, "macro.fivetran_utils.spark__string_agg": {"name": "spark__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.spark__string_agg", "macro_sql": "{% macro spark__string_agg(field_to_agg, delimiter) %}\n -- collect set will remove duplicates\n replace(replace(replace(cast( collect_set({{ field_to_agg }}) as string), '[', ''), ']', ''), ', ', {{ delimiter }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1197178, "supported_languages": null}, "macro.fivetran_utils.timestamp_diff": {"name": "timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.timestamp_diff", "macro_sql": "{% macro timestamp_diff(first_date, second_date, datepart) %}\n {{ adapter.dispatch('timestamp_diff', 'fivetran_utils')(first_date, second_date, datepart) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__timestamp_diff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.122813, "supported_languages": null}, "macro.fivetran_utils.default__timestamp_diff": {"name": "default__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.default__timestamp_diff", "macro_sql": "{% macro default__timestamp_diff(first_date, second_date, datepart) %}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.122978, "supported_languages": null}, "macro.fivetran_utils.redshift__timestamp_diff": {"name": "redshift__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.redshift__timestamp_diff", "macro_sql": "{% macro redshift__timestamp_diff(first_date, second_date, datepart) %}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.123138, "supported_languages": null}, "macro.fivetran_utils.bigquery__timestamp_diff": {"name": "bigquery__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.bigquery__timestamp_diff", "macro_sql": "{% macro bigquery__timestamp_diff(first_date, second_date, datepart) %}\n\n timestamp_diff(\n {{second_date}},\n {{first_date}},\n {{datepart}}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.123296, "supported_languages": null}, "macro.fivetran_utils.postgres__timestamp_diff": {"name": "postgres__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.postgres__timestamp_diff", "macro_sql": "{% macro postgres__timestamp_diff(first_date, second_date, datepart) %}\n\n {% if datepart == 'year' %}\n (date_part('year', ({{second_date}})::date) - date_part('year', ({{first_date}})::date))\n {% elif datepart == 'quarter' %}\n ({{ dbt.datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ dbt.datediff(first_date, second_date, 'year') }} * 12 + date_part('month', ({{second_date}})::date) - date_part('month', ({{first_date}})::date))\n {% elif datepart == 'day' %}\n (({{second_date}})::date - ({{first_date}})::date)\n {% elif datepart == 'week' %}\n ({{ dbt.datediff(first_date, second_date, 'day') }} / 7 + case\n when date_part('dow', ({{first_date}})::timestamp) <= date_part('dow', ({{second_date}})::timestamp) then\n case when {{first_date}} <= {{second_date}} then 0 else -1 end\n else\n case when {{first_date}} <= {{second_date}} then 1 else 0 end\n end)\n {% elif datepart == 'hour' %}\n ({{ dbt.datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ dbt.datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ dbt.datediff(first_date, second_date, 'minute') }} * 60 + floor(date_part('second', ({{second_date}})::timestamp)) - floor(date_part('second', ({{first_date}})::timestamp)))\n {% elif datepart == 'millisecond' %}\n ({{ dbt.datediff(first_date, second_date, 'minute') }} * 60000 + floor(date_part('millisecond', ({{second_date}})::timestamp)) - floor(date_part('millisecond', ({{first_date}})::timestamp)))\n {% elif datepart == 'microsecond' %}\n ({{ dbt.datediff(first_date, second_date, 'minute') }} * 60000000 + floor(date_part('microsecond', ({{second_date}})::timestamp)) - floor(date_part('microsecond', ({{first_date}})::timestamp)))\n {% else %}\n {{ exceptions.raise_compiler_error(\"Unsupported datepart for macro datediff in postgres: {!r}\".format(datepart)) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1250749, "supported_languages": null}, "macro.fivetran_utils.try_cast": {"name": "try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.try_cast", "macro_sql": "{% macro try_cast(field, type) %}\n {{ adapter.dispatch('try_cast', 'fivetran_utils') (field, type) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__try_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.125952, "supported_languages": null}, "macro.fivetran_utils.default__safe_cast": {"name": "default__safe_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.default__safe_cast", "macro_sql": "{% macro default__safe_cast(field, type) %}\n {# most databases don't support this function yet\n so we just need to use cast #}\n cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.126094, "supported_languages": null}, "macro.fivetran_utils.redshift__try_cast": {"name": "redshift__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.redshift__try_cast", "macro_sql": "{% macro redshift__try_cast(field, type) %}\n{%- if type == 'numeric' -%}\n\n case\n when trim({{field}}) ~ '^(0|[1-9][0-9]*)$' then trim({{field}})\n else null\n end::{{type}}\n\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"non-numeric datatypes are not currently supported\") }}\n\n{% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.126372, "supported_languages": null}, "macro.fivetran_utils.postgres__try_cast": {"name": "postgres__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.postgres__try_cast", "macro_sql": "{% macro postgres__try_cast(field, type) %}\n{%- if type == 'numeric' -%}\n\n case\n when replace(cast({{field}} as varchar),cast(' ' as varchar),cast('' as varchar)) ~ '^(0|[1-9][0-9]*)$' \n then replace(cast({{field}} as varchar),cast(' ' as varchar),cast('' as varchar))\n else null\n end::{{type}}\n\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"non-numeric datatypes are not currently supported\") }}\n\n{% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.126663, "supported_languages": null}, "macro.fivetran_utils.snowflake__try_cast": {"name": "snowflake__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.snowflake__try_cast", "macro_sql": "{% macro snowflake__try_cast(field, type) %}\n try_cast(cast({{field}} as varchar) as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.126793, "supported_languages": null}, "macro.fivetran_utils.bigquery__try_cast": {"name": "bigquery__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.bigquery__try_cast", "macro_sql": "{% macro bigquery__try_cast(field, type) %}\n safe_cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1269171, "supported_languages": null}, "macro.fivetran_utils.spark__try_cast": {"name": "spark__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.spark__try_cast", "macro_sql": "{% macro spark__try_cast(field, type) %}\n try_cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.12704, "supported_languages": null}, "macro.fivetran_utils.source_relation": {"name": "source_relation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/source_relation.sql", "original_file_path": "macros/source_relation.sql", "unique_id": "macro.fivetran_utils.source_relation", "macro_sql": "{% macro source_relation(union_schema_variable='union_schemas', union_database_variable='union_databases') -%}\n\n{{ adapter.dispatch('source_relation', 'fivetran_utils') (union_schema_variable, union_database_variable) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__source_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.127532, "supported_languages": null}, "macro.fivetran_utils.default__source_relation": {"name": "default__source_relation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/source_relation.sql", "original_file_path": "macros/source_relation.sql", "unique_id": "macro.fivetran_utils.default__source_relation", "macro_sql": "{% macro default__source_relation(union_schema_variable, union_database_variable) %}\n\n{% if var(union_schema_variable, none) %}\n, case\n {% for schema in var(union_schema_variable) %}\n when lower(replace(replace(_dbt_source_relation,'\"',''),'`','')) like '%.{{ schema|lower }}.%' then '{{ schema|lower }}'\n {% endfor %}\n end as source_relation\n{% elif var(union_database_variable, none) %}\n, case\n {% for database in var(union_database_variable) %}\n when lower(replace(replace(_dbt_source_relation,'\"',''),'`','')) like '%{{ database|lower }}.%' then '{{ database|lower }}'\n {% endfor %}\n end as source_relation\n{% else %}\n, cast('' as {{ dbt.type_string() }}) as source_relation\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.128117, "supported_languages": null}, "macro.fivetran_utils.first_value": {"name": "first_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "unique_id": "macro.fivetran_utils.first_value", "macro_sql": "{% macro first_value(first_value_field, partition_field, order_by_field, order=\"asc\") -%}\n\n{{ adapter.dispatch('first_value', 'fivetran_utils') (first_value_field, partition_field, order_by_field, order) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__first_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1286159, "supported_languages": null}, "macro.fivetran_utils.default__first_value": {"name": "default__first_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "unique_id": "macro.fivetran_utils.default__first_value", "macro_sql": "{% macro default__first_value(first_value_field, partition_field, order_by_field, order=\"asc\") %}\n\n first_value( {{ first_value_field }} ignore nulls ) over (partition by {{ partition_field }} order by {{ order_by_field }} {{ order }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.128818, "supported_languages": null}, "macro.fivetran_utils.redshift__first_value": {"name": "redshift__first_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "unique_id": "macro.fivetran_utils.redshift__first_value", "macro_sql": "{% macro redshift__first_value(first_value_field, partition_field, order_by_field, order=\"asc\") %}\n\n first_value( {{ first_value_field }} ignore nulls ) over (partition by {{ partition_field }} order by {{ order_by_field }} {{ order }} , {{ partition_field }} rows unbounded preceding )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.129038, "supported_languages": null}, "macro.fivetran_utils.add_dbt_source_relation": {"name": "add_dbt_source_relation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/add_dbt_source_relation.sql", "original_file_path": "macros/add_dbt_source_relation.sql", "unique_id": "macro.fivetran_utils.add_dbt_source_relation", "macro_sql": "{% macro add_dbt_source_relation() %}\n\n{% if var('union_schemas', none) or var('union_databases', none) %}\n, _dbt_source_relation\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.129295, "supported_languages": null}, "macro.fivetran_utils.add_pass_through_columns": {"name": "add_pass_through_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/add_pass_through_columns.sql", "original_file_path": "macros/add_pass_through_columns.sql", "unique_id": "macro.fivetran_utils.add_pass_through_columns", "macro_sql": "{% macro add_pass_through_columns(base_columns, pass_through_var) %}\n\n {% if pass_through_var %}\n\n {% for column in pass_through_var %}\n\n {% if column is mapping %}\n\n {% if column.alias %}\n\n {% do base_columns.append({ \"name\": column.name, \"alias\": column.alias, \"datatype\": column.datatype if column.datatype else dbt.type_string()}) %}\n\n {% else %}\n\n {% do base_columns.append({ \"name\": column.name, \"datatype\": column.datatype if column.datatype else dbt.type_string()}) %}\n \n {% endif %}\n\n {% else %}\n\n {% do base_columns.append({ \"name\": column, \"datatype\": dbt.type_string()}) %}\n\n {% endif %}\n\n {% endfor %}\n\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.130414, "supported_languages": null}, "macro.fivetran_utils.union_relations": {"name": "union_relations", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_relations.sql", "original_file_path": "macros/union_relations.sql", "unique_id": "macro.fivetran_utils.union_relations", "macro_sql": "{%- macro union_relations(relations, aliases=none, column_override=none, include=[], exclude=[], source_column_name=none) -%}\n\n {%- if exclude and include -%}\n {{ exceptions.raise_compiler_error(\"Both an exclude and include list were provided to the `union` macro. Only one is allowed\") }}\n {%- endif -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. -#}\n {%- if not execute %}\n {{ return('') }}\n {% endif -%}\n\n {%- set column_override = column_override if column_override is not none else {} -%}\n {%- set source_column_name = source_column_name if source_column_name is not none else '_dbt_source_relation' -%}\n\n {%- set relation_columns = {} -%}\n {%- set column_superset = {} -%}\n\n {%- for relation in relations -%}\n\n {%- do relation_columns.update({relation: []}) -%}\n\n {%- do dbt_utils._is_relation(relation, 'union_relations') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) -%}\n {%- for col in cols -%}\n\n {#- If an exclude list was provided and the column is in the list, do nothing -#}\n {%- if exclude and col.column in exclude -%}\n\n {#- If an include list was provided and the column is not in the list, do nothing -#}\n {%- elif include and col.column not in include -%}\n\n {#- Otherwise add the column to the column superset -#}\n {%- else -%}\n\n {#- update the list of columns in this relation -#}\n {%- do relation_columns[relation].append(col.column) -%}\n\n {%- if col.column in column_superset -%}\n\n {%- set stored = column_superset[col.column] -%}\n {%- if col.is_string() and stored.is_string() and col.string_size() > stored.string_size() -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif %}\n\n {%- else -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif -%}\n\n {%- endif -%}\n\n {%- endfor -%}\n {%- endfor -%}\n\n {%- set ordered_column_names = column_superset.keys() -%}\n\n {%- for relation in relations %}\n\n (\n select\n\n cast({{ dbt.string_literal(relation) }} as {{ dbt.type_string() }}) as {{ source_column_name }},\n {% for col_name in ordered_column_names -%}\n\n {%- set col = column_superset[col_name] %}\n {%- set col_type = column_override.get(col.column, col.data_type) %}\n {%- set col_name = adapter.quote(col_name) if col_name in relation_columns[relation] else 'null' %}\n cast({{ col_name }} as {{ col_type }}) as {{ col.quoted }} {% if not loop.last %},{% endif -%}\n\n {%- endfor %}\n\n from {{ aliases[loop.index0] if aliases else relation }}\n )\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n\n {%- endfor -%}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt.string_literal", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.134561, "supported_languages": null}, "macro.fivetran_utils.union_tables": {"name": "union_tables", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_relations.sql", "original_file_path": "macros/union_relations.sql", "unique_id": "macro.fivetran_utils.union_tables", "macro_sql": "{%- macro union_tables(tables, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_table') -%}\n\n {%- do exceptions.warn(\"Warning: the `union_tables` macro is no longer supported and will be deprecated in a future release of dbt-utils. Use the `union_relations` macro instead\") -%}\n\n {{ return(dbt_utils.union_relations(tables, column_override, include, exclude, source_column_name)) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_utils.union_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1349251, "supported_languages": null}, "macro.fivetran_utils.snowflake_seed_data": {"name": "snowflake_seed_data", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/snowflake_seed_data.sql", "original_file_path": "macros/snowflake_seed_data.sql", "unique_id": "macro.fivetran_utils.snowflake_seed_data", "macro_sql": "{% macro snowflake_seed_data(seed_name) %}\n\n{% if target.type == 'snowflake' %}\n{{ return(ref(seed_name ~ '_snowflake')) }}\n{% else %}\n{{ return(ref(seed_name)) }}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.135303, "supported_languages": null}, "macro.fivetran_utils.fill_staging_columns": {"name": "fill_staging_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fill_staging_columns.sql", "original_file_path": "macros/fill_staging_columns.sql", "unique_id": "macro.fivetran_utils.fill_staging_columns", "macro_sql": "{% macro fill_staging_columns(source_columns, staging_columns) -%}\n\n{%- set source_column_names = source_columns|map(attribute='name')|map('lower')|list -%}\n\n{%- for column in staging_columns %}\n {% if column.name|lower in source_column_names -%}\n {{ fivetran_utils.quote_column(column) }} as \n {%- if 'alias' in column %} {{ column.alias }} {% else %} {{ fivetran_utils.quote_column(column) }} {%- endif -%}\n {%- else -%}\n cast(null as {{ column.datatype }})\n {%- if 'alias' in column %} as {{ column.alias }} {% else %} as {{ fivetran_utils.quote_column(column) }} {% endif -%}\n {%- endif -%}\n {%- if not loop.last -%} , {% endif -%}\n{% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.quote_column"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.136961, "supported_languages": null}, "macro.fivetran_utils.quote_column": {"name": "quote_column", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fill_staging_columns.sql", "original_file_path": "macros/fill_staging_columns.sql", "unique_id": "macro.fivetran_utils.quote_column", "macro_sql": "{% macro quote_column(column) %}\n {% if 'quote' in column %}\n {% if column.quote %}\n {% if target.type in ('bigquery', 'spark', 'databricks') %}\n `{{ column.name }}`\n {% elif target.type == 'snowflake' %}\n \"{{ column.name | upper }}\"\n {% else %}\n \"{{ column.name }}\"\n {% endif %}\n {% else %}\n {{ column.name }}\n {% endif %}\n {% else %}\n {{ column.name }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.137533, "supported_languages": null}, "macro.fivetran_utils.json_extract": {"name": "json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.json_extract", "macro_sql": "{% macro json_extract(string, string_path) -%}\n\n{{ adapter.dispatch('json_extract', 'fivetran_utils') (string, string_path) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__json_extract"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1381152, "supported_languages": null}, "macro.fivetran_utils.default__json_extract": {"name": "default__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.default__json_extract", "macro_sql": "{% macro default__json_extract(string, string_path) %}\n\n json_extract_path_text({{string}}, {{ \"'\" ~ string_path ~ \"'\" }} )\n \n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.138274, "supported_languages": null}, "macro.fivetran_utils.snowflake__json_extract": {"name": "snowflake__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.snowflake__json_extract", "macro_sql": "{% macro snowflake__json_extract(string, string_path) %}\n\n json_extract_path_text(try_parse_json( {{string}} ), {{ \"'\" ~ string_path ~ \"'\" }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.138428, "supported_languages": null}, "macro.fivetran_utils.redshift__json_extract": {"name": "redshift__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.redshift__json_extract", "macro_sql": "{% macro redshift__json_extract(string, string_path) %}\n\n case when is_valid_json( {{string}} ) then json_extract_path_text({{string}}, {{ \"'\" ~ string_path ~ \"'\" }} ) else null end\n \n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1385999, "supported_languages": null}, "macro.fivetran_utils.bigquery__json_extract": {"name": "bigquery__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.bigquery__json_extract", "macro_sql": "{% macro bigquery__json_extract(string, string_path) %}\n\n json_extract_scalar({{string}}, {{ \"'$.\" ~ string_path ~ \"'\" }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1387541, "supported_languages": null}, "macro.fivetran_utils.postgres__json_extract": {"name": "postgres__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.postgres__json_extract", "macro_sql": "{% macro postgres__json_extract(string, string_path) %}\n\n {{string}}::json->>{{\"'\" ~ string_path ~ \"'\" }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.138902, "supported_languages": null}, "macro.fivetran_utils.collect_freshness": {"name": "collect_freshness", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/collect_freshness.sql", "original_file_path": "macros/collect_freshness.sql", "unique_id": "macro.fivetran_utils.collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness')(source, loaded_at_field, filter))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.139643, "supported_languages": null}, "macro.fivetran_utils.default__collect_freshness": {"name": "default__collect_freshness", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/collect_freshness.sql", "original_file_path": "macros/collect_freshness.sql", "unique_id": "macro.fivetran_utils.default__collect_freshness", "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n\n {%- set enabled_array = [] -%}\n {% for node in graph.sources.values() %}\n {% if node.identifier == source.identifier %}\n {% if (node.meta['is_enabled'] | default(true)) %}\n {%- do enabled_array.append(1) -%}\n {% endif %}\n {% endif %}\n {% endfor %}\n {% set is_enabled = (enabled_array != []) %}\n\n select\n {% if is_enabled %}\n max({{ loaded_at_field }})\n {% else %} \n {{ current_timestamp() }} {% endif %} as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n\n {% if is_enabled %}\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endif %}\n\n {% endcall %}\n {{ return(load_result('collect_freshness').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.14063, "supported_languages": null}, "macro.fivetran_utils.timestamp_add": {"name": "timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.timestamp_add", "macro_sql": "{% macro timestamp_add(datepart, interval, from_timestamp) -%}\n\n{{ adapter.dispatch('timestamp_add', 'fivetran_utils') (datepart, interval, from_timestamp) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__timestamp_add"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.141362, "supported_languages": null}, "macro.fivetran_utils.default__timestamp_add": {"name": "default__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.default__timestamp_add", "macro_sql": "{% macro default__timestamp_add(datepart, interval, from_timestamp) %}\n\n timestampadd(\n {{ datepart }},\n {{ interval }},\n {{ from_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.141531, "supported_languages": null}, "macro.fivetran_utils.bigquery__timestamp_add": {"name": "bigquery__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.bigquery__timestamp_add", "macro_sql": "{% macro bigquery__timestamp_add(datepart, interval, from_timestamp) %}\n\n timestamp_add({{ from_timestamp }}, interval {{ interval }} {{ datepart }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.14169, "supported_languages": null}, "macro.fivetran_utils.redshift__timestamp_add": {"name": "redshift__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.redshift__timestamp_add", "macro_sql": "{% macro redshift__timestamp_add(datepart, interval, from_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.141857, "supported_languages": null}, "macro.fivetran_utils.postgres__timestamp_add": {"name": "postgres__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.postgres__timestamp_add", "macro_sql": "{% macro postgres__timestamp_add(datepart, interval, from_timestamp) %}\n\n {{ from_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.142016, "supported_languages": null}, "macro.fivetran_utils.spark__timestamp_add": {"name": "spark__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.spark__timestamp_add", "macro_sql": "{% macro spark__timestamp_add(datepart, interval, from_timestamp) %}\n\n {{ dbt.dateadd(datepart, interval, from_timestamp) }}\n \n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1421928, "supported_languages": null}, "macro.fivetran_utils.ceiling": {"name": "ceiling", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "unique_id": "macro.fivetran_utils.ceiling", "macro_sql": "{% macro ceiling(num) -%}\n\n{{ adapter.dispatch('ceiling', 'fivetran_utils') (num) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__ceiling"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.142443, "supported_languages": null}, "macro.fivetran_utils.default__ceiling": {"name": "default__ceiling", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "unique_id": "macro.fivetran_utils.default__ceiling", "macro_sql": "{% macro default__ceiling(num) %}\n ceiling({{ num }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.142546, "supported_languages": null}, "macro.fivetran_utils.snowflake__ceiling": {"name": "snowflake__ceiling", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "unique_id": "macro.fivetran_utils.snowflake__ceiling", "macro_sql": "{% macro snowflake__ceiling(num) %}\n ceil({{ num }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.142645, "supported_languages": null}, "macro.fivetran_utils.remove_prefix_from_columns": {"name": "remove_prefix_from_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/remove_prefix_from_columns.sql", "original_file_path": "macros/remove_prefix_from_columns.sql", "unique_id": "macro.fivetran_utils.remove_prefix_from_columns", "macro_sql": "{% macro remove_prefix_from_columns(columns, prefix='', exclude=[]) %}\n\n {%- for col in columns if col.name not in exclude -%}\n {%- if col.name[:prefix|length]|lower == prefix -%}\n {{ col.name }} as {{ col.name[prefix|length:] }}\n {%- else -%}\n {{ col.name }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {% endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1433458, "supported_languages": null}, "macro.fivetran_utils.union_data": {"name": "union_data", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_data.sql", "original_file_path": "macros/union_data.sql", "unique_id": "macro.fivetran_utils.union_data", "macro_sql": "{%- macro union_data(table_identifier, database_variable, schema_variable, default_database, default_schema, default_variable, union_schema_variable='union_schemas', union_database_variable='union_databases') -%}\n\n{{ adapter.dispatch('union_data', 'fivetran_utils') (\n table_identifier, \n database_variable, \n schema_variable, \n default_database, \n default_schema, \n default_variable,\n union_schema_variable,\n union_database_variable\n ) }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.fivetran_utils.default__union_data"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1473, "supported_languages": null}, "macro.fivetran_utils.default__union_data": {"name": "default__union_data", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_data.sql", "original_file_path": "macros/union_data.sql", "unique_id": "macro.fivetran_utils.default__union_data", "macro_sql": "{%- macro default__union_data(\n table_identifier, \n database_variable, \n schema_variable, \n default_database, \n default_schema, \n default_variable,\n union_schema_variable,\n union_database_variable\n ) -%}\n\n{%- if var(union_schema_variable, none) -%}\n\n {%- set relations = [] -%}\n \n {%- if var(union_schema_variable) is string -%}\n {%- set trimmed = var(union_schema_variable)|trim('[')|trim(']') -%}\n {%- set schemas = trimmed.split(',')|map('trim',\" \")|map('trim','\"')|map('trim',\"'\") -%}\n {%- else -%}\n {%- set schemas = var(union_schema_variable) -%}\n {%- endif -%}\n\n {%- for schema in var(union_schema_variable) -%}\n {%- set relation=adapter.get_relation(\n database=source(schema, table_identifier).database if var('has_defined_sources', false) else var(database_variable, default_database),\n schema=source(schema, table_identifier).schema if var('has_defined_sources', false) else schema,\n identifier=source(schema, table_identifier).identifier if var('has_defined_sources', false) else table_identifier\n ) -%}\n \n {%- set relation_exists=relation is not none -%}\n\n {%- if relation_exists -%}\n {%- do relations.append(relation) -%}\n {%- endif -%}\n\n {%- endfor -%}\n \n {%- if relations != [] -%}\n {{ dbt_utils.union_relations(relations) }}\n {%- else -%}\n {% if execute and not var('fivetran__remove_empty_table_warnings', false) -%}\n {{ exceptions.warn(\"\\n\\nPlease be aware: The \" ~ table_identifier|upper ~ \" table was not found in your \" ~ default_schema|upper ~ \" schema(s). The Fivetran dbt package will create a completely empty \" ~ table_identifier|upper ~ \" staging model as to not break downstream transformations. To turn off these warnings, set the `fivetran__remove_empty_table_warnings` variable to TRUE (see https://github.com/fivetran/dbt_fivetran_utils/tree/releases/v0.4.latest#union_data-source for details).\\n\") }}\n {% endif -%}\n select \n cast(null as {{ dbt.type_string() }}) as _dbt_source_relation\n limit 0\n {%- endif -%}\n\n{%- elif var(union_database_variable, none) -%}\n\n {%- set relations = [] -%}\n\n {%- for database in var(union_database_variable) -%}\n {%- set relation=adapter.get_relation(\n database=source(schema, table_identifier).database if var('has_defined_sources', false) else database,\n schema=source(schema, table_identifier).schema if var('has_defined_sources', false) else var(schema_variable, default_schema),\n identifier=source(schema, table_identifier).identifier if var('has_defined_sources', false) else table_identifier\n ) -%}\n\n {%- set relation_exists=relation is not none -%}\n\n {%- if relation_exists -%}\n {%- do relations.append(relation) -%}\n {%- endif -%}\n\n {%- endfor -%}\n\n {%- if relations != [] -%}\n {{ dbt_utils.union_relations(relations) }}\n {%- else -%}\n {% if execute and not var('fivetran__remove_empty_table_warnings', false) -%}\n {{ exceptions.warn(\"\\n\\nPlease be aware: The \" ~ table_identifier|upper ~ \" table was not found in your \" ~ default_schema|upper ~ \" schema(s). The Fivetran dbt package will create a completely empty \" ~ table_identifier|upper ~ \" staging model as to not break downstream transformations. To turn off these warnings, set the `fivetran__remove_empty_table_warnings` variable to TRUE (see https://github.com/fivetran/dbt_fivetran_utils/tree/releases/v0.4.latest#union_data-source for details).\\n\") }}\n {% endif -%}\n select \n cast(null as {{ dbt.type_string() }}) as _dbt_source_relation\n limit 0\n {%- endif -%}\n\n{%- else -%}\n {%- set relation=adapter.get_relation(\n database=var(database_variable, default_database),\n schema=var(schema_variable, default_schema),\n identifier=var(default_schema ~ '_' ~ table_identifier ~ '_' ~ 'identifier', table_identifier)) -%}\n\n{%- set table_exists=relation is not none -%}\n\n{%- if table_exists -%}\n select * \n from {{ var(default_variable) }}\n{%- else -%}\n {% if execute and not var('fivetran__remove_empty_table_warnings', false) -%}\n {{ exceptions.warn(\"\\n\\nPlease be aware: The \" ~ table_identifier|upper ~ \" table was not found in your \" ~ default_schema|upper ~ \" schema(s). The Fivetran dbt package will create a completely empty \" ~ table_identifier|upper ~ \" staging model as to not break downstream transformations. To turn off these warnings, set the `fivetran__remove_empty_table_warnings` variable to TRUE (see https://github.com/fivetran/dbt_fivetran_utils/tree/releases/v0.4.latest#union_data-source for details).\\n\") }}\n {% endif -%}\n select \n cast(null as {{ dbt.type_string() }}) as _dbt_source_relation\n limit 0\n{%- endif -%}\n{%- endif -%}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_utils.union_relations", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1509252, "supported_languages": null}, "macro.fivetran_utils.dummy_coalesce_value": {"name": "dummy_coalesce_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/dummy_coalesce_value.sql", "original_file_path": "macros/dummy_coalesce_value.sql", "unique_id": "macro.fivetran_utils.dummy_coalesce_value", "macro_sql": "{% macro dummy_coalesce_value(column) %}\n\n{% set coalesce_value = {\n 'STRING': \"'DUMMY_STRING'\",\n 'BOOLEAN': 'null',\n 'INT': 999999999,\n 'FLOAT': 999999999.99,\n 'TIMESTAMP': 'cast(\"2099-12-31\" as timestamp)',\n 'DATE': 'cast(\"2099-12-31\" as date)',\n} %}\n\n{% if column.is_float() %}\n{{ return(coalesce_value['FLOAT']) }}\n\n{% elif column.is_numeric() %}\n{{ return(coalesce_value['INT']) }}\n\n{% elif column.is_string() %}\n{{ return(coalesce_value['STRING']) }}\n\n{% elif column.data_type|lower == 'boolean' %}\n{{ return(coalesce_value['BOOLEAN']) }}\n\n{% elif 'timestamp' in column.data_type|lower %}\n{{ return(coalesce_value['TIMESTAMP']) }}\n\n{% elif 'date' in column.data_type|lower %}\n{{ return(coalesce_value['DATE']) }}\n\n{% elif 'int' in column.data_type|lower %}\n{{ return(coalesce_value['INT']) }}\n\n{% endif %}\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1523578, "supported_languages": null}, "macro.fivetran_utils.wrap_in_quotes": {"name": "wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.wrap_in_quotes", "macro_sql": "{%- macro wrap_in_quotes(object_to_quote) -%}\n\n{{ return(adapter.dispatch('wrap_in_quotes', 'fivetran_utils')(object_to_quote)) }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.fivetran_utils.postgres__wrap_in_quotes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.152707, "supported_languages": null}, "macro.fivetran_utils.default__wrap_in_quotes": {"name": "default__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.default__wrap_in_quotes", "macro_sql": "{%- macro default__wrap_in_quotes(object_to_quote) -%}\n{# bigquery, spark, databricks #}\n `{{ object_to_quote }}`\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1528199, "supported_languages": null}, "macro.fivetran_utils.snowflake__wrap_in_quotes": {"name": "snowflake__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.snowflake__wrap_in_quotes", "macro_sql": "{%- macro snowflake__wrap_in_quotes(object_to_quote) -%}\n \"{{ object_to_quote | upper }}\"\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1529322, "supported_languages": null}, "macro.fivetran_utils.redshift__wrap_in_quotes": {"name": "redshift__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.redshift__wrap_in_quotes", "macro_sql": "{%- macro redshift__wrap_in_quotes(object_to_quote) -%}\n \"{{ object_to_quote }}\"\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1530309, "supported_languages": null}, "macro.fivetran_utils.postgres__wrap_in_quotes": {"name": "postgres__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.postgres__wrap_in_quotes", "macro_sql": "{%- macro postgres__wrap_in_quotes(object_to_quote) -%}\n \"{{ object_to_quote }}\"\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1531289, "supported_languages": null}, "macro.fivetran_utils.array_agg": {"name": "array_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "unique_id": "macro.fivetran_utils.array_agg", "macro_sql": "{% macro array_agg(field_to_agg) -%}\n\n{{ adapter.dispatch('array_agg', 'fivetran_utils') (field_to_agg) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__array_agg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.153388, "supported_languages": null}, "macro.fivetran_utils.default__array_agg": {"name": "default__array_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "unique_id": "macro.fivetran_utils.default__array_agg", "macro_sql": "{% macro default__array_agg(field_to_agg) %}\n array_agg({{ field_to_agg }})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1534889, "supported_languages": null}, "macro.fivetran_utils.redshift__array_agg": {"name": "redshift__array_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "unique_id": "macro.fivetran_utils.redshift__array_agg", "macro_sql": "{% macro redshift__array_agg(field_to_agg) %}\n listagg({{ field_to_agg }}, ',')\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1535869, "supported_languages": null}, "macro.fivetran_utils.empty_variable_warning": {"name": "empty_variable_warning", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/empty_variable_warning.sql", "original_file_path": "macros/empty_variable_warning.sql", "unique_id": "macro.fivetran_utils.empty_variable_warning", "macro_sql": "{% macro empty_variable_warning(variable, downstream_model) %}\n\n{% if not var(variable) %}\n{{ log(\n \"\"\"\n Warning: You have passed an empty list to the \"\"\" ~ variable ~ \"\"\".\n As a result, you won't see the history of any columns in the \"\"\" ~ downstream_model ~ \"\"\" model.\n \"\"\",\n info=True\n) }}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.1539829, "supported_languages": null}, "macro.fivetran_utils.enabled_vars_one_true": {"name": "enabled_vars_one_true", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/enabled_vars_one_true.sql", "original_file_path": "macros/enabled_vars_one_true.sql", "unique_id": "macro.fivetran_utils.enabled_vars_one_true", "macro_sql": "{% macro enabled_vars_one_true(vars) %}\n\n{% for v in vars %}\n \n {% if var(v, False) == True %}\n {{ return(True) }}\n {% endif %}\n\n{% endfor %}\n\n{{ return(False) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1685563702.154378, "supported_languages": null}}, "docs": {"doc.dbt.__overview__": {"name": "__overview__", "resource_type": "doc", "package_name": "dbt", "path": "overview.md", "original_file_path": "docs/overview.md", "unique_id": "doc.dbt.__overview__", "block_contents": "### Welcome!\n\nWelcome to the auto-generated documentation for your dbt project!\n\n### Navigation\n\nYou can use the `Project` and `Database` navigation tabs on the left side of the window to explore the models\nin your project.\n\n#### Project Tab\nThe `Project` tab mirrors the directory structure of your dbt project. In this tab, you can see all of the\nmodels defined in your dbt project, as well as models imported from dbt packages.\n\n#### Database Tab\nThe `Database` tab also exposes your models, but in a format that looks more like a database explorer. This view\nshows relations (tables and views) grouped into database schemas. Note that ephemeral models are _not_ shown\nin this interface, as they do not exist in the database.\n\n### Graph Exploration\nYou can click the blue icon on the bottom-right corner of the page to view the lineage graph of your models.\n\nOn model pages, you'll see the immediate parents and children of the model you're exploring. By clicking the `Expand`\nbutton at the top-right of this lineage pane, you'll be able to see all of the models that are used to build,\nor are built from, the model you're exploring.\n\nOnce expanded, you'll be able to use the `--select` and `--exclude` model selection syntax to filter the\nmodels in the graph. For more information on model selection, check out the [dbt docs](https://docs.getdbt.com/docs/model-selection-syntax).\n\nNote that you can also right-click on models to interactively filter and explore the graph.\n\n---\n\n### More information\n\n- [What is dbt](https://docs.getdbt.com/docs/introduction)?\n- Read the [dbt viewpoint](https://docs.getdbt.com/docs/viewpoint)\n- [Installation](https://docs.getdbt.com/docs/installation)\n- Join the [dbt Community](https://www.getdbt.com/community/) for questions and discussion"}}, "exposures": {}, "metrics": {}, "selectors": {}, "disabled": {}, "parent_map": {"seed.asana_source_integration_tests.project_task_data": [], "seed.asana_source_integration_tests.story_data": [], "seed.asana_source_integration_tests.task_tag_data": [], "seed.asana_source_integration_tests.task_section_data": [], "seed.asana_source_integration_tests.task_data": [], "seed.asana_source_integration_tests.task_follower_data": [], "seed.asana_source_integration_tests.tag_data": [], "seed.asana_source_integration_tests.project_data": [], "seed.asana_source_integration_tests.user_data": [], "seed.asana_source_integration_tests.team_data": [], "seed.asana_source_integration_tests.section_data": [], "model.asana_source.stg_asana__user": ["model.asana_source.stg_asana__user_tmp", "model.asana_source.stg_asana__user_tmp"], "model.asana_source.stg_asana__task": ["model.asana_source.stg_asana__task_tmp", "model.asana_source.stg_asana__task_tmp"], "model.asana_source.stg_asana__task_section": ["model.asana_source.stg_asana__task_section_tmp", "model.asana_source.stg_asana__task_section_tmp"], "model.asana_source.stg_asana__section": ["model.asana_source.stg_asana__section_tmp", "model.asana_source.stg_asana__section_tmp"], "model.asana_source.stg_asana__team": ["model.asana_source.stg_asana__team_tmp", "model.asana_source.stg_asana__team_tmp"], "model.asana_source.stg_asana__task_tag": ["model.asana_source.stg_asana__task_tag_tmp", "model.asana_source.stg_asana__task_tag_tmp"], "model.asana_source.stg_asana__story": ["model.asana_source.stg_asana__story_tmp", "model.asana_source.stg_asana__story_tmp"], "model.asana_source.stg_asana__tag": ["model.asana_source.stg_asana__tag_tmp", "model.asana_source.stg_asana__tag_tmp"], "model.asana_source.stg_asana__project_task": ["model.asana_source.stg_asana__project_task_tmp", "model.asana_source.stg_asana__project_task_tmp"], "model.asana_source.stg_asana__project": ["model.asana_source.stg_asana__project_tmp", "model.asana_source.stg_asana__project_tmp"], "model.asana_source.stg_asana__task_follower": ["model.asana_source.stg_asana__task_follower_tmp", "model.asana_source.stg_asana__task_follower_tmp"], "model.asana_source.stg_asana__story_tmp": ["source.asana_source.asana.story"], "model.asana_source.stg_asana__team_tmp": ["source.asana_source.asana.team"], "model.asana_source.stg_asana__task_tmp": ["source.asana_source.asana.task"], "model.asana_source.stg_asana__task_follower_tmp": ["source.asana_source.asana.task_follower"], "model.asana_source.stg_asana__tag_tmp": ["source.asana_source.asana.tag"], "model.asana_source.stg_asana__task_section_tmp": ["source.asana_source.asana.task_section"], "model.asana_source.stg_asana__task_tag_tmp": ["source.asana_source.asana.task_tag"], "model.asana_source.stg_asana__user_tmp": ["source.asana_source.asana.user"], "model.asana_source.stg_asana__section_tmp": ["source.asana_source.asana.section"], "model.asana_source.stg_asana__project_tmp": ["source.asana_source.asana.project"], "model.asana_source.stg_asana__project_task_tmp": ["source.asana_source.asana.project_task"], "test.asana_source.unique_stg_asana__project_project_id.67bfab1228": ["model.asana_source.stg_asana__project"], "test.asana_source.not_null_stg_asana__project_project_id.d27dae84fa": ["model.asana_source.stg_asana__project"], "test.asana_source.not_null_stg_asana__project_task_project_id.e2450d16b1": ["model.asana_source.stg_asana__project_task"], "test.asana_source.not_null_stg_asana__project_task_task_id.9479566014": ["model.asana_source.stg_asana__project_task"], "test.asana_source.unique_stg_asana__section_section_id.0495dd3d2f": ["model.asana_source.stg_asana__section"], "test.asana_source.not_null_stg_asana__section_section_id.389ebce958": ["model.asana_source.stg_asana__section"], "test.asana_source.unique_stg_asana__story_story_id.414f25bb84": ["model.asana_source.stg_asana__story"], "test.asana_source.not_null_stg_asana__story_story_id.ca847d0848": ["model.asana_source.stg_asana__story"], "test.asana_source.not_null_stg_asana__story_target_task_id.3f971de06e": ["model.asana_source.stg_asana__story"], "test.asana_source.unique_stg_asana__tag_tag_id.fd78b190c7": ["model.asana_source.stg_asana__tag"], "test.asana_source.not_null_stg_asana__tag_tag_id.c6a8187ca2": ["model.asana_source.stg_asana__tag"], "test.asana_source.unique_stg_asana__task_task_id.a5271275a5": ["model.asana_source.stg_asana__task"], "test.asana_source.not_null_stg_asana__task_task_id.924cc69000": ["model.asana_source.stg_asana__task"], "test.asana_source.not_null_stg_asana__task_follower_task_id.5af35f322c": ["model.asana_source.stg_asana__task_follower"], "test.asana_source.not_null_stg_asana__task_follower_user_id.e0aea0b15e": ["model.asana_source.stg_asana__task_follower"], "test.asana_source.not_null_stg_asana__task_section_task_id.ab81301de8": ["model.asana_source.stg_asana__task_section"], "test.asana_source.not_null_stg_asana__task_section_section_id.b0977a4cfe": ["model.asana_source.stg_asana__task_section"], "test.asana_source.not_null_stg_asana__task_tag_tag_id.d523de41d8": ["model.asana_source.stg_asana__task_tag"], "test.asana_source.not_null_stg_asana__task_tag_task_id.9d27624748": ["model.asana_source.stg_asana__task_tag"], "test.asana_source.unique_stg_asana__team_team_id.111fe15873": ["model.asana_source.stg_asana__team"], "test.asana_source.not_null_stg_asana__team_team_id.e12b563474": ["model.asana_source.stg_asana__team"], "test.asana_source.unique_stg_asana__user_user_id.73808d6267": ["model.asana_source.stg_asana__user"], "test.asana_source.not_null_stg_asana__user_user_id.4e900e8ec6": ["model.asana_source.stg_asana__user"], "source.asana_source.asana.user": [], "source.asana_source.asana.task": [], "source.asana_source.asana.project": [], "source.asana_source.asana.story": [], "source.asana_source.asana.team": [], "source.asana_source.asana.tag": [], "source.asana_source.asana.section": [], "source.asana_source.asana.project_task": [], "source.asana_source.asana.task_follower": [], "source.asana_source.asana.task_tag": [], "source.asana_source.asana.task_section": []}, "child_map": {"seed.asana_source_integration_tests.project_task_data": [], "seed.asana_source_integration_tests.story_data": [], "seed.asana_source_integration_tests.task_tag_data": [], "seed.asana_source_integration_tests.task_section_data": [], "seed.asana_source_integration_tests.task_data": [], "seed.asana_source_integration_tests.task_follower_data": [], "seed.asana_source_integration_tests.tag_data": [], "seed.asana_source_integration_tests.project_data": [], "seed.asana_source_integration_tests.user_data": [], "seed.asana_source_integration_tests.team_data": [], "seed.asana_source_integration_tests.section_data": [], "model.asana_source.stg_asana__user": ["test.asana_source.not_null_stg_asana__user_user_id.4e900e8ec6", "test.asana_source.unique_stg_asana__user_user_id.73808d6267"], "model.asana_source.stg_asana__task": ["test.asana_source.not_null_stg_asana__task_task_id.924cc69000", "test.asana_source.unique_stg_asana__task_task_id.a5271275a5"], "model.asana_source.stg_asana__task_section": ["test.asana_source.not_null_stg_asana__task_section_section_id.b0977a4cfe", "test.asana_source.not_null_stg_asana__task_section_task_id.ab81301de8"], "model.asana_source.stg_asana__section": ["test.asana_source.not_null_stg_asana__section_section_id.389ebce958", "test.asana_source.unique_stg_asana__section_section_id.0495dd3d2f"], "model.asana_source.stg_asana__team": ["test.asana_source.not_null_stg_asana__team_team_id.e12b563474", "test.asana_source.unique_stg_asana__team_team_id.111fe15873"], "model.asana_source.stg_asana__task_tag": ["test.asana_source.not_null_stg_asana__task_tag_tag_id.d523de41d8", "test.asana_source.not_null_stg_asana__task_tag_task_id.9d27624748"], "model.asana_source.stg_asana__story": ["test.asana_source.not_null_stg_asana__story_story_id.ca847d0848", "test.asana_source.not_null_stg_asana__story_target_task_id.3f971de06e", "test.asana_source.unique_stg_asana__story_story_id.414f25bb84"], "model.asana_source.stg_asana__tag": ["test.asana_source.not_null_stg_asana__tag_tag_id.c6a8187ca2", "test.asana_source.unique_stg_asana__tag_tag_id.fd78b190c7"], "model.asana_source.stg_asana__project_task": ["test.asana_source.not_null_stg_asana__project_task_project_id.e2450d16b1", "test.asana_source.not_null_stg_asana__project_task_task_id.9479566014"], "model.asana_source.stg_asana__project": ["test.asana_source.not_null_stg_asana__project_project_id.d27dae84fa", "test.asana_source.unique_stg_asana__project_project_id.67bfab1228"], "model.asana_source.stg_asana__task_follower": ["test.asana_source.not_null_stg_asana__task_follower_task_id.5af35f322c", "test.asana_source.not_null_stg_asana__task_follower_user_id.e0aea0b15e"], "model.asana_source.stg_asana__story_tmp": ["model.asana_source.stg_asana__story", "model.asana_source.stg_asana__story"], "model.asana_source.stg_asana__team_tmp": ["model.asana_source.stg_asana__team", "model.asana_source.stg_asana__team"], "model.asana_source.stg_asana__task_tmp": ["model.asana_source.stg_asana__task", "model.asana_source.stg_asana__task"], "model.asana_source.stg_asana__task_follower_tmp": ["model.asana_source.stg_asana__task_follower", "model.asana_source.stg_asana__task_follower"], "model.asana_source.stg_asana__tag_tmp": ["model.asana_source.stg_asana__tag", "model.asana_source.stg_asana__tag"], "model.asana_source.stg_asana__task_section_tmp": ["model.asana_source.stg_asana__task_section", "model.asana_source.stg_asana__task_section"], "model.asana_source.stg_asana__task_tag_tmp": ["model.asana_source.stg_asana__task_tag", "model.asana_source.stg_asana__task_tag"], "model.asana_source.stg_asana__user_tmp": ["model.asana_source.stg_asana__user", "model.asana_source.stg_asana__user"], "model.asana_source.stg_asana__section_tmp": ["model.asana_source.stg_asana__section", "model.asana_source.stg_asana__section"], "model.asana_source.stg_asana__project_tmp": ["model.asana_source.stg_asana__project", "model.asana_source.stg_asana__project"], "model.asana_source.stg_asana__project_task_tmp": ["model.asana_source.stg_asana__project_task", "model.asana_source.stg_asana__project_task"], "test.asana_source.unique_stg_asana__project_project_id.67bfab1228": [], "test.asana_source.not_null_stg_asana__project_project_id.d27dae84fa": [], "test.asana_source.not_null_stg_asana__project_task_project_id.e2450d16b1": [], "test.asana_source.not_null_stg_asana__project_task_task_id.9479566014": [], "test.asana_source.unique_stg_asana__section_section_id.0495dd3d2f": [], "test.asana_source.not_null_stg_asana__section_section_id.389ebce958": [], "test.asana_source.unique_stg_asana__story_story_id.414f25bb84": [], "test.asana_source.not_null_stg_asana__story_story_id.ca847d0848": [], "test.asana_source.not_null_stg_asana__story_target_task_id.3f971de06e": [], "test.asana_source.unique_stg_asana__tag_tag_id.fd78b190c7": [], "test.asana_source.not_null_stg_asana__tag_tag_id.c6a8187ca2": [], "test.asana_source.unique_stg_asana__task_task_id.a5271275a5": [], "test.asana_source.not_null_stg_asana__task_task_id.924cc69000": [], "test.asana_source.not_null_stg_asana__task_follower_task_id.5af35f322c": [], "test.asana_source.not_null_stg_asana__task_follower_user_id.e0aea0b15e": [], "test.asana_source.not_null_stg_asana__task_section_task_id.ab81301de8": [], "test.asana_source.not_null_stg_asana__task_section_section_id.b0977a4cfe": [], "test.asana_source.not_null_stg_asana__task_tag_tag_id.d523de41d8": [], "test.asana_source.not_null_stg_asana__task_tag_task_id.9d27624748": [], "test.asana_source.unique_stg_asana__team_team_id.111fe15873": [], "test.asana_source.not_null_stg_asana__team_team_id.e12b563474": [], "test.asana_source.unique_stg_asana__user_user_id.73808d6267": [], "test.asana_source.not_null_stg_asana__user_user_id.4e900e8ec6": [], "source.asana_source.asana.user": ["model.asana_source.stg_asana__user_tmp"], "source.asana_source.asana.task": ["model.asana_source.stg_asana__task_tmp"], "source.asana_source.asana.project": ["model.asana_source.stg_asana__project_tmp"], "source.asana_source.asana.story": ["model.asana_source.stg_asana__story_tmp"], "source.asana_source.asana.team": ["model.asana_source.stg_asana__team_tmp"], "source.asana_source.asana.tag": ["model.asana_source.stg_asana__tag_tmp"], "source.asana_source.asana.section": ["model.asana_source.stg_asana__section_tmp"], "source.asana_source.asana.project_task": ["model.asana_source.stg_asana__project_task_tmp"], "source.asana_source.asana.task_follower": ["model.asana_source.stg_asana__task_follower_tmp"], "source.asana_source.asana.task_tag": ["model.asana_source.stg_asana__task_tag_tmp"], "source.asana_source.asana.task_section": ["model.asana_source.stg_asana__task_section_tmp"]}} \ No newline at end of file +{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v12.json", "dbt_version": "1.9.2", "generated_at": "2025-02-17T17:09:02.210375Z", "invocation_id": "13571468-110c-4b3f-8744-76d2e1f65abc", "env": {}, "project_name": "asana_source_integration_tests", "project_id": "8026034a61eef02391ef24b373ea0dc0", "user_id": "81581f81-d5af-4143-8fbf-c2f0001e4f56", "send_anonymous_usage_stats": true, "adapter_type": "postgres"}, "nodes": {"seed.asana_source_integration_tests.project_task_data": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "project_task_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "project_task_data.csv", "original_file_path": "seeds/project_task_data.csv", "unique_id": "seed.asana_source_integration_tests.project_task_data", "fqn": ["asana_source_integration_tests", "project_task_data"], "alias": "project_task_data", "checksum": {"name": "sha256", "checksum": "b8ae363c3ab40609f8b5b0eee30e198bd124d781198ecda72e5409178aab17cd"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "project_id": "bigint", "task_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"project_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "task_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1739812080.95083, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"project_task_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.story_data": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "story_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "story_data.csv", "original_file_path": "seeds/story_data.csv", "unique_id": "seed.asana_source_integration_tests.story_data", "fqn": ["asana_source_integration_tests", "story_data"], "alias": "story_data", "checksum": {"name": "sha256", "checksum": "207847a91c60ba0de1269fd0aef2a0e1f9d2c3e2b0fbae231ce69fce909dd15a"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint", "created_by_id": "bigint", "target_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "created_by_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "target_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1739812080.961659, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"story_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.task_tag_data": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "task_tag_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "task_tag_data.csv", "original_file_path": "seeds/task_tag_data.csv", "unique_id": "seed.asana_source_integration_tests.task_tag_data", "fqn": ["asana_source_integration_tests", "task_tag_data"], "alias": "task_tag_data", "checksum": {"name": "sha256", "checksum": "0209673eda201e499fc6c588fbc799e08b44a60168cabaa4dc3cee39bb250cbd"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "tag_id": "bigint", "task_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"tag_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "task_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1739812080.9629629, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"task_tag_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.task_section_data": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "task_section_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "task_section_data.csv", "original_file_path": "seeds/task_section_data.csv", "unique_id": "seed.asana_source_integration_tests.task_section_data", "fqn": ["asana_source_integration_tests", "task_section_data"], "alias": "task_section_data", "checksum": {"name": "sha256", "checksum": "d0aab9b6565fdb541b9ed5122d66cc9fad61287d3374d8af41c25eaf9bcd5805"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "section_id": "bigint", "task_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"section_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "task_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1739812080.9642649, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"task_section_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.task_data": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "task_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "task_data.csv", "original_file_path": "seeds/task_data.csv", "unique_id": "seed.asana_source_integration_tests.task_data", "fqn": ["asana_source_integration_tests", "task_data"], "alias": "task_data", "checksum": {"name": "sha256", "checksum": "dc304269ae0d5003e65aa0b8f5be6093ec114874b7bca0bf4784ffed187338cd"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint", "assignee_id": "bigint", "completed_by_id": "bigint", "parent_id": "bigint", "workspace_id": "bigint", "completed_at": "timestamp", "created_at": "timestamp", "due_on": "timestamp", "due_at": "timestamp", "modified_at": "timestamp", "start_on": "timestamp"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "assignee_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "completed_by_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "parent_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "workspace_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "completed_at": "timestamp", "created_at": "timestamp", "due_on": "timestamp", "due_at": "timestamp", "modified_at": "timestamp", "start_on": "timestamp", "_fivetran_synced": "timestamp"}}, "created_at": 1739812080.9655502, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"task_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.task_follower_data": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "task_follower_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "task_follower_data.csv", "original_file_path": "seeds/task_follower_data.csv", "unique_id": "seed.asana_source_integration_tests.task_follower_data", "fqn": ["asana_source_integration_tests", "task_follower_data"], "alias": "task_follower_data", "checksum": {"name": "sha256", "checksum": "6171210df6abad2ffba8ff8d10c1feb73c13c41c8e86b32e59f5aa29a4571678"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "user_id": "bigint", "task_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"user_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "task_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1739812080.966784, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"task_follower_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.tag_data": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "tag_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "tag_data.csv", "original_file_path": "seeds/tag_data.csv", "unique_id": "seed.asana_source_integration_tests.tag_data", "fqn": ["asana_source_integration_tests", "tag_data"], "alias": "tag_data", "checksum": {"name": "sha256", "checksum": "e74c86b7fda7a484687ac7e16fd759233a2066632e6dd27acb481b0afa852548"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint", "workspace_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "workspace_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1739812080.967971, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"tag_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.project_data": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "project_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "project_data.csv", "original_file_path": "seeds/project_data.csv", "unique_id": "seed.asana_source_integration_tests.project_data", "fqn": ["asana_source_integration_tests", "project_data"], "alias": "project_data", "checksum": {"name": "sha256", "checksum": "cf12cd38b9bdb3ec36cac1757ae4a17e7a8dc4182cb65995ec3fc9b7c2668378"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint", "owner_id": "bigint", "team_id": "bigint", "workspace_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "owner_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "team_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "workspace_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1739812080.969155, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"project_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.user_data": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "user_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "user_data.csv", "original_file_path": "seeds/user_data.csv", "unique_id": "seed.asana_source_integration_tests.user_data", "fqn": ["asana_source_integration_tests", "user_data"], "alias": "user_data", "checksum": {"name": "sha256", "checksum": "237db906018d65bbeeb08bd57c3cd23a91428412a882a0b59994658d564a9ad3"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1739812080.9711292, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"user_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.team_data": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "team_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "team_data.csv", "original_file_path": "seeds/team_data.csv", "unique_id": "seed.asana_source_integration_tests.team_data", "fqn": ["asana_source_integration_tests", "team_data"], "alias": "team_data", "checksum": {"name": "sha256", "checksum": "96c14731f1382783fd83b114321e23b5c2813b94f96a6e5422a5aca66157a1cd"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint", "organization_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "organization_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1739812080.9723048, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"team_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "seed.asana_source_integration_tests.section_data": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "section_data", "resource_type": "seed", "package_name": "asana_source_integration_tests", "path": "section_data.csv", "original_file_path": "seeds/section_data.csv", "unique_id": "seed.asana_source_integration_tests.section_data", "fqn": ["asana_source_integration_tests", "section_data"], "alias": "section_data", "checksum": {"name": "sha256", "checksum": "ca6f6bf502e9d65fcbe59590756a42979e31af8bf1db841a9292b56512252bde"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "id": "bigint", "project_id": "bigint"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}", "project_id": "{{ 'int64' if target.type == 'bigquery' else 'bigint' }}"}}, "created_at": 1739812080.9734778, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"section_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/asana/dbt_asana_source/integration_tests", "depends_on": {"macros": []}}, "model.asana_source.stg_asana__user": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__user", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__user.sql", "original_file_path": "models/stg_asana__user.sql", "unique_id": "model.asana_source.stg_asana__user", "fqn": ["asana_source", "stg_asana__user"], "alias": "stg_asana__user", "checksum": {"name": "sha256", "checksum": "e6e7098e689114044453113ea50d3f489c23dceeabe67185124bb6adb2a5b919"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "Table of all accounts in the organization", "columns": {"user_id": {"name": "user_id", "description": "System generated unique ID for each user", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "email": {"name": "email", "description": "The user's email", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "user_name": {"name": "user_name", "description": "The name of the user as it appears in the UI", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.27516, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__user\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__user_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__user_tmp')),\n staging_columns=get_user_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n id as user_id,\n email,\n name as user_name\n from fields\n where not coalesce(_fivetran_deleted, false)\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_asana__user_tmp", "package": null, "version": null}, {"name": "stg_asana__user_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_user_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.asana_source.stg_asana__user_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__user.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__user_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_deleted\n \n as \n \n _fivetran_deleted\n \n, \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n email\n \n as \n \n email\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n id as user_id,\n email,\n name as user_name\n from fields\n where not coalesce(_fivetran_deleted, false)\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["user_id"], "time_spine": null}, "model.asana_source.stg_asana__task": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__task.sql", "original_file_path": "models/stg_asana__task.sql", "unique_id": "model.asana_source.stg_asana__task", "fqn": ["asana_source", "stg_asana__task"], "alias": "stg_asana__task", "checksum": {"name": "sha256", "checksum": "8beec5ac1f355dab7c821d6576994092945b07211378ba60ff01eea44d30857e"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "Table containing all created tasks", "columns": {"task_id": {"name": "task_id", "description": "System generated unique ID of the task", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "assignee_user_id": {"name": "assignee_user_id", "description": "Foreign key referencing the USER that is currently assigned the task.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "assignee_status": {"name": "assignee_status", "description": "Scheduling status for the assignee that the task is or will eventually be assigned to. This maps to the sections of \"My Tasks\"", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "is_completed": {"name": "is_completed", "description": "Boolean that is true if the task is currently marked complete.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "completed_at": {"name": "completed_at", "description": "Timestamp of when the task was marked complete.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "completed_by_user_id": {"name": "completed_by_user_id", "description": "Foreign key referencing the USER who completed the task.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Timestamp of when the task was created", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "due_date": {"name": "due_date", "description": "Date the task is due, if provided.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "modified_at": {"name": "modified_at", "description": "Timestamp of when the task was last modified", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "task_name": {"name": "task_name", "description": "User-facing name of the task.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "parent_task_id": {"name": "parent_task_id", "description": "Self-referential id of the parent TASK that this is a subtask of.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "start_date": {"name": "start_date", "description": "The start date of the task, if a date range is given.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "task_description": {"name": "task_description", "description": "Free-form text describing the task, as seen in the UI.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "is_liked": {"name": "is_liked", "description": "A boolean that's true if the task has been liked.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "number_of_likes": {"name": "number_of_likes", "description": "An integer indicating the number of likes on a task.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "workspace_id": {"name": "workspace_id", "description": "ID of the organization's Asana workspace. Irrelevant unless working with multiple companies.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.27313, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__task_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__task_tmp')),\n staging_columns=get_task_columns()\n )\n }}\n\n --The below script allows for pass through columns.\n {% if var('task_pass_through_columns') %}\n ,\n {{ var('task_pass_through_columns') | join (\", \") }}\n\n {% endif %}\n\n from base\n),\n\nfinal as (\n \n select \n id as task_id,\n assignee_id as assignee_user_id,\n completed as is_completed,\n cast(completed_at as {{ dbt.type_timestamp() }}) as completed_at,\n completed_by_id as completed_by_user_id,\n cast(created_at as {{ dbt.type_timestamp() }}) as created_at,\n cast(coalesce(due_on, due_at) as {{ dbt.type_timestamp() }}) as due_date,\n cast(modified_at as {{ dbt.type_timestamp() }}) as modified_at,\n name as task_name,\n parent_id as parent_task_id,\n cast(start_on as {{ dbt.type_timestamp() }}) as start_date,\n notes as task_description,\n liked as is_liked,\n num_likes as number_of_likes,\n workspace_id\n\n --The below script allows for pass through columns.\n {% if var('task_pass_through_columns') %}\n ,\n {{ var('task_pass_through_columns') | join (\", \") }}\n\n {% endif %}\n\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_asana__task_tmp", "package": null, "version": null}, {"name": "stg_asana__task_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_task_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt.type_timestamp"], "nodes": ["model.asana_source.stg_asana__task_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__task.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_tmp\"\n\n),\n\nfields as (\n\n select\n \n cast(null as timestamp) as \n \n _fivetran_synced\n \n , \n \n \n assignee_id\n \n as \n \n assignee_id\n \n, \n \n \n completed\n \n as \n \n completed\n \n, \n \n \n completed_at\n \n as \n \n completed_at\n \n, \n \n \n completed_by_id\n \n as \n \n completed_by_id\n \n, \n \n \n created_at\n \n as \n \n created_at\n \n, \n \n \n due_at\n \n as \n \n due_at\n \n, \n \n \n due_on\n \n as \n \n due_on\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n modified_at\n \n as \n \n modified_at\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n notes\n \n as \n \n notes\n \n, \n cast(null as boolean) as \n \n liked\n \n , \n cast(null as integer) as \n \n num_likes\n \n , \n \n \n parent_id\n \n as \n \n parent_id\n \n, \n \n \n start_on\n \n as \n \n start_on\n \n, \n \n \n workspace_id\n \n as \n \n workspace_id\n \n\n\n\n\n --The below script allows for pass through columns.\n \n\n from base\n),\n\nfinal as (\n \n select \n id as task_id,\n assignee_id as assignee_user_id,\n completed as is_completed,\n cast(completed_at as timestamp) as completed_at,\n completed_by_id as completed_by_user_id,\n cast(created_at as timestamp) as created_at,\n cast(coalesce(due_on, due_at) as timestamp) as due_date,\n cast(modified_at as timestamp) as modified_at,\n name as task_name,\n parent_id as parent_task_id,\n cast(start_on as timestamp) as start_date,\n notes as task_description,\n liked as is_liked,\n num_likes as number_of_likes,\n workspace_id\n\n --The below script allows for pass through columns.\n \n\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["task_id"], "time_spine": null}, "model.asana_source.stg_asana__task_section": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_section", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__task_section.sql", "original_file_path": "models/stg_asana__task_section.sql", "unique_id": "model.asana_source.stg_asana__task_section", "fqn": ["asana_source", "stg_asana__task_section"], "alias": "stg_asana__task_section", "checksum": {"name": "sha256", "checksum": "bdc141bc6321c74197ef209c2da62412cda437d42a97beadb8514e50c8ad3780"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "Table of tasks and the section that they live under. Section-less tasks within projects appear here, but project-less tasks do not", "columns": {"task_id": {"name": "task_id", "description": "Foreign key referencing the ID of the TASK", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "section_id": {"name": "section_id", "description": "Foreign key referencing the ID of the SECTION housing the task", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.273862, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_section\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__task_section_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__task_section_tmp')),\n staging_columns=get_task_section_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n section_id,\n task_id\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_asana__task_section_tmp", "package": null, "version": null}, {"name": "stg_asana__task_section_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_task_section_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.asana_source.stg_asana__task_section_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__task_section.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_section_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n section_id\n \n as \n \n section_id\n \n, \n \n \n task_id\n \n as \n \n task_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n section_id,\n task_id\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__section": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__section", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__section.sql", "original_file_path": "models/stg_asana__section.sql", "unique_id": "model.asana_source.stg_asana__section", "fqn": ["asana_source", "stg_asana__section"], "alias": "stg_asana__section", "checksum": {"name": "sha256", "checksum": "b97132a9e958ac8305ad9d713557d280777fd14481061447903bdf00a64b3fc6"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "Table of all sections within projects. If tasks in a project are not in an explicit user-made section, a default section called \"(no section)\" is created here", "columns": {"section_id": {"name": "section_id", "description": "System-generated unique ID of the section", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Timestamp of when the section was created", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "section_name": {"name": "section_name", "description": "User-facing name of the section.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "project_id": {"name": "project_id", "description": "Foreign key referencing the id of the PROJECT the section lives in.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.269736, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__section\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__section_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__section_tmp')),\n staging_columns=get_section_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n id as section_id,\n cast(created_at as {{ dbt.type_timestamp() }}) as created_at,\n name as section_name,\n project_id\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_asana__section_tmp", "package": null, "version": null}, {"name": "stg_asana__section_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_section_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt.type_timestamp"], "nodes": ["model.asana_source.stg_asana__section_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__section.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__section_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n created_at\n \n as \n \n created_at\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n project_id\n \n as \n \n project_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n id as section_id,\n cast(created_at as timestamp) as created_at,\n name as section_name,\n project_id\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["section_id"], "time_spine": null}, "model.asana_source.stg_asana__team": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__team", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__team.sql", "original_file_path": "models/stg_asana__team.sql", "unique_id": "model.asana_source.stg_asana__team", "fqn": ["asana_source", "stg_asana__team"], "alias": "stg_asana__team", "checksum": {"name": "sha256", "checksum": "dde9d6bb65224d552be9a778c7d95157bfa67979162c6db92795aae42e99b0c7"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "Table of the teams within the organization", "columns": {"team_id": {"name": "team_id", "description": "System generated unique ID for each team", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "team_name": {"name": "team_name", "description": "User-facing name of the team", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.274605, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__team\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__team_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__team_tmp')),\n staging_columns=get_team_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n id as team_id,\n name as team_name\n from fields\n where not coalesce(_fivetran_deleted, false)\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_asana__team_tmp", "package": null, "version": null}, {"name": "stg_asana__team_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_team_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.asana_source.stg_asana__team_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__team.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__team_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_deleted\n \n as \n \n _fivetran_deleted\n \n, \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n organization_id\n \n as \n \n organization_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n id as team_id,\n name as team_name\n from fields\n where not coalesce(_fivetran_deleted, false)\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["team_id"], "time_spine": null}, "model.asana_source.stg_asana__task_tag": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_tag", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__task_tag.sql", "original_file_path": "models/stg_asana__task_tag.sql", "unique_id": "model.asana_source.stg_asana__task_tag", "fqn": ["asana_source", "stg_asana__task_tag"], "alias": "stg_asana__task_tag", "checksum": {"name": "sha256", "checksum": "282e8ea50cf804f3f54534eeda79e340117bdad2319e5483fdc8aa0efe2196ed"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "Table of tasks with the tags attached to them. Tasks without tags (and vice versa) do not appear here.", "columns": {"tag_id": {"name": "tag_id", "description": "Foreign key referencing the ID of the TAG attached to the task", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "task_id": {"name": "task_id", "description": "Foreign key referencing the ID of the TASK", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table", "enabled": true}, "created_at": 1739812081.2741818, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_tag\"", "raw_code": "{{ config(enabled=var('asana__using_task_tags', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_asana__task_tag_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__task_tag_tmp')),\n staging_columns=get_task_tag_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n tag_id,\n task_id\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_asana__task_tag_tmp", "package": null, "version": null}, {"name": "stg_asana__task_tag_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_task_tag_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.asana_source.stg_asana__task_tag_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__task_tag.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_tag_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n tag_id\n \n as \n \n tag_id\n \n, \n \n \n task_id\n \n as \n \n task_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n tag_id,\n task_id\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__story": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__story", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__story.sql", "original_file_path": "models/stg_asana__story.sql", "unique_id": "model.asana_source.stg_asana__story", "fqn": ["asana_source", "stg_asana__story"], "alias": "stg_asana__story", "checksum": {"name": "sha256", "checksum": "a30c17a85d414d4034add3e83602a9d83f6d1e84443e76956d3e85f26480dab2"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "Table containing all stories -- stories are actions taken on tasks", "columns": {"story_id": {"name": "story_id", "description": "System generated unique ID of the story/action taken on a task.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Timestamp of when the story occurred.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_by_user_id": {"name": "created_by_user_id", "description": "Foreign key referencing the USER who took the action (sometimes null)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "target_task_id": {"name": "target_task_id", "description": "Foreign key referencing the TASK that the action was taken on.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "story_content": {"name": "story_content", "description": "Free-form text that is either the content of a comment (event_type=comment) or the description of an action (event_type=system)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "event_type": {"name": "event_type", "description": "The origin type of the story - a comment or change to the backend (ie altering a task somehow)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.270699, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__story\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__story_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__story_tmp')),\n staging_columns=get_story_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n id as story_id,\n cast(created_at as {{ dbt.type_timestamp() }}) as created_at,\n created_by_id as created_by_user_id,\n target_id as target_task_id,\n text as story_content,\n type as event_type\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_asana__story_tmp", "package": null, "version": null}, {"name": "stg_asana__story_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_story_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt.type_timestamp"], "nodes": ["model.asana_source.stg_asana__story_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__story.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__story_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n created_at\n \n as \n \n created_at\n \n, \n \n \n created_by_id\n \n as \n \n created_by_id\n \n, \n \n \n hearted\n \n as \n \n hearted\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n num_hearts\n \n as \n \n num_hearts\n \n, \n \n \n source\n \n as \n \n source\n \n, \n \n \n target_id\n \n as \n \n target_id\n \n, \n \n \n text\n \n as \n \n text\n \n, \n \n \n type\n \n as \n \n type\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n id as story_id,\n cast(created_at as timestamp) as created_at,\n created_by_id as created_by_user_id,\n target_id as target_task_id,\n text as story_content,\n type as event_type\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["story_id"], "time_spine": null}, "model.asana_source.stg_asana__tag": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__tag", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__tag.sql", "original_file_path": "models/stg_asana__tag.sql", "unique_id": "model.asana_source.stg_asana__tag", "fqn": ["asana_source", "stg_asana__tag"], "alias": "stg_asana__tag", "checksum": {"name": "sha256", "checksum": "4c5131fa9d4c32d351dd0c3d828b797713d602d8f57f16a1cb13ce77a167e5b9"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "Table of the custom tags made in the organization", "columns": {"tag_id": {"name": "tag_id", "description": "System generated unique ID of the tag", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "tag_name": {"name": "tag_name", "description": "User-facing name of the tag.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Timestamp of when the tag was created", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table", "enabled": true}, "created_at": 1739812081.271224, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__tag\"", "raw_code": "{{ config(enabled=var('asana__using_tags', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_asana__tag_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__tag_tmp')),\n staging_columns=get_tag_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n id as tag_id,\n name as tag_name,\n cast(created_at as {{ dbt.type_timestamp() }}) as created_at\n from fields\n where not _fivetran_deleted\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_asana__tag_tmp", "package": null, "version": null}, {"name": "stg_asana__tag_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_tag_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt.type_timestamp"], "nodes": ["model.asana_source.stg_asana__tag_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__tag.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__tag_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_deleted\n \n as \n \n _fivetran_deleted\n \n, \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n color\n \n as \n \n color\n \n, \n \n \n created_at\n \n as \n \n created_at\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n message\n \n as \n \n message\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n notes\n \n as \n \n notes\n \n, \n \n \n workspace_id\n \n as \n \n workspace_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n id as tag_id,\n name as tag_name,\n cast(created_at as timestamp) as created_at\n from fields\n where not _fivetran_deleted\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["tag_id"], "time_spine": null}, "model.asana_source.stg_asana__project_task": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__project_task", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__project_task.sql", "original_file_path": "models/stg_asana__project_task.sql", "unique_id": "model.asana_source.stg_asana__project_task", "fqn": ["asana_source", "stg_asana__project_task"], "alias": "stg_asana__project_task", "checksum": {"name": "sha256", "checksum": "9ab5f25f40a509ee9aaccaa1b856aadbf87de428c206fd26176a044a27af7c98"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "Table of tasks and the project(s) they each belong to. If a project doesn't have a task, it won't be in here (and vice versa)", "columns": {"project_id": {"name": "project_id", "description": "Foreign key referencing the ID of the PROJECT", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "task_id": {"name": "task_id", "description": "Foreign key referencing the ID of the TASK", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.2690308, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__project_task\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__project_task_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__project_task_tmp')),\n staging_columns=get_project_task_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n project_id,\n task_id\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_asana__project_task_tmp", "package": null, "version": null}, {"name": "stg_asana__project_task_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_project_task_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.asana_source.stg_asana__project_task_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__project_task.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__project_task_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n project_id\n \n as \n \n project_id\n \n, \n \n \n task_id\n \n as \n \n task_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n project_id,\n task_id\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__project": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__project", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__project.sql", "original_file_path": "models/stg_asana__project.sql", "unique_id": "model.asana_source.stg_asana__project", "fqn": ["asana_source", "stg_asana__project"], "alias": "stg_asana__project", "checksum": {"name": "sha256", "checksum": "ce66128855523aa68281b5a6960df053faa6f0e1dd65e609d148450608b39d3f"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "Table containing all projects", "columns": {"project_id": {"name": "project_id", "description": "System-generated unique ID of the project", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "is_archived": {"name": "is_archived", "description": "Boolean representing if the project has been archived in the UI", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Timestamp of when the project was created", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "current_status": {"name": "current_status", "description": "The most recent progress status update for the project (free-form string)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "due_date": {"name": "due_date", "description": "The date the project is due on, if given", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "modified_at": {"name": "modified_at", "description": "Timestamp of when the project was last modified (doesn't include comments or tasks)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "project_name": {"name": "project_name", "description": "The user-facing name of the project", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "owner_user_id": {"name": "owner_user_id", "description": "Foreign key referencing the USER who owns the project.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "is_public": {"name": "is_public", "description": "Boolean that is true if the project is public to all users in the organization", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "team_id": {"name": "team_id", "description": "Foreign key referencing the TEAM that the project is shared with.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "workspace_id": {"name": "workspace_id", "description": "The ID of the organization's entire Asana workspace. Not relevant unless you're looking at multiple orgs", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "notes": {"name": "notes", "description": "Free-form textual notes associated with the project.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.268416, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__project\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__project_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__project_tmp')),\n staging_columns=get_project_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n id as project_id,\n archived as is_archived,\n cast(created_at as {{ dbt.type_timestamp() }}) as created_at,\n current_status,\n cast(due_date as {{ dbt.type_timestamp() }}) as due_date,\n cast(modified_at as {{ dbt.type_timestamp() }}) as modified_at,\n name as project_name,\n owner_id as owner_user_id,\n public as is_public,\n team_id,\n workspace_id,\n notes\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_asana__project_tmp", "package": null, "version": null}, {"name": "stg_asana__project_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_project_columns", "macro.fivetran_utils.fill_staging_columns", "macro.dbt.type_timestamp"], "nodes": ["model.asana_source.stg_asana__project_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__project.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__project_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_deleted\n \n as \n \n _fivetran_deleted\n \n, \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n archived\n \n as \n \n archived\n \n, \n \n \n color\n \n as \n \n color\n \n, \n \n \n created_at\n \n as \n \n created_at\n \n, \n \n \n current_status\n \n as \n \n current_status\n \n, \n \n \n due_date\n \n as \n \n due_date\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n modified_at\n \n as \n \n modified_at\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n notes\n \n as \n \n notes\n \n, \n \n \n owner_id\n \n as \n \n owner_id\n \n, \n \n \n public\n \n as \n \n public\n \n, \n \n \n team_id\n \n as \n \n team_id\n \n, \n \n \n workspace_id\n \n as \n \n workspace_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n id as project_id,\n archived as is_archived,\n cast(created_at as timestamp) as created_at,\n current_status,\n cast(due_date as timestamp) as due_date,\n cast(modified_at as timestamp) as modified_at,\n name as project_name,\n owner_id as owner_user_id,\n public as is_public,\n team_id,\n workspace_id,\n notes\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["project_id"], "time_spine": null}, "model.asana_source.stg_asana__task_follower": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_follower", "resource_type": "model", "package_name": "asana_source", "path": "stg_asana__task_follower.sql", "original_file_path": "models/stg_asana__task_follower.sql", "unique_id": "model.asana_source.stg_asana__task_follower", "fqn": ["asana_source", "stg_asana__task_follower"], "alias": "stg_asana__task_follower", "checksum": {"name": "sha256", "checksum": "1b6ddfb7ad103411c75db597e32c49161aee243c57f32f7ce691da53c50f09bc"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "Table of tasks with the users that are following them. Tasks without users do not appear here.", "columns": {"task_id": {"name": "task_id", "description": "Foreign key referencing the ID of the TASK being followed.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "user_id": {"name": "user_id", "description": "Foreign key referencing the ID of the USER following the task.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "asana_source://models/stg_asana.yml", "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.273563, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_follower\"", "raw_code": "with base as (\n\n select * \n from {{ ref('stg_asana__task_follower_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_asana__task_follower_tmp')),\n staging_columns=get_task_follower_columns()\n )\n }}\n \n from base\n),\n\nfinal as (\n \n select \n task_id,\n user_id\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_asana__task_follower_tmp", "package": null, "version": null}, {"name": "stg_asana__task_follower_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.asana_source.get_task_follower_columns", "macro.fivetran_utils.fill_staging_columns"], "nodes": ["model.asana_source.stg_asana__task_follower_tmp"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana__task_follower.sql", "compiled": true, "compiled_code": "with base as (\n\n select * \n from \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_follower_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n task_id\n \n as \n \n task_id\n \n, \n \n \n user_id\n \n as \n \n user_id\n \n\n\n\n \n from base\n),\n\nfinal as (\n \n select \n task_id,\n user_id\n from fields\n)\n\nselect * \nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__story_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__story_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__story_tmp.sql", "original_file_path": "models/tmp/stg_asana__story_tmp.sql", "unique_id": "model.asana_source.stg_asana__story_tmp", "fqn": ["asana_source", "tmp", "stg_asana__story_tmp"], "alias": "stg_asana__story_tmp", "checksum": {"name": "sha256", "checksum": "b20a040c7bbae8c76eccf7561cad0a7c6b12f148a9622bf58fd0ca6f4aad76bc"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.182644, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__story_tmp\"", "raw_code": "select * \nfrom {{ var('story') }}", "language": "sql", "refs": [], "sources": [["asana", "story"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.story"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__story_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_3\".\"story_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__team_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__team_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__team_tmp.sql", "original_file_path": "models/tmp/stg_asana__team_tmp.sql", "unique_id": "model.asana_source.stg_asana__team_tmp", "fqn": ["asana_source", "tmp", "stg_asana__team_tmp"], "alias": "stg_asana__team_tmp", "checksum": {"name": "sha256", "checksum": "91f13626c653a81da50b4f04c742a71a313db299512eaa8ddcd8a055c25ae81a"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.18927, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__team_tmp\"", "raw_code": "select * \nfrom {{ var('team') }}", "language": "sql", "refs": [], "sources": [["asana", "team"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.team"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__team_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_3\".\"team_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__task_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__task_tmp.sql", "original_file_path": "models/tmp/stg_asana__task_tmp.sql", "unique_id": "model.asana_source.stg_asana__task_tmp", "fqn": ["asana_source", "tmp", "stg_asana__task_tmp"], "alias": "stg_asana__task_tmp", "checksum": {"name": "sha256", "checksum": "0907d0a0a829e51d76602b8c58a826ff5acb198d65df9258c3ce7534ca6c1455"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.192885, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_tmp\"", "raw_code": "select * \nfrom {{ var('task') }}", "language": "sql", "refs": [], "sources": [["asana", "task"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.task"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__task_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_3\".\"task_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__task_follower_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_follower_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__task_follower_tmp.sql", "original_file_path": "models/tmp/stg_asana__task_follower_tmp.sql", "unique_id": "model.asana_source.stg_asana__task_follower_tmp", "fqn": ["asana_source", "tmp", "stg_asana__task_follower_tmp"], "alias": "stg_asana__task_follower_tmp", "checksum": {"name": "sha256", "checksum": "1ff9b1b41b1e26badf33ef2b8cbd404c52a75a5514c9f6e09ad6151c4525389f"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.1961842, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_follower_tmp\"", "raw_code": "select * \nfrom {{ var('task_follower') }}", "language": "sql", "refs": [], "sources": [["asana", "task_follower"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.task_follower"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__task_follower_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_3\".\"task_follower_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__tag_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__tag_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__tag_tmp.sql", "original_file_path": "models/tmp/stg_asana__tag_tmp.sql", "unique_id": "model.asana_source.stg_asana__tag_tmp", "fqn": ["asana_source", "tmp", "stg_asana__tag_tmp"], "alias": "stg_asana__tag_tmp", "checksum": {"name": "sha256", "checksum": "e321b494b701426c5518a5f82198968b056008ba4a33fb5b8603d4447e0b8840"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table", "enabled": true}, "created_at": 1739812081.199237, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__tag_tmp\"", "raw_code": "{{ config(enabled=var('asana__using_tags', True)) }}\n\nselect * \nfrom {{ var('tag') }}", "language": "sql", "refs": [], "sources": [["asana", "tag"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.tag"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__tag_tmp.sql", "compiled": true, "compiled_code": "\n\nselect * \nfrom \"postgres\".\"asana_source_integrations_tests_3\".\"tag_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__task_section_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_section_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__task_section_tmp.sql", "original_file_path": "models/tmp/stg_asana__task_section_tmp.sql", "unique_id": "model.asana_source.stg_asana__task_section_tmp", "fqn": ["asana_source", "tmp", "stg_asana__task_section_tmp"], "alias": "stg_asana__task_section_tmp", "checksum": {"name": "sha256", "checksum": "aa4c6a9cdea3353eef766229453f19e089a334d9ccbc9ad60c8494067dd284fe"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.202494, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_section_tmp\"", "raw_code": "select * \nfrom {{ var('task_section') }}", "language": "sql", "refs": [], "sources": [["asana", "task_section"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.task_section"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__task_section_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_3\".\"task_section_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__task_tag_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__task_tag_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__task_tag_tmp.sql", "original_file_path": "models/tmp/stg_asana__task_tag_tmp.sql", "unique_id": "model.asana_source.stg_asana__task_tag_tmp", "fqn": ["asana_source", "tmp", "stg_asana__task_tag_tmp"], "alias": "stg_asana__task_tag_tmp", "checksum": {"name": "sha256", "checksum": "e9c17436fe0b64f389d9fc848bdf030aff671f1d589a438608f32210efa81471"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table", "enabled": true}, "created_at": 1739812081.205525, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_tag_tmp\"", "raw_code": "{{ config(enabled=var('asana__using_task_tags', True)) }}\n\nselect * \nfrom {{ var('task_tag') }}", "language": "sql", "refs": [], "sources": [["asana", "task_tag"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.task_tag"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__task_tag_tmp.sql", "compiled": true, "compiled_code": "\n\nselect * \nfrom \"postgres\".\"asana_source_integrations_tests_3\".\"task_tag_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__user_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__user_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__user_tmp.sql", "original_file_path": "models/tmp/stg_asana__user_tmp.sql", "unique_id": "model.asana_source.stg_asana__user_tmp", "fqn": ["asana_source", "tmp", "stg_asana__user_tmp"], "alias": "stg_asana__user_tmp", "checksum": {"name": "sha256", "checksum": "c6665b2e96c3536ab07cdc0fe31225a7be4766df0c7c353e3ade197bc8498279"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.2094378, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__user_tmp\"", "raw_code": "select * \nfrom {{ var('user') }}", "language": "sql", "refs": [], "sources": [["asana", "user"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.user"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__user_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_3\".\"user_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__section_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__section_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__section_tmp.sql", "original_file_path": "models/tmp/stg_asana__section_tmp.sql", "unique_id": "model.asana_source.stg_asana__section_tmp", "fqn": ["asana_source", "tmp", "stg_asana__section_tmp"], "alias": "stg_asana__section_tmp", "checksum": {"name": "sha256", "checksum": "abcaa0e14c3e11d542864fd4bbed19f130834a4444ef8f9eff3bbb27ba02ac4b"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.212407, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__section_tmp\"", "raw_code": "select * \nfrom {{ var('section') }}", "language": "sql", "refs": [], "sources": [["asana", "section"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.section"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__section_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_3\".\"section_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__project_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__project_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__project_tmp.sql", "original_file_path": "models/tmp/stg_asana__project_tmp.sql", "unique_id": "model.asana_source.stg_asana__project_tmp", "fqn": ["asana_source", "tmp", "stg_asana__project_tmp"], "alias": "stg_asana__project_tmp", "checksum": {"name": "sha256", "checksum": "776cf64136ff22eaa9fddcb5b4aadd58e5b295800ffd8b3a2c3871ed22531599"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.2157052, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__project_tmp\"", "raw_code": "select * \nfrom {{ var('project') }}", "language": "sql", "refs": [], "sources": [["asana", "project"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.project"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__project_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_3\".\"project_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.asana_source.stg_asana__project_task_tmp": {"database": "postgres", "schema": "asana_source_integrations_tests_3_stg_asana", "name": "stg_asana__project_task_tmp", "resource_type": "model", "package_name": "asana_source", "path": "tmp/stg_asana__project_task_tmp.sql", "original_file_path": "models/tmp/stg_asana__project_task_tmp.sql", "unique_id": "model.asana_source.stg_asana__project_task_tmp", "fqn": ["asana_source", "tmp", "stg_asana__project_task_tmp"], "alias": "stg_asana__project_task_tmp", "checksum": {"name": "sha256", "checksum": "34c429cc5107dced42416b6ea82824cb6e129adab744dea06e193570af1fd20d"}, "config": {"enabled": true, "alias": null, "schema": "stg_asana", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "stg_asana", "materialized": "table"}, "created_at": 1739812081.21875, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__project_task_tmp\"", "raw_code": "select * \nfrom {{ var('project_task') }}", "language": "sql", "refs": [], "sources": [["asana", "project_task"]], "metrics": [], "depends_on": {"macros": [], "nodes": ["source.asana_source.asana.project_task"]}, "compiled_path": "target/compiled/asana_source/models/tmp/stg_asana__project_task_tmp.sql", "compiled": true, "compiled_code": "select * \nfrom \"postgres\".\"asana_source_integrations_tests_3\".\"project_task_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "test.asana_source.unique_stg_asana__project_project_id.67bfab1228": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "unique_stg_asana__project_project_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__project_project_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__project_project_id.67bfab1228", "fqn": ["asana_source", "unique_stg_asana__project_project_id"], "alias": "unique_stg_asana__project_project_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.315774, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__project", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__project"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__project_project_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n project_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__project\"\nwhere project_id is not null\ngroup by project_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "project_id", "file_key_name": "models.stg_asana__project", "attached_node": "model.asana_source.stg_asana__project", "test_metadata": {"name": "unique", "kwargs": {"column_name": "project_id", "model": "{{ get_where_subquery(ref('stg_asana__project')) }}"}, "namespace": null}}, "test.asana_source.not_null_stg_asana__project_project_id.d27dae84fa": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "not_null_stg_asana__project_project_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__project_project_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__project_project_id.d27dae84fa", "fqn": ["asana_source", "not_null_stg_asana__project_project_id"], "alias": "not_null_stg_asana__project_project_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.3169339, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__project", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__project"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__project_project_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect project_id\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__project\"\nwhere project_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "project_id", "file_key_name": "models.stg_asana__project", "attached_node": "model.asana_source.stg_asana__project", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "project_id", "model": "{{ get_where_subquery(ref('stg_asana__project')) }}"}, "namespace": null}}, "test.asana_source.not_null_stg_asana__project_task_project_id.e2450d16b1": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "not_null_stg_asana__project_task_project_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__project_task_project_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__project_task_project_id.e2450d16b1", "fqn": ["asana_source", "not_null_stg_asana__project_task_project_id"], "alias": "not_null_stg_asana__project_task_project_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.3178391, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__project_task", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__project_task"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__project_task_project_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect project_id\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__project_task\"\nwhere project_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "project_id", "file_key_name": "models.stg_asana__project_task", "attached_node": "model.asana_source.stg_asana__project_task", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "project_id", "model": "{{ get_where_subquery(ref('stg_asana__project_task')) }}"}, "namespace": null}}, "test.asana_source.not_null_stg_asana__project_task_task_id.9479566014": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "not_null_stg_asana__project_task_task_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__project_task_task_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__project_task_task_id.9479566014", "fqn": ["asana_source", "not_null_stg_asana__project_task_task_id"], "alias": "not_null_stg_asana__project_task_task_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.31882, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__project_task", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__project_task"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__project_task_task_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect task_id\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__project_task\"\nwhere task_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "task_id", "file_key_name": "models.stg_asana__project_task", "attached_node": "model.asana_source.stg_asana__project_task", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "task_id", "model": "{{ get_where_subquery(ref('stg_asana__project_task')) }}"}, "namespace": null}}, "test.asana_source.unique_stg_asana__section_section_id.0495dd3d2f": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "unique_stg_asana__section_section_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__section_section_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__section_section_id.0495dd3d2f", "fqn": ["asana_source", "unique_stg_asana__section_section_id"], "alias": "unique_stg_asana__section_section_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.319689, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__section", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__section"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__section_section_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n section_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__section\"\nwhere section_id is not null\ngroup by section_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "section_id", "file_key_name": "models.stg_asana__section", "attached_node": "model.asana_source.stg_asana__section", "test_metadata": {"name": "unique", "kwargs": {"column_name": "section_id", "model": "{{ get_where_subquery(ref('stg_asana__section')) }}"}, "namespace": null}}, "test.asana_source.not_null_stg_asana__section_section_id.389ebce958": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "not_null_stg_asana__section_section_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__section_section_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__section_section_id.389ebce958", "fqn": ["asana_source", "not_null_stg_asana__section_section_id"], "alias": "not_null_stg_asana__section_section_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.320532, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__section", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__section"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__section_section_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect section_id\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__section\"\nwhere section_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "section_id", "file_key_name": "models.stg_asana__section", "attached_node": "model.asana_source.stg_asana__section", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "section_id", "model": "{{ get_where_subquery(ref('stg_asana__section')) }}"}, "namespace": null}}, "test.asana_source.unique_stg_asana__story_story_id.414f25bb84": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "unique_stg_asana__story_story_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__story_story_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__story_story_id.414f25bb84", "fqn": ["asana_source", "unique_stg_asana__story_story_id"], "alias": "unique_stg_asana__story_story_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.321373, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__story", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__story"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__story_story_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n story_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__story\"\nwhere story_id is not null\ngroup by story_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "story_id", "file_key_name": "models.stg_asana__story", "attached_node": "model.asana_source.stg_asana__story", "test_metadata": {"name": "unique", "kwargs": {"column_name": "story_id", "model": "{{ get_where_subquery(ref('stg_asana__story')) }}"}, "namespace": null}}, "test.asana_source.not_null_stg_asana__story_story_id.ca847d0848": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "not_null_stg_asana__story_story_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__story_story_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__story_story_id.ca847d0848", "fqn": ["asana_source", "not_null_stg_asana__story_story_id"], "alias": "not_null_stg_asana__story_story_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.32227, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__story", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__story"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__story_story_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect story_id\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__story\"\nwhere story_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "story_id", "file_key_name": "models.stg_asana__story", "attached_node": "model.asana_source.stg_asana__story", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "story_id", "model": "{{ get_where_subquery(ref('stg_asana__story')) }}"}, "namespace": null}}, "test.asana_source.not_null_stg_asana__story_target_task_id.3f971de06e": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "not_null_stg_asana__story_target_task_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__story_target_task_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__story_target_task_id.3f971de06e", "fqn": ["asana_source", "not_null_stg_asana__story_target_task_id"], "alias": "not_null_stg_asana__story_target_task_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.323186, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__story", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__story"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__story_target_task_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect target_task_id\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__story\"\nwhere target_task_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "target_task_id", "file_key_name": "models.stg_asana__story", "attached_node": "model.asana_source.stg_asana__story", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "target_task_id", "model": "{{ get_where_subquery(ref('stg_asana__story')) }}"}, "namespace": null}}, "test.asana_source.unique_stg_asana__tag_tag_id.fd78b190c7": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "unique_stg_asana__tag_tag_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__tag_tag_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__tag_tag_id.fd78b190c7", "fqn": ["asana_source", "unique_stg_asana__tag_tag_id"], "alias": "unique_stg_asana__tag_tag_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.3241868, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__tag", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__tag"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__tag_tag_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n tag_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__tag\"\nwhere tag_id is not null\ngroup by tag_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "tag_id", "file_key_name": "models.stg_asana__tag", "attached_node": "model.asana_source.stg_asana__tag", "test_metadata": {"name": "unique", "kwargs": {"column_name": "tag_id", "model": "{{ get_where_subquery(ref('stg_asana__tag')) }}"}, "namespace": null}}, "test.asana_source.unique_stg_asana__task_task_id.a5271275a5": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "unique_stg_asana__task_task_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__task_task_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__task_task_id.a5271275a5", "fqn": ["asana_source", "unique_stg_asana__task_task_id"], "alias": "unique_stg_asana__task_task_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.325214, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__task", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__task_task_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n task_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task\"\nwhere task_id is not null\ngroup by task_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "task_id", "file_key_name": "models.stg_asana__task", "attached_node": "model.asana_source.stg_asana__task", "test_metadata": {"name": "unique", "kwargs": {"column_name": "task_id", "model": "{{ get_where_subquery(ref('stg_asana__task')) }}"}, "namespace": null}}, "test.asana_source.not_null_stg_asana__task_task_id.924cc69000": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "not_null_stg_asana__task_task_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__task_task_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__task_task_id.924cc69000", "fqn": ["asana_source", "not_null_stg_asana__task_task_id"], "alias": "not_null_stg_asana__task_task_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.326112, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__task", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__task_task_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect task_id\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task\"\nwhere task_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "task_id", "file_key_name": "models.stg_asana__task", "attached_node": "model.asana_source.stg_asana__task", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "task_id", "model": "{{ get_where_subquery(ref('stg_asana__task')) }}"}, "namespace": null}}, "test.asana_source.not_null_stg_asana__task_follower_task_id.5af35f322c": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "not_null_stg_asana__task_follower_task_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__task_follower_task_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__task_follower_task_id.5af35f322c", "fqn": ["asana_source", "not_null_stg_asana__task_follower_task_id"], "alias": "not_null_stg_asana__task_follower_task_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.327081, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__task_follower", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task_follower"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__task_follower_task_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect task_id\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_follower\"\nwhere task_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "task_id", "file_key_name": "models.stg_asana__task_follower", "attached_node": "model.asana_source.stg_asana__task_follower", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "task_id", "model": "{{ get_where_subquery(ref('stg_asana__task_follower')) }}"}, "namespace": null}}, "test.asana_source.not_null_stg_asana__task_follower_user_id.e0aea0b15e": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "not_null_stg_asana__task_follower_user_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__task_follower_user_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__task_follower_user_id.e0aea0b15e", "fqn": ["asana_source", "not_null_stg_asana__task_follower_user_id"], "alias": "not_null_stg_asana__task_follower_user_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.327955, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__task_follower", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task_follower"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__task_follower_user_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect user_id\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_follower\"\nwhere user_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "user_id", "file_key_name": "models.stg_asana__task_follower", "attached_node": "model.asana_source.stg_asana__task_follower", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "user_id", "model": "{{ get_where_subquery(ref('stg_asana__task_follower')) }}"}, "namespace": null}}, "test.asana_source.not_null_stg_asana__task_section_task_id.ab81301de8": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "not_null_stg_asana__task_section_task_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__task_section_task_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__task_section_task_id.ab81301de8", "fqn": ["asana_source", "not_null_stg_asana__task_section_task_id"], "alias": "not_null_stg_asana__task_section_task_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.328811, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__task_section", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task_section"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__task_section_task_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect task_id\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_section\"\nwhere task_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "task_id", "file_key_name": "models.stg_asana__task_section", "attached_node": "model.asana_source.stg_asana__task_section", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "task_id", "model": "{{ get_where_subquery(ref('stg_asana__task_section')) }}"}, "namespace": null}}, "test.asana_source.not_null_stg_asana__task_section_section_id.b0977a4cfe": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "not_null_stg_asana__task_section_section_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__task_section_section_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__task_section_section_id.b0977a4cfe", "fqn": ["asana_source", "not_null_stg_asana__task_section_section_id"], "alias": "not_null_stg_asana__task_section_section_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.329655, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__task_section", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__task_section"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__task_section_section_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect section_id\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__task_section\"\nwhere section_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "section_id", "file_key_name": "models.stg_asana__task_section", "attached_node": "model.asana_source.stg_asana__task_section", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "section_id", "model": "{{ get_where_subquery(ref('stg_asana__task_section')) }}"}, "namespace": null}}, "test.asana_source.unique_stg_asana__team_team_id.111fe15873": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "unique_stg_asana__team_team_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__team_team_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__team_team_id.111fe15873", "fqn": ["asana_source", "unique_stg_asana__team_team_id"], "alias": "unique_stg_asana__team_team_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.330513, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__team", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__team"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__team_team_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n team_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__team\"\nwhere team_id is not null\ngroup by team_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "team_id", "file_key_name": "models.stg_asana__team", "attached_node": "model.asana_source.stg_asana__team", "test_metadata": {"name": "unique", "kwargs": {"column_name": "team_id", "model": "{{ get_where_subquery(ref('stg_asana__team')) }}"}, "namespace": null}}, "test.asana_source.not_null_stg_asana__team_team_id.e12b563474": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "not_null_stg_asana__team_team_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__team_team_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__team_team_id.e12b563474", "fqn": ["asana_source", "not_null_stg_asana__team_team_id"], "alias": "not_null_stg_asana__team_team_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.3314161, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__team", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__team"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__team_team_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect team_id\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__team\"\nwhere team_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "team_id", "file_key_name": "models.stg_asana__team", "attached_node": "model.asana_source.stg_asana__team", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "team_id", "model": "{{ get_where_subquery(ref('stg_asana__team')) }}"}, "namespace": null}}, "test.asana_source.unique_stg_asana__user_user_id.73808d6267": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "unique_stg_asana__user_user_id", "resource_type": "test", "package_name": "asana_source", "path": "unique_stg_asana__user_user_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.unique_stg_asana__user_user_id.73808d6267", "fqn": ["asana_source", "unique_stg_asana__user_user_id"], "alias": "unique_stg_asana__user_user_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.332275, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__user", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__user"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/unique_stg_asana__user_user_id.sql", "compiled": true, "compiled_code": "\n \n \n\nselect\n user_id as unique_field,\n count(*) as n_records\n\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__user\"\nwhere user_id is not null\ngroup by user_id\nhaving count(*) > 1\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "user_id", "file_key_name": "models.stg_asana__user", "attached_node": "model.asana_source.stg_asana__user", "test_metadata": {"name": "unique", "kwargs": {"column_name": "user_id", "model": "{{ get_where_subquery(ref('stg_asana__user')) }}"}, "namespace": null}}, "test.asana_source.not_null_stg_asana__user_user_id.4e900e8ec6": {"database": "postgres", "schema": "asana_source_integrations_tests_3_dbt_test__audit", "name": "not_null_stg_asana__user_user_id", "resource_type": "test", "package_name": "asana_source", "path": "not_null_stg_asana__user_user_id.sql", "original_file_path": "models/stg_asana.yml", "unique_id": "test.asana_source.not_null_stg_asana__user_user_id.4e900e8ec6", "fqn": ["asana_source", "not_null_stg_asana__user_user_id"], "alias": "not_null_stg_asana__user_user_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1739812081.3332832, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_asana__user", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.asana_source.stg_asana__user"]}, "compiled_path": "target/compiled/asana_source/models/stg_asana.yml/not_null_stg_asana__user_user_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect user_id\nfrom \"postgres\".\"asana_source_integrations_tests_3_stg_asana\".\"stg_asana__user\"\nwhere user_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "user_id", "file_key_name": "models.stg_asana__user", "attached_node": "model.asana_source.stg_asana__user", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "user_id", "model": "{{ get_where_subquery(ref('stg_asana__user')) }}"}, "namespace": null}}}, "sources": {"source.asana_source.asana.user": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "user", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.user", "fqn": ["asana_source", "asana", "user"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "user_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of all accounts in the organization", "columns": {"id": {"name": "id", "description": "System generated unique ID for a user", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "email": {"name": "email", "description": "Email associated with the user", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "name": {"name": "name", "description": "Given name for the user as it appears in the UI", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"user_data\"", "created_at": 1739812081.38752, "unrendered_database": "{% if target.type != 'spark' %}{{ var('asana_database', target.database)}}{% endif %}", "unrendered_schema": "{{var ('asana_schema', 'asana')}}"}, "source.asana_source.asana.task": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "task", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.task", "fqn": ["asana_source", "asana", "task"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "task_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 72, "period": "hour"}, "error_after": {"count": 96, "period": "hour"}, "filter": null}, "external": null, "description": "Table containing all created tasks", "columns": {"id": {"name": "id", "description": "System generated unique identifier for the task", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "assignee_id": {"name": "assignee_id", "description": "Foreign key referencing the USER assigned to this task (note that a task may not have an assignee)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "completed": {"name": "completed", "description": "Boolean that's true if the task is *currently* marked completed. Note that a task can be unmarked complete", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "completed_at": {"name": "completed_at", "description": "Timestamp of when the task was completed, if still currently completed.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "completed_by_id": {"name": "completed_by_id", "description": "Foreign key that references the USER who completed the task, if currently completed.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Timestamp of when the task was first made", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "due_on": {"name": "due_on", "description": "The date on which the task is due. Note that not tasks may not have a due date", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "due_at": {"name": "due_at", "description": "The date and time at which the task is due, only if a specific time is given.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "modified_at": {"name": "modified_at", "description": "The last time the task was updated. Does not include comments nor changes in associations (ie their projects)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "name": {"name": "name", "description": "The title of the task", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "notes": {"name": "notes", "description": "Free-form textual description of the task (as seen in the UI).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "liked": {"name": "liked", "description": "A boolean that's true if the task has been liked.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "num_likes": {"name": "num_likes", "description": "An integer indicating the number of likes on a task.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "parent_id": {"name": "parent_id", "description": "The ID of the parent of the task, if it is a subtask. Self-refers to TASK", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "start_on": {"name": "start_on", "description": "The start date of the task, if given with the due date", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "workspace_id": {"name": "workspace_id", "description": "The id of an organization's workspace in asana. Not necessary unless you have access to multiple organization's asanas.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"task_data\"", "created_at": 1739812081.388235, "unrendered_database": "{% if target.type != 'spark' %}{{ var('asana_database', target.database)}}{% endif %}", "unrendered_schema": "{{var ('asana_schema', 'asana')}}"}, "source.asana_source.asana.project": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "project", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.project", "fqn": ["asana_source", "asana", "project"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "project_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table containing all projects", "columns": {"id": {"name": "id", "description": "System generated unique ID of the project.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "archived": {"name": "archived", "description": "Boolean representing whether the project has been archived (removed from asana UI).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "color": {"name": "color", "description": "Color of the project as seen in the UI.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Timestamp of when the story was made/the action was logged.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "current_status": {"name": "current_status", "description": "The most recent progress status update for the project. This is sent to all project followers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "due_date": {"name": "due_date", "description": "The date the project is due.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "modified_at": {"name": "modified_at", "description": "The last time the project was updated. Does not include comments nor changes in associations (ie new tasks).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "name": {"name": "name", "description": "The given name of the project.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "notes": {"name": "notes", "description": "Free-form textual notes associated with the project.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "owner_id": {"name": "owner_id", "description": "Foreign key referencing the USER who owns the project.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "public": {"name": "public", "description": "Boolean that is true if the project is public to the whole organization, false if not.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "team_id": {"name": "team_id", "description": "Foreign key referencing the TEAM that the project is shared with.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "workspace_id": {"name": "workspace_id", "description": "The id of an organization's workspace in asana. Not necessary unless you have access to multiple asana workspaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"project_data\"", "created_at": 1739812081.388347, "unrendered_database": "{% if target.type != 'spark' %}{{ var('asana_database', target.database)}}{% endif %}", "unrendered_schema": "{{var ('asana_schema', 'asana')}}"}, "source.asana_source.asana.story": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "story", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.story", "fqn": ["asana_source", "asana", "story"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "story_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 72, "period": "hour"}, "error_after": {"count": 96, "period": "hour"}, "filter": null}, "external": null, "description": "Table containing all stories -- stories are actions taken on tasks", "columns": {"id": {"name": "id", "description": "System generated unique ID of the story/action taken", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Timestamp of when the story was made/the action was logged", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_by_id": {"name": "created_by_id", "description": "Foreign key referencing the USER who created the story/took the action on the task (sometimes null)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "target_id": {"name": "target_id", "description": "Foreign key referencing the TASK that the story is about.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "text": {"name": "text", "description": "Free-form text describing the action that was taken (if type = system), or the content of a comment (if type = comment)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "type": {"name": "type", "description": "The origin type of the story - a comment or change to the backend/altering a task", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "source": {"name": "source", "description": "Where the story occurred (web, mobile, email, or api)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"story_data\"", "created_at": 1739812081.388449, "unrendered_database": "{% if target.type != 'spark' %}{{ var('asana_database', target.database)}}{% endif %}", "unrendered_schema": "{{var ('asana_schema', 'asana')}}"}, "source.asana_source.asana.team": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "team", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.team", "fqn": ["asana_source", "asana", "team"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "team_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of the teams within the organization", "columns": {"id": {"name": "id", "description": "System generated unique ID for each team", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "name": {"name": "name", "description": "Provided name for each team. There can be duplicates", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "organization_id": {"name": "organization_id", "description": "Equivalent to the workspace_id, as organizations are a kind of workspace. Probably not relevant unless working with multiple orgs.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"team_data\"", "created_at": 1739812081.388535, "unrendered_database": "{% if target.type != 'spark' %}{{ var('asana_database', target.database)}}{% endif %}", "unrendered_schema": "{{var ('asana_schema', 'asana')}}"}, "source.asana_source.asana.tag": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "tag", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.tag", "fqn": ["asana_source", "asana", "tag"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "tag_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of the custom tags made in the organization", "columns": {"id": {"name": "id", "description": "System generated ID for each tag", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "name": {"name": "name", "description": "The name of the tag as it appears in the UI. There can be duplicates.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Timestamp of when the tag was created", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "color": {"name": "color", "description": "Chosen color of the tag as it appears in the UI", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"tag_data\"", "created_at": 1739812081.388633, "unrendered_database": "{% if target.type != 'spark' %}{{ var('asana_database', target.database)}}{% endif %}", "unrendered_schema": "{{var ('asana_schema', 'asana')}}"}, "source.asana_source.asana.section": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "section", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.section", "fqn": ["asana_source", "asana", "section"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "section_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of all sections within projects. If tasks in a project are not in an explicit user-made section, a default section called \"(no section)\" is created here", "columns": {"id": {"name": "id", "description": "System generated unique ID for each section", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Timestamp of when the section was created by a user", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "name": {"name": "name", "description": "The given name of the section as it appears in the UI. Is stored as \"(no section)\" when this is the default bucket for tasks with a section in a project", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "project_id": {"name": "project_id", "description": "Foreign key referencing the PROJECT that the section lives in", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"section_data\"", "created_at": 1739812081.38872, "unrendered_database": "{% if target.type != 'spark' %}{{ var('asana_database', target.database)}}{% endif %}", "unrendered_schema": "{{var ('asana_schema', 'asana')}}"}, "source.asana_source.asana.project_task": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "project_task", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.project_task", "fqn": ["asana_source", "asana", "project_task"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "project_task_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of tasks and the project(s) they each belong to. If a project doesn't have a task, it won't be in here (and vice versa)", "columns": {"project_id": {"name": "project_id", "description": "Foreign key referencing a PROJECT the task belongs to", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "task_id": {"name": "task_id", "description": "Foreign key referencing the TASK in the project", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"project_task_data\"", "created_at": 1739812081.388798, "unrendered_database": "{% if target.type != 'spark' %}{{ var('asana_database', target.database)}}{% endif %}", "unrendered_schema": "{{var ('asana_schema', 'asana')}}"}, "source.asana_source.asana.task_follower": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "task_follower", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.task_follower", "fqn": ["asana_source", "asana", "task_follower"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "task_follower_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of tasks with the users that are following them. Tasks without users do not appear here.", "columns": {"task_id": {"name": "task_id", "description": "Foreign key referencing the TASK being followed", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "user_id": {"name": "user_id", "description": "Foreign key referencing the USER that is following the task", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"task_follower_data\"", "created_at": 1739812081.388879, "unrendered_database": "{% if target.type != 'spark' %}{{ var('asana_database', target.database)}}{% endif %}", "unrendered_schema": "{{var ('asana_schema', 'asana')}}"}, "source.asana_source.asana.task_tag": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "task_tag", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.task_tag", "fqn": ["asana_source", "asana", "task_tag"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "task_tag_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of tasks with the tags attached to them. Tasks without tags (and vice versa) do not appear here.", "columns": {"task_id": {"name": "task_id", "description": "Foreign key referencing the TASK that is tagged", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "tag_id": {"name": "tag_id", "description": "Foreign key referencing the TAG that is applied to the task", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"task_tag_data\"", "created_at": 1739812081.3889668, "unrendered_database": "{% if target.type != 'spark' %}{{ var('asana_database', target.database)}}{% endif %}", "unrendered_schema": "{{var ('asana_schema', 'asana')}}"}, "source.asana_source.asana.task_section": {"database": "postgres", "schema": "asana_source_integrations_tests_3", "name": "task_section", "resource_type": "source", "package_name": "asana_source", "path": "models/src_asana.yml", "original_file_path": "models/src_asana.yml", "unique_id": "source.asana_source.asana.task_section", "fqn": ["asana_source", "asana", "task_section"], "source_name": "asana", "source_description": "", "loader": "fivetran", "identifier": "task_section_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": null, "external": null, "description": "Table of tasks and the section that they live under. Section-less tasks within projects appear here, but project-less tasks do not", "columns": {"section_id": {"name": "section_id", "description": "Foreign key referencing the SECTION that the task lives under.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "task_id": {"name": "task_id", "description": "Foreign key referencing the TASK that lives in a section.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"postgres\".\"asana_source_integrations_tests_3\".\"task_section_data\"", "created_at": 1739812081.389056, "unrendered_database": "{% if target.type != 'spark' %}{{ var('asana_database', target.database)}}{% endif %}", "unrendered_schema": "{{var ('asana_schema', 'asana')}}"}}, "macros": {"macro.dbt_postgres.postgres__current_timestamp": {"name": "postgres__current_timestamp", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp", "macro_sql": "{% macro postgres__current_timestamp() -%}\n now()\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3323069, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_string_as_time": {"name": "postgres__snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_string_as_time", "macro_sql": "{% macro postgres__snapshot_string_as_time(timestamp) -%}\n {%- set result = \"'\" ~ timestamp ~ \"'::timestamp without time zone\" -%}\n {{ return(result) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.332509, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_get_time": {"name": "postgres__snapshot_get_time", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_get_time", "macro_sql": "{% macro postgres__snapshot_get_time() -%}\n {{ current_timestamp() }}::timestamp without time zone\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.332607, "supported_languages": null}, "macro.dbt_postgres.postgres__current_timestamp_backcompat": {"name": "postgres__current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp_backcompat", "macro_sql": "{% macro postgres__current_timestamp_backcompat() %}\n current_timestamp::{{ type_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.332701, "supported_languages": null}, "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat": {"name": "postgres__current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat", "macro_sql": "{% macro postgres__current_timestamp_in_utc_backcompat() %}\n (current_timestamp at time zone 'utc')::{{ type_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3327942, "supported_languages": null}, "macro.dbt_postgres.postgres__get_catalog_relations": {"name": "postgres__get_catalog_relations", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/catalog.sql", "original_file_path": "macros/catalog.sql", "unique_id": "macro.dbt_postgres.postgres__get_catalog_relations", "macro_sql": "{% macro postgres__get_catalog_relations(information_schema, relations) -%}\n {%- call statement('catalog', fetch_result=True) -%}\n\n {#\n If the user has multiple databases set and the first one is wrong, this will fail.\n But we won't fail in the case where there are multiple quoting-difference-only dbs, which is better.\n #}\n {% set database = information_schema.database %}\n {{ adapter.verify_database(database) }}\n\n select\n '{{ database }}' as table_database,\n sch.nspname as table_schema,\n tbl.relname as table_name,\n case tbl.relkind\n when 'v' then 'VIEW'\n when 'm' then 'MATERIALIZED VIEW'\n else 'BASE TABLE'\n end as table_type,\n tbl_desc.description as table_comment,\n col.attname as column_name,\n col.attnum as column_index,\n pg_catalog.format_type(col.atttypid, col.atttypmod) as column_type,\n col_desc.description as column_comment,\n pg_get_userbyid(tbl.relowner) as table_owner\n\n from pg_catalog.pg_namespace sch\n join pg_catalog.pg_class tbl on tbl.relnamespace = sch.oid\n join pg_catalog.pg_attribute col on col.attrelid = tbl.oid\n left outer join pg_catalog.pg_description tbl_desc on (tbl_desc.objoid = tbl.oid and tbl_desc.objsubid = 0)\n left outer join pg_catalog.pg_description col_desc on (col_desc.objoid = tbl.oid and col_desc.objsubid = col.attnum)\n where (\n {%- for relation in relations -%}\n {%- if relation.identifier -%}\n (upper(sch.nspname) = upper('{{ relation.schema }}') and\n upper(tbl.relname) = upper('{{ relation.identifier }}'))\n {%- else-%}\n upper(sch.nspname) = upper('{{ relation.schema }}')\n {%- endif -%}\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n )\n and not pg_is_other_temp_schema(sch.oid) -- not a temporary schema belonging to another session\n and tbl.relpersistence in ('p', 'u') -- [p]ermanent table or [u]nlogged table. Exclude [t]emporary tables\n and tbl.relkind in ('r', 'v', 'f', 'p', 'm') -- o[r]dinary table, [v]iew, [f]oreign table, [p]artitioned table, [m]aterialized view. Other values are [i]ndex, [S]equence, [c]omposite type, [t]OAST table\n and col.attnum > 0 -- negative numbers are used for system columns such as oid\n and not col.attisdropped -- column as not been dropped\n\n order by\n sch.nspname,\n tbl.relname,\n col.attnum\n\n {%- endcall -%}\n\n {{ return(load_result('catalog').table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.333751, "supported_languages": null}, "macro.dbt_postgres.postgres__get_catalog": {"name": "postgres__get_catalog", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/catalog.sql", "original_file_path": "macros/catalog.sql", "unique_id": "macro.dbt_postgres.postgres__get_catalog", "macro_sql": "{% macro postgres__get_catalog(information_schema, schemas) -%}\n {%- set relations = [] -%}\n {%- for schema in schemas -%}\n {%- set dummy = relations.append({'schema': schema}) -%}\n {%- endfor -%}\n {{ return(postgres__get_catalog_relations(information_schema, relations)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3341289, "supported_languages": null}, "macro.dbt_postgres.postgres__get_relations": {"name": "postgres__get_relations", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations.sql", "original_file_path": "macros/relations.sql", "unique_id": "macro.dbt_postgres.postgres__get_relations", "macro_sql": "{% macro postgres__get_relations() -%}\n\n {#\n -- in pg_depend, objid is the dependent, refobjid is the referenced object\n -- > a pg_depend entry indicates that the referenced object cannot be\n -- > dropped without also dropping the dependent object.\n #}\n\n {%- call statement('relations', fetch_result=True) -%}\n with relation as (\n select\n pg_rewrite.ev_class as class,\n pg_rewrite.oid as id\n from pg_rewrite\n ),\n class as (\n select\n oid as id,\n relname as name,\n relnamespace as schema,\n relkind as kind\n from pg_class\n ),\n dependency as (\n select distinct\n pg_depend.objid as id,\n pg_depend.refobjid as ref\n from pg_depend\n ),\n schema as (\n select\n pg_namespace.oid as id,\n pg_namespace.nspname as name\n from pg_namespace\n where nspname != 'information_schema' and nspname not like 'pg\\_%'\n ),\n referenced as (\n select\n relation.id AS id,\n referenced_class.name ,\n referenced_class.schema ,\n referenced_class.kind\n from relation\n join class as referenced_class on relation.class=referenced_class.id\n where referenced_class.kind in ('r', 'v', 'm')\n ),\n relationships as (\n select\n referenced.name as referenced_name,\n referenced.schema as referenced_schema_id,\n dependent_class.name as dependent_name,\n dependent_class.schema as dependent_schema_id,\n referenced.kind as kind\n from referenced\n join dependency on referenced.id=dependency.id\n join class as dependent_class on dependency.ref=dependent_class.id\n where\n (referenced.name != dependent_class.name or\n referenced.schema != dependent_class.schema)\n )\n\n select\n referenced_schema.name as referenced_schema,\n relationships.referenced_name as referenced_name,\n dependent_schema.name as dependent_schema,\n relationships.dependent_name as dependent_name\n from relationships\n join schema as dependent_schema on relationships.dependent_schema_id=dependent_schema.id\n join schema as referenced_schema on relationships.referenced_schema_id=referenced_schema.id\n group by referenced_schema, referenced_name, dependent_schema, dependent_name\n order by referenced_schema, referenced_name, dependent_schema, dependent_name;\n\n {%- endcall -%}\n\n {{ return(load_result('relations').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.33468, "supported_languages": null}, "macro.dbt_postgres.postgres_get_relations": {"name": "postgres_get_relations", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations.sql", "original_file_path": "macros/relations.sql", "unique_id": "macro.dbt_postgres.postgres_get_relations", "macro_sql": "{% macro postgres_get_relations() %}\n {{ return(postgres__get_relations()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.334796, "supported_languages": null}, "macro.dbt_postgres.postgres__create_table_as": {"name": "postgres__create_table_as", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__create_table_as", "macro_sql": "{% macro postgres__create_table_as(temporary, relation, sql) -%}\n {%- set unlogged = config.get('unlogged', default=false) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create {% if temporary -%}\n temporary\n {%- elif unlogged -%}\n unlogged\n {%- endif %} table {{ relation }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {% endif -%}\n {% if contract_config.enforced and (not temporary) -%}\n {{ get_table_columns_and_constraints() }} ;\n insert into {{ relation }} (\n {{ adapter.dispatch('get_column_names', 'dbt')() }}\n )\n {%- set sql = get_select_subquery(sql) %}\n {% else %}\n as\n {% endif %}\n (\n {{ sql }}\n );\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent", "macro.dbt.get_table_columns_and_constraints", "macro.dbt.default__get_column_names", "macro.dbt.get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.337076, "supported_languages": null}, "macro.dbt_postgres.postgres__get_create_index_sql": {"name": "postgres__get_create_index_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_create_index_sql", "macro_sql": "{% macro postgres__get_create_index_sql(relation, index_dict) -%}\n {%- set index_config = adapter.parse_index(index_dict) -%}\n {%- set comma_separated_columns = \", \".join(index_config.columns) -%}\n {%- set index_name = index_config.render(relation) -%}\n\n create {% if index_config.unique -%}\n unique\n {%- endif %} index if not exists\n \"{{ index_name }}\"\n on {{ relation }} {% if index_config.type -%}\n using {{ index_config.type }}\n {%- endif %}\n ({{ comma_separated_columns }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.337502, "supported_languages": null}, "macro.dbt_postgres.postgres__create_schema": {"name": "postgres__create_schema", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__create_schema", "macro_sql": "{% macro postgres__create_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier().include(database=False) }}\n {%- endcall -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.337771, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_schema": {"name": "postgres__drop_schema", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__drop_schema", "macro_sql": "{% macro postgres__drop_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier().include(database=False) }} cascade\n {%- endcall -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.338045, "supported_languages": null}, "macro.dbt_postgres.postgres__get_columns_in_relation": {"name": "postgres__get_columns_in_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_columns_in_relation", "macro_sql": "{% macro postgres__get_columns_in_relation(relation) -%}\n {% call statement('get_columns_in_relation', fetch_result=True) %}\n select\n column_name,\n data_type,\n character_maximum_length,\n numeric_precision,\n numeric_scale\n\n from {{ relation.information_schema('columns') }}\n where table_name = '{{ relation.identifier }}'\n {% if relation.schema %}\n and table_schema = '{{ relation.schema }}'\n {% endif %}\n order by ordinal_position\n\n {% endcall %}\n {% set table = load_result('get_columns_in_relation').table %}\n {{ return(sql_convert_columns_in_relation(table)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.sql_convert_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.338441, "supported_languages": null}, "macro.dbt_postgres.postgres__list_relations_without_caching": {"name": "postgres__list_relations_without_caching", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__list_relations_without_caching", "macro_sql": "{% macro postgres__list_relations_without_caching(schema_relation) %}\n {% call statement('list_relations_without_caching', fetch_result=True) -%}\n select\n '{{ schema_relation.database }}' as database,\n tablename as name,\n schemaname as schema,\n 'table' as type\n from pg_tables\n where schemaname ilike '{{ schema_relation.schema }}'\n union all\n select\n '{{ schema_relation.database }}' as database,\n viewname as name,\n schemaname as schema,\n 'view' as type\n from pg_views\n where schemaname ilike '{{ schema_relation.schema }}'\n union all\n select\n '{{ schema_relation.database }}' as database,\n matviewname as name,\n schemaname as schema,\n 'materialized_view' as type\n from pg_matviews\n where schemaname ilike '{{ schema_relation.schema }}'\n {% endcall %}\n {{ return(load_result('list_relations_without_caching').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3388119, "supported_languages": null}, "macro.dbt_postgres.postgres__information_schema_name": {"name": "postgres__information_schema_name", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__information_schema_name", "macro_sql": "{% macro postgres__information_schema_name(database) -%}\n {% if database_name -%}\n {{ adapter.verify_database(database_name) }}\n {%- endif -%}\n information_schema\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.338958, "supported_languages": null}, "macro.dbt_postgres.postgres__list_schemas": {"name": "postgres__list_schemas", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__list_schemas", "macro_sql": "{% macro postgres__list_schemas(database) %}\n {% if database -%}\n {{ adapter.verify_database(database) }}\n {%- endif -%}\n {% call statement('list_schemas', fetch_result=True, auto_begin=False) %}\n select distinct nspname from pg_namespace\n {% endcall %}\n {{ return(load_result('list_schemas').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.339236, "supported_languages": null}, "macro.dbt_postgres.postgres__check_schema_exists": {"name": "postgres__check_schema_exists", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__check_schema_exists", "macro_sql": "{% macro postgres__check_schema_exists(information_schema, schema) -%}\n {% if information_schema.database -%}\n {{ adapter.verify_database(information_schema.database) }}\n {%- endif -%}\n {% call statement('check_schema_exists', fetch_result=True, auto_begin=False) %}\n select count(*) from pg_namespace where nspname = '{{ schema }}'\n {% endcall %}\n {{ return(load_result('check_schema_exists').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.339552, "supported_languages": null}, "macro.dbt_postgres.postgres__make_relation_with_suffix": {"name": "postgres__make_relation_with_suffix", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_relation_with_suffix", "macro_sql": "{% macro postgres__make_relation_with_suffix(base_relation, suffix, dstring) %}\n {% if dstring %}\n {% set dt = modules.datetime.datetime.now() %}\n {% set dtstring = dt.strftime(\"%H%M%S%f\") %}\n {% set suffix = suffix ~ dtstring %}\n {% endif %}\n {% set suffix_length = suffix|length %}\n {% set relation_max_name_length = base_relation.relation_max_name_length() %}\n {% if suffix_length > relation_max_name_length %}\n {% do exceptions.raise_compiler_error('Relation suffix is too long (' ~ suffix_length ~ ' characters). Maximum length is ' ~ relation_max_name_length ~ ' characters.') %}\n {% endif %}\n {% set identifier = base_relation.identifier[:relation_max_name_length - suffix_length] ~ suffix %}\n\n {{ return(base_relation.incorporate(path={\"identifier\": identifier })) }}\n\n {% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.34029, "supported_languages": null}, "macro.dbt_postgres.postgres__make_intermediate_relation": {"name": "postgres__make_intermediate_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_intermediate_relation", "macro_sql": "{% macro postgres__make_intermediate_relation(base_relation, suffix) %}\n {{ return(postgres__make_relation_with_suffix(base_relation, suffix, dstring=False)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3404548, "supported_languages": null}, "macro.dbt_postgres.postgres__make_temp_relation": {"name": "postgres__make_temp_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_temp_relation", "macro_sql": "{% macro postgres__make_temp_relation(base_relation, suffix) %}\n {% set temp_relation = postgres__make_relation_with_suffix(base_relation, suffix, dstring=True) %}\n {{ return(temp_relation.incorporate(path={\"schema\": none,\n \"database\": none})) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.340717, "supported_languages": null}, "macro.dbt_postgres.postgres__make_backup_relation": {"name": "postgres__make_backup_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_backup_relation", "macro_sql": "{% macro postgres__make_backup_relation(base_relation, backup_relation_type, suffix) %}\n {% set backup_relation = postgres__make_relation_with_suffix(base_relation, suffix, dstring=False) %}\n {{ return(backup_relation.incorporate(type=backup_relation_type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.340941, "supported_languages": null}, "macro.dbt_postgres.postgres_escape_comment": {"name": "postgres_escape_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres_escape_comment", "macro_sql": "{% macro postgres_escape_comment(comment) -%}\n {% if comment is not string %}\n {% do exceptions.raise_compiler_error('cannot escape a non-string: ' ~ comment) %}\n {% endif %}\n {%- set magic = '$dbt_comment_literal_block$' -%}\n {%- if magic in comment -%}\n {%- do exceptions.raise_compiler_error('The string ' ~ magic ~ ' is not allowed in comments.') -%}\n {%- endif -%}\n {{ magic }}{{ comment }}{{ magic }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.341357, "supported_languages": null}, "macro.dbt_postgres.postgres__alter_relation_comment": {"name": "postgres__alter_relation_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__alter_relation_comment", "macro_sql": "{% macro postgres__alter_relation_comment(relation, comment) %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n {% if relation.type == 'materialized_view' -%}\n {% set relation_type = \"materialized view\" %}\n {%- else -%}\n {%- set relation_type = relation.type -%}\n {%- endif -%}\n comment on {{ relation_type }} {{ relation }} is {{ escaped_comment }};\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres_escape_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.341863, "supported_languages": null}, "macro.dbt_postgres.postgres__alter_column_comment": {"name": "postgres__alter_column_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__alter_column_comment", "macro_sql": "{% macro postgres__alter_column_comment(relation, column_dict) %}\n {% set existing_columns = adapter.get_columns_in_relation(relation) | map(attribute=\"name\") | list %}\n {% for column_name in column_dict if (column_name in existing_columns) %}\n {% set comment = column_dict[column_name]['description'] %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n comment on column {{ relation }}.{{ adapter.quote(column_name) if column_dict[column_name]['quote'] else column_name }} is {{ escaped_comment }};\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres_escape_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.342438, "supported_languages": null}, "macro.dbt_postgres.postgres__get_show_grant_sql": {"name": "postgres__get_show_grant_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_show_grant_sql", "macro_sql": "\n\n{%- macro postgres__get_show_grant_sql(relation) -%}\n select grantee, privilege_type\n from {{ relation.information_schema('role_table_grants') }}\n where grantor = current_role\n and grantee != current_role\n and table_schema = '{{ relation.schema }}'\n and table_name = '{{ relation.identifier }}'\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.342643, "supported_languages": null}, "macro.dbt_postgres.postgres__copy_grants": {"name": "postgres__copy_grants", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__copy_grants", "macro_sql": "{% macro postgres__copy_grants() %}\n {{ return(False) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.342756, "supported_languages": null}, "macro.dbt_postgres.postgres__get_show_indexes_sql": {"name": "postgres__get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_show_indexes_sql", "macro_sql": "{% macro postgres__get_show_indexes_sql(relation) %}\n select\n i.relname as name,\n m.amname as method,\n ix.indisunique as \"unique\",\n array_to_string(array_agg(a.attname), ',') as column_names\n from pg_index ix\n join pg_class i\n on i.oid = ix.indexrelid\n join pg_am m\n on m.oid=i.relam\n join pg_class t\n on t.oid = ix.indrelid\n join pg_namespace n\n on n.oid = t.relnamespace\n join pg_attribute a\n on a.attrelid = t.oid\n and a.attnum = ANY(ix.indkey)\n where t.relname = '{{ relation.identifier }}'\n and n.nspname = '{{ relation.schema }}'\n and t.relkind in ('r', 'm')\n group by 1, 2, 3\n order by 1, 2, 3\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.342926, "supported_languages": null}, "macro.dbt_postgres.postgres__get_drop_index_sql": {"name": "postgres__get_drop_index_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_drop_index_sql", "macro_sql": "\n\n\n{%- macro postgres__get_drop_index_sql(relation, index_name) -%}\n drop index if exists \"{{ relation.schema }}\".\"{{ index_name }}\"\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.343071, "supported_languages": null}, "macro.dbt_postgres.postgres__get_incremental_default_sql": {"name": "postgres__get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/incremental_strategies.sql", "original_file_path": "macros/materializations/incremental_strategies.sql", "unique_id": "macro.dbt_postgres.postgres__get_incremental_default_sql", "macro_sql": "{% macro postgres__get_incremental_default_sql(arg_dict) %}\n\n {% if arg_dict[\"unique_key\"] %}\n {% do return(get_incremental_delete_insert_sql(arg_dict)) %}\n {% else %}\n {% do return(get_incremental_append_sql(arg_dict)) %}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_delete_insert_sql", "macro.dbt.get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.343531, "supported_languages": null}, "macro.dbt_postgres.postgres__get_incremental_microbatch_sql": {"name": "postgres__get_incremental_microbatch_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/incremental_strategies.sql", "original_file_path": "macros/materializations/incremental_strategies.sql", "unique_id": "macro.dbt_postgres.postgres__get_incremental_microbatch_sql", "macro_sql": "{% macro postgres__get_incremental_microbatch_sql(arg_dict) %}\n\n {% if arg_dict[\"unique_key\"] %}\n {% do return(adapter.dispatch('get_incremental_merge_sql', 'dbt')(arg_dict)) %}\n {% else %}\n {{ exceptions.raise_compiler_error(\"dbt-postgres 'microbatch' requires a `unique_key` config\") }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_merge_sql", "macro.dbt.default__get_incremental_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.34384, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_merge_sql": {"name": "postgres__snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshot_merge.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_merge_sql", "macro_sql": "{% macro postgres__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n {%- set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() -%}\n\n update {{ target }}\n set {{ columns.dbt_valid_to }} = DBT_INTERNAL_SOURCE.{{ columns.dbt_valid_to }}\n from {{ source }} as DBT_INTERNAL_SOURCE\n where DBT_INTERNAL_SOURCE.{{ columns.dbt_scd_id }}::text = {{ target }}.{{ columns.dbt_scd_id }}::text\n and DBT_INTERNAL_SOURCE.dbt_change_type::text in ('update'::text, 'delete'::text)\n {% if config.get(\"dbt_valid_to_current\") %}\n and ({{ target }}.{{ columns.dbt_valid_to }} = {{ config.get('dbt_valid_to_current') }} or {{ target }}.{{ columns.dbt_valid_to }} is null);\n {% else %}\n and {{ target }}.{{ columns.dbt_valid_to }} is null;\n {% endif %}\n\n\n insert into {{ target }} ({{ insert_cols_csv }})\n select {% for column in insert_cols -%}\n DBT_INTERNAL_SOURCE.{{ column }} {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n from {{ source }} as DBT_INTERNAL_SOURCE\n where DBT_INTERNAL_SOURCE.dbt_change_type::text = 'insert'::text;\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.344909, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_materialized_view": {"name": "postgres__drop_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt_postgres.postgres__drop_materialized_view", "macro_sql": "{% macro postgres__drop_materialized_view(relation) -%}\n drop materialized view if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3450549, "supported_languages": null}, "macro.dbt_postgres.postgres__describe_materialized_view": {"name": "postgres__describe_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/describe.sql", "original_file_path": "macros/relations/materialized_view/describe.sql", "unique_id": "macro.dbt_postgres.postgres__describe_materialized_view", "macro_sql": "{% macro postgres__describe_materialized_view(relation) %}\n -- for now just get the indexes, we don't need the name or the query yet\n {% set _indexes = run_query(get_show_indexes_sql(relation)) %}\n {% do return({'indexes': _indexes}) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.get_show_indexes_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3453388, "supported_languages": null}, "macro.dbt_postgres.postgres__refresh_materialized_view": {"name": "postgres__refresh_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt_postgres.postgres__refresh_materialized_view", "macro_sql": "{% macro postgres__refresh_materialized_view(relation) %}\n refresh materialized view {{ relation }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.345473, "supported_languages": null}, "macro.dbt_postgres.postgres__get_rename_materialized_view_sql": {"name": "postgres__get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt_postgres.postgres__get_rename_materialized_view_sql", "macro_sql": "{% macro postgres__get_rename_materialized_view_sql(relation, new_name) %}\n alter materialized view {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.345642, "supported_languages": null}, "macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql": {"name": "postgres__get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql", "macro_sql": "{% macro postgres__get_alter_materialized_view_as_sql(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n) %}\n\n -- apply a full refresh immediately if needed\n {% if configuration_changes.requires_full_refresh %}\n\n {{ get_replace_sql(existing_relation, relation, sql) }}\n\n -- otherwise apply individual changes as needed\n {% else %}\n\n {{ postgres__update_indexes_on_materialized_view(relation, configuration_changes.indexes) }}\n\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_replace_sql", "macro.dbt_postgres.postgres__update_indexes_on_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.346196, "supported_languages": null}, "macro.dbt_postgres.postgres__update_indexes_on_materialized_view": {"name": "postgres__update_indexes_on_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_postgres.postgres__update_indexes_on_materialized_view", "macro_sql": "\n\n\n{%- macro postgres__update_indexes_on_materialized_view(relation, index_changes) -%}\n {{- log(\"Applying UPDATE INDEXES to: \" ~ relation) -}}\n\n {%- for _index_change in index_changes -%}\n {%- set _index = _index_change.context -%}\n\n {%- if _index_change.action == \"drop\" -%}\n\n {{ postgres__get_drop_index_sql(relation, _index.name) }}\n\n {%- elif _index_change.action == \"create\" -%}\n\n {{ postgres__get_create_index_sql(relation, _index.as_node_config) }}\n\n {%- endif -%}\n\t{{ ';' if not loop.last else \"\" }}\n\n {%- endfor -%}\n\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_drop_index_sql", "macro.dbt_postgres.postgres__get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3468, "supported_languages": null}, "macro.dbt_postgres.postgres__get_materialized_view_configuration_changes": {"name": "postgres__get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_postgres.postgres__get_materialized_view_configuration_changes", "macro_sql": "{% macro postgres__get_materialized_view_configuration_changes(existing_relation, new_config) %}\n {% set _existing_materialized_view = postgres__describe_materialized_view(existing_relation) %}\n {% set _configuration_changes = existing_relation.get_materialized_view_config_change_collection(_existing_materialized_view, new_config.model) %}\n {% do return(_configuration_changes) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__describe_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.34707, "supported_languages": null}, "macro.dbt_postgres.postgres__get_create_materialized_view_as_sql": {"name": "postgres__get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt_postgres.postgres__get_create_materialized_view_as_sql", "macro_sql": "{% macro postgres__get_create_materialized_view_as_sql(relation, sql) %}\n create materialized view if not exists {{ relation }} as {{ sql }};\n\n {% for _index_dict in config.get('indexes', []) -%}\n {{- get_create_index_sql(relation, _index_dict) -}}{{ ';' if not loop.last else \"\" }}\n {%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.347487, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_table": {"name": "postgres__drop_table", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt_postgres.postgres__drop_table", "macro_sql": "{% macro postgres__drop_table(relation) -%}\n drop table if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.347629, "supported_languages": null}, "macro.dbt_postgres.postgres__get_replace_table_sql": {"name": "postgres__get_replace_table_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt_postgres.postgres__get_replace_table_sql", "macro_sql": "{% macro postgres__get_replace_table_sql(relation, sql) -%}\n\n {%- set sql_header = config.get('sql_header', none) -%}\n {{ sql_header if sql_header is not none }}\n\n create or replace table {{ relation }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {{ get_table_columns_and_constraints() }}\n {%- set sql = get_select_subquery(sql) %}\n {% endif %}\n as (\n {{ sql }}\n );\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent", "macro.dbt.get_table_columns_and_constraints", "macro.dbt.get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.348278, "supported_languages": null}, "macro.dbt_postgres.postgres__get_rename_table_sql": {"name": "postgres__get_rename_table_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt_postgres.postgres__get_rename_table_sql", "macro_sql": "{% macro postgres__get_rename_table_sql(relation, new_name) %}\n alter table {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3484821, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_view": {"name": "postgres__drop_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt_postgres.postgres__drop_view", "macro_sql": "{% macro postgres__drop_view(relation) -%}\n drop view if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3486269, "supported_languages": null}, "macro.dbt_postgres.postgres__get_replace_view_sql": {"name": "postgres__get_replace_view_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt_postgres.postgres__get_replace_view_sql", "macro_sql": "{% macro postgres__get_replace_view_sql(relation, sql) -%}\n\n {%- set sql_header = config.get('sql_header', none) -%}\n {{ sql_header if sql_header is not none }}\n\n create or replace view {{ relation }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {%- endif %}\n as (\n {{ sql }}\n );\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.34913, "supported_languages": null}, "macro.dbt_postgres.postgres__get_rename_view_sql": {"name": "postgres__get_rename_view_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt_postgres.postgres__get_rename_view_sql", "macro_sql": "{% macro postgres__get_rename_view_sql(relation, new_name) %}\n alter view {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.349308, "supported_languages": null}, "macro.dbt_postgres.postgres__dateadd": {"name": "postgres__dateadd", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt_postgres.postgres__dateadd", "macro_sql": "{% macro postgres__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {{ from_date_or_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.349515, "supported_languages": null}, "macro.dbt_postgres.postgres__listagg": {"name": "postgres__listagg", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt_postgres.postgres__listagg", "macro_sql": "{% macro postgres__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n {% if limit_num -%}\n array_to_string(\n (array_agg(\n {{ measure }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n ))[1:{{ limit_num }}],\n {{ delimiter_text }}\n )\n {%- else %}\n string_agg(\n {{ measure }},\n {{ delimiter_text }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n )\n {%- endif %}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.349993, "supported_languages": null}, "macro.dbt_postgres.postgres__datediff": {"name": "postgres__datediff", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt_postgres.postgres__datediff", "macro_sql": "{% macro postgres__datediff(first_date, second_date, datepart) -%}\n\n {% if datepart == 'year' %}\n (date_part('year', ({{second_date}})::date) - date_part('year', ({{first_date}})::date))\n {% elif datepart == 'quarter' %}\n ({{ datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ datediff(first_date, second_date, 'year') }} * 12 + date_part('month', ({{second_date}})::date) - date_part('month', ({{first_date}})::date))\n {% elif datepart == 'day' %}\n (({{second_date}})::date - ({{first_date}})::date)\n {% elif datepart == 'week' %}\n ({{ datediff(first_date, second_date, 'day') }} / 7 + case\n when date_part('dow', ({{first_date}})::timestamp) <= date_part('dow', ({{second_date}})::timestamp) then\n case when {{first_date}} <= {{second_date}} then 0 else -1 end\n else\n case when {{first_date}} <= {{second_date}} then 1 else 0 end\n end)\n {% elif datepart == 'hour' %}\n ({{ datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60 + floor(date_part('second', ({{second_date}})::timestamp)) - floor(date_part('second', ({{first_date}})::timestamp)))\n {% elif datepart == 'millisecond' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60000 + floor(date_part('millisecond', ({{second_date}})::timestamp)) - floor(date_part('millisecond', ({{first_date}})::timestamp)))\n {% elif datepart == 'microsecond' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60000000 + floor(date_part('microsecond', ({{second_date}})::timestamp)) - floor(date_part('microsecond', ({{first_date}})::timestamp)))\n {% else %}\n {{ exceptions.raise_compiler_error(\"Unsupported datepart for macro datediff in postgres: {!r}\".format(datepart)) }}\n {% endif %}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.352104, "supported_languages": null}, "macro.dbt_postgres.postgres__any_value": {"name": "postgres__any_value", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt_postgres.postgres__any_value", "macro_sql": "{% macro postgres__any_value(expression) -%}\n\n min({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.352273, "supported_languages": null}, "macro.dbt_postgres.postgres__last_day": {"name": "postgres__last_day", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt_postgres.postgres__last_day", "macro_sql": "{% macro postgres__last_day(date, datepart) -%}\n\n {%- if datepart == 'quarter' -%}\n -- postgres dateadd does not support quarter interval.\n cast(\n {{dbt.dateadd('day', '-1',\n dbt.dateadd('month', '3', dbt.date_trunc(datepart, date))\n )}}\n as date)\n {%- else -%}\n {{dbt.default_last_day(date, datepart)}}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.date_trunc", "macro.dbt.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.352732, "supported_languages": null}, "macro.dbt_postgres.postgres__split_part": {"name": "postgres__split_part", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt_postgres.postgres__split_part", "macro_sql": "{% macro postgres__split_part(string_text, delimiter_text, part_number) %}\n\n {% if part_number >= 0 %}\n {{ dbt.default__split_part(string_text, delimiter_text, part_number) }}\n {% else %}\n {{ dbt._split_part_negative(string_text, delimiter_text, part_number) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__split_part", "macro.dbt._split_part_negative"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.353098, "supported_languages": null}, "macro.dbt.run_hooks": {"name": "run_hooks", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.run_hooks", "macro_sql": "{% macro run_hooks(hooks, inside_transaction=True) %}\n {% for hook in hooks | selectattr('transaction', 'equalto', inside_transaction) %}\n {% if not inside_transaction and loop.first %}\n {% call statement(auto_begin=inside_transaction) %}\n commit;\n {% endcall %}\n {% endif %}\n {% set rendered = render(hook.get('sql')) | trim %}\n {% if (rendered | length) > 0 %}\n {% call statement(auto_begin=inside_transaction) %}\n {{ rendered }}\n {% endcall %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.354157, "supported_languages": null}, "macro.dbt.make_hook_config": {"name": "make_hook_config", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.make_hook_config", "macro_sql": "{% macro make_hook_config(sql, inside_transaction) %}\n {{ tojson({\"sql\": sql, \"transaction\": inside_transaction}) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.354372, "supported_languages": null}, "macro.dbt.before_begin": {"name": "before_begin", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.before_begin", "macro_sql": "{% macro before_begin(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3545148, "supported_languages": null}, "macro.dbt.in_transaction": {"name": "in_transaction", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.in_transaction", "macro_sql": "{% macro in_transaction(sql) %}\n {{ make_hook_config(sql, inside_transaction=True) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.354651, "supported_languages": null}, "macro.dbt.after_commit": {"name": "after_commit", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.after_commit", "macro_sql": "{% macro after_commit(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.35478, "supported_languages": null}, "macro.dbt.set_sql_header": {"name": "set_sql_header", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.set_sql_header", "macro_sql": "{% macro set_sql_header(config) -%}\n {{ config.set('sql_header', caller()) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.355099, "supported_languages": null}, "macro.dbt.should_full_refresh": {"name": "should_full_refresh", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.should_full_refresh", "macro_sql": "{% macro should_full_refresh() %}\n {% set config_full_refresh = config.get('full_refresh') %}\n {% if config_full_refresh is none %}\n {% set config_full_refresh = flags.FULL_REFRESH %}\n {% endif %}\n {% do return(config_full_refresh) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.35538, "supported_languages": null}, "macro.dbt.should_store_failures": {"name": "should_store_failures", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.should_store_failures", "macro_sql": "{% macro should_store_failures() %}\n {% set config_store_failures = config.get('store_failures') %}\n {% if config_store_failures is none %}\n {% set config_store_failures = flags.STORE_FAILURES %}\n {% endif %}\n {% do return(config_store_failures) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3556511, "supported_languages": null}, "macro.dbt.snapshot_merge_sql": {"name": "snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "unique_id": "macro.dbt.snapshot_merge_sql", "macro_sql": "{% macro snapshot_merge_sql(target, source, insert_cols) -%}\n {{ adapter.dispatch('snapshot_merge_sql', 'dbt')(target, source, insert_cols) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.356064, "supported_languages": null}, "macro.dbt.default__snapshot_merge_sql": {"name": "default__snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "unique_id": "macro.dbt.default__snapshot_merge_sql", "macro_sql": "{% macro default__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n {%- set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() -%}\n\n merge into {{ target.render() }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on DBT_INTERNAL_SOURCE.{{ columns.dbt_scd_id }} = DBT_INTERNAL_DEST.{{ columns.dbt_scd_id }}\n\n when matched\n {% if config.get(\"dbt_valid_to_current\") %}\n\t{% set source_unique_key = (\"DBT_INTERNAL_DEST.\" ~ columns.dbt_valid_to) | trim %}\n\t{% set target_unique_key = config.get('dbt_valid_to_current') | trim %}\n\tand ({{ equals(source_unique_key, target_unique_key) }} or {{ source_unique_key }} is null)\n\n {% else %}\n and DBT_INTERNAL_DEST.{{ columns.dbt_valid_to }} is null\n {% endif %}\n and DBT_INTERNAL_SOURCE.dbt_change_type in ('update', 'delete')\n then update\n set {{ columns.dbt_valid_to }} = DBT_INTERNAL_SOURCE.{{ columns.dbt_valid_to }}\n\n when not matched\n and DBT_INTERNAL_SOURCE.dbt_change_type = 'insert'\n then insert ({{ insert_cols_csv }})\n values ({{ insert_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3567832, "supported_languages": null}, "macro.dbt.strategy_dispatch": {"name": "strategy_dispatch", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.strategy_dispatch", "macro_sql": "{% macro strategy_dispatch(name) -%}\n{% set original_name = name %}\n {% if '.' in name %}\n {% set package_name, name = name.split(\".\", 1) %}\n {% else %}\n {% set package_name = none %}\n {% endif %}\n\n {% if package_name is none %}\n {% set package_context = context %}\n {% elif package_name in context %}\n {% set package_context = context[package_name] %}\n {% else %}\n {% set error_msg %}\n Could not find package '{{package_name}}', called with '{{original_name}}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n\n {%- set search_name = 'snapshot_' ~ name ~ '_strategy' -%}\n\n {% if search_name not in package_context %}\n {% set error_msg %}\n The specified strategy macro '{{name}}' was not found in package '{{ package_name }}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n {{ return(package_context[search_name]) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.358861, "supported_languages": null}, "macro.dbt.snapshot_hash_arguments": {"name": "snapshot_hash_arguments", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_hash_arguments", "macro_sql": "{% macro snapshot_hash_arguments(args) -%}\n {{ adapter.dispatch('snapshot_hash_arguments', 'dbt')(args) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3590138, "supported_languages": null}, "macro.dbt.default__snapshot_hash_arguments": {"name": "default__snapshot_hash_arguments", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.default__snapshot_hash_arguments", "macro_sql": "{% macro default__snapshot_hash_arguments(args) -%}\n md5({%- for arg in args -%}\n coalesce(cast({{ arg }} as varchar ), '')\n {% if not loop.last %} || '|' || {% endif %}\n {%- endfor -%})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3592, "supported_languages": null}, "macro.dbt.snapshot_timestamp_strategy": {"name": "snapshot_timestamp_strategy", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_timestamp_strategy", "macro_sql": "{% macro snapshot_timestamp_strategy(node, snapshotted_rel, current_rel, model_config, target_exists) %}\n {# The model_config parameter is no longer used, but is passed in anyway for compatibility. #}\n {% set primary_key = config.get('unique_key') %}\n {% set updated_at = config.get('updated_at') %}\n {% set hard_deletes = adapter.get_hard_deletes_behavior(config) %}\n {% set invalidate_hard_deletes = hard_deletes == 'invalidate' %}\n {% set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() %}\n\n {#/*\n The snapshot relation might not have an {{ updated_at }} value if the\n snapshot strategy is changed from `check` to `timestamp`. We\n should use a dbt-created column for the comparison in the snapshot\n table instead of assuming that the user-supplied {{ updated_at }}\n will be present in the historical data.\n\n See https://github.com/dbt-labs/dbt-core/issues/2350\n */ #}\n {% set row_changed_expr -%}\n ({{ snapshotted_rel }}.{{ columns.dbt_valid_from }} < {{ current_rel }}.{{ updated_at }})\n {%- endset %}\n\n {% set scd_args = api.Relation.scd_args(primary_key, updated_at) %}\n {% set scd_id_expr = snapshot_hash_arguments(scd_args) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes,\n \"hard_deletes\": hard_deletes\n }) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.36002, "supported_languages": null}, "macro.dbt.snapshot_string_as_time": {"name": "snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_string_as_time", "macro_sql": "{% macro snapshot_string_as_time(timestamp) -%}\n {{ adapter.dispatch('snapshot_string_as_time', 'dbt')(timestamp) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_string_as_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3601658, "supported_languages": null}, "macro.dbt.default__snapshot_string_as_time": {"name": "default__snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.default__snapshot_string_as_time", "macro_sql": "{% macro default__snapshot_string_as_time(timestamp) %}\n {% do exceptions.raise_not_implemented(\n 'snapshot_string_as_time macro not implemented for adapter '+adapter.type()\n ) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.360312, "supported_languages": null}, "macro.dbt.snapshot_check_all_get_existing_columns": {"name": "snapshot_check_all_get_existing_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_check_all_get_existing_columns", "macro_sql": "{% macro snapshot_check_all_get_existing_columns(node, target_exists, check_cols_config) -%}\n {%- if not target_exists -%}\n {#-- no table yet -> return whatever the query does --#}\n {{ return((false, query_columns)) }}\n {%- endif -%}\n\n {#-- handle any schema changes --#}\n {%- set target_relation = adapter.get_relation(database=node.database, schema=node.schema, identifier=node.alias) -%}\n\n {% if check_cols_config == 'all' %}\n {%- set query_columns = get_columns_in_query(node['compiled_code']) -%}\n\n {% elif check_cols_config is iterable and (check_cols_config | length) > 0 %}\n {#-- query for proper casing/quoting, to support comparison below --#}\n {%- set select_check_cols_from_target -%}\n {#-- N.B. The whitespace below is necessary to avoid edge case issue with comments --#}\n {#-- See: https://github.com/dbt-labs/dbt-core/issues/6781 --#}\n select {{ check_cols_config | join(', ') }} from (\n {{ node['compiled_code'] }}\n ) subq\n {%- endset -%}\n {% set query_columns = get_columns_in_query(select_check_cols_from_target) %}\n\n {% else %}\n {% do exceptions.raise_compiler_error(\"Invalid value for 'check_cols': \" ~ check_cols_config) %}\n {% endif %}\n\n {%- set existing_cols = adapter.get_columns_in_relation(target_relation) | map(attribute = 'name') | list -%}\n {%- set ns = namespace() -%} {#-- handle for-loop scoping with a namespace --#}\n {%- set ns.column_added = false -%}\n\n {%- set intersection = [] -%}\n {%- for col in query_columns -%}\n {%- if col in existing_cols -%}\n {%- do intersection.append(adapter.quote(col)) -%}\n {%- else -%}\n {% set ns.column_added = true %}\n {%- endif -%}\n {%- endfor -%}\n {{ return((ns.column_added, intersection)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.361483, "supported_languages": null}, "macro.dbt.snapshot_check_strategy": {"name": "snapshot_check_strategy", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_check_strategy", "macro_sql": "{% macro snapshot_check_strategy(node, snapshotted_rel, current_rel, model_config, target_exists) %}\n {# The model_config parameter is no longer used, but is passed in anyway for compatibility. #}\n {% set check_cols_config = config.get('check_cols') %}\n {% set primary_key = config.get('unique_key') %}\n {% set hard_deletes = adapter.get_hard_deletes_behavior(config) %}\n {% set invalidate_hard_deletes = hard_deletes == 'invalidate' %}\n {% set updated_at = config.get('updated_at') or snapshot_get_time() %}\n\n {% set column_added = false %}\n\n {% set column_added, check_cols = snapshot_check_all_get_existing_columns(node, target_exists, check_cols_config) %}\n\n {%- set row_changed_expr -%}\n (\n {%- if column_added -%}\n {{ get_true_sql() }}\n {%- else -%}\n {%- for col in check_cols -%}\n {{ snapshotted_rel }}.{{ col }} != {{ current_rel }}.{{ col }}\n or\n (\n (({{ snapshotted_rel }}.{{ col }} is null) and not ({{ current_rel }}.{{ col }} is null))\n or\n ((not {{ snapshotted_rel }}.{{ col }} is null) and ({{ current_rel }}.{{ col }} is null))\n )\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n {%- endif -%}\n )\n {%- endset %}\n\n {% set scd_args = api.Relation.scd_args(primary_key, updated_at) %}\n {% set scd_id_expr = snapshot_hash_arguments(scd_args) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes,\n \"hard_deletes\": hard_deletes\n }) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.snapshot_get_time", "macro.dbt.snapshot_check_all_get_existing_columns", "macro.dbt.get_true_sql", "macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.362761, "supported_languages": null}, "macro.dbt.create_columns": {"name": "create_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.create_columns", "macro_sql": "{% macro create_columns(relation, columns) %}\n {{ adapter.dispatch('create_columns', 'dbt')(relation, columns) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.364674, "supported_languages": null}, "macro.dbt.default__create_columns": {"name": "default__create_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__create_columns", "macro_sql": "{% macro default__create_columns(relation, columns) %}\n {% for column in columns %}\n {% call statement() %}\n alter table {{ relation.render() }} add column \"{{ column.name }}\" {{ column.data_type }};\n {% endcall %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3649228, "supported_languages": null}, "macro.dbt.post_snapshot": {"name": "post_snapshot", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.post_snapshot", "macro_sql": "{% macro post_snapshot(staging_relation) %}\n {{ adapter.dispatch('post_snapshot', 'dbt')(staging_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.365064, "supported_languages": null}, "macro.dbt.default__post_snapshot": {"name": "default__post_snapshot", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__post_snapshot", "macro_sql": "{% macro default__post_snapshot(staging_relation) %}\n {# no-op #}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.365144, "supported_languages": null}, "macro.dbt.get_true_sql": {"name": "get_true_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_true_sql", "macro_sql": "{% macro get_true_sql() %}\n {{ adapter.dispatch('get_true_sql', 'dbt')() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_true_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.365272, "supported_languages": null}, "macro.dbt.default__get_true_sql": {"name": "default__get_true_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__get_true_sql", "macro_sql": "{% macro default__get_true_sql() %}\n {{ return('TRUE') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.365369, "supported_languages": null}, "macro.dbt.snapshot_staging_table": {"name": "snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.snapshot_staging_table", "macro_sql": "{% macro snapshot_staging_table(strategy, source_sql, target_relation) -%}\n {{ adapter.dispatch('snapshot_staging_table', 'dbt')(strategy, source_sql, target_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__snapshot_staging_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3655438, "supported_languages": null}, "macro.dbt.get_snapshot_table_column_names": {"name": "get_snapshot_table_column_names", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_snapshot_table_column_names", "macro_sql": "{% macro get_snapshot_table_column_names() %}\n {{ return({'dbt_valid_to': 'dbt_valid_to', 'dbt_valid_from': 'dbt_valid_from', 'dbt_scd_id': 'dbt_scd_id', 'dbt_updated_at': 'dbt_updated_at', 'dbt_is_deleted': 'dbt_is_deleted'}) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.365757, "supported_languages": null}, "macro.dbt.default__snapshot_staging_table": {"name": "default__snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__snapshot_staging_table", "macro_sql": "{% macro default__snapshot_staging_table(strategy, source_sql, target_relation) -%}\n {% set columns = config.get('snapshot_table_column_names') or get_snapshot_table_column_names() %}\n {% if strategy.hard_deletes == 'new_record' %}\n {% set new_scd_id = snapshot_hash_arguments([columns.dbt_scd_id, snapshot_get_time()]) %}\n {% endif %}\n with snapshot_query as (\n\n {{ source_sql }}\n\n ),\n\n snapshotted_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }}\n from {{ target_relation }}\n where\n {% if config.get('dbt_valid_to_current') %}\n\t\t{% set source_unique_key = columns.dbt_valid_to | trim %}\n\t\t{% set target_unique_key = config.get('dbt_valid_to_current') | trim %}\n\n\t\t{# The exact equals semantics between NULL values depends on the current behavior flag set. Also, update records if the source field is null #}\n ( {{ equals(source_unique_key, target_unique_key) }} or {{ source_unique_key }} is null )\n {% else %}\n {{ columns.dbt_valid_to }} is null\n {% endif %}\n\n ),\n\n insertions_source_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }},\n {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n {{ get_dbt_valid_to_current(strategy, columns) }},\n {{ strategy.scd_id }} as {{ columns.dbt_scd_id }}\n\n from snapshot_query\n ),\n\n updates_source_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }},\n {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_to }}\n\n from snapshot_query\n ),\n\n {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n\n deletes_source_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }}\n from snapshot_query\n ),\n {% endif %}\n\n insertions as (\n\n select\n 'insert' as dbt_change_type,\n source_data.*\n {%- if strategy.hard_deletes == 'new_record' -%}\n ,'False' as {{ columns.dbt_is_deleted }}\n {%- endif %}\n\n from insertions_source_data as source_data\n left outer join snapshotted_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where {{ unique_key_is_null(strategy.unique_key, \"snapshotted_data\") }}\n or ({{ unique_key_is_not_null(strategy.unique_key, \"snapshotted_data\") }} and ({{ strategy.row_changed }})\n\n )\n\n ),\n\n updates as (\n\n select\n 'update' as dbt_change_type,\n source_data.*,\n snapshotted_data.{{ columns.dbt_scd_id }}\n {%- if strategy.hard_deletes == 'new_record' -%}\n , snapshotted_data.{{ columns.dbt_is_deleted }}\n {%- endif %}\n\n from updates_source_data as source_data\n join snapshotted_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where (\n {{ strategy.row_changed }}\n )\n )\n\n {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n ,\n deletes as (\n\n select\n 'delete' as dbt_change_type,\n source_data.*,\n {{ snapshot_get_time() }} as {{ columns.dbt_valid_from }},\n {{ snapshot_get_time() }} as {{ columns.dbt_updated_at }},\n {{ snapshot_get_time() }} as {{ columns.dbt_valid_to }},\n snapshotted_data.{{ columns.dbt_scd_id }}\n {%- if strategy.hard_deletes == 'new_record' -%}\n , snapshotted_data.{{ columns.dbt_is_deleted }}\n {%- endif %}\n from snapshotted_data\n left join deletes_source_data as source_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where {{ unique_key_is_null(strategy.unique_key, \"source_data\") }}\n )\n {%- endif %}\n\n {%- if strategy.hard_deletes == 'new_record' %}\n {% set source_sql_cols = get_column_schema_from_query(source_sql) %}\n ,\n deletion_records as (\n\n select\n 'insert' as dbt_change_type,\n {%- for col in source_sql_cols -%}\n snapshotted_data.{{ adapter.quote(col.column) }},\n {% endfor -%}\n {%- if strategy.unique_key | is_list -%}\n {%- for key in strategy.unique_key -%}\n snapshotted_data.{{ key }} as dbt_unique_key_{{ loop.index }},\n {% endfor -%}\n {%- else -%}\n snapshotted_data.dbt_unique_key as dbt_unique_key,\n {% endif -%}\n {{ snapshot_get_time() }} as {{ columns.dbt_valid_from }},\n {{ snapshot_get_time() }} as {{ columns.dbt_updated_at }},\n snapshotted_data.{{ columns.dbt_valid_to }} as {{ columns.dbt_valid_to }},\n {{ new_scd_id }} as {{ columns.dbt_scd_id }},\n 'True' as {{ columns.dbt_is_deleted }}\n from snapshotted_data\n left join deletes_source_data as source_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where {{ unique_key_is_null(strategy.unique_key, \"source_data\") }}\n\n )\n {%- endif %}\n\n select * from insertions\n union all\n select * from updates\n {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n union all\n select * from deletes\n {%- endif %}\n {%- if strategy.hard_deletes == 'new_record' %}\n union all\n select * from deletion_records\n {%- endif %}\n\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.snapshot_hash_arguments", "macro.dbt.snapshot_get_time", "macro.dbt.unique_key_fields", "macro.dbt.equals", "macro.dbt.get_dbt_valid_to_current", "macro.dbt.unique_key_join_on", "macro.dbt.unique_key_is_null", "macro.dbt.unique_key_is_not_null", "macro.dbt.get_column_schema_from_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.368685, "supported_languages": null}, "macro.dbt.build_snapshot_table": {"name": "build_snapshot_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.build_snapshot_table", "macro_sql": "{% macro build_snapshot_table(strategy, sql) -%}\n {{ adapter.dispatch('build_snapshot_table', 'dbt')(strategy, sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__build_snapshot_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.368869, "supported_languages": null}, "macro.dbt.default__build_snapshot_table": {"name": "default__build_snapshot_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__build_snapshot_table", "macro_sql": "{% macro default__build_snapshot_table(strategy, sql) %}\n {% set columns = config.get('snapshot_table_column_names') or get_snapshot_table_column_names() %}\n\n select *,\n {{ strategy.scd_id }} as {{ columns.dbt_scd_id }},\n {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n {{ get_dbt_valid_to_current(strategy, columns) }}\n {%- if strategy.hard_deletes == 'new_record' -%}\n , 'False' as {{ columns.dbt_is_deleted }}\n {% endif -%}\n from (\n {{ sql }}\n ) sbq\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.get_dbt_valid_to_current"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3693068, "supported_languages": null}, "macro.dbt.build_snapshot_staging_table": {"name": "build_snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.build_snapshot_staging_table", "macro_sql": "{% macro build_snapshot_staging_table(strategy, sql, target_relation) %}\n {% set temp_relation = make_temp_relation(target_relation) %}\n\n {% set select = snapshot_staging_table(strategy, sql, target_relation) %}\n\n {% call statement('build_snapshot_staging_relation') %}\n {{ create_table_as(True, temp_relation, select) }}\n {% endcall %}\n\n {% do return(temp_relation) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_temp_relation", "macro.dbt.snapshot_staging_table", "macro.dbt.statement", "macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.369662, "supported_languages": null}, "macro.dbt.get_updated_at_column_data_type": {"name": "get_updated_at_column_data_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_updated_at_column_data_type", "macro_sql": "{% macro get_updated_at_column_data_type(snapshot_sql) %}\n {% set snapshot_sql_column_schema = get_column_schema_from_query(snapshot_sql) %}\n {% set dbt_updated_at_data_type = null %}\n {% set ns = namespace() -%} {#-- handle for-loop scoping with a namespace --#}\n {% set ns.dbt_updated_at_data_type = null -%}\n {% for column in snapshot_sql_column_schema %}\n {% if ((column.column == 'dbt_updated_at') or (column.column == 'DBT_UPDATED_AT')) %}\n {% set ns.dbt_updated_at_data_type = column.dtype %}\n {% endif %}\n {% endfor %}\n {{ return(ns.dbt_updated_at_data_type or none) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_column_schema_from_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3701582, "supported_languages": null}, "macro.dbt.check_time_data_types": {"name": "check_time_data_types", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.check_time_data_types", "macro_sql": "{% macro check_time_data_types(sql) %}\n {% set dbt_updated_at_data_type = get_updated_at_column_data_type(sql) %}\n {% set snapshot_get_time_data_type = get_snapshot_get_time_data_type() %}\n {% if snapshot_get_time_data_type is not none and dbt_updated_at_data_type is not none and snapshot_get_time_data_type != dbt_updated_at_data_type %}\n {% if exceptions.warn_snapshot_timestamp_data_types %}\n {{ exceptions.warn_snapshot_timestamp_data_types(snapshot_get_time_data_type, dbt_updated_at_data_type) }}\n {% endif %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_updated_at_column_data_type", "macro.dbt.get_snapshot_get_time_data_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.370511, "supported_languages": null}, "macro.dbt.get_dbt_valid_to_current": {"name": "get_dbt_valid_to_current", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_dbt_valid_to_current", "macro_sql": "{% macro get_dbt_valid_to_current(strategy, columns) %}\n {% set dbt_valid_to_current = config.get('dbt_valid_to_current') or \"null\" %}\n coalesce(nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}), {{dbt_valid_to_current}})\n as {{ columns.dbt_valid_to }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3707469, "supported_languages": null}, "macro.dbt.unique_key_fields": {"name": "unique_key_fields", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_fields", "macro_sql": "{% macro unique_key_fields(unique_key) %}\n {% if unique_key | is_list %}\n {% for key in unique_key %}\n {{ key }} as dbt_unique_key_{{ loop.index }}\n {%- if not loop.last %} , {%- endif %}\n {% endfor %}\n {% else %}\n {{ unique_key }} as dbt_unique_key\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.371026, "supported_languages": null}, "macro.dbt.unique_key_join_on": {"name": "unique_key_join_on", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_join_on", "macro_sql": "{% macro unique_key_join_on(unique_key, identifier, from_identifier) %}\n {% if unique_key | is_list %}\n {% for key in unique_key %}\n\t {% set source_unique_key = (identifier ~ \".dbt_unique_key_\" ~ loop.index) | trim %}\n\t {% set target_unique_key = (from_identifier ~ \".dbt_unique_key_\" ~ loop.index) | trim %}\n\t {{ equals(source_unique_key, target_unique_key) }}\n {%- if not loop.last %} and {%- endif %}\n {% endfor %}\n {% else %}\n {{ identifier }}.dbt_unique_key = {{ from_identifier }}.dbt_unique_key\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.371655, "supported_languages": null}, "macro.dbt.unique_key_is_null": {"name": "unique_key_is_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_is_null", "macro_sql": "{% macro unique_key_is_null(unique_key, identifier) %}\n {% if unique_key | is_list %}\n {{ identifier }}.dbt_unique_key_1 is null\n {% else %}\n {{ identifier }}.dbt_unique_key is null\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.371928, "supported_languages": null}, "macro.dbt.unique_key_is_not_null": {"name": "unique_key_is_not_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_is_not_null", "macro_sql": "{% macro unique_key_is_not_null(unique_key, identifier) %}\n {% if unique_key | is_list %}\n {{ identifier }}.dbt_unique_key_1 is not null\n {% else %}\n {{ identifier }}.dbt_unique_key is not null\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3721302, "supported_languages": null}, "macro.dbt.materialization_snapshot_default": {"name": "materialization_snapshot_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot.sql", "original_file_path": "macros/materializations/snapshots/snapshot.sql", "unique_id": "macro.dbt.materialization_snapshot_default", "macro_sql": "{% materialization snapshot, default %}\n\n {%- set target_table = model.get('alias', model.get('name')) -%}\n\n {%- set strategy_name = config.get('strategy') -%}\n {%- set unique_key = config.get('unique_key') %}\n -- grab current tables grants config for comparision later on\n {%- set grant_config = config.get('grants') -%}\n\n {% set target_relation_exists, target_relation = get_or_create_relation(\n database=model.database,\n schema=model.schema,\n identifier=target_table,\n type='table') -%}\n\n {%- if not target_relation.is_table -%}\n {% do exceptions.relation_wrong_type(target_relation, 'table') %}\n {%- endif -%}\n\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set strategy_macro = strategy_dispatch(strategy_name) %}\n {# The model['config'] parameter below is no longer used, but passing anyway for compatibility #}\n {# It was a dictionary of config, instead of the config object from the context #}\n {% set strategy = strategy_macro(model, \"snapshotted_data\", \"source_data\", model['config'], target_relation_exists) %}\n\n {% if not target_relation_exists %}\n\n {% set build_sql = build_snapshot_table(strategy, model['compiled_code']) %}\n {% set build_or_select_sql = build_sql %}\n {% set final_sql = create_table_as(False, target_relation, build_sql) %}\n\n {% else %}\n\n {% set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() %}\n\n {{ adapter.assert_valid_snapshot_target_given_strategy(target_relation, columns, strategy) }}\n\n {% set build_or_select_sql = snapshot_staging_table(strategy, sql, target_relation) %}\n {% set staging_table = build_snapshot_staging_table(strategy, sql, target_relation) %}\n\n -- this may no-op if the database does not require column expansion\n {% do adapter.expand_target_column_types(from_relation=staging_table,\n to_relation=target_relation) %}\n\n {% set remove_columns = ['dbt_change_type', 'DBT_CHANGE_TYPE', 'dbt_unique_key', 'DBT_UNIQUE_KEY'] %}\n {% if unique_key | is_list %}\n {% for key in strategy.unique_key %}\n {{ remove_columns.append('dbt_unique_key_' + loop.index|string) }}\n {{ remove_columns.append('DBT_UNIQUE_KEY_' + loop.index|string) }}\n {% endfor %}\n {% endif %}\n\n {% set missing_columns = adapter.get_missing_columns(staging_table, target_relation)\n | rejectattr('name', 'in', remove_columns)\n | list %}\n\n {% do create_columns(target_relation, missing_columns) %}\n\n {% set source_columns = adapter.get_columns_in_relation(staging_table)\n | rejectattr('name', 'in', remove_columns)\n | list %}\n\n {% set quoted_source_columns = [] %}\n {% for column in source_columns %}\n {% do quoted_source_columns.append(adapter.quote(column.name)) %}\n {% endfor %}\n\n {% set final_sql = snapshot_merge_sql(\n target = target_relation,\n source = staging_table,\n insert_cols = quoted_source_columns\n )\n %}\n\n {% endif %}\n\n\n {{ check_time_data_types(build_or_select_sql) }}\n\n {% call statement('main') %}\n {{ final_sql }}\n {% endcall %}\n\n {% set should_revoke = should_revoke(target_relation_exists, full_refresh_mode=False) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if not target_relation_exists %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {% if staging_table is defined %}\n {% do post_snapshot(staging_table) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.get_or_create_relation", "macro.dbt.run_hooks", "macro.dbt.strategy_dispatch", "macro.dbt.build_snapshot_table", "macro.dbt.create_table_as", "macro.dbt.get_snapshot_table_column_names", "macro.dbt.snapshot_staging_table", "macro.dbt.build_snapshot_staging_table", "macro.dbt.create_columns", "macro.dbt.snapshot_merge_sql", "macro.dbt.check_time_data_types", "macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs", "macro.dbt.create_indexes", "macro.dbt.post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.375811, "supported_languages": ["sql"]}, "macro.dbt.materialization_test_default": {"name": "materialization_test_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/test.sql", "original_file_path": "macros/materializations/tests/test.sql", "unique_id": "macro.dbt.materialization_test_default", "macro_sql": "{%- materialization test, default -%}\n\n {% set relations = [] %}\n\n {% if should_store_failures() %}\n\n {% set identifier = model['alias'] %}\n {% set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n\n {% set store_failures_as = config.get('store_failures_as') %}\n -- if `--store-failures` is invoked via command line and `store_failures_as` is not set,\n -- config.get('store_failures_as', 'table') returns None, not 'table'\n {% if store_failures_as == none %}{% set store_failures_as = 'table' %}{% endif %}\n {% if store_failures_as not in ['table', 'view'] %}\n {{ exceptions.raise_compiler_error(\n \"'\" ~ store_failures_as ~ \"' is not a valid value for `store_failures_as`. \"\n \"Accepted values are: ['ephemeral', 'table', 'view']\"\n ) }}\n {% endif %}\n\n {% set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database, type=store_failures_as) -%} %}\n\n {% if old_relation %}\n {% do adapter.drop_relation(old_relation) %}\n {% endif %}\n\n {% call statement(auto_begin=True) %}\n {{ get_create_sql(target_relation, sql) }}\n {% endcall %}\n\n {% do relations.append(target_relation) %}\n\n {% set main_sql %}\n select *\n from {{ target_relation }}\n {% endset %}\n\n {{ adapter.commit() }}\n\n {% else %}\n\n {% set main_sql = sql %}\n\n {% endif %}\n\n {% set limit = config.get('limit') %}\n {% set fail_calc = config.get('fail_calc') %}\n {% set warn_if = config.get('warn_if') %}\n {% set error_if = config.get('error_if') %}\n\n {% call statement('main', fetch_result=True) -%}\n\n {{ get_test_sql(main_sql, fail_calc, warn_if, error_if, limit)}}\n\n {%- endcall %}\n\n {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.should_store_failures", "macro.dbt.statement", "macro.dbt.get_create_sql", "macro.dbt.get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.377655, "supported_languages": ["sql"]}, "macro.dbt.get_test_sql": {"name": "get_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.get_test_sql", "macro_sql": "{% macro get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n {{ adapter.dispatch('get_test_sql', 'dbt')(main_sql, fail_calc, warn_if, error_if, limit) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.378174, "supported_languages": null}, "macro.dbt.default__get_test_sql": {"name": "default__get_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.default__get_test_sql", "macro_sql": "{% macro default__get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n select\n {{ fail_calc }} as failures,\n {{ fail_calc }} {{ warn_if }} as should_warn,\n {{ fail_calc }} {{ error_if }} as should_error\n from (\n {{ main_sql }}\n {{ \"limit \" ~ limit if limit != none }}\n ) dbt_internal_test\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.378439, "supported_languages": null}, "macro.dbt.get_unit_test_sql": {"name": "get_unit_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.get_unit_test_sql", "macro_sql": "{% macro get_unit_test_sql(main_sql, expected_fixture_sql, expected_column_names) -%}\n {{ adapter.dispatch('get_unit_test_sql', 'dbt')(main_sql, expected_fixture_sql, expected_column_names) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_unit_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.378617, "supported_languages": null}, "macro.dbt.default__get_unit_test_sql": {"name": "default__get_unit_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.default__get_unit_test_sql", "macro_sql": "{% macro default__get_unit_test_sql(main_sql, expected_fixture_sql, expected_column_names) -%}\n-- Build actual result given inputs\nwith dbt_internal_unit_test_actual as (\n select\n {% for expected_column_name in expected_column_names %}{{expected_column_name}}{% if not loop.last -%},{% endif %}{%- endfor -%}, {{ dbt.string_literal(\"actual\") }} as {{ adapter.quote(\"actual_or_expected\") }}\n from (\n {{ main_sql }}\n ) _dbt_internal_unit_test_actual\n),\n-- Build expected result\ndbt_internal_unit_test_expected as (\n select\n {% for expected_column_name in expected_column_names %}{{expected_column_name}}{% if not loop.last -%}, {% endif %}{%- endfor -%}, {{ dbt.string_literal(\"expected\") }} as {{ adapter.quote(\"actual_or_expected\") }}\n from (\n {{ expected_fixture_sql }}\n ) _dbt_internal_unit_test_expected\n)\n-- Union actual and expected results\nselect * from dbt_internal_unit_test_actual\nunion all\nselect * from dbt_internal_unit_test_expected\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.string_literal"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.379114, "supported_languages": null}, "macro.dbt.get_where_subquery": {"name": "get_where_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "unique_id": "macro.dbt.get_where_subquery", "macro_sql": "{% macro get_where_subquery(relation) -%}\n {% do return(adapter.dispatch('get_where_subquery', 'dbt')(relation)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_where_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.379402, "supported_languages": null}, "macro.dbt.default__get_where_subquery": {"name": "default__get_where_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "unique_id": "macro.dbt.default__get_where_subquery", "macro_sql": "{% macro default__get_where_subquery(relation) -%}\n {% set where = config.get('where', '') %}\n {% if where %}\n {%- set filtered -%}\n (select * from {{ relation }} where {{ where }}) dbt_subquery\n {%- endset -%}\n {% do return(filtered) %}\n {%- else -%}\n {% do return(relation) %}\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.379712, "supported_languages": null}, "macro.dbt.materialization_unit_default": {"name": "materialization_unit_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/unit.sql", "original_file_path": "macros/materializations/tests/unit.sql", "unique_id": "macro.dbt.materialization_unit_default", "macro_sql": "{%- materialization unit, default -%}\n\n {% set relations = [] %}\n\n {% set expected_rows = config.get('expected_rows') %}\n {% set expected_sql = config.get('expected_sql') %}\n {% set tested_expected_column_names = expected_rows[0].keys() if (expected_rows | length ) > 0 else get_columns_in_query(sql) %} %}\n\n {%- set target_relation = this.incorporate(type='table') -%}\n {%- set temp_relation = make_temp_relation(target_relation)-%}\n {% do run_query(get_create_table_as_sql(True, temp_relation, get_empty_subquery_sql(sql))) %}\n {%- set columns_in_relation = adapter.get_columns_in_relation(temp_relation) -%}\n {%- set column_name_to_data_types = {} -%}\n {%- for column in columns_in_relation -%}\n {%- do column_name_to_data_types.update({column.name|lower: column.data_type}) -%}\n {%- endfor -%}\n\n {% if not expected_sql %}\n {% set expected_sql = get_expected_sql(expected_rows, column_name_to_data_types) %}\n {% endif %}\n {% set unit_test_sql = get_unit_test_sql(sql, expected_sql, tested_expected_column_names) %}\n\n {% call statement('main', fetch_result=True) -%}\n\n {{ unit_test_sql }}\n\n {%- endcall %}\n\n {% do adapter.drop_relation(temp_relation) %}\n\n {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.get_columns_in_query", "macro.dbt.make_temp_relation", "macro.dbt.run_query", "macro.dbt.get_create_table_as_sql", "macro.dbt.get_empty_subquery_sql", "macro.dbt.get_expected_sql", "macro.dbt.get_unit_test_sql", "macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3809931, "supported_languages": ["sql"]}, "macro.dbt.materialization_materialized_view_default": {"name": "materialization_materialized_view_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialization_materialized_view_default", "macro_sql": "{% materialization materialized_view, default %}\n {% set existing_relation = load_cached_relation(this) %}\n {% set target_relation = this.incorporate(type=this.MaterializedView) %}\n {% set intermediate_relation = make_intermediate_relation(target_relation) %}\n {% set backup_relation_type = target_relation.MaterializedView if existing_relation is none else existing_relation.type %}\n {% set backup_relation = make_backup_relation(target_relation, backup_relation_type) %}\n\n {{ materialized_view_setup(backup_relation, intermediate_relation, pre_hooks) }}\n\n {% set build_sql = materialized_view_get_build_sql(existing_relation, target_relation, backup_relation, intermediate_relation) %}\n\n {% if build_sql == '' %}\n {{ materialized_view_execute_no_op(target_relation) }}\n {% else %}\n {{ materialized_view_execute_build_sql(build_sql, existing_relation, target_relation, post_hooks) }}\n {% endif %}\n\n {{ materialized_view_teardown(backup_relation, intermediate_relation, post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.materialized_view_setup", "macro.dbt.materialized_view_get_build_sql", "macro.dbt.materialized_view_execute_no_op", "macro.dbt.materialized_view_execute_build_sql", "macro.dbt.materialized_view_teardown"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3828192, "supported_languages": ["sql"]}, "macro.dbt.materialized_view_setup": {"name": "materialized_view_setup", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_setup", "macro_sql": "{% macro materialized_view_setup(backup_relation, intermediate_relation, pre_hooks) %}\n\n -- backup_relation and intermediate_relation should not already exist in the database\n -- it's possible these exist because of a previous run that exited unexpectedly\n {% set preexisting_backup_relation = load_cached_relation(backup_relation) %}\n {% set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) %}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3832252, "supported_languages": null}, "macro.dbt.materialized_view_teardown": {"name": "materialized_view_teardown", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_teardown", "macro_sql": "{% macro materialized_view_teardown(backup_relation, intermediate_relation, post_hooks) %}\n\n -- drop the temp relations if they exist to leave the database clean for the next run\n {{ drop_relation_if_exists(backup_relation) }}\n {{ drop_relation_if_exists(intermediate_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.383467, "supported_languages": null}, "macro.dbt.materialized_view_get_build_sql": {"name": "materialized_view_get_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_get_build_sql", "macro_sql": "{% macro materialized_view_get_build_sql(existing_relation, target_relation, backup_relation, intermediate_relation) %}\n\n {% set full_refresh_mode = should_full_refresh() %}\n\n -- determine the scenario we're in: create, full_refresh, alter, refresh data\n {% if existing_relation is none %}\n {% set build_sql = get_create_materialized_view_as_sql(target_relation, sql) %}\n {% elif full_refresh_mode or not existing_relation.is_materialized_view %}\n {% set build_sql = get_replace_sql(existing_relation, target_relation, sql) %}\n {% else %}\n\n -- get config options\n {% set on_configuration_change = config.get('on_configuration_change') %}\n {% set configuration_changes = get_materialized_view_configuration_changes(existing_relation, config) %}\n\n {% if configuration_changes is none %}\n {% set build_sql = refresh_materialized_view(target_relation) %}\n\n {% elif on_configuration_change == 'apply' %}\n {% set build_sql = get_alter_materialized_view_as_sql(target_relation, configuration_changes, sql, existing_relation, backup_relation, intermediate_relation) %}\n {% elif on_configuration_change == 'continue' %}\n {% set build_sql = '' %}\n {{ exceptions.warn(\"Configuration changes were identified and `on_configuration_change` was set to `continue` for `\" ~ target_relation.render() ~ \"`\") }}\n {% elif on_configuration_change == 'fail' %}\n {{ exceptions.raise_fail_fast_error(\"Configuration changes were identified and `on_configuration_change` was set to `fail` for `\" ~ target_relation.render() ~ \"`\") }}\n\n {% else %}\n -- this only happens if the user provides a value other than `apply`, 'skip', 'fail'\n {{ exceptions.raise_compiler_error(\"Unexpected configuration scenario\") }}\n\n {% endif %}\n\n {% endif %}\n\n {% do return(build_sql) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh", "macro.dbt.get_create_materialized_view_as_sql", "macro.dbt.get_replace_sql", "macro.dbt.get_materialized_view_configuration_changes", "macro.dbt.refresh_materialized_view", "macro.dbt.get_alter_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3848052, "supported_languages": null}, "macro.dbt.materialized_view_execute_no_op": {"name": "materialized_view_execute_no_op", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_execute_no_op", "macro_sql": "{% macro materialized_view_execute_no_op(target_relation) %}\n {% do store_raw_result(\n name=\"main\",\n message=\"skip \" ~ target_relation,\n code=\"skip\",\n rows_affected=\"-1\"\n ) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.385035, "supported_languages": null}, "macro.dbt.materialized_view_execute_build_sql": {"name": "materialized_view_execute_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_execute_build_sql", "macro_sql": "{% macro materialized_view_execute_build_sql(build_sql, existing_relation, target_relation, post_hooks) %}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set grant_config = config.get('grants') %}\n\n {% call statement(name=\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.38564, "supported_languages": null}, "macro.dbt.materialization_view_default": {"name": "materialization_view_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/view.sql", "original_file_path": "macros/materializations/models/view.sql", "unique_id": "macro.dbt.materialization_view_default", "macro_sql": "{%- materialization view, default -%}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='view') -%}\n {%- set intermediate_relation = make_intermediate_relation(target_relation) -%}\n\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%}\n /*\n This relation (probably) doesn't exist yet. If it does exist, it's a leftover from\n a previous run, and we're going to try to drop it immediately. At the end of this\n materialization, we're going to rename the \"existing_relation\" to this identifier,\n and then we're going to drop it. In order to make sure we run the correct one of:\n - drop view ...\n - drop table ...\n\n We need to set the type of this relation to be the type of the existing_relation, if it exists,\n or else \"view\" as a sane default if it does not. Note that if the existing_relation does not\n exist, then there is nothing to move out of the way and subsequentally drop. In that case,\n this relation will be effectively unused.\n */\n {%- set backup_relation_type = 'view' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n -- move the existing view out of the way\n {% if existing_relation is not none %}\n /* Do the equivalent of rename_if_exists. 'existing_relation' could have been dropped\n since the variable was first set. */\n {% set existing_relation = load_cached_relation(existing_relation) %}\n {% if existing_relation is not none %}\n {{ adapter.rename_relation(existing_relation, backup_relation) }}\n {% endif %}\n {% endif %}\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.run_hooks", "macro.dbt.drop_relation_if_exists", "macro.dbt.statement", "macro.dbt.get_create_view_as_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.387648, "supported_languages": ["sql"]}, "macro.dbt.materialization_table_default": {"name": "materialization_table_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table.sql", "original_file_path": "macros/materializations/models/table.sql", "unique_id": "macro.dbt.materialization_table_default", "macro_sql": "{% materialization table, default %}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='table') %}\n {%- set intermediate_relation = make_intermediate_relation(target_relation) -%}\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%}\n /*\n See ../view/view.sql for more information about this relation.\n */\n {%- set backup_relation_type = 'table' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_table_as_sql(False, intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n {% if existing_relation is not none %}\n /* Do the equivalent of rename_if_exists. 'existing_relation' could have been dropped\n since the variable was first set. */\n {% set existing_relation = load_cached_relation(existing_relation) %}\n {% if existing_relation is not none %}\n {{ adapter.rename_relation(existing_relation, backup_relation) }}\n {% endif %}\n {% endif %}\n\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% do create_indexes(target_relation) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n -- finally, drop the existing/backup relation after the commit\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.get_create_table_as_sql", "macro.dbt.create_indexes", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.389494, "supported_languages": ["sql"]}, "macro.dbt.get_quoted_csv": {"name": "get_quoted_csv", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.get_quoted_csv", "macro_sql": "{% macro get_quoted_csv(column_names) %}\n\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote(col)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.390242, "supported_languages": null}, "macro.dbt.diff_columns": {"name": "diff_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.diff_columns", "macro_sql": "{% macro diff_columns(source_columns, target_columns) %}\n\n {% set result = [] %}\n {% set source_names = source_columns | map(attribute = 'column') | list %}\n {% set target_names = target_columns | map(attribute = 'column') | list %}\n\n {# --check whether the name attribute exists in the target - this does not perform a data type check #}\n {% for sc in source_columns %}\n {% if sc.name not in target_names %}\n {{ result.append(sc) }}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.39069, "supported_languages": null}, "macro.dbt.diff_column_data_types": {"name": "diff_column_data_types", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.diff_column_data_types", "macro_sql": "{% macro diff_column_data_types(source_columns, target_columns) %}\n\n {% set result = [] %}\n {% for sc in source_columns %}\n {% set tc = target_columns | selectattr(\"name\", \"equalto\", sc.name) | list | first %}\n {% if tc %}\n {% if sc.data_type != tc.data_type and not sc.can_expand_to(other_column=tc) %}\n {{ result.append( { 'column_name': tc.name, 'new_type': sc.data_type } ) }}\n {% endif %}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3912299, "supported_languages": null}, "macro.dbt.get_merge_update_columns": {"name": "get_merge_update_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.get_merge_update_columns", "macro_sql": "{% macro get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) %}\n {{ return(adapter.dispatch('get_merge_update_columns', 'dbt')(merge_update_columns, merge_exclude_columns, dest_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_update_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3914309, "supported_languages": null}, "macro.dbt.default__get_merge_update_columns": {"name": "default__get_merge_update_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.default__get_merge_update_columns", "macro_sql": "{% macro default__get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) %}\n {%- set default_cols = dest_columns | map(attribute=\"quoted\") | list -%}\n\n {%- if merge_update_columns and merge_exclude_columns -%}\n {{ exceptions.raise_compiler_error(\n 'Model cannot specify merge_update_columns and merge_exclude_columns. Please update model to use only one config'\n )}}\n {%- elif merge_update_columns -%}\n {%- set update_columns = merge_update_columns -%}\n {%- elif merge_exclude_columns -%}\n {%- set update_columns = [] -%}\n {%- for column in dest_columns -%}\n {% if column.column | lower not in merge_exclude_columns | map(\"lower\") | list %}\n {%- do update_columns.append(column.quoted) -%}\n {% endif %}\n {%- endfor -%}\n {%- else -%}\n {%- set update_columns = default_cols -%}\n {%- endif -%}\n\n {{ return(update_columns) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.392262, "supported_languages": null}, "macro.dbt.get_merge_sql": {"name": "get_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_merge_sql", "macro_sql": "{% macro get_merge_sql(target, source, unique_key, dest_columns, incremental_predicates=none) -%}\n -- back compat for old kwarg name\n {% set incremental_predicates = kwargs.get('predicates', incremental_predicates) %}\n {{ adapter.dispatch('get_merge_sql', 'dbt')(target, source, unique_key, dest_columns, incremental_predicates) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.393594, "supported_languages": null}, "macro.dbt.default__get_merge_sql": {"name": "default__get_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_merge_sql", "macro_sql": "{% macro default__get_merge_sql(target, source, unique_key, dest_columns, incremental_predicates=none) -%}\n {%- set predicates = [] if incremental_predicates is none else [] + incremental_predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set merge_update_columns = config.get('merge_update_columns') -%}\n {%- set merge_exclude_columns = config.get('merge_exclude_columns') -%}\n {%- set update_columns = get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {% if unique_key %}\n {% if unique_key is sequence and unique_key is not mapping and unique_key is not string %}\n {% for key in unique_key %}\n {% set this_key_match %}\n DBT_INTERNAL_SOURCE.{{ key }} = DBT_INTERNAL_DEST.{{ key }}\n {% endset %}\n {% do predicates.append(this_key_match) %}\n {% endfor %}\n {% else %}\n {% set source_unique_key = (\"DBT_INTERNAL_SOURCE.\" ~ unique_key) | trim %}\n\t {% set target_unique_key = (\"DBT_INTERNAL_DEST.\" ~ unique_key) | trim %}\n\t {% set unique_key_match = equals(source_unique_key, target_unique_key) | trim %}\n {% do predicates.append(unique_key_match) %}\n {% endif %}\n {% else %}\n {% do predicates.append('FALSE') %}\n {% endif %}\n\n {{ sql_header if sql_header is not none }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on {{\"(\" ~ predicates | join(\") and (\") ~ \")\"}}\n\n {% if unique_key %}\n when matched then update set\n {% for column_name in update_columns -%}\n {{ column_name }} = DBT_INTERNAL_SOURCE.{{ column_name }}\n {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n {% endif %}\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv", "macro.dbt.get_merge_update_columns", "macro.dbt.equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3952389, "supported_languages": null}, "macro.dbt.get_delete_insert_merge_sql": {"name": "get_delete_insert_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_delete_insert_merge_sql", "macro_sql": "{% macro get_delete_insert_merge_sql(target, source, unique_key, dest_columns, incremental_predicates) -%}\n {{ adapter.dispatch('get_delete_insert_merge_sql', 'dbt')(target, source, unique_key, dest_columns, incremental_predicates) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3954718, "supported_languages": null}, "macro.dbt.default__get_delete_insert_merge_sql": {"name": "default__get_delete_insert_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_delete_insert_merge_sql", "macro_sql": "{% macro default__get_delete_insert_merge_sql(target, source, unique_key, dest_columns, incremental_predicates) -%}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n {% if unique_key %}\n {% if unique_key is sequence and unique_key is not string %}\n delete from {{ target }}\n using {{ source }}\n where (\n {% for key in unique_key %}\n\t\t {% set source_unique_key = (source ~ \".\" ~ key) | trim %}\n\t\t {% set target_unique_key = (target ~ \".\" ~ key) | trim %}\n {{ equals(source_unique_key, target_unique_key) }}\n {{ \"and \" if not loop.last}}\n {% endfor %}\n {% if incremental_predicates %}\n {% for predicate in incremental_predicates %}\n and {{ predicate }}\n {% endfor %}\n {% endif %}\n );\n {% else %}\n delete from {{ target }}\n where (\n {{ unique_key }}) in (\n select ({{ unique_key }})\n from {{ source }}\n )\n {%- if incremental_predicates %}\n {% for predicate in incremental_predicates %}\n and {{ predicate }}\n {% endfor %}\n {%- endif -%};\n\n {% endif %}\n {% endif %}\n\n insert into {{ target }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ source }}\n )\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv", "macro.dbt.equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.396409, "supported_languages": null}, "macro.dbt.get_insert_overwrite_merge_sql": {"name": "get_insert_overwrite_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_insert_overwrite_merge_sql", "macro_sql": "{% macro get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header=false) -%}\n {{ adapter.dispatch('get_insert_overwrite_merge_sql', 'dbt')(target, source, dest_columns, predicates, include_sql_header) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.396638, "supported_languages": null}, "macro.dbt.default__get_insert_overwrite_merge_sql": {"name": "default__get_insert_overwrite_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_insert_overwrite_merge_sql", "macro_sql": "{% macro default__get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header) -%}\n {#-- The only time include_sql_header is True: --#}\n {#-- BigQuery + insert_overwrite strategy + \"static\" partitions config --#}\n {#-- We should consider including the sql header at the materialization level instead --#}\n\n {%- set predicates = [] if predicates is none else [] + predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none and include_sql_header }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on FALSE\n\n when not matched by source\n {% if predicates %} and {{ predicates | join(' and ') }} {% endif %}\n then delete\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.397182, "supported_languages": null}, "macro.dbt.is_incremental": {"name": "is_incremental", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/is_incremental.sql", "original_file_path": "macros/materializations/models/incremental/is_incremental.sql", "unique_id": "macro.dbt.is_incremental", "macro_sql": "{% macro is_incremental() %}\n {#-- do not run introspective queries in parsing #}\n {% if not execute %}\n {{ return(False) }}\n {% else %}\n {% set relation = adapter.get_relation(this.database, this.schema, this.table) %}\n {{ return(relation is not none\n and relation.type == 'table'\n and model.config.materialized == 'incremental'\n and not should_full_refresh()) }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.397695, "supported_languages": null}, "macro.dbt.get_incremental_append_sql": {"name": "get_incremental_append_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_append_sql", "macro_sql": "{% macro get_incremental_append_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_append_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.398303, "supported_languages": null}, "macro.dbt.default__get_incremental_append_sql": {"name": "default__get_incremental_append_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_append_sql", "macro_sql": "{% macro default__get_incremental_append_sql(arg_dict) %}\n\n {% do return(get_insert_into_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"dest_columns\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_insert_into_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3985012, "supported_languages": null}, "macro.dbt.get_incremental_delete_insert_sql": {"name": "get_incremental_delete_insert_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_delete_insert_sql", "macro_sql": "{% macro get_incremental_delete_insert_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_delete_insert_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_delete_insert_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.3986628, "supported_languages": null}, "macro.dbt.default__get_incremental_delete_insert_sql": {"name": "default__get_incremental_delete_insert_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_delete_insert_sql", "macro_sql": "{% macro default__get_incremental_delete_insert_sql(arg_dict) %}\n\n {% do return(get_delete_insert_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"unique_key\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.398913, "supported_languages": null}, "macro.dbt.get_incremental_merge_sql": {"name": "get_incremental_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_merge_sql", "macro_sql": "{% macro get_incremental_merge_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_merge_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.399078, "supported_languages": null}, "macro.dbt.default__get_incremental_merge_sql": {"name": "default__get_incremental_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_merge_sql", "macro_sql": "{% macro default__get_incremental_merge_sql(arg_dict) %}\n\n {% do return(get_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"unique_key\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.399331, "supported_languages": null}, "macro.dbt.get_incremental_insert_overwrite_sql": {"name": "get_incremental_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_insert_overwrite_sql", "macro_sql": "{% macro get_incremental_insert_overwrite_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_insert_overwrite_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_insert_overwrite_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.399495, "supported_languages": null}, "macro.dbt.default__get_incremental_insert_overwrite_sql": {"name": "default__get_incremental_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_insert_overwrite_sql", "macro_sql": "{% macro default__get_incremental_insert_overwrite_sql(arg_dict) %}\n\n {% do return(get_insert_overwrite_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.39972, "supported_languages": null}, "macro.dbt.get_incremental_default_sql": {"name": "get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_default_sql", "macro_sql": "{% macro get_incremental_default_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_default_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_incremental_default_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.399881, "supported_languages": null}, "macro.dbt.default__get_incremental_default_sql": {"name": "default__get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_default_sql", "macro_sql": "{% macro default__get_incremental_default_sql(arg_dict) %}\n\n {% do return(get_incremental_append_sql(arg_dict)) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4000058, "supported_languages": null}, "macro.dbt.get_incremental_microbatch_sql": {"name": "get_incremental_microbatch_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_microbatch_sql", "macro_sql": "{% macro get_incremental_microbatch_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_microbatch_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_incremental_microbatch_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.400157, "supported_languages": null}, "macro.dbt.default__get_incremental_microbatch_sql": {"name": "default__get_incremental_microbatch_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_microbatch_sql", "macro_sql": "{% macro default__get_incremental_microbatch_sql(arg_dict) %}\n\n {{ exceptions.raise_not_implemented('microbatch materialization strategy not implemented for adapter ' + adapter.type()) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4002922, "supported_languages": null}, "macro.dbt.get_insert_into_sql": {"name": "get_insert_into_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_insert_into_sql", "macro_sql": "{% macro get_insert_into_sql(target_relation, temp_relation, dest_columns) %}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n insert into {{ target_relation }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ temp_relation }}\n )\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.400526, "supported_languages": null}, "macro.dbt.materialization_incremental_default": {"name": "materialization_incremental_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/incremental.sql", "original_file_path": "macros/materializations/models/incremental/incremental.sql", "unique_id": "macro.dbt.materialization_incremental_default", "macro_sql": "{% materialization incremental, default -%}\n\n -- relations\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='table') -%}\n {%- set temp_relation = make_temp_relation(target_relation)-%}\n {%- set intermediate_relation = make_intermediate_relation(target_relation)-%}\n {%- set backup_relation_type = 'table' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n\n -- configs\n {%- set unique_key = config.get('unique_key') -%}\n {%- set full_refresh_mode = (should_full_refresh() or existing_relation.is_view) -%}\n {%- set on_schema_change = incremental_validate_on_schema_change(config.get('on_schema_change'), default='ignore') -%}\n\n -- the temp_ and backup_ relations should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation. This has to happen before\n -- BEGIN, in a separate transaction\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation)-%}\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set to_drop = [] %}\n\n {% set incremental_strategy = config.get('incremental_strategy') or 'default' %}\n {% set strategy_sql_macro_func = adapter.get_incremental_strategy_macro(context, incremental_strategy) %}\n\n {% if existing_relation is none %}\n {% set build_sql = get_create_table_as_sql(False, target_relation, sql) %}\n {% elif full_refresh_mode %}\n {% set build_sql = get_create_table_as_sql(False, intermediate_relation, sql) %}\n {% set need_swap = true %}\n {% else %}\n {% do run_query(get_create_table_as_sql(True, temp_relation, sql)) %}\n {% set contract_config = config.get('contract') %}\n {% if not contract_config or not contract_config.enforced %}\n {% do adapter.expand_target_column_types(\n from_relation=temp_relation,\n to_relation=target_relation) %}\n {% endif %}\n {#-- Process schema changes. Returns dict of changes if successful. Use source columns for upserting/merging --#}\n {% set dest_columns = process_schema_changes(on_schema_change, temp_relation, existing_relation) %}\n {% if not dest_columns %}\n {% set dest_columns = adapter.get_columns_in_relation(existing_relation) %}\n {% endif %}\n\n {#-- Get the incremental_strategy, the macro to use for the strategy, and build the sql --#}\n {% set incremental_predicates = config.get('predicates', none) or config.get('incremental_predicates', none) %}\n {% set strategy_arg_dict = ({'target_relation': target_relation, 'temp_relation': temp_relation, 'unique_key': unique_key, 'dest_columns': dest_columns, 'incremental_predicates': incremental_predicates }) %}\n {% set build_sql = strategy_sql_macro_func(strategy_arg_dict) %}\n\n {% endif %}\n\n {% call statement(\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% if need_swap %}\n {% do adapter.rename_relation(target_relation, backup_relation) %}\n {% do adapter.rename_relation(intermediate_relation, target_relation) %}\n {% do to_drop.append(backup_relation) %}\n {% endif %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if existing_relation is none or existing_relation.is_view or should_full_refresh() %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {% do adapter.commit() %}\n\n {% for rel in to_drop %}\n {% do adapter.drop_relation(rel) %}\n {% endfor %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_temp_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.should_full_refresh", "macro.dbt.incremental_validate_on_schema_change", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks", "macro.dbt.get_create_table_as_sql", "macro.dbt.run_query", "macro.dbt.process_schema_changes", "macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs", "macro.dbt.create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.404568, "supported_languages": ["sql"]}, "macro.dbt.incremental_validate_on_schema_change": {"name": "incremental_validate_on_schema_change", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.incremental_validate_on_schema_change", "macro_sql": "{% macro incremental_validate_on_schema_change(on_schema_change, default='ignore') %}\n\n {% if on_schema_change not in ['sync_all_columns', 'append_new_columns', 'fail', 'ignore'] %}\n\n {% set log_message = 'Invalid value for on_schema_change (%s) specified. Setting default value of %s.' % (on_schema_change, default) %}\n {% do log(log_message) %}\n\n {{ return(default) }}\n\n {% else %}\n\n {{ return(on_schema_change) }}\n\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4057012, "supported_languages": null}, "macro.dbt.check_for_schema_changes": {"name": "check_for_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.check_for_schema_changes", "macro_sql": "{% macro check_for_schema_changes(source_relation, target_relation) %}\n\n {% set schema_changed = False %}\n\n {%- set source_columns = adapter.get_columns_in_relation(source_relation) -%}\n {%- set target_columns = adapter.get_columns_in_relation(target_relation) -%}\n {%- set source_not_in_target = diff_columns(source_columns, target_columns) -%}\n {%- set target_not_in_source = diff_columns(target_columns, source_columns) -%}\n\n {% set new_target_types = diff_column_data_types(source_columns, target_columns) %}\n\n {% if source_not_in_target != [] %}\n {% set schema_changed = True %}\n {% elif target_not_in_source != [] or new_target_types != [] %}\n {% set schema_changed = True %}\n {% elif new_target_types != [] %}\n {% set schema_changed = True %}\n {% endif %}\n\n {% set changes_dict = {\n 'schema_changed': schema_changed,\n 'source_not_in_target': source_not_in_target,\n 'target_not_in_source': target_not_in_source,\n 'source_columns': source_columns,\n 'target_columns': target_columns,\n 'new_target_types': new_target_types\n } %}\n\n {% set msg %}\n In {{ target_relation }}:\n Schema changed: {{ schema_changed }}\n Source columns not in target: {{ source_not_in_target }}\n Target columns not in source: {{ target_not_in_source }}\n New column types: {{ new_target_types }}\n {% endset %}\n\n {% do log(msg) %}\n\n {{ return(changes_dict) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.diff_columns", "macro.dbt.diff_column_data_types"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4066901, "supported_languages": null}, "macro.dbt.sync_column_schemas": {"name": "sync_column_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.sync_column_schemas", "macro_sql": "{% macro sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n\n {%- set add_to_target_arr = schema_changes_dict['source_not_in_target'] -%}\n\n {%- if on_schema_change == 'append_new_columns'-%}\n {%- if add_to_target_arr | length > 0 -%}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, none) -%}\n {%- endif -%}\n\n {% elif on_schema_change == 'sync_all_columns' %}\n {%- set remove_from_target_arr = schema_changes_dict['target_not_in_source'] -%}\n {%- set new_target_types = schema_changes_dict['new_target_types'] -%}\n\n {% if add_to_target_arr | length > 0 or remove_from_target_arr | length > 0 %}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, remove_from_target_arr) -%}\n {% endif %}\n\n {% if new_target_types != [] %}\n {% for ntt in new_target_types %}\n {% set column_name = ntt['column_name'] %}\n {% set new_type = ntt['new_type'] %}\n {% do alter_column_type(target_relation, column_name, new_type) %}\n {% endfor %}\n {% endif %}\n\n {% endif %}\n\n {% set schema_change_message %}\n In {{ target_relation }}:\n Schema change approach: {{ on_schema_change }}\n Columns added: {{ add_to_target_arr }}\n Columns removed: {{ remove_from_target_arr }}\n Data types changed: {{ new_target_types }}\n {% endset %}\n\n {% do log(schema_change_message) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.alter_relation_add_remove_columns", "macro.dbt.alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.40767, "supported_languages": null}, "macro.dbt.process_schema_changes": {"name": "process_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.process_schema_changes", "macro_sql": "{% macro process_schema_changes(on_schema_change, source_relation, target_relation) %}\n\n {% if on_schema_change == 'ignore' %}\n\n {{ return({}) }}\n\n {% else %}\n\n {% set schema_changes_dict = check_for_schema_changes(source_relation, target_relation) %}\n\n {% if schema_changes_dict['schema_changed'] %}\n\n {% if on_schema_change == 'fail' %}\n\n {% set fail_msg %}\n The source and target schemas on this incremental model are out of sync!\n They can be reconciled in several ways:\n - set the `on_schema_change` config to either append_new_columns or sync_all_columns, depending on your situation.\n - Re-run the incremental model with `full_refresh: True` to update the target schema.\n - update the schema manually and re-run the process.\n\n Additional troubleshooting context:\n Source columns not in target: {{ schema_changes_dict['source_not_in_target'] }}\n Target columns not in source: {{ schema_changes_dict['target_not_in_source'] }}\n New column types: {{ schema_changes_dict['new_target_types'] }}\n {% endset %}\n\n {% do exceptions.raise_compiler_error(fail_msg) %}\n\n {# -- unless we ignore, run the sync operation per the config #}\n {% else %}\n\n {% do sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n\n {% endif %}\n\n {% endif %}\n\n {{ return(schema_changes_dict['source_columns']) }}\n\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.check_for_schema_changes", "macro.dbt.sync_column_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4083798, "supported_languages": null}, "macro.dbt.can_clone_table": {"name": "can_clone_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/can_clone_table.sql", "original_file_path": "macros/materializations/models/clone/can_clone_table.sql", "unique_id": "macro.dbt.can_clone_table", "macro_sql": "{% macro can_clone_table() %}\n {{ return(adapter.dispatch('can_clone_table', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__can_clone_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.408607, "supported_languages": null}, "macro.dbt.default__can_clone_table": {"name": "default__can_clone_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/can_clone_table.sql", "original_file_path": "macros/materializations/models/clone/can_clone_table.sql", "unique_id": "macro.dbt.default__can_clone_table", "macro_sql": "{% macro default__can_clone_table() %}\n {{ return(False) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.408714, "supported_languages": null}, "macro.dbt.create_or_replace_clone": {"name": "create_or_replace_clone", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/create_or_replace_clone.sql", "original_file_path": "macros/materializations/models/clone/create_or_replace_clone.sql", "unique_id": "macro.dbt.create_or_replace_clone", "macro_sql": "{% macro create_or_replace_clone(this_relation, defer_relation) %}\n {{ return(adapter.dispatch('create_or_replace_clone', 'dbt')(this_relation, defer_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_or_replace_clone"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.408979, "supported_languages": null}, "macro.dbt.default__create_or_replace_clone": {"name": "default__create_or_replace_clone", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/create_or_replace_clone.sql", "original_file_path": "macros/materializations/models/clone/create_or_replace_clone.sql", "unique_id": "macro.dbt.default__create_or_replace_clone", "macro_sql": "{% macro default__create_or_replace_clone(this_relation, defer_relation) %}\n create or replace table {{ this_relation.render() }} clone {{ defer_relation.render() }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.409128, "supported_languages": null}, "macro.dbt.materialization_clone_default": {"name": "materialization_clone_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/clone.sql", "original_file_path": "macros/materializations/models/clone/clone.sql", "unique_id": "macro.dbt.materialization_clone_default", "macro_sql": "{%- materialization clone, default -%}\n\n {%- set relations = {'relations': []} -%}\n\n {%- if not defer_relation -%}\n -- nothing to do\n {{ log(\"No relation found in state manifest for \" ~ model.unique_id, info=True) }}\n {{ return(relations) }}\n {%- endif -%}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n\n {%- if existing_relation and not flags.FULL_REFRESH -%}\n -- noop!\n {{ log(\"Relation \" ~ existing_relation ~ \" already exists\", info=True) }}\n {{ return(relations) }}\n {%- endif -%}\n\n {%- set other_existing_relation = load_cached_relation(defer_relation) -%}\n\n -- If this is a database that can do zero-copy cloning of tables, and the other relation is a table, then this will be a table\n -- Otherwise, this will be a view\n\n {% set can_clone_table = can_clone_table() %}\n\n {%- if other_existing_relation and other_existing_relation.type == 'table' and can_clone_table -%}\n\n {%- set target_relation = this.incorporate(type='table') -%}\n {% if existing_relation is not none and not existing_relation.is_table %}\n {{ log(\"Dropping relation \" ~ existing_relation.render() ~ \" because it is of type \" ~ existing_relation.type) }}\n {{ drop_relation_if_exists(existing_relation) }}\n {% endif %}\n\n -- as a general rule, data platforms that can clone tables can also do atomic 'create or replace'\n {% call statement('main') %}\n {% if target_relation and defer_relation and target_relation == defer_relation %}\n {{ log(\"Target relation and defer relation are the same, skipping clone for relation: \" ~ target_relation.render()) }}\n {% else %}\n {{ create_or_replace_clone(target_relation, defer_relation) }}\n {% endif %}\n\n {% endcall %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n {% do persist_docs(target_relation, model) %}\n\n {{ return({'relations': [target_relation]}) }}\n\n {%- else -%}\n\n {%- set target_relation = this.incorporate(type='view') -%}\n\n -- reuse the view materialization\n -- TODO: support actual dispatch for materialization macros\n -- Tracking ticket: https://github.com/dbt-labs/dbt-core/issues/7799\n {% set search_name = \"materialization_view_\" ~ adapter.type() %}\n {% if not search_name in context %}\n {% set search_name = \"materialization_view_default\" %}\n {% endif %}\n {% set materialization_macro = context[search_name] %}\n {% set relations = materialization_macro() %}\n {{ return(relations) }}\n\n {%- endif -%}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.can_clone_table", "macro.dbt.drop_relation_if_exists", "macro.dbt.statement", "macro.dbt.create_or_replace_clone", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.412045, "supported_languages": ["sql"]}, "macro.dbt.materialization_seed_default": {"name": "materialization_seed_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/seed.sql", "original_file_path": "macros/materializations/seeds/seed.sql", "unique_id": "macro.dbt.materialization_seed_default", "macro_sql": "{% materialization seed, default %}\n\n {%- set identifier = model['alias'] -%}\n {%- set full_refresh_mode = (should_full_refresh()) -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n\n {%- set exists_as_table = (old_relation is not none and old_relation.is_table) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set grant_config = config.get('grants') -%}\n {%- set agate_table = load_agate_table() -%}\n -- grab current tables grants config for comparison later on\n\n {%- do store_result('agate_table', response='OK', agate_table=agate_table) -%}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% set create_table_sql = \"\" %}\n {% if exists_as_view %}\n {{ exceptions.raise_compiler_error(\"Cannot seed to '{}', it is a view\".format(old_relation.render())) }}\n {% elif exists_as_table %}\n {% set create_table_sql = reset_csv_table(model, full_refresh_mode, old_relation, agate_table) %}\n {% else %}\n {% set create_table_sql = create_csv_table(model, agate_table) %}\n {% endif %}\n\n {% set code = 'CREATE' if full_refresh_mode else 'INSERT' %}\n {% set rows_affected = (agate_table.rows | length) %}\n {% set sql = load_csv_rows(model, agate_table) %}\n\n {% call noop_statement('main', code ~ ' ' ~ rows_affected, code, rows_affected) %}\n {{ get_csv_sql(create_table_sql, sql) }};\n {% endcall %}\n\n {% set target_relation = this.incorporate(type='table') %}\n\n {% set should_revoke = should_revoke(old_relation, full_refresh_mode) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if full_refresh_mode or not exists_as_table %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh", "macro.dbt.run_hooks", "macro.dbt.reset_csv_table", "macro.dbt.create_csv_table", "macro.dbt.load_csv_rows", "macro.dbt.noop_statement", "macro.dbt.get_csv_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs", "macro.dbt.create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.414623, "supported_languages": ["sql"]}, "macro.dbt.create_csv_table": {"name": "create_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.create_csv_table", "macro_sql": "{% macro create_csv_table(model, agate_table) -%}\n {{ adapter.dispatch('create_csv_table', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.415574, "supported_languages": null}, "macro.dbt.default__create_csv_table": {"name": "default__create_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__create_csv_table", "macro_sql": "{% macro default__create_csv_table(model, agate_table) %}\n {%- set column_override = model['config'].get('column_types', {}) -%}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n\n {% set sql %}\n create table {{ this.render() }} (\n {%- for col_name in agate_table.column_names -%}\n {%- set inferred_type = adapter.convert_type(agate_table, loop.index0) -%}\n {%- set type = column_override.get(col_name, inferred_type) -%}\n {%- set column_name = (col_name | string) -%}\n {{ adapter.quote_seed_column(column_name, quote_seed_column) }} {{ type }} {%- if not loop.last -%}, {%- endif -%}\n {%- endfor -%}\n )\n {% endset %}\n\n {% call statement('_') -%}\n {{ sql }}\n {%- endcall %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.416356, "supported_languages": null}, "macro.dbt.reset_csv_table": {"name": "reset_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.reset_csv_table", "macro_sql": "{% macro reset_csv_table(model, full_refresh, old_relation, agate_table) -%}\n {{ adapter.dispatch('reset_csv_table', 'dbt')(model, full_refresh, old_relation, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__reset_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4165592, "supported_languages": null}, "macro.dbt.default__reset_csv_table": {"name": "default__reset_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__reset_csv_table", "macro_sql": "{% macro default__reset_csv_table(model, full_refresh, old_relation, agate_table) %}\n {% set sql = \"\" %}\n {% if full_refresh %}\n {{ adapter.drop_relation(old_relation) }}\n {% set sql = create_csv_table(model, agate_table) %}\n {% else %}\n {{ adapter.truncate_relation(old_relation) }}\n {% set sql = \"truncate table \" ~ old_relation.render() %}\n {% endif %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.416982, "supported_languages": null}, "macro.dbt.get_csv_sql": {"name": "get_csv_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_csv_sql", "macro_sql": "{% macro get_csv_sql(create_or_truncate_sql, insert_sql) %}\n {{ adapter.dispatch('get_csv_sql', 'dbt')(create_or_truncate_sql, insert_sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_csv_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.417155, "supported_languages": null}, "macro.dbt.default__get_csv_sql": {"name": "default__get_csv_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_csv_sql", "macro_sql": "{% macro default__get_csv_sql(create_or_truncate_sql, insert_sql) %}\n {{ create_or_truncate_sql }};\n -- dbt seed --\n {{ insert_sql }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4172852, "supported_languages": null}, "macro.dbt.get_binding_char": {"name": "get_binding_char", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_binding_char", "macro_sql": "{% macro get_binding_char() -%}\n {{ adapter.dispatch('get_binding_char', 'dbt')() }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.417414, "supported_languages": null}, "macro.dbt.default__get_binding_char": {"name": "default__get_binding_char", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_binding_char", "macro_sql": "{% macro default__get_binding_char() %}\n {{ return('%s') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.417516, "supported_languages": null}, "macro.dbt.get_batch_size": {"name": "get_batch_size", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_batch_size", "macro_sql": "{% macro get_batch_size() -%}\n {{ return(adapter.dispatch('get_batch_size', 'dbt')()) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_batch_size"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.417662, "supported_languages": null}, "macro.dbt.default__get_batch_size": {"name": "default__get_batch_size", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_batch_size", "macro_sql": "{% macro default__get_batch_size() %}\n {{ return(10000) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.41777, "supported_languages": null}, "macro.dbt.get_seed_column_quoted_csv": {"name": "get_seed_column_quoted_csv", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_seed_column_quoted_csv", "macro_sql": "{% macro get_seed_column_quoted_csv(model, column_names) %}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote_seed_column(col, quote_seed_column)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4181812, "supported_languages": null}, "macro.dbt.load_csv_rows": {"name": "load_csv_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.load_csv_rows", "macro_sql": "{% macro load_csv_rows(model, agate_table) -%}\n {{ adapter.dispatch('load_csv_rows', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__load_csv_rows"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4183412, "supported_languages": null}, "macro.dbt.default__load_csv_rows": {"name": "default__load_csv_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__load_csv_rows", "macro_sql": "{% macro default__load_csv_rows(model, agate_table) %}\n\n {% set batch_size = get_batch_size() %}\n\n {% set cols_sql = get_seed_column_quoted_csv(model, agate_table.column_names) %}\n {% set bindings = [] %}\n\n {% set statements = [] %}\n\n {% for chunk in agate_table.rows | batch(batch_size) %}\n {% set bindings = [] %}\n\n {% for row in chunk %}\n {% do bindings.extend(row) %}\n {% endfor %}\n\n {% set sql %}\n insert into {{ this.render() }} ({{ cols_sql }}) values\n {% for row in chunk -%}\n ({%- for column in agate_table.column_names -%}\n {{ get_binding_char() }}\n {%- if not loop.last%},{%- endif %}\n {%- endfor -%})\n {%- if not loop.last%},{%- endif %}\n {%- endfor %}\n {% endset %}\n\n {% do adapter.add_query(sql, bindings=bindings, abridge_sql_log=True) %}\n\n {% if loop.index0 == 0 %}\n {% do statements.append(sql) %}\n {% endif %}\n {% endfor %}\n\n {# Return SQL so we can render it out into the compiled files #}\n {{ return(statements[0]) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_batch_size", "macro.dbt.get_seed_column_quoted_csv", "macro.dbt.get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.41939, "supported_languages": null}, "macro.dbt.generate_alias_name": {"name": "generate_alias_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "unique_id": "macro.dbt.generate_alias_name", "macro_sql": "{% macro generate_alias_name(custom_alias_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_alias_name', 'dbt')(custom_alias_name, node)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_alias_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.419743, "supported_languages": null}, "macro.dbt.default__generate_alias_name": {"name": "default__generate_alias_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "unique_id": "macro.dbt.default__generate_alias_name", "macro_sql": "{% macro default__generate_alias_name(custom_alias_name=none, node=none) -%}\n\n {%- if custom_alias_name -%}\n\n {{ custom_alias_name | trim }}\n\n {%- elif node.version -%}\n\n {{ return(node.name ~ \"_v\" ~ (node.version | replace(\".\", \"_\"))) }}\n\n {%- else -%}\n\n {{ node.name }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.420086, "supported_languages": null}, "macro.dbt.generate_schema_name": {"name": "generate_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.generate_schema_name", "macro_sql": "{% macro generate_schema_name(custom_schema_name=none, node=none) -%}\n {{ return(adapter.dispatch('generate_schema_name', 'dbt')(custom_schema_name, node)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4205089, "supported_languages": null}, "macro.dbt.default__generate_schema_name": {"name": "default__generate_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.default__generate_schema_name", "macro_sql": "{% macro default__generate_schema_name(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if custom_schema_name is none -%}\n\n {{ default_schema }}\n\n {%- else -%}\n\n {{ default_schema }}_{{ custom_schema_name | trim }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4207418, "supported_languages": null}, "macro.dbt.generate_schema_name_for_env": {"name": "generate_schema_name_for_env", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.generate_schema_name_for_env", "macro_sql": "{% macro generate_schema_name_for_env(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if target.name == 'prod' and custom_schema_name is not none -%}\n\n {{ custom_schema_name | trim }}\n\n {%- else -%}\n\n {{ default_schema }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.420995, "supported_languages": null}, "macro.dbt.generate_database_name": {"name": "generate_database_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "unique_id": "macro.dbt.generate_database_name", "macro_sql": "{% macro generate_database_name(custom_database_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_database_name', 'dbt')(custom_database_name, node)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_database_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4213262, "supported_languages": null}, "macro.dbt.default__generate_database_name": {"name": "default__generate_database_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "unique_id": "macro.dbt.default__generate_database_name", "macro_sql": "{% macro default__generate_database_name(custom_database_name=none, node=none) -%}\n {%- set default_database = target.database -%}\n {%- if custom_database_name is none -%}\n\n {{ default_database }}\n\n {%- else -%}\n\n {{ custom_database_name }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.421551, "supported_languages": null}, "macro.dbt.get_drop_sql": {"name": "get_drop_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.get_drop_sql", "macro_sql": "{%- macro get_drop_sql(relation) -%}\n {{- log('Applying DROP to: ' ~ relation) -}}\n {{- adapter.dispatch('get_drop_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.422036, "supported_languages": null}, "macro.dbt.default__get_drop_sql": {"name": "default__get_drop_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.default__get_drop_sql", "macro_sql": "{%- macro default__get_drop_sql(relation) -%}\n\n {%- if relation.is_view -%}\n {{ drop_view(relation) }}\n\n {%- elif relation.is_table -%}\n {{ drop_table(relation) }}\n\n {%- elif relation.is_materialized_view -%}\n {{ drop_materialized_view(relation) }}\n\n {%- else -%}\n drop {{ relation.type }} if exists {{ relation.render() }} cascade\n\n {%- endif -%}\n\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.drop_view", "macro.dbt.drop_table", "macro.dbt.drop_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.422383, "supported_languages": null}, "macro.dbt.drop_relation": {"name": "drop_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.drop_relation", "macro_sql": "{% macro drop_relation(relation) -%}\n {{ return(adapter.dispatch('drop_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__drop_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.422554, "supported_languages": null}, "macro.dbt.default__drop_relation": {"name": "default__drop_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.default__drop_relation", "macro_sql": "{% macro default__drop_relation(relation) -%}\n {% call statement('drop_relation', auto_begin=False) -%}\n {{ get_drop_sql(relation) }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.422733, "supported_languages": null}, "macro.dbt.drop_relation_if_exists": {"name": "drop_relation_if_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.drop_relation_if_exists", "macro_sql": "{% macro drop_relation_if_exists(relation) %}\n {% if relation is not none %}\n {{ adapter.drop_relation(relation) }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.42291, "supported_languages": null}, "macro.dbt.get_replace_sql": {"name": "get_replace_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/replace.sql", "original_file_path": "macros/relations/replace.sql", "unique_id": "macro.dbt.get_replace_sql", "macro_sql": "{% macro get_replace_sql(existing_relation, target_relation, sql) %}\n {{- log('Applying REPLACE to: ' ~ existing_relation) -}}\n {{- adapter.dispatch('get_replace_sql', 'dbt')(existing_relation, target_relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_replace_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4234722, "supported_languages": null}, "macro.dbt.default__get_replace_sql": {"name": "default__get_replace_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/replace.sql", "original_file_path": "macros/relations/replace.sql", "unique_id": "macro.dbt.default__get_replace_sql", "macro_sql": "{% macro default__get_replace_sql(existing_relation, target_relation, sql) %}\n\n {# /* use a create or replace statement if possible */ #}\n\n {% set is_replaceable = existing_relation.type == target_relation.type and existing_relation.can_be_replaced %}\n\n {% if is_replaceable and existing_relation.is_view %}\n {{ get_replace_view_sql(target_relation, sql) }}\n\n {% elif is_replaceable and existing_relation.is_table %}\n {{ get_replace_table_sql(target_relation, sql) }}\n\n {% elif is_replaceable and existing_relation.is_materialized_view %}\n {{ get_replace_materialized_view_sql(target_relation, sql) }}\n\n {# /* a create or replace statement is not possible, so try to stage and/or backup to be safe */ #}\n\n {# /* create target_relation as an intermediate relation, then swap it out with the existing one using a backup */ #}\n {%- elif target_relation.can_be_renamed and existing_relation.can_be_renamed -%}\n {{ get_create_intermediate_sql(target_relation, sql) }};\n {{ get_create_backup_sql(existing_relation) }};\n {{ get_rename_intermediate_sql(target_relation) }};\n {{ get_drop_backup_sql(existing_relation) }}\n\n {# /* create target_relation as an intermediate relation, then swap it out with the existing one without using a backup */ #}\n {%- elif target_relation.can_be_renamed -%}\n {{ get_create_intermediate_sql(target_relation, sql) }};\n {{ get_drop_sql(existing_relation) }};\n {{ get_rename_intermediate_sql(target_relation) }}\n\n {# /* create target_relation in place by first backing up the existing relation */ #}\n {%- elif existing_relation.can_be_renamed -%}\n {{ get_create_backup_sql(existing_relation) }};\n {{ get_create_sql(target_relation, sql) }};\n {{ get_drop_backup_sql(existing_relation) }}\n\n {# /* no renaming is allowed, so just drop and create */ #}\n {%- else -%}\n {{ get_drop_sql(existing_relation) }};\n {{ get_create_sql(target_relation, sql) }}\n\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_replace_view_sql", "macro.dbt.get_replace_table_sql", "macro.dbt.get_replace_materialized_view_sql", "macro.dbt.get_create_intermediate_sql", "macro.dbt.get_create_backup_sql", "macro.dbt.get_rename_intermediate_sql", "macro.dbt.get_drop_backup_sql", "macro.dbt.get_drop_sql", "macro.dbt.get_create_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.424601, "supported_languages": null}, "macro.dbt.get_create_intermediate_sql": {"name": "get_create_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_intermediate.sql", "original_file_path": "macros/relations/create_intermediate.sql", "unique_id": "macro.dbt.get_create_intermediate_sql", "macro_sql": "{%- macro get_create_intermediate_sql(relation, sql) -%}\n {{- log('Applying CREATE INTERMEDIATE to: ' ~ relation) -}}\n {{- adapter.dispatch('get_create_intermediate_sql', 'dbt')(relation, sql) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_create_intermediate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.424914, "supported_languages": null}, "macro.dbt.default__get_create_intermediate_sql": {"name": "default__get_create_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_intermediate.sql", "original_file_path": "macros/relations/create_intermediate.sql", "unique_id": "macro.dbt.default__get_create_intermediate_sql", "macro_sql": "{%- macro default__get_create_intermediate_sql(relation, sql) -%}\n\n -- get the standard intermediate name\n {% set intermediate_relation = make_intermediate_relation(relation) %}\n\n -- drop any pre-existing intermediate\n {{ get_drop_sql(intermediate_relation) }};\n\n {{ get_create_sql(intermediate_relation, sql) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.make_intermediate_relation", "macro.dbt.get_drop_sql", "macro.dbt.get_create_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.42514, "supported_languages": null}, "macro.dbt.drop_schema_named": {"name": "drop_schema_named", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/schema.sql", "original_file_path": "macros/relations/schema.sql", "unique_id": "macro.dbt.drop_schema_named", "macro_sql": "{% macro drop_schema_named(schema_name) %}\n {{ return(adapter.dispatch('drop_schema_named', 'dbt') (schema_name)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__drop_schema_named"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4253812, "supported_languages": null}, "macro.dbt.default__drop_schema_named": {"name": "default__drop_schema_named", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/schema.sql", "original_file_path": "macros/relations/schema.sql", "unique_id": "macro.dbt.default__drop_schema_named", "macro_sql": "{% macro default__drop_schema_named(schema_name) %}\n {% set schema_relation = api.Relation.create(schema=schema_name) %}\n {{ adapter.drop_schema(schema_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.425565, "supported_languages": null}, "macro.dbt.get_drop_backup_sql": {"name": "get_drop_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop_backup.sql", "original_file_path": "macros/relations/drop_backup.sql", "unique_id": "macro.dbt.get_drop_backup_sql", "macro_sql": "{%- macro get_drop_backup_sql(relation) -%}\n {{- log('Applying DROP BACKUP to: ' ~ relation) -}}\n {{- adapter.dispatch('get_drop_backup_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_drop_backup_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.425844, "supported_languages": null}, "macro.dbt.default__get_drop_backup_sql": {"name": "default__get_drop_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop_backup.sql", "original_file_path": "macros/relations/drop_backup.sql", "unique_id": "macro.dbt.default__get_drop_backup_sql", "macro_sql": "{%- macro default__get_drop_backup_sql(relation) -%}\n\n -- get the standard backup name\n {% set backup_relation = make_backup_relation(relation, relation.type) %}\n\n {{ get_drop_sql(backup_relation) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.make_backup_relation", "macro.dbt.get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.426019, "supported_languages": null}, "macro.dbt.get_rename_sql": {"name": "get_rename_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.get_rename_sql", "macro_sql": "{%- macro get_rename_sql(relation, new_name) -%}\n {{- log('Applying RENAME to: ' ~ relation) -}}\n {{- adapter.dispatch('get_rename_sql', 'dbt')(relation, new_name) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4264472, "supported_languages": null}, "macro.dbt.default__get_rename_sql": {"name": "default__get_rename_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.default__get_rename_sql", "macro_sql": "{%- macro default__get_rename_sql(relation, new_name) -%}\n\n {%- if relation.is_view -%}\n {{ get_rename_view_sql(relation, new_name) }}\n\n {%- elif relation.is_table -%}\n {{ get_rename_table_sql(relation, new_name) }}\n\n {%- elif relation.is_materialized_view -%}\n {{ get_rename_materialized_view_sql(relation, new_name) }}\n\n {%- else -%}\n {{- exceptions.raise_compiler_error(\"`get_rename_sql` has not been implemented for: \" ~ relation.type ) -}}\n\n {%- endif -%}\n\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.get_rename_view_sql", "macro.dbt.get_rename_table_sql", "macro.dbt.get_rename_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4268138, "supported_languages": null}, "macro.dbt.rename_relation": {"name": "rename_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.rename_relation", "macro_sql": "{% macro rename_relation(from_relation, to_relation) -%}\n {{ return(adapter.dispatch('rename_relation', 'dbt')(from_relation, to_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__rename_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.426989, "supported_languages": null}, "macro.dbt.default__rename_relation": {"name": "default__rename_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.default__rename_relation", "macro_sql": "{% macro default__rename_relation(from_relation, to_relation) -%}\n {% set target_name = adapter.quote_as_configured(to_relation.identifier, 'identifier') %}\n {% call statement('rename_relation') -%}\n alter table {{ from_relation.render() }} rename to {{ target_name }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4272408, "supported_languages": null}, "macro.dbt.get_create_backup_sql": {"name": "get_create_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_backup.sql", "original_file_path": "macros/relations/create_backup.sql", "unique_id": "macro.dbt.get_create_backup_sql", "macro_sql": "{%- macro get_create_backup_sql(relation) -%}\n {{- log('Applying CREATE BACKUP to: ' ~ relation) -}}\n {{- adapter.dispatch('get_create_backup_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_create_backup_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.427528, "supported_languages": null}, "macro.dbt.default__get_create_backup_sql": {"name": "default__get_create_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_backup.sql", "original_file_path": "macros/relations/create_backup.sql", "unique_id": "macro.dbt.default__get_create_backup_sql", "macro_sql": "{%- macro default__get_create_backup_sql(relation) -%}\n\n -- get the standard backup name\n {% set backup_relation = make_backup_relation(relation, relation.type) %}\n\n -- drop any pre-existing backup\n {{ get_drop_sql(backup_relation) }};\n\n {{ get_rename_sql(relation, backup_relation.identifier) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.make_backup_relation", "macro.dbt.get_drop_sql", "macro.dbt.get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.427755, "supported_languages": null}, "macro.dbt.get_create_sql": {"name": "get_create_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create.sql", "original_file_path": "macros/relations/create.sql", "unique_id": "macro.dbt.get_create_sql", "macro_sql": "{%- macro get_create_sql(relation, sql) -%}\n {{- log('Applying CREATE to: ' ~ relation) -}}\n {{- adapter.dispatch('get_create_sql', 'dbt')(relation, sql) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_create_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.428088, "supported_languages": null}, "macro.dbt.default__get_create_sql": {"name": "default__get_create_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create.sql", "original_file_path": "macros/relations/create.sql", "unique_id": "macro.dbt.default__get_create_sql", "macro_sql": "{%- macro default__get_create_sql(relation, sql) -%}\n\n {%- if relation.is_view -%}\n {{ get_create_view_as_sql(relation, sql) }}\n\n {%- elif relation.is_table -%}\n {{ get_create_table_as_sql(False, relation, sql) }}\n\n {%- elif relation.is_materialized_view -%}\n {{ get_create_materialized_view_as_sql(relation, sql) }}\n\n {%- else -%}\n {{- exceptions.raise_compiler_error(\"`get_create_sql` has not been implemented for: \" ~ relation.type ) -}}\n\n {%- endif -%}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.get_create_view_as_sql", "macro.dbt.get_create_table_as_sql", "macro.dbt.get_create_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.428472, "supported_languages": null}, "macro.dbt.get_rename_intermediate_sql": {"name": "get_rename_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename_intermediate.sql", "original_file_path": "macros/relations/rename_intermediate.sql", "unique_id": "macro.dbt.get_rename_intermediate_sql", "macro_sql": "{%- macro get_rename_intermediate_sql(relation) -%}\n {{- log('Applying RENAME INTERMEDIATE to: ' ~ relation) -}}\n {{- adapter.dispatch('get_rename_intermediate_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_rename_intermediate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.428739, "supported_languages": null}, "macro.dbt.default__get_rename_intermediate_sql": {"name": "default__get_rename_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename_intermediate.sql", "original_file_path": "macros/relations/rename_intermediate.sql", "unique_id": "macro.dbt.default__get_rename_intermediate_sql", "macro_sql": "{%- macro default__get_rename_intermediate_sql(relation) -%}\n\n -- get the standard intermediate name\n {% set intermediate_relation = make_intermediate_relation(relation) %}\n\n {{ get_rename_sql(intermediate_relation, relation.identifier) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.make_intermediate_relation", "macro.dbt.get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.42893, "supported_languages": null}, "macro.dbt.drop_materialized_view": {"name": "drop_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt.drop_materialized_view", "macro_sql": "{% macro drop_materialized_view(relation) -%}\n {{- adapter.dispatch('drop_materialized_view', 'dbt')(relation) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4291599, "supported_languages": null}, "macro.dbt.default__drop_materialized_view": {"name": "default__drop_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt.default__drop_materialized_view", "macro_sql": "{% macro default__drop_materialized_view(relation) -%}\n drop materialized view if exists {{ relation.render() }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.429269, "supported_languages": null}, "macro.dbt.get_replace_materialized_view_sql": {"name": "get_replace_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/replace.sql", "original_file_path": "macros/relations/materialized_view/replace.sql", "unique_id": "macro.dbt.get_replace_materialized_view_sql", "macro_sql": "{% macro get_replace_materialized_view_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_materialized_view_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_replace_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.429579, "supported_languages": null}, "macro.dbt.default__get_replace_materialized_view_sql": {"name": "default__get_replace_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/replace.sql", "original_file_path": "macros/relations/materialized_view/replace.sql", "unique_id": "macro.dbt.default__get_replace_materialized_view_sql", "macro_sql": "{% macro default__get_replace_materialized_view_sql(relation, sql) %}\n {{ exceptions.raise_compiler_error(\n \"`get_replace_materialized_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.429706, "supported_languages": null}, "macro.dbt.refresh_materialized_view": {"name": "refresh_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt.refresh_materialized_view", "macro_sql": "{% macro refresh_materialized_view(relation) %}\n {{- log('Applying REFRESH to: ' ~ relation) -}}\n {{- adapter.dispatch('refresh_materialized_view', 'dbt')(relation) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__refresh_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.429966, "supported_languages": null}, "macro.dbt.default__refresh_materialized_view": {"name": "default__refresh_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt.default__refresh_materialized_view", "macro_sql": "{% macro default__refresh_materialized_view(relation) %}\n {{ exceptions.raise_compiler_error(\"`refresh_materialized_view` has not been implemented for this adapter.\") }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.430082, "supported_languages": null}, "macro.dbt.get_rename_materialized_view_sql": {"name": "get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt.get_rename_materialized_view_sql", "macro_sql": "{% macro get_rename_materialized_view_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_materialized_view_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_rename_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.430321, "supported_languages": null}, "macro.dbt.default__get_rename_materialized_view_sql": {"name": "default__get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt.default__get_rename_materialized_view_sql", "macro_sql": "{% macro default__get_rename_materialized_view_sql(relation, new_name) %}\n {{ exceptions.raise_compiler_error(\n \"`get_rename_materialized_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.430445, "supported_languages": null}, "macro.dbt.get_alter_materialized_view_as_sql": {"name": "get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.get_alter_materialized_view_as_sql", "macro_sql": "{% macro get_alter_materialized_view_as_sql(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n) %}\n {{- log('Applying ALTER to: ' ~ relation) -}}\n {{- adapter.dispatch('get_alter_materialized_view_as_sql', 'dbt')(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n ) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.430954, "supported_languages": null}, "macro.dbt.default__get_alter_materialized_view_as_sql": {"name": "default__get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.default__get_alter_materialized_view_as_sql", "macro_sql": "{% macro default__get_alter_materialized_view_as_sql(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n) %}\n {{ exceptions.raise_compiler_error(\"Materialized views have not been implemented for this adapter.\") }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.431115, "supported_languages": null}, "macro.dbt.get_materialized_view_configuration_changes": {"name": "get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.get_materialized_view_configuration_changes", "macro_sql": "{% macro get_materialized_view_configuration_changes(existing_relation, new_config) %}\n /* {#\n It's recommended that configuration changes be formatted as follows:\n {\"\": [{\"action\": \"\", \"context\": ...}]}\n\n For example:\n {\n \"indexes\": [\n {\"action\": \"drop\", \"context\": \"index_abc\"},\n {\"action\": \"create\", \"context\": {\"columns\": [\"column_1\", \"column_2\"], \"type\": \"hash\", \"unique\": True}},\n ],\n }\n\n Either way, `get_materialized_view_configuration_changes` needs to align with `get_alter_materialized_view_as_sql`.\n #} */\n {{- log('Determining configuration changes on: ' ~ existing_relation) -}}\n {%- do return(adapter.dispatch('get_materialized_view_configuration_changes', 'dbt')(existing_relation, new_config)) -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_materialized_view_configuration_changes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4313579, "supported_languages": null}, "macro.dbt.default__get_materialized_view_configuration_changes": {"name": "default__get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.default__get_materialized_view_configuration_changes", "macro_sql": "{% macro default__get_materialized_view_configuration_changes(existing_relation, new_config) %}\n {{ exceptions.raise_compiler_error(\"Materialized views have not been implemented for this adapter.\") }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4314828, "supported_languages": null}, "macro.dbt.get_create_materialized_view_as_sql": {"name": "get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt.get_create_materialized_view_as_sql", "macro_sql": "{% macro get_create_materialized_view_as_sql(relation, sql) -%}\n {{- adapter.dispatch('get_create_materialized_view_as_sql', 'dbt')(relation, sql) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_create_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.431821, "supported_languages": null}, "macro.dbt.default__get_create_materialized_view_as_sql": {"name": "default__get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt.default__get_create_materialized_view_as_sql", "macro_sql": "{% macro default__get_create_materialized_view_as_sql(relation, sql) -%}\n {{ exceptions.raise_compiler_error(\n \"`get_create_materialized_view_as_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4320471, "supported_languages": null}, "macro.dbt.get_table_columns_and_constraints": {"name": "get_table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.get_table_columns_and_constraints", "macro_sql": "{%- macro get_table_columns_and_constraints() -%}\n {{ adapter.dispatch('get_table_columns_and_constraints', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_table_columns_and_constraints"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4328692, "supported_languages": null}, "macro.dbt.default__get_table_columns_and_constraints": {"name": "default__get_table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__get_table_columns_and_constraints", "macro_sql": "{% macro default__get_table_columns_and_constraints() -%}\n {{ return(table_columns_and_constraints()) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.table_columns_and_constraints"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.432995, "supported_languages": null}, "macro.dbt.table_columns_and_constraints": {"name": "table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.table_columns_and_constraints", "macro_sql": "{% macro table_columns_and_constraints() %}\n {# loop through user_provided_columns to create DDL with data types and constraints #}\n {%- set raw_column_constraints = adapter.render_raw_columns_constraints(raw_columns=model['columns']) -%}\n {%- set raw_model_constraints = adapter.render_raw_model_constraints(raw_constraints=model['constraints']) -%}\n (\n {% for c in raw_column_constraints -%}\n {{ c }}{{ \",\" if not loop.last or raw_model_constraints }}\n {% endfor %}\n {% for c in raw_model_constraints -%}\n {{ c }}{{ \",\" if not loop.last }}\n {% endfor -%}\n )\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.433565, "supported_languages": null}, "macro.dbt.get_assert_columns_equivalent": {"name": "get_assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.get_assert_columns_equivalent", "macro_sql": "\n\n{%- macro get_assert_columns_equivalent(sql) -%}\n {{ adapter.dispatch('get_assert_columns_equivalent', 'dbt')(sql) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.433735, "supported_languages": null}, "macro.dbt.default__get_assert_columns_equivalent": {"name": "default__get_assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__get_assert_columns_equivalent", "macro_sql": "{% macro default__get_assert_columns_equivalent(sql) -%}\n {{ return(assert_columns_equivalent(sql)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.433862, "supported_languages": null}, "macro.dbt.assert_columns_equivalent": {"name": "assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.assert_columns_equivalent", "macro_sql": "{% macro assert_columns_equivalent(sql) %}\n\n {#-- First ensure the user has defined 'columns' in yaml specification --#}\n {%- set user_defined_columns = model['columns'] -%}\n {%- if not user_defined_columns -%}\n {{ exceptions.raise_contract_error([], []) }}\n {%- endif -%}\n\n {#-- Obtain the column schema provided by sql file. #}\n {%- set sql_file_provided_columns = get_column_schema_from_query(sql, config.get('sql_header', none)) -%}\n {#--Obtain the column schema provided by the schema file by generating an 'empty schema' query from the model's columns. #}\n {%- set schema_file_provided_columns = get_column_schema_from_query(get_empty_schema_sql(user_defined_columns)) -%}\n\n {#-- create dictionaries with name and formatted data type and strings for exception #}\n {%- set sql_columns = format_columns(sql_file_provided_columns) -%}\n {%- set yaml_columns = format_columns(schema_file_provided_columns) -%}\n\n {%- if sql_columns|length != yaml_columns|length -%}\n {%- do exceptions.raise_contract_error(yaml_columns, sql_columns) -%}\n {%- endif -%}\n\n {%- for sql_col in sql_columns -%}\n {%- set yaml_col = [] -%}\n {%- for this_col in yaml_columns -%}\n {%- if this_col['name'] == sql_col['name'] -%}\n {%- do yaml_col.append(this_col) -%}\n {%- break -%}\n {%- endif -%}\n {%- endfor -%}\n {%- if not yaml_col -%}\n {#-- Column with name not found in yaml #}\n {%- do exceptions.raise_contract_error(yaml_columns, sql_columns) -%}\n {%- endif -%}\n {%- if sql_col['formatted'] != yaml_col[0]['formatted'] -%}\n {#-- Column data types don't match #}\n {%- do exceptions.raise_contract_error(yaml_columns, sql_columns) -%}\n {%- endif -%}\n {%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_column_schema_from_query", "macro.dbt.get_empty_schema_sql", "macro.dbt.format_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.435039, "supported_languages": null}, "macro.dbt.format_columns": {"name": "format_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.format_columns", "macro_sql": "{% macro format_columns(columns) %}\n {% set formatted_columns = [] %}\n {% for column in columns %}\n {%- set formatted_column = adapter.dispatch('format_column', 'dbt')(column) -%}\n {%- do formatted_columns.append(formatted_column) -%}\n {% endfor %}\n {{ return(formatted_columns) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__format_column"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.435359, "supported_languages": null}, "macro.dbt.default__format_column": {"name": "default__format_column", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__format_column", "macro_sql": "{% macro default__format_column(column) -%}\n {% set data_type = column.dtype %}\n {% set formatted = column.column.lower() ~ \" \" ~ data_type %}\n {{ return({'name': column.name, 'data_type': data_type, 'formatted': formatted}) }}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.435644, "supported_languages": null}, "macro.dbt.drop_table": {"name": "drop_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt.drop_table", "macro_sql": "{% macro drop_table(relation) -%}\n {{- adapter.dispatch('drop_table', 'dbt')(relation) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.435884, "supported_languages": null}, "macro.dbt.default__drop_table": {"name": "default__drop_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt.default__drop_table", "macro_sql": "{% macro default__drop_table(relation) -%}\n drop table if exists {{ relation.render() }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4359932, "supported_languages": null}, "macro.dbt.get_replace_table_sql": {"name": "get_replace_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt.get_replace_table_sql", "macro_sql": "{% macro get_replace_table_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_table_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_replace_table_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4362319, "supported_languages": null}, "macro.dbt.default__get_replace_table_sql": {"name": "default__get_replace_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt.default__get_replace_table_sql", "macro_sql": "{% macro default__get_replace_table_sql(relation, sql) %}\n {{ exceptions.raise_compiler_error(\n \"`get_replace_table_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.43636, "supported_languages": null}, "macro.dbt.get_rename_table_sql": {"name": "get_rename_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt.get_rename_table_sql", "macro_sql": "{% macro get_rename_table_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_table_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_rename_table_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4365928, "supported_languages": null}, "macro.dbt.default__get_rename_table_sql": {"name": "default__get_rename_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt.default__get_rename_table_sql", "macro_sql": "{% macro default__get_rename_table_sql(relation, new_name) %}\n {{ exceptions.raise_compiler_error(\n \"`get_rename_table_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.436718, "supported_languages": null}, "macro.dbt.get_create_table_as_sql": {"name": "get_create_table_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.get_create_table_as_sql", "macro_sql": "{% macro get_create_table_as_sql(temporary, relation, sql) -%}\n {{ adapter.dispatch('get_create_table_as_sql', 'dbt')(temporary, relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_create_table_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.437334, "supported_languages": null}, "macro.dbt.default__get_create_table_as_sql": {"name": "default__get_create_table_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_create_table_as_sql", "macro_sql": "{% macro default__get_create_table_as_sql(temporary, relation, sql) -%}\n {{ return(create_table_as(temporary, relation, sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4374988, "supported_languages": null}, "macro.dbt.create_table_as": {"name": "create_table_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.create_table_as", "macro_sql": "{% macro create_table_as(temporary, relation, compiled_code, language='sql') -%}\n {# backward compatibility for create_table_as that does not support language #}\n {% if language == \"sql\" %}\n {{ adapter.dispatch('create_table_as', 'dbt')(temporary, relation, compiled_code)}}\n {% else %}\n {{ adapter.dispatch('create_table_as', 'dbt')(temporary, relation, compiled_code, language) }}\n {% endif %}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.437885, "supported_languages": null}, "macro.dbt.default__create_table_as": {"name": "default__create_table_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__create_table_as", "macro_sql": "{% macro default__create_table_as(temporary, relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create {% if temporary: -%}temporary{%- endif %} table\n {{ relation.include(database=(not temporary), schema=(not temporary)) }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced and (not temporary) %}\n {{ get_assert_columns_equivalent(sql) }}\n {{ get_table_columns_and_constraints() }}\n {%- set sql = get_select_subquery(sql) %}\n {% endif %}\n as (\n {{ sql }}\n );\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent", "macro.dbt.get_table_columns_and_constraints", "macro.dbt.get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4384892, "supported_languages": null}, "macro.dbt.default__get_column_names": {"name": "default__get_column_names", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_column_names", "macro_sql": "{% macro default__get_column_names() %}\n {#- loop through user_provided_columns to get column names -#}\n {%- set user_provided_columns = model['columns'] -%}\n {%- for i in user_provided_columns %}\n {%- set col = user_provided_columns[i] -%}\n {%- set col_name = adapter.quote(col['name']) if col.get('quote') else col['name'] -%}\n {{ col_name }}{{ \", \" if not loop.last }}\n {%- endfor -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4389, "supported_languages": null}, "macro.dbt.get_select_subquery": {"name": "get_select_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.get_select_subquery", "macro_sql": "{% macro get_select_subquery(sql) %}\n {{ return(adapter.dispatch('get_select_subquery', 'dbt')(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.439063, "supported_languages": null}, "macro.dbt.default__get_select_subquery": {"name": "default__get_select_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_select_subquery", "macro_sql": "{% macro default__get_select_subquery(sql) %}\n select {{ adapter.dispatch('get_column_names', 'dbt')() }}\n from (\n {{ sql }}\n ) as model_subq\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_column_names"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.439219, "supported_languages": null}, "macro.dbt.drop_view": {"name": "drop_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt.drop_view", "macro_sql": "{% macro drop_view(relation) -%}\n {{- adapter.dispatch('drop_view', 'dbt')(relation) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.439455, "supported_languages": null}, "macro.dbt.default__drop_view": {"name": "default__drop_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt.default__drop_view", "macro_sql": "{% macro default__drop_view(relation) -%}\n drop view if exists {{ relation.render() }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.43956, "supported_languages": null}, "macro.dbt.get_replace_view_sql": {"name": "get_replace_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.get_replace_view_sql", "macro_sql": "{% macro get_replace_view_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_view_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_replace_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.440045, "supported_languages": null}, "macro.dbt.default__get_replace_view_sql": {"name": "default__get_replace_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.default__get_replace_view_sql", "macro_sql": "{% macro default__get_replace_view_sql(relation, sql) %}\n {{ exceptions.raise_compiler_error(\n \"`get_replace_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.440174, "supported_languages": null}, "macro.dbt.create_or_replace_view": {"name": "create_or_replace_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.create_or_replace_view", "macro_sql": "{% macro create_or_replace_view() %}\n {%- set identifier = model['alias'] -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database,\n type='view') -%}\n {% set grant_config = config.get('grants') %}\n\n {{ run_hooks(pre_hooks) }}\n\n -- If there's a table with the same name and we weren't told to full refresh,\n -- that's an error. If we were told to full refresh, drop it. This behavior differs\n -- for Snowflake and BigQuery, so multiple dispatch is used.\n {%- if old_relation is not none and old_relation.is_table -%}\n {{ handle_existing_table(should_full_refresh(), old_relation) }}\n {%- endif -%}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(target_relation, sql) }}\n {%- endcall %}\n\n {% set should_revoke = should_revoke(exists_as_view, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {{ run_hooks(post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.handle_existing_table", "macro.dbt.should_full_refresh", "macro.dbt.statement", "macro.dbt.get_create_view_as_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4411762, "supported_languages": null}, "macro.dbt.handle_existing_table": {"name": "handle_existing_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.handle_existing_table", "macro_sql": "{% macro handle_existing_table(full_refresh, old_relation) %}\n {{ adapter.dispatch('handle_existing_table', 'dbt')(full_refresh, old_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__handle_existing_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.441343, "supported_languages": null}, "macro.dbt.default__handle_existing_table": {"name": "default__handle_existing_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.default__handle_existing_table", "macro_sql": "{% macro default__handle_existing_table(full_refresh, old_relation) %}\n {{ log(\"Dropping relation \" ~ old_relation.render() ~ \" because it is of type \" ~ old_relation.type) }}\n {{ adapter.drop_relation(old_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.441539, "supported_languages": null}, "macro.dbt.get_rename_view_sql": {"name": "get_rename_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt.get_rename_view_sql", "macro_sql": "{% macro get_rename_view_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_view_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_rename_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4419022, "supported_languages": null}, "macro.dbt.default__get_rename_view_sql": {"name": "default__get_rename_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt.default__get_rename_view_sql", "macro_sql": "{% macro default__get_rename_view_sql(relation, new_name) %}\n {{ exceptions.raise_compiler_error(\n \"`get_rename_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4421089, "supported_languages": null}, "macro.dbt.get_create_view_as_sql": {"name": "get_create_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.get_create_view_as_sql", "macro_sql": "{% macro get_create_view_as_sql(relation, sql) -%}\n {{ adapter.dispatch('get_create_view_as_sql', 'dbt')(relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_create_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.442521, "supported_languages": null}, "macro.dbt.default__get_create_view_as_sql": {"name": "default__get_create_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.default__get_create_view_as_sql", "macro_sql": "{% macro default__get_create_view_as_sql(relation, sql) -%}\n {{ return(create_view_as(relation, sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.442687, "supported_languages": null}, "macro.dbt.create_view_as": {"name": "create_view_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.create_view_as", "macro_sql": "{% macro create_view_as(relation, sql) -%}\n {{ adapter.dispatch('create_view_as', 'dbt')(relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.442854, "supported_languages": null}, "macro.dbt.default__create_view_as": {"name": "default__create_view_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.default__create_view_as", "macro_sql": "{% macro default__create_view_as(relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n create view {{ relation.render() }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {%- endif %}\n as (\n {{ sql }}\n );\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4432561, "supported_languages": null}, "macro.dbt.default__test_relationships": {"name": "default__test_relationships", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/relationships.sql", "original_file_path": "macros/generic_test_sql/relationships.sql", "unique_id": "macro.dbt.default__test_relationships", "macro_sql": "{% macro default__test_relationships(model, column_name, to, field) %}\n\nwith child as (\n select {{ column_name }} as from_field\n from {{ model }}\n where {{ column_name }} is not null\n),\n\nparent as (\n select {{ field }} as to_field\n from {{ to }}\n)\n\nselect\n from_field\n\nfrom child\nleft join parent\n on child.from_field = parent.to_field\n\nwhere parent.to_field is null\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.443529, "supported_languages": null}, "macro.dbt.default__test_not_null": {"name": "default__test_not_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/not_null.sql", "original_file_path": "macros/generic_test_sql/not_null.sql", "unique_id": "macro.dbt.default__test_not_null", "macro_sql": "{% macro default__test_not_null(model, column_name) %}\n\n{% set column_list = '*' if should_store_failures() else column_name %}\n\nselect {{ column_list }}\nfrom {{ model }}\nwhere {{ column_name }} is null\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_store_failures"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.443789, "supported_languages": null}, "macro.dbt.default__test_unique": {"name": "default__test_unique", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/unique.sql", "original_file_path": "macros/generic_test_sql/unique.sql", "unique_id": "macro.dbt.default__test_unique", "macro_sql": "{% macro default__test_unique(model, column_name) %}\n\nselect\n {{ column_name }} as unique_field,\n count(*) as n_records\n\nfrom {{ model }}\nwhere {{ column_name }} is not null\ngroup by {{ column_name }}\nhaving count(*) > 1\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.44401, "supported_languages": null}, "macro.dbt.default__test_accepted_values": {"name": "default__test_accepted_values", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/accepted_values.sql", "original_file_path": "macros/generic_test_sql/accepted_values.sql", "unique_id": "macro.dbt.default__test_accepted_values", "macro_sql": "{% macro default__test_accepted_values(model, column_name, values, quote=True) %}\n\nwith all_values as (\n\n select\n {{ column_name }} as value_field,\n count(*) as n_records\n\n from {{ model }}\n group by {{ column_name }}\n\n)\n\nselect *\nfrom all_values\nwhere value_field not in (\n {% for value in values -%}\n {% if quote -%}\n '{{ value }}'\n {%- else -%}\n {{ value }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {%- endfor %}\n)\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4444811, "supported_languages": null}, "macro.dbt.statement": {"name": "statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.statement", "macro_sql": "\n{%- macro statement(name=None, fetch_result=False, auto_begin=True, language='sql') -%}\n {%- if execute: -%}\n {%- set compiled_code = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime {} for node \"{}\"'.format(language, model['unique_id'])) }}\n {{ write(compiled_code) }}\n {%- endif -%}\n {%- if language == 'sql'-%}\n {%- set res, table = adapter.execute(compiled_code, auto_begin=auto_begin, fetch=fetch_result) -%}\n {%- elif language == 'python' -%}\n {%- set res = submit_python_job(model, compiled_code) -%}\n {#-- TODO: What should table be for python models? --#}\n {%- set table = None -%}\n {%- else -%}\n {% do exceptions.raise_compiler_error(\"statement macro didn't get supported language\") %}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_result(name, response=res, agate_table=table) }}\n {%- endif -%}\n\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.445737, "supported_languages": null}, "macro.dbt.noop_statement": {"name": "noop_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.noop_statement", "macro_sql": "{% macro noop_statement(name=None, message=None, code=None, rows_affected=None, res=None) -%}\n {%- set sql = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime SQL for node \"{}\"'.format(model['unique_id'])) }}\n {{ write(sql) }}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_raw_result(name, message=message, code=code, rows_affected=rows_affected, agate_table=res) }}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.446315, "supported_languages": null}, "macro.dbt.run_query": {"name": "run_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.run_query", "macro_sql": "{% macro run_query(sql) %}\n {% call statement(\"run_query_statement\", fetch_result=true, auto_begin=false) %}\n {{ sql }}\n {% endcall %}\n\n {% do return(load_result(\"run_query_statement\").table) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.44656, "supported_languages": null}, "macro.dbt.convert_datetime": {"name": "convert_datetime", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.convert_datetime", "macro_sql": "{% macro convert_datetime(date_str, date_fmt) %}\n\n {% set error_msg -%}\n The provided partition date '{{ date_str }}' does not match the expected format '{{ date_fmt }}'\n {%- endset %}\n\n {% set res = try_or_compiler_error(error_msg, modules.datetime.datetime.strptime, date_str.strip(), date_fmt) %}\n {{ return(res) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4472451, "supported_languages": null}, "macro.dbt.dates_in_range": {"name": "dates_in_range", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.dates_in_range", "macro_sql": "{% macro dates_in_range(start_date_str, end_date_str=none, in_fmt=\"%Y%m%d\", out_fmt=\"%Y%m%d\") %}\n {% set end_date_str = start_date_str if end_date_str is none else end_date_str %}\n\n {% set start_date = convert_datetime(start_date_str, in_fmt) %}\n {% set end_date = convert_datetime(end_date_str, in_fmt) %}\n\n {% set day_count = (end_date - start_date).days %}\n {% if day_count < 0 %}\n {% set msg -%}\n Partition start date is after the end date ({{ start_date }}, {{ end_date }})\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg, model) }}\n {% endif %}\n\n {% set date_list = [] %}\n {% for i in range(0, day_count + 1) %}\n {% set the_date = (modules.datetime.timedelta(days=i) + start_date) %}\n {% if not out_fmt %}\n {% set _ = date_list.append(the_date) %}\n {% else %}\n {% set _ = date_list.append(the_date.strftime(out_fmt)) %}\n {% endif %}\n {% endfor %}\n\n {{ return(date_list) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.convert_datetime"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4482172, "supported_languages": null}, "macro.dbt.partition_range": {"name": "partition_range", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.partition_range", "macro_sql": "{% macro partition_range(raw_partition_date, date_fmt='%Y%m%d') %}\n {% set partition_range = (raw_partition_date | string).split(\",\") %}\n\n {% if (partition_range | length) == 1 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = none %}\n {% elif (partition_range | length) == 2 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = partition_range[1] %}\n {% else %}\n {{ exceptions.raise_compiler_error(\"Invalid partition time. Expected format: {Start Date}[,{End Date}]. Got: \" ~ raw_partition_date) }}\n {% endif %}\n\n {{ return(dates_in_range(start_date, end_date, in_fmt=date_fmt)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.dates_in_range"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4488509, "supported_languages": null}, "macro.dbt.py_current_timestring": {"name": "py_current_timestring", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.py_current_timestring", "macro_sql": "{% macro py_current_timestring() %}\n {% set dt = modules.datetime.datetime.now() %}\n {% do return(dt.strftime(\"%Y%m%d%H%M%S%f\")) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.449043, "supported_languages": null}, "macro.dbt.except": {"name": "except", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/except.sql", "original_file_path": "macros/utils/except.sql", "unique_id": "macro.dbt.except", "macro_sql": "{% macro except() %}\n {{ return(adapter.dispatch('except', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.449242, "supported_languages": null}, "macro.dbt.default__except": {"name": "default__except", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/except.sql", "original_file_path": "macros/utils/except.sql", "unique_id": "macro.dbt.default__except", "macro_sql": "{% macro default__except() %}\n\n except\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.449307, "supported_languages": null}, "macro.dbt.get_intervals_between": {"name": "get_intervals_between", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.get_intervals_between", "macro_sql": "{% macro get_intervals_between(start_date, end_date, datepart) -%}\n {{ return(adapter.dispatch('get_intervals_between', 'dbt')(start_date, end_date, datepart)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_intervals_between"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.449763, "supported_languages": null}, "macro.dbt.default__get_intervals_between": {"name": "default__get_intervals_between", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.default__get_intervals_between", "macro_sql": "{% macro default__get_intervals_between(start_date, end_date, datepart) -%}\n {%- call statement('get_intervals_between', fetch_result=True) %}\n\n select {{ dbt.datediff(start_date, end_date, datepart) }}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_intervals_between') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values[0]) }}\n {%- else -%}\n {{ return(1) }}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4502442, "supported_languages": null}, "macro.dbt.date_spine": {"name": "date_spine", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.date_spine", "macro_sql": "{% macro date_spine(datepart, start_date, end_date) %}\n {{ return(adapter.dispatch('date_spine', 'dbt')(datepart, start_date, end_date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.450439, "supported_languages": null}, "macro.dbt.default__date_spine": {"name": "default__date_spine", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.default__date_spine", "macro_sql": "{% macro default__date_spine(datepart, start_date, end_date) %}\n\n\n {# call as follows:\n\n date_spine(\n \"day\",\n \"to_date('01/01/2016', 'mm/dd/yyyy')\",\n \"dbt.dateadd(week, 1, current_date)\"\n ) #}\n\n\n with rawdata as (\n\n {{dbt.generate_series(\n dbt.get_intervals_between(start_date, end_date, datepart)\n )}}\n\n ),\n\n all_periods as (\n\n select (\n {{\n dbt.dateadd(\n datepart,\n \"row_number() over (order by 1) - 1\",\n start_date\n )\n }}\n ) as date_{{datepart}}\n from rawdata\n\n ),\n\n filtered as (\n\n select *\n from all_periods\n where date_{{datepart}} <= {{ end_date }}\n\n )\n\n select * from filtered\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.generate_series", "macro.dbt.get_intervals_between", "macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4507542, "supported_languages": null}, "macro.dbt.date": {"name": "date", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date.sql", "original_file_path": "macros/utils/date.sql", "unique_id": "macro.dbt.date", "macro_sql": "{% macro date(year, month, day) %}\n {{ return(adapter.dispatch('date', 'dbt') (year, month, day)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.451046, "supported_languages": null}, "macro.dbt.default__date": {"name": "default__date", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date.sql", "original_file_path": "macros/utils/date.sql", "unique_id": "macro.dbt.default__date", "macro_sql": "{% macro default__date(year, month, day) -%}\n {%- set dt = modules.datetime.date(year, month, day) -%}\n {%- set iso_8601_formatted_date = dt.strftime('%Y-%m-%d') -%}\n to_date('{{ iso_8601_formatted_date }}', 'YYYY-MM-DD')\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.451283, "supported_languages": null}, "macro.dbt.replace": {"name": "replace", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/replace.sql", "original_file_path": "macros/utils/replace.sql", "unique_id": "macro.dbt.replace", "macro_sql": "{% macro replace(field, old_chars, new_chars) -%}\n {{ return(adapter.dispatch('replace', 'dbt') (field, old_chars, new_chars)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__replace"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4515479, "supported_languages": null}, "macro.dbt.default__replace": {"name": "default__replace", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/replace.sql", "original_file_path": "macros/utils/replace.sql", "unique_id": "macro.dbt.default__replace", "macro_sql": "{% macro default__replace(field, old_chars, new_chars) %}\n\n replace(\n {{ field }},\n {{ old_chars }},\n {{ new_chars }}\n )\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.451689, "supported_languages": null}, "macro.dbt.concat": {"name": "concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/concat.sql", "original_file_path": "macros/utils/concat.sql", "unique_id": "macro.dbt.concat", "macro_sql": "{% macro concat(fields) -%}\n {{ return(adapter.dispatch('concat', 'dbt')(fields)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.452071, "supported_languages": null}, "macro.dbt.default__concat": {"name": "default__concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/concat.sql", "original_file_path": "macros/utils/concat.sql", "unique_id": "macro.dbt.default__concat", "macro_sql": "{% macro default__concat(fields) -%}\n {{ fields|join(' || ') }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.452199, "supported_languages": null}, "macro.dbt.get_powers_of_two": {"name": "get_powers_of_two", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.get_powers_of_two", "macro_sql": "{% macro get_powers_of_two(upper_bound) %}\n {{ return(adapter.dispatch('get_powers_of_two', 'dbt')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4526541, "supported_languages": null}, "macro.dbt.default__get_powers_of_two": {"name": "default__get_powers_of_two", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.default__get_powers_of_two", "macro_sql": "{% macro default__get_powers_of_two(upper_bound) %}\n\n {% if upper_bound <= 0 %}\n {{ exceptions.raise_compiler_error(\"upper bound must be positive\") }}\n {% endif %}\n\n {% for _ in range(1, 100) %}\n {% if upper_bound <= 2 ** loop.index %}{{ return(loop.index) }}{% endif %}\n {% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.453177, "supported_languages": null}, "macro.dbt.generate_series": {"name": "generate_series", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.generate_series", "macro_sql": "{% macro generate_series(upper_bound) %}\n {{ return(adapter.dispatch('generate_series', 'dbt')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_series"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4533389, "supported_languages": null}, "macro.dbt.default__generate_series": {"name": "default__generate_series", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.default__generate_series", "macro_sql": "{% macro default__generate_series(upper_bound) %}\n\n {% set n = dbt.get_powers_of_two(upper_bound) %}\n\n with p as (\n select 0 as generated_number union all select 1\n ), unioned as (\n\n select\n\n {% for i in range(n) %}\n p{{i}}.generated_number * power(2, {{i}})\n {% if not loop.last %} + {% endif %}\n {% endfor %}\n + 1\n as generated_number\n\n from\n\n {% for i in range(n) %}\n p as p{{i}}\n {% if not loop.last %} cross join {% endif %}\n {% endfor %}\n\n )\n\n select *\n from unioned\n where generated_number <= {{upper_bound}}\n order by generated_number\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.453791, "supported_languages": null}, "macro.dbt.length": {"name": "length", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/length.sql", "original_file_path": "macros/utils/length.sql", "unique_id": "macro.dbt.length", "macro_sql": "{% macro length(expression) -%}\n {{ return(adapter.dispatch('length', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__length"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.454029, "supported_languages": null}, "macro.dbt.default__length": {"name": "default__length", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/length.sql", "original_file_path": "macros/utils/length.sql", "unique_id": "macro.dbt.default__length", "macro_sql": "{% macro default__length(expression) %}\n\n length(\n {{ expression }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4541209, "supported_languages": null}, "macro.dbt.dateadd": {"name": "dateadd", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt.dateadd", "macro_sql": "{% macro dateadd(datepart, interval, from_date_or_timestamp) %}\n {{ return(adapter.dispatch('dateadd', 'dbt')(datepart, interval, from_date_or_timestamp)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4544, "supported_languages": null}, "macro.dbt.default__dateadd": {"name": "default__dateadd", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt.default__dateadd", "macro_sql": "{% macro default__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_date_or_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4545522, "supported_languages": null}, "macro.dbt.intersect": {"name": "intersect", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/intersect.sql", "original_file_path": "macros/utils/intersect.sql", "unique_id": "macro.dbt.intersect", "macro_sql": "{% macro intersect() %}\n {{ return(adapter.dispatch('intersect', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__intersect"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.454755, "supported_languages": null}, "macro.dbt.default__intersect": {"name": "default__intersect", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/intersect.sql", "original_file_path": "macros/utils/intersect.sql", "unique_id": "macro.dbt.default__intersect", "macro_sql": "{% macro default__intersect() %}\n\n intersect\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.454829, "supported_languages": null}, "macro.dbt.escape_single_quotes": {"name": "escape_single_quotes", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/escape_single_quotes.sql", "original_file_path": "macros/utils/escape_single_quotes.sql", "unique_id": "macro.dbt.escape_single_quotes", "macro_sql": "{% macro escape_single_quotes(expression) %}\n {{ return(adapter.dispatch('escape_single_quotes', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__escape_single_quotes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4550772, "supported_languages": null}, "macro.dbt.default__escape_single_quotes": {"name": "default__escape_single_quotes", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/escape_single_quotes.sql", "original_file_path": "macros/utils/escape_single_quotes.sql", "unique_id": "macro.dbt.default__escape_single_quotes", "macro_sql": "{% macro default__escape_single_quotes(expression) -%}\n{{ expression | replace(\"'\",\"''\") }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4552, "supported_languages": null}, "macro.dbt.right": {"name": "right", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/right.sql", "original_file_path": "macros/utils/right.sql", "unique_id": "macro.dbt.right", "macro_sql": "{% macro right(string_text, length_expression) -%}\n {{ return(adapter.dispatch('right', 'dbt') (string_text, length_expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__right"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.455457, "supported_languages": null}, "macro.dbt.default__right": {"name": "default__right", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/right.sql", "original_file_path": "macros/utils/right.sql", "unique_id": "macro.dbt.default__right", "macro_sql": "{% macro default__right(string_text, length_expression) %}\n\n right(\n {{ string_text }},\n {{ length_expression }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4555762, "supported_languages": null}, "macro.dbt.listagg": {"name": "listagg", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt.listagg", "macro_sql": "{% macro listagg(measure, delimiter_text=\"','\", order_by_clause=none, limit_num=none) -%}\n {{ return(adapter.dispatch('listagg', 'dbt') (measure, delimiter_text, order_by_clause, limit_num)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__listagg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4559832, "supported_languages": null}, "macro.dbt.default__listagg": {"name": "default__listagg", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt.default__listagg", "macro_sql": "{% macro default__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n {% if limit_num -%}\n array_to_string(\n array_slice(\n array_agg(\n {{ measure }}\n ){% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n ,0\n ,{{ limit_num }}\n ),\n {{ delimiter_text }}\n )\n {%- else %}\n listagg(\n {{ measure }},\n {{ delimiter_text }}\n )\n {% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n {%- endif %}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.456337, "supported_languages": null}, "macro.dbt.datediff": {"name": "datediff", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt.datediff", "macro_sql": "{% macro datediff(first_date, second_date, datepart) %}\n {{ return(adapter.dispatch('datediff', 'dbt')(first_date, second_date, datepart)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.456605, "supported_languages": null}, "macro.dbt.default__datediff": {"name": "default__datediff", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt.default__datediff", "macro_sql": "{% macro default__datediff(first_date, second_date, datepart) -%}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4567528, "supported_languages": null}, "macro.dbt.safe_cast": {"name": "safe_cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/safe_cast.sql", "original_file_path": "macros/utils/safe_cast.sql", "unique_id": "macro.dbt.safe_cast", "macro_sql": "{% macro safe_cast(field, type) %}\n {{ return(adapter.dispatch('safe_cast', 'dbt') (field, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__safe_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.457066, "supported_languages": null}, "macro.dbt.default__safe_cast": {"name": "default__safe_cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/safe_cast.sql", "original_file_path": "macros/utils/safe_cast.sql", "unique_id": "macro.dbt.default__safe_cast", "macro_sql": "{% macro default__safe_cast(field, type) %}\n {# most databases don't support this function yet\n so we just need to use cast #}\n cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.457197, "supported_languages": null}, "macro.dbt.equals": {"name": "equals", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/equals.sql", "original_file_path": "macros/utils/equals.sql", "unique_id": "macro.dbt.equals", "macro_sql": "{% macro equals(expr1, expr2) %}\n {{ return(adapter.dispatch('equals', 'dbt') (expr1, expr2)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4574971, "supported_languages": null}, "macro.dbt.default__equals": {"name": "default__equals", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/equals.sql", "original_file_path": "macros/utils/equals.sql", "unique_id": "macro.dbt.default__equals", "macro_sql": "{% macro default__equals(expr1, expr2) -%}\n{%- if adapter.behavior.enable_truthy_nulls_equals_macro.no_warn %}\n case when (({{ expr1 }} = {{ expr2 }}) or ({{ expr1 }} is null and {{ expr2 }} is null))\n then 0\n else 1\n end = 0\n{%- else -%}\n ({{ expr1 }} = {{ expr2 }})\n{%- endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.457852, "supported_languages": null}, "macro.dbt.hash": {"name": "hash", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/hash.sql", "original_file_path": "macros/utils/hash.sql", "unique_id": "macro.dbt.hash", "macro_sql": "{% macro hash(field) -%}\n {{ return(adapter.dispatch('hash', 'dbt') (field)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__hash"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.458077, "supported_languages": null}, "macro.dbt.default__hash": {"name": "default__hash", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/hash.sql", "original_file_path": "macros/utils/hash.sql", "unique_id": "macro.dbt.default__hash", "macro_sql": "{% macro default__hash(field) -%}\n md5(cast({{ field }} as {{ api.Column.translate_type('string') }}))\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.45821, "supported_languages": null}, "macro.dbt.cast_bool_to_text": {"name": "cast_bool_to_text", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast_bool_to_text.sql", "original_file_path": "macros/utils/cast_bool_to_text.sql", "unique_id": "macro.dbt.cast_bool_to_text", "macro_sql": "{% macro cast_bool_to_text(field) %}\n {{ adapter.dispatch('cast_bool_to_text', 'dbt') (field) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.45842, "supported_languages": null}, "macro.dbt.default__cast_bool_to_text": {"name": "default__cast_bool_to_text", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast_bool_to_text.sql", "original_file_path": "macros/utils/cast_bool_to_text.sql", "unique_id": "macro.dbt.default__cast_bool_to_text", "macro_sql": "{% macro default__cast_bool_to_text(field) %}\n cast({{ field }} as {{ api.Column.translate_type('string') }})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.458555, "supported_languages": null}, "macro.dbt.cast": {"name": "cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast.sql", "original_file_path": "macros/utils/cast.sql", "unique_id": "macro.dbt.cast", "macro_sql": "{% macro cast(field, type) %}\n {{ return(adapter.dispatch('cast', 'dbt') (field, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.458797, "supported_languages": null}, "macro.dbt.default__cast": {"name": "default__cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast.sql", "original_file_path": "macros/utils/cast.sql", "unique_id": "macro.dbt.default__cast", "macro_sql": "{% macro default__cast(field, type) %}\n cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.458912, "supported_languages": null}, "macro.dbt.any_value": {"name": "any_value", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt.any_value", "macro_sql": "{% macro any_value(expression) -%}\n {{ return(adapter.dispatch('any_value', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__any_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.459123, "supported_languages": null}, "macro.dbt.default__any_value": {"name": "default__any_value", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt.default__any_value", "macro_sql": "{% macro default__any_value(expression) -%}\n\n any_value({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.459212, "supported_languages": null}, "macro.dbt.position": {"name": "position", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/position.sql", "original_file_path": "macros/utils/position.sql", "unique_id": "macro.dbt.position", "macro_sql": "{% macro position(substring_text, string_text) -%}\n {{ return(adapter.dispatch('position', 'dbt') (substring_text, string_text)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__position"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.459452, "supported_languages": null}, "macro.dbt.default__position": {"name": "default__position", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/position.sql", "original_file_path": "macros/utils/position.sql", "unique_id": "macro.dbt.default__position", "macro_sql": "{% macro default__position(substring_text, string_text) %}\n\n position(\n {{ substring_text }} in {{ string_text }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.459569, "supported_languages": null}, "macro.dbt.string_literal": {"name": "string_literal", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/literal.sql", "original_file_path": "macros/utils/literal.sql", "unique_id": "macro.dbt.string_literal", "macro_sql": "{%- macro string_literal(value) -%}\n {{ return(adapter.dispatch('string_literal', 'dbt') (value)) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__string_literal"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.459785, "supported_languages": null}, "macro.dbt.default__string_literal": {"name": "default__string_literal", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/literal.sql", "original_file_path": "macros/utils/literal.sql", "unique_id": "macro.dbt.default__string_literal", "macro_sql": "{% macro default__string_literal(value) -%}\n '{{ value }}'\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.459872, "supported_languages": null}, "macro.dbt.type_string": {"name": "type_string", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_string", "macro_sql": "\n\n{%- macro type_string() -%}\n {{ return(adapter.dispatch('type_string', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4605298, "supported_languages": null}, "macro.dbt.default__type_string": {"name": "default__type_string", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_string", "macro_sql": "{% macro default__type_string() %}\n {{ return(api.Column.translate_type(\"string\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.460657, "supported_languages": null}, "macro.dbt.type_timestamp": {"name": "type_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_timestamp", "macro_sql": "\n\n{%- macro type_timestamp() -%}\n {{ return(adapter.dispatch('type_timestamp', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.460793, "supported_languages": null}, "macro.dbt.default__type_timestamp": {"name": "default__type_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_timestamp", "macro_sql": "{% macro default__type_timestamp() %}\n {{ return(api.Column.translate_type(\"timestamp\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.460921, "supported_languages": null}, "macro.dbt.type_float": {"name": "type_float", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_float", "macro_sql": "\n\n{%- macro type_float() -%}\n {{ return(adapter.dispatch('type_float', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_float"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.46106, "supported_languages": null}, "macro.dbt.default__type_float": {"name": "default__type_float", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_float", "macro_sql": "{% macro default__type_float() %}\n {{ return(api.Column.translate_type(\"float\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.461258, "supported_languages": null}, "macro.dbt.type_numeric": {"name": "type_numeric", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_numeric", "macro_sql": "\n\n{%- macro type_numeric() -%}\n {{ return(adapter.dispatch('type_numeric', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.461407, "supported_languages": null}, "macro.dbt.default__type_numeric": {"name": "default__type_numeric", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_numeric", "macro_sql": "{% macro default__type_numeric() %}\n {{ return(api.Column.numeric_type(\"numeric\", 28, 6)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.461568, "supported_languages": null}, "macro.dbt.type_bigint": {"name": "type_bigint", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_bigint", "macro_sql": "\n\n{%- macro type_bigint() -%}\n {{ return(adapter.dispatch('type_bigint', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_bigint"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.46172, "supported_languages": null}, "macro.dbt.default__type_bigint": {"name": "default__type_bigint", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_bigint", "macro_sql": "{% macro default__type_bigint() %}\n {{ return(api.Column.translate_type(\"bigint\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.461884, "supported_languages": null}, "macro.dbt.type_int": {"name": "type_int", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_int", "macro_sql": "\n\n{%- macro type_int() -%}\n {{ return(adapter.dispatch('type_int', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_int"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4620318, "supported_languages": null}, "macro.dbt.default__type_int": {"name": "default__type_int", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_int", "macro_sql": "{%- macro default__type_int() -%}\n {{ return(api.Column.translate_type(\"integer\")) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.462156, "supported_languages": null}, "macro.dbt.type_boolean": {"name": "type_boolean", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_boolean", "macro_sql": "\n\n{%- macro type_boolean() -%}\n {{ return(adapter.dispatch('type_boolean', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_boolean"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.462295, "supported_languages": null}, "macro.dbt.default__type_boolean": {"name": "default__type_boolean", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_boolean", "macro_sql": "{%- macro default__type_boolean() -%}\n {{ return(api.Column.translate_type(\"boolean\")) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.462419, "supported_languages": null}, "macro.dbt.array_concat": {"name": "array_concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_concat.sql", "original_file_path": "macros/utils/array_concat.sql", "unique_id": "macro.dbt.array_concat", "macro_sql": "{% macro array_concat(array_1, array_2) -%}\n {{ return(adapter.dispatch('array_concat', 'dbt')(array_1, array_2)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.462662, "supported_languages": null}, "macro.dbt.default__array_concat": {"name": "default__array_concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_concat.sql", "original_file_path": "macros/utils/array_concat.sql", "unique_id": "macro.dbt.default__array_concat", "macro_sql": "{% macro default__array_concat(array_1, array_2) -%}\n array_cat({{ array_1 }}, {{ array_2 }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4627771, "supported_languages": null}, "macro.dbt.bool_or": {"name": "bool_or", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/bool_or.sql", "original_file_path": "macros/utils/bool_or.sql", "unique_id": "macro.dbt.bool_or", "macro_sql": "{% macro bool_or(expression) -%}\n {{ return(adapter.dispatch('bool_or', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__bool_or"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.462993, "supported_languages": null}, "macro.dbt.default__bool_or": {"name": "default__bool_or", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/bool_or.sql", "original_file_path": "macros/utils/bool_or.sql", "unique_id": "macro.dbt.default__bool_or", "macro_sql": "{% macro default__bool_or(expression) -%}\n\n bool_or({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.463081, "supported_languages": null}, "macro.dbt.last_day": {"name": "last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.last_day", "macro_sql": "{% macro last_day(date, datepart) %}\n {{ return(adapter.dispatch('last_day', 'dbt') (date, datepart)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.463354, "supported_languages": null}, "macro.dbt.default_last_day": {"name": "default_last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.default_last_day", "macro_sql": "\n\n{%- macro default_last_day(date, datepart) -%}\n cast(\n {{dbt.dateadd('day', '-1',\n dbt.dateadd(datepart, '1', dbt.date_trunc(datepart, date))\n )}}\n as date)\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.463579, "supported_languages": null}, "macro.dbt.default__last_day": {"name": "default__last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.default__last_day", "macro_sql": "{% macro default__last_day(date, datepart) -%}\n {{dbt.default_last_day(date, datepart)}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.463704, "supported_languages": null}, "macro.dbt.split_part": {"name": "split_part", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt.split_part", "macro_sql": "{% macro split_part(string_text, delimiter_text, part_number) %}\n {{ return(adapter.dispatch('split_part', 'dbt') (string_text, delimiter_text, part_number)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__split_part"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.464028, "supported_languages": null}, "macro.dbt.default__split_part": {"name": "default__split_part", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt.default__split_part", "macro_sql": "{% macro default__split_part(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n {{ part_number }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.464177, "supported_languages": null}, "macro.dbt._split_part_negative": {"name": "_split_part_negative", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt._split_part_negative", "macro_sql": "{% macro _split_part_negative(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n length({{ string_text }})\n - length(\n replace({{ string_text }}, {{ delimiter_text }}, '')\n ) + 2 + {{ part_number }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.464363, "supported_languages": null}, "macro.dbt.date_trunc": {"name": "date_trunc", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_trunc.sql", "original_file_path": "macros/utils/date_trunc.sql", "unique_id": "macro.dbt.date_trunc", "macro_sql": "{% macro date_trunc(datepart, date) -%}\n {{ return(adapter.dispatch('date_trunc', 'dbt') (datepart, date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4645991, "supported_languages": null}, "macro.dbt.default__date_trunc": {"name": "default__date_trunc", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_trunc.sql", "original_file_path": "macros/utils/date_trunc.sql", "unique_id": "macro.dbt.default__date_trunc", "macro_sql": "{% macro default__date_trunc(datepart, date) -%}\n date_trunc('{{datepart}}', {{date}})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4647748, "supported_languages": null}, "macro.dbt.array_construct": {"name": "array_construct", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_construct.sql", "original_file_path": "macros/utils/array_construct.sql", "unique_id": "macro.dbt.array_construct", "macro_sql": "{% macro array_construct(inputs=[], data_type=api.Column.translate_type('integer')) -%}\n {{ return(adapter.dispatch('array_construct', 'dbt')(inputs, data_type)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_construct"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.465099, "supported_languages": null}, "macro.dbt.default__array_construct": {"name": "default__array_construct", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_construct.sql", "original_file_path": "macros/utils/array_construct.sql", "unique_id": "macro.dbt.default__array_construct", "macro_sql": "{% macro default__array_construct(inputs, data_type) -%}\n {% if inputs|length > 0 %}\n array[ {{ inputs|join(' , ') }} ]\n {% else %}\n array[]::{{data_type}}[]\n {% endif %}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4653, "supported_languages": null}, "macro.dbt.array_append": {"name": "array_append", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_append.sql", "original_file_path": "macros/utils/array_append.sql", "unique_id": "macro.dbt.array_append", "macro_sql": "{% macro array_append(array, new_element) -%}\n {{ return(adapter.dispatch('array_append', 'dbt')(array, new_element)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_append"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.465544, "supported_languages": null}, "macro.dbt.default__array_append": {"name": "default__array_append", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_append.sql", "original_file_path": "macros/utils/array_append.sql", "unique_id": "macro.dbt.default__array_append", "macro_sql": "{% macro default__array_append(array, new_element) -%}\n array_append({{ array }}, {{ new_element }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.465655, "supported_languages": null}, "macro.dbt.create_schema": {"name": "create_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.create_schema", "macro_sql": "{% macro create_schema(relation) -%}\n {{ adapter.dispatch('create_schema', 'dbt')(relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__create_schema"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4659278, "supported_languages": null}, "macro.dbt.default__create_schema": {"name": "default__create_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.default__create_schema", "macro_sql": "{% macro default__create_schema(relation) -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier() }}\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.46608, "supported_languages": null}, "macro.dbt.drop_schema": {"name": "drop_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.drop_schema", "macro_sql": "{% macro drop_schema(relation) -%}\n {{ adapter.dispatch('drop_schema', 'dbt')(relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_schema"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.466212, "supported_languages": null}, "macro.dbt.default__drop_schema": {"name": "default__drop_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.default__drop_schema", "macro_sql": "{% macro default__drop_schema(relation) -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier() }} cascade\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.466366, "supported_languages": null}, "macro.dbt.current_timestamp": {"name": "current_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp", "macro_sql": "{%- macro current_timestamp() -%}\n {{ adapter.dispatch('current_timestamp', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.466791, "supported_languages": null}, "macro.dbt.default__current_timestamp": {"name": "default__current_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp", "macro_sql": "{% macro default__current_timestamp() -%}\n {{ exceptions.raise_not_implemented(\n 'current_timestamp macro not implemented for adapter ' + adapter.type()) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.466917, "supported_languages": null}, "macro.dbt.snapshot_get_time": {"name": "snapshot_get_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.snapshot_get_time", "macro_sql": "\n\n{%- macro snapshot_get_time() -%}\n {{ adapter.dispatch('snapshot_get_time', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.467036, "supported_languages": null}, "macro.dbt.default__snapshot_get_time": {"name": "default__snapshot_get_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__snapshot_get_time", "macro_sql": "{% macro default__snapshot_get_time() %}\n {{ current_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.467125, "supported_languages": null}, "macro.dbt.get_snapshot_get_time_data_type": {"name": "get_snapshot_get_time_data_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.get_snapshot_get_time_data_type", "macro_sql": "{% macro get_snapshot_get_time_data_type() %}\n {% set snapshot_time = adapter.dispatch('snapshot_get_time', 'dbt')() %}\n {% set time_data_type_sql = 'select ' ~ snapshot_time ~ ' as dbt_snapshot_time' %}\n {% set snapshot_time_column_schema = get_column_schema_from_query(time_data_type_sql) %}\n {% set time_data_type = snapshot_time_column_schema[0].dtype %}\n {{ return(time_data_type or none) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.snapshot_get_time", "macro.dbt_postgres.postgres__snapshot_get_time", "macro.dbt.get_column_schema_from_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.467463, "supported_languages": null}, "macro.dbt.current_timestamp_backcompat": {"name": "current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp_backcompat", "macro_sql": "{% macro current_timestamp_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4676008, "supported_languages": null}, "macro.dbt.default__current_timestamp_backcompat": {"name": "default__current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp_backcompat", "macro_sql": "{% macro default__current_timestamp_backcompat() %}\n current_timestamp::timestamp\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.467668, "supported_languages": null}, "macro.dbt.current_timestamp_in_utc_backcompat": {"name": "current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp_in_utc_backcompat", "macro_sql": "{% macro current_timestamp_in_utc_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_in_utc_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.467802, "supported_languages": null}, "macro.dbt.default__current_timestamp_in_utc_backcompat": {"name": "default__current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp_in_utc_backcompat", "macro_sql": "{% macro default__current_timestamp_in_utc_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp_backcompat", "macro.dbt_postgres.postgres__current_timestamp_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.467937, "supported_languages": null}, "macro.dbt.get_create_index_sql": {"name": "get_create_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_create_index_sql", "macro_sql": "{% macro get_create_index_sql(relation, index_dict) -%}\n {{ return(adapter.dispatch('get_create_index_sql', 'dbt')(relation, index_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4683661, "supported_languages": null}, "macro.dbt.default__get_create_index_sql": {"name": "default__get_create_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_create_index_sql", "macro_sql": "{% macro default__get_create_index_sql(relation, index_dict) -%}\n {% do return(None) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.46854, "supported_languages": null}, "macro.dbt.create_indexes": {"name": "create_indexes", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.create_indexes", "macro_sql": "{% macro create_indexes(relation) -%}\n {{ adapter.dispatch('create_indexes', 'dbt')(relation) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.468674, "supported_languages": null}, "macro.dbt.default__create_indexes": {"name": "default__create_indexes", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__create_indexes", "macro_sql": "{% macro default__create_indexes(relation) -%}\n {%- set _indexes = config.get('indexes', default=[]) -%}\n\n {% for _index_dict in _indexes %}\n {% set create_index_sql = get_create_index_sql(relation, _index_dict) %}\n {% if create_index_sql %}\n {% do run_query(create_index_sql) %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_create_index_sql", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.469004, "supported_languages": null}, "macro.dbt.get_drop_index_sql": {"name": "get_drop_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_drop_index_sql", "macro_sql": "{% macro get_drop_index_sql(relation, index_name) -%}\n {{ adapter.dispatch('get_drop_index_sql', 'dbt')(relation, index_name) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_drop_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4691572, "supported_languages": null}, "macro.dbt.default__get_drop_index_sql": {"name": "default__get_drop_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_drop_index_sql", "macro_sql": "{% macro default__get_drop_index_sql(relation, index_name) -%}\n {{ exceptions.raise_compiler_error(\"`get_drop_index_sql has not been implemented for this adapter.\") }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4692779, "supported_languages": null}, "macro.dbt.get_show_indexes_sql": {"name": "get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_show_indexes_sql", "macro_sql": "{% macro get_show_indexes_sql(relation) -%}\n {{ adapter.dispatch('get_show_indexes_sql', 'dbt')(relation) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_show_indexes_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.469407, "supported_languages": null}, "macro.dbt.default__get_show_indexes_sql": {"name": "default__get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_show_indexes_sql", "macro_sql": "{% macro default__get_show_indexes_sql(relation) -%}\n {{ exceptions.raise_compiler_error(\"`get_show_indexes_sql has not been implemented for this adapter.\") }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4695108, "supported_languages": null}, "macro.dbt.make_intermediate_relation": {"name": "make_intermediate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_intermediate_relation", "macro_sql": "{% macro make_intermediate_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_intermediate_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_intermediate_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.470135, "supported_languages": null}, "macro.dbt.default__make_intermediate_relation": {"name": "default__make_intermediate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_intermediate_relation", "macro_sql": "{% macro default__make_intermediate_relation(base_relation, suffix) %}\n {{ return(default__make_temp_relation(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.470283, "supported_languages": null}, "macro.dbt.make_temp_relation": {"name": "make_temp_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_temp_relation", "macro_sql": "{% macro make_temp_relation(base_relation, suffix='__dbt_tmp') %}\n {#-- This ensures microbatch batches get unique temp relations to avoid clobbering --#}\n {% if suffix == '__dbt_tmp' and model.batch %}\n {% set suffix = suffix ~ '_' ~ model.batch.id %}\n {% endif %}\n\n {{ return(adapter.dispatch('make_temp_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.470598, "supported_languages": null}, "macro.dbt.default__make_temp_relation": {"name": "default__make_temp_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_temp_relation", "macro_sql": "{% macro default__make_temp_relation(base_relation, suffix) %}\n {%- set temp_identifier = base_relation.identifier ~ suffix -%}\n {%- set temp_relation = base_relation.incorporate(\n path={\"identifier\": temp_identifier}) -%}\n\n {{ return(temp_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.470834, "supported_languages": null}, "macro.dbt.make_backup_relation": {"name": "make_backup_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_backup_relation", "macro_sql": "{% macro make_backup_relation(base_relation, backup_relation_type, suffix='__dbt_backup') %}\n {{ return(adapter.dispatch('make_backup_relation', 'dbt')(base_relation, backup_relation_type, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_backup_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.471033, "supported_languages": null}, "macro.dbt.default__make_backup_relation": {"name": "default__make_backup_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_backup_relation", "macro_sql": "{% macro default__make_backup_relation(base_relation, backup_relation_type, suffix) %}\n {%- set backup_identifier = base_relation.identifier ~ suffix -%}\n {%- set backup_relation = base_relation.incorporate(\n path={\"identifier\": backup_identifier},\n type=backup_relation_type\n ) -%}\n {{ return(backup_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.471293, "supported_languages": null}, "macro.dbt.truncate_relation": {"name": "truncate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.truncate_relation", "macro_sql": "{% macro truncate_relation(relation) -%}\n {{ return(adapter.dispatch('truncate_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__truncate_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.471445, "supported_languages": null}, "macro.dbt.default__truncate_relation": {"name": "default__truncate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__truncate_relation", "macro_sql": "{% macro default__truncate_relation(relation) -%}\n {% call statement('truncate_relation') -%}\n truncate table {{ relation.render() }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.471593, "supported_languages": null}, "macro.dbt.get_or_create_relation": {"name": "get_or_create_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.get_or_create_relation", "macro_sql": "{% macro get_or_create_relation(database, schema, identifier, type) -%}\n {{ return(adapter.dispatch('get_or_create_relation', 'dbt')(database, schema, identifier, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_or_create_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.471885, "supported_languages": null}, "macro.dbt.default__get_or_create_relation": {"name": "default__get_or_create_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__get_or_create_relation", "macro_sql": "{% macro default__get_or_create_relation(database, schema, identifier, type) %}\n {%- set target_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n\n {% if target_relation %}\n {% do return([true, target_relation]) %}\n {% endif %}\n\n {%- set new_relation = api.Relation.create(\n database=database,\n schema=schema,\n identifier=identifier,\n type=type\n ) -%}\n {% do return([false, new_relation]) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.472852, "supported_languages": null}, "macro.dbt.load_cached_relation": {"name": "load_cached_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.load_cached_relation", "macro_sql": "{% macro load_cached_relation(relation) %}\n {% do return(adapter.get_relation(\n database=relation.database,\n schema=relation.schema,\n identifier=relation.identifier\n )) -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.473067, "supported_languages": null}, "macro.dbt.load_relation": {"name": "load_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.load_relation", "macro_sql": "{% macro load_relation(relation) %}\n {{ return(load_cached_relation(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.473195, "supported_languages": null}, "macro.dbt.collect_freshness": {"name": "collect_freshness", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness', 'dbt')(source, loaded_at_field, filter))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.473685, "supported_languages": null}, "macro.dbt.default__collect_freshness": {"name": "default__collect_freshness", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.default__collect_freshness", "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n select\n max({{ loaded_at_field }}) as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endcall %}\n {{ return(load_result('collect_freshness')) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.474062, "supported_languages": null}, "macro.dbt.collect_freshness_custom_sql": {"name": "collect_freshness_custom_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.collect_freshness_custom_sql", "macro_sql": "{% macro collect_freshness_custom_sql(source, loaded_at_query) %}\n {{ return(adapter.dispatch('collect_freshness_custom_sql', 'dbt')(source, loaded_at_query))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__collect_freshness_custom_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.474253, "supported_languages": null}, "macro.dbt.default__collect_freshness_custom_sql": {"name": "default__collect_freshness_custom_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.default__collect_freshness_custom_sql", "macro_sql": "{% macro default__collect_freshness_custom_sql(source, loaded_at_query) %}\n {% call statement('collect_freshness_custom_sql', fetch_result=True, auto_begin=False) -%}\n with source_query as (\n {{ loaded_at_query }}\n )\n select\n (select * from source_query) as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n {% endcall %}\n {{ return(load_result('collect_freshness_custom_sql')) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.474536, "supported_languages": null}, "macro.dbt.validate_sql": {"name": "validate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/validate_sql.sql", "original_file_path": "macros/adapters/validate_sql.sql", "unique_id": "macro.dbt.validate_sql", "macro_sql": "{% macro validate_sql(sql) -%}\n {{ return(adapter.dispatch('validate_sql', 'dbt')(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__validate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.474792, "supported_languages": null}, "macro.dbt.default__validate_sql": {"name": "default__validate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/validate_sql.sql", "original_file_path": "macros/adapters/validate_sql.sql", "unique_id": "macro.dbt.default__validate_sql", "macro_sql": "{% macro default__validate_sql(sql) -%}\n {% call statement('validate_sql') -%}\n explain {{ sql }}\n {% endcall %}\n {{ return(load_result('validate_sql')) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4749901, "supported_languages": null}, "macro.dbt.copy_grants": {"name": "copy_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.copy_grants", "macro_sql": "{% macro copy_grants() %}\n {{ return(adapter.dispatch('copy_grants', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__copy_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.476105, "supported_languages": null}, "macro.dbt.default__copy_grants": {"name": "default__copy_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__copy_grants", "macro_sql": "{% macro default__copy_grants() %}\n {{ return(True) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4762082, "supported_languages": null}, "macro.dbt.support_multiple_grantees_per_dcl_statement": {"name": "support_multiple_grantees_per_dcl_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.support_multiple_grantees_per_dcl_statement", "macro_sql": "{% macro support_multiple_grantees_per_dcl_statement() %}\n {{ return(adapter.dispatch('support_multiple_grantees_per_dcl_statement', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__support_multiple_grantees_per_dcl_statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4763541, "supported_languages": null}, "macro.dbt.default__support_multiple_grantees_per_dcl_statement": {"name": "default__support_multiple_grantees_per_dcl_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__support_multiple_grantees_per_dcl_statement", "macro_sql": "\n\n{%- macro default__support_multiple_grantees_per_dcl_statement() -%}\n {{ return(True) }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.476456, "supported_languages": null}, "macro.dbt.should_revoke": {"name": "should_revoke", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.should_revoke", "macro_sql": "{% macro should_revoke(existing_relation, full_refresh_mode=True) %}\n\n {% if not existing_relation %}\n {#-- The table doesn't already exist, so no grants to copy over --#}\n {{ return(False) }}\n {% elif full_refresh_mode %}\n {#-- The object is being REPLACED -- whether grants are copied over depends on the value of user config --#}\n {{ return(copy_grants()) }}\n {% else %}\n {#-- The table is being merged/upserted/inserted -- grants will be carried over --#}\n {{ return(True) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.copy_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.476768, "supported_languages": null}, "macro.dbt.get_show_grant_sql": {"name": "get_show_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_show_grant_sql", "macro_sql": "{% macro get_show_grant_sql(relation) %}\n {{ return(adapter.dispatch(\"get_show_grant_sql\", \"dbt\")(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_show_grant_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.476937, "supported_languages": null}, "macro.dbt.default__get_show_grant_sql": {"name": "default__get_show_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_show_grant_sql", "macro_sql": "{% macro default__get_show_grant_sql(relation) %}\n show grants on {{ relation.render() }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.477049, "supported_languages": null}, "macro.dbt.get_grant_sql": {"name": "get_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_grant_sql", "macro_sql": "{% macro get_grant_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_grant_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_grant_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.477251, "supported_languages": null}, "macro.dbt.default__get_grant_sql": {"name": "default__get_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_grant_sql", "macro_sql": "\n\n{%- macro default__get_grant_sql(relation, privilege, grantees) -%}\n grant {{ privilege }} on {{ relation.render() }} to {{ grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.477439, "supported_languages": null}, "macro.dbt.get_revoke_sql": {"name": "get_revoke_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_revoke_sql", "macro_sql": "{% macro get_revoke_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_revoke_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_revoke_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4776452, "supported_languages": null}, "macro.dbt.default__get_revoke_sql": {"name": "default__get_revoke_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_revoke_sql", "macro_sql": "\n\n{%- macro default__get_revoke_sql(relation, privilege, grantees) -%}\n revoke {{ privilege }} on {{ relation.render() }} from {{ grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4779131, "supported_languages": null}, "macro.dbt.get_dcl_statement_list": {"name": "get_dcl_statement_list", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_dcl_statement_list", "macro_sql": "{% macro get_dcl_statement_list(relation, grant_config, get_dcl_macro) %}\n {{ return(adapter.dispatch('get_dcl_statement_list', 'dbt')(relation, grant_config, get_dcl_macro)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_dcl_statement_list"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.478165, "supported_languages": null}, "macro.dbt.default__get_dcl_statement_list": {"name": "default__get_dcl_statement_list", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_dcl_statement_list", "macro_sql": "\n\n{%- macro default__get_dcl_statement_list(relation, grant_config, get_dcl_macro) -%}\n {#\n -- Unpack grant_config into specific privileges and the set of users who need them granted/revoked.\n -- Depending on whether this database supports multiple grantees per statement, pass in the list of\n -- all grantees per privilege, or (if not) template one statement per privilege-grantee pair.\n -- `get_dcl_macro` will be either `get_grant_sql` or `get_revoke_sql`\n #}\n {%- set dcl_statements = [] -%}\n {%- for privilege, grantees in grant_config.items() %}\n {%- if support_multiple_grantees_per_dcl_statement() and grantees -%}\n {%- set dcl = get_dcl_macro(relation, privilege, grantees) -%}\n {%- do dcl_statements.append(dcl) -%}\n {%- else -%}\n {%- for grantee in grantees -%}\n {% set dcl = get_dcl_macro(relation, privilege, [grantee]) %}\n {%- do dcl_statements.append(dcl) -%}\n {% endfor -%}\n {%- endif -%}\n {%- endfor -%}\n {{ return(dcl_statements) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.support_multiple_grantees_per_dcl_statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4787462, "supported_languages": null}, "macro.dbt.call_dcl_statements": {"name": "call_dcl_statements", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.call_dcl_statements", "macro_sql": "{% macro call_dcl_statements(dcl_statement_list) %}\n {{ return(adapter.dispatch(\"call_dcl_statements\", \"dbt\")(dcl_statement_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__call_dcl_statements"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.47891, "supported_languages": null}, "macro.dbt.default__call_dcl_statements": {"name": "default__call_dcl_statements", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__call_dcl_statements", "macro_sql": "{% macro default__call_dcl_statements(dcl_statement_list) %}\n {#\n -- By default, supply all grant + revoke statements in a single semicolon-separated block,\n -- so that they're all processed together.\n\n -- Some databases do not support this. Those adapters will need to override this macro\n -- to run each statement individually.\n #}\n {% call statement('grants') %}\n {% for dcl_statement in dcl_statement_list %}\n {{ dcl_statement }};\n {% endfor %}\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4791129, "supported_languages": null}, "macro.dbt.apply_grants": {"name": "apply_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.apply_grants", "macro_sql": "{% macro apply_grants(relation, grant_config, should_revoke) %}\n {{ return(adapter.dispatch(\"apply_grants\", \"dbt\")(relation, grant_config, should_revoke)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4793081, "supported_languages": null}, "macro.dbt.default__apply_grants": {"name": "default__apply_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__apply_grants", "macro_sql": "{% macro default__apply_grants(relation, grant_config, should_revoke=True) %}\n {#-- If grant_config is {} or None, this is a no-op --#}\n {% if grant_config %}\n {% if should_revoke %}\n {#-- We think previous grants may have carried over --#}\n {#-- Show current grants and calculate diffs --#}\n {% set current_grants_table = run_query(get_show_grant_sql(relation)) %}\n {% set current_grants_dict = adapter.standardize_grants_dict(current_grants_table) %}\n {% set needs_granting = diff_of_two_dicts(grant_config, current_grants_dict) %}\n {% set needs_revoking = diff_of_two_dicts(current_grants_dict, grant_config) %}\n {% if not (needs_granting or needs_revoking) %}\n {{ log('On ' ~ relation.render() ~': All grants are in place, no revocation or granting needed.')}}\n {% endif %}\n {% else %}\n {#-- We don't think there's any chance of previous grants having carried over. --#}\n {#-- Jump straight to granting what the user has configured. --#}\n {% set needs_revoking = {} %}\n {% set needs_granting = grant_config %}\n {% endif %}\n {% if needs_granting or needs_revoking %}\n {% set revoke_statement_list = get_dcl_statement_list(relation, needs_revoking, get_revoke_sql) %}\n {% set grant_statement_list = get_dcl_statement_list(relation, needs_granting, get_grant_sql) %}\n {% set dcl_statement_list = revoke_statement_list + grant_statement_list %}\n {% if dcl_statement_list %}\n {{ call_dcl_statements(dcl_statement_list) }}\n {% endif %}\n {% endif %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.get_show_grant_sql", "macro.dbt.get_dcl_statement_list", "macro.dbt.call_dcl_statements"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4802392, "supported_languages": null}, "macro.dbt.get_show_sql": {"name": "get_show_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.get_show_sql", "macro_sql": "{% macro get_show_sql(compiled_code, sql_header, limit) -%}\n {%- if sql_header is not none -%}\n {{ sql_header }}\n {%- endif %}\n {{ get_limit_subquery_sql(compiled_code, limit) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_limit_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4805849, "supported_languages": null}, "macro.dbt.get_limit_subquery_sql": {"name": "get_limit_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.get_limit_subquery_sql", "macro_sql": "\n{%- macro get_limit_subquery_sql(sql, limit) -%}\n {{ adapter.dispatch('get_limit_sql', 'dbt')(sql, limit) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_limit_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.480739, "supported_languages": null}, "macro.dbt.default__get_limit_sql": {"name": "default__get_limit_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.default__get_limit_sql", "macro_sql": "{% macro default__get_limit_sql(sql, limit) %}\n {{ sql }}\n {% if limit is not none %}\n limit {{ limit }}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.480892, "supported_languages": null}, "macro.dbt.alter_column_comment": {"name": "alter_column_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.alter_column_comment", "macro_sql": "{% macro alter_column_comment(relation, column_dict) -%}\n {{ return(adapter.dispatch('alter_column_comment', 'dbt')(relation, column_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4812741, "supported_languages": null}, "macro.dbt.default__alter_column_comment": {"name": "default__alter_column_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__alter_column_comment", "macro_sql": "{% macro default__alter_column_comment(relation, column_dict) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_column_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.481416, "supported_languages": null}, "macro.dbt.alter_relation_comment": {"name": "alter_relation_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.alter_relation_comment", "macro_sql": "{% macro alter_relation_comment(relation, relation_comment) -%}\n {{ return(adapter.dispatch('alter_relation_comment', 'dbt')(relation, relation_comment)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__alter_relation_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.481587, "supported_languages": null}, "macro.dbt.default__alter_relation_comment": {"name": "default__alter_relation_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__alter_relation_comment", "macro_sql": "{% macro default__alter_relation_comment(relation, relation_comment) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_relation_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.481725, "supported_languages": null}, "macro.dbt.persist_docs": {"name": "persist_docs", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.persist_docs", "macro_sql": "{% macro persist_docs(relation, model, for_relation=true, for_columns=true) -%}\n {{ return(adapter.dispatch('persist_docs', 'dbt')(relation, model, for_relation, for_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4821188, "supported_languages": null}, "macro.dbt.default__persist_docs": {"name": "default__persist_docs", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__persist_docs", "macro_sql": "{% macro default__persist_docs(relation, model, for_relation, for_columns) -%}\n {% if for_relation and config.persist_relation_docs() and model.description %}\n {% do run_query(alter_relation_comment(relation, model.description)) %}\n {% endif %}\n\n {% if for_columns and config.persist_column_docs() and model.columns %}\n {% do run_query(alter_column_comment(relation, model.columns)) %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.alter_relation_comment", "macro.dbt.alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.48267, "supported_languages": null}, "macro.dbt.get_catalog_relations": {"name": "get_catalog_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog_relations", "macro_sql": "{% macro get_catalog_relations(information_schema, relations) -%}\n {{ return(adapter.dispatch('get_catalog_relations', 'dbt')(information_schema, relations)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4835498, "supported_languages": null}, "macro.dbt.default__get_catalog_relations": {"name": "default__get_catalog_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog_relations", "macro_sql": "{% macro default__get_catalog_relations(information_schema, relations) -%}\n {% set typename = adapter.type() %}\n {% set msg -%}\n get_catalog_relations not implemented for {{ typename }}\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.483795, "supported_languages": null}, "macro.dbt.get_catalog": {"name": "get_catalog", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog", "macro_sql": "{% macro get_catalog(information_schema, schemas) -%}\n {{ return(adapter.dispatch('get_catalog', 'dbt')(information_schema, schemas)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.484092, "supported_languages": null}, "macro.dbt.default__get_catalog": {"name": "default__get_catalog", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog", "macro_sql": "{% macro default__get_catalog(information_schema, schemas) -%}\n\n {% set typename = adapter.type() %}\n {% set msg -%}\n get_catalog not implemented for {{ typename }}\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4843268, "supported_languages": null}, "macro.dbt.information_schema_name": {"name": "information_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.information_schema_name", "macro_sql": "{% macro information_schema_name(database) %}\n {{ return(adapter.dispatch('information_schema_name', 'dbt')(database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__information_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.484498, "supported_languages": null}, "macro.dbt.default__information_schema_name": {"name": "default__information_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__information_schema_name", "macro_sql": "{% macro default__information_schema_name(database) -%}\n {%- if database -%}\n {{ database }}.INFORMATION_SCHEMA\n {%- else -%}\n INFORMATION_SCHEMA\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.484637, "supported_languages": null}, "macro.dbt.list_schemas": {"name": "list_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_schemas", "macro_sql": "{% macro list_schemas(database) -%}\n {{ return(adapter.dispatch('list_schemas', 'dbt')(database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__list_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4847941, "supported_languages": null}, "macro.dbt.default__list_schemas": {"name": "default__list_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_schemas", "macro_sql": "{% macro default__list_schemas(database) -%}\n {% set sql %}\n select distinct schema_name\n from {{ information_schema_name(database) }}.SCHEMATA\n where catalog_name ilike '{{ database }}'\n {% endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.information_schema_name", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4850261, "supported_languages": null}, "macro.dbt.check_schema_exists": {"name": "check_schema_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.check_schema_exists", "macro_sql": "{% macro check_schema_exists(information_schema, schema) -%}\n {{ return(adapter.dispatch('check_schema_exists', 'dbt')(information_schema, schema)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__check_schema_exists"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.485204, "supported_languages": null}, "macro.dbt.default__check_schema_exists": {"name": "default__check_schema_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__check_schema_exists", "macro_sql": "{% macro default__check_schema_exists(information_schema, schema) -%}\n {% set sql -%}\n select count(*)\n from {{ information_schema.replace(information_schema_view='SCHEMATA') }}\n where catalog_name='{{ information_schema.database }}'\n and schema_name='{{ schema }}'\n {%- endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.replace", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.485486, "supported_languages": null}, "macro.dbt.list_relations_without_caching": {"name": "list_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_relations_without_caching", "macro_sql": "{% macro list_relations_without_caching(schema_relation) %}\n {{ return(adapter.dispatch('list_relations_without_caching', 'dbt')(schema_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__list_relations_without_caching"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.485657, "supported_languages": null}, "macro.dbt.default__list_relations_without_caching": {"name": "default__list_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_relations_without_caching", "macro_sql": "{% macro default__list_relations_without_caching(schema_relation) %}\n {{ exceptions.raise_not_implemented(\n 'list_relations_without_caching macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.485798, "supported_languages": null}, "macro.dbt.get_catalog_for_single_relation": {"name": "get_catalog_for_single_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog_for_single_relation", "macro_sql": "{% macro get_catalog_for_single_relation(relation) %}\n {{ return(adapter.dispatch('get_catalog_for_single_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_catalog_for_single_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.485961, "supported_languages": null}, "macro.dbt.default__get_catalog_for_single_relation": {"name": "default__get_catalog_for_single_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog_for_single_relation", "macro_sql": "{% macro default__get_catalog_for_single_relation(relation) %}\n {{ exceptions.raise_not_implemented(\n 'get_catalog_for_single_relation macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.486099, "supported_languages": null}, "macro.dbt.get_relations": {"name": "get_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_relations", "macro_sql": "{% macro get_relations() %}\n {{ return(adapter.dispatch('get_relations', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.48624, "supported_languages": null}, "macro.dbt.default__get_relations": {"name": "default__get_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_relations", "macro_sql": "{% macro default__get_relations() %}\n {{ exceptions.raise_not_implemented(\n 'get_relations macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4864159, "supported_languages": null}, "macro.dbt.get_relation_last_modified": {"name": "get_relation_last_modified", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_relation_last_modified", "macro_sql": "{% macro get_relation_last_modified(information_schema, relations) %}\n {{ return(adapter.dispatch('get_relation_last_modified', 'dbt')(information_schema, relations)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_relation_last_modified"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.48667, "supported_languages": null}, "macro.dbt.default__get_relation_last_modified": {"name": "default__get_relation_last_modified", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_relation_last_modified", "macro_sql": "{% macro default__get_relation_last_modified(information_schema, relations) %}\n {{ exceptions.raise_not_implemented(\n 'get_relation_last_modified macro not implemented for adapter ' + adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.486822, "supported_languages": null}, "macro.dbt.get_columns_in_relation": {"name": "get_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_columns_in_relation", "macro_sql": "{% macro get_columns_in_relation(relation) -%}\n {{ return(adapter.dispatch('get_columns_in_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.487904, "supported_languages": null}, "macro.dbt.default__get_columns_in_relation": {"name": "default__get_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_columns_in_relation", "macro_sql": "{% macro default__get_columns_in_relation(relation) -%}\n {{ exceptions.raise_not_implemented(\n 'get_columns_in_relation macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4880378, "supported_languages": null}, "macro.dbt.sql_convert_columns_in_relation": {"name": "sql_convert_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.sql_convert_columns_in_relation", "macro_sql": "{% macro sql_convert_columns_in_relation(table) -%}\n {% set columns = [] %}\n {% for row in table %}\n {% do columns.append(api.Column(*row)) %}\n {% endfor %}\n {{ return(columns) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4882948, "supported_languages": null}, "macro.dbt.get_empty_subquery_sql": {"name": "get_empty_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_empty_subquery_sql", "macro_sql": "{% macro get_empty_subquery_sql(select_sql, select_sql_header=none) -%}\n {{ return(adapter.dispatch('get_empty_subquery_sql', 'dbt')(select_sql, select_sql_header)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.488574, "supported_languages": null}, "macro.dbt.default__get_empty_subquery_sql": {"name": "default__get_empty_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_empty_subquery_sql", "macro_sql": "{% macro default__get_empty_subquery_sql(select_sql, select_sql_header=none) %}\n {%- if select_sql_header is not none -%}\n {{ select_sql_header }}\n {%- endif -%}\n select * from (\n {{ select_sql }}\n ) as __dbt_sbq\n where false\n limit 0\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4887521, "supported_languages": null}, "macro.dbt.get_empty_schema_sql": {"name": "get_empty_schema_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_empty_schema_sql", "macro_sql": "{% macro get_empty_schema_sql(columns) -%}\n {{ return(adapter.dispatch('get_empty_schema_sql', 'dbt')(columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_empty_schema_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4889028, "supported_languages": null}, "macro.dbt.default__get_empty_schema_sql": {"name": "default__get_empty_schema_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_empty_schema_sql", "macro_sql": "{% macro default__get_empty_schema_sql(columns) %}\n {%- set col_err = [] -%}\n {%- set col_naked_numeric = [] -%}\n select\n {% for i in columns %}\n {%- set col = columns[i] -%}\n {%- if col['data_type'] is not defined -%}\n {%- do col_err.append(col['name']) -%}\n {#-- If this column's type is just 'numeric' then it is missing precision/scale, raise a warning --#}\n {%- elif col['data_type'].strip().lower() in ('numeric', 'decimal', 'number') -%}\n {%- do col_naked_numeric.append(col['name']) -%}\n {%- endif -%}\n {% set col_name = adapter.quote(col['name']) if col.get('quote') else col['name'] %}\n {{ cast('null', col['data_type']) }} as {{ col_name }}{{ \", \" if not loop.last }}\n {%- endfor -%}\n {%- if (col_err | length) > 0 -%}\n {{ exceptions.column_type_missing(column_names=col_err) }}\n {%- elif (col_naked_numeric | length) > 0 -%}\n {{ exceptions.warn(\"Detected columns with numeric type and unspecified precision/scale, this can lead to unintended rounding: \" ~ col_naked_numeric ~ \"`\") }}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.489866, "supported_languages": null}, "macro.dbt.get_column_schema_from_query": {"name": "get_column_schema_from_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_column_schema_from_query", "macro_sql": "{% macro get_column_schema_from_query(select_sql, select_sql_header=none) -%}\n {% set columns = [] %}\n {# -- Using an 'empty subquery' here to get the same schema as the given select_sql statement, without necessitating a data scan.#}\n {% set sql = get_empty_subquery_sql(select_sql, select_sql_header) %}\n {% set column_schema = adapter.get_column_schema_from_query(sql) %}\n {{ return(column_schema) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.490153, "supported_languages": null}, "macro.dbt.get_columns_in_query": {"name": "get_columns_in_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_columns_in_query", "macro_sql": "{% macro get_columns_in_query(select_sql) -%}\n {{ return(adapter.dispatch('get_columns_in_query', 'dbt')(select_sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.490307, "supported_languages": null}, "macro.dbt.default__get_columns_in_query": {"name": "default__get_columns_in_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_columns_in_query", "macro_sql": "{% macro default__get_columns_in_query(select_sql) %}\n {% call statement('get_columns_in_query', fetch_result=True, auto_begin=False) -%}\n {{ get_empty_subquery_sql(select_sql) }}\n {% endcall %}\n {{ return(load_result('get_columns_in_query').table.columns | map(attribute='name') | list) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4905941, "supported_languages": null}, "macro.dbt.alter_column_type": {"name": "alter_column_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.alter_column_type", "macro_sql": "{% macro alter_column_type(relation, column_name, new_column_type) -%}\n {{ return(adapter.dispatch('alter_column_type', 'dbt')(relation, column_name, new_column_type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.490788, "supported_languages": null}, "macro.dbt.default__alter_column_type": {"name": "default__alter_column_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__alter_column_type", "macro_sql": "{% macro default__alter_column_type(relation, column_name, new_column_type) -%}\n {#\n 1. Create a new column (w/ temp name and correct type)\n 2. Copy data over to it\n 3. Drop the existing column (cascade!)\n 4. Rename the new column to existing column\n #}\n {%- set tmp_column = column_name + \"__dbt_alter\" -%}\n\n {% call statement('alter_column_type') %}\n alter table {{ relation.render() }} add column {{ adapter.quote(tmp_column) }} {{ new_column_type }};\n update {{ relation.render() }} set {{ adapter.quote(tmp_column) }} = {{ adapter.quote(column_name) }};\n alter table {{ relation.render() }} drop column {{ adapter.quote(column_name) }} cascade;\n alter table {{ relation.render() }} rename column {{ adapter.quote(tmp_column) }} to {{ adapter.quote(column_name) }}\n {% endcall %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4913259, "supported_languages": null}, "macro.dbt.alter_relation_add_remove_columns": {"name": "alter_relation_add_remove_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.alter_relation_add_remove_columns", "macro_sql": "{% macro alter_relation_add_remove_columns(relation, add_columns = none, remove_columns = none) -%}\n {{ return(adapter.dispatch('alter_relation_add_remove_columns', 'dbt')(relation, add_columns, remove_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__alter_relation_add_remove_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.491541, "supported_languages": null}, "macro.dbt.default__alter_relation_add_remove_columns": {"name": "default__alter_relation_add_remove_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__alter_relation_add_remove_columns", "macro_sql": "{% macro default__alter_relation_add_remove_columns(relation, add_columns, remove_columns) %}\n\n {% if add_columns is none %}\n {% set add_columns = [] %}\n {% endif %}\n {% if remove_columns is none %}\n {% set remove_columns = [] %}\n {% endif %}\n\n {% set sql -%}\n\n alter {{ relation.type }} {{ relation.render() }}\n\n {% for column in add_columns %}\n add column {{ column.name }} {{ column.data_type }}{{ ',' if not loop.last }}\n {% endfor %}{{ ',' if add_columns and remove_columns }}\n\n {% for column in remove_columns %}\n drop column {{ column.name }}{{ ',' if not loop.last }}\n {% endfor %}\n\n {%- endset -%}\n\n {% do run_query(sql) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.492359, "supported_languages": null}, "macro.dbt.get_fixture_sql": {"name": "get_fixture_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.get_fixture_sql", "macro_sql": "{% macro get_fixture_sql(rows, column_name_to_data_types) %}\n-- Fixture for {{ model.name }}\n{% set default_row = {} %}\n\n{%- if not column_name_to_data_types -%}\n{#-- Use defer_relation IFF it is available in the manifest and 'this' is missing from the database --#}\n{%- set this_or_defer_relation = defer_relation if (defer_relation and not load_relation(this)) else this -%}\n{%- set columns_in_relation = adapter.get_columns_in_relation(this_or_defer_relation) -%}\n\n{%- set column_name_to_data_types = {} -%}\n{%- for column in columns_in_relation -%}\n{#-- This needs to be a case-insensitive comparison --#}\n{%- do column_name_to_data_types.update({column.name|lower: column.data_type}) -%}\n{%- endfor -%}\n{%- endif -%}\n\n{%- if not column_name_to_data_types -%}\n {{ exceptions.raise_compiler_error(\"Not able to get columns for unit test '\" ~ model.name ~ \"' from relation \" ~ this ~ \" because the relation doesn't exist\") }}\n{%- endif -%}\n\n{%- for column_name, column_type in column_name_to_data_types.items() -%}\n {%- do default_row.update({column_name: (safe_cast(\"null\", column_type) | trim )}) -%}\n{%- endfor -%}\n\n{{ validate_fixture_rows(rows, row_number) }}\n\n{%- for row in rows -%}\n{%- set formatted_row = format_row(row, column_name_to_data_types) -%}\n{%- set default_row_copy = default_row.copy() -%}\n{%- do default_row_copy.update(formatted_row) -%}\nselect\n{%- for column_name, column_value in default_row_copy.items() %} {{ column_value }} as {{ column_name }}{% if not loop.last -%}, {%- endif %}\n{%- endfor %}\n{%- if not loop.last %}\nunion all\n{% endif %}\n{%- endfor -%}\n\n{%- if (rows | length) == 0 -%}\n select\n {%- for column_name, column_value in default_row.items() %} {{ column_value }} as {{ column_name }}{% if not loop.last -%},{%- endif %}\n {%- endfor %}\n limit 0\n{%- endif -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.load_relation", "macro.dbt.safe_cast", "macro.dbt.validate_fixture_rows", "macro.dbt.format_row"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.494761, "supported_languages": null}, "macro.dbt.get_expected_sql": {"name": "get_expected_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.get_expected_sql", "macro_sql": "{% macro get_expected_sql(rows, column_name_to_data_types) %}\n\n{%- if (rows | length) == 0 -%}\n select * from dbt_internal_unit_test_actual\n limit 0\n{%- else -%}\n{%- for row in rows -%}\n{%- set formatted_row = format_row(row, column_name_to_data_types) -%}\nselect\n{%- for column_name, column_value in formatted_row.items() %} {{ column_value }} as {{ column_name }}{% if not loop.last -%}, {%- endif %}\n{%- endfor %}\n{%- if not loop.last %}\nunion all\n{% endif %}\n{%- endfor -%}\n{%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.format_row"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.495254, "supported_languages": null}, "macro.dbt.format_row": {"name": "format_row", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.format_row", "macro_sql": "\n\n{%- macro format_row(row, column_name_to_data_types) -%}\n {#-- generate case-insensitive formatted row --#}\n {% set formatted_row = {} %}\n {%- for column_name, column_value in row.items() -%}\n {% set column_name = column_name|lower %}\n\n {%- if column_name not in column_name_to_data_types %}\n {#-- if user-provided row contains column name that relation does not contain, raise an error --#}\n {% set fixture_name = \"expected output\" if model.resource_type == 'unit_test' else (\"'\" ~ model.name ~ \"'\") %}\n {{ exceptions.raise_compiler_error(\n \"Invalid column name: '\" ~ column_name ~ \"' in unit test fixture for \" ~ fixture_name ~ \".\"\n \"\\nAccepted columns for \" ~ fixture_name ~ \" are: \" ~ (column_name_to_data_types.keys()|list)\n ) }}\n {%- endif -%}\n\n {%- set column_type = column_name_to_data_types[column_name] %}\n\n {#-- sanitize column_value: wrap yaml strings in quotes, apply cast --#}\n {%- set column_value_clean = column_value -%}\n {%- if column_value is string -%}\n {%- set column_value_clean = dbt.string_literal(dbt.escape_single_quotes(column_value)) -%}\n {%- elif column_value is none -%}\n {%- set column_value_clean = 'null' -%}\n {%- endif -%}\n\n {%- set row_update = {column_name: safe_cast(column_value_clean, column_type) } -%}\n {%- do formatted_row.update(row_update) -%}\n {%- endfor -%}\n {{ return(formatted_row) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.string_literal", "macro.dbt.escape_single_quotes", "macro.dbt.safe_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.496167, "supported_languages": null}, "macro.dbt.validate_fixture_rows": {"name": "validate_fixture_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.validate_fixture_rows", "macro_sql": "{%- macro validate_fixture_rows(rows, row_number) -%}\n {{ return(adapter.dispatch('validate_fixture_rows', 'dbt')(rows, row_number)) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__validate_fixture_rows"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.496346, "supported_languages": null}, "macro.dbt.default__validate_fixture_rows": {"name": "default__validate_fixture_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.default__validate_fixture_rows", "macro_sql": "{%- macro default__validate_fixture_rows(rows, row_number) -%}\n {# This is an abstract method for adapter overrides as needed #}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.496425, "supported_languages": null}, "macro.dbt.resolve_model_name": {"name": "resolve_model_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.resolve_model_name", "macro_sql": "{% macro resolve_model_name(input_model_name) %}\n {{ return(adapter.dispatch('resolve_model_name', 'dbt')(input_model_name)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.497062, "supported_languages": null}, "macro.dbt.default__resolve_model_name": {"name": "default__resolve_model_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.default__resolve_model_name", "macro_sql": "\n\n{%- macro default__resolve_model_name(input_model_name) -%}\n {{ input_model_name | string | replace('\"', '\\\"') }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.497192, "supported_languages": null}, "macro.dbt.build_ref_function": {"name": "build_ref_function", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_ref_function", "macro_sql": "{% macro build_ref_function(model) %}\n\n {%- set ref_dict = {} -%}\n {%- for _ref in model.refs -%}\n {% set _ref_args = [_ref.get('package'), _ref['name']] if _ref.get('package') else [_ref['name'],] %}\n {%- set resolved = ref(*_ref_args, v=_ref.get('version')) -%}\n {%- if _ref.get('version') -%}\n {% do _ref_args.extend([\"v\" ~ _ref['version']]) %}\n {%- endif -%}\n {%- do ref_dict.update({_ref_args | join('.'): resolve_model_name(resolved)}) -%}\n {%- endfor -%}\n\ndef ref(*args, **kwargs):\n refs = {{ ref_dict | tojson }}\n key = '.'.join(args)\n version = kwargs.get(\"v\") or kwargs.get(\"version\")\n if version:\n key += f\".v{version}\"\n dbt_load_df_function = kwargs.get(\"dbt_load_df_function\")\n return dbt_load_df_function(refs[key])\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.497853, "supported_languages": null}, "macro.dbt.build_source_function": {"name": "build_source_function", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_source_function", "macro_sql": "{% macro build_source_function(model) %}\n\n {%- set source_dict = {} -%}\n {%- for _source in model.sources -%}\n {%- set resolved = source(*_source) -%}\n {%- do source_dict.update({_source | join('.'): resolve_model_name(resolved)}) -%}\n {%- endfor -%}\n\ndef source(*args, dbt_load_df_function):\n sources = {{ source_dict | tojson }}\n key = '.'.join(args)\n return dbt_load_df_function(sources[key])\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.4981928, "supported_languages": null}, "macro.dbt.build_config_dict": {"name": "build_config_dict", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_config_dict", "macro_sql": "{% macro build_config_dict(model) %}\n {%- set config_dict = {} -%}\n {% set config_dbt_used = zip(model.config.config_keys_used, model.config.config_keys_defaults) | list %}\n {%- for key, default in config_dbt_used -%}\n {# weird type testing with enum, would be much easier to write this logic in Python! #}\n {%- if key == \"language\" -%}\n {%- set value = \"python\" -%}\n {%- endif -%}\n {%- set value = model.config.get(key, default) -%}\n {%- do config_dict.update({key: value}) -%}\n {%- endfor -%}\nconfig_dict = {{ config_dict }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.498658, "supported_languages": null}, "macro.dbt.py_script_postfix": {"name": "py_script_postfix", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.py_script_postfix", "macro_sql": "{% macro py_script_postfix(model) %}\n# This part is user provided model code\n# you will need to copy the next section to run the code\n# COMMAND ----------\n# this part is dbt logic for get ref work, do not modify\n\n{{ build_ref_function(model ) }}\n{{ build_source_function(model ) }}\n{{ build_config_dict(model) }}\n\nclass config:\n def __init__(self, *args, **kwargs):\n pass\n\n @staticmethod\n def get(key, default=None):\n return config_dict.get(key, default)\n\nclass this:\n \"\"\"dbt.this() or dbt.this.identifier\"\"\"\n database = \"{{ this.database }}\"\n schema = \"{{ this.schema }}\"\n identifier = \"{{ this.identifier }}\"\n {% set this_relation_name = resolve_model_name(this) %}\n def __repr__(self):\n return '{{ this_relation_name }}'\n\n\nclass dbtObj:\n def __init__(self, load_df_function) -> None:\n self.source = lambda *args: source(*args, dbt_load_df_function=load_df_function)\n self.ref = lambda *args, **kwargs: ref(*args, **kwargs, dbt_load_df_function=load_df_function)\n self.config = config\n self.this = this()\n self.is_incremental = {{ is_incremental() }}\n\n# COMMAND ----------\n{{py_script_comment()}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.build_ref_function", "macro.dbt.build_source_function", "macro.dbt.build_config_dict", "macro.dbt.resolve_model_name", "macro.dbt.is_incremental", "macro.dbt.py_script_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.499053, "supported_languages": null}, "macro.dbt.py_script_comment": {"name": "py_script_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.py_script_comment", "macro_sql": "{%macro py_script_comment()%}\n{%endmacro%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.499114, "supported_languages": null}, "macro.dbt.test_unique": {"name": "test_unique", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_unique", "macro_sql": "{% test unique(model, column_name) %}\n {% set macro = adapter.dispatch('test_unique', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_unique"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.499504, "supported_languages": null}, "macro.dbt.test_not_null": {"name": "test_not_null", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_not_null", "macro_sql": "{% test not_null(model, column_name) %}\n {% set macro = adapter.dispatch('test_not_null', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_not_null"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.499716, "supported_languages": null}, "macro.dbt.test_accepted_values": {"name": "test_accepted_values", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_accepted_values", "macro_sql": "{% test accepted_values(model, column_name, values, quote=True) %}\n {% set macro = adapter.dispatch('test_accepted_values', 'dbt') %}\n {{ macro(model, column_name, values, quote) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.499988, "supported_languages": null}, "macro.dbt.test_relationships": {"name": "test_relationships", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_relationships", "macro_sql": "{% test relationships(model, column_name, to, field) %}\n {% set macro = adapter.dispatch('test_relationships', 'dbt') %}\n {{ macro(model, column_name, to, field) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_relationships"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.500236, "supported_languages": null}, "macro.dbt_utils.get_url_host": {"name": "get_url_host", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_host.sql", "original_file_path": "macros/web/get_url_host.sql", "unique_id": "macro.dbt_utils.get_url_host", "macro_sql": "{% macro get_url_host(field) -%}\n {{ return(adapter.dispatch('get_url_host', 'dbt_utils')(field)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_url_host"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.500503, "supported_languages": null}, "macro.dbt_utils.default__get_url_host": {"name": "default__get_url_host", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_host.sql", "original_file_path": "macros/web/get_url_host.sql", "unique_id": "macro.dbt_utils.default__get_url_host", "macro_sql": "{% macro default__get_url_host(field) -%}\n\n{%- set parsed =\n dbt.split_part(\n dbt.split_part(\n dbt.replace(\n dbt.replace(\n dbt.replace(field, \"'android-app://'\", \"''\"\n ), \"'http://'\", \"''\"\n ), \"'https://'\", \"''\"\n ), \"'/'\", 1\n ), \"'?'\", 1\n )\n\n-%}\n\n\n {{ dbt.safe_cast(\n parsed,\n dbt.type_string()\n )}}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.split_part", "macro.dbt.replace", "macro.dbt.safe_cast", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.50089, "supported_languages": null}, "macro.dbt_utils.get_url_path": {"name": "get_url_path", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_path.sql", "original_file_path": "macros/web/get_url_path.sql", "unique_id": "macro.dbt_utils.get_url_path", "macro_sql": "{% macro get_url_path(field) -%}\n {{ return(adapter.dispatch('get_url_path', 'dbt_utils')(field)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_url_path"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.501193, "supported_languages": null}, "macro.dbt_utils.default__get_url_path": {"name": "default__get_url_path", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_path.sql", "original_file_path": "macros/web/get_url_path.sql", "unique_id": "macro.dbt_utils.default__get_url_path", "macro_sql": "{% macro default__get_url_path(field) -%}\n\n {%- set stripped_url =\n dbt.replace(\n dbt.replace(field, \"'http://'\", \"''\"), \"'https://'\", \"''\")\n -%}\n\n {%- set first_slash_pos -%}\n coalesce(\n nullif({{ dbt.position(\"'/'\", stripped_url) }}, 0),\n {{ dbt.position(\"'?'\", stripped_url) }} - 1\n )\n {%- endset -%}\n\n {%- set parsed_path =\n dbt.split_part(\n dbt.right(\n stripped_url,\n dbt.length(stripped_url) ~ \"-\" ~ first_slash_pos\n ),\n \"'?'\", 1\n )\n -%}\n\n {{ dbt.safe_cast(\n parsed_path,\n dbt.type_string()\n )}}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.replace", "macro.dbt.position", "macro.dbt.split_part", "macro.dbt.right", "macro.dbt.length", "macro.dbt.safe_cast", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.501728, "supported_languages": null}, "macro.dbt_utils.get_url_parameter": {"name": "get_url_parameter", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_parameter.sql", "original_file_path": "macros/web/get_url_parameter.sql", "unique_id": "macro.dbt_utils.get_url_parameter", "macro_sql": "{% macro get_url_parameter(field, url_parameter) -%}\n {{ return(adapter.dispatch('get_url_parameter', 'dbt_utils')(field, url_parameter)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.502121, "supported_languages": null}, "macro.dbt_utils.default__get_url_parameter": {"name": "default__get_url_parameter", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_parameter.sql", "original_file_path": "macros/web/get_url_parameter.sql", "unique_id": "macro.dbt_utils.default__get_url_parameter", "macro_sql": "{% macro default__get_url_parameter(field, url_parameter) -%}\n\n{%- set formatted_url_parameter = \"'\" + url_parameter + \"='\" -%}\n\n{%- set split = dbt.split_part(dbt.split_part(field, formatted_url_parameter, 2), \"'&'\", 1) -%}\n\nnullif({{ split }},'')\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.split_part"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.502657, "supported_languages": null}, "macro.dbt_utils.test_fewer_rows_than": {"name": "test_fewer_rows_than", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/fewer_rows_than.sql", "original_file_path": "macros/generic_tests/fewer_rows_than.sql", "unique_id": "macro.dbt_utils.test_fewer_rows_than", "macro_sql": "{% test fewer_rows_than(model, compare_model, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_fewer_rows_than', 'dbt_utils')(model, compare_model, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_fewer_rows_than"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5033312, "supported_languages": null}, "macro.dbt_utils.default__test_fewer_rows_than": {"name": "default__test_fewer_rows_than", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/fewer_rows_than.sql", "original_file_path": "macros/generic_tests/fewer_rows_than.sql", "unique_id": "macro.dbt_utils.default__test_fewer_rows_than", "macro_sql": "{% macro default__test_fewer_rows_than(model, compare_model, group_by_columns) %}\n\n{{ config(fail_calc = 'sum(coalesce(row_count_delta, 0))') }}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set join_gb_cols %}\n {% for c in group_by_columns %}\n and a.{{c}} = b.{{c}}\n {% endfor %}\n {% endset %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n{#-- We must add a fake join key in case additional grouping variables are not provided --#}\n{#-- Redshift does not allow for dynamically created join conditions (e.g. full join on 1 = 1 --#}\n{#-- The same logic is used in equal_rowcount. In case of changes, maintain consistent logic --#}\n{% set group_by_columns = ['id_dbtutils_test_fewer_rows_than'] + group_by_columns %}\n{% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n\n\nwith a as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_fewer_rows_than,\n count(*) as count_our_model \n from {{ model }}\n {{ groupby_gb_cols }}\n\n),\nb as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_fewer_rows_than,\n count(*) as count_comparison_model \n from {{ compare_model }}\n {{ groupby_gb_cols }}\n\n),\ncounts as (\n\n select\n\n {% for c in group_by_columns -%}\n a.{{c}} as {{c}}_a,\n b.{{c}} as {{c}}_b,\n {% endfor %}\n\n count_our_model,\n count_comparison_model\n from a\n full join b on \n a.id_dbtutils_test_fewer_rows_than = b.id_dbtutils_test_fewer_rows_than\n {{ join_gb_cols }}\n\n),\nfinal as (\n\n select *,\n case\n -- fail the test if we have more rows than the reference model and return the row count delta\n when count_our_model > count_comparison_model then (count_our_model - count_comparison_model)\n -- fail the test if they are the same number\n when count_our_model = count_comparison_model then 1\n -- pass the test if the delta is positive (i.e. return the number 0)\n else 0\n end as row_count_delta\n from counts\n\n)\n\nselect * from final\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.504173, "supported_languages": null}, "macro.dbt_utils.test_equal_rowcount": {"name": "test_equal_rowcount", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equal_rowcount.sql", "original_file_path": "macros/generic_tests/equal_rowcount.sql", "unique_id": "macro.dbt_utils.test_equal_rowcount", "macro_sql": "{% test equal_rowcount(model, compare_model, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_equal_rowcount', 'dbt_utils')(model, compare_model, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_equal_rowcount"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.504717, "supported_languages": null}, "macro.dbt_utils.default__test_equal_rowcount": {"name": "default__test_equal_rowcount", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equal_rowcount.sql", "original_file_path": "macros/generic_tests/equal_rowcount.sql", "unique_id": "macro.dbt_utils.default__test_equal_rowcount", "macro_sql": "{% macro default__test_equal_rowcount(model, compare_model, group_by_columns) %}\n\n{#-- Needs to be set at parse time, before we return '' below --#}\n{{ config(fail_calc = 'sum(coalesce(diff_count, 0))') }}\n\n{#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n{%- if not execute -%}\n {{ return('') }}\n{% endif %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(', ') + ', ' %}\n {% set join_gb_cols %}\n {% for c in group_by_columns %}\n and a.{{c}} = b.{{c}}\n {% endfor %}\n {% endset %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n{#-- We must add a fake join key in case additional grouping variables are not provided --#}\n{#-- Redshift does not allow for dynamically created join conditions (e.g. full join on 1 = 1 --#}\n{#-- The same logic is used in fewer_rows_than. In case of changes, maintain consistent logic --#}\n{% set group_by_columns = ['id_dbtutils_test_equal_rowcount'] + group_by_columns %}\n{% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n\nwith a as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_equal_rowcount,\n count(*) as count_a \n from {{ model }}\n {{groupby_gb_cols}}\n\n\n),\nb as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_equal_rowcount,\n count(*) as count_b \n from {{ compare_model }}\n {{groupby_gb_cols}}\n\n),\nfinal as (\n\n select\n \n {% for c in group_by_columns -%}\n a.{{c}} as {{c}}_a,\n b.{{c}} as {{c}}_b,\n {% endfor %}\n\n count_a,\n count_b,\n abs(count_a - count_b) as diff_count\n\n from a\n full join b\n on\n a.id_dbtutils_test_equal_rowcount = b.id_dbtutils_test_equal_rowcount\n {{join_gb_cols}}\n\n\n)\n\nselect * from final\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.505589, "supported_languages": null}, "macro.dbt_utils.test_relationships_where": {"name": "test_relationships_where", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/relationships_where.sql", "original_file_path": "macros/generic_tests/relationships_where.sql", "unique_id": "macro.dbt_utils.test_relationships_where", "macro_sql": "{% test relationships_where(model, column_name, to, field, from_condition=\"1=1\", to_condition=\"1=1\") %}\n {{ return(adapter.dispatch('test_relationships_where', 'dbt_utils')(model, column_name, to, field, from_condition, to_condition)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_relationships_where"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5060139, "supported_languages": null}, "macro.dbt_utils.default__test_relationships_where": {"name": "default__test_relationships_where", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/relationships_where.sql", "original_file_path": "macros/generic_tests/relationships_where.sql", "unique_id": "macro.dbt_utils.default__test_relationships_where", "macro_sql": "{% macro default__test_relationships_where(model, column_name, to, field, from_condition=\"1=1\", to_condition=\"1=1\") %}\n\n{# T-SQL has no boolean data type so we use 1=1 which returns TRUE #}\n{# ref https://stackoverflow.com/a/7170753/3842610 #}\n\nwith left_table as (\n\n select\n {{column_name}} as id\n\n from {{model}}\n\n where {{column_name}} is not null\n and {{from_condition}}\n\n),\n\nright_table as (\n\n select\n {{field}} as id\n\n from {{to}}\n\n where {{field}} is not null\n and {{to_condition}}\n\n),\n\nexceptions as (\n\n select\n left_table.id,\n right_table.id as right_id\n\n from left_table\n\n left join right_table\n on left_table.id = right_table.id\n\n where right_table.id is null\n\n)\n\nselect * from exceptions\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5062988, "supported_languages": null}, "macro.dbt_utils.test_recency": {"name": "test_recency", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/recency.sql", "original_file_path": "macros/generic_tests/recency.sql", "unique_id": "macro.dbt_utils.test_recency", "macro_sql": "{% test recency(model, field, datepart, interval, ignore_time_component=False, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_recency', 'dbt_utils')(model, field, datepart, interval, ignore_time_component, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_recency"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.506779, "supported_languages": null}, "macro.dbt_utils.default__test_recency": {"name": "default__test_recency", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/recency.sql", "original_file_path": "macros/generic_tests/recency.sql", "unique_id": "macro.dbt_utils.default__test_recency", "macro_sql": "{% macro default__test_recency(model, field, datepart, interval, ignore_time_component, group_by_columns) %}\n\n{% set threshold = 'cast(' ~ dbt.dateadd(datepart, interval * -1, dbt.current_timestamp()) ~ ' as ' ~ ('date' if ignore_time_component else dbt.type_timestamp()) ~ ')' %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n\nwith recency as (\n\n select \n\n {{ select_gb_cols }}\n {% if ignore_time_component %}\n cast(max({{ field }}) as date) as most_recent\n {%- else %}\n max({{ field }}) as most_recent\n {%- endif %}\n\n from {{ model }}\n\n {{ groupby_gb_cols }}\n\n)\n\nselect\n\n {{ select_gb_cols }}\n most_recent,\n {{ threshold }} as threshold\n\nfrom recency\nwhere most_recent < {{ threshold }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.current_timestamp", "macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.507454, "supported_languages": null}, "macro.dbt_utils.test_not_constant": {"name": "test_not_constant", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_constant.sql", "original_file_path": "macros/generic_tests/not_constant.sql", "unique_id": "macro.dbt_utils.test_not_constant", "macro_sql": "{% test not_constant(model, column_name, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_not_constant', 'dbt_utils')(model, column_name, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_constant"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.507809, "supported_languages": null}, "macro.dbt_utils.default__test_not_constant": {"name": "default__test_not_constant", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_constant.sql", "original_file_path": "macros/generic_tests/not_constant.sql", "unique_id": "macro.dbt_utils.default__test_not_constant", "macro_sql": "{% macro default__test_not_constant(model, column_name, group_by_columns) %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n\nselect\n {# In TSQL, subquery aggregate columns need aliases #}\n {# thus: a filler col name, 'filler_column' #}\n {{select_gb_cols}}\n count(distinct {{ column_name }}) as filler_column\n\nfrom {{ model }}\n\n {{groupby_gb_cols}}\n\nhaving count(distinct {{ column_name }}) = 1\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.508184, "supported_languages": null}, "macro.dbt_utils.test_accepted_range": {"name": "test_accepted_range", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/accepted_range.sql", "original_file_path": "macros/generic_tests/accepted_range.sql", "unique_id": "macro.dbt_utils.test_accepted_range", "macro_sql": "{% test accepted_range(model, column_name, min_value=none, max_value=none, inclusive=true) %}\n {{ return(adapter.dispatch('test_accepted_range', 'dbt_utils')(model, column_name, min_value, max_value, inclusive)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_accepted_range"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.508595, "supported_languages": null}, "macro.dbt_utils.default__test_accepted_range": {"name": "default__test_accepted_range", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/accepted_range.sql", "original_file_path": "macros/generic_tests/accepted_range.sql", "unique_id": "macro.dbt_utils.default__test_accepted_range", "macro_sql": "{% macro default__test_accepted_range(model, column_name, min_value=none, max_value=none, inclusive=true) %}\n\nwith meet_condition as(\n select *\n from {{ model }}\n),\n\nvalidation_errors as (\n select *\n from meet_condition\n where\n -- never true, defaults to an empty result set. Exists to ensure any combo of the `or` clauses below succeeds\n 1 = 2\n\n {%- if min_value is not none %}\n -- records with a value >= min_value are permitted. The `not` flips this to find records that don't meet the rule.\n or not {{ column_name }} > {{- \"=\" if inclusive }} {{ min_value }}\n {%- endif %}\n\n {%- if max_value is not none %}\n -- records with a value <= max_value are permitted. The `not` flips this to find records that don't meet the rule.\n or not {{ column_name }} < {{- \"=\" if inclusive }} {{ max_value }}\n {%- endif %}\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.508984, "supported_languages": null}, "macro.dbt_utils.test_not_accepted_values": {"name": "test_not_accepted_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_accepted_values.sql", "original_file_path": "macros/generic_tests/not_accepted_values.sql", "unique_id": "macro.dbt_utils.test_not_accepted_values", "macro_sql": "{% test not_accepted_values(model, column_name, values, quote=True) %}\n {{ return(adapter.dispatch('test_not_accepted_values', 'dbt_utils')(model, column_name, values, quote)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.509341, "supported_languages": null}, "macro.dbt_utils.default__test_not_accepted_values": {"name": "default__test_not_accepted_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_accepted_values.sql", "original_file_path": "macros/generic_tests/not_accepted_values.sql", "unique_id": "macro.dbt_utils.default__test_not_accepted_values", "macro_sql": "{% macro default__test_not_accepted_values(model, column_name, values, quote=True) %}\nwith all_values as (\n\n select distinct\n {{ column_name }} as value_field\n\n from {{ model }}\n\n),\n\nvalidation_errors as (\n\n select\n value_field\n\n from all_values\n where value_field in (\n {% for value in values -%}\n {% if quote -%}\n '{{ value }}'\n {%- else -%}\n {{ value }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {%- endfor %}\n )\n\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5096588, "supported_languages": null}, "macro.dbt_utils.test_at_least_one": {"name": "test_at_least_one", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/at_least_one.sql", "original_file_path": "macros/generic_tests/at_least_one.sql", "unique_id": "macro.dbt_utils.test_at_least_one", "macro_sql": "{% test at_least_one(model, column_name, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_at_least_one', 'dbt_utils')(model, column_name, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_at_least_one"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.510083, "supported_languages": null}, "macro.dbt_utils.default__test_at_least_one": {"name": "default__test_at_least_one", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/at_least_one.sql", "original_file_path": "macros/generic_tests/at_least_one.sql", "unique_id": "macro.dbt_utils.default__test_at_least_one", "macro_sql": "{% macro default__test_at_least_one(model, column_name, group_by_columns) %}\n\n{% set pruned_cols = [column_name] %}\n\n{% if group_by_columns|length() > 0 %}\n\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n {% set pruned_cols = group_by_columns %}\n\n {% if column_name not in pruned_cols %}\n {% do pruned_cols.append(column_name) %}\n {% endif %}\n\n{% endif %}\n\n{% set select_pruned_cols = pruned_cols|join(' ,') %}\n\nselect *\nfrom (\n with pruned_rows as (\n select\n {{ select_pruned_cols }}\n from {{ model }}\n {% if group_by_columns|length() == 0 %}\n where {{ column_name }} is not null\n limit 1\n {% endif %}\n )\n select\n {# In TSQL, subquery aggregate columns need aliases #}\n {# thus: a filler col name, 'filler_column' #}\n {{select_gb_cols}}\n count({{ column_name }}) as filler_column\n\n from pruned_rows\n\n {{groupby_gb_cols}}\n\n having count({{ column_name }}) = 0\n\n) validation_errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.51085, "supported_languages": null}, "macro.dbt_utils.test_unique_combination_of_columns": {"name": "test_unique_combination_of_columns", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/unique_combination_of_columns.sql", "original_file_path": "macros/generic_tests/unique_combination_of_columns.sql", "unique_id": "macro.dbt_utils.test_unique_combination_of_columns", "macro_sql": "{% test unique_combination_of_columns(model, combination_of_columns, quote_columns=false) %}\n {{ return(adapter.dispatch('test_unique_combination_of_columns', 'dbt_utils')(model, combination_of_columns, quote_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_unique_combination_of_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.511234, "supported_languages": null}, "macro.dbt_utils.default__test_unique_combination_of_columns": {"name": "default__test_unique_combination_of_columns", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/unique_combination_of_columns.sql", "original_file_path": "macros/generic_tests/unique_combination_of_columns.sql", "unique_id": "macro.dbt_utils.default__test_unique_combination_of_columns", "macro_sql": "{% macro default__test_unique_combination_of_columns(model, combination_of_columns, quote_columns=false) %}\n\n{% if not quote_columns %}\n {%- set column_list=combination_of_columns %}\n{% elif quote_columns %}\n {%- set column_list=[] %}\n {% for column in combination_of_columns -%}\n {% set column_list = column_list.append( adapter.quote(column) ) %}\n {%- endfor %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`quote_columns` argument for unique_combination_of_columns test must be one of [True, False] Got: '\" ~ quote ~\"'.'\"\n ) }}\n{% endif %}\n\n{%- set columns_csv=column_list | join(', ') %}\n\n\nwith validation_errors as (\n\n select\n {{ columns_csv }}\n from {{ model }}\n group by {{ columns_csv }}\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5117571, "supported_languages": null}, "macro.dbt_utils.test_cardinality_equality": {"name": "test_cardinality_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/cardinality_equality.sql", "original_file_path": "macros/generic_tests/cardinality_equality.sql", "unique_id": "macro.dbt_utils.test_cardinality_equality", "macro_sql": "{% test cardinality_equality(model, column_name, to, field) %}\n {{ return(adapter.dispatch('test_cardinality_equality', 'dbt_utils')(model, column_name, to, field)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_cardinality_equality"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.512213, "supported_languages": null}, "macro.dbt_utils.default__test_cardinality_equality": {"name": "default__test_cardinality_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/cardinality_equality.sql", "original_file_path": "macros/generic_tests/cardinality_equality.sql", "unique_id": "macro.dbt_utils.default__test_cardinality_equality", "macro_sql": "{% macro default__test_cardinality_equality(model, column_name, to, field) %}\n\n{# T-SQL does not let you use numbers as aliases for columns #}\n{# Thus, no \"GROUP BY 1\" #}\n\nwith table_a as (\nselect\n {{ column_name }},\n count(*) as num_rows\nfrom {{ model }}\ngroup by {{ column_name }}\n),\n\ntable_b as (\nselect\n {{ field }},\n count(*) as num_rows\nfrom {{ to }}\ngroup by {{ field }}\n),\n\nexcept_a as (\n select *\n from table_a\n {{ dbt.except() }}\n select *\n from table_b\n),\n\nexcept_b as (\n select *\n from table_b\n {{ dbt.except() }}\n select *\n from table_a\n),\n\nunioned as (\n select *\n from except_a\n union all\n select *\n from except_b\n)\n\nselect *\nfrom unioned\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.512578, "supported_languages": null}, "macro.dbt_utils.test_expression_is_true": {"name": "test_expression_is_true", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/expression_is_true.sql", "original_file_path": "macros/generic_tests/expression_is_true.sql", "unique_id": "macro.dbt_utils.test_expression_is_true", "macro_sql": "{% test expression_is_true(model, expression, column_name=None) %}\n {{ return(adapter.dispatch('test_expression_is_true', 'dbt_utils')(model, expression, column_name)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_expression_is_true"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.512932, "supported_languages": null}, "macro.dbt_utils.default__test_expression_is_true": {"name": "default__test_expression_is_true", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/expression_is_true.sql", "original_file_path": "macros/generic_tests/expression_is_true.sql", "unique_id": "macro.dbt_utils.default__test_expression_is_true", "macro_sql": "{% macro default__test_expression_is_true(model, expression, column_name) %}\n\n{% set column_list = '*' if should_store_failures() else \"1\" %}\n\nselect\n {{ column_list }}\nfrom {{ model }}\n{% if column_name is none %}\nwhere not({{ expression }})\n{%- else %}\nwhere not({{ column_name }} {{ expression }})\n{%- endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_store_failures"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.513252, "supported_languages": null}, "macro.dbt_utils.test_not_null_proportion": {"name": "test_not_null_proportion", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_null_proportion.sql", "original_file_path": "macros/generic_tests/not_null_proportion.sql", "unique_id": "macro.dbt_utils.test_not_null_proportion", "macro_sql": "{% macro test_not_null_proportion(model, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_not_null_proportion', 'dbt_utils')(model, group_by_columns, **kwargs)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_null_proportion"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5136662, "supported_languages": null}, "macro.dbt_utils.default__test_not_null_proportion": {"name": "default__test_not_null_proportion", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_null_proportion.sql", "original_file_path": "macros/generic_tests/not_null_proportion.sql", "unique_id": "macro.dbt_utils.default__test_not_null_proportion", "macro_sql": "{% macro default__test_not_null_proportion(model, group_by_columns) %}\n\n{% set column_name = kwargs.get('column_name', kwargs.get('arg')) %}\n{% set at_least = kwargs.get('at_least', kwargs.get('arg')) %}\n{% set at_most = kwargs.get('at_most', kwargs.get('arg', 1)) %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\nwith validation as (\n select\n {{select_gb_cols}}\n sum(case when {{ column_name }} is null then 0 else 1 end) / cast(count(*) as {{ dbt.type_numeric() }}) as not_null_proportion\n from {{ model }}\n {{groupby_gb_cols}}\n),\nvalidation_errors as (\n select\n {{select_gb_cols}}\n not_null_proportion\n from validation\n where not_null_proportion < {{ at_least }} or not_null_proportion > {{ at_most }}\n)\nselect\n *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.514393, "supported_languages": null}, "macro.dbt_utils.test_sequential_values": {"name": "test_sequential_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/sequential_values.sql", "original_file_path": "macros/generic_tests/sequential_values.sql", "unique_id": "macro.dbt_utils.test_sequential_values", "macro_sql": "{% test sequential_values(model, column_name, interval=1, datepart=None, group_by_columns = []) %}\n\n {{ return(adapter.dispatch('test_sequential_values', 'dbt_utils')(model, column_name, interval, datepart, group_by_columns)) }}\n\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_sequential_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.51489, "supported_languages": null}, "macro.dbt_utils.default__test_sequential_values": {"name": "default__test_sequential_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/sequential_values.sql", "original_file_path": "macros/generic_tests/sequential_values.sql", "unique_id": "macro.dbt_utils.default__test_sequential_values", "macro_sql": "{% macro default__test_sequential_values(model, column_name, interval=1, datepart=None, group_by_columns = []) %}\n\n{% set previous_column_name = \"previous_\" ~ dbt_utils.slugify(column_name) %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(',') + ', ' %}\n {% set partition_gb_cols = 'partition by ' + group_by_columns|join(',') %}\n{% endif %}\n\nwith windowed as (\n\n select\n {{ select_gb_cols }}\n {{ column_name }},\n lag({{ column_name }}) over (\n {{partition_gb_cols}}\n order by {{ column_name }}\n ) as {{ previous_column_name }}\n from {{ model }}\n),\n\nvalidation_errors as (\n select\n *\n from windowed\n {% if datepart %}\n where not(cast({{ column_name }} as {{ dbt.type_timestamp() }})= cast({{ dbt.dateadd(datepart, interval, previous_column_name) }} as {{ dbt.type_timestamp() }}))\n {% else %}\n where not({{ column_name }} = {{ previous_column_name }} + {{ interval }})\n {% endif %}\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.slugify", "macro.dbt.type_timestamp", "macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5156748, "supported_languages": null}, "macro.dbt_utils.test_equality": {"name": "test_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equality.sql", "original_file_path": "macros/generic_tests/equality.sql", "unique_id": "macro.dbt_utils.test_equality", "macro_sql": "{% test equality(model, compare_model, compare_columns=None, exclude_columns=None, precision = None) %}\n {{ return(adapter.dispatch('test_equality', 'dbt_utils')(model, compare_model, compare_columns, exclude_columns, precision)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_equality"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5168152, "supported_languages": null}, "macro.dbt_utils.default__test_equality": {"name": "default__test_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equality.sql", "original_file_path": "macros/generic_tests/equality.sql", "unique_id": "macro.dbt_utils.default__test_equality", "macro_sql": "{% macro default__test_equality(model, compare_model, compare_columns=None, exclude_columns=None, precision = None) %}\n\n{%- if compare_columns and exclude_columns -%}\n {{ exceptions.raise_compiler_error(\"Both a compare and an ignore list were provided to the `equality` macro. Only one is allowed\") }}\n{%- endif -%}\n\n{% set set_diff %}\n count(*) + coalesce(abs(\n sum(case when which_diff = 'a_minus_b' then 1 else 0 end) -\n sum(case when which_diff = 'b_minus_a' then 1 else 0 end)\n ), 0)\n{% endset %}\n\n{#-- Needs to be set at parse time, before we return '' below --#}\n{{ config(fail_calc = set_diff) }}\n\n{#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n{%- if not execute -%}\n {{ return('') }}\n{% endif %}\n\n\n\n-- setup\n{%- do dbt_utils._is_relation(model, 'test_equality') -%}\n\n{# Ensure there are no extra columns in the compare_model vs model #}\n{%- if not compare_columns -%}\n {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%}\n {%- do dbt_utils._is_ephemeral(compare_model, 'test_equality') -%}\n\n {%- set model_columns = adapter.get_columns_in_relation(model) -%}\n {%- set compare_model_columns = adapter.get_columns_in_relation(compare_model) -%}\n\n\n {%- if exclude_columns -%}\n {#-- Lower case ignore columns for easier comparison --#}\n {%- set exclude_columns = exclude_columns | map(\"lower\") | list %}\n\n {# Filter out the excluded columns #}\n {%- set include_columns = [] %}\n {%- set include_model_columns = [] %}\n {%- for column in model_columns -%}\n {%- if column.name | lower not in exclude_columns -%}\n {% do include_columns.append(column) %}\n {%- endif %}\n {%- endfor %}\n {%- for column in compare_model_columns -%}\n {%- if column.name | lower not in exclude_columns -%}\n {% do include_model_columns.append(column) %}\n {%- endif %}\n {%- endfor %}\n\n {%- set compare_columns_set = set(include_columns | map(attribute='quoted') | map(\"lower\")) %}\n {%- set compare_model_columns_set = set(include_model_columns | map(attribute='quoted') | map(\"lower\")) %}\n {%- else -%}\n {%- set compare_columns_set = set(model_columns | map(attribute='quoted') | map(\"lower\")) %}\n {%- set compare_model_columns_set = set(compare_model_columns | map(attribute='quoted') | map(\"lower\")) %}\n {%- endif -%}\n\n {% if compare_columns_set != compare_model_columns_set %}\n {{ exceptions.raise_compiler_error(compare_model ~\" has less columns than \" ~ model ~ \", please ensure they have the same columns or use the `compare_columns` or `exclude_columns` arguments to subset them.\") }}\n {% endif %}\n\n\n{% endif %}\n\n{%- if not precision -%}\n {%- if not compare_columns -%}\n {# \n You cannot get the columns in an ephemeral model (due to not existing in the information schema),\n so if the user does not provide an explicit list of columns we must error in the case it is ephemeral\n #}\n {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%}\n {%- set compare_columns = adapter.get_columns_in_relation(model)-%}\n\n {%- if exclude_columns -%}\n {#-- Lower case ignore columns for easier comparison --#}\n {%- set exclude_columns = exclude_columns | map(\"lower\") | list %}\n\n {# Filter out the excluded columns #}\n {%- set include_columns = [] %}\n {%- for column in compare_columns -%}\n {%- if column.name | lower not in exclude_columns -%}\n {% do include_columns.append(column) %}\n {%- endif %}\n {%- endfor %}\n\n {%- set compare_columns = include_columns | map(attribute='quoted') %}\n {%- else -%} {# Compare columns provided #}\n {%- set compare_columns = compare_columns | map(attribute='quoted') %}\n {%- endif -%}\n {%- endif -%}\n\n {% set compare_cols_csv = compare_columns | join(', ') %}\n\n{% else %} {# Precision required #}\n {#-\n If rounding is required, we need to get the types, so it cannot be ephemeral even if they provide column names\n -#}\n {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%}\n {%- set columns = adapter.get_columns_in_relation(model) -%}\n\n {% set columns_list = [] %}\n {%- for col in columns -%}\n {%- if (\n (col.name|lower in compare_columns|map('lower') or not compare_columns) and\n (col.name|lower not in exclude_columns|map('lower') or not exclude_columns)\n ) -%}\n {# Databricks double type is not picked up by any number type checks in dbt #}\n {%- if col.is_float() or col.is_numeric() or col.data_type == 'double' -%}\n {# Cast is required due to postgres not having round for a double precision number #}\n {%- do columns_list.append('round(cast(' ~ col.quoted ~ ' as ' ~ dbt.type_numeric() ~ '),' ~ precision ~ ') as ' ~ col.quoted) -%}\n {%- else -%} {# Non-numeric type #}\n {%- do columns_list.append(col.quoted) -%}\n {%- endif -%}\n {% endif %}\n {%- endfor -%}\n\n {% set compare_cols_csv = columns_list | join(', ') %}\n\n{% endif %}\n\nwith a as (\n\n select * from {{ model }}\n\n),\n\nb as (\n\n select * from {{ compare_model }}\n\n),\n\na_minus_b as (\n\n select {{compare_cols_csv}} from a\n {{ dbt.except() }}\n select {{compare_cols_csv}} from b\n\n),\n\nb_minus_a as (\n\n select {{compare_cols_csv}} from b\n {{ dbt.except() }}\n select {{compare_cols_csv}} from a\n\n),\n\nunioned as (\n\n select 'a_minus_b' as which_diff, a_minus_b.* from a_minus_b\n union all\n select 'b_minus_a' as which_diff, b_minus_a.* from b_minus_a\n\n)\n\nselect * from unioned\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt.type_numeric", "macro.dbt.except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.520373, "supported_languages": null}, "macro.dbt_utils.test_not_empty_string": {"name": "test_not_empty_string", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_empty_string.sql", "original_file_path": "macros/generic_tests/not_empty_string.sql", "unique_id": "macro.dbt_utils.test_not_empty_string", "macro_sql": "{% test not_empty_string(model, column_name, trim_whitespace=true) %}\n\n {{ return(adapter.dispatch('test_not_empty_string', 'dbt_utils')(model, column_name, trim_whitespace)) }}\n\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_empty_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.520772, "supported_languages": null}, "macro.dbt_utils.default__test_not_empty_string": {"name": "default__test_not_empty_string", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_empty_string.sql", "original_file_path": "macros/generic_tests/not_empty_string.sql", "unique_id": "macro.dbt_utils.default__test_not_empty_string", "macro_sql": "{% macro default__test_not_empty_string(model, column_name, trim_whitespace=true) %}\n\n with\n \n all_values as (\n\n select \n\n\n {% if trim_whitespace == true -%}\n\n trim({{ column_name }}) as {{ column_name }}\n\n {%- else -%}\n\n {{ column_name }}\n\n {%- endif %}\n \n from {{ model }}\n\n ),\n\n errors as (\n\n select * from all_values\n where {{ column_name }} = ''\n\n )\n\n select * from errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.521031, "supported_languages": null}, "macro.dbt_utils.test_mutually_exclusive_ranges": {"name": "test_mutually_exclusive_ranges", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/mutually_exclusive_ranges.sql", "original_file_path": "macros/generic_tests/mutually_exclusive_ranges.sql", "unique_id": "macro.dbt_utils.test_mutually_exclusive_ranges", "macro_sql": "{% test mutually_exclusive_ranges(model, lower_bound_column, upper_bound_column, partition_by=None, gaps='allowed', zero_length_range_allowed=False) %}\n {{ return(adapter.dispatch('test_mutually_exclusive_ranges', 'dbt_utils')(model, lower_bound_column, upper_bound_column, partition_by, gaps, zero_length_range_allowed)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_mutually_exclusive_ranges"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.521803, "supported_languages": null}, "macro.dbt_utils.default__test_mutually_exclusive_ranges": {"name": "default__test_mutually_exclusive_ranges", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/mutually_exclusive_ranges.sql", "original_file_path": "macros/generic_tests/mutually_exclusive_ranges.sql", "unique_id": "macro.dbt_utils.default__test_mutually_exclusive_ranges", "macro_sql": "{% macro default__test_mutually_exclusive_ranges(model, lower_bound_column, upper_bound_column, partition_by=None, gaps='allowed', zero_length_range_allowed=False) %}\n{% if gaps == 'not_allowed' %}\n {% set allow_gaps_operator='=' %}\n {% set allow_gaps_operator_in_words='equal_to' %}\n{% elif gaps == 'allowed' %}\n {% set allow_gaps_operator='<=' %}\n {% set allow_gaps_operator_in_words='less_than_or_equal_to' %}\n{% elif gaps == 'required' %}\n {% set allow_gaps_operator='<' %}\n {% set allow_gaps_operator_in_words='less_than' %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`gaps` argument for mutually_exclusive_ranges test must be one of ['not_allowed', 'allowed', 'required'] Got: '\" ~ gaps ~\"'.'\"\n ) }}\n{% endif %}\n{% if not zero_length_range_allowed %}\n {% set allow_zero_length_operator='<' %}\n {% set allow_zero_length_operator_in_words='less_than' %}\n{% elif zero_length_range_allowed %}\n {% set allow_zero_length_operator='<=' %}\n {% set allow_zero_length_operator_in_words='less_than_or_equal_to' %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`zero_length_range_allowed` argument for mutually_exclusive_ranges test must be one of [true, false] Got: '\" ~ zero_length_range_allowed ~\"'.'\"\n ) }}\n{% endif %}\n\n{% set partition_clause=\"partition by \" ~ partition_by if partition_by else '' %}\n\nwith window_functions as (\n\n select\n {% if partition_by %}\n {{ partition_by }} as partition_by_col,\n {% endif %}\n {{ lower_bound_column }} as lower_bound,\n {{ upper_bound_column }} as upper_bound,\n\n lead({{ lower_bound_column }}) over (\n {{ partition_clause }}\n order by {{ lower_bound_column }}, {{ upper_bound_column }}\n ) as next_lower_bound,\n\n row_number() over (\n {{ partition_clause }}\n order by {{ lower_bound_column }} desc, {{ upper_bound_column }} desc\n ) = 1 as is_last_record\n\n from {{ model }}\n\n),\n\ncalc as (\n -- We want to return records where one of our assumptions fails, so we'll use\n -- the `not` function with `and` statements so we can write our assumptions more cleanly\n select\n *,\n\n -- For each record: lower_bound should be < upper_bound.\n -- Coalesce it to return an error on the null case (implicit assumption\n -- these columns are not_null)\n coalesce(\n lower_bound {{ allow_zero_length_operator }} upper_bound,\n false\n ) as lower_bound_{{ allow_zero_length_operator_in_words }}_upper_bound,\n\n -- For each record: upper_bound {{ allow_gaps_operator }} the next lower_bound.\n -- Coalesce it to handle null cases for the last record.\n coalesce(\n upper_bound {{ allow_gaps_operator }} next_lower_bound,\n is_last_record,\n false\n ) as upper_bound_{{ allow_gaps_operator_in_words }}_next_lower_bound\n\n from window_functions\n\n),\n\nvalidation_errors as (\n\n select\n *\n from calc\n\n where not(\n -- THE FOLLOWING SHOULD BE TRUE --\n lower_bound_{{ allow_zero_length_operator_in_words }}_upper_bound\n and upper_bound_{{ allow_gaps_operator_in_words }}_next_lower_bound\n )\n)\n\nselect * from validation_errors\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.523218, "supported_languages": null}, "macro.dbt_utils.pretty_log_format": {"name": "pretty_log_format", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_log_format.sql", "original_file_path": "macros/jinja_helpers/pretty_log_format.sql", "unique_id": "macro.dbt_utils.pretty_log_format", "macro_sql": "{% macro pretty_log_format(message) %}\n {{ return(adapter.dispatch('pretty_log_format', 'dbt_utils')(message)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__pretty_log_format"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.52352, "supported_languages": null}, "macro.dbt_utils.default__pretty_log_format": {"name": "default__pretty_log_format", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_log_format.sql", "original_file_path": "macros/jinja_helpers/pretty_log_format.sql", "unique_id": "macro.dbt_utils.default__pretty_log_format", "macro_sql": "{% macro default__pretty_log_format(message) %}\n {{ return( dbt_utils.pretty_time() ~ ' + ' ~ message) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.pretty_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.523669, "supported_languages": null}, "macro.dbt_utils._is_relation": {"name": "_is_relation", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/_is_relation.sql", "original_file_path": "macros/jinja_helpers/_is_relation.sql", "unique_id": "macro.dbt_utils._is_relation", "macro_sql": "{% macro _is_relation(obj, macro) %}\n {%- if not (obj is mapping and obj.get('metadata', {}).get('type', '').endswith('Relation')) -%}\n {%- do exceptions.raise_compiler_error(\"Macro \" ~ macro ~ \" expected a Relation but received the value: \" ~ obj) -%}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.524077, "supported_languages": null}, "macro.dbt_utils.pretty_time": {"name": "pretty_time", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_time.sql", "original_file_path": "macros/jinja_helpers/pretty_time.sql", "unique_id": "macro.dbt_utils.pretty_time", "macro_sql": "{% macro pretty_time(format='%H:%M:%S') %}\n {{ return(adapter.dispatch('pretty_time', 'dbt_utils')(format)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__pretty_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.524318, "supported_languages": null}, "macro.dbt_utils.default__pretty_time": {"name": "default__pretty_time", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_time.sql", "original_file_path": "macros/jinja_helpers/pretty_time.sql", "unique_id": "macro.dbt_utils.default__pretty_time", "macro_sql": "{% macro default__pretty_time(format='%H:%M:%S') %}\n {{ return(modules.datetime.datetime.now().strftime(format)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.524482, "supported_languages": null}, "macro.dbt_utils.log_info": {"name": "log_info", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/log_info.sql", "original_file_path": "macros/jinja_helpers/log_info.sql", "unique_id": "macro.dbt_utils.log_info", "macro_sql": "{% macro log_info(message) %}\n {{ return(adapter.dispatch('log_info', 'dbt_utils')(message)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__log_info"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.524711, "supported_languages": null}, "macro.dbt_utils.default__log_info": {"name": "default__log_info", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/log_info.sql", "original_file_path": "macros/jinja_helpers/log_info.sql", "unique_id": "macro.dbt_utils.default__log_info", "macro_sql": "{% macro default__log_info(message) %}\n {{ log(dbt_utils.pretty_log_format(message), info=True) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.pretty_log_format"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.524856, "supported_languages": null}, "macro.dbt_utils.slugify": {"name": "slugify", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/slugify.sql", "original_file_path": "macros/jinja_helpers/slugify.sql", "unique_id": "macro.dbt_utils.slugify", "macro_sql": "{% macro slugify(string) %}\n\n{% if not string %}\n{{ return('') }}\n{% endif %}\n\n{#- Lower case the string -#}\n{% set string = string | lower %}\n{#- Replace spaces and dashes with underscores -#}\n{% set string = modules.re.sub('[ -]+', '_', string) %}\n{#- Only take letters, numbers, and underscores -#}\n{% set string = modules.re.sub('[^a-z0-9_]+', '', string) %}\n{#- Prepends \"_\" if string begins with a number -#}\n{% set string = modules.re.sub('^[0-9]', '_' + string[0], string) %}\n\n{{ return(string) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.525495, "supported_languages": null}, "macro.dbt_utils._is_ephemeral": {"name": "_is_ephemeral", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/_is_ephemeral.sql", "original_file_path": "macros/jinja_helpers/_is_ephemeral.sql", "unique_id": "macro.dbt_utils._is_ephemeral", "macro_sql": "{% macro _is_ephemeral(obj, macro) %}\n {%- if obj.is_cte -%}\n {% set ephemeral_prefix = api.Relation.add_ephemeral_prefix('') %}\n {% if obj.name.startswith(ephemeral_prefix) %}\n {% set model_name = obj.name[(ephemeral_prefix|length):] %}\n {% else %}\n {% set model_name = obj.name %}\n {%- endif -%}\n {% set error_message %}\nThe `{{ macro }}` macro cannot be used with ephemeral models, as it relies on the information schema.\n\n`{{ model_name }}` is an ephemeral model. Consider making it a view or table instead.\n {% endset %}\n {%- do exceptions.raise_compiler_error(error_message) -%}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.526119, "supported_languages": null}, "macro.dbt_utils.get_intervals_between": {"name": "get_intervals_between", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.get_intervals_between", "macro_sql": "{% macro get_intervals_between(start_date, end_date, datepart) -%}\n {{ return(adapter.dispatch('get_intervals_between', 'dbt_utils')(start_date, end_date, datepart)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_intervals_between"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5265741, "supported_languages": null}, "macro.dbt_utils.default__get_intervals_between": {"name": "default__get_intervals_between", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.default__get_intervals_between", "macro_sql": "{% macro default__get_intervals_between(start_date, end_date, datepart) -%}\n {%- call statement('get_intervals_between', fetch_result=True) %}\n\n select {{ dbt.datediff(start_date, end_date, datepart) }}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_intervals_between') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values[0]) }}\n {%- else -%}\n {{ return(1) }}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5270882, "supported_languages": null}, "macro.dbt_utils.date_spine": {"name": "date_spine", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.date_spine", "macro_sql": "{% macro date_spine(datepart, start_date, end_date) %}\n {{ return(adapter.dispatch('date_spine', 'dbt_utils')(datepart, start_date, end_date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.527358, "supported_languages": null}, "macro.dbt_utils.default__date_spine": {"name": "default__date_spine", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.default__date_spine", "macro_sql": "{% macro default__date_spine(datepart, start_date, end_date) %}\n\n\n{# call as follows:\n\ndate_spine(\n \"day\",\n \"to_date('01/01/2016', 'mm/dd/yyyy')\",\n \"dbt.dateadd(week, 1, current_date)\"\n) #}\n\n\nwith rawdata as (\n\n {{dbt_utils.generate_series(\n dbt_utils.get_intervals_between(start_date, end_date, datepart)\n )}}\n\n),\n\nall_periods as (\n\n select (\n {{\n dbt.dateadd(\n datepart,\n \"row_number() over (order by 1) - 1\",\n start_date\n )\n }}\n ) as date_{{datepart}}\n from rawdata\n\n),\n\nfiltered as (\n\n select *\n from all_periods\n where date_{{datepart}} <= {{ end_date }}\n\n)\n\nselect * from filtered\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.generate_series", "macro.dbt_utils.get_intervals_between", "macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.52767, "supported_languages": null}, "macro.dbt_utils.safe_subtract": {"name": "safe_subtract", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_subtract.sql", "original_file_path": "macros/sql/safe_subtract.sql", "unique_id": "macro.dbt_utils.safe_subtract", "macro_sql": "{%- macro safe_subtract(field_list) -%}\n {{ return(adapter.dispatch('safe_subtract', 'dbt_utils')(field_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__safe_subtract"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.527963, "supported_languages": null}, "macro.dbt_utils.default__safe_subtract": {"name": "default__safe_subtract", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_subtract.sql", "original_file_path": "macros/sql/safe_subtract.sql", "unique_id": "macro.dbt_utils.default__safe_subtract", "macro_sql": "\n\n{%- macro default__safe_subtract(field_list) -%}\n\n{%- if field_list is not iterable or field_list is string or field_list is mapping -%}\n\n{%- set error_message = '\nWarning: the `safe_subtract` macro takes a single list argument instead of \\\nstring arguments. The {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.raise_compiler_error(error_message) -%}\n\n{%- endif -%}\n\n{% set fields = [] %}\n\n{%- for field in field_list -%}\n\n {% do fields.append(\"coalesce(\" ~ field ~ \", 0)\") %}\n\n{%- endfor -%}\n\n{{ fields|join(' -\\n ') }}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.528496, "supported_languages": null}, "macro.dbt_utils.nullcheck_table": {"name": "nullcheck_table", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck_table.sql", "original_file_path": "macros/sql/nullcheck_table.sql", "unique_id": "macro.dbt_utils.nullcheck_table", "macro_sql": "{% macro nullcheck_table(relation) %}\n {{ return(adapter.dispatch('nullcheck_table', 'dbt_utils')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__nullcheck_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.52878, "supported_languages": null}, "macro.dbt_utils.default__nullcheck_table": {"name": "default__nullcheck_table", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck_table.sql", "original_file_path": "macros/sql/nullcheck_table.sql", "unique_id": "macro.dbt_utils.default__nullcheck_table", "macro_sql": "{% macro default__nullcheck_table(relation) %}\n\n {%- do dbt_utils._is_relation(relation, 'nullcheck_table') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'nullcheck_table') -%}\n {% set cols = adapter.get_columns_in_relation(relation) %}\n\n select {{ dbt_utils.nullcheck(cols) }}\n from {{relation}}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.nullcheck"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.529072, "supported_languages": null}, "macro.dbt_utils.get_relations_by_pattern": {"name": "get_relations_by_pattern", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_pattern.sql", "original_file_path": "macros/sql/get_relations_by_pattern.sql", "unique_id": "macro.dbt_utils.get_relations_by_pattern", "macro_sql": "{% macro get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_relations_by_pattern', 'dbt_utils')(schema_pattern, table_pattern, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.529504, "supported_languages": null}, "macro.dbt_utils.default__get_relations_by_pattern": {"name": "default__get_relations_by_pattern", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_pattern.sql", "original_file_path": "macros/sql/get_relations_by_pattern.sql", "unique_id": "macro.dbt_utils.default__get_relations_by_pattern", "macro_sql": "{% macro default__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n {{ dbt_utils.get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude, database) }}\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=database,\n schema=row.table_schema,\n identifier=row.table_name,\n type=row.table_type\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.530219, "supported_languages": null}, "macro.dbt_utils.get_powers_of_two": {"name": "get_powers_of_two", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.get_powers_of_two", "macro_sql": "{% macro get_powers_of_two(upper_bound) %}\n {{ return(adapter.dispatch('get_powers_of_two', 'dbt_utils')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.530634, "supported_languages": null}, "macro.dbt_utils.default__get_powers_of_two": {"name": "default__get_powers_of_two", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.default__get_powers_of_two", "macro_sql": "{% macro default__get_powers_of_two(upper_bound) %}\n\n {% if upper_bound <= 0 %}\n {{ exceptions.raise_compiler_error(\"upper bound must be positive\") }}\n {% endif %}\n\n {% for _ in range(1, 100) %}\n {% if upper_bound <= 2 ** loop.index %}{{ return(loop.index) }}{% endif %}\n {% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.530976, "supported_languages": null}, "macro.dbt_utils.generate_series": {"name": "generate_series", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.generate_series", "macro_sql": "{% macro generate_series(upper_bound) %}\n {{ return(adapter.dispatch('generate_series', 'dbt_utils')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__generate_series"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.53114, "supported_languages": null}, "macro.dbt_utils.default__generate_series": {"name": "default__generate_series", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.default__generate_series", "macro_sql": "{% macro default__generate_series(upper_bound) %}\n\n {% set n = dbt_utils.get_powers_of_two(upper_bound) %}\n\n with p as (\n select 0 as generated_number union all select 1\n ), unioned as (\n\n select\n\n {% for i in range(n) %}\n p{{i}}.generated_number * power(2, {{i}})\n {% if not loop.last %} + {% endif %}\n {% endfor %}\n + 1\n as generated_number\n\n from\n\n {% for i in range(n) %}\n p as p{{i}}\n {% if not loop.last %} cross join {% endif %}\n {% endfor %}\n\n )\n\n select *\n from unioned\n where generated_number <= {{upper_bound}}\n order by generated_number\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.531577, "supported_languages": null}, "macro.dbt_utils.get_relations_by_prefix": {"name": "get_relations_by_prefix", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_prefix.sql", "original_file_path": "macros/sql/get_relations_by_prefix.sql", "unique_id": "macro.dbt_utils.get_relations_by_prefix", "macro_sql": "{% macro get_relations_by_prefix(schema, prefix, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_relations_by_prefix', 'dbt_utils')(schema, prefix, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_relations_by_prefix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.531997, "supported_languages": null}, "macro.dbt_utils.default__get_relations_by_prefix": {"name": "default__get_relations_by_prefix", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_prefix.sql", "original_file_path": "macros/sql/get_relations_by_prefix.sql", "unique_id": "macro.dbt_utils.default__get_relations_by_prefix", "macro_sql": "{% macro default__get_relations_by_prefix(schema, prefix, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n {{ dbt_utils.get_tables_by_prefix_sql(schema, prefix, exclude, database) }}\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=database,\n schema=row.table_schema,\n identifier=row.table_name,\n type=row.table_type\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.get_tables_by_prefix_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5327208, "supported_languages": null}, "macro.dbt_utils.get_tables_by_prefix_sql": {"name": "get_tables_by_prefix_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_prefix_sql.sql", "original_file_path": "macros/sql/get_tables_by_prefix_sql.sql", "unique_id": "macro.dbt_utils.get_tables_by_prefix_sql", "macro_sql": "{% macro get_tables_by_prefix_sql(schema, prefix, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_tables_by_prefix_sql', 'dbt_utils')(schema, prefix, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_tables_by_prefix_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.533073, "supported_languages": null}, "macro.dbt_utils.default__get_tables_by_prefix_sql": {"name": "default__get_tables_by_prefix_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_prefix_sql.sql", "original_file_path": "macros/sql/get_tables_by_prefix_sql.sql", "unique_id": "macro.dbt_utils.default__get_tables_by_prefix_sql", "macro_sql": "{% macro default__get_tables_by_prefix_sql(schema, prefix, exclude='', database=target.database) %}\n\n {{ dbt_utils.get_tables_by_pattern_sql(\n schema_pattern = schema,\n table_pattern = prefix ~ '%',\n exclude = exclude,\n database = database\n ) }}\n \n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.533317, "supported_languages": null}, "macro.dbt_utils.star": {"name": "star", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/star.sql", "original_file_path": "macros/sql/star.sql", "unique_id": "macro.dbt_utils.star", "macro_sql": "{% macro star(from, relation_alias=False, except=[], prefix='', suffix='', quote_identifiers=True) -%}\r\n {{ return(adapter.dispatch('star', 'dbt_utils')(from, relation_alias, except, prefix, suffix, quote_identifiers)) }}\r\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__star"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.533965, "supported_languages": null}, "macro.dbt_utils.default__star": {"name": "default__star", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/star.sql", "original_file_path": "macros/sql/star.sql", "unique_id": "macro.dbt_utils.default__star", "macro_sql": "{% macro default__star(from, relation_alias=False, except=[], prefix='', suffix='', quote_identifiers=True) -%}\r\n {%- do dbt_utils._is_relation(from, 'star') -%}\r\n {%- do dbt_utils._is_ephemeral(from, 'star') -%}\r\n\r\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\r\n {%- if not execute -%}\r\n {% do return('*') %}\r\n {%- endif -%}\r\n\r\n {% set cols = dbt_utils.get_filtered_columns_in_relation(from, except) %}\r\n\r\n {%- if cols|length <= 0 -%}\r\n {% if flags.WHICH == 'compile' %}\r\n {% set response %}\r\n*\r\n/* No columns were returned. Maybe the relation doesn't exist yet \r\nor all columns were excluded. This star is only output during \r\ndbt compile, and exists to keep SQLFluff happy. */\r\n {% endset %}\r\n {% do return(response) %}\r\n {% else %}\r\n {% do return(\"/* no columns returned from star() macro */\") %}\r\n {% endif %}\r\n {%- else -%}\r\n {%- for col in cols %}\r\n {%- if relation_alias %}{{ relation_alias }}.{% else %}{%- endif -%}\r\n {%- if quote_identifiers -%}\r\n {{ adapter.quote(col)|trim }} {%- if prefix!='' or suffix!='' %} as {{ adapter.quote(prefix ~ col ~ suffix)|trim }} {%- endif -%}\r\n {%- else -%}\r\n {{ col|trim }} {%- if prefix!='' or suffix!='' %} as {{ (prefix ~ col ~ suffix)|trim }} {%- endif -%}\r\n {% endif %}\r\n {%- if not loop.last %},{{ '\\n ' }}{%- endif -%}\r\n {%- endfor -%}\r\n {% endif %}\r\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.get_filtered_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.535218, "supported_languages": null}, "macro.dbt_utils.unpivot": {"name": "unpivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/unpivot.sql", "original_file_path": "macros/sql/unpivot.sql", "unique_id": "macro.dbt_utils.unpivot", "macro_sql": "{% macro unpivot(relation=none, cast_to='varchar', exclude=none, remove=none, field_name='field_name', value_name='value', quote_identifiers=False) -%}\n {{ return(adapter.dispatch('unpivot', 'dbt_utils')(relation, cast_to, exclude, remove, field_name, value_name, quote_identifiers)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__unpivot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.535933, "supported_languages": null}, "macro.dbt_utils.default__unpivot": {"name": "default__unpivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/unpivot.sql", "original_file_path": "macros/sql/unpivot.sql", "unique_id": "macro.dbt_utils.default__unpivot", "macro_sql": "{% macro default__unpivot(relation=none, cast_to='varchar', exclude=none, remove=none, field_name='field_name', value_name='value', quote_identifiers=False) -%}\n\n {% if not relation %}\n {{ exceptions.raise_compiler_error(\"Error: argument `relation` is required for `unpivot` macro.\") }}\n {% endif %}\n\n {%- set exclude = exclude if exclude is not none else [] %}\n {%- set remove = remove if remove is not none else [] %}\n\n {%- set include_cols = [] %}\n\n {%- set table_columns = {} %}\n\n {%- do table_columns.update({relation: []}) %}\n\n {%- do dbt_utils._is_relation(relation, 'unpivot') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'unpivot') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) %}\n\n {%- for col in cols -%}\n {%- if col.column.lower() not in remove|map('lower') and col.column.lower() not in exclude|map('lower') -%}\n {% do include_cols.append(col) %}\n {%- endif %}\n {%- endfor %}\n\n\n {%- for col in include_cols -%}\n {%- set current_col_name = adapter.quote(col.column) if quote_identifiers else col.column -%}\n select\n {%- for exclude_col in exclude %}\n {{ adapter.quote(exclude_col) if quote_identifiers else exclude_col }},\n {%- endfor %}\n\n cast('{{ col.column }}' as {{ dbt.type_string() }}) as {{ adapter.quote(field_name) if quote_identifiers else field_name }},\n cast( {% if col.data_type == 'boolean' %}\n {{ dbt.cast_bool_to_text(current_col_name) }}\n {% else %}\n {{ current_col_name }}\n {% endif %}\n as {{ cast_to }}) as {{ adapter.quote(value_name) if quote_identifiers else value_name }}\n\n from {{ relation }}\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n {%- endfor -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt.type_string", "macro.dbt.cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.537484, "supported_languages": null}, "macro.dbt_utils.safe_divide": {"name": "safe_divide", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_divide.sql", "original_file_path": "macros/sql/safe_divide.sql", "unique_id": "macro.dbt_utils.safe_divide", "macro_sql": "{% macro safe_divide(numerator, denominator) -%}\n {{ return(adapter.dispatch('safe_divide', 'dbt_utils')(numerator, denominator)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__safe_divide"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.537737, "supported_languages": null}, "macro.dbt_utils.default__safe_divide": {"name": "default__safe_divide", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_divide.sql", "original_file_path": "macros/sql/safe_divide.sql", "unique_id": "macro.dbt_utils.default__safe_divide", "macro_sql": "{% macro default__safe_divide(numerator, denominator) %}\n ( {{ numerator }} ) / nullif( ( {{ denominator }} ), 0)\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5378501, "supported_languages": null}, "macro.dbt_utils.union_relations": {"name": "union_relations", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/union.sql", "original_file_path": "macros/sql/union.sql", "unique_id": "macro.dbt_utils.union_relations", "macro_sql": "{%- macro union_relations(relations, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_relation', where=none) -%}\n {{ return(adapter.dispatch('union_relations', 'dbt_utils')(relations, column_override, include, exclude, source_column_name, where)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__union_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5388281, "supported_languages": null}, "macro.dbt_utils.default__union_relations": {"name": "default__union_relations", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/union.sql", "original_file_path": "macros/sql/union.sql", "unique_id": "macro.dbt_utils.default__union_relations", "macro_sql": "\n\n{%- macro default__union_relations(relations, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_relation', where=none) -%}\n\n {%- if exclude and include -%}\n {{ exceptions.raise_compiler_error(\"Both an exclude and include list were provided to the `union` macro. Only one is allowed\") }}\n {%- endif -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. -#}\n {%- if not execute %}\n {{ return('') }}\n {% endif -%}\n\n {%- set column_override = column_override if column_override is not none else {} -%}\n\n {%- set relation_columns = {} -%}\n {%- set column_superset = {} -%}\n {%- set all_excludes = [] -%}\n {%- set all_includes = [] -%}\n\n {%- if exclude -%}\n {%- for exc in exclude -%}\n {%- do all_excludes.append(exc | lower) -%}\n {%- endfor -%}\n {%- endif -%}\n\n {%- if include -%}\n {%- for inc in include -%}\n {%- do all_includes.append(inc | lower) -%}\n {%- endfor -%}\n {%- endif -%}\n\n {%- for relation in relations -%}\n\n {%- do relation_columns.update({relation: []}) -%}\n\n {%- do dbt_utils._is_relation(relation, 'union_relations') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'union_relations') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) -%}\n {%- for col in cols -%}\n\n {#- If an exclude list was provided and the column is in the list, do nothing -#}\n {%- if exclude and col.column | lower in all_excludes -%}\n\n {#- If an include list was provided and the column is not in the list, do nothing -#}\n {%- elif include and col.column | lower not in all_includes -%}\n\n {#- Otherwise add the column to the column superset -#}\n {%- else -%}\n\n {#- update the list of columns in this relation -#}\n {%- do relation_columns[relation].append(col.column) -%}\n\n {%- if col.column in column_superset -%}\n\n {%- set stored = column_superset[col.column] -%}\n {%- if col.is_string() and stored.is_string() and col.string_size() > stored.string_size() -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif %}\n\n {%- else -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif -%}\n\n {%- endif -%}\n\n {%- endfor -%}\n {%- endfor -%}\n\n {%- set ordered_column_names = column_superset.keys() -%}\n {%- set dbt_command = flags.WHICH -%}\n\n\n {% if dbt_command in ['run', 'build'] %}\n {% if (include | length > 0 or exclude | length > 0) and not column_superset.keys() %}\n {%- set relations_string -%}\n {%- for relation in relations -%}\n {{ relation.name }}\n {%- if not loop.last %}, {% endif -%}\n {%- endfor -%}\n {%- endset -%}\n\n {%- set error_message -%}\n There were no columns found to union for relations {{ relations_string }}\n {%- endset -%}\n\n {{ exceptions.raise_compiler_error(error_message) }}\n {%- endif -%}\n {%- endif -%}\n\n {%- for relation in relations %}\n\n (\n select\n\n {%- if source_column_name is not none %}\n cast({{ dbt.string_literal(relation) }} as {{ dbt.type_string() }}) as {{ source_column_name }},\n {%- endif %}\n\n {% for col_name in ordered_column_names -%}\n\n {%- set col = column_superset[col_name] %}\n {%- set col_type = column_override.get(col.column, col.data_type) %}\n {%- set col_name = adapter.quote(col_name) if col_name in relation_columns[relation] else 'null' %}\n cast({{ col_name }} as {{ col_type }}) as {{ col.quoted }} {% if not loop.last %},{% endif -%}\n\n {%- endfor %}\n\n from {{ relation }}\n\n {% if where -%}\n where {{ where }}\n {%- endif %}\n )\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n\n {%- endfor -%}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt.string_literal", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.541667, "supported_languages": null}, "macro.dbt_utils.group_by": {"name": "group_by", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/groupby.sql", "original_file_path": "macros/sql/groupby.sql", "unique_id": "macro.dbt_utils.group_by", "macro_sql": "{%- macro group_by(n) -%}\n {{ return(adapter.dispatch('group_by', 'dbt_utils')(n)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__group_by"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.541926, "supported_languages": null}, "macro.dbt_utils.default__group_by": {"name": "default__group_by", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/groupby.sql", "original_file_path": "macros/sql/groupby.sql", "unique_id": "macro.dbt_utils.default__group_by", "macro_sql": "\n\n{%- macro default__group_by(n) -%}\n\n group by {% for i in range(1, n + 1) -%}\n {{ i }}{{ ',' if not loop.last }} \n {%- endfor -%}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.542132, "supported_languages": null}, "macro.dbt_utils.deduplicate": {"name": "deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.deduplicate", "macro_sql": "{%- macro deduplicate(relation, partition_by, order_by) -%}\n {{ return(adapter.dispatch('deduplicate', 'dbt_utils')(relation, partition_by, order_by)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.postgres__deduplicate"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.54268, "supported_languages": null}, "macro.dbt_utils.default__deduplicate": {"name": "default__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.default__deduplicate", "macro_sql": "\n\n{%- macro default__deduplicate(relation, partition_by, order_by) -%}\n\n with row_numbered as (\n select\n _inner.*,\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) as rn\n from {{ relation }} as _inner\n )\n\n select\n distinct data.*\n from {{ relation }} as data\n {#\n -- Not all DBs will support natural joins but the ones that do include:\n -- Oracle, MySQL, SQLite, Redshift, Teradata, Materialize, Databricks\n -- Apache Spark, SingleStore, Vertica\n -- Those that do not appear to support natural joins include:\n -- SQLServer, Trino, Presto, Rockset, Athena\n #}\n natural join row_numbered\n where row_numbered.rn = 1\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.542866, "supported_languages": null}, "macro.dbt_utils.redshift__deduplicate": {"name": "redshift__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.redshift__deduplicate", "macro_sql": "{% macro redshift__deduplicate(relation, partition_by, order_by) -%}\n\n select *\n from {{ relation }} as tt\n qualify\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) = 1\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.543005, "supported_languages": null}, "macro.dbt_utils.postgres__deduplicate": {"name": "postgres__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.postgres__deduplicate", "macro_sql": "\n{%- macro postgres__deduplicate(relation, partition_by, order_by) -%}\n\n select\n distinct on ({{ partition_by }}) *\n from {{ relation }}\n order by {{ partition_by }}{{ ',' ~ order_by }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.543166, "supported_languages": null}, "macro.dbt_utils.snowflake__deduplicate": {"name": "snowflake__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.snowflake__deduplicate", "macro_sql": "\n{%- macro snowflake__deduplicate(relation, partition_by, order_by) -%}\n\n select *\n from {{ relation }}\n qualify\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) = 1\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.543307, "supported_languages": null}, "macro.dbt_utils.databricks__deduplicate": {"name": "databricks__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.databricks__deduplicate", "macro_sql": "\n{%- macro databricks__deduplicate(relation, partition_by, order_by) -%}\n\n select *\n from {{ relation }}\n qualify\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) = 1\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.543446, "supported_languages": null}, "macro.dbt_utils.bigquery__deduplicate": {"name": "bigquery__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.bigquery__deduplicate", "macro_sql": "\n{%- macro bigquery__deduplicate(relation, partition_by, order_by) -%}\n\n select unique.*\n from (\n select\n array_agg (\n original\n order by {{ order_by }}\n limit 1\n )[offset(0)] unique\n from {{ relation }} original\n group by {{ partition_by }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.543604, "supported_languages": null}, "macro.dbt_utils.surrogate_key": {"name": "surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/surrogate_key.sql", "original_file_path": "macros/sql/surrogate_key.sql", "unique_id": "macro.dbt_utils.surrogate_key", "macro_sql": "{%- macro surrogate_key(field_list) -%}\n {% set frustrating_jinja_feature = varargs %}\n {{ return(adapter.dispatch('surrogate_key', 'dbt_utils')(field_list, *varargs)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__surrogate_key"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5439098, "supported_languages": null}, "macro.dbt_utils.default__surrogate_key": {"name": "default__surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/surrogate_key.sql", "original_file_path": "macros/sql/surrogate_key.sql", "unique_id": "macro.dbt_utils.default__surrogate_key", "macro_sql": "\n\n{%- macro default__surrogate_key(field_list) -%}\n\n{%- set error_message = '\nWarning: `dbt_utils.surrogate_key` has been replaced by \\\n`dbt_utils.generate_surrogate_key`. The new macro treats null values \\\ndifferently to empty strings. To restore the behaviour of the original \\\nmacro, add a global variable in dbt_project.yml called \\\n`surrogate_key_treat_nulls_as_empty_strings` to your \\\ndbt_project.yml file with a value of True. \\\nThe {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.raise_compiler_error(error_message) -%}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5441122, "supported_languages": null}, "macro.dbt_utils.safe_add": {"name": "safe_add", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_add.sql", "original_file_path": "macros/sql/safe_add.sql", "unique_id": "macro.dbt_utils.safe_add", "macro_sql": "{%- macro safe_add(field_list) -%}\n {{ return(adapter.dispatch('safe_add', 'dbt_utils')(field_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__safe_add"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.544405, "supported_languages": null}, "macro.dbt_utils.default__safe_add": {"name": "default__safe_add", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_add.sql", "original_file_path": "macros/sql/safe_add.sql", "unique_id": "macro.dbt_utils.default__safe_add", "macro_sql": "\n\n{%- macro default__safe_add(field_list) -%}\n\n{%- if field_list is not iterable or field_list is string or field_list is mapping -%}\n\n{%- set error_message = '\nWarning: the `safe_add` macro now takes a single list argument instead of \\\nstring arguments. The {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.warn(error_message) -%}\n\n{%- endif -%}\n\n{% set fields = [] %}\n\n{%- for field in field_list -%}\n\n {% do fields.append(\"coalesce(\" ~ field ~ \", 0)\") %}\n\n{%- endfor -%}\n\n{{ fields|join(' +\\n ') }}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.544887, "supported_languages": null}, "macro.dbt_utils.nullcheck": {"name": "nullcheck", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck.sql", "original_file_path": "macros/sql/nullcheck.sql", "unique_id": "macro.dbt_utils.nullcheck", "macro_sql": "{% macro nullcheck(cols) %}\n {{ return(adapter.dispatch('nullcheck', 'dbt_utils')(cols)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__nullcheck"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.545166, "supported_languages": null}, "macro.dbt_utils.default__nullcheck": {"name": "default__nullcheck", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck.sql", "original_file_path": "macros/sql/nullcheck.sql", "unique_id": "macro.dbt_utils.default__nullcheck", "macro_sql": "{% macro default__nullcheck(cols) %}\n{%- for col in cols %}\n\n {% if col.is_string() -%}\n\n nullif({{col.name}},'') as {{col.name}}\n\n {%- else -%}\n\n {{col.name}}\n\n {%- endif -%}\n\n{%- if not loop.last -%} , {%- endif -%}\n\n{%- endfor -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5454369, "supported_languages": null}, "macro.dbt_utils.get_tables_by_pattern_sql": {"name": "get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.get_tables_by_pattern_sql", "macro_sql": "{% macro get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_tables_by_pattern_sql', 'dbt_utils')\n (schema_pattern, table_pattern, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5461981, "supported_languages": null}, "macro.dbt_utils.default__get_tables_by_pattern_sql": {"name": "default__get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.default__get_tables_by_pattern_sql", "macro_sql": "{% macro default__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n select distinct\n table_schema as {{ adapter.quote('table_schema') }},\n table_name as {{ adapter.quote('table_name') }},\n {{ dbt_utils.get_table_types_sql() }}\n from {{ database }}.information_schema.tables\n where table_schema ilike '{{ schema_pattern }}'\n and table_name ilike '{{ table_pattern }}'\n and table_name not ilike '{{ exclude }}'\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.546561, "supported_languages": null}, "macro.dbt_utils.redshift__get_tables_by_pattern_sql": {"name": "redshift__get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.redshift__get_tables_by_pattern_sql", "macro_sql": "{% macro redshift__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {% set sql %}\n select distinct\n table_schema as {{ adapter.quote('table_schema') }},\n table_name as {{ adapter.quote('table_name') }},\n {{ dbt_utils.get_table_types_sql() }}\n from \"{{ database }}\".\"information_schema\".\"tables\"\n where table_schema ilike '{{ schema_pattern }}'\n and table_name ilike '{{ table_pattern }}'\n and table_name not ilike '{{ exclude }}'\n union all\n select distinct\n schemaname as {{ adapter.quote('table_schema') }},\n tablename as {{ adapter.quote('table_name') }},\n 'external' as {{ adapter.quote('table_type') }}\n from svv_external_tables\n where redshift_database_name = '{{ database }}'\n and schemaname ilike '{{ schema_pattern }}'\n and table_name ilike '{{ table_pattern }}'\n and table_name not ilike '{{ exclude }}'\n {% endset %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5471208, "supported_languages": null}, "macro.dbt_utils.bigquery__get_tables_by_pattern_sql": {"name": "bigquery__get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.bigquery__get_tables_by_pattern_sql", "macro_sql": "{% macro bigquery__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {% if '%' in schema_pattern %}\n {% set schemata=dbt_utils._bigquery__get_matching_schemata(schema_pattern, database) %}\n {% else %}\n {% set schemata=[schema_pattern] %}\n {% endif %}\n\n {% set sql %}\n {% for schema in schemata %}\n select distinct\n table_schema,\n table_name,\n {{ dbt_utils.get_table_types_sql() }}\n\n from {{ adapter.quote(database) }}.{{ schema }}.INFORMATION_SCHEMA.TABLES\n where lower(table_name) like lower ('{{ table_pattern }}')\n and lower(table_name) not like lower ('{{ exclude }}')\n\n {% if not loop.last %} union all {% endif %}\n\n {% endfor %}\n {% endset %}\n\n {{ return(sql) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._bigquery__get_matching_schemata", "macro.dbt_utils.get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5477061, "supported_languages": null}, "macro.dbt_utils._bigquery__get_matching_schemata": {"name": "_bigquery__get_matching_schemata", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils._bigquery__get_matching_schemata", "macro_sql": "{% macro _bigquery__get_matching_schemata(schema_pattern, database) %}\n {% if execute %}\n\n {% set sql %}\n select schema_name from {{ adapter.quote(database) }}.INFORMATION_SCHEMA.SCHEMATA\n where lower(schema_name) like lower('{{ schema_pattern }}')\n {% endset %}\n\n {% set results=run_query(sql) %}\n\n {% set schemata=results.columns['schema_name'].values() %}\n\n {{ return(schemata) }}\n\n {% else %}\n\n {{ return([]) }}\n\n {% endif %}\n\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.548119, "supported_languages": null}, "macro.dbt_utils.get_column_values": {"name": "get_column_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_column_values.sql", "original_file_path": "macros/sql/get_column_values.sql", "unique_id": "macro.dbt_utils.get_column_values", "macro_sql": "{% macro get_column_values(table, column, order_by='count(*) desc', max_records=none, default=none, where=none) -%}\n {{ return(adapter.dispatch('get_column_values', 'dbt_utils')(table, column, order_by, max_records, default, where)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_column_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.548783, "supported_languages": null}, "macro.dbt_utils.default__get_column_values": {"name": "default__get_column_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_column_values.sql", "original_file_path": "macros/sql/get_column_values.sql", "unique_id": "macro.dbt_utils.default__get_column_values", "macro_sql": "{% macro default__get_column_values(table, column, order_by='count(*) desc', max_records=none, default=none, where=none) -%}\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n {%- if not execute -%}\n {% set default = [] if not default %}\n {{ return(default) }}\n {% endif %}\n\n {%- do dbt_utils._is_ephemeral(table, 'get_column_values') -%}\n\n {# Not all relations are tables. Renaming for internal clarity without breaking functionality for anyone using named arguments #}\n {# TODO: Change the method signature in a future 0.x.0 release #}\n {%- set target_relation = table -%}\n\n {# adapter.load_relation is a convenience wrapper to avoid building a Relation when we already have one #}\n {% set relation_exists = (load_relation(target_relation)) is not none %}\n\n {%- call statement('get_column_values', fetch_result=true) %}\n\n {%- if not relation_exists and default is none -%}\n\n {{ exceptions.raise_compiler_error(\"In get_column_values(): relation \" ~ target_relation ~ \" does not exist and no default value was provided.\") }}\n\n {%- elif not relation_exists and default is not none -%}\n\n {{ log(\"Relation \" ~ target_relation ~ \" does not exist. Returning the default value: \" ~ default) }}\n\n {{ return(default) }}\n\n {%- else -%}\n\n\n select\n {{ column }} as value\n\n from {{ target_relation }}\n\n {% if where is not none %}\n where {{ where }}\n {% endif %}\n\n group by {{ column }}\n order by {{ order_by }}\n\n {% if max_records is not none %}\n limit {{ max_records }}\n {% endif %}\n\n {% endif %}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_column_values') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values) }}\n {%- else -%}\n {{ return(default) }}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_ephemeral", "macro.dbt.load_relation", "macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5500128, "supported_languages": null}, "macro.dbt_utils.pivot": {"name": "pivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/pivot.sql", "original_file_path": "macros/sql/pivot.sql", "unique_id": "macro.dbt_utils.pivot", "macro_sql": "{% macro pivot(column,\n values,\n alias=True,\n agg='sum',\n cmp='=',\n prefix='',\n suffix='',\n then_value=1,\n else_value=0,\n quote_identifiers=True,\n distinct=False) %}\n {{ return(adapter.dispatch('pivot', 'dbt_utils')(column, values, alias, agg, cmp, prefix, suffix, then_value, else_value, quote_identifiers, distinct)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__pivot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.550744, "supported_languages": null}, "macro.dbt_utils.default__pivot": {"name": "default__pivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/pivot.sql", "original_file_path": "macros/sql/pivot.sql", "unique_id": "macro.dbt_utils.default__pivot", "macro_sql": "{% macro default__pivot(column,\n values,\n alias=True,\n agg='sum',\n cmp='=',\n prefix='',\n suffix='',\n then_value=1,\n else_value=0,\n quote_identifiers=True,\n distinct=False) %}\n {% for value in values %}\n {{ agg }}(\n {% if distinct %} distinct {% endif %}\n case\n when {{ column }} {{ cmp }} '{{ dbt.escape_single_quotes(value) }}'\n then {{ then_value }}\n else {{ else_value }}\n end\n )\n {% if alias %}\n {% if quote_identifiers %}\n as {{ adapter.quote(prefix ~ value ~ suffix) }}\n {% else %}\n as {{ dbt_utils.slugify(prefix ~ value ~ suffix) }}\n {% endif %}\n {% endif %}\n {% if not loop.last %},{% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.escape_single_quotes", "macro.dbt_utils.slugify"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.551425, "supported_languages": null}, "macro.dbt_utils.get_filtered_columns_in_relation": {"name": "get_filtered_columns_in_relation", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_filtered_columns_in_relation.sql", "original_file_path": "macros/sql/get_filtered_columns_in_relation.sql", "unique_id": "macro.dbt_utils.get_filtered_columns_in_relation", "macro_sql": "{% macro get_filtered_columns_in_relation(from, except=[]) -%}\n {{ return(adapter.dispatch('get_filtered_columns_in_relation', 'dbt_utils')(from, except)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_filtered_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.551787, "supported_languages": null}, "macro.dbt_utils.default__get_filtered_columns_in_relation": {"name": "default__get_filtered_columns_in_relation", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_filtered_columns_in_relation.sql", "original_file_path": "macros/sql/get_filtered_columns_in_relation.sql", "unique_id": "macro.dbt_utils.default__get_filtered_columns_in_relation", "macro_sql": "{% macro default__get_filtered_columns_in_relation(from, except=[]) -%}\n {%- do dbt_utils._is_relation(from, 'get_filtered_columns_in_relation') -%}\n {%- do dbt_utils._is_ephemeral(from, 'get_filtered_columns_in_relation') -%}\n\n {# -- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n {%- if not execute -%}\n {{ return('') }}\n {% endif %}\n\n {%- set include_cols = [] %}\n {%- set cols = adapter.get_columns_in_relation(from) -%}\n {%- set except = except | map(\"lower\") | list %}\n {%- for col in cols -%}\n {%- if col.column|lower not in except -%}\n {% do include_cols.append(col.column) %}\n {%- endif %}\n {%- endfor %}\n\n {{ return(include_cols) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.552382, "supported_languages": null}, "macro.dbt_utils.width_bucket": {"name": "width_bucket", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/width_bucket.sql", "original_file_path": "macros/sql/width_bucket.sql", "unique_id": "macro.dbt_utils.width_bucket", "macro_sql": "{% macro width_bucket(expr, min_value, max_value, num_buckets) %}\n {{ return(adapter.dispatch('width_bucket', 'dbt_utils') (expr, min_value, max_value, num_buckets)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__width_bucket"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.55278, "supported_languages": null}, "macro.dbt_utils.default__width_bucket": {"name": "default__width_bucket", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/width_bucket.sql", "original_file_path": "macros/sql/width_bucket.sql", "unique_id": "macro.dbt_utils.default__width_bucket", "macro_sql": "{% macro default__width_bucket(expr, min_value, max_value, num_buckets) -%}\n\n {% set bin_size -%}\n (( {{ max_value }} - {{ min_value }} ) / {{ num_buckets }} )\n {%- endset %}\n (\n -- to break ties when the amount is eaxtly at the bucket egde\n case\n when\n mod(\n {{ dbt.safe_cast(expr, dbt.type_numeric() ) }},\n {{ dbt.safe_cast(bin_size, dbt.type_numeric() ) }}\n ) = 0\n then 1\n else 0\n end\n ) +\n -- Anything over max_value goes the N+1 bucket\n least(\n ceil(\n ({{ expr }} - {{ min_value }})/{{ bin_size }}\n ),\n {{ num_buckets }} + 1\n )\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.safe_cast", "macro.dbt.type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.553169, "supported_languages": null}, "macro.dbt_utils.snowflake__width_bucket": {"name": "snowflake__width_bucket", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/width_bucket.sql", "original_file_path": "macros/sql/width_bucket.sql", "unique_id": "macro.dbt_utils.snowflake__width_bucket", "macro_sql": "{% macro snowflake__width_bucket(expr, min_value, max_value, num_buckets) %}\n width_bucket({{ expr }}, {{ min_value }}, {{ max_value }}, {{ num_buckets }} )\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.553331, "supported_languages": null}, "macro.dbt_utils.get_query_results_as_dict": {"name": "get_query_results_as_dict", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_query_results_as_dict.sql", "original_file_path": "macros/sql/get_query_results_as_dict.sql", "unique_id": "macro.dbt_utils.get_query_results_as_dict", "macro_sql": "{% macro get_query_results_as_dict(query) %}\n {{ return(adapter.dispatch('get_query_results_as_dict', 'dbt_utils')(query)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_query_results_as_dict"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.553637, "supported_languages": null}, "macro.dbt_utils.default__get_query_results_as_dict": {"name": "default__get_query_results_as_dict", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_query_results_as_dict.sql", "original_file_path": "macros/sql/get_query_results_as_dict.sql", "unique_id": "macro.dbt_utils.default__get_query_results_as_dict", "macro_sql": "{% macro default__get_query_results_as_dict(query) %}\n\n{# This macro returns a dictionary of the form {column_name: (tuple_of_results)} #}\n\n {%- call statement('get_query_results', fetch_result=True,auto_begin=false) -%}\n\n {{ query }}\n\n {%- endcall -%}\n\n {% set sql_results={} %}\n\n {%- if execute -%}\n {% set sql_results_table = load_result('get_query_results').table.columns %}\n {% for column_name, column in sql_results_table.items() %}\n {% do sql_results.update({column_name: column.values()}) %}\n {% endfor %}\n {%- endif -%}\n\n {{ return(sql_results) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.554124, "supported_languages": null}, "macro.dbt_utils.generate_surrogate_key": {"name": "generate_surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_surrogate_key.sql", "original_file_path": "macros/sql/generate_surrogate_key.sql", "unique_id": "macro.dbt_utils.generate_surrogate_key", "macro_sql": "{%- macro generate_surrogate_key(field_list) -%}\n {{ return(adapter.dispatch('generate_surrogate_key', 'dbt_utils')(field_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__generate_surrogate_key"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.55445, "supported_languages": null}, "macro.dbt_utils.default__generate_surrogate_key": {"name": "default__generate_surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_surrogate_key.sql", "original_file_path": "macros/sql/generate_surrogate_key.sql", "unique_id": "macro.dbt_utils.default__generate_surrogate_key", "macro_sql": "\n\n{%- macro default__generate_surrogate_key(field_list) -%}\n\n{%- if var('surrogate_key_treat_nulls_as_empty_strings', False) -%}\n {%- set default_null_value = \"\" -%}\n{%- else -%}\n {%- set default_null_value = '_dbt_utils_surrogate_key_null_' -%}\n{%- endif -%}\n\n{%- set fields = [] -%}\n\n{%- for field in field_list -%}\n\n {%- do fields.append(\n \"coalesce(cast(\" ~ field ~ \" as \" ~ dbt.type_string() ~ \"), '\" ~ default_null_value ~\"')\"\n ) -%}\n\n {%- if not loop.last %}\n {%- do fields.append(\"'-'\") -%}\n {%- endif -%}\n\n{%- endfor -%}\n\n{{ dbt.hash(dbt.concat(fields)) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.hash", "macro.dbt.concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.554973, "supported_languages": null}, "macro.dbt_utils.get_table_types_sql": {"name": "get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.get_table_types_sql", "macro_sql": "{%- macro get_table_types_sql() -%}\n {{ return(adapter.dispatch('get_table_types_sql', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_utils.postgres__get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.555268, "supported_languages": null}, "macro.dbt_utils.default__get_table_types_sql": {"name": "default__get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.default__get_table_types_sql", "macro_sql": "{% macro default__get_table_types_sql() %}\n case table_type\n when 'BASE TABLE' then 'table'\n when 'EXTERNAL TABLE' then 'external'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as {{ adapter.quote('table_type') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.555388, "supported_languages": null}, "macro.dbt_utils.postgres__get_table_types_sql": {"name": "postgres__get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.postgres__get_table_types_sql", "macro_sql": "{% macro postgres__get_table_types_sql() %}\n case table_type\n when 'BASE TABLE' then 'table'\n when 'FOREIGN' then 'external'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as {{ adapter.quote('table_type') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.555508, "supported_languages": null}, "macro.dbt_utils.databricks__get_table_types_sql": {"name": "databricks__get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.databricks__get_table_types_sql", "macro_sql": "{% macro databricks__get_table_types_sql() %}\n case table_type\n when 'MANAGED' then 'table'\n when 'BASE TABLE' then 'table'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as {{ adapter.quote('table_type') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.555626, "supported_languages": null}, "macro.dbt_utils.get_single_value": {"name": "get_single_value", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_single_value.sql", "original_file_path": "macros/sql/get_single_value.sql", "unique_id": "macro.dbt_utils.get_single_value", "macro_sql": "{% macro get_single_value(query, default=none) %}\n {{ return(adapter.dispatch('get_single_value', 'dbt_utils')(query, default)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_single_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.55625, "supported_languages": null}, "macro.dbt_utils.default__get_single_value": {"name": "default__get_single_value", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_single_value.sql", "original_file_path": "macros/sql/get_single_value.sql", "unique_id": "macro.dbt_utils.default__get_single_value", "macro_sql": "{% macro default__get_single_value(query, default) %}\n\n{# This macro returns the (0, 0) record in a query, i.e. the first row of the first column #}\n\n {%- call statement('get_query_result', fetch_result=True, auto_begin=false) -%}\n\n {{ query }}\n\n {%- endcall -%}\n\n {%- if execute -%}\n\n {% set r = load_result('get_query_result').table.columns[0].values() %}\n {% if r | length == 0 %}\n {% do print('Query `' ~ query ~ '` returned no rows. Using the default value: ' ~ default) %}\n {% set sql_result = default %}\n {% else %}\n {% set sql_result = r[0] %}\n {% endif %}\n \n {%- else -%}\n \n {% set sql_result = default %}\n \n {%- endif -%}\n\n {% do return(sql_result) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.55685, "supported_languages": null}, "macro.dbt_utils.degrees_to_radians": {"name": "degrees_to_radians", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.degrees_to_radians", "macro_sql": "{% macro degrees_to_radians(degrees) -%}\n acos(-1) * {{degrees}} / 180\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.557285, "supported_languages": null}, "macro.dbt_utils.haversine_distance": {"name": "haversine_distance", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.haversine_distance", "macro_sql": "{% macro haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n {{ return(adapter.dispatch('haversine_distance', 'dbt_utils')(lat1,lon1,lat2,lon2,unit)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__haversine_distance"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.557514, "supported_languages": null}, "macro.dbt_utils.default__haversine_distance": {"name": "default__haversine_distance", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.default__haversine_distance", "macro_sql": "{% macro default__haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n{%- if unit == 'mi' %}\n {% set conversion_rate = 1 %}\n{% elif unit == 'km' %}\n {% set conversion_rate = 1.60934 %}\n{% else %}\n {{ exceptions.raise_compiler_error(\"unit input must be one of 'mi' or 'km'. Got \" ~ unit) }}\n{% endif %}\n\n 2 * 3961 * asin(sqrt(power((sin(radians(({{ lat2 }} - {{ lat1 }}) / 2))), 2) +\n cos(radians({{lat1}})) * cos(radians({{lat2}})) *\n power((sin(radians(({{ lon2 }} - {{ lon1 }}) / 2))), 2))) * {{ conversion_rate }}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5579882, "supported_languages": null}, "macro.dbt_utils.bigquery__haversine_distance": {"name": "bigquery__haversine_distance", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.bigquery__haversine_distance", "macro_sql": "{% macro bigquery__haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n{% set radians_lat1 = dbt_utils.degrees_to_radians(lat1) %}\n{% set radians_lat2 = dbt_utils.degrees_to_radians(lat2) %}\n{% set radians_lon1 = dbt_utils.degrees_to_radians(lon1) %}\n{% set radians_lon2 = dbt_utils.degrees_to_radians(lon2) %}\n{%- if unit == 'mi' %}\n {% set conversion_rate = 1 %}\n{% elif unit == 'km' %}\n {% set conversion_rate = 1.60934 %}\n{% else %}\n {{ exceptions.raise_compiler_error(\"unit input must be one of 'mi' or 'km'. Got \" ~ unit) }}\n{% endif %}\n 2 * 3961 * asin(sqrt(power(sin(({{ radians_lat2 }} - {{ radians_lat1 }}) / 2), 2) +\n cos({{ radians_lat1 }}) * cos({{ radians_lat2 }}) *\n power(sin(({{ radians_lon2 }} - {{ radians_lon1 }}) / 2), 2))) * {{ conversion_rate }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.degrees_to_radians"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.558641, "supported_languages": null}, "macro.asana_source.get_story_columns": {"name": "get_story_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_story_columns.sql", "original_file_path": "macros/get_story_columns.sql", "unique_id": "macro.asana_source.get_story_columns", "macro_sql": "{% macro get_story_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"created_by_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"hearted\", \"datatype\": \"boolean\"},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"num_hearts\", \"datatype\": dbt.type_int()},\n {\"name\": \"source\", \"datatype\": dbt.type_string()},\n {\"name\": \"target_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"text\", \"datatype\": dbt.type_string()},\n {\"name\": \"type\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string", "macro.dbt.type_int"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5596, "supported_languages": null}, "macro.asana_source.get_task_tag_columns": {"name": "get_task_tag_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_task_tag_columns.sql", "original_file_path": "macros/get_task_tag_columns.sql", "unique_id": "macro.asana_source.get_task_tag_columns", "macro_sql": "{% macro get_task_tag_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"tag_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"task_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5600169, "supported_languages": null}, "macro.asana_source.get_task_columns": {"name": "get_task_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_task_columns.sql", "original_file_path": "macros/get_task_columns.sql", "unique_id": "macro.asana_source.get_task_columns", "macro_sql": "{% macro get_task_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"assignee_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"completed\", \"datatype\": \"boolean\"},\n {\"name\": \"completed_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"completed_by_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"due_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"due_on\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"modified_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"notes\", \"datatype\": dbt.type_string()},\n {\"name\": \"liked\", \"datatype\": \"boolean\"},\n {\"name\": \"num_likes\", \"datatype\": dbt.type_int()},\n {\"name\": \"parent_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"start_on\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"workspace_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string", "macro.dbt.type_int"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.561502, "supported_languages": null}, "macro.asana_source.get_task_section_columns": {"name": "get_task_section_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_task_section_columns.sql", "original_file_path": "macros/get_task_section_columns.sql", "unique_id": "macro.asana_source.get_task_section_columns", "macro_sql": "{% macro get_task_section_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"section_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"task_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5619168, "supported_languages": null}, "macro.asana_source.get_team_columns": {"name": "get_team_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_team_columns.sql", "original_file_path": "macros/get_team_columns.sql", "unique_id": "macro.asana_source.get_team_columns", "macro_sql": "{% macro get_team_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_deleted\", \"datatype\": \"boolean\"},\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"organization_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.562477, "supported_languages": null}, "macro.asana_source.get_user_columns": {"name": "get_user_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_user_columns.sql", "original_file_path": "macros/get_user_columns.sql", "unique_id": "macro.asana_source.get_user_columns", "macro_sql": "{% macro get_user_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_deleted\", \"datatype\": \"boolean\"},\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"email\", \"datatype\": dbt.type_string()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.56303, "supported_languages": null}, "macro.asana_source.get_project_columns": {"name": "get_project_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_project_columns.sql", "original_file_path": "macros/get_project_columns.sql", "unique_id": "macro.asana_source.get_project_columns", "macro_sql": "{% macro get_project_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_deleted\", \"datatype\": \"boolean\"},\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"archived\", \"datatype\": \"boolean\"},\n {\"name\": \"color\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"current_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"due_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"modified_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"notes\", \"datatype\": dbt.type_string()},\n {\"name\": \"owner_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"public\", \"datatype\": \"boolean\"},\n {\"name\": \"team_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"workspace_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.564341, "supported_languages": null}, "macro.asana_source.get_task_follower_columns": {"name": "get_task_follower_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_task_follower_columns.sql", "original_file_path": "macros/get_task_follower_columns.sql", "unique_id": "macro.asana_source.get_task_follower_columns", "macro_sql": "{% macro get_task_follower_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"task_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"user_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5647712, "supported_languages": null}, "macro.asana_source.get_section_columns": {"name": "get_section_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_section_columns.sql", "original_file_path": "macros/get_section_columns.sql", "unique_id": "macro.asana_source.get_section_columns", "macro_sql": "{% macro get_section_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"project_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.565357, "supported_languages": null}, "macro.asana_source.get_project_task_columns": {"name": "get_project_task_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_project_task_columns.sql", "original_file_path": "macros/get_project_task_columns.sql", "unique_id": "macro.asana_source.get_project_task_columns", "macro_sql": "{% macro get_project_task_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"project_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"task_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5657861, "supported_languages": null}, "macro.asana_source.get_tag_columns": {"name": "get_tag_columns", "resource_type": "macro", "package_name": "asana_source", "path": "macros/get_tag_columns.sql", "original_file_path": "macros/get_tag_columns.sql", "unique_id": "macro.asana_source.get_tag_columns", "macro_sql": "{% macro get_tag_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_deleted\", \"datatype\": \"boolean\"},\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"color\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"message\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"notes\", \"datatype\": dbt.type_string()},\n {\"name\": \"workspace_id\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.596552, "supported_languages": null}, "macro.fivetran_utils.enabled_vars": {"name": "enabled_vars", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/enabled_vars.sql", "original_file_path": "macros/enabled_vars.sql", "unique_id": "macro.fivetran_utils.enabled_vars", "macro_sql": "{% macro enabled_vars(vars) %}\n\n{% for v in vars %}\n \n {% if var(v, True) == False %}\n {{ return(False) }}\n {% endif %}\n\n{% endfor %}\n\n{{ return(True) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5970602, "supported_languages": null}, "macro.fivetran_utils.percentile": {"name": "percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.percentile", "macro_sql": "{% macro percentile(percentile_field, partition_field, percent) -%}\n\n{{ adapter.dispatch('percentile', 'fivetran_utils') (percentile_field, partition_field, percent) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__percentile"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5974898, "supported_languages": null}, "macro.fivetran_utils.default__percentile": {"name": "default__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.default__percentile", "macro_sql": "{% macro default__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n over ( partition by {{ partition_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5976472, "supported_languages": null}, "macro.fivetran_utils.redshift__percentile": {"name": "redshift__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.redshift__percentile", "macro_sql": "{% macro redshift__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n over ( partition by {{ partition_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.597794, "supported_languages": null}, "macro.fivetran_utils.bigquery__percentile": {"name": "bigquery__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.bigquery__percentile", "macro_sql": "{% macro bigquery__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percentile_field }}, \n {{ percent }}) \n over (partition by {{ partition_field }} \n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5979362, "supported_languages": null}, "macro.fivetran_utils.postgres__percentile": {"name": "postgres__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.postgres__percentile", "macro_sql": "{% macro postgres__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n /* have to group by partition field */\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.598071, "supported_languages": null}, "macro.fivetran_utils.spark__percentile": {"name": "spark__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.spark__percentile", "macro_sql": "{% macro spark__percentile(percentile_field, partition_field, percent) %}\n\n percentile( \n {{ percentile_field }}, \n {{ percent }}) \n over (partition by {{ partition_field }} \n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.5982158, "supported_languages": null}, "macro.fivetran_utils.pivot_json_extract": {"name": "pivot_json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/pivot_json_extract.sql", "original_file_path": "macros/pivot_json_extract.sql", "unique_id": "macro.fivetran_utils.pivot_json_extract", "macro_sql": "{% macro pivot_json_extract(string, list_of_properties) %}\n\n{%- for property in list_of_properties -%}\n{%- if property is mapping -%}\nreplace( {{ fivetran_utils.json_extract(string, property.name) }}, '\"', '') as {{ property.alias if property.alias else property.name | replace(' ', '_') | replace('.', '_') | lower }}\n\n{%- else -%}\nreplace( {{ fivetran_utils.json_extract(string, property) }}, '\"', '') as {{ property | replace(' ', '_') | lower }}\n\n{%- endif -%}\n{%- if not loop.last -%},{%- endif %}\n{% endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.json_extract"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.598925, "supported_languages": null}, "macro.fivetran_utils.persist_pass_through_columns": {"name": "persist_pass_through_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/persist_pass_through_columns.sql", "original_file_path": "macros/persist_pass_through_columns.sql", "unique_id": "macro.fivetran_utils.persist_pass_through_columns", "macro_sql": "{% macro persist_pass_through_columns(pass_through_variable, identifier=none, transform='') %}\n\n{% if var(pass_through_variable, none) %}\n {% for field in var(pass_through_variable) %}\n , {{ transform ~ '(' ~ (identifier ~ '.' if identifier else '') ~ (field.alias if field.alias else field.name) ~ ')' }} as {{ field.alias if field.alias else field.name }}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.599488, "supported_languages": null}, "macro.fivetran_utils.json_parse": {"name": "json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.json_parse", "macro_sql": "{% macro json_parse(string, string_path) -%}\n\n{{ adapter.dispatch('json_parse', 'fivetran_utils') (string, string_path) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__json_parse"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6000829, "supported_languages": null}, "macro.fivetran_utils.default__json_parse": {"name": "default__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.default__json_parse", "macro_sql": "{% macro default__json_parse(string, string_path) %}\n\n json_extract_path_text({{string}}, {%- for s in string_path -%}'{{ s }}'{%- if not loop.last -%},{%- endif -%}{%- endfor -%} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.600297, "supported_languages": null}, "macro.fivetran_utils.redshift__json_parse": {"name": "redshift__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.redshift__json_parse", "macro_sql": "{% macro redshift__json_parse(string, string_path) %}\n\n json_extract_path_text({{string}}, {%- for s in string_path -%}'{{ s }}'{%- if not loop.last -%},{%- endif -%}{%- endfor -%} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6005068, "supported_languages": null}, "macro.fivetran_utils.bigquery__json_parse": {"name": "bigquery__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.bigquery__json_parse", "macro_sql": "{% macro bigquery__json_parse(string, string_path) %}\n\n \n json_extract_scalar({{string}}, '$.{%- for s in string_path -%}{{ s }}{%- if not loop.last -%}.{%- endif -%}{%- endfor -%} ')\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.600717, "supported_languages": null}, "macro.fivetran_utils.postgres__json_parse": {"name": "postgres__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.postgres__json_parse", "macro_sql": "{% macro postgres__json_parse(string, string_path) %}\n\n {{string}}::json #>> '{ {%- for s in string_path -%}{{ s }}{%- if not loop.last -%},{%- endif -%}{%- endfor -%} }'\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6009269, "supported_languages": null}, "macro.fivetran_utils.snowflake__json_parse": {"name": "snowflake__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.snowflake__json_parse", "macro_sql": "{% macro snowflake__json_parse(string, string_path) %}\n\n parse_json( {{string}} ) {%- for s in string_path -%}{% if s is number %}[{{ s }}]{% else %}['{{ s }}']{% endif %}{%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6011589, "supported_languages": null}, "macro.fivetran_utils.spark__json_parse": {"name": "spark__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.spark__json_parse", "macro_sql": "{% macro spark__json_parse(string, string_path) %}\n\n {{string}} : {%- for s in string_path -%}{% if s is number %}[{{ s }}]{% else %}['{{ s }}']{% endif %}{%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6014059, "supported_languages": null}, "macro.fivetran_utils.sqlserver__json_parse": {"name": "sqlserver__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.sqlserver__json_parse", "macro_sql": "{% macro sqlserver__json_parse(string, string_path) %}\n\n json_value({{string}}, '$.{%- for s in string_path -%}{{ s }}{%- if not loop.last -%}.{%- endif -%}{%- endfor -%} ')\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.601696, "supported_languages": null}, "macro.fivetran_utils.max_bool": {"name": "max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.max_bool", "macro_sql": "{% macro max_bool(boolean_field) -%}\n\n{{ adapter.dispatch('max_bool', 'fivetran_utils') (boolean_field) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__max_bool"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6019661, "supported_languages": null}, "macro.fivetran_utils.default__max_bool": {"name": "default__max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.default__max_bool", "macro_sql": "{% macro default__max_bool(boolean_field) %}\n\n bool_or( {{ boolean_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6020591, "supported_languages": null}, "macro.fivetran_utils.snowflake__max_bool": {"name": "snowflake__max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.snowflake__max_bool", "macro_sql": "{% macro snowflake__max_bool(boolean_field) %}\n\n max( {{ boolean_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.60215, "supported_languages": null}, "macro.fivetran_utils.bigquery__max_bool": {"name": "bigquery__max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.bigquery__max_bool", "macro_sql": "{% macro bigquery__max_bool(boolean_field) %}\n\n max( {{ boolean_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.602251, "supported_languages": null}, "macro.fivetran_utils.calculated_fields": {"name": "calculated_fields", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/calculated_fields.sql", "original_file_path": "macros/calculated_fields.sql", "unique_id": "macro.fivetran_utils.calculated_fields", "macro_sql": "{% macro calculated_fields(variable) -%}\n\n{% if var(variable, none) %}\n {% for field in var(variable) %}\n , {{ field.transform_sql }} as {{ field.name }} \n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.602574, "supported_languages": null}, "macro.fivetran_utils.drop_schemas_automation": {"name": "drop_schemas_automation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/drop_schemas_automation.sql", "original_file_path": "macros/drop_schemas_automation.sql", "unique_id": "macro.fivetran_utils.drop_schemas_automation", "macro_sql": "{% macro drop_schemas_automation(drop_target_schema=true) %}\n {{ return(adapter.dispatch('drop_schemas_automation', 'fivetran_utils')(drop_target_schema)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__drop_schemas_automation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.603002, "supported_languages": null}, "macro.fivetran_utils.default__drop_schemas_automation": {"name": "default__drop_schemas_automation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/drop_schemas_automation.sql", "original_file_path": "macros/drop_schemas_automation.sql", "unique_id": "macro.fivetran_utils.default__drop_schemas_automation", "macro_sql": "{% macro default__drop_schemas_automation(drop_target_schema=true) %}\n\n{% set fetch_list_sql %}\n {% if target.type not in ('databricks', 'spark') %}\n select schema_name\n from \n {{ wrap_in_quotes(target.database) }}.INFORMATION_SCHEMA.SCHEMATA\n where lower(schema_name) like '{{ target.schema | lower }}{%- if not drop_target_schema -%}_{%- endif -%}%'\n {% else %}\n SHOW SCHEMAS LIKE '{{ target.schema }}{%- if not drop_target_schema -%}_{%- endif -%}*'\n {% endif %}\n{% endset %}\n\n{% set results = run_query(fetch_list_sql) %}\n\n{% if execute %}\n {% set results_list = results.columns[0].values() %}\n{% else %}\n {% set results_list = [] %}\n{% endif %}\n\n{% for schema_to_drop in results_list %}\n {% do adapter.drop_schema(api.Relation.create(database=target.database, schema=schema_to_drop)) %}\n {{ print('Schema ' ~ schema_to_drop ~ ' successfully dropped from the ' ~ target.database ~ ' database.\\n')}}\n{% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.wrap_in_quotes", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6038752, "supported_languages": null}, "macro.fivetran_utils.seed_data_helper": {"name": "seed_data_helper", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/seed_data_helper.sql", "original_file_path": "macros/seed_data_helper.sql", "unique_id": "macro.fivetran_utils.seed_data_helper", "macro_sql": "{% macro seed_data_helper(seed_name, warehouses) %}\n\n{% if target.type in warehouses %}\n {% for w in warehouses %}\n {% if target.type == w %}\n {{ return(ref(seed_name ~ \"_\" ~ w ~ \"\")) }}\n {% endif %}\n {% endfor %}\n{% else %}\n{{ return(ref(seed_name)) }}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6043808, "supported_languages": null}, "macro.fivetran_utils.fill_pass_through_columns": {"name": "fill_pass_through_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fill_pass_through_columns.sql", "original_file_path": "macros/fill_pass_through_columns.sql", "unique_id": "macro.fivetran_utils.fill_pass_through_columns", "macro_sql": "{% macro fill_pass_through_columns(pass_through_variable) %}\n\n{% if var(pass_through_variable) %}\n {% for field in var(pass_through_variable) %}\n {% if field is mapping %}\n {% if field.transform_sql %}\n , {{ field.transform_sql }} as {{ field.alias if field.alias else field.name }}\n {% else %}\n , {{ field.alias if field.alias else field.name }}\n {% endif %}\n {% else %}\n , {{ field }}\n {% endif %}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.604984, "supported_languages": null}, "macro.fivetran_utils.string_agg": {"name": "string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.string_agg", "macro_sql": "{% macro string_agg(field_to_agg, delimiter) -%}\n\n{{ adapter.dispatch('string_agg', 'fivetran_utils') (field_to_agg, delimiter) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__string_agg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6053061, "supported_languages": null}, "macro.fivetran_utils.default__string_agg": {"name": "default__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.default__string_agg", "macro_sql": "{% macro default__string_agg(field_to_agg, delimiter) %}\n string_agg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.605425, "supported_languages": null}, "macro.fivetran_utils.snowflake__string_agg": {"name": "snowflake__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.snowflake__string_agg", "macro_sql": "{% macro snowflake__string_agg(field_to_agg, delimiter) %}\n listagg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6055412, "supported_languages": null}, "macro.fivetran_utils.redshift__string_agg": {"name": "redshift__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.redshift__string_agg", "macro_sql": "{% macro redshift__string_agg(field_to_agg, delimiter) %}\n listagg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.605657, "supported_languages": null}, "macro.fivetran_utils.spark__string_agg": {"name": "spark__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.spark__string_agg", "macro_sql": "{% macro spark__string_agg(field_to_agg, delimiter) %}\n -- collect set will remove duplicates\n replace(replace(replace(cast( collect_set({{ field_to_agg }}) as string), '[', ''), ']', ''), ', ', {{ delimiter }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6057842, "supported_languages": null}, "macro.fivetran_utils.timestamp_diff": {"name": "timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.timestamp_diff", "macro_sql": "{% macro timestamp_diff(first_date, second_date, datepart) %}\n {{ adapter.dispatch('timestamp_diff', 'fivetran_utils')(first_date, second_date, datepart) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__timestamp_diff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6065202, "supported_languages": null}, "macro.fivetran_utils.default__timestamp_diff": {"name": "default__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.default__timestamp_diff", "macro_sql": "{% macro default__timestamp_diff(first_date, second_date, datepart) %}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.606667, "supported_languages": null}, "macro.fivetran_utils.redshift__timestamp_diff": {"name": "redshift__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.redshift__timestamp_diff", "macro_sql": "{% macro redshift__timestamp_diff(first_date, second_date, datepart) %}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.606882, "supported_languages": null}, "macro.fivetran_utils.bigquery__timestamp_diff": {"name": "bigquery__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.bigquery__timestamp_diff", "macro_sql": "{% macro bigquery__timestamp_diff(first_date, second_date, datepart) %}\n\n timestamp_diff(\n {{second_date}},\n {{first_date}},\n {{datepart}}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6070201, "supported_languages": null}, "macro.fivetran_utils.postgres__timestamp_diff": {"name": "postgres__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.postgres__timestamp_diff", "macro_sql": "{% macro postgres__timestamp_diff(first_date, second_date, datepart) %}\n\n {% if datepart == 'year' %}\n (date_part('year', ({{second_date}})::date) - date_part('year', ({{first_date}})::date))\n {% elif datepart == 'quarter' %}\n ({{ dbt.datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ dbt.datediff(first_date, second_date, 'year') }} * 12 + date_part('month', ({{second_date}})::date) - date_part('month', ({{first_date}})::date))\n {% elif datepart == 'day' %}\n (({{second_date}})::date - ({{first_date}})::date)\n {% elif datepart == 'week' %}\n ({{ dbt.datediff(first_date, second_date, 'day') }} / 7 + case\n when date_part('dow', ({{first_date}})::timestamp) <= date_part('dow', ({{second_date}})::timestamp) then\n case when {{first_date}} <= {{second_date}} then 0 else -1 end\n else\n case when {{first_date}} <= {{second_date}} then 1 else 0 end\n end)\n {% elif datepart == 'hour' %}\n ({{ dbt.datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ dbt.datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ dbt.datediff(first_date, second_date, 'minute') }} * 60 + floor(date_part('second', ({{second_date}})::timestamp)) - floor(date_part('second', ({{first_date}})::timestamp)))\n {% elif datepart == 'millisecond' %}\n ({{ dbt.datediff(first_date, second_date, 'minute') }} * 60000 + floor(date_part('millisecond', ({{second_date}})::timestamp)) - floor(date_part('millisecond', ({{first_date}})::timestamp)))\n {% elif datepart == 'microsecond' %}\n ({{ dbt.datediff(first_date, second_date, 'minute') }} * 60000000 + floor(date_part('microsecond', ({{second_date}})::timestamp)) - floor(date_part('microsecond', ({{first_date}})::timestamp)))\n {% else %}\n {{ exceptions.raise_compiler_error(\"Unsupported datepart for macro datediff in postgres: {!r}\".format(datepart)) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6084611, "supported_languages": null}, "macro.fivetran_utils.try_cast": {"name": "try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.try_cast", "macro_sql": "{% macro try_cast(field, type) %}\n {{ adapter.dispatch('try_cast', 'fivetran_utils') (field, type) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__try_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6089642, "supported_languages": null}, "macro.fivetran_utils.default__try_cast": {"name": "default__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.default__try_cast", "macro_sql": "{% macro default__try_cast(field, type) %}\n {# most databases don't support this function yet\n so we just need to use cast #}\n cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6090891, "supported_languages": null}, "macro.fivetran_utils.redshift__try_cast": {"name": "redshift__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.redshift__try_cast", "macro_sql": "{% macro redshift__try_cast(field, type) %}\n{%- if type == 'numeric' -%}\n\n case\n when trim({{field}}) ~ '^(0|[1-9][0-9]*)$' then trim({{field}})\n else null\n end::{{type}}\n\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"non-numeric datatypes are not currently supported\") }}\n\n{% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.609335, "supported_languages": null}, "macro.fivetran_utils.postgres__try_cast": {"name": "postgres__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.postgres__try_cast", "macro_sql": "{% macro postgres__try_cast(field, type) %}\n{%- if type == 'numeric' -%}\n\n case\n when replace(cast({{field}} as varchar),cast(' ' as varchar),cast('' as varchar)) ~ '^(0|[1-9][0-9]*)$' \n then replace(cast({{field}} as varchar),cast(' ' as varchar),cast('' as varchar))\n else null\n end::{{type}}\n\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"non-numeric datatypes are not currently supported\") }}\n\n{% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.609587, "supported_languages": null}, "macro.fivetran_utils.snowflake__try_cast": {"name": "snowflake__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.snowflake__try_cast", "macro_sql": "{% macro snowflake__try_cast(field, type) %}\n try_cast(cast({{field}} as varchar) as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.609709, "supported_languages": null}, "macro.fivetran_utils.bigquery__try_cast": {"name": "bigquery__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.bigquery__try_cast", "macro_sql": "{% macro bigquery__try_cast(field, type) %}\n safe_cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.609826, "supported_languages": null}, "macro.fivetran_utils.spark__try_cast": {"name": "spark__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.spark__try_cast", "macro_sql": "{% macro spark__try_cast(field, type) %}\n try_cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6099432, "supported_languages": null}, "macro.fivetran_utils.sqlserver__try_cast": {"name": "sqlserver__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.sqlserver__try_cast", "macro_sql": "{% macro sqlserver__try_cast(field, type) %}\n try_cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.610052, "supported_languages": null}, "macro.fivetran_utils.source_relation": {"name": "source_relation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/source_relation.sql", "original_file_path": "macros/source_relation.sql", "unique_id": "macro.fivetran_utils.source_relation", "macro_sql": "{% macro source_relation(union_schema_variable='union_schemas', union_database_variable='union_databases') -%}\n\n{{ adapter.dispatch('source_relation', 'fivetran_utils') (union_schema_variable, union_database_variable) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__source_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.610409, "supported_languages": null}, "macro.fivetran_utils.default__source_relation": {"name": "default__source_relation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/source_relation.sql", "original_file_path": "macros/source_relation.sql", "unique_id": "macro.fivetran_utils.default__source_relation", "macro_sql": "{% macro default__source_relation(union_schema_variable, union_database_variable) %}\n\n{% if var(union_schema_variable, none) %}\n, case\n {% for schema in var(union_schema_variable) %}\n when lower(replace(replace(_dbt_source_relation,'\"',''),'`','')) like '%.{{ schema|lower }}.%' then '{{ schema|lower }}'\n {% endfor %}\n end as source_relation\n{% elif var(union_database_variable, none) %}\n, case\n {% for database in var(union_database_variable) %}\n when lower(replace(replace(_dbt_source_relation,'\"',''),'`','')) like '%{{ database|lower }}.%' then '{{ database|lower }}'\n {% endfor %}\n end as source_relation\n{% else %}\n, cast('' as {{ dbt.type_string() }}) as source_relation\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.610909, "supported_languages": null}, "macro.fivetran_utils.first_value": {"name": "first_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "unique_id": "macro.fivetran_utils.first_value", "macro_sql": "{% macro first_value(first_value_field, partition_field, order_by_field, order=\"asc\") -%}\n\n{{ adapter.dispatch('first_value', 'fivetran_utils') (first_value_field, partition_field, order_by_field, order) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__first_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.611273, "supported_languages": null}, "macro.fivetran_utils.default__first_value": {"name": "default__first_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "unique_id": "macro.fivetran_utils.default__first_value", "macro_sql": "{% macro default__first_value(first_value_field, partition_field, order_by_field, order=\"asc\") %}\n\n first_value( {{ first_value_field }} ignore nulls ) over (partition by {{ partition_field }} order by {{ order_by_field }} {{ order }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.611455, "supported_languages": null}, "macro.fivetran_utils.redshift__first_value": {"name": "redshift__first_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "unique_id": "macro.fivetran_utils.redshift__first_value", "macro_sql": "{% macro redshift__first_value(first_value_field, partition_field, order_by_field, order=\"asc\") %}\n\n first_value( {{ first_value_field }} ignore nulls ) over (partition by {{ partition_field }} order by {{ order_by_field }} {{ order }} , {{ partition_field }} rows unbounded preceding )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.611661, "supported_languages": null}, "macro.fivetran_utils.add_dbt_source_relation": {"name": "add_dbt_source_relation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/add_dbt_source_relation.sql", "original_file_path": "macros/add_dbt_source_relation.sql", "unique_id": "macro.fivetran_utils.add_dbt_source_relation", "macro_sql": "{% macro add_dbt_source_relation() %}\n\n{% if var('union_schemas', none) or var('union_databases', none) %}\n, _dbt_source_relation\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.611899, "supported_languages": null}, "macro.fivetran_utils.add_pass_through_columns": {"name": "add_pass_through_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/add_pass_through_columns.sql", "original_file_path": "macros/add_pass_through_columns.sql", "unique_id": "macro.fivetran_utils.add_pass_through_columns", "macro_sql": "{% macro add_pass_through_columns(base_columns, pass_through_var) %}\n\n {% if pass_through_var %}\n\n {% for column in pass_through_var %}\n\n {% if column is mapping %}\n\n {% if column.alias %}\n\n {% do base_columns.append({ \"name\": column.name, \"alias\": column.alias, \"datatype\": column.datatype if column.datatype else dbt.type_string()}) %}\n\n {% else %}\n\n {% do base_columns.append({ \"name\": column.name, \"datatype\": column.datatype if column.datatype else dbt.type_string()}) %}\n \n {% endif %}\n\n {% else %}\n\n {% do base_columns.append({ \"name\": column, \"datatype\": dbt.type_string()}) %}\n\n {% endif %}\n\n {% endfor %}\n\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6128519, "supported_languages": null}, "macro.fivetran_utils.union_relations": {"name": "union_relations", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_relations.sql", "original_file_path": "macros/union_relations.sql", "unique_id": "macro.fivetran_utils.union_relations", "macro_sql": "{%- macro union_relations(relations, aliases=none, column_override=none, include=[], exclude=[], source_column_name=none) -%}\n\n {%- if exclude and include -%}\n {{ exceptions.raise_compiler_error(\"Both an exclude and include list were provided to the `union` macro. Only one is allowed\") }}\n {%- endif -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. -#}\n {%- if not execute %}\n {{ return('') }}\n {% endif -%}\n\n {%- set column_override = column_override if column_override is not none else {} -%}\n {%- set source_column_name = source_column_name if source_column_name is not none else '_dbt_source_relation' -%}\n\n {%- set relation_columns = {} -%}\n {%- set column_superset = {} -%}\n\n {%- for relation in relations -%}\n\n {%- do relation_columns.update({relation: []}) -%}\n\n {%- do dbt_utils._is_relation(relation, 'union_relations') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) -%}\n {%- for col in cols -%}\n\n {#- If an exclude list was provided and the column is in the list, do nothing -#}\n {%- if exclude and col.column in exclude -%}\n\n {#- If an include list was provided and the column is not in the list, do nothing -#}\n {%- elif include and col.column not in include -%}\n\n {#- Otherwise add the column to the column superset -#}\n {%- else -%}\n\n {#- update the list of columns in this relation -#}\n {%- do relation_columns[relation].append(col.column) -%}\n\n {%- if col.column in column_superset -%}\n\n {%- set stored = column_superset[col.column] -%}\n {%- if col.is_string() and stored.is_string() and col.string_size() > stored.string_size() -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif %}\n\n {%- else -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif -%}\n\n {%- endif -%}\n\n {%- endfor -%}\n {%- endfor -%}\n\n {%- set ordered_column_names = column_superset.keys() -%}\n\n {%- for relation in relations %}\n\n (\n select\n\n cast({{ dbt.string_literal(relation) }} as {{ dbt.type_string() }}) as {{ source_column_name }},\n {% for col_name in ordered_column_names -%}\n\n {%- set col = column_superset[col_name] %}\n {%- set col_type = column_override.get(col.column, col.data_type) %}\n {%- set col_name = adapter.quote(col_name) if col_name in relation_columns[relation] else 'null' %}\n cast({{ col_name }} as {{ col_type }}) as {{ col.quoted }} {% if not loop.last %},{% endif -%}\n\n {%- endfor %}\n\n from {{ aliases[loop.index0] if aliases else relation }}\n )\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n\n {%- endfor -%}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt.string_literal", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.615413, "supported_languages": null}, "macro.fivetran_utils.union_tables": {"name": "union_tables", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_relations.sql", "original_file_path": "macros/union_relations.sql", "unique_id": "macro.fivetran_utils.union_tables", "macro_sql": "{%- macro union_tables(tables, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_table') -%}\n\n {%- do exceptions.warn(\"Warning: the `union_tables` macro is no longer supported and will be deprecated in a future release of dbt-utils. Use the `union_relations` macro instead\") -%}\n\n {{ return(dbt_utils.union_relations(tables, column_override, include, exclude, source_column_name)) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_utils.union_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.615733, "supported_languages": null}, "macro.fivetran_utils.snowflake_seed_data": {"name": "snowflake_seed_data", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/snowflake_seed_data.sql", "original_file_path": "macros/snowflake_seed_data.sql", "unique_id": "macro.fivetran_utils.snowflake_seed_data", "macro_sql": "{% macro snowflake_seed_data(seed_name) %}\n\n{% if target.type == 'snowflake' %}\n{{ return(ref(seed_name ~ '_snowflake')) }}\n{% else %}\n{{ return(ref(seed_name)) }}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.616066, "supported_languages": null}, "macro.fivetran_utils.fill_staging_columns": {"name": "fill_staging_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fill_staging_columns.sql", "original_file_path": "macros/fill_staging_columns.sql", "unique_id": "macro.fivetran_utils.fill_staging_columns", "macro_sql": "{% macro fill_staging_columns(source_columns, staging_columns) -%}\n\n{%- set source_column_names = source_columns|map(attribute='name')|map('lower')|list -%}\n\n{%- for column in staging_columns %}\n {% if column.name|lower in source_column_names -%}\n {{ fivetran_utils.quote_column(column) }} as \n {%- if 'alias' in column %} {{ column.alias }} {% else %} {{ fivetran_utils.quote_column(column) }} {%- endif -%}\n {%- else -%}\n cast(null as {{ column.datatype }})\n {%- if 'alias' in column %} as {{ column.alias }} {% else %} as {{ fivetran_utils.quote_column(column) }} {% endif -%}\n {%- endif -%}\n {%- if not loop.last -%} , {% endif -%}\n{% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.quote_column"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.616986, "supported_languages": null}, "macro.fivetran_utils.quote_column": {"name": "quote_column", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fill_staging_columns.sql", "original_file_path": "macros/fill_staging_columns.sql", "unique_id": "macro.fivetran_utils.quote_column", "macro_sql": "{% macro quote_column(column) %}\n {% if 'quote' in column %}\n {% if column.quote %}\n {% if target.type in ('bigquery', 'spark', 'databricks') %}\n `{{ column.name }}`\n {% elif target.type == 'snowflake' %}\n \"{{ column.name | upper }}\"\n {% else %}\n \"{{ column.name }}\"\n {% endif %}\n {% else %}\n {{ column.name }}\n {% endif %}\n {% else %}\n {{ column.name }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.617439, "supported_languages": null}, "macro.fivetran_utils.json_extract": {"name": "json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.json_extract", "macro_sql": "{% macro json_extract(string, string_path) -%}\n\n{{ adapter.dispatch('json_extract', 'fivetran_utils') (string, string_path) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__json_extract"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.617814, "supported_languages": null}, "macro.fivetran_utils.default__json_extract": {"name": "default__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.default__json_extract", "macro_sql": "{% macro default__json_extract(string, string_path) %}\n\n json_extract_path_text({{string}}, {{ \"'\" ~ string_path ~ \"'\" }} )\n \n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6179478, "supported_languages": null}, "macro.fivetran_utils.snowflake__json_extract": {"name": "snowflake__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.snowflake__json_extract", "macro_sql": "{% macro snowflake__json_extract(string, string_path) %}\n\n json_extract_path_text(try_parse_json( {{string}} ), {{ \"'\" ~ string_path ~ \"'\" }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.618079, "supported_languages": null}, "macro.fivetran_utils.redshift__json_extract": {"name": "redshift__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.redshift__json_extract", "macro_sql": "{% macro redshift__json_extract(string, string_path) %}\n\n case when is_valid_json( {{string}} ) then json_extract_path_text({{string}}, {{ \"'\" ~ string_path ~ \"'\" }} ) else null end\n \n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.618229, "supported_languages": null}, "macro.fivetran_utils.bigquery__json_extract": {"name": "bigquery__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.bigquery__json_extract", "macro_sql": "{% macro bigquery__json_extract(string, string_path) %}\n\n json_extract_scalar({{string}}, {{ \"'$.\" ~ string_path ~ \"'\" }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.618358, "supported_languages": null}, "macro.fivetran_utils.postgres__json_extract": {"name": "postgres__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.postgres__json_extract", "macro_sql": "{% macro postgres__json_extract(string, string_path) %}\n\n {{string}}::json->>{{\"'\" ~ string_path ~ \"'\" }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.618488, "supported_languages": null}, "macro.fivetran_utils.collect_freshness": {"name": "collect_freshness", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/collect_freshness.sql", "original_file_path": "macros/collect_freshness.sql", "unique_id": "macro.fivetran_utils.collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness')(source, loaded_at_field, filter))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.618929, "supported_languages": null}, "macro.fivetran_utils.default__collect_freshness": {"name": "default__collect_freshness", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/collect_freshness.sql", "original_file_path": "macros/collect_freshness.sql", "unique_id": "macro.fivetran_utils.default__collect_freshness", "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n\n {%- set enabled_array = [] -%}\n {% for node in graph.sources.values() %}\n {% if node.identifier == source.identifier %}\n {% if (node.meta['is_enabled'] | default(true)) %}\n {%- do enabled_array.append(1) -%}\n {% endif %}\n {% endif %}\n {% endfor %}\n {% set is_enabled = (enabled_array != []) %}\n\n select\n {% if is_enabled %}\n max({{ loaded_at_field }})\n {% else %} \n {{ current_timestamp() }} {% endif %} as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n\n {% if is_enabled %}\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endif %}\n\n {% endcall %}\n\n {% if dbt_version.split('.') | map('int') | list >= [1, 5, 0] %}\n {{ return(load_result('collect_freshness')) }}\n {% else %}\n {{ return(load_result('collect_freshness').table) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.620053, "supported_languages": null}, "macro.fivetran_utils.timestamp_add": {"name": "timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.timestamp_add", "macro_sql": "{% macro timestamp_add(datepart, interval, from_timestamp) -%}\n\n{{ adapter.dispatch('timestamp_add', 'fivetran_utils') (datepart, interval, from_timestamp) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__timestamp_add"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.620445, "supported_languages": null}, "macro.fivetran_utils.default__timestamp_add": {"name": "default__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.default__timestamp_add", "macro_sql": "{% macro default__timestamp_add(datepart, interval, from_timestamp) %}\n\n timestampadd(\n {{ datepart }},\n {{ interval }},\n {{ from_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6205912, "supported_languages": null}, "macro.fivetran_utils.bigquery__timestamp_add": {"name": "bigquery__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.bigquery__timestamp_add", "macro_sql": "{% macro bigquery__timestamp_add(datepart, interval, from_timestamp) %}\n\n timestamp_add({{ from_timestamp }}, interval {{ interval }} {{ datepart }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6207302, "supported_languages": null}, "macro.fivetran_utils.redshift__timestamp_add": {"name": "redshift__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.redshift__timestamp_add", "macro_sql": "{% macro redshift__timestamp_add(datepart, interval, from_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6208792, "supported_languages": null}, "macro.fivetran_utils.postgres__timestamp_add": {"name": "postgres__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.postgres__timestamp_add", "macro_sql": "{% macro postgres__timestamp_add(datepart, interval, from_timestamp) %}\n\n {{ from_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6210198, "supported_languages": null}, "macro.fivetran_utils.spark__timestamp_add": {"name": "spark__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.spark__timestamp_add", "macro_sql": "{% macro spark__timestamp_add(datepart, interval, from_timestamp) %}\n\n {{ dbt.dateadd(datepart, interval, from_timestamp) }}\n \n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.621174, "supported_languages": null}, "macro.fivetran_utils.ceiling": {"name": "ceiling", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "unique_id": "macro.fivetran_utils.ceiling", "macro_sql": "{% macro ceiling(num) -%}\n\n{{ adapter.dispatch('ceiling', 'fivetran_utils') (num) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__ceiling"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6214058, "supported_languages": null}, "macro.fivetran_utils.default__ceiling": {"name": "default__ceiling", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "unique_id": "macro.fivetran_utils.default__ceiling", "macro_sql": "{% macro default__ceiling(num) %}\n ceiling({{ num }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.621498, "supported_languages": null}, "macro.fivetran_utils.snowflake__ceiling": {"name": "snowflake__ceiling", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "unique_id": "macro.fivetran_utils.snowflake__ceiling", "macro_sql": "{% macro snowflake__ceiling(num) %}\n ceil({{ num }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.62159, "supported_languages": null}, "macro.fivetran_utils.remove_prefix_from_columns": {"name": "remove_prefix_from_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/remove_prefix_from_columns.sql", "original_file_path": "macros/remove_prefix_from_columns.sql", "unique_id": "macro.fivetran_utils.remove_prefix_from_columns", "macro_sql": "{% macro remove_prefix_from_columns(columns, prefix='', exclude=[]) %}\n\n {%- for col in columns if col.name not in exclude -%}\n {%- if col.name[:prefix|length]|lower == prefix -%}\n {{ col.name }} as {{ col.name[prefix|length:] }}\n {%- else -%}\n {{ col.name }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {% endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.622136, "supported_languages": null}, "macro.fivetran_utils.fivetran_date_spine": {"name": "fivetran_date_spine", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fivetran_date_spine.sql", "original_file_path": "macros/fivetran_date_spine.sql", "unique_id": "macro.fivetran_utils.fivetran_date_spine", "macro_sql": "{% macro fivetran_date_spine(datepart, start_date, end_date) -%}\n\n{{ return(adapter.dispatch('fivetran_date_spine', 'fivetran_utils') (datepart, start_date, end_date)) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__fivetran_date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.622663, "supported_languages": null}, "macro.fivetran_utils.default__fivetran_date_spine": {"name": "default__fivetran_date_spine", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fivetran_date_spine.sql", "original_file_path": "macros/fivetran_date_spine.sql", "unique_id": "macro.fivetran_utils.default__fivetran_date_spine", "macro_sql": "{% macro default__fivetran_date_spine(datepart, start_date, end_date) %}\n\n {{ dbt_utils.date_spine(datepart, start_date, end_date) }}\n \n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.622823, "supported_languages": null}, "macro.fivetran_utils.sqlserver__fivetran_date_spine": {"name": "sqlserver__fivetran_date_spine", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fivetran_date_spine.sql", "original_file_path": "macros/fivetran_date_spine.sql", "unique_id": "macro.fivetran_utils.sqlserver__fivetran_date_spine", "macro_sql": "{% macro sqlserver__fivetran_date_spine(datepart, start_date, end_date) -%}\n\n {% set date_spine_query %}\n with\n\n l0 as (\n\n select c\n from (select 1 union all select 1) as d(c)\n\n ),\n l1 as (\n\n select\n 1 as c\n from l0 as a\n cross join l0 as b\n\n ),\n\n l2 as (\n\n select 1 as c\n from l1 as a\n cross join l1 as b\n ),\n\n l3 as (\n\n select 1 as c\n from l2 as a\n cross join l2 as b\n ),\n\n l4 as (\n\n select 1 as c\n from l3 as a\n cross join l3 as b\n ),\n\n l5 as (\n\n select 1 as c\n from l4 as a\n cross join l4 as b\n ),\n\n nums as (\n\n select row_number() over (order by (select null)) as rownum\n from l5\n ),\n\n rawdata as (\n\n select top ({{dbt.datediff(start_date, end_date, datepart)}}) rownum -1 as n\n from nums\n order by rownum\n ),\n\n all_periods as (\n\n select (\n {{\n dbt.dateadd(\n datepart,\n 'n',\n start_date\n )\n }}\n ) as date_{{datepart}}\n from rawdata\n ),\n\n filtered as (\n\n select *\n from all_periods\n where date_{{datepart}} <= {{ end_date }}\n\n )\n\n select * from filtered\n order by 1\n\n {% endset %}\n\n {% set results = run_query(date_spine_query) %}\n\n {% if execute %}\n\n {% set results_list = results.columns[0].values() %}\n \n {% else %}\n\n {% set results_list = [] %}\n\n {% endif %}\n\n {%- for date_field in results_list %}\n select cast('{{ date_field }}' as date) as date_{{datepart}} {{ 'union all ' if not loop.last else '' }}\n {% endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.datediff", "macro.dbt.dateadd", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.623551, "supported_languages": null}, "macro.fivetran_utils.union_data": {"name": "union_data", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_data.sql", "original_file_path": "macros/union_data.sql", "unique_id": "macro.fivetran_utils.union_data", "macro_sql": "{%- macro union_data(table_identifier, database_variable, schema_variable, default_database, default_schema, default_variable, union_schema_variable='union_schemas', union_database_variable='union_databases') -%}\n\n{{ adapter.dispatch('union_data', 'fivetran_utils') (\n table_identifier, \n database_variable, \n schema_variable, \n default_database, \n default_schema, \n default_variable,\n union_schema_variable,\n union_database_variable\n ) }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.fivetran_utils.default__union_data"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.624724, "supported_languages": null}, "macro.fivetran_utils.default__union_data": {"name": "default__union_data", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_data.sql", "original_file_path": "macros/union_data.sql", "unique_id": "macro.fivetran_utils.default__union_data", "macro_sql": "{%- macro default__union_data(\n table_identifier, \n database_variable, \n schema_variable, \n default_database, \n default_schema, \n default_variable,\n union_schema_variable,\n union_database_variable\n ) -%}\n\n{%- if var(union_schema_variable, none) -%}\n\n {%- set relations = [] -%}\n \n {%- if var(union_schema_variable) is string -%}\n {%- set trimmed = var(union_schema_variable)|trim('[')|trim(']') -%}\n {%- set schemas = trimmed.split(',')|map('trim',\" \")|map('trim','\"')|map('trim',\"'\") -%}\n {%- else -%}\n {%- set schemas = var(union_schema_variable) -%}\n {%- endif -%}\n\n {%- for schema in var(union_schema_variable) -%}\n {%- set relation=adapter.get_relation(\n database=source(schema, table_identifier).database if var('has_defined_sources', false) else var(database_variable, default_database),\n schema=source(schema, table_identifier).schema if var('has_defined_sources', false) else schema,\n identifier=source(schema, table_identifier).identifier if var('has_defined_sources', false) else table_identifier\n ) -%}\n \n {%- set relation_exists=relation is not none -%}\n\n {%- if relation_exists -%}\n {%- do relations.append(relation) -%}\n {%- endif -%}\n\n {%- endfor -%}\n \n {%- if relations != [] -%}\n {{ dbt_utils.union_relations(relations) }}\n {%- else -%}\n {% if execute and not var('fivetran__remove_empty_table_warnings', false) -%}\n {{ exceptions.warn(\"\\n\\nPlease be aware: The \" ~ table_identifier|upper ~ \" table was not found in your \" ~ default_schema|upper ~ \" schema(s). The Fivetran dbt package will create a completely empty \" ~ table_identifier|upper ~ \" staging model as to not break downstream transformations. To turn off these warnings, set the `fivetran__remove_empty_table_warnings` variable to TRUE (see https://github.com/fivetran/dbt_fivetran_utils/tree/releases/v0.4.latest#union_data-source for details).\\n\") }}\n {% endif -%}\n select \n cast(null as {{ dbt.type_string() }}) as _dbt_source_relation\n limit 0\n {%- endif -%}\n\n{%- elif var(union_database_variable, none) -%}\n\n {%- set relations = [] -%}\n\n {%- for database in var(union_database_variable) -%}\n {%- set relation=adapter.get_relation(\n database=source(schema, table_identifier).database if var('has_defined_sources', false) else database,\n schema=source(schema, table_identifier).schema if var('has_defined_sources', false) else var(schema_variable, default_schema),\n identifier=source(schema, table_identifier).identifier if var('has_defined_sources', false) else table_identifier\n ) -%}\n\n {%- set relation_exists=relation is not none -%}\n\n {%- if relation_exists -%}\n {%- do relations.append(relation) -%}\n {%- endif -%}\n\n {%- endfor -%}\n\n {%- if relations != [] -%}\n {{ dbt_utils.union_relations(relations) }}\n {%- else -%}\n {% if execute and not var('fivetran__remove_empty_table_warnings', false) -%}\n {{ exceptions.warn(\"\\n\\nPlease be aware: The \" ~ table_identifier|upper ~ \" table was not found in your \" ~ default_schema|upper ~ \" schema(s). The Fivetran dbt package will create a completely empty \" ~ table_identifier|upper ~ \" staging model as to not break downstream transformations. To turn off these warnings, set the `fivetran__remove_empty_table_warnings` variable to TRUE (see https://github.com/fivetran/dbt_fivetran_utils/tree/releases/v0.4.latest#union_data-source for details).\\n\") }}\n {% endif -%}\n select \n cast(null as {{ dbt.type_string() }}) as _dbt_source_relation\n limit 0\n {%- endif -%}\n\n{%- else -%}\n {% set exception_schemas = {\"linkedin_company_pages\": \"linkedin_pages\", \"instagram_business_pages\": \"instagram_business\"} %}\n {% set relation = namespace(value=\"\") %}\n {% if default_schema in exception_schemas.keys() %}\n {% for corrected_schema_name in exception_schemas.items() %} \n {% if default_schema in corrected_schema_name %}\n {# In order for this macro to effectively work within upstream integration tests (mainly used by the Fivetran dbt package maintainers), this identifier variable selection is required to use the macro with different identifier names. #}\n {% set identifier_var = corrected_schema_name[1] + \"_\" + table_identifier + \"_identifier\" %}\n {%- set relation.value=adapter.get_relation(\n database=source(corrected_schema_name[1], table_identifier).database,\n schema=source(corrected_schema_name[1], table_identifier).schema,\n identifier=var(identifier_var, table_identifier)\n ) -%}\n {% endif %}\n {% endfor %}\n {% else %}\n {# In order for this macro to effectively work within upstream integration tests (mainly used by the Fivetran dbt package maintainers), this identifier variable selection is required to use the macro with different identifier names. #}\n {% set identifier_var = default_schema + \"_\" + table_identifier + \"_identifier\" %}\n {# Unfortunately the Twitter Organic identifiers were misspelled. As such, we will need to account for this in the model. This will be adjusted in the Twitter Organic package, but to ensure backwards compatibility, this needs to be included. #}\n {% if var(identifier_var, none) is none %} \n {% set identifier_var = default_schema + \"_\" + table_identifier + \"_identifer\" %}\n {% endif %}\n {%- set relation.value=adapter.get_relation(\n database=source(default_schema, table_identifier).database,\n schema=source(default_schema, table_identifier).schema,\n identifier=var(identifier_var, table_identifier)\n ) -%}\n {% endif %}\n{%- set table_exists=relation.value is not none -%}\n\n{%- if table_exists -%}\n select * \n from {{ relation.value }}\n{%- else -%}\n {% if execute and not var('fivetran__remove_empty_table_warnings', false) -%}\n {{ exceptions.warn(\"\\n\\nPlease be aware: The \" ~ table_identifier|upper ~ \" table was not found in your \" ~ default_schema|upper ~ \" schema(s). The Fivetran dbt package will create a completely empty \" ~ table_identifier|upper ~ \" staging model as to not break downstream transformations. To turn off these warnings, set the `fivetran__remove_empty_table_warnings` variable to TRUE (see https://github.com/fivetran/dbt_fivetran_utils/tree/releases/v0.4.latest#union_data-source for details).\\n\") }}\n {% endif -%}\n select \n cast(null as {{ dbt.type_string() }}) as _dbt_source_relation\n limit 0\n{%- endif -%}\n{%- endif -%}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_utils.union_relations", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.628719, "supported_languages": null}, "macro.fivetran_utils.dummy_coalesce_value": {"name": "dummy_coalesce_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/dummy_coalesce_value.sql", "original_file_path": "macros/dummy_coalesce_value.sql", "unique_id": "macro.fivetran_utils.dummy_coalesce_value", "macro_sql": "{% macro dummy_coalesce_value(column) %}\n\n{% set coalesce_value = {\n 'STRING': \"'DUMMY_STRING'\",\n 'BOOLEAN': 'null',\n 'INT': 999999999,\n 'FLOAT': 999999999.99,\n 'TIMESTAMP': 'cast(\"2099-12-31\" as timestamp)',\n 'DATE': 'cast(\"2099-12-31\" as date)',\n} %}\n\n{% if column.is_float() %}\n{{ return(coalesce_value['FLOAT']) }}\n\n{% elif column.is_numeric() %}\n{{ return(coalesce_value['INT']) }}\n\n{% elif column.is_string() %}\n{{ return(coalesce_value['STRING']) }}\n\n{% elif column.data_type|lower == 'boolean' %}\n{{ return(coalesce_value['BOOLEAN']) }}\n\n{% elif 'timestamp' in column.data_type|lower %}\n{{ return(coalesce_value['TIMESTAMP']) }}\n\n{% elif 'date' in column.data_type|lower %}\n{{ return(coalesce_value['DATE']) }}\n\n{% elif 'int' in column.data_type|lower %}\n{{ return(coalesce_value['INT']) }}\n\n{% endif %}\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.629948, "supported_languages": null}, "macro.fivetran_utils.extract_url_parameter": {"name": "extract_url_parameter", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/extract_url_parameter.sql", "original_file_path": "macros/extract_url_parameter.sql", "unique_id": "macro.fivetran_utils.extract_url_parameter", "macro_sql": "{% macro extract_url_parameter(field, url_parameter) -%}\n\n{{ adapter.dispatch('extract_url_parameter', 'fivetran_utils') (field, url_parameter) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__extract_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.630244, "supported_languages": null}, "macro.fivetran_utils.default__extract_url_parameter": {"name": "default__extract_url_parameter", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/extract_url_parameter.sql", "original_file_path": "macros/extract_url_parameter.sql", "unique_id": "macro.fivetran_utils.default__extract_url_parameter", "macro_sql": "{% macro default__extract_url_parameter(field, url_parameter) -%}\n\n{{ dbt_utils.get_url_parameter(field, url_parameter) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.63038, "supported_languages": null}, "macro.fivetran_utils.spark__extract_url_parameter": {"name": "spark__extract_url_parameter", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/extract_url_parameter.sql", "original_file_path": "macros/extract_url_parameter.sql", "unique_id": "macro.fivetran_utils.spark__extract_url_parameter", "macro_sql": "{% macro spark__extract_url_parameter(field, url_parameter) -%}\n\n{%- set formatted_url_parameter = \"'\" + url_parameter + \"=([^&]+)'\" -%}\nnullif(regexp_extract({{ field }}, {{ formatted_url_parameter }}, 1), '')\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6305568, "supported_languages": null}, "macro.fivetran_utils.wrap_in_quotes": {"name": "wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.wrap_in_quotes", "macro_sql": "{%- macro wrap_in_quotes(object_to_quote) -%}\n\n{{ return(adapter.dispatch('wrap_in_quotes', 'fivetran_utils')(object_to_quote)) }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.fivetran_utils.postgres__wrap_in_quotes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.630854, "supported_languages": null}, "macro.fivetran_utils.default__wrap_in_quotes": {"name": "default__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.default__wrap_in_quotes", "macro_sql": "{%- macro default__wrap_in_quotes(object_to_quote) -%}\n{# bigquery, spark, databricks #}\n `{{ object_to_quote }}`\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.630953, "supported_languages": null}, "macro.fivetran_utils.snowflake__wrap_in_quotes": {"name": "snowflake__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.snowflake__wrap_in_quotes", "macro_sql": "{%- macro snowflake__wrap_in_quotes(object_to_quote) -%}\n \"{{ object_to_quote | upper }}\"\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.631051, "supported_languages": null}, "macro.fivetran_utils.redshift__wrap_in_quotes": {"name": "redshift__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.redshift__wrap_in_quotes", "macro_sql": "{%- macro redshift__wrap_in_quotes(object_to_quote) -%}\n \"{{ object_to_quote }}\"\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6311412, "supported_languages": null}, "macro.fivetran_utils.postgres__wrap_in_quotes": {"name": "postgres__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.postgres__wrap_in_quotes", "macro_sql": "{%- macro postgres__wrap_in_quotes(object_to_quote) -%}\n \"{{ object_to_quote }}\"\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6312268, "supported_languages": null}, "macro.fivetran_utils.array_agg": {"name": "array_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "unique_id": "macro.fivetran_utils.array_agg", "macro_sql": "{% macro array_agg(field_to_agg) -%}\n\n{{ adapter.dispatch('array_agg', 'fivetran_utils') (field_to_agg) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__array_agg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6314912, "supported_languages": null}, "macro.fivetran_utils.default__array_agg": {"name": "default__array_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "unique_id": "macro.fivetran_utils.default__array_agg", "macro_sql": "{% macro default__array_agg(field_to_agg) %}\n array_agg({{ field_to_agg }})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.631613, "supported_languages": null}, "macro.fivetran_utils.redshift__array_agg": {"name": "redshift__array_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "unique_id": "macro.fivetran_utils.redshift__array_agg", "macro_sql": "{% macro redshift__array_agg(field_to_agg) %}\n listagg({{ field_to_agg }}, ',')\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.631708, "supported_languages": null}, "macro.fivetran_utils.empty_variable_warning": {"name": "empty_variable_warning", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/empty_variable_warning.sql", "original_file_path": "macros/empty_variable_warning.sql", "unique_id": "macro.fivetran_utils.empty_variable_warning", "macro_sql": "{% macro empty_variable_warning(variable, downstream_model) %}\n\n{% if not var(variable) %}\n{{ log(\n \"\"\"\n Warning: You have passed an empty list to the \"\"\" ~ variable ~ \"\"\".\n As a result, you won't see the history of any columns in the \"\"\" ~ downstream_model ~ \"\"\" model.\n \"\"\",\n info=True\n) }}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.6320739, "supported_languages": null}, "macro.fivetran_utils.enabled_vars_one_true": {"name": "enabled_vars_one_true", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/enabled_vars_one_true.sql", "original_file_path": "macros/enabled_vars_one_true.sql", "unique_id": "macro.fivetran_utils.enabled_vars_one_true", "macro_sql": "{% macro enabled_vars_one_true(vars) %}\n\n{% for v in vars %}\n \n {% if var(v, False) == True %}\n {{ return(True) }}\n {% endif %}\n\n{% endfor %}\n\n{{ return(False) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739812080.632423, "supported_languages": null}}, "docs": {"doc.dbt.__overview__": {"name": "__overview__", "resource_type": "doc", "package_name": "dbt", "path": "overview.md", "original_file_path": "docs/overview.md", "unique_id": "doc.dbt.__overview__", "block_contents": "### Welcome!\n\nWelcome to the auto-generated documentation for your dbt project!\n\n### Navigation\n\nYou can use the `Project` and `Database` navigation tabs on the left side of the window to explore the models\nin your project.\n\n#### Project Tab\nThe `Project` tab mirrors the directory structure of your dbt project. In this tab, you can see all of the\nmodels defined in your dbt project, as well as models imported from dbt packages.\n\n#### Database Tab\nThe `Database` tab also exposes your models, but in a format that looks more like a database explorer. This view\nshows relations (tables and views) grouped into database schemas. Note that ephemeral models are _not_ shown\nin this interface, as they do not exist in the database.\n\n### Graph Exploration\nYou can click the blue icon on the bottom-right corner of the page to view the lineage graph of your models.\n\nOn model pages, you'll see the immediate parents and children of the model you're exploring. By clicking the `Expand`\nbutton at the top-right of this lineage pane, you'll be able to see all of the models that are used to build,\nor are built from, the model you're exploring.\n\nOnce expanded, you'll be able to use the `--select` and `--exclude` model selection syntax to filter the\nmodels in the graph. For more information on model selection, check out the [dbt docs](https://docs.getdbt.com/docs/model-selection-syntax).\n\nNote that you can also right-click on models to interactively filter and explore the graph.\n\n---\n\n### More information\n\n- [What is dbt](https://docs.getdbt.com/docs/introduction)?\n- Read the [dbt viewpoint](https://docs.getdbt.com/docs/viewpoint)\n- [Installation](https://docs.getdbt.com/docs/installation)\n- Join the [dbt Community](https://www.getdbt.com/community/) for questions and discussion"}}, "exposures": {}, "metrics": {}, "groups": {}, "selectors": {}, "disabled": {}, "parent_map": {"seed.asana_source_integration_tests.project_task_data": [], "seed.asana_source_integration_tests.story_data": [], "seed.asana_source_integration_tests.task_tag_data": [], "seed.asana_source_integration_tests.task_section_data": [], "seed.asana_source_integration_tests.task_data": [], "seed.asana_source_integration_tests.task_follower_data": [], "seed.asana_source_integration_tests.tag_data": [], "seed.asana_source_integration_tests.project_data": [], "seed.asana_source_integration_tests.user_data": [], "seed.asana_source_integration_tests.team_data": [], "seed.asana_source_integration_tests.section_data": [], "model.asana_source.stg_asana__user": ["model.asana_source.stg_asana__user_tmp"], "model.asana_source.stg_asana__task": ["model.asana_source.stg_asana__task_tmp"], "model.asana_source.stg_asana__task_section": ["model.asana_source.stg_asana__task_section_tmp"], "model.asana_source.stg_asana__section": ["model.asana_source.stg_asana__section_tmp"], "model.asana_source.stg_asana__team": ["model.asana_source.stg_asana__team_tmp"], "model.asana_source.stg_asana__task_tag": ["model.asana_source.stg_asana__task_tag_tmp"], "model.asana_source.stg_asana__story": ["model.asana_source.stg_asana__story_tmp"], "model.asana_source.stg_asana__tag": ["model.asana_source.stg_asana__tag_tmp"], "model.asana_source.stg_asana__project_task": ["model.asana_source.stg_asana__project_task_tmp"], "model.asana_source.stg_asana__project": ["model.asana_source.stg_asana__project_tmp"], "model.asana_source.stg_asana__task_follower": ["model.asana_source.stg_asana__task_follower_tmp"], "model.asana_source.stg_asana__story_tmp": ["source.asana_source.asana.story"], "model.asana_source.stg_asana__team_tmp": ["source.asana_source.asana.team"], "model.asana_source.stg_asana__task_tmp": ["source.asana_source.asana.task"], "model.asana_source.stg_asana__task_follower_tmp": ["source.asana_source.asana.task_follower"], "model.asana_source.stg_asana__tag_tmp": ["source.asana_source.asana.tag"], "model.asana_source.stg_asana__task_section_tmp": ["source.asana_source.asana.task_section"], "model.asana_source.stg_asana__task_tag_tmp": ["source.asana_source.asana.task_tag"], "model.asana_source.stg_asana__user_tmp": ["source.asana_source.asana.user"], "model.asana_source.stg_asana__section_tmp": ["source.asana_source.asana.section"], "model.asana_source.stg_asana__project_tmp": ["source.asana_source.asana.project"], "model.asana_source.stg_asana__project_task_tmp": ["source.asana_source.asana.project_task"], "test.asana_source.unique_stg_asana__project_project_id.67bfab1228": ["model.asana_source.stg_asana__project"], "test.asana_source.not_null_stg_asana__project_project_id.d27dae84fa": ["model.asana_source.stg_asana__project"], "test.asana_source.not_null_stg_asana__project_task_project_id.e2450d16b1": ["model.asana_source.stg_asana__project_task"], "test.asana_source.not_null_stg_asana__project_task_task_id.9479566014": ["model.asana_source.stg_asana__project_task"], "test.asana_source.unique_stg_asana__section_section_id.0495dd3d2f": ["model.asana_source.stg_asana__section"], "test.asana_source.not_null_stg_asana__section_section_id.389ebce958": ["model.asana_source.stg_asana__section"], "test.asana_source.unique_stg_asana__story_story_id.414f25bb84": ["model.asana_source.stg_asana__story"], "test.asana_source.not_null_stg_asana__story_story_id.ca847d0848": ["model.asana_source.stg_asana__story"], "test.asana_source.not_null_stg_asana__story_target_task_id.3f971de06e": ["model.asana_source.stg_asana__story"], "test.asana_source.unique_stg_asana__tag_tag_id.fd78b190c7": ["model.asana_source.stg_asana__tag"], "test.asana_source.unique_stg_asana__task_task_id.a5271275a5": ["model.asana_source.stg_asana__task"], "test.asana_source.not_null_stg_asana__task_task_id.924cc69000": ["model.asana_source.stg_asana__task"], "test.asana_source.not_null_stg_asana__task_follower_task_id.5af35f322c": ["model.asana_source.stg_asana__task_follower"], "test.asana_source.not_null_stg_asana__task_follower_user_id.e0aea0b15e": ["model.asana_source.stg_asana__task_follower"], "test.asana_source.not_null_stg_asana__task_section_task_id.ab81301de8": ["model.asana_source.stg_asana__task_section"], "test.asana_source.not_null_stg_asana__task_section_section_id.b0977a4cfe": ["model.asana_source.stg_asana__task_section"], "test.asana_source.unique_stg_asana__team_team_id.111fe15873": ["model.asana_source.stg_asana__team"], "test.asana_source.not_null_stg_asana__team_team_id.e12b563474": ["model.asana_source.stg_asana__team"], "test.asana_source.unique_stg_asana__user_user_id.73808d6267": ["model.asana_source.stg_asana__user"], "test.asana_source.not_null_stg_asana__user_user_id.4e900e8ec6": ["model.asana_source.stg_asana__user"], "source.asana_source.asana.user": [], "source.asana_source.asana.task": [], "source.asana_source.asana.project": [], "source.asana_source.asana.story": [], "source.asana_source.asana.team": [], "source.asana_source.asana.tag": [], "source.asana_source.asana.section": [], "source.asana_source.asana.project_task": [], "source.asana_source.asana.task_follower": [], "source.asana_source.asana.task_tag": [], "source.asana_source.asana.task_section": []}, "child_map": {"seed.asana_source_integration_tests.project_task_data": [], "seed.asana_source_integration_tests.story_data": [], "seed.asana_source_integration_tests.task_tag_data": [], "seed.asana_source_integration_tests.task_section_data": [], "seed.asana_source_integration_tests.task_data": [], "seed.asana_source_integration_tests.task_follower_data": [], "seed.asana_source_integration_tests.tag_data": [], "seed.asana_source_integration_tests.project_data": [], "seed.asana_source_integration_tests.user_data": [], "seed.asana_source_integration_tests.team_data": [], "seed.asana_source_integration_tests.section_data": [], "model.asana_source.stg_asana__user": ["test.asana_source.not_null_stg_asana__user_user_id.4e900e8ec6", "test.asana_source.unique_stg_asana__user_user_id.73808d6267"], "model.asana_source.stg_asana__task": ["test.asana_source.not_null_stg_asana__task_task_id.924cc69000", "test.asana_source.unique_stg_asana__task_task_id.a5271275a5"], "model.asana_source.stg_asana__task_section": ["test.asana_source.not_null_stg_asana__task_section_section_id.b0977a4cfe", "test.asana_source.not_null_stg_asana__task_section_task_id.ab81301de8"], "model.asana_source.stg_asana__section": ["test.asana_source.not_null_stg_asana__section_section_id.389ebce958", "test.asana_source.unique_stg_asana__section_section_id.0495dd3d2f"], "model.asana_source.stg_asana__team": ["test.asana_source.not_null_stg_asana__team_team_id.e12b563474", "test.asana_source.unique_stg_asana__team_team_id.111fe15873"], "model.asana_source.stg_asana__task_tag": [], "model.asana_source.stg_asana__story": ["test.asana_source.not_null_stg_asana__story_story_id.ca847d0848", "test.asana_source.not_null_stg_asana__story_target_task_id.3f971de06e", "test.asana_source.unique_stg_asana__story_story_id.414f25bb84"], "model.asana_source.stg_asana__tag": ["test.asana_source.unique_stg_asana__tag_tag_id.fd78b190c7"], "model.asana_source.stg_asana__project_task": ["test.asana_source.not_null_stg_asana__project_task_project_id.e2450d16b1", "test.asana_source.not_null_stg_asana__project_task_task_id.9479566014"], "model.asana_source.stg_asana__project": ["test.asana_source.not_null_stg_asana__project_project_id.d27dae84fa", "test.asana_source.unique_stg_asana__project_project_id.67bfab1228"], "model.asana_source.stg_asana__task_follower": ["test.asana_source.not_null_stg_asana__task_follower_task_id.5af35f322c", "test.asana_source.not_null_stg_asana__task_follower_user_id.e0aea0b15e"], "model.asana_source.stg_asana__story_tmp": ["model.asana_source.stg_asana__story"], "model.asana_source.stg_asana__team_tmp": ["model.asana_source.stg_asana__team"], "model.asana_source.stg_asana__task_tmp": ["model.asana_source.stg_asana__task"], "model.asana_source.stg_asana__task_follower_tmp": ["model.asana_source.stg_asana__task_follower"], "model.asana_source.stg_asana__tag_tmp": ["model.asana_source.stg_asana__tag"], "model.asana_source.stg_asana__task_section_tmp": ["model.asana_source.stg_asana__task_section"], "model.asana_source.stg_asana__task_tag_tmp": ["model.asana_source.stg_asana__task_tag"], "model.asana_source.stg_asana__user_tmp": ["model.asana_source.stg_asana__user"], "model.asana_source.stg_asana__section_tmp": ["model.asana_source.stg_asana__section"], "model.asana_source.stg_asana__project_tmp": ["model.asana_source.stg_asana__project"], "model.asana_source.stg_asana__project_task_tmp": ["model.asana_source.stg_asana__project_task"], "test.asana_source.unique_stg_asana__project_project_id.67bfab1228": [], "test.asana_source.not_null_stg_asana__project_project_id.d27dae84fa": [], "test.asana_source.not_null_stg_asana__project_task_project_id.e2450d16b1": [], "test.asana_source.not_null_stg_asana__project_task_task_id.9479566014": [], "test.asana_source.unique_stg_asana__section_section_id.0495dd3d2f": [], "test.asana_source.not_null_stg_asana__section_section_id.389ebce958": [], "test.asana_source.unique_stg_asana__story_story_id.414f25bb84": [], "test.asana_source.not_null_stg_asana__story_story_id.ca847d0848": [], "test.asana_source.not_null_stg_asana__story_target_task_id.3f971de06e": [], "test.asana_source.unique_stg_asana__tag_tag_id.fd78b190c7": [], "test.asana_source.unique_stg_asana__task_task_id.a5271275a5": [], "test.asana_source.not_null_stg_asana__task_task_id.924cc69000": [], "test.asana_source.not_null_stg_asana__task_follower_task_id.5af35f322c": [], "test.asana_source.not_null_stg_asana__task_follower_user_id.e0aea0b15e": [], "test.asana_source.not_null_stg_asana__task_section_task_id.ab81301de8": [], "test.asana_source.not_null_stg_asana__task_section_section_id.b0977a4cfe": [], "test.asana_source.unique_stg_asana__team_team_id.111fe15873": [], "test.asana_source.not_null_stg_asana__team_team_id.e12b563474": [], "test.asana_source.unique_stg_asana__user_user_id.73808d6267": [], "test.asana_source.not_null_stg_asana__user_user_id.4e900e8ec6": [], "source.asana_source.asana.user": ["model.asana_source.stg_asana__user_tmp"], "source.asana_source.asana.task": ["model.asana_source.stg_asana__task_tmp"], "source.asana_source.asana.project": ["model.asana_source.stg_asana__project_tmp"], "source.asana_source.asana.story": ["model.asana_source.stg_asana__story_tmp"], "source.asana_source.asana.team": ["model.asana_source.stg_asana__team_tmp"], "source.asana_source.asana.tag": ["model.asana_source.stg_asana__tag_tmp"], "source.asana_source.asana.section": ["model.asana_source.stg_asana__section_tmp"], "source.asana_source.asana.project_task": ["model.asana_source.stg_asana__project_task_tmp"], "source.asana_source.asana.task_follower": ["model.asana_source.stg_asana__task_follower_tmp"], "source.asana_source.asana.task_tag": ["model.asana_source.stg_asana__task_tag_tmp"], "source.asana_source.asana.task_section": ["model.asana_source.stg_asana__task_section_tmp"]}, "group_map": {}, "saved_queries": {}, "semantic_models": {}, "unit_tests": {}} \ No newline at end of file diff --git a/docs/run_results.json b/docs/run_results.json deleted file mode 100644 index 7c30c0a..0000000 --- a/docs/run_results.json +++ /dev/null @@ -1 +0,0 @@ -{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/run-results/v4.json", "dbt_version": "1.4.6", "generated_at": "2023-05-31T20:08:46.192876Z", "invocation_id": "00823da1-e18e-457d-9d71-744c7ed27b40", "env": {}}, "results": [{"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.755879Z", "completed_at": "2023-05-31T20:08:43.768210Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.768606Z", "completed_at": "2023-05-31T20:08:43.768625Z"}], "thread_id": "Thread-1", "execution_time": 0.0156400203704834, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__project_task_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.759247Z", "completed_at": "2023-05-31T20:08:43.768770Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.770859Z", "completed_at": "2023-05-31T20:08:43.770862Z"}], "thread_id": "Thread-2", "execution_time": 0.017609834671020508, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__project_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.761765Z", "completed_at": "2023-05-31T20:08:43.770346Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.771998Z", "completed_at": "2023-05-31T20:08:43.772002Z"}], "thread_id": "Thread-3", "execution_time": 0.018187999725341797, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__section_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.764377Z", "completed_at": "2023-05-31T20:08:43.770684Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.772250Z", "completed_at": "2023-05-31T20:08:43.772253Z"}], "thread_id": "Thread-4", "execution_time": 0.020650863647460938, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__story_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.772972Z", "completed_at": "2023-05-31T20:08:43.777671Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.784594Z", "completed_at": "2023-05-31T20:08:43.784600Z"}], "thread_id": "Thread-1", "execution_time": 0.013931035995483398, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__tag_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.777790Z", "completed_at": "2023-05-31T20:08:43.784721Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.785911Z", "completed_at": "2023-05-31T20:08:43.785915Z"}], "thread_id": "Thread-2", "execution_time": 0.010654211044311523, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__task_follower_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.782560Z", "completed_at": "2023-05-31T20:08:43.785454Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.786871Z", "completed_at": "2023-05-31T20:08:43.786874Z"}], "thread_id": "Thread-4", "execution_time": 0.010174036026000977, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__task_tag_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.780520Z", "completed_at": "2023-05-31T20:08:43.785714Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.787089Z", "completed_at": "2023-05-31T20:08:43.787092Z"}], "thread_id": "Thread-3", "execution_time": 0.012920141220092773, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__task_section_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.787739Z", "completed_at": "2023-05-31T20:08:43.791294Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.796526Z", "completed_at": "2023-05-31T20:08:43.796531Z"}], "thread_id": "Thread-1", "execution_time": 0.01176905632019043, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__task_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.796637Z", "completed_at": "2023-05-31T20:08:43.797512Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.798559Z", "completed_at": "2023-05-31T20:08:43.798562Z"}], "thread_id": "Thread-3", "execution_time": 0.007902860641479492, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.asana_source_integration_tests.project_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.791646Z", "completed_at": "2023-05-31T20:08:43.797626Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.798679Z", "completed_at": "2023-05-31T20:08:43.798682Z"}], "thread_id": "Thread-2", "execution_time": 0.009391069412231445, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__team_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.794653Z", "completed_at": "2023-05-31T20:08:43.798290Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.799712Z", "completed_at": "2023-05-31T20:08:43.799715Z"}], "thread_id": "Thread-4", "execution_time": 0.009333133697509766, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__user_tmp"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.800536Z", "completed_at": "2023-05-31T20:08:43.801414Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.802714Z", "completed_at": "2023-05-31T20:08:43.802717Z"}], "thread_id": "Thread-1", "execution_time": 0.006035804748535156, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.asana_source_integration_tests.project_task_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.802803Z", "completed_at": "2023-05-31T20:08:43.803671Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.806363Z", "completed_at": "2023-05-31T20:08:43.806366Z"}], "thread_id": "Thread-3", "execution_time": 0.00551295280456543, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.asana_source_integration_tests.section_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.803782Z", "completed_at": "2023-05-31T20:08:43.804560Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.806451Z", "completed_at": "2023-05-31T20:08:43.806454Z"}], "thread_id": "Thread-2", "execution_time": 0.005538225173950195, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.asana_source_integration_tests.story_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.805267Z", "completed_at": "2023-05-31T20:08:43.806092Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.807430Z", "completed_at": "2023-05-31T20:08:43.807433Z"}], "thread_id": "Thread-4", "execution_time": 0.005571842193603516, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.asana_source_integration_tests.tag_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.808194Z", "completed_at": "2023-05-31T20:08:43.809654Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.810888Z", "completed_at": "2023-05-31T20:08:43.810891Z"}], "thread_id": "Thread-1", "execution_time": 0.006344795227050781, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.asana_source_integration_tests.task_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.810976Z", "completed_at": "2023-05-31T20:08:43.811774Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.814296Z", "completed_at": "2023-05-31T20:08:43.814302Z"}], "thread_id": "Thread-3", "execution_time": 0.005216836929321289, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.asana_source_integration_tests.task_follower_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.811872Z", "completed_at": "2023-05-31T20:08:43.812637Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.814418Z", "completed_at": "2023-05-31T20:08:43.814420Z"}], "thread_id": "Thread-2", "execution_time": 0.005251169204711914, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.asana_source_integration_tests.task_section_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.813301Z", "completed_at": "2023-05-31T20:08:43.814074Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.815360Z", "completed_at": "2023-05-31T20:08:43.815363Z"}], "thread_id": "Thread-4", "execution_time": 0.0052950382232666016, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.asana_source_integration_tests.task_tag_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.816086Z", "completed_at": "2023-05-31T20:08:43.816896Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.818102Z", "completed_at": "2023-05-31T20:08:43.818105Z"}], "thread_id": "Thread-1", "execution_time": 0.010565042495727539, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.asana_source_integration_tests.team_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.818192Z", "completed_at": "2023-05-31T20:08:43.818964Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:43.828874Z", "completed_at": "2023-05-31T20:08:43.828878Z"}], "thread_id": "Thread-3", "execution_time": 0.012552976608276367, "adapter_response": {}, "message": null, "failures": null, "unique_id": "seed.asana_source_integration_tests.user_data"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.819057Z", "completed_at": "2023-05-31T20:08:44.471589Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:44.471806Z", "completed_at": "2023-05-31T20:08:44.471812Z"}], "thread_id": "Thread-2", "execution_time": 0.7085549831390381, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__project_task"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.833846Z", "completed_at": "2023-05-31T20:08:44.472017Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:44.472227Z", "completed_at": "2023-05-31T20:08:44.472230Z"}], "thread_id": "Thread-3", "execution_time": 0.6931130886077881, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__story"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.825492Z", "completed_at": "2023-05-31T20:08:44.472453Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:44.472633Z", "completed_at": "2023-05-31T20:08:44.472635Z"}], "thread_id": "Thread-4", "execution_time": 0.7092480659484863, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__project"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:43.830227Z", "completed_at": "2023-05-31T20:08:44.485851Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:44.486055Z", "completed_at": "2023-05-31T20:08:44.486058Z"}], "thread_id": "Thread-1", "execution_time": 0.713054895401001, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__section"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:44.542990Z", "completed_at": "2023-05-31T20:08:45.245015Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.245282Z", "completed_at": "2023-05-31T20:08:45.245289Z"}], "thread_id": "Thread-1", "execution_time": 0.7677030563354492, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__task_section"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:44.528189Z", "completed_at": "2023-05-31T20:08:45.272970Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.273331Z", "completed_at": "2023-05-31T20:08:45.273336Z"}], "thread_id": "Thread-2", "execution_time": 0.794435977935791, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__tag"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:44.532769Z", "completed_at": "2023-05-31T20:08:45.273224Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.273671Z", "completed_at": "2023-05-31T20:08:45.273674Z"}], "thread_id": "Thread-3", "execution_time": 0.8012909889221191, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__task_follower"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:44.536313Z", "completed_at": "2023-05-31T20:08:45.317845Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.318298Z", "completed_at": "2023-05-31T20:08:45.318305Z"}], "thread_id": "Thread-4", "execution_time": 0.8591971397399902, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__task_tag"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.392029Z", "completed_at": "2023-05-31T20:08:45.400012Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.400282Z", "completed_at": "2023-05-31T20:08:45.400287Z"}], "thread_id": "Thread-4", "execution_time": 0.008914947509765625, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__project_task_project_id.e2450d16b1"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.401257Z", "completed_at": "2023-05-31T20:08:45.404253Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.404452Z", "completed_at": "2023-05-31T20:08:45.404456Z"}], "thread_id": "Thread-4", "execution_time": 0.0038089752197265625, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__project_task_task_id.9479566014"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.405318Z", "completed_at": "2023-05-31T20:08:45.407693Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.407884Z", "completed_at": "2023-05-31T20:08:45.407888Z"}], "thread_id": "Thread-4", "execution_time": 0.003130197525024414, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__story_story_id.ca847d0848"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.408721Z", "completed_at": "2023-05-31T20:08:45.411024Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.411219Z", "completed_at": "2023-05-31T20:08:45.411223Z"}], "thread_id": "Thread-4", "execution_time": 0.003062009811401367, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__story_target_task_id.3f971de06e"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.412075Z", "completed_at": "2023-05-31T20:08:45.415628Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.415828Z", "completed_at": "2023-05-31T20:08:45.415832Z"}], "thread_id": "Thread-4", "execution_time": 0.004323005676269531, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.unique_stg_asana__story_story_id.414f25bb84"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.416674Z", "completed_at": "2023-05-31T20:08:45.419008Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.419203Z", "completed_at": "2023-05-31T20:08:45.419207Z"}], "thread_id": "Thread-4", "execution_time": 0.003078937530517578, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__project_project_id.d27dae84fa"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.420023Z", "completed_at": "2023-05-31T20:08:45.422253Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.422448Z", "completed_at": "2023-05-31T20:08:45.422451Z"}], "thread_id": "Thread-4", "execution_time": 0.0029649734497070312, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.unique_stg_asana__project_project_id.67bfab1228"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.423257Z", "completed_at": "2023-05-31T20:08:45.426105Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.426295Z", "completed_at": "2023-05-31T20:08:45.426298Z"}], "thread_id": "Thread-4", "execution_time": 0.003582000732421875, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__section_section_id.389ebce958"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.427119Z", "completed_at": "2023-05-31T20:08:45.429372Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.429565Z", "completed_at": "2023-05-31T20:08:45.429569Z"}], "thread_id": "Thread-4", "execution_time": 0.0029897689819335938, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.unique_stg_asana__section_section_id.0495dd3d2f"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.430376Z", "completed_at": "2023-05-31T20:08:45.432631Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.432822Z", "completed_at": "2023-05-31T20:08:45.432826Z"}], "thread_id": "Thread-4", "execution_time": 0.0029909610748291016, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__task_section_section_id.b0977a4cfe"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.433636Z", "completed_at": "2023-05-31T20:08:45.435931Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.436123Z", "completed_at": "2023-05-31T20:08:45.436126Z"}], "thread_id": "Thread-4", "execution_time": 0.0030472278594970703, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__task_section_task_id.ab81301de8"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.436938Z", "completed_at": "2023-05-31T20:08:45.439204Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.439396Z", "completed_at": "2023-05-31T20:08:45.439400Z"}], "thread_id": "Thread-4", "execution_time": 0.003013134002685547, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__tag_tag_id.c6a8187ca2"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.440220Z", "completed_at": "2023-05-31T20:08:45.442378Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.442577Z", "completed_at": "2023-05-31T20:08:45.442580Z"}], "thread_id": "Thread-4", "execution_time": 0.0028967857360839844, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.unique_stg_asana__tag_tag_id.fd78b190c7"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.443413Z", "completed_at": "2023-05-31T20:08:45.445700Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.445891Z", "completed_at": "2023-05-31T20:08:45.445894Z"}], "thread_id": "Thread-4", "execution_time": 0.0030372142791748047, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__task_follower_task_id.5af35f322c"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.446725Z", "completed_at": "2023-05-31T20:08:45.449737Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.449929Z", "completed_at": "2023-05-31T20:08:45.449933Z"}], "thread_id": "Thread-4", "execution_time": 0.0037572383880615234, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__task_follower_user_id.e0aea0b15e"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.450769Z", "completed_at": "2023-05-31T20:08:45.453063Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.453258Z", "completed_at": "2023-05-31T20:08:45.453261Z"}], "thread_id": "Thread-4", "execution_time": 0.003052949905395508, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__task_tag_tag_id.d523de41d8"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.454079Z", "completed_at": "2023-05-31T20:08:45.456337Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:45.456527Z", "completed_at": "2023-05-31T20:08:45.456530Z"}], "thread_id": "Thread-4", "execution_time": 0.0030040740966796875, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__task_tag_task_id.9d27624748"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.329967Z", "completed_at": "2023-05-31T20:08:46.098642Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:46.099466Z", "completed_at": "2023-05-31T20:08:46.099469Z"}], "thread_id": "Thread-3", "execution_time": 0.8279838562011719, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__user"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.321937Z", "completed_at": "2023-05-31T20:08:46.098764Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:46.099582Z", "completed_at": "2023-05-31T20:08:46.099585Z"}], "thread_id": "Thread-2", "execution_time": 0.8484969139099121, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__team"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:45.311293Z", "completed_at": "2023-05-31T20:08:46.098462Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:46.099338Z", "completed_at": "2023-05-31T20:08:46.099347Z"}], "thread_id": "Thread-1", "execution_time": 0.8596978187561035, "adapter_response": {}, "message": null, "failures": null, "unique_id": "model.asana_source.stg_asana__task"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:46.164846Z", "completed_at": "2023-05-31T20:08:46.171297Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:46.173053Z", "completed_at": "2023-05-31T20:08:46.173059Z"}], "thread_id": "Thread-3", "execution_time": 0.021065950393676758, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.unique_stg_asana__user_user_id.73808d6267"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:46.159905Z", "completed_at": "2023-05-31T20:08:46.171480Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:46.173194Z", "completed_at": "2023-05-31T20:08:46.173198Z"}], "thread_id": "Thread-4", "execution_time": 0.02198505401611328, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__user_user_id.4e900e8ec6"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:46.173322Z", "completed_at": "2023-05-31T20:08:46.181791Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:46.186306Z", "completed_at": "2023-05-31T20:08:46.186313Z"}], "thread_id": "Thread-2", "execution_time": 0.01807379722595215, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__team_team_id.e12b563474"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:46.176877Z", "completed_at": "2023-05-31T20:08:46.181921Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:46.186449Z", "completed_at": "2023-05-31T20:08:46.186454Z"}], "thread_id": "Thread-1", "execution_time": 0.01801896095275879, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.unique_stg_asana__team_team_id.111fe15873"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:46.182952Z", "completed_at": "2023-05-31T20:08:46.190379Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:46.190804Z", "completed_at": "2023-05-31T20:08:46.190808Z"}], "thread_id": "Thread-3", "execution_time": 0.009804964065551758, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.not_null_stg_asana__task_task_id.924cc69000"}, {"status": "success", "timing": [{"name": "compile", "started_at": "2023-05-31T20:08:46.186582Z", "completed_at": "2023-05-31T20:08:46.190686Z"}, {"name": "execute", "started_at": "2023-05-31T20:08:46.191410Z", "completed_at": "2023-05-31T20:08:46.191413Z"}], "thread_id": "Thread-4", "execution_time": 0.00975799560546875, "adapter_response": {}, "message": null, "failures": null, "unique_id": "test.asana_source.unique_stg_asana__task_task_id.a5271275a5"}], "elapsed_time": 4.425800800323486, "args": {"write_json": true, "use_colors": true, "printer_width": 80, "version_check": true, "partial_parse": true, "static_parser": true, "profiles_dir": "/Users/catherinefritz/.dbt", "send_anonymous_usage_stats": true, "quiet": false, "no_print": false, "cache_selected_only": false, "compile": true, "which": "generate", "rpc_method": "docs.generate", "indirect_selection": "eager"}} \ No newline at end of file diff --git a/integration_tests/ci/sample.profiles.yml b/integration_tests/ci/sample.profiles.yml index 8ce3bfb..46a290c 100644 --- a/integration_tests/ci/sample.profiles.yml +++ b/integration_tests/ci/sample.profiles.yml @@ -16,13 +16,13 @@ integration_tests: pass: "{{ env_var('CI_REDSHIFT_DBT_PASS') }}" dbname: "{{ env_var('CI_REDSHIFT_DBT_DBNAME') }}" port: 5439 - schema: asana_source_integrations_tests_02 + schema: asana_source_integrations_tests_3 threads: 8 bigquery: type: bigquery method: service-account-json project: 'dbt-package-testing' - schema: asana_source_integrations_tests_02 + schema: asana_source_integrations_tests_3 threads: 8 keyfile_json: "{{ env_var('GCLOUD_SERVICE_KEY') | as_native }}" snowflake: @@ -33,7 +33,7 @@ integration_tests: role: "{{ env_var('CI_SNOWFLAKE_DBT_ROLE') }}" database: "{{ env_var('CI_SNOWFLAKE_DBT_DATABASE') }}" warehouse: "{{ env_var('CI_SNOWFLAKE_DBT_WAREHOUSE') }}" - schema: asana_source_integrations_tests_02 + schema: asana_source_integrations_tests_3 threads: 8 postgres: type: postgres @@ -42,13 +42,13 @@ integration_tests: pass: "{{ env_var('CI_POSTGRES_DBT_PASS') }}" dbname: "{{ env_var('CI_POSTGRES_DBT_DBNAME') }}" port: 5432 - schema: asana_source_integrations_tests_02 + schema: asana_source_integrations_tests_3 threads: 8 databricks: catalog: "{{ env_var('CI_DATABRICKS_DBT_CATALOG') }}" host: "{{ env_var('CI_DATABRICKS_DBT_HOST') }}" http_path: "{{ env_var('CI_DATABRICKS_DBT_HTTP_PATH') }}" - schema: asana_source_integrations_tests_02 + schema: asana_source_integrations_tests_3 threads: 8 token: "{{ env_var('CI_DATABRICKS_DBT_TOKEN') }}" type: databricks diff --git a/integration_tests/dbt_project.yml b/integration_tests/dbt_project.yml index 12a3f2e..746ed60 100644 --- a/integration_tests/dbt_project.yml +++ b/integration_tests/dbt_project.yml @@ -1,9 +1,9 @@ config-version: 2 name: 'asana_source_integration_tests' -version: 0.8.0 +version: 0.8.1 profile: 'integration_tests' vars: - asana_schema: asana_source_integrations_tests_02 + asana_schema: asana_source_integrations_tests_3 asana_source: asana_user_identifier: "user_data" asana_project_identifier: "project_data" @@ -16,6 +16,7 @@ vars: asana_task_tag_identifier: "task_tag_data" asana_section_identifier: "section_data" asana_task_section_identifier: "task_section_data" + seeds: +quote_columns: "{{ true if target.type == 'redshift' else false }}" asana_source_integration_tests: diff --git a/models/src_asana.yml b/models/src_asana.yml index 9ace88d..98a070d 100644 --- a/models/src_asana.yml +++ b/models/src_asana.yml @@ -134,6 +134,8 @@ sources: - name: tag identifier: "{{ var('asana_tag_identifier', 'tag')}}" description: Table of the custom tags made in the organization + config: + enabled: "{{ var('asana__using_tags', True) }}" # Disable if asana__using_tags is False freshness: null columns: - name: id @@ -185,6 +187,8 @@ sources: - name: task_tag identifier: "{{ var('asana_task_tag_identifier', 'task_tag')}}" description: Table of tasks with the tags attached to them. Tasks without tags (and vice versa) do not appear here. + config: + enabled: "{{ var('asana__using_task_tags', True) }}" # Disable if asana__using_task_tags is False freshness: null columns: - name: task_id diff --git a/models/stg_asana.yml b/models/stg_asana.yml index ec5f8f1..0409a41 100644 --- a/models/stg_asana.yml +++ b/models/stg_asana.yml @@ -88,7 +88,6 @@ models: description: System generated unique ID of the tag tests: - unique - - not_null - name: tag_name description: User-facing name of the tag. - name: created_at @@ -162,12 +161,8 @@ models: columns: - name: tag_id description: Foreign key referencing the ID of the TAG attached to the task - tests: - - not_null - name: task_id description: Foreign key referencing the ID of the TASK - tests: - - not_null - name: stg_asana__team description: Table of the teams within the organization diff --git a/models/stg_asana__tag.sql b/models/stg_asana__tag.sql index 0b5d7fe..aa25edf 100644 --- a/models/stg_asana__tag.sql +++ b/models/stg_asana__tag.sql @@ -1,3 +1,4 @@ +{{ config(enabled=var('asana__using_tags', True)) }} with base as ( @@ -30,4 +31,4 @@ final as ( ) select * -from final +from final \ No newline at end of file diff --git a/models/stg_asana__task_tag.sql b/models/stg_asana__task_tag.sql index dc90698..60a2d60 100644 --- a/models/stg_asana__task_tag.sql +++ b/models/stg_asana__task_tag.sql @@ -1,3 +1,4 @@ +{{ config(enabled=var('asana__using_task_tags', True)) }} with base as ( @@ -28,4 +29,4 @@ final as ( ) select * -from final +from final \ No newline at end of file diff --git a/models/tmp/stg_asana__tag_tmp.sql b/models/tmp/stg_asana__tag_tmp.sql index 720e71a..9fff201 100644 --- a/models/tmp/stg_asana__tag_tmp.sql +++ b/models/tmp/stg_asana__tag_tmp.sql @@ -1,2 +1,4 @@ +{{ config(enabled=var('asana__using_tags', True)) }} + select * -from {{ var('tag') }} +from {{ var('tag') }} \ No newline at end of file diff --git a/models/tmp/stg_asana__task_tag_tmp.sql b/models/tmp/stg_asana__task_tag_tmp.sql index 503f1ab..6b674ec 100644 --- a/models/tmp/stg_asana__task_tag_tmp.sql +++ b/models/tmp/stg_asana__task_tag_tmp.sql @@ -1,2 +1,4 @@ +{{ config(enabled=var('asana__using_task_tags', True)) }} + select * -from {{ var('task_tag') }} +from {{ var('task_tag') }} \ No newline at end of file