diff --git a/crates/omnigraph/src/table_store.rs b/crates/omnigraph/src/table_store.rs index 460fa34..a6a6d4b 100644 --- a/crates/omnigraph/src/table_store.rs +++ b/crates/omnigraph/src/table_store.rs @@ -379,19 +379,13 @@ impl TableStore { column_name )) })?; - if let Some(uri) = blob.uri() { - builder - .push_uri(uri) - .map_err(|e| OmniError::Lance(e.to_string()))?; - } else { - builder - .push_bytes( - blob.read() - .await - .map_err(|e| OmniError::Lance(e.to_string()))?, - ) - .map_err(|e| OmniError::Lance(e.to_string()))?; - } + builder + .push_bytes( + blob.read() + .await + .map_err(|e| OmniError::Lance(e.to_string()))?, + ) + .map_err(|e| OmniError::Lance(e.to_string()))?; } if files.next().is_some() { diff --git a/crates/omnigraph/tests/branching.rs b/crates/omnigraph/tests/branching.rs index 07c846d..4c79595 100644 --- a/crates/omnigraph/tests/branching.rs +++ b/crates/omnigraph/tests/branching.rs @@ -388,6 +388,55 @@ async fn branch_merge_with_blob_columns_preserves_blob_data() { assert_eq!(&main_doc_bytes[..], b"Main"); } +#[tokio::test] +async fn branch_merge_with_external_blob_uri_materializes_payload() { + let dir = tempfile::tempdir().unwrap(); + let uri = dir.path().to_str().unwrap(); + let external_dir = tempfile::tempdir().unwrap(); + let external_path = external_dir.path().join("external.txt"); + fs::write(&external_path, b"External").unwrap(); + let external_uri = format!("file://{}", external_path.display()); + + let mut main = Omnigraph::init(uri, BLOB_SCHEMA).await.unwrap(); + load_jsonl(&mut main, "", LoadMode::Overwrite) + .await + .unwrap(); + main.branch_create("feature").await.unwrap(); + + let mut feature = Omnigraph::open(uri).await.unwrap(); + load_jsonl( + &mut main, + "{\"type\":\"Document\",\"data\":{\"title\":\"main-doc\",\"content\":\"base64:TWFpbg==\",\"note\":\"main\"}}", + LoadMode::Append, + ) + .await + .unwrap(); + + let external_data = serde_json::json!({ + "type": "Document", + "data": { + "title": "external", + "content": external_uri, + "note": "branch insert", + } + }) + .to_string(); + feature + .load("feature", &external_data, LoadMode::Append) + .await + .unwrap(); + + let outcome = main.branch_merge("feature", "main").await.unwrap(); + assert_eq!(outcome, MergeOutcome::Merged); + + let external = main + .read_blob("Document", "external", "content") + .await + .unwrap(); + let external_bytes = external.read().await.unwrap(); + assert_eq!(&external_bytes[..], b"External"); +} + #[tokio::test] async fn branch_merge_applies_node_insert_to_main() { let dir = tempfile::tempdir().unwrap();