Hi,

 

I am doing some programmatic stress / benchmark testing on sqlite in the
hope it'll be of use to me in my project.

I'm performing some simple stress tests to gauge read/write speeds, whereby
I fill a table with a large amount rows

However,  I hit the following problem on writing:

 

  Creating 100000 rows...

  died on row 1075

  SQL error 2: unable to open database fi

  Press any key to continue . . .

 

I'm using version 3.5.2 and my stress test code (written in C) is attached.

Does anyone have any ideas as to why it fails?

 

Thanks,

Ged

 

 

 

 

 

 

#include <windows.h>
#include <stdio.h>
#include <sqlite3.h>

#define TESTDB "C:\\Users\\Ged\\Desktop\\sqlite stuff\\benchmarking\\testdb"
#define MAX_ROWS 100000

static int 
ReadCallback(void *NotUsed,
             int argc,
             char **argv,
             char **azColName)
{
    /* do stuff */
    return 0;
}


static BOOL
FillDatabase(sqlite3 *db)
{
    INT ret, i;
    char *zErrMsg = 0;
    BOOL bRet = FALSE;

    printf("Creating %d rows...\n", MAX_ROWS);

    ret = sqlite3_exec(db,
                       "CREATE TABLE test (ID integer primary key 
autoincrement, Field1 int, Field2 VARCHAR(50))",
                       NULL,
                       0,
                       &zErrMsg);
    if (ret == SQLITE_OK)
    {
        for (i = 0; i < MAX_ROWS; i++)
        {
            ret = sqlite3_exec(db,
                               "INSERT INTO test(Field1, Field2) VALUES(15, 
'Hello')",
                               NULL,
                               0,
                               &zErrMsg);
            if (ret != SQLITE_OK)
            {
                fprintf(stderr, "died on row %d\n", i);
                fprintf(stderr, "SQL error 2: %s\n", zErrMsg);
                sqlite3_free(zErrMsg);
                return FALSE;
            }

            //Sleep(5);
        }

        bRet = TRUE;
    }
    else
    {
        fprintf(stderr, "SQL error 1: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    }

    return bRet;

}


static VOID
ReadDatabase(sqlite3 *db)
{
    INT ret;
    char *zErrMsg = 0;

    printf("Reading %d rows...\n", MAX_ROWS);

    ret = sqlite3_exec(db,
                       "SELECT * FROM test",
                       ReadCallback,
                       0,
                       &zErrMsg);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    }
}


static BOOL
OpenDatabase(sqlite3 **db)
{
    INT ret;

    ret = sqlite3_open(TESTDB, db);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(*db));
    }

    return (ret == SQLITE_OK);
}


static VOID
CloseDatabase(sqlite3 *db)
{
    if (db)
        sqlite3_close(db);
}


int main (int argc, char* argv[])
{
    sqlite3 *db = NULL;
    DWORD startwrite = 0, startread = 0;
    DWORD endwrite = 0, endread = 0;

    DeleteFileA(TESTDB);

    if (OpenDatabase(&db))
    {
        startwrite = GetTickCount();
        if (FillDatabase(db))
        {
            endwrite = startread = GetTickCount();
            ReadDatabase(db);
            endread = GetTickCount();
        }

        CloseDatabase(db);
    }

    if (endwrite)
    {
        INT writetime = endwrite - startwrite;

        if (writetime > 1000)
        {
            writetime /= 1000;
            if (writetime > 60)
            {
                int min = writetime / 60;
                int sec = writetime % 60;
                printf("\ncreate time - %d.%d mins\n", min, sec);
            }
            else
                printf("\ncreate time - %d secs\n", writetime);
        }
        else
            printf("\ncreate time - %d ms\n", writetime);


        if (endread)
            printf("read time - %d ms\n\n", endread - startread);
    }

    system("PAUSE");

    return 0;
}

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

Reply via email to