Overview
Comment: | Move around some BEGIN and COMMIT commands to avoid misnested transactions in some cases |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
b4a4337c4ace814315df7bc4bba02504 |
User & Date: | user on 2018-06-10 06:10:45 |
Other Links: | manifest | tags |
Context
2018-06-10
| ||
16:34 | Add some SQL functions check-in: 81f52e6f42 user: user tags: trunk | |
06:10 | Move around some BEGIN and COMMIT commands to avoid misnested transactions in some cases check-in: b4a4337c4a user: user tags: trunk | |
05:27 | Corrections and completions of class loading; implement -x switch; correction to schema check-in: 08625cbba0 user: user tags: trunk | |
Changes
Modified main.c from [4a37978eeb] to [8ee65d5a1a].
︙ | ︙ | |||
71 72 73 74 75 76 77 | } static sqlite3_int64 reset_usercache(FILE*fp,const char*nam,struct stat*stats,const char*suffix) { sqlite3_stmt*st; sqlite3_int64 t,id; char buf[128]; int i,z; | < | 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | } static sqlite3_int64 reset_usercache(FILE*fp,const char*nam,struct stat*stats,const char*suffix) { sqlite3_stmt*st; sqlite3_int64 t,id; char buf[128]; int i,z; if(z=sqlite3_prepare_v2(userdb,"DELETE FROM `USERCACHEDATA` WHERE `FILE` = (SELECT `ID` FROM `USERCACHEINDEX` WHERE `NAME` = ?1);",-1,&st,0)) { fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); } sqlite3_bind_text(st,1,nam,-1,0); while((z=sqlite3_step(st))==SQLITE_ROW); if(z!=SQLITE_DONE) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); sqlite3_finalize(st); |
︙ | ︙ | |||
132 133 134 135 136 137 138 | } while((z=sqlite3_step(st))==SQLITE_ROW); if(z!=SQLITE_DONE) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); fseek(fp,t,SEEK_CUR); } done: sqlite3_finalize(st); | < | 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | } while((z=sqlite3_step(st))==SQLITE_ROW); if(z!=SQLITE_DONE) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); fseek(fp,t,SEEK_CUR); } done: sqlite3_finalize(st); return id; } unsigned char*read_lump(int sol,int lvl,long*sz,sqlite3_value**us) { // Returns a pointer to the data; must be freed using free(). // If there is no data, returns null and sets *sz and *us to zero. // Third argument is a pointer to a variable to store the data size (must be not null). |
︙ | ︙ | |||
201 202 203 204 205 206 207 208 209 210 211 212 213 214 | int z; sqlite3_int64 t1,t2; char*nam1; char*nam2; char*nam3; struct stat fst; fprintf(stderr,"Initializing user cache...\n"); if(z=sqlite3_prepare_v2(userdb,"SELECT `ID`, `TIME` FROM `USERCACHEINDEX` WHERE `NAME` = ?1;",-1,&st,0)) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); nam1=sqlite3_mprintf("%s.level",basefilename); if(!nam1) fatal("Allocation failed\n"); nam2=realpath(nam1,0); if(!nam2) fatal("Cannot find real path of '%s': %m\n",nam1); levelfp=fopen(nam2,"r"); if(!levelfp) fatal("Cannot open '%s' for reading: %m\n",nam2); | > | 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 | int z; sqlite3_int64 t1,t2; char*nam1; char*nam2; char*nam3; struct stat fst; fprintf(stderr,"Initializing user cache...\n"); if(z=sqlite3_exec(userdb,"BEGIN;",0,0,0)) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); if(z=sqlite3_prepare_v2(userdb,"SELECT `ID`, `TIME` FROM `USERCACHEINDEX` WHERE `NAME` = ?1;",-1,&st,0)) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); nam1=sqlite3_mprintf("%s.level",basefilename); if(!nam1) fatal("Allocation failed\n"); nam2=realpath(nam1,0); if(!nam2) fatal("Cannot find real path of '%s': %m\n",nam1); levelfp=fopen(nam2,"r"); if(!levelfp) fatal("Cannot open '%s' for reading: %m\n",nam2); |
︙ | ︙ | |||
250 251 252 253 254 255 256 257 258 259 260 261 262 263 | if(!fst.st_size) fatal("File '%s' has zero size\n",nam2); if(fst.st_mtime>t2 || fst.st_ctime>t2) solutionuc=reset_usercache(solutionfp,nam3,&fst,".SOL"); free(nam2); free(nam3); if(z=sqlite3_prepare_v3(userdb,"SELECT * FROM `USERCACHEDATA` WHERE `FILE` = ?1 AND `LEVEL` = ?2;",-1,SQLITE_PREPARE_PERSISTENT,&readusercachest,0)) { fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); } fprintf(stderr,"Done\n"); } static void init_sql(void) { char*s; char*p; const char*v; | > | 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 | if(!fst.st_size) fatal("File '%s' has zero size\n",nam2); if(fst.st_mtime>t2 || fst.st_ctime>t2) solutionuc=reset_usercache(solutionfp,nam3,&fst,".SOL"); free(nam2); free(nam3); if(z=sqlite3_prepare_v3(userdb,"SELECT * FROM `USERCACHEDATA` WHERE `FILE` = ?1 AND `LEVEL` = ?2;",-1,SQLITE_PREPARE_PERSISTENT,&readusercachest,0)) { fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); } if(z=sqlite3_exec(userdb,"COMMIT;",0,0,0)) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); fprintf(stderr,"Done\n"); } static void init_sql(void) { char*s; char*p; const char*v; |
︙ | ︙ |
Modified picture.c from [95be04510a] to [6b3d3ff78d].
︙ | ︙ | |||
227 228 229 230 231 232 233 | i=j=0; sscanf(v," %d %n",&i,&j); if(!j) break; if(i<2 || i>255) fatal("Invalid picture size %d\n",i); wantsize[nwantsize++]=i; v+=j; } | | | 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 | i=j=0; sscanf(v," %d %n",&i,&j); if(!j) break; if(i<2 || i>255) fatal("Invalid picture size %d\n",i); wantsize[nwantsize++]=i; v+=j; } if(n=sqlite3_exec(userdb,"BEGIN;",0,0,0)) fatal("SQL error (%d): %s\n",n,sqlite3_errmsg(userdb)); if(sqlite3_prepare_v2(userdb,"INSERT INTO `PICTURES`(`ID`,`NAME`,`OFFSET`) VALUES(?1,?2,?3);",-1,&st,0)) fatal("Unable to prepare SQL statement while loading pictures: %s\n",sqlite3_errmsg(userdb)); nam=malloc(256); if(!nam) fatal("Allocation failed\n"); n=0; memset(havesize,0,256*sizeof(Uint16)); while(!feof(fp)) { |
︙ | ︙ | |||
295 296 297 298 299 300 301 | for(i=0;i<n;i++) { if((j=sqlite3_step(st))!=SQLITE_ROW) fatal("SQL error (%d): %s\n",j,j==SQLITE_DONE?"Incorrect number of rows in a temporary table":sqlite3_errmsg(userdb)); fseek(fp,sqlite3_column_int64(st,1),SEEK_SET); load_one_picture(fp,sqlite3_column_int(st,0),altImage); } sqlite3_finalize(st); fclose(fp); | < > | 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 | for(i=0;i<n;i++) { if((j=sqlite3_step(st))!=SQLITE_ROW) fatal("SQL error (%d): %s\n",j,j==SQLITE_DONE?"Incorrect number of rows in a temporary table":sqlite3_errmsg(userdb)); fseek(fp,sqlite3_column_int64(st,1),SEEK_SET); load_one_picture(fp,sqlite3_column_int(st,0),altImage); } sqlite3_finalize(st); fclose(fp); SDL_SetColorKey(picts,SDL_SRCCOLORKEY|SDL_RLEACCEL,0); done: if(n=sqlite3_exec(userdb,"COMMIT;",0,0,0)) fatal("SQL error (%d): %s\n",n,sqlite3_errmsg(userdb)); fprintf(stderr,"Done\n"); } void init_screen(void) { const char*v; int w,h,i; if(main_options['x']) return; |
︙ | ︙ |