Fossil SCM
Revise a query associated with /tree so that it runs a little faster.
Commit
0e2930f8e5b1985d3cbbab9956c3af31b20587ed5196fe4c3c6dd9d3eb71e7e5
Parent
e8a21ab43c775a6…
1 file changed
+13
-6
+13
-6
| --- src/browse.c | ||
| +++ src/browse.c | ||
| @@ -860,17 +860,24 @@ | ||
| 860 | 860 | } |
| 861 | 861 | db_finalize(&q); |
| 862 | 862 | }else{ |
| 863 | 863 | Stmt q; |
| 864 | 864 | db_prepare(&q, |
| 865 | + "WITH mx(fnid,fid,mtime) AS (\n" | |
| 866 | + " SELECT fnid, fid, max(event.mtime)\n" | |
| 867 | + " FROM mlink, event\n" | |
| 868 | + " WHERE event.objid=mlink.mid\n" | |
| 869 | + " GROUP BY 1\n" | |
| 870 | + ")\n" | |
| 865 | 871 | "SELECT\n" |
| 866 | - " (SELECT name FROM filename WHERE filename.fnid=mlink.fnid),\n" | |
| 867 | - " (SELECT uuid FROM blob WHERE blob.rid=mlink.fid),\n" | |
| 868 | - " (SELECT size FROM blob WHERE blob.rid=mlink.fid),\n" | |
| 869 | - " max(event.mtime)\n" | |
| 870 | - " FROM mlink JOIN event ON event.objid=mlink.mid\n" | |
| 871 | - " GROUP BY mlink.fnid\n" | |
| 872 | + " filename.name,\n" | |
| 873 | + " blob.uuid,\n" | |
| 874 | + " blob.size,\n" | |
| 875 | + " mx.mtime\n" | |
| 876 | + "FROM mx\n" | |
| 877 | + " LEFT JOIN filename ON filename.fnid=mx.fnid\n" | |
| 878 | + " LEFT JOIN blob ON blob.rid=mx.fid\n" | |
| 872 | 879 | " ORDER BY 1 COLLATE uintnocase;"); |
| 873 | 880 | while( db_step(&q)==SQLITE_ROW ){ |
| 874 | 881 | const char *zName = db_column_text(&q, 0); |
| 875 | 882 | const char *zUuid = db_column_text(&q,1); |
| 876 | 883 | int size = db_column_int(&q,2); |
| 877 | 884 |
| --- src/browse.c | |
| +++ src/browse.c | |
| @@ -860,17 +860,24 @@ | |
| 860 | } |
| 861 | db_finalize(&q); |
| 862 | }else{ |
| 863 | Stmt q; |
| 864 | db_prepare(&q, |
| 865 | "SELECT\n" |
| 866 | " (SELECT name FROM filename WHERE filename.fnid=mlink.fnid),\n" |
| 867 | " (SELECT uuid FROM blob WHERE blob.rid=mlink.fid),\n" |
| 868 | " (SELECT size FROM blob WHERE blob.rid=mlink.fid),\n" |
| 869 | " max(event.mtime)\n" |
| 870 | " FROM mlink JOIN event ON event.objid=mlink.mid\n" |
| 871 | " GROUP BY mlink.fnid\n" |
| 872 | " ORDER BY 1 COLLATE uintnocase;"); |
| 873 | while( db_step(&q)==SQLITE_ROW ){ |
| 874 | const char *zName = db_column_text(&q, 0); |
| 875 | const char *zUuid = db_column_text(&q,1); |
| 876 | int size = db_column_int(&q,2); |
| 877 |
| --- src/browse.c | |
| +++ src/browse.c | |
| @@ -860,17 +860,24 @@ | |
| 860 | } |
| 861 | db_finalize(&q); |
| 862 | }else{ |
| 863 | Stmt q; |
| 864 | db_prepare(&q, |
| 865 | "WITH mx(fnid,fid,mtime) AS (\n" |
| 866 | " SELECT fnid, fid, max(event.mtime)\n" |
| 867 | " FROM mlink, event\n" |
| 868 | " WHERE event.objid=mlink.mid\n" |
| 869 | " GROUP BY 1\n" |
| 870 | ")\n" |
| 871 | "SELECT\n" |
| 872 | " filename.name,\n" |
| 873 | " blob.uuid,\n" |
| 874 | " blob.size,\n" |
| 875 | " mx.mtime\n" |
| 876 | "FROM mx\n" |
| 877 | " LEFT JOIN filename ON filename.fnid=mx.fnid\n" |
| 878 | " LEFT JOIN blob ON blob.rid=mx.fid\n" |
| 879 | " ORDER BY 1 COLLATE uintnocase;"); |
| 880 | while( db_step(&q)==SQLITE_ROW ){ |
| 881 | const char *zName = db_column_text(&q, 0); |
| 882 | const char *zUuid = db_column_text(&q,1); |
| 883 | int size = db_column_int(&q,2); |
| 884 |