From: shane Date: Fri, 23 Oct 2009 01:27:39 +0000 (+0000) Subject: In shell, ensure that do_meta_command() returns consistent error values. X-Git-Tag: fts3-refactor~62 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9bd1b449442b3e8faeb2da6607cf5a52edc5e96c;p=thirdparty%2Fsqlite.git 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 --- diff --git a/manifest b/manifest index ff36b082a1..d92eca6c16 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sshell,\smodified\s"import"\shandling\sto\sensure\serror\scode\sreturned\scorrectly\son\sexit.\nTicket\s[bd770b2c52]. -D 2009-10-23T00:37:16 +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-23T01:27:39 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in a77dfde96ad86aafd3f71651a4333a104debe86a F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -161,7 +161,7 @@ F src/random.c 676b9d7ac820fe81e6fb2394ac8c10cff7f38628 F src/resolve.c 3ac31c7181fab03732125fdedf7c2091a5c07f1b F src/rowset.c c64dafba1f9fd876836c8db8682966b9d197eb1f F src/select.c cbe366a0ce114856e66f5daf0f848d7c48a88298 -F src/shell.c 4b1d54c6deae0b9a9e477a5dbed1e9853f958f91 +F src/shell.c 19c86a22e32096a3bc6845b200a793fb9f2d0376 F src/sqlite.h.in 5853e42a4066a6c9c3bf6592a9d57d0012bfdb90 F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17 F src/sqliteInt.h 3b00a3ce79e60c5a47c342b738c8b75013f3ec84 @@ -760,7 +760,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 790402c150e2026cd0c147a4cadbe9b9ab97b688 -R ca40506625a393ee29409c8b893be283 +P 009efad0f4293dd08a6f2f16d8eb9e94e2f962ca +R f9d7f2aaa2e65e337a1efea04bfa77d8 U shane -Z 5f0f64058678a5e5ac4bd6553c1be92d +Z 4f0172d3d5c0c4efeae4e77b96e3ca4c diff --git a/manifest.uuid b/manifest.uuid index b7d0685d94..28969a3cf0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -009efad0f4293dd08a6f2f16d8eb9e94e2f962ca \ No newline at end of file +1ebac9edddd28bdbbd9815fdb64eb9129f39f94a \ No newline at end of file diff --git a/src/shell.c b/src/shell.c index 6320015ca9..e4346edc8d 100644 --- a/src/shell.c +++ b/src/shell.c @@ -2302,7 +2302,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){ /* Process the input line. */ - if( nArg==0 ) return rc; + if( nArg==0 ) return 0; /* no tokens, no error */ n = strlen30(azArg[0]); c = azArg[0][0]; 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; sqlite3 *pDest; sqlite3_backup *pBackup; - int rc; if( nArg==2 ){ zDestFile = azArg[1]; zDb = "main"; @@ -2320,7 +2319,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){ } rc = sqlite3_open(zDestFile, &pDest); if( rc!=SQLITE_OK ){ - fprintf(stderr, "Error: cannot open %s\n", zDestFile); + fprintf(stderr, "Error: cannot open \"%s\"\n", zDestFile); sqlite3_close(pDest); 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 ){} sqlite3_backup_finish(pBackup); if( rc==SQLITE_DONE ){ - rc = SQLITE_OK; + rc = 0; }else{ fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); + rc = 1; } sqlite3_close(pDest); }else @@ -2360,6 +2360,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){ if( zErrMsg ){ fprintf(stderr,"Error: %s\n", zErrMsg); sqlite3_free(zErrMsg); + rc = 1; } }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 *zFile = azArg[1]; /* The file from which to extract data */ sqlite3_stmt *pStmt = NULL; /* A statement */ - int rc; /* Result code */ int nCol; /* Number of columns in the table */ int nByte; /* Number of bytes in an SQL string */ 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); sqlite3_finalize(pStmt); pStmt = 0; - if( nCol==0 ) return 0; + if( nCol==0 ) return 0; /* no columns, no error */ zSql = malloc( nByte + 20 + nCol*2 ); if( zSql==0 ){ 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"); if( in==0 ){ - fprintf(stderr, "Error: cannot open file: %s\n", zFile); + fprintf(stderr, "Error: cannot open \"%s\"\n", zFile); sqlite3_finalize(pStmt); return 1; } @@ -2621,6 +2621,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){ if( zErrMsg ){ fprintf(stderr,"Error: %s\n", zErrMsg); sqlite3_free(zErrMsg); + rc = 1; } }else @@ -2637,8 +2638,9 @@ static int do_meta_command(char *zLine, struct callback_data *p){ }else{ iotrace = fopen(azArg[1], "w"); if( iotrace==0 ){ - fprintf(stderr, "cannot open \"%s\"\n", azArg[1]); + fprintf(stderr, "Error: cannot open \"%s\"\n", azArg[1]); sqlite3IoTrace = 0; + rc = 1; }else{ 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 ){ const char *zFile, *zProc; char *zErrMsg = 0; - int rc; zFile = azArg[1]; zProc = nArg>=3 ? azArg[2] : 0; open_db(p); rc = sqlite3_load_extension(p->db, zFile, zProc, &zErrMsg); if( rc!=SQLITE_OK ){ - fprintf(stderr, "%s\n", zErrMsg); + fprintf(stderr, "Error: %s\n", zErrMsg); sqlite3_free(zErrMsg); rc = 1; } @@ -2693,8 +2694,9 @@ static int do_meta_command(char *zLine, struct callback_data *p){ set_table_name(p, "table"); } }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"); + rc = 1; } }else @@ -2713,8 +2715,9 @@ static int do_meta_command(char *zLine, struct callback_data *p){ }else{ p->out = fopen(azArg[1], "wb"); 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; + rc = 1; } else { 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 ){ FILE *alt = fopen(azArg[1], "rb"); if( alt==0 ){ - fprintf(stderr,"can't open \"%s\"\n", azArg[1]); + fprintf(stderr,"Error: cannot open \"%s\"\n", azArg[1]); + rc = 1; }else{ - process_input(p, alt); + rc = process_input(p, alt); fclose(alt); } }else @@ -2749,7 +2753,6 @@ static int do_meta_command(char *zLine, struct callback_data *p){ const char *zDb; sqlite3 *pSrc; sqlite3_backup *pBackup; - int rc; int nTimeout = 0; if( nArg==2 ){ @@ -2761,7 +2764,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){ } rc = sqlite3_open(zSrcFile, &pSrc); if( rc!=SQLITE_OK ){ - fprintf(stderr, "Error: cannot open %s\n", zSrcFile); + fprintf(stderr, "Error: cannot open \"%s\"\n", zSrcFile); sqlite3_close(pSrc); return 1; } @@ -2781,11 +2784,13 @@ static int do_meta_command(char *zLine, struct callback_data *p){ } sqlite3_backup_finish(pBackup); if( rc==SQLITE_DONE ){ - rc = SQLITE_OK; + rc = 0; }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{ fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); + rc = 1; } sqlite3_close(pSrc); }else @@ -2813,6 +2818,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){ new_colv[0] = "sql"; new_colv[1] = 0; callback(&data, 1, new_argv, new_colv); + rc = SQLITE_OK; }else if( strcmp(azArg[1],"sqlite_temp_master")==0 ){ char *new_argv[2], *new_colv[2]; 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[1] = 0; callback(&data, 1, new_argv, new_colv); + rc = SQLITE_OK; }else{ zShellStatic = azArg[1]; - sqlite3_exec(p->db, + rc = sqlite3_exec(p->db, "SELECT sql FROM " " (SELECT sql sql, type type, tbl_name tbl_name, name name" " FROM sqlite_master UNION ALL" @@ -2839,7 +2846,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){ zShellStatic = 0; } }else{ - sqlite3_exec(p->db, + rc = sqlite3_exec(p->db, "SELECT sql FROM " " (SELECT sql sql, type type, tbl_name tbl_name, name name" " FROM sqlite_master UNION ALL" @@ -2852,6 +2859,12 @@ static int do_meta_command(char *zLine, struct callback_data *p){ if( zErrMsg ){ fprintf(stderr,"Error: %s\n", zErrMsg); sqlite3_free(zErrMsg); + rc = 1; + }else if( rc != SQLITE_OK ){ + fprintf(stderr,"Error: querying schema information\n"); + rc = 1; + }else{ + rc = 0; } }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 ){ char **azResult; - int nRow, rc; + int nRow; char *zErrMsg; open_db(p); if( nArg==1 ){ @@ -2912,8 +2925,11 @@ static int do_meta_command(char *zLine, struct callback_data *p){ if( zErrMsg ){ fprintf(stderr,"Error: %s\n", zErrMsg); sqlite3_free(zErrMsg); - } - if( rc==SQLITE_OK ){ + rc = 1; + }else if( rc != SQLITE_OK ){ + fprintf(stderr,"Error: querying sqlite_master and sqlite_temp_master\n"); + rc = 1; + }else{ int len, maxlen = 0; int i, j; int nPrintCol, nPrintRow; @@ -2932,8 +2948,6 @@ static int do_meta_command(char *zLine, struct callback_data *p){ } printf("\n"); } - }else{ - rc = 1; } sqlite3_free_table(azResult); }else @@ -2951,10 +2965,10 @@ static int do_meta_command(char *zLine, struct callback_data *p){ } }else - { - fprintf(stderr, "unknown command or invalid arguments: " + fprintf(stderr, "Error: unknown command or invalid arguments: " " \"%s\". Enter \".help\" for help\n", azArg[0]); + rc = 1; } return rc; @@ -3079,7 +3093,7 @@ static int process_input(struct callback_data *p, FILE *in){ nSql = strlen30(zLine); zSql = malloc( nSql+3 ); if( zSql==0 ){ - fprintf(stderr, "out of memory\n"); + fprintf(stderr, "Error: out of memory\n"); exit(1); } memcpy(zSql, zLine, nSql+1); @@ -3089,7 +3103,7 @@ static int process_input(struct callback_data *p, FILE *in){ int len = strlen30(zLine); zSql = realloc( zSql, nSql + len + 4 ); if( zSql==0 ){ - fprintf(stderr,"%s: out of memory!\n", Argv0); + fprintf(stderr,"Error: out of memory\n"); exit(1); } zSql[nSql++] = '\n'; @@ -3107,9 +3121,9 @@ static int process_input(struct callback_data *p, FILE *in){ char zPrefix[100]; if( in!=0 || !stdin_is_interactive ){ sqlite3_snprintf(sizeof(zPrefix), zPrefix, - "SQL error near line %d:", startline); + "Error: near line %d:", startline); }else{ - sqlite3_snprintf(sizeof(zPrefix), zPrefix, "SQL error:"); + sqlite3_snprintf(sizeof(zPrefix), zPrefix, "Error:"); } if( zErrMsg!=0 ){ 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 ** 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 */ const char *sqliterc_override /* Name of config file. NULL to use default */ ){ @@ -3208,6 +3224,7 @@ static void process_sqliterc( char *zBuf = 0; FILE *in = NULL; int nBuf; + int rc = 0; if (sqliterc == NULL) { home_dir = find_home_dir(); @@ -3215,7 +3232,7 @@ static void process_sqliterc( #if !defined(__RTP__) && !defined(_WRS_KERNEL) fprintf(stderr,"%s: cannot locate your home directory!\n", Argv0); #endif - return; + return 1; } nBuf = strlen30(home_dir) + 16; zBuf = malloc( nBuf ); @@ -3232,11 +3249,11 @@ static void process_sqliterc( if( stdin_is_interactive ){ printf("-- Loading resources from %s\n",sqliterc); } - process_input(p,in); + rc = process_input(p,in); fclose(in); } free(zBuf); - return; + return rc; } /*