Fossil SCM

Improvements to timeline submenu and title generation. Faster ambiguous name detection query.

drh 2014-12-09 16:25 trunk
Commit 421c9eee0af29348ecfa83c99b78e258ecfe7428
+1 -1
--- src/checkin.c
+++ src/checkin.c
@@ -65,11 +65,11 @@
6565
6666
db_prepare(&q,
6767
"SELECT pathname, deleted, chnged, rid, coalesce(origname!=pathname,0)"
6868
" FROM vfile "
6969
" 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*/",
7171
blob_sql_text(&where)
7272
);
7373
blob_zero(&rewrittenPathname);
7474
while( db_step(&q)==SQLITE_ROW ){
7575
const char *zPathname = db_column_text(&q,0);
7676
--- 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 @@
363363
"SELECT pathname, 0, 0, 1, 0, islink"
364364
" FROM vfile v2"
365365
" WHERE v2.vid=%d"
366366
" AND NOT EXISTS(SELECT 1 FROM vfile v1"
367367
" WHERE v1.vid=%d AND v1.pathname=v2.pathname)"
368
- " ORDER BY 1",
368
+ " ORDER BY 1 /*scan*/",
369369
rid, vid, rid, vid, vid, rid
370370
);
371371
}else{
372372
blob_append_sql(&sql,
373373
"SELECT pathname, deleted, chnged , rid==0, rid, islink"
374374
" FROM vfile"
375375
" WHERE vid=%d"
376376
" AND (deleted OR chnged OR rid==0)"
377
- " ORDER BY pathname",
377
+ " ORDER BY pathname /*scan*/",
378378
vid
379379
);
380380
}
381381
db_prepare(&q, "%s", blob_sql_text(&sql));
382382
while( db_step(&q)==SQLITE_ROW ){
383383
--- 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 @@
4040
** Return TRUE if the modreq table exists
4141
*/
4242
int moderation_table_exists(void){
4343
static int modreqExists = -1;
4444
if( modreqExists<0 ){
45
- modreqExists = db_exists("SELECT 1 FROM %s.sqlite_master"
45
+ modreqExists = db_exists("SELECT 1 FROM %s.sqlite_master /*scan*/"
4646
" WHERE name='modreq'", db_name("repository"));
4747
}
4848
return modreqExists;
4949
}
5050
5151
--- 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 @@
346346
** name_collisions searches through events, blobs, and tickets for
347347
** collisions of a given UUID based on its length on UUIDs no shorter
348348
** than 4 characters in length.
349349
*/
350350
int name_collisions(const char *zName){
351
- Stmt q;
352351
int c = 0; /* count of collisions for zName */
353352
int nLen; /* length of zName */
354353
nLen = strlen(zName);
355354
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;
371366
}
372367
return c;
373368
}
374369
375370
/*
376371
--- 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 @@
7777
if( n>0 ){
7878
int a, b;
7979
Stmt q;
8080
@ <tr><th>Uncompressed&nbsp;Artifact&nbsp;Size:</th><td>
8181
db_prepare(&q, "SELECT total(size), avg(size), max(size)"
82
- " FROM blob WHERE size>0");
82
+ " FROM blob WHERE size>0 /*scan*/");
8383
db_step(&q);
8484
t = db_column_int64(&q, 0);
8585
szAvg = db_column_int(&q, 1);
8686
szMax = db_column_int(&q, 2);
8787
db_finalize(&q);
8888
--- 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&nbsp;Artifact&nbsp;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&nbsp;Artifact&nbsp;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 @@
14601460
n = db_int(0, "SELECT count(*) FROM timeline WHERE etype!='div' /*scan*/");
14611461
if( zYearMonth ){
14621462
blob_appendf(&desc, "%s events for %h", zEType, zYearMonth);
14631463
}else if( zYearWeek ){
14641464
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 ){
14661466
blob_appendf(&desc, "%d most recent %ss", n, zEType);
14671467
}else{
14681468
blob_appendf(&desc, "%d %ss", n, zEType);
14691469
}
14701470
if( zUses ){
@@ -1511,11 +1511,11 @@
15111511
}
15121512
if( zBefore || (zAfter && n==nEntry) ){
15131513
zDate = db_text(0, "SELECT max(timestamp) FROM timeline /*scan*/");
15141514
timeline_submenu(&url, "Newer", "a", zDate, "b");
15151515
free(zDate);
1516
- }else if( tagid==0 ){
1516
+ }else if( tagid==0 && zUses==0 ){
15171517
if( zType[0]!='a' ){
15181518
timeline_submenu(&url, "All Types", "y", "all", 0);
15191519
}
15201520
if( zType[0]!='w' && g.perm.RdWiki ){
15211521
timeline_submenu(&url, "Wiki Only", "y", "w", 0);
15221522
--- 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 @@
532532
** private artifacts if we are not doing a private transfer.
533533
*/
534534
static void request_phantoms(Xfer *pXfer, int maxReq){
535535
Stmt q;
536536
db_prepare(&q,
537
- "SELECT uuid FROM phantom JOIN blob USING(rid)"
537
+ "SELECT uuid FROM phantom CROSS JOIN blob USING(rid) /*scan*/"
538538
" WHERE NOT EXISTS(SELECT 1 FROM shun WHERE uuid=blob.uuid) %s",
539539
(pXfer->syncPrivate ? "" :
540540
" AND NOT EXISTS(SELECT 1 FROM private WHERE rid=blob.rid)")
541541
);
542542
while( db_step(&q)==SQLITE_ROW && maxReq-- > 0 ){
543543
--- 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

Keyboard Shortcuts

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