Fossil SCM
Improvements to timeline submenu and title generation. Faster ambiguous name detection query.
Commit
421c9eee0af29348ecfa83c99b78e258ecfe7428
Parent
276ae463839cfdb…
7 files changed
+1
-1
+2
-2
+1
-1
+11
-16
+1
-1
+2
-2
+1
-1
+1
-1
| --- src/checkin.c | ||
| +++ src/checkin.c | ||
| @@ -65,11 +65,11 @@ | ||
| 65 | 65 | |
| 66 | 66 | db_prepare(&q, |
| 67 | 67 | "SELECT pathname, deleted, chnged, rid, coalesce(origname!=pathname,0)" |
| 68 | 68 | " FROM vfile " |
| 69 | 69 | " WHERE is_selected(id) %s" |
| 70 | - " AND (chnged OR deleted OR rid=0 OR pathname!=origname) ORDER BY 1", | |
| 70 | + " AND (chnged OR deleted OR rid=0 OR pathname!=origname) ORDER BY 1 /*scan*/", | |
| 71 | 71 | blob_sql_text(&where) |
| 72 | 72 | ); |
| 73 | 73 | blob_zero(&rewrittenPathname); |
| 74 | 74 | while( db_step(&q)==SQLITE_ROW ){ |
| 75 | 75 | const char *zPathname = db_column_text(&q,0); |
| 76 | 76 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -65,11 +65,11 @@ | |
| 65 | |
| 66 | db_prepare(&q, |
| 67 | "SELECT pathname, deleted, chnged, rid, coalesce(origname!=pathname,0)" |
| 68 | " FROM vfile " |
| 69 | " WHERE is_selected(id) %s" |
| 70 | " AND (chnged OR deleted OR rid=0 OR pathname!=origname) ORDER BY 1", |
| 71 | blob_sql_text(&where) |
| 72 | ); |
| 73 | blob_zero(&rewrittenPathname); |
| 74 | while( db_step(&q)==SQLITE_ROW ){ |
| 75 | const char *zPathname = db_column_text(&q,0); |
| 76 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -65,11 +65,11 @@ | |
| 65 | |
| 66 | db_prepare(&q, |
| 67 | "SELECT pathname, deleted, chnged, rid, coalesce(origname!=pathname,0)" |
| 68 | " FROM vfile " |
| 69 | " WHERE is_selected(id) %s" |
| 70 | " AND (chnged OR deleted OR rid=0 OR pathname!=origname) ORDER BY 1 /*scan*/", |
| 71 | blob_sql_text(&where) |
| 72 | ); |
| 73 | blob_zero(&rewrittenPathname); |
| 74 | while( db_step(&q)==SQLITE_ROW ){ |
| 75 | const char *zPathname = db_column_text(&q,0); |
| 76 |
+2
-2
| --- src/diffcmd.c | ||
| +++ src/diffcmd.c | ||
| @@ -363,20 +363,20 @@ | ||
| 363 | 363 | "SELECT pathname, 0, 0, 1, 0, islink" |
| 364 | 364 | " FROM vfile v2" |
| 365 | 365 | " WHERE v2.vid=%d" |
| 366 | 366 | " AND NOT EXISTS(SELECT 1 FROM vfile v1" |
| 367 | 367 | " WHERE v1.vid=%d AND v1.pathname=v2.pathname)" |
| 368 | - " ORDER BY 1", | |
| 368 | + " ORDER BY 1 /*scan*/", | |
| 369 | 369 | rid, vid, rid, vid, vid, rid |
| 370 | 370 | ); |
| 371 | 371 | }else{ |
| 372 | 372 | blob_append_sql(&sql, |
| 373 | 373 | "SELECT pathname, deleted, chnged , rid==0, rid, islink" |
| 374 | 374 | " FROM vfile" |
| 375 | 375 | " WHERE vid=%d" |
| 376 | 376 | " AND (deleted OR chnged OR rid==0)" |
| 377 | - " ORDER BY pathname", | |
| 377 | + " ORDER BY pathname /*scan*/", | |
| 378 | 378 | vid |
| 379 | 379 | ); |
| 380 | 380 | } |
| 381 | 381 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 382 | 382 | while( db_step(&q)==SQLITE_ROW ){ |
| 383 | 383 |
| --- src/diffcmd.c | |
| +++ src/diffcmd.c | |
| @@ -363,20 +363,20 @@ | |
| 363 | "SELECT pathname, 0, 0, 1, 0, islink" |
| 364 | " FROM vfile v2" |
| 365 | " WHERE v2.vid=%d" |
| 366 | " AND NOT EXISTS(SELECT 1 FROM vfile v1" |
| 367 | " WHERE v1.vid=%d AND v1.pathname=v2.pathname)" |
| 368 | " ORDER BY 1", |
| 369 | rid, vid, rid, vid, vid, rid |
| 370 | ); |
| 371 | }else{ |
| 372 | blob_append_sql(&sql, |
| 373 | "SELECT pathname, deleted, chnged , rid==0, rid, islink" |
| 374 | " FROM vfile" |
| 375 | " WHERE vid=%d" |
| 376 | " AND (deleted OR chnged OR rid==0)" |
| 377 | " ORDER BY pathname", |
| 378 | vid |
| 379 | ); |
| 380 | } |
| 381 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 382 | while( db_step(&q)==SQLITE_ROW ){ |
| 383 |
| --- src/diffcmd.c | |
| +++ src/diffcmd.c | |
| @@ -363,20 +363,20 @@ | |
| 363 | "SELECT pathname, 0, 0, 1, 0, islink" |
| 364 | " FROM vfile v2" |
| 365 | " WHERE v2.vid=%d" |
| 366 | " AND NOT EXISTS(SELECT 1 FROM vfile v1" |
| 367 | " WHERE v1.vid=%d AND v1.pathname=v2.pathname)" |
| 368 | " ORDER BY 1 /*scan*/", |
| 369 | rid, vid, rid, vid, vid, rid |
| 370 | ); |
| 371 | }else{ |
| 372 | blob_append_sql(&sql, |
| 373 | "SELECT pathname, deleted, chnged , rid==0, rid, islink" |
| 374 | " FROM vfile" |
| 375 | " WHERE vid=%d" |
| 376 | " AND (deleted OR chnged OR rid==0)" |
| 377 | " ORDER BY pathname /*scan*/", |
| 378 | vid |
| 379 | ); |
| 380 | } |
| 381 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 382 | while( db_step(&q)==SQLITE_ROW ){ |
| 383 |
+1
-1
| --- src/moderate.c | ||
| +++ src/moderate.c | ||
| @@ -40,11 +40,11 @@ | ||
| 40 | 40 | ** Return TRUE if the modreq table exists |
| 41 | 41 | */ |
| 42 | 42 | int moderation_table_exists(void){ |
| 43 | 43 | static int modreqExists = -1; |
| 44 | 44 | if( modreqExists<0 ){ |
| 45 | - modreqExists = db_exists("SELECT 1 FROM %s.sqlite_master" | |
| 45 | + modreqExists = db_exists("SELECT 1 FROM %s.sqlite_master /*scan*/" | |
| 46 | 46 | " WHERE name='modreq'", db_name("repository")); |
| 47 | 47 | } |
| 48 | 48 | return modreqExists; |
| 49 | 49 | } |
| 50 | 50 | |
| 51 | 51 |
| --- src/moderate.c | |
| +++ src/moderate.c | |
| @@ -40,11 +40,11 @@ | |
| 40 | ** Return TRUE if the modreq table exists |
| 41 | */ |
| 42 | int moderation_table_exists(void){ |
| 43 | static int modreqExists = -1; |
| 44 | if( modreqExists<0 ){ |
| 45 | modreqExists = db_exists("SELECT 1 FROM %s.sqlite_master" |
| 46 | " WHERE name='modreq'", db_name("repository")); |
| 47 | } |
| 48 | return modreqExists; |
| 49 | } |
| 50 | |
| 51 |
| --- src/moderate.c | |
| +++ src/moderate.c | |
| @@ -40,11 +40,11 @@ | |
| 40 | ** Return TRUE if the modreq table exists |
| 41 | */ |
| 42 | int moderation_table_exists(void){ |
| 43 | static int modreqExists = -1; |
| 44 | if( modreqExists<0 ){ |
| 45 | modreqExists = db_exists("SELECT 1 FROM %s.sqlite_master /*scan*/" |
| 46 | " WHERE name='modreq'", db_name("repository")); |
| 47 | } |
| 48 | return modreqExists; |
| 49 | } |
| 50 | |
| 51 |
+11
-16
| --- src/name.c | ||
| +++ src/name.c | ||
| @@ -346,30 +346,25 @@ | ||
| 346 | 346 | ** name_collisions searches through events, blobs, and tickets for |
| 347 | 347 | ** collisions of a given UUID based on its length on UUIDs no shorter |
| 348 | 348 | ** than 4 characters in length. |
| 349 | 349 | */ |
| 350 | 350 | int name_collisions(const char *zName){ |
| 351 | - Stmt q; | |
| 352 | 351 | int c = 0; /* count of collisions for zName */ |
| 353 | 352 | int nLen; /* length of zName */ |
| 354 | 353 | nLen = strlen(zName); |
| 355 | 354 | if( nLen>=4 && nLen<=UUID_SIZE && validate16(zName, nLen) ){ |
| 356 | - db_prepare(&q, | |
| 357 | - "SELECT count(uuid) FROM" | |
| 358 | - " (SELECT substr(tkt_uuid, 1, %d) AS uuid FROM ticket" | |
| 359 | - " UNION ALL SELECT * FROM" | |
| 360 | - " (SELECT substr(tagname, 7, %d) FROM" | |
| 361 | - " tag WHERE tagname GLOB 'event-*')" | |
| 362 | - " UNION ALL SELECT * FROM" | |
| 363 | - " (SELECT substr(uuid, 1, %d) FROM blob))" | |
| 364 | - " WHERE uuid GLOB '%q*'" | |
| 365 | - " GROUP BY uuid HAVING count(uuid) > 1;", | |
| 366 | - nLen, nLen, nLen, zName); | |
| 367 | - if( db_step(&q)==SQLITE_ROW ){ | |
| 368 | - c = db_column_int(&q, 0); | |
| 369 | - } | |
| 370 | - db_finalize(&q); | |
| 355 | + c = db_int(0, | |
| 356 | + "SELECT" | |
| 357 | + " (SELECT count(*) FROM ticket" | |
| 358 | + " WHERE tkt_uuid GLOB '%q*') +" | |
| 359 | + " (SELECT count(*) FROM tag" | |
| 360 | + " WHERE tagname GLOB 'event-%q*') +" | |
| 361 | + " (SELECT count(*) FROM blob" | |
| 362 | + " WHERE uuid GLOB '%q*');", | |
| 363 | + zName, zName, zName | |
| 364 | + ); | |
| 365 | + if( c<2 ) c = 0; | |
| 371 | 366 | } |
| 372 | 367 | return c; |
| 373 | 368 | } |
| 374 | 369 | |
| 375 | 370 | /* |
| 376 | 371 |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -346,30 +346,25 @@ | |
| 346 | ** name_collisions searches through events, blobs, and tickets for |
| 347 | ** collisions of a given UUID based on its length on UUIDs no shorter |
| 348 | ** than 4 characters in length. |
| 349 | */ |
| 350 | int name_collisions(const char *zName){ |
| 351 | Stmt q; |
| 352 | int c = 0; /* count of collisions for zName */ |
| 353 | int nLen; /* length of zName */ |
| 354 | nLen = strlen(zName); |
| 355 | if( nLen>=4 && nLen<=UUID_SIZE && validate16(zName, nLen) ){ |
| 356 | db_prepare(&q, |
| 357 | "SELECT count(uuid) FROM" |
| 358 | " (SELECT substr(tkt_uuid, 1, %d) AS uuid FROM ticket" |
| 359 | " UNION ALL SELECT * FROM" |
| 360 | " (SELECT substr(tagname, 7, %d) FROM" |
| 361 | " tag WHERE tagname GLOB 'event-*')" |
| 362 | " UNION ALL SELECT * FROM" |
| 363 | " (SELECT substr(uuid, 1, %d) FROM blob))" |
| 364 | " WHERE uuid GLOB '%q*'" |
| 365 | " GROUP BY uuid HAVING count(uuid) > 1;", |
| 366 | nLen, nLen, nLen, zName); |
| 367 | if( db_step(&q)==SQLITE_ROW ){ |
| 368 | c = db_column_int(&q, 0); |
| 369 | } |
| 370 | db_finalize(&q); |
| 371 | } |
| 372 | return c; |
| 373 | } |
| 374 | |
| 375 | /* |
| 376 |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -346,30 +346,25 @@ | |
| 346 | ** name_collisions searches through events, blobs, and tickets for |
| 347 | ** collisions of a given UUID based on its length on UUIDs no shorter |
| 348 | ** than 4 characters in length. |
| 349 | */ |
| 350 | int name_collisions(const char *zName){ |
| 351 | int c = 0; /* count of collisions for zName */ |
| 352 | int nLen; /* length of zName */ |
| 353 | nLen = strlen(zName); |
| 354 | if( nLen>=4 && nLen<=UUID_SIZE && validate16(zName, nLen) ){ |
| 355 | c = db_int(0, |
| 356 | "SELECT" |
| 357 | " (SELECT count(*) FROM ticket" |
| 358 | " WHERE tkt_uuid GLOB '%q*') +" |
| 359 | " (SELECT count(*) FROM tag" |
| 360 | " WHERE tagname GLOB 'event-%q*') +" |
| 361 | " (SELECT count(*) FROM blob" |
| 362 | " WHERE uuid GLOB '%q*');", |
| 363 | zName, zName, zName |
| 364 | ); |
| 365 | if( c<2 ) c = 0; |
| 366 | } |
| 367 | return c; |
| 368 | } |
| 369 | |
| 370 | /* |
| 371 |
+1
-1
| --- src/stat.c | ||
| +++ src/stat.c | ||
| @@ -77,11 +77,11 @@ | ||
| 77 | 77 | if( n>0 ){ |
| 78 | 78 | int a, b; |
| 79 | 79 | Stmt q; |
| 80 | 80 | @ <tr><th>Uncompressed Artifact Size:</th><td> |
| 81 | 81 | db_prepare(&q, "SELECT total(size), avg(size), max(size)" |
| 82 | - " FROM blob WHERE size>0"); | |
| 82 | + " FROM blob WHERE size>0 /*scan*/"); | |
| 83 | 83 | db_step(&q); |
| 84 | 84 | t = db_column_int64(&q, 0); |
| 85 | 85 | szAvg = db_column_int(&q, 1); |
| 86 | 86 | szMax = db_column_int(&q, 2); |
| 87 | 87 | db_finalize(&q); |
| 88 | 88 |
| --- src/stat.c | |
| +++ src/stat.c | |
| @@ -77,11 +77,11 @@ | |
| 77 | if( n>0 ){ |
| 78 | int a, b; |
| 79 | Stmt q; |
| 80 | @ <tr><th>Uncompressed Artifact Size:</th><td> |
| 81 | db_prepare(&q, "SELECT total(size), avg(size), max(size)" |
| 82 | " FROM blob WHERE size>0"); |
| 83 | db_step(&q); |
| 84 | t = db_column_int64(&q, 0); |
| 85 | szAvg = db_column_int(&q, 1); |
| 86 | szMax = db_column_int(&q, 2); |
| 87 | db_finalize(&q); |
| 88 |
| --- src/stat.c | |
| +++ src/stat.c | |
| @@ -77,11 +77,11 @@ | |
| 77 | if( n>0 ){ |
| 78 | int a, b; |
| 79 | Stmt q; |
| 80 | @ <tr><th>Uncompressed Artifact Size:</th><td> |
| 81 | db_prepare(&q, "SELECT total(size), avg(size), max(size)" |
| 82 | " FROM blob WHERE size>0 /*scan*/"); |
| 83 | db_step(&q); |
| 84 | t = db_column_int64(&q, 0); |
| 85 | szAvg = db_column_int(&q, 1); |
| 86 | szMax = db_column_int(&q, 2); |
| 87 | db_finalize(&q); |
| 88 |
+2
-2
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -1460,11 +1460,11 @@ | ||
| 1460 | 1460 | n = db_int(0, "SELECT count(*) FROM timeline WHERE etype!='div' /*scan*/"); |
| 1461 | 1461 | if( zYearMonth ){ |
| 1462 | 1462 | blob_appendf(&desc, "%s events for %h", zEType, zYearMonth); |
| 1463 | 1463 | }else if( zYearWeek ){ |
| 1464 | 1464 | blob_appendf(&desc, "%s events for year/week %h", zEType, zYearWeek); |
| 1465 | - }else if( zAfter==0 && zBefore==0 && zCirca==0 && nEntry>0 ){ | |
| 1465 | + }else if( zAfter==0 && zBefore==0 && zCirca==0 && n>=nEntry && nEntry>0 ){ | |
| 1466 | 1466 | blob_appendf(&desc, "%d most recent %ss", n, zEType); |
| 1467 | 1467 | }else{ |
| 1468 | 1468 | blob_appendf(&desc, "%d %ss", n, zEType); |
| 1469 | 1469 | } |
| 1470 | 1470 | if( zUses ){ |
| @@ -1511,11 +1511,11 @@ | ||
| 1511 | 1511 | } |
| 1512 | 1512 | if( zBefore || (zAfter && n==nEntry) ){ |
| 1513 | 1513 | zDate = db_text(0, "SELECT max(timestamp) FROM timeline /*scan*/"); |
| 1514 | 1514 | timeline_submenu(&url, "Newer", "a", zDate, "b"); |
| 1515 | 1515 | free(zDate); |
| 1516 | - }else if( tagid==0 ){ | |
| 1516 | + }else if( tagid==0 && zUses==0 ){ | |
| 1517 | 1517 | if( zType[0]!='a' ){ |
| 1518 | 1518 | timeline_submenu(&url, "All Types", "y", "all", 0); |
| 1519 | 1519 | } |
| 1520 | 1520 | if( zType[0]!='w' && g.perm.RdWiki ){ |
| 1521 | 1521 | timeline_submenu(&url, "Wiki Only", "y", "w", 0); |
| 1522 | 1522 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1460,11 +1460,11 @@ | |
| 1460 | n = db_int(0, "SELECT count(*) FROM timeline WHERE etype!='div' /*scan*/"); |
| 1461 | if( zYearMonth ){ |
| 1462 | blob_appendf(&desc, "%s events for %h", zEType, zYearMonth); |
| 1463 | }else if( zYearWeek ){ |
| 1464 | blob_appendf(&desc, "%s events for year/week %h", zEType, zYearWeek); |
| 1465 | }else if( zAfter==0 && zBefore==0 && zCirca==0 && nEntry>0 ){ |
| 1466 | blob_appendf(&desc, "%d most recent %ss", n, zEType); |
| 1467 | }else{ |
| 1468 | blob_appendf(&desc, "%d %ss", n, zEType); |
| 1469 | } |
| 1470 | if( zUses ){ |
| @@ -1511,11 +1511,11 @@ | |
| 1511 | } |
| 1512 | if( zBefore || (zAfter && n==nEntry) ){ |
| 1513 | zDate = db_text(0, "SELECT max(timestamp) FROM timeline /*scan*/"); |
| 1514 | timeline_submenu(&url, "Newer", "a", zDate, "b"); |
| 1515 | free(zDate); |
| 1516 | }else if( tagid==0 ){ |
| 1517 | if( zType[0]!='a' ){ |
| 1518 | timeline_submenu(&url, "All Types", "y", "all", 0); |
| 1519 | } |
| 1520 | if( zType[0]!='w' && g.perm.RdWiki ){ |
| 1521 | timeline_submenu(&url, "Wiki Only", "y", "w", 0); |
| 1522 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1460,11 +1460,11 @@ | |
| 1460 | n = db_int(0, "SELECT count(*) FROM timeline WHERE etype!='div' /*scan*/"); |
| 1461 | if( zYearMonth ){ |
| 1462 | blob_appendf(&desc, "%s events for %h", zEType, zYearMonth); |
| 1463 | }else if( zYearWeek ){ |
| 1464 | blob_appendf(&desc, "%s events for year/week %h", zEType, zYearWeek); |
| 1465 | }else if( zAfter==0 && zBefore==0 && zCirca==0 && n>=nEntry && nEntry>0 ){ |
| 1466 | blob_appendf(&desc, "%d most recent %ss", n, zEType); |
| 1467 | }else{ |
| 1468 | blob_appendf(&desc, "%d %ss", n, zEType); |
| 1469 | } |
| 1470 | if( zUses ){ |
| @@ -1511,11 +1511,11 @@ | |
| 1511 | } |
| 1512 | if( zBefore || (zAfter && n==nEntry) ){ |
| 1513 | zDate = db_text(0, "SELECT max(timestamp) FROM timeline /*scan*/"); |
| 1514 | timeline_submenu(&url, "Newer", "a", zDate, "b"); |
| 1515 | free(zDate); |
| 1516 | }else if( tagid==0 && zUses==0 ){ |
| 1517 | if( zType[0]!='a' ){ |
| 1518 | timeline_submenu(&url, "All Types", "y", "all", 0); |
| 1519 | } |
| 1520 | if( zType[0]!='w' && g.perm.RdWiki ){ |
| 1521 | timeline_submenu(&url, "Wiki Only", "y", "w", 0); |
| 1522 |
+1
-1
| --- src/xfer.c | ||
| +++ src/xfer.c | ||
| @@ -532,11 +532,11 @@ | ||
| 532 | 532 | ** private artifacts if we are not doing a private transfer. |
| 533 | 533 | */ |
| 534 | 534 | static void request_phantoms(Xfer *pXfer, int maxReq){ |
| 535 | 535 | Stmt q; |
| 536 | 536 | db_prepare(&q, |
| 537 | - "SELECT uuid FROM phantom JOIN blob USING(rid)" | |
| 537 | + "SELECT uuid FROM phantom CROSS JOIN blob USING(rid) /*scan*/" | |
| 538 | 538 | " WHERE NOT EXISTS(SELECT 1 FROM shun WHERE uuid=blob.uuid) %s", |
| 539 | 539 | (pXfer->syncPrivate ? "" : |
| 540 | 540 | " AND NOT EXISTS(SELECT 1 FROM private WHERE rid=blob.rid)") |
| 541 | 541 | ); |
| 542 | 542 | while( db_step(&q)==SQLITE_ROW && maxReq-- > 0 ){ |
| 543 | 543 |
| --- src/xfer.c | |
| +++ src/xfer.c | |
| @@ -532,11 +532,11 @@ | |
| 532 | ** private artifacts if we are not doing a private transfer. |
| 533 | */ |
| 534 | static void request_phantoms(Xfer *pXfer, int maxReq){ |
| 535 | Stmt q; |
| 536 | db_prepare(&q, |
| 537 | "SELECT uuid FROM phantom JOIN blob USING(rid)" |
| 538 | " WHERE NOT EXISTS(SELECT 1 FROM shun WHERE uuid=blob.uuid) %s", |
| 539 | (pXfer->syncPrivate ? "" : |
| 540 | " AND NOT EXISTS(SELECT 1 FROM private WHERE rid=blob.rid)") |
| 541 | ); |
| 542 | while( db_step(&q)==SQLITE_ROW && maxReq-- > 0 ){ |
| 543 |
| --- src/xfer.c | |
| +++ src/xfer.c | |
| @@ -532,11 +532,11 @@ | |
| 532 | ** private artifacts if we are not doing a private transfer. |
| 533 | */ |
| 534 | static void request_phantoms(Xfer *pXfer, int maxReq){ |
| 535 | Stmt q; |
| 536 | db_prepare(&q, |
| 537 | "SELECT uuid FROM phantom CROSS JOIN blob USING(rid) /*scan*/" |
| 538 | " WHERE NOT EXISTS(SELECT 1 FROM shun WHERE uuid=blob.uuid) %s", |
| 539 | (pXfer->syncPrivate ? "" : |
| 540 | " AND NOT EXISTS(SELECT 1 FROM private WHERE rid=blob.rid)") |
| 541 | ); |
| 542 | while( db_step(&q)==SQLITE_ROW && maxReq-- > 0 ){ |
| 543 |