-C Allow\sCREATE\sand\sDROP\sVIEW\son\sattached\sdatabases.\s(CVS\s1485)
-D 2004-05-28T12:33:31
+C Fix\sa\sbug\sin\sthe\ssqlite3_column_decltype()\sAPI.\s(CVS\s1486)
+D 2004-05-28T13:13:02
F Makefile.in ab7b0d5118e2da97bac66be8684a1034e3500f5a
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
F src/pragma.c f2b05b087a5764802296a28d7abdd75728beedee
F src/printf.c ef750e8e2398ca7e8b58be991075f08c6a7f0e53
F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3
-F src/select.c 26f726b398af8708c81178acc9c68d64e78e6f5e
+F src/select.c ee54bf2faa76f5e30832fd589a1f10c485047469
F src/shell.c ed4d237b3e52a0a42512bfcc53530e46de20c28f
F src/sqlite.h.in edc6408c7f53c2104f781a76b926036e17018ec9
F src/sqliteInt.h 1c3fc5d7a2bf33b1ea64284c81dbd07d00d9d1bd
F src/vdbe.c 3b208964add3da0c35c41955a95e6aa44ce75850
F src/vdbe.h e73f890e0f2a6c42b183d7d6937947930fe4fdeb
F src/vdbeInt.h c2bcd6e5a6e6a3753e4c5a368629c3a625719bfc
-F src/vdbeapi.c b0bb1f98c899ba00c8a5cbca612c2a28a1bb79de
-F src/vdbeaux.c 7a0dd0fb224285e8c5f0b2edf68a10b29fd512a8
+F src/vdbeapi.c 0c5d64c81871cb4fe5407e639604ee95738b6942
+F src/vdbeaux.c b1e176b1c9027b4a4eff7b936a449d926956f283
F src/vdbemem.c c97c145ff6d9fc5b4236704c04a65849117e6214
F src/where.c efe5d25fe18cd7381722457898cd863e84097a0c
F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
F test/btree5.test 8e5ff32c02e685d36516c6499add9375fe1377f2
F test/btree6.test a5ede6bfbbb2ec8b27e62813612c0f28e8f3e027
F test/capi2.test 8fb64e8ab7f78b8254cd4d04bb96822167f731b2
-F test/capi3.test 3d4d431c3b889893504d59064a018642013fd740
+F test/capi3.test b6fe8a66d2ffe28d4faaaec154a143131e8ff631
F test/conflict.test 0911bb2f079046914a6e9c3341b36658c4e2103e
F test/crashtest1.c 09c1c7d728ccf4feb9e481671e29dda5669bbcc2
F test/date.test aed5030482ebc02bd8d386c6c86a29f694ab068d
F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
-P 2fb3708e10a06660ad1974ef8e9742b706a0a9fc
-R 357b84549b85209a0556b43d32e20b9f
+P ad879a957d93c0b49c289947826b451d3ea37e5b
+R b9f9e8717dc68172e0562ef2fe6cb24a
U danielk1977
-Z 9f71f73052e9fd5a8f1a3443c4f3df37
+Z 50937c4114738747c8662b16c4256cda
-ad879a957d93c0b49c289947826b451d3ea37e5b
\ No newline at end of file
+c8a40218c20cf5d0abad330e8fa59ca4c36e7608
\ No newline at end of file
** This file contains C code routines that are called by the parser
** to handle SELECT statements in SQLite.
**
-** $Id: select.c,v 1.180 2004/05/27 23:56:16 danielk1977 Exp $
+** $Id: select.c,v 1.181 2004/05/28 13:13:02 danielk1977 Exp $
*/
#include "sqliteInt.h"
default: zType = "ANY"; break;
}
}
- sqlite3VdbeOp3(v, OP_ColumnName, i + pEList->nExpr, 0, zType, 0);
+ sqlite3VdbeSetColName(v, i+pEList->nExpr, zType, P3_STATIC);
}
}
sqlite3VdbeSetColName(v, i, zName, 0);
}
}
+ generateColumnTypes(pParse, pTabList, pEList);
}
/*
return sqlite3_value_text16(pColName);
}
-
/*
-** This routine returns either the column name, or declaration type (see
-** sqlite3_column_decltype16() ) of the 'i'th column of the result set of
-** SQL statement pStmt. The returned string is UTF-16 encoded.
-**
-** The declaration type is returned if 'decltype' is true, otherwise
-** the column name.
+** Return the column declaration type (if applicable) of the 'i'th column
+** of the result set of SQL statement pStmt, encoded as UTF-8.
*/
-static const void *columnName16(sqlite3_stmt *pStmt, int i, int decltype){
+const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
Vdbe *p = (Vdbe *)pStmt;
+ Mem *pColName;
- if( i>=sqlite3_column_count(pStmt) || i<0 ){
+ if( N>=sqlite3_column_count(pStmt) || N<0 ){
sqlite3Error(p->db, SQLITE_RANGE, 0);
return 0;
}
- if( decltype ){
- i += p->nResColumn;
- }
-
- if( !p->azColName16 ){
- p->azColName16 = (void **)sqliteMalloc(sizeof(void *)*p->nResColumn*2);
- if( !p->azColName16 ){
- sqlite3Error(p->db, SQLITE_NOMEM, 0);
- return 0;
- }
- }
- if( !p->azColName16[i] ){
- if( SQLITE3_BIGENDIAN ){
- p->azColName16[i] = sqlite3utf8to16be(p->azColName[i], -1);
- }
- if( !p->azColName16[i] ){
- sqlite3Error(p->db, SQLITE_NOMEM, 0);
- return 0;
- }
- }
- return p->azColName16[i];
+ pColName = &(p->aColName[N+sqlite3_column_count(pStmt)]);
+ return sqlite3_value_text(pColName);
}
/*
** Return the column declaration type (if applicable) of the 'i'th column
-** of the result set of SQL statement pStmt, encoded as UTF-8.
+** of the result set of SQL statement pStmt, encoded as UTF-16.
*/
-const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int i){
+const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
Vdbe *p = (Vdbe *)pStmt;
+ Mem *pColName;
- if( i>=sqlite3_column_count(pStmt) || i<0 ){
+ if( N>=sqlite3_column_count(pStmt) || N<0 ){
sqlite3Error(p->db, SQLITE_RANGE, 0);
return 0;
}
- return p->azColName[i+p->nResColumn];
-}
-
-/*
-** Return the column declaration type (if applicable) of the 'i'th column
-** of the result set of SQL statement pStmt, encoded as UTF-16.
-*/
-const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int i){
- return columnName16(pStmt, i, 1);
+ pColName = &(p->aColName[N+sqlite3_column_count(pStmt)]);
+ return sqlite3_value_text16(pColName);
}
/******************************* sqlite3_bind_ ***************************
int sqlite3VdbeSetColName(Vdbe *p, int idx, const char *zName, int N){
int rc;
Mem *pColName;
- assert( idx<p->nResColumn );
+ assert( idx<(2*p->nResColumn) );
/* If the Vdbe.aColName array has not yet been allocated, allocate
** it now.
*/
if( !p->aColName ){
int i;
- p->aColName = (Mem *)sqliteMalloc(sizeof(Mem)*p->nResColumn);
+ p->aColName = (Mem *)sqliteMalloc(sizeof(Mem)*p->nResColumn*2);
if( !p->aColName ){
return SQLITE_NOMEM;
}
- for(i=0; i<p->nResColumn; i++){
+ for(i=0; i<(2*p->nResColumn); i++){
p->aColName[i].flags = MEM_Null;
}
}
# This file implements regression tests for SQLite library. The
# focus of this script testing the callback-free C/C++ API.
#
-# $Id: capi3.test,v 1.9 2004/05/27 10:31:12 danielk1977 Exp $
+# $Id: capi3.test,v 1.10 2004/05/28 13:13:04 danielk1977 Exp $
#
set testdir [file dirname $argv0]
# Column names in UTF-16
do_test $test.2 {
set cnamelist [list]
- foreach i $idxlist {lappend cnamelist [utf8 [sqlite3_column_name16 $STMT $i]]}
+ foreach i $idxlist {
+ lappend cnamelist [utf8 [sqlite3_column_name16 $STMT $i]]
+ }
set cnamelist
} $names
# Column names in UTF-16
do_test $test.4 {
set cnamelist [list]
- foreach i $idxlist {lappend cnamelist [utf8 [sqlite3_column_name16 $STMT $i]]}
+ foreach i $idxlist {
+ lappend cnamelist [utf8 [sqlite3_column_name16 $STMT $i]]
+ }
set cnamelist
} $names
+
+ # Column names in UTF-8
+ do_test $test.5 {
+ set cnamelist [list]
+ foreach i $idxlist {lappend cnamelist [sqlite3_column_decltype $STMT $i]}
+ set cnamelist
+ } $decltypes
+
+ # Column declaration types in UTF-16
+ do_test $test.6 {
+ set cnamelist [list]
+ foreach i $idxlist {
+ lappend cnamelist [utf8 [sqlite3_column_decltype16 $STMT $i]]
+ }
+ set cnamelist
+ } $decltypes
+
}
# This proc is used to test the following APIs:
sqlite3_column_count $STMT
} 3
-check_header $STMT capi3-5.1 {a b c} {VARIANT BLOB VARCHAR(16)}
+check_header $STMT capi3-5.1 {a b c} {VARINT BLOB VARCHAR(16)}
do_test capi3-5.2 {
sqlite3_step $STMT
} SQLITE_ROW
-check_header $STMT capi3-5.3 {a b c} {VARIANT BLOB VARCHAR(16)}
+check_header $STMT capi3-5.3 {a b c} {VARINT BLOB VARCHAR(16)}
check_data $STMT capi3-5.4 {INTEGER INTEGER TEXT} {1 2 3} {1.0 2.0 3.0} {1 2 3}
do_test capi3-5.5 {
sqlite3_step $STMT
} SQLITE_ROW
-check_header $STMT capi3-5.6 {a b c} {VARIANT BLOB VARCHAR(16)}
+check_header $STMT capi3-5.6 {a b c} {VARINT BLOB VARCHAR(16)}
check_data $STMT capi3-5.7 {TEXT TEXT NULL} {0 0 0} {0.0 0.0 0.0} {one two {}}
do_test capi3-5.8 {
sqlite3_step $STMT
} SQLITE_ROW
-check_header $STMT capi3-5.9 {a b c} {VARIANT BLOB VARCHAR(16)}
+check_header $STMT capi3-5.9 {a b c} {VARINT BLOB VARCHAR(16)}
check_data $STMT capi3-5.10 {FLOAT FLOAT TEXT} {1 1 1} {1.2 1.3 1.4} {1.2 1.3 1.4}
do_test capi3-5.11 {