1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-14 00:22:38 +03:00

Fix the ALTER TABLE RENAME algorithm so that it is not confused

by comments in the CREATE TABLE statement.  Ticket #3102. (CVS 5110)

FossilOrigin-Name: ab18b4e75916b05863b31bc63625aa64a104a42c
This commit is contained in:
drh
2008-05-09 14:17:51 +00:00
parent 8a54f9f05c
commit 7382945199
4 changed files with 38 additions and 13 deletions

View File

@@ -1,5 +1,5 @@
C Back\sout\scheck-in\s(5108).\s\sThe\soriginal\sisnan()\simplementation\sis\spreferred.\s\sTicket\s#3101\sand\s#3060.\s(CVS\s5109) C Fix\sthe\sALTER\sTABLE\sRENAME\salgorithm\sso\sthat\sit\sis\snot\sconfused\nby\scomments\sin\sthe\sCREATE\sTABLE\sstatement.\s\sTicket\s#3102.\s(CVS\s5110)
D 2008-05-09T13:47:59 D 2008-05-09T14:17:52
F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7 F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
F Makefile.in 8b9b8263852f0217157f9042b8e3dae7427ec739 F Makefile.in 8b9b8263852f0217157f9042b8e3dae7427ec739
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -79,7 +79,7 @@ F sqlite.pc.in c322c6244c6395955dca34d87955aabde7df7623
F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc
F sqlite3.def a1be7b9a4b8b51ac41c6ff6e8e44a14ef66b338b F sqlite3.def a1be7b9a4b8b51ac41c6ff6e8e44a14ef66b338b
F sqlite3.pc.in 32b8a014799c2028c8e0c9cc5659718262fc493f F sqlite3.pc.in 32b8a014799c2028c8e0c9cc5659718262fc493f
F src/alter.c b42d782906fc3b92c331efbe06e9389617b47ce7 F src/alter.c cc38b9e2a8cf19428f64e5da7ec4da35b7c02779
F src/analyze.c 9ee63497ee720728abe630d169ab91323ac7519c F src/analyze.c 9ee63497ee720728abe630d169ab91323ac7519c
F src/attach.c 496cc628b2e8c4d8db99d7c136761fcbebd8420b F src/attach.c 496cc628b2e8c4d8db99d7c136761fcbebd8420b
F src/auth.c c8b2ab5c8bad4bd90ed7c294694f48269162c627 F src/auth.c c8b2ab5c8bad4bd90ed7c294694f48269162c627
@@ -180,7 +180,7 @@ F src/where.c 85719d58e0f680b5d8239dc6af82b159775d7376
F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617 F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
F test/all.test d56a3ca8acdf761204aff0a2e7aa5eb8e11b31e6 F test/all.test d56a3ca8acdf761204aff0a2e7aa5eb8e11b31e6
F test/alter.test 1426bb4c8609731622a9bf9dd48c39f5931c4d7d F test/alter.test 6353aae6839e486c9b7d8f73b1f4a1e98e57332c
F test/alter2.test dd55146e812622c8fc51fd2216bcd8dca8880752 F test/alter2.test dd55146e812622c8fc51fd2216bcd8dca8880752
F test/alter3.test 25b95a136708f22b87184fa6a4309eea03d65153 F test/alter3.test 25b95a136708f22b87184fa6a4309eea03d65153
F test/altermalloc.test 29d4a8400277efb4ba8ffe90804c6dc2fdfbf063 F test/altermalloc.test 29d4a8400277efb4ba8ffe90804c6dc2fdfbf063
@@ -634,7 +634,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
P 19ee2b3324461150d2c1600c67fe604114a1b69f P 2349ae75dfdd626ed97db99ac6de4bdc5a395008
R 8d099f80fb2f7dafcb5d0c712527b62c R f36404afe38ae90063c0c43dc92e5da7
U drh U drh
Z f6a0ef8be8db87133187cef718ae3189 Z 2b92517d2da71a3352efb5891980e09b

View File

@@ -1 +1 @@
2349ae75dfdd626ed97db99ac6de4bdc5a395008 ab18b4e75916b05863b31bc63625aa64a104a42c

View File

@@ -12,7 +12,7 @@
** This file contains C code routines that used to generate VDBE code ** This file contains C code routines that used to generate VDBE code
** that implements the ALTER TABLE command. ** that implements the ALTER TABLE command.
** **
** $Id: alter.c,v 1.43 2008/03/19 21:45:51 drh Exp $ ** $Id: alter.c,v 1.44 2008/05/09 14:17:52 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <ctype.h> #include <ctype.h>
@@ -54,8 +54,8 @@ static void renameTableFunc(
sqlite3 *db = sqlite3_context_db_handle(context); sqlite3 *db = sqlite3_context_db_handle(context);
/* The principle used to locate the table name in the CREATE TABLE /* The principle used to locate the table name in the CREATE TABLE
** statement is that the table name is the first token that is immediatedly ** statement is that the table name is the first non-space token that
** followed by a left parenthesis - TK_LP - or "USING" TK_USING. ** is immediately followed by a left parenthesis - TK_LP - or "USING" TK_USING.
*/ */
if( zSql ){ if( zSql ){
do { do {
@@ -74,7 +74,7 @@ static void renameTableFunc(
do { do {
zCsr += len; zCsr += len;
len = sqlite3GetToken(zCsr, &token); len = sqlite3GetToken(zCsr, &token);
} while( token==TK_SPACE ); } while( token==TK_SPACE || token==TK_COMMENT );
assert( len>0 ); assert( len>0 );
} while( token!=TK_LP && token!=TK_USING ); } while( token!=TK_LP && token!=TK_USING );

View File

@@ -11,7 +11,7 @@
# This file implements regression tests for SQLite library. The # This file implements regression tests for SQLite library. The
# focus of this script is testing the ALTER TABLE statement. # focus of this script is testing the ALTER TABLE statement.
# #
# $Id: alter.test,v 1.29 2008/02/09 14:30:30 drh Exp $ # $Id: alter.test,v 1.30 2008/05/09 14:17:52 drh Exp $
# #
set testdir [file dirname $argv0] set testdir [file dirname $argv0]
@@ -785,5 +785,30 @@ do_test alter-12.5 {
} }
} {1 {Cannot add a column to a view}} } {1 {Cannot add a column to a view}}
# Ticket #3102:
# Verify that comments do not interfere with the table rename
# algorithm.
#
do_test alter-13.1 {
execsql {
CREATE TABLE /* hi */ t3102a(x);
CREATE TABLE t3102b -- comment
(y);
CREATE INDEX t3102c ON t3102a(x);
SELECT name FROM sqlite_master WHERE name LIKE 't3102%' ORDER BY 1;
}
} {t3102a t3102b t3102c}
do_test alter-13.2 {
execsql {
ALTER TABLE t3102a RENAME TO t3102a_rename;
SELECT name FROM sqlite_master WHERE name LIKE 't3102%' ORDER BY 1;
}
} {t3102a_rename t3102b t3102c}
do_test alter-13.3 {
execsql {
ALTER TABLE t3102b RENAME TO t3102b_rename;
SELECT name FROM sqlite_master WHERE name LIKE 't3102%' ORDER BY 1;
}
} {t3102a_rename t3102b_rename t3102c}
finish_test finish_test