1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-01 06:27:03 +03:00

When reporting back the datatype of columns, use the text of the datatype

as it appears in the CREATE TABLE statement, if available.  Also: removed
the ".reindex" command from the shell. (CVS 669)

FossilOrigin-Name: ff8b6f4ee8099a7170cb786b8ead9a3e42ab5869
This commit is contained in:
drh
2002-07-10 21:26:00 +00:00
parent 6276c1cbf0
commit fa173a764a
8 changed files with 61 additions and 87 deletions

View File

@ -1,5 +1,5 @@
C Add\ssupport\sfor\sTEMPORARY\sviews.\s\sThe\scode\sis\shere\sbut\sit\sis\smostly\suntested.\s(CVS\s668) C When\sreporting\sback\sthe\sdatatype\sof\scolumns,\suse\sthe\stext\sof\sthe\sdatatype\r\nas\sit\sappears\sin\sthe\sCREATE\sTABLE\sstatement,\sif\savailable.\s\sAlso:\sremoved\r\nthe\s".reindex"\scommand\sfrom\sthe\sshell.\s(CVS\s669)
D 2002-07-08T22:03:32 D 2002-07-10T21:26:01
F Makefile.in 6291a33b87d2a395aafd7646ee1ed562c6f2c28c F Makefile.in 6291a33b87d2a395aafd7646ee1ed562c6f2c28c
F Makefile.template 4e11752e0b5c7a043ca50af4296ec562857ba495 F Makefile.template 4e11752e0b5c7a043ca50af4296ec562857ba495
F README a4c0ba11354ef6ba0776b400d057c59da47a4cc0 F README a4c0ba11354ef6ba0776b400d057c59da47a4cc0
@ -35,19 +35,19 @@ F src/os.h 4a361fccfbc4e7609b3e1557f604f94c1e96ad10
F src/pager.c b8415b02a2a5c4e9d8bfd45311a5f15e785c7f1f F src/pager.c b8415b02a2a5c4e9d8bfd45311a5f15e785c7f1f
F src/pager.h 6fddfddd3b73aa8abc081b973886320e3c614f0e F src/pager.h 6fddfddd3b73aa8abc081b973886320e3c614f0e
F src/parse.y 9267b7681882205f904f6564fff733d8fbcd58a3 F src/parse.y 9267b7681882205f904f6564fff733d8fbcd58a3
F src/printf.c 236ed7a79386feed4456fa728fff8be793f1547c F src/printf.c 06f4c8725063e0faf0e34824ab70feace7146bf7
F src/random.c 19e8e00fe0df32a742f115773f57651be327cabe F src/random.c 19e8e00fe0df32a742f115773f57651be327cabe
F src/select.c 1c7c0b42c27b9d115c955023074a292197a17b3b F src/select.c 9e67a79bda57a587b919074df8d8a18cb95c3ba8
F src/shell.c 0b06e4421ddf34f30263a2674abe768a2b5fd538 F src/shell.c 16cb2db27f2d3045f78e74e83bac965a8249357b
F src/shell.tcl 27ecbd63dd88396ad16d81ab44f73e6c0ea9d20e F src/shell.tcl 27ecbd63dd88396ad16d81ab44f73e6c0ea9d20e
F src/sqlite.h.in 75c5bbb066d0faf34424b7d1babf8b44d5b31af2 F src/sqlite.h.in 75c5bbb066d0faf34424b7d1babf8b44d5b31af2
F src/sqliteInt.h ad5a60c1b28356c956bea4f947509206725519ce F src/sqliteInt.h ad5a60c1b28356c956bea4f947509206725519ce
F src/table.c eed2098c9b577aa17f8abe89313a9c4413f57d63 F src/table.c eed2098c9b577aa17f8abe89313a9c4413f57d63
F src/tclsqlite.c 8a6a8cf06f9d3107f06d04996fda39483cd25d87 F src/tclsqlite.c f5d194f1d3e2ddd615c9784affbb8c840e30b3fd
F src/test1.c a2f2b6b1df07d4e8b380323896c3ed34442cea91 F src/test1.c 456cb080db85056be723e770435d9509afc3a83a
F src/test2.c 669cc22781c6461a273416ec1a7414d25c081730 F src/test2.c 669cc22781c6461a273416ec1a7414d25c081730
F src/test3.c fda085b4cdd5a2d7f65786ce679036e955f4bfa2 F src/test3.c fda085b4cdd5a2d7f65786ce679036e955f4bfa2
F src/threadtest.c 81f0598e0f031c1bd506af337fdc1b7e8dff263f F src/threadtest.c 72bce0a284647314847bbea44616ceb056bfb77f
F src/tokenize.c b5500e193a82b5b9888fbf947efd90d3b4858178 F src/tokenize.c b5500e193a82b5b9888fbf947efd90d3b4858178
F src/trigger.c d88ab4d68d68955c217b38fb6717e090fbbf54a4 F src/trigger.c d88ab4d68d68955c217b38fb6717e090fbbf54a4
F src/update.c 494479cc4fe34165cb9ea97bccefb405e7b875d2 F src/update.c 494479cc4fe34165cb9ea97bccefb405e7b875d2
@ -140,7 +140,7 @@ F www/speed.tcl da8afcc1d3ccc5696cfb388a68982bc3d9f7f00f
F www/sqlite.tcl ae3dcfb077e53833b59d4fcc94d8a12c50a44098 F www/sqlite.tcl ae3dcfb077e53833b59d4fcc94d8a12c50a44098
F www/tclsqlite.tcl 1db15abeb446aad0caf0b95b8b9579720e4ea331 F www/tclsqlite.tcl 1db15abeb446aad0caf0b95b8b9579720e4ea331
F www/vdbe.tcl 2013852c27a02a091d39a766bc87cff329f21218 F www/vdbe.tcl 2013852c27a02a091d39a766bc87cff329f21218
P fd7e41f0eed80fb1c7e18eb84834ec3cea74a649 P 87cd10c1f638db5d1f47bc12669f150485415b3e
R fdc61bc38062d3eb8e5cf64639119d71 R dfabcf7e6ad6024dc64e99aa6198b20c
U drh U drh
Z 5b35bb17d4be31b8bee0d38218de414a Z a0a55547557628906064ab1285cc2b8e

