Fossil SCM
Merged trunk to avoid style collisions later. Changed table.numbered-lines line-height from ex units to unitless, as Mozilla recommends.
Commit
41f270de75dbf3754951990de9ae1790e9c17845ff44d116e108fa0ab2d8236d
Parent
a54fa928e2b86b3…
7 files changed
+5
+38
-18
+38
-18
-4
+37
-11
+20
-24
+1
-1
+5
| --- src/blob.c | ||
| +++ src/blob.c | ||
| @@ -487,10 +487,15 @@ | ||
| 487 | 487 | ** |
| 488 | 488 | ** For semantic compatibility with blob_append_full(), if newSize is |
| 489 | 489 | ** >=0x7fff000 (~2GB) then this function will trigger blob_panic(). If |
| 490 | 490 | ** it didn't, it would be possible to bypass that hard-coded limit via |
| 491 | 491 | ** this function. |
| 492 | +** | |
| 493 | +** We've had at least one report: | |
| 494 | +** https://fossil-scm.org/forum/forumpost/b7bbd28db4 | |
| 495 | +** which implies that this is unconditionally failing on mingw 32-bit | |
| 496 | +** builds. | |
| 492 | 497 | */ |
| 493 | 498 | void blob_reserve(Blob *pBlob, unsigned int newSize){ |
| 494 | 499 | if(newSize>=0x7fff0000 ){ |
| 495 | 500 | blob_panic(); |
| 496 | 501 | }else if(newSize>pBlob->nUsed){ |
| 497 | 502 |
| --- src/blob.c | |
| +++ src/blob.c | |
| @@ -487,10 +487,15 @@ | |
| 487 | ** |
| 488 | ** For semantic compatibility with blob_append_full(), if newSize is |
| 489 | ** >=0x7fff000 (~2GB) then this function will trigger blob_panic(). If |
| 490 | ** it didn't, it would be possible to bypass that hard-coded limit via |
| 491 | ** this function. |
| 492 | */ |
| 493 | void blob_reserve(Blob *pBlob, unsigned int newSize){ |
| 494 | if(newSize>=0x7fff0000 ){ |
| 495 | blob_panic(); |
| 496 | }else if(newSize>pBlob->nUsed){ |
| 497 |
| --- src/blob.c | |
| +++ src/blob.c | |
| @@ -487,10 +487,15 @@ | |
| 487 | ** |
| 488 | ** For semantic compatibility with blob_append_full(), if newSize is |
| 489 | ** >=0x7fff000 (~2GB) then this function will trigger blob_panic(). If |
| 490 | ** it didn't, it would be possible to bypass that hard-coded limit via |
| 491 | ** this function. |
| 492 | ** |
| 493 | ** We've had at least one report: |
| 494 | ** https://fossil-scm.org/forum/forumpost/b7bbd28db4 |
| 495 | ** which implies that this is unconditionally failing on mingw 32-bit |
| 496 | ** builds. |
| 497 | */ |
| 498 | void blob_reserve(Blob *pBlob, unsigned int newSize){ |
| 499 | if(newSize>=0x7fff0000 ){ |
| 500 | blob_panic(); |
| 501 | }else if(newSize>pBlob->nUsed){ |
| 502 |
+38
-18
| --- src/default.css | ||
| +++ src/default.css | ||
| @@ -776,63 +776,83 @@ | ||
| 776 | 776 | div.forumTime > div > form, |
| 777 | 777 | div.forumHierRoot > div > form { |
| 778 | 778 | margin: 0.5em 0; |
| 779 | 779 | } |
| 780 | 780 | .forum-post-collapser { |
| 781 | + /* Common style for the bottom-of-post and right-of-post | |
| 782 | + expand/collapse widgets. */ | |
| 781 | 783 | font-size: 0.8em; |
| 782 | - margin: 0.2em 0 0 0; | |
| 783 | 784 | padding: 0; |
| 785 | + border: 1px solid rgba(0, 0, 0, 0.2); | |
| 786 | + border-radius: 0 0 0.5em 0.5em; | |
| 787 | + background-color: rgba(0, 0, 0, 0.05); | |
| 788 | + opacity: 0.8; | |
| 789 | + cursor: pointer; | |
| 790 | +} | |
| 791 | +.forum-post-collapser.bottom { | |
| 792 | + margin: 0 0 0.4em 0; | |
| 784 | 793 | height: 1.75em; |
| 785 | 794 | line-height: 1.75em; |
| 786 | 795 | /* ^^^ Those sizes are finely tuned for the current selection of |
| 787 | 796 | arrow characters. If those change, these should, too. Remember that |
| 788 | 797 | FF/Chrome simply do not agree on alignment with most values :/. */ |
| 789 | - border-width: 1px; | |
| 790 | - border-style: solid; | |
| 791 | - border-radius: 0.25em; | |
| 792 | - opacity: 0.8; | |
| 793 | - cursor: pointer; | |
| 794 | 798 | display: flex; |
| 795 | 799 | flex-direction: row; |
| 796 | 800 | justify-content: space-between; |
| 797 | 801 | } |
| 798 | -.forum-post-collapser > span { | |
| 802 | +.forum-post-collapser.bottom > span { | |
| 799 | 803 | margin: 0 1em 0 1em; |
| 800 | 804 | vertical-align: middle; |
| 801 | 805 | } |
| 802 | -.forum-post-collapser.expanded > span::before { | |
| 803 | - content: "⇡⇡⇡" /*reminder: FF/Chrome cannot agree on alignment of ⮝*/; | |
| 804 | -} | |
| 805 | -.forum-post-collapser:not(.expanded) > span::before { | |
| 806 | +.forum-post-collapser.bottom > span::before { | |
| 806 | 807 | content: "⇣⇣⇣"; |
| 807 | 808 | } |
| 809 | +.forum-post-collapser.bottom.expanded > span::before { | |
| 810 | + content: "⇡⇡⇡" /*reminder: FF/Chrome cannot agree on alignment of ⮝*/; | |
| 811 | +} | |
| 808 | 812 | div.forumPostBody{ |
| 809 | 813 | max-height: 50em; |
| 810 | 814 | overflow: auto; |
| 811 | 815 | } |
| 812 | 816 | div.forumPostBody.with-expander { |
| 813 | 817 | display: flex; |
| 814 | 818 | flex-direction: row; |
| 815 | 819 | overflow: auto; |
| 820 | +} | |
| 821 | +div.forumPostBody.with-expander:not(.expanded) > :first-child { | |
| 822 | + overflow-y: hidden; | |
| 816 | 823 | } |
| 817 | 824 | div.forumPostBody.with-expander > *:first-child { |
| 818 | - /* Main content DIV */ | |
| 825 | + /* Main content DIV/PRE */ | |
| 819 | 826 | overflow: auto; |
| 827 | + flex: 10 1 auto; | |
| 820 | 828 | } |
| 821 | 829 | div.forumPostBody.with-expander.expanded > *:first-child { |
| 822 | 830 | margin-bottom: 0.5em /* try to suppress scroll bar */; |
| 823 | 831 | } |
| 824 | -div.forumPostBody.with-expander > *:nth-child(2) { | |
| 832 | +div.forumPostBody.with-expander .forum-post-collapser.right { | |
| 825 | 833 | /* "Tap zone" for expansion of the post, sits to the right of the |
| 826 | 834 | post's content. */ |
| 835 | + flex: 1 10 auto; | |
| 827 | 836 | min-width: 1.25em; |
| 828 | 837 | max-width: 1.25em; |
| 829 | - /*for testing only:*//*background: magenta;*/ | |
| 830 | - margin: 0 0 0 0.2em /* leave a gap between this and the neighboring scrollbar */; | |
| 838 | + margin: 0 0 0 0.2em; | |
| 831 | 839 | overflow: hidden; |
| 832 | - background-color: #777; | |
| 833 | - opacity: 0.3; | |
| 840 | + display: flex; | |
| 841 | + flex-direction: column; | |
| 842 | + justify-content: space-around; | |
| 843 | + align-items: center; | |
| 844 | + border-radius: 0.1em; | |
| 845 | + cursor: pointer; | |
| 846 | + border-bottom: 0; | |
| 847 | + border-radius: 0 0.5em 0 0; | |
| 848 | +} | |
| 849 | +div.forumPostBody.with-expander .forum-post-collapser.right > span:before { | |
| 850 | + content: "⇣"; | |
| 851 | +} | |
| 852 | +div.forumPostBody.with-expander.expanded .forum-post-collapser.right > span:before { | |
| 853 | + content: "⇡"; | |
| 834 | 854 | } |
| 835 | 855 | div.forumPostBody.expanded { |
| 836 | 856 | max-height: initial; |
| 837 | 857 | } |
| 838 | 858 | div.forumPostBody.shrunken { |
| @@ -1143,11 +1163,11 @@ | ||
| 1143 | 1163 | vertical-align: middle; |
| 1144 | 1164 | } |
| 1145 | 1165 | |
| 1146 | 1166 | table.numbered-lines td { |
| 1147 | 1167 | font-family: monospace; |
| 1148 | - line-height: 2.8ex; | |
| 1168 | + line-height: 1.35; | |
| 1149 | 1169 | white-space: pre; |
| 1150 | 1170 | margin: 0; |
| 1151 | 1171 | white-space: nowrap; |
| 1152 | 1172 | vertical-align: top; |
| 1153 | 1173 | padding: 1em 0 0 0 /*prevents slight overlap at top */; |
| 1154 | 1174 |
| --- src/default.css | |
| +++ src/default.css | |
| @@ -776,63 +776,83 @@ | |
| 776 | div.forumTime > div > form, |
| 777 | div.forumHierRoot > div > form { |
| 778 | margin: 0.5em 0; |
| 779 | } |
| 780 | .forum-post-collapser { |
| 781 | font-size: 0.8em; |
| 782 | margin: 0.2em 0 0 0; |
| 783 | padding: 0; |
| 784 | height: 1.75em; |
| 785 | line-height: 1.75em; |
| 786 | /* ^^^ Those sizes are finely tuned for the current selection of |
| 787 | arrow characters. If those change, these should, too. Remember that |
| 788 | FF/Chrome simply do not agree on alignment with most values :/. */ |
| 789 | border-width: 1px; |
| 790 | border-style: solid; |
| 791 | border-radius: 0.25em; |
| 792 | opacity: 0.8; |
| 793 | cursor: pointer; |
| 794 | display: flex; |
| 795 | flex-direction: row; |
| 796 | justify-content: space-between; |
| 797 | } |
| 798 | .forum-post-collapser > span { |
| 799 | margin: 0 1em 0 1em; |
| 800 | vertical-align: middle; |
| 801 | } |
| 802 | .forum-post-collapser.expanded > span::before { |
| 803 | content: "⇡⇡⇡" /*reminder: FF/Chrome cannot agree on alignment of ⮝*/; |
| 804 | } |
| 805 | .forum-post-collapser:not(.expanded) > span::before { |
| 806 | content: "⇣⇣⇣"; |
| 807 | } |
| 808 | div.forumPostBody{ |
| 809 | max-height: 50em; |
| 810 | overflow: auto; |
| 811 | } |
| 812 | div.forumPostBody.with-expander { |
| 813 | display: flex; |
| 814 | flex-direction: row; |
| 815 | overflow: auto; |
| 816 | } |
| 817 | div.forumPostBody.with-expander > *:first-child { |
| 818 | /* Main content DIV */ |
| 819 | overflow: auto; |
| 820 | } |
| 821 | div.forumPostBody.with-expander.expanded > *:first-child { |
| 822 | margin-bottom: 0.5em /* try to suppress scroll bar */; |
| 823 | } |
| 824 | div.forumPostBody.with-expander > *:nth-child(2) { |
| 825 | /* "Tap zone" for expansion of the post, sits to the right of the |
| 826 | post's content. */ |
| 827 | min-width: 1.25em; |
| 828 | max-width: 1.25em; |
| 829 | /*for testing only:*//*background: magenta;*/ |
| 830 | margin: 0 0 0 0.2em /* leave a gap between this and the neighboring scrollbar */; |
| 831 | overflow: hidden; |
| 832 | background-color: #777; |
| 833 | opacity: 0.3; |
| 834 | } |
| 835 | div.forumPostBody.expanded { |
| 836 | max-height: initial; |
| 837 | } |
| 838 | div.forumPostBody.shrunken { |
| @@ -1143,11 +1163,11 @@ | |
| 1143 | vertical-align: middle; |
| 1144 | } |
| 1145 | |
| 1146 | table.numbered-lines td { |
| 1147 | font-family: monospace; |
| 1148 | line-height: 2.8ex; |
| 1149 | white-space: pre; |
| 1150 | margin: 0; |
| 1151 | white-space: nowrap; |
| 1152 | vertical-align: top; |
| 1153 | padding: 1em 0 0 0 /*prevents slight overlap at top */; |
| 1154 |
| --- src/default.css | |
| +++ src/default.css | |
| @@ -776,63 +776,83 @@ | |
| 776 | div.forumTime > div > form, |
| 777 | div.forumHierRoot > div > form { |
| 778 | margin: 0.5em 0; |
| 779 | } |
| 780 | .forum-post-collapser { |
| 781 | /* Common style for the bottom-of-post and right-of-post |
| 782 | expand/collapse widgets. */ |
| 783 | font-size: 0.8em; |
| 784 | padding: 0; |
| 785 | border: 1px solid rgba(0, 0, 0, 0.2); |
| 786 | border-radius: 0 0 0.5em 0.5em; |
| 787 | background-color: rgba(0, 0, 0, 0.05); |
| 788 | opacity: 0.8; |
| 789 | cursor: pointer; |
| 790 | } |
| 791 | .forum-post-collapser.bottom { |
| 792 | margin: 0 0 0.4em 0; |
| 793 | height: 1.75em; |
| 794 | line-height: 1.75em; |
| 795 | /* ^^^ Those sizes are finely tuned for the current selection of |
| 796 | arrow characters. If those change, these should, too. Remember that |
| 797 | FF/Chrome simply do not agree on alignment with most values :/. */ |
| 798 | display: flex; |
| 799 | flex-direction: row; |
| 800 | justify-content: space-between; |
| 801 | } |
| 802 | .forum-post-collapser.bottom > span { |
| 803 | margin: 0 1em 0 1em; |
| 804 | vertical-align: middle; |
| 805 | } |
| 806 | .forum-post-collapser.bottom > span::before { |
| 807 | content: "⇣⇣⇣"; |
| 808 | } |
| 809 | .forum-post-collapser.bottom.expanded > span::before { |
| 810 | content: "⇡⇡⇡" /*reminder: FF/Chrome cannot agree on alignment of ⮝*/; |
| 811 | } |
| 812 | div.forumPostBody{ |
| 813 | max-height: 50em; |
| 814 | overflow: auto; |
| 815 | } |
| 816 | div.forumPostBody.with-expander { |
| 817 | display: flex; |
| 818 | flex-direction: row; |
| 819 | overflow: auto; |
| 820 | } |
| 821 | div.forumPostBody.with-expander:not(.expanded) > :first-child { |
| 822 | overflow-y: hidden; |
| 823 | } |
| 824 | div.forumPostBody.with-expander > *:first-child { |
| 825 | /* Main content DIV/PRE */ |
| 826 | overflow: auto; |
| 827 | flex: 10 1 auto; |
| 828 | } |
| 829 | div.forumPostBody.with-expander.expanded > *:first-child { |
| 830 | margin-bottom: 0.5em /* try to suppress scroll bar */; |
| 831 | } |
| 832 | div.forumPostBody.with-expander .forum-post-collapser.right { |
| 833 | /* "Tap zone" for expansion of the post, sits to the right of the |
| 834 | post's content. */ |
| 835 | flex: 1 10 auto; |
| 836 | min-width: 1.25em; |
| 837 | max-width: 1.25em; |
| 838 | margin: 0 0 0 0.2em; |
| 839 | overflow: hidden; |
| 840 | display: flex; |
| 841 | flex-direction: column; |
| 842 | justify-content: space-around; |
| 843 | align-items: center; |
| 844 | border-radius: 0.1em; |
| 845 | cursor: pointer; |
| 846 | border-bottom: 0; |
| 847 | border-radius: 0 0.5em 0 0; |
| 848 | } |
| 849 | div.forumPostBody.with-expander .forum-post-collapser.right > span:before { |
| 850 | content: "⇣"; |
| 851 | } |
| 852 | div.forumPostBody.with-expander.expanded .forum-post-collapser.right > span:before { |
| 853 | content: "⇡"; |
| 854 | } |
| 855 | div.forumPostBody.expanded { |
| 856 | max-height: initial; |
| 857 | } |
| 858 | div.forumPostBody.shrunken { |
| @@ -1143,11 +1163,11 @@ | |
| 1163 | vertical-align: middle; |
| 1164 | } |
| 1165 | |
| 1166 | table.numbered-lines td { |
| 1167 | font-family: monospace; |
| 1168 | line-height: 1.35; |
| 1169 | white-space: pre; |
| 1170 | margin: 0; |
| 1171 | white-space: nowrap; |
| 1172 | vertical-align: top; |
| 1173 | padding: 1em 0 0 0 /*prevents slight overlap at top */; |
| 1174 |
+38
-18
| --- src/default.css | ||
| +++ src/default.css | ||
| @@ -776,63 +776,83 @@ | ||
| 776 | 776 | div.forumTime > div > form, |
| 777 | 777 | div.forumHierRoot > div > form { |
| 778 | 778 | margin: 0.5em 0; |
| 779 | 779 | } |
| 780 | 780 | .forum-post-collapser { |
| 781 | + /* Common style for the bottom-of-post and right-of-post | |
| 782 | + expand/collapse widgets. */ | |
| 781 | 783 | font-size: 0.8em; |
| 782 | - margin: 0.2em 0 0 0; | |
| 783 | 784 | padding: 0; |
| 785 | + border: 1px solid rgba(0, 0, 0, 0.2); | |
| 786 | + border-radius: 0 0 0.5em 0.5em; | |
| 787 | + background-color: rgba(0, 0, 0, 0.05); | |
| 788 | + opacity: 0.8; | |
| 789 | + cursor: pointer; | |
| 790 | +} | |
| 791 | +.forum-post-collapser.bottom { | |
| 792 | + margin: 0 0 0.4em 0; | |
| 784 | 793 | height: 1.75em; |
| 785 | 794 | line-height: 1.75em; |
| 786 | 795 | /* ^^^ Those sizes are finely tuned for the current selection of |
| 787 | 796 | arrow characters. If those change, these should, too. Remember that |
| 788 | 797 | FF/Chrome simply do not agree on alignment with most values :/. */ |
| 789 | - border-width: 1px; | |
| 790 | - border-style: solid; | |
| 791 | - border-radius: 0.25em; | |
| 792 | - opacity: 0.8; | |
| 793 | - cursor: pointer; | |
| 794 | 798 | display: flex; |
| 795 | 799 | flex-direction: row; |
| 796 | 800 | justify-content: space-between; |
| 797 | 801 | } |
| 798 | -.forum-post-collapser > span { | |
| 802 | +.forum-post-collapser.bottom > span { | |
| 799 | 803 | margin: 0 1em 0 1em; |
| 800 | 804 | vertical-align: middle; |
| 801 | 805 | } |
| 802 | -.forum-post-collapser.expanded > span::before { | |
| 803 | - content: "⇡⇡⇡" /*reminder: FF/Chrome cannot agree on alignment of ⮝*/; | |
| 804 | -} | |
| 805 | -.forum-post-collapser:not(.expanded) > span::before { | |
| 806 | +.forum-post-collapser.bottom > span::before { | |
| 806 | 807 | content: "⇣⇣⇣"; |
| 807 | 808 | } |
| 809 | +.forum-post-collapser.bottom.expanded > span::before { | |
| 810 | + content: "⇡⇡⇡" /*reminder: FF/Chrome cannot agree on alignment of ⮝*/; | |
| 811 | +} | |
| 808 | 812 | div.forumPostBody{ |
| 809 | 813 | max-height: 50em; |
| 810 | 814 | overflow: auto; |
| 811 | 815 | } |
| 812 | 816 | div.forumPostBody.with-expander { |
| 813 | 817 | display: flex; |
| 814 | 818 | flex-direction: row; |
| 815 | 819 | overflow: auto; |
| 820 | +} | |
| 821 | +div.forumPostBody.with-expander:not(.expanded) > :first-child { | |
| 822 | + overflow-y: hidden; | |
| 816 | 823 | } |
| 817 | 824 | div.forumPostBody.with-expander > *:first-child { |
| 818 | - /* Main content DIV */ | |
| 825 | + /* Main content DIV/PRE */ | |
| 819 | 826 | overflow: auto; |
| 827 | + flex: 10 1 auto; | |
| 820 | 828 | } |
| 821 | 829 | div.forumPostBody.with-expander.expanded > *:first-child { |
| 822 | 830 | margin-bottom: 0.5em /* try to suppress scroll bar */; |
| 823 | 831 | } |
| 824 | -div.forumPostBody.with-expander > *:nth-child(2) { | |
| 832 | +div.forumPostBody.with-expander .forum-post-collapser.right { | |
| 825 | 833 | /* "Tap zone" for expansion of the post, sits to the right of the |
| 826 | 834 | post's content. */ |
| 835 | + flex: 1 10 auto; | |
| 827 | 836 | min-width: 1.25em; |
| 828 | 837 | max-width: 1.25em; |
| 829 | - /*for testing only:*//*background: magenta;*/ | |
| 830 | - margin: 0 0 0 0.2em /* leave a gap between this and the neighboring scrollbar */; | |
| 838 | + margin: 0 0 0 0.2em; | |
| 831 | 839 | overflow: hidden; |
| 832 | - background-color: #777; | |
| 833 | - opacity: 0.3; | |
| 840 | + display: flex; | |
| 841 | + flex-direction: column; | |
| 842 | + justify-content: space-around; | |
| 843 | + align-items: center; | |
| 844 | + border-radius: 0.1em; | |
| 845 | + cursor: pointer; | |
| 846 | + border-bottom: 0; | |
| 847 | + border-radius: 0 0.5em 0 0; | |
| 848 | +} | |
| 849 | +div.forumPostBody.with-expander .forum-post-collapser.right > span:before { | |
| 850 | + content: "⇣"; | |
| 851 | +} | |
| 852 | +div.forumPostBody.with-expander.expanded .forum-post-collapser.right > span:before { | |
| 853 | + content: "⇡"; | |
| 834 | 854 | } |
| 835 | 855 | div.forumPostBody.expanded { |
| 836 | 856 | max-height: initial; |
| 837 | 857 | } |
| 838 | 858 | div.forumPostBody.shrunken { |
| @@ -1143,11 +1163,11 @@ | ||
| 1143 | 1163 | vertical-align: middle; |
| 1144 | 1164 | } |
| 1145 | 1165 | |
| 1146 | 1166 | table.numbered-lines td { |
| 1147 | 1167 | font-family: monospace; |
| 1148 | - line-height: 2.8ex; | |
| 1168 | + line-height: 1.35; | |
| 1149 | 1169 | white-space: pre; |
| 1150 | 1170 | margin: 0; |
| 1151 | 1171 | white-space: nowrap; |
| 1152 | 1172 | vertical-align: top; |
| 1153 | 1173 | padding: 1em 0 0 0 /*prevents slight overlap at top */; |
| 1154 | 1174 |
| --- src/default.css | |
| +++ src/default.css | |
| @@ -776,63 +776,83 @@ | |
| 776 | div.forumTime > div > form, |
| 777 | div.forumHierRoot > div > form { |
| 778 | margin: 0.5em 0; |
| 779 | } |
| 780 | .forum-post-collapser { |
| 781 | font-size: 0.8em; |
| 782 | margin: 0.2em 0 0 0; |
| 783 | padding: 0; |
| 784 | height: 1.75em; |
| 785 | line-height: 1.75em; |
| 786 | /* ^^^ Those sizes are finely tuned for the current selection of |
| 787 | arrow characters. If those change, these should, too. Remember that |
| 788 | FF/Chrome simply do not agree on alignment with most values :/. */ |
| 789 | border-width: 1px; |
| 790 | border-style: solid; |
| 791 | border-radius: 0.25em; |
| 792 | opacity: 0.8; |
| 793 | cursor: pointer; |
| 794 | display: flex; |
| 795 | flex-direction: row; |
| 796 | justify-content: space-between; |
| 797 | } |
| 798 | .forum-post-collapser > span { |
| 799 | margin: 0 1em 0 1em; |
| 800 | vertical-align: middle; |
| 801 | } |
| 802 | .forum-post-collapser.expanded > span::before { |
| 803 | content: "⇡⇡⇡" /*reminder: FF/Chrome cannot agree on alignment of ⮝*/; |
| 804 | } |
| 805 | .forum-post-collapser:not(.expanded) > span::before { |
| 806 | content: "⇣⇣⇣"; |
| 807 | } |
| 808 | div.forumPostBody{ |
| 809 | max-height: 50em; |
| 810 | overflow: auto; |
| 811 | } |
| 812 | div.forumPostBody.with-expander { |
| 813 | display: flex; |
| 814 | flex-direction: row; |
| 815 | overflow: auto; |
| 816 | } |
| 817 | div.forumPostBody.with-expander > *:first-child { |
| 818 | /* Main content DIV */ |
| 819 | overflow: auto; |
| 820 | } |
| 821 | div.forumPostBody.with-expander.expanded > *:first-child { |
| 822 | margin-bottom: 0.5em /* try to suppress scroll bar */; |
| 823 | } |
| 824 | div.forumPostBody.with-expander > *:nth-child(2) { |
| 825 | /* "Tap zone" for expansion of the post, sits to the right of the |
| 826 | post's content. */ |
| 827 | min-width: 1.25em; |
| 828 | max-width: 1.25em; |
| 829 | /*for testing only:*//*background: magenta;*/ |
| 830 | margin: 0 0 0 0.2em /* leave a gap between this and the neighboring scrollbar */; |
| 831 | overflow: hidden; |
| 832 | background-color: #777; |
| 833 | opacity: 0.3; |
| 834 | } |
| 835 | div.forumPostBody.expanded { |
| 836 | max-height: initial; |
| 837 | } |
| 838 | div.forumPostBody.shrunken { |
| @@ -1143,11 +1163,11 @@ | |
| 1143 | vertical-align: middle; |
| 1144 | } |
| 1145 | |
| 1146 | table.numbered-lines td { |
| 1147 | font-family: monospace; |
| 1148 | line-height: 2.8ex; |
| 1149 | white-space: pre; |
| 1150 | margin: 0; |
| 1151 | white-space: nowrap; |
| 1152 | vertical-align: top; |
| 1153 | padding: 1em 0 0 0 /*prevents slight overlap at top */; |
| 1154 |
| --- src/default.css | |
| +++ src/default.css | |
| @@ -776,63 +776,83 @@ | |
| 776 | div.forumTime > div > form, |
| 777 | div.forumHierRoot > div > form { |
| 778 | margin: 0.5em 0; |
| 779 | } |
| 780 | .forum-post-collapser { |
| 781 | /* Common style for the bottom-of-post and right-of-post |
| 782 | expand/collapse widgets. */ |
| 783 | font-size: 0.8em; |
| 784 | padding: 0; |
| 785 | border: 1px solid rgba(0, 0, 0, 0.2); |
| 786 | border-radius: 0 0 0.5em 0.5em; |
| 787 | background-color: rgba(0, 0, 0, 0.05); |
| 788 | opacity: 0.8; |
| 789 | cursor: pointer; |
| 790 | } |
| 791 | .forum-post-collapser.bottom { |
| 792 | margin: 0 0 0.4em 0; |
| 793 | height: 1.75em; |
| 794 | line-height: 1.75em; |
| 795 | /* ^^^ Those sizes are finely tuned for the current selection of |
| 796 | arrow characters. If those change, these should, too. Remember that |
| 797 | FF/Chrome simply do not agree on alignment with most values :/. */ |
| 798 | display: flex; |
| 799 | flex-direction: row; |
| 800 | justify-content: space-between; |
| 801 | } |
| 802 | .forum-post-collapser.bottom > span { |
| 803 | margin: 0 1em 0 1em; |
| 804 | vertical-align: middle; |
| 805 | } |
| 806 | .forum-post-collapser.bottom > span::before { |
| 807 | content: "⇣⇣⇣"; |
| 808 | } |
| 809 | .forum-post-collapser.bottom.expanded > span::before { |
| 810 | content: "⇡⇡⇡" /*reminder: FF/Chrome cannot agree on alignment of ⮝*/; |
| 811 | } |
| 812 | div.forumPostBody{ |
| 813 | max-height: 50em; |
| 814 | overflow: auto; |
| 815 | } |
| 816 | div.forumPostBody.with-expander { |
| 817 | display: flex; |
| 818 | flex-direction: row; |
| 819 | overflow: auto; |
| 820 | } |
| 821 | div.forumPostBody.with-expander:not(.expanded) > :first-child { |
| 822 | overflow-y: hidden; |
| 823 | } |
| 824 | div.forumPostBody.with-expander > *:first-child { |
| 825 | /* Main content DIV/PRE */ |
| 826 | overflow: auto; |
| 827 | flex: 10 1 auto; |
| 828 | } |
| 829 | div.forumPostBody.with-expander.expanded > *:first-child { |
| 830 | margin-bottom: 0.5em /* try to suppress scroll bar */; |
| 831 | } |
| 832 | div.forumPostBody.with-expander .forum-post-collapser.right { |
| 833 | /* "Tap zone" for expansion of the post, sits to the right of the |
| 834 | post's content. */ |
| 835 | flex: 1 10 auto; |
| 836 | min-width: 1.25em; |
| 837 | max-width: 1.25em; |
| 838 | margin: 0 0 0 0.2em; |
| 839 | overflow: hidden; |
| 840 | display: flex; |
| 841 | flex-direction: column; |
| 842 | justify-content: space-around; |
| 843 | align-items: center; |
| 844 | border-radius: 0.1em; |
| 845 | cursor: pointer; |
| 846 | border-bottom: 0; |
| 847 | border-radius: 0 0.5em 0 0; |
| 848 | } |
| 849 | div.forumPostBody.with-expander .forum-post-collapser.right > span:before { |
| 850 | content: "⇣"; |
| 851 | } |
| 852 | div.forumPostBody.with-expander.expanded .forum-post-collapser.right > span:before { |
| 853 | content: "⇡"; |
| 854 | } |
| 855 | div.forumPostBody.expanded { |
| 856 | max-height: initial; |
| 857 | } |
| 858 | div.forumPostBody.shrunken { |
| @@ -1143,11 +1163,11 @@ | |
| 1163 | vertical-align: middle; |
| 1164 | } |
| 1165 | |
| 1166 | table.numbered-lines td { |
| 1167 | font-family: monospace; |
| 1168 | line-height: 1.35; |
| 1169 | white-space: pre; |
| 1170 | margin: 0; |
| 1171 | white-space: nowrap; |
| 1172 | vertical-align: top; |
| 1173 | padding: 1em 0 0 0 /*prevents slight overlap at top */; |
| 1174 |
-4
| --- src/fileedit.c | ||
| +++ src/fileedit.c | ||
| @@ -364,14 +364,10 @@ | ||
| 364 | 364 | blob_appendf(pOut, "B %s\n", |
| 365 | 365 | pCI->pParent->zBaseline |
| 366 | 366 | ? pCI->pParent->zBaseline |
| 367 | 367 | : pCI->zParentUuid); |
| 368 | 368 | } |
| 369 | - blob_reserve(pOut, 1024 * | |
| 370 | - (asDelta ? 2 : pCI->pParent->nFile/11+1 | |
| 371 | - /* In the fossil core repo, each 12-ish F-cards (on | |
| 372 | - ** average) take up roughly 1kb */)); | |
| 373 | 369 | if(blob_size(&pCI->comment)!=0){ |
| 374 | 370 | blob_appendf(pOut, "C %F\n", blob_str(&pCI->comment)); |
| 375 | 371 | }else{ |
| 376 | 372 | blob_append(pOut, "C (no\\scomment)\n", 16); |
| 377 | 373 | } |
| 378 | 374 |
| --- src/fileedit.c | |
| +++ src/fileedit.c | |
| @@ -364,14 +364,10 @@ | |
| 364 | blob_appendf(pOut, "B %s\n", |
| 365 | pCI->pParent->zBaseline |
| 366 | ? pCI->pParent->zBaseline |
| 367 | : pCI->zParentUuid); |
| 368 | } |
| 369 | blob_reserve(pOut, 1024 * |
| 370 | (asDelta ? 2 : pCI->pParent->nFile/11+1 |
| 371 | /* In the fossil core repo, each 12-ish F-cards (on |
| 372 | ** average) take up roughly 1kb */)); |
| 373 | if(blob_size(&pCI->comment)!=0){ |
| 374 | blob_appendf(pOut, "C %F\n", blob_str(&pCI->comment)); |
| 375 | }else{ |
| 376 | blob_append(pOut, "C (no\\scomment)\n", 16); |
| 377 | } |
| 378 |
| --- src/fileedit.c | |
| +++ src/fileedit.c | |
| @@ -364,14 +364,10 @@ | |
| 364 | blob_appendf(pOut, "B %s\n", |
| 365 | pCI->pParent->zBaseline |
| 366 | ? pCI->pParent->zBaseline |
| 367 | : pCI->zParentUuid); |
| 368 | } |
| 369 | if(blob_size(&pCI->comment)!=0){ |
| 370 | blob_appendf(pOut, "C %F\n", blob_str(&pCI->comment)); |
| 371 | }else{ |
| 372 | blob_append(pOut, "C (no\\scomment)\n", 16); |
| 373 | } |
| 374 |
+37
-11
| --- src/fossil.page.forumpost.js | ||
| +++ src/fossil.page.forumpost.js | ||
| @@ -13,32 +13,62 @@ | ||
| 13 | 13 | const wasExpanded = widget.classList.contains('expanded'); |
| 14 | 14 | widget.classList.toggle('expanded'); |
| 15 | 15 | contentElem.classList.toggle('expanded'); |
| 16 | 16 | if(wasExpanded){ |
| 17 | 17 | contentElem.classList.add('shrunken'); |
| 18 | - contentElem.parentElement.scrollIntoView(); | |
| 18 | + contentElem.parentElement.scrollIntoView({ | |
| 19 | + /* This is non-standard, but !(MSIE, Safari) supposedly support it: | |
| 20 | + https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView#Browser_compatibility | |
| 21 | + */ behavior: 'smooth' | |
| 22 | + }); | |
| 19 | 23 | }else{ |
| 20 | 24 | contentElem.classList.remove('shrunken'); |
| 21 | 25 | } |
| 22 | 26 | return false; |
| 23 | 27 | }; |
| 24 | 28 | }; |
| 29 | + | |
| 25 | 30 | /* Adds an Expand/Collapse toggle to all div.forumPostBody |
| 26 | 31 | elements which are deemed "too large" (those for which |
| 27 | 32 | scrolling is currently activated because they are taller than |
| 28 | 33 | their max-height). */ |
| 29 | 34 | document.querySelectorAll( |
| 30 | 35 | 'div.forumHier, div.forumTime, div.forumHierRoot' |
| 31 | - ).forEach(function(forumPostWrapper){ | |
| 36 | + ).forEach(function f(forumPostWrapper){ | |
| 32 | 37 | const content = forumPostWrapper.querySelector('div.forumPostBody'); |
| 33 | 38 | if(!content || !scrollbarIsVisible(content)) return; |
| 34 | 39 | const parent = content.parentElement, |
| 35 | - rightTapZone = D.div(), | |
| 36 | - widget = D.div(), | |
| 37 | - widgetEventHandler = getWidgetHandler(widget, content); | |
| 40 | + widget = D.addClass( | |
| 41 | + D.div(), | |
| 42 | + 'forum-post-collapser','bottom' | |
| 43 | + ), | |
| 44 | + rightTapZone = D.addClass( | |
| 45 | + D.div(), | |
| 46 | + 'forum-post-collapser','right' | |
| 47 | + ); | |
| 48 | + /* Repopulates the rightTapZone with arrow indicators. Because | |
| 49 | + of the wildly varying height of these elements, This has to | |
| 50 | + be done dynamically at init time and upon collapse/expand. Will not | |
| 51 | + work until the rightTapZone has been added to the DOM. */ | |
| 52 | + const refillTapZone = function f(){ | |
| 53 | + if(!f.baseTapIndicatorHeight){ | |
| 54 | + /* To figure out how often to place an arrow in the rightTapZone, | |
| 55 | + we simply grab the first header element from the page and use | |
| 56 | + its hight as our basis for calculation. */ | |
| 57 | + const h1 = document.querySelector('h1, h2'); | |
| 58 | + f.baseTapIndicatorHeight = h1.getBoundingClientRect().height; | |
| 59 | + } | |
| 60 | + D.clearElement(rightTapZone); | |
| 61 | + var rtzHeight = parseInt(window.getComputedStyle(rightTapZone).height); | |
| 62 | + do { | |
| 63 | + D.append(rightTapZone, D.span()); | |
| 64 | + rtzHeight -= f.baseTapIndicatorHeight * 8; | |
| 65 | + }while(rtzHeight>0); | |
| 66 | + }; | |
| 67 | + const handlerStep1 = getWidgetHandler(widget, content); | |
| 68 | + const widgetEventHandler = ()=>{ handlerStep1(); refillTapZone(); }; | |
| 38 | 69 | content.classList.add('with-expander'); |
| 39 | - widget.classList.add('forum-post-collapser'); | |
| 40 | 70 | widget.addEventListener('click', widgetEventHandler, false); |
| 41 | 71 | /** Append 3 children, which CSS will evenly space across the |
| 42 | 72 | widget. This improves visibility over having the label |
| 43 | 73 | in only the left, right, or center. */ |
| 44 | 74 | var i = 0; |
| @@ -46,16 +76,12 @@ | ||
| 46 | 76 | if(content.nextSibling){ |
| 47 | 77 | forumPostWrapper.insertBefore(widget, content.nextSibling); |
| 48 | 78 | }else{ |
| 49 | 79 | forumPostWrapper.appendChild(widget); |
| 50 | 80 | } |
| 51 | - /** A double-click toggle will select "the current word" on the | |
| 52 | - post, which is minorly annoying but otherwise harmless. Such | |
| 53 | - a toggle has proven convenient on "excessive" posts, | |
| 54 | - though. */ | |
| 55 | - //content.addEventListener('dblclick', widgetEventHandler); | |
| 56 | 81 | content.appendChild(rightTapZone); |
| 57 | 82 | rightTapZone.addEventListener('click', widgetEventHandler, false); |
| 83 | + refillTapZone(); | |
| 58 | 84 | }); |
| 59 | 85 | })/*onload callback*/; |
| 60 | 86 | |
| 61 | 87 | })(window.fossil); |
| 62 | 88 |
| --- src/fossil.page.forumpost.js | |
| +++ src/fossil.page.forumpost.js | |
| @@ -13,32 +13,62 @@ | |
| 13 | const wasExpanded = widget.classList.contains('expanded'); |
| 14 | widget.classList.toggle('expanded'); |
| 15 | contentElem.classList.toggle('expanded'); |
| 16 | if(wasExpanded){ |
| 17 | contentElem.classList.add('shrunken'); |
| 18 | contentElem.parentElement.scrollIntoView(); |
| 19 | }else{ |
| 20 | contentElem.classList.remove('shrunken'); |
| 21 | } |
| 22 | return false; |
| 23 | }; |
| 24 | }; |
| 25 | /* Adds an Expand/Collapse toggle to all div.forumPostBody |
| 26 | elements which are deemed "too large" (those for which |
| 27 | scrolling is currently activated because they are taller than |
| 28 | their max-height). */ |
| 29 | document.querySelectorAll( |
| 30 | 'div.forumHier, div.forumTime, div.forumHierRoot' |
| 31 | ).forEach(function(forumPostWrapper){ |
| 32 | const content = forumPostWrapper.querySelector('div.forumPostBody'); |
| 33 | if(!content || !scrollbarIsVisible(content)) return; |
| 34 | const parent = content.parentElement, |
| 35 | rightTapZone = D.div(), |
| 36 | widget = D.div(), |
| 37 | widgetEventHandler = getWidgetHandler(widget, content); |
| 38 | content.classList.add('with-expander'); |
| 39 | widget.classList.add('forum-post-collapser'); |
| 40 | widget.addEventListener('click', widgetEventHandler, false); |
| 41 | /** Append 3 children, which CSS will evenly space across the |
| 42 | widget. This improves visibility over having the label |
| 43 | in only the left, right, or center. */ |
| 44 | var i = 0; |
| @@ -46,16 +76,12 @@ | |
| 46 | if(content.nextSibling){ |
| 47 | forumPostWrapper.insertBefore(widget, content.nextSibling); |
| 48 | }else{ |
| 49 | forumPostWrapper.appendChild(widget); |
| 50 | } |
| 51 | /** A double-click toggle will select "the current word" on the |
| 52 | post, which is minorly annoying but otherwise harmless. Such |
| 53 | a toggle has proven convenient on "excessive" posts, |
| 54 | though. */ |
| 55 | //content.addEventListener('dblclick', widgetEventHandler); |
| 56 | content.appendChild(rightTapZone); |
| 57 | rightTapZone.addEventListener('click', widgetEventHandler, false); |
| 58 | }); |
| 59 | })/*onload callback*/; |
| 60 | |
| 61 | })(window.fossil); |
| 62 |
| --- src/fossil.page.forumpost.js | |
| +++ src/fossil.page.forumpost.js | |
| @@ -13,32 +13,62 @@ | |
| 13 | const wasExpanded = widget.classList.contains('expanded'); |
| 14 | widget.classList.toggle('expanded'); |
| 15 | contentElem.classList.toggle('expanded'); |
| 16 | if(wasExpanded){ |
| 17 | contentElem.classList.add('shrunken'); |
| 18 | contentElem.parentElement.scrollIntoView({ |
| 19 | /* This is non-standard, but !(MSIE, Safari) supposedly support it: |
| 20 | https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView#Browser_compatibility |
| 21 | */ behavior: 'smooth' |
| 22 | }); |
| 23 | }else{ |
| 24 | contentElem.classList.remove('shrunken'); |
| 25 | } |
| 26 | return false; |
| 27 | }; |
| 28 | }; |
| 29 | |
| 30 | /* Adds an Expand/Collapse toggle to all div.forumPostBody |
| 31 | elements which are deemed "too large" (those for which |
| 32 | scrolling is currently activated because they are taller than |
| 33 | their max-height). */ |
| 34 | document.querySelectorAll( |
| 35 | 'div.forumHier, div.forumTime, div.forumHierRoot' |
| 36 | ).forEach(function f(forumPostWrapper){ |
| 37 | const content = forumPostWrapper.querySelector('div.forumPostBody'); |
| 38 | if(!content || !scrollbarIsVisible(content)) return; |
| 39 | const parent = content.parentElement, |
| 40 | widget = D.addClass( |
| 41 | D.div(), |
| 42 | 'forum-post-collapser','bottom' |
| 43 | ), |
| 44 | rightTapZone = D.addClass( |
| 45 | D.div(), |
| 46 | 'forum-post-collapser','right' |
| 47 | ); |
| 48 | /* Repopulates the rightTapZone with arrow indicators. Because |
| 49 | of the wildly varying height of these elements, This has to |
| 50 | be done dynamically at init time and upon collapse/expand. Will not |
| 51 | work until the rightTapZone has been added to the DOM. */ |
| 52 | const refillTapZone = function f(){ |
| 53 | if(!f.baseTapIndicatorHeight){ |
| 54 | /* To figure out how often to place an arrow in the rightTapZone, |
| 55 | we simply grab the first header element from the page and use |
| 56 | its hight as our basis for calculation. */ |
| 57 | const h1 = document.querySelector('h1, h2'); |
| 58 | f.baseTapIndicatorHeight = h1.getBoundingClientRect().height; |
| 59 | } |
| 60 | D.clearElement(rightTapZone); |
| 61 | var rtzHeight = parseInt(window.getComputedStyle(rightTapZone).height); |
| 62 | do { |
| 63 | D.append(rightTapZone, D.span()); |
| 64 | rtzHeight -= f.baseTapIndicatorHeight * 8; |
| 65 | }while(rtzHeight>0); |
| 66 | }; |
| 67 | const handlerStep1 = getWidgetHandler(widget, content); |
| 68 | const widgetEventHandler = ()=>{ handlerStep1(); refillTapZone(); }; |
| 69 | content.classList.add('with-expander'); |
| 70 | widget.addEventListener('click', widgetEventHandler, false); |
| 71 | /** Append 3 children, which CSS will evenly space across the |
| 72 | widget. This improves visibility over having the label |
| 73 | in only the left, right, or center. */ |
| 74 | var i = 0; |
| @@ -46,16 +76,12 @@ | |
| 76 | if(content.nextSibling){ |
| 77 | forumPostWrapper.insertBefore(widget, content.nextSibling); |
| 78 | }else{ |
| 79 | forumPostWrapper.appendChild(widget); |
| 80 | } |
| 81 | content.appendChild(rightTapZone); |
| 82 | rightTapZone.addEventListener('click', widgetEventHandler, false); |
| 83 | refillTapZone(); |
| 84 | }); |
| 85 | })/*onload callback*/; |
| 86 | |
| 87 | })(window.fossil); |
| 88 |
+20
-24
| --- src/sqlite3.c | ||
| +++ src/sqlite3.c | ||
| @@ -1171,11 +1171,11 @@ | ||
| 1171 | 1171 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 1172 | 1172 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 1173 | 1173 | */ |
| 1174 | 1174 | #define SQLITE_VERSION "3.33.0" |
| 1175 | 1175 | #define SQLITE_VERSION_NUMBER 3033000 |
| 1176 | -#define SQLITE_SOURCE_ID "2020-08-10 19:35:01 680bdc6524ad6af0e74401e96e3a576145042fb865c1582bfaffc11d4ff76a4f" | |
| 1176 | +#define SQLITE_SOURCE_ID "2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f" | |
| 1177 | 1177 | |
| 1178 | 1178 | /* |
| 1179 | 1179 | ** CAPI3REF: Run-Time Library Version Numbers |
| 1180 | 1180 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 1181 | 1181 | ** |
| @@ -17913,15 +17913,10 @@ | ||
| 17913 | 17913 | int nFunc; /* Number of entries in aFunc[] */ |
| 17914 | 17914 | u32 selId; /* Select to which this AggInfo belongs */ |
| 17915 | 17915 | AggInfo *pNext; /* Next in list of them all */ |
| 17916 | 17916 | }; |
| 17917 | 17917 | |
| 17918 | -/* | |
| 17919 | -** Value for AggInfo.iAggMagic when the structure is valid | |
| 17920 | -*/ | |
| 17921 | -#define AggInfoMagic 0x2059e99e | |
| 17922 | - | |
| 17923 | 17918 | /* |
| 17924 | 17919 | ** The datatype ynVar is a signed integer, either 16-bit or 32-bit. |
| 17925 | 17920 | ** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater |
| 17926 | 17921 | ** than 32767 we have to make it 32-bit. 16-bit is preferred because |
| 17927 | 17922 | ** it uses less memory in the Expr object, which is a big memory user |
| @@ -18756,13 +18751,11 @@ | ||
| 18756 | 18751 | |
| 18757 | 18752 | Token sLastToken; /* The last token parsed */ |
| 18758 | 18753 | ynVar nVar; /* Number of '?' variables seen in the SQL so far */ |
| 18759 | 18754 | u8 iPkSortOrder; /* ASC or DESC for INTEGER PRIMARY KEY */ |
| 18760 | 18755 | u8 explain; /* True if the EXPLAIN flag is found on the query */ |
| 18761 | -#if !(defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_OMIT_ALTERTABLE)) | |
| 18762 | 18756 | u8 eParseMode; /* PARSE_MODE_XXX constant */ |
| 18763 | -#endif | |
| 18764 | 18757 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 18765 | 18758 | int nVtabLock; /* Number of virtual tables to lock */ |
| 18766 | 18759 | #endif |
| 18767 | 18760 | int nHeight; /* Expression tree height of current sub-select */ |
| 18768 | 18761 | #ifndef SQLITE_OMIT_EXPLAIN |
| @@ -61417,13 +61410,14 @@ | ||
| 61417 | 61410 | i64 nReq = ((i64)mxPage * szPage); |
| 61418 | 61411 | i64 nSize; /* Current size of database file */ |
| 61419 | 61412 | sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_CKPT_START, 0); |
| 61420 | 61413 | rc = sqlite3OsFileSize(pWal->pDbFd, &nSize); |
| 61421 | 61414 | if( rc==SQLITE_OK && nSize<nReq ){ |
| 61422 | - if( (nSize+(i64)pWal->hdr.mxFrame*szPage)<nReq ){ | |
| 61415 | + if( (nSize+65536+(i64)pWal->hdr.mxFrame*szPage)<nReq ){ | |
| 61423 | 61416 | /* If the size of the final database is larger than the current |
| 61424 | - ** database plus the amount of data in the wal file, then there | |
| 61417 | + ** database plus the amount of data in the wal file, plus the | |
| 61418 | + ** maximum size of the pending-byte page (65536 bytes), then | |
| 61425 | 61419 | ** must be corruption somewhere. */ |
| 61426 | 61420 | rc = SQLITE_CORRUPT_BKPT; |
| 61427 | 61421 | }else{ |
| 61428 | 61422 | sqlite3OsFileControlHint(pWal->pDbFd, SQLITE_FCNTL_SIZE_HINT,&nReq); |
| 61429 | 61423 | } |
| @@ -74749,12 +74743,12 @@ | ||
| 74749 | 74743 | } |
| 74750 | 74744 | if( getPageReferenced(&sCheck, i)!=0 && |
| 74751 | 74745 | (PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){ |
| 74752 | 74746 | checkAppendMsg(&sCheck, "Pointer map page %d is referenced", i); |
| 74753 | 74747 | } |
| 74748 | +#endif | |
| 74754 | 74749 | } |
| 74755 | -#endif | |
| 74756 | 74750 | } |
| 74757 | 74751 | |
| 74758 | 74752 | /* Clean up and report errors. |
| 74759 | 74753 | */ |
| 74760 | 74754 | integrity_ck_cleanup: |
| @@ -106997,11 +106991,11 @@ | ||
| 106997 | 106991 | } |
| 106998 | 106992 | if( rc==SQLITE_OK && pStep->zTarget ){ |
| 106999 | 106993 | SrcList *pSrc = sqlite3TriggerStepSrc(pParse, pStep); |
| 107000 | 106994 | if( pSrc ){ |
| 107001 | 106995 | int i; |
| 107002 | - for(i=0; i<pSrc->nSrc; i++){ | |
| 106996 | + for(i=0; i<pSrc->nSrc && rc==SQLITE_OK; i++){ | |
| 107003 | 106997 | struct SrcList_item *p = &pSrc->a[i]; |
| 107004 | 106998 | p->pTab = sqlite3LocateTableItem(pParse, 0, p); |
| 107005 | 106999 | p->iCursor = pParse->nTab++; |
| 107006 | 107000 | if( p->pTab==0 ){ |
| 107007 | 107001 | rc = SQLITE_ERROR; |
| @@ -113101,14 +113095,12 @@ | ||
| 113101 | 113095 | ** statement that defines the view. |
| 113102 | 113096 | */ |
| 113103 | 113097 | assert( pTable->pSelect ); |
| 113104 | 113098 | pSel = sqlite3SelectDup(db, pTable->pSelect, 0); |
| 113105 | 113099 | if( pSel ){ |
| 113106 | -#ifndef SQLITE_OMIT_ALTERTABLE | |
| 113107 | 113100 | u8 eParseMode = pParse->eParseMode; |
| 113108 | 113101 | pParse->eParseMode = PARSE_MODE_NORMAL; |
| 113109 | -#endif | |
| 113110 | 113102 | n = pParse->nTab; |
| 113111 | 113103 | sqlite3SrcListAssignCursors(pParse, pSel->pSrc); |
| 113112 | 113104 | pTable->nCol = -1; |
| 113113 | 113105 | DisableLookaside; |
| 113114 | 113106 | #ifndef SQLITE_OMIT_AUTHORIZATION |
| @@ -113152,13 +113144,11 @@ | ||
| 113152 | 113144 | } |
| 113153 | 113145 | pTable->nNVCol = pTable->nCol; |
| 113154 | 113146 | sqlite3DeleteTable(db, pSelTab); |
| 113155 | 113147 | sqlite3SelectDelete(db, pSel); |
| 113156 | 113148 | EnableLookaside; |
| 113157 | -#ifndef SQLITE_OMIT_ALTERTABLE | |
| 113158 | 113149 | pParse->eParseMode = eParseMode; |
| 113159 | -#endif | |
| 113160 | 113150 | } else { |
| 113161 | 113151 | nErr++; |
| 113162 | 113152 | } |
| 113163 | 113153 | pTable->pSchema->schemaFlags |= DB_UnresetViews; |
| 113164 | 113154 | if( db->mallocFailed ){ |
| @@ -114492,11 +114482,11 @@ | ||
| 114492 | 114482 | ** |
| 114493 | 114483 | ** 2020-05-27: If some of the stat data is coming from the sqlite_stat1 |
| 114494 | 114484 | ** table but other parts we are having to guess at, then do not let the |
| 114495 | 114485 | ** estimated number of rows in the table be less than 1000 (LogEst 99). |
| 114496 | 114486 | ** Failure to do this can cause the indexes for which we do not have |
| 114497 | - ** stat1 data to be ignored by the query planner. tag-20200527-1 | |
| 114487 | + ** stat1 data to be ignored by the query planner. | |
| 114498 | 114488 | */ |
| 114499 | 114489 | x = pIdx->pTable->nRowLogEst; |
| 114500 | 114490 | assert( 99==sqlite3LogEst(1000) ); |
| 114501 | 114491 | if( x<99 ){ |
| 114502 | 114492 | pIdx->pTable->nRowLogEst = x = 99; |
| @@ -165102,11 +165092,11 @@ | ||
| 165102 | 165092 | ** on, but it is sometimes useful to turn it off for testing. |
| 165103 | 165093 | ** |
| 165104 | 165094 | ** 2020-07-22: Disabling EXTRA_SCHEMA_CHECKS also disables the |
| 165105 | 165095 | ** verification of rootpage numbers when parsing the schema. This |
| 165106 | 165096 | ** is useful to make it easier to reach strange internal error states |
| 165107 | - ** during testing. The EXTRA_SCHEMA_CHECKS settting is always enabled | |
| 165097 | + ** during testing. The EXTRA_SCHEMA_CHECKS setting is always enabled | |
| 165108 | 165098 | ** in production. |
| 165109 | 165099 | */ |
| 165110 | 165100 | case SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS: { |
| 165111 | 165101 | sqlite3GlobalConfig.bExtraSchemaChecks = va_arg(ap, int); |
| 165112 | 165102 | break; |
| @@ -176829,11 +176819,12 @@ | ||
| 176829 | 176819 | rc = fts3tokQueryTokenizer((Fts3Hash*)pHash, zModule, &pMod, pzErr); |
| 176830 | 176820 | } |
| 176831 | 176821 | |
| 176832 | 176822 | assert( (rc==SQLITE_OK)==(pMod!=0) ); |
| 176833 | 176823 | if( rc==SQLITE_OK ){ |
| 176834 | - const char * const *azArg = (const char * const *)&azDequote[1]; | |
| 176824 | + const char * const *azArg = 0; | |
| 176825 | + if( nDequote>1 ) azArg = (const char * const *)&azDequote[1]; | |
| 176835 | 176826 | rc = pMod->xCreate((nDequote>1 ? nDequote-1 : 0), azArg, &pTok); |
| 176836 | 176827 | } |
| 176837 | 176828 | |
| 176838 | 176829 | if( rc==SQLITE_OK ){ |
| 176839 | 176830 | pTab = (Fts3tokTable *)sqlite3_malloc(sizeof(Fts3tokTable)); |
| @@ -205397,12 +205388,17 @@ | ||
| 205397 | 205388 | memcpy(&p->tblhdr.aBuf[iPK], &p->in.aData[p->in.iNext], nCopy); |
| 205398 | 205389 | p->in.iNext += nCopy; |
| 205399 | 205390 | } |
| 205400 | 205391 | |
| 205401 | 205392 | p->apValue = (sqlite3_value**)p->tblhdr.aBuf; |
| 205402 | - p->abPK = (u8*)&p->apValue[p->nCol*2]; | |
| 205403 | - p->zTab = (char*)&p->abPK[p->nCol]; | |
| 205393 | + if( p->apValue==0 ){ | |
| 205394 | + p->abPK = 0; | |
| 205395 | + p->zTab = 0; | |
| 205396 | + }else{ | |
| 205397 | + p->abPK = (u8*)&p->apValue[p->nCol*2]; | |
| 205398 | + p->zTab = p->abPK ? (char*)&p->abPK[p->nCol] : 0; | |
| 205399 | + } | |
| 205404 | 205400 | return (p->rc = rc); |
| 205405 | 205401 | } |
| 205406 | 205402 | |
| 205407 | 205403 | /* |
| 205408 | 205404 | ** Advance the changeset iterator to the next change. |
| @@ -225727,11 +225723,11 @@ | ||
| 225727 | 225723 | int nArg, /* Number of args */ |
| 225728 | 225724 | sqlite3_value **apUnused /* Function arguments */ |
| 225729 | 225725 | ){ |
| 225730 | 225726 | assert( nArg==0 ); |
| 225731 | 225727 | UNUSED_PARAM2(nArg, apUnused); |
| 225732 | - sqlite3_result_text(pCtx, "fts5: 2020-08-10 19:35:01 680bdc6524ad6af0e74401e96e3a576145042fb865c1582bfaffc11d4ff76a4f", -1, SQLITE_TRANSIENT); | |
| 225728 | + sqlite3_result_text(pCtx, "fts5: 2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f", -1, SQLITE_TRANSIENT); | |
| 225733 | 225729 | } |
| 225734 | 225730 | |
| 225735 | 225731 | /* |
| 225736 | 225732 | ** Return true if zName is the extension on one of the shadow tables used |
| 225737 | 225733 | ** by this module. |
| @@ -230510,12 +230506,12 @@ | ||
| 230510 | 230506 | } |
| 230511 | 230507 | #endif /* SQLITE_CORE */ |
| 230512 | 230508 | #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ |
| 230513 | 230509 | |
| 230514 | 230510 | /************** End of stmt.c ************************************************/ |
| 230515 | -#if __LINE__!=230515 | |
| 230511 | +#if __LINE__!=230511 | |
| 230516 | 230512 | #undef SQLITE_SOURCE_ID |
| 230517 | -#define SQLITE_SOURCE_ID "2020-08-10 19:35:01 680bdc6524ad6af0e74401e96e3a576145042fb865c1582bfaffc11d4ff7alt2" | |
| 230513 | +#define SQLITE_SOURCE_ID "2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0alt2" | |
| 230518 | 230514 | #endif |
| 230519 | 230515 | /* Return the source-id for this library */ |
| 230520 | 230516 | SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } |
| 230521 | 230517 | /************************** End of sqlite3.c ******************************/ |
| 230522 | 230518 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -1171,11 +1171,11 @@ | |
| 1171 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 1172 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 1173 | */ |
| 1174 | #define SQLITE_VERSION "3.33.0" |
| 1175 | #define SQLITE_VERSION_NUMBER 3033000 |
| 1176 | #define SQLITE_SOURCE_ID "2020-08-10 19:35:01 680bdc6524ad6af0e74401e96e3a576145042fb865c1582bfaffc11d4ff76a4f" |
| 1177 | |
| 1178 | /* |
| 1179 | ** CAPI3REF: Run-Time Library Version Numbers |
| 1180 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 1181 | ** |
| @@ -17913,15 +17913,10 @@ | |
| 17913 | int nFunc; /* Number of entries in aFunc[] */ |
| 17914 | u32 selId; /* Select to which this AggInfo belongs */ |
| 17915 | AggInfo *pNext; /* Next in list of them all */ |
| 17916 | }; |
| 17917 | |
| 17918 | /* |
| 17919 | ** Value for AggInfo.iAggMagic when the structure is valid |
| 17920 | */ |
| 17921 | #define AggInfoMagic 0x2059e99e |
| 17922 | |
| 17923 | /* |
| 17924 | ** The datatype ynVar is a signed integer, either 16-bit or 32-bit. |
| 17925 | ** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater |
| 17926 | ** than 32767 we have to make it 32-bit. 16-bit is preferred because |
| 17927 | ** it uses less memory in the Expr object, which is a big memory user |
| @@ -18756,13 +18751,11 @@ | |
| 18756 | |
| 18757 | Token sLastToken; /* The last token parsed */ |
| 18758 | ynVar nVar; /* Number of '?' variables seen in the SQL so far */ |
| 18759 | u8 iPkSortOrder; /* ASC or DESC for INTEGER PRIMARY KEY */ |
| 18760 | u8 explain; /* True if the EXPLAIN flag is found on the query */ |
| 18761 | #if !(defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_OMIT_ALTERTABLE)) |
| 18762 | u8 eParseMode; /* PARSE_MODE_XXX constant */ |
| 18763 | #endif |
| 18764 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 18765 | int nVtabLock; /* Number of virtual tables to lock */ |
| 18766 | #endif |
| 18767 | int nHeight; /* Expression tree height of current sub-select */ |
| 18768 | #ifndef SQLITE_OMIT_EXPLAIN |
| @@ -61417,13 +61410,14 @@ | |
| 61417 | i64 nReq = ((i64)mxPage * szPage); |
| 61418 | i64 nSize; /* Current size of database file */ |
| 61419 | sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_CKPT_START, 0); |
| 61420 | rc = sqlite3OsFileSize(pWal->pDbFd, &nSize); |
| 61421 | if( rc==SQLITE_OK && nSize<nReq ){ |
| 61422 | if( (nSize+(i64)pWal->hdr.mxFrame*szPage)<nReq ){ |
| 61423 | /* If the size of the final database is larger than the current |
| 61424 | ** database plus the amount of data in the wal file, then there |
| 61425 | ** must be corruption somewhere. */ |
| 61426 | rc = SQLITE_CORRUPT_BKPT; |
| 61427 | }else{ |
| 61428 | sqlite3OsFileControlHint(pWal->pDbFd, SQLITE_FCNTL_SIZE_HINT,&nReq); |
| 61429 | } |
| @@ -74749,12 +74743,12 @@ | |
| 74749 | } |
| 74750 | if( getPageReferenced(&sCheck, i)!=0 && |
| 74751 | (PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){ |
| 74752 | checkAppendMsg(&sCheck, "Pointer map page %d is referenced", i); |
| 74753 | } |
| 74754 | } |
| 74755 | #endif |
| 74756 | } |
| 74757 | |
| 74758 | /* Clean up and report errors. |
| 74759 | */ |
| 74760 | integrity_ck_cleanup: |
| @@ -106997,11 +106991,11 @@ | |
| 106997 | } |
| 106998 | if( rc==SQLITE_OK && pStep->zTarget ){ |
| 106999 | SrcList *pSrc = sqlite3TriggerStepSrc(pParse, pStep); |
| 107000 | if( pSrc ){ |
| 107001 | int i; |
| 107002 | for(i=0; i<pSrc->nSrc; i++){ |
| 107003 | struct SrcList_item *p = &pSrc->a[i]; |
| 107004 | p->pTab = sqlite3LocateTableItem(pParse, 0, p); |
| 107005 | p->iCursor = pParse->nTab++; |
| 107006 | if( p->pTab==0 ){ |
| 107007 | rc = SQLITE_ERROR; |
| @@ -113101,14 +113095,12 @@ | |
| 113101 | ** statement that defines the view. |
| 113102 | */ |
| 113103 | assert( pTable->pSelect ); |
| 113104 | pSel = sqlite3SelectDup(db, pTable->pSelect, 0); |
| 113105 | if( pSel ){ |
| 113106 | #ifndef SQLITE_OMIT_ALTERTABLE |
| 113107 | u8 eParseMode = pParse->eParseMode; |
| 113108 | pParse->eParseMode = PARSE_MODE_NORMAL; |
| 113109 | #endif |
| 113110 | n = pParse->nTab; |
| 113111 | sqlite3SrcListAssignCursors(pParse, pSel->pSrc); |
| 113112 | pTable->nCol = -1; |
| 113113 | DisableLookaside; |
| 113114 | #ifndef SQLITE_OMIT_AUTHORIZATION |
| @@ -113152,13 +113144,11 @@ | |
| 113152 | } |
| 113153 | pTable->nNVCol = pTable->nCol; |
| 113154 | sqlite3DeleteTable(db, pSelTab); |
| 113155 | sqlite3SelectDelete(db, pSel); |
| 113156 | EnableLookaside; |
| 113157 | #ifndef SQLITE_OMIT_ALTERTABLE |
| 113158 | pParse->eParseMode = eParseMode; |
| 113159 | #endif |
| 113160 | } else { |
| 113161 | nErr++; |
| 113162 | } |
| 113163 | pTable->pSchema->schemaFlags |= DB_UnresetViews; |
| 113164 | if( db->mallocFailed ){ |
| @@ -114492,11 +114482,11 @@ | |
| 114492 | ** |
| 114493 | ** 2020-05-27: If some of the stat data is coming from the sqlite_stat1 |
| 114494 | ** table but other parts we are having to guess at, then do not let the |
| 114495 | ** estimated number of rows in the table be less than 1000 (LogEst 99). |
| 114496 | ** Failure to do this can cause the indexes for which we do not have |
| 114497 | ** stat1 data to be ignored by the query planner. tag-20200527-1 |
| 114498 | */ |
| 114499 | x = pIdx->pTable->nRowLogEst; |
| 114500 | assert( 99==sqlite3LogEst(1000) ); |
| 114501 | if( x<99 ){ |
| 114502 | pIdx->pTable->nRowLogEst = x = 99; |
| @@ -165102,11 +165092,11 @@ | |
| 165102 | ** on, but it is sometimes useful to turn it off for testing. |
| 165103 | ** |
| 165104 | ** 2020-07-22: Disabling EXTRA_SCHEMA_CHECKS also disables the |
| 165105 | ** verification of rootpage numbers when parsing the schema. This |
| 165106 | ** is useful to make it easier to reach strange internal error states |
| 165107 | ** during testing. The EXTRA_SCHEMA_CHECKS settting is always enabled |
| 165108 | ** in production. |
| 165109 | */ |
| 165110 | case SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS: { |
| 165111 | sqlite3GlobalConfig.bExtraSchemaChecks = va_arg(ap, int); |
| 165112 | break; |
| @@ -176829,11 +176819,12 @@ | |
| 176829 | rc = fts3tokQueryTokenizer((Fts3Hash*)pHash, zModule, &pMod, pzErr); |
| 176830 | } |
| 176831 | |
| 176832 | assert( (rc==SQLITE_OK)==(pMod!=0) ); |
| 176833 | if( rc==SQLITE_OK ){ |
| 176834 | const char * const *azArg = (const char * const *)&azDequote[1]; |
| 176835 | rc = pMod->xCreate((nDequote>1 ? nDequote-1 : 0), azArg, &pTok); |
| 176836 | } |
| 176837 | |
| 176838 | if( rc==SQLITE_OK ){ |
| 176839 | pTab = (Fts3tokTable *)sqlite3_malloc(sizeof(Fts3tokTable)); |
| @@ -205397,12 +205388,17 @@ | |
| 205397 | memcpy(&p->tblhdr.aBuf[iPK], &p->in.aData[p->in.iNext], nCopy); |
| 205398 | p->in.iNext += nCopy; |
| 205399 | } |
| 205400 | |
| 205401 | p->apValue = (sqlite3_value**)p->tblhdr.aBuf; |
| 205402 | p->abPK = (u8*)&p->apValue[p->nCol*2]; |
| 205403 | p->zTab = (char*)&p->abPK[p->nCol]; |
| 205404 | return (p->rc = rc); |
| 205405 | } |
| 205406 | |
| 205407 | /* |
| 205408 | ** Advance the changeset iterator to the next change. |
| @@ -225727,11 +225723,11 @@ | |
| 225727 | int nArg, /* Number of args */ |
| 225728 | sqlite3_value **apUnused /* Function arguments */ |
| 225729 | ){ |
| 225730 | assert( nArg==0 ); |
| 225731 | UNUSED_PARAM2(nArg, apUnused); |
| 225732 | sqlite3_result_text(pCtx, "fts5: 2020-08-10 19:35:01 680bdc6524ad6af0e74401e96e3a576145042fb865c1582bfaffc11d4ff76a4f", -1, SQLITE_TRANSIENT); |
| 225733 | } |
| 225734 | |
| 225735 | /* |
| 225736 | ** Return true if zName is the extension on one of the shadow tables used |
| 225737 | ** by this module. |
| @@ -230510,12 +230506,12 @@ | |
| 230510 | } |
| 230511 | #endif /* SQLITE_CORE */ |
| 230512 | #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ |
| 230513 | |
| 230514 | /************** End of stmt.c ************************************************/ |
| 230515 | #if __LINE__!=230515 |
| 230516 | #undef SQLITE_SOURCE_ID |
| 230517 | #define SQLITE_SOURCE_ID "2020-08-10 19:35:01 680bdc6524ad6af0e74401e96e3a576145042fb865c1582bfaffc11d4ff7alt2" |
| 230518 | #endif |
| 230519 | /* Return the source-id for this library */ |
| 230520 | SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } |
| 230521 | /************************** End of sqlite3.c ******************************/ |
| 230522 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -1171,11 +1171,11 @@ | |
| 1171 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 1172 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 1173 | */ |
| 1174 | #define SQLITE_VERSION "3.33.0" |
| 1175 | #define SQLITE_VERSION_NUMBER 3033000 |
| 1176 | #define SQLITE_SOURCE_ID "2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f" |
| 1177 | |
| 1178 | /* |
| 1179 | ** CAPI3REF: Run-Time Library Version Numbers |
| 1180 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 1181 | ** |
| @@ -17913,15 +17913,10 @@ | |
| 17913 | int nFunc; /* Number of entries in aFunc[] */ |
| 17914 | u32 selId; /* Select to which this AggInfo belongs */ |
| 17915 | AggInfo *pNext; /* Next in list of them all */ |
| 17916 | }; |
| 17917 | |
| 17918 | /* |
| 17919 | ** The datatype ynVar is a signed integer, either 16-bit or 32-bit. |
| 17920 | ** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater |
| 17921 | ** than 32767 we have to make it 32-bit. 16-bit is preferred because |
| 17922 | ** it uses less memory in the Expr object, which is a big memory user |
| @@ -18756,13 +18751,11 @@ | |
| 18751 | |
| 18752 | Token sLastToken; /* The last token parsed */ |
| 18753 | ynVar nVar; /* Number of '?' variables seen in the SQL so far */ |
| 18754 | u8 iPkSortOrder; /* ASC or DESC for INTEGER PRIMARY KEY */ |
| 18755 | u8 explain; /* True if the EXPLAIN flag is found on the query */ |
| 18756 | u8 eParseMode; /* PARSE_MODE_XXX constant */ |
| 18757 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 18758 | int nVtabLock; /* Number of virtual tables to lock */ |
| 18759 | #endif |
| 18760 | int nHeight; /* Expression tree height of current sub-select */ |
| 18761 | #ifndef SQLITE_OMIT_EXPLAIN |
| @@ -61417,13 +61410,14 @@ | |
| 61410 | i64 nReq = ((i64)mxPage * szPage); |
| 61411 | i64 nSize; /* Current size of database file */ |
| 61412 | sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_CKPT_START, 0); |
| 61413 | rc = sqlite3OsFileSize(pWal->pDbFd, &nSize); |
| 61414 | if( rc==SQLITE_OK && nSize<nReq ){ |
| 61415 | if( (nSize+65536+(i64)pWal->hdr.mxFrame*szPage)<nReq ){ |
| 61416 | /* If the size of the final database is larger than the current |
| 61417 | ** database plus the amount of data in the wal file, plus the |
| 61418 | ** maximum size of the pending-byte page (65536 bytes), then |
| 61419 | ** must be corruption somewhere. */ |
| 61420 | rc = SQLITE_CORRUPT_BKPT; |
| 61421 | }else{ |
| 61422 | sqlite3OsFileControlHint(pWal->pDbFd, SQLITE_FCNTL_SIZE_HINT,&nReq); |
| 61423 | } |
| @@ -74749,12 +74743,12 @@ | |
| 74743 | } |
| 74744 | if( getPageReferenced(&sCheck, i)!=0 && |
| 74745 | (PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){ |
| 74746 | checkAppendMsg(&sCheck, "Pointer map page %d is referenced", i); |
| 74747 | } |
| 74748 | #endif |
| 74749 | } |
| 74750 | } |
| 74751 | |
| 74752 | /* Clean up and report errors. |
| 74753 | */ |
| 74754 | integrity_ck_cleanup: |
| @@ -106997,11 +106991,11 @@ | |
| 106991 | } |
| 106992 | if( rc==SQLITE_OK && pStep->zTarget ){ |
| 106993 | SrcList *pSrc = sqlite3TriggerStepSrc(pParse, pStep); |
| 106994 | if( pSrc ){ |
| 106995 | int i; |
| 106996 | for(i=0; i<pSrc->nSrc && rc==SQLITE_OK; i++){ |
| 106997 | struct SrcList_item *p = &pSrc->a[i]; |
| 106998 | p->pTab = sqlite3LocateTableItem(pParse, 0, p); |
| 106999 | p->iCursor = pParse->nTab++; |
| 107000 | if( p->pTab==0 ){ |
| 107001 | rc = SQLITE_ERROR; |
| @@ -113101,14 +113095,12 @@ | |
| 113095 | ** statement that defines the view. |
| 113096 | */ |
| 113097 | assert( pTable->pSelect ); |
| 113098 | pSel = sqlite3SelectDup(db, pTable->pSelect, 0); |
| 113099 | if( pSel ){ |
| 113100 | u8 eParseMode = pParse->eParseMode; |
| 113101 | pParse->eParseMode = PARSE_MODE_NORMAL; |
| 113102 | n = pParse->nTab; |
| 113103 | sqlite3SrcListAssignCursors(pParse, pSel->pSrc); |
| 113104 | pTable->nCol = -1; |
| 113105 | DisableLookaside; |
| 113106 | #ifndef SQLITE_OMIT_AUTHORIZATION |
| @@ -113152,13 +113144,11 @@ | |
| 113144 | } |
| 113145 | pTable->nNVCol = pTable->nCol; |
| 113146 | sqlite3DeleteTable(db, pSelTab); |
| 113147 | sqlite3SelectDelete(db, pSel); |
| 113148 | EnableLookaside; |
| 113149 | pParse->eParseMode = eParseMode; |
| 113150 | } else { |
| 113151 | nErr++; |
| 113152 | } |
| 113153 | pTable->pSchema->schemaFlags |= DB_UnresetViews; |
| 113154 | if( db->mallocFailed ){ |
| @@ -114492,11 +114482,11 @@ | |
| 114482 | ** |
| 114483 | ** 2020-05-27: If some of the stat data is coming from the sqlite_stat1 |
| 114484 | ** table but other parts we are having to guess at, then do not let the |
| 114485 | ** estimated number of rows in the table be less than 1000 (LogEst 99). |
| 114486 | ** Failure to do this can cause the indexes for which we do not have |
| 114487 | ** stat1 data to be ignored by the query planner. |
| 114488 | */ |
| 114489 | x = pIdx->pTable->nRowLogEst; |
| 114490 | assert( 99==sqlite3LogEst(1000) ); |
| 114491 | if( x<99 ){ |
| 114492 | pIdx->pTable->nRowLogEst = x = 99; |
| @@ -165102,11 +165092,11 @@ | |
| 165092 | ** on, but it is sometimes useful to turn it off for testing. |
| 165093 | ** |
| 165094 | ** 2020-07-22: Disabling EXTRA_SCHEMA_CHECKS also disables the |
| 165095 | ** verification of rootpage numbers when parsing the schema. This |
| 165096 | ** is useful to make it easier to reach strange internal error states |
| 165097 | ** during testing. The EXTRA_SCHEMA_CHECKS setting is always enabled |
| 165098 | ** in production. |
| 165099 | */ |
| 165100 | case SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS: { |
| 165101 | sqlite3GlobalConfig.bExtraSchemaChecks = va_arg(ap, int); |
| 165102 | break; |
| @@ -176829,11 +176819,12 @@ | |
| 176819 | rc = fts3tokQueryTokenizer((Fts3Hash*)pHash, zModule, &pMod, pzErr); |
| 176820 | } |
| 176821 | |
| 176822 | assert( (rc==SQLITE_OK)==(pMod!=0) ); |
| 176823 | if( rc==SQLITE_OK ){ |
| 176824 | const char * const *azArg = 0; |
| 176825 | if( nDequote>1 ) azArg = (const char * const *)&azDequote[1]; |
| 176826 | rc = pMod->xCreate((nDequote>1 ? nDequote-1 : 0), azArg, &pTok); |
| 176827 | } |
| 176828 | |
| 176829 | if( rc==SQLITE_OK ){ |
| 176830 | pTab = (Fts3tokTable *)sqlite3_malloc(sizeof(Fts3tokTable)); |
| @@ -205397,12 +205388,17 @@ | |
| 205388 | memcpy(&p->tblhdr.aBuf[iPK], &p->in.aData[p->in.iNext], nCopy); |
| 205389 | p->in.iNext += nCopy; |
| 205390 | } |
| 205391 | |
| 205392 | p->apValue = (sqlite3_value**)p->tblhdr.aBuf; |
| 205393 | if( p->apValue==0 ){ |
| 205394 | p->abPK = 0; |
| 205395 | p->zTab = 0; |
| 205396 | }else{ |
| 205397 | p->abPK = (u8*)&p->apValue[p->nCol*2]; |
| 205398 | p->zTab = p->abPK ? (char*)&p->abPK[p->nCol] : 0; |
| 205399 | } |
| 205400 | return (p->rc = rc); |
| 205401 | } |
| 205402 | |
| 205403 | /* |
| 205404 | ** Advance the changeset iterator to the next change. |
| @@ -225727,11 +225723,11 @@ | |
| 225723 | int nArg, /* Number of args */ |
| 225724 | sqlite3_value **apUnused /* Function arguments */ |
| 225725 | ){ |
| 225726 | assert( nArg==0 ); |
| 225727 | UNUSED_PARAM2(nArg, apUnused); |
| 225728 | sqlite3_result_text(pCtx, "fts5: 2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f", -1, SQLITE_TRANSIENT); |
| 225729 | } |
| 225730 | |
| 225731 | /* |
| 225732 | ** Return true if zName is the extension on one of the shadow tables used |
| 225733 | ** by this module. |
| @@ -230510,12 +230506,12 @@ | |
| 230506 | } |
| 230507 | #endif /* SQLITE_CORE */ |
| 230508 | #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ |
| 230509 | |
| 230510 | /************** End of stmt.c ************************************************/ |
| 230511 | #if __LINE__!=230511 |
| 230512 | #undef SQLITE_SOURCE_ID |
| 230513 | #define SQLITE_SOURCE_ID "2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0alt2" |
| 230514 | #endif |
| 230515 | /* Return the source-id for this library */ |
| 230516 | SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } |
| 230517 | /************************** End of sqlite3.c ******************************/ |
| 230518 |
+1
-1
| --- src/sqlite3.h | ||
| +++ src/sqlite3.h | ||
| @@ -123,11 +123,11 @@ | ||
| 123 | 123 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 124 | 124 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 125 | 125 | */ |
| 126 | 126 | #define SQLITE_VERSION "3.33.0" |
| 127 | 127 | #define SQLITE_VERSION_NUMBER 3033000 |
| 128 | -#define SQLITE_SOURCE_ID "2020-08-10 19:35:01 680bdc6524ad6af0e74401e96e3a576145042fb865c1582bfaffc11d4ff76a4f" | |
| 128 | +#define SQLITE_SOURCE_ID "2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f" | |
| 129 | 129 | |
| 130 | 130 | /* |
| 131 | 131 | ** CAPI3REF: Run-Time Library Version Numbers |
| 132 | 132 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 133 | 133 | ** |
| 134 | 134 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -123,11 +123,11 @@ | |
| 123 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 124 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 125 | */ |
| 126 | #define SQLITE_VERSION "3.33.0" |
| 127 | #define SQLITE_VERSION_NUMBER 3033000 |
| 128 | #define SQLITE_SOURCE_ID "2020-08-10 19:35:01 680bdc6524ad6af0e74401e96e3a576145042fb865c1582bfaffc11d4ff76a4f" |
| 129 | |
| 130 | /* |
| 131 | ** CAPI3REF: Run-Time Library Version Numbers |
| 132 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 133 | ** |
| 134 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -123,11 +123,11 @@ | |
| 123 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 124 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 125 | */ |
| 126 | #define SQLITE_VERSION "3.33.0" |
| 127 | #define SQLITE_VERSION_NUMBER 3033000 |
| 128 | #define SQLITE_SOURCE_ID "2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f" |
| 129 | |
| 130 | /* |
| 131 | ** CAPI3REF: Run-Time Library Version Numbers |
| 132 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 133 | ** |
| 134 |