The problem was somewhere inside CodeWarrior because the same exact code worked fine with Visual C. I used CodeWarrior for Win for all my win32 sqlite compilation but it seems time to update my Win Dev environment...

---
Marco Bambini
http://www.sqlabs.net
http://www.sqlabs.net/blog/
http://www.sqlabs.net/realsqlserver/



On Oct 31, 2007, at 7:59 PM, Joe Wilson wrote:

Can you post the output of this command when you compile
sqlite 3.4.2 with code warrior for your test.sqlite database?

  explain SELECT a FROM One WHERE b1 = 99 AND b2 = 100 and b3 = 101;

With the sqlite 3.5.1 shell compiled with gcc 4.1.1 I see:

0|Goto|0|25|
1|Integer|0|0|# One
2|OpenRead|0|2|
3|SetNumColumns|0|4|
4|Integer|0|0|# idx_One
5|OpenRead|1|4|keyinfo(3,BINARY,BINARY)
6|Integer|99|0|
7|IsNull|-1|22|
8|Integer|100|0|
9|IsNull|-2|22|
10|Integer|101|0|
11|IsNull|-3|22|
12|MakeRecord|3|0|ddd
13|MemStore|0|0|
14|MoveGe|1|22|
15|MemLoad|0|0|
16|IdxGE|1|22|+
17|IdxRowid|1|0|
18|MoveGe|0|0|
19|Column|0|0|# One.a
20|Callback|1|0|
21|Next|1|15|
22|Close|0|0|
23|Close|1|0|
24|Halt|0|0|
25|Transaction|0|0|
26|VerifyCookie|0|2|
27|TableLock|0|2|One
28|Goto|0|1|
29|Noop|0|0|

Just for the heck of it, can you also provide the code warrior/3.4.2
output for these commands as well?

-- select case 2
-- Getting all columns works
explain SELECT * FROM One WHERE b1 = 99 AND b2 = 100 and b3 = 101;

-- select case 3
-- Not using whole index works
explain SELECT a FROM One WHERE  b2 = 100 and b3 = 101;

-- select case 4
-- Getting one column, in the index, works
explain SELECT b1 FROM One WHERE b1 = 99 AND b2 = 100 and b3 = 101;

--- Marco Bambini <[EMAIL PROTECTED]> wrote:
To be really sure I rewrote the example in C linked to the official
sqlite 3.4.2.
Here it is my source code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqlite3.h"

int main(void)
{
        sqlite3 *db = NULL;
        int     rc = SQLITE_OK;
        char    sql[256];
        char    **result;
     int        i, nrow, ncol;
        
        // open db
        rc = sqlite3_open("test.sqlite", &db);
        if (rc != SQLITE_OK) goto abort;
        
        // create table
        rc = sqlite3_exec(db, "CREATE TABLE One (a varchar primary key, b1
integer, b2 integer, b3 integer, z varchar);", NULL, 0, NULL);
        if (rc != SQLITE_OK) goto abort;
        
        // create index
        rc = sqlite3_exec(db, "CREATE UNIQUE INDEX idx_One ON One(b1, b2,
b3);", NULL, 0, NULL);
        if (rc != SQLITE_OK) goto abort;
        
        // insert loop
        for (i=1; i<=100; i++)
        {
                snprintf(sql, 256, "INSERT INTO One VALUES ('%d', %d, %d, %d,
'A');", i, i+1, i+2, i+3);
                rc = sqlite3_exec(db, sql, NULL, 0, NULL);
                if (rc != SQLITE_OK) goto abort;
        }
        
        // query test 1
        rc = sqlite3_get_table(db, "SELECT a FROM One WHERE b1 = 99 AND b2 =
100 and b3 = 101;", &result, &nrow, &ncol, NULL);
        if (rc != SQLITE_OK) goto abort;
        
        for(i=0; i<ncol; ++i)
        {
                printf(result[i]);
                printf("\t\t");
        }
        printf("\n");
        
        for(i=0; i<ncol*nrow; ++i)
        {
                printf(result[ncol+i]);
                printf("\t\t");
                if (i % ncol == 0) printf("\n");
        }
        
        // free table
        sqlite3_free_table(result);
        
        // close db
        sqlite3_close(db);
        
        printf("simple test finished!\n");
        return 0;
        
abort:
        printf("%s\n", sqlite3_errmsg(db));
        if (db != NULL) sqlite3_close(db);
        return -1;
}

On Windows (not on Mac!) it returns 99 instead of the correct 98 value.
Anyone can confirm that on Windows?

Thanks a lot.
---
Marco Bambini
http://www.sqlabs.net
http://www.sqlabs.net/blog/
http://www.sqlabs.net/realsqlserver/



On Oct 30, 2007, at 5:15 PM, [EMAIL PROTECTED] wrote:

Marco Bambini <[EMAIL PROTECTED]> wrote:

I am experiencing a very strange issue in sqlite 3.4.2 (only with the
Win32 version, OSX and linux works fine).

I wonder if there was a bug in the 3.4.2 version that I should fix...
Please note that I cannot upgrade to the latest 3.5.x versions...


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

---------------------------------------------------------------------- -------
To unsubscribe, send email to [EMAIL PROTECTED]
---------------------------------------------------------------------- -------



-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to