View File

@ -1 +1 @@
87cd10c1f638db5d1f47bc12669f150485415b3e ff8b6f4ee8099a7170cb786b8ead9a3e42ab5869

View File

@ -699,15 +699,11 @@ char *sqlite_mprintf(const char *zFormat, ...){
vxprintf(mout,&sMprintf,zFormat,ap); vxprintf(mout,&sMprintf,zFormat,ap);
va_end(ap); va_end(ap);
sMprintf.zText[sMprintf.nChar] = 0; sMprintf.zText[sMprintf.nChar] = 0;
if( sMprintf.zText==sMprintf.zBase ){ zNew = malloc( sMprintf.nChar+1 );
zNew = sqliteMalloc( sMprintf.nChar+1 ); if( zNew ) strcpy(zNew,sMprintf.zText);
if( zNew ) strcpy(zNew,zBuf); if( sMprintf.zText!=sMprintf.zBase ){
}else{
zNew = sqliteRealloc(sMprintf.zText,sMprintf.nChar+1);
if( zNew==0 ){
sqliteFree(sMprintf.zText); sqliteFree(sMprintf.zText);
} }
}
return zNew; return zNew;
} }
@ -715,6 +711,7 @@ char *sqlite_mprintf(const char *zFormat, ...){
*/ */
char *sqlite_vmprintf(const char *zFormat, va_list ap){ char *sqlite_vmprintf(const char *zFormat, va_list ap){
struct sgMprintf sMprintf; struct sgMprintf sMprintf;
char *zNew;
char zBuf[200]; char zBuf[200];
sMprintf.nChar = 0; sMprintf.nChar = 0;
sMprintf.zText = zBuf; sMprintf.zText = zBuf;
@ -722,17 +719,12 @@ char *sqlite_vmprintf(const char *zFormat, va_list ap){
sMprintf.zBase = zBuf; sMprintf.zBase = zBuf;
vxprintf(mout,&sMprintf,zFormat,ap); vxprintf(mout,&sMprintf,zFormat,ap);
sMprintf.zText[sMprintf.nChar] = 0; sMprintf.zText[sMprintf.nChar] = 0;
if( sMprintf.zText==sMprintf.zBase ){ zNew = malloc( sMprintf.nChar+1 );
sMprintf.zText = sqliteMalloc( strlen(zBuf)+1 ); if( zNew ) strcpy(zNew,sMprintf.zText);
if( sMprintf.zText ) strcpy(sMprintf.zText,zBuf); if( sMprintf.zText!=sMprintf.zBase ){
}else{
char *z = sqliteRealloc(sMprintf.zText,sMprintf.nChar+1);
if( z==0 ){
sqliteFree(sMprintf.zText); sqliteFree(sMprintf.zText);
} }
sMprintf.zText = z; return zNew;
}
return sMprintf.zText;
} }
/* /*
@ -772,7 +764,7 @@ int sqlite_exec_vprintf(
zSql = sqlite_vmprintf(sqlFormat, ap); zSql = sqlite_vmprintf(sqlFormat, ap);
rc = sqlite_exec(db, zSql, xCallback, pArg, errmsg); rc = sqlite_exec(db, zSql, xCallback, pArg, errmsg);
sqliteFree(zSql); free(zSql);
return rc; return rc;
} }
int sqlite_get_table_printf( int sqlite_get_table_printf(
@ -806,6 +798,6 @@ int sqlite_get_table_vprintf(
zSql = sqlite_vmprintf(sqlFormat, ap); zSql = sqlite_vmprintf(sqlFormat, ap);
rc = sqlite_get_table(db, zSql, resultp, nrow, ncolumn, errmsg); rc = sqlite_get_table(db, zSql, resultp, nrow, ncolumn, errmsg);
sqliteFree(zSql); free(zSql);
return rc; return rc;
} }

View File

@ -12,7 +12,7 @@
** This file contains C code routines that are called by the parser ** This file contains C code routines that are called by the parser
** to handle SELECT statements in SQLite. ** to handle SELECT statements in SQLite.
** **
** $Id: select.c,v 1.103 2002/07/05 21:42:37 drh Exp $ ** $Id: select.c,v 1.104 2002/07/10 21:26:01 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
@ -626,11 +626,7 @@ static void generateColumnNames(
p = pEList->a[i].pExpr; p = pEList->a[i].pExpr;
if( p==0 ) continue; if( p==0 ) continue;
showFullNames = (pParse->db->flags & SQLITE_FullColNames)!=0; showFullNames = (pParse->db->flags & SQLITE_FullColNames)!=0;
if( p->span.z && p->span.z[0] && !showFullNames ){ if( p->op==TK_COLUMN && pTabList ){
int addr = sqliteVdbeAddOp(v,OP_ColumnName, i, 0);
sqliteVdbeChangeP3(v, -1, p->span.z, p->span.n);
sqliteVdbeCompressSpace(v, addr);
}else if( p->op==TK_COLUMN && pTabList ){
Table *pTab = pTabList->a[p->iTable - base].pTab; Table *pTab = pTabList->a[p->iTable - base].pTab;
char *zCol; char *zCol;
int iCol = p->iColumn; int iCol = p->iColumn;
@ -643,7 +639,11 @@ static void generateColumnNames(
zCol = pTab->aCol[iCol].zName; zCol = pTab->aCol[iCol].zName;
zType = pTab->aCol[iCol].zType; zType = pTab->aCol[iCol].zType;
} }
if( pTabList->nSrc>1 || showFullNames ){ if( p->span.z && p->span.z[0] && !showFullNames ){
int addr = sqliteVdbeAddOp(v,OP_ColumnName, i, 0);
sqliteVdbeChangeP3(v, -1, p->span.z, p->span.n);
sqliteVdbeCompressSpace(v, addr);
}else if( pTabList->nSrc>1 || showFullNames ){
char *zName = 0; char *zName = 0;
char *zTab; char *zTab;
@ -657,6 +657,10 @@ static void generateColumnNames(
sqliteVdbeAddOp(v, OP_ColumnName, i, 0); sqliteVdbeAddOp(v, OP_ColumnName, i, 0);
sqliteVdbeChangeP3(v, -1, zCol, 0); sqliteVdbeChangeP3(v, -1, zCol, 0);
} }
}else if( p->span.z && p->span.z[0] && !showFullNames ){
int addr = sqliteVdbeAddOp(v,OP_ColumnName, i, 0);
sqliteVdbeChangeP3(v, -1, p->span.z, p->span.n);
sqliteVdbeCompressSpace(v, addr);
}else if( p->span.z && p->span.z[0] ){ }else if( p->span.z && p->span.z[0] ){
int addr = sqliteVdbeAddOp(v,OP_ColumnName, i, 0); int addr = sqliteVdbeAddOp(v,OP_ColumnName, i, 0);
sqliteVdbeChangeP3(v, -1, p->span.z, p->span.n); sqliteVdbeChangeP3(v, -1, p->span.z, p->span.n);

View File

@ -12,7 +12,7 @@
** This file contains code to implement the "sqlite" command line ** This file contains code to implement the "sqlite" command line
** utility for accessing SQLite databases. ** utility for accessing SQLite databases.
** **
** $Id: shell.c,v 1.59 2002/06/25 19:31:18 drh Exp $ ** $Id: shell.c,v 1.60 2002/07/10 21:26:01 drh Exp $
*/ */
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -492,8 +492,6 @@ static char zHelp[] =
".prompt MAIN CONTINUE Replace the standard prompts\n" ".prompt MAIN CONTINUE Replace the standard prompts\n"
".quit Exit this program\n" ".quit Exit this program\n"
".read FILENAME Execute SQL in FILENAME\n" ".read FILENAME Execute SQL in FILENAME\n"
".reindex ?TABLE? Rebuild indices\n"
/* ".rename OLD NEW Change the name of a table or index\n" */
".schema ?TABLE? Show the CREATE statements\n" ".schema ?TABLE? Show the CREATE statements\n"
".separator STRING Change separator string for \"list\" mode\n" ".separator STRING Change separator string for \"list\" mode\n"
".show Show the current values for various settings\n" ".show Show the current values for various settings\n"
@ -754,40 +752,6 @@ static int do_meta_command(char *zLine, sqlite *db, struct callback_data *p){
} }
}else }else
if( c=='r' && strncmp(azArg[0], "reindex", n)==0 ){
char **azResult;
int nRow, rc;
char *zErrMsg;
int i;
char *zSql;
if( nArg==1 ){
rc = sqlite_get_table(db,
"SELECT name, sql FROM sqlite_master "
"WHERE type='index'",
&azResult, &nRow, 0, &zErrMsg
);
}else{
rc = sqlite_get_table_printf(db,
"SELECT name, sql FROM sqlite_master "
"WHERE type='index' AND tbl_name LIKE '%q'",
&azResult, &nRow, 0, &zErrMsg, azArg[1]
);
}
for(i=1; rc==SQLITE_OK && i<=nRow; i++){
extern char *sqlite_mprintf(const char *, ...);
zSql = sqlite_mprintf(
"DROP INDEX '%q';\n%s;\nVACUUM '%q';",
azResult[i*2], azResult[i*2+1], azResult[i*2]);
if( p->echoOn ) printf("%s\n", zSql);
rc = sqlite_exec(db, zSql, 0, 0, &zErrMsg);
}
sqlite_free_table(azResult);
if( zErrMsg ){
fprintf(stderr,"Error: %s\n", zErrMsg);
free(zErrMsg);
}
}else
if( c=='s' && strncmp(azArg[0], "schema", n)==0 ){ if( c=='s' && strncmp(azArg[0], "schema", n)==0 ){
struct callback_data data; struct callback_data data;
char *zErrMsg = 0; char *zErrMsg = 0;

View File

@ -11,7 +11,7 @@
************************************************************************* *************************************************************************
** A TCL Interface to SQLite ** A TCL Interface to SQLite
** **
** $Id: tclsqlite.c,v 1.36 2002/07/07 17:12:36 drh Exp $ ** $Id: tclsqlite.c,v 1.37 2002/07/10 21:26:01 drh Exp $
*/ */
#ifndef NO_TCL /* Omit this whole file if TCL is unavailable */ #ifndef NO_TCL /* Omit this whole file if TCL is unavailable */
@ -93,9 +93,20 @@ static int DbEvalCallback(
return 1; return 1;
} }
if( cbData->zArray[0] ){ if( cbData->zArray[0] ){
Tcl_DString dType;
Tcl_DStringInit(&dType);
Tcl_SetVar2(cbData->interp, cbData->zArray, "*", Tcl_SetVar2(cbData->interp, cbData->zArray, "*",
Tcl_DStringValue(&dCol), TCL_LIST_ELEMENT|TCL_APPEND_VALUE); Tcl_DStringValue(&dCol), TCL_LIST_ELEMENT|TCL_APPEND_VALUE);
Tcl_DStringAppend(&dType, "typeof:", -1);
Tcl_DStringAppend(&dType, Tcl_DStringValue(&dCol), -1);
Tcl_DStringFree(&dCol);
Tcl_ExternalToUtfDString(NULL, azN[i+argc+1], -1, &dCol);
Tcl_SetVar2(cbData->interp, cbData->zArray,
Tcl_DStringValue(&dType), Tcl_DStringValue(&dCol),
TCL_LIST_ELEMENT|TCL_APPEND_VALUE);
Tcl_DStringFree(&dType);
} }
Tcl_DStringFree(&dCol); Tcl_DStringFree(&dCol);
} }
} }
@ -152,8 +163,13 @@ static int DbEvalCallback(
if( azCol==0 || (cbData->once && cbData->zArray[0]) ){ if( azCol==0 || (cbData->once && cbData->zArray[0]) ){
Tcl_SetVar2(cbData->interp, cbData->zArray, "*", "", 0); Tcl_SetVar2(cbData->interp, cbData->zArray, "*", "", 0);
for(i=0; i<nCol; i++){ for(i=0; i<nCol; i++){
char *z;
Tcl_SetVar2(cbData->interp, cbData->zArray, "*", azN[i], Tcl_SetVar2(cbData->interp, cbData->zArray, "*", azN[i],
TCL_LIST_ELEMENT|TCL_APPEND_VALUE); TCL_LIST_ELEMENT|TCL_APPEND_VALUE);
z = sqlite_mprintf("typeof:%s", azN[i]);
Tcl_SetVar2(cbData->interp, cbData->zArray, z, azN[i+nCol+1],
TCL_LIST_ELEMENT|TCL_APPEND_VALUE);
sqlite_freemem(z);
} }
cbData->once = 0; cbData->once = 0;
} }

View File

@ -13,7 +13,7 @@
** is not included in the SQLite library. It is used for automated ** is not included in the SQLite library. It is used for automated
** testing of the SQLite library. ** testing of the SQLite library.
** **
** $Id: test1.c,v 1.11 2002/07/01 00:31:36 drh Exp $ ** $Id: test1.c,v 1.12 2002/07/10 21:26:01 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include "tcl.h" #include "tcl.h"
@ -331,7 +331,7 @@ static int sqlite_mprintf_int(
} }
z = sqlite_mprintf(argv[1], a[0], a[1], a[2]); z = sqlite_mprintf(argv[1], a[0], a[1], a[2]);
Tcl_AppendResult(interp, z, 0); Tcl_AppendResult(interp, z, 0);
sqliteFree(z); sqlite_freemem(z);
return TCL_OK; return TCL_OK;
} }
@ -358,7 +358,7 @@ static int sqlite_mprintf_str(
} }
z = sqlite_mprintf(argv[1], a[0], a[1], argc>4 ? argv[4] : NULL); z = sqlite_mprintf(argv[1], a[0], a[1], argc>4 ? argv[4] : NULL);
Tcl_AppendResult(interp, z, 0); Tcl_AppendResult(interp, z, 0);
sqliteFree(z); sqlite_freemem(z);
return TCL_OK; return TCL_OK;
} }
@ -387,7 +387,7 @@ static int sqlite_mprintf_double(
if( Tcl_GetDouble(interp, argv[4], &r) ) return TCL_ERROR; if( Tcl_GetDouble(interp, argv[4], &r) ) return TCL_ERROR;
z = sqlite_mprintf(argv[1], a[0], a[1], r); z = sqlite_mprintf(argv[1], a[0], a[1], r);
Tcl_AppendResult(interp, z, 0); Tcl_AppendResult(interp, z, 0);
sqliteFree(z); sqlite_freemem(z);
return TCL_OK; return TCL_OK;
} }

