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
> [email protected]
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users