Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Move the test (sqlite3_simulate_device) functionality out of the main code and into a test vfs. (CVS 4737) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
17e7bd6c3f507ffc6b56f54ae8c70730 |
User & Date: | danielk1977 2008-01-22 11:50:13.000 |
Context
2008-01-22
| ||
14:50 | Remove dead code from the lemon-generated parser. Better testing of the sqlite3_file_control() interface, and in particular make sure the interface works on :memory: databases. (CVS 4738) (check-in: 83ca4fc7dc user: drh tags: trunk) | |
11:50 | Move the test (sqlite3_simulate_device) functionality out of the main code and into a test vfs. (CVS 4737) (check-in: 17e7bd6c3f user: danielk1977 tags: trunk) | |
01:48 | Changes to lemon to generate additional comments in the output file and to remove unreachable code. Additional test cases for improved test coverage. (CVS 4736) (check-in: 2a0bc1e186 user: drh tags: trunk) | |
Changes
Changes to Makefile.in.
︙ | ︙ | |||
240 241 242 243 244 245 246 247 248 249 250 251 252 253 | $(TOP)/src/test7.c \ $(TOP)/src/test8.c \ $(TOP)/src/test9.c \ $(TOP)/src/test_autoext.c \ $(TOP)/src/test_async.c \ $(TOP)/src/test_btree.c \ $(TOP)/src/test_config.c \ $(TOP)/src/test_hexio.c \ $(TOP)/src/test_malloc.c \ $(TOP)/src/test_md5.c \ $(TOP)/src/test_onefile.c \ $(TOP)/src/test_schema.c \ $(TOP)/src/test_server.c \ $(TOP)/src/test_tclvar.c \ | > | 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 | $(TOP)/src/test7.c \ $(TOP)/src/test8.c \ $(TOP)/src/test9.c \ $(TOP)/src/test_autoext.c \ $(TOP)/src/test_async.c \ $(TOP)/src/test_btree.c \ $(TOP)/src/test_config.c \ $(TOP)/src/test_devsym.c \ $(TOP)/src/test_hexio.c \ $(TOP)/src/test_malloc.c \ $(TOP)/src/test_md5.c \ $(TOP)/src/test_onefile.c \ $(TOP)/src/test_schema.c \ $(TOP)/src/test_server.c \ $(TOP)/src/test_tclvar.c \ |
︙ | ︙ |
Changes to main.mk.
︙ | ︙ | |||
208 209 210 211 212 213 214 215 216 217 218 219 220 221 | $(TOP)/src/test7.c \ $(TOP)/src/test8.c \ $(TOP)/src/test9.c \ $(TOP)/src/test_autoext.c \ $(TOP)/src/test_async.c \ $(TOP)/src/test_btree.c \ $(TOP)/src/test_config.c \ $(TOP)/src/test_hexio.c \ $(TOP)/src/test_malloc.c \ $(TOP)/src/test_md5.c \ $(TOP)/src/test_onefile.c \ $(TOP)/src/test_schema.c \ $(TOP)/src/test_server.c \ $(TOP)/src/test_tclvar.c \ | > | 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 | $(TOP)/src/test7.c \ $(TOP)/src/test8.c \ $(TOP)/src/test9.c \ $(TOP)/src/test_autoext.c \ $(TOP)/src/test_async.c \ $(TOP)/src/test_btree.c \ $(TOP)/src/test_config.c \ $(TOP)/src/test_devsym.c \ $(TOP)/src/test_hexio.c \ $(TOP)/src/test_malloc.c \ $(TOP)/src/test_md5.c \ $(TOP)/src/test_onefile.c \ $(TOP)/src/test_schema.c \ $(TOP)/src/test_server.c \ $(TOP)/src/test_tclvar.c \ |
︙ | ︙ |
Changes to src/os.c.
︙ | ︙ | |||
85 86 87 88 89 90 91 | } int sqlite3OsCheckReservedLock(sqlite3_file *id){ return id->pMethods->xCheckReservedLock(id); } int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){ return id->pMethods->xFileControl(id,op,pArg); } | < < < < < < < < < < < < < | < | | | < < < < < < < | | | < | 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | } int sqlite3OsCheckReservedLock(sqlite3_file *id){ return id->pMethods->xCheckReservedLock(id); } int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){ return id->pMethods->xFileControl(id,op,pArg); } int sqlite3OsSectorSize(sqlite3_file *id){ int (*xSectorSize)(sqlite3_file*) = id->pMethods->xSectorSize; return (xSectorSize ? xSectorSize(id) : SQLITE_DEFAULT_SECTOR_SIZE); } int sqlite3OsDeviceCharacteristics(sqlite3_file *id){ return id->pMethods->xDeviceCharacteristics(id); } /* ** The next group of routines are convenience wrappers around the ** VFS methods. */ int sqlite3OsOpen( sqlite3_vfs *pVfs, |
︙ | ︙ |
Changes to src/test6.c.
︙ | ︙ | |||
845 846 847 848 849 850 851 | static int devSymObjCmd( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ | | < < > < < < < | < < | 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 | static int devSymObjCmd( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ void devsym_register(int iDeviceChar, int iSectorSize); int iDc = -1; int iSectorSize = -1; if( processDevSymArgs(interp, objc-1, &objv[1], &iDc, &iSectorSize) ){ return TCL_ERROR; } devsym_register(iDc, iSectorSize); return TCL_OK; } #endif /* SQLITE_OMIT_DISKIO */ /* |
︙ | ︙ |
Added src/test_devsym.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 | /* ** 2008 Jan 22 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ****************************************************************************** ** ** This file contains code that modified the OS layer in order to simulate ** different device types (by overriding the return values of the ** xDeviceCharacteristics() and xSectorSize() methods). */ #if SQLITE_TEST /* This file is used for testing only */ #include <sqlite3.h> #include "sqliteInt.h" /* ** Maximum pathname length supported by the devsym backend. */ #define DEVSYM_MAX_PATHNAME 512 /* ** Name used to identify this VFS. */ #define DEVSYM_VFS_NAME "devsym" typedef struct devsym_file devsym_file; struct devsym_file { sqlite3_file base; sqlite3_file *pReal; }; /* ** Method declarations for devsym_file. */ static int devsymClose(sqlite3_file*); static int devsymRead(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst); static int devsymWrite(sqlite3_file*,const void*,int iAmt, sqlite3_int64 iOfst); static int devsymTruncate(sqlite3_file*, sqlite3_int64 size); static int devsymSync(sqlite3_file*, int flags); static int devsymFileSize(sqlite3_file*, sqlite3_int64 *pSize); static int devsymLock(sqlite3_file*, int); static int devsymUnlock(sqlite3_file*, int); static int devsymCheckReservedLock(sqlite3_file*); static int devsymFileControl(sqlite3_file*, int op, void *pArg); static int devsymSectorSize(sqlite3_file*); static int devsymDeviceCharacteristics(sqlite3_file*); /* ** Method declarations for devsym_vfs. */ static int devsymOpen(sqlite3_vfs*, const char *, sqlite3_file*, int , int *); static int devsymDelete(sqlite3_vfs*, const char *zName, int syncDir); static int devsymAccess(sqlite3_vfs*, const char *zName, int flags); static int devsymGetTempName(sqlite3_vfs*, int nOut, char *zOut); static int devsymFullPathname(sqlite3_vfs*, const char *zName, int, char *zOut); static void *devsymDlOpen(sqlite3_vfs*, const char *zFilename); static void devsymDlError(sqlite3_vfs*, int nByte, char *zErrMsg); static void *devsymDlSym(sqlite3_vfs*,void*, const char *zSymbol); static void devsymDlClose(sqlite3_vfs*, void*); static int devsymRandomness(sqlite3_vfs*, int nByte, char *zOut); static int devsymSleep(sqlite3_vfs*, int microseconds); static int devsymCurrentTime(sqlite3_vfs*, double*); static sqlite3_vfs devsym_vfs = { 1, /* iVersion */ sizeof(devsym_file), /* szOsFile */ DEVSYM_MAX_PATHNAME, /* mxPathname */ 0, /* pNext */ DEVSYM_VFS_NAME, /* zName */ 0, /* pAppData */ devsymOpen, /* xOpen */ devsymDelete, /* xDelete */ devsymAccess, /* xAccess */ devsymGetTempName, /* xGetTempName */ devsymFullPathname, /* xFullPathname */ devsymDlOpen, /* xDlOpen */ devsymDlError, /* xDlError */ devsymDlSym, /* xDlSym */ devsymDlClose, /* xDlClose */ devsymRandomness, /* xRandomness */ devsymSleep, /* xSleep */ devsymCurrentTime /* xCurrentTime */ }; static sqlite3_io_methods devsym_io_methods = { 1, /* iVersion */ devsymClose, /* xClose */ devsymRead, /* xRead */ devsymWrite, /* xWrite */ devsymTruncate, /* xTruncate */ devsymSync, /* xSync */ devsymFileSize, /* xFileSize */ devsymLock, /* xLock */ devsymUnlock, /* xUnlock */ devsymCheckReservedLock, /* xCheckReservedLock */ devsymFileControl, /* xFileControl */ devsymSectorSize, /* xSectorSize */ devsymDeviceCharacteristics /* xDeviceCharacteristics */ }; struct DevsymGlobal { sqlite3_vfs *pVfs; int iDeviceChar; int iSectorSize; }; struct DevsymGlobal g = {0, 0, 512}; /* ** Close an devsym-file. */ static int devsymClose(sqlite3_file *pFile){ devsym_file *p = (devsym_file *)pFile; return sqlite3OsClose(p->pReal); } /* ** Read data from an devsym-file. */ static int devsymRead( sqlite3_file *pFile, void *zBuf, int iAmt, sqlite_int64 iOfst ){ devsym_file *p = (devsym_file *)pFile; return sqlite3OsRead(p->pReal, zBuf, iAmt, iOfst); } /* ** Write data to an devsym-file. */ static int devsymWrite( sqlite3_file *pFile, const void *zBuf, int iAmt, sqlite_int64 iOfst ){ devsym_file *p = (devsym_file *)pFile; return sqlite3OsWrite(p->pReal, zBuf, iAmt, iOfst); } /* ** Truncate an devsym-file. */ static int devsymTruncate(sqlite3_file *pFile, sqlite_int64 size){ devsym_file *p = (devsym_file *)pFile; return sqlite3OsTruncate(p->pReal, size); } /* ** Sync an devsym-file. */ static int devsymSync(sqlite3_file *pFile, int flags){ devsym_file *p = (devsym_file *)pFile; return sqlite3OsSync(p->pReal, flags); } /* ** Return the current file-size of an devsym-file. */ static int devsymFileSize(sqlite3_file *pFile, sqlite_int64 *pSize){ devsym_file *p = (devsym_file *)pFile; return sqlite3OsFileSize(p->pReal, pSize); } /* ** Lock an devsym-file. */ static int devsymLock(sqlite3_file *pFile, int eLock){ devsym_file *p = (devsym_file *)pFile; return sqlite3OsLock(p->pReal, eLock); } /* ** Unlock an devsym-file. */ static int devsymUnlock(sqlite3_file *pFile, int eLock){ devsym_file *p = (devsym_file *)pFile; return sqlite3OsUnlock(p->pReal, eLock); } /* ** Check if another file-handle holds a RESERVED lock on an devsym-file. */ static int devsymCheckReservedLock(sqlite3_file *pFile){ devsym_file *p = (devsym_file *)pFile; return sqlite3OsCheckReservedLock(p->pReal); } /* ** File control method. For custom operations on an devsym-file. */ static int devsymFileControl(sqlite3_file *pFile, int op, void *pArg){ devsym_file *p = (devsym_file *)pFile; return sqlite3OsFileControl(p->pReal, op, pArg); } /* ** Return the sector-size in bytes for an devsym-file. */ static int devsymSectorSize(sqlite3_file *pFile){ return g.iSectorSize; } /* ** Return the device characteristic flags supported by an devsym-file. */ static int devsymDeviceCharacteristics(sqlite3_file *pFile){ return g.iDeviceChar; } /* ** Open an devsym file handle. */ static int devsymOpen( sqlite3_vfs *pVfs, const char *zName, sqlite3_file *pFile, int flags, int *pOutFlags ){ devsym_file *p = (devsym_file *)pFile; pFile->pMethods = &devsym_io_methods; p->pReal = (sqlite3_file *)&p[1]; return sqlite3OsOpen(g.pVfs, zName, p->pReal, flags, pOutFlags); } /* ** Delete the file located at zPath. If the dirSync argument is true, ** ensure the file-system modifications are synced to disk before ** returning. */ static int devsymDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){ return sqlite3OsDelete(g.pVfs, zPath, dirSync); } /* ** Test for access permissions. Return true if the requested permission ** is available, or false otherwise. */ static int devsymAccess(sqlite3_vfs *pVfs, const char *zPath, int flags){ return sqlite3OsAccess(g.pVfs, zPath, flags); } /* ** Populate buffer zBufOut with a pathname suitable for use as a ** temporary file. zBufOut is guaranteed to point to a buffer of ** at least (DEVSYM_MAX_PATHNAME+1) bytes. */ static int devsymGetTempName(sqlite3_vfs *pVfs, int nOut, char *zBufOut){ return sqlite3OsGetTempname(g.pVfs, nOut, zBufOut); } /* ** Populate buffer zOut with the full canonical pathname corresponding ** to the pathname in zPath. zOut is guaranteed to point to a buffer ** of at least (DEVSYM_MAX_PATHNAME+1) bytes. */ static int devsymFullPathname( sqlite3_vfs *pVfs, const char *zPath, int nOut, char *zOut ){ return sqlite3OsFullPathname(g.pVfs, zPath, nOut, zOut); } /* ** Open the dynamic library located at zPath and return a handle. */ static void *devsymDlOpen(sqlite3_vfs *pVfs, const char *zPath){ return sqlite3OsDlOpen(g.pVfs, zPath); } /* ** Populate the buffer zErrMsg (size nByte bytes) with a human readable ** utf-8 string describing the most recent error encountered associated ** with dynamic libraries. */ static void devsymDlError(sqlite3_vfs *pVfs, int nByte, char *zErrMsg){ sqlite3OsDlError(g.pVfs, nByte, zErrMsg); } /* ** Return a pointer to the symbol zSymbol in the dynamic library pHandle. */ static void *devsymDlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol){ return sqlite3OsDlSym(g.pVfs, pHandle, zSymbol); } /* ** Close the dynamic library handle pHandle. */ static void devsymDlClose(sqlite3_vfs *pVfs, void *pHandle){ sqlite3OsDlClose(g.pVfs, pHandle); } /* ** Populate the buffer pointed to by zBufOut with nByte bytes of ** random data. */ static int devsymRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufOut){ return sqlite3OsRandomness(g.pVfs, nByte, zBufOut); } /* ** Sleep for nMicro microseconds. Return the number of microseconds ** actually slept. */ static int devsymSleep(sqlite3_vfs *pVfs, int nMicro){ return sqlite3OsSleep(g.pVfs, nMicro); } /* ** Return the current time as a Julian Day number in *pTimeOut. */ static int devsymCurrentTime(sqlite3_vfs *pVfs, double *pTimeOut){ return sqlite3OsCurrentTime(g.pVfs, pTimeOut); } /* ** This procedure registers the devsym vfs with SQLite. If the argument is ** true, the devsym vfs becomes the new default vfs. It is the only publicly ** available function in this file. */ void devsym_register(int iDeviceChar, int iSectorSize){ if( g.pVfs==0 ){ g.pVfs = sqlite3_vfs_find(0); devsym_vfs.szOsFile += g.pVfs->szOsFile; sqlite3_vfs_register(&devsym_vfs, 0); } if( iDeviceChar>=0 ){ g.iDeviceChar = iDeviceChar; } if( iSectorSize>=0 ){ g.iSectorSize = iSectorSize; } } #endif |
Changes to test/io.test.
︙ | ︙ | |||
9 10 11 12 13 14 15 | # #*********************************************************************** # # The focus of this file is testing some specific characteristics of the # IO traffic generated by SQLite (making sure SQLite is not writing out # more database pages than it has to, stuff like that). # | | > > > > | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # #*********************************************************************** # # The focus of this file is testing some specific characteristics of the # IO traffic generated by SQLite (making sure SQLite is not writing out # more database pages than it has to, stuff like that). # # $Id: io.test,v 1.14 2008/01/22 11:50:13 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl db close sqlite3_simulate_device sqlite3 db test.db -vfs devsym # Test summary: # # io-1.* - Test that quick-balance does not journal pages unnecessarily. # # io-2.* - Test the "atomic-write optimization". # # io-3.* - Test the IO traffic enhancements triggered when the |
︙ | ︙ | |||
153 154 155 156 157 158 159 | # updated when the atomic-write optimization is used. # do_test io-2.4.1 { execsql { BEGIN; INSERT INTO abc VALUES(5, 6); } | | | 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | # updated when the atomic-write optimization is used. # do_test io-2.4.1 { execsql { BEGIN; INSERT INTO abc VALUES(5, 6); } sqlite3 db2 test.db -vfs devsym execsql { SELECT * FROM abc } db2 } {1 2 3 4} do_test io-2.4.2 { file exists test.db-journal } {0} do_test io-2.4.3 { execsql { COMMIT } |
︙ | ︙ | |||
292 293 294 295 296 297 298 | } file exists test.db-journal } {1} do_test io-2.9.2 { execsql { ROLLBACK; } db close file delete -force test.db test.db-journal | | | 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 | } file exists test.db-journal } {1} do_test io-2.9.2 { execsql { ROLLBACK; } db close file delete -force test.db test.db-journal sqlite3 db test.db -vfs devsym execsql { PRAGMA auto_vacuum = OFF; PRAGMA page_size = 2048; CREATE TABLE abc(a, b); } execsql { BEGIN; |
︙ | ︙ | |||
365 366 367 368 369 370 371 | # Test cases io-3.* test the IOCAP_SEQUENTIAL optimization. # sqlite3_simulate_device -char sequential -sectorsize 0 ifcapable pager_pragmas { do_test io-3.1 { db close file delete -force test.db test.db-journal | | | 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 | # Test cases io-3.* test the IOCAP_SEQUENTIAL optimization. # sqlite3_simulate_device -char sequential -sectorsize 0 ifcapable pager_pragmas { do_test io-3.1 { db close file delete -force test.db test.db-journal sqlite3 db test.db -vfs devsym db eval { PRAGMA auto_vacuum=OFF; } file size test.db } {0} do_test io-3.2 { execsql { CREATE TABLE abc(a, b) } |
︙ | ︙ | |||
522 523 524 525 526 527 528 | {atomic64K} 512 1024 } { incr tn if {$pgsize>$::SQLITE_MAX_PAGE_SIZE} continue db close file delete -force test.db test.db-journal sqlite3_simulate_device -char $char -sectorsize $sectorsize | | | 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 | {atomic64K} 512 1024 } { incr tn if {$pgsize>$::SQLITE_MAX_PAGE_SIZE} continue db close file delete -force test.db test.db-journal sqlite3_simulate_device -char $char -sectorsize $sectorsize sqlite3 db test.db -vfs devsym db eval { PRAGMA auto_vacuum=OFF; } ifcapable !atomicwrite { if {[regexp {^atomic} $char]} continue } do_test io-5.$tn { |
︙ | ︙ |
Changes to test/mallocD.test.
1 2 3 4 5 6 7 8 9 10 11 | # 2007 Aug 29 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # | | > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | # 2007 Aug 29 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # # $Id: mallocD.test,v 1.5 2008/01/22 11:50:13 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Only run these tests if memory debugging is turned on. # ifcapable !memdebug { puts "Skipping mallocD tests: not compiled with -DSQLITE_MEMDEBUG..." finish_test return } source $testdir/malloc_common.tcl db close sqlite3_simulate_device -char atomic sqlite3 db test.db -vfs devsym set PREP { PRAGMA page_size = 1024; CREATE TABLE abc(a, b, c); } do_malloc_test mallocD-1 -sqlprep $PREP -sqlbody { |
︙ | ︙ |