Skip to content

Commit 7c3657d

Browse files
wizardxzfa-assistant
authored andcommitted
normalize special chars in source name (#4118)
* normalize special chars in source name * changie GitOrigin-RevId: 8842b32fedb190fa590bab06eb3b1f4cd67ab025
1 parent 11b18aa commit 7c3657d

File tree

3 files changed

+13
-5
lines changed

3 files changed

+13
-5
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
kind: Fixes
2+
body: normalize special chars in source name
3+
time: 2025-06-24T22:50:48.789051813-07:00

crates/dbt-parser/src/resolve/resolve_properties.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ impl MinimalProperties {
105105
);
106106
}
107107

108+
validate_resource_name(&source.name)?;
108109
for table in tables.iter() {
109110
let minimum_table_value = into_typed_with_jinja::<MinimalTableValue, _>(
110111
Some(io_args),
@@ -136,10 +137,7 @@ impl MinimalProperties {
136137
self.source_tables.insert(
137138
key,
138139
MinimalPropertiesEntry {
139-
name: validate_resource_name(&format!(
140-
"{}.{}",
141-
source.name, minimum_table_value.name
142-
))?,
140+
name: minimum_table_value.name,
143141
relative_path: properties_path.to_path_buf(),
144142
schema_value: schema_value.clone(),
145143
table_value: Some(table.clone()), // Store table separately

crates/dbt-parser/src/resolve/resolve_sources.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use dbt_schemas::schemas::properties::{SourceProperties, Tables};
1717
use dbt_schemas::schemas::{CommonAttributes, DbtSource};
1818
use dbt_schemas::state::{DbtAsset, DbtPackage, ModelStatus, RefsAndSourcesTracker};
1919
use minijinja::Value as MinijinjaValue;
20+
use regex::Regex;
2021
use std::collections::BTreeMap;
2122
use std::collections::HashMap;
2223
use std::sync::Arc;
@@ -45,6 +46,8 @@ pub fn resolve_sources(
4546
let mut disabled_sources: HashMap<String, Arc<DbtSource>> = HashMap::new();
4647
let package_name = package.dbt_project.name.as_ref();
4748

49+
let special_chars = Regex::new(r"[^a-zA-Z0-9_]").unwrap();
50+
4851
let local_project_config = init_project_config(
4952
io_args,
5053
&package.dbt_project.sources,
@@ -104,7 +107,11 @@ pub fn resolve_sources(
104107
.enabled
105108
.unwrap_or(source_properties_config.get_enabled().unwrap_or(true));
106109

107-
let unique_id = format!("source.{}.{}.{}", &package_name, source_name, &table_name);
110+
let normalized_table_name = special_chars.replace_all(&table_name, "__");
111+
let unique_id = format!(
112+
"source.{}.{}.{}",
113+
&package_name, source_name, &normalized_table_name
114+
);
108115
let fqn = get_node_fqn(
109116
package_name,
110117
mpe.relative_path.clone(),

0 commit comments

Comments
 (0)