Fossil SCM

Merged trunk to avoid style collisions later. Changed table.numbered-lines line-height from ex units to unitless, as Mozilla recommends.

stephan 2020-08-14 19:25 line-number-selection merge
Commit 41f270de75dbf3754951990de9ae1790e9c17845ff44d116e108fa0ab2d8236d
+5
--- src/blob.c
+++ src/blob.c
@@ -487,10 +487,15 @@
487487
**
488488
** For semantic compatibility with blob_append_full(), if newSize is
489489
** >=0x7fff000 (~2GB) then this function will trigger blob_panic(). If
490490
** it didn't, it would be possible to bypass that hard-coded limit via
491491
** 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.
492497
*/
493498
void blob_reserve(Blob *pBlob, unsigned int newSize){
494499
if(newSize>=0x7fff0000 ){
495500
blob_panic();
496501
}else if(newSize>pBlob->nUsed){
497502
--- 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 @@
776776
div.forumTime > div > form,
777777
div.forumHierRoot > div > form {
778778
margin: 0.5em 0;
779779
}
780780
.forum-post-collapser {
781
+ /* Common style for the bottom-of-post and right-of-post
782
+ expand/collapse widgets. */
781783
font-size: 0.8em;
782
- margin: 0.2em 0 0 0;
783784
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;
784793
height: 1.75em;
785794
line-height: 1.75em;
786795
/* ^^^ Those sizes are finely tuned for the current selection of
787796
arrow characters. If those change, these should, too. Remember that
788797
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;
794798
display: flex;
795799
flex-direction: row;
796800
justify-content: space-between;
797801
}
798
-.forum-post-collapser > span {
802
+.forum-post-collapser.bottom > span {
799803
margin: 0 1em 0 1em;
800804
vertical-align: middle;
801805
}
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 {
806807
content: "⇣⇣⇣";
807808
}
809
+.forum-post-collapser.bottom.expanded > span::before {
810
+ content: "⇡⇡⇡" /*reminder: FF/Chrome cannot agree on alignment of ⮝*/;
811
+}
808812
div.forumPostBody{
809813
max-height: 50em;
810814
overflow: auto;
811815
}
812816
div.forumPostBody.with-expander {
813817
display: flex;
814818
flex-direction: row;
815819
overflow: auto;
820
+}
821
+div.forumPostBody.with-expander:not(.expanded) > :first-child {
822
+ overflow-y: hidden;
816823
}
817824
div.forumPostBody.with-expander > *:first-child {
818
- /* Main content DIV */
825
+ /* Main content DIV/PRE */
819826
overflow: auto;
827
+ flex: 10 1 auto;
820828
}
821829
div.forumPostBody.with-expander.expanded > *:first-child {
822830
margin-bottom: 0.5em /* try to suppress scroll bar */;
823831
}
824
-div.forumPostBody.with-expander > *:nth-child(2) {
832
+div.forumPostBody.with-expander .forum-post-collapser.right {
825833
/* "Tap zone" for expansion of the post, sits to the right of the
826834
post's content. */
835
+ flex: 1 10 auto;
827836
min-width: 1.25em;
828837
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;
831839
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: "⇡";
834854
}
835855
div.forumPostBody.expanded {
836856
max-height: initial;
837857
}
838858
div.forumPostBody.shrunken {
@@ -1143,11 +1163,11 @@
11431163
vertical-align: middle;
11441164
}
11451165
11461166
table.numbered-lines td {
11471167
font-family: monospace;
1148
- line-height: 2.8ex;
1168
+ line-height: 1.35;
11491169
white-space: pre;
11501170
margin: 0;
11511171
white-space: nowrap;
11521172
vertical-align: top;
11531173
padding: 1em 0 0 0 /*prevents slight overlap at top */;
11541174
--- 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 @@
776776
div.forumTime > div > form,
777777
div.forumHierRoot > div > form {
778778
margin: 0.5em 0;
779779
}
780780
.forum-post-collapser {
781
+ /* Common style for the bottom-of-post and right-of-post
782
+ expand/collapse widgets. */
781783
font-size: 0.8em;
782
- margin: 0.2em 0 0 0;
783784
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;
784793
height: 1.75em;
785794
line-height: 1.75em;
786795
/* ^^^ Those sizes are finely tuned for the current selection of
787796
arrow characters. If those change, these should, too. Remember that
788797
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;
794798
display: flex;
795799
flex-direction: row;
796800
justify-content: space-between;
797801
}
798
-.forum-post-collapser > span {
802
+.forum-post-collapser.bottom > span {
799803
margin: 0 1em 0 1em;
800804
vertical-align: middle;
801805
}
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 {
806807
content: "⇣⇣⇣";
807808
}
809
+.forum-post-collapser.bottom.expanded > span::before {
810
+ content: "⇡⇡⇡" /*reminder: FF/Chrome cannot agree on alignment of ⮝*/;
811
+}
808812
div.forumPostBody{
809813
max-height: 50em;
810814
overflow: auto;
811815
}
812816
div.forumPostBody.with-expander {
813817
display: flex;
814818
flex-direction: row;
815819
overflow: auto;
820
+}
821
+div.forumPostBody.with-expander:not(.expanded) > :first-child {
822
+ overflow-y: hidden;
816823
}
817824
div.forumPostBody.with-expander > *:first-child {
818
- /* Main content DIV */
825
+ /* Main content DIV/PRE */
819826
overflow: auto;
827
+ flex: 10 1 auto;
820828
}
821829
div.forumPostBody.with-expander.expanded > *:first-child {
822830
margin-bottom: 0.5em /* try to suppress scroll bar */;
823831
}
824
-div.forumPostBody.with-expander > *:nth-child(2) {
832
+div.forumPostBody.with-expander .forum-post-collapser.right {
825833
/* "Tap zone" for expansion of the post, sits to the right of the
826834
post's content. */
835
+ flex: 1 10 auto;
827836
min-width: 1.25em;
828837
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;
831839
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: "⇡";
834854
}
835855
div.forumPostBody.expanded {
836856
max-height: initial;
837857
}
838858
div.forumPostBody.shrunken {
@@ -1143,11 +1163,11 @@
11431163
vertical-align: middle;
11441164
}
11451165
11461166
table.numbered-lines td {
11471167
font-family: monospace;
1148
- line-height: 2.8ex;
1168
+ line-height: 1.35;
11491169
white-space: pre;
11501170
margin: 0;
11511171
white-space: nowrap;
11521172
vertical-align: top;
11531173
padding: 1em 0 0 0 /*prevents slight overlap at top */;
11541174
--- 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
--- src/fileedit.c
+++ src/fileedit.c
@@ -364,14 +364,10 @@
364364
blob_appendf(pOut, "B %s\n",
365365
pCI->pParent->zBaseline
366366
? pCI->pParent->zBaseline
367367
: pCI->zParentUuid);
368368
}
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 */));
373369
if(blob_size(&pCI->comment)!=0){
374370
blob_appendf(pOut, "C %F\n", blob_str(&pCI->comment));
375371
}else{
376372
blob_append(pOut, "C (no\\scomment)\n", 16);
377373
}
378374
--- 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
--- src/fossil.page.forumpost.js
+++ src/fossil.page.forumpost.js
@@ -13,32 +13,62 @@
1313
const wasExpanded = widget.classList.contains('expanded');
1414
widget.classList.toggle('expanded');
1515
contentElem.classList.toggle('expanded');
1616
if(wasExpanded){
1717
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
+ });
1923
}else{
2024
contentElem.classList.remove('shrunken');
2125
}
2226
return false;
2327
};
2428
};
29
+
2530
/* Adds an Expand/Collapse toggle to all div.forumPostBody
2631
elements which are deemed "too large" (those for which
2732
scrolling is currently activated because they are taller than
2833
their max-height). */
2934
document.querySelectorAll(
3035
'div.forumHier, div.forumTime, div.forumHierRoot'
31
- ).forEach(function(forumPostWrapper){
36
+ ).forEach(function f(forumPostWrapper){
3237
const content = forumPostWrapper.querySelector('div.forumPostBody');
3338
if(!content || !scrollbarIsVisible(content)) return;
3439
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(); };
3869
content.classList.add('with-expander');
39
- widget.classList.add('forum-post-collapser');
4070
widget.addEventListener('click', widgetEventHandler, false);
4171
/** Append 3 children, which CSS will evenly space across the
4272
widget. This improves visibility over having the label
4373
in only the left, right, or center. */
4474
var i = 0;
@@ -46,16 +76,12 @@
4676
if(content.nextSibling){
4777
forumPostWrapper.insertBefore(widget, content.nextSibling);
4878
}else{
4979
forumPostWrapper.appendChild(widget);
5080
}
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);
5681
content.appendChild(rightTapZone);
5782
rightTapZone.addEventListener('click', widgetEventHandler, false);
83
+ refillTapZone();
5884
});
5985
})/*onload callback*/;
6086
6187
})(window.fossil);
6288
--- 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 @@
11711171
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
11721172
** [sqlite_version()] and [sqlite_source_id()].
11731173
*/
11741174
#define SQLITE_VERSION "3.33.0"
11751175
#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"
11771177
11781178
/*
11791179
** CAPI3REF: Run-Time Library Version Numbers
11801180
** KEYWORDS: sqlite3_version sqlite3_sourceid
11811181
**
@@ -17913,15 +17913,10 @@
1791317913
int nFunc; /* Number of entries in aFunc[] */
1791417914
u32 selId; /* Select to which this AggInfo belongs */
1791517915
AggInfo *pNext; /* Next in list of them all */
1791617916
};
1791717917
17918
-/*
17919
-** Value for AggInfo.iAggMagic when the structure is valid
17920
-*/
17921
-#define AggInfoMagic 0x2059e99e
17922
-
1792317918
/*
1792417919
** The datatype ynVar is a signed integer, either 16-bit or 32-bit.
1792517920
** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater
1792617921
** than 32767 we have to make it 32-bit. 16-bit is preferred because
1792717922
** it uses less memory in the Expr object, which is a big memory user
@@ -18756,13 +18751,11 @@
1875618751
1875718752
Token sLastToken; /* The last token parsed */
1875818753
ynVar nVar; /* Number of '?' variables seen in the SQL so far */
1875918754
u8 iPkSortOrder; /* ASC or DESC for INTEGER PRIMARY KEY */
1876018755
u8 explain; /* True if the EXPLAIN flag is found on the query */
18761
-#if !(defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_OMIT_ALTERTABLE))
1876218756
u8 eParseMode; /* PARSE_MODE_XXX constant */
18763
-#endif
1876418757
#ifndef SQLITE_OMIT_VIRTUALTABLE
1876518758
int nVtabLock; /* Number of virtual tables to lock */
1876618759
#endif
1876718760
int nHeight; /* Expression tree height of current sub-select */
1876818761
#ifndef SQLITE_OMIT_EXPLAIN
@@ -61417,13 +61410,14 @@
6141761410
i64 nReq = ((i64)mxPage * szPage);
6141861411
i64 nSize; /* Current size of database file */
6141961412
sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_CKPT_START, 0);
6142061413
rc = sqlite3OsFileSize(pWal->pDbFd, &nSize);
6142161414
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 ){
6142361416
/* 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
6142561419
** must be corruption somewhere. */
6142661420
rc = SQLITE_CORRUPT_BKPT;
6142761421
}else{
6142861422
sqlite3OsFileControlHint(pWal->pDbFd, SQLITE_FCNTL_SIZE_HINT,&nReq);
6142961423
}
@@ -74749,12 +74743,12 @@
7474974743
}
7475074744
if( getPageReferenced(&sCheck, i)!=0 &&
7475174745
(PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){
7475274746
checkAppendMsg(&sCheck, "Pointer map page %d is referenced", i);
7475374747
}
74748
+#endif
7475474749
}
74755
-#endif
7475674750
}
7475774751
7475874752
/* Clean up and report errors.
7475974753
*/
7476074754
integrity_ck_cleanup:
@@ -106997,11 +106991,11 @@
106997106991
}
106998106992
if( rc==SQLITE_OK && pStep->zTarget ){
106999106993
SrcList *pSrc = sqlite3TriggerStepSrc(pParse, pStep);
107000106994
if( pSrc ){
107001106995
int i;
107002
- for(i=0; i<pSrc->nSrc; i++){
106996
+ for(i=0; i<pSrc->nSrc && rc==SQLITE_OK; i++){
107003106997
struct SrcList_item *p = &pSrc->a[i];
107004106998
p->pTab = sqlite3LocateTableItem(pParse, 0, p);
107005106999
p->iCursor = pParse->nTab++;
107006107000
if( p->pTab==0 ){
107007107001
rc = SQLITE_ERROR;
@@ -113101,14 +113095,12 @@
113101113095
** statement that defines the view.
113102113096
*/
113103113097
assert( pTable->pSelect );
113104113098
pSel = sqlite3SelectDup(db, pTable->pSelect, 0);
113105113099
if( pSel ){
113106
-#ifndef SQLITE_OMIT_ALTERTABLE
113107113100
u8 eParseMode = pParse->eParseMode;
113108113101
pParse->eParseMode = PARSE_MODE_NORMAL;
113109
-#endif
113110113102
n = pParse->nTab;
113111113103
sqlite3SrcListAssignCursors(pParse, pSel->pSrc);
113112113104
pTable->nCol = -1;
113113113105
DisableLookaside;
113114113106
#ifndef SQLITE_OMIT_AUTHORIZATION
@@ -113152,13 +113144,11 @@
113152113144
}
113153113145
pTable->nNVCol = pTable->nCol;
113154113146
sqlite3DeleteTable(db, pSelTab);
113155113147
sqlite3SelectDelete(db, pSel);
113156113148
EnableLookaside;
113157
-#ifndef SQLITE_OMIT_ALTERTABLE
113158113149
pParse->eParseMode = eParseMode;
113159
-#endif
113160113150
} else {
113161113151
nErr++;
113162113152
}
113163113153
pTable->pSchema->schemaFlags |= DB_UnresetViews;
113164113154
if( db->mallocFailed ){
@@ -114492,11 +114482,11 @@
114492114482
**
114493114483
** 2020-05-27: If some of the stat data is coming from the sqlite_stat1
114494114484
** table but other parts we are having to guess at, then do not let the
114495114485
** estimated number of rows in the table be less than 1000 (LogEst 99).
114496114486
** 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.
114498114488
*/
114499114489
x = pIdx->pTable->nRowLogEst;
114500114490
assert( 99==sqlite3LogEst(1000) );
114501114491
if( x<99 ){
114502114492
pIdx->pTable->nRowLogEst = x = 99;
@@ -165102,11 +165092,11 @@
165102165092
** on, but it is sometimes useful to turn it off for testing.
165103165093
**
165104165094
** 2020-07-22: Disabling EXTRA_SCHEMA_CHECKS also disables the
165105165095
** verification of rootpage numbers when parsing the schema. This
165106165096
** 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
165108165098
** in production.
165109165099
*/
165110165100
case SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS: {
165111165101
sqlite3GlobalConfig.bExtraSchemaChecks = va_arg(ap, int);
165112165102
break;
@@ -176829,11 +176819,12 @@
176829176819
rc = fts3tokQueryTokenizer((Fts3Hash*)pHash, zModule, &pMod, pzErr);
176830176820
}
176831176821
176832176822
assert( (rc==SQLITE_OK)==(pMod!=0) );
176833176823
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];
176835176826
rc = pMod->xCreate((nDequote>1 ? nDequote-1 : 0), azArg, &pTok);
176836176827
}
176837176828
176838176829
if( rc==SQLITE_OK ){
176839176830
pTab = (Fts3tokTable *)sqlite3_malloc(sizeof(Fts3tokTable));
@@ -205397,12 +205388,17 @@
205397205388
memcpy(&p->tblhdr.aBuf[iPK], &p->in.aData[p->in.iNext], nCopy);
205398205389
p->in.iNext += nCopy;
205399205390
}
205400205391
205401205392
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
+ }
205404205400
return (p->rc = rc);
205405205401
}
205406205402
205407205403
/*
205408205404
** Advance the changeset iterator to the next change.
@@ -225727,11 +225723,11 @@
225727225723
int nArg, /* Number of args */
225728225724
sqlite3_value **apUnused /* Function arguments */
225729225725
){
225730225726
assert( nArg==0 );
225731225727
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);
225733225729
}
225734225730
225735225731
/*
225736225732
** Return true if zName is the extension on one of the shadow tables used
225737225733
** by this module.
@@ -230510,12 +230506,12 @@
230510230506
}
230511230507
#endif /* SQLITE_CORE */
230512230508
#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */
230513230509
230514230510
/************** End of stmt.c ************************************************/
230515
-#if __LINE__!=230515
230511
+#if __LINE__!=230511
230516230512
#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"
230518230514
#endif
230519230515
/* Return the source-id for this library */
230520230516
SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
230521230517
/************************** End of sqlite3.c ******************************/
230522230518
--- 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 @@
123123
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
124124
** [sqlite_version()] and [sqlite_source_id()].
125125
*/
126126
#define SQLITE_VERSION "3.33.0"
127127
#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"
129129
130130
/*
131131
** CAPI3REF: Run-Time Library Version Numbers
132132
** KEYWORDS: sqlite3_version sqlite3_sourceid
133133
**
134134
--- 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

Keyboard Shortcuts

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