From 0daea9fb5a5210d52fecf11fb830eaa34fbd9cb2 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Wed, 12 Apr 2023 11:45:32 -0400 Subject: [PATCH 01/50] Create publication.py, various Publication classes, Dependency class --- core/dbt/compilation.py | 195 +++++++++--------- core/dbt/contracts/graph/manifest.py | 3 + core/dbt/contracts/publication.py | 46 +++++ core/dbt/parser/manifest.py | 93 ++++++++- tests/functional/docs/test_generate.py | 17 +- .../test_all_experimental_parser.py | 13 +- tests/functional/groups/test_access.py | 18 -- tests/functional/groups/test_publication.py | 78 +++++++ 8 files changed, 343 insertions(+), 120 deletions(-) create mode 100644 core/dbt/contracts/publication.py create mode 100644 tests/functional/groups/test_publication.py diff --git a/core/dbt/compilation.py b/core/dbt/compilation.py index e5503af462e..3ee706e249f 100644 --- a/core/dbt/compilation.py +++ b/core/dbt/compilation.py @@ -161,6 +161,94 @@ def write_graph(self, outfile: str, manifest: Manifest): with open(outfile, "wb") as outfh: pickle.dump(out_graph, outfh, protocol=pickle.HIGHEST_PROTOCOL) + def link_node(self, node: GraphMemberNode, manifest: Manifest): + self.add_node(node.unique_id) + + for dependency in node.depends_on_nodes: + if dependency in manifest.nodes: + self.dependency(node.unique_id, (manifest.nodes[dependency].unique_id)) + elif dependency in manifest.sources: + self.dependency(node.unique_id, (manifest.sources[dependency].unique_id)) + elif dependency in manifest.metrics: + self.dependency(node.unique_id, (manifest.metrics[dependency].unique_id)) + else: + raise GraphDependencyNotFoundError(node, dependency) + + def link_graph(self, manifest: Manifest, add_test_edges: bool = False): + for source in manifest.sources.values(): + self.add_node(source.unique_id) + for node in manifest.nodes.values(): + self.link_node(node, manifest) + for exposure in manifest.exposures.values(): + self.link_node(exposure, manifest) + for metric in manifest.metrics.values(): + self.link_node(metric, manifest) + + cycle = self.find_cycles() + + if cycle: + raise RuntimeError("Found a cycle: {}".format(cycle)) + + if add_test_edges: + manifest.build_parent_and_child_maps() + self.add_test_edges(manifest) + + def add_test_edges(self, manifest: Manifest) -> None: + """This method adds additional edges to the DAG. For a given non-test + executable node, add an edge from an upstream test to the given node if + the set of nodes the test depends on is a subset of the upstream nodes + for the given node.""" + + # Given a graph: + # model1 --> model2 --> model3 + # | | + # | \/ + # \/ test 2 + # test1 + # + # Produce the following graph: + # model1 --> model2 --> model3 + # | /\ | /\ /\ + # | | \/ | | + # \/ | test2 ----| | + # test1 ----|---------------| + + for node_id in self.graph: + # If node is executable (in manifest.nodes) and does _not_ + # represent a test, continue. + if ( + node_id in manifest.nodes + and manifest.nodes[node_id].resource_type != NodeType.Test + ): + # Get *everything* upstream of the node + all_upstream_nodes = nx.traversal.bfs_tree(self.graph, node_id, reverse=True) + # Get the set of upstream nodes not including the current node. + upstream_nodes = set([n for n in all_upstream_nodes if n != node_id]) + + # Get all tests that depend on any upstream nodes. + upstream_tests = [] + for upstream_node in upstream_nodes: + upstream_tests += _get_tests_for_node(manifest, upstream_node) + + for upstream_test in upstream_tests: + # Get the set of all nodes that the test depends on + # including the upstream_node itself. This is necessary + # because tests can depend on multiple nodes (ex: + # relationship tests). Test nodes do not distinguish + # between what node the test is "testing" and what + # node(s) it depends on. + test_depends_on = set(manifest.nodes[upstream_test].depends_on_nodes) + + # If the set of nodes that an upstream test depends on + # is a subset of all upstream nodes of the current node, + # add an edge from the upstream test to the current node. + if test_depends_on.issubset(upstream_nodes): + self.graph.add_edge(upstream_test, node_id) + + def get_graph(self, manifest: Manifest) -> Graph: + self.link_graph(manifest) + return Graph(self.graph) + class Compiler: def __init__(self, config): @@ -385,104 +473,13 @@ def _compile_code( return node - def write_graph_file(self, linker: Linker, manifest: Manifest): - filename = graph_file_name - graph_path = os.path.join(self.config.target_path, filename) - flags = get_flags() - if flags.WRITE_JSON: - linker.write_graph(graph_path, manifest) - - def link_node(self, linker: Linker, node: GraphMemberNode, manifest: Manifest): - linker.add_node(node.unique_id) - - for dependency in node.depends_on_nodes: - if dependency in manifest.nodes: - linker.dependency(node.unique_id, (manifest.nodes[dependency].unique_id)) - elif dependency in manifest.sources: - linker.dependency(node.unique_id, (manifest.sources[dependency].unique_id)) - elif dependency in manifest.metrics: - linker.dependency(node.unique_id, (manifest.metrics[dependency].unique_id)) - else: - raise GraphDependencyNotFoundError(node, dependency) - - def link_graph(self, linker: Linker, manifest: Manifest, add_test_edges: bool = False): - for source in manifest.sources.values(): - linker.add_node(source.unique_id) - for node in manifest.nodes.values(): - self.link_node(linker, node, manifest) - for exposure in manifest.exposures.values(): - self.link_node(linker, exposure, manifest) - for metric in manifest.metrics.values(): - self.link_node(linker, metric, manifest) - - cycle = linker.find_cycles() - - if cycle: - raise RuntimeError("Found a cycle: {}".format(cycle)) - - if add_test_edges: - manifest.build_parent_and_child_maps() - self.add_test_edges(linker, manifest) - - def add_test_edges(self, linker: Linker, manifest: Manifest) -> None: - """This method adds additional edges to the DAG. For a given non-test - executable node, add an edge from an upstream test to the given node if - the set of nodes the test depends on is a subset of the upstream nodes - for the given node.""" - - # Given a graph: - # model1 --> model2 --> model3 - # | | - # | \/ - # \/ test 2 - # test1 - # - # Produce the following graph: - # model1 --> model2 --> model3 - # | /\ | /\ /\ - # | | \/ | | - # \/ | test2 ----| | - # test1 ----|---------------| - - for node_id in linker.graph: - # If node is executable (in manifest.nodes) and does _not_ - # represent a test, continue. - if ( - node_id in manifest.nodes - and manifest.nodes[node_id].resource_type != NodeType.Test - ): - # Get *everything* upstream of the node - all_upstream_nodes = nx.traversal.bfs_tree(linker.graph, node_id, reverse=True) - # Get the set of upstream nodes not including the current node. - upstream_nodes = set([n for n in all_upstream_nodes if n != node_id]) - - # Get all tests that depend on any upstream nodes. - upstream_tests = [] - for upstream_node in upstream_nodes: - upstream_tests += _get_tests_for_node(manifest, upstream_node) - - for upstream_test in upstream_tests: - # Get the set of all nodes that the test depends on - # including the upstream_node itself. This is necessary - # because tests can depend on multiple nodes (ex: - # relationship tests). Test nodes do not distinguish - # between what node the test is "testing" and what - # node(s) it depends on. - test_depends_on = set(manifest.nodes[upstream_test].depends_on_nodes) - - # If the set of nodes that an upstream test depends on - # is a subset of all upstream nodes of the current node, - # add an edge from the upstream test to the current node. - if test_depends_on.issubset(upstream_nodes): - linker.graph.add_edge(upstream_test, node_id) - + # This method doesn't actually "compile" any of the nodes. That is done by the + # "compile_node" method. This creates a Linker and builds the networkx graph, + # writes out the graph.gpickle file, and prints the stats, returning a Graph object. def compile(self, manifest: Manifest, write=True, add_test_edges=False) -> Graph: self.initialize() linker = Linker() - - self.link_graph(linker, manifest, add_test_edges) - - stats = _generate_stats(manifest) + linker.link_graph(manifest, add_test_edges) if write: self.write_graph_file(linker, manifest) @@ -492,10 +489,18 @@ def compile(self, manifest: Manifest, write=True, add_test_edges=False) -> Graph self.config.args.__class__ == argparse.Namespace and self.config.args.cls == list_task.ListTask ): + stats = _generate_stats(manifest) print_compile_stats(stats) return Graph(linker.graph) + def write_graph_file(self, linker: Linker, manifest: Manifest): + filename = graph_file_name + graph_path = os.path.join(self.config.target_path, filename) + flags = get_flags() + if flags.WRITE_JSON: + linker.write_graph(graph_path, manifest) + # writes the "compiled_code" into the target/compiled directory def _write_node(self, node: ManifestSQLNode) -> ManifestSQLNode: if not node.extra_ctes_injected or node.resource_type in ( diff --git a/core/dbt/contracts/graph/manifest.py b/core/dbt/contracts/graph/manifest.py index 4eb80090adb..8118f5073e6 100644 --- a/core/dbt/contracts/graph/manifest.py +++ b/core/dbt/contracts/graph/manifest.py @@ -22,6 +22,8 @@ from typing_extensions import Protocol from uuid import UUID +from dbt.contracts.publication import Dependencies + from dbt.contracts.graph.nodes import ( Macro, Documentation, @@ -633,6 +635,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin): source_patches: MutableMapping[SourceKey, SourcePatch] = field(default_factory=dict) disabled: MutableMapping[str, List[GraphMemberNode]] = field(default_factory=dict) env_vars: MutableMapping[str, str] = field(default_factory=dict) + dependencies: Optional[Dependencies] = None _doc_lookup: Optional[DocLookup] = field( default=None, metadata={"serialize": lambda x: None, "deserialize": lambda x: None} diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py new file mode 100644 index 00000000000..6f72ffb564d --- /dev/null +++ b/core/dbt/contracts/publication.py @@ -0,0 +1,46 @@ +from typing import Optional, List, Dict, Any +from dbt.dataclass_schema import dbtClassMixin + +from dataclasses import dataclass, field + +from dbt.contracts.util import BaseArtifactMetadata, ArtifactMixin, schema_version + + +@dataclass +class DependentProjects(dbtClassMixin): + name: str + environment: str + + +@dataclass +class Dependencies(dbtClassMixin): + projects: list[DependentProjects] = field(default_factory=list) + + +@dataclass +class PublicationMetadata(BaseArtifactMetadata): + dbt_schema_version: str = field(default_factory=lambda: str(Publication.dbt_schema_version)) + adapter_type: Optional[str] = None + quoting: Dict[str, Any] = field(default_factory=dict) + + +@dataclass +class PublicModel(dbtClassMixin): + relation_name: str + latest: bool = False # not implemented yet + # list of model unique_ids + public_dependencies: List[str] = field(default_factory=list) + + +@dataclass +class PublicationMandatory: + project_name: str + + +@dataclass +@schema_version("publication", 1) +class Publication(ArtifactMixin, PublicationMandatory): + public_models: Dict[str, PublicModel] = field(default_factory=dict) + metadata: PublicationMetadata = field(default_factory=PublicationMetadata) + # list of project name strings + dependencies: List[str] = field(default_factory=list) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 227d434bff9..1aa82a52d90 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -22,6 +22,7 @@ get_adapter_package_names, ) from dbt.helper_types import PathSet +from dbt.clients.yaml_helper import load_yaml_text from dbt.events.functions import fire_event, get_invocation_id, warn_or_error from dbt.events.types import ( PartialParsingErrorProcessingFile, @@ -40,7 +41,14 @@ from dbt.node_types import NodeType, AccessType from dbt.clients.jinja import get_rendered, MacroStack from dbt.clients.jinja_static import statically_extract_macro_calls -from dbt.clients.system import make_directory, path_exists, read_json, write_file +from dbt.clients.system import ( + make_directory, + path_exists, + read_json, + write_file, + resolve_path_from_base, + load_file_contents, +) from dbt.config import Project, RuntimeConfig from dbt.context.docs import generate_runtime_docs_context from dbt.context.macro_resolver import MacroResolver, TestMacroNamespace @@ -72,6 +80,7 @@ ) from dbt.contracts.graph.unparsed import NodeVersion from dbt.contracts.util import Writable +from dbt.contracts.publication import Publication, PublicationMetadata, PublicModel, Dependencies from dbt.exceptions import TargetNotFoundError, AmbiguousAliasError from dbt.parser.base import Parser from dbt.parser.analysis import AnalysisParser @@ -91,6 +100,7 @@ from dbt.dataclass_schema import StrEnum, dbtClassMixin MANIFEST_FILE_NAME = "manifest.json" +DEPENDENCIES_FILE_NAME = "dependencies.yml" PARTIAL_PARSE_FILE_NAME = "partial_parse.msgpack" PARSING_STATE = DbtProcessState("parsing") PERF_INFO_FILE_NAME = "perf_info.json" @@ -444,6 +454,7 @@ def load(self): # write out the fully parsed manifest self.write_manifest_for_partial_parse() + self.write_artifacts() return self.manifest @@ -599,6 +610,86 @@ def write_manifest_for_partial_parse(self): except Exception: raise + def write_artifacts(self): + # write out manifest.json + # TODO: check for overlap with parse command writing manifest + write_manifest(self.manifest, self.root_project.target_path) + + # Note: this is not the right place to do this. Just doing here for ease + # of implementation. To be moved later. + self.build_dependencies() + + # build publication metadata + metadata = PublicationMetadata( + adapter_type=self.root_project.credentials.type, + quoting=self.root_project.quoting, + ) + + # get a list of public model ids first so it can be used in constructing dependencies + public_model_ids = [] + for node in self.manifest.nodes.values(): + if node.resource_type == NodeType.Model and node.access == AccessType.Public: + public_model_ids.append(node.unique_id) + + set_of_public_unique_ids = set(public_model_ids) + + # Get the Graph object from the Linker + from dbt.compilation import Linker + + linker = Linker() + graph = linker.get_graph(self.manifest) + + public_models = {} + for unique_id in public_model_ids: + model = self.manifest.nodes[unique_id] + # public_dependencies is the intersection of all parent nodes plus public nodes + public_dependencies = [] + # parents is a set + parents = graph.select_parents({unique_id}) + public_dependencies = parents.intersection(set_of_public_unique_ids) + + public_model = PublicModel( + relation_name=model.relation_name, + latest=False, # not a node field yet + public_dependencies=list(public_dependencies), + ) + public_models[unique_id] = public_model + + # TODO: get dependencies from dependencies.yml. When is it loaded? here? + dependencies = [] + publication = Publication( + metadata=metadata, + project_name=self.root_project.project_name, + public_models=public_models, + dependencies=dependencies, + ) + # write out publication artifact _publication.json + publication_file_name = f"{self.root_project.project_name}_publication.json" + path = os.path.join(self.root_project.target_path, publication_file_name) + publication.write(path) + + def build_dependencies(self): + dependencies_filepath = resolve_path_from_base( + "dependencies.yml", self.root_project.project_root + ) + if path_exists(dependencies_filepath): + contents = load_file_contents(dependencies_filepath) + dependencies_dict = load_yaml_text(contents) + dependencies = Dependencies.from_dict(dependencies_dict) + self.manifest.dependencies = dependencies + else: + self.manifest.dependencies = None + if self.manifest.dependencies: + for project in self.manifest.dependencies.projects: + # look for a _publication.json file for every project in the 'publications' dir + publication_file_name = f"{project.name}_publication.json" + # TODO: eventually we'll implement publications_dir config + path = os.path.join("publications", publication_file_name) + if os.path.exists(path): + print(f"--- found a publication_file matching {project.name}") + else: + print(f"--- did not find a publication_file matching {project.name}") + def is_partial_parsable(self, manifest: Manifest) -> Tuple[bool, Optional[str]]: """Compare the global hashes of the read-in parse results' values to the known ones, and return if it is ok to re-use the results. diff --git a/tests/functional/docs/test_generate.py b/tests/functional/docs/test_generate.py index 566fb1a9912..2fd8c14b4b3 100644 --- a/tests/functional/docs/test_generate.py +++ b/tests/functional/docs/test_generate.py @@ -1,9 +1,18 @@ -import os +import pytest -from dbt.tests.util import run_dbt +from dbt.tests.util import run_dbt, get_manifest class TestGenerate: - def test_generate_no_manifest_on_no_compile(self, project): + @pytest.fixture(scope="class") + def models(self): + return {"my_model.sql": "select 1 as fun"} + + def test_manifest_not_compiled(self, project): run_dbt(["docs", "generate", "--no-compile"]) - assert not os.path.exists("./target/manifest.json") + # manifest.json is written out in parsing now, but it + # shouldn't be compiled because of the --no-compile flag + manifest = get_manifest(project.project_root) + model_id = "model.test.my_model" + assert model_id in manifest.nodes + assert manifest.nodes[model_id].compiled is False diff --git a/tests/functional/experimental_parser/test_all_experimental_parser.py b/tests/functional/experimental_parser/test_all_experimental_parser.py index 6a5c86b8f17..4f099de3456 100644 --- a/tests/functional/experimental_parser/test_all_experimental_parser.py +++ b/tests/functional/experimental_parser/test_all_experimental_parser.py @@ -38,12 +38,16 @@ def get_manifest(): {{ config(tags='hello', x=False) }} {{ config(tags='world', x=True) }} -select * from {{ ref('model_a') }} +select * from {{ ref('model_b') }} cross join {{ source('my_src', 'my_tbl') }} where false as boop """ +basic__model_b_sql = """ +select 1 as fun +""" + ref_macro__schema_yml = """ version: 2 @@ -93,6 +97,7 @@ class BasicExperimentalParser: def models(self): return { "model_a.sql": basic__model_a_sql, + "model_b.sql": basic__model_b_sql, "schema.yml": basic__schema_yml, } @@ -154,7 +159,7 @@ def test_experimental_parser_basic( run_dbt(["--use-experimental-parser", "parse"]) manifest = get_manifest() node = manifest.nodes["model.test.model_a"] - assert node.refs == [RefArgs(name="model_a")] + assert node.refs == [["model_b"]] assert node.sources == [["my_src", "my_tbl"]] assert node.config._extra == {"x": True} assert node.config.tags == ["hello", "world"] @@ -179,7 +184,11 @@ def test_static_parser_basic(self, project): manifest = get_manifest() node = manifest.nodes["model.test.model_a"] +<<<<<<< HEAD + assert node.refs == [["model_b"]] +======= assert node.refs == [RefArgs(name="model_a")] +>>>>>>> main assert node.sources == [["my_src", "my_tbl"]] assert node.config._extra == {"x": True} assert node.config.tags == ["hello", "world"] diff --git a/tests/functional/groups/test_access.py b/tests/functional/groups/test_access.py index 2a8902b3027..6814d2f2452 100644 --- a/tests/functional/groups/test_access.py +++ b/tests/functional/groups/test_access.py @@ -10,8 +10,6 @@ yet_another_model_sql = "select 999 as weird" schema_yml = """ -version: 2 - models: - name: my_model description: "my model" @@ -21,8 +19,6 @@ """ v2_schema_yml = """ -version: 2 - models: - name: my_model description: "my model" @@ -39,8 +35,6 @@ """ groups_yml = """ -version: 2 - groups: - name: analytics owner: @@ -52,8 +46,6 @@ v3_schema_yml = """ -version: 2 - models: - name: my_model description: "my model" @@ -67,8 +59,6 @@ """ v4_schema_yml = """ -version: 2 - models: - name: my_model description: "my model" @@ -82,8 +72,6 @@ """ simple_exposure_yml = """ -version: 2 - exposures: - name: simple_exposure label: simple exposure label @@ -95,8 +83,6 @@ """ v5_schema_yml = """ -version: 2 - models: - name: my_model description: "my model" @@ -125,8 +111,6 @@ """ people_metric_yml = """ -version: 2 - metrics: - name: number_of_people @@ -147,8 +131,6 @@ """ v2_people_metric_yml = """ -version: 2 - metrics: - name: number_of_people diff --git a/tests/functional/groups/test_publication.py b/tests/functional/groups/test_publication.py new file mode 100644 index 00000000000..0c0df331e55 --- /dev/null +++ b/tests/functional/groups/test_publication.py @@ -0,0 +1,78 @@ +import pytest + +from dbt.tests.util import run_dbt, get_artifact, write_file +from dbt.contracts.publication import Publication + + +model_one_sql = """ +select 1 as fun +""" + +model_two_sql = """ +select fun from {{ ref('model_one') }} +""" + +model_three_sql = """ +select fun from {{ ref('model_two') }} +""" + +models_yml = """ +models: + - name: model_one + description: model one + access: public + - name: model_two + description: non-public model + - name: model_three + description: model three + access: public +""" + + +class TestPublicationArtifact: + @pytest.fixture(scope="class") + def models(self): + return { + "model_one.sql": model_one_sql, + "model_two.sql": model_two_sql, + "model_three.sql": model_three_sql, + "models.yml": models_yml, + } + + def test_publication_artifact(self, project): + results = run_dbt(["run"]) + assert len(results) == 3 + + publication_dict = get_artifact(project.project_root, "target", "test_publication.json") + publication = Publication.from_dict(publication_dict) + assert publication + assert len(publication.public_models) == 2 + assert publication.public_models["model.test.model_three"].public_dependencies == [ + "model.test.model_one" + ] + + +dependencies_yml = """ +projects: + - name: finance + environment: dev + - name: marketing + environment: dev +""" + + +class TestDependenciesYml: + @pytest.fixture(scope="class") + def models(self): + return { + "model_one.sql": model_one_sql, + "model_two.sql": model_two_sql, + "model_three.sql": model_three_sql, + "models.yml": models_yml, + } + + def test_dependencies(self, project): + write_file(dependencies_yml, "dependencies.yml") + + results = run_dbt(["run"]) + assert len(results) == 3 From 6d511ebe0606c3cb4f2c701de5edff6e94ed7e34 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Wed, 12 Apr 2023 11:49:55 -0400 Subject: [PATCH 02/50] fix merge error --- .../experimental_parser/test_all_experimental_parser.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/functional/experimental_parser/test_all_experimental_parser.py b/tests/functional/experimental_parser/test_all_experimental_parser.py index 4f099de3456..9b3e055c070 100644 --- a/tests/functional/experimental_parser/test_all_experimental_parser.py +++ b/tests/functional/experimental_parser/test_all_experimental_parser.py @@ -184,11 +184,7 @@ def test_static_parser_basic(self, project): manifest = get_manifest() node = manifest.nodes["model.test.model_a"] -<<<<<<< HEAD assert node.refs == [["model_b"]] -======= - assert node.refs == [RefArgs(name="model_a")] ->>>>>>> main assert node.sources == [["my_src", "my_tbl"]] assert node.config._extra == {"x": True} assert node.config.tags == ["hello", "world"] From 7ffadafe1090afed98263a9b3b830d023ba740e4 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Wed, 12 Apr 2023 11:56:26 -0400 Subject: [PATCH 03/50] Fix test --- core/dbt/contracts/graph/manifest.py | 3 ++- .../experimental_parser/test_all_experimental_parser.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/core/dbt/contracts/graph/manifest.py b/core/dbt/contracts/graph/manifest.py index 8118f5073e6..d6cd0ce8f43 100644 --- a/core/dbt/contracts/graph/manifest.py +++ b/core/dbt/contracts/graph/manifest.py @@ -22,7 +22,7 @@ from typing_extensions import Protocol from uuid import UUID -from dbt.contracts.publication import Dependencies +from dbt.contracts.publication import Dependencies, Publication from dbt.contracts.graph.nodes import ( Macro, @@ -636,6 +636,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin): disabled: MutableMapping[str, List[GraphMemberNode]] = field(default_factory=dict) env_vars: MutableMapping[str, str] = field(default_factory=dict) dependencies: Optional[Dependencies] = None + publications: MutableMapping[str, Publication] = field(default_factory=dict) _doc_lookup: Optional[DocLookup] = field( default=None, metadata={"serialize": lambda x: None, "deserialize": lambda x: None} diff --git a/tests/functional/experimental_parser/test_all_experimental_parser.py b/tests/functional/experimental_parser/test_all_experimental_parser.py index 9b3e055c070..b426c308bb5 100644 --- a/tests/functional/experimental_parser/test_all_experimental_parser.py +++ b/tests/functional/experimental_parser/test_all_experimental_parser.py @@ -159,7 +159,7 @@ def test_experimental_parser_basic( run_dbt(["--use-experimental-parser", "parse"]) manifest = get_manifest() node = manifest.nodes["model.test.model_a"] - assert node.refs == [["model_b"]] + assert node.refs == [RefArgs(name="model_b")] assert node.sources == [["my_src", "my_tbl"]] assert node.config._extra == {"x": True} assert node.config.tags == ["hello", "world"] @@ -184,7 +184,7 @@ def test_static_parser_basic(self, project): manifest = get_manifest() node = manifest.nodes["model.test.model_a"] - assert node.refs == [["model_b"]] + assert node.refs == [RefArgs(name="model_b")] assert node.sources == [["my_src", "my_tbl"]] assert node.config._extra == {"x": True} assert node.config.tags == ["hello", "world"] From 8ba476abe308acc585ab3253da0f6233e967e5e2 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Thu, 13 Apr 2023 13:11:41 -0400 Subject: [PATCH 04/50] Move test_publication into multi_project dir --- tests/functional/{groups => multi_project}/test_publication.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/functional/{groups => multi_project}/test_publication.py (100%) diff --git a/tests/functional/groups/test_publication.py b/tests/functional/multi_project/test_publication.py similarity index 100% rename from tests/functional/groups/test_publication.py rename to tests/functional/multi_project/test_publication.py From 9add2a61f2158485db79012702e003fd352f96ed Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Thu, 13 Apr 2023 14:41:55 -0400 Subject: [PATCH 05/50] Load dependencies.yml and the corresponding publication file --- core/dbt/exceptions.py | 14 +++++ core/dbt/parser/manifest.py | 14 +++-- .../multi_project/test_publication.py | 63 ++++++++++++++++--- 3 files changed, 77 insertions(+), 14 deletions(-) diff --git a/core/dbt/exceptions.py b/core/dbt/exceptions.py index 72ede6e07ca..9078cb78ba5 100644 --- a/core/dbt/exceptions.py +++ b/core/dbt/exceptions.py @@ -352,6 +352,20 @@ class DbtProfileError(DbtConfigError): pass +class PublicationConfigNotFound(DbtConfigError): + def __init__(self, project=None, file_name=None): + self.project = project + self.file_name = file_name + msg = self.message() + super().__init__(msg, project=project) + + def message(self): + return ( + f"A dependency on project {self.project} was specified, " + f"but file {self.file_name} was not found." + ) + + class SemverError(Exception): def __init__(self, msg: str = None): self.msg = msg diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 1aa82a52d90..ff08ba27a67 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -81,7 +81,7 @@ from dbt.contracts.graph.unparsed import NodeVersion from dbt.contracts.util import Writable from dbt.contracts.publication import Publication, PublicationMetadata, PublicModel, Dependencies -from dbt.exceptions import TargetNotFoundError, AmbiguousAliasError +from dbt.exceptions import TargetNotFoundError, AmbiguousAliasError, PublicationConfigNotFound from dbt.parser.base import Parser from dbt.parser.analysis import AnalysisParser from dbt.parser.generic_test import GenericTestParser @@ -452,9 +452,10 @@ def load(self): self.manifest._parsing_info.static_analysis_path_count ) + # Following adds publications to manifest too... + self.write_artifacts() # write out the fully parsed manifest self.write_manifest_for_partial_parse() - self.write_artifacts() return self.manifest @@ -686,9 +687,14 @@ def build_dependencies(self): # TODO: eventually we'll implement publications_dir config path = os.path.join("publications", publication_file_name) if os.path.exists(path): - print(f"--- found a publication_file matching {project.name}") + contents = load_file_contents(path) + pub_dict = load_yaml_text(contents) + pub_obj = Publication.from_dict(pub_dict) + self.manifest.publications[project.name] = pub_obj else: - print(f"--- did not find a publication_file matching {project.name}") + raise PublicationConfigNotFound( + project=project.name, file_name=publication_file_name + ) def is_partial_parsable(self, manifest: Manifest) -> Tuple[bool, Optional[str]]: """Compare the global hashes of the read-in parse results' values to diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 0c0df331e55..1b7daaa2412 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -1,7 +1,9 @@ import pytest +import pathlib -from dbt.tests.util import run_dbt, get_artifact, write_file +from dbt.tests.util import run_dbt, get_artifact, write_file, get_manifest from dbt.contracts.publication import Publication +from dbt.exceptions import PublicationConfigNotFound model_one_sql = """ @@ -29,6 +31,45 @@ """ +dependencies_yml = """ +projects: + - name: marketing + environment: dev +""" + +marketing_pub_json = """ +{ + "project_name": "marketing", + "metadata": { + "dbt_schema_version": "https://schemas.getdbt.com/dbt/publication/v1.json", + "dbt_version": "1.5.0", + "generated_at": "2023-04-13T17:17:58.128706Z", + "invocation_id": "56e3126f-78c7-470c-8eb0-c94af7c3eaac", + "env": {}, + "adapter_type": "postgres", + "quoting": { + "database": true, + "schema": true, + "identifier": true + } + }, + "public_models": { + "model.marketing.fct_one": { + "relation_name": '"dbt"."test_schema"."fct_one"', + "latest": false, + "public_dependencies": [] + }, + "model.marketing.fct_two": { + "relation_name": '"dbt"."test_schema"."fct_two"', + "latest": false, + "public_dependencies": ["model.test.fct_one"] + } + }, + "dependencies": [] +} +""" + + class TestPublicationArtifact: @pytest.fixture(scope="class") def models(self): @@ -52,15 +93,6 @@ def test_publication_artifact(self, project): ] -dependencies_yml = """ -projects: - - name: finance - environment: dev - - name: marketing - environment: dev -""" - - class TestDependenciesYml: @pytest.fixture(scope="class") def models(self): @@ -74,5 +106,16 @@ def models(self): def test_dependencies(self, project): write_file(dependencies_yml, "dependencies.yml") + # Depdencies lists "marketing" project, but no publication file found + with pytest.raises(PublicationConfigNotFound): + run_dbt(["run"]) + + # Write out publication file and try again + m_pub_json = marketing_pub_json.replace("test_schema", project.test_schema) + (pathlib.Path(project.project_root) / "publications").mkdir(parents=True, exist_ok=True) + write_file(m_pub_json, project.project_root, "publications", "marketing_publication.json") + results = run_dbt(["run"]) assert len(results) == 3 + manifest = get_manifest(project.project_root) + assert manifest.publications From 77d2a5ba00fdc2062a1b46c8740dcd575dae9d17 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Fri, 14 Apr 2023 10:50:45 -0400 Subject: [PATCH 06/50] use is_latest_version --- core/dbt/contracts/publication.py | 2 +- core/dbt/parser/manifest.py | 2 +- tests/functional/multi_project/test_publication.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py index 6f72ffb564d..50e0c7adf3e 100644 --- a/core/dbt/contracts/publication.py +++ b/core/dbt/contracts/publication.py @@ -27,7 +27,7 @@ class PublicationMetadata(BaseArtifactMetadata): @dataclass class PublicModel(dbtClassMixin): relation_name: str - latest: bool = False # not implemented yet + is_latest_version: bool = False # list of model unique_ids public_dependencies: List[str] = field(default_factory=list) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index ff08ba27a67..90c0672635a 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -651,7 +651,7 @@ def write_artifacts(self): public_model = PublicModel( relation_name=model.relation_name, - latest=False, # not a node field yet + is_latest_version=model.is_latest_version, public_dependencies=list(public_dependencies), ) public_models[unique_id] = public_model diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 1b7daaa2412..59f421a2483 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -56,12 +56,12 @@ "public_models": { "model.marketing.fct_one": { "relation_name": '"dbt"."test_schema"."fct_one"', - "latest": false, + "is_latest_version": false, "public_dependencies": [] }, "model.marketing.fct_two": { "relation_name": '"dbt"."test_schema"."fct_two"', - "latest": false, + "is_latest_version": false, "public_dependencies": ["model.test.fct_one"] } }, From 6bb6e5767b658eb0dc068a0aed143cc40ab212fc Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Fri, 14 Apr 2023 11:12:45 -0400 Subject: [PATCH 07/50] Add version to PublicModel for now --- core/dbt/contracts/publication.py | 2 ++ core/dbt/parser/manifest.py | 1 + tests/functional/multi_project/test_publication.py | 2 ++ 3 files changed, 5 insertions(+) diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py index 50e0c7adf3e..d3fe8643ffa 100644 --- a/core/dbt/contracts/publication.py +++ b/core/dbt/contracts/publication.py @@ -4,6 +4,7 @@ from dataclasses import dataclass, field from dbt.contracts.util import BaseArtifactMetadata, ArtifactMixin, schema_version +from dbt.contracts.graph.unparsed import NodeVersion @dataclass @@ -27,6 +28,7 @@ class PublicationMetadata(BaseArtifactMetadata): @dataclass class PublicModel(dbtClassMixin): relation_name: str + version: Optional[NodeVersion] = None # It's not totally clear if we actually need this is_latest_version: bool = False # list of model unique_ids public_dependencies: List[str] = field(default_factory=list) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 90c0672635a..340d59deb2b 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -651,6 +651,7 @@ def write_artifacts(self): public_model = PublicModel( relation_name=model.relation_name, + version=model.version, is_latest_version=model.is_latest_version, public_dependencies=list(public_dependencies), ) diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 59f421a2483..a7b2d3709fb 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -56,11 +56,13 @@ "public_models": { "model.marketing.fct_one": { "relation_name": '"dbt"."test_schema"."fct_one"', + "version": null, "is_latest_version": false, "public_dependencies": [] }, "model.marketing.fct_two": { "relation_name": '"dbt"."test_schema"."fct_two"', + "version": null, "is_latest_version": false, "public_dependencies": ["model.test.fct_one"] } From 8dcc2b5caca1f7c17a87925005c2c7ec947af00c Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Fri, 14 Apr 2023 11:22:55 -0400 Subject: [PATCH 08/50] change test to use parse and get manifest --- tests/functional/multi_project/test_publication.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index a7b2d3709fb..3b0a71b186b 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -1,7 +1,7 @@ import pytest import pathlib -from dbt.tests.util import run_dbt, get_artifact, write_file, get_manifest +from dbt.tests.util import run_dbt, get_artifact, write_file from dbt.contracts.publication import Publication from dbt.exceptions import PublicationConfigNotFound @@ -110,14 +110,15 @@ def test_dependencies(self, project): # Depdencies lists "marketing" project, but no publication file found with pytest.raises(PublicationConfigNotFound): - run_dbt(["run"]) + run_dbt(["parse"]) # Write out publication file and try again m_pub_json = marketing_pub_json.replace("test_schema", project.test_schema) (pathlib.Path(project.project_root) / "publications").mkdir(parents=True, exist_ok=True) write_file(m_pub_json, project.project_root, "publications", "marketing_publication.json") - results = run_dbt(["run"]) - assert len(results) == 3 - manifest = get_manifest(project.project_root) + manifest = run_dbt(["parse"]) assert manifest.publications + assert "marketing" in manifest.publications + public_model = manifest.publications["marketing"].public_models["model.marketing.fct_one"] + assert public_model From ede647ac5552489cea8b9d3692850075285cbd65 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Fri, 14 Apr 2023 13:04:05 -0400 Subject: [PATCH 09/50] Add unique_id and a couple of properties to PublicModel --- core/dbt/context/providers.py | 2 ++ core/dbt/contracts/publication.py | 12 ++++++++++++ core/dbt/parser/manifest.py | 10 +++------- tests/functional/multi_project/test_publication.py | 2 ++ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/core/dbt/context/providers.py b/core/dbt/context/providers.py index f77c49a588c..5de1da6034c 100644 --- a/core/dbt/context/providers.py +++ b/core/dbt/context/providers.py @@ -464,6 +464,8 @@ def resolve( ) -> RelationProxy: self.model.refs.append(self._repack_args(name, package, version)) + # I don't understand what the point of this is. The "ref" is for a different + # model, not this one. return self.Relation.create_from(self.config, self.model) diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py index d3fe8643ffa..d55e844d66d 100644 --- a/core/dbt/contracts/publication.py +++ b/core/dbt/contracts/publication.py @@ -5,6 +5,7 @@ from dbt.contracts.util import BaseArtifactMetadata, ArtifactMixin, schema_version from dbt.contracts.graph.unparsed import NodeVersion +from dbt.node_types import NodeType, AccessType @dataclass @@ -27,12 +28,23 @@ class PublicationMetadata(BaseArtifactMetadata): @dataclass class PublicModel(dbtClassMixin): + unique_id: str relation_name: str version: Optional[NodeVersion] = None # It's not totally clear if we actually need this is_latest_version: bool = False # list of model unique_ids public_dependencies: List[str] = field(default_factory=list) + # Adding to simplify some ref resolution code for now. + @property + def resource_type(self): + return NodeType.Model + + # Adding to simplify some ref resolution code for now. + @property + def access(self): + return AccessType.Public + @dataclass class PublicationMandatory: diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 340d59deb2b..d1eaaf9d821 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -414,7 +414,7 @@ def load(self): project, project_parser_files[project.project_name], parser_types ) - self.process_nodes() + self.cleanup_disabled() self._perf_info.parse_project_elapsed = time.perf_counter() - start_parse_projects @@ -650,6 +650,7 @@ def write_artifacts(self): public_dependencies = parents.intersection(set_of_public_unique_ids) public_model = PublicModel( + unique_id=model.unique_id, relation_name=model.relation_name, version=model.version, is_latest_version=model.is_latest_version, @@ -1091,7 +1092,7 @@ def process_sources(self, current_project: str): continue _process_sources_for_exposure(self.manifest, current_project, exposure) - def process_nodes(self): + def cleanup_disabled(self): # make sure the nodes are in the manifest.nodes or the disabled dict, # correctly now that the schema files are also parsed disabled_nodes = [] @@ -1486,11 +1487,6 @@ def _process_refs_for_node(manifest: Manifest, current_project: str, node: Manif target_model_id = target_model.unique_id node.depends_on.nodes.append(target_model_id) - # TODO: I think this is extraneous, node should already be the same - # as manifest.nodes[node.unique_id] (we're mutating node here, not - # making a new one) - # Q: could we stop doing this? - manifest.update_node(node) def _process_sources_for_exposure(manifest: Manifest, current_project: str, exposure: Exposure): diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 3b0a71b186b..2d896279bad 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -55,12 +55,14 @@ }, "public_models": { "model.marketing.fct_one": { + "unique_id": "model.marketing.fct_one", "relation_name": '"dbt"."test_schema"."fct_one"', "version": null, "is_latest_version": false, "public_dependencies": [] }, "model.marketing.fct_two": { + "unique_id": "model.marketing.fct_two", "relation_name": '"dbt"."test_schema"."fct_two"', "version": null, "is_latest_version": false, From 86045ca67a7a8400cd77e3af2564095ed17be86c Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Fri, 14 Apr 2023 15:22:17 -0400 Subject: [PATCH 10/50] add "name" and "package_name" to PublicModel, some changes to ref_lookup --- core/dbt/contracts/graph/manifest.py | 40 +++++++++++++------ core/dbt/contracts/graph/nodes.py | 30 ++++++++++++++ core/dbt/contracts/publication.py | 12 +++++- core/dbt/parser/manifest.py | 5 +++ .../multi_project/test_publication.py | 4 ++ 5 files changed, 78 insertions(+), 13 deletions(-) diff --git a/core/dbt/contracts/graph/manifest.py b/core/dbt/contracts/graph/manifest.py index d6cd0ce8f43..92e85bd867d 100644 --- a/core/dbt/contracts/graph/manifest.py +++ b/core/dbt/contracts/graph/manifest.py @@ -22,7 +22,7 @@ from typing_extensions import Protocol from uuid import UUID -from dbt.contracts.publication import Dependencies, Publication +from dbt.contracts.publication import Dependencies, Publication, PublicModel from dbt.contracts.graph.nodes import ( Macro, @@ -37,6 +37,7 @@ GraphMemberNode, ResultNode, BaseNode, + ManifestOrPublicNode, ) from dbt.contracts.graph.unparsed import SourcePatch, NodeVersion from dbt.contracts.graph.manifest_upgrade import upgrade_manifest_json @@ -156,6 +157,7 @@ class RefableLookup(dbtClassMixin): def __init__(self, manifest: "Manifest"): self.storage: Dict[str, Dict[PackageName, UniqueID]] = {} self.populate(manifest) + self.populate_public_nodes(manifest) def get_unique_id(self, key, package: Optional[PackageName], version: Optional[NodeVersion]): if version: @@ -174,7 +176,7 @@ def find( return self.perform_lookup(unique_id, manifest) return None - def add_node(self, node: ManifestNode): + def add_node(self, node: ManifestOrPublicNode): if node.resource_type in self._lookup_types: if node.name not in self.storage: self.storage[node.name] = {} @@ -192,12 +194,21 @@ def populate(self, manifest): for node in manifest.nodes.values(): self.add_node(node) - def perform_lookup(self, unique_id: UniqueID, manifest) -> ManifestNode: - if unique_id not in manifest.nodes: + def populate_public_nodes(self, manifest): + for external_package in manifest.publications.values(): + for node in external_package.public_models: + self.add_node(node) + + def perform_lookup(self, unique_id: UniqueID, manifest) -> ManifestOrPublicNode: + if unique_id in manifest.nodes: + node = manifest.nodes[unique_id] + if unique_id in manifest.external_nodes: + node = manifest.external_nodes[unique_id] + if not node: raise dbt.exceptions.DbtInternalError( f"Node {unique_id} found in cache but not found in manifest" ) - return manifest.nodes[unique_id] + return node class MetricLookup(dbtClassMixin): @@ -279,7 +290,7 @@ class AnalysisLookup(RefableLookup): _versioned_types: ClassVar[set] = set() -def _search_packages( +def _packages_to_search( current_project: str, node_package: str, target_package: Optional[str] = None, @@ -637,6 +648,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin): env_vars: MutableMapping[str, str] = field(default_factory=dict) dependencies: Optional[Dependencies] = None publications: MutableMapping[str, Publication] = field(default_factory=dict) + external_nodes: MutableMapping[str, PublicModel] = field(default_factory=dict) _doc_lookup: Optional[DocLookup] = field( default=None, metadata={"serialize": lambda x: None, "deserialize": lambda x: None} @@ -921,7 +933,7 @@ def analysis_lookup(self) -> AnalysisLookup: self._analysis_lookup = AnalysisLookup(self) return self._analysis_lookup - # Called by dbt.parser.manifest._resolve_refs_for_exposure + # Called by dbt.parser.manifest._process_refs_for_exposure, _process_refs_for_metric, # and dbt.parser.manifest._process_refs_for_node def resolve_ref( self, @@ -935,11 +947,15 @@ def resolve_ref( node: Optional[ManifestNode] = None disabled: Optional[List[ManifestNode]] = None - candidates = _search_packages(current_project, node_package, target_model_package) + candidates = _packages_to_search(current_project, node_package, target_model_package) for pkg in candidates: node = self.ref_lookup.find(target_model_name, pkg, target_model_version, self) - if node is not None and node.config.enabled: + if ( + node is not None + and (hasattr(node, "config") and node.config.enabled) + or isinstance(node, PublicModel) + ): return node # it's possible that the node is disabled @@ -960,7 +976,7 @@ def resolve_source( node_package: str, ) -> MaybeParsedSource: search_name = f"{target_source_name}.{target_table_name}" - candidates = _search_packages(current_project, node_package) + candidates = _packages_to_search(current_project, node_package) source: Optional[SourceDefinition] = None disabled: Optional[List[SourceDefinition]] = None @@ -990,7 +1006,7 @@ def resolve_metric( metric: Optional[Metric] = None disabled: Optional[List[Metric]] = None - candidates = _search_packages(current_project, node_package, target_metric_package) + candidates = _packages_to_search(current_project, node_package, target_metric_package) for pkg in candidates: metric = self.metric_lookup.find(target_metric_name, pkg, self) @@ -1016,7 +1032,7 @@ def resolve_doc( resolve_ref except the is_enabled checks are unnecessary as docs are always enabled. """ - candidates = _search_packages(current_project, node_package, package) + candidates = _packages_to_search(current_project, node_package, package) for pkg in candidates: result = self.doc_lookup.find(name, pkg, self) diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index 14d911b40b3..7ee9ec8f302 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -62,6 +62,12 @@ EmptySnapshotConfig, SnapshotConfig, ) +import sys + +if sys.version_info >= (3, 8): + from typing import Protocol +else: + from typing_extensions import Protocol # ===================================================================== @@ -1334,6 +1340,30 @@ class ParsedMacroPatch(ParsedPatch): # ==================================== +class ManifestOrPublicNode(Protocol): + name: str + package_name: str + unique_id: str + version: Optional[NodeVersion] + relation_name: str + + @property + def is_latest_version(self): + pass + + @property + def resource_type(self): + pass + + @property + def access(self): + pass + + @property + def search_name(self): + pass + + # ManifestNode without SeedNode, which doesn't have the # SQL related attributes ManifestSQLNode = Union[ diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py index d55e844d66d..f75d7b5ffc3 100644 --- a/core/dbt/contracts/publication.py +++ b/core/dbt/contracts/publication.py @@ -5,6 +5,7 @@ from dbt.contracts.util import BaseArtifactMetadata, ArtifactMixin, schema_version from dbt.contracts.graph.unparsed import NodeVersion +from dbt.contracts.graph.nodes import ManifestOrPublicNode from dbt.node_types import NodeType, AccessType @@ -27,7 +28,9 @@ class PublicationMetadata(BaseArtifactMetadata): @dataclass -class PublicModel(dbtClassMixin): +class PublicModel(dbtClassMixin, ManifestOrPublicNode): + name: str + package_name: str unique_id: str relation_name: str version: Optional[NodeVersion] = None # It's not totally clear if we actually need this @@ -45,6 +48,13 @@ def resource_type(self): def access(self): return AccessType.Public + @property + def search_name(self): + if self.version is None: + return self.name + else: + return f"{self.name}.v{self.version}" + @dataclass class PublicationMandatory: diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index d1eaaf9d821..640e7ecf0b3 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -650,6 +650,8 @@ def write_artifacts(self): public_dependencies = parents.intersection(set_of_public_unique_ids) public_model = PublicModel( + name=model.name, + package_name=model.package_name, unique_id=model.unique_id, relation_name=model.relation_name, version=model.version, @@ -693,6 +695,9 @@ def build_dependencies(self): pub_dict = load_yaml_text(contents) pub_obj = Publication.from_dict(pub_dict) self.manifest.publications[project.name] = pub_obj + # Add to dictionary of external_nodes + for external_node in pub_obj.public_models.values(): + self.manifest.external_nodes[external_node.unique_id] = external_node else: raise PublicationConfigNotFound( project=project.name, file_name=publication_file_name diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 2d896279bad..e685b8ed850 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -55,6 +55,8 @@ }, "public_models": { "model.marketing.fct_one": { + "name": "fct_one", + "package_name": "marketing", "unique_id": "model.marketing.fct_one", "relation_name": '"dbt"."test_schema"."fct_one"', "version": null, @@ -62,6 +64,8 @@ "public_dependencies": [] }, "model.marketing.fct_two": { + "name": "fct_two", + "package_name": "marketing", "unique_id": "model.marketing.fct_two", "relation_name": '"dbt"."test_schema"."fct_two"', "version": null, From 800934946ebe7978e7b98cb39469de59877bcf1b Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Fri, 14 Apr 2023 15:32:26 -0400 Subject: [PATCH 11/50] Add "external_nodes" and populate ref_lookup --- core/dbt/contracts/graph/manifest.py | 9 ++++----- core/dbt/parser/manifest.py | 10 +++++----- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/core/dbt/contracts/graph/manifest.py b/core/dbt/contracts/graph/manifest.py index 92e85bd867d..f25da0cbce2 100644 --- a/core/dbt/contracts/graph/manifest.py +++ b/core/dbt/contracts/graph/manifest.py @@ -157,7 +157,7 @@ class RefableLookup(dbtClassMixin): def __init__(self, manifest: "Manifest"): self.storage: Dict[str, Dict[PackageName, UniqueID]] = {} self.populate(manifest) - self.populate_public_nodes(manifest) + self.populate_external_nodes(manifest) def get_unique_id(self, key, package: Optional[PackageName], version: Optional[NodeVersion]): if version: @@ -194,10 +194,9 @@ def populate(self, manifest): for node in manifest.nodes.values(): self.add_node(node) - def populate_public_nodes(self, manifest): - for external_package in manifest.publications.values(): - for node in external_package.public_models: - self.add_node(node) + def populate_external_nodes(self, manifest): + for node in manifest.external_nodes.values(): + self.add_node(node) def perform_lookup(self, unique_id: UniqueID, manifest) -> ManifestOrPublicNode: if unique_id in manifest.nodes: diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 640e7ecf0b3..b1d7d860e19 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -433,6 +433,9 @@ def load(self): # copy the selectors from the root_project to the manifest self.manifest.selectors = self.root_project.manifest_selectors + # load the publication artifacts and create the external nodes + self.build_external_nodes() + # update the refs, sources, docs and metrics depends_on.nodes # These check the created_at time on the nodes to # determine whether they need processing. @@ -616,10 +619,6 @@ def write_artifacts(self): # TODO: check for overlap with parse command writing manifest write_manifest(self.manifest, self.root_project.target_path) - # Note: this is not the right place to do this. Just doing here for ease - # of implementation. To be moved later. - self.build_dependencies() - # build publication metadata metadata = PublicationMetadata( adapter_type=self.root_project.credentials.type, @@ -673,7 +672,7 @@ def write_artifacts(self): path = os.path.join(self.root_project.target_path, publication_file_name) publication.write(path) - def build_dependencies(self): + def build_external_nodes(self): dependencies_filepath = resolve_path_from_base( "dependencies.yml", self.root_project.project_root ) @@ -702,6 +701,7 @@ def build_dependencies(self): raise PublicationConfigNotFound( project=project.name, file_name=publication_file_name ) + self.manifest.ref_lookup.populate_external_nodes(self.manifest) def is_partial_parsable(self, manifest: Manifest) -> Tuple[bool, Optional[str]]: """Compare the global hashes of the read-in parse results' values to From 6a9c06dd66fec7c4ec960cafbb95330335f541b9 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Fri, 14 Apr 2023 15:44:31 -0400 Subject: [PATCH 12/50] resolve_ref working --- tests/functional/multi_project/test_publication.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index e685b8ed850..d4478ba1b7b 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -2,7 +2,7 @@ import pathlib from dbt.tests.util import run_dbt, get_artifact, write_file -from dbt.contracts.publication import Publication +from dbt.contracts.publication import Publication, PublicModel from dbt.exceptions import PublicationConfigNotFound @@ -128,3 +128,8 @@ def test_dependencies(self, project): assert "marketing" in manifest.publications public_model = manifest.publications["marketing"].public_models["model.marketing.fct_one"] assert public_model + + # target_model_name, target_model_package, target_model_version, current_project, node_package + resolved_node = manifest.resolve_ref("fct_one", "marketing", None, "test", "test") + assert resolved_node + assert isinstance(resolved_node, PublicModel) From f8a7bfdf8e18a0e199cf050c8c0f8ed7730a45a7 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Fri, 14 Apr 2023 16:27:50 -0400 Subject: [PATCH 13/50] add "external_nodes" dictionary, save external ref unique_ids to it --- core/dbt/context/providers.py | 3 ++- core/dbt/contracts/graph/nodes.py | 1 + core/dbt/parser/manifest.py | 5 ++++- core/dbt/parser/models.py | 2 +- tests/functional/multi_project/test_publication.py | 13 +++++++++++++ 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/core/dbt/context/providers.py b/core/dbt/context/providers.py index 5de1da6034c..7d41301b9e8 100644 --- a/core/dbt/context/providers.py +++ b/core/dbt/context/providers.py @@ -465,7 +465,8 @@ def resolve( self.model.refs.append(self._repack_args(name, package, version)) # I don't understand what the point of this is. The "ref" is for a different - # model, not this one. + # model, not this one. I guess since we can get the real relation, we're just + # passing back some miscellaneous relation. return self.Relation.create_from(self.config, self.model) diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index 7ee9ec8f302..7a8bbdf07a9 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -255,6 +255,7 @@ def add_macro(self, value: str): @dataclass class DependsOn(MacroDependsOn): nodes: List[str] = field(default_factory=list) + external_nodes: List[str] = field(default_factory=list) def add_node(self, value: str): if value not in self.nodes: diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index b1d7d860e19..ffb2653c8de 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -1491,7 +1491,10 @@ def _process_refs_for_node(manifest: Manifest, current_project: str, node: Manif target_model_id = target_model.unique_id - node.depends_on.nodes.append(target_model_id) + if isinstance(target_model, PublicModel): + node.depends_on.external_nodes.append(target_model_id) + else: + node.depends_on.nodes.append(target_model_id) def _process_sources_for_exposure(manifest: Manifest, current_project: str, exposure: Exposure): diff --git a/core/dbt/parser/models.py b/core/dbt/parser/models.py index 85fb233588a..2cd6d848231 100644 --- a/core/dbt/parser/models.py +++ b/core/dbt/parser/models.py @@ -492,7 +492,7 @@ def populate(self, node: ModelNode, config: ContextConfig, statically_parsed: Di if len(ref) == 1: package, name = None, ref[0] else: - package, name = ref[0], refs[1] + package, name = ref[0], ref[1] refs.append(RefArgs(package=package, name=name)) diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index d4478ba1b7b..634d39e0bf1 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -77,6 +77,10 @@ } """ +ext_node_model_sql = """ +select * from {{ ref('marketing', 'fct_one') }} +""" + class TestPublicationArtifact: @pytest.fixture(scope="class") @@ -133,3 +137,12 @@ def test_dependencies(self, project): resolved_node = manifest.resolve_ref("fct_one", "marketing", None, "test", "test") assert resolved_node assert isinstance(resolved_node, PublicModel) + assert resolved_node.unique_id == "model.marketing.fct_one" + + # add new model that references external_node + write_file(ext_node_model_sql, project.project_root, "models", "ext_node_model.sql") + manifest = run_dbt(["parse"]) + + model_id = "model.test.ext_node_model" + model = manifest.nodes[model_id] + assert model.depends_on.external_nodes == ["model.marketing.fct_one"] From babaf6a7d52232c4a6c9b5269aded06caea308ce Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Mon, 17 Apr 2023 11:37:33 -0400 Subject: [PATCH 14/50] rename external_nodes to public_nodes --- core/dbt/contracts/graph/manifest.py | 12 ++++++------ core/dbt/contracts/graph/nodes.py | 2 +- core/dbt/parser/manifest.py | 12 ++++++------ tests/functional/multi_project/test_publication.py | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/core/dbt/contracts/graph/manifest.py b/core/dbt/contracts/graph/manifest.py index f25da0cbce2..2b101c73ee3 100644 --- a/core/dbt/contracts/graph/manifest.py +++ b/core/dbt/contracts/graph/manifest.py @@ -157,7 +157,7 @@ class RefableLookup(dbtClassMixin): def __init__(self, manifest: "Manifest"): self.storage: Dict[str, Dict[PackageName, UniqueID]] = {} self.populate(manifest) - self.populate_external_nodes(manifest) + self.populate_public_nodes(manifest) def get_unique_id(self, key, package: Optional[PackageName], version: Optional[NodeVersion]): if version: @@ -194,15 +194,15 @@ def populate(self, manifest): for node in manifest.nodes.values(): self.add_node(node) - def populate_external_nodes(self, manifest): - for node in manifest.external_nodes.values(): + def populate_public_nodes(self, manifest): + for node in manifest.public_nodes.values(): self.add_node(node) def perform_lookup(self, unique_id: UniqueID, manifest) -> ManifestOrPublicNode: if unique_id in manifest.nodes: node = manifest.nodes[unique_id] - if unique_id in manifest.external_nodes: - node = manifest.external_nodes[unique_id] + if unique_id in manifest.public_nodes: + node = manifest.public_nodes[unique_id] if not node: raise dbt.exceptions.DbtInternalError( f"Node {unique_id} found in cache but not found in manifest" @@ -647,7 +647,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin): env_vars: MutableMapping[str, str] = field(default_factory=dict) dependencies: Optional[Dependencies] = None publications: MutableMapping[str, Publication] = field(default_factory=dict) - external_nodes: MutableMapping[str, PublicModel] = field(default_factory=dict) + public_nodes: MutableMapping[str, PublicModel] = field(default_factory=dict) _doc_lookup: Optional[DocLookup] = field( default=None, metadata={"serialize": lambda x: None, "deserialize": lambda x: None} diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index 309d1966f19..fd441b8c045 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -255,7 +255,7 @@ def add_macro(self, value: str): @dataclass class DependsOn(MacroDependsOn): nodes: List[str] = field(default_factory=list) - external_nodes: List[str] = field(default_factory=list) + public_nodes: List[str] = field(default_factory=list) def add_node(self, value: str): if value not in self.nodes: diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index ffb2653c8de..fc5f2e76b3f 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -434,7 +434,7 @@ def load(self): self.manifest.selectors = self.root_project.manifest_selectors # load the publication artifacts and create the external nodes - self.build_external_nodes() + self.build_public_nodes() # update the refs, sources, docs and metrics depends_on.nodes # These check the created_at time on the nodes to @@ -672,7 +672,7 @@ def write_artifacts(self): path = os.path.join(self.root_project.target_path, publication_file_name) publication.write(path) - def build_external_nodes(self): + def build_public_nodes(self): dependencies_filepath = resolve_path_from_base( "dependencies.yml", self.root_project.project_root ) @@ -694,14 +694,14 @@ def build_external_nodes(self): pub_dict = load_yaml_text(contents) pub_obj = Publication.from_dict(pub_dict) self.manifest.publications[project.name] = pub_obj - # Add to dictionary of external_nodes + # Add to dictionary of public_nodes for external_node in pub_obj.public_models.values(): - self.manifest.external_nodes[external_node.unique_id] = external_node + self.manifest.public_nodes[external_node.unique_id] = external_node else: raise PublicationConfigNotFound( project=project.name, file_name=publication_file_name ) - self.manifest.ref_lookup.populate_external_nodes(self.manifest) + self.manifest.ref_lookup.populate_public_nodes(self.manifest) def is_partial_parsable(self, manifest: Manifest) -> Tuple[bool, Optional[str]]: """Compare the global hashes of the read-in parse results' values to @@ -1492,7 +1492,7 @@ def _process_refs_for_node(manifest: Manifest, current_project: str, node: Manif target_model_id = target_model.unique_id if isinstance(target_model, PublicModel): - node.depends_on.external_nodes.append(target_model_id) + node.depends_on.public_nodes.append(target_model_id) else: node.depends_on.nodes.append(target_model_id) diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 634d39e0bf1..f3e2abd9076 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -145,4 +145,4 @@ def test_dependencies(self, project): model_id = "model.test.ext_node_model" model = manifest.nodes[model_id] - assert model.depends_on.external_nodes == ["model.marketing.fct_one"] + assert model.depends_on.public_nodes == ["model.marketing.fct_one"] From bd652a7cba3a78987c5bcb4250ba73373ccf38fa Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Mon, 17 Apr 2023 12:28:15 -0400 Subject: [PATCH 15/50] relation from relation_name. Not tested. --- core/dbt/adapters/base/relation.py | 21 +++++++++++++++++++++ core/dbt/context/providers.py | 7 ++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/core/dbt/adapters/base/relation.py b/core/dbt/adapters/base/relation.py index 13f64c01742..a189fc058a6 100644 --- a/core/dbt/adapters/base/relation.py +++ b/core/dbt/adapters/base/relation.py @@ -244,6 +244,27 @@ def create_from_node( **kwargs, ) + @classmethod + def create_from_relation_name(cls: Type[Self], config: HasQuoting, relation_name: str) -> Self: + parts = relation_name.split(".") + if len(parts) == 3: + (database, schema, identifier) = parts + else: + database = None + (schema, identifier) = parts + + if database: + database = database.strip('"').strip("'") + schema = schema.strip('"').strip("'") + identifier = identifier.strip('"').strip("'") + + return cls.create( + database=database, + schema=schema, + identifier=identifier, + quote_policy=config.quoting, + ) + @classmethod def create_from( cls: Type[Self], diff --git a/core/dbt/context/providers.py b/core/dbt/context/providers.py index 7d41301b9e8..5a4fbb3f33f 100644 --- a/core/dbt/context/providers.py +++ b/core/dbt/context/providers.py @@ -40,6 +40,7 @@ RefArgs, ) from dbt.contracts.graph.metrics import MetricReference, ResolvedMetricReference +from dbt.contracts.publication import PublicModel from dbt.contracts.graph.unparsed import NodeVersion from dbt.events.functions import get_metadata_vars from dbt.exceptions import ( @@ -464,9 +465,7 @@ def resolve( ) -> RelationProxy: self.model.refs.append(self._repack_args(name, package, version)) - # I don't understand what the point of this is. The "ref" is for a different - # model, not this one. I guess since we can get the real relation, we're just - # passing back some miscellaneous relation. + # This is not the ref for the "name" passed in, but for the current model. return self.Relation.create_from(self.config, self.model) @@ -504,6 +503,8 @@ def create_relation(self, target_model: ManifestNode) -> RelationProxy: if target_model.is_ephemeral_model: self.model.set_cte(target_model.unique_id, None) return self.Relation.create_ephemeral_from_node(self.config, target_model) + elif isinstance(target_model, PublicModel): + return self.Relation.create_from_relation_name(self.config, target_model.relation_name) else: return self.Relation.create_from(self.config, target_model) From c96c2a2b1d1091e284d8e17235ada443c3a91951 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Mon, 17 Apr 2023 12:40:40 -0400 Subject: [PATCH 16/50] Test working with public_node --- core/dbt/context/providers.py | 11 +++++++---- tests/functional/multi_project/test_publication.py | 8 +++++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/core/dbt/context/providers.py b/core/dbt/context/providers.py index 5a4fbb3f33f..499e46b6d42 100644 --- a/core/dbt/context/providers.py +++ b/core/dbt/context/providers.py @@ -500,11 +500,11 @@ def resolve( return self.create_relation(target_model) def create_relation(self, target_model: ManifestNode) -> RelationProxy: - if target_model.is_ephemeral_model: + if isinstance(target_model, PublicModel): + return self.Relation.create_from_relation_name(self.config, target_model.relation_name) + elif target_model.is_ephemeral_model: self.model.set_cte(target_model.unique_id, None) return self.Relation.create_ephemeral_from_node(self.config, target_model) - elif isinstance(target_model, PublicModel): - return self.Relation.create_from_relation_name(self.config, target_model.relation_name) else: return self.Relation.create_from(self.config, target_model) @@ -515,7 +515,10 @@ def validate( target_package: Optional[str], target_version: Optional[NodeVersion], ) -> None: - if resolved.unique_id not in self.model.depends_on.nodes: + if ( + resolved.unique_id not in self.model.depends_on.nodes + and resolved.unique_id not in self.model.depends_on.public_nodes + ): args = self._repack_args(target_name, target_package, target_version) raise RefBadContextError(node=self.model, args=args) diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index f3e2abd9076..8e71f6367bc 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -139,10 +139,16 @@ def test_dependencies(self, project): assert isinstance(resolved_node, PublicModel) assert resolved_node.unique_id == "model.marketing.fct_one" - # add new model that references external_node + # add new model that references external_node and parse write_file(ext_node_model_sql, project.project_root, "models", "ext_node_model.sql") manifest = run_dbt(["parse"]) model_id = "model.test.ext_node_model" model = manifest.nodes[model_id] assert model.depends_on.public_nodes == ["model.marketing.fct_one"] + + # Create the relation for the public node (fct_one) + project.run_sql(f'create table "{project.test_schema}"."fct_one" (id integer)') + project.run_sql(f'insert into "{project.test_schema}"."fct_one" values (1), (2)') + results = run_dbt(["run"]) + assert len(results) == 4 From 17542fb5874384d2c9424ed95e96ee486ca42fb6 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Mon, 17 Apr 2023 13:30:00 -0400 Subject: [PATCH 17/50] Add public nodes to parent and child maps --- core/dbt/contracts/graph/manifest.py | 4 +++- core/dbt/contracts/graph/nodes.py | 20 +++++++++++++++++++ core/dbt/contracts/publication.py | 14 ++++++++++--- core/dbt/parser/manifest.py | 2 +- .../multi_project/test_publication.py | 5 ++++- 5 files changed, 39 insertions(+), 6 deletions(-) diff --git a/core/dbt/contracts/graph/manifest.py b/core/dbt/contracts/graph/manifest.py index 2b101c73ee3..d0b8e959c0f 100644 --- a/core/dbt/contracts/graph/manifest.py +++ b/core/dbt/contracts/graph/manifest.py @@ -366,7 +366,8 @@ def build_node_edges(nodes: List[ManifestNode]): forward_edges: Dict[str, List[str]] = {n.unique_id: [] for n in nodes} for node in nodes: backward_edges[node.unique_id] = node.depends_on_nodes[:] - for unique_id in node.depends_on_nodes: + backward_edges[node.unique_id].extend(node.depends_on_public_nodes[:]) + for unique_id in backward_edges[node.unique_id]: if unique_id in forward_edges.keys(): forward_edges[unique_id].append(node.unique_id) return _sort_values(forward_edges), _sort_values(backward_edges) @@ -816,6 +817,7 @@ def build_parent_and_child_maps(self): self.sources.values(), self.exposures.values(), self.metrics.values(), + self.public_nodes.values(), ) ) forward_edges, backward_edges = build_node_edges(edge_members) diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index fd441b8c045..49620f2c1f5 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -571,6 +571,10 @@ def __post_serialize__(self, dct): def depends_on_nodes(self): return self.depends_on.nodes + @property + def depends_on_public_nodes(self): + return self.depends_on.public_nodes + @property def depends_on_macros(self): return self.depends_on.macros @@ -787,6 +791,10 @@ def same_body(self, other) -> bool: def depends_on_nodes(self): return [] + @property + def depends_on_public_nodes(self): + return [] + @property def depends_on_macros(self) -> List[str]: return self.depends_on.macros @@ -1121,6 +1129,10 @@ def is_ephemeral_model(self): def depends_on_nodes(self): return [] + @property + def depends_on_public_nodes(self): + return [] + @property def depends_on(self): return DependsOn(macros=[], nodes=[]) @@ -1170,6 +1182,10 @@ class Exposure(GraphNode): def depends_on_nodes(self): return self.depends_on.nodes + @property + def depends_on_public_nodes(self): + return [] + @property def search_name(self): return self.name @@ -1262,6 +1278,10 @@ class Metric(GraphNode): def depends_on_nodes(self): return self.depends_on.nodes + @property + def depends_on_public_nodes(self): + return [] + @property def search_name(self): return self.name diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py index f75d7b5ffc3..5d9587f0a2d 100644 --- a/core/dbt/contracts/publication.py +++ b/core/dbt/contracts/publication.py @@ -33,17 +33,17 @@ class PublicModel(dbtClassMixin, ManifestOrPublicNode): package_name: str unique_id: str relation_name: str - version: Optional[NodeVersion] = None # It's not totally clear if we actually need this + version: Optional[NodeVersion] = None is_latest_version: bool = False # list of model unique_ids public_dependencies: List[str] = field(default_factory=list) - # Adding to simplify some ref resolution code for now. + # Needed for ref resolution code @property def resource_type(self): return NodeType.Model - # Adding to simplify some ref resolution code for now. + # Needed for ref resolution code @property def access(self): return AccessType.Public @@ -55,6 +55,14 @@ def search_name(self): else: return f"{self.name}.v{self.version}" + @property + def depends_on_nodes(self): + return [] + + @property + def depends_on_public_nodes(self): + return [] + @dataclass class PublicationMandatory: diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index fc5f2e76b3f..d8dea34cc47 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -616,7 +616,7 @@ def write_manifest_for_partial_parse(self): def write_artifacts(self): # write out manifest.json - # TODO: check for overlap with parse command writing manifest + # The following will also cause the parent and child maps to be built write_manifest(self.manifest, self.root_project.target_path) # build publication metadata diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 8e71f6367bc..85d26f8bf5c 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -144,8 +144,11 @@ def test_dependencies(self, project): manifest = run_dbt(["parse"]) model_id = "model.test.ext_node_model" + public_model_id = "model.marketing.fct_one" model = manifest.nodes[model_id] - assert model.depends_on.public_nodes == ["model.marketing.fct_one"] + assert model.depends_on.public_nodes == [public_model_id] + assert public_model_id in manifest.parent_map + assert manifest.parent_map[model_id] == [public_model_id] # Create the relation for the public node (fct_one) project.run_sql(f'create table "{project.test_schema}"."fct_one" (id integer)') From c3c294056892c749c6aac1d5ba6a0f1174473047 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Mon, 17 Apr 2023 13:53:12 -0400 Subject: [PATCH 18/50] Bump manifest version and fix tests, use ModelDependsOn --- core/dbt/contracts/graph/manifest.py | 13 +- core/dbt/contracts/graph/manifest_upgrade.py | 2 + core/dbt/contracts/graph/nodes.py | 13 +- schemas/dbt/manifest/v10.json | 5052 +++++++++++++++++ test/unit/test_contracts_graph_compiled.py | 9 +- test/unit/test_contracts_graph_parsed.py | 11 +- test/unit/test_graph_selector_methods.py | 4 +- test/unit/test_manifest.py | 35 +- .../artifacts/data/state/v10/manifest.json | 1 + .../functional/artifacts/expected_manifest.py | 30 +- tests/functional/artifacts/test_artifacts.py | 1 + .../artifacts/test_previous_version_state.py | 4 +- tests/functional/list/test_list.py | 17 +- 13 files changed, 5149 insertions(+), 43 deletions(-) create mode 100644 schemas/dbt/manifest/v10.json create mode 100644 tests/functional/artifacts/data/state/v10/manifest.json diff --git a/core/dbt/contracts/graph/manifest.py b/core/dbt/contracts/graph/manifest.py index d0b8e959c0f..9d8b6c8ce82 100644 --- a/core/dbt/contracts/graph/manifest.py +++ b/core/dbt/contracts/graph/manifest.py @@ -646,9 +646,9 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin): source_patches: MutableMapping[SourceKey, SourcePatch] = field(default_factory=dict) disabled: MutableMapping[str, List[GraphMemberNode]] = field(default_factory=dict) env_vars: MutableMapping[str, str] = field(default_factory=dict) + public_nodes: MutableMapping[str, PublicModel] = field(default_factory=dict) dependencies: Optional[Dependencies] = None publications: MutableMapping[str, Publication] = field(default_factory=dict) - public_nodes: MutableMapping[str, PublicModel] = field(default_factory=dict) _doc_lookup: Optional[DocLookup] = field( default=None, metadata={"serialize": lambda x: None, "deserialize": lambda x: None} @@ -804,6 +804,7 @@ def deepcopy(self): selectors={k: _deepcopy(v) for k, v in self.selectors.items()}, metadata=self.metadata, disabled={k: _deepcopy(v) for k, v in self.disabled.items()}, + public_nodes={k: _deepcopy(v) for k, v in self.public_nodes.items()}, files={k: _deepcopy(v) for k, v in self.files.items()}, state_check=_deepcopy(self.state_check), ) @@ -861,6 +862,7 @@ def writable_manifest(self): selectors=self.selectors, metadata=self.metadata, disabled=self.disabled, + public_nodes=self.public_nodes, child_map=self.child_map, parent_map=self.parent_map, group_map=self.group_map, @@ -1189,6 +1191,7 @@ def __reduce_ex__(self, protocol): self.source_patches, self.disabled, self.env_vars, + self.public_nodes, self._doc_lookup, self._source_lookup, self._ref_lookup, @@ -1212,7 +1215,7 @@ def __init__(self, macros): @dataclass -@schema_version("manifest", 9) +@schema_version("manifest", 10) class WritableManifest(ArtifactMixin): nodes: Mapping[UniqueID, ManifestNode] = field( metadata=dict(description=("The nodes defined in the dbt project and its dependencies")) @@ -1258,6 +1261,9 @@ class WritableManifest(ArtifactMixin): description="A mapping from group names to their nodes", ) ) + public_nodes: Mapping[UniqueID, PublicModel] = field( + metadata=dict(description=("The public models used in the dbt project")) + ) metadata: ManifestMetadata = field( metadata=dict( description="Metadata about the manifest", @@ -1272,13 +1278,14 @@ def compatible_previous_versions(self): ("manifest", 6), ("manifest", 7), ("manifest", 8), + ("manifest", 9), ] @classmethod def upgrade_schema_version(cls, data): """This overrides the "upgrade_schema_version" call in VersionedSchema (via ArtifactMixin) to modify the dictionary passed in from earlier versions of the manifest.""" - if get_manifest_schema_version(data) <= 8: + if get_manifest_schema_version(data) <= 9: data = upgrade_manifest_json(data) return cls.from_dict(data) diff --git a/core/dbt/contracts/graph/manifest_upgrade.py b/core/dbt/contracts/graph/manifest_upgrade.py index 1b94f5e3e4a..a3c299e8a25 100644 --- a/core/dbt/contracts/graph/manifest_upgrade.py +++ b/core/dbt/contracts/graph/manifest_upgrade.py @@ -105,6 +105,8 @@ def upgrade_manifest_json(manifest: dict) -> dict: manifest["groups"] = {} if "group_map" not in manifest: manifest["group_map"] = {} + if "public_nodes" not in manifest: + manifest["public_nodes"] = {} for metric_content in manifest.get("metrics", {}).values(): # handle attr renames + value translation ("expression" -> "derived") metric_content = rename_metric_attr(metric_content) diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index 49620f2c1f5..6710b77200a 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -255,13 +255,17 @@ def add_macro(self, value: str): @dataclass class DependsOn(MacroDependsOn): nodes: List[str] = field(default_factory=list) - public_nodes: List[str] = field(default_factory=list) def add_node(self, value: str): if value not in self.nodes: self.nodes.append(value) +@dataclass +class ModelDependsOn(DependsOn): + public_nodes: List[str] = field(default_factory=list) + + @dataclass class ParsedNodeMandatory(GraphNode, HasRelationMetadata, Replaceable): alias: str @@ -573,7 +577,7 @@ def depends_on_nodes(self): @property def depends_on_public_nodes(self): - return self.depends_on.public_nodes + return [] @property def depends_on_macros(self): @@ -673,11 +677,16 @@ class ModelNode(CompiledNode): constraints: List[ModelLevelConstraint] = field(default_factory=list) version: Optional[NodeVersion] = None latest_version: Optional[NodeVersion] = None + depends_on: ModelDependsOn = field(default_factory=ModelDependsOn) @property def is_latest_version(self): return self.version and self.version == self.latest_version + @property + def depends_on_public_nodes(self): + return self.depends_on.public_nodes + @property def search_name(self): if self.version is None: diff --git a/schemas/dbt/manifest/v10.json b/schemas/dbt/manifest/v10.json new file mode 100644 index 00000000000..8ccb59257c6 --- /dev/null +++ b/schemas/dbt/manifest/v10.json @@ -0,0 +1,5052 @@ +{ + "type": "object", + "required": [ + "metadata", + "nodes", + "sources", + "macros", + "docs", + "exposures", + "metrics", + "groups", + "selectors", + "public_nodes" + ], + "properties": { + "metadata": { + "$ref": "#/definitions/ManifestMetadata", + "description": "Metadata about the manifest" + }, + "nodes": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/definitions/AnalysisNode" + }, + { + "$ref": "#/definitions/SingularTestNode" + }, + { + "$ref": "#/definitions/HookNode" + }, + { + "$ref": "#/definitions/ModelNode" + }, + { + "$ref": "#/definitions/RPCNode" + }, + { + "$ref": "#/definitions/SqlNode" + }, + { + "$ref": "#/definitions/GenericTestNode" + }, + { + "$ref": "#/definitions/SnapshotNode" + }, + { + "$ref": "#/definitions/SeedNode" + } + ] + }, + "description": "The nodes defined in the dbt project and its dependencies" + }, + "sources": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/SourceDefinition" + }, + "description": "The sources defined in the dbt project and its dependencies" + }, + "macros": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Macro" + }, + "description": "The macros defined in the dbt project and its dependencies" + }, + "docs": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Documentation" + }, + "description": "The docs defined in the dbt project and its dependencies" + }, + "exposures": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Exposure" + }, + "description": "The exposures defined in the dbt project and its dependencies" + }, + "metrics": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Metric" + }, + "description": "The metrics defined in the dbt project and its dependencies" + }, + "groups": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Group" + }, + "description": "The groups defined in the dbt project" + }, + "selectors": { + "type": "object", + "description": "The selectors defined in selectors.yml" + }, + "disabled": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/definitions/AnalysisNode" + }, + { + "$ref": "#/definitions/SingularTestNode" + }, + { + "$ref": "#/definitions/HookNode" + }, + { + "$ref": "#/definitions/ModelNode" + }, + { + "$ref": "#/definitions/RPCNode" + }, + { + "$ref": "#/definitions/SqlNode" + }, + { + "$ref": "#/definitions/GenericTestNode" + }, + { + "$ref": "#/definitions/SnapshotNode" + }, + { + "$ref": "#/definitions/SeedNode" + }, + { + "$ref": "#/definitions/SourceDefinition" + }, + { + "$ref": "#/definitions/Exposure" + }, + { + "$ref": "#/definitions/Metric" + } + ] + } + } + }, + { + "type": "null" + } + ], + "description": "A mapping of the disabled nodes in the target" + }, + "parent_map": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "type": "null" + } + ], + "description": "A mapping from\u00a0child nodes to their dependencies" + }, + "child_map": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "type": "null" + } + ], + "description": "A mapping from parent nodes to their dependents" + }, + "group_map": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "type": "null" + } + ], + "description": "A mapping from group names to their nodes" + }, + "public_nodes": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/PublicModel" + }, + "description": "The public models used in the dbt project" + } + }, + "additionalProperties": false, + "description": "WritableManifest(metadata: dbt.contracts.graph.manifest.ManifestMetadata, nodes: Mapping[str, Union[dbt.contracts.graph.nodes.AnalysisNode, dbt.contracts.graph.nodes.SingularTestNode, dbt.contracts.graph.nodes.HookNode, dbt.contracts.graph.nodes.ModelNode, dbt.contracts.graph.nodes.RPCNode, dbt.contracts.graph.nodes.SqlNode, dbt.contracts.graph.nodes.GenericTestNode, dbt.contracts.graph.nodes.SnapshotNode, dbt.contracts.graph.nodes.SeedNode]], sources: Mapping[str, dbt.contracts.graph.nodes.SourceDefinition], macros: Mapping[str, dbt.contracts.graph.nodes.Macro], docs: Mapping[str, dbt.contracts.graph.nodes.Documentation], exposures: Mapping[str, dbt.contracts.graph.nodes.Exposure], metrics: Mapping[str, dbt.contracts.graph.nodes.Metric], groups: Mapping[str, dbt.contracts.graph.nodes.Group], selectors: Mapping[str, Any], disabled: Optional[Mapping[str, List[Union[dbt.contracts.graph.nodes.AnalysisNode, dbt.contracts.graph.nodes.SingularTestNode, dbt.contracts.graph.nodes.HookNode, dbt.contracts.graph.nodes.ModelNode, dbt.contracts.graph.nodes.RPCNode, dbt.contracts.graph.nodes.SqlNode, dbt.contracts.graph.nodes.GenericTestNode, dbt.contracts.graph.nodes.SnapshotNode, dbt.contracts.graph.nodes.SeedNode, dbt.contracts.graph.nodes.SourceDefinition, dbt.contracts.graph.nodes.Exposure, dbt.contracts.graph.nodes.Metric]]]], parent_map: Optional[Dict[str, List[str]]], child_map: Optional[Dict[str, List[str]]], group_map: Optional[Dict[str, List[str]]], public_nodes: Mapping[str, dbt.contracts.publication.PublicModel])", + "definitions": { + "ManifestMetadata": { + "type": "object", + "required": [], + "properties": { + "dbt_schema_version": { + "type": "string", + "default": "https://schemas.getdbt.com/dbt/manifest/v10.json" + }, + "dbt_version": { + "type": "string", + "default": "1.5.0rc1" + }, + "generated_at": { + "type": "string", + "format": "date-time", + "default": "2023-04-17T20:41:37.271352Z" + }, + "invocation_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "9e71e98b-a613-4f11-aa9d-f826b834fd11" + }, + "env": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "default": {} + }, + "project_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "A unique identifier for the project" + }, + "user_id": { + "oneOf": [ + { + "type": "string", + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, + { + "type": "null" + } + ], + "description": "A unique identifier for the user" + }, + "send_anonymous_usage_stats": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Whether dbt is configured to send anonymous usage statistics" + }, + "adapter_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The type name of the adapter" + } + }, + "additionalProperties": false, + "description": "Metadata for the manifest." + }, + "AnalysisNode": { + "type": "object", + "required": [ + "schema", + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "fqn", + "alias", + "checksum" + ], + "properties": { + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "analysis" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "fqn": { + "type": "array", + "items": { + "type": "string" + } + }, + "alias": { + "type": "string" + }, + "checksum": { + "$ref": "#/definitions/FileHash" + }, + "config": { + "$ref": "#/definitions/NodeConfig", + "default": { + "enabled": true, + "alias": null, + "schema": null, + "database": null, + "tags": [], + "meta": {}, + "group": null, + "materialized": "view", + "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 + }, + "contract": { + "enforced": false + }, + "post-hook": [], + "pre-hook": [] + } + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "description": { + "type": "string", + "default": "" + }, + "columns": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ColumnInfo" + }, + "default": {} + }, + "meta": { + "type": "object", + "default": {} + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "docs": { + "$ref": "#/definitions/Docs", + "default": { + "show": true, + "node_color": null + } + }, + "patch_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "build_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "deferred": { + "type": "boolean", + "default": false + }, + "unrendered_config": { + "type": "object", + "default": {} + }, + "created_at": { + "type": "number", + "default": 1681764097.276032 + }, + "config_call_dict": { + "type": "object", + "default": {} + }, + "relation_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "raw_code": { + "type": "string", + "default": "" + }, + "language": { + "type": "string", + "default": "sql" + }, + "refs": { + "type": "array", + "items": { + "$ref": "#/definitions/RefArgs" + }, + "default": [] + }, + "sources": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "metrics": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "depends_on": { + "$ref": "#/definitions/DependsOn", + "default": { + "macros": [], + "nodes": [] + } + }, + "compiled_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "compiled": { + "type": "boolean", + "default": false + }, + "compiled_code": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "extra_ctes_injected": { + "type": "boolean", + "default": false + }, + "extra_ctes": { + "type": "array", + "items": { + "$ref": "#/definitions/InjectedCTE" + }, + "default": [] + }, + "contract": { + "$ref": "#/definitions/Contract", + "default": { + "enforced": false, + "checksum": null + } + } + }, + "additionalProperties": false, + "description": "AnalysisNode(database: Optional[str], schema: str, name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], alias: str, checksum: dbt.contracts.files.FileHash, config: dbt.contracts.graph.model_config.NodeConfig = , _event_status: Dict[str, Any] = , tags: List[str] = , description: str = '', columns: Dict[str, dbt.contracts.graph.nodes.ColumnInfo] = , meta: Dict[str, Any] = , group: Optional[str] = None, docs: dbt.contracts.graph.unparsed.Docs = , patch_path: Optional[str] = None, build_path: Optional[str] = None, deferred: bool = False, unrendered_config: Dict[str, Any] = , created_at: float = , config_call_dict: Dict[str, Any] = , relation_name: Optional[str] = None, raw_code: str = '', language: str = 'sql', refs: List[dbt.contracts.graph.nodes.RefArgs] = , sources: List[List[str]] = , metrics: List[List[str]] = , depends_on: dbt.contracts.graph.nodes.DependsOn = , compiled_path: Optional[str] = None, compiled: bool = False, compiled_code: Optional[str] = None, extra_ctes_injected: bool = False, extra_ctes: List[dbt.contracts.graph.nodes.InjectedCTE] = , _pre_injected_sql: Optional[str] = None, contract: dbt.contracts.graph.nodes.Contract = )" + }, + "FileHash": { + "type": "object", + "required": [ + "name", + "checksum" + ], + "properties": { + "name": { + "type": "string" + }, + "checksum": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "FileHash(name: str, checksum: str)" + }, + "NodeConfig": { + "type": "object", + "required": [], + "properties": { + "enabled": { + "type": "boolean", + "default": true + }, + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tags": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ], + "default": [] + }, + "meta": { + "type": "object", + "default": {} + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "materialized": { + "type": "string", + "default": "view" + }, + "incremental_strategy": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "persist_docs": { + "type": "object", + "default": {} + }, + "post-hook": { + "type": "array", + "items": { + "$ref": "#/definitions/Hook" + }, + "default": [] + }, + "pre-hook": { + "type": "array", + "items": { + "$ref": "#/definitions/Hook" + }, + "default": [] + }, + "quoting": { + "type": "object", + "default": {} + }, + "column_types": { + "type": "object", + "default": {} + }, + "full_refresh": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "unique_key": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "on_schema_change": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "ignore" + }, + "grants": { + "type": "object", + "default": {} + }, + "packages": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "docs": { + "$ref": "#/definitions/Docs", + "default": { + "show": true, + "node_color": null + } + }, + "contract": { + "$ref": "#/definitions/ContractConfig", + "default": { + "enforced": false + } + } + }, + "additionalProperties": true, + "description": "NodeConfig(_extra: Dict[str, Any] = , enabled: bool = True, alias: Optional[str] = None, schema: Optional[str] = None, database: Optional[str] = None, tags: Union[List[str], str] = , meta: Dict[str, Any] = , group: Optional[str] = None, materialized: str = 'view', incremental_strategy: Optional[str] = None, persist_docs: Dict[str, Any] = , post_hook: List[dbt.contracts.graph.model_config.Hook] = , pre_hook: List[dbt.contracts.graph.model_config.Hook] = , quoting: Dict[str, Any] = , column_types: Dict[str, Any] = , full_refresh: Optional[bool] = None, unique_key: Union[str, List[str], NoneType] = None, on_schema_change: Optional[str] = 'ignore', grants: Dict[str, Any] = , packages: List[str] = , docs: dbt.contracts.graph.unparsed.Docs = , contract: dbt.contracts.graph.model_config.ContractConfig = )" + }, + "Hook": { + "type": "object", + "required": [ + "sql" + ], + "properties": { + "sql": { + "type": "string" + }, + "transaction": { + "type": "boolean", + "default": true + }, + "index": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "Hook(sql: str, transaction: bool = True, index: Optional[int] = None)" + }, + "Docs": { + "type": "object", + "required": [], + "properties": { + "show": { + "type": "boolean", + "default": true + }, + "node_color": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "Docs(show: bool = True, node_color: Optional[str] = None)" + }, + "ContractConfig": { + "type": "object", + "required": [], + "properties": { + "enforced": { + "type": "boolean", + "default": false + } + }, + "additionalProperties": false, + "description": "ContractConfig(enforced: bool = False)" + }, + "ColumnInfo": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string", + "default": "" + }, + "meta": { + "type": "object", + "default": {} + }, + "data_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "constraints": { + "type": "array", + "items": { + "$ref": "#/definitions/ColumnLevelConstraint" + }, + "default": [] + }, + "quote": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": true, + "description": "Used in all ManifestNodes and SourceDefinition" + }, + "ColumnLevelConstraint": { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "check", + "not_null", + "unique", + "primary_key", + "foreign_key", + "custom" + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warn_unenforced": { + "type": "boolean", + "default": true + }, + "warn_unsupported": { + "type": "boolean", + "default": true + } + }, + "additionalProperties": false, + "description": "ColumnLevelConstraint(type: dbt.contracts.graph.nodes.ConstraintType, name: Optional[str] = None, expression: Optional[str] = None, warn_unenforced: bool = True, warn_unsupported: bool = True)" + }, + "RefArgs": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string" + }, + "package": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "version": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "RefArgs(name: str, package: Optional[str] = None, version: Union[str, float, NoneType] = None)" + }, + "DependsOn": { + "type": "object", + "required": [], + "properties": { + "macros": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": false, + "description": "DependsOn(macros: List[str] = , nodes: List[str] = )" + }, + "InjectedCTE": { + "type": "object", + "required": [ + "id", + "sql" + ], + "properties": { + "id": { + "type": "string" + }, + "sql": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Used in CompiledNodes as part of ephemeral model processing" + }, + "Contract": { + "type": "object", + "required": [], + "properties": { + "enforced": { + "type": "boolean", + "default": false + }, + "checksum": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "Contract(enforced: bool = False, checksum: Optional[str] = None)" + }, + "SingularTestNode": { + "type": "object", + "required": [ + "schema", + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "fqn", + "alias", + "checksum" + ], + "properties": { + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "test" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "fqn": { + "type": "array", + "items": { + "type": "string" + } + }, + "alias": { + "type": "string" + }, + "checksum": { + "$ref": "#/definitions/FileHash" + }, + "config": { + "$ref": "#/definitions/TestConfig", + "default": { + "enabled": true, + "alias": null, + "schema": "dbt_test__audit", + "database": null, + "tags": [], + "meta": {}, + "group": null, + "materialized": "test", + "severity": "ERROR", + "store_failures": null, + "where": null, + "limit": null, + "fail_calc": "count(*)", + "warn_if": "!= 0", + "error_if": "!= 0" + } + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "description": { + "type": "string", + "default": "" + }, + "columns": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ColumnInfo" + }, + "default": {} + }, + "meta": { + "type": "object", + "default": {} + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "docs": { + "$ref": "#/definitions/Docs", + "default": { + "show": true, + "node_color": null + } + }, + "patch_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "build_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "deferred": { + "type": "boolean", + "default": false + }, + "unrendered_config": { + "type": "object", + "default": {} + }, + "created_at": { + "type": "number", + "default": 1681764097.279396 + }, + "config_call_dict": { + "type": "object", + "default": {} + }, + "relation_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "raw_code": { + "type": "string", + "default": "" + }, + "language": { + "type": "string", + "default": "sql" + }, + "refs": { + "type": "array", + "items": { + "$ref": "#/definitions/RefArgs" + }, + "default": [] + }, + "sources": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "metrics": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "depends_on": { + "$ref": "#/definitions/DependsOn", + "default": { + "macros": [], + "nodes": [] + } + }, + "compiled_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "compiled": { + "type": "boolean", + "default": false + }, + "compiled_code": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "extra_ctes_injected": { + "type": "boolean", + "default": false + }, + "extra_ctes": { + "type": "array", + "items": { + "$ref": "#/definitions/InjectedCTE" + }, + "default": [] + }, + "contract": { + "$ref": "#/definitions/Contract", + "default": { + "enforced": false, + "checksum": null + } + } + }, + "additionalProperties": false, + "description": "SingularTestNode(database: Optional[str], schema: str, name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], alias: str, checksum: dbt.contracts.files.FileHash, config: dbt.contracts.graph.model_config.TestConfig = , _event_status: Dict[str, Any] = , tags: List[str] = , description: str = '', columns: Dict[str, dbt.contracts.graph.nodes.ColumnInfo] = , meta: Dict[str, Any] = , group: Optional[str] = None, docs: dbt.contracts.graph.unparsed.Docs = , patch_path: Optional[str] = None, build_path: Optional[str] = None, deferred: bool = False, unrendered_config: Dict[str, Any] = , created_at: float = , config_call_dict: Dict[str, Any] = , relation_name: Optional[str] = None, raw_code: str = '', language: str = 'sql', refs: List[dbt.contracts.graph.nodes.RefArgs] = , sources: List[List[str]] = , metrics: List[List[str]] = , depends_on: dbt.contracts.graph.nodes.DependsOn = , compiled_path: Optional[str] = None, compiled: bool = False, compiled_code: Optional[str] = None, extra_ctes_injected: bool = False, extra_ctes: List[dbt.contracts.graph.nodes.InjectedCTE] = , _pre_injected_sql: Optional[str] = None, contract: dbt.contracts.graph.nodes.Contract = )" + }, + "TestConfig": { + "type": "object", + "required": [], + "properties": { + "enabled": { + "type": "boolean", + "default": true + }, + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "dbt_test__audit" + }, + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tags": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ], + "default": [] + }, + "meta": { + "type": "object", + "default": {} + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "materialized": { + "type": "string", + "default": "test" + }, + "severity": { + "type": "string", + "pattern": "^([Ww][Aa][Rr][Nn]|[Ee][Rr][Rr][Oo][Rr])$", + "default": "ERROR" + }, + "store_failures": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "where": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "limit": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "fail_calc": { + "type": "string", + "default": "count(*)" + }, + "warn_if": { + "type": "string", + "default": "!= 0" + }, + "error_if": { + "type": "string", + "default": "!= 0" + } + }, + "additionalProperties": true, + "description": "TestConfig(_extra: Dict[str, Any] = , enabled: bool = True, alias: Optional[str] = None, schema: Optional[str] = 'dbt_test__audit', database: Optional[str] = None, tags: Union[List[str], str] = , meta: Dict[str, Any] = , group: Optional[str] = None, materialized: str = 'test', severity: dbt.contracts.graph.model_config.Severity = 'ERROR', store_failures: Optional[bool] = None, where: Optional[str] = None, limit: Optional[int] = None, fail_calc: str = 'count(*)', warn_if: str = '!= 0', error_if: str = '!= 0')" + }, + "HookNode": { + "type": "object", + "required": [ + "schema", + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "fqn", + "alias", + "checksum" + ], + "properties": { + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "operation" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "fqn": { + "type": "array", + "items": { + "type": "string" + } + }, + "alias": { + "type": "string" + }, + "checksum": { + "$ref": "#/definitions/FileHash" + }, + "config": { + "$ref": "#/definitions/NodeConfig", + "default": { + "enabled": true, + "alias": null, + "schema": null, + "database": null, + "tags": [], + "meta": {}, + "group": null, + "materialized": "view", + "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 + }, + "contract": { + "enforced": false + }, + "post-hook": [], + "pre-hook": [] + } + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "description": { + "type": "string", + "default": "" + }, + "columns": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ColumnInfo" + }, + "default": {} + }, + "meta": { + "type": "object", + "default": {} + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "docs": { + "$ref": "#/definitions/Docs", + "default": { + "show": true, + "node_color": null + } + }, + "patch_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "build_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "deferred": { + "type": "boolean", + "default": false + }, + "unrendered_config": { + "type": "object", + "default": {} + }, + "created_at": { + "type": "number", + "default": 1681764097.281048 + }, + "config_call_dict": { + "type": "object", + "default": {} + }, + "relation_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "raw_code": { + "type": "string", + "default": "" + }, + "language": { + "type": "string", + "default": "sql" + }, + "refs": { + "type": "array", + "items": { + "$ref": "#/definitions/RefArgs" + }, + "default": [] + }, + "sources": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "metrics": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "depends_on": { + "$ref": "#/definitions/DependsOn", + "default": { + "macros": [], + "nodes": [] + } + }, + "compiled_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "compiled": { + "type": "boolean", + "default": false + }, + "compiled_code": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "extra_ctes_injected": { + "type": "boolean", + "default": false + }, + "extra_ctes": { + "type": "array", + "items": { + "$ref": "#/definitions/InjectedCTE" + }, + "default": [] + }, + "contract": { + "$ref": "#/definitions/Contract", + "default": { + "enforced": false, + "checksum": null + } + }, + "index": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "HookNode(database: Optional[str], schema: str, name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], alias: str, checksum: dbt.contracts.files.FileHash, config: dbt.contracts.graph.model_config.NodeConfig = , _event_status: Dict[str, Any] = , tags: List[str] = , description: str = '', columns: Dict[str, dbt.contracts.graph.nodes.ColumnInfo] = , meta: Dict[str, Any] = , group: Optional[str] = None, docs: dbt.contracts.graph.unparsed.Docs = , patch_path: Optional[str] = None, build_path: Optional[str] = None, deferred: bool = False, unrendered_config: Dict[str, Any] = , created_at: float = , config_call_dict: Dict[str, Any] = , relation_name: Optional[str] = None, raw_code: str = '', language: str = 'sql', refs: List[dbt.contracts.graph.nodes.RefArgs] = , sources: List[List[str]] = , metrics: List[List[str]] = , depends_on: dbt.contracts.graph.nodes.DependsOn = , compiled_path: Optional[str] = None, compiled: bool = False, compiled_code: Optional[str] = None, extra_ctes_injected: bool = False, extra_ctes: List[dbt.contracts.graph.nodes.InjectedCTE] = , _pre_injected_sql: Optional[str] = None, contract: dbt.contracts.graph.nodes.Contract = , index: Optional[int] = None)" + }, + "ModelNode": { + "type": "object", + "required": [ + "schema", + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "fqn", + "alias", + "checksum" + ], + "properties": { + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "model" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "fqn": { + "type": "array", + "items": { + "type": "string" + } + }, + "alias": { + "type": "string" + }, + "checksum": { + "$ref": "#/definitions/FileHash" + }, + "config": { + "$ref": "#/definitions/NodeConfig", + "default": { + "enabled": true, + "alias": null, + "schema": null, + "database": null, + "tags": [], + "meta": {}, + "group": null, + "materialized": "view", + "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 + }, + "contract": { + "enforced": false + }, + "post-hook": [], + "pre-hook": [] + } + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "description": { + "type": "string", + "default": "" + }, + "columns": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ColumnInfo" + }, + "default": {} + }, + "meta": { + "type": "object", + "default": {} + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "docs": { + "$ref": "#/definitions/Docs", + "default": { + "show": true, + "node_color": null + } + }, + "patch_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "build_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "deferred": { + "type": "boolean", + "default": false + }, + "unrendered_config": { + "type": "object", + "default": {} + }, + "created_at": { + "type": "number", + "default": 1681764097.2827551 + }, + "config_call_dict": { + "type": "object", + "default": {} + }, + "relation_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "raw_code": { + "type": "string", + "default": "" + }, + "language": { + "type": "string", + "default": "sql" + }, + "refs": { + "type": "array", + "items": { + "$ref": "#/definitions/RefArgs" + }, + "default": [] + }, + "sources": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "metrics": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "depends_on": { + "$ref": "#/definitions/ModelDependsOn", + "default": { + "macros": [], + "nodes": [], + "public_nodes": [] + } + }, + "compiled_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "compiled": { + "type": "boolean", + "default": false + }, + "compiled_code": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "extra_ctes_injected": { + "type": "boolean", + "default": false + }, + "extra_ctes": { + "type": "array", + "items": { + "$ref": "#/definitions/InjectedCTE" + }, + "default": [] + }, + "contract": { + "$ref": "#/definitions/Contract", + "default": { + "enforced": false, + "checksum": null + } + }, + "access": { + "type": "string", + "enum": [ + "protected", + "private", + "public" + ], + "default": "protected" + }, + "constraints": { + "type": "array", + "items": { + "$ref": "#/definitions/ModelLevelConstraint" + }, + "default": [] + }, + "version": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "latest_version": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "ModelNode(database: Optional[str], schema: str, name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], alias: str, checksum: dbt.contracts.files.FileHash, config: dbt.contracts.graph.model_config.NodeConfig = , _event_status: Dict[str, Any] = , tags: List[str] = , description: str = '', columns: Dict[str, dbt.contracts.graph.nodes.ColumnInfo] = , meta: Dict[str, Any] = , group: Optional[str] = None, docs: dbt.contracts.graph.unparsed.Docs = , patch_path: Optional[str] = None, build_path: Optional[str] = None, deferred: bool = False, unrendered_config: Dict[str, Any] = , created_at: float = , config_call_dict: Dict[str, Any] = , relation_name: Optional[str] = None, raw_code: str = '', language: str = 'sql', refs: List[dbt.contracts.graph.nodes.RefArgs] = , sources: List[List[str]] = , metrics: List[List[str]] = , depends_on: dbt.contracts.graph.nodes.ModelDependsOn = , compiled_path: Optional[str] = None, compiled: bool = False, compiled_code: Optional[str] = None, extra_ctes_injected: bool = False, extra_ctes: List[dbt.contracts.graph.nodes.InjectedCTE] = , _pre_injected_sql: Optional[str] = None, contract: dbt.contracts.graph.nodes.Contract = , access: dbt.node_types.AccessType = , constraints: List[dbt.contracts.graph.nodes.ModelLevelConstraint] = , version: Union[str, float, NoneType] = None, latest_version: Union[str, float, NoneType] = None)" + }, + "ModelDependsOn": { + "type": "object", + "required": [], + "properties": { + "macros": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "public_nodes": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": false, + "description": "ModelDependsOn(macros: List[str] = , nodes: List[str] = , public_nodes: List[str] = )" + }, + "ModelLevelConstraint": { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "check", + "not_null", + "unique", + "primary_key", + "foreign_key", + "custom" + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warn_unenforced": { + "type": "boolean", + "default": true + }, + "warn_unsupported": { + "type": "boolean", + "default": true + }, + "columns": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": false, + "description": "ModelLevelConstraint(type: dbt.contracts.graph.nodes.ConstraintType, name: Optional[str] = None, expression: Optional[str] = None, warn_unenforced: bool = True, warn_unsupported: bool = True, columns: List[str] = )" + }, + "RPCNode": { + "type": "object", + "required": [ + "schema", + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "fqn", + "alias", + "checksum" + ], + "properties": { + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "rpc" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "fqn": { + "type": "array", + "items": { + "type": "string" + } + }, + "alias": { + "type": "string" + }, + "checksum": { + "$ref": "#/definitions/FileHash" + }, + "config": { + "$ref": "#/definitions/NodeConfig", + "default": { + "enabled": true, + "alias": null, + "schema": null, + "database": null, + "tags": [], + "meta": {}, + "group": null, + "materialized": "view", + "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 + }, + "contract": { + "enforced": false + }, + "post-hook": [], + "pre-hook": [] + } + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "description": { + "type": "string", + "default": "" + }, + "columns": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ColumnInfo" + }, + "default": {} + }, + "meta": { + "type": "object", + "default": {} + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "docs": { + "$ref": "#/definitions/Docs", + "default": { + "show": true, + "node_color": null + } + }, + "patch_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "build_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "deferred": { + "type": "boolean", + "default": false + }, + "unrendered_config": { + "type": "object", + "default": {} + }, + "created_at": { + "type": "number", + "default": 1681764097.285154 + }, + "config_call_dict": { + "type": "object", + "default": {} + }, + "relation_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "raw_code": { + "type": "string", + "default": "" + }, + "language": { + "type": "string", + "default": "sql" + }, + "refs": { + "type": "array", + "items": { + "$ref": "#/definitions/RefArgs" + }, + "default": [] + }, + "sources": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "metrics": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "depends_on": { + "$ref": "#/definitions/DependsOn", + "default": { + "macros": [], + "nodes": [] + } + }, + "compiled_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "compiled": { + "type": "boolean", + "default": false + }, + "compiled_code": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "extra_ctes_injected": { + "type": "boolean", + "default": false + }, + "extra_ctes": { + "type": "array", + "items": { + "$ref": "#/definitions/InjectedCTE" + }, + "default": [] + }, + "contract": { + "$ref": "#/definitions/Contract", + "default": { + "enforced": false, + "checksum": null + } + } + }, + "additionalProperties": false, + "description": "RPCNode(database: Optional[str], schema: str, name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], alias: str, checksum: dbt.contracts.files.FileHash, config: dbt.contracts.graph.model_config.NodeConfig = , _event_status: Dict[str, Any] = , tags: List[str] = , description: str = '', columns: Dict[str, dbt.contracts.graph.nodes.ColumnInfo] = , meta: Dict[str, Any] = , group: Optional[str] = None, docs: dbt.contracts.graph.unparsed.Docs = , patch_path: Optional[str] = None, build_path: Optional[str] = None, deferred: bool = False, unrendered_config: Dict[str, Any] = , created_at: float = , config_call_dict: Dict[str, Any] = , relation_name: Optional[str] = None, raw_code: str = '', language: str = 'sql', refs: List[dbt.contracts.graph.nodes.RefArgs] = , sources: List[List[str]] = , metrics: List[List[str]] = , depends_on: dbt.contracts.graph.nodes.DependsOn = , compiled_path: Optional[str] = None, compiled: bool = False, compiled_code: Optional[str] = None, extra_ctes_injected: bool = False, extra_ctes: List[dbt.contracts.graph.nodes.InjectedCTE] = , _pre_injected_sql: Optional[str] = None, contract: dbt.contracts.graph.nodes.Contract = )" + }, + "SqlNode": { + "type": "object", + "required": [ + "schema", + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "fqn", + "alias", + "checksum" + ], + "properties": { + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "sql operation" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "fqn": { + "type": "array", + "items": { + "type": "string" + } + }, + "alias": { + "type": "string" + }, + "checksum": { + "$ref": "#/definitions/FileHash" + }, + "config": { + "$ref": "#/definitions/NodeConfig", + "default": { + "enabled": true, + "alias": null, + "schema": null, + "database": null, + "tags": [], + "meta": {}, + "group": null, + "materialized": "view", + "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 + }, + "contract": { + "enforced": false + }, + "post-hook": [], + "pre-hook": [] + } + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "description": { + "type": "string", + "default": "" + }, + "columns": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ColumnInfo" + }, + "default": {} + }, + "meta": { + "type": "object", + "default": {} + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "docs": { + "$ref": "#/definitions/Docs", + "default": { + "show": true, + "node_color": null + } + }, + "patch_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "build_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "deferred": { + "type": "boolean", + "default": false + }, + "unrendered_config": { + "type": "object", + "default": {} + }, + "created_at": { + "type": "number", + "default": 1681764097.286921 + }, + "config_call_dict": { + "type": "object", + "default": {} + }, + "relation_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "raw_code": { + "type": "string", + "default": "" + }, + "language": { + "type": "string", + "default": "sql" + }, + "refs": { + "type": "array", + "items": { + "$ref": "#/definitions/RefArgs" + }, + "default": [] + }, + "sources": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "metrics": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "depends_on": { + "$ref": "#/definitions/DependsOn", + "default": { + "macros": [], + "nodes": [] + } + }, + "compiled_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "compiled": { + "type": "boolean", + "default": false + }, + "compiled_code": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "extra_ctes_injected": { + "type": "boolean", + "default": false + }, + "extra_ctes": { + "type": "array", + "items": { + "$ref": "#/definitions/InjectedCTE" + }, + "default": [] + }, + "contract": { + "$ref": "#/definitions/Contract", + "default": { + "enforced": false, + "checksum": null + } + } + }, + "additionalProperties": false, + "description": "SqlNode(database: Optional[str], schema: str, name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], alias: str, checksum: dbt.contracts.files.FileHash, config: dbt.contracts.graph.model_config.NodeConfig = , _event_status: Dict[str, Any] = , tags: List[str] = , description: str = '', columns: Dict[str, dbt.contracts.graph.nodes.ColumnInfo] = , meta: Dict[str, Any] = , group: Optional[str] = None, docs: dbt.contracts.graph.unparsed.Docs = , patch_path: Optional[str] = None, build_path: Optional[str] = None, deferred: bool = False, unrendered_config: Dict[str, Any] = , created_at: float = , config_call_dict: Dict[str, Any] = , relation_name: Optional[str] = None, raw_code: str = '', language: str = 'sql', refs: List[dbt.contracts.graph.nodes.RefArgs] = , sources: List[List[str]] = , metrics: List[List[str]] = , depends_on: dbt.contracts.graph.nodes.DependsOn = , compiled_path: Optional[str] = None, compiled: bool = False, compiled_code: Optional[str] = None, extra_ctes_injected: bool = False, extra_ctes: List[dbt.contracts.graph.nodes.InjectedCTE] = , _pre_injected_sql: Optional[str] = None, contract: dbt.contracts.graph.nodes.Contract = )" + }, + "GenericTestNode": { + "type": "object", + "required": [ + "test_metadata", + "schema", + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "fqn", + "alias", + "checksum" + ], + "properties": { + "test_metadata": { + "$ref": "#/definitions/TestMetadata" + }, + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "test" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "fqn": { + "type": "array", + "items": { + "type": "string" + } + }, + "alias": { + "type": "string" + }, + "checksum": { + "$ref": "#/definitions/FileHash" + }, + "config": { + "$ref": "#/definitions/TestConfig", + "default": { + "enabled": true, + "alias": null, + "schema": "dbt_test__audit", + "database": null, + "tags": [], + "meta": {}, + "group": null, + "materialized": "test", + "severity": "ERROR", + "store_failures": null, + "where": null, + "limit": null, + "fail_calc": "count(*)", + "warn_if": "!= 0", + "error_if": "!= 0" + } + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "description": { + "type": "string", + "default": "" + }, + "columns": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ColumnInfo" + }, + "default": {} + }, + "meta": { + "type": "object", + "default": {} + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "docs": { + "$ref": "#/definitions/Docs", + "default": { + "show": true, + "node_color": null + } + }, + "patch_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "build_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "deferred": { + "type": "boolean", + "default": false + }, + "unrendered_config": { + "type": "object", + "default": {} + }, + "created_at": { + "type": "number", + "default": 1681764097.2889018 + }, + "config_call_dict": { + "type": "object", + "default": {} + }, + "relation_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "raw_code": { + "type": "string", + "default": "" + }, + "language": { + "type": "string", + "default": "sql" + }, + "refs": { + "type": "array", + "items": { + "$ref": "#/definitions/RefArgs" + }, + "default": [] + }, + "sources": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "metrics": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "depends_on": { + "$ref": "#/definitions/DependsOn", + "default": { + "macros": [], + "nodes": [] + } + }, + "compiled_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "compiled": { + "type": "boolean", + "default": false + }, + "compiled_code": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "extra_ctes_injected": { + "type": "boolean", + "default": false + }, + "extra_ctes": { + "type": "array", + "items": { + "$ref": "#/definitions/InjectedCTE" + }, + "default": [] + }, + "contract": { + "$ref": "#/definitions/Contract", + "default": { + "enforced": false, + "checksum": null + } + }, + "column_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "file_key_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "attached_node": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "GenericTestNode(test_metadata: dbt.contracts.graph.nodes.TestMetadata, database: Optional[str], schema: str, name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], alias: str, checksum: dbt.contracts.files.FileHash, config: dbt.contracts.graph.model_config.TestConfig = , _event_status: Dict[str, Any] = , tags: List[str] = , description: str = '', columns: Dict[str, dbt.contracts.graph.nodes.ColumnInfo] = , meta: Dict[str, Any] = , group: Optional[str] = None, docs: dbt.contracts.graph.unparsed.Docs = , patch_path: Optional[str] = None, build_path: Optional[str] = None, deferred: bool = False, unrendered_config: Dict[str, Any] = , created_at: float = , config_call_dict: Dict[str, Any] = , relation_name: Optional[str] = None, raw_code: str = '', language: str = 'sql', refs: List[dbt.contracts.graph.nodes.RefArgs] = , sources: List[List[str]] = , metrics: List[List[str]] = , depends_on: dbt.contracts.graph.nodes.DependsOn = , compiled_path: Optional[str] = None, compiled: bool = False, compiled_code: Optional[str] = None, extra_ctes_injected: bool = False, extra_ctes: List[dbt.contracts.graph.nodes.InjectedCTE] = , _pre_injected_sql: Optional[str] = None, contract: dbt.contracts.graph.nodes.Contract = , column_name: Optional[str] = None, file_key_name: Optional[str] = None, attached_node: Optional[str] = None)" + }, + "TestMetadata": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string" + }, + "kwargs": { + "type": "object", + "default": {} + }, + "namespace": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "TestMetadata(name: str, kwargs: Dict[str, Any] = , namespace: Optional[str] = None)" + }, + "SnapshotNode": { + "type": "object", + "required": [ + "schema", + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "fqn", + "alias", + "checksum", + "config" + ], + "properties": { + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "snapshot" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "fqn": { + "type": "array", + "items": { + "type": "string" + } + }, + "alias": { + "type": "string" + }, + "checksum": { + "$ref": "#/definitions/FileHash" + }, + "config": { + "$ref": "#/definitions/SnapshotConfig" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "description": { + "type": "string", + "default": "" + }, + "columns": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ColumnInfo" + }, + "default": {} + }, + "meta": { + "type": "object", + "default": {} + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "docs": { + "$ref": "#/definitions/Docs", + "default": { + "show": true, + "node_color": null + } + }, + "patch_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "build_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "deferred": { + "type": "boolean", + "default": false + }, + "unrendered_config": { + "type": "object", + "default": {} + }, + "created_at": { + "type": "number", + "default": 1681764097.292233 + }, + "config_call_dict": { + "type": "object", + "default": {} + }, + "relation_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "raw_code": { + "type": "string", + "default": "" + }, + "language": { + "type": "string", + "default": "sql" + }, + "refs": { + "type": "array", + "items": { + "$ref": "#/definitions/RefArgs" + }, + "default": [] + }, + "sources": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "metrics": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "depends_on": { + "$ref": "#/definitions/DependsOn", + "default": { + "macros": [], + "nodes": [] + } + }, + "compiled_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "compiled": { + "type": "boolean", + "default": false + }, + "compiled_code": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "extra_ctes_injected": { + "type": "boolean", + "default": false + }, + "extra_ctes": { + "type": "array", + "items": { + "$ref": "#/definitions/InjectedCTE" + }, + "default": [] + }, + "contract": { + "$ref": "#/definitions/Contract", + "default": { + "enforced": false, + "checksum": null + } + } + }, + "additionalProperties": false, + "description": "SnapshotNode(database: Optional[str], schema: str, name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], alias: str, checksum: dbt.contracts.files.FileHash, config: dbt.contracts.graph.model_config.SnapshotConfig, _event_status: Dict[str, Any] = , tags: List[str] = , description: str = '', columns: Dict[str, dbt.contracts.graph.nodes.ColumnInfo] = , meta: Dict[str, Any] = , group: Optional[str] = None, docs: dbt.contracts.graph.unparsed.Docs = , patch_path: Optional[str] = None, build_path: Optional[str] = None, deferred: bool = False, unrendered_config: Dict[str, Any] = , created_at: float = , config_call_dict: Dict[str, Any] = , relation_name: Optional[str] = None, raw_code: str = '', language: str = 'sql', refs: List[dbt.contracts.graph.nodes.RefArgs] = , sources: List[List[str]] = , metrics: List[List[str]] = , depends_on: dbt.contracts.graph.nodes.DependsOn = , compiled_path: Optional[str] = None, compiled: bool = False, compiled_code: Optional[str] = None, extra_ctes_injected: bool = False, extra_ctes: List[dbt.contracts.graph.nodes.InjectedCTE] = , _pre_injected_sql: Optional[str] = None, contract: dbt.contracts.graph.nodes.Contract = )" + }, + "SnapshotConfig": { + "type": "object", + "required": [], + "properties": { + "enabled": { + "type": "boolean", + "default": true + }, + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tags": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ], + "default": [] + }, + "meta": { + "type": "object", + "default": {} + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "materialized": { + "type": "string", + "default": "snapshot" + }, + "incremental_strategy": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "persist_docs": { + "type": "object", + "default": {} + }, + "post-hook": { + "type": "array", + "items": { + "$ref": "#/definitions/Hook" + }, + "default": [] + }, + "pre-hook": { + "type": "array", + "items": { + "$ref": "#/definitions/Hook" + }, + "default": [] + }, + "quoting": { + "type": "object", + "default": {} + }, + "column_types": { + "type": "object", + "default": {} + }, + "full_refresh": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "unique_key": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "on_schema_change": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "ignore" + }, + "grants": { + "type": "object", + "default": {} + }, + "packages": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "docs": { + "$ref": "#/definitions/Docs", + "default": { + "show": true, + "node_color": null + } + }, + "contract": { + "$ref": "#/definitions/ContractConfig", + "default": { + "enforced": false + } + }, + "strategy": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "target_schema": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "target_database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "updated_at": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "check_cols": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": true, + "description": "SnapshotConfig(_extra: Dict[str, Any] = , enabled: bool = True, alias: Optional[str] = None, schema: Optional[str] = None, database: Optional[str] = None, tags: Union[List[str], str] = , meta: Dict[str, Any] = , group: Optional[str] = None, materialized: str = 'snapshot', incremental_strategy: Optional[str] = None, persist_docs: Dict[str, Any] = , post_hook: List[dbt.contracts.graph.model_config.Hook] = , pre_hook: List[dbt.contracts.graph.model_config.Hook] = , quoting: Dict[str, Any] = , column_types: Dict[str, Any] = , full_refresh: Optional[bool] = None, unique_key: Optional[str] = None, on_schema_change: Optional[str] = 'ignore', grants: Dict[str, Any] = , packages: List[str] = , docs: dbt.contracts.graph.unparsed.Docs = , contract: dbt.contracts.graph.model_config.ContractConfig = , strategy: Optional[str] = None, target_schema: Optional[str] = None, target_database: Optional[str] = None, updated_at: Optional[str] = None, check_cols: Union[str, List[str], NoneType] = None)" + }, + "SeedNode": { + "type": "object", + "required": [ + "schema", + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "fqn", + "alias", + "checksum" + ], + "properties": { + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "seed" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "fqn": { + "type": "array", + "items": { + "type": "string" + } + }, + "alias": { + "type": "string" + }, + "checksum": { + "$ref": "#/definitions/FileHash" + }, + "config": { + "$ref": "#/definitions/SeedConfig", + "default": { + "enabled": true, + "alias": null, + "schema": null, + "database": null, + "tags": [], + "meta": {}, + "group": null, + "materialized": "seed", + "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 + }, + "contract": { + "enforced": false + }, + "quote_columns": null, + "post-hook": [], + "pre-hook": [] + } + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "description": { + "type": "string", + "default": "" + }, + "columns": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ColumnInfo" + }, + "default": {} + }, + "meta": { + "type": "object", + "default": {} + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "docs": { + "$ref": "#/definitions/Docs", + "default": { + "show": true, + "node_color": null + } + }, + "patch_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "build_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "deferred": { + "type": "boolean", + "default": false + }, + "unrendered_config": { + "type": "object", + "default": {} + }, + "created_at": { + "type": "number", + "default": 1681764097.295719 + }, + "config_call_dict": { + "type": "object", + "default": {} + }, + "relation_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "raw_code": { + "type": "string", + "default": "" + }, + "root_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "depends_on": { + "$ref": "#/definitions/MacroDependsOn", + "default": { + "macros": [] + } + } + }, + "additionalProperties": false, + "description": "SeedNode(database: Optional[str], schema: str, name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], alias: str, checksum: dbt.contracts.files.FileHash, config: dbt.contracts.graph.model_config.SeedConfig = , _event_status: Dict[str, Any] = , tags: List[str] = , description: str = '', columns: Dict[str, dbt.contracts.graph.nodes.ColumnInfo] = , meta: Dict[str, Any] = , group: Optional[str] = None, docs: dbt.contracts.graph.unparsed.Docs = , patch_path: Optional[str] = None, build_path: Optional[str] = None, deferred: bool = False, unrendered_config: Dict[str, Any] = , created_at: float = , config_call_dict: Dict[str, Any] = , relation_name: Optional[str] = None, raw_code: str = '', root_path: Optional[str] = None, depends_on: dbt.contracts.graph.nodes.MacroDependsOn = )" + }, + "SeedConfig": { + "type": "object", + "required": [], + "properties": { + "enabled": { + "type": "boolean", + "default": true + }, + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tags": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ], + "default": [] + }, + "meta": { + "type": "object", + "default": {} + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "materialized": { + "type": "string", + "default": "seed" + }, + "incremental_strategy": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "persist_docs": { + "type": "object", + "default": {} + }, + "post-hook": { + "type": "array", + "items": { + "$ref": "#/definitions/Hook" + }, + "default": [] + }, + "pre-hook": { + "type": "array", + "items": { + "$ref": "#/definitions/Hook" + }, + "default": [] + }, + "quoting": { + "type": "object", + "default": {} + }, + "column_types": { + "type": "object", + "default": {} + }, + "full_refresh": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "unique_key": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "on_schema_change": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "ignore" + }, + "grants": { + "type": "object", + "default": {} + }, + "packages": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "docs": { + "$ref": "#/definitions/Docs", + "default": { + "show": true, + "node_color": null + } + }, + "contract": { + "$ref": "#/definitions/ContractConfig", + "default": { + "enforced": false + } + }, + "quote_columns": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": true, + "description": "SeedConfig(_extra: Dict[str, Any] = , enabled: bool = True, alias: Optional[str] = None, schema: Optional[str] = None, database: Optional[str] = None, tags: Union[List[str], str] = , meta: Dict[str, Any] = , group: Optional[str] = None, materialized: str = 'seed', incremental_strategy: Optional[str] = None, persist_docs: Dict[str, Any] = , post_hook: List[dbt.contracts.graph.model_config.Hook] = , pre_hook: List[dbt.contracts.graph.model_config.Hook] = , quoting: Dict[str, Any] = , column_types: Dict[str, Any] = , full_refresh: Optional[bool] = None, unique_key: Union[str, List[str], NoneType] = None, on_schema_change: Optional[str] = 'ignore', grants: Dict[str, Any] = , packages: List[str] = , docs: dbt.contracts.graph.unparsed.Docs = , contract: dbt.contracts.graph.model_config.ContractConfig = , quote_columns: Optional[bool] = None)" + }, + "MacroDependsOn": { + "type": "object", + "required": [], + "properties": { + "macros": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": false, + "description": "Used only in the Macro class" + }, + "SourceDefinition": { + "type": "object", + "required": [ + "schema", + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "fqn", + "source_name", + "source_description", + "loader", + "identifier" + ], + "properties": { + "database": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "source" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "fqn": { + "type": "array", + "items": { + "type": "string" + } + }, + "source_name": { + "type": "string" + }, + "source_description": { + "type": "string" + }, + "loader": { + "type": "string" + }, + "identifier": { + "type": "string" + }, + "quoting": { + "$ref": "#/definitions/Quoting", + "default": { + "database": null, + "schema": null, + "identifier": null, + "column": null + } + }, + "loaded_at_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "freshness": { + "oneOf": [ + { + "$ref": "#/definitions/FreshnessThreshold" + }, + { + "type": "null" + } + ] + }, + "external": { + "oneOf": [ + { + "$ref": "#/definitions/ExternalTable" + }, + { + "type": "null" + } + ] + }, + "description": { + "type": "string", + "default": "" + }, + "columns": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ColumnInfo" + }, + "default": {} + }, + "meta": { + "type": "object", + "default": {} + }, + "source_meta": { + "type": "object", + "default": {} + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "config": { + "$ref": "#/definitions/SourceConfig", + "default": { + "enabled": true + } + }, + "patch_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "unrendered_config": { + "type": "object", + "default": {} + }, + "relation_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "created_at": { + "type": "number", + "default": 1681764097.298468 + } + }, + "additionalProperties": false, + "description": "SourceDefinition(database: Optional[str], schema: str, name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], source_name: str, source_description: str, loader: str, identifier: str, _event_status: Dict[str, Any] = , quoting: dbt.contracts.graph.unparsed.Quoting = , loaded_at_field: Optional[str] = None, freshness: Optional[dbt.contracts.graph.unparsed.FreshnessThreshold] = None, external: Optional[dbt.contracts.graph.unparsed.ExternalTable] = None, description: str = '', columns: Dict[str, dbt.contracts.graph.nodes.ColumnInfo] = , meta: Dict[str, Any] = , source_meta: Dict[str, Any] = , tags: List[str] = , config: dbt.contracts.graph.model_config.SourceConfig = , patch_path: Optional[str] = None, unrendered_config: Dict[str, Any] = , relation_name: Optional[str] = None, created_at: float = )" + }, + "Quoting": { + "type": "object", + "required": [], + "properties": { + "database": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "schema": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "identifier": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "column": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "Quoting(database: Optional[bool] = None, schema: Optional[bool] = None, identifier: Optional[bool] = None, column: Optional[bool] = None)" + }, + "FreshnessThreshold": { + "type": "object", + "required": [], + "properties": { + "warn_after": { + "oneOf": [ + { + "$ref": "#/definitions/Time" + }, + { + "type": "null" + } + ], + "default": { + "count": null, + "period": null + } + }, + "error_after": { + "oneOf": [ + { + "$ref": "#/definitions/Time" + }, + { + "type": "null" + } + ], + "default": { + "count": null, + "period": null + } + }, + "filter": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "FreshnessThreshold(warn_after: Optional[dbt.contracts.graph.unparsed.Time] = , error_after: Optional[dbt.contracts.graph.unparsed.Time] = , filter: Optional[str] = None)" + }, + "FreshnessMetadata": { + "type": "object", + "required": [], + "properties": { + "dbt_schema_version": { + "type": "string", + "default": "https://schemas.getdbt.com/dbt/sources/v3.json" + }, + "dbt_version": { + "type": "string", + "default": "1.5.0rc1" + }, + "generated_at": { + "type": "string", + "format": "date-time", + "default": "2023-04-17T20:41:37.266000Z" + }, + "invocation_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "9e71e98b-a613-4f11-aa9d-f826b834fd11" + }, + "env": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "default": {} + } + }, + "additionalProperties": false, + "description": "FreshnessMetadata(dbt_schema_version: str = , dbt_version: str = '1.5.0rc1', generated_at: datetime.datetime = , invocation_id: Optional[str] = , env: Dict[str, str] = )" + }, + "SourceFreshnessRuntimeError": { + "type": "object", + "required": [ + "unique_id", + "status" + ], + "properties": { + "unique_id": { + "type": "string" + }, + "error": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "status": { + "type": "string", + "enum": [ + "runtime error" + ] + } + }, + "additionalProperties": false, + "description": "SourceFreshnessRuntimeError(unique_id: str, error: Union[str, int, NoneType], status: dbt.contracts.results.FreshnessErrorEnum)" + }, + "SourceFreshnessOutput": { + "type": "object", + "required": [ + "unique_id", + "max_loaded_at", + "snapshotted_at", + "max_loaded_at_time_ago_in_s", + "status", + "criteria", + "adapter_response", + "timing", + "thread_id", + "execution_time" + ], + "properties": { + "unique_id": { + "type": "string" + }, + "max_loaded_at": { + "type": "string", + "format": "date-time" + }, + "snapshotted_at": { + "type": "string", + "format": "date-time" + }, + "max_loaded_at_time_ago_in_s": { + "type": "number" + }, + "status": { + "type": "string", + "enum": [ + "pass", + "warn", + "error", + "runtime error" + ] + }, + "criteria": { + "$ref": "#/definitions/FreshnessThreshold" + }, + "adapter_response": { + "type": "object" + }, + "timing": { + "type": "array", + "items": { + "$ref": "#/definitions/TimingInfo" + } + }, + "thread_id": { + "type": "string" + }, + "execution_time": { + "type": "number" + } + }, + "additionalProperties": false, + "description": "SourceFreshnessOutput(unique_id: str, max_loaded_at: datetime.datetime, snapshotted_at: datetime.datetime, max_loaded_at_time_ago_in_s: float, status: dbt.contracts.results.FreshnessStatus, criteria: dbt.contracts.graph.unparsed.FreshnessThreshold, adapter_response: Dict[str, Any], timing: List[dbt.contracts.results.TimingInfo], thread_id: str, execution_time: float)" + }, + "Time": { + "type": "object", + "required": [], + "properties": { + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "period": { + "oneOf": [ + { + "type": "string", + "enum": [ + "minute", + "hour", + "day" + ] + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "Time(count: Optional[int] = None, period: Optional[dbt.contracts.graph.unparsed.TimePeriod] = None)" + }, + "TimingInfo": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string" + }, + "started_at": { + "oneOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ] + }, + "completed_at": { + "oneOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "TimingInfo(name: str, started_at: Optional[datetime.datetime] = None, completed_at: Optional[datetime.datetime] = None)" + }, + "ExternalTable": { + "type": "object", + "required": [], + "properties": { + "location": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "file_format": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "row_format": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tbl_properties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "partitions": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/ExternalPartition" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": true, + "description": "ExternalTable(_extra: Dict[str, Any] = , location: Optional[str] = None, file_format: Optional[str] = None, row_format: Optional[str] = None, tbl_properties: Optional[str] = None, partitions: Union[List[str], List[dbt.contracts.graph.unparsed.ExternalPartition], NoneType] = None)" + }, + "ExternalPartition": { + "type": "object", + "required": [], + "properties": { + "name": { + "type": "string", + "default": "" + }, + "description": { + "type": "string", + "default": "" + }, + "data_type": { + "type": "string", + "default": "" + }, + "meta": { + "type": "object", + "default": {} + } + }, + "additionalProperties": true, + "description": "ExternalPartition(_extra: Dict[str, Any] = , name: str = '', description: str = '', data_type: str = '', meta: Dict[str, Any] = )" + }, + "SourceConfig": { + "type": "object", + "required": [], + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + }, + "additionalProperties": true, + "description": "SourceConfig(_extra: Dict[str, Any] = , enabled: bool = True)" + }, + "Macro": { + "type": "object", + "required": [ + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "macro_sql" + ], + "properties": { + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "macro" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "macro_sql": { + "type": "string" + }, + "depends_on": { + "$ref": "#/definitions/MacroDependsOn", + "default": { + "macros": [] + } + }, + "description": { + "type": "string", + "default": "" + }, + "meta": { + "type": "object", + "default": {} + }, + "docs": { + "$ref": "#/definitions/Docs", + "default": { + "show": true, + "node_color": null + } + }, + "patch_path": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "arguments": { + "type": "array", + "items": { + "$ref": "#/definitions/MacroArgument" + }, + "default": [] + }, + "created_at": { + "type": "number", + "default": 1681764097.299207 + }, + "supported_languages": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string", + "enum": [ + "python", + "sql" + ] + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "Macro(name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, macro_sql: str, depends_on: dbt.contracts.graph.nodes.MacroDependsOn = , description: str = '', meta: Dict[str, Any] = , docs: dbt.contracts.graph.unparsed.Docs = , patch_path: Optional[str] = None, arguments: List[dbt.contracts.graph.unparsed.MacroArgument] = , created_at: float = , supported_languages: Optional[List[dbt.node_types.ModelLanguage]] = None)" + }, + "MacroArgument": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string" + }, + "type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "type": "string", + "default": "" + } + }, + "additionalProperties": false, + "description": "MacroArgument(name: str, type: Optional[str] = None, description: str = '')" + }, + "Documentation": { + "type": "object", + "required": [ + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "block_contents" + ], + "properties": { + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "doc" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "block_contents": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Documentation(name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, block_contents: str)" + }, + "Exposure": { + "type": "object", + "required": [ + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "fqn", + "type", + "owner" + ], + "properties": { + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "exposure" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "fqn": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string", + "enum": [ + "dashboard", + "notebook", + "analysis", + "ml", + "application" + ] + }, + "owner": { + "$ref": "#/definitions/Owner" + }, + "description": { + "type": "string", + "default": "" + }, + "label": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "maturity": { + "oneOf": [ + { + "type": "string", + "enum": [ + "low", + "medium", + "high" + ] + }, + { + "type": "null" + } + ] + }, + "meta": { + "type": "object", + "default": {} + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "config": { + "$ref": "#/definitions/ExposureConfig", + "default": { + "enabled": true + } + }, + "unrendered_config": { + "type": "object", + "default": {} + }, + "url": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "depends_on": { + "$ref": "#/definitions/DependsOn", + "default": { + "macros": [], + "nodes": [] + } + }, + "refs": { + "type": "array", + "items": { + "$ref": "#/definitions/RefArgs" + }, + "default": [] + }, + "sources": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "metrics": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "created_at": { + "type": "number", + "default": 1681764097.301022 + } + }, + "additionalProperties": false, + "description": "Exposure(name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], type: dbt.contracts.graph.unparsed.ExposureType, owner: dbt.contracts.graph.unparsed.Owner, description: str = '', label: Optional[str] = None, maturity: Optional[dbt.contracts.graph.unparsed.MaturityType] = None, meta: Dict[str, Any] = , tags: List[str] = , config: dbt.contracts.graph.model_config.ExposureConfig = , unrendered_config: Dict[str, Any] = , url: Optional[str] = None, depends_on: dbt.contracts.graph.nodes.DependsOn = , refs: List[dbt.contracts.graph.nodes.RefArgs] = , sources: List[List[str]] = , metrics: List[List[str]] = , created_at: float = )" + }, + "Owner": { + "type": "object", + "required": [], + "properties": { + "email": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": true, + "description": "Owner(_extra: Dict[str, Any] = , email: Optional[str] = None, name: Optional[str] = None)" + }, + "ExposureConfig": { + "type": "object", + "required": [], + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + }, + "additionalProperties": true, + "description": "ExposureConfig(_extra: Dict[str, Any] = , enabled: bool = True)" + }, + "Metric": { + "type": "object", + "required": [ + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "fqn", + "description", + "label", + "calculation_method", + "expression", + "filters", + "time_grains", + "dimensions" + ], + "properties": { + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "metric" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "fqn": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": { + "type": "string" + }, + "label": { + "type": "string" + }, + "calculation_method": { + "type": "string" + }, + "expression": { + "type": "string" + }, + "filters": { + "type": "array", + "items": { + "$ref": "#/definitions/MetricFilter" + } + }, + "time_grains": { + "type": "array", + "items": { + "type": "string" + } + }, + "dimensions": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestamp": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "window": { + "oneOf": [ + { + "$ref": "#/definitions/MetricTime" + }, + { + "type": "null" + } + ] + }, + "model": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "model_unique_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "meta": { + "type": "object", + "default": {} + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "config": { + "$ref": "#/definitions/MetricConfig", + "default": { + "enabled": true, + "group": null + } + }, + "unrendered_config": { + "type": "object", + "default": {} + }, + "sources": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "depends_on": { + "$ref": "#/definitions/DependsOn", + "default": { + "macros": [], + "nodes": [] + } + }, + "refs": { + "type": "array", + "items": { + "$ref": "#/definitions/RefArgs" + }, + "default": [] + }, + "metrics": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": [] + }, + "created_at": { + "type": "number", + "default": 1681764097.302761 + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "Metric(name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], description: str, label: str, calculation_method: str, expression: str, filters: List[dbt.contracts.graph.unparsed.MetricFilter], time_grains: List[str], dimensions: List[str], timestamp: Optional[str] = None, window: Optional[dbt.contracts.graph.unparsed.MetricTime] = None, model: Optional[str] = None, model_unique_id: Optional[str] = None, meta: Dict[str, Any] = , tags: List[str] = , config: dbt.contracts.graph.model_config.MetricConfig = , unrendered_config: Dict[str, Any] = , sources: List[List[str]] = , depends_on: dbt.contracts.graph.nodes.DependsOn = , refs: List[dbt.contracts.graph.nodes.RefArgs] = , metrics: List[List[str]] = , created_at: float = , group: Optional[str] = None)" + }, + "MetricFilter": { + "type": "object", + "required": [ + "field", + "operator", + "value" + ], + "properties": { + "field": { + "type": "string" + }, + "operator": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "MetricFilter(field: str, operator: str, value: str)" + }, + "MetricTime": { + "type": "object", + "required": [], + "properties": { + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "period": { + "oneOf": [ + { + "type": "string", + "enum": [ + "day", + "week", + "month", + "year" + ] + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "description": "MetricTime(count: Optional[int] = None, period: Optional[dbt.contracts.graph.unparsed.MetricTimePeriod] = None)" + }, + "MetricConfig": { + "type": "object", + "required": [], + "properties": { + "enabled": { + "type": "boolean", + "default": true + }, + "group": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": true, + "description": "MetricConfig(_extra: Dict[str, Any] = , enabled: bool = True, group: Optional[str] = None)" + }, + "Group": { + "type": "object", + "required": [ + "name", + "resource_type", + "package_name", + "path", + "original_file_path", + "unique_id", + "owner" + ], + "properties": { + "name": { + "type": "string" + }, + "resource_type": { + "type": "string", + "enum": [ + "group" + ] + }, + "package_name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "original_file_path": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "owner": { + "$ref": "#/definitions/Owner" + } + }, + "additionalProperties": false, + "description": "Group(name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, owner: dbt.contracts.graph.unparsed.Owner)" + }, + "PublicModel": { + "type": "object", + "required": [ + "name", + "package_name", + "unique_id", + "relation_name" + ], + "properties": { + "name": { + "type": "string" + }, + "package_name": { + "type": "string" + }, + "unique_id": { + "type": "string" + }, + "relation_name": { + "type": "string" + }, + "version": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "is_latest_version": { + "type": "boolean", + "default": false + }, + "public_dependencies": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": false, + "description": "PublicModel(name: str, package_name: str, unique_id: str, relation_name: str, version: Union[str, float, NoneType] = None, is_latest_version: bool = False, public_dependencies: List[str] = )" + } + }, + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://schemas.getdbt.com/dbt/manifest/v10.json" +} diff --git a/test/unit/test_contracts_graph_compiled.py b/test/unit/test_contracts_graph_compiled.py index 72622d9d5c4..47888b51051 100644 --- a/test/unit/test_contracts_graph_compiled.py +++ b/test/unit/test_contracts_graph_compiled.py @@ -5,6 +5,7 @@ from dbt.contracts.graph.nodes import ( ColumnInfo, DependsOn, + ModelDependsOn, GenericTestNode, InjectedCTE, ModelNode, @@ -38,7 +39,7 @@ def basic_uncompiled_model(): refs=[], sources=[], metrics=[], - depends_on=DependsOn(), + depends_on=ModelDependsOn(), deferred=False, description="", database="test_db", @@ -70,7 +71,7 @@ def basic_compiled_model(): refs=[], sources=[], metrics=[], - depends_on=DependsOn(), + depends_on=ModelDependsOn(), deferred=True, description="", database="test_db", @@ -130,7 +131,7 @@ def basic_uncompiled_dict(): "refs": [], "sources": [], "metrics": [], - "depends_on": {"macros": [], "nodes": []}, + "depends_on": {"macros": [], "nodes": [], "public_nodes": []}, "database": "test_db", "deferred": False, "description": "", @@ -182,7 +183,7 @@ def basic_compiled_dict(): "refs": [], "sources": [], "metrics": [], - "depends_on": {"macros": [], "nodes": []}, + "depends_on": {"macros": [], "nodes": [], "public_nodes": []}, "database": "test_db", "deferred": True, "description": "", diff --git a/test/unit/test_contracts_graph_parsed.py b/test/unit/test_contracts_graph_parsed.py index 3a6e7d2f636..8d9c07be74e 100644 --- a/test/unit/test_contracts_graph_parsed.py +++ b/test/unit/test_contracts_graph_parsed.py @@ -16,6 +16,7 @@ from dbt.contracts.graph.nodes import ( ModelNode, DependsOn, + ModelDependsOn, ColumnInfo, GenericTestNode, SnapshotNode, @@ -150,7 +151,7 @@ def base_parsed_model_dict(): "refs": [], "sources": [], "metrics": [], - "depends_on": {"macros": [], "nodes": []}, + "depends_on": {"macros": [], "nodes": [], "public_nodes": []}, "database": "test_db", "description": "", "schema": "test_schema", @@ -203,7 +204,7 @@ def basic_parsed_model_object(): refs=[], sources=[], metrics=[], - depends_on=DependsOn(), + depends_on=ModelDependsOn(), description="", database="test_db", schema="test_schema", @@ -256,7 +257,7 @@ def complex_parsed_model_dict(): "refs": [], "sources": [], "metrics": [], - "depends_on": {"macros": [], "nodes": ["model.test.bar"]}, + "depends_on": {"macros": [], "nodes": ["model.test.bar"], "public_nodes": []}, "database": "test_db", "deferred": True, "description": "My parsed node", @@ -321,7 +322,7 @@ def complex_parsed_model_object(): refs=[], sources=[], metrics=[], - depends_on=DependsOn(nodes=["model.test.bar"]), + depends_on=ModelDependsOn(nodes=["model.test.bar"]), deferred=True, description="My parsed node", database="test_db", @@ -821,7 +822,7 @@ def patched_model_object(): refs=[], sources=[], metrics=[], - depends_on=DependsOn(), + depends_on=ModelDependsOn(), description="The foo model", database="test_db", schema="test_schema", diff --git a/test/unit/test_graph_selector_methods.py b/test/unit/test_graph_selector_methods.py index 31ca79f3c9f..97a1df63c8d 100644 --- a/test/unit/test_graph_selector_methods.py +++ b/test/unit/test_graph_selector_methods.py @@ -9,6 +9,7 @@ from dbt.contracts.graph.nodes import ( DependsOn, MacroDependsOn, + ModelDependsOn, NodeConfig, Macro, ModelNode, @@ -112,9 +113,10 @@ def make_model( tags=tags, refs=ref_values, sources=source_values, - depends_on=DependsOn( + depends_on=ModelDependsOn( nodes=depends_on_nodes, macros=depends_on_macros, + public_nodes=[], ), resource_type=NodeType.Model, checksum=FileHash.from_contents(""), diff --git a/test/unit/test_manifest.py b/test/unit/test_manifest.py index 55d41e9a5c8..a4047d7ca25 100644 --- a/test/unit/test_manifest.py +++ b/test/unit/test_manifest.py @@ -19,6 +19,7 @@ from dbt.contracts.graph.nodes import ( ModelNode, DependsOn, + ModelDependsOn, NodeConfig, SeedNode, SourceDefinition, @@ -206,7 +207,7 @@ def setUp(self): refs=[], sources=[], metrics=[], - depends_on=DependsOn(), + depends_on=ModelDependsOn(), config=self.model_config, tags=[], path="events.sql", @@ -228,7 +229,7 @@ def setUp(self): refs=[], sources=[], metrics=[], - depends_on=DependsOn(), + depends_on=ModelDependsOn(), config=self.model_config, tags=[], path="events.sql", @@ -250,7 +251,7 @@ def setUp(self): refs=[RefArgs(name="events")], sources=[], metrics=[], - depends_on=DependsOn(nodes=["model.root.events"]), + depends_on=ModelDependsOn(nodes=["model.root.events"]), config=self.model_config, tags=[], path="multi.sql", @@ -272,7 +273,7 @@ def setUp(self): refs=[RefArgs(name="events")], sources=[], metrics=[], - depends_on=DependsOn(nodes=["model.root.dep"]), + depends_on=ModelDependsOn(nodes=["model.root.dep"]), config=self.model_config, tags=[], path="multi.sql", @@ -294,7 +295,7 @@ def setUp(self): refs=[RefArgs(name="events")], sources=[], metrics=[], - depends_on=DependsOn(nodes=["model.root.events"]), + depends_on=ModelDependsOn(nodes=["model.root.events"]), config=self.model_config, tags=[], path="multi.sql", @@ -316,7 +317,7 @@ def setUp(self): refs=[RefArgs(name="events")], sources=[], metrics=[], - depends_on=DependsOn(nodes=["model.root.nested", "model.root.sibling"]), + depends_on=ModelDependsOn(nodes=["model.root.nested", "model.root.sibling"]), config=self.model_config, tags=[], path="multi.sql", @@ -399,6 +400,7 @@ def test__no_nodes(self): }, "docs": {}, "disabled": {}, + "public_nodes": {}, }, ) @@ -415,6 +417,7 @@ def test__nested_nodes(self): exposures={}, metrics={}, selectors={}, + public_nodes={}, metadata=ManifestMetadata(generated_at=datetime.utcnow()), ) serialized = manifest.writable_manifest().to_dict(omit_none=True) @@ -564,6 +567,7 @@ def test_no_nodes_with_metadata(self, mock_user): "env": {ENV_KEY_NAME: "value"}, }, "disabled": {}, + "public_nodes": {}, }, ) @@ -640,7 +644,7 @@ def test__deepcopy_copies_flat_graph(self): refs=[], sources=[], metrics=[], - depends_on=DependsOn(), + depends_on=ModelDependsOn(), config=self.model_config, tags=[], path="events.sql", @@ -687,7 +691,7 @@ def setUp(self): package_name="snowplow", refs=[], sources=[], - depends_on=DependsOn(), + depends_on=ModelDependsOn(), config=self.model_config, tags=[], path="events.sql", @@ -713,7 +717,7 @@ def setUp(self): package_name="root", refs=[], sources=[], - depends_on=DependsOn(), + depends_on=ModelDependsOn(), config=self.model_config, tags=[], path="events.sql", @@ -739,7 +743,7 @@ def setUp(self): package_name="root", refs=[RefArgs(name="events")], sources=[], - depends_on=DependsOn(nodes=["model.root.events"]), + depends_on=ModelDependsOn(nodes=["model.root.events"]), config=self.model_config, tags=[], path="multi.sql", @@ -760,7 +764,7 @@ def setUp(self): package_name="root", refs=[], sources=[], - depends_on=DependsOn(), + depends_on=ModelDependsOn(), config=self.model_config, tags=[], path="versioned.sql", @@ -782,7 +786,7 @@ def setUp(self): package_name="root", refs=[RefArgs(name="versioned", version=1)], sources=[], - depends_on=DependsOn(nodes=["model.root.versioned.v1"]), + depends_on=ModelDependsOn(nodes=["model.root.versioned.v1"]), config=self.model_config, tags=[], path="dep_version.sql", @@ -803,7 +807,7 @@ def setUp(self): package_name="root", refs=[RefArgs(name="events")], sources=[], - depends_on=DependsOn(nodes=["model.root.dep"]), + depends_on=ModelDependsOn(nodes=["model.root.dep"]), config=self.model_config, tags=[], path="multi.sql", @@ -824,7 +828,7 @@ def setUp(self): package_name="root", refs=[RefArgs(name="events")], sources=[], - depends_on=DependsOn(nodes=["model.root.events"]), + depends_on=ModelDependsOn(nodes=["model.root.events"]), config=self.model_config, tags=[], path="multi.sql", @@ -845,7 +849,7 @@ def setUp(self): package_name="root", refs=[RefArgs(name="events")], sources=[], - depends_on=DependsOn(nodes=["model.root.nested", "model.root.sibling"]), + depends_on=ModelDependsOn(nodes=["model.root.nested", "model.root.sibling"]), config=self.model_config, tags=[], path="multi.sql", @@ -899,6 +903,7 @@ def test__no_nodes(self): }, "docs": {}, "disabled": {}, + "public_nodes": {}, }, ) diff --git a/tests/functional/artifacts/data/state/v10/manifest.json b/tests/functional/artifacts/data/state/v10/manifest.json new file mode 100644 index 00000000000..c804f0c3022 --- /dev/null +++ b/tests/functional/artifacts/data/state/v10/manifest.json @@ -0,0 +1 @@ +{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v10.json", "dbt_version": "1.5.0rc1", "generated_at": "2023-04-17T21:01:28.367373Z", "invocation_id": "0541b9e6-335e-4123-9e79-1cf158eadf06", "env": {}, "project_id": "098f6bcd4621d373cade4e832627b4f6", "user_id": null, "send_anonymous_usage_stats": false, "adapter_type": "postgres"}, "nodes": {"model.test.my_model": {"database": "dbt", "schema": "test16817652848506647403_test_previous_version_state", "name": "my_model", "resource_type": "model", "package_name": "test", "path": "my_model.sql", "original_file_path": "models/my_model.sql", "unique_id": "model.test.my_model", "fqn": ["test", "my_model"], "alias": "my_model", "checksum": {"name": "sha256", "checksum": "3ea0f972fa1b56aa2dc2f56ee784b6a5796312f9a813d59ae70fd8855f10d16d"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "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}, "contract": {"enforced": false}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "Example model", "columns": {"id": {"name": "id", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "test://models/schema.yml", "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1681765286.472233, "relation_name": "\"dbt\".\"test16817652848506647403_test_previous_version_state\".\"my_model\"", "raw_code": "select 1 as id", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": [], "public_nodes": []}, "compiled_path": null, "contract": {"enforced": false, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null}, "snapshot.test.snapshot_seed": {"database": "dbt", "schema": "test16817652848506647403_test_previous_version_state", "name": "snapshot_seed", "resource_type": "snapshot", "package_name": "test", "path": "snapshot_seed.sql", "original_file_path": "snapshots/snapshot_seed.sql", "unique_id": "snapshot.test.snapshot_seed", "fqn": ["test", "snapshot_seed", "snapshot_seed"], "alias": "snapshot_seed", "checksum": {"name": "sha256", "checksum": "5fc998f39655f8fe52443a919e749b6e23883ef90202b040412baac13c6bfe18"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "snapshot", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": "id", "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false}, "strategy": "check", "target_schema": "test16817652848506647403_test_previous_version_state", "target_database": null, "updated_at": null, "check_cols": "all", "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"unique_key": "id", "strategy": "check", "check_cols": "all", "target_schema": "test16817652848506647403_test_previous_version_state"}, "created_at": 1681765286.142283, "relation_name": "\"dbt\".\"test16817652848506647403_test_previous_version_state\".\"snapshot_seed\"", "raw_code": "\n{{\n config(\n unique_key='id',\n strategy='check',\n check_cols='all',\n target_schema=schema,\n )\n}}\nselect * from {{ ref('my_seed') }}\n", "language": "sql", "refs": [{"name": "my_seed", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": ["seed.test.my_seed"]}, "compiled_path": null, "contract": {"enforced": false, "checksum": null}}, "analysis.test.a": {"database": "dbt", "schema": "test16817652848506647403_test_previous_version_state", "name": "a", "resource_type": "analysis", "package_name": "test", "path": "analysis/a.sql", "original_file_path": "analyses/a.sql", "unique_id": "analysis.test.a", "fqn": ["test", "analysis", "a"], "alias": "a", "checksum": {"name": "sha256", "checksum": "a389c282f569f0bbdc2a8a4f174dea746c28582fdaf2048d31d9226af9feab23"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "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}, "contract": {"enforced": false}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1681765286.286958, "relation_name": null, "raw_code": "select 4 as id", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "checksum": null}}, "test.test.just_my": {"database": "dbt", "schema": "test16817652848506647403_test_previous_version_state_dbt_test__audit", "name": "just_my", "resource_type": "test", "package_name": "test", "path": "just_my.sql", "original_file_path": "tests/just_my.sql", "unique_id": "test.test.just_my", "fqn": ["test", "just_my"], "alias": "just_my", "checksum": {"name": "sha256", "checksum": "744889a2e2d9ce380619265e1217d7ccf6e6ca896c048d42ebe0f9cfb74d7156"}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["data_test_tag"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["data_test_tag"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"tags": ["data_test_tag"]}, "created_at": 1681765286.4204879, "relation_name": null, "raw_code": "{{ config(tags = ['data_test_tag']) }}\n\nselect * from {{ ref('my_model') }}\nwhere false", "language": "sql", "refs": [{"name": "my_model", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": ["model.test.my_model"]}, "compiled_path": null, "contract": {"enforced": false, "checksum": null}}, "seed.test.my_seed": {"database": "dbt", "schema": "test16817652848506647403_test_previous_version_state", "name": "my_seed", "resource_type": "seed", "package_name": "test", "path": "my_seed.csv", "original_file_path": "seeds/my_seed.csv", "unique_id": "seed.test.my_seed", "fqn": ["test", "my_seed"], "alias": "my_seed", "checksum": {"name": "sha256", "checksum": "f7ede83f36165ac6b7a047aa2c3f212dff385bfa9f35f395108cd06fc8e96943"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "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}, "contract": {"enforced": false}, "quote_columns": null, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1681765286.443077, "relation_name": "\"dbt\".\"test16817652848506647403_test_previous_version_state\".\"my_seed\"", "raw_code": "", "root_path": "/private/var/folders/qt/vw8wqdgx4w381wh14b9y25m40000gn/T/pytest-of-gerda/pytest-600/project6", "depends_on": {"macros": []}}, "test.test.not_null_my_model_id.43e0e9183a": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "id", "model": "{{ get_where_subquery(ref('my_model')) }}"}, "namespace": null}, "database": "dbt", "schema": "test16817652848506647403_test_previous_version_state_dbt_test__audit", "name": "not_null_my_model_id", "resource_type": "test", "package_name": "test", "path": "not_null_my_model_id.sql", "original_file_path": "models/schema.yml", "unique_id": "test.test.not_null_my_model_id.43e0e9183a", "fqn": ["test", "not_null_my_model_id"], "alias": "not_null_my_model_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, "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, "deferred": false, "unrendered_config": {}, "created_at": 1681765286.475051, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "my_model", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.test.my_model"]}, "compiled_path": null, "contract": {"enforced": false, "checksum": null}, "column_name": "id", "file_key_name": "models.my_model", "attached_node": "model.test.my_model"}, "test.test.check_nothing_my_model_.d5a5e66110": {"test_metadata": {"name": "check_nothing", "kwargs": {"model": "{{ get_where_subquery(ref('my_model')) }}"}, "namespace": null}, "database": "dbt", "schema": "test16817652848506647403_test_previous_version_state_dbt_test__audit", "name": "check_nothing_my_model_", "resource_type": "test", "package_name": "test", "path": "check_nothing_my_model_.sql", "original_file_path": "models/schema.yml", "unique_id": "test.test.check_nothing_my_model_.d5a5e66110", "fqn": ["test", "check_nothing_my_model_"], "alias": "check_nothing_my_model_", "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, "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, "deferred": false, "unrendered_config": {}, "created_at": 1681765286.4796748, "relation_name": null, "raw_code": "{{ test_check_nothing(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "my_model", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.test.test_check_nothing", "macro.dbt.get_where_subquery"], "nodes": ["model.test.my_model"]}, "compiled_path": null, "contract": {"enforced": false, "checksum": null}, "column_name": null, "file_key_name": "models.my_model", "attached_node": "model.test.my_model"}}, "sources": {"source.test.my_source.my_table": {"database": "dbt", "schema": "my_source", "name": "my_table", "resource_type": "source", "package_name": "test", "path": "models/schema.yml", "original_file_path": "models/schema.yml", "unique_id": "source.test.my_source.my_table", "fqn": ["test", "my_source", "my_table"], "source_name": "my_source", "source_description": "My source", "loader": "a_loader", "identifier": "my_seed", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "My table", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {}, "relation_name": "\"dbt\".\"my_source\".\"my_seed\"", "created_at": 1681765286.764481}}, "macros": {"macro.test.test_check_nothing": {"name": "test_check_nothing", "resource_type": "macro", "package_name": "test", "path": "macros/dummy_test.sql", "original_file_path": "macros/dummy_test.sql", "unique_id": "macro.test.test_check_nothing", "macro_sql": "{% test check_nothing(model) %}\n-- a silly test to make sure that table-level tests show up in the manifest\n-- without a column_name field\n\nselect 0\n\n{% endtest %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1681765284.988441, "supported_languages": null}, "macro.test.test_disabled_check_nothing": {"name": "test_disabled_check_nothing", "resource_type": "macro", "package_name": "test", "path": "macros/disabled_dummy_test.sql", "original_file_path": "macros/disabled_dummy_test.sql", "unique_id": "macro.test.test_disabled_check_nothing", "macro_sql": "{% test disabled_check_nothing(model) %}\n-- a silly test to make sure that table-level tests show up in the manifest\n-- without a column_name field\n\n{{ config(enabled=False) }}\nselect 0\n\n{% endtest %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1681765284.989334, "supported_languages": null}, "macro.test.do_nothing": {"name": "do_nothing", "resource_type": "macro", "package_name": "test", "path": "macros/do_nothing.sql", "original_file_path": "macros/do_nothing.sql", "unique_id": "macro.test.do_nothing", "macro_sql": "{% macro do_nothing(foo2, bar2) %}\n select\n '{{ foo2 }}' as foo2,\n '{{ bar2 }}' as bar2\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1681765284.99017, "supported_languages": null}, "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": 1681765284.9916, "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": 1681765284.9925592, "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": 1681765284.9931011, "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": 1681765284.993658, "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": 1681765284.994296, "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": 1681765284.9990342, "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": 1681765285.001633, "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 {{ get_table_columns_and_constraints() }} ;\n insert into {{ relation }} {{ get_column_names() }}\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_postgres.get_column_names", "macro.dbt.get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1681765285.023157, "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": 1681765285.025606, "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": 1681765285.0267, "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": 1681765285.0277581, "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": 1681765285.0293078, "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": 1681765285.0309381, "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": 1681765285.031904, "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": 1681765285.0337138, "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": 1681765285.0352619, "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": 1681765285.038024, "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": 1681765285.038731, "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": 1681765285.040375, "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": 1681765285.041929, "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": 1681765285.044319, "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": 1681765285.0456471, "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": 1681765285.047966, "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": 1681765285.048686, "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": 1681765285.0490959, "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": 1681765285.0503528, "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": 1681765285.052476, "supported_languages": null}, "macro.dbt_postgres.get_column_names": {"name": "get_column_names", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/columns_spec_ddl.sql", "original_file_path": "macros/utils/columns_spec_ddl.sql", "unique_id": "macro.dbt_postgres.get_column_names", "macro_sql": "{% macro get_column_names() %}\n {# loop through user_provided_columns to get column names #}\n {%- set user_provided_columns = model['columns'] -%}\n (\n {% for i in user_provided_columns %}\n {% set col = user_provided_columns[i] %}\n {{ col['name'] }} {{ \",\" 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": 1681765285.053956, "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": 1681765285.054674, "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": 1681765285.057587, "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": 1681765285.068467, "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": 1681765285.069037, "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": 1681765285.070621, "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": 1681765285.0719318, "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": 1681765285.07588, "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": 1681765285.076942, "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": 1681765285.077777, "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": 1681765285.078659, "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": 1681765285.0794592, "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": 1681765285.0811782, "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": 1681765285.082933, "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": 1681765285.08456, "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": 1681765285.086729, "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": 1681765285.088037, "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": 1681765285.100239, "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": 1681765285.100829, "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": 1681765285.101579, "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": 1681765285.104542, "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": 1681765285.105419, "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": 1681765285.106352, "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": 1681765285.113815, "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": 1681765285.119117, "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": 1681765285.1292858, "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": 1681765285.130292, "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": 1681765285.130888, "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": 1681765285.131217, "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": 1681765285.1317189, "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": 1681765285.132121, "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": 1681765285.132813, "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": 1681765285.135626, "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": 1681765285.136369, "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": 1681765285.137247, "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": 1681765285.1386938, "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": 1681765285.1590972, "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": 1681765285.165946, "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": 1681765285.1673322, "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": 1681765285.170771, "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": 1681765285.1740868, "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": 1681765285.17696, "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": 1681765285.187813, "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": 1681765285.1896791, "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": 1681765285.192773, "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": 1681765285.1950452, "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": 1681765285.203396, "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": 1681765285.231102, "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": 1681765285.2380428, "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": 1681765285.2389219, "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": 1681765285.2424781, "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": 1681765285.243894, "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": 1681765285.247385, "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": 1681765285.2502668, "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": 1681765285.253136, "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": 1681765285.254039, "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": 1681765285.254694, "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": 1681765285.25567, "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": 1681765285.256355, "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": 1681765285.257864, "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": 1681765285.258934, "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": 1681765285.260382, "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": 1681765285.261295, "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": 1681765285.261853, "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": 1681765285.262785, "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": 1681765285.279187, "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": 1681765285.2952828, "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": 1681765285.300311, "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": 1681765285.305781, "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": 1681765285.3093288, "supported_languages": null}, "macro.dbt.get_table_columns_and_constraints": {"name": "get_table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table/columns_spec_ddl.sql", "original_file_path": "macros/materializations/models/table/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": 1681765285.313204, "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/materializations/models/table/columns_spec_ddl.sql", "original_file_path": "macros/materializations/models/table/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": 1681765285.313637, "supported_languages": null}, "macro.dbt.table_columns_and_constraints": {"name": "table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table/columns_spec_ddl.sql", "original_file_path": "macros/materializations/models/table/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": 1681765285.3153942, "supported_languages": null}, "macro.dbt.get_assert_columns_equivalent": {"name": "get_assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table/columns_spec_ddl.sql", "original_file_path": "macros/materializations/models/table/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": 1681765285.3159528, "supported_languages": null}, "macro.dbt.default__get_assert_columns_equivalent": {"name": "default__get_assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table/columns_spec_ddl.sql", "original_file_path": "macros/materializations/models/table/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": 1681765285.3164108, "supported_languages": null}, "macro.dbt.assert_columns_equivalent": {"name": "assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table/columns_spec_ddl.sql", "original_file_path": "macros/materializations/models/table/columns_spec_ddl.sql", "unique_id": "macro.dbt.assert_columns_equivalent", "macro_sql": "{% macro assert_columns_equivalent(sql) %}\n {#-- Obtain the column schema provided by sql file. #}\n {%- set sql_file_provided_columns = get_column_schema_from_query(sql) -%}\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(model['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": 1681765285.320151, "supported_languages": null}, "macro.dbt.format_columns": {"name": "format_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table/columns_spec_ddl.sql", "original_file_path": "macros/materializations/models/table/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": 1681765285.321425, "supported_languages": null}, "macro.dbt.default__format_column": {"name": "default__format_column", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table/columns_spec_ddl.sql", "original_file_path": "macros/materializations/models/table/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": 1681765285.322925, "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": 1681765285.335243, "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": 1681765285.339065, "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": 1681765285.340021, "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": 1681765285.3425002, "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 {% 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{%- 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": 1681765285.3450649, "supported_languages": null}, "macro.dbt.get_select_subquery": {"name": "get_select_subquery", "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_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": 1681765285.345741, "supported_languages": null}, "macro.dbt.default__get_select_subquery": {"name": "default__get_select_subquery", "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_select_subquery", "macro_sql": "{% macro default__get_select_subquery(sql) %}\n select\n {% for column in model['columns'] %}\n {{ column }}{{ \", \" if not loop.last }}\n {% endfor %}\n from (\n {{ sql }}\n ) as model_subq\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1681765285.346612, "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": 1681765285.355264, "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": 1681765285.356865, "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": 1681765285.358191, "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=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": 1681765285.363323, "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": 1681765285.3646479, "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": 1681765285.365272, "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": 1681765285.365932, "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 }}\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": 1681765285.3673458, "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": 1681765285.378048, "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": 1681765285.393653, "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": 1681765285.3983638, "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": 1681765285.399613, "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": 1681765285.40133, "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": 1681765285.402015, "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": 1681765285.402716, "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": 1681765285.403498, "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": 1681765285.404243, "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": 1681765285.4052322, "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": 1681765285.406008, "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": 1681765285.408007, "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": 1681765285.408972, "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": 1681765285.413654, "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": 1681765285.415117, "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": 1681765285.4166331, "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": 1681765285.418188, "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": 1681765285.4190989, "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": 1681765285.4200692, "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": 1681765285.4219341, "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": 1681765285.42356, "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": 1681765285.425482, "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": 1681765285.42728, "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": 1681765285.428704, "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": 1681765285.431814, "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": 1681765285.437546, "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": 1681765285.4396338, "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": 1681765285.440604, "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": 1681765285.447525, "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": 1681765285.4520488, "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": 1681765285.455408, "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": 1681765285.4567401, "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": 1681765285.458046, "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": 1681765285.45853, "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": 1681765285.460074, "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": 1681765285.460947, "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": 1681765285.4621649, "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": 1681765285.463027, "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": 1681765285.464535, "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": 1681765285.465174, "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": 1681765285.466362, "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": 1681765285.466932, "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": 1681765285.46766, "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": 1681765285.467943, "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": 1681765285.4687831, "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": 1681765285.4692538, "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": 1681765285.470367, "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": 1681765285.471358, "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": 1681765285.4743428, "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": 1681765285.4766002, "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": 1681765285.4779341, "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": 1681765285.47853, "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": 1681765285.4795399, "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": 1681765285.4803882, "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": 1681765285.48174, "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": 1681765285.4826639, "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": 1681765285.4838998, "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": 1681765285.4848268, "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": 1681765285.486154, "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": 1681765285.486689, "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": 1681765285.487958, "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": 1681765285.488462, "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": 1681765285.489259, "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": 1681765285.4896178, "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": 1681765285.492476, "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": 1681765285.4930198, "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": 1681765285.494025, "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": 1681765285.4945521, "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": 1681765285.495102, "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": 1681765285.495617, "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": 1681765285.496161, "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": 1681765285.496959, "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": 1681765285.497797, "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": 1681765285.4985201, "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": 1681765285.4995358, "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": 1681765285.500337, "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": 1681765285.50122, "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": 1681765285.502151, "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": 1681765285.503809, "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": 1681765285.504548, "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": 1681765285.505891, "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": 1681765285.5064828, "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": 1681765285.508346, "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": 1681765285.510078, "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": 1681765285.5108259, "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": 1681765285.512352, "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": 1681765285.512924, "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": 1681765285.513867, "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": 1681765285.514844, "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": 1681765285.515432, "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": 1681765285.517139, "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": 1681765285.5182421, "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": 1681765285.519657, "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": 1681765285.520381, "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": 1681765285.521816, "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": 1681765285.522871, "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": 1681765285.5238159, "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": 1681765285.5247989, "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": 1681765285.526212, "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": 1681765285.526728, "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": 1681765285.527214, "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": 1681765285.527582, "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": 1681765285.5281448, "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": 1681765285.528411, "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": 1681765285.5290399, "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": 1681765285.5296772, "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": 1681765285.5310788, "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": 1681765285.531748, "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": 1681765285.5322912, "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": 1681765285.533636, "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": 1681765285.541701, "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": 1681765285.54245, "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": 1681765285.543215, "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": 1681765285.544181, "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": 1681765285.5449972, "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": 1681765285.546206, "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": 1681765285.546863, "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": 1681765285.547938, "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": 1681765285.548612, "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": 1681765285.5491798, "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": 1681765285.54987, "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": 1681765285.5508428, "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": 1681765285.5516741, "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": 1681765285.555399, "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": 1681765285.5572731, "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": 1681765285.557798, "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": 1681765285.558468, "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": 1681765285.5597389, "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": 1681765285.561103, "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": 1681765285.567491, "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": 1681765285.567991, "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": 1681765285.568581, "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": 1681765285.569404, "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": 1681765285.5731158, "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": 1681765285.573929, "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": 1681765285.574301, "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": 1681765285.575246, "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": 1681765285.5760052, "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": 1681765285.5767932, "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": 1681765285.577448, "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": 1681765285.579498, "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": 1681765285.5875552, "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": 1681765285.5899708, "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": 1681765285.593122, "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": 1681765285.5958788, "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": 1681765285.60791, "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": 1681765285.610055, "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": 1681765285.610645, "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": 1681765285.611326, "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": 1681765285.611895, "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": 1681765285.612798, "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": 1681765285.6151118, "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": 1681765285.618986, "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": 1681765285.619884, "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": 1681765285.620524, "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": 1681765285.621061, "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": 1681765285.621661, "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": 1681765285.622491, "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": 1681765285.623289, "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": 1681765285.624913, "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": 1681765285.625965, "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": 1681765285.6267369, "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": 1681765285.632364, "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": 1681765285.633219, "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": 1681765285.63434, "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) -%}\n {{ return(adapter.dispatch('get_empty_subquery_sql', 'dbt')(select_sql)) }}\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": 1681765285.635029, "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) %}\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": 1681765285.6354089, "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": 1681765285.6360111, "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 select\n {% for i in columns %}\n {%- set col = columns[i] -%}\n {%- if col['data_type'] is not defined -%}\n {{ col_err.append(col['name']) }}\n {%- endif -%}\n cast(null as {{ 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 {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1681765285.638068, "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) -%}\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) %}\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": 1681765285.639094, "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": 1681765285.6398258, "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": 1681765285.6413481, "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": 1681765285.6427572, "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": 1681765285.6450932, "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": 1681765285.646657, "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": 1681765285.65105, "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": 1681765285.657228, "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": 1681765285.658139, "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": 1681765285.661082, "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": 1681765285.662658, "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": 1681765285.665552, "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": 1681765285.667629, "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": 1681765285.6680708, "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": 1681765285.6705642, "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": 1681765285.671791, "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": 1681765285.6731951, "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": 1681765285.67468, "supported_languages": null}}, "docs": {"doc.test.somedoc": {"name": "somedoc", "resource_type": "doc", "package_name": "test", "path": "somedoc.md", "original_file_path": "models/somedoc.md", "unique_id": "doc.test.somedoc", "block_contents": "Testing, testing"}, "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": {"exposure.test.simple_exposure": {"name": "simple_exposure", "resource_type": "exposure", "package_name": "test", "path": "schema.yml", "original_file_path": "models/schema.yml", "unique_id": "exposure.test.simple_exposure", "fqn": ["test", "simple_exposure"], "type": "dashboard", "owner": {"email": "something@example.com", "name": null}, "description": "", "label": null, "maturity": null, "meta": {}, "tags": [], "config": {"enabled": true}, "unrendered_config": {}, "url": null, "depends_on": {"macros": [], "nodes": ["source.test.my_source.my_table", "model.test.my_model"]}, "refs": [{"name": "my_model", "package": null, "version": null}], "sources": [["my_source", "my_table"]], "metrics": [], "created_at": 1681765286.509548}}, "metrics": {"metric.test.my_metric": {"name": "my_metric", "resource_type": "metric", "package_name": "test", "path": "schema.yml", "original_file_path": "models/schema.yml", "unique_id": "metric.test.my_metric", "fqn": ["test", "my_metric"], "description": "", "label": "Count records", "calculation_method": "count", "expression": "*", "filters": [], "time_grains": ["day"], "dimensions": [], "timestamp": "updated_at", "window": null, "model": "ref('my_model')", "model_unique_id": null, "meta": {}, "tags": [], "config": {"enabled": true, "group": null}, "unrendered_config": {}, "sources": [], "depends_on": {"macros": [], "nodes": ["model.test.my_model"]}, "refs": [{"name": "my_model", "package": null, "version": null}], "metrics": [], "created_at": 1681765286.751749, "group": null}}, "groups": {}, "selectors": {}, "disabled": {"model.test.disabled_model": [{"database": "dbt", "schema": "test16817652848506647403_test_previous_version_state", "name": "disabled_model", "resource_type": "model", "package_name": "test", "path": "disabled_model.sql", "original_file_path": "models/disabled_model.sql", "unique_id": "model.test.disabled_model", "fqn": ["test", "disabled_model"], "alias": "disabled_model", "checksum": {"name": "sha256", "checksum": "597106d23ce34e3cd2430588e5c1cf474ebdd138fc47e09b925a4ab258a27acc"}, "config": {"enabled": false, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "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}, "contract": {"enforced": false}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"enabled": false}, "created_at": 1681765286.129226, "config_call_dict": {"enabled": false}, "relation_name": "\"dbt\".\"test16817652848506647403_test_previous_version_state\".\"disabled_model\"", "raw_code": "{{ config(enabled=False) }}\nselect 2 as id", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": [], "public_nodes": []}, "compiled_path": null, "contract": {"enforced": false, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null}], "snapshot.test.disabled_snapshot_seed": [{"database": "dbt", "schema": "test16817652848506647403_test_previous_version_state", "name": "disabled_snapshot_seed", "resource_type": "snapshot", "package_name": "test", "path": "disabled_snapshot_seed.sql", "original_file_path": "snapshots/disabled_snapshot_seed.sql", "unique_id": "snapshot.test.disabled_snapshot_seed", "fqn": ["test", "disabled_snapshot_seed", "disabled_snapshot_seed"], "alias": "disabled_snapshot_seed", "checksum": {"name": "sha256", "checksum": "fe76c9dd437341c9e82a0f2a8baf3148f961b768eaa0a4410cd27d3c071bd617"}, "config": {"enabled": false, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "snapshot", "incremental_strategy": null, "persist_docs": {}, "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": "id", "on_schema_change": "ignore", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false}, "strategy": "check", "target_schema": "test16817652848506647403_test_previous_version_state", "target_database": null, "updated_at": null, "check_cols": "all", "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"unique_key": "id", "strategy": "check", "check_cols": "all", "target_schema": "test16817652848506647403_test_previous_version_state", "enabled": false}, "created_at": 1681765286.152009, "config_call_dict": {"unique_key": "id", "strategy": "check", "check_cols": "all", "target_schema": "test16817652848506647403_test_previous_version_state", "enabled": false}, "relation_name": "\"dbt\".\"test16817652848506647403_test_previous_version_state\".\"disabled_snapshot_seed\"", "raw_code": "\n{{\n config(\n unique_key='id',\n strategy='check',\n check_cols='all',\n target_schema=schema,\n enabled=False,\n )\n}}\nselect * from {{ ref('my_seed') }}\n", "language": "sql", "refs": [{"name": "my_seed", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "checksum": null}}], "analysis.test.disabled_al": [{"database": "dbt", "schema": "test16817652848506647403_test_previous_version_state", "name": "disabled_al", "resource_type": "analysis", "package_name": "test", "path": "analysis/disabled_al.sql", "original_file_path": "analyses/disabled_al.sql", "unique_id": "analysis.test.disabled_al", "fqn": ["test", "analysis", "disabled_al"], "alias": "disabled_al", "checksum": {"name": "sha256", "checksum": "32d36ad6cff0786eb562440ba60ef6c9b9a7f4c282dfb7a52eaf19d36370f0e1"}, "config": {"enabled": false, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "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}, "contract": {"enforced": false}, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"enabled": false}, "created_at": 1681765286.2765188, "config_call_dict": {"enabled": false}, "relation_name": null, "raw_code": "{{ config(enabled=False) }}\nselect 9 as id", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "checksum": null}}], "test.test.disabled_just_my": [{"database": "dbt", "schema": "test16817652848506647403_test_previous_version_state_dbt_test__audit", "name": "disabled_just_my", "resource_type": "test", "package_name": "test", "path": "disabled_just_my.sql", "original_file_path": "tests/disabled_just_my.sql", "unique_id": "test.test.disabled_just_my", "fqn": ["test", "disabled_just_my"], "alias": "disabled_just_my", "checksum": {"name": "sha256", "checksum": "4f2268fd89a3b4ef899264ada6d7aa33603671cbc5d5acead7dc2eadf1add985"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": 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, "deferred": false, "unrendered_config": {"enabled": false}, "created_at": 1681765286.411446, "config_call_dict": {"enabled": false}, "relation_name": null, "raw_code": "{{ config(enabled=False) }}\n\nselect * from {{ ref('my_model') }}\nwhere false", "language": "sql", "refs": [{"name": "my_model", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "checksum": null}}], "test.test.disabled_check_nothing_my_model_.f2c6a72d37": [{"test_metadata": {"name": "disabled_check_nothing", "kwargs": {"model": "{{ get_where_subquery(ref('my_model')) }}"}, "namespace": null}, "database": "dbt", "schema": "test16817652848506647403_test_previous_version_state_dbt_test__audit", "name": "disabled_check_nothing_my_model_", "resource_type": "test", "package_name": "test", "path": "disabled_check_nothing_my_model_.sql", "original_file_path": "models/schema.yml", "unique_id": "test.test.disabled_check_nothing_my_model_.f2c6a72d37", "fqn": ["test", "disabled_check_nothing_my_model_"], "alias": "disabled_check_nothing_my_model_", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": 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, "deferred": false, "unrendered_config": {"enabled": false}, "created_at": 1681765286.4888241, "config_call_dict": {"enabled": false}, "relation_name": null, "raw_code": "{{ test_disabled_check_nothing(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "my_model", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.test.test_disabled_check_nothing", "macro.dbt.get_where_subquery"], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "checksum": null}, "column_name": null, "file_key_name": "models.my_model", "attached_node": "model.test.my_model"}], "exposure.test.disabled_exposure": [{"name": "disabled_exposure", "resource_type": "exposure", "package_name": "test", "path": "schema.yml", "original_file_path": "models/schema.yml", "unique_id": "exposure.test.disabled_exposure", "fqn": ["test", "disabled_exposure"], "type": "dashboard", "owner": {"email": "something@example.com", "name": null}, "description": "", "label": null, "maturity": null, "meta": {}, "tags": [], "config": {"enabled": false}, "unrendered_config": {"enabled": false}, "url": null, "depends_on": {"macros": [], "nodes": []}, "refs": [{"name": "my_model", "package": null, "version": null}], "sources": [], "metrics": [], "created_at": 1681765286.514165}], "metric.test.disabled_metric": [{"name": "disabled_metric", "resource_type": "metric", "package_name": "test", "path": "schema.yml", "original_file_path": "models/schema.yml", "unique_id": "metric.test.disabled_metric", "fqn": ["test", "disabled_metric"], "description": "", "label": "Count records", "calculation_method": "count", "expression": "*", "filters": [], "time_grains": ["day"], "dimensions": [], "timestamp": "updated_at", "window": null, "model": "ref('my_model')", "model_unique_id": null, "meta": {}, "tags": [], "config": {"enabled": false, "group": null}, "unrendered_config": {"enabled": false}, "sources": [], "depends_on": {"macros": [], "nodes": []}, "refs": [{"name": "my_model", "package": null, "version": null}], "metrics": [], "created_at": 1681765286.759514, "group": null}], "seed.test.disabled_seed": [{"database": "dbt", "schema": "test16817652848506647403_test_previous_version_state", "name": "disabled_seed", "resource_type": "seed", "package_name": "test", "path": "disabled_seed.csv", "original_file_path": "seeds/disabled_seed.csv", "unique_id": "seed.test.disabled_seed", "fqn": ["test", "disabled_seed"], "alias": "disabled_seed", "checksum": {"name": "sha256", "checksum": "31fddd8ec40c6aba6a3a8e7d83fedea2fd0a56c47b64ea3df1847ec1b018e2d1"}, "config": {"enabled": false, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "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}, "contract": {"enforced": false}, "quote_columns": null, "post-hook": [], "pre-hook": []}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "test://models/schema.yml", "build_path": null, "deferred": false, "unrendered_config": {"enabled": false}, "created_at": 1681765286.501188, "config_call_dict": {}, "relation_name": "\"dbt\".\"test16817652848506647403_test_previous_version_state\".\"disabled_seed\"", "raw_code": "", "root_path": "/private/var/folders/qt/vw8wqdgx4w381wh14b9y25m40000gn/T/pytest-of-gerda/pytest-600/project6", "depends_on": {"macros": []}}], "source.test.my_source.disabled_table": [{"database": "dbt", "schema": "my_source", "name": "disabled_table", "resource_type": "source", "package_name": "test", "path": "models/schema.yml", "original_file_path": "models/schema.yml", "unique_id": "source.test.my_source.disabled_table", "fqn": ["test", "my_source", "disabled_table"], "source_name": "my_source", "source_description": "My source", "loader": "a_loader", "identifier": "disabled_table", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Disabled table", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": false}, "patch_path": null, "unrendered_config": {"enabled": false}, "relation_name": "\"dbt\".\"my_source\".\"disabled_table\"", "created_at": 1681765286.765145}]}, "parent_map": {"model.test.my_model": [], "snapshot.test.snapshot_seed": ["seed.test.my_seed"], "analysis.test.a": [], "test.test.just_my": ["model.test.my_model"], "seed.test.my_seed": [], "test.test.not_null_my_model_id.43e0e9183a": ["model.test.my_model"], "test.test.check_nothing_my_model_.d5a5e66110": ["model.test.my_model"], "source.test.my_source.my_table": [], "exposure.test.simple_exposure": ["model.test.my_model", "source.test.my_source.my_table"], "metric.test.my_metric": ["model.test.my_model"]}, "child_map": {"model.test.my_model": ["exposure.test.simple_exposure", "metric.test.my_metric", "test.test.check_nothing_my_model_.d5a5e66110", "test.test.just_my", "test.test.not_null_my_model_id.43e0e9183a"], "snapshot.test.snapshot_seed": [], "analysis.test.a": [], "test.test.just_my": [], "seed.test.my_seed": ["snapshot.test.snapshot_seed"], "test.test.not_null_my_model_id.43e0e9183a": [], "test.test.check_nothing_my_model_.d5a5e66110": [], "source.test.my_source.my_table": ["exposure.test.simple_exposure"], "exposure.test.simple_exposure": [], "metric.test.my_metric": []}, "group_map": {}, "public_nodes": {}} diff --git a/tests/functional/artifacts/expected_manifest.py b/tests/functional/artifacts/expected_manifest.py index 81956385efb..4268797bf69 100644 --- a/tests/functional/artifacts/expected_manifest.py +++ b/tests/functional/artifacts/expected_manifest.py @@ -262,7 +262,7 @@ def expected_seeded_manifest(project, model_database=None, quote_model=False): "language": "sql", "refs": [{"name": "seed", "package": None, "version": None}], "sources": [], - "depends_on": {"nodes": ["seed.test.seed"], "macros": []}, + "depends_on": {"nodes": ["seed.test.seed"], "macros": [], "public_nodes": []}, "unique_id": "model.test.model", "fqn": ["test", "model"], "metrics": [], @@ -354,7 +354,7 @@ def expected_seeded_manifest(project, model_database=None, quote_model=False): "language": "sql", "refs": [{"name": "seed", "package": None, "version": None}], "sources": [], - "depends_on": {"nodes": ["seed.test.seed"], "macros": []}, + "depends_on": {"nodes": ["seed.test.seed"], "macros": [], "public_nodes": []}, "unique_id": "model.test.second_model", "fqn": ["test", "second_model"], "metrics": [], @@ -881,6 +881,7 @@ def expected_seeded_manifest(project, model_database=None, quote_model=False): "doc.test.macro_arg_info": ANY, }, "disabled": {}, + "public_nodes": {}, } @@ -913,7 +914,11 @@ def expected_references_manifest(project): "columns": {}, "config": get_rendered_model_config(materialized="ephemeral"), "sources": [["my_source", "my_table"]], - "depends_on": {"macros": [], "nodes": ["source.test.my_source.my_table"]}, + "depends_on": { + "macros": [], + "nodes": ["source.test.my_source.my_table"], + "public_nodes": [], + }, "deferred": False, "description": "", "docs": {"node_color": None, "show": True}, @@ -975,7 +980,11 @@ def expected_references_manifest(project): "config": get_rendered_model_config(materialized="table", group="test_group"), "contract": {"checksum": None, "enforced": False}, "sources": [], - "depends_on": {"macros": [], "nodes": ["model.test.ephemeral_copy"]}, + "depends_on": { + "macros": [], + "nodes": ["model.test.ephemeral_copy"], + "public_nodes": [], + }, "deferred": False, "description": "A summmary table of the ephemeral copy of the seed data", "docs": {"node_color": None, "show": True}, @@ -1040,7 +1049,11 @@ def expected_references_manifest(project): "config": get_rendered_model_config(), "contract": {"checksum": None, "enforced": False}, "database": project.database, - "depends_on": {"macros": [], "nodes": ["model.test.ephemeral_summary"]}, + "depends_on": { + "macros": [], + "nodes": ["model.test.ephemeral_summary"], + "public_nodes": [], + }, "deferred": False, "description": "A view of the summary of the ephemeral copy of the seed data", "docs": {"node_color": None, "show": True}, @@ -1377,6 +1390,7 @@ def expected_references_manifest(project): "unique_id": "doc.test.macro_arg_info", }, }, + "public_nodes": {}, "child_map": { "model.test.ephemeral_copy": ["model.test.ephemeral_summary"], "exposure.test.notebook_exposure": [], @@ -1482,7 +1496,7 @@ def expected_versions_manifest(project): ), "constraints": [], "sources": [], - "depends_on": {"macros": [], "nodes": []}, + "depends_on": {"macros": [], "nodes": [], "public_nodes": []}, "deferred": False, "description": "A versioned model", "docs": {"node_color": None, "show": True}, @@ -1552,7 +1566,7 @@ def expected_versions_manifest(project): "constraints": [], "contract": {"checksum": None, "enforced": False}, "sources": [], - "depends_on": {"macros": [], "nodes": []}, + "depends_on": {"macros": [], "nodes": [], "public_nodes": []}, "deferred": False, "description": "A versioned model", "docs": {"node_color": None, "show": True}, @@ -1607,6 +1621,7 @@ def expected_versions_manifest(project): "model.test.versioned_model.v2", "model.test.versioned_model.v1", ], + "public_nodes": [], }, "deferred": False, "description": "", @@ -1905,4 +1920,5 @@ def expected_versions_manifest(project): }, "disabled": {}, "macros": {}, + "public_nodes": {}, } diff --git a/tests/functional/artifacts/test_artifacts.py b/tests/functional/artifacts/test_artifacts.py index 8f6ff897153..636a810220d 100644 --- a/tests/functional/artifacts/test_artifacts.py +++ b/tests/functional/artifacts/test_artifacts.py @@ -446,6 +446,7 @@ def verify_manifest(project, expected_manifest, start_time, manifest_schema_path "disabled", "exposures", "selectors", + "public_nodes", } assert set(manifest.keys()) == manifest_keys diff --git a/tests/functional/artifacts/test_previous_version_state.py b/tests/functional/artifacts/test_previous_version_state.py index 26218fc9ef1..6a4c367fc0d 100644 --- a/tests/functional/artifacts/test_previous_version_state.py +++ b/tests/functional/artifacts/test_previous_version_state.py @@ -204,7 +204,7 @@ class TestPreviousVersionState: - CURRENT_EXPECTED_MANIFEST_VERSION = 9 + CURRENT_EXPECTED_MANIFEST_VERSION = 10 @pytest.fixture(scope="class") def models(self): @@ -313,7 +313,7 @@ def test_compare_state_current(self, project): current_schema_version == self.CURRENT_EXPECTED_MANIFEST_VERSION ), "Sounds like you've bumped the manifest version and need to update this test!" # If we need a newly generated manifest, uncomment the following line and commit the result - # self.generate_latest_manifest(project, current_schema_version) + self.generate_latest_manifest(project, current_schema_version) self.compare_previous_state(project, current_schema_version, True) def test_backwards_compatible_versions(self, project): diff --git a/tests/functional/list/test_list.py b/tests/functional/list/test_list.py index fe75c253271..648c8615d2d 100644 --- a/tests/functional/list/test_list.py +++ b/tests/functional/list/test_list.py @@ -155,7 +155,7 @@ def expect_model_output(self): { "name": "ephemeral", "package_name": "test", - "depends_on": {"nodes": [], "macros": []}, + "depends_on": {"nodes": [], "macros": [], "public_nodes": []}, "tags": [], "config": { "enabled": True, @@ -191,6 +191,7 @@ def expect_model_output(self): "depends_on": { "nodes": ["seed.test.seed"], "macros": ["macro.dbt.is_incremental"], + "public_nodes": [], }, "tags": [], "config": { @@ -224,7 +225,11 @@ def expect_model_output(self): { "name": "inner", "package_name": "test", - "depends_on": {"nodes": ["model.test.outer"], "macros": []}, + "depends_on": { + "nodes": ["model.test.outer"], + "macros": [], + "public_nodes": [], + }, "tags": [], "config": { "enabled": True, @@ -257,7 +262,11 @@ def expect_model_output(self): { "name": "outer", "package_name": "test", - "depends_on": {"nodes": ["model.test.ephemeral"], "macros": []}, + "depends_on": { + "nodes": ["model.test.ephemeral"], + "macros": [], + "public_nodes": [], + }, "tags": [], "config": { "enabled": True, @@ -306,7 +315,7 @@ def expect_model_ephemeral_output(self): { "name": "outer", "package_name": "test", - "depends_on": {"nodes": [], "macros": []}, + "depends_on": {"nodes": [], "macros": [], "public_nodes": []}, "tags": [], "config": { "enabled": True, From fb12f7cd0bfd3d6196159e05e86b0972a136eca7 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Tue, 18 Apr 2023 12:03:13 -0400 Subject: [PATCH 19/50] re-comment line in test_previous_version_state.py --- tests/functional/artifacts/test_previous_version_state.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/functional/artifacts/test_previous_version_state.py b/tests/functional/artifacts/test_previous_version_state.py index 6a4c367fc0d..3e428a0a491 100644 --- a/tests/functional/artifacts/test_previous_version_state.py +++ b/tests/functional/artifacts/test_previous_version_state.py @@ -313,7 +313,7 @@ def test_compare_state_current(self, project): current_schema_version == self.CURRENT_EXPECTED_MANIFEST_VERSION ), "Sounds like you've bumped the manifest version and need to update this test!" # If we need a newly generated manifest, uncomment the following line and commit the result - self.generate_latest_manifest(project, current_schema_version) + # self.generate_latest_manifest(project, current_schema_version) self.compare_previous_state(project, current_schema_version, True) def test_backwards_compatible_versions(self, project): From 0dd963a34a4ba0158dd7fb17c97c1713a6f5c7ad Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Tue, 18 Apr 2023 14:33:02 -0400 Subject: [PATCH 20/50] Fix refs to manifest.json version, typo in Dependencies --- core/dbt/contracts/publication.py | 2 +- test/unit/test_manifest.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py index 5d9587f0a2d..4e0824a75ca 100644 --- a/core/dbt/contracts/publication.py +++ b/core/dbt/contracts/publication.py @@ -17,7 +17,7 @@ class DependentProjects(dbtClassMixin): @dataclass class Dependencies(dbtClassMixin): - projects: list[DependentProjects] = field(default_factory=list) + projects: List[DependentProjects] = field(default_factory=list) @dataclass diff --git a/test/unit/test_manifest.py b/test/unit/test_manifest.py index a4047d7ca25..1b72a623775 100644 --- a/test/unit/test_manifest.py +++ b/test/unit/test_manifest.py @@ -393,7 +393,7 @@ def test__no_nodes(self): "group_map": {}, "metadata": { "generated_at": "2018-02-14T09:15:13Z", - "dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v9.json", + "dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v10.json", "dbt_version": dbt.version.__version__, "env": {ENV_KEY_NAME: "value"}, "invocation_id": invocation_id, @@ -557,7 +557,7 @@ def test_no_nodes_with_metadata(self, mock_user): "docs": {}, "metadata": { "generated_at": "2018-02-14T09:15:13Z", - "dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v9.json", + "dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v10.json", "dbt_version": dbt.version.__version__, "project_id": "098f6bcd4621d373cade4e832627b4f6", "user_id": "cfc9500f-dc7f-4c83-9ea7-2c581c1b38cf", @@ -896,7 +896,7 @@ def test__no_nodes(self): "group_map": {}, "metadata": { "generated_at": "2018-02-14T09:15:13Z", - "dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v9.json", + "dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v10.json", "dbt_version": dbt.version.__version__, "invocation_id": "01234567-0123-0123-0123-0123456789ab", "env": {ENV_KEY_NAME: "value"}, From f7202ae894fca25330d7abeec06d0ef07873a593 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Tue, 18 Apr 2023 15:58:15 -0400 Subject: [PATCH 21/50] Split out PublicationArtifact and PublicationConfig, store public_models separately --- core/dbt/contracts/graph/manifest.py | 4 +-- core/dbt/contracts/publication.py | 16 +++++++++-- core/dbt/parser/manifest.py | 27 ++++++++++++++----- .../multi_project/test_publication.py | 13 ++++----- 4 files changed, 43 insertions(+), 17 deletions(-) diff --git a/core/dbt/contracts/graph/manifest.py b/core/dbt/contracts/graph/manifest.py index 9d8b6c8ce82..15702858c21 100644 --- a/core/dbt/contracts/graph/manifest.py +++ b/core/dbt/contracts/graph/manifest.py @@ -22,7 +22,7 @@ from typing_extensions import Protocol from uuid import UUID -from dbt.contracts.publication import Dependencies, Publication, PublicModel +from dbt.contracts.publication import Dependencies, PublicationConfig, PublicModel from dbt.contracts.graph.nodes import ( Macro, @@ -648,7 +648,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin): env_vars: MutableMapping[str, str] = field(default_factory=dict) public_nodes: MutableMapping[str, PublicModel] = field(default_factory=dict) dependencies: Optional[Dependencies] = None - publications: MutableMapping[str, Publication] = field(default_factory=dict) + publications: MutableMapping[str, PublicationConfig] = field(default_factory=dict) _doc_lookup: Optional[DocLookup] = field( default=None, metadata={"serialize": lambda x: None, "deserialize": lambda x: None} diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py index 4e0824a75ca..a93a156ff77 100644 --- a/core/dbt/contracts/publication.py +++ b/core/dbt/contracts/publication.py @@ -1,4 +1,5 @@ from typing import Optional, List, Dict, Any +from datetime import datetime from dbt.dataclass_schema import dbtClassMixin from dataclasses import dataclass, field @@ -22,7 +23,9 @@ class Dependencies(dbtClassMixin): @dataclass class PublicationMetadata(BaseArtifactMetadata): - dbt_schema_version: str = field(default_factory=lambda: str(Publication.dbt_schema_version)) + dbt_schema_version: str = field( + default_factory=lambda: str(PublicationArtifact.dbt_schema_version) + ) adapter_type: Optional[str] = None quoting: Dict[str, Any] = field(default_factory=dict) @@ -37,6 +40,7 @@ class PublicModel(dbtClassMixin, ManifestOrPublicNode): is_latest_version: bool = False # list of model unique_ids public_dependencies: List[str] = field(default_factory=list) + generated_at: datetime = field(default_factory=datetime.utcnow) # Needed for ref resolution code @property @@ -71,8 +75,16 @@ class PublicationMandatory: @dataclass @schema_version("publication", 1) -class Publication(ArtifactMixin, PublicationMandatory): +class PublicationArtifact(ArtifactMixin, PublicationMandatory): public_models: Dict[str, PublicModel] = field(default_factory=dict) metadata: PublicationMetadata = field(default_factory=PublicationMetadata) # list of project name strings dependencies: List[str] = field(default_factory=list) + + +@dataclass +class PublicationConfig(ArtifactMixin, PublicationMandatory): + metadata: PublicationMetadata = field(default_factory=PublicationMetadata) + # list of project name strings + dependencies: List[str] = field(default_factory=list) + public_model_ids: List[str] = field(default_factory=list) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index d8dea34cc47..15f5e593502 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -80,7 +80,13 @@ ) from dbt.contracts.graph.unparsed import NodeVersion from dbt.contracts.util import Writable -from dbt.contracts.publication import Publication, PublicationMetadata, PublicModel, Dependencies +from dbt.contracts.publication import ( + PublicationConfig, + PublicationArtifact, + PublicationMetadata, + PublicModel, + Dependencies, +) from dbt.exceptions import TargetNotFoundError, AmbiguousAliasError, PublicationConfigNotFound from dbt.parser.base import Parser from dbt.parser.analysis import AnalysisParser @@ -656,12 +662,13 @@ def write_artifacts(self): version=model.version, is_latest_version=model.is_latest_version, public_dependencies=list(public_dependencies), + generated_at=metadata.generated_at, ) public_models[unique_id] = public_model # TODO: get dependencies from dependencies.yml. When is it loaded? here? dependencies = [] - publication = Publication( + publication = PublicationArtifact( metadata=metadata, project_name=self.root_project.project_name, public_models=public_models, @@ -692,11 +699,17 @@ def build_public_nodes(self): if os.path.exists(path): contents = load_file_contents(path) pub_dict = load_yaml_text(contents) - pub_obj = Publication.from_dict(pub_dict) - self.manifest.publications[project.name] = pub_obj - # Add to dictionary of public_nodes - for external_node in pub_obj.public_models.values(): - self.manifest.public_nodes[external_node.unique_id] = external_node + PublicationArtifact.validate(pub_dict) + # separate out the public_models + public_models = pub_dict.pop("public_models") + # Create the PublicationConfig to store in internal manifest + pub_config = PublicationConfig.from_dict(pub_dict) + self.manifest.publications[project.name] = pub_config + # Add to dictionary of public_nodes and save id in PublicationConfig + for public_model_dict in public_models.values(): + public_node = PublicModel.from_dict(public_model_dict) + self.manifest.public_nodes[public_node.unique_id] = public_node + pub_config.public_model_ids.append(public_node.unique_id) else: raise PublicationConfigNotFound( project=project.name, file_name=publication_file_name diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 85d26f8bf5c..397d1046f77 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -2,7 +2,7 @@ import pathlib from dbt.tests.util import run_dbt, get_artifact, write_file -from dbt.contracts.publication import Publication, PublicModel +from dbt.contracts.publication import PublicationArtifact, PublicModel from dbt.exceptions import PublicationConfigNotFound @@ -61,7 +61,8 @@ "relation_name": '"dbt"."test_schema"."fct_one"', "version": null, "is_latest_version": false, - "public_dependencies": [] + "public_dependencies": [], + "generated_at": "2023-04-13T17:17:58.128706Z", }, "model.marketing.fct_two": { "name": "fct_two", @@ -70,7 +71,8 @@ "relation_name": '"dbt"."test_schema"."fct_two"', "version": null, "is_latest_version": false, - "public_dependencies": ["model.test.fct_one"] + "public_dependencies": ["model.test.fct_one"], + "generated_at": "2023-04-13T17:17:58.128706Z", } }, "dependencies": [] @@ -97,7 +99,7 @@ def test_publication_artifact(self, project): assert len(results) == 3 publication_dict = get_artifact(project.project_root, "target", "test_publication.json") - publication = Publication.from_dict(publication_dict) + publication = PublicationArtifact.from_dict(publication_dict) assert publication assert len(publication.public_models) == 2 assert publication.public_models["model.test.model_three"].public_dependencies == [ @@ -130,8 +132,7 @@ def test_dependencies(self, project): manifest = run_dbt(["parse"]) assert manifest.publications assert "marketing" in manifest.publications - public_model = manifest.publications["marketing"].public_models["model.marketing.fct_one"] - assert public_model + assert "model.marketing.fct_one" in manifest.publications["marketing"].public_model_ids # target_model_name, target_model_package, target_model_version, current_project, node_package resolved_node = manifest.resolve_ref("fct_one", "marketing", None, "test", "test") From 5bd828e3960815dfd9f40bc55d513b877c9ee6e7 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Wed, 19 Apr 2023 10:13:37 -0400 Subject: [PATCH 22/50] Store dependencies in publication artifact --- core/dbt/parser/manifest.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 15f5e593502..13c75cee4ef 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -668,6 +668,9 @@ def write_artifacts(self): # TODO: get dependencies from dependencies.yml. When is it loaded? here? dependencies = [] + if self.manifest.dependencies: + for project in self.manifest.dependencies.projects: + dependencies.append(project.name) publication = PublicationArtifact( metadata=metadata, project_name=self.root_project.project_name, From a43327df809143c5f5ba1e84994d9f4cd4934716 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Wed, 19 Apr 2023 10:30:53 -0400 Subject: [PATCH 23/50] Remove ModelDependsOn --- core/dbt/contracts/graph/nodes.py | 17 +-- schemas/dbt/manifest/v10.json | 116 ++++++++---------- test/unit/test_contracts_graph_compiled.py | 9 +- test/unit/test_contracts_graph_parsed.py | 22 ++-- test/unit/test_graph_selector_methods.py | 3 +- test/unit/test_manifest.py | 31 +++-- .../functional/artifacts/expected_manifest.py | 23 +++- tests/functional/list/test_list.py | 8 +- 8 files changed, 117 insertions(+), 112 deletions(-) diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index 6710b77200a..0832b9af12b 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -255,17 +255,13 @@ def add_macro(self, value: str): @dataclass class DependsOn(MacroDependsOn): nodes: List[str] = field(default_factory=list) + public_nodes: List[str] = field(default_factory=list) def add_node(self, value: str): if value not in self.nodes: self.nodes.append(value) -@dataclass -class ModelDependsOn(DependsOn): - public_nodes: List[str] = field(default_factory=list) - - @dataclass class ParsedNodeMandatory(GraphNode, HasRelationMetadata, Replaceable): alias: str @@ -577,7 +573,7 @@ def depends_on_nodes(self): @property def depends_on_public_nodes(self): - return [] + return self.depends_on.public_nodes @property def depends_on_macros(self): @@ -677,16 +673,11 @@ class ModelNode(CompiledNode): constraints: List[ModelLevelConstraint] = field(default_factory=list) version: Optional[NodeVersion] = None latest_version: Optional[NodeVersion] = None - depends_on: ModelDependsOn = field(default_factory=ModelDependsOn) @property def is_latest_version(self): return self.version and self.version == self.latest_version - @property - def depends_on_public_nodes(self): - return self.depends_on.public_nodes - @property def search_name(self): if self.version is None: @@ -956,6 +947,10 @@ def same_contents(self, other: Optional["Macro"]) -> bool: def depends_on_macros(self): return self.depends_on.macros + @property + def depends_on_public_nodes(self): + return [] + # ==================================== # Documentation node diff --git a/schemas/dbt/manifest/v10.json b/schemas/dbt/manifest/v10.json index 8ccb59257c6..c4e2cbf83c2 100644 --- a/schemas/dbt/manifest/v10.json +++ b/schemas/dbt/manifest/v10.json @@ -224,12 +224,12 @@ }, "dbt_version": { "type": "string", - "default": "1.5.0rc1" + "default": "1.6.0a1" }, "generated_at": { "type": "string", "format": "date-time", - "default": "2023-04-17T20:41:37.271352Z" + "default": "2023-04-19T14:31:46.624262Z" }, "invocation_id": { "oneOf": [ @@ -240,7 +240,7 @@ "type": "null" } ], - "default": "9e71e98b-a613-4f11-aa9d-f826b834fd11" + "default": "6bf8103b-748b-4b8c-b684-ec7814ec77ca" }, "env": { "type": "object", @@ -459,7 +459,7 @@ }, "created_at": { "type": "number", - "default": 1681764097.276032 + "default": 1681914706.630888 }, "config_call_dict": { "type": "object", @@ -514,7 +514,8 @@ "$ref": "#/definitions/DependsOn", "default": { "macros": [], - "nodes": [] + "nodes": [], + "public_nodes": [] } }, "compiled_path": { @@ -969,10 +970,17 @@ "type": "string" }, "default": [] + }, + "public_nodes": { + "type": "array", + "items": { + "type": "string" + }, + "default": [] } }, "additionalProperties": false, - "description": "DependsOn(macros: List[str] = , nodes: List[str] = )" + "description": "DependsOn(macros: List[str] = , nodes: List[str] = , public_nodes: List[str] = )" }, "InjectedCTE": { "type": "object", @@ -1163,7 +1171,7 @@ }, "created_at": { "type": "number", - "default": 1681764097.279396 + "default": 1681914706.637792 }, "config_call_dict": { "type": "object", @@ -1218,7 +1226,8 @@ "$ref": "#/definitions/DependsOn", "default": { "macros": [], - "nodes": [] + "nodes": [], + "public_nodes": [] } }, "compiled_path": { @@ -1550,7 +1559,7 @@ }, "created_at": { "type": "number", - "default": 1681764097.281048 + "default": 1681914706.642067 }, "config_call_dict": { "type": "object", @@ -1605,7 +1614,8 @@ "$ref": "#/definitions/DependsOn", "default": { "macros": [], - "nodes": [] + "nodes": [], + "public_nodes": [] } }, "compiled_path": { @@ -1825,7 +1835,7 @@ }, "created_at": { "type": "number", - "default": 1681764097.2827551 + "default": 1681914706.645828 }, "config_call_dict": { "type": "object", @@ -1877,7 +1887,7 @@ "default": [] }, "depends_on": { - "$ref": "#/definitions/ModelDependsOn", + "$ref": "#/definitions/DependsOn", "default": { "macros": [], "nodes": [], @@ -1970,36 +1980,7 @@ } }, "additionalProperties": false, - "description": "ModelNode(database: Optional[str], schema: str, name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], alias: str, checksum: dbt.contracts.files.FileHash, config: dbt.contracts.graph.model_config.NodeConfig = , _event_status: Dict[str, Any] = , tags: List[str] = , description: str = '', columns: Dict[str, dbt.contracts.graph.nodes.ColumnInfo] = , meta: Dict[str, Any] = , group: Optional[str] = None, docs: dbt.contracts.graph.unparsed.Docs = , patch_path: Optional[str] = None, build_path: Optional[str] = None, deferred: bool = False, unrendered_config: Dict[str, Any] = , created_at: float = , config_call_dict: Dict[str, Any] = , relation_name: Optional[str] = None, raw_code: str = '', language: str = 'sql', refs: List[dbt.contracts.graph.nodes.RefArgs] = , sources: List[List[str]] = , metrics: List[List[str]] = , depends_on: dbt.contracts.graph.nodes.ModelDependsOn = , compiled_path: Optional[str] = None, compiled: bool = False, compiled_code: Optional[str] = None, extra_ctes_injected: bool = False, extra_ctes: List[dbt.contracts.graph.nodes.InjectedCTE] = , _pre_injected_sql: Optional[str] = None, contract: dbt.contracts.graph.nodes.Contract = , access: dbt.node_types.AccessType = , constraints: List[dbt.contracts.graph.nodes.ModelLevelConstraint] = , version: Union[str, float, NoneType] = None, latest_version: Union[str, float, NoneType] = None)" - }, - "ModelDependsOn": { - "type": "object", - "required": [], - "properties": { - "macros": { - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "nodes": { - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "public_nodes": { - "type": "array", - "items": { - "type": "string" - }, - "default": [] - } - }, - "additionalProperties": false, - "description": "ModelDependsOn(macros: List[str] = , nodes: List[str] = , public_nodes: List[str] = )" + "description": "ModelNode(database: Optional[str], schema: str, name: str, resource_type: dbt.node_types.NodeType, package_name: str, path: str, original_file_path: str, unique_id: str, fqn: List[str], alias: str, checksum: dbt.contracts.files.FileHash, config: dbt.contracts.graph.model_config.NodeConfig = , _event_status: Dict[str, Any] = , tags: List[str] = , description: str = '', columns: Dict[str, dbt.contracts.graph.nodes.ColumnInfo] = , meta: Dict[str, Any] = , group: Optional[str] = None, docs: dbt.contracts.graph.unparsed.Docs = , patch_path: Optional[str] = None, build_path: Optional[str] = None, deferred: bool = False, unrendered_config: Dict[str, Any] = , created_at: float = , config_call_dict: Dict[str, Any] = , relation_name: Optional[str] = None, raw_code: str = '', language: str = 'sql', refs: List[dbt.contracts.graph.nodes.RefArgs] = , sources: List[List[str]] = , metrics: List[List[str]] = , depends_on: dbt.contracts.graph.nodes.DependsOn = , compiled_path: Optional[str] = None, compiled: bool = False, compiled_code: Optional[str] = None, extra_ctes_injected: bool = False, extra_ctes: List[dbt.contracts.graph.nodes.InjectedCTE] = , _pre_injected_sql: Optional[str] = None, contract: dbt.contracts.graph.nodes.Contract = , access: dbt.node_types.AccessType = , constraints: List[dbt.contracts.graph.nodes.ModelLevelConstraint] = , version: Union[str, float, NoneType] = None, latest_version: Union[str, float, NoneType] = None)" }, "ModelLevelConstraint": { "type": "object", @@ -2218,7 +2199,7 @@ }, "created_at": { "type": "number", - "default": 1681764097.285154 + "default": 1681914706.648939 }, "config_call_dict": { "type": "object", @@ -2273,7 +2254,8 @@ "$ref": "#/definitions/DependsOn", "default": { "macros": [], - "nodes": [] + "nodes": [], + "public_nodes": [] } }, "compiled_path": { @@ -2483,7 +2465,7 @@ }, "created_at": { "type": "number", - "default": 1681764097.286921 + "default": 1681914706.651103 }, "config_call_dict": { "type": "object", @@ -2538,7 +2520,8 @@ "$ref": "#/definitions/DependsOn", "default": { "macros": [], - "nodes": [] + "nodes": [], + "public_nodes": [] } }, "compiled_path": { @@ -2741,7 +2724,7 @@ }, "created_at": { "type": "number", - "default": 1681764097.2889018 + "default": 1681914706.653884 }, "config_call_dict": { "type": "object", @@ -2796,7 +2779,8 @@ "$ref": "#/definitions/DependsOn", "default": { "macros": [], - "nodes": [] + "nodes": [], + "public_nodes": [] } }, "compiled_path": { @@ -3036,7 +3020,7 @@ }, "created_at": { "type": "number", - "default": 1681764097.292233 + "default": 1681914706.661021 }, "config_call_dict": { "type": "object", @@ -3091,7 +3075,8 @@ "$ref": "#/definitions/DependsOn", "default": { "macros": [], - "nodes": [] + "nodes": [], + "public_nodes": [] } }, "compiled_path": { @@ -3523,7 +3508,7 @@ }, "created_at": { "type": "number", - "default": 1681764097.295719 + "default": 1681914706.667295 }, "config_call_dict": { "type": "object", @@ -3925,7 +3910,7 @@ }, "created_at": { "type": "number", - "default": 1681764097.298468 + "default": 1681914706.670914 } }, "additionalProperties": false, @@ -4035,12 +4020,12 @@ }, "dbt_version": { "type": "string", - "default": "1.5.0rc1" + "default": "1.6.0a1" }, "generated_at": { "type": "string", "format": "date-time", - "default": "2023-04-17T20:41:37.266000Z" + "default": "2023-04-19T14:31:46.615335Z" }, "invocation_id": { "oneOf": [ @@ -4051,7 +4036,7 @@ "type": "null" } ], - "default": "9e71e98b-a613-4f11-aa9d-f826b834fd11" + "default": "6bf8103b-748b-4b8c-b684-ec7814ec77ca" }, "env": { "type": "object", @@ -4062,7 +4047,7 @@ } }, "additionalProperties": false, - "description": "FreshnessMetadata(dbt_schema_version: str = , dbt_version: str = '1.5.0rc1', generated_at: datetime.datetime = , invocation_id: Optional[str] = , env: Dict[str, str] = )" + "description": "FreshnessMetadata(dbt_schema_version: str = , dbt_version: str = '1.6.0a1', generated_at: datetime.datetime = , invocation_id: Optional[str] = , env: Dict[str, str] = )" }, "SourceFreshnessRuntimeError": { "type": "object", @@ -4404,7 +4389,7 @@ }, "created_at": { "type": "number", - "default": 1681764097.299207 + "default": 1681914706.671911 }, "supported_languages": { "oneOf": [ @@ -4612,7 +4597,8 @@ "$ref": "#/definitions/DependsOn", "default": { "macros": [], - "nodes": [] + "nodes": [], + "public_nodes": [] } }, "refs": { @@ -4644,7 +4630,7 @@ }, "created_at": { "type": "number", - "default": 1681764097.301022 + "default": 1681914706.6743622 } }, "additionalProperties": false, @@ -4842,7 +4828,8 @@ "$ref": "#/definitions/DependsOn", "default": { "macros": [], - "nodes": [] + "nodes": [], + "public_nodes": [] } }, "refs": { @@ -4864,7 +4851,7 @@ }, "created_at": { "type": "number", - "default": 1681764097.302761 + "default": 1681914706.6769578 }, "group": { "oneOf": [ @@ -5041,10 +5028,15 @@ "type": "string" }, "default": [] + }, + "generated_at": { + "type": "string", + "format": "date-time", + "default": "2023-04-19T14:31:46.679989Z" } }, "additionalProperties": false, - "description": "PublicModel(name: str, package_name: str, unique_id: str, relation_name: str, version: Union[str, float, NoneType] = None, is_latest_version: bool = False, public_dependencies: List[str] = )" + "description": "PublicModel(name: str, package_name: str, unique_id: str, relation_name: str, version: Union[str, float, NoneType] = None, is_latest_version: bool = False, public_dependencies: List[str] = , generated_at: datetime.datetime = )" } }, "$schema": "http://json-schema.org/draft-07/schema#", diff --git a/test/unit/test_contracts_graph_compiled.py b/test/unit/test_contracts_graph_compiled.py index 47888b51051..91cf2bfd1cd 100644 --- a/test/unit/test_contracts_graph_compiled.py +++ b/test/unit/test_contracts_graph_compiled.py @@ -5,7 +5,6 @@ from dbt.contracts.graph.nodes import ( ColumnInfo, DependsOn, - ModelDependsOn, GenericTestNode, InjectedCTE, ModelNode, @@ -39,7 +38,7 @@ def basic_uncompiled_model(): refs=[], sources=[], metrics=[], - depends_on=ModelDependsOn(), + depends_on=DependsOn(), deferred=False, description="", database="test_db", @@ -71,7 +70,7 @@ def basic_compiled_model(): refs=[], sources=[], metrics=[], - depends_on=ModelDependsOn(), + depends_on=DependsOn(), deferred=True, description="", database="test_db", @@ -479,7 +478,7 @@ def basic_uncompiled_schema_test_dict(): "refs": [], "sources": [], "metrics": [], - "depends_on": {"macros": [], "nodes": []}, + "depends_on": {"macros": [], "nodes": [], "public_nodes": []}, "database": "test_db", "description": "", "schema": "dbt_test__audit", @@ -532,7 +531,7 @@ def basic_compiled_schema_test_dict(): "refs": [], "sources": [], "metrics": [], - "depends_on": {"macros": [], "nodes": []}, + "depends_on": {"macros": [], "nodes": [], "public_nodes": []}, "deferred": False, "database": "test_db", "description": "", diff --git a/test/unit/test_contracts_graph_parsed.py b/test/unit/test_contracts_graph_parsed.py index 8d9c07be74e..71770277527 100644 --- a/test/unit/test_contracts_graph_parsed.py +++ b/test/unit/test_contracts_graph_parsed.py @@ -16,7 +16,6 @@ from dbt.contracts.graph.nodes import ( ModelNode, DependsOn, - ModelDependsOn, ColumnInfo, GenericTestNode, SnapshotNode, @@ -204,7 +203,7 @@ def basic_parsed_model_object(): refs=[], sources=[], metrics=[], - depends_on=ModelDependsOn(), + depends_on=DependsOn(), description="", database="test_db", schema="test_schema", @@ -322,7 +321,7 @@ def complex_parsed_model_object(): refs=[], sources=[], metrics=[], - depends_on=ModelDependsOn(nodes=["model.test.bar"]), + depends_on=DependsOn(nodes=["model.test.bar"]), deferred=True, description="My parsed node", database="test_db", @@ -822,7 +821,7 @@ def patched_model_object(): refs=[], sources=[], metrics=[], - depends_on=ModelDependsOn(), + depends_on=DependsOn(), description="The foo model", database="test_db", schema="test_schema", @@ -889,7 +888,7 @@ def base_parsed_hook_dict(): "refs": [], "sources": [], "metrics": [], - "depends_on": {"macros": [], "nodes": []}, + "depends_on": {"macros": [], "nodes": [], "public_nodes": []}, "database": "test_db", "deferred": False, "description": "", @@ -970,7 +969,7 @@ def complex_parsed_hook_dict(): "refs": [], "sources": [], "metrics": [], - "depends_on": {"macros": [], "nodes": ["model.test.bar"]}, + "depends_on": {"macros": [], "nodes": ["model.test.bar"], "public_nodes": []}, "deferred": False, "database": "test_db", "description": "My parsed node", @@ -1128,7 +1127,7 @@ def basic_parsed_schema_test_dict(): "refs": [], "sources": [], "metrics": [], - "depends_on": {"macros": [], "nodes": []}, + "depends_on": {"macros": [], "nodes": [], "public_nodes": []}, "deferred": False, "database": "test_db", "description": "", @@ -1207,7 +1206,7 @@ def complex_parsed_schema_test_dict(): "refs": [], "sources": [], "metrics": [], - "depends_on": {"macros": [], "nodes": ["model.test.bar"]}, + "depends_on": {"macros": [], "nodes": ["model.test.bar"], "public_nodes": []}, "database": "test_db", "deferred": False, "description": "My parsed node", @@ -1577,7 +1576,7 @@ def basic_timestamp_snapshot_dict(): "refs": [], "sources": [], "metrics": [], - "depends_on": {"macros": [], "nodes": []}, + "depends_on": {"macros": [], "nodes": [], "public_nodes": []}, "deferred": False, "database": "test_db", "description": "", @@ -1724,7 +1723,7 @@ def basic_check_snapshot_dict(): "refs": [], "sources": [], "metrics": [], - "depends_on": {"macros": [], "nodes": []}, + "depends_on": {"macros": [], "nodes": [], "public_nodes": []}, "database": "test_db", "deferred": False, "description": "", @@ -2299,6 +2298,7 @@ def basic_parsed_exposure_dict(): "depends_on": { "nodes": [], "macros": [], + "public_nodes": [], }, "refs": [], "sources": [], @@ -2358,6 +2358,7 @@ def complex_parsed_exposure_dict(): "depends_on": { "nodes": ["models.test.my_model"], "macros": [], + "public_nodes": [], }, "refs": [], "sources": [], @@ -2491,6 +2492,7 @@ def basic_parsed_metric_dict(): "depends_on": { "nodes": [], "macros": [], + "public_nodes": [], }, } diff --git a/test/unit/test_graph_selector_methods.py b/test/unit/test_graph_selector_methods.py index 97a1df63c8d..2e5097de148 100644 --- a/test/unit/test_graph_selector_methods.py +++ b/test/unit/test_graph_selector_methods.py @@ -9,7 +9,6 @@ from dbt.contracts.graph.nodes import ( DependsOn, MacroDependsOn, - ModelDependsOn, NodeConfig, Macro, ModelNode, @@ -113,7 +112,7 @@ def make_model( tags=tags, refs=ref_values, sources=source_values, - depends_on=ModelDependsOn( + depends_on=DependsOn( nodes=depends_on_nodes, macros=depends_on_macros, public_nodes=[], diff --git a/test/unit/test_manifest.py b/test/unit/test_manifest.py index 1b72a623775..392abb18765 100644 --- a/test/unit/test_manifest.py +++ b/test/unit/test_manifest.py @@ -19,7 +19,6 @@ from dbt.contracts.graph.nodes import ( ModelNode, DependsOn, - ModelDependsOn, NodeConfig, SeedNode, SourceDefinition, @@ -207,7 +206,7 @@ def setUp(self): refs=[], sources=[], metrics=[], - depends_on=ModelDependsOn(), + depends_on=DependsOn(), config=self.model_config, tags=[], path="events.sql", @@ -229,7 +228,7 @@ def setUp(self): refs=[], sources=[], metrics=[], - depends_on=ModelDependsOn(), + depends_on=DependsOn(), config=self.model_config, tags=[], path="events.sql", @@ -251,7 +250,7 @@ def setUp(self): refs=[RefArgs(name="events")], sources=[], metrics=[], - depends_on=ModelDependsOn(nodes=["model.root.events"]), + depends_on=DependsOn(nodes=["model.root.events"]), config=self.model_config, tags=[], path="multi.sql", @@ -273,7 +272,7 @@ def setUp(self): refs=[RefArgs(name="events")], sources=[], metrics=[], - depends_on=ModelDependsOn(nodes=["model.root.dep"]), + depends_on=DependsOn(nodes=["model.root.dep"]), config=self.model_config, tags=[], path="multi.sql", @@ -295,7 +294,7 @@ def setUp(self): refs=[RefArgs(name="events")], sources=[], metrics=[], - depends_on=ModelDependsOn(nodes=["model.root.events"]), + depends_on=DependsOn(nodes=["model.root.events"]), config=self.model_config, tags=[], path="multi.sql", @@ -317,7 +316,7 @@ def setUp(self): refs=[RefArgs(name="events")], sources=[], metrics=[], - depends_on=ModelDependsOn(nodes=["model.root.nested", "model.root.sibling"]), + depends_on=DependsOn(nodes=["model.root.nested", "model.root.sibling"]), config=self.model_config, tags=[], path="multi.sql", @@ -644,7 +643,7 @@ def test__deepcopy_copies_flat_graph(self): refs=[], sources=[], metrics=[], - depends_on=ModelDependsOn(), + depends_on=DependsOn(), config=self.model_config, tags=[], path="events.sql", @@ -691,7 +690,7 @@ def setUp(self): package_name="snowplow", refs=[], sources=[], - depends_on=ModelDependsOn(), + depends_on=DependsOn(), config=self.model_config, tags=[], path="events.sql", @@ -717,7 +716,7 @@ def setUp(self): package_name="root", refs=[], sources=[], - depends_on=ModelDependsOn(), + depends_on=DependsOn(), config=self.model_config, tags=[], path="events.sql", @@ -743,7 +742,7 @@ def setUp(self): package_name="root", refs=[RefArgs(name="events")], sources=[], - depends_on=ModelDependsOn(nodes=["model.root.events"]), + depends_on=DependsOn(nodes=["model.root.events"]), config=self.model_config, tags=[], path="multi.sql", @@ -764,7 +763,7 @@ def setUp(self): package_name="root", refs=[], sources=[], - depends_on=ModelDependsOn(), + depends_on=DependsOn(), config=self.model_config, tags=[], path="versioned.sql", @@ -786,7 +785,7 @@ def setUp(self): package_name="root", refs=[RefArgs(name="versioned", version=1)], sources=[], - depends_on=ModelDependsOn(nodes=["model.root.versioned.v1"]), + depends_on=DependsOn(nodes=["model.root.versioned.v1"]), config=self.model_config, tags=[], path="dep_version.sql", @@ -807,7 +806,7 @@ def setUp(self): package_name="root", refs=[RefArgs(name="events")], sources=[], - depends_on=ModelDependsOn(nodes=["model.root.dep"]), + depends_on=DependsOn(nodes=["model.root.dep"]), config=self.model_config, tags=[], path="multi.sql", @@ -828,7 +827,7 @@ def setUp(self): package_name="root", refs=[RefArgs(name="events")], sources=[], - depends_on=ModelDependsOn(nodes=["model.root.events"]), + depends_on=DependsOn(nodes=["model.root.events"]), config=self.model_config, tags=[], path="multi.sql", @@ -849,7 +848,7 @@ def setUp(self): package_name="root", refs=[RefArgs(name="events")], sources=[], - depends_on=ModelDependsOn(nodes=["model.root.nested", "model.root.sibling"]), + depends_on=DependsOn(nodes=["model.root.nested", "model.root.sibling"]), config=self.model_config, tags=[], path="multi.sql", diff --git a/tests/functional/artifacts/expected_manifest.py b/tests/functional/artifacts/expected_manifest.py index 4268797bf69..13862e9f4c1 100644 --- a/tests/functional/artifacts/expected_manifest.py +++ b/tests/functional/artifacts/expected_manifest.py @@ -521,6 +521,7 @@ def expected_seeded_manifest(project, model_database=None, quote_model=False): "depends_on": { "macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.test.model"], + "public_nodes": [], }, "deferred": False, "description": "", @@ -576,6 +577,7 @@ def expected_seeded_manifest(project, model_database=None, quote_model=False): "depends_on": { "macros": [], "nodes": ["seed.test.seed"], + "public_nodes": [], }, "description": "", "docs": {"node_color": None, "show": True}, @@ -623,6 +625,7 @@ def expected_seeded_manifest(project, model_database=None, quote_model=False): "depends_on": { "macros": ["macro.test.test_nothing", "macro.dbt.get_where_subquery"], "nodes": ["model.test.model"], + "public_nodes": [], }, "deferred": False, "description": "", @@ -676,6 +679,7 @@ def expected_seeded_manifest(project, model_database=None, quote_model=False): "depends_on": { "macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.test.model"], + "public_nodes": [], }, "deferred": False, "description": "", @@ -774,6 +778,7 @@ def expected_seeded_manifest(project, model_database=None, quote_model=False): "depends_on": { "macros": [], "nodes": ["model.test.model", "model.test.second_model"], + "public_nodes": [], }, "description": "A description of the complex exposure\n", "label": None, @@ -806,6 +811,7 @@ def expected_seeded_manifest(project, model_database=None, quote_model=False): "depends_on": { "macros": [], "nodes": ["source.test.my_source.my_table", "model.test.model"], + "public_nodes": [], }, "description": "", "label": None, @@ -1174,7 +1180,7 @@ def expected_references_manifest(project): "contract": {"checksum": None, "enforced": False}, "database": model_database, "deferred": False, - "depends_on": {"macros": [], "nodes": ["seed.test.seed"]}, + "depends_on": {"macros": [], "nodes": ["seed.test.seed"], "public_nodes": []}, "description": "", "docs": {"node_color": None, "show": True}, "extra_ctes": [], @@ -1259,7 +1265,11 @@ def expected_references_manifest(project): "exposures": { "exposure.test.notebook_exposure": { "created_at": ANY, - "depends_on": {"macros": [], "nodes": ["model.test.view_summary"]}, + "depends_on": { + "macros": [], + "nodes": ["model.test.view_summary"], + "public_nodes": [], + }, "description": "A description of the complex exposure", "label": None, "config": { @@ -1679,6 +1689,7 @@ def expected_versions_manifest(project): "depends_on": { "macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.test.versioned_model.v1"], + "public_nodes": [], }, "deferred": False, "description": "", @@ -1733,6 +1744,7 @@ def expected_versions_manifest(project): "depends_on": { "macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.test.versioned_model.v1"], + "public_nodes": [], }, "deferred": False, "description": "", @@ -1787,6 +1799,7 @@ def expected_versions_manifest(project): "depends_on": { "macros": ["macro.dbt.test_unique", "macro.dbt.get_where_subquery"], "nodes": ["model.test.versioned_model.v2"], + "public_nodes": [], }, "deferred": False, "description": "", @@ -1828,7 +1841,11 @@ def expected_versions_manifest(project): "exposures": { "exposure.test.notebook_exposure": { "created_at": ANY, - "depends_on": {"macros": [], "nodes": ["model.test.versioned_model.v2"]}, + "depends_on": { + "macros": [], + "nodes": ["model.test.versioned_model.v2"], + "public_nodes": [], + }, "description": "notebook_info", "label": None, "config": { diff --git a/tests/functional/list/test_list.py b/tests/functional/list/test_list.py index 648c8615d2d..c4c23083795 100644 --- a/tests/functional/list/test_list.py +++ b/tests/functional/list/test_list.py @@ -67,7 +67,7 @@ def expect_snapshot_output(self, project): "json": { "name": "my_snapshot", "package_name": "test", - "depends_on": {"nodes": [], "macros": []}, + "depends_on": {"nodes": [], "macros": [], "public_nodes": []}, "tags": [], "config": { "enabled": True, @@ -113,7 +113,7 @@ def expect_analyses_output(self): "json": { "name": "a", "package_name": "test", - "depends_on": {"nodes": [], "macros": []}, + "depends_on": {"nodes": [], "macros": [], "public_nodes": []}, "tags": [], "config": { "enabled": True, @@ -424,6 +424,7 @@ def expect_test_output(self): "depends_on": { "nodes": ["model.test.outer"], "macros": ["macro.dbt.test_not_null"], + "public_nodes": [], }, "tags": [], "config": { @@ -451,7 +452,7 @@ def expect_test_output(self): { "name": "t", "package_name": "test", - "depends_on": {"nodes": [], "macros": []}, + "depends_on": {"nodes": [], "macros": [], "public_nodes": []}, "tags": [], "config": { "enabled": True, @@ -481,6 +482,7 @@ def expect_test_output(self): "depends_on": { "nodes": ["model.test.outer"], "macros": ["macro.dbt.test_unique"], + "public_nodes": [], }, "tags": [], "config": { From 942f7120eb2d42eb2dcaed305002cd920c5f9c80 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Wed, 19 Apr 2023 16:24:17 -0400 Subject: [PATCH 24/50] Fix is_latest_version and add some comments --- core/dbt/contracts/graph/nodes.py | 4 ++-- core/dbt/contracts/publication.py | 8 ++++++++ core/dbt/parser/manifest.py | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index 0832b9af12b..cd6c6607cc8 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -675,8 +675,8 @@ class ModelNode(CompiledNode): latest_version: Optional[NodeVersion] = None @property - def is_latest_version(self): - return self.version and self.version == self.latest_version + def is_latest_version(self) -> bool: + return self.version is not None and self.version == self.latest_version @property def search_name(self): diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py index a93a156ff77..8f7d092c845 100644 --- a/core/dbt/contracts/publication.py +++ b/core/dbt/contracts/publication.py @@ -32,6 +32,8 @@ class PublicationMetadata(BaseArtifactMetadata): @dataclass class PublicModel(dbtClassMixin, ManifestOrPublicNode): + """Used to represent cross-project models""" + name: str package_name: str unique_id: str @@ -76,6 +78,8 @@ class PublicationMandatory: @dataclass @schema_version("publication", 1) class PublicationArtifact(ArtifactMixin, PublicationMandatory): + """This represents the _publication.json artifact""" + public_models: Dict[str, PublicModel] = field(default_factory=dict) metadata: PublicationMetadata = field(default_factory=PublicationMetadata) # list of project name strings @@ -84,6 +88,10 @@ class PublicationArtifact(ArtifactMixin, PublicationMandatory): @dataclass class PublicationConfig(ArtifactMixin, PublicationMandatory): + """This is for the part of the publication artifact which is stored in + the internal manifest. The public_nodes are stored separately in the manifest, + and just the unique_ids of the public models are stored here.""" + metadata: PublicationMetadata = field(default_factory=PublicationMetadata) # list of project name strings dependencies: List[str] = field(default_factory=list) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 13c75cee4ef..fcb3ee74963 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -440,6 +440,7 @@ def load(self): self.manifest.selectors = self.root_project.manifest_selectors # load the publication artifacts and create the external nodes + # This also loads manifest.dependencies self.build_public_nodes() # update the refs, sources, docs and metrics depends_on.nodes From 3054aed8170ee70762e2c357b8c84cd1ef159348 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Thu, 20 Apr 2023 12:45:16 -0400 Subject: [PATCH 25/50] change detection of PublicModel for >= python3.10 --- core/dbt/contracts/graph/manifest.py | 6 ++---- core/dbt/contracts/graph/nodes.py | 8 ++++++++ core/dbt/contracts/publication.py | 4 ++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/core/dbt/contracts/graph/manifest.py b/core/dbt/contracts/graph/manifest.py index 15702858c21..764c507bad7 100644 --- a/core/dbt/contracts/graph/manifest.py +++ b/core/dbt/contracts/graph/manifest.py @@ -954,10 +954,8 @@ def resolve_ref( for pkg in candidates: node = self.ref_lookup.find(target_model_name, pkg, target_model_version, self) - if ( - node is not None - and (hasattr(node, "config") and node.config.enabled) - or isinstance(node, PublicModel) + if node is not None and ( + (hasattr(node, "config") and node.config.enabled) or node.is_public_node ): return node diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index cd6c6607cc8..be7f6934d7a 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -509,6 +509,10 @@ def same_contents(self, old) -> bool: and True ) + @property + def is_public_node(self): + return False + @dataclass class InjectedCTE(dbtClassMixin, Replaceable): @@ -1418,6 +1422,10 @@ def access(self): def search_name(self): pass + @property + def is_public_node(self): + pass + # ManifestNode without SeedNode, which doesn't have the # SQL related attributes diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py index 8f7d092c845..da552ded198 100644 --- a/core/dbt/contracts/publication.py +++ b/core/dbt/contracts/publication.py @@ -69,6 +69,10 @@ def depends_on_nodes(self): def depends_on_public_nodes(self): return [] + @property + def is_public_node(self): + return True + @dataclass class PublicationMandatory: From fcd545b3b66ac5a1fd1e332d4b1740fe850e3508 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Thu, 20 Apr 2023 12:48:04 -0400 Subject: [PATCH 26/50] Changie --- .changes/unreleased/Features-20230420-124756.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changes/unreleased/Features-20230420-124756.yaml diff --git a/.changes/unreleased/Features-20230420-124756.yaml b/.changes/unreleased/Features-20230420-124756.yaml new file mode 100644 index 00000000000..c1ee4eb71ae --- /dev/null +++ b/.changes/unreleased/Features-20230420-124756.yaml @@ -0,0 +1,6 @@ +kind: Features +body: Publication artifacts and cross-project ref +time: 2023-04-20T12:47:56.92683-04:00 +custom: + Author: gshank + Issue: "7227" From c4db8c08572522a6eb263fdfda8b40eb45be6731 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Thu, 20 Apr 2023 12:58:55 -0400 Subject: [PATCH 27/50] Fix another isinstance of public model --- core/dbt/parser/manifest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 948724a54c2..73359c7c7cb 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -1508,7 +1508,7 @@ def _process_refs_for_node(manifest: Manifest, current_project: str, node: Manif target_model_id = target_model.unique_id - if isinstance(target_model, PublicModel): + if target_model.is_public_node: node.depends_on.public_nodes.append(target_model_id) else: node.depends_on.nodes.append(target_model_id) From 3f54bb0ea62dd9719d966b784a56f54925d9c33e Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Fri, 21 Apr 2023 11:31:04 -0400 Subject: [PATCH 28/50] Update another instance check of PublicModel --- core/dbt/context/providers.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/dbt/context/providers.py b/core/dbt/context/providers.py index 499e46b6d42..b074b92dcdd 100644 --- a/core/dbt/context/providers.py +++ b/core/dbt/context/providers.py @@ -40,7 +40,6 @@ RefArgs, ) from dbt.contracts.graph.metrics import MetricReference, ResolvedMetricReference -from dbt.contracts.publication import PublicModel from dbt.contracts.graph.unparsed import NodeVersion from dbt.events.functions import get_metadata_vars from dbt.exceptions import ( @@ -500,7 +499,7 @@ def resolve( return self.create_relation(target_model) def create_relation(self, target_model: ManifestNode) -> RelationProxy: - if isinstance(target_model, PublicModel): + if target_model.is_public_node: return self.Relation.create_from_relation_name(self.config, target_model.relation_name) elif target_model.is_ephemeral_model: self.model.set_cte(target_model.unique_id, None) From e9d5a4c9aa887dbe5aabb7613f9fbfc31afe957d Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Fri, 21 Apr 2023 16:24:48 -0400 Subject: [PATCH 29/50] Handle removing references for re-processing if publication has changed --- core/dbt/contracts/graph/nodes.py | 4 ++ core/dbt/parser/manifest.py | 60 +++++++++++++++++-- .../multi_project/test_publication.py | 20 ++++++- 3 files changed, 76 insertions(+), 8 deletions(-) diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index bc749050478..2fd7d747dc9 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -265,6 +265,10 @@ def add_node(self, value: str): if value not in self.nodes: self.nodes.append(value) + def add_public_node(self, value: str): + if value not in self.public_nodes: + self.public_nodes.append(value) + @dataclass class ParsedNodeMandatory(GraphNode, HasRelationMetadata, Replaceable): diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 73359c7c7cb..b803ffb5d92 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -684,6 +684,9 @@ def write_artifacts(self): publication.write(path) def build_public_nodes(self): + public_nodes_partially_parsing = False + + # Load the dependencies from the dependencies.yml file dependencies_filepath = resolve_path_from_base( "dependencies.yml", self.root_project.project_root ) @@ -694,6 +697,27 @@ def build_public_nodes(self): self.manifest.dependencies = dependencies else: self.manifest.dependencies = None + + # collect the names of the projects for later use + dependent_project_names = [] + if self.manifest.dependencies: + for project in self.manifest.dependencies.projects: + dependent_project_names.append(project.name) + + # clean up previous publications that are no longer specified + # and save previous publications, for later removal of references + saved_manifest_publications = {} + if self.manifest.publications: + for project_name, publication in self.manifest.publications.items(): + if project_name not in dependent_project_names: + remove_dependent_project_references(self.manifest, publication) + self.manifest.publications.pop(project_name) + public_nodes_partially_parsing = True + saved_manifest_publications = self.manifest.publications + self.manifest.publications = {} + # Empty public_nodes since we're re-generating them all + self.manifest.public_nodes = {} + if self.manifest.dependencies: for project in self.manifest.dependencies.projects: # look for a _publication.json file for every project in the 'publications' dir @@ -718,7 +742,22 @@ def build_public_nodes(self): raise PublicationConfigNotFound( project=project.name, file_name=publication_file_name ) - self.manifest.ref_lookup.populate_public_nodes(self.manifest) + + # Now that we've loaded the current publications and public_nodes, look for + # changed publications so we can reset the public_nodes references + for project_name, publication in self.manifest.publications.items(): + if ( + project_name in saved_manifest_publications + and publication.metadata.generated_at + != saved_manifest_publications[project_name].metadata.generated_at + ): + remove_dependent_project_references( + self.manifest, saved_manifest_publications[project_name] + ) + public_nodes_partially_parsing = True + + if self.manifest.public_nodes or public_nodes_partially_parsing: + self.manifest.rebuild_ref_lookup() def is_partial_parsable(self, manifest: Manifest) -> Tuple[bool, Optional[str]]: """Compare the global hashes of the read-in parse results' values to @@ -1349,7 +1388,7 @@ def _process_refs_for_exposure(manifest: Manifest, current_project: str, exposur target_model_id = target_model.unique_id - exposure.depends_on.nodes.append(target_model_id) + exposure.depends_on.add_node(target_model_id) manifest.update_exposure(exposure) @@ -1401,7 +1440,7 @@ def _process_refs_for_metric(manifest: Manifest, current_project: str, metric: M target_model_id = target_model.unique_id - metric.depends_on.nodes.append(target_model_id) + metric.depends_on.add_node(target_model_id) manifest.update_metric(metric) @@ -1509,9 +1548,20 @@ def _process_refs_for_node(manifest: Manifest, current_project: str, node: Manif target_model_id = target_model.unique_id if target_model.is_public_node: - node.depends_on.public_nodes.append(target_model_id) + node.depends_on.add_public_node(target_model_id) else: - node.depends_on.nodes.append(target_model_id) + node.depends_on.add_node(target_model_id) + + +def remove_dependent_project_references(manifest: Manifest, publication: PublicationConfig): + for unique_id in publication.public_model_ids: + for child_id in manifest.child_map[unique_id]: + print(f"--- child_id: {child_id}") + node = manifest.expect(child_id) + if hasattr(node.depends_on, "public_nodes"): + node.depends_on.public_nodes.remove(unique_id) # type: ignore + # set created_at so process_refs happens + node.created_at = time.time() def _process_sources_for_exposure(manifest: Manifest, current_project: str, exposure: Exposure): diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 397d1046f77..0cdc2f838f0 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -3,7 +3,7 @@ from dbt.tests.util import run_dbt, get_artifact, write_file from dbt.contracts.publication import PublicationArtifact, PublicModel -from dbt.exceptions import PublicationConfigNotFound +from dbt.exceptions import PublicationConfigNotFound, TargetNotFoundError model_one_sql = """ @@ -141,18 +141,32 @@ def test_dependencies(self, project): assert resolved_node.unique_id == "model.marketing.fct_one" # add new model that references external_node and parse - write_file(ext_node_model_sql, project.project_root, "models", "ext_node_model.sql") + write_file(ext_node_model_sql, project.project_root, "models", "test_model_one.sql") manifest = run_dbt(["parse"]) - model_id = "model.test.ext_node_model" + model_id = "model.test.test_model_one" public_model_id = "model.marketing.fct_one" model = manifest.nodes[model_id] assert model.depends_on.public_nodes == [public_model_id] assert public_model_id in manifest.parent_map assert manifest.parent_map[model_id] == [public_model_id] + # check that publication configs contain correct list of public model unique_ids + assert manifest.publications["marketing"].public_model_ids == [ + "model.marketing.fct_one", + "model.marketing.fct_two", + ] + assert len(manifest.public_nodes) == 2 # Create the relation for the public node (fct_one) project.run_sql(f'create table "{project.test_schema}"."fct_one" (id integer)') project.run_sql(f'insert into "{project.test_schema}"."fct_one" values (1), (2)') results = run_dbt(["run"]) assert len(results) == 4 + + # Change public node name from fct_one to fct_three + m_pub_json = m_pub_json.replace("fct_one", "fct_three") + write_file(m_pub_json, project.project_root, "publications", "marketing_publication.json") + write_file(ext_node_model_sql, project.project_root, "models", "test_model_two.sql") + # test_model_one references a missing public model + with pytest.raises(TargetNotFoundError): + manifest = run_dbt(["parse"]) From 9e2284c1dd55ffe81b191ad3e61b7d7ffbf758d4 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Mon, 24 Apr 2023 14:12:10 -0400 Subject: [PATCH 30/50] Handle only changed publication artifacts --- core/dbt/parser/manifest.py | 24 +++++++++++++++---- .../multi_project/test_publication.py | 4 +++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index b803ffb5d92..31ef9f6bfe1 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -462,6 +462,19 @@ def load(self): self.manifest._parsing_info.static_analysis_path_count ) + # Load dependencies, load the publication artifacts and create the external nodes. + # Reprocess refs if changes. + public_nodes_changed = False + if skip_parsing: + # If we didn't skip parsing, this will have already run because it must run + # before process_refs. If we did skip parsing, then it's possible that only + # publications have changed and we need to run this to capture that. + self.manifest.build_parent_and_child_maps() + public_nodes_changed = self.build_public_nodes() + if public_nodes_changed: + self.process_refs(self.root_project.project_name) + + if not skip_parsing or public_nodes_changed: # Following adds publications to manifest too... self.write_artifacts() # write out the fully parsed manifest @@ -684,7 +697,7 @@ def write_artifacts(self): publication.write(path) def build_public_nodes(self): - public_nodes_partially_parsing = False + public_nodes_rebuilt = False # Load the dependencies from the dependencies.yml file dependencies_filepath = resolve_path_from_base( @@ -712,7 +725,7 @@ def build_public_nodes(self): if project_name not in dependent_project_names: remove_dependent_project_references(self.manifest, publication) self.manifest.publications.pop(project_name) - public_nodes_partially_parsing = True + public_nodes_rebuilt = True saved_manifest_publications = self.manifest.publications self.manifest.publications = {} # Empty public_nodes since we're re-generating them all @@ -754,10 +767,13 @@ def build_public_nodes(self): remove_dependent_project_references( self.manifest, saved_manifest_publications[project_name] ) - public_nodes_partially_parsing = True + public_nodes_rebuilt = True + elif project_name not in saved_manifest_publications: + public_nodes_rebuilt = True - if self.manifest.public_nodes or public_nodes_partially_parsing: + if public_nodes_rebuilt: self.manifest.rebuild_ref_lookup() + return public_nodes_rebuilt def is_partial_parsable(self, manifest: Manifest) -> Tuple[bool, Optional[str]]: """Compare the global hashes of the read-in parse results' values to diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 0cdc2f838f0..9ec55beff4b 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -163,10 +163,12 @@ def test_dependencies(self, project): results = run_dbt(["run"]) assert len(results) == 4 + # Test for only publication artifact has changed, no partial parsing # Change public node name from fct_one to fct_three m_pub_json = m_pub_json.replace("fct_one", "fct_three") + # Change generated_at field + m_pub_json = m_pub_json.replace("04-13", "04-24") write_file(m_pub_json, project.project_root, "publications", "marketing_publication.json") - write_file(ext_node_model_sql, project.project_root, "models", "test_model_two.sql") # test_model_one references a missing public model with pytest.raises(TargetNotFoundError): manifest = run_dbt(["parse"]) From 34b813a93bcd8435e9ad9f68998d0ccf835bac53 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Mon, 24 Apr 2023 14:27:29 -0400 Subject: [PATCH 31/50] Add another test --- core/dbt/parser/manifest.py | 5 ++++- tests/functional/multi_project/test_publication.py | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 31ef9f6bfe1..e0b6be20bac 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -703,6 +703,7 @@ def build_public_nodes(self): dependencies_filepath = resolve_path_from_base( "dependencies.yml", self.root_project.project_root ) + saved_manifest_dependencies = self.manifest.dependencies if path_exists(dependencies_filepath): contents = load_file_contents(dependencies_filepath) dependencies_dict = load_yaml_text(contents) @@ -711,6 +712,9 @@ def build_public_nodes(self): else: self.manifest.dependencies = None + if saved_manifest_dependencies is None and self.manifest.dependencies is None: + return public_nodes_rebuilt + # collect the names of the projects for later use dependent_project_names = [] if self.manifest.dependencies: @@ -1572,7 +1576,6 @@ def _process_refs_for_node(manifest: Manifest, current_project: str, node: Manif def remove_dependent_project_references(manifest: Manifest, publication: PublicationConfig): for unique_id in publication.public_model_ids: for child_id in manifest.child_map[unique_id]: - print(f"--- child_id: {child_id}") node = manifest.expect(child_id) if hasattr(node.depends_on, "public_nodes"): node.depends_on.public_nodes.remove(unique_id) # type: ignore diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 9ec55beff4b..8d8e7ad4360 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -172,3 +172,11 @@ def test_dependencies(self, project): # test_model_one references a missing public model with pytest.raises(TargetNotFoundError): manifest = run_dbt(["parse"]) + + # Add another public reference + m_pub_json = m_pub_json.replace("fct_three", "fct_one") + m_pub_json = m_pub_json.replace("04-13", "04-25") + write_file(m_pub_json, project.project_root, "publications", "marketing_publication.json") + write_file(ext_node_model_sql, project.project_root, "models", "test_model_two.sql") + results = run_dbt(["run"]) + assert len(results) == 5 From 719ab9a52b99ea5976ac3cdb8721963922fecaf5 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Mon, 24 Apr 2023 15:02:52 -0400 Subject: [PATCH 32/50] Add some logging events --- core/dbt/events/types.proto | 12 + core/dbt/events/types.py | 10 +- core/dbt/events/types_pb2.py | 1098 +++++++++++++++++----------------- core/dbt/parser/manifest.py | 30 +- tests/unit/test_events.py | 3 + 5 files changed, 604 insertions(+), 549 deletions(-) diff --git a/core/dbt/events/types.proto b/core/dbt/events/types.proto index 488009cd341..0a9772fce32 100644 --- a/core/dbt/events/types.proto +++ b/core/dbt/events/types.proto @@ -831,6 +831,18 @@ message InputFileDiffErrorMsg { InputFileDiffError data = 2; } +// I002 +message PublicationArtifactChanged { + string project_name = 1; + string action = 2; + google.protobuf.Timestamp generated_at = 3; +} + +message PublicationArtifactChangedMsg { + EventInfo info = 1; + PublicationArtifactChanged data = 2; +} + // Skipping I002, I003, I004, I005, I006, I007 // I008 diff --git a/core/dbt/events/types.py b/core/dbt/events/types.py index f764cd1ecf5..97a6573c6d4 100644 --- a/core/dbt/events/types.py +++ b/core/dbt/events/types.py @@ -788,7 +788,15 @@ def message(self) -> str: return f"Error processing file diff: {self.category}, {self.file_id}" -# Skipping I002, I003, I004, I005, I006, I007 +class PublicationArtifactChanged(WarnLevel): + def code(self): + return "I002" + + def message(self) -> str: + return f"The publication artifact for {self.project_name} has been {self.action}." + + +# Skipping I003, I004, I005, I006, I007 class InvalidValueForField(WarnLevel): diff --git a/core/dbt/events/types_pb2.py b/core/dbt/events/types_pb2.py index afe6a6d0ebc..7947955174a 100644 --- a/core/dbt/events/types_pb2.py +++ b/core/dbt/events/types_pb2.py @@ -15,7 +15,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0btypes.proto\x12\x0bproto_types\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x91\x02\n\tEventInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04\x63ode\x18\x02 \x01(\t\x12\x0b\n\x03msg\x18\x03 \x01(\t\x12\r\n\x05level\x18\x04 \x01(\t\x12\x15\n\rinvocation_id\x18\x05 \x01(\t\x12\x0b\n\x03pid\x18\x06 \x01(\x05\x12\x0e\n\x06thread\x18\x07 \x01(\t\x12&\n\x02ts\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x05\x65xtra\x18\t \x03(\x0b\x32!.proto_types.EventInfo.ExtraEntry\x12\x10\n\x08\x63\x61tegory\x18\n \x01(\t\x1a,\n\nExtraEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x7f\n\rTimingInfoMsg\x12\x0c\n\x04name\x18\x01 \x01(\t\x12.\n\nstarted_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x0c\x63ompleted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"V\n\x0cNodeRelation\x12\x10\n\x08\x64\x61tabase\x18\n \x01(\t\x12\x0e\n\x06schema\x18\x0b \x01(\t\x12\r\n\x05\x61lias\x18\x0c \x01(\t\x12\x15\n\rrelation_name\x18\r \x01(\t\"\x91\x02\n\x08NodeInfo\x12\x11\n\tnode_path\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x11\n\tunique_id\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t\x12\x14\n\x0cmaterialized\x18\x05 \x01(\t\x12\x13\n\x0bnode_status\x18\x06 \x01(\t\x12\x17\n\x0fnode_started_at\x18\x07 \x01(\t\x12\x18\n\x10node_finished_at\x18\x08 \x01(\t\x12%\n\x04meta\x18\t \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x30\n\rnode_relation\x18\n \x01(\x0b\x32\x19.proto_types.NodeRelation\"\xd1\x01\n\x0cRunResultMsg\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12/\n\x0btiming_info\x18\x03 \x03(\x0b\x32\x1a.proto_types.TimingInfoMsg\x12\x0e\n\x06thread\x18\x04 \x01(\t\x12\x16\n\x0e\x65xecution_time\x18\x05 \x01(\x02\x12\x31\n\x10\x61\x64\x61pter_response\x18\x06 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x14\n\x0cnum_failures\x18\x07 \x01(\x05\"G\n\x0fReferenceKeyMsg\x12\x10\n\x08\x64\x61tabase\x18\x01 \x01(\t\x12\x0e\n\x06schema\x18\x02 \x01(\t\x12\x12\n\nidentifier\x18\x03 \x01(\t\"6\n\x0eGenericMessage\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\"9\n\x11MainReportVersion\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x13\n\x0blog_version\x18\x02 \x01(\x05\"j\n\x14MainReportVersionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.MainReportVersion\"r\n\x0eMainReportArgs\x12\x33\n\x04\x61rgs\x18\x01 \x03(\x0b\x32%.proto_types.MainReportArgs.ArgsEntry\x1a+\n\tArgsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"d\n\x11MainReportArgsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.MainReportArgs\"+\n\x15MainTrackingUserState\x12\x12\n\nuser_state\x18\x01 \x01(\t\"r\n\x18MainTrackingUserStateMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.MainTrackingUserState\"5\n\x0fMergedFromState\x12\x12\n\nnum_merged\x18\x01 \x01(\x05\x12\x0e\n\x06sample\x18\x02 \x03(\t\"f\n\x12MergedFromStateMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.MergedFromState\"A\n\x14MissingProfileTarget\x12\x14\n\x0cprofile_name\x18\x01 \x01(\t\x12\x13\n\x0btarget_name\x18\x02 \x01(\t\"p\n\x17MissingProfileTargetMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.MissingProfileTarget\"(\n\x11InvalidOptionYAML\x12\x13\n\x0boption_name\x18\x01 \x01(\t\"j\n\x14InvalidOptionYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.InvalidOptionYAML\"!\n\x12LogDbtProjectError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"l\n\x15LogDbtProjectErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogDbtProjectError\"3\n\x12LogDbtProfileError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\x12\x10\n\x08profiles\x18\x02 \x03(\t\"l\n\x15LogDbtProfileErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogDbtProfileError\"!\n\x12StarterProjectPath\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"l\n\x15StarterProjectPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.StarterProjectPath\"$\n\x15\x43onfigFolderDirectory\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"r\n\x18\x43onfigFolderDirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ConfigFolderDirectory\"\'\n\x14NoSampleProfileFound\x12\x0f\n\x07\x61\x64\x61pter\x18\x01 \x01(\t\"p\n\x17NoSampleProfileFoundMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.NoSampleProfileFound\"6\n\x18ProfileWrittenWithSample\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"x\n\x1bProfileWrittenWithSampleMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.ProfileWrittenWithSample\"B\n$ProfileWrittenWithTargetTemplateYAML\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x90\x01\n\'ProfileWrittenWithTargetTemplateYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12?\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x31.proto_types.ProfileWrittenWithTargetTemplateYAML\"C\n%ProfileWrittenWithProjectTemplateYAML\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x92\x01\n(ProfileWrittenWithProjectTemplateYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12@\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x32.proto_types.ProfileWrittenWithProjectTemplateYAML\"\x12\n\x10SettingUpProfile\"h\n\x13SettingUpProfileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.SettingUpProfile\"\x1c\n\x1aInvalidProfileTemplateYAML\"|\n\x1dInvalidProfileTemplateYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.InvalidProfileTemplateYAML\"(\n\x18ProjectNameAlreadyExists\x12\x0c\n\x04name\x18\x01 \x01(\t\"x\n\x1bProjectNameAlreadyExistsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.ProjectNameAlreadyExists\"K\n\x0eProjectCreated\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08\x64ocs_url\x18\x02 \x01(\t\x12\x11\n\tslack_url\x18\x03 \x01(\t\"d\n\x11ProjectCreatedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.ProjectCreated\"@\n\x1aPackageRedirectDeprecation\x12\x10\n\x08old_name\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"|\n\x1dPackageRedirectDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.PackageRedirectDeprecation\"\x1f\n\x1dPackageInstallPathDeprecation\"\x82\x01\n PackageInstallPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.PackageInstallPathDeprecation\"H\n\x1b\x43onfigSourcePathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\x12\x10\n\x08\x65xp_path\x18\x02 \x01(\t\"~\n\x1e\x43onfigSourcePathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConfigSourcePathDeprecation\"F\n\x19\x43onfigDataPathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\x12\x10\n\x08\x65xp_path\x18\x02 \x01(\t\"z\n\x1c\x43onfigDataPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.ConfigDataPathDeprecation\"?\n\x19\x41\x64\x61pterDeprecationWarning\x12\x10\n\x08old_name\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"z\n\x1c\x41\x64\x61pterDeprecationWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.AdapterDeprecationWarning\".\n\x17MetricAttributesRenamed\x12\x13\n\x0bmetric_name\x18\x01 \x01(\t\"v\n\x1aMetricAttributesRenamedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.MetricAttributesRenamed\"+\n\x17\x45xposureNameDeprecation\x12\x10\n\x08\x65xposure\x18\x01 \x01(\t\"v\n\x1a\x45xposureNameDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.ExposureNameDeprecation\"^\n\x13InternalDeprecation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06reason\x18\x02 \x01(\t\x12\x18\n\x10suggested_action\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\t\"n\n\x16InternalDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.InternalDeprecation\"@\n\x1a\x45nvironmentVariableRenamed\x12\x10\n\x08old_name\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"|\n\x1d\x45nvironmentVariableRenamedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.EnvironmentVariableRenamed\"3\n\x18\x43onfigLogPathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\"x\n\x1b\x43onfigLogPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.ConfigLogPathDeprecation\"6\n\x1b\x43onfigTargetPathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\"~\n\x1e\x43onfigTargetPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConfigTargetPathDeprecation\"\x87\x01\n\x11\x41\x64\x61pterEventDebug\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"j\n\x14\x41\x64\x61pterEventDebugMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.AdapterEventDebug\"\x86\x01\n\x10\x41\x64\x61pterEventInfo\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"h\n\x13\x41\x64\x61pterEventInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.AdapterEventInfo\"\x89\x01\n\x13\x41\x64\x61pterEventWarning\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"n\n\x16\x41\x64\x61pterEventWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.AdapterEventWarning\"\x99\x01\n\x11\x41\x64\x61pterEventError\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\x12\x10\n\x08\x65xc_info\x18\x05 \x01(\t\"j\n\x14\x41\x64\x61pterEventErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.AdapterEventError\"_\n\rNewConnection\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_type\x18\x02 \x01(\t\x12\x11\n\tconn_name\x18\x03 \x01(\t\"b\n\x10NewConnectionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.NewConnection\"=\n\x10\x43onnectionReused\x12\x11\n\tconn_name\x18\x01 \x01(\t\x12\x16\n\x0eorig_conn_name\x18\x02 \x01(\t\"h\n\x13\x43onnectionReusedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConnectionReused\"0\n\x1b\x43onnectionLeftOpenInCleanup\x12\x11\n\tconn_name\x18\x01 \x01(\t\"~\n\x1e\x43onnectionLeftOpenInCleanupMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConnectionLeftOpenInCleanup\".\n\x19\x43onnectionClosedInCleanup\x12\x11\n\tconn_name\x18\x01 \x01(\t\"z\n\x1c\x43onnectionClosedInCleanupMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.ConnectionClosedInCleanup\"_\n\x0eRollbackFailed\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"d\n\x11RollbackFailedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.RollbackFailed\"O\n\x10\x43onnectionClosed\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"h\n\x13\x43onnectionClosedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConnectionClosed\"Q\n\x12\x43onnectionLeftOpen\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"l\n\x15\x43onnectionLeftOpenMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.ConnectionLeftOpen\"G\n\x08Rollback\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"X\n\x0bRollbackMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.Rollback\"@\n\tCacheMiss\x12\x11\n\tconn_name\x18\x01 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x02 \x01(\t\x12\x0e\n\x06schema\x18\x03 \x01(\t\"Z\n\x0c\x43\x61\x63heMissMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.CacheMiss\"b\n\rListRelations\x12\x10\n\x08\x64\x61tabase\x18\x01 \x01(\t\x12\x0e\n\x06schema\x18\x02 \x01(\t\x12/\n\trelations\x18\x03 \x03(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"b\n\x10ListRelationsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.ListRelations\"`\n\x0e\x43onnectionUsed\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_type\x18\x02 \x01(\t\x12\x11\n\tconn_name\x18\x03 \x01(\t\"d\n\x11\x43onnectionUsedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.ConnectionUsed\"T\n\x08SQLQuery\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\x12\x0b\n\x03sql\x18\x03 \x01(\t\"X\n\x0bSQLQueryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.SQLQuery\"[\n\x0eSQLQueryStatus\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0e\n\x06status\x18\x02 \x01(\t\x12\x0f\n\x07\x65lapsed\x18\x03 \x01(\x02\"d\n\x11SQLQueryStatusMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.SQLQueryStatus\"H\n\tSQLCommit\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"Z\n\x0cSQLCommitMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.SQLCommit\"a\n\rColTypeChange\x12\x11\n\torig_type\x18\x01 \x01(\t\x12\x10\n\x08new_type\x18\x02 \x01(\t\x12+\n\x05table\x18\x03 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"b\n\x10\x43olTypeChangeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.ColTypeChange\"@\n\x0eSchemaCreation\x12.\n\x08relation\x18\x01 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"d\n\x11SchemaCreationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.SchemaCreation\"<\n\nSchemaDrop\x12.\n\x08relation\x18\x01 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"\\\n\rSchemaDropMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.SchemaDrop\"\xde\x01\n\x0b\x43\x61\x63heAction\x12\x0e\n\x06\x61\x63tion\x18\x01 \x01(\t\x12-\n\x07ref_key\x18\x02 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\x12/\n\tref_key_2\x18\x03 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\x12/\n\tref_key_3\x18\x04 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\x12.\n\x08ref_list\x18\x05 \x03(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"^\n\x0e\x43\x61\x63heActionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.CacheAction\"\x98\x01\n\x0e\x43\x61\x63heDumpGraph\x12\x33\n\x04\x64ump\x18\x01 \x03(\x0b\x32%.proto_types.CacheDumpGraph.DumpEntry\x12\x14\n\x0c\x62\x65\x66ore_after\x18\x02 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x03 \x01(\t\x1a+\n\tDumpEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"d\n\x11\x43\x61\x63heDumpGraphMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.CacheDumpGraph\"!\n\x12\x41\x64\x61pterImportError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"l\n\x15\x41\x64\x61pterImportErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.AdapterImportError\"#\n\x0fPluginLoadError\x12\x10\n\x08\x65xc_info\x18\x01 \x01(\t\"f\n\x12PluginLoadErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.PluginLoadError\"Z\n\x14NewConnectionOpening\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x18\n\x10\x63onnection_state\x18\x02 \x01(\t\"p\n\x17NewConnectionOpeningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.NewConnectionOpening\"8\n\rCodeExecution\x12\x11\n\tconn_name\x18\x01 \x01(\t\x12\x14\n\x0c\x63ode_content\x18\x02 \x01(\t\"b\n\x10\x43odeExecutionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.CodeExecution\"6\n\x13\x43odeExecutionStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x0f\n\x07\x65lapsed\x18\x02 \x01(\x02\"n\n\x16\x43odeExecutionStatusMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.CodeExecutionStatus\"%\n\x16\x43\x61talogGenerationError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"t\n\x19\x43\x61talogGenerationErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.CatalogGenerationError\"-\n\x13WriteCatalogFailure\x12\x16\n\x0enum_exceptions\x18\x01 \x01(\x05\"n\n\x16WriteCatalogFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.WriteCatalogFailure\"\x1e\n\x0e\x43\x61talogWritten\x12\x0c\n\x04path\x18\x01 \x01(\t\"d\n\x11\x43\x61talogWrittenMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.CatalogWritten\"\x14\n\x12\x43\x61nnotGenerateDocs\"l\n\x15\x43\x61nnotGenerateDocsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.CannotGenerateDocs\"\x11\n\x0f\x42uildingCatalog\"f\n\x12\x42uildingCatalogMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.BuildingCatalog\"-\n\x18\x44\x61tabaseErrorRunningHook\x12\x11\n\thook_type\x18\x01 \x01(\t\"x\n\x1b\x44\x61tabaseErrorRunningHookMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DatabaseErrorRunningHook\"4\n\x0cHooksRunning\x12\x11\n\tnum_hooks\x18\x01 \x01(\x05\x12\x11\n\thook_type\x18\x02 \x01(\t\"`\n\x0fHooksRunningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.HooksRunning\"T\n\x14\x46inishedRunningStats\x12\x11\n\tstat_line\x18\x01 \x01(\t\x12\x11\n\texecution\x18\x02 \x01(\t\x12\x16\n\x0e\x65xecution_time\x18\x03 \x01(\x02\"p\n\x17\x46inishedRunningStatsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.FinishedRunningStats\"<\n\x15\x43onstraintNotEnforced\x12\x12\n\nconstraint\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x61pter\x18\x02 \x01(\t\"r\n\x18\x43onstraintNotEnforcedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ConstraintNotEnforced\"=\n\x16\x43onstraintNotSupported\x12\x12\n\nconstraint\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x61pter\x18\x02 \x01(\t\"t\n\x19\x43onstraintNotSupportedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.ConstraintNotSupported\"7\n\x12InputFileDiffError\x12\x10\n\x08\x63\x61tegory\x18\x01 \x01(\t\x12\x0f\n\x07\x66ile_id\x18\x02 \x01(\t\"l\n\x15InputFileDiffErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.InputFileDiffError\"?\n\x14InvalidValueForField\x12\x12\n\nfield_name\x18\x01 \x01(\t\x12\x13\n\x0b\x66ield_value\x18\x02 \x01(\t\"p\n\x17InvalidValueForFieldMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.InvalidValueForField\"Q\n\x11ValidationWarning\x12\x15\n\rresource_type\x18\x01 \x01(\t\x12\x12\n\nfield_name\x18\x02 \x01(\t\x12\x11\n\tnode_name\x18\x03 \x01(\t\"j\n\x14ValidationWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.ValidationWarning\"!\n\x11ParsePerfInfoPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"j\n\x14ParsePerfInfoPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.ParsePerfInfoPath\"$\n\x14GenericTestFileParse\x12\x0c\n\x04path\x18\x01 \x01(\t\"p\n\x17GenericTestFileParseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.GenericTestFileParse\"\x1e\n\x0eMacroFileParse\x12\x0c\n\x04path\x18\x01 \x01(\t\"d\n\x11MacroFileParseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.MacroFileParse\"1\n!PartialParsingErrorProcessingFile\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\"\x8a\x01\n$PartialParsingErrorProcessingFileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.PartialParsingErrorProcessingFile\"\x86\x01\n\x13PartialParsingError\x12?\n\x08\x65xc_info\x18\x01 \x03(\x0b\x32-.proto_types.PartialParsingError.ExcInfoEntry\x1a.\n\x0c\x45xcInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"n\n\x16PartialParsingErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.PartialParsingError\"\x1b\n\x19PartialParsingSkipParsing\"z\n\x1cPartialParsingSkipParsingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.PartialParsingSkipParsing\"&\n\x14UnableToPartialParse\x12\x0e\n\x06reason\x18\x01 \x01(\t\"p\n\x17UnableToPartialParseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.UnableToPartialParse\"f\n\x12StateCheckVarsHash\x12\x10\n\x08\x63hecksum\x18\x01 \x01(\t\x12\x0c\n\x04vars\x18\x02 \x01(\t\x12\x0f\n\x07profile\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x0f\n\x07version\x18\x05 \x01(\t\"l\n\x15StateCheckVarsHashMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.StateCheckVarsHash\"\x1a\n\x18PartialParsingNotEnabled\"x\n\x1bPartialParsingNotEnabledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.PartialParsingNotEnabled\"C\n\x14ParsedFileLoadFailed\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"p\n\x17ParsedFileLoadFailedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.ParsedFileLoadFailed\"H\n\x15PartialParsingEnabled\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x05\x12\r\n\x05\x61\x64\x64\x65\x64\x18\x02 \x01(\x05\x12\x0f\n\x07\x63hanged\x18\x03 \x01(\x05\"r\n\x18PartialParsingEnabledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.PartialParsingEnabled\"8\n\x12PartialParsingFile\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x11\n\toperation\x18\x02 \x01(\t\"l\n\x15PartialParsingFileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.PartialParsingFile\"\xaf\x01\n\x1fInvalidDisabledTargetInTestNode\x12\x1b\n\x13resource_type_title\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x1a\n\x12original_file_path\x18\x03 \x01(\t\x12\x13\n\x0btarget_kind\x18\x04 \x01(\t\x12\x13\n\x0btarget_name\x18\x05 \x01(\t\x12\x16\n\x0etarget_package\x18\x06 \x01(\t\"\x86\x01\n\"InvalidDisabledTargetInTestNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.InvalidDisabledTargetInTestNode\"7\n\x18UnusedResourceConfigPath\x12\x1b\n\x13unused_config_paths\x18\x01 \x03(\t\"x\n\x1bUnusedResourceConfigPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.UnusedResourceConfigPath\"3\n\rSeedIncreased\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"b\n\x10SeedIncreasedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.SeedIncreased\">\n\x18SeedExceedsLimitSamePath\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"x\n\x1bSeedExceedsLimitSamePathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.SeedExceedsLimitSamePath\"D\n\x1eSeedExceedsLimitAndPathChanged\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x84\x01\n!SeedExceedsLimitAndPathChangedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.SeedExceedsLimitAndPathChanged\"\\\n\x1fSeedExceedsLimitChecksumChanged\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x15\n\rchecksum_name\x18\x03 \x01(\t\"\x86\x01\n\"SeedExceedsLimitChecksumChangedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.SeedExceedsLimitChecksumChanged\"%\n\x0cUnusedTables\x12\x15\n\runused_tables\x18\x01 \x03(\t\"`\n\x0fUnusedTablesMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.UnusedTables\"\x87\x01\n\x17WrongResourceSchemaFile\x12\x12\n\npatch_name\x18\x01 \x01(\t\x12\x15\n\rresource_type\x18\x02 \x01(\t\x12\x1c\n\x14plural_resource_type\x18\x03 \x01(\t\x12\x10\n\x08yaml_key\x18\x04 \x01(\t\x12\x11\n\tfile_path\x18\x05 \x01(\t\"v\n\x1aWrongResourceSchemaFileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.WrongResourceSchemaFile\"K\n\x10NoNodeForYamlKey\x12\x12\n\npatch_name\x18\x01 \x01(\t\x12\x10\n\x08yaml_key\x18\x02 \x01(\t\x12\x11\n\tfile_path\x18\x03 \x01(\t\"h\n\x13NoNodeForYamlKeyMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.NoNodeForYamlKey\"+\n\x15MacroNotFoundForPatch\x12\x12\n\npatch_name\x18\x01 \x01(\t\"r\n\x18MacroNotFoundForPatchMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.MacroNotFoundForPatch\"\xb8\x01\n\x16NodeNotFoundOrDisabled\x12\x1a\n\x12original_file_path\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x1b\n\x13resource_type_title\x18\x03 \x01(\t\x12\x13\n\x0btarget_name\x18\x04 \x01(\t\x12\x13\n\x0btarget_kind\x18\x05 \x01(\t\x12\x16\n\x0etarget_package\x18\x06 \x01(\t\x12\x10\n\x08\x64isabled\x18\x07 \x01(\t\"t\n\x19NodeNotFoundOrDisabledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.NodeNotFoundOrDisabled\"H\n\x0fJinjaLogWarning\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03msg\x18\x02 \x01(\t\"f\n\x12JinjaLogWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.JinjaLogWarning\"E\n\x0cJinjaLogInfo\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03msg\x18\x02 \x01(\t\"`\n\x0fJinjaLogInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.JinjaLogInfo\"F\n\rJinjaLogDebug\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03msg\x18\x02 \x01(\t\"b\n\x10JinjaLogDebugMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.JinjaLogDebug\"/\n\x1dGitSparseCheckoutSubdirectory\x12\x0e\n\x06subdir\x18\x01 \x01(\t\"\x82\x01\n GitSparseCheckoutSubdirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.GitSparseCheckoutSubdirectory\"/\n\x1bGitProgressCheckoutRevision\x12\x10\n\x08revision\x18\x01 \x01(\t\"~\n\x1eGitProgressCheckoutRevisionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.GitProgressCheckoutRevision\"4\n%GitProgressUpdatingExistingDependency\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"\x92\x01\n(GitProgressUpdatingExistingDependencyMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12@\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x32.proto_types.GitProgressUpdatingExistingDependency\".\n\x1fGitProgressPullingNewDependency\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"\x86\x01\n\"GitProgressPullingNewDependencyMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.GitProgressPullingNewDependency\"\x1d\n\x0eGitNothingToDo\x12\x0b\n\x03sha\x18\x01 \x01(\t\"d\n\x11GitNothingToDoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.GitNothingToDo\"E\n\x1fGitProgressUpdatedCheckoutRange\x12\x11\n\tstart_sha\x18\x01 \x01(\t\x12\x0f\n\x07\x65nd_sha\x18\x02 \x01(\t\"\x86\x01\n\"GitProgressUpdatedCheckoutRangeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.GitProgressUpdatedCheckoutRange\"*\n\x17GitProgressCheckedOutAt\x12\x0f\n\x07\x65nd_sha\x18\x01 \x01(\t\"v\n\x1aGitProgressCheckedOutAtMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.GitProgressCheckedOutAt\")\n\x1aRegistryProgressGETRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\"|\n\x1dRegistryProgressGETRequestMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.RegistryProgressGETRequest\"=\n\x1bRegistryProgressGETResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x11\n\tresp_code\x18\x02 \x01(\x05\"~\n\x1eRegistryProgressGETResponseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.RegistryProgressGETResponse\"_\n\x1dSelectorReportInvalidSelector\x12\x17\n\x0fvalid_selectors\x18\x01 \x01(\t\x12\x13\n\x0bspec_method\x18\x02 \x01(\t\x12\x10\n\x08raw_spec\x18\x03 \x01(\t\"\x82\x01\n SelectorReportInvalidSelectorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.SelectorReportInvalidSelector\"\x15\n\x13\x44\x65psNoPackagesFound\"n\n\x16\x44\x65psNoPackagesFoundMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DepsNoPackagesFound\"/\n\x17\x44\x65psStartPackageInstall\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\"v\n\x1a\x44\x65psStartPackageInstallMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.DepsStartPackageInstall\"\'\n\x0f\x44\x65psInstallInfo\x12\x14\n\x0cversion_name\x18\x01 \x01(\t\"f\n\x12\x44\x65psInstallInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DepsInstallInfo\"-\n\x13\x44\x65psUpdateAvailable\x12\x16\n\x0eversion_latest\x18\x01 \x01(\t\"n\n\x16\x44\x65psUpdateAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DepsUpdateAvailable\"\x0e\n\x0c\x44\x65psUpToDate\"`\n\x0f\x44\x65psUpToDateMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.DepsUpToDate\",\n\x14\x44\x65psListSubdirectory\x12\x14\n\x0csubdirectory\x18\x01 \x01(\t\"p\n\x17\x44\x65psListSubdirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.DepsListSubdirectory\".\n\x1a\x44\x65psNotifyUpdatesAvailable\x12\x10\n\x08packages\x18\x01 \x03(\t\"|\n\x1d\x44\x65psNotifyUpdatesAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.DepsNotifyUpdatesAvailable\"1\n\x11RetryExternalCall\x12\x0f\n\x07\x61ttempt\x18\x01 \x01(\x05\x12\x0b\n\x03max\x18\x02 \x01(\x05\"j\n\x14RetryExternalCallMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.RetryExternalCall\"#\n\x14RecordRetryException\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"p\n\x17RecordRetryExceptionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.RecordRetryException\".\n\x1fRegistryIndexProgressGETRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\"\x86\x01\n\"RegistryIndexProgressGETRequestMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.RegistryIndexProgressGETRequest\"B\n RegistryIndexProgressGETResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x11\n\tresp_code\x18\x02 \x01(\x05\"\x88\x01\n#RegistryIndexProgressGETResponseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12;\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32-.proto_types.RegistryIndexProgressGETResponse\"2\n\x1eRegistryResponseUnexpectedType\x12\x10\n\x08response\x18\x01 \x01(\t\"\x84\x01\n!RegistryResponseUnexpectedTypeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.RegistryResponseUnexpectedType\"2\n\x1eRegistryResponseMissingTopKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x84\x01\n!RegistryResponseMissingTopKeysMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.RegistryResponseMissingTopKeys\"5\n!RegistryResponseMissingNestedKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x8a\x01\n$RegistryResponseMissingNestedKeysMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.RegistryResponseMissingNestedKeys\"3\n\x1fRegistryResponseExtraNestedKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x86\x01\n\"RegistryResponseExtraNestedKeysMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.RegistryResponseExtraNestedKeys\"(\n\x18\x44\x65psSetDownloadDirectory\x12\x0c\n\x04path\x18\x01 \x01(\t\"x\n\x1b\x44\x65psSetDownloadDirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DepsSetDownloadDirectory\"-\n\x0c\x44\x65psUnpinned\x12\x10\n\x08revision\x18\x01 \x01(\t\x12\x0b\n\x03git\x18\x02 \x01(\t\"`\n\x0f\x44\x65psUnpinnedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.DepsUnpinned\"/\n\x1bNoNodesForSelectionCriteria\x12\x10\n\x08spec_raw\x18\x01 \x01(\t\"~\n\x1eNoNodesForSelectionCriteriaMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.NoNodesForSelectionCriteria\"*\n\x1bRunningOperationCaughtError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"~\n\x1eRunningOperationCaughtErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.RunningOperationCaughtError\"\x11\n\x0f\x43ompileComplete\"f\n\x12\x43ompileCompleteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.CompileComplete\"\x18\n\x16\x46reshnessCheckComplete\"t\n\x19\x46reshnessCheckCompleteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.FreshnessCheckComplete\"\x1c\n\nSeedHeader\x12\x0e\n\x06header\x18\x01 \x01(\t\"\\\n\rSeedHeaderMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.SeedHeader\"3\n\x12SQLRunnerException\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x02 \x01(\t\"l\n\x15SQLRunnerExceptionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.SQLRunnerException\"\xa8\x01\n\rLogTestResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\x12\n\nnum_models\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\x12\x14\n\x0cnum_failures\x18\x07 \x01(\x05\"b\n\x10LogTestResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.LogTestResult\"k\n\x0cLogStartLine\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\"`\n\x0fLogStartLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.LogStartLine\"\x95\x01\n\x0eLogModelResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\"d\n\x11LogModelResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.LogModelResult\"\xfa\x01\n\x11LogSnapshotResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\x12\x34\n\x03\x63\x66g\x18\x07 \x03(\x0b\x32\'.proto_types.LogSnapshotResult.CfgEntry\x1a*\n\x08\x43\x66gEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"j\n\x14LogSnapshotResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.LogSnapshotResult\"\xb9\x01\n\rLogSeedResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0e\n\x06status\x18\x02 \x01(\t\x12\x16\n\x0eresult_message\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\x12\x0e\n\x06schema\x18\x07 \x01(\t\x12\x10\n\x08relation\x18\x08 \x01(\t\"b\n\x10LogSeedResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.LogSeedResult\"\xad\x01\n\x12LogFreshnessResult\x12\x0e\n\x06status\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x05 \x01(\x02\x12\x13\n\x0bsource_name\x18\x06 \x01(\t\x12\x12\n\ntable_name\x18\x07 \x01(\t\"l\n\x15LogFreshnessResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogFreshnessResult\"\"\n\rLogCancelLine\x12\x11\n\tconn_name\x18\x01 \x01(\t\"b\n\x10LogCancelLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.LogCancelLine\"\x1f\n\x0f\x44\x65\x66\x61ultSelector\x12\x0c\n\x04name\x18\x01 \x01(\t\"f\n\x12\x44\x65\x66\x61ultSelectorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DefaultSelector\"5\n\tNodeStart\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"Z\n\x0cNodeStartMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.NodeStart\"g\n\x0cNodeFinished\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12-\n\nrun_result\x18\x02 \x01(\x0b\x32\x19.proto_types.RunResultMsg\"`\n\x0fNodeFinishedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.NodeFinished\"+\n\x1bQueryCancelationUnsupported\x12\x0c\n\x04type\x18\x01 \x01(\t\"~\n\x1eQueryCancelationUnsupportedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.QueryCancelationUnsupported\"O\n\x0f\x43oncurrencyLine\x12\x13\n\x0bnum_threads\x18\x01 \x01(\x05\x12\x13\n\x0btarget_name\x18\x02 \x01(\t\x12\x12\n\nnode_count\x18\x03 \x01(\x05\"f\n\x12\x43oncurrencyLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ConcurrencyLine\"E\n\x19WritingInjectedSQLForNode\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"z\n\x1cWritingInjectedSQLForNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.WritingInjectedSQLForNode\"9\n\rNodeCompiling\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"b\n\x10NodeCompilingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.NodeCompiling\"9\n\rNodeExecuting\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"b\n\x10NodeExecutingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.NodeExecuting\"m\n\x10LogHookStartLine\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tstatement\x18\x02 \x01(\t\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\"h\n\x13LogHookStartLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.LogHookStartLine\"\x93\x01\n\x0eLogHookEndLine\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tstatement\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\"d\n\x11LogHookEndLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.LogHookEndLine\"\x93\x01\n\x0fSkippingDetails\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x15\n\rresource_type\x18\x02 \x01(\t\x12\x0e\n\x06schema\x18\x03 \x01(\t\x12\x11\n\tnode_name\x18\x04 \x01(\t\x12\r\n\x05index\x18\x05 \x01(\x05\x12\r\n\x05total\x18\x06 \x01(\x05\"f\n\x12SkippingDetailsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.SkippingDetails\"\r\n\x0bNothingToDo\"^\n\x0eNothingToDoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.NothingToDo\",\n\x1dRunningOperationUncaughtError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"\x82\x01\n RunningOperationUncaughtErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.RunningOperationUncaughtError\"\x93\x01\n\x0c\x45ndRunResult\x12*\n\x07results\x18\x01 \x03(\x0b\x32\x19.proto_types.RunResultMsg\x12\x14\n\x0c\x65lapsed_time\x18\x02 \x01(\x02\x12\x30\n\x0cgenerated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07success\x18\x04 \x01(\x08\"`\n\x0f\x45ndRunResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.EndRunResult\"\x11\n\x0fNoNodesSelected\"f\n\x12NoNodesSelectedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.NoNodesSelected\"w\n\x10\x43ommandCompleted\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\x30\n\x0c\x63ompleted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07\x65lapsed\x18\x04 \x01(\x02\"h\n\x13\x43ommandCompletedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.CommandCompleted\"k\n\x08ShowNode\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x0f\n\x07preview\x18\x02 \x01(\t\x12\x11\n\tis_inline\x18\x03 \x01(\x08\x12\x15\n\routput_format\x18\x04 \x01(\t\x12\x11\n\tunique_id\x18\x05 \x01(\t\"X\n\x0bShowNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.ShowNode\"p\n\x0c\x43ompiledNode\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x10\n\x08\x63ompiled\x18\x02 \x01(\t\x12\x11\n\tis_inline\x18\x03 \x01(\x08\x12\x15\n\routput_format\x18\x04 \x01(\t\x12\x11\n\tunique_id\x18\x05 \x01(\t\"`\n\x0f\x43ompiledNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.CompiledNode\"b\n\x17\x43\x61tchableExceptionOnRun\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"v\n\x1a\x43\x61tchableExceptionOnRunMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.CatchableExceptionOnRun\"5\n\x12InternalErrorOnRun\x12\x12\n\nbuild_path\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\"l\n\x15InternalErrorOnRunMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.InternalErrorOnRun\"K\n\x15GenericExceptionOnRun\x12\x12\n\nbuild_path\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x0b\n\x03\x65xc\x18\x03 \x01(\t\"r\n\x18GenericExceptionOnRunMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.GenericExceptionOnRun\"N\n\x1aNodeConnectionReleaseError\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"|\n\x1dNodeConnectionReleaseErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.NodeConnectionReleaseError\"\x1f\n\nFoundStats\x12\x11\n\tstat_line\x18\x01 \x01(\t\"\\\n\rFoundStatsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.FoundStats\"\x17\n\x15MainKeyboardInterrupt\"r\n\x18MainKeyboardInterruptMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.MainKeyboardInterrupt\"#\n\x14MainEncounteredError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"p\n\x17MainEncounteredErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.MainEncounteredError\"%\n\x0eMainStackTrace\x12\x13\n\x0bstack_trace\x18\x01 \x01(\t\"d\n\x11MainStackTraceMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.MainStackTrace\"@\n\x13SystemCouldNotWrite\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0e\n\x06reason\x18\x02 \x01(\t\x12\x0b\n\x03\x65xc\x18\x03 \x01(\t\"n\n\x16SystemCouldNotWriteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.SystemCouldNotWrite\"!\n\x12SystemExecutingCmd\x12\x0b\n\x03\x63md\x18\x01 \x03(\t\"l\n\x15SystemExecutingCmdMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.SystemExecutingCmd\"\x1c\n\x0cSystemStdOut\x12\x0c\n\x04\x62msg\x18\x01 \x01(\t\"`\n\x0fSystemStdOutMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SystemStdOut\"\x1c\n\x0cSystemStdErr\x12\x0c\n\x04\x62msg\x18\x01 \x01(\t\"`\n\x0fSystemStdErrMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SystemStdErr\",\n\x16SystemReportReturnCode\x12\x12\n\nreturncode\x18\x01 \x01(\x05\"t\n\x19SystemReportReturnCodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.SystemReportReturnCode\"p\n\x13TimingInfoCollected\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12/\n\x0btiming_info\x18\x02 \x01(\x0b\x32\x1a.proto_types.TimingInfoMsg\"n\n\x16TimingInfoCollectedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.TimingInfoCollected\"&\n\x12LogDebugStackTrace\x12\x10\n\x08\x65xc_info\x18\x01 \x01(\t\"l\n\x15LogDebugStackTraceMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogDebugStackTrace\"\x1e\n\x0e\x43heckCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"d\n\x11\x43heckCleanPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.CheckCleanPath\" \n\x10\x43onfirmCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"h\n\x13\x43onfirmCleanPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConfirmCleanPath\"\"\n\x12ProtectedCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"l\n\x15ProtectedCleanPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.ProtectedCleanPath\"\x14\n\x12\x46inishedCleanPaths\"l\n\x15\x46inishedCleanPathsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.FinishedCleanPaths\"5\n\x0bOpenCommand\x12\x10\n\x08open_cmd\x18\x01 \x01(\t\x12\x14\n\x0cprofiles_dir\x18\x02 \x01(\t\"^\n\x0eOpenCommandMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.OpenCommand\"\x19\n\nFormatting\x12\x0b\n\x03msg\x18\x01 \x01(\t\"\\\n\rFormattingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.Formatting\"0\n\x0fServingDocsPort\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\"f\n\x12ServingDocsPortMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ServingDocsPort\"%\n\x15ServingDocsAccessInfo\x12\x0c\n\x04port\x18\x01 \x01(\t\"r\n\x18ServingDocsAccessInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ServingDocsAccessInfo\"\x15\n\x13ServingDocsExitInfo\"n\n\x16ServingDocsExitInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.ServingDocsExitInfo\"J\n\x10RunResultWarning\x12\x15\n\rresource_type\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\"h\n\x13RunResultWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.RunResultWarning\"J\n\x10RunResultFailure\x12\x15\n\rresource_type\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\"h\n\x13RunResultFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.RunResultFailure\"k\n\tStatsLine\x12\x30\n\x05stats\x18\x01 \x03(\x0b\x32!.proto_types.StatsLine.StatsEntry\x1a,\n\nStatsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\"Z\n\x0cStatsLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.StatsLine\"\x1d\n\x0eRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\"d\n\x11RunResultErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.RunResultError\")\n\x17RunResultErrorNoMessage\x12\x0e\n\x06status\x18\x01 \x01(\t\"v\n\x1aRunResultErrorNoMessageMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.RunResultErrorNoMessage\"\x1f\n\x0fSQLCompiledPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"f\n\x12SQLCompiledPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.SQLCompiledPath\"-\n\x14\x43heckNodeTestFailure\x12\x15\n\rrelation_name\x18\x01 \x01(\t\"p\n\x17\x43heckNodeTestFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.CheckNodeTestFailure\"\"\n\x13\x46irstRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\"n\n\x16\x46irstRunResultErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.FirstRunResultError\"\'\n\x18\x41\x66terFirstRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\"x\n\x1b\x41\x66terFirstRunResultErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.AfterFirstRunResultError\"W\n\x0f\x45ndOfRunSummary\x12\x12\n\nnum_errors\x18\x01 \x01(\x05\x12\x14\n\x0cnum_warnings\x18\x02 \x01(\x05\x12\x1a\n\x12keyboard_interrupt\x18\x03 \x01(\x08\"f\n\x12\x45ndOfRunSummaryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.EndOfRunSummary\"U\n\x13LogSkipBecauseError\x12\x0e\n\x06schema\x18\x01 \x01(\t\x12\x10\n\x08relation\x18\x02 \x01(\t\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\"n\n\x16LogSkipBecauseErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.LogSkipBecauseError\"\x14\n\x12\x45nsureGitInstalled\"l\n\x15\x45nsureGitInstalledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.EnsureGitInstalled\"\x1a\n\x18\x44\x65psCreatingLocalSymlink\"x\n\x1b\x44\x65psCreatingLocalSymlinkMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DepsCreatingLocalSymlink\"\x19\n\x17\x44\x65psSymlinkNotAvailable\"v\n\x1a\x44\x65psSymlinkNotAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.DepsSymlinkNotAvailable\"\x11\n\x0f\x44isableTracking\"f\n\x12\x44isableTrackingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DisableTracking\"\x1e\n\x0cSendingEvent\x12\x0e\n\x06kwargs\x18\x01 \x01(\t\"`\n\x0fSendingEventMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SendingEvent\"\x12\n\x10SendEventFailure\"h\n\x13SendEventFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.SendEventFailure\"\r\n\x0b\x46lushEvents\"^\n\x0e\x46lushEventsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.FlushEvents\"\x14\n\x12\x46lushEventsFailure\"l\n\x15\x46lushEventsFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.FlushEventsFailure\"-\n\x19TrackingInitializeFailure\x12\x10\n\x08\x65xc_info\x18\x01 \x01(\t\"z\n\x1cTrackingInitializeFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.TrackingInitializeFailure\"&\n\x17RunResultWarningMessage\x12\x0b\n\x03msg\x18\x01 \x01(\t\"v\n\x1aRunResultWarningMessageMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.RunResultWarningMessage\"\x1a\n\x0b\x44\x65\x62ugCmdOut\x12\x0b\n\x03msg\x18\x01 \x01(\t\"^\n\x0e\x44\x65\x62ugCmdOutMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.DebugCmdOut\"\x1d\n\x0e\x44\x65\x62ugCmdResult\x12\x0b\n\x03msg\x18\x01 \x01(\t\"d\n\x11\x44\x65\x62ugCmdResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.DebugCmdResult\"\x19\n\nListCmdOut\x12\x0b\n\x03msg\x18\x01 \x01(\t\"\\\n\rListCmdOutMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.ListCmdOut\"\x13\n\x04Note\x12\x0b\n\x03msg\x18\x01 \x01(\t\"P\n\x07NoteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x1f\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x11.proto_types.Noteb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0btypes.proto\x12\x0bproto_types\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x91\x02\n\tEventInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04\x63ode\x18\x02 \x01(\t\x12\x0b\n\x03msg\x18\x03 \x01(\t\x12\r\n\x05level\x18\x04 \x01(\t\x12\x15\n\rinvocation_id\x18\x05 \x01(\t\x12\x0b\n\x03pid\x18\x06 \x01(\x05\x12\x0e\n\x06thread\x18\x07 \x01(\t\x12&\n\x02ts\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x05\x65xtra\x18\t \x03(\x0b\x32!.proto_types.EventInfo.ExtraEntry\x12\x10\n\x08\x63\x61tegory\x18\n \x01(\t\x1a,\n\nExtraEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x7f\n\rTimingInfoMsg\x12\x0c\n\x04name\x18\x01 \x01(\t\x12.\n\nstarted_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x0c\x63ompleted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"V\n\x0cNodeRelation\x12\x10\n\x08\x64\x61tabase\x18\n \x01(\t\x12\x0e\n\x06schema\x18\x0b \x01(\t\x12\r\n\x05\x61lias\x18\x0c \x01(\t\x12\x15\n\rrelation_name\x18\r \x01(\t\"\x91\x02\n\x08NodeInfo\x12\x11\n\tnode_path\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x11\n\tunique_id\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t\x12\x14\n\x0cmaterialized\x18\x05 \x01(\t\x12\x13\n\x0bnode_status\x18\x06 \x01(\t\x12\x17\n\x0fnode_started_at\x18\x07 \x01(\t\x12\x18\n\x10node_finished_at\x18\x08 \x01(\t\x12%\n\x04meta\x18\t \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x30\n\rnode_relation\x18\n \x01(\x0b\x32\x19.proto_types.NodeRelation\"\xd1\x01\n\x0cRunResultMsg\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12/\n\x0btiming_info\x18\x03 \x03(\x0b\x32\x1a.proto_types.TimingInfoMsg\x12\x0e\n\x06thread\x18\x04 \x01(\t\x12\x16\n\x0e\x65xecution_time\x18\x05 \x01(\x02\x12\x31\n\x10\x61\x64\x61pter_response\x18\x06 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x14\n\x0cnum_failures\x18\x07 \x01(\x05\"G\n\x0fReferenceKeyMsg\x12\x10\n\x08\x64\x61tabase\x18\x01 \x01(\t\x12\x0e\n\x06schema\x18\x02 \x01(\t\x12\x12\n\nidentifier\x18\x03 \x01(\t\"6\n\x0eGenericMessage\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\"9\n\x11MainReportVersion\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x13\n\x0blog_version\x18\x02 \x01(\x05\"j\n\x14MainReportVersionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.MainReportVersion\"r\n\x0eMainReportArgs\x12\x33\n\x04\x61rgs\x18\x01 \x03(\x0b\x32%.proto_types.MainReportArgs.ArgsEntry\x1a+\n\tArgsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"d\n\x11MainReportArgsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.MainReportArgs\"+\n\x15MainTrackingUserState\x12\x12\n\nuser_state\x18\x01 \x01(\t\"r\n\x18MainTrackingUserStateMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.MainTrackingUserState\"5\n\x0fMergedFromState\x12\x12\n\nnum_merged\x18\x01 \x01(\x05\x12\x0e\n\x06sample\x18\x02 \x03(\t\"f\n\x12MergedFromStateMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.MergedFromState\"A\n\x14MissingProfileTarget\x12\x14\n\x0cprofile_name\x18\x01 \x01(\t\x12\x13\n\x0btarget_name\x18\x02 \x01(\t\"p\n\x17MissingProfileTargetMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.MissingProfileTarget\"(\n\x11InvalidOptionYAML\x12\x13\n\x0boption_name\x18\x01 \x01(\t\"j\n\x14InvalidOptionYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.InvalidOptionYAML\"!\n\x12LogDbtProjectError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"l\n\x15LogDbtProjectErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogDbtProjectError\"3\n\x12LogDbtProfileError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\x12\x10\n\x08profiles\x18\x02 \x03(\t\"l\n\x15LogDbtProfileErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogDbtProfileError\"!\n\x12StarterProjectPath\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"l\n\x15StarterProjectPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.StarterProjectPath\"$\n\x15\x43onfigFolderDirectory\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"r\n\x18\x43onfigFolderDirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ConfigFolderDirectory\"\'\n\x14NoSampleProfileFound\x12\x0f\n\x07\x61\x64\x61pter\x18\x01 \x01(\t\"p\n\x17NoSampleProfileFoundMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.NoSampleProfileFound\"6\n\x18ProfileWrittenWithSample\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"x\n\x1bProfileWrittenWithSampleMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.ProfileWrittenWithSample\"B\n$ProfileWrittenWithTargetTemplateYAML\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x90\x01\n\'ProfileWrittenWithTargetTemplateYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12?\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x31.proto_types.ProfileWrittenWithTargetTemplateYAML\"C\n%ProfileWrittenWithProjectTemplateYAML\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x92\x01\n(ProfileWrittenWithProjectTemplateYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12@\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x32.proto_types.ProfileWrittenWithProjectTemplateYAML\"\x12\n\x10SettingUpProfile\"h\n\x13SettingUpProfileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.SettingUpProfile\"\x1c\n\x1aInvalidProfileTemplateYAML\"|\n\x1dInvalidProfileTemplateYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.InvalidProfileTemplateYAML\"(\n\x18ProjectNameAlreadyExists\x12\x0c\n\x04name\x18\x01 \x01(\t\"x\n\x1bProjectNameAlreadyExistsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.ProjectNameAlreadyExists\"K\n\x0eProjectCreated\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08\x64ocs_url\x18\x02 \x01(\t\x12\x11\n\tslack_url\x18\x03 \x01(\t\"d\n\x11ProjectCreatedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.ProjectCreated\"@\n\x1aPackageRedirectDeprecation\x12\x10\n\x08old_name\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"|\n\x1dPackageRedirectDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.PackageRedirectDeprecation\"\x1f\n\x1dPackageInstallPathDeprecation\"\x82\x01\n PackageInstallPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.PackageInstallPathDeprecation\"H\n\x1b\x43onfigSourcePathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\x12\x10\n\x08\x65xp_path\x18\x02 \x01(\t\"~\n\x1e\x43onfigSourcePathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConfigSourcePathDeprecation\"F\n\x19\x43onfigDataPathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\x12\x10\n\x08\x65xp_path\x18\x02 \x01(\t\"z\n\x1c\x43onfigDataPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.ConfigDataPathDeprecation\"?\n\x19\x41\x64\x61pterDeprecationWarning\x12\x10\n\x08old_name\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"z\n\x1c\x41\x64\x61pterDeprecationWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.AdapterDeprecationWarning\".\n\x17MetricAttributesRenamed\x12\x13\n\x0bmetric_name\x18\x01 \x01(\t\"v\n\x1aMetricAttributesRenamedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.MetricAttributesRenamed\"+\n\x17\x45xposureNameDeprecation\x12\x10\n\x08\x65xposure\x18\x01 \x01(\t\"v\n\x1a\x45xposureNameDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.ExposureNameDeprecation\"^\n\x13InternalDeprecation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06reason\x18\x02 \x01(\t\x12\x18\n\x10suggested_action\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\t\"n\n\x16InternalDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.InternalDeprecation\"@\n\x1a\x45nvironmentVariableRenamed\x12\x10\n\x08old_name\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"|\n\x1d\x45nvironmentVariableRenamedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.EnvironmentVariableRenamed\"3\n\x18\x43onfigLogPathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\"x\n\x1b\x43onfigLogPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.ConfigLogPathDeprecation\"6\n\x1b\x43onfigTargetPathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\"~\n\x1e\x43onfigTargetPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConfigTargetPathDeprecation\"\x87\x01\n\x11\x41\x64\x61pterEventDebug\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"j\n\x14\x41\x64\x61pterEventDebugMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.AdapterEventDebug\"\x86\x01\n\x10\x41\x64\x61pterEventInfo\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"h\n\x13\x41\x64\x61pterEventInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.AdapterEventInfo\"\x89\x01\n\x13\x41\x64\x61pterEventWarning\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"n\n\x16\x41\x64\x61pterEventWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.AdapterEventWarning\"\x99\x01\n\x11\x41\x64\x61pterEventError\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\x12\x10\n\x08\x65xc_info\x18\x05 \x01(\t\"j\n\x14\x41\x64\x61pterEventErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.AdapterEventError\"_\n\rNewConnection\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_type\x18\x02 \x01(\t\x12\x11\n\tconn_name\x18\x03 \x01(\t\"b\n\x10NewConnectionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.NewConnection\"=\n\x10\x43onnectionReused\x12\x11\n\tconn_name\x18\x01 \x01(\t\x12\x16\n\x0eorig_conn_name\x18\x02 \x01(\t\"h\n\x13\x43onnectionReusedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConnectionReused\"0\n\x1b\x43onnectionLeftOpenInCleanup\x12\x11\n\tconn_name\x18\x01 \x01(\t\"~\n\x1e\x43onnectionLeftOpenInCleanupMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConnectionLeftOpenInCleanup\".\n\x19\x43onnectionClosedInCleanup\x12\x11\n\tconn_name\x18\x01 \x01(\t\"z\n\x1c\x43onnectionClosedInCleanupMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.ConnectionClosedInCleanup\"_\n\x0eRollbackFailed\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"d\n\x11RollbackFailedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.RollbackFailed\"O\n\x10\x43onnectionClosed\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"h\n\x13\x43onnectionClosedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConnectionClosed\"Q\n\x12\x43onnectionLeftOpen\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"l\n\x15\x43onnectionLeftOpenMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.ConnectionLeftOpen\"G\n\x08Rollback\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"X\n\x0bRollbackMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.Rollback\"@\n\tCacheMiss\x12\x11\n\tconn_name\x18\x01 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x02 \x01(\t\x12\x0e\n\x06schema\x18\x03 \x01(\t\"Z\n\x0c\x43\x61\x63heMissMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.CacheMiss\"b\n\rListRelations\x12\x10\n\x08\x64\x61tabase\x18\x01 \x01(\t\x12\x0e\n\x06schema\x18\x02 \x01(\t\x12/\n\trelations\x18\x03 \x03(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"b\n\x10ListRelationsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.ListRelations\"`\n\x0e\x43onnectionUsed\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_type\x18\x02 \x01(\t\x12\x11\n\tconn_name\x18\x03 \x01(\t\"d\n\x11\x43onnectionUsedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.ConnectionUsed\"T\n\x08SQLQuery\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\x12\x0b\n\x03sql\x18\x03 \x01(\t\"X\n\x0bSQLQueryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.SQLQuery\"[\n\x0eSQLQueryStatus\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0e\n\x06status\x18\x02 \x01(\t\x12\x0f\n\x07\x65lapsed\x18\x03 \x01(\x02\"d\n\x11SQLQueryStatusMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.SQLQueryStatus\"H\n\tSQLCommit\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"Z\n\x0cSQLCommitMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.SQLCommit\"a\n\rColTypeChange\x12\x11\n\torig_type\x18\x01 \x01(\t\x12\x10\n\x08new_type\x18\x02 \x01(\t\x12+\n\x05table\x18\x03 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"b\n\x10\x43olTypeChangeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.ColTypeChange\"@\n\x0eSchemaCreation\x12.\n\x08relation\x18\x01 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"d\n\x11SchemaCreationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.SchemaCreation\"<\n\nSchemaDrop\x12.\n\x08relation\x18\x01 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"\\\n\rSchemaDropMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.SchemaDrop\"\xde\x01\n\x0b\x43\x61\x63heAction\x12\x0e\n\x06\x61\x63tion\x18\x01 \x01(\t\x12-\n\x07ref_key\x18\x02 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\x12/\n\tref_key_2\x18\x03 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\x12/\n\tref_key_3\x18\x04 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\x12.\n\x08ref_list\x18\x05 \x03(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"^\n\x0e\x43\x61\x63heActionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.CacheAction\"\x98\x01\n\x0e\x43\x61\x63heDumpGraph\x12\x33\n\x04\x64ump\x18\x01 \x03(\x0b\x32%.proto_types.CacheDumpGraph.DumpEntry\x12\x14\n\x0c\x62\x65\x66ore_after\x18\x02 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x03 \x01(\t\x1a+\n\tDumpEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"d\n\x11\x43\x61\x63heDumpGraphMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.CacheDumpGraph\"!\n\x12\x41\x64\x61pterImportError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"l\n\x15\x41\x64\x61pterImportErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.AdapterImportError\"#\n\x0fPluginLoadError\x12\x10\n\x08\x65xc_info\x18\x01 \x01(\t\"f\n\x12PluginLoadErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.PluginLoadError\"Z\n\x14NewConnectionOpening\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x18\n\x10\x63onnection_state\x18\x02 \x01(\t\"p\n\x17NewConnectionOpeningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.NewConnectionOpening\"8\n\rCodeExecution\x12\x11\n\tconn_name\x18\x01 \x01(\t\x12\x14\n\x0c\x63ode_content\x18\x02 \x01(\t\"b\n\x10\x43odeExecutionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.CodeExecution\"6\n\x13\x43odeExecutionStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x0f\n\x07\x65lapsed\x18\x02 \x01(\x02\"n\n\x16\x43odeExecutionStatusMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.CodeExecutionStatus\"%\n\x16\x43\x61talogGenerationError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"t\n\x19\x43\x61talogGenerationErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.CatalogGenerationError\"-\n\x13WriteCatalogFailure\x12\x16\n\x0enum_exceptions\x18\x01 \x01(\x05\"n\n\x16WriteCatalogFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.WriteCatalogFailure\"\x1e\n\x0e\x43\x61talogWritten\x12\x0c\n\x04path\x18\x01 \x01(\t\"d\n\x11\x43\x61talogWrittenMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.CatalogWritten\"\x14\n\x12\x43\x61nnotGenerateDocs\"l\n\x15\x43\x61nnotGenerateDocsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.CannotGenerateDocs\"\x11\n\x0f\x42uildingCatalog\"f\n\x12\x42uildingCatalogMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.BuildingCatalog\"-\n\x18\x44\x61tabaseErrorRunningHook\x12\x11\n\thook_type\x18\x01 \x01(\t\"x\n\x1b\x44\x61tabaseErrorRunningHookMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DatabaseErrorRunningHook\"4\n\x0cHooksRunning\x12\x11\n\tnum_hooks\x18\x01 \x01(\x05\x12\x11\n\thook_type\x18\x02 \x01(\t\"`\n\x0fHooksRunningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.HooksRunning\"T\n\x14\x46inishedRunningStats\x12\x11\n\tstat_line\x18\x01 \x01(\t\x12\x11\n\texecution\x18\x02 \x01(\t\x12\x16\n\x0e\x65xecution_time\x18\x03 \x01(\x02\"p\n\x17\x46inishedRunningStatsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.FinishedRunningStats\"<\n\x15\x43onstraintNotEnforced\x12\x12\n\nconstraint\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x61pter\x18\x02 \x01(\t\"r\n\x18\x43onstraintNotEnforcedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ConstraintNotEnforced\"=\n\x16\x43onstraintNotSupported\x12\x12\n\nconstraint\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x61pter\x18\x02 \x01(\t\"t\n\x19\x43onstraintNotSupportedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.ConstraintNotSupported\"7\n\x12InputFileDiffError\x12\x10\n\x08\x63\x61tegory\x18\x01 \x01(\t\x12\x0f\n\x07\x66ile_id\x18\x02 \x01(\t\"l\n\x15InputFileDiffErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.InputFileDiffError\"t\n\x1aPublicationArtifactChanged\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x02 \x01(\t\x12\x30\n\x0cgenerated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"|\n\x1dPublicationArtifactChangedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.PublicationArtifactChanged\"?\n\x14InvalidValueForField\x12\x12\n\nfield_name\x18\x01 \x01(\t\x12\x13\n\x0b\x66ield_value\x18\x02 \x01(\t\"p\n\x17InvalidValueForFieldMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.InvalidValueForField\"Q\n\x11ValidationWarning\x12\x15\n\rresource_type\x18\x01 \x01(\t\x12\x12\n\nfield_name\x18\x02 \x01(\t\x12\x11\n\tnode_name\x18\x03 \x01(\t\"j\n\x14ValidationWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.ValidationWarning\"!\n\x11ParsePerfInfoPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"j\n\x14ParsePerfInfoPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.ParsePerfInfoPath\"$\n\x14GenericTestFileParse\x12\x0c\n\x04path\x18\x01 \x01(\t\"p\n\x17GenericTestFileParseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.GenericTestFileParse\"\x1e\n\x0eMacroFileParse\x12\x0c\n\x04path\x18\x01 \x01(\t\"d\n\x11MacroFileParseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.MacroFileParse\"1\n!PartialParsingErrorProcessingFile\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\"\x8a\x01\n$PartialParsingErrorProcessingFileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.PartialParsingErrorProcessingFile\"\x86\x01\n\x13PartialParsingError\x12?\n\x08\x65xc_info\x18\x01 \x03(\x0b\x32-.proto_types.PartialParsingError.ExcInfoEntry\x1a.\n\x0c\x45xcInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"n\n\x16PartialParsingErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.PartialParsingError\"\x1b\n\x19PartialParsingSkipParsing\"z\n\x1cPartialParsingSkipParsingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.PartialParsingSkipParsing\"&\n\x14UnableToPartialParse\x12\x0e\n\x06reason\x18\x01 \x01(\t\"p\n\x17UnableToPartialParseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.UnableToPartialParse\"f\n\x12StateCheckVarsHash\x12\x10\n\x08\x63hecksum\x18\x01 \x01(\t\x12\x0c\n\x04vars\x18\x02 \x01(\t\x12\x0f\n\x07profile\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x0f\n\x07version\x18\x05 \x01(\t\"l\n\x15StateCheckVarsHashMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.StateCheckVarsHash\"\x1a\n\x18PartialParsingNotEnabled\"x\n\x1bPartialParsingNotEnabledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.PartialParsingNotEnabled\"C\n\x14ParsedFileLoadFailed\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"p\n\x17ParsedFileLoadFailedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.ParsedFileLoadFailed\"H\n\x15PartialParsingEnabled\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x05\x12\r\n\x05\x61\x64\x64\x65\x64\x18\x02 \x01(\x05\x12\x0f\n\x07\x63hanged\x18\x03 \x01(\x05\"r\n\x18PartialParsingEnabledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.PartialParsingEnabled\"8\n\x12PartialParsingFile\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x11\n\toperation\x18\x02 \x01(\t\"l\n\x15PartialParsingFileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.PartialParsingFile\"\xaf\x01\n\x1fInvalidDisabledTargetInTestNode\x12\x1b\n\x13resource_type_title\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x1a\n\x12original_file_path\x18\x03 \x01(\t\x12\x13\n\x0btarget_kind\x18\x04 \x01(\t\x12\x13\n\x0btarget_name\x18\x05 \x01(\t\x12\x16\n\x0etarget_package\x18\x06 \x01(\t\"\x86\x01\n\"InvalidDisabledTargetInTestNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.InvalidDisabledTargetInTestNode\"7\n\x18UnusedResourceConfigPath\x12\x1b\n\x13unused_config_paths\x18\x01 \x03(\t\"x\n\x1bUnusedResourceConfigPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.UnusedResourceConfigPath\"3\n\rSeedIncreased\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"b\n\x10SeedIncreasedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.SeedIncreased\">\n\x18SeedExceedsLimitSamePath\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"x\n\x1bSeedExceedsLimitSamePathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.SeedExceedsLimitSamePath\"D\n\x1eSeedExceedsLimitAndPathChanged\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x84\x01\n!SeedExceedsLimitAndPathChangedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.SeedExceedsLimitAndPathChanged\"\\\n\x1fSeedExceedsLimitChecksumChanged\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x15\n\rchecksum_name\x18\x03 \x01(\t\"\x86\x01\n\"SeedExceedsLimitChecksumChangedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.SeedExceedsLimitChecksumChanged\"%\n\x0cUnusedTables\x12\x15\n\runused_tables\x18\x01 \x03(\t\"`\n\x0fUnusedTablesMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.UnusedTables\"\x87\x01\n\x17WrongResourceSchemaFile\x12\x12\n\npatch_name\x18\x01 \x01(\t\x12\x15\n\rresource_type\x18\x02 \x01(\t\x12\x1c\n\x14plural_resource_type\x18\x03 \x01(\t\x12\x10\n\x08yaml_key\x18\x04 \x01(\t\x12\x11\n\tfile_path\x18\x05 \x01(\t\"v\n\x1aWrongResourceSchemaFileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.WrongResourceSchemaFile\"K\n\x10NoNodeForYamlKey\x12\x12\n\npatch_name\x18\x01 \x01(\t\x12\x10\n\x08yaml_key\x18\x02 \x01(\t\x12\x11\n\tfile_path\x18\x03 \x01(\t\"h\n\x13NoNodeForYamlKeyMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.NoNodeForYamlKey\"+\n\x15MacroNotFoundForPatch\x12\x12\n\npatch_name\x18\x01 \x01(\t\"r\n\x18MacroNotFoundForPatchMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.MacroNotFoundForPatch\"\xb8\x01\n\x16NodeNotFoundOrDisabled\x12\x1a\n\x12original_file_path\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x1b\n\x13resource_type_title\x18\x03 \x01(\t\x12\x13\n\x0btarget_name\x18\x04 \x01(\t\x12\x13\n\x0btarget_kind\x18\x05 \x01(\t\x12\x16\n\x0etarget_package\x18\x06 \x01(\t\x12\x10\n\x08\x64isabled\x18\x07 \x01(\t\"t\n\x19NodeNotFoundOrDisabledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.NodeNotFoundOrDisabled\"H\n\x0fJinjaLogWarning\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03msg\x18\x02 \x01(\t\"f\n\x12JinjaLogWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.JinjaLogWarning\"E\n\x0cJinjaLogInfo\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03msg\x18\x02 \x01(\t\"`\n\x0fJinjaLogInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.JinjaLogInfo\"F\n\rJinjaLogDebug\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03msg\x18\x02 \x01(\t\"b\n\x10JinjaLogDebugMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.JinjaLogDebug\"/\n\x1dGitSparseCheckoutSubdirectory\x12\x0e\n\x06subdir\x18\x01 \x01(\t\"\x82\x01\n GitSparseCheckoutSubdirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.GitSparseCheckoutSubdirectory\"/\n\x1bGitProgressCheckoutRevision\x12\x10\n\x08revision\x18\x01 \x01(\t\"~\n\x1eGitProgressCheckoutRevisionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.GitProgressCheckoutRevision\"4\n%GitProgressUpdatingExistingDependency\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"\x92\x01\n(GitProgressUpdatingExistingDependencyMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12@\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x32.proto_types.GitProgressUpdatingExistingDependency\".\n\x1fGitProgressPullingNewDependency\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"\x86\x01\n\"GitProgressPullingNewDependencyMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.GitProgressPullingNewDependency\"\x1d\n\x0eGitNothingToDo\x12\x0b\n\x03sha\x18\x01 \x01(\t\"d\n\x11GitNothingToDoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.GitNothingToDo\"E\n\x1fGitProgressUpdatedCheckoutRange\x12\x11\n\tstart_sha\x18\x01 \x01(\t\x12\x0f\n\x07\x65nd_sha\x18\x02 \x01(\t\"\x86\x01\n\"GitProgressUpdatedCheckoutRangeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.GitProgressUpdatedCheckoutRange\"*\n\x17GitProgressCheckedOutAt\x12\x0f\n\x07\x65nd_sha\x18\x01 \x01(\t\"v\n\x1aGitProgressCheckedOutAtMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.GitProgressCheckedOutAt\")\n\x1aRegistryProgressGETRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\"|\n\x1dRegistryProgressGETRequestMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.RegistryProgressGETRequest\"=\n\x1bRegistryProgressGETResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x11\n\tresp_code\x18\x02 \x01(\x05\"~\n\x1eRegistryProgressGETResponseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.RegistryProgressGETResponse\"_\n\x1dSelectorReportInvalidSelector\x12\x17\n\x0fvalid_selectors\x18\x01 \x01(\t\x12\x13\n\x0bspec_method\x18\x02 \x01(\t\x12\x10\n\x08raw_spec\x18\x03 \x01(\t\"\x82\x01\n SelectorReportInvalidSelectorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.SelectorReportInvalidSelector\"\x15\n\x13\x44\x65psNoPackagesFound\"n\n\x16\x44\x65psNoPackagesFoundMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DepsNoPackagesFound\"/\n\x17\x44\x65psStartPackageInstall\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\"v\n\x1a\x44\x65psStartPackageInstallMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.DepsStartPackageInstall\"\'\n\x0f\x44\x65psInstallInfo\x12\x14\n\x0cversion_name\x18\x01 \x01(\t\"f\n\x12\x44\x65psInstallInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DepsInstallInfo\"-\n\x13\x44\x65psUpdateAvailable\x12\x16\n\x0eversion_latest\x18\x01 \x01(\t\"n\n\x16\x44\x65psUpdateAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DepsUpdateAvailable\"\x0e\n\x0c\x44\x65psUpToDate\"`\n\x0f\x44\x65psUpToDateMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.DepsUpToDate\",\n\x14\x44\x65psListSubdirectory\x12\x14\n\x0csubdirectory\x18\x01 \x01(\t\"p\n\x17\x44\x65psListSubdirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.DepsListSubdirectory\".\n\x1a\x44\x65psNotifyUpdatesAvailable\x12\x10\n\x08packages\x18\x01 \x03(\t\"|\n\x1d\x44\x65psNotifyUpdatesAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.DepsNotifyUpdatesAvailable\"1\n\x11RetryExternalCall\x12\x0f\n\x07\x61ttempt\x18\x01 \x01(\x05\x12\x0b\n\x03max\x18\x02 \x01(\x05\"j\n\x14RetryExternalCallMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.RetryExternalCall\"#\n\x14RecordRetryException\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"p\n\x17RecordRetryExceptionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.RecordRetryException\".\n\x1fRegistryIndexProgressGETRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\"\x86\x01\n\"RegistryIndexProgressGETRequestMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.RegistryIndexProgressGETRequest\"B\n RegistryIndexProgressGETResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x11\n\tresp_code\x18\x02 \x01(\x05\"\x88\x01\n#RegistryIndexProgressGETResponseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12;\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32-.proto_types.RegistryIndexProgressGETResponse\"2\n\x1eRegistryResponseUnexpectedType\x12\x10\n\x08response\x18\x01 \x01(\t\"\x84\x01\n!RegistryResponseUnexpectedTypeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.RegistryResponseUnexpectedType\"2\n\x1eRegistryResponseMissingTopKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x84\x01\n!RegistryResponseMissingTopKeysMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.RegistryResponseMissingTopKeys\"5\n!RegistryResponseMissingNestedKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x8a\x01\n$RegistryResponseMissingNestedKeysMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.RegistryResponseMissingNestedKeys\"3\n\x1fRegistryResponseExtraNestedKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x86\x01\n\"RegistryResponseExtraNestedKeysMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.RegistryResponseExtraNestedKeys\"(\n\x18\x44\x65psSetDownloadDirectory\x12\x0c\n\x04path\x18\x01 \x01(\t\"x\n\x1b\x44\x65psSetDownloadDirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DepsSetDownloadDirectory\"-\n\x0c\x44\x65psUnpinned\x12\x10\n\x08revision\x18\x01 \x01(\t\x12\x0b\n\x03git\x18\x02 \x01(\t\"`\n\x0f\x44\x65psUnpinnedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.DepsUnpinned\"/\n\x1bNoNodesForSelectionCriteria\x12\x10\n\x08spec_raw\x18\x01 \x01(\t\"~\n\x1eNoNodesForSelectionCriteriaMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.NoNodesForSelectionCriteria\"*\n\x1bRunningOperationCaughtError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"~\n\x1eRunningOperationCaughtErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.RunningOperationCaughtError\"\x11\n\x0f\x43ompileComplete\"f\n\x12\x43ompileCompleteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.CompileComplete\"\x18\n\x16\x46reshnessCheckComplete\"t\n\x19\x46reshnessCheckCompleteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.FreshnessCheckComplete\"\x1c\n\nSeedHeader\x12\x0e\n\x06header\x18\x01 \x01(\t\"\\\n\rSeedHeaderMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.SeedHeader\"3\n\x12SQLRunnerException\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x02 \x01(\t\"l\n\x15SQLRunnerExceptionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.SQLRunnerException\"\xa8\x01\n\rLogTestResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\x12\n\nnum_models\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\x12\x14\n\x0cnum_failures\x18\x07 \x01(\x05\"b\n\x10LogTestResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.LogTestResult\"k\n\x0cLogStartLine\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\"`\n\x0fLogStartLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.LogStartLine\"\x95\x01\n\x0eLogModelResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\"d\n\x11LogModelResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.LogModelResult\"\xfa\x01\n\x11LogSnapshotResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\x12\x34\n\x03\x63\x66g\x18\x07 \x03(\x0b\x32\'.proto_types.LogSnapshotResult.CfgEntry\x1a*\n\x08\x43\x66gEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"j\n\x14LogSnapshotResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.LogSnapshotResult\"\xb9\x01\n\rLogSeedResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0e\n\x06status\x18\x02 \x01(\t\x12\x16\n\x0eresult_message\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\x12\x0e\n\x06schema\x18\x07 \x01(\t\x12\x10\n\x08relation\x18\x08 \x01(\t\"b\n\x10LogSeedResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.LogSeedResult\"\xad\x01\n\x12LogFreshnessResult\x12\x0e\n\x06status\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x05 \x01(\x02\x12\x13\n\x0bsource_name\x18\x06 \x01(\t\x12\x12\n\ntable_name\x18\x07 \x01(\t\"l\n\x15LogFreshnessResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogFreshnessResult\"\"\n\rLogCancelLine\x12\x11\n\tconn_name\x18\x01 \x01(\t\"b\n\x10LogCancelLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.LogCancelLine\"\x1f\n\x0f\x44\x65\x66\x61ultSelector\x12\x0c\n\x04name\x18\x01 \x01(\t\"f\n\x12\x44\x65\x66\x61ultSelectorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DefaultSelector\"5\n\tNodeStart\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"Z\n\x0cNodeStartMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.NodeStart\"g\n\x0cNodeFinished\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12-\n\nrun_result\x18\x02 \x01(\x0b\x32\x19.proto_types.RunResultMsg\"`\n\x0fNodeFinishedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.NodeFinished\"+\n\x1bQueryCancelationUnsupported\x12\x0c\n\x04type\x18\x01 \x01(\t\"~\n\x1eQueryCancelationUnsupportedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.QueryCancelationUnsupported\"O\n\x0f\x43oncurrencyLine\x12\x13\n\x0bnum_threads\x18\x01 \x01(\x05\x12\x13\n\x0btarget_name\x18\x02 \x01(\t\x12\x12\n\nnode_count\x18\x03 \x01(\x05\"f\n\x12\x43oncurrencyLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ConcurrencyLine\"E\n\x19WritingInjectedSQLForNode\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"z\n\x1cWritingInjectedSQLForNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.WritingInjectedSQLForNode\"9\n\rNodeCompiling\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"b\n\x10NodeCompilingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.NodeCompiling\"9\n\rNodeExecuting\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"b\n\x10NodeExecutingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.NodeExecuting\"m\n\x10LogHookStartLine\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tstatement\x18\x02 \x01(\t\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\"h\n\x13LogHookStartLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.LogHookStartLine\"\x93\x01\n\x0eLogHookEndLine\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tstatement\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\"d\n\x11LogHookEndLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.LogHookEndLine\"\x93\x01\n\x0fSkippingDetails\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x15\n\rresource_type\x18\x02 \x01(\t\x12\x0e\n\x06schema\x18\x03 \x01(\t\x12\x11\n\tnode_name\x18\x04 \x01(\t\x12\r\n\x05index\x18\x05 \x01(\x05\x12\r\n\x05total\x18\x06 \x01(\x05\"f\n\x12SkippingDetailsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.SkippingDetails\"\r\n\x0bNothingToDo\"^\n\x0eNothingToDoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.NothingToDo\",\n\x1dRunningOperationUncaughtError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"\x82\x01\n RunningOperationUncaughtErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.RunningOperationUncaughtError\"\x93\x01\n\x0c\x45ndRunResult\x12*\n\x07results\x18\x01 \x03(\x0b\x32\x19.proto_types.RunResultMsg\x12\x14\n\x0c\x65lapsed_time\x18\x02 \x01(\x02\x12\x30\n\x0cgenerated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07success\x18\x04 \x01(\x08\"`\n\x0f\x45ndRunResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.EndRunResult\"\x11\n\x0fNoNodesSelected\"f\n\x12NoNodesSelectedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.NoNodesSelected\"w\n\x10\x43ommandCompleted\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\x30\n\x0c\x63ompleted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07\x65lapsed\x18\x04 \x01(\x02\"h\n\x13\x43ommandCompletedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.CommandCompleted\"k\n\x08ShowNode\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x0f\n\x07preview\x18\x02 \x01(\t\x12\x11\n\tis_inline\x18\x03 \x01(\x08\x12\x15\n\routput_format\x18\x04 \x01(\t\x12\x11\n\tunique_id\x18\x05 \x01(\t\"X\n\x0bShowNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.ShowNode\"p\n\x0c\x43ompiledNode\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x10\n\x08\x63ompiled\x18\x02 \x01(\t\x12\x11\n\tis_inline\x18\x03 \x01(\x08\x12\x15\n\routput_format\x18\x04 \x01(\t\x12\x11\n\tunique_id\x18\x05 \x01(\t\"`\n\x0f\x43ompiledNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.CompiledNode\"b\n\x17\x43\x61tchableExceptionOnRun\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"v\n\x1a\x43\x61tchableExceptionOnRunMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.CatchableExceptionOnRun\"5\n\x12InternalErrorOnRun\x12\x12\n\nbuild_path\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\"l\n\x15InternalErrorOnRunMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.InternalErrorOnRun\"K\n\x15GenericExceptionOnRun\x12\x12\n\nbuild_path\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x0b\n\x03\x65xc\x18\x03 \x01(\t\"r\n\x18GenericExceptionOnRunMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.GenericExceptionOnRun\"N\n\x1aNodeConnectionReleaseError\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"|\n\x1dNodeConnectionReleaseErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.NodeConnectionReleaseError\"\x1f\n\nFoundStats\x12\x11\n\tstat_line\x18\x01 \x01(\t\"\\\n\rFoundStatsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.FoundStats\"\x17\n\x15MainKeyboardInterrupt\"r\n\x18MainKeyboardInterruptMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.MainKeyboardInterrupt\"#\n\x14MainEncounteredError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"p\n\x17MainEncounteredErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.MainEncounteredError\"%\n\x0eMainStackTrace\x12\x13\n\x0bstack_trace\x18\x01 \x01(\t\"d\n\x11MainStackTraceMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.MainStackTrace\"@\n\x13SystemCouldNotWrite\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0e\n\x06reason\x18\x02 \x01(\t\x12\x0b\n\x03\x65xc\x18\x03 \x01(\t\"n\n\x16SystemCouldNotWriteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.SystemCouldNotWrite\"!\n\x12SystemExecutingCmd\x12\x0b\n\x03\x63md\x18\x01 \x03(\t\"l\n\x15SystemExecutingCmdMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.SystemExecutingCmd\"\x1c\n\x0cSystemStdOut\x12\x0c\n\x04\x62msg\x18\x01 \x01(\t\"`\n\x0fSystemStdOutMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SystemStdOut\"\x1c\n\x0cSystemStdErr\x12\x0c\n\x04\x62msg\x18\x01 \x01(\t\"`\n\x0fSystemStdErrMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SystemStdErr\",\n\x16SystemReportReturnCode\x12\x12\n\nreturncode\x18\x01 \x01(\x05\"t\n\x19SystemReportReturnCodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.SystemReportReturnCode\"p\n\x13TimingInfoCollected\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12/\n\x0btiming_info\x18\x02 \x01(\x0b\x32\x1a.proto_types.TimingInfoMsg\"n\n\x16TimingInfoCollectedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.TimingInfoCollected\"&\n\x12LogDebugStackTrace\x12\x10\n\x08\x65xc_info\x18\x01 \x01(\t\"l\n\x15LogDebugStackTraceMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogDebugStackTrace\"\x1e\n\x0e\x43heckCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"d\n\x11\x43heckCleanPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.CheckCleanPath\" \n\x10\x43onfirmCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"h\n\x13\x43onfirmCleanPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConfirmCleanPath\"\"\n\x12ProtectedCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"l\n\x15ProtectedCleanPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.ProtectedCleanPath\"\x14\n\x12\x46inishedCleanPaths\"l\n\x15\x46inishedCleanPathsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.FinishedCleanPaths\"5\n\x0bOpenCommand\x12\x10\n\x08open_cmd\x18\x01 \x01(\t\x12\x14\n\x0cprofiles_dir\x18\x02 \x01(\t\"^\n\x0eOpenCommandMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.OpenCommand\"\x19\n\nFormatting\x12\x0b\n\x03msg\x18\x01 \x01(\t\"\\\n\rFormattingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.Formatting\"0\n\x0fServingDocsPort\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\"f\n\x12ServingDocsPortMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ServingDocsPort\"%\n\x15ServingDocsAccessInfo\x12\x0c\n\x04port\x18\x01 \x01(\t\"r\n\x18ServingDocsAccessInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ServingDocsAccessInfo\"\x15\n\x13ServingDocsExitInfo\"n\n\x16ServingDocsExitInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.ServingDocsExitInfo\"J\n\x10RunResultWarning\x12\x15\n\rresource_type\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\"h\n\x13RunResultWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.RunResultWarning\"J\n\x10RunResultFailure\x12\x15\n\rresource_type\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\"h\n\x13RunResultFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.RunResultFailure\"k\n\tStatsLine\x12\x30\n\x05stats\x18\x01 \x03(\x0b\x32!.proto_types.StatsLine.StatsEntry\x1a,\n\nStatsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\"Z\n\x0cStatsLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.StatsLine\"\x1d\n\x0eRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\"d\n\x11RunResultErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.RunResultError\")\n\x17RunResultErrorNoMessage\x12\x0e\n\x06status\x18\x01 \x01(\t\"v\n\x1aRunResultErrorNoMessageMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.RunResultErrorNoMessage\"\x1f\n\x0fSQLCompiledPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"f\n\x12SQLCompiledPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.SQLCompiledPath\"-\n\x14\x43heckNodeTestFailure\x12\x15\n\rrelation_name\x18\x01 \x01(\t\"p\n\x17\x43heckNodeTestFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.CheckNodeTestFailure\"\"\n\x13\x46irstRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\"n\n\x16\x46irstRunResultErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.FirstRunResultError\"\'\n\x18\x41\x66terFirstRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\"x\n\x1b\x41\x66terFirstRunResultErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.AfterFirstRunResultError\"W\n\x0f\x45ndOfRunSummary\x12\x12\n\nnum_errors\x18\x01 \x01(\x05\x12\x14\n\x0cnum_warnings\x18\x02 \x01(\x05\x12\x1a\n\x12keyboard_interrupt\x18\x03 \x01(\x08\"f\n\x12\x45ndOfRunSummaryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.EndOfRunSummary\"U\n\x13LogSkipBecauseError\x12\x0e\n\x06schema\x18\x01 \x01(\t\x12\x10\n\x08relation\x18\x02 \x01(\t\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\"n\n\x16LogSkipBecauseErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.LogSkipBecauseError\"\x14\n\x12\x45nsureGitInstalled\"l\n\x15\x45nsureGitInstalledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.EnsureGitInstalled\"\x1a\n\x18\x44\x65psCreatingLocalSymlink\"x\n\x1b\x44\x65psCreatingLocalSymlinkMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DepsCreatingLocalSymlink\"\x19\n\x17\x44\x65psSymlinkNotAvailable\"v\n\x1a\x44\x65psSymlinkNotAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.DepsSymlinkNotAvailable\"\x11\n\x0f\x44isableTracking\"f\n\x12\x44isableTrackingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DisableTracking\"\x1e\n\x0cSendingEvent\x12\x0e\n\x06kwargs\x18\x01 \x01(\t\"`\n\x0fSendingEventMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SendingEvent\"\x12\n\x10SendEventFailure\"h\n\x13SendEventFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.SendEventFailure\"\r\n\x0b\x46lushEvents\"^\n\x0e\x46lushEventsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.FlushEvents\"\x14\n\x12\x46lushEventsFailure\"l\n\x15\x46lushEventsFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.FlushEventsFailure\"-\n\x19TrackingInitializeFailure\x12\x10\n\x08\x65xc_info\x18\x01 \x01(\t\"z\n\x1cTrackingInitializeFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.TrackingInitializeFailure\"&\n\x17RunResultWarningMessage\x12\x0b\n\x03msg\x18\x01 \x01(\t\"v\n\x1aRunResultWarningMessageMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.RunResultWarningMessage\"\x1a\n\x0b\x44\x65\x62ugCmdOut\x12\x0b\n\x03msg\x18\x01 \x01(\t\"^\n\x0e\x44\x65\x62ugCmdOutMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.DebugCmdOut\"\x1d\n\x0e\x44\x65\x62ugCmdResult\x12\x0b\n\x03msg\x18\x01 \x01(\t\"d\n\x11\x44\x65\x62ugCmdResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.DebugCmdResult\"\x19\n\nListCmdOut\x12\x0b\n\x03msg\x18\x01 \x01(\t\"\\\n\rListCmdOutMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.ListCmdOut\"\x13\n\x04Note\x12\x0b\n\x03msg\x18\x01 \x01(\t\"P\n\x07NoteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x1f\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x11.proto_types.Noteb\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'types_pb2', globals()) @@ -326,550 +326,554 @@ _INPUTFILEDIFFERROR._serialized_end=13389 _INPUTFILEDIFFERRORMSG._serialized_start=13391 _INPUTFILEDIFFERRORMSG._serialized_end=13499 - _INVALIDVALUEFORFIELD._serialized_start=13501 - _INVALIDVALUEFORFIELD._serialized_end=13564 - _INVALIDVALUEFORFIELDMSG._serialized_start=13566 - _INVALIDVALUEFORFIELDMSG._serialized_end=13678 - _VALIDATIONWARNING._serialized_start=13680 - _VALIDATIONWARNING._serialized_end=13761 - _VALIDATIONWARNINGMSG._serialized_start=13763 - _VALIDATIONWARNINGMSG._serialized_end=13869 - _PARSEPERFINFOPATH._serialized_start=13871 - _PARSEPERFINFOPATH._serialized_end=13904 - _PARSEPERFINFOPATHMSG._serialized_start=13906 - _PARSEPERFINFOPATHMSG._serialized_end=14012 - _GENERICTESTFILEPARSE._serialized_start=14014 - _GENERICTESTFILEPARSE._serialized_end=14050 - _GENERICTESTFILEPARSEMSG._serialized_start=14052 - _GENERICTESTFILEPARSEMSG._serialized_end=14164 - _MACROFILEPARSE._serialized_start=14166 - _MACROFILEPARSE._serialized_end=14196 - _MACROFILEPARSEMSG._serialized_start=14198 - _MACROFILEPARSEMSG._serialized_end=14298 - _PARTIALPARSINGERRORPROCESSINGFILE._serialized_start=14300 - _PARTIALPARSINGERRORPROCESSINGFILE._serialized_end=14349 - _PARTIALPARSINGERRORPROCESSINGFILEMSG._serialized_start=14352 - _PARTIALPARSINGERRORPROCESSINGFILEMSG._serialized_end=14490 - _PARTIALPARSINGERROR._serialized_start=14493 - _PARTIALPARSINGERROR._serialized_end=14627 - _PARTIALPARSINGERROR_EXCINFOENTRY._serialized_start=14581 - _PARTIALPARSINGERROR_EXCINFOENTRY._serialized_end=14627 - _PARTIALPARSINGERRORMSG._serialized_start=14629 - _PARTIALPARSINGERRORMSG._serialized_end=14739 - _PARTIALPARSINGSKIPPARSING._serialized_start=14741 - _PARTIALPARSINGSKIPPARSING._serialized_end=14768 - _PARTIALPARSINGSKIPPARSINGMSG._serialized_start=14770 - _PARTIALPARSINGSKIPPARSINGMSG._serialized_end=14892 - _UNABLETOPARTIALPARSE._serialized_start=14894 - _UNABLETOPARTIALPARSE._serialized_end=14932 - _UNABLETOPARTIALPARSEMSG._serialized_start=14934 - _UNABLETOPARTIALPARSEMSG._serialized_end=15046 - _STATECHECKVARSHASH._serialized_start=15048 - _STATECHECKVARSHASH._serialized_end=15150 - _STATECHECKVARSHASHMSG._serialized_start=15152 - _STATECHECKVARSHASHMSG._serialized_end=15260 - _PARTIALPARSINGNOTENABLED._serialized_start=15262 - _PARTIALPARSINGNOTENABLED._serialized_end=15288 - _PARTIALPARSINGNOTENABLEDMSG._serialized_start=15290 - _PARTIALPARSINGNOTENABLEDMSG._serialized_end=15410 - _PARSEDFILELOADFAILED._serialized_start=15412 - _PARSEDFILELOADFAILED._serialized_end=15479 - _PARSEDFILELOADFAILEDMSG._serialized_start=15481 - _PARSEDFILELOADFAILEDMSG._serialized_end=15593 - _PARTIALPARSINGENABLED._serialized_start=15595 - _PARTIALPARSINGENABLED._serialized_end=15667 - _PARTIALPARSINGENABLEDMSG._serialized_start=15669 - _PARTIALPARSINGENABLEDMSG._serialized_end=15783 - _PARTIALPARSINGFILE._serialized_start=15785 - _PARTIALPARSINGFILE._serialized_end=15841 - _PARTIALPARSINGFILEMSG._serialized_start=15843 - _PARTIALPARSINGFILEMSG._serialized_end=15951 - _INVALIDDISABLEDTARGETINTESTNODE._serialized_start=15954 - _INVALIDDISABLEDTARGETINTESTNODE._serialized_end=16129 - _INVALIDDISABLEDTARGETINTESTNODEMSG._serialized_start=16132 - _INVALIDDISABLEDTARGETINTESTNODEMSG._serialized_end=16266 - _UNUSEDRESOURCECONFIGPATH._serialized_start=16268 - _UNUSEDRESOURCECONFIGPATH._serialized_end=16323 - _UNUSEDRESOURCECONFIGPATHMSG._serialized_start=16325 - _UNUSEDRESOURCECONFIGPATHMSG._serialized_end=16445 - _SEEDINCREASED._serialized_start=16447 - _SEEDINCREASED._serialized_end=16498 - _SEEDINCREASEDMSG._serialized_start=16500 - _SEEDINCREASEDMSG._serialized_end=16598 - _SEEDEXCEEDSLIMITSAMEPATH._serialized_start=16600 - _SEEDEXCEEDSLIMITSAMEPATH._serialized_end=16662 - _SEEDEXCEEDSLIMITSAMEPATHMSG._serialized_start=16664 - _SEEDEXCEEDSLIMITSAMEPATHMSG._serialized_end=16784 - _SEEDEXCEEDSLIMITANDPATHCHANGED._serialized_start=16786 - _SEEDEXCEEDSLIMITANDPATHCHANGED._serialized_end=16854 - _SEEDEXCEEDSLIMITANDPATHCHANGEDMSG._serialized_start=16857 - _SEEDEXCEEDSLIMITANDPATHCHANGEDMSG._serialized_end=16989 - _SEEDEXCEEDSLIMITCHECKSUMCHANGED._serialized_start=16991 - _SEEDEXCEEDSLIMITCHECKSUMCHANGED._serialized_end=17083 - _SEEDEXCEEDSLIMITCHECKSUMCHANGEDMSG._serialized_start=17086 - _SEEDEXCEEDSLIMITCHECKSUMCHANGEDMSG._serialized_end=17220 - _UNUSEDTABLES._serialized_start=17222 - _UNUSEDTABLES._serialized_end=17259 - _UNUSEDTABLESMSG._serialized_start=17261 - _UNUSEDTABLESMSG._serialized_end=17357 - _WRONGRESOURCESCHEMAFILE._serialized_start=17360 - _WRONGRESOURCESCHEMAFILE._serialized_end=17495 - _WRONGRESOURCESCHEMAFILEMSG._serialized_start=17497 - _WRONGRESOURCESCHEMAFILEMSG._serialized_end=17615 - _NONODEFORYAMLKEY._serialized_start=17617 - _NONODEFORYAMLKEY._serialized_end=17692 - _NONODEFORYAMLKEYMSG._serialized_start=17694 - _NONODEFORYAMLKEYMSG._serialized_end=17798 - _MACRONOTFOUNDFORPATCH._serialized_start=17800 - _MACRONOTFOUNDFORPATCH._serialized_end=17843 - _MACRONOTFOUNDFORPATCHMSG._serialized_start=17845 - _MACRONOTFOUNDFORPATCHMSG._serialized_end=17959 - _NODENOTFOUNDORDISABLED._serialized_start=17962 - _NODENOTFOUNDORDISABLED._serialized_end=18146 - _NODENOTFOUNDORDISABLEDMSG._serialized_start=18148 - _NODENOTFOUNDORDISABLEDMSG._serialized_end=18264 - _JINJALOGWARNING._serialized_start=18266 - _JINJALOGWARNING._serialized_end=18338 - _JINJALOGWARNINGMSG._serialized_start=18340 - _JINJALOGWARNINGMSG._serialized_end=18442 - _JINJALOGINFO._serialized_start=18444 - _JINJALOGINFO._serialized_end=18513 - _JINJALOGINFOMSG._serialized_start=18515 - _JINJALOGINFOMSG._serialized_end=18611 - _JINJALOGDEBUG._serialized_start=18613 - _JINJALOGDEBUG._serialized_end=18683 - _JINJALOGDEBUGMSG._serialized_start=18685 - _JINJALOGDEBUGMSG._serialized_end=18783 - _GITSPARSECHECKOUTSUBDIRECTORY._serialized_start=18785 - _GITSPARSECHECKOUTSUBDIRECTORY._serialized_end=18832 - _GITSPARSECHECKOUTSUBDIRECTORYMSG._serialized_start=18835 - _GITSPARSECHECKOUTSUBDIRECTORYMSG._serialized_end=18965 - _GITPROGRESSCHECKOUTREVISION._serialized_start=18967 - _GITPROGRESSCHECKOUTREVISION._serialized_end=19014 - _GITPROGRESSCHECKOUTREVISIONMSG._serialized_start=19016 - _GITPROGRESSCHECKOUTREVISIONMSG._serialized_end=19142 - _GITPROGRESSUPDATINGEXISTINGDEPENDENCY._serialized_start=19144 - _GITPROGRESSUPDATINGEXISTINGDEPENDENCY._serialized_end=19196 - _GITPROGRESSUPDATINGEXISTINGDEPENDENCYMSG._serialized_start=19199 - _GITPROGRESSUPDATINGEXISTINGDEPENDENCYMSG._serialized_end=19345 - _GITPROGRESSPULLINGNEWDEPENDENCY._serialized_start=19347 - _GITPROGRESSPULLINGNEWDEPENDENCY._serialized_end=19393 - _GITPROGRESSPULLINGNEWDEPENDENCYMSG._serialized_start=19396 - _GITPROGRESSPULLINGNEWDEPENDENCYMSG._serialized_end=19530 - _GITNOTHINGTODO._serialized_start=19532 - _GITNOTHINGTODO._serialized_end=19561 - _GITNOTHINGTODOMSG._serialized_start=19563 - _GITNOTHINGTODOMSG._serialized_end=19663 - _GITPROGRESSUPDATEDCHECKOUTRANGE._serialized_start=19665 - _GITPROGRESSUPDATEDCHECKOUTRANGE._serialized_end=19734 - _GITPROGRESSUPDATEDCHECKOUTRANGEMSG._serialized_start=19737 - _GITPROGRESSUPDATEDCHECKOUTRANGEMSG._serialized_end=19871 - _GITPROGRESSCHECKEDOUTAT._serialized_start=19873 - _GITPROGRESSCHECKEDOUTAT._serialized_end=19915 - _GITPROGRESSCHECKEDOUTATMSG._serialized_start=19917 - _GITPROGRESSCHECKEDOUTATMSG._serialized_end=20035 - _REGISTRYPROGRESSGETREQUEST._serialized_start=20037 - _REGISTRYPROGRESSGETREQUEST._serialized_end=20078 - _REGISTRYPROGRESSGETREQUESTMSG._serialized_start=20080 - _REGISTRYPROGRESSGETREQUESTMSG._serialized_end=20204 - _REGISTRYPROGRESSGETRESPONSE._serialized_start=20206 - _REGISTRYPROGRESSGETRESPONSE._serialized_end=20267 - _REGISTRYPROGRESSGETRESPONSEMSG._serialized_start=20269 - _REGISTRYPROGRESSGETRESPONSEMSG._serialized_end=20395 - _SELECTORREPORTINVALIDSELECTOR._serialized_start=20397 - _SELECTORREPORTINVALIDSELECTOR._serialized_end=20492 - _SELECTORREPORTINVALIDSELECTORMSG._serialized_start=20495 - _SELECTORREPORTINVALIDSELECTORMSG._serialized_end=20625 - _DEPSNOPACKAGESFOUND._serialized_start=20627 - _DEPSNOPACKAGESFOUND._serialized_end=20648 - _DEPSNOPACKAGESFOUNDMSG._serialized_start=20650 - _DEPSNOPACKAGESFOUNDMSG._serialized_end=20760 - _DEPSSTARTPACKAGEINSTALL._serialized_start=20762 - _DEPSSTARTPACKAGEINSTALL._serialized_end=20809 - _DEPSSTARTPACKAGEINSTALLMSG._serialized_start=20811 - _DEPSSTARTPACKAGEINSTALLMSG._serialized_end=20929 - _DEPSINSTALLINFO._serialized_start=20931 - _DEPSINSTALLINFO._serialized_end=20970 - _DEPSINSTALLINFOMSG._serialized_start=20972 - _DEPSINSTALLINFOMSG._serialized_end=21074 - _DEPSUPDATEAVAILABLE._serialized_start=21076 - _DEPSUPDATEAVAILABLE._serialized_end=21121 - _DEPSUPDATEAVAILABLEMSG._serialized_start=21123 - _DEPSUPDATEAVAILABLEMSG._serialized_end=21233 - _DEPSUPTODATE._serialized_start=21235 - _DEPSUPTODATE._serialized_end=21249 - _DEPSUPTODATEMSG._serialized_start=21251 - _DEPSUPTODATEMSG._serialized_end=21347 - _DEPSLISTSUBDIRECTORY._serialized_start=21349 - _DEPSLISTSUBDIRECTORY._serialized_end=21393 - _DEPSLISTSUBDIRECTORYMSG._serialized_start=21395 - _DEPSLISTSUBDIRECTORYMSG._serialized_end=21507 - _DEPSNOTIFYUPDATESAVAILABLE._serialized_start=21509 - _DEPSNOTIFYUPDATESAVAILABLE._serialized_end=21555 - _DEPSNOTIFYUPDATESAVAILABLEMSG._serialized_start=21557 - _DEPSNOTIFYUPDATESAVAILABLEMSG._serialized_end=21681 - _RETRYEXTERNALCALL._serialized_start=21683 - _RETRYEXTERNALCALL._serialized_end=21732 - _RETRYEXTERNALCALLMSG._serialized_start=21734 - _RETRYEXTERNALCALLMSG._serialized_end=21840 - _RECORDRETRYEXCEPTION._serialized_start=21842 - _RECORDRETRYEXCEPTION._serialized_end=21877 - _RECORDRETRYEXCEPTIONMSG._serialized_start=21879 - _RECORDRETRYEXCEPTIONMSG._serialized_end=21991 - _REGISTRYINDEXPROGRESSGETREQUEST._serialized_start=21993 - _REGISTRYINDEXPROGRESSGETREQUEST._serialized_end=22039 - _REGISTRYINDEXPROGRESSGETREQUESTMSG._serialized_start=22042 - _REGISTRYINDEXPROGRESSGETREQUESTMSG._serialized_end=22176 - _REGISTRYINDEXPROGRESSGETRESPONSE._serialized_start=22178 - _REGISTRYINDEXPROGRESSGETRESPONSE._serialized_end=22244 - _REGISTRYINDEXPROGRESSGETRESPONSEMSG._serialized_start=22247 - _REGISTRYINDEXPROGRESSGETRESPONSEMSG._serialized_end=22383 - _REGISTRYRESPONSEUNEXPECTEDTYPE._serialized_start=22385 - _REGISTRYRESPONSEUNEXPECTEDTYPE._serialized_end=22435 - _REGISTRYRESPONSEUNEXPECTEDTYPEMSG._serialized_start=22438 - _REGISTRYRESPONSEUNEXPECTEDTYPEMSG._serialized_end=22570 - _REGISTRYRESPONSEMISSINGTOPKEYS._serialized_start=22572 - _REGISTRYRESPONSEMISSINGTOPKEYS._serialized_end=22622 - _REGISTRYRESPONSEMISSINGTOPKEYSMSG._serialized_start=22625 - _REGISTRYRESPONSEMISSINGTOPKEYSMSG._serialized_end=22757 - _REGISTRYRESPONSEMISSINGNESTEDKEYS._serialized_start=22759 - _REGISTRYRESPONSEMISSINGNESTEDKEYS._serialized_end=22812 - _REGISTRYRESPONSEMISSINGNESTEDKEYSMSG._serialized_start=22815 - _REGISTRYRESPONSEMISSINGNESTEDKEYSMSG._serialized_end=22953 - _REGISTRYRESPONSEEXTRANESTEDKEYS._serialized_start=22955 - _REGISTRYRESPONSEEXTRANESTEDKEYS._serialized_end=23006 - _REGISTRYRESPONSEEXTRANESTEDKEYSMSG._serialized_start=23009 - _REGISTRYRESPONSEEXTRANESTEDKEYSMSG._serialized_end=23143 - _DEPSSETDOWNLOADDIRECTORY._serialized_start=23145 - _DEPSSETDOWNLOADDIRECTORY._serialized_end=23185 - _DEPSSETDOWNLOADDIRECTORYMSG._serialized_start=23187 - _DEPSSETDOWNLOADDIRECTORYMSG._serialized_end=23307 - _DEPSUNPINNED._serialized_start=23309 - _DEPSUNPINNED._serialized_end=23354 - _DEPSUNPINNEDMSG._serialized_start=23356 - _DEPSUNPINNEDMSG._serialized_end=23452 - _NONODESFORSELECTIONCRITERIA._serialized_start=23454 - _NONODESFORSELECTIONCRITERIA._serialized_end=23501 - _NONODESFORSELECTIONCRITERIAMSG._serialized_start=23503 - _NONODESFORSELECTIONCRITERIAMSG._serialized_end=23629 - _RUNNINGOPERATIONCAUGHTERROR._serialized_start=23631 - _RUNNINGOPERATIONCAUGHTERROR._serialized_end=23673 - _RUNNINGOPERATIONCAUGHTERRORMSG._serialized_start=23675 - _RUNNINGOPERATIONCAUGHTERRORMSG._serialized_end=23801 - _COMPILECOMPLETE._serialized_start=23803 - _COMPILECOMPLETE._serialized_end=23820 - _COMPILECOMPLETEMSG._serialized_start=23822 - _COMPILECOMPLETEMSG._serialized_end=23924 - _FRESHNESSCHECKCOMPLETE._serialized_start=23926 - _FRESHNESSCHECKCOMPLETE._serialized_end=23950 - _FRESHNESSCHECKCOMPLETEMSG._serialized_start=23952 - _FRESHNESSCHECKCOMPLETEMSG._serialized_end=24068 - _SEEDHEADER._serialized_start=24070 - _SEEDHEADER._serialized_end=24098 - _SEEDHEADERMSG._serialized_start=24100 - _SEEDHEADERMSG._serialized_end=24192 - _SQLRUNNEREXCEPTION._serialized_start=24194 - _SQLRUNNEREXCEPTION._serialized_end=24245 - _SQLRUNNEREXCEPTIONMSG._serialized_start=24247 - _SQLRUNNEREXCEPTIONMSG._serialized_end=24355 - _LOGTESTRESULT._serialized_start=24358 - _LOGTESTRESULT._serialized_end=24526 - _LOGTESTRESULTMSG._serialized_start=24528 - _LOGTESTRESULTMSG._serialized_end=24626 - _LOGSTARTLINE._serialized_start=24628 - _LOGSTARTLINE._serialized_end=24735 - _LOGSTARTLINEMSG._serialized_start=24737 - _LOGSTARTLINEMSG._serialized_end=24833 - _LOGMODELRESULT._serialized_start=24836 - _LOGMODELRESULT._serialized_end=24985 - _LOGMODELRESULTMSG._serialized_start=24987 - _LOGMODELRESULTMSG._serialized_end=25087 - _LOGSNAPSHOTRESULT._serialized_start=25090 - _LOGSNAPSHOTRESULT._serialized_end=25340 - _LOGSNAPSHOTRESULT_CFGENTRY._serialized_start=25298 - _LOGSNAPSHOTRESULT_CFGENTRY._serialized_end=25340 - _LOGSNAPSHOTRESULTMSG._serialized_start=25342 - _LOGSNAPSHOTRESULTMSG._serialized_end=25448 - _LOGSEEDRESULT._serialized_start=25451 - _LOGSEEDRESULT._serialized_end=25636 - _LOGSEEDRESULTMSG._serialized_start=25638 - _LOGSEEDRESULTMSG._serialized_end=25736 - _LOGFRESHNESSRESULT._serialized_start=25739 - _LOGFRESHNESSRESULT._serialized_end=25912 - _LOGFRESHNESSRESULTMSG._serialized_start=25914 - _LOGFRESHNESSRESULTMSG._serialized_end=26022 - _LOGCANCELLINE._serialized_start=26024 - _LOGCANCELLINE._serialized_end=26058 - _LOGCANCELLINEMSG._serialized_start=26060 - _LOGCANCELLINEMSG._serialized_end=26158 - _DEFAULTSELECTOR._serialized_start=26160 - _DEFAULTSELECTOR._serialized_end=26191 - _DEFAULTSELECTORMSG._serialized_start=26193 - _DEFAULTSELECTORMSG._serialized_end=26295 - _NODESTART._serialized_start=26297 - _NODESTART._serialized_end=26350 - _NODESTARTMSG._serialized_start=26352 - _NODESTARTMSG._serialized_end=26442 - _NODEFINISHED._serialized_start=26444 - _NODEFINISHED._serialized_end=26547 - _NODEFINISHEDMSG._serialized_start=26549 - _NODEFINISHEDMSG._serialized_end=26645 - _QUERYCANCELATIONUNSUPPORTED._serialized_start=26647 - _QUERYCANCELATIONUNSUPPORTED._serialized_end=26690 - _QUERYCANCELATIONUNSUPPORTEDMSG._serialized_start=26692 - _QUERYCANCELATIONUNSUPPORTEDMSG._serialized_end=26818 - _CONCURRENCYLINE._serialized_start=26820 - _CONCURRENCYLINE._serialized_end=26899 - _CONCURRENCYLINEMSG._serialized_start=26901 - _CONCURRENCYLINEMSG._serialized_end=27003 - _WRITINGINJECTEDSQLFORNODE._serialized_start=27005 - _WRITINGINJECTEDSQLFORNODE._serialized_end=27074 - _WRITINGINJECTEDSQLFORNODEMSG._serialized_start=27076 - _WRITINGINJECTEDSQLFORNODEMSG._serialized_end=27198 - _NODECOMPILING._serialized_start=27200 - _NODECOMPILING._serialized_end=27257 - _NODECOMPILINGMSG._serialized_start=27259 - _NODECOMPILINGMSG._serialized_end=27357 - _NODEEXECUTING._serialized_start=27359 - _NODEEXECUTING._serialized_end=27416 - _NODEEXECUTINGMSG._serialized_start=27418 - _NODEEXECUTINGMSG._serialized_end=27516 - _LOGHOOKSTARTLINE._serialized_start=27518 - _LOGHOOKSTARTLINE._serialized_end=27627 - _LOGHOOKSTARTLINEMSG._serialized_start=27629 - _LOGHOOKSTARTLINEMSG._serialized_end=27733 - _LOGHOOKENDLINE._serialized_start=27736 - _LOGHOOKENDLINE._serialized_end=27883 - _LOGHOOKENDLINEMSG._serialized_start=27885 - _LOGHOOKENDLINEMSG._serialized_end=27985 - _SKIPPINGDETAILS._serialized_start=27988 - _SKIPPINGDETAILS._serialized_end=28135 - _SKIPPINGDETAILSMSG._serialized_start=28137 - _SKIPPINGDETAILSMSG._serialized_end=28239 - _NOTHINGTODO._serialized_start=28241 - _NOTHINGTODO._serialized_end=28254 - _NOTHINGTODOMSG._serialized_start=28256 - _NOTHINGTODOMSG._serialized_end=28350 - _RUNNINGOPERATIONUNCAUGHTERROR._serialized_start=28352 - _RUNNINGOPERATIONUNCAUGHTERROR._serialized_end=28396 - _RUNNINGOPERATIONUNCAUGHTERRORMSG._serialized_start=28399 - _RUNNINGOPERATIONUNCAUGHTERRORMSG._serialized_end=28529 - _ENDRUNRESULT._serialized_start=28532 - _ENDRUNRESULT._serialized_end=28679 - _ENDRUNRESULTMSG._serialized_start=28681 - _ENDRUNRESULTMSG._serialized_end=28777 - _NONODESSELECTED._serialized_start=28779 - _NONODESSELECTED._serialized_end=28796 - _NONODESSELECTEDMSG._serialized_start=28798 - _NONODESSELECTEDMSG._serialized_end=28900 - _COMMANDCOMPLETED._serialized_start=28902 - _COMMANDCOMPLETED._serialized_end=29021 - _COMMANDCOMPLETEDMSG._serialized_start=29023 - _COMMANDCOMPLETEDMSG._serialized_end=29127 - _SHOWNODE._serialized_start=29129 - _SHOWNODE._serialized_end=29236 - _SHOWNODEMSG._serialized_start=29238 - _SHOWNODEMSG._serialized_end=29326 - _COMPILEDNODE._serialized_start=29328 - _COMPILEDNODE._serialized_end=29440 - _COMPILEDNODEMSG._serialized_start=29442 - _COMPILEDNODEMSG._serialized_end=29538 - _CATCHABLEEXCEPTIONONRUN._serialized_start=29540 - _CATCHABLEEXCEPTIONONRUN._serialized_end=29638 - _CATCHABLEEXCEPTIONONRUNMSG._serialized_start=29640 - _CATCHABLEEXCEPTIONONRUNMSG._serialized_end=29758 - _INTERNALERRORONRUN._serialized_start=29760 - _INTERNALERRORONRUN._serialized_end=29813 - _INTERNALERRORONRUNMSG._serialized_start=29815 - _INTERNALERRORONRUNMSG._serialized_end=29923 - _GENERICEXCEPTIONONRUN._serialized_start=29925 - _GENERICEXCEPTIONONRUN._serialized_end=30000 - _GENERICEXCEPTIONONRUNMSG._serialized_start=30002 - _GENERICEXCEPTIONONRUNMSG._serialized_end=30116 - _NODECONNECTIONRELEASEERROR._serialized_start=30118 - _NODECONNECTIONRELEASEERROR._serialized_end=30196 - _NODECONNECTIONRELEASEERRORMSG._serialized_start=30198 - _NODECONNECTIONRELEASEERRORMSG._serialized_end=30322 - _FOUNDSTATS._serialized_start=30324 - _FOUNDSTATS._serialized_end=30355 - _FOUNDSTATSMSG._serialized_start=30357 - _FOUNDSTATSMSG._serialized_end=30449 - _MAINKEYBOARDINTERRUPT._serialized_start=30451 - _MAINKEYBOARDINTERRUPT._serialized_end=30474 - _MAINKEYBOARDINTERRUPTMSG._serialized_start=30476 - _MAINKEYBOARDINTERRUPTMSG._serialized_end=30590 - _MAINENCOUNTEREDERROR._serialized_start=30592 - _MAINENCOUNTEREDERROR._serialized_end=30627 - _MAINENCOUNTEREDERRORMSG._serialized_start=30629 - _MAINENCOUNTEREDERRORMSG._serialized_end=30741 - _MAINSTACKTRACE._serialized_start=30743 - _MAINSTACKTRACE._serialized_end=30780 - _MAINSTACKTRACEMSG._serialized_start=30782 - _MAINSTACKTRACEMSG._serialized_end=30882 - _SYSTEMCOULDNOTWRITE._serialized_start=30884 - _SYSTEMCOULDNOTWRITE._serialized_end=30948 - _SYSTEMCOULDNOTWRITEMSG._serialized_start=30950 - _SYSTEMCOULDNOTWRITEMSG._serialized_end=31060 - _SYSTEMEXECUTINGCMD._serialized_start=31062 - _SYSTEMEXECUTINGCMD._serialized_end=31095 - _SYSTEMEXECUTINGCMDMSG._serialized_start=31097 - _SYSTEMEXECUTINGCMDMSG._serialized_end=31205 - _SYSTEMSTDOUT._serialized_start=31207 - _SYSTEMSTDOUT._serialized_end=31235 - _SYSTEMSTDOUTMSG._serialized_start=31237 - _SYSTEMSTDOUTMSG._serialized_end=31333 - _SYSTEMSTDERR._serialized_start=31335 - _SYSTEMSTDERR._serialized_end=31363 - _SYSTEMSTDERRMSG._serialized_start=31365 - _SYSTEMSTDERRMSG._serialized_end=31461 - _SYSTEMREPORTRETURNCODE._serialized_start=31463 - _SYSTEMREPORTRETURNCODE._serialized_end=31507 - _SYSTEMREPORTRETURNCODEMSG._serialized_start=31509 - _SYSTEMREPORTRETURNCODEMSG._serialized_end=31625 - _TIMINGINFOCOLLECTED._serialized_start=31627 - _TIMINGINFOCOLLECTED._serialized_end=31739 - _TIMINGINFOCOLLECTEDMSG._serialized_start=31741 - _TIMINGINFOCOLLECTEDMSG._serialized_end=31851 - _LOGDEBUGSTACKTRACE._serialized_start=31853 - _LOGDEBUGSTACKTRACE._serialized_end=31891 - _LOGDEBUGSTACKTRACEMSG._serialized_start=31893 - _LOGDEBUGSTACKTRACEMSG._serialized_end=32001 - _CHECKCLEANPATH._serialized_start=32003 - _CHECKCLEANPATH._serialized_end=32033 - _CHECKCLEANPATHMSG._serialized_start=32035 - _CHECKCLEANPATHMSG._serialized_end=32135 - _CONFIRMCLEANPATH._serialized_start=32137 - _CONFIRMCLEANPATH._serialized_end=32169 - _CONFIRMCLEANPATHMSG._serialized_start=32171 - _CONFIRMCLEANPATHMSG._serialized_end=32275 - _PROTECTEDCLEANPATH._serialized_start=32277 - _PROTECTEDCLEANPATH._serialized_end=32311 - _PROTECTEDCLEANPATHMSG._serialized_start=32313 - _PROTECTEDCLEANPATHMSG._serialized_end=32421 - _FINISHEDCLEANPATHS._serialized_start=32423 - _FINISHEDCLEANPATHS._serialized_end=32443 - _FINISHEDCLEANPATHSMSG._serialized_start=32445 - _FINISHEDCLEANPATHSMSG._serialized_end=32553 - _OPENCOMMAND._serialized_start=32555 - _OPENCOMMAND._serialized_end=32608 - _OPENCOMMANDMSG._serialized_start=32610 - _OPENCOMMANDMSG._serialized_end=32704 - _FORMATTING._serialized_start=32706 - _FORMATTING._serialized_end=32731 - _FORMATTINGMSG._serialized_start=32733 - _FORMATTINGMSG._serialized_end=32825 - _SERVINGDOCSPORT._serialized_start=32827 - _SERVINGDOCSPORT._serialized_end=32875 - _SERVINGDOCSPORTMSG._serialized_start=32877 - _SERVINGDOCSPORTMSG._serialized_end=32979 - _SERVINGDOCSACCESSINFO._serialized_start=32981 - _SERVINGDOCSACCESSINFO._serialized_end=33018 - _SERVINGDOCSACCESSINFOMSG._serialized_start=33020 - _SERVINGDOCSACCESSINFOMSG._serialized_end=33134 - _SERVINGDOCSEXITINFO._serialized_start=33136 - _SERVINGDOCSEXITINFO._serialized_end=33157 - _SERVINGDOCSEXITINFOMSG._serialized_start=33159 - _SERVINGDOCSEXITINFOMSG._serialized_end=33269 - _RUNRESULTWARNING._serialized_start=33271 - _RUNRESULTWARNING._serialized_end=33345 - _RUNRESULTWARNINGMSG._serialized_start=33347 - _RUNRESULTWARNINGMSG._serialized_end=33451 - _RUNRESULTFAILURE._serialized_start=33453 - _RUNRESULTFAILURE._serialized_end=33527 - _RUNRESULTFAILUREMSG._serialized_start=33529 - _RUNRESULTFAILUREMSG._serialized_end=33633 - _STATSLINE._serialized_start=33635 - _STATSLINE._serialized_end=33742 - _STATSLINE_STATSENTRY._serialized_start=33698 - _STATSLINE_STATSENTRY._serialized_end=33742 - _STATSLINEMSG._serialized_start=33744 - _STATSLINEMSG._serialized_end=33834 - _RUNRESULTERROR._serialized_start=33836 - _RUNRESULTERROR._serialized_end=33865 - _RUNRESULTERRORMSG._serialized_start=33867 - _RUNRESULTERRORMSG._serialized_end=33967 - _RUNRESULTERRORNOMESSAGE._serialized_start=33969 - _RUNRESULTERRORNOMESSAGE._serialized_end=34010 - _RUNRESULTERRORNOMESSAGEMSG._serialized_start=34012 - _RUNRESULTERRORNOMESSAGEMSG._serialized_end=34130 - _SQLCOMPILEDPATH._serialized_start=34132 - _SQLCOMPILEDPATH._serialized_end=34163 - _SQLCOMPILEDPATHMSG._serialized_start=34165 - _SQLCOMPILEDPATHMSG._serialized_end=34267 - _CHECKNODETESTFAILURE._serialized_start=34269 - _CHECKNODETESTFAILURE._serialized_end=34314 - _CHECKNODETESTFAILUREMSG._serialized_start=34316 - _CHECKNODETESTFAILUREMSG._serialized_end=34428 - _FIRSTRUNRESULTERROR._serialized_start=34430 - _FIRSTRUNRESULTERROR._serialized_end=34464 - _FIRSTRUNRESULTERRORMSG._serialized_start=34466 - _FIRSTRUNRESULTERRORMSG._serialized_end=34576 - _AFTERFIRSTRUNRESULTERROR._serialized_start=34578 - _AFTERFIRSTRUNRESULTERROR._serialized_end=34617 - _AFTERFIRSTRUNRESULTERRORMSG._serialized_start=34619 - _AFTERFIRSTRUNRESULTERRORMSG._serialized_end=34739 - _ENDOFRUNSUMMARY._serialized_start=34741 - _ENDOFRUNSUMMARY._serialized_end=34828 - _ENDOFRUNSUMMARYMSG._serialized_start=34830 - _ENDOFRUNSUMMARYMSG._serialized_end=34932 - _LOGSKIPBECAUSEERROR._serialized_start=34934 - _LOGSKIPBECAUSEERROR._serialized_end=35019 - _LOGSKIPBECAUSEERRORMSG._serialized_start=35021 - _LOGSKIPBECAUSEERRORMSG._serialized_end=35131 - _ENSUREGITINSTALLED._serialized_start=35133 - _ENSUREGITINSTALLED._serialized_end=35153 - _ENSUREGITINSTALLEDMSG._serialized_start=35155 - _ENSUREGITINSTALLEDMSG._serialized_end=35263 - _DEPSCREATINGLOCALSYMLINK._serialized_start=35265 - _DEPSCREATINGLOCALSYMLINK._serialized_end=35291 - _DEPSCREATINGLOCALSYMLINKMSG._serialized_start=35293 - _DEPSCREATINGLOCALSYMLINKMSG._serialized_end=35413 - _DEPSSYMLINKNOTAVAILABLE._serialized_start=35415 - _DEPSSYMLINKNOTAVAILABLE._serialized_end=35440 - _DEPSSYMLINKNOTAVAILABLEMSG._serialized_start=35442 - _DEPSSYMLINKNOTAVAILABLEMSG._serialized_end=35560 - _DISABLETRACKING._serialized_start=35562 - _DISABLETRACKING._serialized_end=35579 - _DISABLETRACKINGMSG._serialized_start=35581 - _DISABLETRACKINGMSG._serialized_end=35683 - _SENDINGEVENT._serialized_start=35685 - _SENDINGEVENT._serialized_end=35715 - _SENDINGEVENTMSG._serialized_start=35717 - _SENDINGEVENTMSG._serialized_end=35813 - _SENDEVENTFAILURE._serialized_start=35815 - _SENDEVENTFAILURE._serialized_end=35833 - _SENDEVENTFAILUREMSG._serialized_start=35835 - _SENDEVENTFAILUREMSG._serialized_end=35939 - _FLUSHEVENTS._serialized_start=35941 - _FLUSHEVENTS._serialized_end=35954 - _FLUSHEVENTSMSG._serialized_start=35956 - _FLUSHEVENTSMSG._serialized_end=36050 - _FLUSHEVENTSFAILURE._serialized_start=36052 - _FLUSHEVENTSFAILURE._serialized_end=36072 - _FLUSHEVENTSFAILUREMSG._serialized_start=36074 - _FLUSHEVENTSFAILUREMSG._serialized_end=36182 - _TRACKINGINITIALIZEFAILURE._serialized_start=36184 - _TRACKINGINITIALIZEFAILURE._serialized_end=36229 - _TRACKINGINITIALIZEFAILUREMSG._serialized_start=36231 - _TRACKINGINITIALIZEFAILUREMSG._serialized_end=36353 - _RUNRESULTWARNINGMESSAGE._serialized_start=36355 - _RUNRESULTWARNINGMESSAGE._serialized_end=36393 - _RUNRESULTWARNINGMESSAGEMSG._serialized_start=36395 - _RUNRESULTWARNINGMESSAGEMSG._serialized_end=36513 - _DEBUGCMDOUT._serialized_start=36515 - _DEBUGCMDOUT._serialized_end=36541 - _DEBUGCMDOUTMSG._serialized_start=36543 - _DEBUGCMDOUTMSG._serialized_end=36637 - _DEBUGCMDRESULT._serialized_start=36639 - _DEBUGCMDRESULT._serialized_end=36668 - _DEBUGCMDRESULTMSG._serialized_start=36670 - _DEBUGCMDRESULTMSG._serialized_end=36770 - _LISTCMDOUT._serialized_start=36772 - _LISTCMDOUT._serialized_end=36797 - _LISTCMDOUTMSG._serialized_start=36799 - _LISTCMDOUTMSG._serialized_end=36891 - _NOTE._serialized_start=36893 - _NOTE._serialized_end=36912 - _NOTEMSG._serialized_start=36914 - _NOTEMSG._serialized_end=36994 + _PUBLICATIONARTIFACTCHANGED._serialized_start=13501 + _PUBLICATIONARTIFACTCHANGED._serialized_end=13617 + _PUBLICATIONARTIFACTCHANGEDMSG._serialized_start=13619 + _PUBLICATIONARTIFACTCHANGEDMSG._serialized_end=13743 + _INVALIDVALUEFORFIELD._serialized_start=13745 + _INVALIDVALUEFORFIELD._serialized_end=13808 + _INVALIDVALUEFORFIELDMSG._serialized_start=13810 + _INVALIDVALUEFORFIELDMSG._serialized_end=13922 + _VALIDATIONWARNING._serialized_start=13924 + _VALIDATIONWARNING._serialized_end=14005 + _VALIDATIONWARNINGMSG._serialized_start=14007 + _VALIDATIONWARNINGMSG._serialized_end=14113 + _PARSEPERFINFOPATH._serialized_start=14115 + _PARSEPERFINFOPATH._serialized_end=14148 + _PARSEPERFINFOPATHMSG._serialized_start=14150 + _PARSEPERFINFOPATHMSG._serialized_end=14256 + _GENERICTESTFILEPARSE._serialized_start=14258 + _GENERICTESTFILEPARSE._serialized_end=14294 + _GENERICTESTFILEPARSEMSG._serialized_start=14296 + _GENERICTESTFILEPARSEMSG._serialized_end=14408 + _MACROFILEPARSE._serialized_start=14410 + _MACROFILEPARSE._serialized_end=14440 + _MACROFILEPARSEMSG._serialized_start=14442 + _MACROFILEPARSEMSG._serialized_end=14542 + _PARTIALPARSINGERRORPROCESSINGFILE._serialized_start=14544 + _PARTIALPARSINGERRORPROCESSINGFILE._serialized_end=14593 + _PARTIALPARSINGERRORPROCESSINGFILEMSG._serialized_start=14596 + _PARTIALPARSINGERRORPROCESSINGFILEMSG._serialized_end=14734 + _PARTIALPARSINGERROR._serialized_start=14737 + _PARTIALPARSINGERROR._serialized_end=14871 + _PARTIALPARSINGERROR_EXCINFOENTRY._serialized_start=14825 + _PARTIALPARSINGERROR_EXCINFOENTRY._serialized_end=14871 + _PARTIALPARSINGERRORMSG._serialized_start=14873 + _PARTIALPARSINGERRORMSG._serialized_end=14983 + _PARTIALPARSINGSKIPPARSING._serialized_start=14985 + _PARTIALPARSINGSKIPPARSING._serialized_end=15012 + _PARTIALPARSINGSKIPPARSINGMSG._serialized_start=15014 + _PARTIALPARSINGSKIPPARSINGMSG._serialized_end=15136 + _UNABLETOPARTIALPARSE._serialized_start=15138 + _UNABLETOPARTIALPARSE._serialized_end=15176 + _UNABLETOPARTIALPARSEMSG._serialized_start=15178 + _UNABLETOPARTIALPARSEMSG._serialized_end=15290 + _STATECHECKVARSHASH._serialized_start=15292 + _STATECHECKVARSHASH._serialized_end=15394 + _STATECHECKVARSHASHMSG._serialized_start=15396 + _STATECHECKVARSHASHMSG._serialized_end=15504 + _PARTIALPARSINGNOTENABLED._serialized_start=15506 + _PARTIALPARSINGNOTENABLED._serialized_end=15532 + _PARTIALPARSINGNOTENABLEDMSG._serialized_start=15534 + _PARTIALPARSINGNOTENABLEDMSG._serialized_end=15654 + _PARSEDFILELOADFAILED._serialized_start=15656 + _PARSEDFILELOADFAILED._serialized_end=15723 + _PARSEDFILELOADFAILEDMSG._serialized_start=15725 + _PARSEDFILELOADFAILEDMSG._serialized_end=15837 + _PARTIALPARSINGENABLED._serialized_start=15839 + _PARTIALPARSINGENABLED._serialized_end=15911 + _PARTIALPARSINGENABLEDMSG._serialized_start=15913 + _PARTIALPARSINGENABLEDMSG._serialized_end=16027 + _PARTIALPARSINGFILE._serialized_start=16029 + _PARTIALPARSINGFILE._serialized_end=16085 + _PARTIALPARSINGFILEMSG._serialized_start=16087 + _PARTIALPARSINGFILEMSG._serialized_end=16195 + _INVALIDDISABLEDTARGETINTESTNODE._serialized_start=16198 + _INVALIDDISABLEDTARGETINTESTNODE._serialized_end=16373 + _INVALIDDISABLEDTARGETINTESTNODEMSG._serialized_start=16376 + _INVALIDDISABLEDTARGETINTESTNODEMSG._serialized_end=16510 + _UNUSEDRESOURCECONFIGPATH._serialized_start=16512 + _UNUSEDRESOURCECONFIGPATH._serialized_end=16567 + _UNUSEDRESOURCECONFIGPATHMSG._serialized_start=16569 + _UNUSEDRESOURCECONFIGPATHMSG._serialized_end=16689 + _SEEDINCREASED._serialized_start=16691 + _SEEDINCREASED._serialized_end=16742 + _SEEDINCREASEDMSG._serialized_start=16744 + _SEEDINCREASEDMSG._serialized_end=16842 + _SEEDEXCEEDSLIMITSAMEPATH._serialized_start=16844 + _SEEDEXCEEDSLIMITSAMEPATH._serialized_end=16906 + _SEEDEXCEEDSLIMITSAMEPATHMSG._serialized_start=16908 + _SEEDEXCEEDSLIMITSAMEPATHMSG._serialized_end=17028 + _SEEDEXCEEDSLIMITANDPATHCHANGED._serialized_start=17030 + _SEEDEXCEEDSLIMITANDPATHCHANGED._serialized_end=17098 + _SEEDEXCEEDSLIMITANDPATHCHANGEDMSG._serialized_start=17101 + _SEEDEXCEEDSLIMITANDPATHCHANGEDMSG._serialized_end=17233 + _SEEDEXCEEDSLIMITCHECKSUMCHANGED._serialized_start=17235 + _SEEDEXCEEDSLIMITCHECKSUMCHANGED._serialized_end=17327 + _SEEDEXCEEDSLIMITCHECKSUMCHANGEDMSG._serialized_start=17330 + _SEEDEXCEEDSLIMITCHECKSUMCHANGEDMSG._serialized_end=17464 + _UNUSEDTABLES._serialized_start=17466 + _UNUSEDTABLES._serialized_end=17503 + _UNUSEDTABLESMSG._serialized_start=17505 + _UNUSEDTABLESMSG._serialized_end=17601 + _WRONGRESOURCESCHEMAFILE._serialized_start=17604 + _WRONGRESOURCESCHEMAFILE._serialized_end=17739 + _WRONGRESOURCESCHEMAFILEMSG._serialized_start=17741 + _WRONGRESOURCESCHEMAFILEMSG._serialized_end=17859 + _NONODEFORYAMLKEY._serialized_start=17861 + _NONODEFORYAMLKEY._serialized_end=17936 + _NONODEFORYAMLKEYMSG._serialized_start=17938 + _NONODEFORYAMLKEYMSG._serialized_end=18042 + _MACRONOTFOUNDFORPATCH._serialized_start=18044 + _MACRONOTFOUNDFORPATCH._serialized_end=18087 + _MACRONOTFOUNDFORPATCHMSG._serialized_start=18089 + _MACRONOTFOUNDFORPATCHMSG._serialized_end=18203 + _NODENOTFOUNDORDISABLED._serialized_start=18206 + _NODENOTFOUNDORDISABLED._serialized_end=18390 + _NODENOTFOUNDORDISABLEDMSG._serialized_start=18392 + _NODENOTFOUNDORDISABLEDMSG._serialized_end=18508 + _JINJALOGWARNING._serialized_start=18510 + _JINJALOGWARNING._serialized_end=18582 + _JINJALOGWARNINGMSG._serialized_start=18584 + _JINJALOGWARNINGMSG._serialized_end=18686 + _JINJALOGINFO._serialized_start=18688 + _JINJALOGINFO._serialized_end=18757 + _JINJALOGINFOMSG._serialized_start=18759 + _JINJALOGINFOMSG._serialized_end=18855 + _JINJALOGDEBUG._serialized_start=18857 + _JINJALOGDEBUG._serialized_end=18927 + _JINJALOGDEBUGMSG._serialized_start=18929 + _JINJALOGDEBUGMSG._serialized_end=19027 + _GITSPARSECHECKOUTSUBDIRECTORY._serialized_start=19029 + _GITSPARSECHECKOUTSUBDIRECTORY._serialized_end=19076 + _GITSPARSECHECKOUTSUBDIRECTORYMSG._serialized_start=19079 + _GITSPARSECHECKOUTSUBDIRECTORYMSG._serialized_end=19209 + _GITPROGRESSCHECKOUTREVISION._serialized_start=19211 + _GITPROGRESSCHECKOUTREVISION._serialized_end=19258 + _GITPROGRESSCHECKOUTREVISIONMSG._serialized_start=19260 + _GITPROGRESSCHECKOUTREVISIONMSG._serialized_end=19386 + _GITPROGRESSUPDATINGEXISTINGDEPENDENCY._serialized_start=19388 + _GITPROGRESSUPDATINGEXISTINGDEPENDENCY._serialized_end=19440 + _GITPROGRESSUPDATINGEXISTINGDEPENDENCYMSG._serialized_start=19443 + _GITPROGRESSUPDATINGEXISTINGDEPENDENCYMSG._serialized_end=19589 + _GITPROGRESSPULLINGNEWDEPENDENCY._serialized_start=19591 + _GITPROGRESSPULLINGNEWDEPENDENCY._serialized_end=19637 + _GITPROGRESSPULLINGNEWDEPENDENCYMSG._serialized_start=19640 + _GITPROGRESSPULLINGNEWDEPENDENCYMSG._serialized_end=19774 + _GITNOTHINGTODO._serialized_start=19776 + _GITNOTHINGTODO._serialized_end=19805 + _GITNOTHINGTODOMSG._serialized_start=19807 + _GITNOTHINGTODOMSG._serialized_end=19907 + _GITPROGRESSUPDATEDCHECKOUTRANGE._serialized_start=19909 + _GITPROGRESSUPDATEDCHECKOUTRANGE._serialized_end=19978 + _GITPROGRESSUPDATEDCHECKOUTRANGEMSG._serialized_start=19981 + _GITPROGRESSUPDATEDCHECKOUTRANGEMSG._serialized_end=20115 + _GITPROGRESSCHECKEDOUTAT._serialized_start=20117 + _GITPROGRESSCHECKEDOUTAT._serialized_end=20159 + _GITPROGRESSCHECKEDOUTATMSG._serialized_start=20161 + _GITPROGRESSCHECKEDOUTATMSG._serialized_end=20279 + _REGISTRYPROGRESSGETREQUEST._serialized_start=20281 + _REGISTRYPROGRESSGETREQUEST._serialized_end=20322 + _REGISTRYPROGRESSGETREQUESTMSG._serialized_start=20324 + _REGISTRYPROGRESSGETREQUESTMSG._serialized_end=20448 + _REGISTRYPROGRESSGETRESPONSE._serialized_start=20450 + _REGISTRYPROGRESSGETRESPONSE._serialized_end=20511 + _REGISTRYPROGRESSGETRESPONSEMSG._serialized_start=20513 + _REGISTRYPROGRESSGETRESPONSEMSG._serialized_end=20639 + _SELECTORREPORTINVALIDSELECTOR._serialized_start=20641 + _SELECTORREPORTINVALIDSELECTOR._serialized_end=20736 + _SELECTORREPORTINVALIDSELECTORMSG._serialized_start=20739 + _SELECTORREPORTINVALIDSELECTORMSG._serialized_end=20869 + _DEPSNOPACKAGESFOUND._serialized_start=20871 + _DEPSNOPACKAGESFOUND._serialized_end=20892 + _DEPSNOPACKAGESFOUNDMSG._serialized_start=20894 + _DEPSNOPACKAGESFOUNDMSG._serialized_end=21004 + _DEPSSTARTPACKAGEINSTALL._serialized_start=21006 + _DEPSSTARTPACKAGEINSTALL._serialized_end=21053 + _DEPSSTARTPACKAGEINSTALLMSG._serialized_start=21055 + _DEPSSTARTPACKAGEINSTALLMSG._serialized_end=21173 + _DEPSINSTALLINFO._serialized_start=21175 + _DEPSINSTALLINFO._serialized_end=21214 + _DEPSINSTALLINFOMSG._serialized_start=21216 + _DEPSINSTALLINFOMSG._serialized_end=21318 + _DEPSUPDATEAVAILABLE._serialized_start=21320 + _DEPSUPDATEAVAILABLE._serialized_end=21365 + _DEPSUPDATEAVAILABLEMSG._serialized_start=21367 + _DEPSUPDATEAVAILABLEMSG._serialized_end=21477 + _DEPSUPTODATE._serialized_start=21479 + _DEPSUPTODATE._serialized_end=21493 + _DEPSUPTODATEMSG._serialized_start=21495 + _DEPSUPTODATEMSG._serialized_end=21591 + _DEPSLISTSUBDIRECTORY._serialized_start=21593 + _DEPSLISTSUBDIRECTORY._serialized_end=21637 + _DEPSLISTSUBDIRECTORYMSG._serialized_start=21639 + _DEPSLISTSUBDIRECTORYMSG._serialized_end=21751 + _DEPSNOTIFYUPDATESAVAILABLE._serialized_start=21753 + _DEPSNOTIFYUPDATESAVAILABLE._serialized_end=21799 + _DEPSNOTIFYUPDATESAVAILABLEMSG._serialized_start=21801 + _DEPSNOTIFYUPDATESAVAILABLEMSG._serialized_end=21925 + _RETRYEXTERNALCALL._serialized_start=21927 + _RETRYEXTERNALCALL._serialized_end=21976 + _RETRYEXTERNALCALLMSG._serialized_start=21978 + _RETRYEXTERNALCALLMSG._serialized_end=22084 + _RECORDRETRYEXCEPTION._serialized_start=22086 + _RECORDRETRYEXCEPTION._serialized_end=22121 + _RECORDRETRYEXCEPTIONMSG._serialized_start=22123 + _RECORDRETRYEXCEPTIONMSG._serialized_end=22235 + _REGISTRYINDEXPROGRESSGETREQUEST._serialized_start=22237 + _REGISTRYINDEXPROGRESSGETREQUEST._serialized_end=22283 + _REGISTRYINDEXPROGRESSGETREQUESTMSG._serialized_start=22286 + _REGISTRYINDEXPROGRESSGETREQUESTMSG._serialized_end=22420 + _REGISTRYINDEXPROGRESSGETRESPONSE._serialized_start=22422 + _REGISTRYINDEXPROGRESSGETRESPONSE._serialized_end=22488 + _REGISTRYINDEXPROGRESSGETRESPONSEMSG._serialized_start=22491 + _REGISTRYINDEXPROGRESSGETRESPONSEMSG._serialized_end=22627 + _REGISTRYRESPONSEUNEXPECTEDTYPE._serialized_start=22629 + _REGISTRYRESPONSEUNEXPECTEDTYPE._serialized_end=22679 + _REGISTRYRESPONSEUNEXPECTEDTYPEMSG._serialized_start=22682 + _REGISTRYRESPONSEUNEXPECTEDTYPEMSG._serialized_end=22814 + _REGISTRYRESPONSEMISSINGTOPKEYS._serialized_start=22816 + _REGISTRYRESPONSEMISSINGTOPKEYS._serialized_end=22866 + _REGISTRYRESPONSEMISSINGTOPKEYSMSG._serialized_start=22869 + _REGISTRYRESPONSEMISSINGTOPKEYSMSG._serialized_end=23001 + _REGISTRYRESPONSEMISSINGNESTEDKEYS._serialized_start=23003 + _REGISTRYRESPONSEMISSINGNESTEDKEYS._serialized_end=23056 + _REGISTRYRESPONSEMISSINGNESTEDKEYSMSG._serialized_start=23059 + _REGISTRYRESPONSEMISSINGNESTEDKEYSMSG._serialized_end=23197 + _REGISTRYRESPONSEEXTRANESTEDKEYS._serialized_start=23199 + _REGISTRYRESPONSEEXTRANESTEDKEYS._serialized_end=23250 + _REGISTRYRESPONSEEXTRANESTEDKEYSMSG._serialized_start=23253 + _REGISTRYRESPONSEEXTRANESTEDKEYSMSG._serialized_end=23387 + _DEPSSETDOWNLOADDIRECTORY._serialized_start=23389 + _DEPSSETDOWNLOADDIRECTORY._serialized_end=23429 + _DEPSSETDOWNLOADDIRECTORYMSG._serialized_start=23431 + _DEPSSETDOWNLOADDIRECTORYMSG._serialized_end=23551 + _DEPSUNPINNED._serialized_start=23553 + _DEPSUNPINNED._serialized_end=23598 + _DEPSUNPINNEDMSG._serialized_start=23600 + _DEPSUNPINNEDMSG._serialized_end=23696 + _NONODESFORSELECTIONCRITERIA._serialized_start=23698 + _NONODESFORSELECTIONCRITERIA._serialized_end=23745 + _NONODESFORSELECTIONCRITERIAMSG._serialized_start=23747 + _NONODESFORSELECTIONCRITERIAMSG._serialized_end=23873 + _RUNNINGOPERATIONCAUGHTERROR._serialized_start=23875 + _RUNNINGOPERATIONCAUGHTERROR._serialized_end=23917 + _RUNNINGOPERATIONCAUGHTERRORMSG._serialized_start=23919 + _RUNNINGOPERATIONCAUGHTERRORMSG._serialized_end=24045 + _COMPILECOMPLETE._serialized_start=24047 + _COMPILECOMPLETE._serialized_end=24064 + _COMPILECOMPLETEMSG._serialized_start=24066 + _COMPILECOMPLETEMSG._serialized_end=24168 + _FRESHNESSCHECKCOMPLETE._serialized_start=24170 + _FRESHNESSCHECKCOMPLETE._serialized_end=24194 + _FRESHNESSCHECKCOMPLETEMSG._serialized_start=24196 + _FRESHNESSCHECKCOMPLETEMSG._serialized_end=24312 + _SEEDHEADER._serialized_start=24314 + _SEEDHEADER._serialized_end=24342 + _SEEDHEADERMSG._serialized_start=24344 + _SEEDHEADERMSG._serialized_end=24436 + _SQLRUNNEREXCEPTION._serialized_start=24438 + _SQLRUNNEREXCEPTION._serialized_end=24489 + _SQLRUNNEREXCEPTIONMSG._serialized_start=24491 + _SQLRUNNEREXCEPTIONMSG._serialized_end=24599 + _LOGTESTRESULT._serialized_start=24602 + _LOGTESTRESULT._serialized_end=24770 + _LOGTESTRESULTMSG._serialized_start=24772 + _LOGTESTRESULTMSG._serialized_end=24870 + _LOGSTARTLINE._serialized_start=24872 + _LOGSTARTLINE._serialized_end=24979 + _LOGSTARTLINEMSG._serialized_start=24981 + _LOGSTARTLINEMSG._serialized_end=25077 + _LOGMODELRESULT._serialized_start=25080 + _LOGMODELRESULT._serialized_end=25229 + _LOGMODELRESULTMSG._serialized_start=25231 + _LOGMODELRESULTMSG._serialized_end=25331 + _LOGSNAPSHOTRESULT._serialized_start=25334 + _LOGSNAPSHOTRESULT._serialized_end=25584 + _LOGSNAPSHOTRESULT_CFGENTRY._serialized_start=25542 + _LOGSNAPSHOTRESULT_CFGENTRY._serialized_end=25584 + _LOGSNAPSHOTRESULTMSG._serialized_start=25586 + _LOGSNAPSHOTRESULTMSG._serialized_end=25692 + _LOGSEEDRESULT._serialized_start=25695 + _LOGSEEDRESULT._serialized_end=25880 + _LOGSEEDRESULTMSG._serialized_start=25882 + _LOGSEEDRESULTMSG._serialized_end=25980 + _LOGFRESHNESSRESULT._serialized_start=25983 + _LOGFRESHNESSRESULT._serialized_end=26156 + _LOGFRESHNESSRESULTMSG._serialized_start=26158 + _LOGFRESHNESSRESULTMSG._serialized_end=26266 + _LOGCANCELLINE._serialized_start=26268 + _LOGCANCELLINE._serialized_end=26302 + _LOGCANCELLINEMSG._serialized_start=26304 + _LOGCANCELLINEMSG._serialized_end=26402 + _DEFAULTSELECTOR._serialized_start=26404 + _DEFAULTSELECTOR._serialized_end=26435 + _DEFAULTSELECTORMSG._serialized_start=26437 + _DEFAULTSELECTORMSG._serialized_end=26539 + _NODESTART._serialized_start=26541 + _NODESTART._serialized_end=26594 + _NODESTARTMSG._serialized_start=26596 + _NODESTARTMSG._serialized_end=26686 + _NODEFINISHED._serialized_start=26688 + _NODEFINISHED._serialized_end=26791 + _NODEFINISHEDMSG._serialized_start=26793 + _NODEFINISHEDMSG._serialized_end=26889 + _QUERYCANCELATIONUNSUPPORTED._serialized_start=26891 + _QUERYCANCELATIONUNSUPPORTED._serialized_end=26934 + _QUERYCANCELATIONUNSUPPORTEDMSG._serialized_start=26936 + _QUERYCANCELATIONUNSUPPORTEDMSG._serialized_end=27062 + _CONCURRENCYLINE._serialized_start=27064 + _CONCURRENCYLINE._serialized_end=27143 + _CONCURRENCYLINEMSG._serialized_start=27145 + _CONCURRENCYLINEMSG._serialized_end=27247 + _WRITINGINJECTEDSQLFORNODE._serialized_start=27249 + _WRITINGINJECTEDSQLFORNODE._serialized_end=27318 + _WRITINGINJECTEDSQLFORNODEMSG._serialized_start=27320 + _WRITINGINJECTEDSQLFORNODEMSG._serialized_end=27442 + _NODECOMPILING._serialized_start=27444 + _NODECOMPILING._serialized_end=27501 + _NODECOMPILINGMSG._serialized_start=27503 + _NODECOMPILINGMSG._serialized_end=27601 + _NODEEXECUTING._serialized_start=27603 + _NODEEXECUTING._serialized_end=27660 + _NODEEXECUTINGMSG._serialized_start=27662 + _NODEEXECUTINGMSG._serialized_end=27760 + _LOGHOOKSTARTLINE._serialized_start=27762 + _LOGHOOKSTARTLINE._serialized_end=27871 + _LOGHOOKSTARTLINEMSG._serialized_start=27873 + _LOGHOOKSTARTLINEMSG._serialized_end=27977 + _LOGHOOKENDLINE._serialized_start=27980 + _LOGHOOKENDLINE._serialized_end=28127 + _LOGHOOKENDLINEMSG._serialized_start=28129 + _LOGHOOKENDLINEMSG._serialized_end=28229 + _SKIPPINGDETAILS._serialized_start=28232 + _SKIPPINGDETAILS._serialized_end=28379 + _SKIPPINGDETAILSMSG._serialized_start=28381 + _SKIPPINGDETAILSMSG._serialized_end=28483 + _NOTHINGTODO._serialized_start=28485 + _NOTHINGTODO._serialized_end=28498 + _NOTHINGTODOMSG._serialized_start=28500 + _NOTHINGTODOMSG._serialized_end=28594 + _RUNNINGOPERATIONUNCAUGHTERROR._serialized_start=28596 + _RUNNINGOPERATIONUNCAUGHTERROR._serialized_end=28640 + _RUNNINGOPERATIONUNCAUGHTERRORMSG._serialized_start=28643 + _RUNNINGOPERATIONUNCAUGHTERRORMSG._serialized_end=28773 + _ENDRUNRESULT._serialized_start=28776 + _ENDRUNRESULT._serialized_end=28923 + _ENDRUNRESULTMSG._serialized_start=28925 + _ENDRUNRESULTMSG._serialized_end=29021 + _NONODESSELECTED._serialized_start=29023 + _NONODESSELECTED._serialized_end=29040 + _NONODESSELECTEDMSG._serialized_start=29042 + _NONODESSELECTEDMSG._serialized_end=29144 + _COMMANDCOMPLETED._serialized_start=29146 + _COMMANDCOMPLETED._serialized_end=29265 + _COMMANDCOMPLETEDMSG._serialized_start=29267 + _COMMANDCOMPLETEDMSG._serialized_end=29371 + _SHOWNODE._serialized_start=29373 + _SHOWNODE._serialized_end=29480 + _SHOWNODEMSG._serialized_start=29482 + _SHOWNODEMSG._serialized_end=29570 + _COMPILEDNODE._serialized_start=29572 + _COMPILEDNODE._serialized_end=29684 + _COMPILEDNODEMSG._serialized_start=29686 + _COMPILEDNODEMSG._serialized_end=29782 + _CATCHABLEEXCEPTIONONRUN._serialized_start=29784 + _CATCHABLEEXCEPTIONONRUN._serialized_end=29882 + _CATCHABLEEXCEPTIONONRUNMSG._serialized_start=29884 + _CATCHABLEEXCEPTIONONRUNMSG._serialized_end=30002 + _INTERNALERRORONRUN._serialized_start=30004 + _INTERNALERRORONRUN._serialized_end=30057 + _INTERNALERRORONRUNMSG._serialized_start=30059 + _INTERNALERRORONRUNMSG._serialized_end=30167 + _GENERICEXCEPTIONONRUN._serialized_start=30169 + _GENERICEXCEPTIONONRUN._serialized_end=30244 + _GENERICEXCEPTIONONRUNMSG._serialized_start=30246 + _GENERICEXCEPTIONONRUNMSG._serialized_end=30360 + _NODECONNECTIONRELEASEERROR._serialized_start=30362 + _NODECONNECTIONRELEASEERROR._serialized_end=30440 + _NODECONNECTIONRELEASEERRORMSG._serialized_start=30442 + _NODECONNECTIONRELEASEERRORMSG._serialized_end=30566 + _FOUNDSTATS._serialized_start=30568 + _FOUNDSTATS._serialized_end=30599 + _FOUNDSTATSMSG._serialized_start=30601 + _FOUNDSTATSMSG._serialized_end=30693 + _MAINKEYBOARDINTERRUPT._serialized_start=30695 + _MAINKEYBOARDINTERRUPT._serialized_end=30718 + _MAINKEYBOARDINTERRUPTMSG._serialized_start=30720 + _MAINKEYBOARDINTERRUPTMSG._serialized_end=30834 + _MAINENCOUNTEREDERROR._serialized_start=30836 + _MAINENCOUNTEREDERROR._serialized_end=30871 + _MAINENCOUNTEREDERRORMSG._serialized_start=30873 + _MAINENCOUNTEREDERRORMSG._serialized_end=30985 + _MAINSTACKTRACE._serialized_start=30987 + _MAINSTACKTRACE._serialized_end=31024 + _MAINSTACKTRACEMSG._serialized_start=31026 + _MAINSTACKTRACEMSG._serialized_end=31126 + _SYSTEMCOULDNOTWRITE._serialized_start=31128 + _SYSTEMCOULDNOTWRITE._serialized_end=31192 + _SYSTEMCOULDNOTWRITEMSG._serialized_start=31194 + _SYSTEMCOULDNOTWRITEMSG._serialized_end=31304 + _SYSTEMEXECUTINGCMD._serialized_start=31306 + _SYSTEMEXECUTINGCMD._serialized_end=31339 + _SYSTEMEXECUTINGCMDMSG._serialized_start=31341 + _SYSTEMEXECUTINGCMDMSG._serialized_end=31449 + _SYSTEMSTDOUT._serialized_start=31451 + _SYSTEMSTDOUT._serialized_end=31479 + _SYSTEMSTDOUTMSG._serialized_start=31481 + _SYSTEMSTDOUTMSG._serialized_end=31577 + _SYSTEMSTDERR._serialized_start=31579 + _SYSTEMSTDERR._serialized_end=31607 + _SYSTEMSTDERRMSG._serialized_start=31609 + _SYSTEMSTDERRMSG._serialized_end=31705 + _SYSTEMREPORTRETURNCODE._serialized_start=31707 + _SYSTEMREPORTRETURNCODE._serialized_end=31751 + _SYSTEMREPORTRETURNCODEMSG._serialized_start=31753 + _SYSTEMREPORTRETURNCODEMSG._serialized_end=31869 + _TIMINGINFOCOLLECTED._serialized_start=31871 + _TIMINGINFOCOLLECTED._serialized_end=31983 + _TIMINGINFOCOLLECTEDMSG._serialized_start=31985 + _TIMINGINFOCOLLECTEDMSG._serialized_end=32095 + _LOGDEBUGSTACKTRACE._serialized_start=32097 + _LOGDEBUGSTACKTRACE._serialized_end=32135 + _LOGDEBUGSTACKTRACEMSG._serialized_start=32137 + _LOGDEBUGSTACKTRACEMSG._serialized_end=32245 + _CHECKCLEANPATH._serialized_start=32247 + _CHECKCLEANPATH._serialized_end=32277 + _CHECKCLEANPATHMSG._serialized_start=32279 + _CHECKCLEANPATHMSG._serialized_end=32379 + _CONFIRMCLEANPATH._serialized_start=32381 + _CONFIRMCLEANPATH._serialized_end=32413 + _CONFIRMCLEANPATHMSG._serialized_start=32415 + _CONFIRMCLEANPATHMSG._serialized_end=32519 + _PROTECTEDCLEANPATH._serialized_start=32521 + _PROTECTEDCLEANPATH._serialized_end=32555 + _PROTECTEDCLEANPATHMSG._serialized_start=32557 + _PROTECTEDCLEANPATHMSG._serialized_end=32665 + _FINISHEDCLEANPATHS._serialized_start=32667 + _FINISHEDCLEANPATHS._serialized_end=32687 + _FINISHEDCLEANPATHSMSG._serialized_start=32689 + _FINISHEDCLEANPATHSMSG._serialized_end=32797 + _OPENCOMMAND._serialized_start=32799 + _OPENCOMMAND._serialized_end=32852 + _OPENCOMMANDMSG._serialized_start=32854 + _OPENCOMMANDMSG._serialized_end=32948 + _FORMATTING._serialized_start=32950 + _FORMATTING._serialized_end=32975 + _FORMATTINGMSG._serialized_start=32977 + _FORMATTINGMSG._serialized_end=33069 + _SERVINGDOCSPORT._serialized_start=33071 + _SERVINGDOCSPORT._serialized_end=33119 + _SERVINGDOCSPORTMSG._serialized_start=33121 + _SERVINGDOCSPORTMSG._serialized_end=33223 + _SERVINGDOCSACCESSINFO._serialized_start=33225 + _SERVINGDOCSACCESSINFO._serialized_end=33262 + _SERVINGDOCSACCESSINFOMSG._serialized_start=33264 + _SERVINGDOCSACCESSINFOMSG._serialized_end=33378 + _SERVINGDOCSEXITINFO._serialized_start=33380 + _SERVINGDOCSEXITINFO._serialized_end=33401 + _SERVINGDOCSEXITINFOMSG._serialized_start=33403 + _SERVINGDOCSEXITINFOMSG._serialized_end=33513 + _RUNRESULTWARNING._serialized_start=33515 + _RUNRESULTWARNING._serialized_end=33589 + _RUNRESULTWARNINGMSG._serialized_start=33591 + _RUNRESULTWARNINGMSG._serialized_end=33695 + _RUNRESULTFAILURE._serialized_start=33697 + _RUNRESULTFAILURE._serialized_end=33771 + _RUNRESULTFAILUREMSG._serialized_start=33773 + _RUNRESULTFAILUREMSG._serialized_end=33877 + _STATSLINE._serialized_start=33879 + _STATSLINE._serialized_end=33986 + _STATSLINE_STATSENTRY._serialized_start=33942 + _STATSLINE_STATSENTRY._serialized_end=33986 + _STATSLINEMSG._serialized_start=33988 + _STATSLINEMSG._serialized_end=34078 + _RUNRESULTERROR._serialized_start=34080 + _RUNRESULTERROR._serialized_end=34109 + _RUNRESULTERRORMSG._serialized_start=34111 + _RUNRESULTERRORMSG._serialized_end=34211 + _RUNRESULTERRORNOMESSAGE._serialized_start=34213 + _RUNRESULTERRORNOMESSAGE._serialized_end=34254 + _RUNRESULTERRORNOMESSAGEMSG._serialized_start=34256 + _RUNRESULTERRORNOMESSAGEMSG._serialized_end=34374 + _SQLCOMPILEDPATH._serialized_start=34376 + _SQLCOMPILEDPATH._serialized_end=34407 + _SQLCOMPILEDPATHMSG._serialized_start=34409 + _SQLCOMPILEDPATHMSG._serialized_end=34511 + _CHECKNODETESTFAILURE._serialized_start=34513 + _CHECKNODETESTFAILURE._serialized_end=34558 + _CHECKNODETESTFAILUREMSG._serialized_start=34560 + _CHECKNODETESTFAILUREMSG._serialized_end=34672 + _FIRSTRUNRESULTERROR._serialized_start=34674 + _FIRSTRUNRESULTERROR._serialized_end=34708 + _FIRSTRUNRESULTERRORMSG._serialized_start=34710 + _FIRSTRUNRESULTERRORMSG._serialized_end=34820 + _AFTERFIRSTRUNRESULTERROR._serialized_start=34822 + _AFTERFIRSTRUNRESULTERROR._serialized_end=34861 + _AFTERFIRSTRUNRESULTERRORMSG._serialized_start=34863 + _AFTERFIRSTRUNRESULTERRORMSG._serialized_end=34983 + _ENDOFRUNSUMMARY._serialized_start=34985 + _ENDOFRUNSUMMARY._serialized_end=35072 + _ENDOFRUNSUMMARYMSG._serialized_start=35074 + _ENDOFRUNSUMMARYMSG._serialized_end=35176 + _LOGSKIPBECAUSEERROR._serialized_start=35178 + _LOGSKIPBECAUSEERROR._serialized_end=35263 + _LOGSKIPBECAUSEERRORMSG._serialized_start=35265 + _LOGSKIPBECAUSEERRORMSG._serialized_end=35375 + _ENSUREGITINSTALLED._serialized_start=35377 + _ENSUREGITINSTALLED._serialized_end=35397 + _ENSUREGITINSTALLEDMSG._serialized_start=35399 + _ENSUREGITINSTALLEDMSG._serialized_end=35507 + _DEPSCREATINGLOCALSYMLINK._serialized_start=35509 + _DEPSCREATINGLOCALSYMLINK._serialized_end=35535 + _DEPSCREATINGLOCALSYMLINKMSG._serialized_start=35537 + _DEPSCREATINGLOCALSYMLINKMSG._serialized_end=35657 + _DEPSSYMLINKNOTAVAILABLE._serialized_start=35659 + _DEPSSYMLINKNOTAVAILABLE._serialized_end=35684 + _DEPSSYMLINKNOTAVAILABLEMSG._serialized_start=35686 + _DEPSSYMLINKNOTAVAILABLEMSG._serialized_end=35804 + _DISABLETRACKING._serialized_start=35806 + _DISABLETRACKING._serialized_end=35823 + _DISABLETRACKINGMSG._serialized_start=35825 + _DISABLETRACKINGMSG._serialized_end=35927 + _SENDINGEVENT._serialized_start=35929 + _SENDINGEVENT._serialized_end=35959 + _SENDINGEVENTMSG._serialized_start=35961 + _SENDINGEVENTMSG._serialized_end=36057 + _SENDEVENTFAILURE._serialized_start=36059 + _SENDEVENTFAILURE._serialized_end=36077 + _SENDEVENTFAILUREMSG._serialized_start=36079 + _SENDEVENTFAILUREMSG._serialized_end=36183 + _FLUSHEVENTS._serialized_start=36185 + _FLUSHEVENTS._serialized_end=36198 + _FLUSHEVENTSMSG._serialized_start=36200 + _FLUSHEVENTSMSG._serialized_end=36294 + _FLUSHEVENTSFAILURE._serialized_start=36296 + _FLUSHEVENTSFAILURE._serialized_end=36316 + _FLUSHEVENTSFAILUREMSG._serialized_start=36318 + _FLUSHEVENTSFAILUREMSG._serialized_end=36426 + _TRACKINGINITIALIZEFAILURE._serialized_start=36428 + _TRACKINGINITIALIZEFAILURE._serialized_end=36473 + _TRACKINGINITIALIZEFAILUREMSG._serialized_start=36475 + _TRACKINGINITIALIZEFAILUREMSG._serialized_end=36597 + _RUNRESULTWARNINGMESSAGE._serialized_start=36599 + _RUNRESULTWARNINGMESSAGE._serialized_end=36637 + _RUNRESULTWARNINGMESSAGEMSG._serialized_start=36639 + _RUNRESULTWARNINGMESSAGEMSG._serialized_end=36757 + _DEBUGCMDOUT._serialized_start=36759 + _DEBUGCMDOUT._serialized_end=36785 + _DEBUGCMDOUTMSG._serialized_start=36787 + _DEBUGCMDOUTMSG._serialized_end=36881 + _DEBUGCMDRESULT._serialized_start=36883 + _DEBUGCMDRESULT._serialized_end=36912 + _DEBUGCMDRESULTMSG._serialized_start=36914 + _DEBUGCMDRESULTMSG._serialized_end=37014 + _LISTCMDOUT._serialized_start=37016 + _LISTCMDOUT._serialized_end=37041 + _LISTCMDOUTMSG._serialized_start=37043 + _LISTCMDOUTMSG._serialized_end=37135 + _NOTE._serialized_start=37137 + _NOTE._serialized_end=37156 + _NOTEMSG._serialized_start=37158 + _NOTEMSG._serialized_end=37238 # @@protoc_insertion_point(module_scope) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index e0b6be20bac..dded49e2440 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -24,6 +24,7 @@ from dbt.helper_types import PathSet from dbt.clients.yaml_helper import load_yaml_text from dbt.events.functions import fire_event, get_invocation_id, warn_or_error +from dbt.events.helpers import datetime_to_json_string from dbt.events.types import ( PartialParsingErrorProcessingFile, PartialParsingError, @@ -36,6 +37,7 @@ NodeNotFoundOrDisabled, StateCheckVarsHash, Note, + PublicationArtifactChanged, ) from dbt.logger import DbtProcessState from dbt.node_types import NodeType, AccessType @@ -680,7 +682,6 @@ def write_artifacts(self): ) public_models[unique_id] = public_model - # TODO: get dependencies from dependencies.yml. When is it loaded? here? dependencies = [] if self.manifest.dependencies: for project in self.manifest.dependencies.projects: @@ -697,6 +698,9 @@ def write_artifacts(self): publication.write(path) def build_public_nodes(self): + """This method loads the dependencies from dependencies.yml, reads in the + the publication artifacts and adds the PublicModels to the manifest + "public_nodes" dictionary.""" public_nodes_rebuilt = False # Load the dependencies from the dependencies.yml file @@ -712,6 +716,7 @@ def build_public_nodes(self): else: self.manifest.dependencies = None + # Return if there weren't any dependencies before and aren't any now. if saved_manifest_dependencies is None and self.manifest.dependencies is None: return public_nodes_rebuilt @@ -729,6 +734,15 @@ def build_public_nodes(self): if project_name not in dependent_project_names: remove_dependent_project_references(self.manifest, publication) self.manifest.publications.pop(project_name) + fire_event( + PublicationArtifactChanged( + action="removed", + project_name=project_name, + generated_at=datetime_to_json_string( + publication.metadata.generated_at + ), + ) + ) public_nodes_rebuilt = True saved_manifest_publications = self.manifest.publications self.manifest.publications = {} @@ -771,8 +785,22 @@ def build_public_nodes(self): remove_dependent_project_references( self.manifest, saved_manifest_publications[project_name] ) + fire_event( + PublicationArtifactChanged( + action="updated", + project_name=project_name, + generated_at=datetime_to_json_string(publication.metadata.generated_at), + ) + ) public_nodes_rebuilt = True elif project_name not in saved_manifest_publications: + fire_event( + PublicationArtifactChanged( + action="added", + project_name=project_name, + generated_at=datetime_to_json_string(publication.metadata.generated_at), + ) + ) public_nodes_rebuilt = True if public_nodes_rebuilt: diff --git a/tests/unit/test_events.py b/tests/unit/test_events.py index a9333e8096a..6751d339f4f 100644 --- a/tests/unit/test_events.py +++ b/tests/unit/test_events.py @@ -182,6 +182,9 @@ def test_event_codes(self): types.ConstraintNotSupported(constraint="", adapter=""), # I - Project parsing ====================== types.InputFileDiffError(category="testing", file_id="my_file"), + types.PublicationArtifactChanged( + action="updated", project_name="test", generated_at=get_json_string_utcnow() + ), types.InvalidValueForField(field_name="test", field_value="test"), types.ValidationWarning(resource_type="model", field_name="access", node_name="my_macro"), types.ParsePerfInfoPath(path=""), From bac92eadf2b1242eaffae27265fe0cde2fbea8ab Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Mon, 24 Apr 2023 15:52:48 -0400 Subject: [PATCH 33/50] Remove duplicate nodes from manifest --- tests/functional/artifacts/expected_manifest.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/tests/functional/artifacts/expected_manifest.py b/tests/functional/artifacts/expected_manifest.py index 13862e9f4c1..003bb69211d 100644 --- a/tests/functional/artifacts/expected_manifest.py +++ b/tests/functional/artifacts/expected_manifest.py @@ -1625,9 +1625,6 @@ def expected_versions_manifest(project): "depends_on": { "macros": [], "nodes": [ - "model.test.versioned_model.v2", - "model.test.versioned_model.v2", - "model.test.versioned_model.v2", "model.test.versioned_model.v2", "model.test.versioned_model.v1", ], @@ -1894,9 +1891,6 @@ def expected_versions_manifest(project): "model.test.versioned_model.v2": [ "exposure.test.notebook_exposure", "model.test.ref_versioned_model", - "model.test.ref_versioned_model", - "model.test.ref_versioned_model", - "model.test.ref_versioned_model", "test.test.unique_versioned_model_v2_first_name.998430d28e", ], "model.test.ref_versioned_model": [], @@ -1911,9 +1905,6 @@ def expected_versions_manifest(project): "model.test.ref_versioned_model": [ "model.test.versioned_model.v1", "model.test.versioned_model.v2", - "model.test.versioned_model.v2", - "model.test.versioned_model.v2", - "model.test.versioned_model.v2", ], "exposure.test.notebook_exposure": ["model.test.versioned_model.v2"], "test.test.unique_versioned_model_v1_first_name.6138195dec": [ From 2e938e3317499638f46b81318a6bedc8c8877335 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Tue, 25 Apr 2023 17:05:39 -0400 Subject: [PATCH 34/50] refactor relation_from_relation_name --- core/dbt/adapters/base/relation.py | 20 ++++++++++---------- core/dbt/parser/manifest.py | 2 ++ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/core/dbt/adapters/base/relation.py b/core/dbt/adapters/base/relation.py index a189fc058a6..335e5b5ef06 100644 --- a/core/dbt/adapters/base/relation.py +++ b/core/dbt/adapters/base/relation.py @@ -246,17 +246,17 @@ def create_from_node( @classmethod def create_from_relation_name(cls: Type[Self], config: HasQuoting, relation_name: str) -> Self: - parts = relation_name.split(".") - if len(parts) == 3: - (database, schema, identifier) = parts - else: - database = None - (schema, identifier) = parts + include_policy = cls.get_default_include_policy() + parts = [part.strip('"').strip("'") for part in relation_name.split(".")] + + database = schema = identifier = None - if database: - database = database.strip('"').strip("'") - schema = schema.strip('"').strip("'") - identifier = identifier.strip('"').strip("'") + if include_policy["database"]: + database = parts.pop(0) + if include_policy["schema"]: + schema = parts.pop(0) + if include_policy["identifier"]: + identifier = parts.pop(0) return cls.create( database=database, diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 9e84201d114..2ff8bc526a5 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -475,6 +475,8 @@ def load(self): public_nodes_changed = self.build_public_nodes() if public_nodes_changed: self.process_refs(self.root_project.project_name) + # Rebuild parent and child maps because they may haave changed + self.manifest.build_parent_and_child_maps() if not skip_parsing or public_nodes_changed: # Following adds publications to manifest too... From 6b01773ca3d3f29c61dae83d0289dd4f327e89f4 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Tue, 25 Apr 2023 17:23:28 -0400 Subject: [PATCH 35/50] Some comments and minor cleanup --- core/dbt/parser/manifest.py | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 2ff8bc526a5..9c825ac63fc 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -4,7 +4,19 @@ from datetime import datetime import os import traceback -from typing import Dict, Optional, Mapping, Callable, Any, List, Type, Union, Tuple, Set +from typing import ( + Dict, + Optional, + Mapping, + Callable, + Any, + List, + Type, + Union, + Tuple, + Set, + MutableMapping, +) from itertools import chain import time from dbt.events.base_types import EventLevel @@ -475,8 +487,7 @@ def load(self): public_nodes_changed = self.build_public_nodes() if public_nodes_changed: self.process_refs(self.root_project.project_name) - # Rebuild parent and child maps because they may haave changed - self.manifest.build_parent_and_child_maps() + # parent and child maps will be rebuilt by write_manifest if not skip_parsing or public_nodes_changed: # Following adds publications to manifest too... @@ -668,8 +679,7 @@ def write_artifacts(self): model = self.manifest.nodes[unique_id] # public_dependencies is the intersection of all parent nodes plus public nodes public_dependencies = [] - # parents is a set - parents = graph.select_parents({unique_id}) + parents: set = graph.select_parents({unique_id}) public_dependencies = parents.intersection(set_of_public_unique_ids) public_model = PublicModel( @@ -699,10 +709,11 @@ def write_artifacts(self): path = os.path.join(self.root_project.target_path, publication_file_name) publication.write(path) - def build_public_nodes(self): + def build_public_nodes(self) -> bool: """This method loads the dependencies from dependencies.yml, reads in the the publication artifacts and adds the PublicModels to the manifest - "public_nodes" dictionary.""" + "public_nodes" dictionary. It returns a boolean that indicates that + public nodes have been rebuilt.""" public_nodes_rebuilt = False # Load the dependencies from the dependencies.yml file @@ -718,9 +729,9 @@ def build_public_nodes(self): else: self.manifest.dependencies = None - # Return if there weren't any dependencies before and aren't any now. + # Return False if there weren't any dependencies before and aren't any now. if saved_manifest_dependencies is None and self.manifest.dependencies is None: - return public_nodes_rebuilt + return False # collect the names of the projects for later use dependent_project_names = [] @@ -730,7 +741,7 @@ def build_public_nodes(self): # clean up previous publications that are no longer specified # and save previous publications, for later removal of references - saved_manifest_publications = {} + saved_manifest_publications: MutableMapping[str, PublicationConfig] = {} if self.manifest.publications: for project_name, publication in self.manifest.publications.items(): if project_name not in dependent_project_names: From f286af2fdb65938bfc601320691f880c83cde7cb Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Tue, 25 Apr 2023 19:40:11 -0400 Subject: [PATCH 36/50] get quote character from class, quoting from publication artifact --- core/dbt/adapters/base/relation.py | 7 ++++--- core/dbt/context/providers.py | 4 +++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/core/dbt/adapters/base/relation.py b/core/dbt/adapters/base/relation.py index 335e5b5ef06..901beceb788 100644 --- a/core/dbt/adapters/base/relation.py +++ b/core/dbt/adapters/base/relation.py @@ -245,9 +245,10 @@ def create_from_node( ) @classmethod - def create_from_relation_name(cls: Type[Self], config: HasQuoting, relation_name: str) -> Self: + def create_from_relation_name(cls: Type[Self], quoting: dict, relation_name: str) -> Self: include_policy = cls.get_default_include_policy() - parts = [part.strip('"').strip("'") for part in relation_name.split(".")] + quote_char = cls.create().quote_character + parts = [part.strip(quote_char) for part in relation_name.split(".")] database = schema = identifier = None @@ -262,7 +263,7 @@ def create_from_relation_name(cls: Type[Self], config: HasQuoting, relation_name database=database, schema=schema, identifier=identifier, - quote_policy=config.quoting, + quote_policy=quoting, ) @classmethod diff --git a/core/dbt/context/providers.py b/core/dbt/context/providers.py index 7d25d7ae975..1253e2909ba 100644 --- a/core/dbt/context/providers.py +++ b/core/dbt/context/providers.py @@ -514,7 +514,9 @@ def resolve( def create_relation(self, target_model: ManifestNode) -> RelationProxy: if target_model.is_public_node: - return self.Relation.create_from_relation_name(self.config, target_model.relation_name) + # Get quoting from publication artifact + quoting = self.manifest.publications[target_model.package_name].metadata.quoting + return self.Relation.create_from_relation_name(quoting, target_model.relation_name) elif target_model.is_ephemeral_model: self.model.set_cte(target_model.unique_id, None) return self.Relation.create_ephemeral_from_node(self.config, target_model) From 4fdfb2b47586ad20bedb9e5cc70d7a812f36ba17 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Wed, 26 Apr 2023 14:23:45 -0400 Subject: [PATCH 37/50] cleanup depends_on_public_nodes; move call to rebuild_ref_lookup; tweak if in ref lookup --- core/dbt/contracts/graph/manifest.py | 4 ++-- core/dbt/contracts/graph/nodes.py | 8 ++------ core/dbt/parser/manifest.py | 17 +++++++++-------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/core/dbt/contracts/graph/manifest.py b/core/dbt/contracts/graph/manifest.py index 75dfa573542..f752033ca0c 100644 --- a/core/dbt/contracts/graph/manifest.py +++ b/core/dbt/contracts/graph/manifest.py @@ -227,9 +227,9 @@ def populate_public_nodes(self, manifest): def perform_lookup(self, unique_id: UniqueID, manifest) -> ManifestOrPublicNode: if unique_id in manifest.nodes: node = manifest.nodes[unique_id] - if unique_id in manifest.public_nodes: + elif unique_id in manifest.public_nodes: node = manifest.public_nodes[unique_id] - if not node: + else: raise dbt.exceptions.DbtInternalError( f"Node {unique_id} found in cache but not found in manifest" ) diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index ddd7c47933a..2fe0f406966 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -959,10 +959,6 @@ def same_contents(self, other: Optional["Macro"]) -> bool: def depends_on_macros(self): return self.depends_on.macros - @property - def depends_on_public_nodes(self): - return [] - # ==================================== # Documentation node @@ -1200,7 +1196,7 @@ def depends_on_nodes(self): @property def depends_on_public_nodes(self): - return [] + return self.depends_on.public_nodes @property def search_name(self): @@ -1296,7 +1292,7 @@ def depends_on_nodes(self): @property def depends_on_public_nodes(self): - return [] + return self.depends_on.public_nodes @property def search_name(self): diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 9c825ac63fc..bf3d64a1824 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -455,7 +455,9 @@ def load(self): # load the publication artifacts and create the external nodes # This also loads manifest.dependencies - self.build_public_nodes() + public_nodes_changed = self.build_public_nodes() + if public_nodes_changed: + self.manifest.rebuild_ref_lookup() # update the refs, sources, docs and metrics depends_on.nodes # These check the created_at time on the nodes to @@ -486,6 +488,7 @@ def load(self): self.manifest.build_parent_and_child_maps() public_nodes_changed = self.build_public_nodes() if public_nodes_changed: + self.manifest.rebuild_ref_lookup() self.process_refs(self.root_project.project_name) # parent and child maps will be rebuilt by write_manifest @@ -714,7 +717,7 @@ def build_public_nodes(self) -> bool: the publication artifacts and adds the PublicModels to the manifest "public_nodes" dictionary. It returns a boolean that indicates that public nodes have been rebuilt.""" - public_nodes_rebuilt = False + public_nodes_changed = False # Load the dependencies from the dependencies.yml file dependencies_filepath = resolve_path_from_base( @@ -756,7 +759,7 @@ def build_public_nodes(self) -> bool: ), ) ) - public_nodes_rebuilt = True + public_nodes_changed = True saved_manifest_publications = self.manifest.publications self.manifest.publications = {} # Empty public_nodes since we're re-generating them all @@ -805,7 +808,7 @@ def build_public_nodes(self) -> bool: generated_at=datetime_to_json_string(publication.metadata.generated_at), ) ) - public_nodes_rebuilt = True + public_nodes_changed = True elif project_name not in saved_manifest_publications: fire_event( PublicationArtifactChanged( @@ -814,11 +817,9 @@ def build_public_nodes(self) -> bool: generated_at=datetime_to_json_string(publication.metadata.generated_at), ) ) - public_nodes_rebuilt = True + public_nodes_changed = True - if public_nodes_rebuilt: - self.manifest.rebuild_ref_lookup() - return public_nodes_rebuilt + return public_nodes_changed def is_partial_parsable(self, manifest: Manifest) -> Tuple[bool, Optional[str]]: """Compare the global hashes of the read-in parse results' values to From 0425c3bcf61685b32b9753c9e5610fd348337f51 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Wed, 26 Apr 2023 14:35:49 -0400 Subject: [PATCH 38/50] Remove duplicate writing of manifest.json --- core/dbt/parser/manifest.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index bf3d64a1824..56b106412f3 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -653,9 +653,7 @@ def write_manifest_for_partial_parse(self): raise def write_artifacts(self): - # write out manifest.json - # The following will also cause the parent and child maps to be built - write_manifest(self.manifest, self.root_project.target_path) + # The manifest.json is written out in a task, so we're not writing it here # build publication metadata metadata = PublicationMetadata( From acfae95cf6fe9d886d1e2bd43e4dadafc91ccdf9 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Wed, 26 Apr 2023 16:27:03 -0400 Subject: [PATCH 39/50] Add public_nodes to flat_graph --- core/dbt/contracts/graph/manifest.py | 1 + 1 file changed, 1 insertion(+) diff --git a/core/dbt/contracts/graph/manifest.py b/core/dbt/contracts/graph/manifest.py index f752033ca0c..8455e7cf2d2 100644 --- a/core/dbt/contracts/graph/manifest.py +++ b/core/dbt/contracts/graph/manifest.py @@ -707,6 +707,7 @@ def build_flat_graph(self): "metrics": {k: v.to_dict(omit_none=False) for k, v in self.metrics.items()}, "nodes": {k: v.to_dict(omit_none=False) for k, v in self.nodes.items()}, "sources": {k: v.to_dict(omit_none=False) for k, v in self.sources.items()}, + "public_nodes": {k: v.to_dict(omit_none=False) for k, v in self.public_nodes.items()}, } def build_disabled_by_file_id(self): From 325415478c38712a86cc0c4d80c939b288e5cf74 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Wed, 26 Apr 2023 16:40:23 -0400 Subject: [PATCH 40/50] Rename some dependencies --- core/dbt/contracts/graph/manifest.py | 4 +-- core/dbt/contracts/publication.py | 8 ++--- core/dbt/parser/manifest.py | 32 +++++++++---------- .../multi_project/test_publication.py | 6 ++-- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/core/dbt/contracts/graph/manifest.py b/core/dbt/contracts/graph/manifest.py index 8455e7cf2d2..5ff08e00131 100644 --- a/core/dbt/contracts/graph/manifest.py +++ b/core/dbt/contracts/graph/manifest.py @@ -22,7 +22,7 @@ from typing_extensions import Protocol from uuid import UUID -from dbt.contracts.publication import Dependencies, PublicationConfig, PublicModel +from dbt.contracts.publication import ProjectDependencies, PublicationConfig, PublicModel from dbt.contracts.graph.nodes import ( Macro, @@ -654,7 +654,7 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin): disabled: MutableMapping[str, List[GraphMemberNode]] = field(default_factory=dict) env_vars: MutableMapping[str, str] = field(default_factory=dict) public_nodes: MutableMapping[str, PublicModel] = field(default_factory=dict) - dependencies: Optional[Dependencies] = None + project_dependencies: Optional[ProjectDependencies] = None publications: MutableMapping[str, PublicationConfig] = field(default_factory=dict) _doc_lookup: Optional[DocLookup] = field( diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py index 98f0fdcd37a..388bec6564c 100644 --- a/core/dbt/contracts/publication.py +++ b/core/dbt/contracts/publication.py @@ -11,14 +11,14 @@ @dataclass -class DependentProjects(dbtClassMixin): +class ProjectDependency(dbtClassMixin): name: str environment: str @dataclass -class Dependencies(dbtClassMixin): - projects: List[DependentProjects] = field(default_factory=list) +class ProjectDependencies(dbtClassMixin): + projects: List[ProjectDependency] = field(default_factory=list) @dataclass @@ -41,7 +41,7 @@ class PublicModel(dbtClassMixin, ManifestOrPublicNode): version: Optional[NodeVersion] = None latest_version: Optional[NodeVersion] = None # list of model unique_ids - public_dependencies: List[str] = field(default_factory=list) + public_node_dependencies: List[str] = field(default_factory=list) generated_at: datetime = field(default_factory=datetime.utcnow) @property diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 56b106412f3..150a3d51287 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -99,7 +99,7 @@ PublicationArtifact, PublicationMetadata, PublicModel, - Dependencies, + ProjectDependencies, ) from dbt.exceptions import TargetNotFoundError, AmbiguousAliasError, PublicationConfigNotFound from dbt.parser.base import Parser @@ -678,10 +678,10 @@ def write_artifacts(self): public_models = {} for unique_id in public_model_ids: model = self.manifest.nodes[unique_id] - # public_dependencies is the intersection of all parent nodes plus public nodes - public_dependencies = [] + # public_node_dependencies is the intersection of all parent nodes plus public nodes + public_node_dependencies = [] parents: set = graph.select_parents({unique_id}) - public_dependencies = parents.intersection(set_of_public_unique_ids) + public_node_dependencies = parents.intersection(set_of_public_unique_ids) public_model = PublicModel( name=model.name, @@ -690,14 +690,14 @@ def write_artifacts(self): relation_name=model.relation_name, version=model.version, latest_version=model.latest_version, - public_dependencies=list(public_dependencies), + public_node_dependencies=list(public_node_dependencies), generated_at=metadata.generated_at, ) public_models[unique_id] = public_model dependencies = [] - if self.manifest.dependencies: - for project in self.manifest.dependencies.projects: + if self.manifest.project_dependencies: + for project in self.manifest.project_dependencies.projects: dependencies.append(project.name) publication = PublicationArtifact( metadata=metadata, @@ -721,23 +721,23 @@ def build_public_nodes(self) -> bool: dependencies_filepath = resolve_path_from_base( "dependencies.yml", self.root_project.project_root ) - saved_manifest_dependencies = self.manifest.dependencies + saved_manifest_dependencies = self.manifest.project_dependencies if path_exists(dependencies_filepath): contents = load_file_contents(dependencies_filepath) dependencies_dict = load_yaml_text(contents) - dependencies = Dependencies.from_dict(dependencies_dict) - self.manifest.dependencies = dependencies + dependencies = ProjectDependencies.from_dict(dependencies_dict) + self.manifest.project_dependencies = dependencies else: - self.manifest.dependencies = None + self.manifest.project_dependencies = None # Return False if there weren't any dependencies before and aren't any now. - if saved_manifest_dependencies is None and self.manifest.dependencies is None: + if saved_manifest_dependencies is None and self.manifest.project_dependencies is None: return False # collect the names of the projects for later use dependent_project_names = [] - if self.manifest.dependencies: - for project in self.manifest.dependencies.projects: + if self.manifest.project_dependencies: + for project in self.manifest.project_dependencies.projects: dependent_project_names.append(project.name) # clean up previous publications that are no longer specified @@ -763,8 +763,8 @@ def build_public_nodes(self) -> bool: # Empty public_nodes since we're re-generating them all self.manifest.public_nodes = {} - if self.manifest.dependencies: - for project in self.manifest.dependencies.projects: + if self.manifest.project_dependencies: + for project in self.manifest.project_dependencies.projects: # look for a _publication.json file for every project in the 'publications' dir publication_file_name = f"{project.name}_publication.json" # TODO: eventually we'll implement publications_dir config diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 76725b77589..9d0042d9b04 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -61,7 +61,7 @@ "relation_name": '"dbt"."test_schema"."fct_one"', "version": null, "latest_version": null, - "public_dependencies": [], + "public_node_dependencies": [], "generated_at": "2023-04-13T17:17:58.128706Z", }, "model.marketing.fct_two": { @@ -71,7 +71,7 @@ "relation_name": '"dbt"."test_schema"."fct_two"', "version": null, "latest_version": null, - "public_dependencies": ["model.test.fct_one"], + "public_node_dependencies": ["model.test.fct_one"], "generated_at": "2023-04-13T17:17:58.128706Z", } }, @@ -102,7 +102,7 @@ def test_publication_artifact(self, project): publication = PublicationArtifact.from_dict(publication_dict) assert publication assert len(publication.public_models) == 2 - assert publication.public_models["model.test.model_three"].public_dependencies == [ + assert publication.public_models["model.test.model_three"].public_node_dependencies == [ "model.test.model_one" ] From 2aad93774045f2b91099d60f24f23884c3070571 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Wed, 26 Apr 2023 16:58:16 -0400 Subject: [PATCH 41/50] Fix test_manifest.py --- test/unit/test_manifest.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/unit/test_manifest.py b/test/unit/test_manifest.py index 550e798ff33..3be2b6dceac 100644 --- a/test/unit/test_manifest.py +++ b/test/unit/test_manifest.py @@ -485,7 +485,8 @@ def test__build_flat_graph(self): flat_nodes = flat_graph["nodes"] flat_sources = flat_graph["sources"] self.assertEqual( - set(flat_graph), set(["exposures", "groups", "nodes", "sources", "metrics"]) + set(flat_graph), + set(["exposures", "groups", "nodes", "sources", "metrics", "public_nodes"]), ) self.assertEqual(set(flat_exposures), set(self.exposures)) self.assertEqual(set(flat_groups), set(self.groups)) @@ -975,7 +976,8 @@ def test__build_flat_graph(self): flat_graph = manifest.flat_graph flat_nodes = flat_graph["nodes"] self.assertEqual( - set(flat_graph), set(["exposures", "groups", "metrics", "nodes", "sources"]) + set(flat_graph), + set(["exposures", "groups", "metrics", "nodes", "sources", "public_nodes"]), ) self.assertEqual(set(flat_nodes), set(self.nested_nodes)) compiled_count = 0 From fce5c070cafd0c930e4c2624d51c0c0931de8230 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Thu, 27 Apr 2023 11:26:44 -0400 Subject: [PATCH 42/50] Move some file name constants to core/dbt/constants.py --- core/dbt/constants.py | 4 ++++ core/dbt/parser/manifest.py | 6 ++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/core/dbt/constants.py b/core/dbt/constants.py index 63213476e54..09288e1d7b2 100644 --- a/core/dbt/constants.py +++ b/core/dbt/constants.py @@ -8,3 +8,7 @@ PIN_PACKAGE_URL = ( "https://docs.getdbt.com/docs/package-management#section-specifying-package-versions" ) + +DEPENDENCIES_FILE_NAME = "dependencies.yml" +MANIFEST_FILE_NAME = "manifest.json" +PARTIAL_PARSE_FILE_NAME = "partial_parse.msgpack" diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 150a3d51287..6379d51bcd2 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -33,6 +33,7 @@ get_relation_class_by_name, get_adapter_package_names, ) +from dbt.constants import DEPENDENCIES_FILE_NAME, MANIFEST_FILE_NAME, PARTIAL_PARSE_FILE_NAME from dbt.helper_types import PathSet from dbt.clients.yaml_helper import load_yaml_text from dbt.events.functions import fire_event, get_invocation_id, warn_or_error @@ -119,9 +120,6 @@ from dbt.dataclass_schema import StrEnum, dbtClassMixin -MANIFEST_FILE_NAME = "manifest.json" -DEPENDENCIES_FILE_NAME = "dependencies.yml" -PARTIAL_PARSE_FILE_NAME = "partial_parse.msgpack" PARSING_STATE = DbtProcessState("parsing") PERF_INFO_FILE_NAME = "perf_info.json" @@ -719,7 +717,7 @@ def build_public_nodes(self) -> bool: # Load the dependencies from the dependencies.yml file dependencies_filepath = resolve_path_from_base( - "dependencies.yml", self.root_project.project_root + DEPENDENCIES_FILE_NAME, self.root_project.project_root ) saved_manifest_dependencies = self.manifest.project_dependencies if path_exists(dependencies_filepath): From a256083a36f9e7f167db1e42e6e44d6dbddb7fe9 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Thu, 27 Apr 2023 11:37:04 -0400 Subject: [PATCH 43/50] Remove "environment" from ProjectDependency. Add database/schema/identifier to PublicModel. Update TargetNotFound exception. --- core/dbt/contracts/graph/nodes.py | 7 +++++++ core/dbt/contracts/publication.py | 8 +++++++- core/dbt/exceptions.py | 2 +- core/dbt/parser/manifest.py | 3 +++ tests/functional/multi_project/test_publication.py | 4 +++- 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index 2fe0f406966..02e55c82488 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -1410,6 +1410,9 @@ class ManifestOrPublicNode(Protocol): version: Optional[NodeVersion] latest_version: Optional[NodeVersion] relation_name: str + database: Optional[str] + schema: Optional[str] + identifier: Optional[str] @property def is_latest_version(self): @@ -1435,6 +1438,10 @@ def is_public_node(self): def is_versioned(self): pass + @property + def alias(self): + pass + # ManifestNode without SeedNode, which doesn't have the # SQL related attributes diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py index 388bec6564c..22e7b656291 100644 --- a/core/dbt/contracts/publication.py +++ b/core/dbt/contracts/publication.py @@ -13,7 +13,6 @@ @dataclass class ProjectDependency(dbtClassMixin): name: str - environment: str @dataclass @@ -38,6 +37,9 @@ class PublicModel(dbtClassMixin, ManifestOrPublicNode): package_name: str unique_id: str relation_name: str + database: Optional[str] = None + schema: Optional[str] = None + identifier: Optional[str] = None version: Optional[NodeVersion] = None latest_version: Optional[NodeVersion] = None # list of model unique_ids @@ -81,6 +83,10 @@ def is_public_node(self): def is_versioned(self): return self.version is not None + @property + def alias(self): + return self.identifier + @dataclass class PublicationMandatory: diff --git a/core/dbt/exceptions.py b/core/dbt/exceptions.py index 74686c2a04e..35bf10e344d 100644 --- a/core/dbt/exceptions.py +++ b/core/dbt/exceptions.py @@ -1374,7 +1374,7 @@ def get_message(self) -> str: target_package_string = "" if self.target_package is not None: - target_package_string = f"in package '{self.target_package}' " + target_package_string = f"in package or project '{self.target_package}' " msg = ( f"{resource_type_title} '{unique_id}' ({original_file_path}) depends on a " diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 6379d51bcd2..3a573ed28b5 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -686,6 +686,9 @@ def write_artifacts(self): package_name=model.package_name, unique_id=model.unique_id, relation_name=model.relation_name, + database=model.database, + schema=model.schema, + identifier=model.alias, version=model.version, latest_version=model.latest_version, public_node_dependencies=list(public_node_dependencies), diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 9d0042d9b04..7148516e375 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -34,7 +34,6 @@ dependencies_yml = """ projects: - name: marketing - environment: dev """ marketing_pub_json = """ @@ -59,6 +58,9 @@ "package_name": "marketing", "unique_id": "model.marketing.fct_one", "relation_name": '"dbt"."test_schema"."fct_one"', + "database": "dbt", + "schema": "test_schema", + "identifier": "fct_one", "version": null, "latest_version": null, "public_node_dependencies": [], From 1589c754c6a3c5af98b97a9262a861a0e67853b1 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Thu, 27 Apr 2023 11:46:16 -0400 Subject: [PATCH 44/50] Include external publication dependencies in publication artifact dependencies --- core/dbt/parser/manifest.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 3a573ed28b5..1c3dedf68ff 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -697,9 +697,16 @@ def write_artifacts(self): public_models[unique_id] = public_model dependencies = [] + # Get dependencies from dependencies.yml if self.manifest.project_dependencies: for project in self.manifest.project_dependencies.projects: dependencies.append(project.name) + # Get dependencies from publication dependencies + for project in self.manifest.publications.values(): + for project_name in project.dependencies: + if project_name not in dependencies: + dependencies.append(project_name) + publication = PublicationArtifact( metadata=metadata, project_name=self.root_project.project_name, From 97f1fc93856ed429c624d08a051ed9ee9a73a23d Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Thu, 27 Apr 2023 12:01:23 -0400 Subject: [PATCH 45/50] Remove create_from_relation_name, call create_from_node instead --- core/dbt/adapters/base/relation.py | 24 +----------------------- core/dbt/context/providers.py | 4 ++-- 2 files changed, 3 insertions(+), 25 deletions(-) diff --git a/core/dbt/adapters/base/relation.py b/core/dbt/adapters/base/relation.py index 901beceb788..1e002c06cc1 100644 --- a/core/dbt/adapters/base/relation.py +++ b/core/dbt/adapters/base/relation.py @@ -227,7 +227,7 @@ def create_ephemeral_from_node( def create_from_node( cls: Type[Self], config: HasQuoting, - node: ManifestNode, + node, quote_policy: Optional[Dict[str, bool]] = None, **kwargs: Any, ) -> Self: @@ -244,28 +244,6 @@ def create_from_node( **kwargs, ) - @classmethod - def create_from_relation_name(cls: Type[Self], quoting: dict, relation_name: str) -> Self: - include_policy = cls.get_default_include_policy() - quote_char = cls.create().quote_character - parts = [part.strip(quote_char) for part in relation_name.split(".")] - - database = schema = identifier = None - - if include_policy["database"]: - database = parts.pop(0) - if include_policy["schema"]: - schema = parts.pop(0) - if include_policy["identifier"]: - identifier = parts.pop(0) - - return cls.create( - database=database, - schema=schema, - identifier=identifier, - quote_policy=quoting, - ) - @classmethod def create_from( cls: Type[Self], diff --git a/core/dbt/context/providers.py b/core/dbt/context/providers.py index 1253e2909ba..7015c031f4b 100644 --- a/core/dbt/context/providers.py +++ b/core/dbt/context/providers.py @@ -515,8 +515,8 @@ def resolve( def create_relation(self, target_model: ManifestNode) -> RelationProxy: if target_model.is_public_node: # Get quoting from publication artifact - quoting = self.manifest.publications[target_model.package_name].metadata.quoting - return self.Relation.create_from_relation_name(quoting, target_model.relation_name) + pub_metadata = self.manifest.publications[target_model.package_name].metadata + return self.Relation.create_from_node(pub_metadata, target_model) elif target_model.is_ephemeral_model: self.model.set_cte(target_model.unique_id, None) return self.Relation.create_ephemeral_from_node(self.config, target_model) From b81157fdac4d4708bb07ee694034d2f70143ce74 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Thu, 27 Apr 2023 13:24:48 -0400 Subject: [PATCH 46/50] Change PublicationArtifactChanged message to debug level --- core/dbt/events/types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/dbt/events/types.py b/core/dbt/events/types.py index 41eea09aaf2..b6211ddfbc6 100644 --- a/core/dbt/events/types.py +++ b/core/dbt/events/types.py @@ -788,7 +788,7 @@ def message(self) -> str: return f"Error processing file diff: {self.category}, {self.file_id}" -class PublicationArtifactChanged(WarnLevel): +class PublicationArtifactChanged(DebugLevel): def code(self): return "I002" From 552b6239521df52cd8df15fc0f9ec688dd2e5bfd Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Thu, 27 Apr 2023 15:15:02 -0400 Subject: [PATCH 47/50] Make write_publication_artifact a function in parser/manifest.py --- core/dbt/parser/manifest.py | 139 ++++++++++++++++++------------------ 1 file changed, 70 insertions(+), 69 deletions(-) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 1c3dedf68ff..0a665010e00 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -84,6 +84,7 @@ ManifestStateCheck, ParsingInfo, ) +from dbt.graph.graph import UniqueId from dbt.contracts.graph.nodes import ( SourceDefinition, Macro, @@ -492,7 +493,7 @@ def load(self): if not skip_parsing or public_nodes_changed: # Following adds publications to manifest too... - self.write_artifacts() + write_publication_artifact(self.root_project, self.manifest) # write out the fully parsed manifest self.write_manifest_for_partial_parse() @@ -650,74 +651,6 @@ def write_manifest_for_partial_parse(self): except Exception: raise - def write_artifacts(self): - # The manifest.json is written out in a task, so we're not writing it here - - # build publication metadata - metadata = PublicationMetadata( - adapter_type=self.root_project.credentials.type, - quoting=self.root_project.quoting, - ) - - # get a list of public model ids first so it can be used in constructing dependencies - public_model_ids = [] - for node in self.manifest.nodes.values(): - if node.resource_type == NodeType.Model and node.access == AccessType.Public: - public_model_ids.append(node.unique_id) - - set_of_public_unique_ids = set(public_model_ids) - - # Get the Graph object from the Linker - from dbt.compilation import Linker - - linker = Linker() - graph = linker.get_graph(self.manifest) - - public_models = {} - for unique_id in public_model_ids: - model = self.manifest.nodes[unique_id] - # public_node_dependencies is the intersection of all parent nodes plus public nodes - public_node_dependencies = [] - parents: set = graph.select_parents({unique_id}) - public_node_dependencies = parents.intersection(set_of_public_unique_ids) - - public_model = PublicModel( - name=model.name, - package_name=model.package_name, - unique_id=model.unique_id, - relation_name=model.relation_name, - database=model.database, - schema=model.schema, - identifier=model.alias, - version=model.version, - latest_version=model.latest_version, - public_node_dependencies=list(public_node_dependencies), - generated_at=metadata.generated_at, - ) - public_models[unique_id] = public_model - - dependencies = [] - # Get dependencies from dependencies.yml - if self.manifest.project_dependencies: - for project in self.manifest.project_dependencies.projects: - dependencies.append(project.name) - # Get dependencies from publication dependencies - for project in self.manifest.publications.values(): - for project_name in project.dependencies: - if project_name not in dependencies: - dependencies.append(project_name) - - publication = PublicationArtifact( - metadata=metadata, - project_name=self.root_project.project_name, - public_models=public_models, - dependencies=dependencies, - ) - # write out publication artifact _publication.json - publication_file_name = f"{self.root_project.project_name}_publication.json" - path = os.path.join(self.root_project.target_path, publication_file_name) - publication.write(path) - def build_public_nodes(self) -> bool: """This method loads the dependencies from dependencies.yml, reads in the the publication artifacts and adds the PublicModels to the manifest @@ -1723,6 +1656,74 @@ def process_node(config: RuntimeConfig, manifest: Manifest, node: ManifestNode): _process_docs_for_node(ctx, node) +def write_publication_artifact(root_project: RuntimeConfig, manifest: Manifest): + # The manifest.json is written out in a task, so we're not writing it here + + # build publication metadata + metadata = PublicationMetadata( + adapter_type=root_project.credentials.type, + quoting=root_project.quoting, + ) + + # get a list of public model ids first so it can be used in constructing dependencies + public_model_ids = [] + for node in manifest.nodes.values(): + if node.resource_type == NodeType.Model and node.access == AccessType.Public: + public_model_ids.append(node.unique_id) + + set_of_public_model_ids = set(public_model_ids) + + # Get the Graph object from the Linker + from dbt.compilation import Linker + + linker = Linker() + graph = linker.get_graph(manifest) + + public_models = {} + for unique_id in public_model_ids: + model = manifest.nodes[unique_id] + # public_node_dependencies is the intersection of all parent nodes plus public nodes + parents: Set[UniqueId] = graph.select_parents({UniqueId(unique_id)}) + public_node_dependencies: Set[UniqueId] = parents.intersection(set_of_public_model_ids) + + public_model = PublicModel( + name=model.name, + package_name=model.package_name, + unique_id=model.unique_id, + relation_name=dbt.utils.cast_to_str(model.relation_name), + database=model.database, + schema=model.schema, + identifier=model.alias, + version=model.version, + latest_version=model.latest_version, + public_node_dependencies=list(public_node_dependencies), + generated_at=metadata.generated_at, + ) + public_models[unique_id] = public_model + + dependencies = [] + # Get dependencies from dependencies.yml + if manifest.project_dependencies: + for dep_project in manifest.project_dependencies.projects: + dependencies.append(dep_project.name) + # Get dependencies from publication dependencies + for pub_project in manifest.publications.values(): + for project_name in pub_project.dependencies: + if project_name not in dependencies: + dependencies.append(project_name) + + publication = PublicationArtifact( + metadata=metadata, + project_name=root_project.project_name, + public_models=public_models, + dependencies=dependencies, + ) + # write out publication artifact _publication.json + publication_file_name = f"{root_project.project_name}_publication.json" + path = os.path.join(root_project.target_path, publication_file_name) + publication.write(path) + + def write_manifest(manifest: Manifest, target_path: str): path = os.path.join(target_path, MANIFEST_FILE_NAME) manifest.write(path) From f705d26759fd98a0b673fe8e7e53eab39ff71e7d Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Mon, 1 May 2023 10:21:27 -0400 Subject: [PATCH 48/50] Code review cleanup --- core/dbt/contracts/publication.py | 2 +- core/dbt/parser/manifest.py | 81 ++++++++++--------- .../multi_project/test_publication.py | 4 +- 3 files changed, 47 insertions(+), 40 deletions(-) diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py index 22e7b656291..75adc11a432 100644 --- a/core/dbt/contracts/publication.py +++ b/core/dbt/contracts/publication.py @@ -113,4 +113,4 @@ class PublicationConfig(ArtifactMixin, PublicationMandatory): metadata: PublicationMetadata = field(default_factory=PublicationMetadata) # list of project name strings dependencies: List[str] = field(default_factory=list) - public_model_ids: List[str] = field(default_factory=list) + public_node_ids: List[str] = field(default_factory=list) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 0a665010e00..4a802ba7a13 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -492,7 +492,7 @@ def load(self): # parent and child maps will be rebuilt by write_manifest if not skip_parsing or public_nodes_changed: - # Following adds publications to manifest too... + # Write out the _publication.json file for this project write_publication_artifact(self.root_project, self.manifest) # write out the fully parsed manifest self.write_manifest_for_partial_parse() @@ -659,6 +659,11 @@ def build_public_nodes(self) -> bool: public_nodes_changed = False # Load the dependencies from the dependencies.yml file + # TODO: dependencies might be better in the RuntimeConfig and + # loaded somewhere earlier, but leaving this here for later refactoring. + # Loading it elsewhere would make it harder to detect that there were + # no dependencies previously and still are none, though that could be + # inferred from the manifest publication configs. dependencies_filepath = resolve_path_from_base( DEPENDENCIES_FILE_NAME, self.root_project.project_root ) @@ -676,17 +681,17 @@ def build_public_nodes(self) -> bool: return False # collect the names of the projects for later use - dependent_project_names = [] + project_dependency_names = [] if self.manifest.project_dependencies: for project in self.manifest.project_dependencies.projects: - dependent_project_names.append(project.name) + project_dependency_names.append(project.name) # clean up previous publications that are no longer specified # and save previous publications, for later removal of references saved_manifest_publications: MutableMapping[str, PublicationConfig] = {} if self.manifest.publications: for project_name, publication in self.manifest.publications.items(): - if project_name not in dependent_project_names: + if project_name not in project_dependency_names: remove_dependent_project_references(self.manifest, publication) self.manifest.publications.pop(project_name) fire_event( @@ -705,29 +710,7 @@ def build_public_nodes(self) -> bool: self.manifest.public_nodes = {} if self.manifest.project_dependencies: - for project in self.manifest.project_dependencies.projects: - # look for a _publication.json file for every project in the 'publications' dir - publication_file_name = f"{project.name}_publication.json" - # TODO: eventually we'll implement publications_dir config - path = os.path.join("publications", publication_file_name) - if os.path.exists(path): - contents = load_file_contents(path) - pub_dict = load_yaml_text(contents) - PublicationArtifact.validate(pub_dict) - # separate out the public_models - public_models = pub_dict.pop("public_models") - # Create the PublicationConfig to store in internal manifest - pub_config = PublicationConfig.from_dict(pub_dict) - self.manifest.publications[project.name] = pub_config - # Add to dictionary of public_nodes and save id in PublicationConfig - for public_model_dict in public_models.values(): - public_node = PublicModel.from_dict(public_model_dict) - self.manifest.public_nodes[public_node.unique_id] = public_node - pub_config.public_model_ids.append(public_node.unique_id) - else: - raise PublicationConfigNotFound( - project=project.name, file_name=publication_file_name - ) + self.load_new_public_nodes() # Now that we've loaded the current publications and public_nodes, look for # changed publications so we can reset the public_nodes references @@ -760,6 +743,31 @@ def build_public_nodes(self) -> bool: return public_nodes_changed + def load_new_public_nodes(self): + for project in self.manifest.project_dependencies.projects: + # look for a _publication.json file for every project in the 'publications' dir + publication_file_name = f"{project.name}_publication.json" + # TODO: eventually we'll implement publications_dir config + path = os.path.join("publications", publication_file_name) + if os.path.exists(path): + contents = load_file_contents(path) + pub_dict = load_yaml_text(contents) + PublicationArtifact.validate(pub_dict) + # separate out the public_models + public_models = pub_dict.pop("public_models") + # Create the PublicationConfig to store in internal manifest + pub_config = PublicationConfig.from_dict(pub_dict) + self.manifest.publications[project.name] = pub_config + # Add to dictionary of public_nodes and save id in PublicationConfig + for public_model_dict in public_models.values(): + public_node = PublicModel.from_dict(public_model_dict) + self.manifest.public_nodes[public_node.unique_id] = public_node + pub_config.public_node_ids.append(public_node.unique_id) + else: + raise PublicationConfigNotFound( + project=project.name, file_name=publication_file_name + ) + def is_partial_parsable(self, manifest: Manifest) -> Tuple[bool, Optional[str]]: """Compare the global hashes of the read-in parse results' values to the known ones, and return if it is ok to re-use the results. @@ -1553,7 +1561,7 @@ def _process_refs_for_node(manifest: Manifest, current_project: str, node: Manif def remove_dependent_project_references(manifest: Manifest, publication: PublicationConfig): - for unique_id in publication.public_model_ids: + for unique_id in publication.public_node_ids: for child_id in manifest.child_map[unique_id]: node = manifest.expect(child_id) if hasattr(node.depends_on, "public_nodes"): @@ -1665,13 +1673,12 @@ def write_publication_artifact(root_project: RuntimeConfig, manifest: Manifest): quoting=root_project.quoting, ) - # get a list of public model ids first so it can be used in constructing dependencies - public_model_ids = [] - for node in manifest.nodes.values(): - if node.resource_type == NodeType.Model and node.access == AccessType.Public: - public_model_ids.append(node.unique_id) - - set_of_public_model_ids = set(public_model_ids) + # get a set of public model ids first so it can be used in constructing dependencies + public_node_ids = { + node.unique_id + for node in manifest.nodes.values() + if node.resource_type == NodeType.Model and node.access == AccessType.Public + } # Get the Graph object from the Linker from dbt.compilation import Linker @@ -1680,11 +1687,11 @@ def write_publication_artifact(root_project: RuntimeConfig, manifest: Manifest): graph = linker.get_graph(manifest) public_models = {} - for unique_id in public_model_ids: + for unique_id in public_node_ids: model = manifest.nodes[unique_id] # public_node_dependencies is the intersection of all parent nodes plus public nodes parents: Set[UniqueId] = graph.select_parents({UniqueId(unique_id)}) - public_node_dependencies: Set[UniqueId] = parents.intersection(set_of_public_model_ids) + public_node_dependencies: Set[UniqueId] = parents.intersection(public_node_ids) public_model = PublicModel( name=model.name, diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 7148516e375..8e774e5cd5a 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -134,7 +134,7 @@ def test_dependencies(self, project): manifest = run_dbt(["parse"]) assert manifest.publications assert "marketing" in manifest.publications - assert "model.marketing.fct_one" in manifest.publications["marketing"].public_model_ids + assert "model.marketing.fct_one" in manifest.publications["marketing"].public_node_ids # target_model_name, target_model_package, target_model_version, current_project, node_package resolved_node = manifest.resolve_ref("fct_one", "marketing", None, "test", "test") @@ -153,7 +153,7 @@ def test_dependencies(self, project): assert public_model_id in manifest.parent_map assert manifest.parent_map[model_id] == [public_model_id] # check that publication configs contain correct list of public model unique_ids - assert manifest.publications["marketing"].public_model_ids == [ + assert manifest.publications["marketing"].public_node_ids == [ "model.marketing.fct_one", "model.marketing.fct_two", ] From a0611a47fd69aa17eef9ccea482e8d10e1072566 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Tue, 2 May 2023 14:01:53 -0400 Subject: [PATCH 49/50] Create fixture to create minimal alternate project (just models) --- tests/functional/multi_project/conftest.py | 78 +++++++++++++++++++ .../multi_project/test_publication.py | 31 +++++++- 2 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 tests/functional/multi_project/conftest.py diff --git a/tests/functional/multi_project/conftest.py b/tests/functional/multi_project/conftest.py new file mode 100644 index 00000000000..d8f95361cc3 --- /dev/null +++ b/tests/functional/multi_project/conftest.py @@ -0,0 +1,78 @@ +import pytest +import yaml +from dbt.tests.util import write_file +from dbt.tests.fixtures.project import write_project_files_recursively + +# This fixture should always run after the standard "project" fixture, because +# it skips a lot of setup with the assumption that the "project" fixture has done it. +# In particular, you can't execute sql or do other things on this fixture. It uses +# the same unique schema as the base project fixture. + + +@pytest.fixture(scope="class") +def project_root_alt(tmpdir_factory): + # tmpdir docs - https://docs.pytest.org/en/6.2.x/tmpdir.html + project_root = tmpdir_factory.mktemp("project") + print(f"\n=== Test project_root alt: {project_root}") + return project_root + + +# Data used to update the dbt_project config data. +@pytest.fixture(scope="class") +def project_config_update_alt(): + return {} + + +# Combines the project_config_update dictionary with project_config defaults to +# produce a project_yml config and write it out as dbt_project.yml +@pytest.fixture(scope="class") +def dbt_project_yml_alt(project_root_alt, project_config_update_alt): + project_config = { + "name": "test_alt", + "profile": "test", + } + if project_config_update_alt: + if isinstance(project_config_update_alt, dict): + project_config.update(project_config_update_alt) + elif isinstance(project_config_update_alt, str): + updates = yaml.safe_load(project_config_update_alt) + project_config.update(updates) + write_file(yaml.safe_dump(project_config), project_root_alt, "dbt_project.yml") + return project_config + + +def write_project_files_alt(project_root_alt, dir_name, file_dict): + path = project_root_alt.mkdir(dir_name) + if file_dict: + write_project_files_recursively(path, file_dict) + + +@pytest.fixture(scope="class") +def models_alt(): + return {} + + +@pytest.fixture(scope="class") +def project_files_alt(project_root_alt, models_alt): + write_project_files_alt(project_root_alt, "models", {**models_alt}) + + +class TestProjInfoAlt: + def __init__( + self, + project_root_alt, + ): + self.project_root = project_root_alt + + +@pytest.fixture(scope="class") +def project_alt( + project_root_alt, + dbt_project_yml_alt, + project_files_alt, +): + project_alt = TestProjInfoAlt( + project_root_alt=project_root_alt, + ) + + yield project_alt diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 8e774e5cd5a..84c811d89d3 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -109,7 +109,7 @@ def test_publication_artifact(self, project): ] -class TestDependenciesYml: +class TestPublicationArtifacts: @pytest.fixture(scope="class") def models(self): return { @@ -119,7 +119,7 @@ def models(self): "models.yml": models_yml, } - def test_dependencies(self, project): + def test_pub_artifacts(self, project): write_file(dependencies_yml, "dependencies.yml") # Depdencies lists "marketing" project, but no publication file found @@ -182,3 +182,30 @@ def test_dependencies(self, project): write_file(ext_node_model_sql, project.project_root, "models", "test_model_two.sql") results = run_dbt(["run"]) assert len(results) == 5 + + +class TestDependencies: + @pytest.fixture(scope="class") + def models(self): + return { + "model_one.sql": model_one_sql, + "model_two.sql": model_two_sql, + "model_three.sql": model_three_sql, + "models.yml": models_yml, + } + + @pytest.fixture(scope="class") + def models_alt(self): + return { + "model_alt.sql": "select 1 as fun", + } + + def test_multi_projects(self, project, project_alt): + # run the base project. args will have the project_dir for this project, so + # we don't have to supply it. + results = run_dbt(["run"]) + assert len(results) == 3 + + # run the alternate project by using the alternate project root + results = run_dbt(["run", "--project-dir", str(project_alt.project_root)]) + assert len(results) == 1 From 7471b2f349227a91dfacb95154c4a70b887d5bc6 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Wed, 3 May 2023 09:58:37 -0400 Subject: [PATCH 50/50] develop multi project test case --- .../multi_project/test_publication.py | 64 ++++++++++++++++--- 1 file changed, 56 insertions(+), 8 deletions(-) diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py index 84c811d89d3..ac3a86a8cd8 100644 --- a/tests/functional/multi_project/test_publication.py +++ b/tests/functional/multi_project/test_publication.py @@ -1,7 +1,8 @@ import pytest import pathlib +import os -from dbt.tests.util import run_dbt, get_artifact, write_file +from dbt.tests.util import run_dbt, get_artifact, write_file, copy_file from dbt.contracts.publication import PublicationArtifact, PublicModel from dbt.exceptions import PublicationConfigNotFound, TargetNotFoundError @@ -122,7 +123,7 @@ def models(self): def test_pub_artifacts(self, project): write_file(dependencies_yml, "dependencies.yml") - # Depdencies lists "marketing" project, but no publication file found + # Dependencies lists "marketing" project, but no publication file found with pytest.raises(PublicationConfigNotFound): run_dbt(["parse"]) @@ -136,6 +137,11 @@ def test_pub_artifacts(self, project): assert "marketing" in manifest.publications assert "model.marketing.fct_one" in manifest.publications["marketing"].public_node_ids + # Check dependencies in publication_artifact + publication_dict = get_artifact(project.project_root, "target", "test_publication.json") + publication = PublicationArtifact.from_dict(publication_dict) + assert publication.dependencies == ["marketing"] + # target_model_name, target_model_package, target_model_version, current_project, node_package resolved_node = manifest.resolve_ref("fct_one", "marketing", None, "test", "test") assert resolved_node @@ -184,13 +190,34 @@ def test_pub_artifacts(self, project): assert len(results) == 5 -class TestDependencies: +dependencies_alt_yml = """ +projects: + - name: test_alt +""" + +model_alt_yml = """ +models: + - name: model_alt + description: model alt + access: public +""" + +model_alt_ref_sql = """ +select * from {{ ref('test_alt', 'model_alt') }} +""" + + +# This test case uses the conftest.py in this test directory to allow +# creating a minimal second project (project_alt) so that we can have two projects in +# the same test. +class TestMultiProjects: @pytest.fixture(scope="class") def models(self): return { "model_one.sql": model_one_sql, "model_two.sql": model_two_sql, "model_three.sql": model_three_sql, + "model_alt_ref.sql": model_alt_ref_sql, "models.yml": models_yml, } @@ -198,14 +225,35 @@ def models(self): def models_alt(self): return { "model_alt.sql": "select 1 as fun", + "model_alt.yml": model_alt_yml, } def test_multi_projects(self, project, project_alt): - # run the base project. args will have the project_dir for this project, so - # we don't have to supply it. - results = run_dbt(["run"]) - assert len(results) == 3 - # run the alternate project by using the alternate project root + # (There is currently a bug where project-dir requires a chdir to work.) + os.chdir(project_alt.project_root) results = run_dbt(["run", "--project-dir", str(project_alt.project_root)]) assert len(results) == 1 + + # Check publication artifact + publication_dict = get_artifact( + project_alt.project_root, "target", "test_alt_publication.json" + ) + publication = PublicationArtifact.from_dict(publication_dict) + assert len(publication.public_models) == 1 + + # copy the publication artifact from test_alt to test project + (pathlib.Path(project.project_root) / "publications").mkdir(parents=True, exist_ok=True) + target_path = os.path.join(project_alt.project_root, "target") + copy_file( + target_path, + "test_alt_publication.json", + project.project_root, + ["publications", "test_alt_publication.json"], + ) + + # run the base project + os.chdir(project.project_root) + write_file(dependencies_alt_yml, project.project_root, "dependencies.yml") + results = run_dbt(["run", "--project-dir", str(project.project_root)]) + assert len(results) == 4