Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | For the bt=Y query parameter in /timeline that is used in conjunction with p=X, if Y is a tag then search backwards in time for Y beginning with X. Fix for ticket [ed62a4d35332595a]. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
507ebd8b3f37e5dfcb675bf59ef2ae53 |
User & Date: | drh 2023-03-24 15:22:33 |
Context
2023-03-26
| ||
23:54 | Do not render "Check-ins" button within a submenu of /tktview, /tkthistory, /tkttimeline and /info pages, unless a user actually has a [/doc/trunk/www/caps/ref.html#o|capability to read check-ins]. This should prevent confusion and save some screen space. ... (check-in: c04c814e10 user: george tags: trunk) | |
2023-03-24
| ||
15:22 | For the bt=Y query parameter in /timeline that is used in conjunction with p=X, if Y is a tag then search backwards in time for Y beginning with X. Fix for ticket [ed62a4d35332595a]. ... (check-in: 507ebd8b3f user: drh tags: trunk) | |
10:21 | Comment and whitespace tweaks ... (check-in: 81c30ab97d user: wyoung tags: trunk) | |
Changes
Changes to src/name.c.
︙ | ︙ | |||
241 242 243 244 245 246 247 248 249 250 251 252 253 254 | " AND event.objid=tagxref.rid" " AND event.type GLOB '%q'" " ORDER BY event.mtime DESC LIMIT 1" ") LIMIT 1;", zType, zTag, zTag, zType ); } /* ** Return true if character "c" is a character that might have been ** accidentally appended to the end of a URL. */ static int is_trailing_punct(char c){ return c=='.' || c=='_' || c==')' || c=='>' || c=='!' || c=='?' || c==','; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 | " AND event.objid=tagxref.rid" " AND event.type GLOB '%q'" " ORDER BY event.mtime DESC LIMIT 1" ") LIMIT 1;", zType, zTag, zTag, zType ); } /* ** Find the RID for a check-in that is the most recent check-in with ** tag zTag that occurs on or prior to rDate. ** ** See also the performance note on most_recent_event_with_tag() which ** applies to this routine too. */ int most_recent_checkin_with_tag_before_date(const char *zTag, double rLimit){ Stmt s; int rid = 0; if( strncmp(zTag, "tag:", 4)==0 ) zTag += 4; db_prepare(&s, "SELECT objid FROM (" /* Q1: Begin by looking for the tag in the 30 most recent events */ "SELECT objid" " FROM (SELECT * FROM event WHERE mtime<=:datelimit" " ORDER BY mtime DESC LIMIT 30) AS ex" " WHERE type='ci'" " AND EXISTS(SELECT 1 FROM tagxref, tag" " WHERE tag.tagname='sym-%q'" " AND tagxref.tagid=tag.tagid" " AND tagxref.tagtype>0" " AND tagxref.rid=ex.objid)" " ORDER BY mtime DESC LIMIT 1" ") UNION ALL SELECT * FROM (" /* Q2: If the tag is not found in the 30 most recent events, then using ** the tagxref table to index for the tag */ "SELECT event.objid" " FROM tag, tagxref, event" " WHERE tag.tagname='sym-%q'" " AND tagxref.tagid=tag.tagid" " AND tagxref.tagtype>0" " AND event.objid=tagxref.rid" " AND event.type='ci'" " AND event.mtime<=:datelimit" " ORDER BY event.mtime DESC LIMIT 1" ") LIMIT 1;", zTag, zTag ); db_bind_double(&s, ":datelimit", rLimit); if( db_step(&s)==SQLITE_ROW ){ rid = db_column_int(&s,0); } db_finalize(&s); return rid; } /* ** Return true if character "c" is a character that might have been ** accidentally appended to the end of a URL. */ static int is_trailing_punct(char c){ return c=='.' || c=='_' || c==')' || c=='>' || c=='!' || c=='?' || c==','; |
︙ | ︙ |
Changes to src/timeline.c.
︙ | ︙ | |||
2114 2115 2116 2117 2118 2119 2120 2121 | if( nd>0 || p_rid==0 ){ blob_appendf(&desc, "%d descendant%s", nd,(1==nd)?"":"s"); } if( useDividers && !selectedRid ) selectedRid = d_rid; db_multi_exec("DELETE FROM ok"); } if( p_rid ){ zBackTo = P("bt"); | > > > > > > > | > > | 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 | if( nd>0 || p_rid==0 ){ blob_appendf(&desc, "%d descendant%s", nd,(1==nd)?"":"s"); } if( useDividers && !selectedRid ) selectedRid = d_rid; db_multi_exec("DELETE FROM ok"); } if( p_rid ){ ridBackTo = 0; zBackTo = P("bt"); if( zBackTo ){ double rDateLimit = db_double(0.0, "SELECT mtime FROM event WHERE objid=%d", p_rid); ridBackTo = most_recent_checkin_with_tag_before_date(zBackTo, rDateLimit); if( ridBackTo==0 ){ ridBackTo = name_to_typed_rid(zBackTo,"ci"); } } if( ridBackTo && !haveParameterN ) nEntry = 0; compute_ancestors(p_rid, nEntry==0 ? 0 : nEntry+1, 0, ridBackTo); np = db_int(0, "SELECT count(*)-1 FROM ok"); if( np>0 || nd==0 ){ if( nd>0 ) blob_appendf(&desc, " and "); blob_appendf(&desc, "%d ancestor%s", np, (1==np)?"":"s"); db_multi_exec("%s", blob_sql_text(&sql)); |
︙ | ︙ |