1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-05 04:30:38 +03:00

In shell, ensure that do_meta_command() returns consistent error values.

Adjusted the text of some error message to be more consistent.
Ticket [beb2dd69ad].

FossilOrigin-Name: 1ebac9edddd28bdbbd9815fdb64eb9129f39f94a
This commit is contained in:
shane
2009-10-23 01:27:39 +00:00
parent 916f961b9e
commit 9bd1b44944
3 changed files with 59 additions and 42 deletions

View File

@@ -1,5 +1,5 @@
C In\sshell,\smodified\s"import"\shandling\sto\sensure\serror\scode\sreturned\scorrectly\son\sexit.\nTicket\s[bd770b2c52]. C In\sshell,\sensure\sthat\sdo_meta_command()\sreturns\sconsistent\serror\svalues.\s\s\nAdjusted\sthe\stext\sof\ssome\serror\smessage\sto\sbe\smore\sconsistent.\nTicket\s[beb2dd69ad].
D 2009-10-23T00:37:16 D 2009-10-23T01:27:39
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in a77dfde96ad86aafd3f71651a4333a104debe86a F Makefile.in a77dfde96ad86aafd3f71651a4333a104debe86a
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -161,7 +161,7 @@ F src/random.c 676b9d7ac820fe81e6fb2394ac8c10cff7f38628
F src/resolve.c 3ac31c7181fab03732125fdedf7c2091a5c07f1b F src/resolve.c 3ac31c7181fab03732125fdedf7c2091a5c07f1b
F src/rowset.c c64dafba1f9fd876836c8db8682966b9d197eb1f F src/rowset.c c64dafba1f9fd876836c8db8682966b9d197eb1f
F src/select.c cbe366a0ce114856e66f5daf0f848d7c48a88298 F src/select.c cbe366a0ce114856e66f5daf0f848d7c48a88298
F src/shell.c 4b1d54c6deae0b9a9e477a5dbed1e9853f958f91 F src/shell.c 19c86a22e32096a3bc6845b200a793fb9f2d0376
F src/sqlite.h.in 5853e42a4066a6c9c3bf6592a9d57d0012bfdb90 F src/sqlite.h.in 5853e42a4066a6c9c3bf6592a9d57d0012bfdb90
F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17 F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17
F src/sqliteInt.h 3b00a3ce79e60c5a47c342b738c8b75013f3ec84 F src/sqliteInt.h 3b00a3ce79e60c5a47c342b738c8b75013f3ec84
@@ -760,7 +760,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
P 790402c150e2026cd0c147a4cadbe9b9ab97b688 P 009efad0f4293dd08a6f2f16d8eb9e94e2f962ca
R ca40506625a393ee29409c8b893be283 R f9d7f2aaa2e65e337a1efea04bfa77d8
U shane U shane
Z 5f0f64058678a5e5ac4bd6553c1be92d Z 4f0172d3d5c0c4efeae4e77b96e3ca4c

View File

@@ -1 +1 @@
009efad0f4293dd08a6f2f16d8eb9e94e2f962ca 1ebac9edddd28bdbbd9815fdb64eb9129f39f94a

View File

