1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

:-) (CVS 30)

FossilOrigin-Name: 9b8458bbcef19882f14f0e96575fc3f0a86df97a
This commit is contained in:
drh
2000-05-31 23:33:17 +00:00
parent c3c2fc9a49
commit 1e5d0e9941
3 changed files with 69 additions and 19 deletions

View File

@ -1,5 +1,5 @@
C :-)\s(CVS\s29)
D 2000-05-31T22:58:39
C :-)\s(CVS\s30)
D 2000-05-31T23:33:17
F COPYRIGHT 74a8a6531a42e124df07ab5599aad63870fa0bd4
F Makefile.in 7ac2fef265940d93a544cb454efa836451559a71
F README 6b5960603c7f8bf42fc022b4b6436f242f238dbb
@ -15,7 +15,7 @@ F src/insert.c bd34716d0bba5561f6b55101adbf16fa75f872e8
F src/main.c a14b1e8837836e59eb4855bf22879c7139892276
F src/parse.y 16322c46ec117082ef745715f7a4761f2491a0b2
F src/select.c 25cada7cb2b0b4973b3e17c81ba1b1c887829f71
F src/shell.c c5752d32cdeaa7d548d4f91177b697b023a00381
F src/shell.c 9a42923e9c8ec1654dd1ef1aa113eca26dcf30db
F src/sqlite.h 2397c17a8f4ca90c09acab0100dc7e2f8f441b69
F src/sqliteInt.h a3c662ff65826f3b51d4aa946b4201e864c4587c
F src/tclsqlite.c 9efd29f79ded6a900aa3d142169c8bfe03b7affd
@ -45,7 +45,7 @@ F www/c_interface.tcl f875864edf7974157d1c257ca08de854660882a5
F www/changes.tcl 37f4906f0b03f2160d2b2e4ed3cedb0b91d253cb
F www/index.tcl a94e31dc690f07b0dfdb82c5ab6315e4840a336d
F www/sqlite.tcl 7deb564df188ad4523adecfe2365de6d09f6dfd9
P 57c5add197c12c919e2556b5ac421803398f2c1b
R f5b36e27fa2bef5aa09105fe5f4f6aab
P 09054df318240f2f2b365f7b24655473c1ab6655
R fc82166dc2a47a40a12fe4f5158b594e
U drh
Z 8e27228f5e9143eb165e86ff6773e689
Z 56c060b93461ac99c13a7f384be1c3c5

View File

@ -1 +1 @@
09054df318240f2f2b365f7b24655473c1ab6655
9b8458bbcef19882f14f0e96575fc3f0a86df97a

View File

