Fossil SCM

In a /timeline with me=AAA and you=BBB and rel, omit nodes that are not ancestors of BBB. This helps to better convey the changes from AAA to BBB.

drh 2024-12-21 22:48 trunk
Commit 54e4222237ad4f6d418f61fcb1cd584e4e37506a27221604a648bc9f257dd600
1 file changed +28 -3
+28 -3
--- src/timeline.c
+++ src/timeline.c
@@ -2207,10 +2207,12 @@
22072207
PathNode *p = 0;
22082208
const char *zFrom = 0;
22092209
const char *zTo = 0;
22102210
Blob ins;
22112211
int nNodeOnPath = 0;
2212
+ int commonAncs = 0; /* Common ancestors of me_rid and you_rid. */
2213
+ int earlierRid = 0, laterRid = 0;
22122214
22132215
if( from_rid && to_rid ){
22142216
if( from_to_mode==0 ){
22152217
p = path_shortest(from_rid, to_rid, noMerge, 0, 0);
22162218
}else if( from_to_mode==1 ){
@@ -2219,15 +2221,25 @@
22192221
p = path_shortest(to_rid, from_rid, 0, 1, 0);
22202222
}
22212223
zFrom = P("from");
22222224
zTo = zTo2 ? zTo2 : P("to");
22232225
}else{
2224
- if( path_common_ancestor(me_rid, you_rid) ){
2226
+ commonAncs = path_common_ancestor(me_rid, you_rid);
2227
+ if( commonAncs!=0 ){
22252228
p = path_first();
22262229
}
2227
- zFrom = P("me");
2228
- zTo = P("you");
2230
+ if( commonAncs==you_rid ){
2231
+ zFrom = P("you");
2232
+ zTo = P("me");
2233
+ earlierRid = you_rid;
2234
+ laterRid = me_rid;
2235
+ }else{
2236
+ zFrom = P("me");
2237
+ zTo = P("you");
2238
+ earlierRid = me_rid;
2239
+ laterRid = you_rid;
2240
+ }
22292241
}
22302242
blob_init(&ins, 0, 0);
22312243
db_multi_exec(
22322244
"CREATE TABLE IF NOT EXISTS temp.pathnode(x INTEGER PRIMARY KEY);"
22332245
);
@@ -2266,10 +2278,23 @@
22662278
" SELECT childid FROM cherrypick WHERE parentid IN pathnode;"
22672279
);
22682280
}
22692281
}
22702282
db_multi_exec("INSERT OR IGNORE INTO pathnode SELECT x FROM related");
2283
+ if( earlierRid && laterRid && commonAncs==earlierRid ){
2284
+ /* On a query with me=XXX, you=YYY, and rel, omit all nodes that
2285
+ ** are not ancestors of either XXX or YYY, as those nodes tend to
2286
+ ** be extraneous */
2287
+ db_multi_exec(
2288
+ "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY)"
2289
+ );
2290
+ compute_ancestors(laterRid, 0, 0, earlierRid);
2291
+ db_multi_exec(
2292
+ "DELETE FROM related WHERE x NOT IN ok;"
2293
+ "DELETE FROM pathnode WHERE x NOT IN ok;"
2294
+ );
2295
+ }
22712296
}
22722297
blob_append_sql(&sql, " AND event.objid IN pathnode");
22732298
if( zChng && zChng[0] ){
22742299
db_multi_exec(
22752300
"DELETE FROM pathnode "
22762301
--- src/timeline.c
+++ src/timeline.c
@@ -2207,10 +2207,12 @@
2207 PathNode *p = 0;
2208 const char *zFrom = 0;
2209 const char *zTo = 0;
2210 Blob ins;
2211 int nNodeOnPath = 0;
 
 
2212
2213 if( from_rid && to_rid ){
2214 if( from_to_mode==0 ){
2215 p = path_shortest(from_rid, to_rid, noMerge, 0, 0);
2216 }else if( from_to_mode==1 ){
@@ -2219,15 +2221,25 @@
2219 p = path_shortest(to_rid, from_rid, 0, 1, 0);
2220 }
2221 zFrom = P("from");
2222 zTo = zTo2 ? zTo2 : P("to");
2223 }else{
2224 if( path_common_ancestor(me_rid, you_rid) ){
 
2225 p = path_first();
2226 }
2227 zFrom = P("me");
2228 zTo = P("you");
 
 
 
 
 
 
 
 
 
2229 }
2230 blob_init(&ins, 0, 0);
2231 db_multi_exec(
2232 "CREATE TABLE IF NOT EXISTS temp.pathnode(x INTEGER PRIMARY KEY);"
2233 );
@@ -2266,10 +2278,23 @@
2266 " SELECT childid FROM cherrypick WHERE parentid IN pathnode;"
2267 );
2268 }
2269 }
2270 db_multi_exec("INSERT OR IGNORE INTO pathnode SELECT x FROM related");
 
 
 
 
 
 
 
 
 
 
 
 
 