@@ -2302,7 +2302,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
/* Process the input line. /* Process the input line.
*/ */
if( nArg==0 ) return rc; if( nArg==0 ) return 0; /* no tokens, no error */
n = strlen30(azArg[0]); n = strlen30(azArg[0]);
c = azArg[0][0]; c = azArg[0][0];
if( c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0 && nArg>1 ){ if( c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0 && nArg>1 ){
@@ -2310,7 +2310,6 @@ static int do_meta_command(char *zLine, struct callback_data *p){
const char *zDb; const char *zDb;
sqlite3 *pDest; sqlite3 *pDest;
sqlite3_backup *pBackup; sqlite3_backup *pBackup;
int rc;
if( nArg==2 ){ if( nArg==2 ){
zDestFile = azArg[1]; zDestFile = azArg[1];
zDb = "main"; zDb = "main";
@@ -2320,7 +2319,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
} }
rc = sqlite3_open(zDestFile, &pDest); rc = sqlite3_open(zDestFile, &pDest);
if( rc!=SQLITE_OK ){ if( rc!=SQLITE_OK ){
fprintf(stderr, "Error: cannot open %s\n", zDestFile); fprintf(stderr, "Error: cannot open \"%s\"\n", zDestFile);
sqlite3_close(pDest); sqlite3_close(pDest);
return 1; return 1;
} }
@@ -2334,9 +2333,10 @@ static int do_meta_command(char *zLine, struct callback_data *p){
while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK ){} while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK ){}
sqlite3_backup_finish(pBackup); sqlite3_backup_finish(pBackup);
if( rc==SQLITE_DONE ){ if( rc==SQLITE_DONE ){
rc = SQLITE_OK; rc = 0;
}else{ }else{
fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
rc = 1;
} }
sqlite3_close(pDest); sqlite3_close(pDest);
}else }else
@@ -2360,6 +2360,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
if( zErrMsg ){ if( zErrMsg ){
fprintf(stderr,"Error: %s\n", zErrMsg); fprintf(stderr,"Error: %s\n", zErrMsg);
sqlite3_free(zErrMsg); sqlite3_free(zErrMsg);
rc = 1;
} }
}else }else
@@ -2486,7 +2487,6 @@ static int do_meta_command(char *zLine, struct callback_data *p){
char *zTable = azArg[2]; /* Insert data into this table */ char *zTable = azArg[2]; /* Insert data into this table */
char *zFile = azArg[1]; /* The file from which to extract data */ char *zFile = azArg[1]; /* The file from which to extract data */
sqlite3_stmt *pStmt = NULL; /* A statement */ sqlite3_stmt *pStmt = NULL; /* A statement */
int rc; /* Result code */
int nCol; /* Number of columns in the table */ int nCol; /* Number of columns in the table */
int nByte; /* Number of bytes in an SQL string */ int nByte; /* Number of bytes in an SQL string */
int i, j; /* Loop counters */ int i, j; /* Loop counters */
@@ -2520,7 +2520,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
nCol = sqlite3_column_count(pStmt); nCol = sqlite3_column_count(pStmt);
sqlite3_finalize(pStmt); sqlite3_finalize(pStmt);
pStmt = 0; pStmt = 0;
if( nCol==0 ) return 0; if( nCol==0 ) return 0; /* no columns, no error */
zSql = malloc( nByte + 20 + nCol*2 ); zSql = malloc( nByte + 20 + nCol*2 );
if( zSql==0 ){ if( zSql==0 ){
fprintf(stderr, "Error: out of memory\n"); fprintf(stderr, "Error: out of memory\n");
@@ -2543,7 +2543,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
} }
in = fopen(zFile, "rb"); in = fopen(zFile, "rb");
if( in==0 ){ if( in==0 ){
fprintf(stderr, "Error: cannot open file: %s\n", zFile); fprintf(stderr, "Error: cannot open \"%s\"\n", zFile);
sqlite3_finalize(pStmt); sqlite3_finalize(pStmt);
return 1; return 1;
} }
@@ -2621,6 +2621,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
if( zErrMsg ){ if( zErrMsg ){
fprintf(stderr,"Error: %s\n", zErrMsg); fprintf(stderr,"Error: %s\n", zErrMsg);
sqlite3_free(zErrMsg); sqlite3_free(zErrMsg);
rc = 1;
} }
}else }else
@@ -2637,8 +2638,9 @@ static int do_meta_command(char *zLine, struct callback_data *p){
}else{ }else{
iotrace = fopen(azArg[1], "w"); iotrace = fopen(azArg[1], "w");
if( iotrace==0 ){ if( iotrace==0 ){
fprintf(stderr, "cannot open \"%s\"\n", azArg[1]); fprintf(stderr, "Error: cannot open \"%s\"\n", azArg[1]);
sqlite3IoTrace = 0; sqlite3IoTrace = 0;
rc = 1;
}else{ }else{
sqlite3IoTrace = iotracePrintf; sqlite3IoTrace = iotracePrintf;
} }
@@ -2650,13 +2652,12 @@ static int do_meta_command(char *zLine, struct callback_data *p){
if( c=='l' && strncmp(azArg[0], "load", n)==0 && nArg>=2 ){ if( c=='l' && strncmp(azArg[0], "load", n)==0 && nArg>=2 ){
const char *zFile, *zProc; const char *zFile, *zProc;
char *zErrMsg = 0; char *zErrMsg = 0;
int rc;
zFile = azArg[1]; zFile = azArg[1];
zProc = nArg>=3 ? azArg[2] : 0; zProc = nArg>=3 ? azArg[2] : 0;
open_db(p); open_db(p);
rc = sqlite3_load_extension(p->db, zFile, zProc, &zErrMsg); rc = sqlite3_load_extension(p->db, zFile, zProc, &zErrMsg);
if( rc!=SQLITE_OK ){ if( rc!=SQLITE_OK ){
fprintf(stderr, "%s\n", zErrMsg); fprintf(stderr, "Error: %s\n", zErrMsg);
sqlite3_free(zErrMsg); sqlite3_free(zErrMsg);
rc = 1; rc = 1;
} }
@@ -2693,8 +2694,9 @@ static int do_meta_command(char *zLine, struct callback_data *p){
set_table_name(p, "table"); set_table_name(p, "table");
} }
}else { }else {
fprintf(stderr,"mode should be one of: " fprintf(stderr,"Error: mode should be one of: "
"column csv html insert line list tabs tcl\n"); "column csv html insert line list tabs tcl\n");
rc = 1;
} }
}else }else
@@ -2713,8 +2715,9 @@ static int do_meta_command(char *zLine, struct callback_data *p){
}else{ }else{
p->out = fopen(azArg[1], "wb"); p->out = fopen(azArg[1], "wb");
if( p->out==0 ){ if( p->out==0 ){
fprintf(stderr,"can't write to \"%s\"\n", azArg[1]); fprintf(stderr,"Error: cannot write to \"%s\"\n", azArg[1]);
p->out = stdout; p->out = stdout;
rc = 1;
} else { } else {
sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", azArg[1]); sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", azArg[1]);
} }
@@ -2737,9 +2740,10 @@ static int do_meta_command(char *zLine, struct callback_data *p){
if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 && nArg==2 ){ if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 && nArg==2 ){
FILE *alt = fopen(azArg[1], "rb"); FILE *alt = fopen(azArg[1], "rb");
if( alt==0 ){ if( alt==0 ){
fprintf(stderr,"can't open \"%s\"\n", azArg[1]); fprintf(stderr,"Error: cannot open \"%s\"\n", azArg[1]);
rc = 1;
}else{ }else{
process_input(p, alt); rc = process_input(p, alt);
fclose(alt); fclose(alt);
} }
}else }else
@@ -2749,7 +2753,6 @@ static int do_meta_command(char *zLine, struct callback_data *p){
const char *zDb; const char *zDb;
sqlite3 *pSrc; sqlite3 *pSrc;
sqlite3_backup *pBackup; sqlite3_backup *pBackup;
int rc;
int nTimeout = 0; int nTimeout = 0;
if( nArg==2 ){ if( nArg==2 ){
@@ -2761,7 +2764,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
} }
rc = sqlite3_open(zSrcFile, &pSrc); rc = sqlite3_open(zSrcFile, &pSrc);
if( rc!=SQLITE_OK ){ if( rc!=SQLITE_OK ){
fprintf(stderr, "Error: cannot open %s\n", zSrcFile); fprintf(stderr, "Error: cannot open \"%s\"\n", zSrcFile);
sqlite3_close(pSrc); sqlite3_close(pSrc);
return 1; return 1;
} }
@@ -2781,11 +2784,13 @@ static int do_meta_command(char *zLine, struct callback_data *p){
} }
sqlite3_backup_finish(pBackup); sqlite3_backup_finish(pBackup);
if( rc==SQLITE_DONE ){ if( rc==SQLITE_DONE ){
rc = SQLITE_OK; rc = 0;
}else if( rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){ }else if( rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){
fprintf(stderr, "source database is busy\n"); fprintf(stderr, "Error: source database is busy\n");
rc = 1;
}else{ }else{
fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
rc = 1;
} }
sqlite3_close(pSrc); sqlite3_close(pSrc);
}else }else
@@ -2813,6 +2818,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
new_colv[0] = "sql"; new_colv[0] = "sql";
new_colv[1] = 0; new_colv[1] = 0;
callback(&data, 1, new_argv, new_colv); callback(&data, 1, new_argv, new_colv);
rc = SQLITE_OK;
}else if( strcmp(azArg[1],"sqlite_temp_master")==0 ){ }else if( strcmp(azArg[1],"sqlite_temp_master")==0 ){
char *new_argv[2], *new_colv[2]; char *new_argv[2], *new_colv[2];
new_argv[0] = "CREATE TEMP TABLE sqlite_temp_master (\n" new_argv[0] = "CREATE TEMP TABLE sqlite_temp_master (\n"
@@ -2826,9 +2832,10 @@ static int do_meta_command(char *zLine, struct callback_data *p){
new_colv[0] = "sql"; new_colv[0] = "sql";
new_colv[1] = 0; new_colv[1] = 0;
callback(&data, 1, new_argv, new_colv); callback(&data, 1, new_argv, new_colv);
rc = SQLITE_OK;
}else{ }else{
zShellStatic = azArg[1]; zShellStatic = azArg[1];
sqlite3_exec(p->db, rc = sqlite3_exec(p->db,
"SELECT sql FROM " "SELECT sql FROM "
" (SELECT sql sql, type type, tbl_name tbl_name, name name" " (SELECT sql sql, type type, tbl_name tbl_name, name name"
" FROM sqlite_master UNION ALL" " FROM sqlite_master UNION ALL"
@@ -2839,7 +2846,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
zShellStatic = 0; zShellStatic = 0;
} }
}else{ }else{
sqlite3_exec(p->db, rc = sqlite3_exec(p->db,
"SELECT sql FROM " "SELECT sql FROM "
" (SELECT sql sql, type type, tbl_name tbl_name, name name" " (SELECT sql sql, type type, tbl_name tbl_name, name name"
" FROM sqlite_master UNION ALL" " FROM sqlite_master UNION ALL"
@@ -2852,6 +2859,12 @@ static int do_meta_command(char *zLine, struct callback_data *p){
if( zErrMsg ){ if( zErrMsg ){
fprintf(stderr,"Error: %s\n", zErrMsg); fprintf(stderr,"Error: %s\n", zErrMsg);
sqlite3_free(zErrMsg); sqlite3_free(zErrMsg);
rc = 1;
}else if( rc != SQLITE_OK ){
fprintf(stderr,"Error: querying schema information\n");
rc = 1;
}else{
rc = 0;
} }
}else }else
@@ -2883,7 +2896,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
if( c=='t' && n>1 && strncmp(azArg[0], "tables", n)==0 ){ if( c=='t' && n>1 && strncmp(azArg[0], "tables", n)==0 ){
char **azResult; char **azResult;
int nRow, rc; int nRow;
char *zErrMsg; char *zErrMsg;
open_db(p); open_db(p);
if( nArg==1 ){ if( nArg==1 ){
@@ -2912,8 +2925,11 @@ static int do_meta_command(char *zLine, struct callback_data *p){
if( zErrMsg ){ if( zErrMsg ){
fprintf(stderr,"Error: %s\n", zErrMsg); fprintf(stderr,"Error: %s\n", zErrMsg);
sqlite3_free(zErrMsg); sqlite3_free(zErrMsg);
} rc = 1;
if( rc==SQLITE_OK ){ }else if( rc != SQLITE_OK ){
fprintf(stderr,"Error: querying sqlite_master and sqlite_temp_master\n");
rc = 1;
}else{
int len, maxlen = 0; int len, maxlen = 0;
int i, j; int i, j;
int nPrintCol, nPrintRow; int nPrintCol, nPrintRow;
@@ -2932,8 +2948,6 @@ static int do_meta_command(char *zLine, struct callback_data *p){
} }
printf("\n"); printf("\n");
} }
}else{
rc = 1;
} }
sqlite3_free_table(azResult); sqlite3_free_table(azResult);
}else }else
@@ -2951,10 +2965,10 @@ static int do_meta_command(char *zLine, struct callback_data *p){
} }
}else }else
{ {
fprintf(stderr, "unknown command or invalid arguments: " fprintf(stderr, "Error: unknown command or invalid arguments: "
" \"%s\". Enter \".help\" for help\n", azArg[0]); " \"%s\". Enter \".help\" for help\n", azArg[0]);
rc = 1;
} }
return rc; return rc;
@@ -3079,7 +3093,7 @@ static int process_input(struct callback_data *p, FILE *in){
nSql = strlen30(zLine); nSql = strlen30(zLine);
zSql = malloc( nSql+3 ); zSql = malloc( nSql+3 );
if( zSql==0 ){ if( zSql==0 ){
fprintf(stderr, "out of memory\n"); fprintf(stderr, "Error: out of memory\n");
exit(1); exit(1);
} }
memcpy(zSql, zLine, nSql+1); memcpy(zSql, zLine, nSql+1);
@@ -3089,7 +3103,7 @@ static int process_input(struct callback_data *p, FILE *in){
int len = strlen30(zLine); int len = strlen30(zLine);
zSql = realloc( zSql, nSql + len + 4 ); zSql = realloc( zSql, nSql + len + 4 );
if( zSql==0 ){ if( zSql==0 ){
fprintf(stderr,"%s: out of memory!\n", Argv0); fprintf(stderr,"Error: out of memory\n");
exit(1); exit(1);
} }
zSql[nSql++] = '\n'; zSql[nSql++] = '\n';
@@ -3107,9 +3121,9 @@ static int process_input(struct callback_data *p, FILE *in){
char zPrefix[100]; char zPrefix[100];
if( in!=0 || !stdin_is_interactive ){ if( in!=0 || !stdin_is_interactive ){
sqlite3_snprintf(sizeof(zPrefix), zPrefix, sqlite3_snprintf(sizeof(zPrefix), zPrefix,
"SQL error near line %d:", startline); "Error: near line %d:", startline);
}else{ }else{
sqlite3_snprintf(sizeof(zPrefix), zPrefix, "SQL error:"); sqlite3_snprintf(sizeof(zPrefix), zPrefix, "Error:");
} }
if( zErrMsg!=0 ){ if( zErrMsg!=0 ){
fprintf(stderr, "%s %s\n", zPrefix, zErrMsg); fprintf(stderr, "%s %s\n", zPrefix, zErrMsg);
@@ -3198,8 +3212,10 @@ static char *find_home_dir(void){
/* /*
** Read input from the file given by sqliterc_override. Or if that ** Read input from the file given by sqliterc_override. Or if that
** parameter is NULL, take input from ~/.sqliterc ** parameter is NULL, take input from ~/.sqliterc
**
** Returns the number of errors.
*/ */
static void process_sqliterc( static int process_sqliterc(
struct callback_data *p, /* Configuration data */ struct callback_data *p, /* Configuration data */
const char *sqliterc_override /* Name of config file. NULL to use default */ const char *sqliterc_override /* Name of config file. NULL to use default */
){ ){
@@ -3208,6 +3224,7 @@ static void process_sqliterc(
char *zBuf = 0; char *zBuf = 0;
FILE *in = NULL; FILE *in = NULL;
int nBuf; int nBuf;
int rc = 0;
if (sqliterc == NULL) { if (sqliterc == NULL) {
home_dir = find_home_dir(); home_dir = find_home_dir();
@@ -3215,7 +3232,7 @@ static void process_sqliterc(
#if !defined(__RTP__) && !defined(_WRS_KERNEL) #if !defined(__RTP__) && !defined(_WRS_KERNEL)
fprintf(stderr,"%s: cannot locate your home directory!\n", Argv0); fprintf(stderr,"%s: cannot locate your home directory!\n", Argv0);
#endif #endif
return; return 1;
} }
nBuf = strlen30(home_dir) + 16; nBuf = strlen30(home_dir) + 16;
zBuf = malloc( nBuf ); zBuf = malloc( nBuf );
@@ -3232,11 +3249,11 @@ static void process_sqliterc(
if( stdin_is_interactive ){ if( stdin_is_interactive ){
printf("-- Loading resources from %s\n",sqliterc); printf("-- Loading resources from %s\n",sqliterc);
} }
process_input(p,in); rc = process_input(p,in);
fclose(in); fclose(in);
} }
free(zBuf); free(zBuf);
return; return rc;
} }
/* /*