checkpoint

This commit is contained in:
2026-04-09 19:55:35 -04:00
parent 5f45df6c11
commit 3cca5ef2d5
3 changed files with 120 additions and 8 deletions

View File

@ -1669,7 +1669,118 @@
"success": true,
"sql": [
[
"FIX ME"
"(SELECT jsonb_strip_nulls((SELECT jsonb_build_object(",
" 'addresses', (SELECT COALESCE(jsonb_agg(jsonb_build_object(",
" 'archived', entity_5.archived,",
" 'created_at', entity_5.created_at,",
" 'id', entity_5.id,",
" 'is_primary', contact_3.is_primary,",
" 'target', (SELECT jsonb_build_object(",
" 'archived', entity_7.archived,",
" 'city', address_6.city,",
" 'created_at', entity_7.created_at,",
" 'id', entity_7.id,",
" 'type', entity_7.type",
" )",
" FROM agreego.address address_6",
" JOIN agreego.entity entity_7 ON entity_7.id = address_6.id",
" WHERE NOT entity_7.archived AND relationship_4.target_id = entity_7.id),",
" 'type', entity_5.type",
" )), '[]'::jsonb)",
" FROM agreego.contact contact_3",
" JOIN agreego.relationship relationship_4 ON relationship_4.id = contact_3.id",
" JOIN agreego.entity entity_5 ON entity_5.id = relationship_4.id",
" WHERE NOT entity_5.archived AND relationship_4.target_type = 'address' AND relationship_4.source_id = entity_2.id),",
" 'archived', entity_2.archived,",
" 'contacts', (SELECT COALESCE(jsonb_agg(jsonb_build_object(",
" 'archived', entity_10.archived,",
" 'created_at', entity_10.created_at,",
" 'id', entity_10.id,",
" 'is_primary', contact_8.is_primary,",
" 'target', CASE WHEN entity_10.target_type = 'address' THEN ((SELECT jsonb_build_object(",
" 'archived', entity_12.archived,",
" 'city', address_11.city,",
" 'created_at', entity_12.created_at,",
" 'id', entity_12.id,",
" 'type', entity_12.type",
" )",
" FROM agreego.address address_11",
" JOIN agreego.entity entity_12 ON entity_12.id = address_11.id",
" WHERE NOT entity_12.archived AND relationship_9.target_id = entity_12.id)) WHEN entity_10.target_type = 'email_address' THEN ((SELECT jsonb_build_object(",
" 'address', email_address_13.address,",
" 'archived', entity_14.archived,",
" 'created_at', entity_14.created_at,",
" 'id', entity_14.id,",
" 'type', entity_14.type",
" )",
" FROM agreego.email_address email_address_13",
" JOIN agreego.entity entity_14 ON entity_14.id = email_address_13.id",
" WHERE NOT entity_14.archived AND relationship_9.target_id = entity_14.id)) WHEN entity_10.target_type = 'phone_number' THEN ((SELECT jsonb_build_object(",
" 'archived', entity_16.archived,",
" 'created_at', entity_16.created_at,",
" 'id', entity_16.id,",
" 'number', phone_number_15.number,",
" 'type', entity_16.type",
" )",
" FROM agreego.phone_number phone_number_15",
" JOIN agreego.entity entity_16 ON entity_16.id = phone_number_15.id",
" WHERE NOT entity_16.archived AND relationship_9.target_id = entity_16.id)) ELSE NULL END,",
" 'type', entity_10.type",
" )), '[]'::jsonb)",
" FROM agreego.contact contact_8",
" JOIN agreego.relationship relationship_9 ON relationship_9.id = contact_8.id",
" JOIN agreego.entity entity_10 ON entity_10.id = relationship_9.id",
" WHERE NOT entity_10.archived AND relationship_9.source_id = entity_2.id),",
" 'created_at', entity_2.created_at,",
" 'email_addresses', (SELECT COALESCE(jsonb_agg(jsonb_build_object(",
" 'archived', entity_19.archived,",
" 'created_at', entity_19.created_at,",
" 'id', entity_19.id,",
" 'is_primary', contact_17.is_primary,",
" 'target', (SELECT jsonb_build_object(",
" 'address', email_address_20.address,",
" 'archived', entity_21.archived,",
" 'created_at', entity_21.created_at,",
" 'id', entity_21.id,",
" 'type', entity_21.type",
" )",
" FROM agreego.email_address email_address_20",
" JOIN agreego.entity entity_21 ON entity_21.id = email_address_20.id",
" WHERE NOT entity_21.archived AND relationship_18.target_id = entity_21.id),",
" 'type', entity_19.type",
" )), '[]'::jsonb)",
" FROM agreego.contact contact_17",
" JOIN agreego.relationship relationship_18 ON relationship_18.id = contact_17.id",
" JOIN agreego.entity entity_19 ON entity_19.id = relationship_18.id",
" WHERE NOT entity_19.archived AND relationship_18.target_type = 'email_address' AND relationship_18.source_id = entity_2.id),",
" 'id', entity_2.id,",
" 'name', organization_1.name,",
" 'phone_numbers', (SELECT COALESCE(jsonb_agg(jsonb_build_object(",
" 'archived', entity_24.archived,",
" 'created_at', entity_24.created_at,",
" 'id', entity_24.id,",
" 'is_primary', contact_22.is_primary,",
" 'target', (SELECT jsonb_build_object(",
" 'archived', entity_26.archived,",
" 'created_at', entity_26.created_at,",
" 'id', entity_26.id,",
" 'number', phone_number_25.number,",
" 'type', entity_26.type",
" )",
" FROM agreego.phone_number phone_number_25",
" JOIN agreego.entity entity_26 ON entity_26.id = phone_number_25.id",
" WHERE NOT entity_26.archived AND relationship_23.target_id = entity_26.id),",
" 'type', entity_24.type",
" )), '[]'::jsonb)",
" FROM agreego.contact contact_22",
" JOIN agreego.relationship relationship_23 ON relationship_23.id = contact_22.id",
" JOIN agreego.entity entity_24 ON entity_24.id = relationship_23.id",
" WHERE NOT entity_24.archived AND relationship_23.target_type = 'phone_number' AND relationship_23.source_id = entity_2.id),",
" 'type', entity_2.type",
")))",
"FROM agreego.organization organization_1",
"JOIN agreego.entity entity_2 ON entity_2.id = organization_1.id",
"WHERE NOT entity_2.archived)"
]
]
}

