Fossil SCM

Bug fix in the compute_ues_files() subroutine, found when a query from the Meta AI spider caused the server to abort with an invalid SQL error.

drh 2026-04-19 10:28 UTC trunk
Commit f2fa98329d31f8461cd121e2e9bf39160c408107055f4c57be1748b54b5286bd
1 file changed +5 -1
--- src/descendants.c
+++ src/descendants.c
@@ -679,10 +679,11 @@
679679
Bag pending;
680680
Blob ins = BLOB_INITIALIZER;
681681
int nIns = 0;
682682
Stmt q;
683683
int rid;
684
+ int nTerm = 0;
684685
685686
bag_init(&seen);
686687
bag_init(&pending);
687688
blob_append_sql(&ins, "INSERT OR IGNORE INTO \"%w\" VALUES", zTab);
688689
db_prepare(&q, "SELECT mid FROM mlink WHERE fid=%d", fid);
@@ -689,19 +690,21 @@
689690
while( db_step(&q)==SQLITE_ROW ){
690691
int mid = db_column_int(&q, 0);
691692
bag_insert(&pending, mid);
692693
bag_insert(&seen, mid);
693694
uses_file_append_term(&ins, &nIns, mid);
695
+ nTerm++;
694696
}
695697
db_finalize(&q);
696698
697699
db_prepare(&q, "SELECT mid FROM mlink WHERE pid=%d", fid);
698700
while( db_step(&q)==SQLITE_ROW ){
699701
int mid = db_column_int(&q, 0);
700702
bag_insert(&seen, mid);
701703
if( usesFlags & USESFILE_DELETE ){
702704
uses_file_append_term(&ins, &nIns, mid);
705
+ nTerm++;
703706
}
704707
}
705708
db_finalize(&q);
706709
db_prepare(&q, "SELECT cid FROM plink WHERE pid=:rid AND isprim");
707710
@@ -712,14 +715,15 @@
712715
int mid = db_column_int(&q, 0);
713716
if( bag_find(&seen, mid) ) continue;
714717
bag_insert(&seen, mid);
715718
bag_insert(&pending, mid);
716719
uses_file_append_term(&ins, &nIns, mid);
720
+ nTerm++;
717721
}
718722
db_reset(&q);
719723
}
720724
db_finalize(&q);
721
- db_exec_sql(blob_str(&ins));
725
+ if( nTerm>0 ) db_exec_sql(blob_str(&ins));
722726
blob_reset(&ins);
723727
bag_clear(&seen);
724728
bag_clear(&pending);
725729
}
726730
--- src/descendants.c
+++ src/descendants.c
@@ -679,10 +679,11 @@
679 Bag pending;
680 Blob ins = BLOB_INITIALIZER;
681 int nIns = 0;
682 Stmt q;
683 int rid;
 
684
685 bag_init(&seen);
686 bag_init(&pending);
687 blob_append_sql(&ins, "INSERT OR IGNORE INTO \"%w\" VALUES", zTab);
688 db_prepare(&q, "SELECT mid FROM mlink WHERE fid=%d", fid);
@@ -689,19 +690,21 @@
689 while( db_step(&q)==SQLITE_ROW ){
690 int mid = db_column_int(&q, 0);
691 bag_insert(&pending, mid);
692 bag_insert(&seen, mid);
693 uses_file_append_term(&ins, &nIns, mid);
 
694 }
695 db_finalize(&q);
696
697 db_prepare(&q, "SELECT mid FROM mlink WHERE pid=%d", fid);
698 while( db_step(&q)==SQLITE_ROW ){
699 int mid = db_column_int(&q, 0);
700 bag_insert(&seen, mid);
701 if( usesFlags & USESFILE_DELETE ){
702 uses_file_append_term(&ins, &nIns, mid);
 
703 }
704 }
705 db_finalize(&q);
706 db_prepare(&q, "SELECT cid FROM plink WHERE pid=:rid AND isprim");
707
@@ -712,14 +715,15 @@
712 int mid = db_column_int(&q, 0);
713 if( bag_find(&seen, mid) ) continue;
714 bag_insert(&seen, mid);
715 bag_insert(&pending, mid);
716 uses_file_append_term(&ins, &nIns, mid);
 
717 }
718 db_reset(&q);
719 }
720 db_finalize(&q);
721 db_exec_sql(blob_str(&ins));
722 blob_reset(&ins);
723 bag_clear(&seen);
724 bag_clear(&pending);
725 }
726
--- src/descendants.c
+++ src/descendants.c
@@ -679,10 +679,11 @@
679 Bag pending;
680 Blob ins = BLOB_INITIALIZER;
681 int nIns = 0;
682 Stmt q;
683 int rid;
684 int nTerm = 0;
685
686 bag_init(&seen);
687 bag_init(&pending);
688 blob_append_sql(&ins, "INSERT OR IGNORE INTO \"%w\" VALUES", zTab);
689 db_prepare(&q, "SELECT mid FROM mlink WHERE fid=%d", fid);
@@ -689,19 +690,21 @@
690 while( db_step(&q)==SQLITE_ROW ){
691 int mid = db_column_int(&q, 0);
692 bag_insert(&pending, mid);
693 bag_insert(&seen, mid);
694 uses_file_append_term(&ins, &nIns, mid);
695 nTerm++;
696 }
697 db_finalize(&q);
698
699 db_prepare(&q, "SELECT mid FROM mlink WHERE pid=%d", fid);
700 while( db_step(&q)==SQLITE_ROW ){
701 int mid = db_column_int(&q, 0);
702 bag_insert(&seen, mid);
703 if( usesFlags & USESFILE_DELETE ){
704 uses_file_append_term(&ins, &nIns, mid);
705 nTerm++;
706 }
707 }
708 db_finalize(&q);
709 db_prepare(&q, "SELECT cid FROM plink WHERE pid=:rid AND isprim");
710
@@ -712,14 +715,15 @@
715 int mid = db_column_int(&q, 0);
716 if( bag_find(&seen, mid) ) continue;
717 bag_insert(&seen, mid);
718 bag_insert(&pending, mid);
719 uses_file_append_term(&ins, &nIns, mid);
720 nTerm++;
721 }
722 db_reset(&q);
723 }
724 db_finalize(&q);
725 if( nTerm>0 ) db_exec_sql(blob_str(&ins));
726 blob_reset(&ins);
727 bag_clear(&seen);
728 bag_clear(&pending);
729 }
730

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button