diff --git a/manifest b/manifest index 5cfc9dc0b1..89ebeaa42c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Defer\sallocating\smemory\sspace\sto\shold\sthe\sarray\sof\scolumn\svalues\sand\nnames\sin\ssqlite3_exec()\suntil\sthere\sis\sa\sneed\sto\suse\sthe\sarray.\s\sIn\nthe\scommon\scase\swhere\sthere\sis\sno\scallback,\sthis\savoids\sa\smalloc()\scall.\s(CVS\s4905) -D 2008-03-21T18:01:14 +C Add\sthe\sSQLITE_OMIT_DECLTYPE\scompile-time\soption.\s\sRemove\smore\scode\swhen\nSQLITE_ENABLE_COLUMN_METADATA\sis\snot\sdefined.\s(CVS\s4906) +D 2008-03-22T01:07:18 F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7 F Makefile.in cf434ce8ca902e69126ae0f94fc9f7dc7428a5fa F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -135,7 +135,7 @@ F src/pragma.c f64eed914518c28d1863356163dea1e6f58e28f2 F src/prepare.c 1b71b5d43ba3d88f2d3c2a6d084f28ac209df956 F src/printf.c 05d2b44d7b5b80c8a4a09108ddad9c20e254370d F src/random.c 2b2db2de4ab491f5a14d3480466f8f4b5a5db74a -F src/select.c 2a0f383a16c780b8ee8108e994c2f6c4f82233a9 +F src/select.c 35063b078beafe9aa35344a8ce039210920d7fea F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96 F src/shell.c 22297fffa6f00a6c6d44020fa13b1184a1bb372d F src/sqlite.h.in da2ab729b5c590c7dfa5418477ed181d52ab9c82 @@ -144,7 +144,7 @@ F src/sqliteInt.h 07b472437b2d7297c300f8b7cea5205984fa64d1 F src/sqliteLimit.h eecbc288b410ae5565e71aaa4a439aae57bb0707 F src/table.c 2c48c575dd59b3a6c5c306bc55f51a9402cf429a F src/tclsqlite.c d42912617d4734b8f9195416badf5b27e512ded2 -F src/test1.c aab521bef2a038dfdf1bcafb4f3372285be7d91b +F src/test1.c 342a2628310fa709074d979e695a28a3bb570834 F src/test2.c f0808cc643528b9620e4059ca9bda8346f526121 F src/test3.c 5c7452038ab27aa698070799b10132f26cdd2a80 F src/test4.c c2c0f5dc907f1346f5d4b65eb5799f11eb9e4071 @@ -156,7 +156,7 @@ F src/test9.c 4615ef08750245a2d96aaa7cbe2fb4aff2b57acc F src/test_async.c 3147c64c34721f088d5ab20f85dabd5d7732c007 F src/test_autoext.c 5e892ab84aece3f0428920bf46923f16ac83962a F src/test_btree.c c1308ba0b88ab577fa56c9e493a09829dfcded9c -F src/test_config.c 100a3381cedd5435ce6928f1c21ec6887a16b71e +F src/test_config.c 097a49a8804815799dc3d2220e6af693ad54f59d F src/test_devsym.c cee1aecaa90c895030399ca4ae38f84a08038f8a F src/test_func.c 9e9b33ff083b65da91c389cece903bc32de06f01 F src/test_hexio.c 1a1cd8324d57585ea86b922f609fa1fbaaf9662d @@ -175,9 +175,9 @@ F src/utf.c 32b00d6e19010025e58f2ecb2f921d5e126771b4 F src/util.c dba9e04121eb17ec4643d6ca231ff859452cf0e2 F src/vacuum.c 3524411bfb58aac0d87eadd3e5b7cd532772af30 F src/vdbe.c 43b261f50be60c758430a9072f960715f2ff0852 -F src/vdbe.h 58a7d931ffb704e034b2a725981cfa5bd406fad9 +F src/vdbe.h 93acc03fe8002173cb6affad2bf5d5c5305ba229 F src/vdbeInt.h 76c81d057a39813de0fda3cad1498655d53ec69d -F src/vdbeapi.c a3bddeee0f011faadb20316926cc97f95efa6415 +F src/vdbeapi.c b9e9d7a58690c1e1ae66de7232edccf4793ad817 F src/vdbeaux.c 82f3c8913e68b4928de28c3fa117464356d59df6 F src/vdbeblob.c 63c750acc7b5012479f508c0e9627372a82cb65d F src/vdbefifo.c a30c237b2a3577e1415fb6e288cbb6b8ed1e5736 @@ -624,7 +624,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 -P d2140cae39dcced63e3ad5771e52d522ce587c96 -R 438a95b31cb1994f639e5613e5c3d839 +P d8686abcdf9e566571033f2f137142f742df9357 +R aa65ee25792b35b0b257992140c3f662 U drh -Z 141fc6916bd71c55ee794d15ce44ae0c +Z 466acf301fdb80b8f45999c2ef27b0df diff --git a/manifest.uuid b/manifest.uuid index 49185d8717..2cba4055cd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d8686abcdf9e566571033f2f137142f742df9357 \ No newline at end of file +8ef26646cff9be75c584a9abfcfffcfdb49b3969 \ No newline at end of file diff --git a/src/select.c b/src/select.c index 450357c710..18532b585a 100644 --- a/src/select.c +++ b/src/select.c @@ -12,7 +12,7 @@ ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** -** $Id: select.c,v 1.416 2008/03/20 14:03:29 drh Exp $ +** $Id: select.c,v 1.417 2008/03/22 01:07:18 drh Exp $ */ #include "sqliteInt.h" @@ -1005,6 +1005,7 @@ static void generateColumnTypes( SrcList *pTabList, /* List of tables */ ExprList *pEList /* Expressions defining the result set */ ){ +#ifndef SQLITE_OMIT_DECLTYPE Vdbe *v = pParse->pVdbe; int i; NameContext sNC; @@ -1012,20 +1013,26 @@ static void generateColumnTypes( sNC.pParse = pParse; for(i=0; inExpr; i++){ Expr *p = pEList->a[i].pExpr; + const char *zType; +#ifdef SQLITE_ENABLE_COLUMN_METADATA const char *zOrigDb = 0; const char *zOrigTab = 0; const char *zOrigCol = 0; - const char *zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol); + zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol); /* The vdbe must make its own copy of the column-type and other ** column specific strings, in case the schema is reset before this ** virtual machine is deleted. */ - sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, P4_TRANSIENT); sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb, P4_TRANSIENT); sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, P4_TRANSIENT); sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, P4_TRANSIENT); +#else + zType = columnType(&sNC, p, 0, 0, 0); +#endif + sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, P4_TRANSIENT); } +#endif /* SQLITE_OMIT_DECLTYPE */ } /* diff --git a/src/test1.c b/src/test1.c index 3f718aef62..25846ad24b 100644 --- a/src/test1.c +++ b/src/test1.c @@ -13,7 +13,7 @@ ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** -** $Id: test1.c,v 1.294 2008/03/20 16:30:18 drh Exp $ +** $Id: test1.c,v 1.295 2008/03/22 01:07:18 drh Exp $ */ #include "sqliteInt.h" #include "tcl.h" @@ -4526,10 +4526,12 @@ int Sqlitetest1_Init(Tcl_Interp *interp){ { "sqlite3_column_double", test_column_double ,0 }, { "sqlite3_column_int64", test_column_int64 ,0 }, { "sqlite3_column_text", test_stmt_utf8, sqlite3_column_text }, - { "sqlite3_column_decltype", test_stmt_utf8, sqlite3_column_decltype }, { "sqlite3_column_name", test_stmt_utf8, sqlite3_column_name }, { "sqlite3_column_int", test_stmt_int, sqlite3_column_int }, { "sqlite3_column_bytes", test_stmt_int, sqlite3_column_bytes }, +#ifndef SQLITE_OMIT_DECLTYPE + { "sqlite3_column_decltype", test_stmt_utf8, sqlite3_column_decltype }, +#endif #ifdef SQLITE_ENABLE_COLUMN_METADATA { "sqlite3_column_database_name", test_stmt_utf8, sqlite3_column_database_name}, { "sqlite3_column_table_name", test_stmt_utf8, sqlite3_column_table_name}, @@ -4539,9 +4541,11 @@ int Sqlitetest1_Init(Tcl_Interp *interp){ #ifndef SQLITE_OMIT_UTF16 { "sqlite3_column_bytes16", test_stmt_int, sqlite3_column_bytes16 }, { "sqlite3_column_text16", test_stmt_utf16, sqlite3_column_text16 }, - { "sqlite3_column_decltype16", test_stmt_utf16, sqlite3_column_decltype16}, { "sqlite3_column_name16", test_stmt_utf16, sqlite3_column_name16 }, { "add_alignment_test_collations", add_alignment_test_collations, 0 }, +#ifndef SQLITE_OMIT_DECLTYPE + { "sqlite3_column_decltype16", test_stmt_utf16, sqlite3_column_decltype16}, +#endif #ifdef SQLITE_ENABLE_COLUMN_METADATA {"sqlite3_column_database_name16", test_stmt_utf16, sqlite3_column_database_name16}, diff --git a/src/test_config.c b/src/test_config.c index c396763d4d..1045dcda5c 100644 --- a/src/test_config.c +++ b/src/test_config.c @@ -16,7 +16,7 @@ ** The focus of this file is providing the TCL testing layer ** access to compile-time constants. ** -** $Id: test_config.c,v 1.23 2008/03/21 16:45:48 drh Exp $ +** $Id: test_config.c,v 1.24 2008/03/22 01:07:18 drh Exp $ */ #include "sqliteLimit.h" @@ -195,6 +195,12 @@ static void set_options(Tcl_Interp *interp){ Tcl_SetVar2(interp, "sqlite_options", "datetime", "1", TCL_GLOBAL_ONLY); #endif +#ifdef SQLITE_OMIT_DECLTYPE + Tcl_SetVar2(interp, "sqlite_options", "decltype", "0", TCL_GLOBAL_ONLY); +#else + Tcl_SetVar2(interp, "sqlite_options", "decltype", "1", TCL_GLOBAL_ONLY); +#endif + #ifdef SQLITE_OMIT_DISKIO Tcl_SetVar2(interp, "sqlite_options", "diskio", "0", TCL_GLOBAL_ONLY); #else diff --git a/src/vdbe.h b/src/vdbe.h index 16b19dcd84..bcc8cd9a53 100644 --- a/src/vdbe.h +++ b/src/vdbe.h @@ -15,7 +15,7 @@ ** or VDBE. The VDBE implements an abstract machine that runs a ** simple program to access and modify the underlying database. ** -** $Id: vdbe.h,v 1.125 2008/01/17 17:27:31 drh Exp $ +** $Id: vdbe.h,v 1.126 2008/03/22 01:07:18 drh Exp $ */ #ifndef _SQLITE_VDBE_H_ #define _SQLITE_VDBE_H_ @@ -119,7 +119,15 @@ typedef struct VdbeOpList VdbeOpList; #define COLNAME_DATABASE 2 #define COLNAME_TABLE 3 #define COLNAME_COLUMN 4 -#define COLNAME_N 5 /* Number of COLNAME_xxx symbols */ +#ifdef SQLITE_ENABLE_COLUMN_METADATA +# define COLNAME_N 5 /* Number of COLNAME_xxx symbols */ +#else +# ifdef SQLITE_OMIT_DECLTYPE +# define COLNAME_N 1 /* Store only the name */ +# else +# define COLNAME_N 2 /* Store the name and decltype */ +# endif +#endif /* ** The following macro converts a relative address in the p2 field diff --git a/src/vdbeapi.c b/src/vdbeapi.c index 38997fabc9..dfefae1165 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -752,6 +752,16 @@ const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){ } #endif +/* +** Constraint: If you have ENABLE_COLUMN_METADATA then you must +** not define OMIT_DECLTYPE. +*/ +#if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA) +# error "Must not define both SQLITE_OMIT_DECLTYPE \ + and SQLITE_ENABLE_COLUMN_METADATA" +#endif + +#ifndef SQLITE_OMIT_DECLTYPE /* ** Return the column declaration type (if applicable) of the 'i'th column ** of the result set of SQL statement pStmt. @@ -766,6 +776,7 @@ const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){ pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE); } #endif /* SQLITE_OMIT_UTF16 */ +#endif /* SQLITE_OMIT_DECLTYPE */ #ifdef SQLITE_ENABLE_COLUMN_METADATA /*