release.sh changes & fixes
[minix3.git] / external / public-domain / sqlite / dist / shell.c
blob31d3dd8fce29439c3aab89b96efa2666b81a92ed
1 /*
2 ** 2001 September 15
3 **
4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
6 **
7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give.
11 *************************************************************************
12 ** This file contains code to implement the "sqlite" command line
13 ** utility for accessing SQLite databases.
15 #if (defined(_WIN32) || defined(WIN32)) && !defined(_CRT_SECURE_NO_WARNINGS)
16 /* This needs to come before any includes for MSVC compiler */
17 #define _CRT_SECURE_NO_WARNINGS
18 #endif
21 ** Enable large-file support for fopen() and friends on unix.
23 #ifndef SQLITE_DISABLE_LFS
24 # define _LARGE_FILE 1
25 # ifndef _FILE_OFFSET_BITS
26 # define _FILE_OFFSET_BITS 64
27 # endif
28 # define _LARGEFILE_SOURCE 1
29 #endif
31 #include <stdlib.h>
32 #include <string.h>
33 #include <stdio.h>
34 #include <assert.h>
35 #include "sqlite3.h"
36 #include <ctype.h>
37 #include <stdarg.h>
39 #if !defined(_WIN32) && !defined(WIN32) && !defined(__OS2__)
40 # include <signal.h>
41 # if !defined(__RTP__) && !defined(_WRS_KERNEL)
42 # include <pwd.h>
43 # endif
44 # include <unistd.h>
45 # include <sys/types.h>
46 #endif
48 #ifdef __OS2__
49 # include <unistd.h>
50 #endif
52 #ifdef HAVE_EDITLINE
53 # include <editline/editline.h>
54 #endif
55 #if defined(HAVE_READLINE) && HAVE_READLINE==1
56 # include <readline/readline.h>
57 # include <readline/history.h>
58 #endif
59 #if !defined(HAVE_EDITLINE) && (!defined(HAVE_READLINE) || HAVE_READLINE!=1)
60 # define readline(p) local_getline(p,stdin)
61 # define add_history(X)
62 # define read_history(X)
63 # define write_history(X)
64 # define stifle_history(X)
65 #endif
67 #if defined(_WIN32) || defined(WIN32)
68 # include <io.h>
69 #define isatty(h) _isatty(h)
70 #define access(f,m) _access((f),(m))
71 #else
72 /* Make sure isatty() has a prototype.
74 extern int isatty(int);
75 #endif
77 #if defined(_WIN32_WCE)
78 /* Windows CE (arm-wince-mingw32ce-gcc) does not provide isatty()
79 * thus we always assume that we have a console. That can be
80 * overridden with the -batch command line option.
82 #define isatty(x) 1
83 #endif
85 /* True if the timer is enabled */
86 static int enableTimer = 0;
88 /* ctype macros that work with signed characters */
89 #define IsSpace(X) isspace((unsigned char)X)
90 #define IsDigit(X) isdigit((unsigned char)X)
91 #define ToLower(X) (char)tolower((unsigned char)X)
93 #if !defined(_WIN32) && !defined(WIN32) && !defined(__OS2__) && !defined(__RTP__) && !defined(_WRS_KERNEL)
94 #include <sys/time.h>
95 #include <sys/resource.h>
97 /* Saved resource information for the beginning of an operation */
98 static struct rusage sBegin;
101 ** Begin timing an operation
103 static void beginTimer(void){
104 if( enableTimer ){
105 getrusage(RUSAGE_SELF, &sBegin);
109 /* Return the difference of two time_structs in seconds */
110 static double timeDiff(struct timeval *pStart, struct timeval *pEnd){
111 return (pEnd->tv_usec - pStart->tv_usec)*0.000001 +
112 (double)(pEnd->tv_sec - pStart->tv_sec);
116 ** Print the timing results.
118 static void endTimer(void){
119 if( enableTimer ){
120 struct rusage sEnd;
121 getrusage(RUSAGE_SELF, &sEnd);
122 printf("CPU Time: user %f sys %f\n",
123 timeDiff(&sBegin.ru_utime, &sEnd.ru_utime),
124 timeDiff(&sBegin.ru_stime, &sEnd.ru_stime));
128 #define BEGIN_TIMER beginTimer()
129 #define END_TIMER endTimer()
130 #define HAS_TIMER 1
132 #elif (defined(_WIN32) || defined(WIN32))
134 #include <windows.h>
136 /* Saved resource information for the beginning of an operation */
137 static HANDLE hProcess;
138 static FILETIME ftKernelBegin;
139 static FILETIME ftUserBegin;
140 typedef BOOL (WINAPI *GETPROCTIMES)(HANDLE, LPFILETIME, LPFILETIME, LPFILETIME, LPFILETIME);
141 static GETPROCTIMES getProcessTimesAddr = NULL;
144 ** Check to see if we have timer support. Return 1 if necessary
145 ** support found (or found previously).
147 static int hasTimer(void){
148 if( getProcessTimesAddr ){
149 return 1;
150 } else {
151 /* GetProcessTimes() isn't supported in WIN95 and some other Windows versions.
152 ** See if the version we are running on has it, and if it does, save off
153 ** a pointer to it and the current process handle.
155 hProcess = GetCurrentProcess();
156 if( hProcess ){
157 HINSTANCE hinstLib = LoadLibrary(TEXT("Kernel32.dll"));
158 if( NULL != hinstLib ){
159 getProcessTimesAddr = (GETPROCTIMES) GetProcAddress(hinstLib, "GetProcessTimes");
160 if( NULL != getProcessTimesAddr ){
161 return 1;
163 FreeLibrary(hinstLib);
167 return 0;
171 ** Begin timing an operation
173 static void beginTimer(void){
174 if( enableTimer && getProcessTimesAddr ){
175 FILETIME ftCreation, ftExit;
176 getProcessTimesAddr(hProcess, &ftCreation, &ftExit, &ftKernelBegin, &ftUserBegin);
180 /* Return the difference of two FILETIME structs in seconds */
181 static double timeDiff(FILETIME *pStart, FILETIME *pEnd){
182 sqlite_int64 i64Start = *((sqlite_int64 *) pStart);
183 sqlite_int64 i64End = *((sqlite_int64 *) pEnd);
184 return (double) ((i64End - i64Start) / 10000000.0);
188 ** Print the timing results.
190 static void endTimer(void){
191 if( enableTimer && getProcessTimesAddr){
192 FILETIME ftCreation, ftExit, ftKernelEnd, ftUserEnd;
193 getProcessTimesAddr(hProcess, &ftCreation, &ftExit, &ftKernelEnd, &ftUserEnd);
194 printf("CPU Time: user %f sys %f\n",
195 timeDiff(&ftUserBegin, &ftUserEnd),
196 timeDiff(&ftKernelBegin, &ftKernelEnd));
200 #define BEGIN_TIMER beginTimer()
201 #define END_TIMER endTimer()
202 #define HAS_TIMER hasTimer()
204 #else
205 #define BEGIN_TIMER
206 #define END_TIMER
207 #define HAS_TIMER 0
208 #endif
211 ** Used to prevent warnings about unused parameters
213 #define UNUSED_PARAMETER(x) (void)(x)
216 ** If the following flag is set, then command execution stops
217 ** at an error if we are not interactive.
219 static int bail_on_error = 0;
222 ** Threat stdin as an interactive input if the following variable
223 ** is true. Otherwise, assume stdin is connected to a file or pipe.
225 static int stdin_is_interactive = 1;
228 ** The following is the open SQLite database. We make a pointer
229 ** to this database a static variable so that it can be accessed
230 ** by the SIGINT handler to interrupt database processing.
232 static sqlite3 *db = 0;
235 ** True if an interrupt (Control-C) has been received.
237 static volatile int seenInterrupt = 0;
240 ** This is the name of our program. It is set in main(), used
241 ** in a number of other places, mostly for error messages.
243 static char *Argv0;
246 ** Prompt strings. Initialized in main. Settable with
247 ** .prompt main continue
249 static char mainPrompt[20]; /* First line prompt. default: "sqlite> "*/
250 static char continuePrompt[20]; /* Continuation prompt. default: " ...> " */
253 ** Write I/O traces to the following stream.
255 #ifdef SQLITE_ENABLE_IOTRACE
256 static FILE *iotrace = 0;
257 #endif
260 ** This routine works like printf in that its first argument is a
261 ** format string and subsequent arguments are values to be substituted
262 ** in place of % fields. The result of formatting this string
263 ** is written to iotrace.
265 #ifdef SQLITE_ENABLE_IOTRACE
266 static void iotracePrintf(const char *zFormat, ...){
267 va_list ap;
268 char *z;
269 if( iotrace==0 ) return;
270 va_start(ap, zFormat);
271 z = sqlite3_vmprintf(zFormat, ap);
272 va_end(ap);
273 fprintf(iotrace, "%s", z);
274 sqlite3_free(z);
276 #endif
280 ** Determines if a string is a number of not.
282 static int isNumber(const char *z, int *realnum){
283 if( *z=='-' || *z=='+' ) z++;
284 if( !IsDigit(*z) ){
285 return 0;
287 z++;
288 if( realnum ) *realnum = 0;
289 while( IsDigit(*z) ){ z++; }
290 if( *z=='.' ){
291 z++;
292 if( !IsDigit(*z) ) return 0;
293 while( IsDigit(*z) ){ z++; }
294 if( realnum ) *realnum = 1;
296 if( *z=='e' || *z=='E' ){
297 z++;
298 if( *z=='+' || *z=='-' ) z++;
299 if( !IsDigit(*z) ) return 0;
300 while( IsDigit(*z) ){ z++; }
301 if( realnum ) *realnum = 1;
303 return *z==0;
307 ** A global char* and an SQL function to access its current value
308 ** from within an SQL statement. This program used to use the
309 ** sqlite_exec_printf() API to substitue a string into an SQL statement.
310 ** The correct way to do this with sqlite3 is to use the bind API, but
311 ** since the shell is built around the callback paradigm it would be a lot
312 ** of work. Instead just use this hack, which is quite harmless.
314 static const char *zShellStatic = 0;
315 static void shellstaticFunc(
316 sqlite3_context *context,
317 int argc,
318 sqlite3_value **argv
320 assert( 0==argc );
321 assert( zShellStatic );
322 UNUSED_PARAMETER(argc);
323 UNUSED_PARAMETER(argv);
324 sqlite3_result_text(context, zShellStatic, -1, SQLITE_STATIC);
329 ** This routine reads a line of text from FILE in, stores
330 ** the text in memory obtained from malloc() and returns a pointer
331 ** to the text. NULL is returned at end of file, or if malloc()
332 ** fails.
334 ** The interface is like "readline" but no command-line editing
335 ** is done.
337 static char *local_getline(char *zPrompt, FILE *in){
338 char *zLine;
339 int nLine;
340 int n;
342 if( zPrompt && *zPrompt ){
343 printf("%s",zPrompt);
344 fflush(stdout);
346 nLine = 100;
347 zLine = malloc( nLine );
348 if( zLine==0 ) return 0;
349 n = 0;
350 while( 1 ){
351 if( n+100>nLine ){
352 nLine = nLine*2 + 100;
353 zLine = realloc(zLine, nLine);
354 if( zLine==0 ) return 0;
356 if( fgets(&zLine[n], nLine - n, in)==0 ){
357 if( n==0 ){
358 free(zLine);
359 return 0;
361 zLine[n] = 0;
362 break;
364 while( zLine[n] ){ n++; }
365 if( n>0 && zLine[n-1]=='\n' ){
366 n--;
367 if( n>0 && zLine[n-1]=='\r' ) n--;
368 zLine[n] = 0;
369 break;
372 zLine = realloc( zLine, n+1 );
373 return zLine;
377 ** Retrieve a single line of input text.
379 ** zPrior is a string of prior text retrieved. If not the empty
380 ** string, then issue a continuation prompt.
382 static char *one_input_line(const char *zPrior, FILE *in){
383 char *zPrompt;
384 char *zResult;
385 if( in!=0 ){
386 return local_getline(0, in);
388 if( zPrior && zPrior[0] ){
389 zPrompt = continuePrompt;
390 }else{
391 zPrompt = mainPrompt;
393 zResult = readline(zPrompt);
394 #if defined(HAVE_READLINE) && HAVE_READLINE==1
395 if( zResult && *zResult ) add_history(zResult);
396 #endif
397 return zResult;
400 struct previous_mode_data {
401 int valid; /* Is there legit data in here? */
402 int mode;
403 int showHeader;
404 int colWidth[100];
408 ** An pointer to an instance of this structure is passed from
409 ** the main program to the callback. This is used to communicate
410 ** state and mode information.
412 struct callback_data {
413 sqlite3 *db; /* The database */
414 int echoOn; /* True to echo input commands */
415 int statsOn; /* True to display memory stats before each finalize */
416 int cnt; /* Number of records displayed so far */
417 FILE *out; /* Write results here */
418 int nErr; /* Number of errors seen */
419 int mode; /* An output mode setting */
420 int writableSchema; /* True if PRAGMA writable_schema=ON */
421 int showHeader; /* True to show column names in List or Column mode */
422 char *zDestTable; /* Name of destination table when MODE_Insert */
423 char separator[20]; /* Separator character for MODE_List */
424 int colWidth[100]; /* Requested width of each column when in column mode*/
425 int actualWidth[100]; /* Actual width of each column */
426 char nullvalue[20]; /* The text to print when a NULL comes back from
427 ** the database */
428 struct previous_mode_data explainPrev;
429 /* Holds the mode information just before
430 ** .explain ON */
431 char outfile[FILENAME_MAX]; /* Filename for *out */
432 const char *zDbFilename; /* name of the database file */
433 const char *zVfs; /* Name of VFS to use */
434 sqlite3_stmt *pStmt; /* Current statement if any. */
435 FILE *pLog; /* Write log output here */
439 ** These are the allowed modes.
441 #define MODE_Line 0 /* One column per line. Blank line between records */
442 #define MODE_Column 1 /* One record per line in neat columns */
443 #define MODE_List 2 /* One record per line with a separator */
444 #define MODE_Semi 3 /* Same as MODE_List but append ";" to each line */
445 #define MODE_Html 4 /* Generate an XHTML table */
446 #define MODE_Insert 5 /* Generate SQL "insert" statements */
447 #define MODE_Tcl 6 /* Generate ANSI-C or TCL quoted elements */
448 #define MODE_Csv 7 /* Quote strings, numbers are plain */
449 #define MODE_Explain 8 /* Like MODE_Column, but do not truncate data */
451 static const char *modeDescr[] = {
452 "line",
453 "column",
454 "list",
455 "semi",
456 "html",
457 "insert",
458 "tcl",
459 "csv",
460 "explain",
464 ** Number of elements in an array
466 #define ArraySize(X) (int)(sizeof(X)/sizeof(X[0]))
469 ** Compute a string length that is limited to what can be stored in
470 ** lower 30 bits of a 32-bit signed integer.
472 static int strlen30(const char *z){
473 const char *z2 = z;
474 while( *z2 ){ z2++; }
475 return 0x3fffffff & (int)(z2 - z);
479 ** A callback for the sqlite3_log() interface.
481 static void shellLog(void *pArg, int iErrCode, const char *zMsg){
482 struct callback_data *p = (struct callback_data*)pArg;
483 if( p->pLog==0 ) return;
484 fprintf(p->pLog, "(%d) %s\n", iErrCode, zMsg);
485 fflush(p->pLog);
489 ** Output the given string as a hex-encoded blob (eg. X'1234' )
491 static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){
492 int i;
493 char *zBlob = (char *)pBlob;
494 fprintf(out,"X'");
495 for(i=0; i<nBlob; i++){ fprintf(out,"%02x",zBlob[i]); }
496 fprintf(out,"'");
500 ** Output the given string as a quoted string using SQL quoting conventions.
502 static void output_quoted_string(FILE *out, const char *z){
503 int i;
504 int nSingle = 0;
505 for(i=0; z[i]; i++){
506 if( z[i]=='\'' ) nSingle++;
508 if( nSingle==0 ){
509 fprintf(out,"'%s'",z);
510 }else{
511 fprintf(out,"'");
512 while( *z ){
513 for(i=0; z[i] && z[i]!='\''; i++){}
514 if( i==0 ){
515 fprintf(out,"''");
516 z++;
517 }else if( z[i]=='\'' ){
518 fprintf(out,"%.*s''",i,z);
519 z += i+1;
520 }else{
521 fprintf(out,"%s",z);
522 break;
525 fprintf(out,"'");
530 ** Output the given string as a quoted according to C or TCL quoting rules.
532 static void output_c_string(FILE *out, const char *z){
533 unsigned int c;
534 fputc('"', out);
535 while( (c = *(z++))!=0 ){
536 if( c=='\\' ){
537 fputc(c, out);
538 fputc(c, out);
539 }else if( c=='\t' ){
540 fputc('\\', out);
541 fputc('t', out);
542 }else if( c=='\n' ){
543 fputc('\\', out);
544 fputc('n', out);
545 }else if( c=='\r' ){
546 fputc('\\', out);
547 fputc('r', out);
548 }else if( !isprint(c) ){
549 fprintf(out, "\\%03o", c&0xff);
550 }else{
551 fputc(c, out);
554 fputc('"', out);
558 ** Output the given string with characters that are special to
559 ** HTML escaped.
561 static void output_html_string(FILE *out, const char *z){
562 int i;
563 while( *z ){
564 for(i=0; z[i]
565 && z[i]!='<'
566 && z[i]!='&'
567 && z[i]!='>'
568 && z[i]!='\"'
569 && z[i]!='\'';
570 i++){}
571 if( i>0 ){
572 fprintf(out,"%.*s",i,z);
574 if( z[i]=='<' ){
575 fprintf(out,"&lt;");
576 }else if( z[i]=='&' ){
577 fprintf(out,"&amp;");
578 }else if( z[i]=='>' ){
579 fprintf(out,"&gt;");
580 }else if( z[i]=='\"' ){
581 fprintf(out,"&quot;");
582 }else if( z[i]=='\'' ){
583 fprintf(out,"&#39;");
584 }else{
585 break;
587 z += i + 1;
592 ** If a field contains any character identified by a 1 in the following
593 ** array, then the string must be quoted for CSV.
595 static const char needCsvQuote[] = {
596 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
597 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
598 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
599 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
600 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
601 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
602 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
603 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
604 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
605 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
606 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
607 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
608 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
609 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
610 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
611 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
615 ** Output a single term of CSV. Actually, p->separator is used for
616 ** the separator, which may or may not be a comma. p->nullvalue is
617 ** the null value. Strings are quoted using ANSI-C rules. Numbers
618 ** appear outside of quotes.
620 static void output_csv(struct callback_data *p, const char *z, int bSep){
621 FILE *out = p->out;
622 if( z==0 ){
623 fprintf(out,"%s",p->nullvalue);
624 }else{
625 int i;
626 int nSep = strlen30(p->separator);
627 for(i=0; z[i]; i++){
628 if( needCsvQuote[((unsigned char*)z)[i]]
629 || (z[i]==p->separator[0] &&
630 (nSep==1 || memcmp(z, p->separator, nSep)==0)) ){
631 i = 0;
632 break;
635 if( i==0 ){
636 putc('"', out);
637 for(i=0; z[i]; i++){
638 if( z[i]=='"' ) putc('"', out);
639 putc(z[i], out);
641 putc('"', out);
642 }else{
643 fprintf(out, "%s", z);
646 if( bSep ){
647 fprintf(p->out, "%s", p->separator);
651 #ifdef SIGINT
653 ** This routine runs when the user presses Ctrl-C
655 static void interrupt_handler(int NotUsed){
656 UNUSED_PARAMETER(NotUsed);
657 seenInterrupt = 1;
658 if( db ) sqlite3_interrupt(db);
660 #endif
663 ** This is the callback routine that the shell
664 ** invokes for each row of a query result.
666 static int shell_callback(void *pArg, int nArg, char **azArg, char **azCol, int *aiType){
667 int i;
668 struct callback_data *p = (struct callback_data*)pArg;
670 switch( p->mode ){
671 case MODE_Line: {
672 int w = 5;
673 if( azArg==0 ) break;
674 for(i=0; i<nArg; i++){
675 int len = strlen30(azCol[i] ? azCol[i] : "");
676 if( len>w ) w = len;
678 if( p->cnt++>0 ) fprintf(p->out,"\n");
679 for(i=0; i<nArg; i++){
680 fprintf(p->out,"%*s = %s\n", w, azCol[i],
681 azArg[i] ? azArg[i] : p->nullvalue);
683 break;
685 case MODE_Explain:
686 case MODE_Column: {
687 if( p->cnt++==0 ){
688 for(i=0; i<nArg; i++){
689 int w, n;
690 if( i<ArraySize(p->colWidth) ){
691 w = p->colWidth[i];
692 }else{
693 w = 0;
695 if( w<=0 ){
696 w = strlen30(azCol[i] ? azCol[i] : "");
697 if( w<10 ) w = 10;
698 n = strlen30(azArg && azArg[i] ? azArg[i] : p->nullvalue);
699 if( w<n ) w = n;
701 if( i<ArraySize(p->actualWidth) ){
702 p->actualWidth[i] = w;
704 if( p->showHeader ){
705 fprintf(p->out,"%-*.*s%s",w,w,azCol[i], i==nArg-1 ? "\n": " ");
708 if( p->showHeader ){
709 for(i=0; i<nArg; i++){
710 int w;
711 if( i<ArraySize(p->actualWidth) ){
712 w = p->actualWidth[i];
713 }else{
714 w = 10;
716 fprintf(p->out,"%-*.*s%s",w,w,"-----------------------------------"
717 "----------------------------------------------------------",
718 i==nArg-1 ? "\n": " ");
722 if( azArg==0 ) break;
723 for(i=0; i<nArg; i++){
724 int w;
725 if( i<ArraySize(p->actualWidth) ){
726 w = p->actualWidth[i];
727 }else{
728 w = 10;
730 if( p->mode==MODE_Explain && azArg[i] &&
731 strlen30(azArg[i])>w ){
732 w = strlen30(azArg[i]);
734 fprintf(p->out,"%-*.*s%s",w,w,
735 azArg[i] ? azArg[i] : p->nullvalue, i==nArg-1 ? "\n": " ");
737 break;
739 case MODE_Semi:
740 case MODE_List: {
741 if( p->cnt++==0 && p->showHeader ){
742 for(i=0; i<nArg; i++){
743 fprintf(p->out,"%s%s",azCol[i], i==nArg-1 ? "\n" : p->separator);
746 if( azArg==0 ) break;
747 for(i=0; i<nArg; i++){
748 char *z = azArg[i];
749 if( z==0 ) z = p->nullvalue;
750 fprintf(p->out, "%s", z);
751 if( i<nArg-1 ){
752 fprintf(p->out, "%s", p->separator);
753 }else if( p->mode==MODE_Semi ){
754 fprintf(p->out, ";\n");
755 }else{
756 fprintf(p->out, "\n");
759 break;
761 case MODE_Html: {
762 if( p->cnt++==0 && p->showHeader ){
763 fprintf(p->out,"<TR>");
764 for(i=0; i<nArg; i++){
765 fprintf(p->out,"<TH>");
766 output_html_string(p->out, azCol[i]);
767 fprintf(p->out,"</TH>\n");
769 fprintf(p->out,"</TR>\n");
771 if( azArg==0 ) break;
772 fprintf(p->out,"<TR>");
773 for(i=0; i<nArg; i++){
774 fprintf(p->out,"<TD>");
775 output_html_string(p->out, azArg[i] ? azArg[i] : p->nullvalue);
776 fprintf(p->out,"</TD>\n");
778 fprintf(p->out,"</TR>\n");
779 break;
781 case MODE_Tcl: {
782 if( p->cnt++==0 && p->showHeader ){
783 for(i=0; i<nArg; i++){
784 output_c_string(p->out,azCol[i] ? azCol[i] : "");
785 fprintf(p->out, "%s", p->separator);
787 fprintf(p->out,"\n");
789 if( azArg==0 ) break;
790 for(i=0; i<nArg; i++){
791 output_c_string(p->out, azArg[i] ? azArg[i] : p->nullvalue);
792 fprintf(p->out, "%s", p->separator);
794 fprintf(p->out,"\n");
795 break;
797 case MODE_Csv: {
798 if( p->cnt++==0 && p->showHeader ){
799 for(i=0; i<nArg; i++){
800 output_csv(p, azCol[i] ? azCol[i] : "", i<nArg-1);
802 fprintf(p->out,"\n");
804 if( azArg==0 ) break;
805 for(i=0; i<nArg; i++){
806 output_csv(p, azArg[i], i<nArg-1);
808 fprintf(p->out,"\n");
809 break;
811 case MODE_Insert: {
812 p->cnt++;
813 if( azArg==0 ) break;
814 fprintf(p->out,"INSERT INTO %s VALUES(",p->zDestTable);
815 for(i=0; i<nArg; i++){
816 char *zSep = i>0 ? ",": "";
817 if( (azArg[i]==0) || (aiType && aiType[i]==SQLITE_NULL) ){
818 fprintf(p->out,"%sNULL",zSep);
819 }else if( aiType && aiType[i]==SQLITE_TEXT ){
820 if( zSep[0] ) fprintf(p->out,"%s",zSep);
821 output_quoted_string(p->out, azArg[i]);
822 }else if( aiType && (aiType[i]==SQLITE_INTEGER || aiType[i]==SQLITE_FLOAT) ){
823 fprintf(p->out,"%s%s",zSep, azArg[i]);
824 }else if( aiType && aiType[i]==SQLITE_BLOB && p->pStmt ){
825 const void *pBlob = sqlite3_column_blob(p->pStmt, i);
826 int nBlob = sqlite3_column_bytes(p->pStmt, i);
827 if( zSep[0] ) fprintf(p->out,"%s",zSep);
828 output_hex_blob(p->out, pBlob, nBlob);
829 }else if( isNumber(azArg[i], 0) ){
830 fprintf(p->out,"%s%s",zSep, azArg[i]);
831 }else{
832 if( zSep[0] ) fprintf(p->out,"%s",zSep);
833 output_quoted_string(p->out, azArg[i]);
836 fprintf(p->out,");\n");
837 break;
840 return 0;
844 ** This is the callback routine that the SQLite library
845 ** invokes for each row of a query result.
847 static int callback(void *pArg, int nArg, char **azArg, char **azCol){
848 /* since we don't have type info, call the shell_callback with a NULL value */
849 return shell_callback(pArg, nArg, azArg, azCol, NULL);
853 ** Set the destination table field of the callback_data structure to
854 ** the name of the table given. Escape any quote characters in the
855 ** table name.
857 static void set_table_name(struct callback_data *p, const char *zName){
858 int i, n;
859 int needQuote;
860 char *z;
862 if( p->zDestTable ){
863 free(p->zDestTable);
864 p->zDestTable = 0;
866 if( zName==0 ) return;
867 needQuote = !isalpha((unsigned char)*zName) && *zName!='_';
868 for(i=n=0; zName[i]; i++, n++){
869 if( !isalnum((unsigned char)zName[i]) && zName[i]!='_' ){
870 needQuote = 1;
871 if( zName[i]=='\'' ) n++;
874 if( needQuote ) n += 2;
875 z = p->zDestTable = malloc( n+1 );
876 if( z==0 ){
877 fprintf(stderr,"Error: out of memory\n");
878 exit(1);
880 n = 0;
881 if( needQuote ) z[n++] = '\'';
882 for(i=0; zName[i]; i++){
883 z[n++] = zName[i];
884 if( zName[i]=='\'' ) z[n++] = '\'';
886 if( needQuote ) z[n++] = '\'';
887 z[n] = 0;
890 /* zIn is either a pointer to a NULL-terminated string in memory obtained
891 ** from malloc(), or a NULL pointer. The string pointed to by zAppend is
892 ** added to zIn, and the result returned in memory obtained from malloc().
893 ** zIn, if it was not NULL, is freed.
895 ** If the third argument, quote, is not '\0', then it is used as a
896 ** quote character for zAppend.
898 static char *appendText(char *zIn, char const *zAppend, char quote){
899 int len;
900 int i;
901 int nAppend = strlen30(zAppend);
902 int nIn = (zIn?strlen30(zIn):0);
904 len = nAppend+nIn+1;
905 if( quote ){
906 len += 2;
907 for(i=0; i<nAppend; i++){
908 if( zAppend[i]==quote ) len++;
912 zIn = (char *)realloc(zIn, len);
913 if( !zIn ){
914 return 0;
917 if( quote ){
918 char *zCsr = &zIn[nIn];
919 *zCsr++ = quote;
920 for(i=0; i<nAppend; i++){
921 *zCsr++ = zAppend[i];
922 if( zAppend[i]==quote ) *zCsr++ = quote;
924 *zCsr++ = quote;
925 *zCsr++ = '\0';
926 assert( (zCsr-zIn)==len );
927 }else{
928 memcpy(&zIn[nIn], zAppend, nAppend);
929 zIn[len-1] = '\0';
932 return zIn;
937 ** Execute a query statement that has a single result column. Print
938 ** that result column on a line by itself with a semicolon terminator.
940 ** This is used, for example, to show the schema of the database by
941 ** querying the SQLITE_MASTER table.
943 static int run_table_dump_query(
944 struct callback_data *p, /* Query context */
945 const char *zSelect, /* SELECT statement to extract content */
946 const char *zFirstRow /* Print before first row, if not NULL */
948 sqlite3_stmt *pSelect;
949 int rc;
950 rc = sqlite3_prepare(p->db, zSelect, -1, &pSelect, 0);
951 if( rc!=SQLITE_OK || !pSelect ){
952 fprintf(p->out, "/**** ERROR: (%d) %s *****/\n", rc, sqlite3_errmsg(p->db));
953 p->nErr++;
954 return rc;
956 rc = sqlite3_step(pSelect);
957 while( rc==SQLITE_ROW ){
958 if( zFirstRow ){
959 fprintf(p->out, "%s", zFirstRow);
960 zFirstRow = 0;
962 fprintf(p->out, "%s;\n", sqlite3_column_text(pSelect, 0));
963 rc = sqlite3_step(pSelect);
965 rc = sqlite3_finalize(pSelect);
966 if( rc!=SQLITE_OK ){
967 fprintf(p->out, "/**** ERROR: (%d) %s *****/\n", rc, sqlite3_errmsg(p->db));
968 p->nErr++;
970 return rc;
974 ** Allocate space and save off current error string.
976 static char *save_err_msg(
977 sqlite3 *db /* Database to query */
979 int nErrMsg = 1+strlen30(sqlite3_errmsg(db));
980 char *zErrMsg = sqlite3_malloc(nErrMsg);
981 if( zErrMsg ){
982 memcpy(zErrMsg, sqlite3_errmsg(db), nErrMsg);
984 return zErrMsg;
988 ** Display memory stats.
990 static int display_stats(
991 sqlite3 *db, /* Database to query */
992 struct callback_data *pArg, /* Pointer to struct callback_data */
993 int bReset /* True to reset the stats */
995 int iCur;
996 int iHiwtr;
998 if( pArg && pArg->out ){
1000 iHiwtr = iCur = -1;
1001 sqlite3_status(SQLITE_STATUS_MEMORY_USED, &iCur, &iHiwtr, bReset);
1002 fprintf(pArg->out, "Memory Used: %d (max %d) bytes\n", iCur, iHiwtr);
1003 iHiwtr = iCur = -1;
1004 sqlite3_status(SQLITE_STATUS_MALLOC_COUNT, &iCur, &iHiwtr, bReset);
1005 fprintf(pArg->out, "Number of Outstanding Allocations: %d (max %d)\n", iCur, iHiwtr);
1007 ** Not currently used by the CLI.
1008 ** iHiwtr = iCur = -1;
1009 ** sqlite3_status(SQLITE_STATUS_PAGECACHE_USED, &iCur, &iHiwtr, bReset);
1010 ** fprintf(pArg->out, "Number of Pcache Pages Used: %d (max %d) pages\n", iCur, iHiwtr);
1012 iHiwtr = iCur = -1;
1013 sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &iCur, &iHiwtr, bReset);
1014 fprintf(pArg->out, "Number of Pcache Overflow Bytes: %d (max %d) bytes\n", iCur, iHiwtr);
1016 ** Not currently used by the CLI.
1017 ** iHiwtr = iCur = -1;
1018 ** sqlite3_status(SQLITE_STATUS_SCRATCH_USED, &iCur, &iHiwtr, bReset);
1019 ** fprintf(pArg->out, "Number of Scratch Allocations Used: %d (max %d)\n", iCur, iHiwtr);
1021 iHiwtr = iCur = -1;
1022 sqlite3_status(SQLITE_STATUS_SCRATCH_OVERFLOW, &iCur, &iHiwtr, bReset);
1023 fprintf(pArg->out, "Number of Scratch Overflow Bytes: %d (max %d) bytes\n", iCur, iHiwtr);
1024 iHiwtr = iCur = -1;
1025 sqlite3_status(SQLITE_STATUS_MALLOC_SIZE, &iCur, &iHiwtr, bReset);
1026 fprintf(pArg->out, "Largest Allocation: %d bytes\n", iHiwtr);
1027 iHiwtr = iCur = -1;
1028 sqlite3_status(SQLITE_STATUS_PAGECACHE_SIZE, &iCur, &iHiwtr, bReset);
1029 fprintf(pArg->out, "Largest Pcache Allocation: %d bytes\n", iHiwtr);
1030 iHiwtr = iCur = -1;
1031 sqlite3_status(SQLITE_STATUS_SCRATCH_SIZE, &iCur, &iHiwtr, bReset);
1032 fprintf(pArg->out, "Largest Scratch Allocation: %d bytes\n", iHiwtr);
1033 #ifdef YYTRACKMAXSTACKDEPTH
1034 iHiwtr = iCur = -1;
1035 sqlite3_status(SQLITE_STATUS_PARSER_STACK, &iCur, &iHiwtr, bReset);
1036 fprintf(pArg->out, "Deepest Parser Stack: %d (max %d)\n", iCur, iHiwtr);
1037 #endif
1040 if( pArg && pArg->out && db ){
1041 iHiwtr = iCur = -1;
1042 sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_USED, &iCur, &iHiwtr, bReset);
1043 fprintf(pArg->out, "Lookaside Slots Used: %d (max %d)\n", iCur, iHiwtr);
1044 sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_HIT, &iCur, &iHiwtr, bReset);
1045 fprintf(pArg->out, "Successful lookaside attempts: %d\n", iHiwtr);
1046 sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE, &iCur, &iHiwtr, bReset);
1047 fprintf(pArg->out, "Lookaside failures due to size: %d\n", iHiwtr);
1048 sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL, &iCur, &iHiwtr, bReset);
1049 fprintf(pArg->out, "Lookaside failures due to OOM: %d\n", iHiwtr);
1050 iHiwtr = iCur = -1;
1051 sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_USED, &iCur, &iHiwtr, bReset);
1052 fprintf(pArg->out, "Pager Heap Usage: %d bytes\n", iCur); iHiwtr = iCur = -1;
1053 sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_HIT, &iCur, &iHiwtr, 1);
1054 fprintf(pArg->out, "Page cache hits: %d\n", iCur);
1055 iHiwtr = iCur = -1;
1056 sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_MISS, &iCur, &iHiwtr, 1);
1057 fprintf(pArg->out, "Page cache misses: %d\n", iCur);
1058 iHiwtr = iCur = -1;
1059 sqlite3_db_status(db, SQLITE_DBSTATUS_SCHEMA_USED, &iCur, &iHiwtr, bReset);
1060 fprintf(pArg->out, "Schema Heap Usage: %d bytes\n", iCur);
1061 iHiwtr = iCur = -1;
1062 sqlite3_db_status(db, SQLITE_DBSTATUS_STMT_USED, &iCur, &iHiwtr, bReset);
1063 fprintf(pArg->out, "Statement Heap/Lookaside Usage: %d bytes\n", iCur);
1066 if( pArg && pArg->out && db && pArg->pStmt ){
1067 iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, bReset);
1068 fprintf(pArg->out, "Fullscan Steps: %d\n", iCur);
1069 iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_SORT, bReset);
1070 fprintf(pArg->out, "Sort Operations: %d\n", iCur);
1071 iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_AUTOINDEX, bReset);
1072 fprintf(pArg->out, "Autoindex Inserts: %d\n", iCur);
1075 return 0;
1079 ** Execute a statement or set of statements. Print
1080 ** any result rows/columns depending on the current mode
1081 ** set via the supplied callback.
1083 ** This is very similar to SQLite's built-in sqlite3_exec()
1084 ** function except it takes a slightly different callback
1085 ** and callback data argument.
1087 static int shell_exec(
1088 sqlite3 *db, /* An open database */
1089 const char *zSql, /* SQL to be evaluated */
1090 int (*xCallback)(void*,int,char**,char**,int*), /* Callback function */
1091 /* (not the same as sqlite3_exec) */
1092 struct callback_data *pArg, /* Pointer to struct callback_data */
1093 char **pzErrMsg /* Error msg written here */
1095 sqlite3_stmt *pStmt = NULL; /* Statement to execute. */
1096 int rc = SQLITE_OK; /* Return Code */
1097 int rc2;
1098 const char *zLeftover; /* Tail of unprocessed SQL */
1100 if( pzErrMsg ){
1101 *pzErrMsg = NULL;
1104 while( zSql[0] && (SQLITE_OK == rc) ){
1105 rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, &zLeftover);
1106 if( SQLITE_OK != rc ){
1107 if( pzErrMsg ){
1108 *pzErrMsg = save_err_msg(db);
1110 }else{
1111 if( !pStmt ){
1112 /* this happens for a comment or white-space */
1113 zSql = zLeftover;
1114 while( IsSpace(zSql[0]) ) zSql++;
1115 continue;
1118 /* save off the prepared statment handle and reset row count */
1119 if( pArg ){
1120 pArg->pStmt = pStmt;
1121 pArg->cnt = 0;
1124 /* echo the sql statement if echo on */
1125 if( pArg && pArg->echoOn ){
1126 const char *zStmtSql = sqlite3_sql(pStmt);
1127 fprintf(pArg->out, "%s\n", zStmtSql ? zStmtSql : zSql);
1130 /* Output TESTCTRL_EXPLAIN text of requested */
1131 if( pArg && pArg->mode==MODE_Explain ){
1132 const char *zExplain = 0;
1133 sqlite3_test_control(SQLITE_TESTCTRL_EXPLAIN_STMT, pStmt, &zExplain);
1134 if( zExplain && zExplain[0] ){
1135 fprintf(pArg->out, "%s", zExplain);
1139 /* perform the first step. this will tell us if we
1140 ** have a result set or not and how wide it is.
1142 rc = sqlite3_step(pStmt);
1143 /* if we have a result set... */
1144 if( SQLITE_ROW == rc ){
1145 /* if we have a callback... */
1146 if( xCallback ){
1147 /* allocate space for col name ptr, value ptr, and type */
1148 int nCol = sqlite3_column_count(pStmt);
1149 void *pData = sqlite3_malloc(3*nCol*sizeof(const char*) + 1);
1150 if( !pData ){
1151 rc = SQLITE_NOMEM;
1152 }else{
1153 char **azCols = (char **)pData; /* Names of result columns */
1154 char **azVals = &azCols[nCol]; /* Results */
1155 int *aiTypes = (int *)&azVals[nCol]; /* Result types */
1156 int i;
1157 assert(sizeof(int) <= sizeof(char *));
1158 /* save off ptrs to column names */
1159 for(i=0; i<nCol; i++){
1160 azCols[i] = (char *)sqlite3_column_name(pStmt, i);
1163 /* extract the data and data types */
1164 for(i=0; i<nCol; i++){
1165 azVals[i] = (char *)sqlite3_column_text(pStmt, i);
1166 aiTypes[i] = sqlite3_column_type(pStmt, i);
1167 if( !azVals[i] && (aiTypes[i]!=SQLITE_NULL) ){
1168 rc = SQLITE_NOMEM;
1169 break; /* from for */
1171 } /* end for */
1173 /* if data and types extracted successfully... */
1174 if( SQLITE_ROW == rc ){
1175 /* call the supplied callback with the result row data */
1176 if( xCallback(pArg, nCol, azVals, azCols, aiTypes) ){
1177 rc = SQLITE_ABORT;
1178 }else{
1179 rc = sqlite3_step(pStmt);
1182 } while( SQLITE_ROW == rc );
1183 sqlite3_free(pData);
1185 }else{
1187 rc = sqlite3_step(pStmt);
1188 } while( rc == SQLITE_ROW );
1192 /* print usage stats if stats on */
1193 if( pArg && pArg->statsOn ){
1194 display_stats(db, pArg, 0);
1197 /* Finalize the statement just executed. If this fails, save a
1198 ** copy of the error message. Otherwise, set zSql to point to the
1199 ** next statement to execute. */
1200 rc2 = sqlite3_finalize(pStmt);
1201 if( rc!=SQLITE_NOMEM ) rc = rc2;
1202 if( rc==SQLITE_OK ){
1203 zSql = zLeftover;
1204 while( IsSpace(zSql[0]) ) zSql++;
1205 }else if( pzErrMsg ){
1206 *pzErrMsg = save_err_msg(db);
1209 /* clear saved stmt handle */
1210 if( pArg ){
1211 pArg->pStmt = NULL;
1214 } /* end while */
1216 return rc;
1221 ** This is a different callback routine used for dumping the database.
1222 ** Each row received by this callback consists of a table name,
1223 ** the table type ("index" or "table") and SQL to create the table.
1224 ** This routine should print text sufficient to recreate the table.
1226 static int dump_callback(void *pArg, int nArg, char **azArg, char **azCol){
1227 int rc;
1228 const char *zTable;
1229 const char *zType;
1230 const char *zSql;
1231 const char *zPrepStmt = 0;
1232 struct callback_data *p = (struct callback_data *)pArg;
1234 UNUSED_PARAMETER(azCol);
1235 if( nArg!=3 ) return 1;
1236 zTable = azArg[0];
1237 zType = azArg[1];
1238 zSql = azArg[2];
1240 if( strcmp(zTable, "sqlite_sequence")==0 ){
1241 zPrepStmt = "DELETE FROM sqlite_sequence;\n";
1242 }else if( strcmp(zTable, "sqlite_stat1")==0 ){
1243 fprintf(p->out, "ANALYZE sqlite_master;\n");
1244 }else if( strncmp(zTable, "sqlite_", 7)==0 ){
1245 return 0;
1246 }else if( strncmp(zSql, "CREATE VIRTUAL TABLE", 20)==0 ){
1247 char *zIns;
1248 if( !p->writableSchema ){
1249 fprintf(p->out, "PRAGMA writable_schema=ON;\n");
1250 p->writableSchema = 1;
1252 zIns = sqlite3_mprintf(
1253 "INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"
1254 "VALUES('table','%q','%q',0,'%q');",
1255 zTable, zTable, zSql);
1256 fprintf(p->out, "%s\n", zIns);
1257 sqlite3_free(zIns);
1258 return 0;
1259 }else{
1260 fprintf(p->out, "%s;\n", zSql);
1263 if( strcmp(zType, "table")==0 ){
1264 sqlite3_stmt *pTableInfo = 0;
1265 char *zSelect = 0;
1266 char *zTableInfo = 0;
1267 char *zTmp = 0;
1268 int nRow = 0;
1270 zTableInfo = appendText(zTableInfo, "PRAGMA table_info(", 0);
1271 zTableInfo = appendText(zTableInfo, zTable, '"');
1272 zTableInfo = appendText(zTableInfo, ");", 0);
1274 rc = sqlite3_prepare(p->db, zTableInfo, -1, &pTableInfo, 0);
1275 free(zTableInfo);
1276 if( rc!=SQLITE_OK || !pTableInfo ){
1277 return 1;
1280 zSelect = appendText(zSelect, "SELECT 'INSERT INTO ' || ", 0);
1281 zTmp = appendText(zTmp, zTable, '"');
1282 if( zTmp ){
1283 zSelect = appendText(zSelect, zTmp, '\'');
1285 zSelect = appendText(zSelect, " || ' VALUES(' || ", 0);
1286 rc = sqlite3_step(pTableInfo);
1287 while( rc==SQLITE_ROW ){
1288 const char *zText = (const char *)sqlite3_column_text(pTableInfo, 1);
1289 zSelect = appendText(zSelect, "quote(", 0);
1290 zSelect = appendText(zSelect, zText, '"');
1291 rc = sqlite3_step(pTableInfo);
1292 if( rc==SQLITE_ROW ){
1293 zSelect = appendText(zSelect, ") || ',' || ", 0);
1294 }else{
1295 zSelect = appendText(zSelect, ") ", 0);
1297 nRow++;
1299 rc = sqlite3_finalize(pTableInfo);
1300 if( rc!=SQLITE_OK || nRow==0 ){
1301 free(zSelect);
1302 return 1;
1304 zSelect = appendText(zSelect, "|| ')' FROM ", 0);
1305 zSelect = appendText(zSelect, zTable, '"');
1307 rc = run_table_dump_query(p, zSelect, zPrepStmt);
1308 if( rc==SQLITE_CORRUPT ){
1309 zSelect = appendText(zSelect, " ORDER BY rowid DESC", 0);
1310 run_table_dump_query(p, zSelect, 0);
1312 if( zSelect ) free(zSelect);
1314 return 0;
1318 ** Run zQuery. Use dump_callback() as the callback routine so that
1319 ** the contents of the query are output as SQL statements.
1321 ** If we get a SQLITE_CORRUPT error, rerun the query after appending
1322 ** "ORDER BY rowid DESC" to the end.
1324 static int run_schema_dump_query(
1325 struct callback_data *p,
1326 const char *zQuery
1328 int rc;
1329 char *zErr = 0;
1330 rc = sqlite3_exec(p->db, zQuery, dump_callback, p, &zErr);
1331 if( rc==SQLITE_CORRUPT ){
1332 char *zQ2;
1333 int len = strlen30(zQuery);
1334 fprintf(p->out, "/****** CORRUPTION ERROR *******/\n");
1335 if( zErr ){
1336 fprintf(p->out, "/****** %s ******/\n", zErr);
1337 sqlite3_free(zErr);
1338 zErr = 0;
1340 zQ2 = malloc( len+100 );
1341 if( zQ2==0 ) return rc;
1342 sqlite3_snprintf(sizeof(zQ2), zQ2, "%s ORDER BY rowid DESC", zQuery);
1343 rc = sqlite3_exec(p->db, zQ2, dump_callback, p, &zErr);
1344 if( rc ){
1345 fprintf(p->out, "/****** ERROR: %s ******/\n", zErr);
1346 }else{
1347 rc = SQLITE_CORRUPT;
1349 sqlite3_free(zErr);
1350 free(zQ2);
1352 return rc;
1356 ** Text of a help message
1358 static char zHelp[] =
1359 ".backup ?DB? FILE Backup DB (default \"main\") to FILE\n"
1360 ".bail ON|OFF Stop after hitting an error. Default OFF\n"
1361 ".databases List names and files of attached databases\n"
1362 ".dump ?TABLE? ... Dump the database in an SQL text format\n"
1363 " If TABLE specified, only dump tables matching\n"
1364 " LIKE pattern TABLE.\n"
1365 ".echo ON|OFF Turn command echo on or off\n"
1366 ".exit Exit this program\n"
1367 ".explain ?ON|OFF? Turn output mode suitable for EXPLAIN on or off.\n"
1368 " With no args, it turns EXPLAIN on.\n"
1369 ".header(s) ON|OFF Turn display of headers on or off\n"
1370 ".help Show this message\n"
1371 ".import FILE TABLE Import data from FILE into TABLE\n"
1372 ".indices ?TABLE? Show names of all indices\n"
1373 " If TABLE specified, only show indices for tables\n"
1374 " matching LIKE pattern TABLE.\n"
1375 #ifdef SQLITE_ENABLE_IOTRACE
1376 ".iotrace FILE Enable I/O diagnostic logging to FILE\n"
1377 #endif
1378 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1379 ".load FILE ?ENTRY? Load an extension library\n"
1380 #endif
1381 ".log FILE|off Turn logging on or off. FILE can be stderr/stdout\n"
1382 ".mode MODE ?TABLE? Set output mode where MODE is one of:\n"
1383 " csv Comma-separated values\n"
1384 " column Left-aligned columns. (See .width)\n"
1385 " html HTML <table> code\n"
1386 " insert SQL insert statements for TABLE\n"
1387 " line One value per line\n"
1388 " list Values delimited by .separator string\n"
1389 " tabs Tab-separated values\n"
1390 " tcl TCL list elements\n"
1391 ".nullvalue STRING Print STRING in place of NULL values\n"
1392 ".output FILENAME Send output to FILENAME\n"
1393 ".output stdout Send output to the screen\n"
1394 ".prompt MAIN CONTINUE Replace the standard prompts\n"
1395 ".quit Exit this program\n"
1396 ".read FILENAME Execute SQL in FILENAME\n"
1397 ".restore ?DB? FILE Restore content of DB (default \"main\") from FILE\n"
1398 ".schema ?TABLE? Show the CREATE statements\n"
1399 " If TABLE specified, only show tables matching\n"
1400 " LIKE pattern TABLE.\n"
1401 ".separator STRING Change separator used by output mode and .import\n"
1402 ".show Show the current values for various settings\n"
1403 ".stats ON|OFF Turn stats on or off\n"
1404 ".tables ?TABLE? List names of tables\n"
1405 " If TABLE specified, only list tables matching\n"
1406 " LIKE pattern TABLE.\n"
1407 ".timeout MS Try opening locked tables for MS milliseconds\n"
1408 ".vfsname ?AUX? Print the name of the VFS stack\n"
1409 ".width NUM1 NUM2 ... Set column widths for \"column\" mode\n"
1412 static char zTimerHelp[] =
1413 ".timer ON|OFF Turn the CPU timer measurement on or off\n"
1416 /* Forward reference */
1417 static int process_input(struct callback_data *p, FILE *in);
1420 ** Make sure the database is open. If it is not, then open it. If
1421 ** the database fails to open, print an error message and exit.
1423 static void open_db(struct callback_data *p){
1424 if( p->db==0 ){
1425 sqlite3_open(p->zDbFilename, &p->db);
1426 db = p->db;
1427 if( db && sqlite3_errcode(db)==SQLITE_OK ){
1428 sqlite3_create_function(db, "shellstatic", 0, SQLITE_UTF8, 0,
1429 shellstaticFunc, 0, 0);
1431 if( db==0 || SQLITE_OK!=sqlite3_errcode(db) ){
1432 fprintf(stderr,"Error: unable to open database \"%s\": %s\n",
1433 p->zDbFilename, sqlite3_errmsg(db));
1434 exit(1);
1436 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1437 sqlite3_enable_load_extension(p->db, 1);
1438 #endif
1443 ** Do C-language style dequoting.
1445 ** \t -> tab
1446 ** \n -> newline
1447 ** \r -> carriage return
1448 ** \NNN -> ascii character NNN in octal
1449 ** \\ -> backslash
1451 static void resolve_backslashes(char *z){
1452 int i, j;
1453 char c;
1454 for(i=j=0; (c = z[i])!=0; i++, j++){
1455 if( c=='\\' ){
1456 c = z[++i];
1457 if( c=='n' ){
1458 c = '\n';
1459 }else if( c=='t' ){
1460 c = '\t';
1461 }else if( c=='r' ){
1462 c = '\r';
1463 }else if( c>='0' && c<='7' ){
1464 c -= '0';
1465 if( z[i+1]>='0' && z[i+1]<='7' ){
1466 i++;
1467 c = (c<<3) + z[i] - '0';
1468 if( z[i+1]>='0' && z[i+1]<='7' ){
1469 i++;
1470 c = (c<<3) + z[i] - '0';
1475 z[j] = c;
1477 z[j] = 0;
1481 ** Interpret zArg as a boolean value. Return either 0 or 1.
1483 static int booleanValue(char *zArg){
1484 int val = atoi(zArg);
1485 int j;
1486 for(j=0; zArg[j]; j++){
1487 zArg[j] = ToLower(zArg[j]);
1489 if( strcmp(zArg,"on")==0 ){
1490 val = 1;
1491 }else if( strcmp(zArg,"yes")==0 ){
1492 val = 1;
1494 return val;
1498 ** If an input line begins with "." then invoke this routine to
1499 ** process that line.
1501 ** Return 1 on error, 2 to exit, and 0 otherwise.
1503 static int do_meta_command(char *zLine, struct callback_data *p){
1504 int i = 1;
1505 int nArg = 0;
1506 int n, c;
1507 int rc = 0;
1508 char *azArg[50];
1510 /* Parse the input line into tokens.
1512 while( zLine[i] && nArg<ArraySize(azArg) ){
1513 while( IsSpace(zLine[i]) ){ i++; }
1514 if( zLine[i]==0 ) break;
1515 if( zLine[i]=='\'' || zLine[i]=='"' ){
1516 int delim = zLine[i++];
1517 azArg[nArg++] = &zLine[i];
1518 while( zLine[i] && zLine[i]!=delim ){ i++; }
1519 if( zLine[i]==delim ){
1520 zLine[i++] = 0;
1522 if( delim=='"' ) resolve_backslashes(azArg[nArg-1]);
1523 }else{
1524 azArg[nArg++] = &zLine[i];
1525 while( zLine[i] && !IsSpace(zLine[i]) ){ i++; }
1526 if( zLine[i] ) zLine[i++] = 0;
1527 resolve_backslashes(azArg[nArg-1]);
1531 /* Process the input line.
1533 if( nArg==0 ) return 0; /* no tokens, no error */
1534 n = strlen30(azArg[0]);
1535 c = azArg[0][0];
1536 if( c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0 && nArg>1 && nArg<4){
1537 const char *zDestFile;
1538 const char *zDb;
1539 sqlite3 *pDest;
1540 sqlite3_backup *pBackup;
1541 if( nArg==2 ){
1542 zDestFile = azArg[1];
1543 zDb = "main";
1544 }else{
1545 zDestFile = azArg[2];
1546 zDb = azArg[1];
1548 rc = sqlite3_open(zDestFile, &pDest);
1549 if( rc!=SQLITE_OK ){
1550 fprintf(stderr, "Error: cannot open \"%s\"\n", zDestFile);
1551 sqlite3_close(pDest);
1552 return 1;
1554 open_db(p);
1555 pBackup = sqlite3_backup_init(pDest, "main", p->db, zDb);
1556 if( pBackup==0 ){
1557 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
1558 sqlite3_close(pDest);
1559 return 1;
1561 while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK ){}
1562 sqlite3_backup_finish(pBackup);
1563 if( rc==SQLITE_DONE ){
1564 rc = 0;
1565 }else{
1566 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
1567 rc = 1;
1569 sqlite3_close(pDest);
1570 }else
1572 if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 && nArg>1 && nArg<3 ){
1573 bail_on_error = booleanValue(azArg[1]);
1574 }else
1576 if( c=='d' && n>1 && strncmp(azArg[0], "databases", n)==0 && nArg==1 ){
1577 struct callback_data data;
1578 char *zErrMsg = 0;
1579 open_db(p);
1580 memcpy(&data, p, sizeof(data));
1581 data.showHeader = 1;
1582 data.mode = MODE_Column;
1583 data.colWidth[0] = 3;
1584 data.colWidth[1] = 15;
1585 data.colWidth[2] = 58;
1586 data.cnt = 0;
1587 sqlite3_exec(p->db, "PRAGMA database_list; ", callback, &data, &zErrMsg);
1588 if( zErrMsg ){
1589 fprintf(stderr,"Error: %s\n", zErrMsg);
1590 sqlite3_free(zErrMsg);
1591 rc = 1;
1593 }else
1595 if( c=='d' && strncmp(azArg[0], "dump", n)==0 && nArg<3 ){
1596 open_db(p);
1597 /* When playing back a "dump", the content might appear in an order
1598 ** which causes immediate foreign key constraints to be violated.
1599 ** So disable foreign-key constraint enforcement to prevent problems. */
1600 fprintf(p->out, "PRAGMA foreign_keys=OFF;\n");
1601 fprintf(p->out, "BEGIN TRANSACTION;\n");
1602 p->writableSchema = 0;
1603 sqlite3_exec(p->db, "SAVEPOINT dump; PRAGMA writable_schema=ON", 0, 0, 0);
1604 p->nErr = 0;
1605 if( nArg==1 ){
1606 run_schema_dump_query(p,
1607 "SELECT name, type, sql FROM sqlite_master "
1608 "WHERE sql NOT NULL AND type=='table' AND name!='sqlite_sequence'"
1610 run_schema_dump_query(p,
1611 "SELECT name, type, sql FROM sqlite_master "
1612 "WHERE name=='sqlite_sequence'"
1614 run_table_dump_query(p,
1615 "SELECT sql FROM sqlite_master "
1616 "WHERE sql NOT NULL AND type IN ('index','trigger','view')", 0
1618 }else{
1619 int i;
1620 for(i=1; i<nArg; i++){
1621 zShellStatic = azArg[i];
1622 run_schema_dump_query(p,
1623 "SELECT name, type, sql FROM sqlite_master "
1624 "WHERE tbl_name LIKE shellstatic() AND type=='table'"
1625 " AND sql NOT NULL");
1626 run_table_dump_query(p,
1627 "SELECT sql FROM sqlite_master "
1628 "WHERE sql NOT NULL"
1629 " AND type IN ('index','trigger','view')"
1630 " AND tbl_name LIKE shellstatic()", 0
1632 zShellStatic = 0;
1635 if( p->writableSchema ){
1636 fprintf(p->out, "PRAGMA writable_schema=OFF;\n");
1637 p->writableSchema = 0;
1639 sqlite3_exec(p->db, "PRAGMA writable_schema=OFF;", 0, 0, 0);
1640 sqlite3_exec(p->db, "RELEASE dump;", 0, 0, 0);
1641 fprintf(p->out, p->nErr ? "ROLLBACK; -- due to errors\n" : "COMMIT;\n");
1642 }else
1644 if( c=='e' && strncmp(azArg[0], "echo", n)==0 && nArg>1 && nArg<3 ){
1645 p->echoOn = booleanValue(azArg[1]);
1646 }else
1648 if( c=='e' && strncmp(azArg[0], "exit", n)==0 && nArg==1 ){
1649 rc = 2;
1650 }else
1652 if( c=='e' && strncmp(azArg[0], "explain", n)==0 && nArg<3 ){
1653 int val = nArg>=2 ? booleanValue(azArg[1]) : 1;
1654 if(val == 1) {
1655 if(!p->explainPrev.valid) {
1656 p->explainPrev.valid = 1;
1657 p->explainPrev.mode = p->mode;
1658 p->explainPrev.showHeader = p->showHeader;
1659 memcpy(p->explainPrev.colWidth,p->colWidth,sizeof(p->colWidth));
1661 /* We could put this code under the !p->explainValid
1662 ** condition so that it does not execute if we are already in
1663 ** explain mode. However, always executing it allows us an easy
1664 ** was to reset to explain mode in case the user previously
1665 ** did an .explain followed by a .width, .mode or .header
1666 ** command.
1668 p->mode = MODE_Explain;
1669 p->showHeader = 1;
1670 memset(p->colWidth,0,ArraySize(p->colWidth));
1671 p->colWidth[0] = 4; /* addr */
1672 p->colWidth[1] = 13; /* opcode */
1673 p->colWidth[2] = 4; /* P1 */
1674 p->colWidth[3] = 4; /* P2 */
1675 p->colWidth[4] = 4; /* P3 */
1676 p->colWidth[5] = 13; /* P4 */
1677 p->colWidth[6] = 2; /* P5 */
1678 p->colWidth[7] = 13; /* Comment */
1679 }else if (p->explainPrev.valid) {
1680 p->explainPrev.valid = 0;
1681 p->mode = p->explainPrev.mode;
1682 p->showHeader = p->explainPrev.showHeader;
1683 memcpy(p->colWidth,p->explainPrev.colWidth,sizeof(p->colWidth));
1685 }else
1687 if( c=='h' && (strncmp(azArg[0], "header", n)==0 ||
1688 strncmp(azArg[0], "headers", n)==0) && nArg>1 && nArg<3 ){
1689 p->showHeader = booleanValue(azArg[1]);
1690 }else
1692 if( c=='h' && strncmp(azArg[0], "help", n)==0 ){
1693 fprintf(stderr,"%s",zHelp);
1694 if( HAS_TIMER ){
1695 fprintf(stderr,"%s",zTimerHelp);
1697 }else
1699 if( c=='i' && strncmp(azArg[0], "import", n)==0 && nArg==3 ){
1700 char *zTable = azArg[2]; /* Insert data into this table */
1701 char *zFile = azArg[1]; /* The file from which to extract data */
1702 sqlite3_stmt *pStmt = NULL; /* A statement */
1703 int nCol; /* Number of columns in the table */
1704 int nByte; /* Number of bytes in an SQL string */
1705 int i, j; /* Loop counters */
1706 int nSep; /* Number of bytes in p->separator[] */
1707 char *zSql; /* An SQL statement */
1708 char *zLine; /* A single line of input from the file */
1709 char **azCol; /* zLine[] broken up into columns */
1710 char *zCommit; /* How to commit changes */
1711 FILE *in; /* The input file */
1712 int lineno = 0; /* Line number of input file */
1714 open_db(p);
1715 nSep = strlen30(p->separator);
1716 if( nSep==0 ){
1717 fprintf(stderr, "Error: non-null separator required for import\n");
1718 return 1;
1720 zSql = sqlite3_mprintf("SELECT * FROM %s", zTable);
1721 if( zSql==0 ){
1722 fprintf(stderr, "Error: out of memory\n");
1723 return 1;
1725 nByte = strlen30(zSql);
1726 rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
1727 sqlite3_free(zSql);
1728 if( rc ){
1729 if (pStmt) sqlite3_finalize(pStmt);
1730 fprintf(stderr,"Error: %s\n", sqlite3_errmsg(db));
1731 return 1;
1733 nCol = sqlite3_column_count(pStmt);
1734 sqlite3_finalize(pStmt);
1735 pStmt = 0;
1736 if( nCol==0 ) return 0; /* no columns, no error */
1737 zSql = malloc( nByte + 20 + nCol*2 );
1738 if( zSql==0 ){
1739 fprintf(stderr, "Error: out of memory\n");
1740 return 1;
1742 sqlite3_snprintf(nByte+20, zSql, "INSERT INTO %s VALUES(?", zTable);
1743 j = strlen30(zSql);
1744 for(i=1; i<nCol; i++){
1745 zSql[j++] = ',';
1746 zSql[j++] = '?';
1748 zSql[j++] = ')';
1749 zSql[j] = 0;
1750 rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
1751 free(zSql);
1752 if( rc ){
1753 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(db));
1754 if (pStmt) sqlite3_finalize(pStmt);
1755 return 1;
1757 in = fopen(zFile, "rb");
1758 if( in==0 ){
1759 fprintf(stderr, "Error: cannot open \"%s\"\n", zFile);
1760 sqlite3_finalize(pStmt);
1761 return 1;
1763 azCol = malloc( sizeof(azCol[0])*(nCol+1) );
1764 if( azCol==0 ){
1765 fprintf(stderr, "Error: out of memory\n");
1766 fclose(in);
1767 sqlite3_finalize(pStmt);
1768 return 1;
1770 sqlite3_exec(p->db, "BEGIN", 0, 0, 0);
1771 zCommit = "COMMIT";
1772 while( (zLine = local_getline(0, in))!=0 ){
1773 char *z;
1774 lineno++;
1775 azCol[0] = zLine;
1776 for(i=0, z=zLine; *z && *z!='\n' && *z!='\r'; z++){
1777 if( *z==p->separator[0] && strncmp(z, p->separator, nSep)==0 ){
1778 *z = 0;
1779 i++;
1780 if( i<nCol ){
1781 azCol[i] = &z[nSep];
1782 z += nSep-1;
1785 } /* end for */
1786 *z = 0;
1787 if( i+1!=nCol ){
1788 fprintf(stderr,
1789 "Error: %s line %d: expected %d columns of data but found %d\n",
1790 zFile, lineno, nCol, i+1);
1791 zCommit = "ROLLBACK";
1792 free(zLine);
1793 rc = 1;
1794 break; /* from while */
1796 for(i=0; i<nCol; i++){
1797 sqlite3_bind_text(pStmt, i+1, azCol[i], -1, SQLITE_STATIC);
1799 sqlite3_step(pStmt);
1800 rc = sqlite3_reset(pStmt);
1801 free(zLine);
1802 if( rc!=SQLITE_OK ){
1803 fprintf(stderr,"Error: %s\n", sqlite3_errmsg(db));
1804 zCommit = "ROLLBACK";
1805 rc = 1;
1806 break; /* from while */
1808 } /* end while */
1809 free(azCol);
1810 fclose(in);
1811 sqlite3_finalize(pStmt);
1812 sqlite3_exec(p->db, zCommit, 0, 0, 0);
1813 }else
1815 if( c=='i' && strncmp(azArg[0], "indices", n)==0 && nArg<3 ){
1816 struct callback_data data;
1817 char *zErrMsg = 0;
1818 open_db(p);
1819 memcpy(&data, p, sizeof(data));
1820 data.showHeader = 0;
1821 data.mode = MODE_List;
1822 if( nArg==1 ){
1823 rc = sqlite3_exec(p->db,
1824 "SELECT name FROM sqlite_master "
1825 "WHERE type='index' AND name NOT LIKE 'sqlite_%' "
1826 "UNION ALL "
1827 "SELECT name FROM sqlite_temp_master "
1828 "WHERE type='index' "
1829 "ORDER BY 1",
1830 callback, &data, &zErrMsg
1832 }else{
1833 zShellStatic = azArg[1];
1834 rc = sqlite3_exec(p->db,
1835 "SELECT name FROM sqlite_master "
1836 "WHERE type='index' AND tbl_name LIKE shellstatic() "
1837 "UNION ALL "
1838 "SELECT name FROM sqlite_temp_master "
1839 "WHERE type='index' AND tbl_name LIKE shellstatic() "
1840 "ORDER BY 1",
1841 callback, &data, &zErrMsg
1843 zShellStatic = 0;
1845 if( zErrMsg ){
1846 fprintf(stderr,"Error: %s\n", zErrMsg);
1847 sqlite3_free(zErrMsg);
1848 rc = 1;
1849 }else if( rc != SQLITE_OK ){
1850 fprintf(stderr,"Error: querying sqlite_master and sqlite_temp_master\n");
1851 rc = 1;
1853 }else
1855 #ifdef SQLITE_ENABLE_IOTRACE
1856 if( c=='i' && strncmp(azArg[0], "iotrace", n)==0 ){
1857 extern void (*sqlite3IoTrace)(const char*, ...);
1858 if( iotrace && iotrace!=stdout ) fclose(iotrace);
1859 iotrace = 0;
1860 if( nArg<2 ){
1861 sqlite3IoTrace = 0;
1862 }else if( strcmp(azArg[1], "-")==0 ){
1863 sqlite3IoTrace = iotracePrintf;
1864 iotrace = stdout;
1865 }else{
1866 iotrace = fopen(azArg[1], "w");
1867 if( iotrace==0 ){
1868 fprintf(stderr, "Error: cannot open \"%s\"\n", azArg[1]);
1869 sqlite3IoTrace = 0;
1870 rc = 1;
1871 }else{
1872 sqlite3IoTrace = iotracePrintf;
1875 }else
1876 #endif
1878 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1879 if( c=='l' && strncmp(azArg[0], "load", n)==0 && nArg>=2 ){
1880 const char *zFile, *zProc;
1881 char *zErrMsg = 0;
1882 zFile = azArg[1];
1883 zProc = nArg>=3 ? azArg[2] : 0;
1884 open_db(p);
1885 rc = sqlite3_load_extension(p->db, zFile, zProc, &zErrMsg);
1886 if( rc!=SQLITE_OK ){
1887 fprintf(stderr, "Error: %s\n", zErrMsg);
1888 sqlite3_free(zErrMsg);
1889 rc = 1;
1891 }else
1892 #endif
1894 if( c=='l' && strncmp(azArg[0], "log", n)==0 && nArg>=2 ){
1895 const char *zFile = azArg[1];
1896 if( p->pLog && p->pLog!=stdout && p->pLog!=stderr ){
1897 fclose(p->pLog);
1898 p->pLog = 0;
1900 if( strcmp(zFile,"stdout")==0 ){
1901 p->pLog = stdout;
1902 }else if( strcmp(zFile, "stderr")==0 ){
1903 p->pLog = stderr;
1904 }else if( strcmp(zFile, "off")==0 ){
1905 p->pLog = 0;
1906 }else{
1907 p->pLog = fopen(zFile, "w");
1908 if( p->pLog==0 ){
1909 fprintf(stderr, "Error: cannot open \"%s\"\n", zFile);
1912 }else
1914 if( c=='m' && strncmp(azArg[0], "mode", n)==0 && nArg==2 ){
1915 int n2 = strlen30(azArg[1]);
1916 if( (n2==4 && strncmp(azArg[1],"line",n2)==0)
1918 (n2==5 && strncmp(azArg[1],"lines",n2)==0) ){
1919 p->mode = MODE_Line;
1920 }else if( (n2==6 && strncmp(azArg[1],"column",n2)==0)
1922 (n2==7 && strncmp(azArg[1],"columns",n2)==0) ){
1923 p->mode = MODE_Column;
1924 }else if( n2==4 && strncmp(azArg[1],"list",n2)==0 ){
1925 p->mode = MODE_List;
1926 }else if( n2==4 && strncmp(azArg[1],"html",n2)==0 ){
1927 p->mode = MODE_Html;
1928 }else if( n2==3 && strncmp(azArg[1],"tcl",n2)==0 ){
1929 p->mode = MODE_Tcl;
1930 }else if( n2==3 && strncmp(azArg[1],"csv",n2)==0 ){
1931 p->mode = MODE_Csv;
1932 sqlite3_snprintf(sizeof(p->separator), p->separator, ",");
1933 }else if( n2==4 && strncmp(azArg[1],"tabs",n2)==0 ){
1934 p->mode = MODE_List;
1935 sqlite3_snprintf(sizeof(p->separator), p->separator, "\t");
1936 }else if( n2==6 && strncmp(azArg[1],"insert",n2)==0 ){
1937 p->mode = MODE_Insert;
1938 set_table_name(p, "table");
1939 }else {
1940 fprintf(stderr,"Error: mode should be one of: "
1941 "column csv html insert line list tabs tcl\n");
1942 rc = 1;
1944 }else
1946 if( c=='m' && strncmp(azArg[0], "mode", n)==0 && nArg==3 ){
1947 int n2 = strlen30(azArg[1]);
1948 if( n2==6 && strncmp(azArg[1],"insert",n2)==0 ){
1949 p->mode = MODE_Insert;
1950 set_table_name(p, azArg[2]);
1951 }else {
1952 fprintf(stderr, "Error: invalid arguments: "
1953 " \"%s\". Enter \".help\" for help\n", azArg[2]);
1954 rc = 1;
1956 }else
1958 if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 && nArg==2 ) {
1959 sqlite3_snprintf(sizeof(p->nullvalue), p->nullvalue,
1960 "%.*s", (int)ArraySize(p->nullvalue)-1, azArg[1]);
1961 }else
1963 if( c=='o' && strncmp(azArg[0], "output", n)==0 && nArg==2 ){
1964 if( p->out!=stdout ){
1965 fclose(p->out);
1967 if( strcmp(azArg[1],"stdout")==0 ){
1968 p->out = stdout;
1969 sqlite3_snprintf(sizeof(p->outfile), p->outfile, "stdout");
1970 }else{
1971 p->out = fopen(azArg[1], "wb");
1972 if( p->out==0 ){
1973 fprintf(stderr,"Error: cannot write to \"%s\"\n", azArg[1]);
1974 p->out = stdout;
1975 rc = 1;
1976 } else {
1977 sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", azArg[1]);
1980 }else
1982 if( c=='p' && strncmp(azArg[0], "prompt", n)==0 && (nArg==2 || nArg==3)){
1983 if( nArg >= 2) {
1984 strncpy(mainPrompt,azArg[1],(int)ArraySize(mainPrompt)-1);
1986 if( nArg >= 3) {
1987 strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1);
1989 }else
1991 if( c=='q' && strncmp(azArg[0], "quit", n)==0 && nArg==1 ){
1992 rc = 2;
1993 }else
1995 if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 && nArg==2 ){
1996 FILE *alt = fopen(azArg[1], "rb");
1997 if( alt==0 ){
1998 fprintf(stderr,"Error: cannot open \"%s\"\n", azArg[1]);
1999 rc = 1;
2000 }else{
2001 rc = process_input(p, alt);
2002 fclose(alt);
2004 }else
2006 if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 && nArg>1 && nArg<4){
2007 const char *zSrcFile;
2008 const char *zDb;
2009 sqlite3 *pSrc;
2010 sqlite3_backup *pBackup;
2011 int nTimeout = 0;
2013 if( nArg==2 ){
2014 zSrcFile = azArg[1];
2015 zDb = "main";
2016 }else{
2017 zSrcFile = azArg[2];
2018 zDb = azArg[1];
2020 rc = sqlite3_open(zSrcFile, &pSrc);
2021 if( rc!=SQLITE_OK ){
2022 fprintf(stderr, "Error: cannot open \"%s\"\n", zSrcFile);
2023 sqlite3_close(pSrc);
2024 return 1;
2026 open_db(p);
2027 pBackup = sqlite3_backup_init(p->db, zDb, pSrc, "main");
2028 if( pBackup==0 ){
2029 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
2030 sqlite3_close(pSrc);
2031 return 1;
2033 while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK
2034 || rc==SQLITE_BUSY ){
2035 if( rc==SQLITE_BUSY ){
2036 if( nTimeout++ >= 3 ) break;
2037 sqlite3_sleep(100);
2040 sqlite3_backup_finish(pBackup);
2041 if( rc==SQLITE_DONE ){
2042 rc = 0;
2043 }else if( rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){
2044 fprintf(stderr, "Error: source database is busy\n");
2045 rc = 1;
2046 }else{
2047 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
2048 rc = 1;
2050 sqlite3_close(pSrc);
2051 }else
2053 if( c=='s' && strncmp(azArg[0], "schema", n)==0 && nArg<3 ){
2054 struct callback_data data;
2055 char *zErrMsg = 0;
2056 open_db(p);
2057 memcpy(&data, p, sizeof(data));
2058 data.showHeader = 0;
2059 data.mode = MODE_Semi;
2060 if( nArg>1 ){
2061 int i;
2062 for(i=0; azArg[1][i]; i++) azArg[1][i] = ToLower(azArg[1][i]);
2063 if( strcmp(azArg[1],"sqlite_master")==0 ){
2064 char *new_argv[2], *new_colv[2];
2065 new_argv[0] = "CREATE TABLE sqlite_master (\n"
2066 " type text,\n"
2067 " name text,\n"
2068 " tbl_name text,\n"
2069 " rootpage integer,\n"
2070 " sql text\n"
2071 ")";
2072 new_argv[1] = 0;
2073 new_colv[0] = "sql";
2074 new_colv[1] = 0;
2075 callback(&data, 1, new_argv, new_colv);
2076 rc = SQLITE_OK;
2077 }else if( strcmp(azArg[1],"sqlite_temp_master")==0 ){
2078 char *new_argv[2], *new_colv[2];
2079 new_argv[0] = "CREATE TEMP TABLE sqlite_temp_master (\n"
2080 " type text,\n"
2081 " name text,\n"
2082 " tbl_name text,\n"
2083 " rootpage integer,\n"
2084 " sql text\n"
2085 ")";
2086 new_argv[1] = 0;
2087 new_colv[0] = "sql";
2088 new_colv[1] = 0;
2089 callback(&data, 1, new_argv, new_colv);
2090 rc = SQLITE_OK;
2091 }else{
2092 zShellStatic = azArg[1];
2093 rc = sqlite3_exec(p->db,
2094 "SELECT sql FROM "
2095 " (SELECT sql sql, type type, tbl_name tbl_name, name name"
2096 " FROM sqlite_master UNION ALL"
2097 " SELECT sql, type, tbl_name, name FROM sqlite_temp_master) "
2098 "WHERE lower(tbl_name) LIKE shellstatic()"
2099 " AND type!='meta' AND sql NOTNULL "
2100 "ORDER BY substr(type,2,1), name",
2101 callback, &data, &zErrMsg);
2102 zShellStatic = 0;
2104 }else{
2105 rc = sqlite3_exec(p->db,
2106 "SELECT sql FROM "
2107 " (SELECT sql sql, type type, tbl_name tbl_name, name name"
2108 " FROM sqlite_master UNION ALL"
2109 " SELECT sql, type, tbl_name, name FROM sqlite_temp_master) "
2110 "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%'"
2111 "ORDER BY substr(type,2,1), name",
2112 callback, &data, &zErrMsg
2115 if( zErrMsg ){
2116 fprintf(stderr,"Error: %s\n", zErrMsg);
2117 sqlite3_free(zErrMsg);
2118 rc = 1;
2119 }else if( rc != SQLITE_OK ){
2120 fprintf(stderr,"Error: querying schema information\n");
2121 rc = 1;
2122 }else{
2123 rc = 0;
2125 }else
2127 if( c=='s' && strncmp(azArg[0], "separator", n)==0 && nArg==2 ){
2128 sqlite3_snprintf(sizeof(p->separator), p->separator,
2129 "%.*s", (int)sizeof(p->separator)-1, azArg[1]);
2130 }else
2132 if( c=='s' && strncmp(azArg[0], "show", n)==0 && nArg==1 ){
2133 int i;
2134 fprintf(p->out,"%9.9s: %s\n","echo", p->echoOn ? "on" : "off");
2135 fprintf(p->out,"%9.9s: %s\n","explain", p->explainPrev.valid ? "on" :"off");
2136 fprintf(p->out,"%9.9s: %s\n","headers", p->showHeader ? "on" : "off");
2137 fprintf(p->out,"%9.9s: %s\n","mode", modeDescr[p->mode]);
2138 fprintf(p->out,"%9.9s: ", "nullvalue");
2139 output_c_string(p->out, p->nullvalue);
2140 fprintf(p->out, "\n");
2141 fprintf(p->out,"%9.9s: %s\n","output",
2142 strlen30(p->outfile) ? p->outfile : "stdout");
2143 fprintf(p->out,"%9.9s: ", "separator");
2144 output_c_string(p->out, p->separator);
2145 fprintf(p->out, "\n");
2146 fprintf(p->out,"%9.9s: %s\n","stats", p->statsOn ? "on" : "off");
2147 fprintf(p->out,"%9.9s: ","width");
2148 for (i=0;i<(int)ArraySize(p->colWidth) && p->colWidth[i] != 0;i++) {
2149 fprintf(p->out,"%d ",p->colWidth[i]);
2151 fprintf(p->out,"\n");
2152 }else
2154 if( c=='s' && strncmp(azArg[0], "stats", n)==0 && nArg>1 && nArg<3 ){
2155 p->statsOn = booleanValue(azArg[1]);
2156 }else
2158 if( c=='t' && n>1 && strncmp(azArg[0], "tables", n)==0 && nArg<3 ){
2159 char **azResult;
2160 int nRow;
2161 char *zErrMsg;
2162 open_db(p);
2163 if( nArg==1 ){
2164 rc = sqlite3_get_table(p->db,
2165 "SELECT name FROM sqlite_master "
2166 "WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%' "
2167 "UNION ALL "
2168 "SELECT name FROM sqlite_temp_master "
2169 "WHERE type IN ('table','view') "
2170 "ORDER BY 1",
2171 &azResult, &nRow, 0, &zErrMsg
2173 }else{
2174 zShellStatic = azArg[1];
2175 rc = sqlite3_get_table(p->db,
2176 "SELECT name FROM sqlite_master "
2177 "WHERE type IN ('table','view') AND name LIKE shellstatic() "
2178 "UNION ALL "
2179 "SELECT name FROM sqlite_temp_master "
2180 "WHERE type IN ('table','view') AND name LIKE shellstatic() "
2181 "ORDER BY 1",
2182 &azResult, &nRow, 0, &zErrMsg
2184 zShellStatic = 0;
2186 if( zErrMsg ){
2187 fprintf(stderr,"Error: %s\n", zErrMsg);
2188 sqlite3_free(zErrMsg);
2189 rc = 1;
2190 }else if( rc != SQLITE_OK ){
2191 fprintf(stderr,"Error: querying sqlite_master and sqlite_temp_master\n");
2192 rc = 1;
2193 }else{
2194 int len, maxlen = 0;
2195 int i, j;
2196 int nPrintCol, nPrintRow;
2197 for(i=1; i<=nRow; i++){
2198 if( azResult[i]==0 ) continue;
2199 len = strlen30(azResult[i]);
2200 if( len>maxlen ) maxlen = len;
2202 nPrintCol = 80/(maxlen+2);
2203 if( nPrintCol<1 ) nPrintCol = 1;
2204 nPrintRow = (nRow + nPrintCol - 1)/nPrintCol;
2205 for(i=0; i<nPrintRow; i++){
2206 for(j=i+1; j<=nRow; j+=nPrintRow){
2207 char *zSp = j<=nPrintRow ? "" : " ";
2208 printf("%s%-*s", zSp, maxlen, azResult[j] ? azResult[j] : "");
2210 printf("\n");
2213 sqlite3_free_table(azResult);
2214 }else
2216 if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 && nArg>=2 ){
2217 static const struct {
2218 const char *zCtrlName; /* Name of a test-control option */
2219 int ctrlCode; /* Integer code for that option */
2220 } aCtrl[] = {
2221 { "prng_save", SQLITE_TESTCTRL_PRNG_SAVE },
2222 { "prng_restore", SQLITE_TESTCTRL_PRNG_RESTORE },
2223 { "prng_reset", SQLITE_TESTCTRL_PRNG_RESET },
2224 { "bitvec_test", SQLITE_TESTCTRL_BITVEC_TEST },
2225 { "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL },
2226 { "benign_malloc_hooks", SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS },
2227 { "pending_byte", SQLITE_TESTCTRL_PENDING_BYTE },
2228 { "assert", SQLITE_TESTCTRL_ASSERT },
2229 { "always", SQLITE_TESTCTRL_ALWAYS },
2230 { "reserve", SQLITE_TESTCTRL_RESERVE },
2231 { "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS },
2232 { "iskeyword", SQLITE_TESTCTRL_ISKEYWORD },
2233 { "scratchmalloc", SQLITE_TESTCTRL_SCRATCHMALLOC },
2235 int testctrl = -1;
2236 int rc = 0;
2237 int i, n;
2238 open_db(p);
2240 /* convert testctrl text option to value. allow any unique prefix
2241 ** of the option name, or a numerical value. */
2242 n = strlen30(azArg[1]);
2243 for(i=0; i<(int)(sizeof(aCtrl)/sizeof(aCtrl[0])); i++){
2244 if( strncmp(azArg[1], aCtrl[i].zCtrlName, n)==0 ){
2245 if( testctrl<0 ){
2246 testctrl = aCtrl[i].ctrlCode;
2247 }else{
2248 fprintf(stderr, "ambiguous option name: \"%s\"\n", azArg[1]);
2249 testctrl = -1;
2250 break;
2254 if( testctrl<0 ) testctrl = atoi(azArg[1]);
2255 if( (testctrl<SQLITE_TESTCTRL_FIRST) || (testctrl>SQLITE_TESTCTRL_LAST) ){
2256 fprintf(stderr,"Error: invalid testctrl option: %s\n", azArg[1]);
2257 }else{
2258 switch(testctrl){
2260 /* sqlite3_test_control(int, db, int) */
2261 case SQLITE_TESTCTRL_OPTIMIZATIONS:
2262 case SQLITE_TESTCTRL_RESERVE:
2263 if( nArg==3 ){
2264 int opt = (int)strtol(azArg[2], 0, 0);
2265 rc = sqlite3_test_control(testctrl, p->db, opt);
2266 printf("%d (0x%08x)\n", rc, rc);
2267 } else {
2268 fprintf(stderr,"Error: testctrl %s takes a single int option\n",
2269 azArg[1]);
2271 break;
2273 /* sqlite3_test_control(int) */
2274 case SQLITE_TESTCTRL_PRNG_SAVE:
2275 case SQLITE_TESTCTRL_PRNG_RESTORE:
2276 case SQLITE_TESTCTRL_PRNG_RESET:
2277 if( nArg==2 ){
2278 rc = sqlite3_test_control(testctrl);
2279 printf("%d (0x%08x)\n", rc, rc);
2280 } else {
2281 fprintf(stderr,"Error: testctrl %s takes no options\n", azArg[1]);
2283 break;
2285 /* sqlite3_test_control(int, uint) */
2286 case SQLITE_TESTCTRL_PENDING_BYTE:
2287 if( nArg==3 ){
2288 unsigned int opt = (unsigned int)atoi(azArg[2]);
2289 rc = sqlite3_test_control(testctrl, opt);
2290 printf("%d (0x%08x)\n", rc, rc);
2291 } else {
2292 fprintf(stderr,"Error: testctrl %s takes a single unsigned"
2293 " int option\n", azArg[1]);
2295 break;
2297 /* sqlite3_test_control(int, int) */
2298 case SQLITE_TESTCTRL_ASSERT:
2299 case SQLITE_TESTCTRL_ALWAYS:
2300 if( nArg==3 ){
2301 int opt = atoi(azArg[2]);
2302 rc = sqlite3_test_control(testctrl, opt);
2303 printf("%d (0x%08x)\n", rc, rc);
2304 } else {
2305 fprintf(stderr,"Error: testctrl %s takes a single int option\n",
2306 azArg[1]);
2308 break;
2310 /* sqlite3_test_control(int, char *) */
2311 #ifdef SQLITE_N_KEYWORD
2312 case SQLITE_TESTCTRL_ISKEYWORD:
2313 if( nArg==3 ){
2314 const char *opt = azArg[2];
2315 rc = sqlite3_test_control(testctrl, opt);
2316 printf("%d (0x%08x)\n", rc, rc);
2317 } else {
2318 fprintf(stderr,"Error: testctrl %s takes a single char * option\n",
2319 azArg[1]);
2321 break;
2322 #endif
2324 case SQLITE_TESTCTRL_BITVEC_TEST:
2325 case SQLITE_TESTCTRL_FAULT_INSTALL:
2326 case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS:
2327 case SQLITE_TESTCTRL_SCRATCHMALLOC:
2328 default:
2329 fprintf(stderr,"Error: CLI support for testctrl %s not implemented\n",
2330 azArg[1]);
2331 break;
2334 }else
2336 if( c=='t' && n>4 && strncmp(azArg[0], "timeout", n)==0 && nArg==2 ){
2337 open_db(p);
2338 sqlite3_busy_timeout(p->db, atoi(azArg[1]));
2339 }else
2341 if( HAS_TIMER && c=='t' && n>=5 && strncmp(azArg[0], "timer", n)==0
2342 && nArg==2
2344 enableTimer = booleanValue(azArg[1]);
2345 }else
2347 if( c=='v' && strncmp(azArg[0], "version", n)==0 ){
2348 printf("SQLite %s %s\n" /*extra-version-info*/,
2349 sqlite3_libversion(), sqlite3_sourceid());
2350 }else
2352 if( c=='v' && strncmp(azArg[0], "vfsname", n)==0 ){
2353 const char *zDbName = nArg==2 ? azArg[1] : "main";
2354 char *zVfsName = 0;
2355 if( p->db ){
2356 sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFSNAME, &zVfsName);
2357 if( zVfsName ){
2358 printf("%s\n", zVfsName);
2359 sqlite3_free(zVfsName);
2362 }else
2364 if( c=='w' && strncmp(azArg[0], "width", n)==0 && nArg>1 ){
2365 int j;
2366 assert( nArg<=ArraySize(azArg) );
2367 for(j=1; j<nArg && j<ArraySize(p->colWidth); j++){
2368 p->colWidth[j-1] = atoi(azArg[j]);
2370 }else
2373 fprintf(stderr, "Error: unknown command or invalid arguments: "
2374 " \"%s\". Enter \".help\" for help\n", azArg[0]);
2375 rc = 1;
2378 return rc;
2382 ** Return TRUE if a semicolon occurs anywhere in the first N characters
2383 ** of string z[].
2385 static int _contains_semicolon(const char *z, int N){
2386 int i;
2387 for(i=0; i<N; i++){ if( z[i]==';' ) return 1; }
2388 return 0;
2392 ** Test to see if a line consists entirely of whitespace.
2394 static int _all_whitespace(const char *z){
2395 for(; *z; z++){
2396 if( IsSpace(z[0]) ) continue;
2397 if( *z=='/' && z[1]=='*' ){
2398 z += 2;
2399 while( *z && (*z!='*' || z[1]!='/') ){ z++; }
2400 if( *z==0 ) return 0;
2401 z++;
2402 continue;
2404 if( *z=='-' && z[1]=='-' ){
2405 z += 2;
2406 while( *z && *z!='\n' ){ z++; }
2407 if( *z==0 ) return 1;
2408 continue;
2410 return 0;
2412 return 1;
2416 ** Return TRUE if the line typed in is an SQL command terminator other
2417 ** than a semi-colon. The SQL Server style "go" command is understood
2418 ** as is the Oracle "/".
2420 static int _is_command_terminator(const char *zLine){
2421 while( IsSpace(zLine[0]) ){ zLine++; };
2422 if( zLine[0]=='/' && _all_whitespace(&zLine[1]) ){
2423 return 1; /* Oracle */
2425 if( ToLower(zLine[0])=='g' && ToLower(zLine[1])=='o'
2426 && _all_whitespace(&zLine[2]) ){
2427 return 1; /* SQL Server */
2429 return 0;
2433 ** Return true if zSql is a complete SQL statement. Return false if it
2434 ** ends in the middle of a string literal or C-style comment.
2436 static int _is_complete(char *zSql, int nSql){
2437 int rc;
2438 if( zSql==0 ) return 1;
2439 zSql[nSql] = ';';
2440 zSql[nSql+1] = 0;
2441 rc = sqlite3_complete(zSql);
2442 zSql[nSql] = 0;
2443 return rc;
2447 ** Read input from *in and process it. If *in==0 then input
2448 ** is interactive - the user is typing it it. Otherwise, input
2449 ** is coming from a file or device. A prompt is issued and history
2450 ** is saved only if input is interactive. An interrupt signal will
2451 ** cause this routine to exit immediately, unless input is interactive.
2453 ** Return the number of errors.
2455 static int process_input(struct callback_data *p, FILE *in){
2456 char *zLine = 0;
2457 char *zSql = 0;
2458 int nSql = 0;
2459 int nSqlPrior = 0;
2460 char *zErrMsg;
2461 int rc;
2462 int errCnt = 0;
2463 int lineno = 0;
2464 int startline = 0;
2466 while( errCnt==0 || !bail_on_error || (in==0 && stdin_is_interactive) ){
2467 fflush(p->out);
2468 free(zLine);
2469 zLine = one_input_line(zSql, in);
2470 if( zLine==0 ){
2471 break; /* We have reached EOF */
2473 if( seenInterrupt ){
2474 if( in!=0 ) break;
2475 seenInterrupt = 0;
2477 lineno++;
2478 if( (zSql==0 || zSql[0]==0) && _all_whitespace(zLine) ) continue;
2479 if( zLine && zLine[0]=='.' && nSql==0 ){
2480 if( p->echoOn ) printf("%s\n", zLine);
2481 rc = do_meta_command(zLine, p);
2482 if( rc==2 ){ /* exit requested */
2483 break;
2484 }else if( rc ){
2485 errCnt++;
2487 continue;
2489 if( _is_command_terminator(zLine) && _is_complete(zSql, nSql) ){
2490 memcpy(zLine,";",2);
2492 nSqlPrior = nSql;
2493 if( zSql==0 ){
2494 int i;
2495 for(i=0; zLine[i] && IsSpace(zLine[i]); i++){}
2496 if( zLine[i]!=0 ){
2497 nSql = strlen30(zLine);
2498 zSql = malloc( nSql+3 );
2499 if( zSql==0 ){
2500 fprintf(stderr, "Error: out of memory\n");
2501 exit(1);
2503 memcpy(zSql, zLine, nSql+1);
2504 startline = lineno;
2506 }else{
2507 int len = strlen30(zLine);
2508 zSql = realloc( zSql, nSql + len + 4 );
2509 if( zSql==0 ){
2510 fprintf(stderr,"Error: out of memory\n");
2511 exit(1);
2513 zSql[nSql++] = '\n';
2514 memcpy(&zSql[nSql], zLine, len+1);
2515 nSql += len;
2517 if( zSql && _contains_semicolon(&zSql[nSqlPrior], nSql-nSqlPrior)
2518 && sqlite3_complete(zSql) ){
2519 p->cnt = 0;
2520 open_db(p);
2521 BEGIN_TIMER;
2522 rc = shell_exec(p->db, zSql, shell_callback, p, &zErrMsg);
2523 END_TIMER;
2524 if( rc || zErrMsg ){
2525 char zPrefix[100];
2526 if( in!=0 || !stdin_is_interactive ){
2527 sqlite3_snprintf(sizeof(zPrefix), zPrefix,
2528 "Error: near line %d:", startline);
2529 }else{
2530 sqlite3_snprintf(sizeof(zPrefix), zPrefix, "Error:");
2532 if( zErrMsg!=0 ){
2533 fprintf(stderr, "%s %s\n", zPrefix, zErrMsg);
2534 sqlite3_free(zErrMsg);
2535 zErrMsg = 0;
2536 }else{
2537 fprintf(stderr, "%s %s\n", zPrefix, sqlite3_errmsg(p->db));
2539 errCnt++;
2541 free(zSql);
2542 zSql = 0;
2543 nSql = 0;
2546 if( zSql ){
2547 if( !_all_whitespace(zSql) ){
2548 fprintf(stderr, "Error: incomplete SQL: %s\n", zSql);
2550 free(zSql);
2552 free(zLine);
2553 return errCnt;
2557 ** Return a pathname which is the user's home directory. A
2558 ** 0 return indicates an error of some kind. Space to hold the
2559 ** resulting string is obtained from malloc(). The calling
2560 ** function should free the result.
2562 static char *find_home_dir(void){
2563 char *home_dir = NULL;
2565 #if !defined(_WIN32) && !defined(WIN32) && !defined(__OS2__) && !defined(_WIN32_WCE) && !defined(__RTP__) && !defined(_WRS_KERNEL)
2566 struct passwd *pwent;
2567 uid_t uid = getuid();
2568 if( (pwent=getpwuid(uid)) != NULL) {
2569 home_dir = pwent->pw_dir;
2571 #endif
2573 #if defined(_WIN32_WCE)
2574 /* Windows CE (arm-wince-mingw32ce-gcc) does not provide getenv()
2576 home_dir = strdup("/");
2577 #else
2579 #if defined(_WIN32) || defined(WIN32) || defined(__OS2__)
2580 if (!home_dir) {
2581 home_dir = getenv("USERPROFILE");
2583 #endif
2585 if (!home_dir) {
2586 home_dir = getenv("HOME");
2589 #if defined(_WIN32) || defined(WIN32) || defined(__OS2__)
2590 if (!home_dir) {
2591 char *zDrive, *zPath;
2592 int n;
2593 zDrive = getenv("HOMEDRIVE");
2594 zPath = getenv("HOMEPATH");
2595 if( zDrive && zPath ){
2596 n = strlen30(zDrive) + strlen30(zPath) + 1;
2597 home_dir = malloc( n );
2598 if( home_dir==0 ) return 0;
2599 sqlite3_snprintf(n, home_dir, "%s%s", zDrive, zPath);
2600 return home_dir;
2602 home_dir = "c:\\";
2604 #endif
2606 #endif /* !_WIN32_WCE */
2608 if( home_dir ){
2609 int n = strlen30(home_dir) + 1;
2610 char *z = malloc( n );
2611 if( z ) memcpy(z, home_dir, n);
2612 home_dir = z;
2615 return home_dir;
2619 ** Read input from the file given by sqliterc_override. Or if that
2620 ** parameter is NULL, take input from ~/.sqliterc
2622 ** Returns the number of errors.
2624 static int process_sqliterc(
2625 struct callback_data *p, /* Configuration data */
2626 const char *sqliterc_override /* Name of config file. NULL to use default */
2628 char *home_dir = NULL;
2629 const char *sqliterc = sqliterc_override;
2630 char *zBuf = 0;
2631 FILE *in = NULL;
2632 int nBuf;
2633 int rc = 0;
2635 if (sqliterc == NULL) {
2636 home_dir = find_home_dir();
2637 if( home_dir==0 ){
2638 #if !defined(__RTP__) && !defined(_WRS_KERNEL)
2639 fprintf(stderr,"%s: Error: cannot locate your home directory\n", Argv0);
2640 #endif
2641 return 1;
2643 nBuf = strlen30(home_dir) + 16;
2644 zBuf = malloc( nBuf );
2645 if( zBuf==0 ){
2646 fprintf(stderr,"%s: Error: out of memory\n",Argv0);
2647 return 1;
2649 sqlite3_snprintf(nBuf, zBuf,"%s/.sqliterc",home_dir);
2650 free(home_dir);
2651 sqliterc = (const char*)zBuf;
2653 in = fopen(sqliterc,"rb");
2654 if( in ){
2655 if( stdin_is_interactive ){
2656 fprintf(stderr,"-- Loading resources from %s\n",sqliterc);
2658 rc = process_input(p,in);
2659 fclose(in);
2661 free(zBuf);
2662 return rc;
2666 ** Show available command line options
2668 static const char zOptions[] =
2669 " -help show this message\n"
2670 " -init filename read/process named file\n"
2671 " -echo print commands before execution\n"
2672 " -[no]header turn headers on or off\n"
2673 " -bail stop after hitting an error\n"
2674 " -interactive force interactive I/O\n"
2675 " -batch force batch I/O\n"
2676 " -column set output mode to 'column'\n"
2677 " -csv set output mode to 'csv'\n"
2678 " -html set output mode to HTML\n"
2679 " -line set output mode to 'line'\n"
2680 " -list set output mode to 'list'\n"
2681 " -separator 'x' set output field separator (|)\n"
2682 " -stats print memory stats before each finalize\n"
2683 " -nullvalue 'text' set text string for NULL values\n"
2684 " -version show SQLite version\n"
2685 " -vfs NAME use NAME as the default VFS\n"
2686 #ifdef SQLITE_ENABLE_VFSTRACE
2687 " -vfstrace enable tracing of all VFS calls\n"
2688 #endif
2689 #ifdef SQLITE_ENABLE_MULTIPLEX
2690 " -multiplex enable the multiplexor VFS\n"
2691 #endif
2693 static void usage(int showDetail){
2694 fprintf(stderr,
2695 "Usage: %s [OPTIONS] FILENAME [SQL]\n"
2696 "FILENAME is the name of an SQLite database. A new database is created\n"
2697 "if the file does not previously exist.\n", Argv0);
2698 if( showDetail ){
2699 fprintf(stderr, "OPTIONS include:\n%s", zOptions);
2700 }else{
2701 fprintf(stderr, "Use the -help option for additional information\n");
2703 exit(1);
2707 ** Initialize the state information in data
2709 static void main_init(struct callback_data *data) {
2710 memset(data, 0, sizeof(*data));
2711 data->mode = MODE_List;
2712 memcpy(data->separator,"|", 2);
2713 data->showHeader = 0;
2714 sqlite3_config(SQLITE_CONFIG_URI, 1);
2715 sqlite3_config(SQLITE_CONFIG_LOG, shellLog, data);
2716 sqlite3_snprintf(sizeof(mainPrompt), mainPrompt,"sqlite> ");
2717 sqlite3_snprintf(sizeof(continuePrompt), continuePrompt," ...> ");
2718 sqlite3_config(SQLITE_CONFIG_SINGLETHREAD);
2721 int main(int argc, char **argv){
2722 char *zErrMsg = 0;
2723 struct callback_data data;
2724 const char *zInitFile = 0;
2725 char *zFirstCmd = 0;
2726 int i;
2727 int rc = 0;
2729 if( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)!=0 ){
2730 fprintf(stderr, "SQLite header and source version mismatch\n%s\n%s\n",
2731 sqlite3_sourceid(), SQLITE_SOURCE_ID);
2732 exit(1);
2734 Argv0 = argv[0];
2735 main_init(&data);
2736 stdin_is_interactive = isatty(0);
2738 /* Make sure we have a valid signal handler early, before anything
2739 ** else is done.
2741 #ifdef SIGINT
2742 signal(SIGINT, interrupt_handler);
2743 #endif
2745 /* Do an initial pass through the command-line argument to locate
2746 ** the name of the database file, the name of the initialization file,
2747 ** the size of the alternative malloc heap,
2748 ** and the first command to execute.
2750 for(i=1; i<argc-1; i++){
2751 char *z;
2752 if( argv[i][0]!='-' ) break;
2753 z = argv[i];
2754 if( z[0]=='-' && z[1]=='-' ) z++;
2755 if( strcmp(argv[i],"-separator")==0 || strcmp(argv[i],"-nullvalue")==0 ){
2756 i++;
2757 }else if( strcmp(argv[i],"-init")==0 ){
2758 i++;
2759 zInitFile = argv[i];
2760 /* Need to check for batch mode here to so we can avoid printing
2761 ** informational messages (like from process_sqliterc) before
2762 ** we do the actual processing of arguments later in a second pass.
2764 }else if( strcmp(argv[i],"-batch")==0 ){
2765 stdin_is_interactive = 0;
2766 }else if( strcmp(argv[i],"-heap")==0 ){
2767 #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
2768 int j, c;
2769 const char *zSize;
2770 sqlite3_int64 szHeap;
2772 zSize = argv[++i];
2773 szHeap = atoi(zSize);
2774 for(j=0; (c = zSize[j])!=0; j++){
2775 if( c=='M' ){ szHeap *= 1000000; break; }
2776 if( c=='K' ){ szHeap *= 1000; break; }
2777 if( c=='G' ){ szHeap *= 1000000000; break; }
2779 if( szHeap>0x7fff0000 ) szHeap = 0x7fff0000;
2780 sqlite3_config(SQLITE_CONFIG_HEAP, malloc((int)szHeap), (int)szHeap, 64);
2781 #endif
2782 #ifdef SQLITE_ENABLE_VFSTRACE
2783 }else if( strcmp(argv[i],"-vfstrace")==0 ){
2784 extern int vfstrace_register(
2785 const char *zTraceName,
2786 const char *zOldVfsName,
2787 int (*xOut)(const char*,void*),
2788 void *pOutArg,
2789 int makeDefault
2791 vfstrace_register("trace",0,(int(*)(const char*,void*))fputs,stderr,1);
2792 #endif
2793 #ifdef SQLITE_ENABLE_MULTIPLEX
2794 }else if( strcmp(argv[i],"-multiplex")==0 ){
2795 extern int sqlite3_multiple_initialize(const char*,int);
2796 sqlite3_multiplex_initialize(0, 1);
2797 #endif
2798 }else if( strcmp(argv[i],"-vfs")==0 ){
2799 sqlite3_vfs *pVfs = sqlite3_vfs_find(argv[++i]);
2800 if( pVfs ){
2801 sqlite3_vfs_register(pVfs, 1);
2802 }else{
2803 fprintf(stderr, "no such VFS: \"%s\"\n", argv[i]);
2804 exit(1);
2808 if( i<argc ){
2809 #if defined(SQLITE_OS_OS2) && SQLITE_OS_OS2
2810 data.zDbFilename = (const char *)convertCpPathToUtf8( argv[i++] );
2811 #else
2812 data.zDbFilename = argv[i++];
2813 #endif
2814 }else{
2815 #ifndef SQLITE_OMIT_MEMORYDB
2816 data.zDbFilename = ":memory:";
2817 #else
2818 data.zDbFilename = 0;
2819 #endif
2821 if( i<argc ){
2822 zFirstCmd = argv[i++];
2824 if( i<argc ){
2825 fprintf(stderr,"%s: Error: too many options: \"%s\"\n", Argv0, argv[i]);
2826 fprintf(stderr,"Use -help for a list of options.\n");
2827 return 1;
2829 data.out = stdout;
2831 #ifdef SQLITE_OMIT_MEMORYDB
2832 if( data.zDbFilename==0 ){
2833 fprintf(stderr,"%s: Error: no database filename specified\n", Argv0);
2834 return 1;
2836 #endif
2838 /* Go ahead and open the database file if it already exists. If the
2839 ** file does not exist, delay opening it. This prevents empty database
2840 ** files from being created if a user mistypes the database name argument
2841 ** to the sqlite command-line tool.
2843 if( access(data.zDbFilename, 0)==0 ){
2844 open_db(&data);
2847 /* Process the initialization file if there is one. If no -init option
2848 ** is given on the command line, look for a file named ~/.sqliterc and
2849 ** try to process it.
2851 rc = process_sqliterc(&data,zInitFile);
2852 if( rc>0 ){
2853 return rc;
2856 /* Make a second pass through the command-line argument and set
2857 ** options. This second pass is delayed until after the initialization
2858 ** file is processed so that the command-line arguments will override
2859 ** settings in the initialization file.
2861 for(i=1; i<argc && argv[i][0]=='-'; i++){
2862 char *z = argv[i];
2863 if( z[1]=='-' ){ z++; }
2864 if( strcmp(z,"-init")==0 ){
2865 i++;
2866 }else if( strcmp(z,"-html")==0 ){
2867 data.mode = MODE_Html;
2868 }else if( strcmp(z,"-list")==0 ){
2869 data.mode = MODE_List;
2870 }else if( strcmp(z,"-line")==0 ){
2871 data.mode = MODE_Line;
2872 }else if( strcmp(z,"-column")==0 ){
2873 data.mode = MODE_Column;
2874 }else if( strcmp(z,"-csv")==0 ){
2875 data.mode = MODE_Csv;
2876 memcpy(data.separator,",",2);
2877 }else if( strcmp(z,"-separator")==0 ){
2878 i++;
2879 if(i>=argc){
2880 fprintf(stderr,"%s: Error: missing argument for option: %s\n", Argv0, z);
2881 fprintf(stderr,"Use -help for a list of options.\n");
2882 return 1;
2884 sqlite3_snprintf(sizeof(data.separator), data.separator,
2885 "%.*s",(int)sizeof(data.separator)-1,argv[i]);
2886 }else if( strcmp(z,"-nullvalue")==0 ){
2887 i++;
2888 if(i>=argc){
2889 fprintf(stderr,"%s: Error: missing argument for option: %s\n", Argv0, z);
2890 fprintf(stderr,"Use -help for a list of options.\n");
2891 return 1;
2893 sqlite3_snprintf(sizeof(data.nullvalue), data.nullvalue,
2894 "%.*s",(int)sizeof(data.nullvalue)-1,argv[i]);
2895 }else if( strcmp(z,"-header")==0 ){
2896 data.showHeader = 1;
2897 }else if( strcmp(z,"-noheader")==0 ){
2898 data.showHeader = 0;
2899 }else if( strcmp(z,"-echo")==0 ){
2900 data.echoOn = 1;
2901 }else if( strcmp(z,"-stats")==0 ){
2902 data.statsOn = 1;
2903 }else if( strcmp(z,"-bail")==0 ){
2904 bail_on_error = 1;
2905 }else if( strcmp(z,"-version")==0 ){
2906 printf("%s %s\n", sqlite3_libversion(), sqlite3_sourceid());
2907 return 0;
2908 }else if( strcmp(z,"-interactive")==0 ){
2909 stdin_is_interactive = 1;
2910 }else if( strcmp(z,"-batch")==0 ){
2911 stdin_is_interactive = 0;
2912 }else if( strcmp(z,"-heap")==0 ){
2913 i++;
2914 }else if( strcmp(z,"-vfs")==0 ){
2915 i++;
2916 #ifdef SQLITE_ENABLE_VFSTRACE
2917 }else if( strcmp(z,"-vfstrace")==0 ){
2918 i++;
2919 #endif
2920 #ifdef SQLITE_ENABLE_MULTIPLEX
2921 }else if( strcmp(z,"-multiplex")==0 ){
2922 i++;
2923 #endif
2924 }else if( strcmp(z,"-help")==0 || strcmp(z, "--help")==0 ){
2925 usage(1);
2926 }else{
2927 fprintf(stderr,"%s: Error: unknown option: %s\n", Argv0, z);
2928 fprintf(stderr,"Use -help for a list of options.\n");
2929 return 1;
2933 if( zFirstCmd ){
2934 /* Run just the command that follows the database name
2936 if( zFirstCmd[0]=='.' ){
2937 rc = do_meta_command(zFirstCmd, &data);
2938 }else{
2939 open_db(&data);
2940 rc = shell_exec(data.db, zFirstCmd, shell_callback, &data, &zErrMsg);
2941 if( zErrMsg!=0 ){
2942 fprintf(stderr,"Error: %s\n", zErrMsg);
2943 return rc!=0 ? rc : 1;
2944 }else if( rc!=0 ){
2945 fprintf(stderr,"Error: unable to process SQL \"%s\"\n", zFirstCmd);
2946 return rc;
2949 }else{
2950 /* Run commands received from standard input
2952 if( stdin_is_interactive ){
2953 char *zHome;
2954 char *zHistory = 0;
2955 int nHistory;
2956 printf(
2957 "SQLite version %s %.19s\n" /*extra-version-info*/
2958 "Enter \".help\" for instructions\n"
2959 "Enter SQL statements terminated with a \";\"\n",
2960 sqlite3_libversion(), sqlite3_sourceid()
2962 zHome = find_home_dir();
2963 if( zHome ){
2964 nHistory = strlen30(zHome) + 20;
2965 if( (zHistory = malloc(nHistory))!=0 ){
2966 sqlite3_snprintf(nHistory, zHistory,"%s/.sqlite_history", zHome);
2969 #if defined(HAVE_READLINE) && HAVE_READLINE==1
2970 if( zHistory ) read_history(zHistory);
2971 #endif
2972 rc = process_input(&data, 0);
2973 if( zHistory ){
2974 stifle_history(100);
2975 write_history(zHistory);
2976 free(zHistory);
2978 free(zHome);
2979 }else{
2980 rc = process_input(&data, stdin);
2983 set_table_name(&data, 0);
2984 if( data.db ){
2985 sqlite3_close(data.db);
2987 return rc;