]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Account for multi-byte characters in ALTER TABLE code. Fix for #1609. (CVS 2942)
authordanielk1977 <danielk1977@noemail.net>
Fri, 13 Jan 2006 18:06:40 +0000 (18:06 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Fri, 13 Jan 2006 18:06:40 +0000 (18:06 +0000)
FossilOrigin-Name: d634f8b28abd7af4565c644bd7972b067caa0133

manifest
manifest.uuid
src/build.c
test/alter.test

index 5eb7c6ec22fc1540eab8ac12480b1cf243cef40b..c7b2f07a743934a479f8352f5daf90b491fb86f2 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Tweaks\sto\smake\sOP_Column\srun\sa\sfraction\sfaster.\s(CVS\s2941)
-D 2006-01-13T17:12:01
+C Account\sfor\smulti-byte\scharacters\sin\sALTER\sTABLE\scode.\sFix\sfor\s#1609.\s(CVS\s2942)
+D 2006-01-13T18:06:40
 F Makefile.in ab3ffd8d469cef4477257169b82810030a6bb967
 F Makefile.linux-gcc aee18d8a05546dcf1888bd4547e442008a49a092
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -36,7 +36,7 @@ F src/attach.c d4b9d8bd71d72409720946355be41cafb6c09079
 F src/auth.c 9ae84d2d94eb96195e04515715e08e85963e96c2
 F src/btree.c fe2bdc08a1fc5847eb7eebfce5251558440dcc28
 F src/btree.h 5663c4f43e8521546ccebc8fc95acb013b8f3184
-F src/build.c 6db3dcb70ae17dcd303493c021e6dd233217828f
+F src/build.c 206c891028158668691f27bcbf7c3c4f15248a94
 F src/callback.c ba3e6cc7a6beb562e7a66f92e26fabcb21aab1e2
 F src/complete.c df1681cef40dec33a286006981845f87b194e7a4
 F src/date.c 5b86bc41754ffffb2b5742fbd71ea687f01cc6ca
@@ -97,7 +97,7 @@ F src/vdbemem.c dd08a0eea4868ac4a2d91fdec32424308b1db772
 F src/where.c 6885d655f3f7fb6455fcf5174c7119b1ce3ed860
 F tclinstaller.tcl 046e3624671962dc50f0481d7c25b38ef803eb42
 F test/all.test a23fcbbf1f53515bde840d78732a6d94c673b327
-F test/alter.test b94b640063e725d062b2997bd2810ac39195c718
+F test/alter.test 55362362d427682bec6e5087aa0d38fc00198ef4
 F test/alter2.test cc0b8832e4e98605dbc26910efd4bb89abe59cb2
 F test/alter3.test 6e144ea3dcc395afcc28e794bb532be83dc8fdcb
 F test/altermalloc.test 6e1f404ec021eb2ba6582e3c77b0a35cf206b7af
@@ -340,7 +340,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
-P 0de729d9144afba144811799f65e32140c14ef8a
-R 4fc53b80c7e70cf5aaa2736ccda17872
+P 2d74cc22de2aa59329b1ea5c26acd6ebe46e16c2
+R 4a0b32395646e93911e1e578ba0ad36a
 U danielk1977
-Z 8db44b8359d9daca4aa7858d0ea683db
+Z 041d454a34960199d9b79c2713dca134
index 83b708ac5ae3fda6ef6b69c6a59501605b5bf166..88744dfe1f600ea9a8706fee04dd610614397743 100644 (file)
@@ -1 +1 @@
-2d74cc22de2aa59329b1ea5c26acd6ebe46e16c2
\ No newline at end of file
+d634f8b28abd7af4565c644bd7972b067caa0133
\ No newline at end of file
index e65c34f9616acb788d144bb44b400eb14e1dbe2c..1f64a035bacbbd8a419a23e653a3e43d1f10f07d 100644 (file)
@@ -22,7 +22,7 @@
 **     COMMIT
 **     ROLLBACK
 **
-** $Id: build.c,v 1.379 2006/01/13 06:33:24 danielk1977 Exp $
+** $Id: build.c,v 1.380 2006/01/13 18:06:40 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -1547,9 +1547,10 @@ void sqlite3EndTable(
 
 #ifndef SQLITE_OMIT_ALTERTABLE
     if( !p->pSelect ){
+      const unsigned char *zName = pParse->sNameToken.z;
       assert( !pSelect && pCons && pEnd );
       if( pCons->z==0 ) pCons = pEnd;
-      p->addColOffset = 13 + (pCons->z - pParse->sNameToken.z);
+      p->addColOffset = 13 + sqlite3utf8CharLen(zName, pCons->z - zName);
     }
 #endif
   }
index 32482e8ec5d3ed763b8af9236f3d0b421899d157..9725f2e0f13bf286eaa6b3fe726a3a375dbc7b8f 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this script is testing the ALTER TABLE statement.
 #
-# $Id: alter.test,v 1.12 2006/01/03 00:33:50 drh Exp $
+# $Id: alter.test,v 1.13 2006/01/13 18:06:40 danielk1977 Exp $
 #
 
 set testdir [file dirname $argv0]
@@ -552,4 +552,66 @@ do_test alter-5.3 {
   db2 close
 } {}
 
+set ::tbl_name "abc\uABCDdef"
+do_test alter-5.1 {
+  string length $::tbl_name
+} {7}
+do_test alter-5.2 {
+  execsql "
+    CREATE TABLE ${tbl_name}(a, b, c);
+  "
+  execsql {
+    SELECT sql FROM sqlite_master 
+        WHERE oid = (SELECT max(oid) FROM sqlite_master);
+  }
+} "{CREATE TABLE ${::tbl_name}(a, b, c)}"
+set ::tbl_name2 "abcXdef"
+do_test alter-5.2 {
+  execsql "
+    ALTER TABLE $::tbl_name RENAME TO $::tbl_name2 
+  "
+  execsql {
+    SELECT sql FROM sqlite_master 
+        WHERE oid = (SELECT max(oid) FROM sqlite_master);
+  }
+} "{CREATE TABLE '${::tbl_name2}'(a, b, c)}"
+do_test alter-5.3 {
+  execsql "
+    ALTER TABLE $::tbl_name2 RENAME TO $::tbl_name
+  "
+  execsql {
+    SELECT sql FROM sqlite_master 
+        WHERE oid = (SELECT max(oid) FROM sqlite_master);
+  }
+} "{CREATE TABLE '${::tbl_name}'(a, b, c)}"
+set ::col_name ghi\1234\jkl
+do_test alter-5.4 {
+  execsql "
+    ALTER TABLE $::tbl_name ADD COLUMN $::col_name VARCHAR
+  "
+  execsql {
+    SELECT sql FROM sqlite_master 
+        WHERE oid = (SELECT max(oid) FROM sqlite_master);
+  }
+} "{CREATE TABLE '${::tbl_name}'(a, b, c, $::col_name VARCHAR)}"
+set ::col_name2 B\3421\A
+do_test alter-5.5 {
+  db close
+  sqlite3 db test.db
+  execsql "
+    ALTER TABLE $::tbl_name ADD COLUMN $::col_name2
+  "
+  execsql {
+    SELECT sql FROM sqlite_master 
+        WHERE oid = (SELECT max(oid) FROM sqlite_master);
+  }
+} "{CREATE TABLE '${::tbl_name}'(a, b, c, $::col_name VARCHAR, $::col_name2)}"
+do_test alter-5.6 {
+  execsql "
+    INSERT INTO ${::tbl_name} VALUES(1, 2, 3, 4, 5);
+    SELECT $::col_name, $::col_name2 FROM $::tbl_name;
+  "
+} {4 5}
+
 finish_test
+