Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Correctly allocate new columns array in ALTER TABLE .. ADD COLUMN. Ticket #1183. (CVS 2419) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
3c86e63389b286a49106d8d7009cc63e |
User & Date: | danielk1977 2005-03-27 01:56:31.000 |
Context
2005-03-28
| ||
00:07 | Use SQL function substr() correctly from ALTER TABLE code. Ticket #1182. (CVS 2420) (check-in: ccb9f4022b user: danielk1977 tags: trunk) | |
2005-03-27
| ||
01:56 | Correctly allocate new columns array in ALTER TABLE .. ADD COLUMN. Ticket #1183. (CVS 2419) (check-in: 3c86e63389 user: danielk1977 tags: trunk) | |
2005-03-23
| ||
01:48 | Fix a typo in vdbeInt.h. This was potentially a serious mistake, but we got lucky and it is benign. (CVS 2418) (check-in: f0d64dc8aa user: drh tags: trunk) | |
Changes
Changes to src/alter.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that used to generate VDBE code ** that implements the ALTER TABLE command. ** | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that used to generate VDBE code ** that implements the ALTER TABLE command. ** ** $Id: alter.c,v 1.5 2005/03/27 01:56:31 danielk1977 Exp $ */ #include "sqliteInt.h" #include <ctype.h> /* ** The code in this file only exists if we are not omitting the ** ALTER TABLE logic from the build. |
︙ | ︙ | |||
517 518 519 520 521 522 523 | /* Put a copy of the Table struct in Parse.pNewTable for the ** sqlite3AddColumn() function and friends to modify. */ pNew = (Table *)sqliteMalloc(sizeof(Table)); if( !pNew ) goto exit_begin_add_column; pParse->pNewTable = pNew; pNew->nCol = pTab->nCol; | | > > | 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 | /* Put a copy of the Table struct in Parse.pNewTable for the ** sqlite3AddColumn() function and friends to modify. */ pNew = (Table *)sqliteMalloc(sizeof(Table)); if( !pNew ) goto exit_begin_add_column; pParse->pNewTable = pNew; pNew->nCol = pTab->nCol; assert( pNew->nCol>0 ); nAlloc = (((pNew->nCol-1)/8)*8)+8; assert( nAlloc>=pNew->nCol && nAlloc%8==0 && nAlloc-pNew->nCol<8 ); pNew->aCol = (Column *)sqliteMalloc(sizeof(Column)*nAlloc); pNew->zName = sqliteStrDup(pTab->zName); if( !pNew->aCol || !pNew->zName ){ goto exit_begin_add_column; } memcpy(pNew->aCol, pTab->aCol, sizeof(Column)*pNew->nCol); for(i=0; i<pNew->nCol; i++){ |
︙ | ︙ |
Changes to test/alter3.test.
︙ | ︙ | |||
9 10 11 12 13 14 15 | # #************************************************************************* # This file implements regression tests for SQLite library. The # focus of this script is testing that SQLite can handle a subtle # file format change that may be used in the future to implement # "ALTER TABLE ... ADD COLUMN". # | | > > < < | 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 | # #************************************************************************* # This file implements regression tests for SQLite library. The # focus of this script is testing that SQLite can handle a subtle # file format change that may be used in the future to implement # "ALTER TABLE ... ADD COLUMN". # # $Id: alter3.test,v 1.4 2005/03/27 01:56:31 danielk1977 Exp $ # set testdir [file dirname $argv0] source $testdir/tester.tcl # If SQLITE_OMIT_ALTERTABLE is defined, omit this file. ifcapable !altertable { finish_test return } # Test Organisation: # ------------------ # # alter3-1.*: Test that ALTER TABLE correctly modifies the CREATE TABLE sql. # alter3-2.*: Test error messages. # alter3-3.*: Test adding columns with default value NULL. # alter3-4.*: Test adding columns with default values other than NULL. |
︙ | ︙ | |||
332 333 334 335 336 337 338 339 | execsql { VACUUM; } get_file_format } {1} } finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | execsql { VACUUM; } get_file_format } {1} } # Ticket #1183 - Make sure adding columns to large tables does not cause # memory corruption (as was the case before this bug was fixed). do_test alter3-8.1 { execsql { CREATE TABLE t4(c1); } } {} do_test alter3-8.2 { set cols c1 for {set i 2} {$i < 100} {incr i} { execsql " ALTER TABLE t4 ADD c$i " lappend cols c$i } set ::sql "CREATE TABLE t4([join $cols {, }])" list } {} do_test alter3-8.2 { execsql { SELECT sql FROM sqlite_master WHERE name = 't4'; } } [list $::sql] finish_test |