2271 }
2272 blob_append_sql(&sql, " AND event.objid IN pathnode");
2273 if( zChng && zChng[0] ){
2274 db_multi_exec(
2275 "DELETE FROM pathnode "
2276
--- src/timeline.c
+++ src/timeline.c
@@ -2207,10 +2207,12 @@
2207 PathNode *p = 0;
2208 const char *zFrom = 0;
2209 const char *zTo = 0;
2210 Blob ins;
2211 int nNodeOnPath = 0;
2212 int commonAncs = 0; /* Common ancestors of me_rid and you_rid. */
2213 int earlierRid = 0, laterRid = 0;
2214
2215 if( from_rid && to_rid ){
2216 if( from_to_mode==0 ){
2217 p = path_shortest(from_rid, to_rid, noMerge, 0, 0);
2218 }else if( from_to_mode==1 ){
@@ -2219,15 +2221,25 @@
2221 p = path_shortest(to_rid, from_rid, 0, 1, 0);
2222 }
2223 zFrom = P("from");
2224 zTo = zTo2 ? zTo2 : P("to");
2225 }else{
2226 commonAncs = path_common_ancestor(me_rid, you_rid);
2227 if( commonAncs!=0 ){
2228 p = path_first();
2229 }
2230 if( commonAncs==you_rid ){
2231 zFrom = P("you");
2232 zTo = P("me");
2233 earlierRid = you_rid;
2234 laterRid = me_rid;
2235 }else{
2236 zFrom = P("me");
2237 zTo = P("you");
2238 earlierRid = me_rid;
2239 laterRid = you_rid;
2240 }
2241 }
2242 blob_init(&ins, 0, 0);
2243 db_multi_exec(
2244 "CREATE TABLE IF NOT EXISTS temp.pathnode(x INTEGER PRIMARY KEY);"
2245 );
@@ -2266,10 +2278,23 @@
2278 " SELECT childid FROM cherrypick WHERE parentid IN pathnode;"
2279 );
2280 }
2281 }
2282 db_multi_exec("INSERT OR IGNORE INTO pathnode SELECT x FROM related");
2283 if( earlierRid && laterRid && commonAncs==earlierRid ){
2284 /* On a query with me=XXX, you=YYY, and rel, omit all nodes that
2285 ** are not ancestors of either XXX or YYY, as those nodes tend to
2286 ** be extraneous */
2287 db_multi_exec(
2288 "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY)"
2289 );
2290 compute_ancestors(laterRid, 0, 0, earlierRid);
2291 db_multi_exec(
2292 "DELETE FROM related WHERE x NOT IN ok;"
2293 "DELETE FROM pathnode WHERE x NOT IN ok;"
2294 );
2295 }
2296 }
2297 blob_append_sql(&sql, " AND event.objid IN pathnode");
2298 if( zChng && zChng[0] ){
2299 db_multi_exec(
2300 "DELETE FROM pathnode "
2301

Keyboard Shortcuts

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