Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix for ticket #46: Report an error if a CREATE TABLE contains two or more columns with the same name. (CVS 578) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
ba1953abd04671232cf9e93ab3f962fe |
User & Date: | drh 2002-05-22 21:27:03.000 |
Context
2002-05-23
| ||
00:30 | Do not allow triggers on the SQLITE_MASTER table. (CVS 579) (check-in: 275ba356f3 user: drh tags: trunk) | |
2002-05-22
| ||
21:27 | Fix for ticket #46: Report an error if a CREATE TABLE contains two or more columns with the same name. (CVS 578) (check-in: ba1953abd0 user: drh tags: trunk) | |
2002-05-21
| ||
23:44 | Fix for ticket #47: Use a cast to avoid a warning about discarding a "const" inside of hash.c. (CVS 577) (check-in: 0c90346153 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.93 2002/05/22 21:27:03 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 |
︙ | ︙ | |||
498 499 500 501 502 503 504 | ** The parser calls this routine once for each column declaration ** in a CREATE TABLE statement. sqliteStartTable() gets called ** first to get things going. Then this routine is called for each ** column. */ void sqliteAddColumn(Parse *pParse, Token *pName){ Table *p; | > | > > > > > > > > > > > | < < | 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 | ** The parser calls this routine once for each column declaration ** in a CREATE TABLE statement. sqliteStartTable() gets called ** first to get things going. Then this routine is called for each ** column. */ void sqliteAddColumn(Parse *pParse, Token *pName){ Table *p; int i; char *z = 0; if( (p = pParse->pNewTable)==0 ) return; sqliteSetNString(&z, pName->z, pName->n, 0); if( z==0 ) return; sqliteDequote(z); for(i=0; i<p->nCol; i++){ if( sqliteStrICmp(z, p->aCol[i].zName)==0 ){ sqliteSetString(&pParse->zErrMsg, "duplicate column name: ", z, 0); pParse->nErr++; sqliteFree(z); return; } } if( (p->nCol & 0x7)==0 ){ Column *aNew; aNew = sqliteRealloc( p->aCol, (p->nCol+8)*sizeof(p->aCol[0])); if( aNew==0 ) return; p->aCol = aNew; } memset(&p->aCol[p->nCol], 0, sizeof(p->aCol[0])); p->aCol[p->nCol++].zName = z; } /* ** This routine is called by the parser while in the middle of ** parsing a CREATE TABLE statement. A "NOT NULL" constraint has ** been seen on a column. This routine sets the notNull flag on ** the column currently under construction. |
︙ | ︙ |
Changes to test/table.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 file is testing the CREATE TABLE statement. # | | | 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 file is testing the CREATE TABLE statement. # # $Id: table.test,v 1.16 2002/05/22 21:27:04 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a basic table and verify it is added to sqlite_master # do_test table-1.1 { |
︙ | ︙ | |||
365 366 367 368 369 370 371 372 373 | } } {1 {no such table: t5}} do_test table-8.8 { catchsql { CREATE TABLE t5 AS SELECT * FROM no_such_table; } } {1 {no such table: no_such_table}} finish_test | > > > > > > > > > | 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 | } } {1 {no such table: t5}} do_test table-8.8 { catchsql { CREATE TABLE t5 AS SELECT * FROM no_such_table; } } {1 {no such table: no_such_table}} # Make sure we cannot have duplicate column names within a table. # do_test table-9.1 { catchsql { CREATE TABLE t6(a,b,a); } } {1 {duplicate column name: a}} finish_test |