View File

@ -551,10 +551,6 @@ impl Schema {
return;
}
if let Some(id) = &self.obj.id {
println!("[DEBUG POLYMORPHISM] ID: {}, Strategy: {}, Options: {:?}", id, strategy, options);
}
if !options.is_empty() {
let _ = self.obj.compiled_discriminator.set(strategy);
let _ = self.obj.compiled_options.set(options);

View File

@ -102,7 +102,11 @@ impl<'a> Compiler<'a> {
let mut resolved_type = None;
if let Some(family_target) = node.schema.obj.family.as_ref() {
resolved_type = self.db.types.get(family_target);
let base_type_name = family_target
.split('.')
.next_back()
.unwrap_or(family_target);
resolved_type = self.db.types.get(base_type_name);
} else if let Some(base_type_name) = node.schema.obj.identifier() {
resolved_type = self.db.types.get(&base_type_name);
}
@ -221,7 +225,6 @@ impl<'a> Compiler<'a> {
}
let options = node.schema.obj.compiled_options.get();
println!("[DEBUG QUERYER] Evaluating node. Target family: {:?}, disc: {:?}, options: {:?}", node.schema.obj.family, disc, options);
if options.is_none() {
return Ok(select_args);
}
@ -352,7 +355,9 @@ impl<'a> Compiler<'a> {
) -> Result<Vec<String>, String> {
let mut select_args = Vec::new();
let grouped_fields = r#type.grouped_fields.as_ref().and_then(|v| v.as_object());
let merged_props = node.schema.obj.compiled_properties.get().unwrap();
let default_props = std::collections::BTreeMap::new();
let merged_props = node.schema.obj.compiled_properties.get().unwrap_or(&default_props);
let mut sorted_keys: Vec<&String> = merged_props.keys().collect();
sorted_keys.sort();