On Mon, Dec 3, 2012 at 3:11 AM, Hick Gunter <[email protected]> wrote:

> The following test case produces correct code for native tables, but
> substituting virtual tables seems to clobber the P4 Keyinfo to be
> propagated to OpenEphemeral at #59 by the spurious P4 to Goto at #8
>

Thank you for the bug report.

Nevertheless, please recognize that what you have provided us is not a
"test case", for at least two reasons:

(1) You only provided code that works, not code that fails
(2) You have not given us any data or expected results

Hence, we have no easy way to validate your claim that SQLite is
malfunctioning.  We will look into this, but because our investigation will
involve a lot of reverse engineering trying to reconstruct the failure
scenario from your hints, the investigation will take place at a lower
priority than it would otherwise.

If you want, you can help us to expedite the investigation and resolution
of your issue by providing us with a true "test case" - that is to say,
providing us with some SQL that generates an incorrect result.  Thanks.



>
> create temp table a (f1 integer, f2 integer);
> create temp table b (f1 integer, f2 integer);
> create unique index ai on a(f1,f2);
> create unique index bi on b(f1,f2);
> select
>     cast (f1 as integer) f1,
>     cast (f2 as integer) f2
> from (
>     select f1, f2
>     from   a
>     where  (f1 =  7 and f2 = 11) or
>            (f1 = 15 and f2 = 11)
>     union all
>     select f1, f2
>     from   b
>     where  (f1 =  7 and f2 = 11) or
>            (f1 = 15 and f2 = 11)
>     )
>     order by f1, f2;
>
> generated code (difference best seen in a side by side comparison):
>
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Trace          0     0     0                    00  NULL
> 1     Goto           0     137   0                    00  NULL
> 2     Noop           0     0     0                    00  Begin coroutine
> for left SELECT
> 3     OpenEphemeral  3     4     0     keyinfo(2,BINARY,BINARY)  00  NULL
> 4     Integer        7     7     0                    00  NULL
> 5     Integer        11    8     0                    00  NULL
> 6     Integer        15    9     0                    00  NULL
> 7     Integer        11    10    0                    00  NULL
> 8     Goto           0     147   0                    00  NULL
>
> 9     OpenRead       2     2     1     2              00  a
> 10    Null           0     12    0                    00  NULL
> 11    Integer        32    11    0                    00  NULL
> 12    OpenRead       4     4     1     keyinfo(2,BINARY,BINARY)  00  ai
> 13    SCopy          7     14    0                    00  NULL
> 14    SCopy          8     15    0                    00  NULL
> 15    SeekGe         4     22    14    2              00  NULL
> 16    IdxGE          4     22    14    2              01  NULL
> 17    IdxRowid       4     16    0                    00  NULL
> 18    Seek           2     16    0                    00  NULL
>
> 19    RowSetTest     12    21    16    0              00  NULL
> 20    Gosub          11    33    0                    00  NULL
> 21    Next           4     16    0                    00  NULL
>
> 22    OpenRead       5     4     1     keyinfo(2,BINARY,BINARY)  00  ai
> 23    SCopy          9     17    0                    00  NULL
> 24    SCopy          10    18    0                    00  NULL
> 25    SeekGe         5     32    17    2              00  NULL
> 26    IdxGE          5     32    17    2              01  NULL
> 27    IdxRowid       5     19    0                    00  NULL
> 28    Seek           2     19    0                    00  NULL
>
> 29    RowSetTest     12    31    19    -1             00  NULL
> 30    Gosub          11    33    0                    00  NULL
> 31    Next           5     26    0                    00  NULL
> 32    Goto           0     47    0                    00  NULL
>
> 33    Column         2     0     20                   00  a.f1
> 34    ToInt          20    0     0                    00  NULL
> 35    Column         2     1     21                   00  a.f2
> 36    ToInt          21    0     0                    00  NULL
> 37    MakeRecord     20    2     22                   00  NULL
> 38    Column         2     0     23                   00  a.f1
> 39    ToInt          23    0     0                    00  NULL
> 40    Column         2     1     24                   00  a.f2
> 41    ToInt          24    0     0                    00  NULL
> 42    Sequence       3     25    0                    00  NULL
> 43    Move           22    26    1                    00  NULL
> 44    MakeRecord     23    4     27                   00  NULL
> 45    IdxInsert      3     27    0                    00  NULL
> 46    Return         11    0     0                    00  NULL
>
> 47    Close          2     0     0                    00  NULL
> 48    OpenPseudo     6     22    2                    00  NULL
> 49    Sort           3     55    0                    00  NULL
> 50    Column         3     3     22                   00  NULL
> 51    Column         6     0     20                   20  NULL
> 52    Column         6     1     21                   00  NULL
> 53    Yield          1     0     0                    00  NULL
> 54    Next           3     50    0                    00  NULL
> 55    Close          6     0     0                    00  NULL
> 56    Integer        1     2     0                    00  NULL
> 57    Yield          1     0     0                    00  NULL
> 58    Noop           0     0     0                    00  End coroutine
> for left SELECT
>
> 59    Noop           0     0     0                    00  Begin coroutine
> for right SELECT
> 60    OpenEphemeral  7     4     0     keyinfo(2,BINARY,BINARY)  00  NULL
>
> 61    OpenRead       1     3     1     2              00  b
> 62    Null           0     29    0                    00  NULL
> 63    Integer        84    28    0                    00  NULL
> 64    OpenRead       8     5     1     keyinfo(2,BINARY,BINARY)  00  bi
> 65    Integer        7     31    0                    00  NULL
> 66    Integer        11    32    0                    00  NULL
> 67    SeekGe         8     74    31    2              00  NULL
> 68    IdxGE          8     74    31    2              01  NULL
> 69    IdxRowid       8     22    0                    00  NULL
> 70    Seek           1     22    0                    00  NULL
>
> 71    RowSetTest     29    73    22    0              00  NULL
> 72    Gosub          28    85    0                    00  NULL
> 73    Next           8     68    0                    00  NULL
>
> 74    OpenRead       9     5     1     keyinfo(2,BINARY,BINARY)  00  bi
> 75    Integer        15    33    0                    00  NULL
> 76    Integer        11    34    0                    00  NULL
> 77    SeekGe         9     84    33    2              00  NULL
> 78    IdxGE          9     84    33    2              01  NULL
> 79    IdxRowid       9     27    0                    00  NULL
> 80    Seek           1     27    0                    00  NULL
>
> 81    RowSetTest     29    83    27    -1             00  NULL
> 82    Gosub          28    85    0                    00  NULL
> 83    Next           9     78    0                    00  NULL
> 84    Goto           0     99    0                    00  NULL
>
> 85    Column         1     0     35                   00  b.f1
> 86    ToInt          35    0     0                    00  NULL
> 87    Column         1     1     36                   00  b.f2
> 88    ToInt          36    0     0                    00  NULL
> 89    MakeRecord     35    2     37                   00  NULL
> 90    Column         1     0     23                   00  b.f1
> 91    ToInt          23    0     0                    00  NULL
> 92    Column         1     1     24                   00  b.f2
> 93    ToInt          24    0     0                    00  NULL
> 94    Sequence       7     25    0                    00  NULL
> 95    Move           37    26    1                    00  NULL
> 96    MakeRecord     23    4     38                   00  NULL
> 97    IdxInsert      7     38    0                    00  NULL
> 98    Return         28    0     0                    00  NULL
>
> 99    Close          1     0     0                    00  NULL
> 100   OpenPseudo     10    37    2                    00  NULL
> 101   Sort           7     107   0                    00  NULL
> 102   Column         7     3     37                   00  NULL
> 103   Column         10    0     35                   20  NULL
> 104   Column         10    1     36                   00  NULL
> 105   Yield          3     0     0                    00  NULL
> 106   Next           7     102   0                    00  NULL
> 107   Close          10    0     0                    00  NULL
> 108   Integer        1     4     0                    00  NULL
> 109   Yield          3     0     0                    00  NULL
> 110   Noop           0     0     0                    00  End coroutine
> for right SELECT
>
> 111   Noop           0     0     0                    00  Output routine
> for A
> 112   ResultRow      20    2     0                    00  NULL
> 113   Return         5     0     0                    00  NULL
> 114   Noop           0     0     0                    00  Output routine
> for B
> 115   ResultRow      35    2     0                    00  NULL
> 116   Return         6     0     0                    00  NULL
> 117   Noop           0     0     0                    00  eof-A subroutine
> 118   If             4     146   0                    00  NULL
> 119   Gosub          6     115   0                    00  NULL
> 120   Yield          3     0     0                    00  NULL
> 121   Goto           0     118   0                    00  NULL
> 122   Noop           0     0     0                    00  eof-B subroutine
> 123   If             2     146   0                    00  NULL
> 124   Gosub          5     112   0                    00  NULL
> 125   Yield          1     0     0                    00  NULL
> 126   Goto           0     123   0                    00  NULL
> 127   Noop           0     0     0                    00  A-lt-B subroutine
> 128   Gosub          5     112   0                    00  NULL
> 129   Yield          1     0     0                    00  NULL
> 130   If             2     118   0                    00  NULL
> 131   Goto           0     143   0                    00  NULL
> 132   Noop           0     0     0                    00  A-gt-B subroutine
> 133   Gosub          6     115   0                    00  NULL
> 134   Yield          3     0     0                    00  NULL
> 135   If             4     123   0                    00  NULL
> 136   Goto           0     143   0                    00  NULL
> 137   Integer        0     2     0                    00  NULL
> 138   Integer        0     4     0                    00  NULL
> 139   Gosub          1     2     0                    00  NULL
> 140   Gosub          3     59    0                    00  NULL
> 141   If             2     118   0                    00  NULL
> 142   If             4     123   0                    00  NULL
> 143   Permutation    0     0     0     intarray       00  NULL
> 144   Compare        20    35    2     keyinfo(2,BINARY,BINARY)  00  NULL
> 145   Jump           128   128   133                  00  NULL
> 146   Halt           0     0     0                    00  NULL
> 147   Transaction    1     0     0                    00  NULL
> 148   VerifyCookie   1     4     0                    00  NULL
> 149   TableLock      1     2     0     a              00  NULL
> 150   TableLock      1     3     0     b              00  NULL
> 151   Goto           0     9     0                    00  NULL
>
>
> addr  opcode         p1    p2    p3    p4             p5  comment
> ----  -------------  ----  ----  ----  -------------  --  -------------
> 0     Trace          0     0     0                    00  NULL
> 1     Goto           0     135   0                    00  NULL
> 2     Noop           0     0     0                    00  Begin coroutine
> for left SELECT
> 3     OpenEphemeral  3     4     0     keyinfo(2,BINARY,BINARY)  00  NULL
> 4     Integer        7     7     0                    00  NULL
> 5     Integer        11    8     0                    00  NULL
> 6     Integer        15    9     0                    00  NULL
> 7     Integer        11    10    0                    00  NULL
> 8     Goto           0     145   0     3              00  NULL
>
> 9     Null           0     12    0                    00  NULL
> 10    Integer        31    11    0                    00  NULL
> 11    VOpen          2     0     0     vtab:108362E8:2AD925E92D80  00  NULL
> 12    Copy           7     16    0                    00  NULL
> 13    Copy           8     17    0                    00  NULL
> 14    Integer        2     14    0                    00  NULL
> 15    Integer        2     15    0                    00  NULL
> 16    VFilter        2     21    14                  00  NULL
> 17    Rowid          2     13    0                    00  NULL
>
>
> 18    RowSetTest     12    20    13    0              00  NULL
> 19    Gosub          11    32    0                    00  NULL
> 20    VNext          2     17    0                    00  NULL
>
> 21    VOpen          2     0     0     vtab:108362E8:2AD925E92D80  00  NULL
> 22    Copy           9     16    0                    00  NULL
> 23    Copy           10    17    0                    00  NULL
> 24    Integer        2     14    0                    00  NULL
> 25    Integer        2     15    0                    00  NULL
> 26    VFilter        2     31    14                  00  NULL
> 27    Rowid          2     13    0                    00  NULL
>
> 28    RowSetTest     12    30    13    -1             00  NULL
> 29    Gosub          11    32    0                    00  NULL
> 30    VNext          2     27    0                    00  NULL
> 31    Goto           0     46    0                    00  NULL
>
> 32    VColumn        2     1     18                   00
>  sgb_ct_draw_share_count.game_no
> 33    ToInt          18    0     0                    00  NULL
> 34    VColumn        2     2     19                   00
>  sgb_ct_draw_share_count.draw_no
> 35    ToInt          19    0     0                    00  NULL
> 36    MakeRecord     18    2     20                   00  NULL
> 37    VColumn        2     1     14                   00
>  sgb_ct_draw_share_count.game_no
> 38    ToInt          14    0     0                    00  NULL
> 39    VColumn        2     2     15                   00
>  sgb_ct_draw_share_count.draw_no
> 40    ToInt          15    0     0                    00  NULL
> 41    Sequence       3     16    0                    00  NULL
> 42    Move           20    17    1                    00  NULL
> 43    MakeRecord     14    4     21                   00  NULL
> 44    IdxInsert      3     21    0                    00  NULL
> 45    Return         11    0     0                    00  NULL
>
> 46    Close          2     0     0                    00  NULL
> 47    OpenPseudo     4     20    2                    00  NULL
> 48    Sort           3     54    0                    00  NULL
> 49    Column         3     3     20                   00  NULL
> 50    Column         4     0     18                   20  NULL
> 51    Column         4     1     19                   00  NULL
> 52    Yield          1     0     0                    00  NULL
> 53    Next           3     49    0                    00  NULL
> 54    Close          4     0     0                    00  NULL
> 55    Integer        1     2     0                    00  NULL
> 56    Yield          1     0     0                    00  NULL
> 57    Noop           0     0     0                    00  End coroutine
> for left SELECT
>
> 58    Noop           0     0     0                    00  Begin coroutine
> for right SELECT
> 59    OpenEphemeral  5     4     0     3              00  NULL
>
> 60    Null           0     23    0                    00  NULL
> 61    Integer        82    22    0                    00  NULL
> 62    VOpen          1     0     0     vtab:10843658:2AD925E92D80  00  NULL
> 63    Integer        7     16    0                    00  NULL
> 64    Integer        11    17    0                    00  NULL
> 65    Integer        2     14    0                    00  NULL
> 66    Integer        2     15    0                    00  NULL
> 67    VFilter        1     72    14                  00  NULL
> 68    Rowid          1     24    0                    00  NULL
>
>
> 69    RowSetTest     23    71    24    0              00  NULL
> 70    Gosub          22    83    0                    00  NULL
> 71    VNext          1     68    0                    00  NULL
>
> 72    VOpen          1     0     0     vtab:10843658:2AD925E92D80  00  NULL
> 73    Integer        15    16    0                    00  NULL
> 74    Integer        11    17    0                    00  NULL
> 75    Integer        2     14    0                    00  NULL
> 76    Integer        2     15    0                    00  NULL
> 77    VFilter        1     82    14                  00  NULL
> 78    Rowid          1     24    0                    00  NULL
>
> 79    RowSetTest     23    81    24    -1             00  NULL
> 80    Gosub          22    83    0                    00  NULL
> 81    VNext          1     78    0                    00  NULL
> 82    Goto           0     97    0                    00  NULL
>
> 83    VColumn        1     1     25                   00
>  sgb_ct_draw_share_count_echannel.game_no
> 84    ToInt          25    0     0                    00  NULL
> 85    VColumn        1     2     26                   00
>  sgb_ct_draw_share_count_echannel.draw_no
> 86    ToInt          26    0     0                    00  NULL
> 87    MakeRecord     25    2     20                   00  NULL
> 88    VColumn        1     1     14                   00
>  sgb_ct_draw_share_count_echannel.game_no
> 89    ToInt          14    0     0                    00  NULL
> 90    VColumn        1     2     15                   00
>  sgb_ct_draw_share_count_echannel.draw_no
> 91    ToInt          15    0     0                    00  NULL
> 92    Sequence       5     16    0                    00  NULL
> 93    Move           20    17    1                    00  NULL
> 94    MakeRecord     14    4     21                   00  NULL
> 95    IdxInsert      5     21    0                    00  NULL
> 96    Return         22    0     0                    00  NULL
>
> 97    Close          1     0     0                    00  NULL
> 98    OpenPseudo     6     20    2                    00  NULL
> 99    Sort           5     105   0                    00  NULL
> 100   Column         5     3     20                   00  NULL
> 101   Column         6     0     25                   20  NULL
> 102   Column         6     1     26                   00  NULL
> 103   Yield          3     0     0                    00  NULL
> 104   Next           5     100   0                    00  NULL
> 105   Close          6     0     0                    00  NULL
> 106   Integer        1     4     0                    00  NULL
> 107   Yield          3     0     0                    00  NULL
> 108   Noop           0     0     0                    00  End coroutine
> for right SELECT
>
> 109   Noop           0     0     0                    00  Output routine
> for A
> 110   ResultRow      18    2     0                    00  NULL
> 111   Return         5     0     0                    00  NULL
> 112   Noop           0     0     0                    00  Output routine
> for B
> 113   ResultRow      25    2     0                    00  NULL
> 114   Return         6     0     0                    00  NULL
> 115   Noop           0     0     0                    00  eof-A subroutine
> 116   If             4     144   0                    00  NULL
> 117   Gosub          6     113   0                    00  NULL
> 118   Yield          3     0     0                    00  NULL
> 119   Goto           0     116   0                    00  NULL
> 120   Noop           0     0     0                    00  eof-B subroutine
> 121   If             2     144   0                    00  NULL
> 122   Gosub          5     110   0                    00  NULL
> 123   Yield          1     0     0                    00  NULL
> 124   Goto           0     121   0                    00  NULL
> 125   Noop           0     0     0                    00  A-lt-B subroutine
> 126   Gosub          5     110   0                    00  NULL
> 127   Yield          1     0     0                    00  NULL
> 128   If             2     116   0                    00  NULL
> 129   Goto           0     141   0                    00  NULL
> 130   Noop           0     0     0                    00  A-gt-B subroutine
> 131   Gosub          6     113   0                    00  NULL
> 132   Yield          3     0     0                    00  NULL
> 133   If             4     121   0                    00  NULL
> 134   Goto           0     141   0                    00  NULL
> 135   Integer        0     2     0                    00  NULL
> 136   Integer        0     4     0                    00  NULL
> 137   Gosub          1     2     0                    00  NULL
> 138   Gosub          3     58    0                    00  NULL
> 139   If             2     116   0                    00  NULL
> 140   If             4     121   0                    00  NULL
> 141   Permutation    0     0     0     intarray       00  NULL
> 142   Compare        18    25    2     keyinfo(2,BINARY,BINARY)  00  NULL
> 143   Jump           126   126   131                  00  NULL
> 144   Halt           0     0     0                    00  NULL
> 145   Transaction    0     0     0                    00  NULL
> 146   VerifyCookie   0     1223  0                    00  NULL
>
>
> 147   Goto           0     9     0                    00  NULL
>
> ________________________________
> Gunter Hick
> Software Engineer
> Scientific Games International GmbH
> Klitschgasse 2 - 4, A - 1130 Vienna, Austria
> FN 157284 a, HG Wien
> Tel: +43 1 80100 0
> E-Mail: [email protected]
>
> This e-mail is confidential and may well also be legally privileged. If
> you have received it in error, you are on notice as to its status and
> accordingly please notify us immediately by reply e-mail and then delete
> this message from your system. Please do not copy it or use it for any
> purposes, or disclose its contents to any person as to do so could be a
> breach of confidence. Thank you for your cooperation.
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>



-- 
D. Richard Hipp
[email protected]
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to