Good to know that I was not to far off target then. But fixing issues in less than a day of reporting? On a Saturday? Who does that? I was planning to feel happy about solving this issue.. :)
Fredrik On Sat, Sep 21, 2019 at 9:31 PM Dan Kennedy <danielk1...@gmail.com> wrote: > > On 22/9/62 02:25, Fredrik Larsen wrote: > > Interesting, very similar change but not fully idenctial. In my patch, I > > created a sqlite3ExprListCompareIgnoreButUpdateSort, and used this > function > > from line 6239. This function ignores the sort part when comparing > > expressions, but will update the GroupBy sortOrder field if expressions > are > > found equal. I see dan modifies the sortFlag. > > That sounds equivalent to me. The sortOrder/sortFlag thing is probably > just because you patched the last release (3.29.0) or earlier. The field > has changed names since then. > > Dan. > > > > > Would be interesting to know > > what effect this difference has. My change works in my test, but not sure > > if it really works. > > > > Anyway, super-nice that this issue is fixed officially. No I don't have > to > > wonder if my fix is really correct, or will suddenly corrupt something :) > > > > Fredrik > > > > On Sat, Sep 21, 2019 at 8:49 PM Keith Medcalf <kmedc...@dessus.com> > wrote: > > > >> See Dan's checkin on trunk for this issue. > >> > >> https://www.sqlite.org/src/info/20f7951bb238ddc0 > >> > >>> -----Original Message----- > >>> From: sqlite-users <sqlite-users-boun...@mailinglists.sqlite.org> On > >>> Behalf Of Fredrik Larsen > >>> Sent: Saturday, 21 September, 2019 08:12 > >>> To: SQLite mailing list <sqlite-users@mailinglists.sqlite.org> > >>> Subject: Re: [sqlite] [EXTERNAL] Group-by and order-by-desc does not > work > >>> as expected > >>> > >>> Your last sentence got me thinking. So I downloaded the source, > modified > >>> the ordering of the GROUP-BY expression to match ORDER-BY and it works! > >>> This will offcourse only work if the GROUP-BY and ORDER-BY matches > >>> generally expect for the direction. This fix only improves performance > >>> for > >>> relevant cases and keeps other cases unaffected. Not sure if I > introduced > >>> some subtle bugs with this modification, but my test-cases runs fine. > >>> > >>> Fredrik > >>> > >>> On Fri, Sep 20, 2019 at 6:57 PM Keith Medcalf <kmedc...@dessus.com> > >>> wrote: > >>> > >>>>> We can observe GROUP BY works ASCending only as of now. Why it can't > >>> work > >>>>> DESCending to avoid ordering, that's a different question. > >>>> >From https://www.sqlite.org/lang_select.html we can observe that > >>>>> GROUP BY takes an expr on the RHS, while ORDER BY takes an expr > >>>>> followed by optional COLLATE and ASC/DESC terms. > >>>> The GROUP BY clause does not imply ordering. The fact that the output > >>> is > >>>> ordered is an implementation detail -- the grouping could be > >>> implemented by > >>>> a hash table, in which case the output would be ordered by hash value, > >>> for > >>>> instance. All that the expression in a GROUP BY does is determine the > >>>> groupings, and therefore the expression is limited to a comparison > >>>> compatible expression. For example, you can GROUP BY x COLLATE NOCASE > >>>> which implies that the groups are formed using case insensitive > >>> comparisons > >>>> of x. The ORDER BY clause determines the output ordering. > >>>> > >>>> You will note that if you do the following: > >>>> > >>>> create table x(x,y); > >>>> create index ix on x(x desc, y); > >>>> select x, someaggregate(y) from x group by x order by x desc; > >>>> > >>>> then ix will be used as a covering index (which is good) however the > >>> group > >>>> by x is treated as an ordering expression, not as simply a grouping > >>>> expression. > >>>> > >>>> In fact the code that implements the group by does indeed (perhaps > >>>> erroneously) treat the group by expression as implying order, since it > >>> will > >>>> traverse the covering index in reverse order so that the output from > >>> GROUP > >>>> BY is in ascending order, and add an extra sort to do the ORDER BY. > >>>> > >>>> That means the GROUP BY code generator is already capable of > traversing > >>>> the selected index in reverse order when necessary. It appears that > >>> the > >>>> optimizer however does not recognize that the "desc" attribute from > the > >>>> order by can be "pushed down" into the GROUP BY (which really is > >>> ordering > >>>> as an implementation detail) thus eliminating the ORDER BY processing > >>>> entirely. > >>>> > >>>> Note that you cannot specify that the GROUP BY is ordering -- it will > >>> not > >>>> accept the ASC or DESC keywords (which is correct), and this should > not > >>> be > >>>> changed, however, treating it as being ordering when it is not might > >>>> perhaps be a defect ... > >>>> > >>>> > >>>> > >>>> _______________________________________________ > >>>> sqlite-users mailing list > >>>> sqlite-users@mailinglists.sqlite.org > >>>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > >>>> > >>> _______________________________________________ > >>> sqlite-users mailing list > >>> sqlite-users@mailinglists.sqlite.org > >>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > >> > >> > >> _______________________________________________ > >> sqlite-users mailing list > >> sqlite-users@mailinglists.sqlite.org > >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > >> > > _______________________________________________ > > sqlite-users mailing list > > sqlite-users@mailinglists.sqlite.org > > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users