Fossil SCM

In is_a_leaf(), count_nonbranch_children(), and leaf_rebuild(), ensure that cancel tags are filtered out. This was discovered by LLM analysis of libfossil, which unsurprisingly shares these same queries.

stephan 2026-09-25 20:37 UTC trunk
Commit a822071af824a55cf3205919a928694980665558442e4bca3f247e75695749e1
1 file changed +12 -6
+12 -6
--- src/leaf.c
+++ src/leaf.c
@@ -35,13 +35,15 @@
3535
int rc;
3636
static const char zSql[] =
3737
@ SELECT 1 FROM plink
3838
@ WHERE pid=%d
3939
@ AND coalesce((SELECT value FROM tagxref
40
- @ WHERE tagid=%d AND rid=plink.pid), 'trunk')
40
+ @ WHERE tagid=%d AND rid=plink.pid
41
+ @ AND tagtype>0), 'trunk')
4142
@ =coalesce((SELECT value FROM tagxref
42
- @ WHERE tagid=%d AND rid=plink.cid), 'trunk')
43
+ @ WHERE tagid=%d AND rid=plink.cid
44
+ @ AND tagtype>0), 'trunk')
4345
;
4446
rc = db_int(0, zSql /*works-like:"%d,%d,%d"*/,
4547
rid, TAG_BRANCH, TAG_BRANCH);
4648
return rc==0;
4749
}
@@ -60,13 +62,15 @@
6062
static Stmt q;
6163
static const char zSql[] =
6264
@ SELECT count(*) FROM plink
6365
@ WHERE pid=:pid AND isprim
6466
@ AND coalesce((SELECT value FROM tagxref
65
- @ WHERE tagid=%d AND rid=plink.pid), 'trunk')
67
+ @ WHERE tagid=%d AND rid=plink.pid
68
+ @ AND tagtype>0), 'trunk')
6669
@ =coalesce((SELECT value FROM tagxref
67
- @ WHERE tagid=%d AND rid=plink.cid), 'trunk')
70
+ @ WHERE tagid=%d AND rid=plink.cid
71
+ @ AND tagtype>0), 'trunk')
6872
;
6973
db_static_prepare(&q, zSql /*works-like: "%d,%d"*/, TAG_BRANCH, TAG_BRANCH);
7074
db_bind_int(&q, ":pid", pid);
7175
if( db_step(&q)==SQLITE_ROW ){
7276
nNonBranch = db_column_int(&q, 0);
@@ -88,13 +92,15 @@
8892
"INSERT OR IGNORE INTO leaf"
8993
" SELECT cid FROM plink"
9094
" EXCEPT"
9195
" SELECT pid FROM plink"
9296
" WHERE coalesce((SELECT value FROM tagxref"
93
- " WHERE tagid=%d AND rid=plink.pid),'trunk')"
97
+ " WHERE tagid=%d AND rid=plink.pid"
98
+ " AND tagtype>0),'trunk')"
9499
" == coalesce((SELECT value FROM tagxref"
95
- " WHERE tagid=%d AND rid=plink.cid),'trunk')",
100
+ " WHERE tagid=%d AND rid=plink.cid"
101
+ " AND tagtype>0),'trunk')",
96102
TAG_BRANCH, TAG_BRANCH
97103
);
98104
}
99105
100106
/*
101107
--- src/leaf.c
+++ src/leaf.c
@@ -35,13 +35,15 @@
35 int rc;
36 static const char zSql[] =
37 @ SELECT 1 FROM plink
38 @ WHERE pid=%d
39 @ AND coalesce((SELECT value FROM tagxref
40 @ WHERE tagid=%d AND rid=plink.pid), 'trunk')
 
41 @ =coalesce((SELECT value FROM tagxref
42 @ WHERE tagid=%d AND rid=plink.cid), 'trunk')
 
43 ;
44 rc = db_int(0, zSql /*works-like:"%d,%d,%d"*/,
45 rid, TAG_BRANCH, TAG_BRANCH);
46 return rc==0;
47 }
@@ -60,13 +62,15 @@
60 static Stmt q;
61 static const char zSql[] =
62 @ SELECT count(*) FROM plink
63 @ WHERE pid=:pid AND isprim
64 @ AND coalesce((SELECT value FROM tagxref
65 @ WHERE tagid=%d AND rid=plink.pid), 'trunk')
 
66 @ =coalesce((SELECT value FROM tagxref
67 @ WHERE tagid=%d AND rid=plink.cid), 'trunk')
 
68 ;
69 db_static_prepare(&q, zSql /*works-like: "%d,%d"*/, TAG_BRANCH, TAG_BRANCH);
70 db_bind_int(&q, ":pid", pid);
71 if( db_step(&q)==SQLITE_ROW ){
72 nNonBranch = db_column_int(&q, 0);
@@ -88,13 +92,15 @@
88 "INSERT OR IGNORE INTO leaf"
89 " SELECT cid FROM plink"
90 " EXCEPT"
91 " SELECT pid FROM plink"
92 " WHERE coalesce((SELECT value FROM tagxref"
93 " WHERE tagid=%d AND rid=plink.pid),'trunk')"
 
94 " == coalesce((SELECT value FROM tagxref"
95 " WHERE tagid=%d AND rid=plink.cid),'trunk')",
 
96 TAG_BRANCH, TAG_BRANCH
97 );
98 }
99
100 /*
101
--- src/leaf.c
+++ src/leaf.c
@@ -35,13 +35,15 @@
35 int rc;
36 static const char zSql[] =
37 @ SELECT 1 FROM plink
38 @ WHERE pid=%d
39 @ AND coalesce((SELECT value FROM tagxref
40 @ WHERE tagid=%d AND rid=plink.pid
41 @ AND tagtype>0), 'trunk')
42 @ =coalesce((SELECT value FROM tagxref
43 @ WHERE tagid=%d AND rid=plink.cid
44 @ AND tagtype>0), 'trunk')
45 ;
46 rc = db_int(0, zSql /*works-like:"%d,%d,%d"*/,
47 rid, TAG_BRANCH, TAG_BRANCH);
48 return rc==0;
49 }
@@ -60,13 +62,15 @@
62 static Stmt q;
63 static const char zSql[] =
64 @ SELECT count(*) FROM plink
65 @ WHERE pid=:pid AND isprim
66 @ AND coalesce((SELECT value FROM tagxref
67 @ WHERE tagid=%d AND rid=plink.pid
68 @ AND tagtype>0), 'trunk')
69 @ =coalesce((SELECT value FROM tagxref
70 @ WHERE tagid=%d AND rid=plink.cid
71 @ AND tagtype>0), 'trunk')
72 ;
73 db_static_prepare(&q, zSql /*works-like: "%d,%d"*/, TAG_BRANCH, TAG_BRANCH);
74 db_bind_int(&q, ":pid", pid);
75 if( db_step(&q)==SQLITE_ROW ){
76 nNonBranch = db_column_int(&q, 0);
@@ -88,13 +92,15 @@
92 "INSERT OR IGNORE INTO leaf"
93 " SELECT cid FROM plink"
94 " EXCEPT"
95 " SELECT pid FROM plink"
96 " WHERE coalesce((SELECT value FROM tagxref"
97 " WHERE tagid=%d AND rid=plink.pid"
98 " AND tagtype>0),'trunk')"
99 " == coalesce((SELECT value FROM tagxref"
100 " WHERE tagid=%d AND rid=plink.cid"
101 " AND tagtype>0),'trunk')",
102 TAG_BRANCH, TAG_BRANCH
103 );
104 }
105
106 /*
107

Keyboard Shortcuts

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