Fossil SCM
Fix to the timeline display when using all of the r=, c=, and n= query parameters. Also: improvements to the (undocumented and unsupported) "showsql" query parameter used for debugging.
Commit
4005828845cd4017ba1c3e07d779ec7ab82277a0
Parent
858dcc2c1955be3…
1 file changed
+18
-13
+18
-13
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -1198,10 +1198,11 @@ | ||
| 1198 | 1198 | } |
| 1199 | 1199 | if( tagid>0 |
| 1200 | 1200 | && db_int(0,"SELECT count(*) FROM tagxref WHERE tagid=%d",tagid)<=nEntry |
| 1201 | 1201 | ){ |
| 1202 | 1202 | nEntry = -1; |
| 1203 | + zCirca = 0; | |
| 1203 | 1204 | } |
| 1204 | 1205 | if( zType[0]=='a' ){ |
| 1205 | 1206 | tmFlags |= TIMELINE_BRIEF | TIMELINE_GRAPH; |
| 1206 | 1207 | }else{ |
| 1207 | 1208 | tmFlags |= TIMELINE_GRAPH; |
| @@ -1250,11 +1251,11 @@ | ||
| 1250 | 1251 | tmFlags |= TIMELINE_FCHANGES; |
| 1251 | 1252 | } |
| 1252 | 1253 | if( (tmFlags & TIMELINE_UNHIDE)==0 ){ |
| 1253 | 1254 | blob_append_sql(&sql, |
| 1254 | 1255 | " AND NOT EXISTS(SELECT 1 FROM tagxref" |
| 1255 | - " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)", | |
| 1256 | + " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", | |
| 1256 | 1257 | TAG_HIDDEN |
| 1257 | 1258 | ); |
| 1258 | 1259 | } |
| 1259 | 1260 | if( ((from_rid && to_rid) || (me_rid && you_rid)) && g.perm.Read ){ |
| 1260 | 1261 | /* If from= and to= are present, display all nodes on a path connecting |
| @@ -1375,12 +1376,12 @@ | ||
| 1375 | 1376 | blob_append_sql(&sql, " AND %Q=strftime('%%Y-%%W',event.mtime) ", |
| 1376 | 1377 | zYearWeek); |
| 1377 | 1378 | } |
| 1378 | 1379 | if( tagid>0 ){ |
| 1379 | 1380 | blob_append_sql(&sql, |
| 1380 | - "AND (EXISTS(SELECT 1 FROM tagxref" | |
| 1381 | - " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)", tagid); | |
| 1381 | + " AND (EXISTS(SELECT 1 FROM tagxref" | |
| 1382 | + " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", tagid); | |
| 1382 | 1383 | |
| 1383 | 1384 | if( zBrName ){ |
| 1384 | 1385 | /* The next two blob_appendf() calls add SQL that causes checkins that |
| 1385 | 1386 | ** are not part of the branch which are parents or children of the |
| 1386 | 1387 | ** branch to be included in the report. This related check-ins are |
| @@ -1387,30 +1388,30 @@ | ||
| 1387 | 1388 | ** useful in helping to visualize what has happened on a quiescent |
| 1388 | 1389 | ** branch that is infrequently merged with a much more activate branch. |
| 1389 | 1390 | */ |
| 1390 | 1391 | blob_append_sql(&sql, |
| 1391 | 1392 | " OR EXISTS(SELECT 1 FROM plink CROSS JOIN tagxref ON rid=cid" |
| 1392 | - " WHERE tagid=%d AND tagtype>0 AND pid=blob.rid)", | |
| 1393 | + " WHERE tagid=%d AND tagtype>0 AND pid=blob.rid)\n", | |
| 1393 | 1394 | tagid |
| 1394 | 1395 | ); |
| 1395 | 1396 | if( (tmFlags & TIMELINE_UNHIDE)==0 ){ |
| 1396 | 1397 | blob_append_sql(&sql, |
| 1397 | 1398 | " AND NOT EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=cid" |
| 1398 | - " WHERE tagid=%d AND tagtype>0 AND pid=blob.rid)", | |
| 1399 | + " WHERE tagid=%d AND tagtype>0 AND pid=blob.rid)\n", | |
| 1399 | 1400 | TAG_HIDDEN |
| 1400 | 1401 | ); |
| 1401 | 1402 | } |
| 1402 | 1403 | if( P("mionly")==0 ){ |
| 1403 | 1404 | blob_append_sql(&sql, |
| 1404 | 1405 | " OR EXISTS(SELECT 1 FROM plink CROSS JOIN tagxref ON rid=pid" |
| 1405 | - " WHERE tagid=%d AND tagtype>0 AND cid=blob.rid)", | |
| 1406 | + " WHERE tagid=%d AND tagtype>0 AND cid=blob.rid)\n", | |
| 1406 | 1407 | tagid |
| 1407 | 1408 | ); |
| 1408 | 1409 | if( (tmFlags & TIMELINE_UNHIDE)==0 ){ |
| 1409 | 1410 | blob_append_sql(&sql, |
| 1410 | 1411 | " AND NOT EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=pid" |
| 1411 | - " WHERE tagid=%d AND tagtype>0 AND cid=blob.rid)", | |
| 1412 | + " WHERE tagid=%d AND tagtype>0 AND cid=blob.rid)\n", | |
| 1412 | 1413 | TAG_HIDDEN |
| 1413 | 1414 | ); |
| 1414 | 1415 | } |
| 1415 | 1416 | } |
| 1416 | 1417 | } |
| @@ -1496,20 +1497,24 @@ | ||
| 1496 | 1497 | url_add_parameter(&url, "c", 0); |
| 1497 | 1498 | }else if( rCirca>0.0 ){ |
| 1498 | 1499 | Blob sql2; |
| 1499 | 1500 | blob_init(&sql2, blob_sql_text(&sql), -1); |
| 1500 | 1501 | blob_append_sql(&sql2, |
| 1501 | - " AND event.mtime<=%f ORDER BY event.mtime DESC LIMIT %d", | |
| 1502 | - rCirca, (nEntry+1)/2 | |
| 1503 | - ); | |
| 1502 | + " AND event.mtime<=%f ORDER BY event.mtime DESC", rCirca); | |
| 1503 | + if( nEntry>0 ){ | |
| 1504 | + blob_append_sql(&sql2," LIMIT %d", (nEntry+1)/2); | |
| 1505 | + nEntry -= (nEntry+1)/2; | |
| 1506 | + } | |
| 1507 | + if( PB("showsql") ){ | |
| 1508 | + @ <pre>%h(blob_sql_text(&sql2))</pre> | |
| 1509 | + } | |
| 1504 | 1510 | db_multi_exec("%s", blob_sql_text(&sql2)); |
| 1505 | 1511 | blob_reset(&sql2); |
| 1506 | 1512 | blob_append_sql(&sql, |
| 1507 | 1513 | " AND event.mtime>=%f ORDER BY event.mtime ASC", |
| 1508 | 1514 | rCirca |
| 1509 | 1515 | ); |
| 1510 | - nEntry -= (nEntry+1)/2; | |
| 1511 | 1516 | if( zMark==0 ) zMark = zCirca; |
| 1512 | 1517 | }else{ |
| 1513 | 1518 | blob_append_sql(&sql, " ORDER BY event.mtime DESC"); |
| 1514 | 1519 | } |
| 1515 | 1520 | if( nEntry>0 ) blob_append_sql(&sql, " LIMIT %d", nEntry); |
| @@ -1583,11 +1588,11 @@ | ||
| 1583 | 1588 | style_submenu_binary("v","With Files","Without Files", |
| 1584 | 1589 | zType[0]!='a' && zType[0]!='c'); |
| 1585 | 1590 | } |
| 1586 | 1591 | } |
| 1587 | 1592 | if( PB("showsql") ){ |
| 1588 | - @ <blockquote>%h(blob_sql_text(&sql))</blockquote> | |
| 1593 | + @ <pre>%h(blob_sql_text(&sql))</pre> | |
| 1589 | 1594 | } |
| 1590 | 1595 | if( search_restrict(SRCH_CKIN)!=0 ){ |
| 1591 | 1596 | style_submenu_element("Search", 0, "%R/search?y=c"); |
| 1592 | 1597 | } |
| 1593 | 1598 | if( PB("showid") ) tmFlags |= TIMELINE_SHOWRID; |
| @@ -1950,11 +1955,11 @@ | ||
| 1950 | 1955 | } |
| 1951 | 1956 | |
| 1952 | 1957 | if( mode==0 ) mode = 1; |
| 1953 | 1958 | blob_zero(&sql); |
| 1954 | 1959 | blob_append(&sql, timeline_query_for_tty(), -1); |
| 1955 | - blob_append_sql(&sql, " AND event.mtime %s %s", | |
| 1960 | + blob_append_sql(&sql, "\n AND event.mtime %s %s", | |
| 1956 | 1961 | (mode==1 || mode==4) ? "<=" : ">=", |
| 1957 | 1962 | zDate /*safe-for-%s*/ |
| 1958 | 1963 | ); |
| 1959 | 1964 | |
| 1960 | 1965 | if( mode==3 || mode==4 ){ |
| 1961 | 1966 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1198,10 +1198,11 @@ | |
| 1198 | } |
| 1199 | if( tagid>0 |
| 1200 | && db_int(0,"SELECT count(*) FROM tagxref WHERE tagid=%d",tagid)<=nEntry |
| 1201 | ){ |
| 1202 | nEntry = -1; |
| 1203 | } |
| 1204 | if( zType[0]=='a' ){ |
| 1205 | tmFlags |= TIMELINE_BRIEF | TIMELINE_GRAPH; |
| 1206 | }else{ |
| 1207 | tmFlags |= TIMELINE_GRAPH; |
| @@ -1250,11 +1251,11 @@ | |
| 1250 | tmFlags |= TIMELINE_FCHANGES; |
| 1251 | } |
| 1252 | if( (tmFlags & TIMELINE_UNHIDE)==0 ){ |
| 1253 | blob_append_sql(&sql, |
| 1254 | " AND NOT EXISTS(SELECT 1 FROM tagxref" |
| 1255 | " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)", |
| 1256 | TAG_HIDDEN |
| 1257 | ); |
| 1258 | } |
| 1259 | if( ((from_rid && to_rid) || (me_rid && you_rid)) && g.perm.Read ){ |
| 1260 | /* If from= and to= are present, display all nodes on a path connecting |
| @@ -1375,12 +1376,12 @@ | |
| 1375 | blob_append_sql(&sql, " AND %Q=strftime('%%Y-%%W',event.mtime) ", |
| 1376 | zYearWeek); |
| 1377 | } |
| 1378 | if( tagid>0 ){ |
| 1379 | blob_append_sql(&sql, |
| 1380 | "AND (EXISTS(SELECT 1 FROM tagxref" |
| 1381 | " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)", tagid); |
| 1382 | |
| 1383 | if( zBrName ){ |
| 1384 | /* The next two blob_appendf() calls add SQL that causes checkins that |
| 1385 | ** are not part of the branch which are parents or children of the |
| 1386 | ** branch to be included in the report. This related check-ins are |
| @@ -1387,30 +1388,30 @@ | |
| 1387 | ** useful in helping to visualize what has happened on a quiescent |
| 1388 | ** branch that is infrequently merged with a much more activate branch. |
| 1389 | */ |
| 1390 | blob_append_sql(&sql, |
| 1391 | " OR EXISTS(SELECT 1 FROM plink CROSS JOIN tagxref ON rid=cid" |
| 1392 | " WHERE tagid=%d AND tagtype>0 AND pid=blob.rid)", |
| 1393 | tagid |
| 1394 | ); |
| 1395 | if( (tmFlags & TIMELINE_UNHIDE)==0 ){ |
| 1396 | blob_append_sql(&sql, |
| 1397 | " AND NOT EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=cid" |
| 1398 | " WHERE tagid=%d AND tagtype>0 AND pid=blob.rid)", |
| 1399 | TAG_HIDDEN |
| 1400 | ); |
| 1401 | } |
| 1402 | if( P("mionly")==0 ){ |
| 1403 | blob_append_sql(&sql, |
| 1404 | " OR EXISTS(SELECT 1 FROM plink CROSS JOIN tagxref ON rid=pid" |
| 1405 | " WHERE tagid=%d AND tagtype>0 AND cid=blob.rid)", |
| 1406 | tagid |
| 1407 | ); |
| 1408 | if( (tmFlags & TIMELINE_UNHIDE)==0 ){ |
| 1409 | blob_append_sql(&sql, |
| 1410 | " AND NOT EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=pid" |
| 1411 | " WHERE tagid=%d AND tagtype>0 AND cid=blob.rid)", |
| 1412 | TAG_HIDDEN |
| 1413 | ); |
| 1414 | } |
| 1415 | } |
| 1416 | } |
| @@ -1496,20 +1497,24 @@ | |
| 1496 | url_add_parameter(&url, "c", 0); |
| 1497 | }else if( rCirca>0.0 ){ |
| 1498 | Blob sql2; |
| 1499 | blob_init(&sql2, blob_sql_text(&sql), -1); |
| 1500 | blob_append_sql(&sql2, |
| 1501 | " AND event.mtime<=%f ORDER BY event.mtime DESC LIMIT %d", |
| 1502 | rCirca, (nEntry+1)/2 |
| 1503 | ); |
| 1504 | db_multi_exec("%s", blob_sql_text(&sql2)); |
| 1505 | blob_reset(&sql2); |
| 1506 | blob_append_sql(&sql, |
| 1507 | " AND event.mtime>=%f ORDER BY event.mtime ASC", |
| 1508 | rCirca |
| 1509 | ); |
| 1510 | nEntry -= (nEntry+1)/2; |
| 1511 | if( zMark==0 ) zMark = zCirca; |
| 1512 | }else{ |
| 1513 | blob_append_sql(&sql, " ORDER BY event.mtime DESC"); |
| 1514 | } |
| 1515 | if( nEntry>0 ) blob_append_sql(&sql, " LIMIT %d", nEntry); |
| @@ -1583,11 +1588,11 @@ | |
| 1583 | style_submenu_binary("v","With Files","Without Files", |
| 1584 | zType[0]!='a' && zType[0]!='c'); |
| 1585 | } |
| 1586 | } |
| 1587 | if( PB("showsql") ){ |
| 1588 | @ <blockquote>%h(blob_sql_text(&sql))</blockquote> |
| 1589 | } |
| 1590 | if( search_restrict(SRCH_CKIN)!=0 ){ |
| 1591 | style_submenu_element("Search", 0, "%R/search?y=c"); |
| 1592 | } |
| 1593 | if( PB("showid") ) tmFlags |= TIMELINE_SHOWRID; |
| @@ -1950,11 +1955,11 @@ | |
| 1950 | } |
| 1951 | |
| 1952 | if( mode==0 ) mode = 1; |
| 1953 | blob_zero(&sql); |
| 1954 | blob_append(&sql, timeline_query_for_tty(), -1); |
| 1955 | blob_append_sql(&sql, " AND event.mtime %s %s", |
| 1956 | (mode==1 || mode==4) ? "<=" : ">=", |
| 1957 | zDate /*safe-for-%s*/ |
| 1958 | ); |
| 1959 | |
| 1960 | if( mode==3 || mode==4 ){ |
| 1961 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1198,10 +1198,11 @@ | |
| 1198 | } |
| 1199 | if( tagid>0 |
| 1200 | && db_int(0,"SELECT count(*) FROM tagxref WHERE tagid=%d",tagid)<=nEntry |
| 1201 | ){ |
| 1202 | nEntry = -1; |
| 1203 | zCirca = 0; |
| 1204 | } |
| 1205 | if( zType[0]=='a' ){ |
| 1206 | tmFlags |= TIMELINE_BRIEF | TIMELINE_GRAPH; |
| 1207 | }else{ |
| 1208 | tmFlags |= TIMELINE_GRAPH; |
| @@ -1250,11 +1251,11 @@ | |
| 1251 | tmFlags |= TIMELINE_FCHANGES; |
| 1252 | } |
| 1253 | if( (tmFlags & TIMELINE_UNHIDE)==0 ){ |
| 1254 | blob_append_sql(&sql, |
| 1255 | " AND NOT EXISTS(SELECT 1 FROM tagxref" |
| 1256 | " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", |
| 1257 | TAG_HIDDEN |
| 1258 | ); |
| 1259 | } |
| 1260 | if( ((from_rid && to_rid) || (me_rid && you_rid)) && g.perm.Read ){ |
| 1261 | /* If from= and to= are present, display all nodes on a path connecting |
| @@ -1375,12 +1376,12 @@ | |
| 1376 | blob_append_sql(&sql, " AND %Q=strftime('%%Y-%%W',event.mtime) ", |
| 1377 | zYearWeek); |
| 1378 | } |
| 1379 | if( tagid>0 ){ |
| 1380 | blob_append_sql(&sql, |
| 1381 | " AND (EXISTS(SELECT 1 FROM tagxref" |
| 1382 | " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", tagid); |
| 1383 | |
| 1384 | if( zBrName ){ |
| 1385 | /* The next two blob_appendf() calls add SQL that causes checkins that |
| 1386 | ** are not part of the branch which are parents or children of the |
| 1387 | ** branch to be included in the report. This related check-ins are |
| @@ -1387,30 +1388,30 @@ | |
| 1388 | ** useful in helping to visualize what has happened on a quiescent |
| 1389 | ** branch that is infrequently merged with a much more activate branch. |
| 1390 | */ |
| 1391 | blob_append_sql(&sql, |
| 1392 | " OR EXISTS(SELECT 1 FROM plink CROSS JOIN tagxref ON rid=cid" |
| 1393 | " WHERE tagid=%d AND tagtype>0 AND pid=blob.rid)\n", |
| 1394 | tagid |
| 1395 | ); |
| 1396 | if( (tmFlags & TIMELINE_UNHIDE)==0 ){ |
| 1397 | blob_append_sql(&sql, |
| 1398 | " AND NOT EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=cid" |
| 1399 | " WHERE tagid=%d AND tagtype>0 AND pid=blob.rid)\n", |
| 1400 | TAG_HIDDEN |
| 1401 | ); |
| 1402 | } |
| 1403 | if( P("mionly")==0 ){ |
| 1404 | blob_append_sql(&sql, |
| 1405 | " OR EXISTS(SELECT 1 FROM plink CROSS JOIN tagxref ON rid=pid" |
| 1406 | " WHERE tagid=%d AND tagtype>0 AND cid=blob.rid)\n", |
| 1407 | tagid |
| 1408 | ); |
| 1409 | if( (tmFlags & TIMELINE_UNHIDE)==0 ){ |
| 1410 | blob_append_sql(&sql, |
| 1411 | " AND NOT EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=pid" |
| 1412 | " WHERE tagid=%d AND tagtype>0 AND cid=blob.rid)\n", |
| 1413 | TAG_HIDDEN |
| 1414 | ); |
| 1415 | } |
| 1416 | } |
| 1417 | } |
| @@ -1496,20 +1497,24 @@ | |
| 1497 | url_add_parameter(&url, "c", 0); |
| 1498 | }else if( rCirca>0.0 ){ |
| 1499 | Blob sql2; |
| 1500 | blob_init(&sql2, blob_sql_text(&sql), -1); |
| 1501 | blob_append_sql(&sql2, |
| 1502 | " AND event.mtime<=%f ORDER BY event.mtime DESC", rCirca); |
| 1503 | if( nEntry>0 ){ |
| 1504 | blob_append_sql(&sql2," LIMIT %d", (nEntry+1)/2); |
| 1505 | nEntry -= (nEntry+1)/2; |
| 1506 | } |
| 1507 | if( PB("showsql") ){ |
| 1508 | @ <pre>%h(blob_sql_text(&sql2))</pre> |
| 1509 | } |
| 1510 | db_multi_exec("%s", blob_sql_text(&sql2)); |
| 1511 | blob_reset(&sql2); |
| 1512 | blob_append_sql(&sql, |
| 1513 | " AND event.mtime>=%f ORDER BY event.mtime ASC", |
| 1514 | rCirca |
| 1515 | ); |
| 1516 | if( zMark==0 ) zMark = zCirca; |
| 1517 | }else{ |
| 1518 | blob_append_sql(&sql, " ORDER BY event.mtime DESC"); |
| 1519 | } |
| 1520 | if( nEntry>0 ) blob_append_sql(&sql, " LIMIT %d", nEntry); |
| @@ -1583,11 +1588,11 @@ | |
| 1588 | style_submenu_binary("v","With Files","Without Files", |
| 1589 | zType[0]!='a' && zType[0]!='c'); |
| 1590 | } |
| 1591 | } |
| 1592 | if( PB("showsql") ){ |
| 1593 | @ <pre>%h(blob_sql_text(&sql))</pre> |
| 1594 | } |
| 1595 | if( search_restrict(SRCH_CKIN)!=0 ){ |
| 1596 | style_submenu_element("Search", 0, "%R/search?y=c"); |
| 1597 | } |
| 1598 | if( PB("showid") ) tmFlags |= TIMELINE_SHOWRID; |
| @@ -1950,11 +1955,11 @@ | |
| 1955 | } |
| 1956 | |
| 1957 | if( mode==0 ) mode = 1; |
| 1958 | blob_zero(&sql); |
| 1959 | blob_append(&sql, timeline_query_for_tty(), -1); |
| 1960 | blob_append_sql(&sql, "\n AND event.mtime %s %s", |
| 1961 | (mode==1 || mode==4) ? "<=" : ">=", |
| 1962 | zDate /*safe-for-%s*/ |
| 1963 | ); |
| 1964 | |
| 1965 | if( mode==3 || mode==4 ){ |
| 1966 |