View File

@ -25,8 +25,6 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#define sqliteFree(X) sqliteFree_(X,__FILE__,__LINE__)
/* /*
** Come here to die. ** Come here to die.
*/ */
@ -100,7 +98,7 @@ char **db_query(sqlite *db, const char *zFile, const char *zFormat, ...){
free(zSql); free(zSql);
Exit(1); Exit(1);
} }
sqliteFree(zSql); sqlite_freemem(zSql);
if( sResult.azElem==0 ){ if( sResult.azElem==0 ){
db_query_callback(&sResult, 0, 0, 0); db_query_callback(&sResult, 0, 0, 0);
} }
@ -123,10 +121,10 @@ void db_execute(sqlite *db, const char *zFile, const char *zFormat, ...){
if( zErrMsg ){ if( zErrMsg ){
fprintf(stderr,"%s: command failed: %s - %s\n", zFile, zSql, zErrMsg); fprintf(stderr,"%s: command failed: %s - %s\n", zFile, zSql, zErrMsg);
free(zErrMsg); free(zErrMsg);
sqliteFree(zSql); sqlite_freemem(zSql);
Exit(1); Exit(1);
} }
sqliteFree(zSql); sqlite_freemem(zSql);
} }
/* /*
@ -135,7 +133,7 @@ void db_execute(sqlite *db, const char *zFile, const char *zFormat, ...){
void db_query_free(char **az){ void db_query_free(char **az){
int i; int i;
for(i=0; az[i]; i++){ for(i=0; az[i]; i++){
sqliteFree(az[i]); sqlite_freemem(az[i]);
} }
free(az); free(az);
} }