Fossil SCM
Much faster rendering of branch timelines.
Commit
fe40b652fe38a480ec456b9d2e5c765f88b9f11d6dd6cdf53d773d085b3d3ead
Parent
5c9955710fc6846…
1 file changed
+47
-46
+47
-46
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -1876,62 +1876,63 @@ | ||
| 1876 | 1876 | blob_append_sql(&cond, " AND event.mtime>=julianday('now','-%d days') ", |
| 1877 | 1877 | nDays); |
| 1878 | 1878 | nEntry = -1; |
| 1879 | 1879 | } |
| 1880 | 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 ){ | |
| 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"); | |
| 1886 | 1895 | /* The next two blob_appendf() calls add SQL that causes check-ins that |
| 1887 | 1896 | ** are not part of the branch which are parents or children of the |
| 1888 | 1897 | ** branch to be included in the report. These related check-ins are |
| 1889 | 1898 | ** useful in helping to visualize what has happened on a quiescent |
| 1890 | 1899 | ** branch that is infrequently merged with a much more activate branch. |
| 1891 | 1900 | */ |
| 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 | + } | |
| 1933 | 1934 | } |
| 1934 | 1935 | if( (zType[0]=='w' && !g.perm.RdWiki) |
| 1935 | 1936 | || (zType[0]=='t' && !g.perm.RdTkt) |
| 1936 | 1937 | || (zType[0]=='e' && !g.perm.RdWiki) |
| 1937 | 1938 | || (zType[0]=='c' && !g.perm.Read) |
| 1938 | 1939 |
| --- 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 |