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:
12
manifest
12
manifest
@ -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
|
||||
|
@ -1 +1 @@
|
||||
09054df318240f2f2b365f7b24655473c1ab6655
|
||||
9b8458bbcef19882f14f0e96575fc3f0a86df97a
|
74
src/shell.c
74
src/shell.c
@ -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");
|
||||
|
Reference in New Issue
Block a user