Skip to content

Commit ec55952

Browse files
committed
feat(store): add note_date column, date range query, update insert_file signature
Add note_date INTEGER column to files table via fire-and-forget migration. Extend insert_file with note_date parameter, update all FileRecord construction sites to include the new field, and add get_files_in_date_range + count_files_with_dates query methods. All 141 call sites across 10 files updated.
1 parent 268e0e0 commit ec55952

10 files changed

Lines changed: 264 additions & 94 deletions

File tree

src/context.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -758,10 +758,10 @@ mod tests {
758758
let d1 = generate_docid("note.md");
759759
let d2 = generate_docid("other.md");
760760
store
761-
.insert_file("note.md", "h1", 100, &["rust".into()], &d1, None)
761+
.insert_file("note.md", "h1", 100, &["rust".into()], &d1, None, None)
762762
.unwrap();
763763
store
764-
.insert_file("other.md", "h2", 100, &[], &d2, None)
764+
.insert_file("other.md", "h2", 100, &[], &d2, None, None)
765765
.unwrap();
766766

767767
let f1 = store.get_file("note.md").unwrap().unwrap().id;
@@ -808,7 +808,7 @@ mod tests {
808808
fn test_read_file_not_on_disk() {
809809
let (_tmp, store, root) = setup_vault();
810810
store
811-
.insert_file("ghost.md", "h3", 100, &[], "ggg333", None)
811+
.insert_file("ghost.md", "h3", 100, &[], "ggg333", None, None)
812812
.unwrap();
813813
let params = ContextParams {
814814
store: &store,
@@ -906,10 +906,11 @@ mod tests {
906906
&["person".into()],
907907
"aaa111",
908908
None,
909+
None,
909910
)
910911
.unwrap();
911912
let f2 = store
912-
.insert_file("daily.md", "h2", 100, &[], "bbb222", None)
913+
.insert_file("daily.md", "h2", 100, &[], "bbb222", None, None)
913914
.unwrap();
914915
store.insert_edge(f2, f1, "mention").unwrap();
915916
store
@@ -969,10 +970,11 @@ mod tests {
969970
&["project".into()],
970971
"aaa111",
971972
None,
973+
None,
972974
)
973975
.unwrap();
974976
let f2 = store
975-
.insert_file("01-Projects/child.md", "h2", 100, &[], "bbb222", None)
977+
.insert_file("01-Projects/child.md", "h2", 100, &[], "bbb222", None, None)
976978
.unwrap();
977979
store.insert_edge(f2, f1, "wikilink").unwrap();
978980
store.insert_edge(f1, f2, "wikilink").unwrap();
@@ -1019,7 +1021,7 @@ mod tests {
10191021

10201022
let store = Store::open_memory().unwrap();
10211023
store
1022-
.insert_file("result.md", "h1", 100, &["topic".into()], "aaa111", None)
1024+
.insert_file("result.md", "h1", 100, &["topic".into()], "aaa111", None, None)
10231025
.unwrap();
10241026

10251027
let params = ContextParams {
@@ -1052,7 +1054,7 @@ mod tests {
10521054

10531055
let store = Store::open_memory().unwrap();
10541056
store
1055-
.insert_file("long.md", "h1", 100, &[], "aaa111", None)
1057+
.insert_file("long.md", "h1", 100, &[], "aaa111", None, None)
10561058
.unwrap();
10571059

10581060
let params = ContextParams {
@@ -1085,10 +1087,10 @@ mod tests {
10851087

10861088
let store = Store::open_memory().unwrap();
10871089
let f1 = store
1088-
.insert_file("main.md", "h1", 100, &[], "aaa111", None)
1090+
.insert_file("main.md", "h1", 100, &[], "aaa111", None, None)
10891091
.unwrap();
10901092
let f2 = store
1091-
.insert_file("related.md", "h2", 100, &[], "bbb222", None)
1093+
.insert_file("related.md", "h2", 100, &[], "bbb222", None, None)
10921094
.unwrap();
10931095
store.insert_edge(f1, f2, "wikilink").unwrap();
10941096

@@ -1156,7 +1158,7 @@ mod tests {
11561158
let content = "# Person\n\n## Role\n\nEngineer\n\n## Interactions\n\nMet on 2026-03-26\n";
11571159
std::fs::write(root.join("person.md"), content).unwrap();
11581160
store
1159-
.insert_file("person.md", "hash", 100, &[], "per123", None)
1161+
.insert_file("person.md", "hash", 100, &[], "per123", None, None)
11601162
.unwrap();
11611163

11621164
let result = read_section(&store, &root, "person.md", "Interactions").unwrap();

src/fts.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ mod tests {
2828
&[],
2929
&generate_docid("notes/ticket.md"),
3030
None,
31+
None,
3132
)
3233
.unwrap();
3334

@@ -56,6 +57,7 @@ mod tests {
5657
&[],
5758
&generate_docid("notes/note.md"),
5859
None,
60+
None,
5961
)
6062
.unwrap();
6163

@@ -79,6 +81,7 @@ mod tests {
7981
&[],
8082
&generate_docid("notes/a.md"),
8183
None,
84+
None,
8285
)
8386
.unwrap();
8487
let file_id2 = store
@@ -89,6 +92,7 @@ mod tests {
8992
&[],
9093
&generate_docid("notes/b.md"),
9194
None,
95+
None,
9296
)
9397
.unwrap();
9498
let file_id3 = store
@@ -99,6 +103,7 @@ mod tests {
99103
&[],
100104
&generate_docid("notes/c.md"),
101105
None,
106+
None,
102107
)
103108
.unwrap();
104109

@@ -138,6 +143,7 @@ mod tests {
138143
&[],
139144
&generate_docid("notes/del.md"),
140145
None,
146+
None,
141147
)
142148
.unwrap();
143149

src/graph.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ mod tests {
218218
&["rust".into()],
219219
&generate_docid("seed.md"),
220220
None,
221+
None,
221222
)
222223
.unwrap();
223224
let f2 = store
@@ -228,6 +229,7 @@ mod tests {
228229
&["rust".into()],
229230
&generate_docid("linked.md"),
230231
None,
232+
None,
231233
)
232234
.unwrap();
233235
let _f3 = store
@@ -238,6 +240,7 @@ mod tests {
238240
&[],
239241
&generate_docid("unlinked.md"),
240242
None,
243+
None,
241244
)
242245
.unwrap();
243246

@@ -268,10 +271,10 @@ mod tests {
268271
fn test_graph_expand_skips_seeds() {
269272
let store = Store::open_memory().unwrap();
270273
let f1 = store
271-
.insert_file("a.md", "h1", 100, &[], &generate_docid("a.md"), None)
274+
.insert_file("a.md", "h1", 100, &[], &generate_docid("a.md"), None, None)
272275
.unwrap();
273276
let f2 = store
274-
.insert_file("b.md", "h2", 100, &[], &generate_docid("b.md"), None)
277+
.insert_file("b.md", "h2", 100, &[], &generate_docid("b.md"), None, None)
275278
.unwrap();
276279

277280
store.insert_edge(f1, f2, "wikilink").unwrap();
@@ -305,10 +308,10 @@ mod tests {
305308
fn test_graph_expand_multi_parent_takes_highest() {
306309
let store = Store::open_memory().unwrap();
307310
let f1 = store
308-
.insert_file("a.md", "h1", 100, &[], &generate_docid("a.md"), None)
311+
.insert_file("a.md", "h1", 100, &[], &generate_docid("a.md"), None, None)
309312
.unwrap();
310313
let f2 = store
311-
.insert_file("b.md", "h2", 100, &[], &generate_docid("b.md"), None)
314+
.insert_file("b.md", "h2", 100, &[], &generate_docid("b.md"), None, None)
312315
.unwrap();
313316
let f3 = store
314317
.insert_file(
@@ -318,6 +321,7 @@ mod tests {
318321
&[],
319322
&generate_docid("shared.md"),
320323
None,
324+
None,
321325
)
322326
.unwrap();
323327

@@ -360,7 +364,7 @@ mod tests {
360364
fn test_graph_expand_empty_graph() {
361365
let store = Store::open_memory().unwrap();
362366
let f1 = store
363-
.insert_file("a.md", "h1", 100, &[], "aaa111", None)
367+
.insert_file("a.md", "h1", 100, &[], "aaa111", None, None)
364368
.unwrap();
365369

366370
let seeds = vec![RankedResult {
@@ -387,6 +391,7 @@ mod tests {
387391
&["rust".into(), "cli".into()],
388392
&generate_docid("seed.md"),
389393
None,
394+
None,
390395
)
391396
.unwrap();
392397
let f2 = store
@@ -397,6 +402,7 @@ mod tests {
397402
&["rust".into()],
398403
&generate_docid("linked.md"),
399404
None,
405+
None,
400406
)
401407
.unwrap();
402408

src/health.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,13 @@ mod tests {
139139
let store = Store::open_memory().unwrap();
140140
// Insert files with edges to test orphan detection.
141141
let linked_id = store
142-
.insert_file("linked.md", "aaa111", 100, &[], "aaa111", None)
142+
.insert_file("linked.md", "aaa111", 100, &[], "aaa111", None, None)
143143
.unwrap();
144144
let orphan_id = store
145-
.insert_file("orphan.md", "bbb222", 100, &[], "bbb222", None)
145+
.insert_file("orphan.md", "bbb222", 100, &[], "bbb222", None, None)
146146
.unwrap();
147147
let _daily_id = store
148-
.insert_file("daily/2026-03-26.md", "ccc333", 100, &[], "ccc333", None)
148+
.insert_file("daily/2026-03-26.md", "ccc333", 100, &[], "ccc333", None, None)
149149
.unwrap();
150150
// Add edge: linked.md → orphan.md (both files are "connected")
151151
store.insert_edge(linked_id, orphan_id, "wikilink").unwrap();
@@ -169,13 +169,13 @@ mod tests {
169169
fn test_find_orphans_detects_isolated() {
170170
let store = Store::open_memory().unwrap();
171171
store
172-
.insert_file("connected.md", "h1", 100, &[], "d1", None)
172+
.insert_file("connected.md", "h1", 100, &[], "d1", None, None)
173173
.unwrap();
174174
let iso_id = store
175-
.insert_file("island.md", "h2", 100, &[], "d2", None)
175+
.insert_file("island.md", "h2", 100, &[], "d2", None, None)
176176
.unwrap();
177177
let other_id = store
178-
.insert_file("other.md", "h3", 100, &[], "d3", None)
178+
.insert_file("other.md", "h3", 100, &[], "d3", None, None)
179179
.unwrap();
180180
store.insert_edge(iso_id, other_id, "wikilink").unwrap();
181181

@@ -213,10 +213,10 @@ mod tests {
213213
fn test_generate_health_report() {
214214
let store = Store::open_memory().unwrap();
215215
store
216-
.insert_file("note.md", "h1", 100, &[], "d1", None)
216+
.insert_file("note.md", "h1", 100, &[], "d1", None, None)
217217
.unwrap();
218218
store
219-
.insert_file("00-Inbox/unsorted.md", "h2", 100, &[], "d2", None)
219+
.insert_file("00-Inbox/unsorted.md", "h2", 100, &[], "d2", None, None)
220220
.unwrap();
221221
store
222222
.insert_unresolved_link("note.md", "missing.md")

src/indexer.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ pub fn index_file(
351351
&tags,
352352
&docid,
353353
created_by.as_deref(),
354+
None,
354355
)?;
355356

356357
let mut next_vector_id: u64 = store.next_vector_id()?;
@@ -780,6 +781,7 @@ mod tests {
780781
&[],
781782
&generate_docid("note.md"),
782783
None,
784+
None,
783785
)
784786
.unwrap();
785787

@@ -811,6 +813,7 @@ mod tests {
811813
&[],
812814
&generate_docid("surviving.md"),
813815
None,
816+
None,
814817
)
815818
.unwrap();
816819
store
@@ -821,6 +824,7 @@ mod tests {
821824
&[],
822825
&generate_docid("deleted.md"),
823826
None,
827+
None,
824828
)
825829
.unwrap();
826830

@@ -864,13 +868,13 @@ mod tests {
864868

865869
let store = Store::open_memory().unwrap();
866870
let f_a = store
867-
.insert_file("a.md", "h1", 100, &[], "aaa111", None)
871+
.insert_file("a.md", "h1", 100, &[], "aaa111", None, None)
868872
.unwrap();
869873
let f_b = store
870-
.insert_file("b.md", "h2", 100, &[], "bbb222", None)
874+
.insert_file("b.md", "h2", 100, &[], "bbb222", None, None)
871875
.unwrap();
872876
let _f_c = store
873-
.insert_file("c.md", "h3", 100, &[], "ccc333", None)
877+
.insert_file("c.md", "h3", 100, &[], "ccc333", None, None)
874878
.unwrap();
875879

876880
let content_a = std::fs::read_to_string(root.join("a.md")).unwrap();
@@ -911,10 +915,10 @@ mod tests {
911915
fn test_people_mention_detection() {
912916
let store = Store::open_memory().unwrap();
913917
let person = store
914-
.insert_file("People/John Nelson.md", "h1", 100, &[], "aaa111", None)
918+
.insert_file("People/John Nelson.md", "h1", 100, &[], "aaa111", None, None)
915919
.unwrap();
916920
let note = store
917-
.insert_file("daily.md", "h2", 100, &[], "bbb222", None)
921+
.insert_file("daily.md", "h2", 100, &[], "bbb222", None, None)
918922
.unwrap();
919923

920924
let people = vec![(person, vec!["John Nelson".to_string()])];

src/links.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,7 @@ mod tests {
560560
&[],
561561
"aaa111",
562562
None,
563+
None,
563564
)
564565
.unwrap();
565566
store
@@ -570,6 +571,7 @@ mod tests {
570571
&[],
571572
"bbb222",
572573
None,
574+
None,
573575
)
574576
.unwrap();
575577

0 commit comments

Comments
 (0)