Fossil SCM

Much faster rendering of branch timelines.

drh 2018-12-27 21:56 trunk
Commit fe40b652fe38a480ec456b9d2e5c765f88b9f11d6dd6cdf53d773d085b3d3ead
1 file changed +47 -46
+47 -46
--- src/timeline.c
+++ src/timeline.c
@@ -1876,62 +1876,63 @@
18761876
blob_append_sql(&cond, " AND event.mtime>=julianday('now','-%d days') ",
18771877
nDays);
18781878
nEntry = -1;
18791879
}
18801880
if( zTagSql ){
1881
- blob_append_sql(&cond,
1882
- " AND (EXISTS(SELECT 1 FROM tagxref NATURAL JOIN tag"
1883
- " WHERE %s AND tagtype>0 AND rid=blob.rid)\n", zTagSql/*safe-for-%s*/);
1884
-
1885
- if( related ){
1881
+ db_multi_exec(
1882
+ "CREATE TEMP TABLE selected_nodes(rid INTEGER PRIMARY KEY);"
1883
+ "INSERT OR IGNORE INTO selected_nodes"
1884
+ " SELECT tagxref.rid FROM tagxref NATURAL JOIN tag"
1885
+ " WHERE %s AND tagtype>0", zTagSql/*safe-for-%s*/
1886
+ );
1887
+ if( !related ){
1888
+ blob_append_sql(&cond, " AND blob.rid IN selected_nodes");
1889
+ }else{
1890
+ db_multi_exec(
1891
+ "CREATE TEMP TABLE related_nodes(rid INTEGER PRIMARY KEY);"
1892
+ "INSERT INTO related_nodes SELECT rid FROM selected_nodes;"
1893
+ );
1894
+ blob_append_sql(&cond, " AND blob.rid IN related_nodes");
18861895
/* The next two blob_appendf() calls add SQL that causes check-ins that
18871896
** are not part of the branch which are parents or children of the
18881897
** branch to be included in the report. These related check-ins are
18891898
** useful in helping to visualize what has happened on a quiescent
18901899
** branch that is infrequently merged with a much more activate branch.
18911900
*/
1892
- blob_append_sql(&cond,
1893
- " OR EXISTS(SELECT 1 FROM plink CROSS JOIN tagxref ON rid=cid"
1894
- " NATURAL JOIN tag WHERE %s AND tagtype>0 AND pid=blob.rid)\n",
1895
- zTagSql/*safe-for-%s*/
1896
- );
1897
- if( (tmFlags & TIMELINE_UNHIDE)==0 ){
1898
- blob_append_sql(&cond,
1899
- " AND NOT EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=cid"
1900
- " WHERE tagid=%d AND tagtype>0 AND pid=blob.rid)\n",
1901
- TAG_HIDDEN
1902
- );
1903
- }
1904
- if( P("mionly")==0 ){
1905
- blob_append_sql(&cond,
1906
- " OR EXISTS(SELECT 1 FROM plink CROSS JOIN tagxref ON rid=pid"
1907
- " NATURAL JOIN tag WHERE %s AND tagtype>0 AND cid=blob.rid)\n",
1908
- zTagSql/*safe-for-%s*/
1909
- );
1910
- if( (tmFlags & TIMELINE_UNHIDE)==0 ){
1911
- blob_append_sql(&cond,
1912
- " AND NOT EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=pid"
1913
- " WHERE tagid=%d AND tagtype>0 AND cid=blob.rid)\n",
1914
- TAG_HIDDEN
1915
- );
1916
- }
1917
- }
1918
- if( !PB("ncp") && db_table_exists("repository","cherrypick") ){
1919
- tmFlags |= TIMELINE_CHPICK;
1920
- blob_append_sql(&cond,
1921
- " OR EXISTS(SELECT 1 FROM cherrypick CROSS JOIN tagxref"
1922
- " ON rid=childid NATURAL JOIN tag WHERE %s AND tagtype>0"
1923
- " AND parentid=blob.rid)\n", zTagSql/*safe-for-%s*/
1924
- );
1925
- blob_append_sql(&cond,
1926
- " OR EXISTS(SELECT 1 FROM cherrypick CROSS JOIN tagxref"
1927
- " ON rid=parentid NATURAL JOIN tag WHERE %s AND tagtype>0"
1928
- " AND childid=blob.rid)\n", zTagSql/*safe-for-%s*/
1929
- );
1930
- }
1931
- }
1932
- blob_append_sql(&cond, ")");
1901
+ db_multi_exec(
1902
+ "INSERT OR IGNORE INTO related_nodes"
1903
+ " SELECT pid FROM selected_nodes CROSS JOIN plink"
1904
+ " WHERE selected_nodes.rid=plink.cid;"
1905
+ );
1906
+ if( P("mionly")==0 ){
1907
+ db_multi_exec(
1908
+ "INSERT OR IGNORE INTO related_nodes"
1909
+ " SELECT cid FROM selected_nodes CROSS JOIN plink"
1910
+ " WHERE selected_nodes.rid=plink.pid;"
1911
+ );
1912
+ }
1913
+ if( !PB("ncp") && db_table_exists("repository","cherrypick") ){
1914
+ db_multi_exec(
1915
+ "INSERT OR IGNORE INTO related_nodes"
1916
+ " SELECT parentid FROM selected_nodes CROSS JOIN cherrypick"
1917
+ " WHERE selected_nodes.rid=cherrypick.childid;"
1918
+ );
1919
+ db_multi_exec(
1920
+ "INSERT OR IGNORE INTO related_nodes"
1921
+ " SELECT childid FROM selected_nodes CROSS JOIN cherrypick"
1922
+ " WHERE selected_nodes.rid=cherrypick.parentid;"
1923
+ );
1924
+ }
1925
+ if( (tmFlags & TIMELINE_UNHIDE)==0 ){
1926
+ db_multi_exec(
1927
+ "DELETE FROM related_nodes WHERE rid IN "
1928
+ " (SELECT related_nodes.rid FROM related_nodes, tagxref"
1929
+ " WHERE tagid=%d AND tagtype>0 AND tagxref.rid=related_nodes.rid)",
1930
+ TAG_HIDDEN
1931
+ );
1932
+ }
1933
+ }
19331934
}
19341935
if( (zType[0]=='w' && !g.perm.RdWiki)
19351936
|| (zType[0]=='t' && !g.perm.RdTkt)
19361937
|| (zType[0]=='e' && !g.perm.RdWiki)
19371938
|| (zType[0]=='c' && !g.perm.Read)
19381939
--- src/timeline.c
+++ src/timeline.c
@@ -1876,62 +1876,63 @@
1876 blob_append_sql(&cond, " AND event.mtime>=julianday('now','-%d days') ",
1877 nDays);
1878 nEntry = -1;
1879 }
1880 if( zTagSql ){
1881 blob_append_sql(&cond,
1882 " AND (EXISTS(SELECT 1 FROM tagxref NATURAL JOIN tag"
1883 " WHERE %s AND tagtype>0 AND rid=blob.rid)\n", zTagSql/*safe-for-%s*/);
1884
1885 if( related ){
 
 
 
 
 
 
 
 
 
1886 /* The next two blob_appendf() calls add SQL that causes check-ins that
1887 ** are not part of the branch which are parents or children of the
1888 ** branch to be included in the report. These related check-ins are
1889 ** useful in helping to visualize what has happened on a quiescent
1890 ** branch that is infrequently merged with a much more activate branch.
1891 */
1892 blob_append_sql(&cond,
1893 " OR EXISTS(SELECT 1 FROM plink CROSS JOIN tagxref ON rid=cid"
1894 " NATURAL JOIN tag WHERE %s AND tagtype>0 AND pid=blob.rid)\n",
1895 zTagSql/*safe-for-%s*/
1896 );
1897 if( (tmFlags & TIMELINE_UNHIDE)==0 ){
1898 blob_append_sql(&cond,
1899 " AND NOT EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=cid"
1900 " WHERE tagid=%d AND tagtype>0 AND pid=blob.rid)\n",
1901 TAG_HIDDEN
1902 );
1903 }
1904 if( P("mionly")==0 ){
1905 blob_append_sql(&cond,
1906 " OR EXISTS(SELECT 1 FROM plink CROSS JOIN tagxref ON rid=pid"
1907 " NATURAL JOIN tag WHERE %s AND tagtype>0 AND cid=blob.rid)\n",
1908 zTagSql/*safe-for-%s*/
1909 );
1910 if( (tmFlags & TIMELINE_UNHIDE)==0 ){
1911 blob_append_sql(&cond,
1912 " AND NOT EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=pid"
1913 " WHERE tagid=%d AND tagtype>0 AND cid=blob.rid)\n",
1914 TAG_HIDDEN
1915 );
1916 }
1917 }
1918 if( !PB("ncp") && db_table_exists("repository","cherrypick") ){
1919 tmFlags |= TIMELINE_CHPICK;
1920 blob_append_sql(&cond,
1921 " OR EXISTS(SELECT 1 FROM cherrypick CROSS JOIN tagxref"
1922 " ON rid=childid NATURAL JOIN tag WHERE %s AND tagtype>0"
1923 " AND parentid=blob.rid)\n", zTagSql/*safe-for-%s*/
1924 );
1925 blob_append_sql(&cond,
1926 " OR EXISTS(SELECT 1 FROM cherrypick CROSS JOIN tagxref"
1927 " ON rid=parentid NATURAL JOIN tag WHERE %s AND tagtype>0"
1928 " AND childid=blob.rid)\n", zTagSql/*safe-for-%s*/
1929 );
1930 }
1931 }
1932 blob_append_sql(&cond, ")");
1933 }
1934 if( (zType[0]=='w' && !g.perm.RdWiki)
1935 || (zType[0]=='t' && !g.perm.RdTkt)
1936 || (zType[0]=='e' && !g.perm.RdWiki)
1937 || (zType[0]=='c' && !g.perm.Read)
1938
--- src/timeline.c
+++ src/timeline.c
@@ -1876,62 +1876,63 @@
1876 blob_append_sql(&cond, " AND event.mtime>=julianday('now','-%d days') ",
1877 nDays);
1878 nEntry = -1;
1879 }
1880 if( zTagSql ){
1881 db_multi_exec(
1882 "CREATE TEMP TABLE selected_nodes(rid INTEGER PRIMARY KEY);"
1883 "INSERT OR IGNORE INTO selected_nodes"
1884 " SELECT tagxref.rid FROM tagxref NATURAL JOIN tag"
1885 " WHERE %s AND tagtype>0", zTagSql/*safe-for-%s*/
1886 );
1887 if( !related ){
1888 blob_append_sql(&cond, " AND blob.rid IN selected_nodes");
1889 }else{
1890 db_multi_exec(
1891 "CREATE TEMP TABLE related_nodes(rid INTEGER PRIMARY KEY);"
1892 "INSERT INTO related_nodes SELECT rid FROM selected_nodes;"
1893 );
1894 blob_append_sql(&cond, " AND blob.rid IN related_nodes");
1895 /* The next two blob_appendf() calls add SQL that causes check-ins that
1896 ** are not part of the branch which are parents or children of the
1897 ** branch to be included in the report. These related check-ins are
1898 ** useful in helping to visualize what has happened on a quiescent
1899 ** branch that is infrequently merged with a much more activate branch.
1900 */
1901 db_multi_exec(
1902 "INSERT OR IGNORE INTO related_nodes"
1903 " SELECT pid FROM selected_nodes CROSS JOIN plink"
1904 " WHERE selected_nodes.rid=plink.cid;"
1905 );
1906 if( P("mionly")==0 ){
1907 db_multi_exec(
1908 "INSERT OR IGNORE INTO related_nodes"
1909 " SELECT cid FROM selected_nodes CROSS JOIN plink"
1910 " WHERE selected_nodes.rid=plink.pid;"
1911 );
1912 }
1913 if( !PB("ncp") && db_table_exists("repository","cherrypick") ){
1914 db_multi_exec(
1915 "INSERT OR IGNORE INTO related_nodes"
1916 " SELECT parentid FROM selected_nodes CROSS JOIN cherrypick"
1917 " WHERE selected_nodes.rid=cherrypick.childid;"
1918 );
1919 db_multi_exec(
1920 "INSERT OR IGNORE INTO related_nodes"
1921 " SELECT childid FROM selected_nodes CROSS JOIN cherrypick"
1922 " WHERE selected_nodes.rid=cherrypick.parentid;"
1923 );
1924 }
1925 if( (tmFlags & TIMELINE_UNHIDE)==0 ){
1926 db_multi_exec(
1927 "DELETE FROM related_nodes WHERE rid IN "
1928 " (SELECT related_nodes.rid FROM related_nodes, tagxref"
1929 " WHERE tagid=%d AND tagtype>0 AND tagxref.rid=related_nodes.rid)",
1930 TAG_HIDDEN
1931 );
1932 }
1933 }
 
 
 
 
 
 
 
 
1934 }
1935 if( (zType[0]=='w' && !g.perm.RdWiki)
1936 || (zType[0]=='t' && !g.perm.RdTkt)
1937 || (zType[0]=='e' && !g.perm.RdWiki)
1938 || (zType[0]=='c' && !g.perm.Read)
1939

Keyboard Shortcuts

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