added defaults support for lookups properly

This commit is contained in:
2026-08-03 22:20:39 -04:00
parent 99ae2a7e89
commit f8bdac3428

View File

@ -335,16 +335,7 @@ impl Merger {
} }
} }
// Hydrate missing fields from field_defaults for entity_type and its hierarchy
for parent_type_name in &type_def.hierarchy {
if let Some(parent_type) = self.db.types.get(parent_type_name) {
for (k, v) in &parent_type.field_defaults {
if !entity_fields.contains_key(k) {
entity_fields.insert(k.clone(), v.clone());
}
}
}
}
let mut current_org_id = None; let mut current_org_id = None;
if let Some(compiled_props) = schema.obj.compiled_properties.get() { if let Some(compiled_props) = schema.obj.compiled_properties.get() {
@ -772,7 +763,10 @@ impl Merger {
if !parent_type.lookup_fields.is_empty() { if !parent_type.lookup_fields.is_empty() {
let mut lookup_complete = true; let mut lookup_complete = true;
for column in &parent_type.lookup_fields { for column in &parent_type.lookup_fields {
match entity_fields.get(column) { let val = entity_fields.get(column).or_else(|| {
parent_type.field_defaults.get(column)
});
match val {
Some(Value::Null) | None => { Some(Value::Null) | None => {
lookup_complete = false; lookup_complete = false;
break; break;
@ -785,7 +779,7 @@ impl Merger {
} }
} }
if lookup_complete { if lookup_complete {
lookup_satisfied_keys.push(&parent_type.lookup_fields); lookup_satisfied_keys.push((&parent_type.lookup_fields, parent_type));
} }
} }
} }
@ -823,10 +817,13 @@ impl Merger {
where_parts.push(format!("t1.id = {}", Self::quote_literal(id))); where_parts.push(format!("t1.id = {}", Self::quote_literal(id)));
} }
for lookup_fields in lookup_satisfied_keys { for (lookup_fields, parent_type) in lookup_satisfied_keys {
let mut lookup_predicates = Vec::new(); let mut lookup_predicates = Vec::new();
for column in lookup_fields { for column in lookup_fields {
let val = entity_fields.get(column).unwrap_or(&Value::Null); let val = entity_fields
.get(column)
.or_else(|| parent_type.field_defaults.get(column))
.unwrap_or(&Value::Null);
if column == "type" { if column == "type" {
lookup_predicates.push(format!("t1.\"{}\" = {}", column, Self::quote_literal(val))); lookup_predicates.push(format!("t1.\"{}\" = {}", column, Self::quote_literal(val)));
} else { } else {