Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Issue AmbiguousAlias error after DuplicateResourceName
  • Loading branch information
gshank committed May 11, 2023
commit 5c6ea3f81bf1cc2425ef605651be5f9eb4e1804c
20 changes: 16 additions & 4 deletions core/dbt/parser/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -1097,6 +1097,7 @@ def _check_resource_uniqueness(
versioned_resources: Dict[str, ManifestNode] = {}
unversioned_resources: Dict[str, ManifestNode] = {}
duplicate_resources: Dict[str, list] = {}
duplicate_aliases: Dict[str, list] = {}

for resource, node in manifest.nodes.items():
if not node.is_relational:
Expand All @@ -1119,9 +1120,7 @@ def _check_resource_uniqueness(

existing_alias = alias_resources.get(full_node_name)
if existing_alias is not None:
raise AmbiguousAliasError(
node_1=existing_alias, node_2=node, duped_name=full_node_name
)
duplicate_aliases[full_node_name] = [existing_alias, node]

names_resources[name] = node
alias_resources[full_node_name] = node
Expand All @@ -1137,14 +1136,27 @@ def _check_resource_uniqueness(
versioned_node, unversioned_node
)

# Handle base case of multiple unversioned models with same name
# Handle base case of multiple unversioned models with same name.
# This is for same name in multiple packages. Same name in the same
# package will be caught by _check_duplicates called by add_node.
# Version 1.6 will remove the restriction of having the same name in
# multiple packages.
intersection_unversioned = set(duplicate_resources.keys()) - set(
versioned_resources.keys()
)
for name in intersection_unversioned:
existing_node, node = duplicate_resources[name]
raise dbt.exceptions.DuplicateResourceNameError(existing_node, node)

# Handle ambiguous alias error. We've deferred this because we prefer to
# issue the DuplicateResourceName error
for full_node_name, node_list in duplicate_aliases.items():
existing_alias, node = node_list
raise AmbiguousAliasError(
node_1=existing_alias, node_2=node, duped_name=full_node_name
)



def _warn_for_unused_resource_config_paths(manifest: Manifest, config: RuntimeConfig) -> None:
resource_fqns: Mapping[str, PathSet] = manifest.get_resource_fqns()
Expand Down