Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Tests for inserting lots of data (~64K) into a single row of a table. (CVS 264) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
a462c85083d23aa34bd3d0c61d01062f |
User & Date: | drh 2001-09-24 03:12:40.000 |
Context
2001-09-25
| ||
01:50 | Prepare for Alpha-3 (CVS 265) (check-in: 9c9322eb46 user: drh tags: trunk) | |
2001-09-24
| ||
03:12 | Tests for inserting lots of data (~64K) into a single row of a table. (CVS 264) (check-in: a462c85083 user: drh tags: trunk) | |
2001-09-23
| ||
20:17 | RowIDs are now always expressed in native byte order. (CVS 263) (check-in: bb4313a94b user: drh tags: trunk) | |
Changes
Changes to src/build.c.
︙ | ︙ | |||
21 22 23 24 25 26 27 | ** COPY ** VACUUM ** BEGIN TRANSACTION ** COMMIT ** ROLLBACK ** PRAGMA ** | | | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | ** COPY ** VACUUM ** BEGIN TRANSACTION ** COMMIT ** ROLLBACK ** PRAGMA ** ** $Id: build.c,v 1.41 2001/09/24 03:12:40 drh Exp $ */ #include "sqliteInt.h" #include <ctype.h> /* ** This routine is called after a single SQL statement has been ** parsed and we want to execute the VDBE code to implement |
︙ | ︙ | |||
132 133 134 135 136 137 138 | /* ** Locate the in-memory structure that describes the ** format of a particular database table given the name ** of that table. Return NULL if not found. */ Table *sqliteFindTable(sqlite *db, char *zName){ | | > | > | 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 | /* ** Locate the in-memory structure that describes the ** format of a particular database table given the name ** of that table. Return NULL if not found. */ Table *sqliteFindTable(sqlite *db, char *zName){ Table *p = sqliteHashFind(&db->tblHash, zName, strlen(zName)+1); return (p==0 || p->isDelete) ? 0 : p; } /* ** Locate the in-memory structure that describes the ** format of a particular index given the name ** of that index. Return NULL if not found. */ Index *sqliteFindIndex(sqlite *db, char *zName){ Index *p = sqliteHashFind(&db->idxHash, zName, strlen(zName)+1); return (p==0 || p->isDelete) ? 0 : p; } /* ** Remove the given index from the index hash table, and free ** its memory structures. ** ** The index is removed from the database hash table if db!=NULL. |
︙ | ︙ |
Changes to src/test1.c.
︙ | ︙ | |||
9 10 11 12 13 14 15 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** Code for testing the printf() interface to SQLite. This code ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** Code for testing the printf() interface to SQLite. This code ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** ** $Id: test1.c,v 1.4 2001/09/24 03:12:40 drh Exp $ */ #include "sqliteInt.h" #include "tcl.h" #include <stdlib.h> #include <string.h> /* |
︙ | ︙ | |||
254 255 256 257 258 259 260 | sqliteFree(z); return TCL_OK; } /* ** Usage: sqlite_malloc_fail N ** | | | 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 | sqliteFree(z); return TCL_OK; } /* ** Usage: sqlite_malloc_fail N ** ** Rig sqliteMalloc() to fail on the N-th call. Turn off this mechanism ** and reset the sqlite_malloc_failed variable is N==0. */ #ifdef MEMORY_DEBUG static int sqlite_malloc_fail( void *NotUsed, Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ int argc, /* Number of arguments */ |
︙ | ︙ |
Changes to src/vdbe.c.
︙ | ︙ | |||
26 27 28 29 30 31 32 | ** type to the other occurs as necessary. ** ** Most of the code in this file is taken up by the sqliteVdbeExec() ** function which does the work of interpreting a VDBE program. ** But other routines are also provided to help in building up ** a program instruction by instruction. ** | | | 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | ** type to the other occurs as necessary. ** ** Most of the code in this file is taken up by the sqliteVdbeExec() ** function which does the work of interpreting a VDBE program. ** But other routines are also provided to help in building up ** a program instruction by instruction. ** ** $Id: vdbe.c,v 1.77 2001/09/24 03:12:40 drh Exp $ */ #include "sqliteInt.h" #include <ctype.h> #include <unistd.h> /* ** SQL is translated into a sequence of instructions to be |
︙ | ︙ | |||
2297 2298 2299 2300 2301 2302 2303 | ** ** To promote locality of reference for repetitive inserts, the ** first few attempts at chosing a rowid pick values just a little ** larger than the previous rowid. This has been shown experimentally ** to double the speed of the COPY operation. */ int res, rx, cnt, x; | < < < < | 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 | ** ** To promote locality of reference for repetitive inserts, the ** first few attempts at chosing a rowid pick values just a little ** larger than the previous rowid. This has been shown experimentally ** to double the speed of the COPY operation. */ int res, rx, cnt, x; cnt = 0; v = db->nextRowid; do{ if( cnt>5 ){ v = sqliteRandomInteger(db); }else{ v += sqliteRandomByte(db) + 1; |
︙ | ︙ |
Added test/bigrow.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | # 2001 September 23 # # 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 implements regression tests for SQLite library. The # focus of this file is stressing the library by putting large amounts # of data in a single row of a table. # # $Id: bigrow.test,v 1.1 2001/09/24 03:12:40 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Make a big string that we can use for test data # do_test bigrow-1.0 { set ::bigstr {} for {set i 1} {$i<=9999} {incr i} { set sep [string index "abcdefghijklmnopqrstuvwxyz" [expr {$i%26}]] append ::bigstr "$sep [format %04d $i] " } string length $::bigstr } {69993} # Make a table into which we can insert some but records. # do_test bigrow-1.1 { execsql { CREATE TABLE t1(a text, b text, c text); SELECT name FROM sqlite_master WHERE type='table' OR type='index' ORDER BY name } } {t1} do_test bigrow-1.2 { set ::big1 [string range $::bigstr 0 65519] set sql "INSERT INTO t1 VALUES('abc'," append sql "'$::big1', 'xyz');" execsql $sql execsql {SELECT a, c FROM t1} } {abc xyz} do_test bigrow-1.3 { execsql {SELECT b FROM t1} } [list $::big1] do_test bigrow-1.4 { set sql "INSERT INTO t1 VALUES('abc'," append sql "'[string range $::bigstr 0 65520]', 'xyz');" set r [catch {execsql $sql} msg] lappend r $msg } {1 {too much data for one table row}} do_test bigrow-1.5 { execsql { UPDATE t1 SET a=b, b=a; SELECT b,c FROM t1 } } {abc xyz} do_test bigrow-1.6 { execsql { SELECT * FROM t1 } } [list $::big1 abc xyz] do_test bigrow-1.7 { execsql { INSERT INTO t1 VALUES('1','2','3'); INSERT INTO t1 VALUES('A','B','C'); SELECT b FROM t1 WHERE a=='1'; } } {2} do_test bigrow-1.8 { execsql "SELECT b FROM t1 WHERE a=='$::big1'" } {abc} do_test bigrow-1.9 { execsql "SELECT b FROM t1 WHERE a!='$::big1' ORDER BY a" } {B 2} # Try doing some indexing on big columns # do_test bigrow-2.1 { execsql { CREATE INDEX i1 ON t1(a) } execsql "SELECT b FROM t1 WHERE a=='$::big1'" } {abc} do_test bigrow-2.2 { execsql { UPDATE t1 SET a=b, b=a } execsql "SELECT b FROM t1 WHERE a=='abc'" } [list $::big1] do_test bigrow-2.3 { execsql { UPDATE t1 SET a=b, b=a } execsql "SELECT b FROM t1 WHERE a=='$::big1'" } {abc} finish_test |
Changes to test/trans.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2001 September 15 # # 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 implements regression tests for SQLite library. The # focus of this script is database locks. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2001 September 15 # # 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 implements regression tests for SQLite library. The # focus of this script is database locks. # # $Id: trans.test,v 1.7 2001/09/24 03:12:41 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Create several tables to work with. |
︙ | ︙ | |||
268 269 270 271 272 273 274 275 276 | } {} do_test trans-5.7 { set v [catch { execsql {SELECT a,b FROM one ORDER BY b} } msg] lappend v $msg } {1 {no such table: one}} finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 | } {} do_test trans-5.7 { set v [catch { execsql {SELECT a,b FROM one ORDER BY b} } msg] lappend v $msg } {1 {no such table: one}} # Test commits and rollbacks of table CREATE TABLEs, CREATE INDEXs # DROP TABLEs and DROP INDEXs # do_test trans-5.8 { execsql { SELECT name fROM sqlite_master WHERE type='table' OR type='index' ORDER BY name } } {} do_test trans-5.9 { execsql { BEGIN TRANSACTION; CREATE TABLE t1(a int, b int, c int); SELECT name fROM sqlite_master WHERE type='table' OR type='index' ORDER BY name; } } {t1} do_test trans-5.10 { execsql { CREATE INDEX i1 ON t1(a); SELECT name fROM sqlite_master WHERE type='table' OR type='index' ORDER BY name; } } {i1 t1} do_test trans-5.11 { execsql { COMMIT; SELECT name fROM sqlite_master WHERE type='table' OR type='index' ORDER BY name; } } {i1 t1} do_test trans-5.12 { execsql { BEGIN TRANSACTION; CREATE TABLE t2(a int, b int, c int); CREATE INDEX i2a ON t2(a); CREATE INDEX i2b ON t2(b); DROP TABLE t1; SELECT name fROM sqlite_master WHERE type='table' OR type='index' ORDER BY name; } } {i2a i2b t2} do_test trans-5.13 { execsql { ROLLBACK; SELECT name fROM sqlite_master WHERE type='table' OR type='index' ORDER BY name; } } {i1 t1} do_test trans-5.14 { execsql { BEGIN TRANSACTION; DROP INDEX i1; SELECT name fROM sqlite_master WHERE type='table' OR type='index' ORDER BY name; } } {t1} do_test trans-5.15 { execsql { ROLLBACK; SELECT name fROM sqlite_master WHERE type='table' OR type='index' ORDER BY name; } } {i1 t1} do_test trans-5.16 { execsql { BEGIN TRANSACTION; DROP INDEX i1; CREATE TABLE t2(x int, y int, z int); CREATE INDEX i2x ON t2(x); CREATE INDEX i2y ON t2(y); INSERT INTO t2 VALUES(1,2,3); SELECT name fROM sqlite_master WHERE type='table' OR type='index' ORDER BY name; } } {i2x i2y t1 t2} do_test trans-5.17 { execsql { COMMIT; SELECT name fROM sqlite_master WHERE type='table' OR type='index' ORDER BY name; } } {i2x i2y t1 t2} do_test trans-5.18 { execsql { SELECT * FROM t2; } } {1 2 3} do_test trans-5.19 { execsql { SELECT x FROM t2 WHERE y=2; } } {1} do_test trans-5.20 { execsql { BEGIN TRANSACTION; DROP TABLE t1; DROP TABLE t2; SELECT name fROM sqlite_master WHERE type='table' OR type='index' ORDER BY name; } } {} do_test trans-5.21 { set r [catch {execsql { SELECT * FROM t2 }} msg] lappend r $msg } {1 {no such table: t2}} do_test trans-5.22 { execsql { ROLLBACK; SELECT name fROM sqlite_master WHERE type='table' OR type='index' ORDER BY name; } } {i2x i2y t1 t2} do_test trans-5.23 { execsql { SELECT * FROM t2; } } {1 2 3} finish_test |