A preliminary fix for this problem is here:

    https://www.sqlite.org/src/info/5d5b596f152bb278

I have more testing and analysis to do before I close the ticket, but
my current belief is that this is the correct fix.  I don't know yet
whether or not this justifies a patched 3.25.3 release.

Sebastian:  Presumably this problem arose for you in a much larger and
more complex application.  Can you please apply the patch from the
check-in above (or recompile using the latest trunk version of SQLite)
and verify for us that this fixes the problem for you?

On 10/25/18, Richard Hipp <d...@sqlite.org> wrote:
> On 10/25/18, R Smith <ryansmit...@gmail.com> wrote:
>>
>> CREATE TABLE x(a, b, c);
>> CREATE TABLE y(a, b);
>> INSERT INTO x VALUES (1, 0, 1);
>> INSERT INTO y VALUES (1, 2);
>>
>> SELECT x.a FROM x JOIN y ON x.c = y.a WHERE x.b = 1 AND x.b = 1;
>
> It also starts working if you remove the redundant x.b=1 constraint:
>
>   SELECT x.a FROM x JOIN y ON x.c=y.a WHERE x.b=1;
>
> This came about due to an optimization that tries to propagate
> constants that are defined by WHERE clause constraints.  So if you
> have a WHERE clause constraint like "x.b=1" you can go through and
> replace every "x.b" expression with the constant "1".  But because of
> the way this is implemented, the original query gets transformed into:
>
>    SELECT x.a FROM x JOIN y ON x.c=y.a WHERE 1=1 AND 1=1;
>
> The first "x.b=1" terms causes the second to change into "1=1" and the
> second causes the first to change into "1=1".  This can only happen if
> there are two or more "x.b=" constraints in the WHERE clause, which is
> apparently not one of the millions of test cases in our test suite.
> (It will be soon!)
>
> --
> D. Richard Hipp
> d...@sqlite.org
>


-- 
D. Richard Hipp
d...@sqlite.org
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to