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