Can you update your SQLite to the latest revision?

On Tue, Jul 1, 2008 at 3:42 PM, smlacc1 leador <[EMAIL PROTECTED]> wrote:

> Hi,
>
> I'm having some trouble with blobs.  I have 4 blobs tht I want to insert
> into a db, and it works fine when I execute each insert as a single commit.
> However, when i try to use transactions to input blocks of 255 inserts,
> blob
> 4 gets inputted in the position of blob3, blob 3 in position of blob 2 etc
> etc.  Very strange.  I've written some code to explain what I mean.  The
> code takes a long time to finish, so if you want to try it, compile it,
> then
> execute for a few seconds before ctrl-c'ing it to quit.  It should give you
> enough data to see what I mean.  In example 1, the fields are where they
> should be.  In code 2, the fields all get shifted left by 1 column.  But
> the
> code is identical except for where the "begin" and "commit" statements are
> located.  Anyone know what could be the problem?  Im using sqlite v3, th
> specific version is the one that came with fedora core 8 - 3.4.2.  The
> code
> is in "c".
>
> here are 2 pieces of code - 1 using transactions, 1 without - but otherwise
> identical.
>
> Any help much apreciated.  What I'm trying to acheive would be way too slow
> without transactions.....
> ------------------------------------
> #include <stdio.h>
> #include <stdlib.h>
> #include <sqlite3.h>
>
> sqlite3* db;
> sqlite3_stmt *state;
>
> void execblobsql(const char* statement,int v1,int v2,int v3,int v4){
>     char c1[1];
>     c1[0] = v1;
>     char c2[1];
>     c2[0] = v2;
>     char c3[1];
>     c3[0] = v3;
>     char c4[1];
>     c4[0] = v4;
>     sqlite3_exec (db, "BEGIN", NULL, NULL, NULL);
>     sqlite3_prepare(db,statement,-1,&state,NULL);
>     sqlite3_bind_blob(state,1,c1,1,SQLITE_TRANSIENT);
>     sqlite3_bind_blob(state,2,c2,1,SQLITE_TRANSIENT);
>     sqlite3_bind_blob(state,3,c3,1,SQLITE_TRANSIENT);
>     sqlite3_bind_blob(state,4,c4,1,SQLITE_TRANSIENT);
>
>     sqlite3_step(state);
>     sqlite3_finalize(state);
>     sqlite3_exec(db, "COMMIT", NULL, NULL, NULL);
> }
>
> int main (){
>  sqlite3_open("./blobs.db", &db);
>  if (db == 0){
>  printf ("database could not be opened.\n");
>  return 1;
>  }
>  char *errmsg;
>  sqlite3_exec(db,"create table blobs (b1 BLOB, b2 BLOB, b3 BLOB, b4
> BLOB)",0,0,&errmsg);
>  char stata[] = "insert into blobs values (?1 ,?2 ,?3 ,?4)";
>  int looper1 = 0;
>  int looper2 = 0;
>  int looper3 = 0;
>  int looper4 = 0;
>
>
>  while (looper1 < 256){
>  while (looper2 < 256){
>   while (looper3 < 256){
>  /*  sqlite3_exec (db, "BEGIN", NULL, NULL, NULL);
>    sqlite3_prepare(db,stata,-1,&state,NULL);*/
>    while (looper4 < 256){
>     execblobsql(stata, looper1, looper2, looper3, looper4);
>     looper4++;
>    }
>    looper3++;
>    looper4=0;
>  /*  sqlite3_finalize(state);
>    sqlite3_exec(db, "COMMIT", NULL, NULL, NULL);*/
>   }
>   looper2++;
>   looper3=0;
>   looper4=0;
>  }
>  looper1++;
>  looper2=0;
>  looper3=0;
>  looper4=0;
>  }
>
> }
>
> ------------------------------------
> #include <stdio.h>
> #include <stdlib.h>
> #include <sqlite3.h>
>
> sqlite3* db;
> sqlite3_stmt *state;
>
> void execblobsql(const char* statement,int v1,int v2,int v3,int v4){
>     char c1[1];
>     c1[0] = v1;
>     char c2[1];
>     c2[0] = v2;
>     char c3[1];
>     c3[0] = v3;
>     char c4[1];
>     c4[0] = v4;
>  /*    sqlite3_exec (db, "BEGIN", NULL, NULL, NULL);
>     sqlite3_prepare(db,statement,-1,&state,NULL);*/
>     sqlite3_bind_blob(state,1,c1,1,SQLITE_TRANSIENT);
>     sqlite3_bind_blob(state,2,c2,1,SQLITE_TRANSIENT);
>     sqlite3_bind_blob(state,3,c3,1,SQLITE_TRANSIENT);
>     sqlite3_bind_blob(state,4,c4,1,SQLITE_TRANSIENT);
>
>     sqlite3_step(state);
>  /*    sqlite3_finalize(state);
>     sqlite3_exec(db, "COMMIT", NULL, NULL, NULL);*/
> }
>
> int main (){
>  sqlite3_open("./blobs.db", &db);
>  if (db == 0){
>  printf ("database could not be opened.\n");
>  return 1;
>  }
>  char *errmsg;
>  sqlite3_exec(db,"create table blobs (b1 BLOB, b2 BLOB, b3 BLOB, b4
> BLOB)",0,0,&errmsg);
>  char stata[] = "insert into blobs values (?1 ,?2 ,?3 ,?4)";
>  int looper1 = 0;
>  int looper2 = 0;
>  int looper3 = 0;
>  int looper4 = 0;
>
>
>  while (looper1 < 256){
>  while (looper2 < 256){
>   while (looper3 < 256){
>    sqlite3_exec (db, "BEGIN", NULL, NULL, NULL);
>    sqlite3_prepare(db,stata,-1,&state,NULL);
>    while (looper4 < 256){
>     execblobsql(stata, looper1, looper2, looper3, looper4);
>     looper4++;
>    }
>    looper3++;
>    looper4=0;
>    sqlite3_finalize(state);
>    sqlite3_exec(db, "COMMIT", NULL, NULL, NULL);
>   }
>   looper2++;
>   looper3=0;
>   looper4=0;
>  }
>  looper1++;
>  looper2=0;
>  looper3=0;
>  looper4=0;
>  }
>
> }
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to