@ -24,7 +24,7 @@
** This file contains code to implement the "sqlite" command line
** utility for accessing SQLite databases.
**
** $Id: shell.c,v 1.4 2000/05/31 02:27:49 drh Exp $
** $Id: shell.c,v 1.5 2000/05/31 23:33:17 drh Exp $
*/
#include <stdlib.h>
#include <string.h>
@ -137,6 +137,7 @@ struct callback_data {
#define MODE_Line 0 /* One field per line. Blank line between records */
#define MODE_Column 1 /* One record per line in neat columns */
#define MODE_List 2 /* One record per line with a separator */
#define MODE_Html 3 /* Generate an XHTML table */
/*
** Number of elements in an array
@ -176,7 +177,8 @@ static int callback(void *pArg, int nArg, char **azArg, char **azCol){
}else{
w = 10;
}
fprintf(p->out,"%-*.*s%s",w,w,"-------------------------------------",
fprintf(p->out,"%-*.*s%s",w,w,"-------------------------------------"
"------------------------------------------------------------",
i==nArg-1 ? "\n": " ");
}
}
@ -202,6 +204,23 @@ static int callback(void *pArg, int nArg, char **azArg, char **azCol){
}
break;
}
case MODE_Html: {
if( p->cnt++==0 && p->showHeader ){
fprintf(p->out,"<TR>");
for(i=0; i<nArg; i++){
fprintf(p->out,"<TH>%s</TH>",azCol[i]);
}
fprintf(p->out,"</TR>\n");
}
for(i=0; i<nArg; i++){
fprintf(p->out,"<TR>");
for(i=0; i<nArg; i++){
fprintf(p->out,"<TD>%s</TD>",azArg[i]);
}
fprintf(p->out,"</TD>\n");
}
break;
}
}
return 0;
}
@ -215,8 +234,8 @@ static char zHelp[] =
".header ON|OFF Turn display of headers on or off\n"
".help Show this message\n"
".indices TABLE Show names of all indices on TABLE\n"
".mode MODE Set mode to one of \"line\", \"column\", or"
" \"list\"\n"
".mode MODE Set mode to one of \"line\", \"column\", "
"\"list\", or \"html\"\n"
".output FILENAME Send output to FILENAME\n"
".output stdout Send output to the screen\n"
".schema ?TABLE? Show the CREATE statements\n"
@ -317,6 +336,8 @@ static void do_meta_command(char *zLine, sqlite *db, struct callback_data *p){
p->mode = MODE_Column;
}else if( strncmp(azArg[1],"list",n2)==0 ){
p->mode = MODE_List;
}else if( strncmp(azArg[1],"html",n2)==0 ){
p->mode = MODE_Html;
}
}else
@ -391,10 +412,45 @@ static void do_meta_command(char *zLine, sqlite *db, struct callback_data *p){
int main(int argc, char **argv){
sqlite *db;
char *zErrMsg = 0;
char *argv0 = argv[0];
struct callback_data data;
memset(&data, 0, sizeof(data));
data.mode = MODE_List;
strcpy(data.separator,"|");
data.showHeader = 0;
while( argc>=2 && argv[1][0]=='-' ){
if( strcmp(argv[1],"-html")==0 ){
data.mode = MODE_Html;
argc--;
argv++;
}else if( strcmp(argv[1],"-list")==0 ){
data.mode = MODE_List;
argc--;
argv++;
}else if( strcmp(argv[1],"-line")==0 ){
data.mode = MODE_Line;
argc--;
argv++;
}else if( argc>=3 && strcmp(argv[0],"-separator")==0 ){
sprintf(data.separator,"%.*s",sizeof(data.separator)-1,argv[2]);
argc -= 2;
argv += 2;
}else if( strcmp(argv[1],"-header")==0 ){
data.showHeader = 1;
argc--;
argv++;
}else if( strcmp(argv[1],"-noheader")==0 ){
data.showHeader = 0;
argc--;
argv++;
}else{
fprintf(stderr,"%s: unknown option: %s\n", argv0, argv[1]);
return 1;
}
}
if( argc!=2 && argc!=3 ){
fprintf(stderr,"Usage: %s FILENAME ?SQL?\n", *argv);
fprintf(stderr,"Usage: %s ?OPTIONS? FILENAME ?SQL?\n", argv0);
exit(1);
}
db = sqlite_open(argv[1], 0666, &zErrMsg);
@ -402,11 +458,8 @@ int main(int argc, char **argv){
fprintf(stderr,"Unable to open database \"%s\": %s\n", argv[1], zErrMsg);
exit(1);
}
memset(&data, 0, sizeof(data));
data.out = stdout;
if( argc==3 ){
data.mode = MODE_List;
strcpy(data.separator,"|");
if( sqlite_exec(db, argv[2], callback, &data, &zErrMsg)!=0 && zErrMsg!=0 ){
fprintf(stderr,"SQL error: %s\n", zErrMsg);
exit(1);
@ -416,9 +469,6 @@ int main(int argc, char **argv){
char *zSql = 0;
int nSql = 0;
int istty = isatty(0);
data.mode = MODE_Line;
strcpy(data.separator,"|");
data.showHeader = 0;
if( istty ){
printf(
"Enter \".help\" for instructions\n"
@ -438,7 +488,7 @@ int main(int argc, char **argv){
int len = strlen(zLine);
zSql = realloc( zSql, nSql + len + 2 );
if( zSql==0 ){
fprintf(stderr,"%s: out of memory!\n", *argv);
fprintf(stderr,"%s: out of memory!\n", argv0);
exit(1);
}
strcpy(&zSql[nSql++], "\n");