add pragma cipher_default_use_hmac to toggle global HMAC setting
[sqlcipher.git] / src / shell.c
blob07623e52a051cf934b9fb93e1a6d73332cccbba0
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 /* perform the first step. this will tell us if we
1131 ** have a result set or not and how wide it is.
1133 rc = sqlite3_step(pStmt);
1134 /* if we have a result set... */
1135 if( SQLITE_ROW == rc ){
1136 /* if we have a callback... */
1137 if( xCallback ){
1138 /* allocate space for col name ptr, value ptr, and type */
1139 int nCol = sqlite3_column_count(pStmt);
1140 void *pData = sqlite3_malloc(3*nCol*sizeof(const char*) + 1);
1141 if( !pData ){
1142 rc = SQLITE_NOMEM;
1143 }else{
1144 char **azCols = (char **)pData; /* Names of result columns */
1145 char **azVals = &azCols[nCol]; /* Results */
1146 int *aiTypes = (int *)&azVals[nCol]; /* Result types */
1147 int i;
1148 assert(sizeof(int) <= sizeof(char *));
1149 /* save off ptrs to column names */
1150 for(i=0; i<nCol; i++){
1151 azCols[i] = (char *)sqlite3_column_name(pStmt, i);
1154 /* extract the data and data types */
1155 for(i=0; i<nCol; i++){
1156 azVals[i] = (char *)sqlite3_column_text(pStmt, i);
1157 aiTypes[i] = sqlite3_column_type(pStmt, i);
1158 if( !azVals[i] && (aiTypes[i]!=SQLITE_NULL) ){
1159 rc = SQLITE_NOMEM;
1160 break; /* from for */
1162 } /* end for */
1164 /* if data and types extracted successfully... */
1165 if( SQLITE_ROW == rc ){
1166 /* call the supplied callback with the result row data */
1167 if( xCallback(pArg, nCol, azVals, azCols, aiTypes) ){
1168 rc = SQLITE_ABORT;
1169 }else{
1170 rc = sqlite3_step(pStmt);
1173 } while( SQLITE_ROW == rc );
1174 sqlite3_free(pData);
1176 }else{
1178 rc = sqlite3_step(pStmt);
1179 } while( rc == SQLITE_ROW );
1183 /* print usage stats if stats on */
1184 if( pArg && pArg->statsOn ){
1185 display_stats(db, pArg, 0);
1188 /* Finalize the statement just executed. If this fails, save a
1189 ** copy of the error message. Otherwise, set zSql to point to the
1190 ** next statement to execute. */
1191 rc2 = sqlite3_finalize(pStmt);
1192 if( rc!=SQLITE_NOMEM ) rc = rc2;
1193 if( rc==SQLITE_OK ){
1194 zSql = zLeftover;
1195 while( IsSpace(zSql[0]) ) zSql++;
1196 }else if( pzErrMsg ){
1197 *pzErrMsg = save_err_msg(db);
1200 /* clear saved stmt handle */
1201 if( pArg ){
1202 pArg->pStmt = NULL;
1205 } /* end while */
1207 return rc;
1212 ** This is a different callback routine used for dumping the database.
1213 ** Each row received by this callback consists of a table name,
1214 ** the table type ("index" or "table") and SQL to create the table.
1215 ** This routine should print text sufficient to recreate the table.
1217 static int dump_callback(void *pArg, int nArg, char **azArg, char **azCol){
1218 int rc;
1219 const char *zTable;
1220 const char *zType;
1221 const char *zSql;
1222 const char *zPrepStmt = 0;
1223 struct callback_data *p = (struct callback_data *)pArg;
1225 UNUSED_PARAMETER(azCol);
1226 if( nArg!=3 ) return 1;
1227 zTable = azArg[0];
1228 zType = azArg[1];
1229 zSql = azArg[2];
1231 if( strcmp(zTable, "sqlite_sequence")==0 ){
1232 zPrepStmt = "DELETE FROM sqlite_sequence;\n";
1233 }else if( strcmp(zTable, "sqlite_stat1")==0 ){
1234 fprintf(p->out, "ANALYZE sqlite_master;\n");
1235 }else if( strncmp(zTable, "sqlite_", 7)==0 ){
1236 return 0;
1237 }else if( strncmp(zSql, "CREATE VIRTUAL TABLE", 20)==0 ){
1238 char *zIns;
1239 if( !p->writableSchema ){
1240 fprintf(p->out, "PRAGMA writable_schema=ON;\n");
1241 p->writableSchema = 1;
1243 zIns = sqlite3_mprintf(
1244 "INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"
1245 "VALUES('table','%q','%q',0,'%q');",
1246 zTable, zTable, zSql);
1247 fprintf(p->out, "%s\n", zIns);
1248 sqlite3_free(zIns);
1249 return 0;
1250 }else{
1251 fprintf(p->out, "%s;\n", zSql);
1254 if( strcmp(zType, "table")==0 ){
1255 sqlite3_stmt *pTableInfo = 0;
1256 char *zSelect = 0;
1257 char *zTableInfo = 0;
1258 char *zTmp = 0;
1259 int nRow = 0;
1261 zTableInfo = appendText(zTableInfo, "PRAGMA table_info(", 0);
1262 zTableInfo = appendText(zTableInfo, zTable, '"');
1263 zTableInfo = appendText(zTableInfo, ");", 0);
1265 rc = sqlite3_prepare(p->db, zTableInfo, -1, &pTableInfo, 0);
1266 free(zTableInfo);
1267 if( rc!=SQLITE_OK || !pTableInfo ){
1268 return 1;
1271 zSelect = appendText(zSelect, "SELECT 'INSERT INTO ' || ", 0);
1272 zTmp = appendText(zTmp, zTable, '"');
1273 if( zTmp ){
1274 zSelect = appendText(zSelect, zTmp, '\'');
1276 zSelect = appendText(zSelect, " || ' VALUES(' || ", 0);
1277 rc = sqlite3_step(pTableInfo);
1278 while( rc==SQLITE_ROW ){
1279 const char *zText = (const char *)sqlite3_column_text(pTableInfo, 1);
1280 zSelect = appendText(zSelect, "quote(", 0);
1281 zSelect = appendText(zSelect, zText, '"');
1282 rc = sqlite3_step(pTableInfo);
1283 if( rc==SQLITE_ROW ){
1284 zSelect = appendText(zSelect, ") || ',' || ", 0);
1285 }else{
1286 zSelect = appendText(zSelect, ") ", 0);
1288 nRow++;
1290 rc = sqlite3_finalize(pTableInfo);
1291 if( rc!=SQLITE_OK || nRow==0 ){
1292 free(zSelect);
1293 return 1;
1295 zSelect = appendText(zSelect, "|| ')' FROM ", 0);
1296 zSelect = appendText(zSelect, zTable, '"');
1298 rc = run_table_dump_query(p, zSelect, zPrepStmt);
1299 if( rc==SQLITE_CORRUPT ){
1300 zSelect = appendText(zSelect, " ORDER BY rowid DESC", 0);
1301 run_table_dump_query(p, zSelect, 0);
1303 if( zSelect ) free(zSelect);
1305 return 0;
1309 ** Run zQuery. Use dump_callback() as the callback routine so that
1310 ** the contents of the query are output as SQL statements.
1312 ** If we get a SQLITE_CORRUPT error, rerun the query after appending
1313 ** "ORDER BY rowid DESC" to the end.
1315 static int run_schema_dump_query(
1316 struct callback_data *p,
1317 const char *zQuery
1319 int rc;
1320 char *zErr = 0;
1321 rc = sqlite3_exec(p->db, zQuery, dump_callback, p, &zErr);
1322 if( rc==SQLITE_CORRUPT ){
1323 char *zQ2;
1324 int len = strlen30(zQuery);
1325 fprintf(p->out, "/****** CORRUPTION ERROR *******/\n");
1326 if( zErr ){
1327 fprintf(p->out, "/****** %s ******/\n", zErr);
1328 sqlite3_free(zErr);
1329 zErr = 0;
1331 zQ2 = malloc( len+100 );
1332 if( zQ2==0 ) return rc;
1333 sqlite3_snprintf(sizeof(zQ2), zQ2, "%s ORDER BY rowid DESC", zQuery);
1334 rc = sqlite3_exec(p->db, zQ2, dump_callback, p, &zErr);
1335 if( rc ){
1336 fprintf(p->out, "/****** ERROR: %s ******/\n", zErr);
1337 }else{
1338 rc = SQLITE_CORRUPT;
1340 sqlite3_free(zErr);
1341 free(zQ2);
1343 return rc;
1347 ** Text of a help message
1349 static char zHelp[] =
1350 ".backup ?DB? FILE Backup DB (default \"main\") to FILE\n"
1351 ".bail ON|OFF Stop after hitting an error. Default OFF\n"
1352 ".databases List names and files of attached databases\n"
1353 ".dump ?TABLE? ... Dump the database in an SQL text format\n"
1354 " If TABLE specified, only dump tables matching\n"
1355 " LIKE pattern TABLE.\n"
1356 ".echo ON|OFF Turn command echo on or off\n"
1357 ".exit Exit this program\n"
1358 ".explain ?ON|OFF? Turn output mode suitable for EXPLAIN on or off.\n"
1359 " With no args, it turns EXPLAIN on.\n"
1360 ".header(s) ON|OFF Turn display of headers on or off\n"
1361 ".help Show this message\n"
1362 ".import FILE TABLE Import data from FILE into TABLE\n"
1363 ".indices ?TABLE? Show names of all indices\n"
1364 " If TABLE specified, only show indices for tables\n"
1365 " matching LIKE pattern TABLE.\n"
1366 #ifdef SQLITE_ENABLE_IOTRACE
1367 ".iotrace FILE Enable I/O diagnostic logging to FILE\n"
1368 #endif
1369 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1370 ".load FILE ?ENTRY? Load an extension library\n"
1371 #endif
1372 ".log FILE|off Turn logging on or off. FILE can be stderr/stdout\n"
1373 ".mode MODE ?TABLE? Set output mode where MODE is one of:\n"
1374 " csv Comma-separated values\n"
1375 " column Left-aligned columns. (See .width)\n"
1376 " html HTML <table> code\n"
1377 " insert SQL insert statements for TABLE\n"
1378 " line One value per line\n"
1379 " list Values delimited by .separator string\n"
1380 " tabs Tab-separated values\n"
1381 " tcl TCL list elements\n"
1382 ".nullvalue STRING Print STRING in place of NULL values\n"
1383 ".output FILENAME Send output to FILENAME\n"
1384 ".output stdout Send output to the screen\n"
1385 ".prompt MAIN CONTINUE Replace the standard prompts\n"
1386 ".quit Exit this program\n"
1387 ".read FILENAME Execute SQL in FILENAME\n"
1388 ".restore ?DB? FILE Restore content of DB (default \"main\") from FILE\n"
1389 ".schema ?TABLE? Show the CREATE statements\n"
1390 " If TABLE specified, only show tables matching\n"
1391 " LIKE pattern TABLE.\n"
1392 ".separator STRING Change separator used by output mode and .import\n"
1393 ".show Show the current values for various settings\n"
1394 ".stats ON|OFF Turn stats on or off\n"
1395 ".tables ?TABLE? List names of tables\n"
1396 " If TABLE specified, only list tables matching\n"
1397 " LIKE pattern TABLE.\n"
1398 ".timeout MS Try opening locked tables for MS milliseconds\n"
1399 ".width NUM1 NUM2 ... Set column widths for \"column\" mode\n"
1402 static char zTimerHelp[] =
1403 ".timer ON|OFF Turn the CPU timer measurement on or off\n"
1406 /* Forward reference */
1407 static int process_input(struct callback_data *p, FILE *in);
1410 ** Make sure the database is open. If it is not, then open it. If
1411 ** the database fails to open, print an error message and exit.
1413 static void open_db(struct callback_data *p){
1414 if( p->db==0 ){
1415 sqlite3_open(p->zDbFilename, &p->db);
1416 db = p->db;
1417 if( db && sqlite3_errcode(db)==SQLITE_OK ){
1418 sqlite3_create_function(db, "shellstatic", 0, SQLITE_UTF8, 0,
1419 shellstaticFunc, 0, 0);
1421 if( db==0 || SQLITE_OK!=sqlite3_errcode(db) ){
1422 fprintf(stderr,"Error: unable to open database \"%s\": %s\n",
1423 p->zDbFilename, sqlite3_errmsg(db));
1424 exit(1);
1426 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1427 sqlite3_enable_load_extension(p->db, 1);
1428 #endif
1433 ** Do C-language style dequoting.
1435 ** \t -> tab
1436 ** \n -> newline
1437 ** \r -> carriage return
1438 ** \NNN -> ascii character NNN in octal
1439 ** \\ -> backslash
1441 static void resolve_backslashes(char *z){
1442 int i, j;
1443 char c;
1444 for(i=j=0; (c = z[i])!=0; i++, j++){
1445 if( c=='\\' ){
1446 c = z[++i];
1447 if( c=='n' ){
1448 c = '\n';
1449 }else if( c=='t' ){
1450 c = '\t';
1451 }else if( c=='r' ){
1452 c = '\r';
1453 }else if( c>='0' && c<='7' ){
1454 c -= '0';
1455 if( z[i+1]>='0' && z[i+1]<='7' ){
1456 i++;
1457 c = (c<<3) + z[i] - '0';
1458 if( z[i+1]>='0' && z[i+1]<='7' ){
1459 i++;
1460 c = (c<<3) + z[i] - '0';
1465 z[j] = c;
1467 z[j] = 0;
1471 ** Interpret zArg as a boolean value. Return either 0 or 1.
1473 static int booleanValue(char *zArg){
1474 int val = atoi(zArg);
1475 int j;
1476 for(j=0; zArg[j]; j++){
1477 zArg[j] = ToLower(zArg[j]);
1479 if( strcmp(zArg,"on")==0 ){
1480 val = 1;
1481 }else if( strcmp(zArg,"yes")==0 ){
1482 val = 1;
1484 return val;
1488 ** If an input line begins with "." then invoke this routine to
1489 ** process that line.
1491 ** Return 1 on error, 2 to exit, and 0 otherwise.
1493 static int do_meta_command(char *zLine, struct callback_data *p){
1494 int i = 1;
1495 int nArg = 0;
1496 int n, c;
1497 int rc = 0;
1498 char *azArg[50];
1500 /* Parse the input line into tokens.
1502 while( zLine[i] && nArg<ArraySize(azArg) ){
1503 while( IsSpace(zLine[i]) ){ i++; }
1504 if( zLine[i]==0 ) break;
1505 if( zLine[i]=='\'' || zLine[i]=='"' ){
1506 int delim = zLine[i++];
1507 azArg[nArg++] = &zLine[i];
1508 while( zLine[i] && zLine[i]!=delim ){ i++; }
1509 if( zLine[i]==delim ){
1510 zLine[i++] = 0;
1512 if( delim=='"' ) resolve_backslashes(azArg[nArg-1]);
1513 }else{
1514 azArg[nArg++] = &zLine[i];
1515 while( zLine[i] && !IsSpace(zLine[i]) ){ i++; }
1516 if( zLine[i] ) zLine[i++] = 0;
1517 resolve_backslashes(azArg[nArg-1]);
1521 /* Process the input line.
1523 if( nArg==0 ) return 0; /* no tokens, no error */
1524 n = strlen30(azArg[0]);
1525 c = azArg[0][0];
1526 if( c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0 && nArg>1 && nArg<4){
1527 const char *zDestFile;
1528 const char *zDb;
1529 sqlite3 *pDest;
1530 sqlite3_backup *pBackup;
1531 if( nArg==2 ){
1532 zDestFile = azArg[1];
1533 zDb = "main";
1534 }else{
1535 zDestFile = azArg[2];
1536 zDb = azArg[1];
1538 rc = sqlite3_open(zDestFile, &pDest);
1539 if( rc!=SQLITE_OK ){
1540 fprintf(stderr, "Error: cannot open \"%s\"\n", zDestFile);
1541 sqlite3_close(pDest);
1542 return 1;
1544 open_db(p);
1545 pBackup = sqlite3_backup_init(pDest, "main", p->db, zDb);
1546 if( pBackup==0 ){
1547 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
1548 sqlite3_close(pDest);
1549 return 1;
1551 while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK ){}
1552 sqlite3_backup_finish(pBackup);
1553 if( rc==SQLITE_DONE ){
1554 rc = 0;
1555 }else{
1556 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
1557 rc = 1;
1559 sqlite3_close(pDest);
1560 }else
1562 if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 && nArg>1 && nArg<3 ){
1563 bail_on_error = booleanValue(azArg[1]);
1564 }else
1566 if( c=='d' && n>1 && strncmp(azArg[0], "databases", n)==0 && nArg==1 ){
1567 struct callback_data data;
1568 char *zErrMsg = 0;
1569 open_db(p);
1570 memcpy(&data, p, sizeof(data));
1571 data.showHeader = 1;
1572 data.mode = MODE_Column;
1573 data.colWidth[0] = 3;
1574 data.colWidth[1] = 15;
1575 data.colWidth[2] = 58;
1576 data.cnt = 0;
1577 sqlite3_exec(p->db, "PRAGMA database_list; ", callback, &data, &zErrMsg);
1578 if( zErrMsg ){
1579 fprintf(stderr,"Error: %s\n", zErrMsg);
1580 sqlite3_free(zErrMsg);
1581 rc = 1;
1583 }else
1585 if( c=='d' && strncmp(azArg[0], "dump", n)==0 && nArg<3 ){
1586 open_db(p);
1587 /* When playing back a "dump", the content might appear in an order
1588 ** which causes immediate foreign key constraints to be violated.
1589 ** So disable foreign-key constraint enforcement to prevent problems. */
1590 fprintf(p->out, "PRAGMA foreign_keys=OFF;\n");
1591 fprintf(p->out, "BEGIN TRANSACTION;\n");
1592 p->writableSchema = 0;
1593 sqlite3_exec(p->db, "SAVEPOINT dump; PRAGMA writable_schema=ON", 0, 0, 0);
1594 p->nErr = 0;
1595 if( nArg==1 ){
1596 run_schema_dump_query(p,
1597 "SELECT name, type, sql FROM sqlite_master "
1598 "WHERE sql NOT NULL AND type=='table' AND name!='sqlite_sequence'"
1600 run_schema_dump_query(p,
1601 "SELECT name, type, sql FROM sqlite_master "
1602 "WHERE name=='sqlite_sequence'"
1604 run_table_dump_query(p,
1605 "SELECT sql FROM sqlite_master "
1606 "WHERE sql NOT NULL AND type IN ('index','trigger','view')", 0
1608 }else{
1609 int i;
1610 for(i=1; i<nArg; i++){
1611 zShellStatic = azArg[i];
1612 run_schema_dump_query(p,
1613 "SELECT name, type, sql FROM sqlite_master "
1614 "WHERE tbl_name LIKE shellstatic() AND type=='table'"
1615 " AND sql NOT NULL");
1616 run_table_dump_query(p,
1617 "SELECT sql FROM sqlite_master "
1618 "WHERE sql NOT NULL"
1619 " AND type IN ('index','trigger','view')"
1620 " AND tbl_name LIKE shellstatic()", 0
1622 zShellStatic = 0;
1625 if( p->writableSchema ){
1626 fprintf(p->out, "PRAGMA writable_schema=OFF;\n");
1627 p->writableSchema = 0;
1629 sqlite3_exec(p->db, "PRAGMA writable_schema=OFF;", 0, 0, 0);
1630 sqlite3_exec(p->db, "RELEASE dump;", 0, 0, 0);
1631 fprintf(p->out, p->nErr ? "ROLLBACK; -- due to errors\n" : "COMMIT;\n");
1632 }else
1634 if( c=='e' && strncmp(azArg[0], "echo", n)==0 && nArg>1 && nArg<3 ){
1635 p->echoOn = booleanValue(azArg[1]);
1636 }else
1638 if( c=='e' && strncmp(azArg[0], "exit", n)==0 && nArg==1 ){
1639 rc = 2;
1640 }else
1642 if( c=='e' && strncmp(azArg[0], "explain", n)==0 && nArg<3 ){
1643 int val = nArg>=2 ? booleanValue(azArg[1]) : 1;
1644 if(val == 1) {
1645 if(!p->explainPrev.valid) {
1646 p->explainPrev.valid = 1;
1647 p->explainPrev.mode = p->mode;
1648 p->explainPrev.showHeader = p->showHeader;
1649 memcpy(p->explainPrev.colWidth,p->colWidth,sizeof(p->colWidth));
1651 /* We could put this code under the !p->explainValid
1652 ** condition so that it does not execute if we are already in
1653 ** explain mode. However, always executing it allows us an easy
1654 ** was to reset to explain mode in case the user previously
1655 ** did an .explain followed by a .width, .mode or .header
1656 ** command.
1658 p->mode = MODE_Explain;
1659 p->showHeader = 1;
1660 memset(p->colWidth,0,ArraySize(p->colWidth));
1661 p->colWidth[0] = 4; /* addr */
1662 p->colWidth[1] = 13; /* opcode */
1663 p->colWidth[2] = 4; /* P1 */
1664 p->colWidth[3] = 4; /* P2 */
1665 p->colWidth[4] = 4; /* P3 */
1666 p->colWidth[5] = 13; /* P4 */
1667 p->colWidth[6] = 2; /* P5 */
1668 p->colWidth[7] = 13; /* Comment */
1669 }else if (p->explainPrev.valid) {
1670 p->explainPrev.valid = 0;
1671 p->mode = p->explainPrev.mode;
1672 p->showHeader = p->explainPrev.showHeader;
1673 memcpy(p->colWidth,p->explainPrev.colWidth,sizeof(p->colWidth));
1675 }else
1677 if( c=='h' && (strncmp(azArg[0], "header", n)==0 ||
1678 strncmp(azArg[0], "headers", n)==0) && nArg>1 && nArg<3 ){
1679 p->showHeader = booleanValue(azArg[1]);
1680 }else
1682 if( c=='h' && strncmp(azArg[0], "help", n)==0 ){
1683 fprintf(stderr,"%s",zHelp);
1684 if( HAS_TIMER ){
1685 fprintf(stderr,"%s",zTimerHelp);
1687 }else
1689 if( c=='i' && strncmp(azArg[0], "import", n)==0 && nArg==3 ){
1690 char *zTable = azArg[2]; /* Insert data into this table */
1691 char *zFile = azArg[1]; /* The file from which to extract data */
1692 sqlite3_stmt *pStmt = NULL; /* A statement */
1693 int nCol; /* Number of columns in the table */
1694 int nByte; /* Number of bytes in an SQL string */
1695 int i, j; /* Loop counters */
1696 int nSep; /* Number of bytes in p->separator[] */
1697 char *zSql; /* An SQL statement */
1698 char *zLine; /* A single line of input from the file */
1699 char **azCol; /* zLine[] broken up into columns */
1700 char *zCommit; /* How to commit changes */
1701 FILE *in; /* The input file */
1702 int lineno = 0; /* Line number of input file */
1704 open_db(p);
1705 nSep = strlen30(p->separator);
1706 if( nSep==0 ){
1707 fprintf(stderr, "Error: non-null separator required for import\n");
1708 return 1;
1710 zSql = sqlite3_mprintf("SELECT * FROM %s", zTable);
1711 if( zSql==0 ){
1712 fprintf(stderr, "Error: out of memory\n");
1713 return 1;
1715 nByte = strlen30(zSql);
1716 rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
1717 sqlite3_free(zSql);
1718 if( rc ){
1719 if (pStmt) sqlite3_finalize(pStmt);
1720 fprintf(stderr,"Error: %s\n", sqlite3_errmsg(db));
1721 return 1;
1723 nCol = sqlite3_column_count(pStmt);
1724 sqlite3_finalize(pStmt);
1725 pStmt = 0;
1726 if( nCol==0 ) return 0; /* no columns, no error */
1727 zSql = malloc( nByte + 20 + nCol*2 );
1728 if( zSql==0 ){
1729 fprintf(stderr, "Error: out of memory\n");
1730 return 1;
1732 sqlite3_snprintf(nByte+20, zSql, "INSERT INTO %s VALUES(?", zTable);
1733 j = strlen30(zSql);
1734 for(i=1; i<nCol; i++){
1735 zSql[j++] = ',';
1736 zSql[j++] = '?';
1738 zSql[j++] = ')';
1739 zSql[j] = 0;
1740 rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
1741 free(zSql);
1742 if( rc ){
1743 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(db));
1744 if (pStmt) sqlite3_finalize(pStmt);
1745 return 1;
1747 in = fopen(zFile, "rb");
1748 if( in==0 ){
1749 fprintf(stderr, "Error: cannot open \"%s\"\n", zFile);
1750 sqlite3_finalize(pStmt);
1751 return 1;
1753 azCol = malloc( sizeof(azCol[0])*(nCol+1) );
1754 if( azCol==0 ){
1755 fprintf(stderr, "Error: out of memory\n");
1756 fclose(in);
1757 sqlite3_finalize(pStmt);
1758 return 1;
1760 sqlite3_exec(p->db, "BEGIN", 0, 0, 0);
1761 zCommit = "COMMIT";
1762 while( (zLine = local_getline(0, in))!=0 ){
1763 char *z;
1764 lineno++;
1765 azCol[0] = zLine;
1766 for(i=0, z=zLine; *z && *z!='\n' && *z!='\r'; z++){
1767 if( *z==p->separator[0] && strncmp(z, p->separator, nSep)==0 ){
1768 *z = 0;
1769 i++;
1770 if( i<nCol ){
1771 azCol[i] = &z[nSep];
1772 z += nSep-1;
1775 } /* end for */
1776 *z = 0;
1777 if( i+1!=nCol ){
1778 fprintf(stderr,
1779 "Error: %s line %d: expected %d columns of data but found %d\n",
1780 zFile, lineno, nCol, i+1);
1781 zCommit = "ROLLBACK";
1782 free(zLine);
1783 rc = 1;
1784 break; /* from while */
1786 for(i=0; i<nCol; i++){
1787 sqlite3_bind_text(pStmt, i+1, azCol[i], -1, SQLITE_STATIC);
1789 sqlite3_step(pStmt);
1790 rc = sqlite3_reset(pStmt);
1791 free(zLine);
1792 if( rc!=SQLITE_OK ){
1793 fprintf(stderr,"Error: %s\n", sqlite3_errmsg(db));
1794 zCommit = "ROLLBACK";
1795 rc = 1;
1796 break; /* from while */
1798 } /* end while */
1799 free(azCol);
1800 fclose(in);
1801 sqlite3_finalize(pStmt);
1802 sqlite3_exec(p->db, zCommit, 0, 0, 0);
1803 }else
1805 if( c=='i' && strncmp(azArg[0], "indices", n)==0 && nArg<3 ){
1806 struct callback_data data;
1807 char *zErrMsg = 0;
1808 open_db(p);
1809 memcpy(&data, p, sizeof(data));
1810 data.showHeader = 0;
1811 data.mode = MODE_List;
1812 if( nArg==1 ){
1813 rc = sqlite3_exec(p->db,
1814 "SELECT name FROM sqlite_master "
1815 "WHERE type='index' AND name NOT LIKE 'sqlite_%' "
1816 "UNION ALL "
1817 "SELECT name FROM sqlite_temp_master "
1818 "WHERE type='index' "
1819 "ORDER BY 1",
1820 callback, &data, &zErrMsg
1822 }else{
1823 zShellStatic = azArg[1];
1824 rc = sqlite3_exec(p->db,
1825 "SELECT name FROM sqlite_master "
1826 "WHERE type='index' AND tbl_name LIKE shellstatic() "
1827 "UNION ALL "
1828 "SELECT name FROM sqlite_temp_master "
1829 "WHERE type='index' AND tbl_name LIKE shellstatic() "
1830 "ORDER BY 1",
1831 callback, &data, &zErrMsg
1833 zShellStatic = 0;
1835 if( zErrMsg ){
1836 fprintf(stderr,"Error: %s\n", zErrMsg);
1837 sqlite3_free(zErrMsg);
1838 rc = 1;
1839 }else if( rc != SQLITE_OK ){
1840 fprintf(stderr,"Error: querying sqlite_master and sqlite_temp_master\n");
1841 rc = 1;
1843 }else
1845 #ifdef SQLITE_ENABLE_IOTRACE
1846 if( c=='i' && strncmp(azArg[0], "iotrace", n)==0 ){
1847 extern void (*sqlite3IoTrace)(const char*, ...);
1848 if( iotrace && iotrace!=stdout ) fclose(iotrace);
1849 iotrace = 0;
1850 if( nArg<2 ){
1851 sqlite3IoTrace = 0;
1852 }else if( strcmp(azArg[1], "-")==0 ){
1853 sqlite3IoTrace = iotracePrintf;
1854 iotrace = stdout;
1855 }else{
1856 iotrace = fopen(azArg[1], "w");
1857 if( iotrace==0 ){
1858 fprintf(stderr, "Error: cannot open \"%s\"\n", azArg[1]);
1859 sqlite3IoTrace = 0;
1860 rc = 1;
1861 }else{
1862 sqlite3IoTrace = iotracePrintf;
1865 }else
1866 #endif
1868 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1869 if( c=='l' && strncmp(azArg[0], "load", n)==0 && nArg>=2 ){
1870 const char *zFile, *zProc;
1871 char *zErrMsg = 0;
1872 zFile = azArg[1];
1873 zProc = nArg>=3 ? azArg[2] : 0;
1874 open_db(p);
1875 rc = sqlite3_load_extension(p->db, zFile, zProc, &zErrMsg);
1876 if( rc!=SQLITE_OK ){
1877 fprintf(stderr, "Error: %s\n", zErrMsg);
1878 sqlite3_free(zErrMsg);
1879 rc = 1;
1881 }else
1882 #endif
1884 if( c=='l' && strncmp(azArg[0], "log", n)==0 && nArg>=2 ){
1885 const char *zFile = azArg[1];
1886 if( p->pLog && p->pLog!=stdout && p->pLog!=stderr ){
1887 fclose(p->pLog);
1888 p->pLog = 0;
1890 if( strcmp(zFile,"stdout")==0 ){
1891 p->pLog = stdout;
1892 }else if( strcmp(zFile, "stderr")==0 ){
1893 p->pLog = stderr;
1894 }else if( strcmp(zFile, "off")==0 ){
1895 p->pLog = 0;
1896 }else{
1897 p->pLog = fopen(zFile, "w");
1898 if( p->pLog==0 ){
1899 fprintf(stderr, "Error: cannot open \"%s\"\n", zFile);
1902 }else
1904 if( c=='m' && strncmp(azArg[0], "mode", n)==0 && nArg==2 ){
1905 int n2 = strlen30(azArg[1]);
1906 if( (n2==4 && strncmp(azArg[1],"line",n2)==0)
1908 (n2==5 && strncmp(azArg[1],"lines",n2)==0) ){
1909 p->mode = MODE_Line;
1910 }else if( (n2==6 && strncmp(azArg[1],"column",n2)==0)
1912 (n2==7 && strncmp(azArg[1],"columns",n2)==0) ){
1913 p->mode = MODE_Column;
1914 }else if( n2==4 && strncmp(azArg[1],"list",n2)==0 ){
1915 p->mode = MODE_List;
1916 }else if( n2==4 && strncmp(azArg[1],"html",n2)==0 ){
1917 p->mode = MODE_Html;
1918 }else if( n2==3 && strncmp(azArg[1],"tcl",n2)==0 ){
1919 p->mode = MODE_Tcl;
1920 }else if( n2==3 && strncmp(azArg[1],"csv",n2)==0 ){
1921 p->mode = MODE_Csv;
1922 sqlite3_snprintf(sizeof(p->separator), p->separator, ",");
1923 }else if( n2==4 && strncmp(azArg[1],"tabs",n2)==0 ){
1924 p->mode = MODE_List;
1925 sqlite3_snprintf(sizeof(p->separator), p->separator, "\t");
1926 }else if( n2==6 && strncmp(azArg[1],"insert",n2)==0 ){
1927 p->mode = MODE_Insert;
1928 set_table_name(p, "table");
1929 }else {
1930 fprintf(stderr,"Error: mode should be one of: "
1931 "column csv html insert line list tabs tcl\n");
1932 rc = 1;
1934 }else
1936 if( c=='m' && strncmp(azArg[0], "mode", n)==0 && nArg==3 ){
1937 int n2 = strlen30(azArg[1]);
1938 if( n2==6 && strncmp(azArg[1],"insert",n2)==0 ){
1939 p->mode = MODE_Insert;
1940 set_table_name(p, azArg[2]);
1941 }else {
1942 fprintf(stderr, "Error: invalid arguments: "
1943 " \"%s\". Enter \".help\" for help\n", azArg[2]);
1944 rc = 1;
1946 }else
1948 if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 && nArg==2 ) {
1949 sqlite3_snprintf(sizeof(p->nullvalue), p->nullvalue,
1950 "%.*s", (int)ArraySize(p->nullvalue)-1, azArg[1]);
1951 }else
1953 if( c=='o' && strncmp(azArg[0], "output", n)==0 && nArg==2 ){
1954 if( p->out!=stdout ){
1955 fclose(p->out);
1957 if( strcmp(azArg[1],"stdout")==0 ){
1958 p->out = stdout;
1959 sqlite3_snprintf(sizeof(p->outfile), p->outfile, "stdout");
1960 }else{
1961 p->out = fopen(azArg[1], "wb");
1962 if( p->out==0 ){
1963 fprintf(stderr,"Error: cannot write to \"%s\"\n", azArg[1]);
1964 p->out = stdout;
1965 rc = 1;
1966 } else {
1967 sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", azArg[1]);
1970 }else
1972 if( c=='p' && strncmp(azArg[0], "prompt", n)==0 && (nArg==2 || nArg==3)){
1973 if( nArg >= 2) {
1974 strncpy(mainPrompt,azArg[1],(int)ArraySize(mainPrompt)-1);
1976 if( nArg >= 3) {
1977 strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1);
1979 }else
1981 if( c=='q' && strncmp(azArg[0], "quit", n)==0 && nArg==1 ){
1982 rc = 2;
1983 }else
1985 if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 && nArg==2 ){
1986 FILE *alt = fopen(azArg[1], "rb");
1987 if( alt==0 ){
1988 fprintf(stderr,"Error: cannot open \"%s\"\n", azArg[1]);
1989 rc = 1;
1990 }else{
1991 rc = process_input(p, alt);
1992 fclose(alt);
1994 }else
1996 if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 && nArg>1 && nArg<4){
1997 const char *zSrcFile;
1998 const char *zDb;
1999 sqlite3 *pSrc;
2000 sqlite3_backup *pBackup;
2001 int nTimeout = 0;
2003 if( nArg==2 ){
2004 zSrcFile = azArg[1];
2005 zDb = "main";
2006 }else{
2007 zSrcFile = azArg[2];
2008 zDb = azArg[1];
2010 rc = sqlite3_open(zSrcFile, &pSrc);
2011 if( rc!=SQLITE_OK ){
2012 fprintf(stderr, "Error: cannot open \"%s\"\n", zSrcFile);
2013 sqlite3_close(pSrc);
2014 return 1;
2016 open_db(p);
2017 pBackup = sqlite3_backup_init(p->db, zDb, pSrc, "main");
2018 if( pBackup==0 ){
2019 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
2020 sqlite3_close(pSrc);
2021 return 1;
2023 while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK
2024 || rc==SQLITE_BUSY ){
2025 if( rc==SQLITE_BUSY ){
2026 if( nTimeout++ >= 3 ) break;
2027 sqlite3_sleep(100);
2030 sqlite3_backup_finish(pBackup);
2031 if( rc==SQLITE_DONE ){
2032 rc = 0;
2033 }else if( rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){
2034 fprintf(stderr, "Error: source database is busy\n");
2035 rc = 1;
2036 }else{
2037 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
2038 rc = 1;
2040 sqlite3_close(pSrc);
2041 }else
2043 if( c=='s' && strncmp(azArg[0], "schema", n)==0 && nArg<3 ){
2044 struct callback_data data;
2045 char *zErrMsg = 0;
2046 open_db(p);
2047 memcpy(&data, p, sizeof(data));
2048 data.showHeader = 0;
2049 data.mode = MODE_Semi;
2050 if( nArg>1 ){
2051 int i;
2052 for(i=0; azArg[1][i]; i++) azArg[1][i] = ToLower(azArg[1][i]);
2053 if( strcmp(azArg[1],"sqlite_master")==0 ){
2054 char *new_argv[2], *new_colv[2];
2055 new_argv[0] = "CREATE TABLE sqlite_master (\n"
2056 " type text,\n"
2057 " name text,\n"
2058 " tbl_name text,\n"
2059 " rootpage integer,\n"
2060 " sql text\n"
2061 ")";
2062 new_argv[1] = 0;
2063 new_colv[0] = "sql";
2064 new_colv[1] = 0;
2065 callback(&data, 1, new_argv, new_colv);
2066 rc = SQLITE_OK;
2067 }else if( strcmp(azArg[1],"sqlite_temp_master")==0 ){
2068 char *new_argv[2], *new_colv[2];
2069 new_argv[0] = "CREATE TEMP TABLE sqlite_temp_master (\n"
2070 " type text,\n"
2071 " name text,\n"
2072 " tbl_name text,\n"
2073 " rootpage integer,\n"
2074 " sql text\n"
2075 ")";
2076 new_argv[1] = 0;
2077 new_colv[0] = "sql";
2078 new_colv[1] = 0;
2079 callback(&data, 1, new_argv, new_colv);
2080 rc = SQLITE_OK;
2081 }else{
2082 zShellStatic = azArg[1];
2083 rc = sqlite3_exec(p->db,
2084 "SELECT sql FROM "
2085 " (SELECT sql sql, type type, tbl_name tbl_name, name name"
2086 " FROM sqlite_master UNION ALL"
2087 " SELECT sql, type, tbl_name, name FROM sqlite_temp_master) "
2088 "WHERE tbl_name LIKE shellstatic() AND type!='meta' AND sql NOTNULL "
2089 "ORDER BY substr(type,2,1), name",
2090 callback, &data, &zErrMsg);
2091 zShellStatic = 0;
2093 }else{
2094 rc = sqlite3_exec(p->db,
2095 "SELECT sql FROM "
2096 " (SELECT sql sql, type type, tbl_name tbl_name, name name"
2097 " FROM sqlite_master UNION ALL"
2098 " SELECT sql, type, tbl_name, name FROM sqlite_temp_master) "
2099 "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%'"
2100 "ORDER BY substr(type,2,1), name",
2101 callback, &data, &zErrMsg
2104 if( zErrMsg ){
2105 fprintf(stderr,"Error: %s\n", zErrMsg);
2106 sqlite3_free(zErrMsg);
2107 rc = 1;
2108 }else if( rc != SQLITE_OK ){
2109 fprintf(stderr,"Error: querying schema information\n");
2110 rc = 1;
2111 }else{
2112 rc = 0;
2114 }else
2116 if( c=='s' && strncmp(azArg[0], "separator", n)==0 && nArg==2 ){
2117 sqlite3_snprintf(sizeof(p->separator), p->separator,
2118 "%.*s", (int)sizeof(p->separator)-1, azArg[1]);
2119 }else
2121 if( c=='s' && strncmp(azArg[0], "show", n)==0 && nArg==1 ){
2122 int i;
2123 fprintf(p->out,"%9.9s: %s\n","echo", p->echoOn ? "on" : "off");
2124 fprintf(p->out,"%9.9s: %s\n","explain", p->explainPrev.valid ? "on" :"off");
2125 fprintf(p->out,"%9.9s: %s\n","headers", p->showHeader ? "on" : "off");
2126 fprintf(p->out,"%9.9s: %s\n","mode", modeDescr[p->mode]);
2127 fprintf(p->out,"%9.9s: ", "nullvalue");
2128 output_c_string(p->out, p->nullvalue);
2129 fprintf(p->out, "\n");
2130 fprintf(p->out,"%9.9s: %s\n","output",
2131 strlen30(p->outfile) ? p->outfile : "stdout");
2132 fprintf(p->out,"%9.9s: ", "separator");
2133 output_c_string(p->out, p->separator);
2134 fprintf(p->out, "\n");
2135 fprintf(p->out,"%9.9s: %s\n","stats", p->statsOn ? "on" : "off");
2136 fprintf(p->out,"%9.9s: ","width");
2137 for (i=0;i<(int)ArraySize(p->colWidth) && p->colWidth[i] != 0;i++) {
2138 fprintf(p->out,"%d ",p->colWidth[i]);
2140 fprintf(p->out,"\n");
2141 }else
2143 if( c=='s' && strncmp(azArg[0], "stats", n)==0 && nArg>1 && nArg<3 ){
2144 p->statsOn = booleanValue(azArg[1]);
2145 }else
2147 if( c=='t' && n>1 && strncmp(azArg[0], "tables", n)==0 && nArg<3 ){
2148 char **azResult;
2149 int nRow;
2150 char *zErrMsg;
2151 open_db(p);
2152 if( nArg==1 ){
2153 rc = sqlite3_get_table(p->db,
2154 "SELECT name FROM sqlite_master "
2155 "WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%' "
2156 "UNION ALL "
2157 "SELECT name FROM sqlite_temp_master "
2158 "WHERE type IN ('table','view') "
2159 "ORDER BY 1",
2160 &azResult, &nRow, 0, &zErrMsg
2162 }else{
2163 zShellStatic = azArg[1];
2164 rc = sqlite3_get_table(p->db,
2165 "SELECT name FROM sqlite_master "
2166 "WHERE type IN ('table','view') AND name LIKE shellstatic() "
2167 "UNION ALL "
2168 "SELECT name FROM sqlite_temp_master "
2169 "WHERE type IN ('table','view') AND name LIKE shellstatic() "
2170 "ORDER BY 1",
2171 &azResult, &nRow, 0, &zErrMsg
2173 zShellStatic = 0;
2175 if( zErrMsg ){
2176 fprintf(stderr,"Error: %s\n", zErrMsg);
2177 sqlite3_free(zErrMsg);
2178 rc = 1;
2179 }else if( rc != SQLITE_OK ){
2180 fprintf(stderr,"Error: querying sqlite_master and sqlite_temp_master\n");
2181 rc = 1;
2182 }else{
2183 int len, maxlen = 0;
2184 int i, j;
2185 int nPrintCol, nPrintRow;
2186 for(i=1; i<=nRow; i++){
2187 if( azResult[i]==0 ) continue;
2188 len = strlen30(azResult[i]);
2189 if( len>maxlen ) maxlen = len;
2191 nPrintCol = 80/(maxlen+2);
2192 if( nPrintCol<1 ) nPrintCol = 1;
2193 nPrintRow = (nRow + nPrintCol - 1)/nPrintCol;
2194 for(i=0; i<nPrintRow; i++){
2195 for(j=i+1; j<=nRow; j+=nPrintRow){
2196 char *zSp = j<=nPrintRow ? "" : " ";
2197 printf("%s%-*s", zSp, maxlen, azResult[j] ? azResult[j] : "");
2199 printf("\n");
2202 sqlite3_free_table(azResult);
2203 }else
2205 if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 && nArg>=2 ){
2206 static const struct {
2207 const char *zCtrlName; /* Name of a test-control option */
2208 int ctrlCode; /* Integer code for that option */
2209 } aCtrl[] = {
2210 { "prng_save", SQLITE_TESTCTRL_PRNG_SAVE },
2211 { "prng_restore", SQLITE_TESTCTRL_PRNG_RESTORE },
2212 { "prng_reset", SQLITE_TESTCTRL_PRNG_RESET },
2213 { "bitvec_test", SQLITE_TESTCTRL_BITVEC_TEST },
2214 { "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL },
2215 { "benign_malloc_hooks", SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS },
2216 { "pending_byte", SQLITE_TESTCTRL_PENDING_BYTE },
2217 { "assert", SQLITE_TESTCTRL_ASSERT },
2218 { "always", SQLITE_TESTCTRL_ALWAYS },
2219 { "reserve", SQLITE_TESTCTRL_RESERVE },
2220 { "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS },
2221 { "iskeyword", SQLITE_TESTCTRL_ISKEYWORD },
2222 { "pghdrsz", SQLITE_TESTCTRL_PGHDRSZ },
2223 { "scratchmalloc", SQLITE_TESTCTRL_SCRATCHMALLOC },
2225 int testctrl = -1;
2226 int rc = 0;
2227 int i, n;
2228 open_db(p);
2230 /* convert testctrl text option to value. allow any unique prefix
2231 ** of the option name, or a numerical value. */
2232 n = strlen30(azArg[1]);
2233 for(i=0; i<(int)(sizeof(aCtrl)/sizeof(aCtrl[0])); i++){
2234 if( strncmp(azArg[1], aCtrl[i].zCtrlName, n)==0 ){
2235 if( testctrl<0 ){
2236 testctrl = aCtrl[i].ctrlCode;
2237 }else{
2238 fprintf(stderr, "ambiguous option name: \"%s\"\n", azArg[1]);
2239 testctrl = -1;
2240 break;
2244 if( testctrl<0 ) testctrl = atoi(azArg[1]);
2245 if( (testctrl<SQLITE_TESTCTRL_FIRST) || (testctrl>SQLITE_TESTCTRL_LAST) ){
2246 fprintf(stderr,"Error: invalid testctrl option: %s\n", azArg[1]);
2247 }else{
2248 switch(testctrl){
2250 /* sqlite3_test_control(int, db, int) */
2251 case SQLITE_TESTCTRL_OPTIMIZATIONS:
2252 case SQLITE_TESTCTRL_RESERVE:
2253 if( nArg==3 ){
2254 int opt = (int)strtol(azArg[2], 0, 0);
2255 rc = sqlite3_test_control(testctrl, p->db, opt);
2256 printf("%d (0x%08x)\n", rc, rc);
2257 } else {
2258 fprintf(stderr,"Error: testctrl %s takes a single int option\n",
2259 azArg[1]);
2261 break;
2263 /* sqlite3_test_control(int) */
2264 case SQLITE_TESTCTRL_PRNG_SAVE:
2265 case SQLITE_TESTCTRL_PRNG_RESTORE:
2266 case SQLITE_TESTCTRL_PRNG_RESET:
2267 case SQLITE_TESTCTRL_PGHDRSZ:
2268 if( nArg==2 ){
2269 rc = sqlite3_test_control(testctrl);
2270 printf("%d (0x%08x)\n", rc, rc);
2271 } else {
2272 fprintf(stderr,"Error: testctrl %s takes no options\n", azArg[1]);
2274 break;
2276 /* sqlite3_test_control(int, uint) */
2277 case SQLITE_TESTCTRL_PENDING_BYTE:
2278 if( nArg==3 ){
2279 unsigned int opt = (unsigned int)atoi(azArg[2]);
2280 rc = sqlite3_test_control(testctrl, opt);
2281 printf("%d (0x%08x)\n", rc, rc);
2282 } else {
2283 fprintf(stderr,"Error: testctrl %s takes a single unsigned"
2284 " int option\n", azArg[1]);
2286 break;
2288 /* sqlite3_test_control(int, int) */
2289 case SQLITE_TESTCTRL_ASSERT:
2290 case SQLITE_TESTCTRL_ALWAYS:
2291 if( nArg==3 ){
2292 int opt = atoi(azArg[2]);
2293 rc = sqlite3_test_control(testctrl, opt);
2294 printf("%d (0x%08x)\n", rc, rc);
2295 } else {
2296 fprintf(stderr,"Error: testctrl %s takes a single int option\n",
2297 azArg[1]);
2299 break;
2301 /* sqlite3_test_control(int, char *) */
2302 #ifdef SQLITE_N_KEYWORD
2303 case SQLITE_TESTCTRL_ISKEYWORD:
2304 if( nArg==3 ){
2305 const char *opt = azArg[2];
2306 rc = sqlite3_test_control(testctrl, opt);
2307 printf("%d (0x%08x)\n", rc, rc);
2308 } else {
2309 fprintf(stderr,"Error: testctrl %s takes a single char * option\n",
2310 azArg[1]);
2312 break;
2313 #endif
2315 case SQLITE_TESTCTRL_BITVEC_TEST:
2316 case SQLITE_TESTCTRL_FAULT_INSTALL:
2317 case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS:
2318 case SQLITE_TESTCTRL_SCRATCHMALLOC:
2319 default:
2320 fprintf(stderr,"Error: CLI support for testctrl %s not implemented\n",
2321 azArg[1]);
2322 break;
2325 }else
2327 if( c=='t' && n>4 && strncmp(azArg[0], "timeout", n)==0 && nArg==2 ){
2328 open_db(p);
2329 sqlite3_busy_timeout(p->db, atoi(azArg[1]));
2330 }else
2332 if( HAS_TIMER && c=='t' && n>=5 && strncmp(azArg[0], "timer", n)==0
2333 && nArg==2
2335 enableTimer = booleanValue(azArg[1]);
2336 }else
2338 if( c=='v' && strncmp(azArg[0], "version", n)==0 ){
2339 printf("SQLite %s %s\n",
2340 sqlite3_libversion(), sqlite3_sourceid());
2341 }else
2343 if( c=='w' && strncmp(azArg[0], "width", n)==0 && nArg>1 ){
2344 int j;
2345 assert( nArg<=ArraySize(azArg) );
2346 for(j=1; j<nArg && j<ArraySize(p->colWidth); j++){
2347 p->colWidth[j-1] = atoi(azArg[j]);
2349 }else
2352 fprintf(stderr, "Error: unknown command or invalid arguments: "
2353 " \"%s\". Enter \".help\" for help\n", azArg[0]);
2354 rc = 1;
2357 return rc;
2361 ** Return TRUE if a semicolon occurs anywhere in the first N characters
2362 ** of string z[].
2364 static int _contains_semicolon(const char *z, int N){
2365 int i;
2366 for(i=0; i<N; i++){ if( z[i]==';' ) return 1; }
2367 return 0;
2371 ** Test to see if a line consists entirely of whitespace.
2373 static int _all_whitespace(const char *z){
2374 for(; *z; z++){
2375 if( IsSpace(z[0]) ) continue;
2376 if( *z=='/' && z[1]=='*' ){
2377 z += 2;
2378 while( *z && (*z!='*' || z[1]!='/') ){ z++; }
2379 if( *z==0 ) return 0;
2380 z++;
2381 continue;
2383 if( *z=='-' && z[1]=='-' ){
2384 z += 2;
2385 while( *z && *z!='\n' ){ z++; }
2386 if( *z==0 ) return 1;
2387 continue;
2389 return 0;
2391 return 1;
2395 ** Return TRUE if the line typed in is an SQL command terminator other
2396 ** than a semi-colon. The SQL Server style "go" command is understood
2397 ** as is the Oracle "/".
2399 static int _is_command_terminator(const char *zLine){
2400 while( IsSpace(zLine[0]) ){ zLine++; };
2401 if( zLine[0]=='/' && _all_whitespace(&zLine[1]) ){
2402 return 1; /* Oracle */
2404 if( ToLower(zLine[0])=='g' && ToLower(zLine[1])=='o'
2405 && _all_whitespace(&zLine[2]) ){
2406 return 1; /* SQL Server */
2408 return 0;
2412 ** Return true if zSql is a complete SQL statement. Return false if it
2413 ** ends in the middle of a string literal or C-style comment.
2415 static int _is_complete(char *zSql, int nSql){
2416 int rc;
2417 if( zSql==0 ) return 1;
2418 zSql[nSql] = ';';
2419 zSql[nSql+1] = 0;
2420 rc = sqlite3_complete(zSql);
2421 zSql[nSql] = 0;
2422 return rc;
2426 ** Read input from *in and process it. If *in==0 then input
2427 ** is interactive - the user is typing it it. Otherwise, input
2428 ** is coming from a file or device. A prompt is issued and history
2429 ** is saved only if input is interactive. An interrupt signal will
2430 ** cause this routine to exit immediately, unless input is interactive.
2432 ** Return the number of errors.
2434 static int process_input(struct callback_data *p, FILE *in){
2435 char *zLine = 0;
2436 char *zSql = 0;
2437 int nSql = 0;
2438 int nSqlPrior = 0;
2439 char *zErrMsg;
2440 int rc;
2441 int errCnt = 0;
2442 int lineno = 0;
2443 int startline = 0;
2445 while( errCnt==0 || !bail_on_error || (in==0 && stdin_is_interactive) ){
2446 fflush(p->out);
2447 free(zLine);
2448 zLine = one_input_line(zSql, in);
2449 if( zLine==0 ){
2450 break; /* We have reached EOF */
2452 if( seenInterrupt ){
2453 if( in!=0 ) break;
2454 seenInterrupt = 0;
2456 lineno++;
2457 if( (zSql==0 || zSql[0]==0) && _all_whitespace(zLine) ) continue;
2458 if( zLine && zLine[0]=='.' && nSql==0 ){
2459 if( p->echoOn ) printf("%s\n", zLine);
2460 rc = do_meta_command(zLine, p);
2461 if( rc==2 ){ /* exit requested */
2462 break;
2463 }else if( rc ){
2464 errCnt++;
2466 continue;
2468 if( _is_command_terminator(zLine) && _is_complete(zSql, nSql) ){
2469 memcpy(zLine,";",2);
2471 nSqlPrior = nSql;
2472 if( zSql==0 ){
2473 int i;
2474 for(i=0; zLine[i] && IsSpace(zLine[i]); i++){}
2475 if( zLine[i]!=0 ){
2476 nSql = strlen30(zLine);
2477 zSql = malloc( nSql+3 );
2478 if( zSql==0 ){
2479 fprintf(stderr, "Error: out of memory\n");
2480 exit(1);
2482 memcpy(zSql, zLine, nSql+1);
2483 startline = lineno;
2485 }else{
2486 int len = strlen30(zLine);
2487 zSql = realloc( zSql, nSql + len + 4 );
2488 if( zSql==0 ){
2489 fprintf(stderr,"Error: out of memory\n");
2490 exit(1);
2492 zSql[nSql++] = '\n';
2493 memcpy(&zSql[nSql], zLine, len+1);
2494 nSql += len;
2496 if( zSql && _contains_semicolon(&zSql[nSqlPrior], nSql-nSqlPrior)
2497 && sqlite3_complete(zSql) ){
2498 p->cnt = 0;
2499 open_db(p);
2500 BEGIN_TIMER;
2501 rc = shell_exec(p->db, zSql, shell_callback, p, &zErrMsg);
2502 END_TIMER;
2503 if( rc || zErrMsg ){
2504 char zPrefix[100];
2505 if( in!=0 || !stdin_is_interactive ){
2506 sqlite3_snprintf(sizeof(zPrefix), zPrefix,
2507 "Error: near line %d:", startline);
2508 }else{
2509 sqlite3_snprintf(sizeof(zPrefix), zPrefix, "Error:");
2511 if( zErrMsg!=0 ){
2512 fprintf(stderr, "%s %s\n", zPrefix, zErrMsg);
2513 sqlite3_free(zErrMsg);
2514 zErrMsg = 0;
2515 }else{
2516 fprintf(stderr, "%s %s\n", zPrefix, sqlite3_errmsg(p->db));
2518 errCnt++;
2520 free(zSql);
2521 zSql = 0;
2522 nSql = 0;
2525 if( zSql ){
2526 if( !_all_whitespace(zSql) ){
2527 fprintf(stderr, "Error: incomplete SQL: %s\n", zSql);
2529 free(zSql);
2531 free(zLine);
2532 return errCnt;
2536 ** Return a pathname which is the user's home directory. A
2537 ** 0 return indicates an error of some kind. Space to hold the
2538 ** resulting string is obtained from malloc(). The calling
2539 ** function should free the result.
2541 static char *find_home_dir(void){
2542 char *home_dir = NULL;
2544 #if !defined(_WIN32) && !defined(WIN32) && !defined(__OS2__) && !defined(_WIN32_WCE) && !defined(__RTP__) && !defined(_WRS_KERNEL)
2545 struct passwd *pwent;
2546 uid_t uid = getuid();
2547 if( (pwent=getpwuid(uid)) != NULL) {
2548 home_dir = pwent->pw_dir;
2550 #endif
2552 #if defined(_WIN32_WCE)
2553 /* Windows CE (arm-wince-mingw32ce-gcc) does not provide getenv()
2555 home_dir = strdup("/");
2556 #else
2558 #if defined(_WIN32) || defined(WIN32) || defined(__OS2__)
2559 if (!home_dir) {
2560 home_dir = getenv("USERPROFILE");
2562 #endif
2564 if (!home_dir) {
2565 home_dir = getenv("HOME");
2568 #if defined(_WIN32) || defined(WIN32) || defined(__OS2__)
2569 if (!home_dir) {
2570 char *zDrive, *zPath;
2571 int n;
2572 zDrive = getenv("HOMEDRIVE");
2573 zPath = getenv("HOMEPATH");
2574 if( zDrive && zPath ){
2575 n = strlen30(zDrive) + strlen30(zPath) + 1;
2576 home_dir = malloc( n );
2577 if( home_dir==0 ) return 0;
2578 sqlite3_snprintf(n, home_dir, "%s%s", zDrive, zPath);
2579 return home_dir;
2581 home_dir = "c:\\";
2583 #endif
2585 #endif /* !_WIN32_WCE */
2587 if( home_dir ){
2588 int n = strlen30(home_dir) + 1;
2589 char *z = malloc( n );
2590 if( z ) memcpy(z, home_dir, n);
2591 home_dir = z;
2594 return home_dir;
2598 ** Read input from the file given by sqliterc_override. Or if that
2599 ** parameter is NULL, take input from ~/.sqliterc
2601 ** Returns the number of errors.
2603 static int process_sqliterc(
2604 struct callback_data *p, /* Configuration data */
2605 const char *sqliterc_override /* Name of config file. NULL to use default */
2607 char *home_dir = NULL;
2608 const char *sqliterc = sqliterc_override;
2609 char *zBuf = 0;
2610 FILE *in = NULL;
2611 int nBuf;
2612 int rc = 0;
2614 if (sqliterc == NULL) {
2615 home_dir = find_home_dir();
2616 if( home_dir==0 ){
2617 #if !defined(__RTP__) && !defined(_WRS_KERNEL)
2618 fprintf(stderr,"%s: Error: cannot locate your home directory\n", Argv0);
2619 #endif
2620 return 1;
2622 nBuf = strlen30(home_dir) + 16;
2623 zBuf = malloc( nBuf );
2624 if( zBuf==0 ){
2625 fprintf(stderr,"%s: Error: out of memory\n",Argv0);
2626 return 1;
2628 sqlite3_snprintf(nBuf, zBuf,"%s/.sqliterc",home_dir);
2629 free(home_dir);
2630 sqliterc = (const char*)zBuf;
2632 in = fopen(sqliterc,"rb");
2633 if( in ){
2634 if( stdin_is_interactive ){
2635 fprintf(stderr,"-- Loading resources from %s\n",sqliterc);
2637 rc = process_input(p,in);
2638 fclose(in);
2640 free(zBuf);
2641 return rc;
2645 ** Show available command line options
2647 static const char zOptions[] =
2648 " -help show this message\n"
2649 " -init filename read/process named file\n"
2650 " -echo print commands before execution\n"
2651 " -[no]header turn headers on or off\n"
2652 " -bail stop after hitting an error\n"
2653 " -interactive force interactive I/O\n"
2654 " -batch force batch I/O\n"
2655 " -column set output mode to 'column'\n"
2656 " -csv set output mode to 'csv'\n"
2657 " -html set output mode to HTML\n"
2658 " -line set output mode to 'line'\n"
2659 " -list set output mode to 'list'\n"
2660 " -separator 'x' set output field separator (|)\n"
2661 " -stats print memory stats before each finalize\n"
2662 " -nullvalue 'text' set text string for NULL values\n"
2663 " -version show SQLite version\n"
2664 " -vfs NAME use NAME as the default VFS\n"
2665 #ifdef SQLITE_ENABLE_VFSTRACE
2666 " -vfstrace enable tracing of all VFS calls\n"
2667 #endif
2668 #ifdef SQLITE_ENABLE_MULTIPLEX
2669 " -multiplex enable the multiplexor VFS\n"
2670 #endif
2672 static void usage(int showDetail){
2673 fprintf(stderr,
2674 "Usage: %s [OPTIONS] FILENAME [SQL]\n"
2675 "FILENAME is the name of an SQLite database. A new database is created\n"
2676 "if the file does not previously exist.\n", Argv0);
2677 if( showDetail ){
2678 fprintf(stderr, "OPTIONS include:\n%s", zOptions);
2679 }else{
2680 fprintf(stderr, "Use the -help option for additional information\n");
2682 exit(1);
2686 ** Initialize the state information in data
2688 static void main_init(struct callback_data *data) {
2689 memset(data, 0, sizeof(*data));
2690 data->mode = MODE_List;
2691 memcpy(data->separator,"|", 2);
2692 data->showHeader = 0;
2693 sqlite3_config(SQLITE_CONFIG_URI, 1);
2694 sqlite3_config(SQLITE_CONFIG_LOG, shellLog, data);
2695 sqlite3_snprintf(sizeof(mainPrompt), mainPrompt,"sqlite> ");
2696 sqlite3_snprintf(sizeof(continuePrompt), continuePrompt," ...> ");
2697 sqlite3_config(SQLITE_CONFIG_SINGLETHREAD);
2700 int main(int argc, char **argv){
2701 char *zErrMsg = 0;
2702 struct callback_data data;
2703 const char *zInitFile = 0;
2704 char *zFirstCmd = 0;
2705 int i;
2706 int rc = 0;
2708 if( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)!=0 ){
2709 fprintf(stderr, "SQLite header and source version mismatch\n%s\n%s\n",
2710 sqlite3_sourceid(), SQLITE_SOURCE_ID);
2711 exit(1);
2713 Argv0 = argv[0];
2714 main_init(&data);
2715 stdin_is_interactive = isatty(0);
2717 /* Make sure we have a valid signal handler early, before anything
2718 ** else is done.
2720 #ifdef SIGINT
2721 signal(SIGINT, interrupt_handler);
2722 #endif
2724 /* Do an initial pass through the command-line argument to locate
2725 ** the name of the database file, the name of the initialization file,
2726 ** the size of the alternative malloc heap,
2727 ** and the first command to execute.
2729 for(i=1; i<argc-1; i++){
2730 char *z;
2731 if( argv[i][0]!='-' ) break;
2732 z = argv[i];
2733 if( z[0]=='-' && z[1]=='-' ) z++;
2734 if( strcmp(argv[i],"-separator")==0 || strcmp(argv[i],"-nullvalue")==0 ){
2735 i++;
2736 }else if( strcmp(argv[i],"-init")==0 ){
2737 i++;
2738 zInitFile = argv[i];
2739 /* Need to check for batch mode here to so we can avoid printing
2740 ** informational messages (like from process_sqliterc) before
2741 ** we do the actual processing of arguments later in a second pass.
2743 }else if( strcmp(argv[i],"-batch")==0 ){
2744 stdin_is_interactive = 0;
2745 }else if( strcmp(argv[i],"-heap")==0 ){
2746 #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
2747 int j, c;
2748 const char *zSize;
2749 sqlite3_int64 szHeap;
2751 zSize = argv[++i];
2752 szHeap = atoi(zSize);
2753 for(j=0; (c = zSize[j])!=0; j++){
2754 if( c=='M' ){ szHeap *= 1000000; break; }
2755 if( c=='K' ){ szHeap *= 1000; break; }
2756 if( c=='G' ){ szHeap *= 1000000000; break; }
2758 if( szHeap>0x7fff0000 ) szHeap = 0x7fff0000;
2759 sqlite3_config(SQLITE_CONFIG_HEAP, malloc((int)szHeap), (int)szHeap, 64);
2760 #endif
2761 #ifdef SQLITE_ENABLE_VFSTRACE
2762 }else if( strcmp(argv[i],"-vfstrace")==0 ){
2763 extern int vfstrace_register(
2764 const char *zTraceName,
2765 const char *zOldVfsName,
2766 int (*xOut)(const char*,void*),
2767 void *pOutArg,
2768 int makeDefault
2770 vfstrace_register("trace",0,(int(*)(const char*,void*))fputs,stderr,1);
2771 #endif
2772 #ifdef SQLITE_ENABLE_MULTIPLEX
2773 }else if( strcmp(argv[i],"-multiplex")==0 ){
2774 extern int sqlite3_multiple_initialize(const char*,int);
2775 sqlite3_multiplex_initialize(0, 1);
2776 #endif
2777 }else if( strcmp(argv[i],"-vfs")==0 ){
2778 sqlite3_vfs *pVfs = sqlite3_vfs_find(argv[++i]);
2779 if( pVfs ){
2780 sqlite3_vfs_register(pVfs, 1);
2781 }else{
2782 fprintf(stderr, "no such VFS: \"%s\"\n", argv[i]);
2783 exit(1);
2787 if( i<argc ){
2788 #if defined(SQLITE_OS_OS2) && SQLITE_OS_OS2
2789 data.zDbFilename = (const char *)convertCpPathToUtf8( argv[i++] );
2790 #else
2791 data.zDbFilename = argv[i++];
2792 #endif
2793 }else{
2794 #ifndef SQLITE_OMIT_MEMORYDB
2795 data.zDbFilename = ":memory:";
2796 #else
2797 data.zDbFilename = 0;
2798 #endif
2800 if( i<argc ){
2801 zFirstCmd = argv[i++];
2803 if( i<argc ){
2804 fprintf(stderr,"%s: Error: too many options: \"%s\"\n", Argv0, argv[i]);
2805 fprintf(stderr,"Use -help for a list of options.\n");
2806 return 1;
2808 data.out = stdout;
2810 #ifdef SQLITE_OMIT_MEMORYDB
2811 if( data.zDbFilename==0 ){
2812 fprintf(stderr,"%s: Error: no database filename specified\n", Argv0);
2813 return 1;
2815 #endif
2817 /* Go ahead and open the database file if it already exists. If the
2818 ** file does not exist, delay opening it. This prevents empty database
2819 ** files from being created if a user mistypes the database name argument
2820 ** to the sqlite command-line tool.
2822 if( access(data.zDbFilename, 0)==0 ){
2823 open_db(&data);
2826 /* Process the initialization file if there is one. If no -init option
2827 ** is given on the command line, look for a file named ~/.sqliterc and
2828 ** try to process it.
2830 rc = process_sqliterc(&data,zInitFile);
2831 if( rc>0 ){
2832 return rc;
2835 /* Make a second pass through the command-line argument and set
2836 ** options. This second pass is delayed until after the initialization
2837 ** file is processed so that the command-line arguments will override
2838 ** settings in the initialization file.
2840 for(i=1; i<argc && argv[i][0]=='-'; i++){
2841 char *z = argv[i];
2842 if( z[1]=='-' ){ z++; }
2843 if( strcmp(z,"-init")==0 ){
2844 i++;
2845 }else if( strcmp(z,"-html")==0 ){
2846 data.mode = MODE_Html;
2847 }else if( strcmp(z,"-list")==0 ){
2848 data.mode = MODE_List;
2849 }else if( strcmp(z,"-line")==0 ){
2850 data.mode = MODE_Line;
2851 }else if( strcmp(z,"-column")==0 ){
2852 data.mode = MODE_Column;
2853 }else if( strcmp(z,"-csv")==0 ){
2854 data.mode = MODE_Csv;
2855 memcpy(data.separator,",",2);
2856 }else if( strcmp(z,"-separator")==0 ){
2857 i++;
2858 if(i>=argc){
2859 fprintf(stderr,"%s: Error: missing argument for option: %s\n", Argv0, z);
2860 fprintf(stderr,"Use -help for a list of options.\n");
2861 return 1;
2863 sqlite3_snprintf(sizeof(data.separator), data.separator,
2864 "%.*s",(int)sizeof(data.separator)-1,argv[i]);
2865 }else if( strcmp(z,"-nullvalue")==0 ){
2866 i++;
2867 if(i>=argc){
2868 fprintf(stderr,"%s: Error: missing argument for option: %s\n", Argv0, z);
2869 fprintf(stderr,"Use -help for a list of options.\n");
2870 return 1;
2872 sqlite3_snprintf(sizeof(data.nullvalue), data.nullvalue,
2873 "%.*s",(int)sizeof(data.nullvalue)-1,argv[i]);
2874 }else if( strcmp(z,"-header")==0 ){
2875 data.showHeader = 1;
2876 }else if( strcmp(z,"-noheader")==0 ){
2877 data.showHeader = 0;
2878 }else if( strcmp(z,"-echo")==0 ){
2879 data.echoOn = 1;
2880 }else if( strcmp(z,"-stats")==0 ){
2881 data.statsOn = 1;
2882 }else if( strcmp(z,"-bail")==0 ){
2883 bail_on_error = 1;
2884 }else if( strcmp(z,"-version")==0 ){
2885 printf("%s %s\n", sqlite3_libversion(), sqlite3_sourceid());
2886 return 0;
2887 }else if( strcmp(z,"-interactive")==0 ){
2888 stdin_is_interactive = 1;
2889 }else if( strcmp(z,"-batch")==0 ){
2890 stdin_is_interactive = 0;
2891 }else if( strcmp(z,"-heap")==0 ){
2892 i++;
2893 }else if( strcmp(z,"-vfs")==0 ){
2894 i++;
2895 #ifdef SQLITE_ENABLE_VFSTRACE
2896 }else if( strcmp(z,"-vfstrace")==0 ){
2897 i++;
2898 #endif
2899 #ifdef SQLITE_ENABLE_MULTIPLEX
2900 }else if( strcmp(z,"-multiplex")==0 ){
2901 i++;
2902 #endif
2903 }else if( strcmp(z,"-help")==0 || strcmp(z, "--help")==0 ){
2904 usage(1);
2905 }else{
2906 fprintf(stderr,"%s: Error: unknown option: %s\n", Argv0, z);
2907 fprintf(stderr,"Use -help for a list of options.\n");
2908 return 1;
2912 if( zFirstCmd ){
2913 /* Run just the command that follows the database name
2915 if( zFirstCmd[0]=='.' ){
2916 rc = do_meta_command(zFirstCmd, &data);
2917 }else{
2918 open_db(&data);
2919 rc = shell_exec(data.db, zFirstCmd, shell_callback, &data, &zErrMsg);
2920 if( zErrMsg!=0 ){
2921 fprintf(stderr,"Error: %s\n", zErrMsg);
2922 return rc!=0 ? rc : 1;
2923 }else if( rc!=0 ){
2924 fprintf(stderr,"Error: unable to process SQL \"%s\"\n", zFirstCmd);
2925 return rc;
2928 }else{
2929 /* Run commands received from standard input
2931 if( stdin_is_interactive ){
2932 char *zHome;
2933 char *zHistory = 0;
2934 int nHistory;
2935 printf(
2936 "SQLite version %s %.19s\n"
2937 "Enter \".help\" for instructions\n"
2938 "Enter SQL statements terminated with a \";\"\n",
2939 sqlite3_libversion(), sqlite3_sourceid()
2941 zHome = find_home_dir();
2942 if( zHome ){
2943 nHistory = strlen30(zHome) + 20;
2944 if( (zHistory = malloc(nHistory))!=0 ){
2945 sqlite3_snprintf(nHistory, zHistory,"%s/.sqlite_history", zHome);
2948 #if defined(HAVE_READLINE) && HAVE_READLINE==1
2949 if( zHistory ) read_history(zHistory);
2950 #endif
2951 rc = process_input(&data, 0);
2952 if( zHistory ){
2953 stifle_history(100);
2954 write_history(zHistory);
2955 free(zHistory);
2957 free(zHome);
2958 }else{
2959 rc = process_input(&data, stdin);
2962 set_table_name(&data, 0);
2963 if( data.db ){
2964 sqlite3_close(data.db);
2966 return rc;