Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: third_party/sqlite/sqlite-src-3080704/src/test2.c

Issue 883353008: [sql] Import reference version of SQLite 3.8.7.4. (Closed) Base URL: http://chromium.googlesource.com/chromium/src.git@master
Patch Set: Hold back encoding change which is messing up patch. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 ** 2001 September 15 2 ** 2001 September 15
3 ** 3 **
4 ** The author disclaims copyright to this source code. In place of 4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing: 5 ** a legal notice, here is a blessing:
6 ** 6 **
7 ** May you do good and not evil. 7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others. 8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give. 9 ** May you share freely, never taking more than you give.
10 ** 10 **
11 ************************************************************************* 11 *************************************************************************
12 ** Code for testing the pager.c module in SQLite. This code 12 ** Code for testing the pager.c module in SQLite. This code
13 ** is not included in the SQLite library. It is used for automated 13 ** is not included in the SQLite library. It is used for automated
14 ** testing of the SQLite library. 14 ** testing of the SQLite library.
15 */ 15 */
16 #include "sqliteInt.h" 16 #include "sqliteInt.h"
17 #include "tcl.h" 17 #include "tcl.h"
18 #include <stdlib.h> 18 #include <stdlib.h>
19 #include <string.h> 19 #include <string.h>
20 #include <ctype.h> 20 #include <ctype.h>
21 21
22 /* 22 extern const char *sqlite3ErrName(int);
23 ** Interpret an SQLite error number
24 */
25 static char *errorName(int rc){
26 char *zName;
27 switch( rc ){
28 case SQLITE_OK: zName = "SQLITE_OK"; break;
29 case SQLITE_ERROR: zName = "SQLITE_ERROR"; break;
30 case SQLITE_PERM: zName = "SQLITE_PERM"; break;
31 case SQLITE_ABORT: zName = "SQLITE_ABORT"; break;
32 case SQLITE_BUSY: zName = "SQLITE_BUSY"; break;
33 case SQLITE_NOMEM: zName = "SQLITE_NOMEM"; break;
34 case SQLITE_READONLY: zName = "SQLITE_READONLY"; break;
35 case SQLITE_INTERRUPT: zName = "SQLITE_INTERRUPT"; break;
36 case SQLITE_IOERR: zName = "SQLITE_IOERR"; break;
37 case SQLITE_CORRUPT: zName = "SQLITE_CORRUPT"; break;
38 case SQLITE_FULL: zName = "SQLITE_FULL"; break;
39 case SQLITE_CANTOPEN: zName = "SQLITE_CANTOPEN"; break;
40 case SQLITE_PROTOCOL: zName = "SQLITE_PROTOCOL"; break;
41 case SQLITE_EMPTY: zName = "SQLITE_EMPTY"; break;
42 case SQLITE_SCHEMA: zName = "SQLITE_SCHEMA"; break;
43 case SQLITE_CONSTRAINT: zName = "SQLITE_CONSTRAINT"; break;
44 case SQLITE_MISMATCH: zName = "SQLITE_MISMATCH"; break;
45 case SQLITE_MISUSE: zName = "SQLITE_MISUSE"; break;
46 case SQLITE_NOLFS: zName = "SQLITE_NOLFS"; break;
47 default: zName = "SQLITE_Unknown"; break;
48 }
49 return zName;
50 }
51 23
52 /* 24 /*
53 ** Page size and reserved size used for testing. 25 ** Page size and reserved size used for testing.
54 */ 26 */
55 static int test_pagesize = 1024; 27 static int test_pagesize = 1024;
56 28
57 /* 29 /*
58 ** Dummy page reinitializer 30 ** Dummy page reinitializer
59 */ 31 */
60 static void pager_test_reiniter(DbPage *pNotUsed){ 32 static void pager_test_reiniter(DbPage *pNotUsed){
(...skipping 19 matching lines...) Expand all
80 if( argc!=3 ){ 52 if( argc!=3 ){
81 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], 53 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
82 " FILENAME N-PAGE\"", 0); 54 " FILENAME N-PAGE\"", 0);
83 return TCL_ERROR; 55 return TCL_ERROR;
84 } 56 }
85 if( Tcl_GetInt(interp, argv[2], &nPage) ) return TCL_ERROR; 57 if( Tcl_GetInt(interp, argv[2], &nPage) ) return TCL_ERROR;
86 rc = sqlite3PagerOpen(sqlite3_vfs_find(0), &pPager, argv[1], 0, 0, 58 rc = sqlite3PagerOpen(sqlite3_vfs_find(0), &pPager, argv[1], 0, 0,
87 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_MAIN_DB, 59 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_MAIN_DB,
88 pager_test_reiniter); 60 pager_test_reiniter);
89 if( rc!=SQLITE_OK ){ 61 if( rc!=SQLITE_OK ){
90 Tcl_AppendResult(interp, errorName(rc), 0); 62 Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
91 return TCL_ERROR; 63 return TCL_ERROR;
92 } 64 }
93 sqlite3PagerSetCachesize(pPager, nPage); 65 sqlite3PagerSetCachesize(pPager, nPage);
94 pageSize = test_pagesize; 66 pageSize = test_pagesize;
95 sqlite3PagerSetPagesize(pPager, &pageSize, -1); 67 sqlite3PagerSetPagesize(pPager, &pageSize, -1);
96 sqlite3_snprintf(sizeof(zBuf),zBuf,"%p",pPager); 68 sqlite3_snprintf(sizeof(zBuf),zBuf,"%p",pPager);
97 Tcl_AppendResult(interp, zBuf, 0); 69 Tcl_AppendResult(interp, zBuf, 0);
98 return TCL_OK; 70 return TCL_OK;
99 } 71 }
100 72
(...skipping 11 matching lines...) Expand all
112 Pager *pPager; 84 Pager *pPager;
113 int rc; 85 int rc;
114 if( argc!=2 ){ 86 if( argc!=2 ){
115 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], 87 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
116 " ID\"", 0); 88 " ID\"", 0);
117 return TCL_ERROR; 89 return TCL_ERROR;
118 } 90 }
119 pPager = sqlite3TestTextToPtr(argv[1]); 91 pPager = sqlite3TestTextToPtr(argv[1]);
120 rc = sqlite3PagerClose(pPager); 92 rc = sqlite3PagerClose(pPager);
121 if( rc!=SQLITE_OK ){ 93 if( rc!=SQLITE_OK ){
122 Tcl_AppendResult(interp, errorName(rc), 0); 94 Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
123 return TCL_ERROR; 95 return TCL_ERROR;
124 } 96 }
125 return TCL_OK; 97 return TCL_OK;
126 } 98 }
127 99
128 /* 100 /*
129 ** Usage: pager_rollback ID 101 ** Usage: pager_rollback ID
130 ** 102 **
131 ** Rollback changes 103 ** Rollback changes
132 */ 104 */
133 static int pager_rollback( 105 static int pager_rollback(
134 void *NotUsed, 106 void *NotUsed,
135 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ 107 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
136 int argc, /* Number of arguments */ 108 int argc, /* Number of arguments */
137 const char **argv /* Text of each argument */ 109 const char **argv /* Text of each argument */
138 ){ 110 ){
139 Pager *pPager; 111 Pager *pPager;
140 int rc; 112 int rc;
141 if( argc!=2 ){ 113 if( argc!=2 ){
142 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], 114 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
143 " ID\"", 0); 115 " ID\"", 0);
144 return TCL_ERROR; 116 return TCL_ERROR;
145 } 117 }
146 pPager = sqlite3TestTextToPtr(argv[1]); 118 pPager = sqlite3TestTextToPtr(argv[1]);
147 rc = sqlite3PagerRollback(pPager); 119 rc = sqlite3PagerRollback(pPager);
148 if( rc!=SQLITE_OK ){ 120 if( rc!=SQLITE_OK ){
149 Tcl_AppendResult(interp, errorName(rc), 0); 121 Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
150 return TCL_ERROR; 122 return TCL_ERROR;
151 } 123 }
152 return TCL_OK; 124 return TCL_OK;
153 } 125 }
154 126
155 /* 127 /*
156 ** Usage: pager_commit ID 128 ** Usage: pager_commit ID
157 ** 129 **
158 ** Commit all changes 130 ** Commit all changes
159 */ 131 */
160 static int pager_commit( 132 static int pager_commit(
161 void *NotUsed, 133 void *NotUsed,
162 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ 134 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
163 int argc, /* Number of arguments */ 135 int argc, /* Number of arguments */
164 const char **argv /* Text of each argument */ 136 const char **argv /* Text of each argument */
165 ){ 137 ){
166 Pager *pPager; 138 Pager *pPager;
167 int rc; 139 int rc;
168 if( argc!=2 ){ 140 if( argc!=2 ){
169 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], 141 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
170 " ID\"", 0); 142 " ID\"", 0);
171 return TCL_ERROR; 143 return TCL_ERROR;
172 } 144 }
173 pPager = sqlite3TestTextToPtr(argv[1]); 145 pPager = sqlite3TestTextToPtr(argv[1]);
174 rc = sqlite3PagerCommitPhaseOne(pPager, 0, 0); 146 rc = sqlite3PagerCommitPhaseOne(pPager, 0, 0);
175 if( rc!=SQLITE_OK ){ 147 if( rc!=SQLITE_OK ){
176 Tcl_AppendResult(interp, errorName(rc), 0); 148 Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
177 return TCL_ERROR; 149 return TCL_ERROR;
178 } 150 }
179 rc = sqlite3PagerCommitPhaseTwo(pPager); 151 rc = sqlite3PagerCommitPhaseTwo(pPager);
180 if( rc!=SQLITE_OK ){ 152 if( rc!=SQLITE_OK ){
181 Tcl_AppendResult(interp, errorName(rc), 0); 153 Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
182 return TCL_ERROR; 154 return TCL_ERROR;
183 } 155 }
184 return TCL_OK; 156 return TCL_OK;
185 } 157 }
186 158
187 /* 159 /*
188 ** Usage: pager_stmt_begin ID 160 ** Usage: pager_stmt_begin ID
189 ** 161 **
190 ** Start a new checkpoint. 162 ** Start a new checkpoint.
191 */ 163 */
192 static int pager_stmt_begin( 164 static int pager_stmt_begin(
193 void *NotUsed, 165 void *NotUsed,
194 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ 166 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
195 int argc, /* Number of arguments */ 167 int argc, /* Number of arguments */
196 const char **argv /* Text of each argument */ 168 const char **argv /* Text of each argument */
197 ){ 169 ){
198 Pager *pPager; 170 Pager *pPager;
199 int rc; 171 int rc;
200 if( argc!=2 ){ 172 if( argc!=2 ){
201 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], 173 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
202 " ID\"", 0); 174 " ID\"", 0);
203 return TCL_ERROR; 175 return TCL_ERROR;
204 } 176 }
205 pPager = sqlite3TestTextToPtr(argv[1]); 177 pPager = sqlite3TestTextToPtr(argv[1]);
206 rc = sqlite3PagerOpenSavepoint(pPager, 1); 178 rc = sqlite3PagerOpenSavepoint(pPager, 1);
207 if( rc!=SQLITE_OK ){ 179 if( rc!=SQLITE_OK ){
208 Tcl_AppendResult(interp, errorName(rc), 0); 180 Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
209 return TCL_ERROR; 181 return TCL_ERROR;
210 } 182 }
211 return TCL_OK; 183 return TCL_OK;
212 } 184 }
213 185
214 /* 186 /*
215 ** Usage: pager_stmt_rollback ID 187 ** Usage: pager_stmt_rollback ID
216 ** 188 **
217 ** Rollback changes to a checkpoint 189 ** Rollback changes to a checkpoint
218 */ 190 */
219 static int pager_stmt_rollback( 191 static int pager_stmt_rollback(
220 void *NotUsed, 192 void *NotUsed,
221 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ 193 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
222 int argc, /* Number of arguments */ 194 int argc, /* Number of arguments */
223 const char **argv /* Text of each argument */ 195 const char **argv /* Text of each argument */
224 ){ 196 ){
225 Pager *pPager; 197 Pager *pPager;
226 int rc; 198 int rc;
227 if( argc!=2 ){ 199 if( argc!=2 ){
228 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], 200 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
229 " ID\"", 0); 201 " ID\"", 0);
230 return TCL_ERROR; 202 return TCL_ERROR;
231 } 203 }
232 pPager = sqlite3TestTextToPtr(argv[1]); 204 pPager = sqlite3TestTextToPtr(argv[1]);
233 rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, 0); 205 rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, 0);
234 sqlite3PagerSavepoint(pPager, SAVEPOINT_RELEASE, 0); 206 sqlite3PagerSavepoint(pPager, SAVEPOINT_RELEASE, 0);
235 if( rc!=SQLITE_OK ){ 207 if( rc!=SQLITE_OK ){
236 Tcl_AppendResult(interp, errorName(rc), 0); 208 Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
237 return TCL_ERROR; 209 return TCL_ERROR;
238 } 210 }
239 return TCL_OK; 211 return TCL_OK;
240 } 212 }
241 213
242 /* 214 /*
243 ** Usage: pager_stmt_commit ID 215 ** Usage: pager_stmt_commit ID
244 ** 216 **
245 ** Commit changes to a checkpoint 217 ** Commit changes to a checkpoint
246 */ 218 */
247 static int pager_stmt_commit( 219 static int pager_stmt_commit(
248 void *NotUsed, 220 void *NotUsed,
249 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ 221 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
250 int argc, /* Number of arguments */ 222 int argc, /* Number of arguments */
251 const char **argv /* Text of each argument */ 223 const char **argv /* Text of each argument */
252 ){ 224 ){
253 Pager *pPager; 225 Pager *pPager;
254 int rc; 226 int rc;
255 if( argc!=2 ){ 227 if( argc!=2 ){
256 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], 228 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
257 " ID\"", 0); 229 " ID\"", 0);
258 return TCL_ERROR; 230 return TCL_ERROR;
259 } 231 }
260 pPager = sqlite3TestTextToPtr(argv[1]); 232 pPager = sqlite3TestTextToPtr(argv[1]);
261 rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_RELEASE, 0); 233 rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_RELEASE, 0);
262 if( rc!=SQLITE_OK ){ 234 if( rc!=SQLITE_OK ){
263 Tcl_AppendResult(interp, errorName(rc), 0); 235 Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
264 return TCL_ERROR; 236 return TCL_ERROR;
265 } 237 }
266 return TCL_OK; 238 return TCL_OK;
267 } 239 }
268 240
269 /* 241 /*
270 ** Usage: pager_stats ID 242 ** Usage: pager_stats ID
271 ** 243 **
272 ** Return pager statistics. 244 ** Return pager statistics.
273 */ 245 */
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 " ID PGNO\"", 0); 318 " ID PGNO\"", 0);
347 return TCL_ERROR; 319 return TCL_ERROR;
348 } 320 }
349 pPager = sqlite3TestTextToPtr(argv[1]); 321 pPager = sqlite3TestTextToPtr(argv[1]);
350 if( Tcl_GetInt(interp, argv[2], &pgno) ) return TCL_ERROR; 322 if( Tcl_GetInt(interp, argv[2], &pgno) ) return TCL_ERROR;
351 rc = sqlite3PagerSharedLock(pPager); 323 rc = sqlite3PagerSharedLock(pPager);
352 if( rc==SQLITE_OK ){ 324 if( rc==SQLITE_OK ){
353 rc = sqlite3PagerGet(pPager, pgno, &pPage); 325 rc = sqlite3PagerGet(pPager, pgno, &pPage);
354 } 326 }
355 if( rc!=SQLITE_OK ){ 327 if( rc!=SQLITE_OK ){
356 Tcl_AppendResult(interp, errorName(rc), 0); 328 Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
357 return TCL_ERROR; 329 return TCL_ERROR;
358 } 330 }
359 sqlite3_snprintf(sizeof(zBuf),zBuf,"%p",pPage); 331 sqlite3_snprintf(sizeof(zBuf),zBuf,"%p",pPage);
360 Tcl_AppendResult(interp, zBuf, 0); 332 Tcl_AppendResult(interp, zBuf, 0);
361 return TCL_OK; 333 return TCL_OK;
362 } 334 }
363 335
364 /* 336 /*
365 ** Usage: page_lookup ID PGNO 337 ** Usage: page_lookup ID PGNO
366 ** 338 **
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 char *pData; 472 char *pData;
501 int rc; 473 int rc;
502 if( argc!=3 ){ 474 if( argc!=3 ){
503 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], 475 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
504 " PAGE DATA\"", 0); 476 " PAGE DATA\"", 0);
505 return TCL_ERROR; 477 return TCL_ERROR;
506 } 478 }
507 pPage = (DbPage *)sqlite3TestTextToPtr(argv[1]); 479 pPage = (DbPage *)sqlite3TestTextToPtr(argv[1]);
508 rc = sqlite3PagerWrite(pPage); 480 rc = sqlite3PagerWrite(pPage);
509 if( rc!=SQLITE_OK ){ 481 if( rc!=SQLITE_OK ){
510 Tcl_AppendResult(interp, errorName(rc), 0); 482 Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
511 return TCL_ERROR; 483 return TCL_ERROR;
512 } 484 }
513 pData = sqlite3PagerGetData(pPage); 485 pData = sqlite3PagerGetData(pPage);
514 strncpy(pData, argv[2], test_pagesize-1); 486 strncpy(pData, argv[2], test_pagesize-1);
515 pData[test_pagesize-1] = 0; 487 pData[test_pagesize-1] = 0;
516 return TCL_OK; 488 return TCL_OK;
517 } 489 }
518 490
519 #ifndef SQLITE_OMIT_DISKIO 491 #ifndef SQLITE_OMIT_DISKIO
520 /* 492 /*
521 ** Usage: fake_big_file N FILENAME 493 ** Usage: fake_big_file N FILENAME
522 ** 494 **
523 ** Write a few bytes at the N megabyte point of FILENAME. This will 495 ** Write a few bytes at the N megabyte point of FILENAME. This will
524 ** create a large file. If the file was a valid SQLite database, then 496 ** create a large file. If the file was a valid SQLite database, then
525 ** the next time the database is opened, SQLite will begin allocating 497 ** the next time the database is opened, SQLite will begin allocating
526 ** new pages after N. If N is 2096 or bigger, this will test the 498 ** new pages after N. If N is 2096 or bigger, this will test the
527 ** ability of SQLite to write to large files. 499 ** ability of SQLite to write to large files.
528 */ 500 */
529 static int fake_big_file( 501 static int fake_big_file(
530 void *NotUsed, 502 void *NotUsed,
531 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ 503 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
532 int argc, /* Number of arguments */ 504 int argc, /* Number of arguments */
533 const char **argv /* Text of each argument */ 505 const char **argv /* Text of each argument */
534 ){ 506 ){
535 sqlite3_vfs *pVfs; 507 sqlite3_vfs *pVfs;
536 sqlite3_file *fd = 0; 508 sqlite3_file *fd = 0;
537 int rc; 509 int rc;
538 int n; 510 int n;
539 i64 offset; 511 i64 offset;
512 char *zFile;
513 int nFile;
540 if( argc!=3 ){ 514 if( argc!=3 ){
541 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], 515 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
542 " N-MEGABYTES FILE\"", 0); 516 " N-MEGABYTES FILE\"", 0);
543 return TCL_ERROR; 517 return TCL_ERROR;
544 } 518 }
545 if( Tcl_GetInt(interp, argv[1], &n) ) return TCL_ERROR; 519 if( Tcl_GetInt(interp, argv[1], &n) ) return TCL_ERROR;
546 520
547 pVfs = sqlite3_vfs_find(0); 521 pVfs = sqlite3_vfs_find(0);
548 rc = sqlite3OsOpenMalloc(pVfs, argv[2], &fd, 522 nFile = (int)strlen(argv[2]);
523 zFile = sqlite3_malloc( nFile+2 );
524 if( zFile==0 ) return TCL_ERROR;
525 memcpy(zFile, argv[2], nFile+1);
526 zFile[nFile+1] = 0;
527 rc = sqlite3OsOpenMalloc(pVfs, zFile, &fd,
549 (SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB), 0 528 (SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB), 0
550 ); 529 );
551 if( rc ){ 530 if( rc ){
552 Tcl_AppendResult(interp, "open failed: ", errorName(rc), 0); 531 Tcl_AppendResult(interp, "open failed: ", sqlite3ErrName(rc), 0);
532 sqlite3_free(zFile);
553 return TCL_ERROR; 533 return TCL_ERROR;
554 } 534 }
555 offset = n; 535 offset = n;
556 offset *= 1024*1024; 536 offset *= 1024*1024;
557 rc = sqlite3OsWrite(fd, "Hello, World!", 14, offset); 537 rc = sqlite3OsWrite(fd, "Hello, World!", 14, offset);
558 sqlite3OsCloseFree(fd); 538 sqlite3OsCloseFree(fd);
539 sqlite3_free(zFile);
559 if( rc ){ 540 if( rc ){
560 Tcl_AppendResult(interp, "write failed: ", errorName(rc), 0); 541 Tcl_AppendResult(interp, "write failed: ", sqlite3ErrName(rc), 0);
561 return TCL_ERROR; 542 return TCL_ERROR;
562 } 543 }
563 return TCL_OK; 544 return TCL_OK;
564 } 545 }
565 #endif 546 #endif
566 547
567 548
568 /* 549 /*
569 ** test_control_pending_byte PENDING_BYTE 550 ** test_control_pending_byte PENDING_BYTE
570 ** 551 **
571 ** Set the PENDING_BYTE using the sqlite3_test_control() interface. 552 ** Set the PENDING_BYTE using the sqlite3_test_control() interface.
572 */ 553 */
573 static int testPendingByte( 554 static int testPendingByte(
574 void *NotUsed, 555 void *NotUsed,
575 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ 556 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
576 int argc, /* Number of arguments */ 557 int argc, /* Number of arguments */
577 const char **argv /* Text of each argument */ 558 const char **argv /* Text of each argument */
578 ){ 559 ){
579 int pbyte; 560 int pbyte;
580 int rc; 561 int rc;
581 if( argc!=2 ){ 562 if( argc!=2 ){
582 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], 563 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
583 " PENDING-BYTE\"", (void*)0); 564 " PENDING-BYTE\"", (void*)0);
584 return TCL_ERROR; 565 return TCL_ERROR;
585 } 566 }
586 if( Tcl_GetInt(interp, argv[1], &pbyte) ) return TCL_ERROR; 567 if( Tcl_GetInt(interp, argv[1], &pbyte) ) return TCL_ERROR;
587 rc = sqlite3_test_control(SQLITE_TESTCTRL_PENDING_BYTE, pbyte); 568 rc = sqlite3_test_control(SQLITE_TESTCTRL_PENDING_BYTE, pbyte);
588 Tcl_SetObjResult(interp, Tcl_NewIntObj(rc)); 569 Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));
589 return TCL_OK; 570 return TCL_OK;
590 } 571 }
572
573 /*
574 ** The sqlite3FaultSim() callback:
575 */
576 static Tcl_Interp *faultSimInterp = 0;
577 static int faultSimScriptSize = 0;
578 static char *faultSimScript;
579 static int faultSimCallback(int x){
580 char zInt[30];
581 int i;
582 int isNeg;
583 int rc;
584 if( x==0 ){
585 memcpy(faultSimScript+faultSimScriptSize, "0", 2);
586 }else{
587 /* Convert x to text without using any sqlite3 routines */
588 if( x<0 ){
589 isNeg = 1;
590 x = -x;
591 }else{
592 isNeg = 0;
593 }
594 zInt[sizeof(zInt)-1] = 0;
595 for(i=sizeof(zInt)-2; i>0 && x>0; i--, x /= 10){
596 zInt[i] = (x%10) + '0';
597 }
598 if( isNeg ) zInt[i--] = '-';
599 memcpy(faultSimScript+faultSimScriptSize, zInt+i+1, sizeof(zInt)-i);
600 }
601 rc = Tcl_Eval(faultSimInterp, faultSimScript);
602 if( rc ){
603 fprintf(stderr, "fault simulator script failed: [%s]", faultSimScript);
604 rc = SQLITE_ERROR;
605 }else{
606 rc = atoi(Tcl_GetStringResult(faultSimInterp));
607 }
608 Tcl_ResetResult(faultSimInterp);
609 return rc;
610 }
611
612 /*
613 ** sqlite3_test_control_fault_install SCRIPT
614 **
615 ** Arrange to invoke SCRIPT with the integer argument to sqlite3FaultSim()
616 ** appended, whenever sqlite3FaultSim() is called. Or, if SCRIPT is the
617 ** empty string, cancel the sqlite3FaultSim() callback.
618 */
619 static int faultInstallCmd(
620 void *NotUsed,
621 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
622 int argc, /* Number of arguments */
623 const char **argv /* Text of each argument */
624 ){
625 const char *zScript;
626 int nScript;
627 int rc;
628 if( argc!=1 && argc!=2 ){
629 Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
630 " SCRIPT\"", (void*)0);
631 }
632 zScript = argc==2 ? argv[1] : "";
633 nScript = (int)strlen(zScript);
634 if( faultSimScript ){
635 free(faultSimScript);
636 faultSimScript = 0;
637 }
638 if( nScript==0 ){
639 rc = sqlite3_test_control(SQLITE_TESTCTRL_FAULT_INSTALL, 0);
640 }else{
641 faultSimScript = malloc( nScript+100 );
642 if( faultSimScript==0 ){
643 Tcl_AppendResult(interp, "out of memory", (void*)0);
644 return SQLITE_ERROR;
645 }
646 memcpy(faultSimScript, zScript, nScript);
647 faultSimScript[nScript] = ' ';
648 faultSimScriptSize = nScript+1;
649 faultSimInterp = interp;
650 rc = sqlite3_test_control(SQLITE_TESTCTRL_FAULT_INSTALL, faultSimCallback);
651 }
652 Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));
653 return SQLITE_OK;
654 }
591 655
592 /* 656 /*
593 ** sqlite3BitvecBuiltinTest SIZE PROGRAM 657 ** sqlite3BitvecBuiltinTest SIZE PROGRAM
594 ** 658 **
595 ** Invoke the SQLITE_TESTCTRL_BITVEC_TEST operator on test_control. 659 ** Invoke the SQLITE_TESTCTRL_BITVEC_TEST operator on test_control.
596 ** See comments on sqlite3BitvecBuiltinTest() for additional information. 660 ** See comments on sqlite3BitvecBuiltinTest() for additional information.
597 */ 661 */
598 static int testBitvecBuiltinTest( 662 static int testBitvecBuiltinTest(
599 void *NotUsed, 663 void *NotUsed,
600 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ 664 Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 { "page_lookup", (Tcl_CmdProc*)page_lookup }, 714 { "page_lookup", (Tcl_CmdProc*)page_lookup },
651 { "page_unref", (Tcl_CmdProc*)page_unref }, 715 { "page_unref", (Tcl_CmdProc*)page_unref },
652 { "page_read", (Tcl_CmdProc*)page_read }, 716 { "page_read", (Tcl_CmdProc*)page_read },
653 { "page_write", (Tcl_CmdProc*)page_write }, 717 { "page_write", (Tcl_CmdProc*)page_write },
654 { "page_number", (Tcl_CmdProc*)page_number }, 718 { "page_number", (Tcl_CmdProc*)page_number },
655 { "pager_truncate", (Tcl_CmdProc*)pager_truncate }, 719 { "pager_truncate", (Tcl_CmdProc*)pager_truncate },
656 #ifndef SQLITE_OMIT_DISKIO 720 #ifndef SQLITE_OMIT_DISKIO
657 { "fake_big_file", (Tcl_CmdProc*)fake_big_file }, 721 { "fake_big_file", (Tcl_CmdProc*)fake_big_file },
658 #endif 722 #endif
659 { "sqlite3BitvecBuiltinTest",(Tcl_CmdProc*)testBitvecBuiltinTest }, 723 { "sqlite3BitvecBuiltinTest",(Tcl_CmdProc*)testBitvecBuiltinTest },
660 { "sqlite3_test_control_pending_byte", (Tcl_CmdProc*)testPendingByte }, 724 { "sqlite3_test_control_pending_byte", (Tcl_CmdProc*)testPendingByte },
725 { "sqlite3_test_control_fault_install", (Tcl_CmdProc*)faultInstallCmd },
661 }; 726 };
662 int i; 727 int i;
663 for(i=0; i<sizeof(aCmd)/sizeof(aCmd[0]); i++){ 728 for(i=0; i<sizeof(aCmd)/sizeof(aCmd[0]); i++){
664 Tcl_CreateCommand(interp, aCmd[i].zName, aCmd[i].xProc, 0, 0); 729 Tcl_CreateCommand(interp, aCmd[i].zName, aCmd[i].xProc, 0, 0);
665 } 730 }
666 Tcl_LinkVar(interp, "sqlite_io_error_pending", 731 Tcl_LinkVar(interp, "sqlite_io_error_pending",
667 (char*)&sqlite3_io_error_pending, TCL_LINK_INT); 732 (char*)&sqlite3_io_error_pending, TCL_LINK_INT);
668 Tcl_LinkVar(interp, "sqlite_io_error_persist", 733 Tcl_LinkVar(interp, "sqlite_io_error_persist",
669 (char*)&sqlite3_io_error_persist, TCL_LINK_INT); 734 (char*)&sqlite3_io_error_persist, TCL_LINK_INT);
670 Tcl_LinkVar(interp, "sqlite_io_error_hit", 735 Tcl_LinkVar(interp, "sqlite_io_error_hit",
671 (char*)&sqlite3_io_error_hit, TCL_LINK_INT); 736 (char*)&sqlite3_io_error_hit, TCL_LINK_INT);
672 Tcl_LinkVar(interp, "sqlite_io_error_hardhit", 737 Tcl_LinkVar(interp, "sqlite_io_error_hardhit",
673 (char*)&sqlite3_io_error_hardhit, TCL_LINK_INT); 738 (char*)&sqlite3_io_error_hardhit, TCL_LINK_INT);
674 Tcl_LinkVar(interp, "sqlite_diskfull_pending", 739 Tcl_LinkVar(interp, "sqlite_diskfull_pending",
675 (char*)&sqlite3_diskfull_pending, TCL_LINK_INT); 740 (char*)&sqlite3_diskfull_pending, TCL_LINK_INT);
676 Tcl_LinkVar(interp, "sqlite_diskfull", 741 Tcl_LinkVar(interp, "sqlite_diskfull",
677 (char*)&sqlite3_diskfull, TCL_LINK_INT); 742 (char*)&sqlite3_diskfull, TCL_LINK_INT);
678 #ifndef SQLITE_OMIT_WSD 743 #ifndef SQLITE_OMIT_WSD
679 Tcl_LinkVar(interp, "sqlite_pending_byte", 744 Tcl_LinkVar(interp, "sqlite_pending_byte",
680 (char*)&sqlite3PendingByte, TCL_LINK_INT | TCL_LINK_READ_ONLY); 745 (char*)&sqlite3PendingByte, TCL_LINK_INT | TCL_LINK_READ_ONLY);
681 #endif 746 #endif
682 return TCL_OK; 747 return TCL_OK;
683 } 748 }
OLDNEW
« no previous file with comments | « third_party/sqlite/sqlite-src-3080704/src/test1.c ('k') | third_party/sqlite/sqlite-src-3080704/src/test3.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698