modernc.org/cc@v1.0.1/v2/testdata/_sqlite/sqlite-amalgamation-3210000/shell.c (about) 1 /* DO NOT EDIT! 2 ** This file is automatically generated by the script in the canonical 3 ** SQLite source tree at tool/mkshellc.tcl. That script combines source 4 ** code from various constituent source files of SQLite into this single 5 ** "shell.c" file used to implement the SQLite command-line shell. 6 ** 7 ** Most of the code found below comes from the "src/shell.c.in" file in 8 ** the canonical SQLite source tree. That main file contains "INCLUDE" 9 ** lines that specify other files in the canonical source tree that are 10 ** inserted to getnerate this complete program source file. 11 ** 12 ** The code from multiple files is combined into this single "shell.c" 13 ** source file to help make the command-line program easier to compile. 14 ** 15 ** To modify this program, get a copy of the canonical SQLite source tree, 16 ** edit the src/shell.c.in" and/or some of the other files that are included 17 ** by "src/shell.c.in", then rerun the tool/mkshellc.tcl script. 18 */ 19 /* 20 ** 2001 September 15 21 ** 22 ** The author disclaims copyright to this source code. In place of 23 ** a legal notice, here is a blessing: 24 ** 25 ** May you do good and not evil. 26 ** May you find forgiveness for yourself and forgive others. 27 ** May you share freely, never taking more than you give. 28 ** 29 ************************************************************************* 30 ** This file contains code to implement the "sqlite" command line 31 ** utility for accessing SQLite databases. 32 */ 33 #if (defined(_WIN32) || defined(WIN32)) && !defined(_CRT_SECURE_NO_WARNINGS) 34 /* This needs to come before any includes for MSVC compiler */ 35 #define _CRT_SECURE_NO_WARNINGS 36 #endif 37 38 /* 39 ** Warning pragmas copied from msvc.h in the core. 40 */ 41 #if defined(_MSC_VER) 42 #pragma warning(disable : 4054) 43 #pragma warning(disable : 4055) 44 #pragma warning(disable : 4100) 45 #pragma warning(disable : 4127) 46 #pragma warning(disable : 4130) 47 #pragma warning(disable : 4152) 48 #pragma warning(disable : 4189) 49 #pragma warning(disable : 4206) 50 #pragma warning(disable : 4210) 51 #pragma warning(disable : 4232) 52 #pragma warning(disable : 4244) 53 #pragma warning(disable : 4305) 54 #pragma warning(disable : 4306) 55 #pragma warning(disable : 4702) 56 #pragma warning(disable : 4706) 57 #endif /* defined(_MSC_VER) */ 58 59 /* 60 ** No support for loadable extensions in VxWorks. 61 */ 62 #if (defined(__RTP__) || defined(_WRS_KERNEL)) && !SQLITE_OMIT_LOAD_EXTENSION 63 # define SQLITE_OMIT_LOAD_EXTENSION 1 64 #endif 65 66 /* 67 ** Enable large-file support for fopen() and friends on unix. 68 */ 69 #ifndef SQLITE_DISABLE_LFS 70 # define _LARGE_FILE 1 71 # ifndef _FILE_OFFSET_BITS 72 # define _FILE_OFFSET_BITS 64 73 # endif 74 # define _LARGEFILE_SOURCE 1 75 #endif 76 77 #include <stdlib.h> 78 #include <string.h> 79 #include <stdio.h> 80 #include <assert.h> 81 #include "sqlite3.h" 82 #if SQLITE_USER_AUTHENTICATION 83 # include "sqlite3userauth.h" 84 #endif 85 #include <ctype.h> 86 #include <stdarg.h> 87 88 #if !defined(_WIN32) && !defined(WIN32) 89 # include <signal.h> 90 # if !defined(__RTP__) && !defined(_WRS_KERNEL) 91 # include <pwd.h> 92 # endif 93 # include <unistd.h> 94 # include <sys/types.h> 95 #endif 96 97 #if HAVE_READLINE 98 # include <readline/readline.h> 99 # include <readline/history.h> 100 #endif 101 102 #if HAVE_EDITLINE 103 # include <editline/readline.h> 104 #endif 105 106 #if HAVE_EDITLINE || HAVE_READLINE 107 108 # define shell_add_history(X) add_history(X) 109 # define shell_read_history(X) read_history(X) 110 # define shell_write_history(X) write_history(X) 111 # define shell_stifle_history(X) stifle_history(X) 112 # define shell_readline(X) readline(X) 113 114 #elif HAVE_LINENOISE 115 116 # include "linenoise.h" 117 # define shell_add_history(X) linenoiseHistoryAdd(X) 118 # define shell_read_history(X) linenoiseHistoryLoad(X) 119 # define shell_write_history(X) linenoiseHistorySave(X) 120 # define shell_stifle_history(X) linenoiseHistorySetMaxLen(X) 121 # define shell_readline(X) linenoise(X) 122 123 #else 124 125 # define shell_read_history(X) 126 # define shell_write_history(X) 127 # define shell_stifle_history(X) 128 129 # define SHELL_USE_LOCAL_GETLINE 1 130 #endif 131 132 133 #if defined(_WIN32) || defined(WIN32) 134 # include <io.h> 135 # include <fcntl.h> 136 # define isatty(h) _isatty(h) 137 # ifndef access 138 # define access(f,m) _access((f),(m)) 139 # endif 140 # undef popen 141 # define popen _popen 142 # undef pclose 143 # define pclose _pclose 144 #else 145 /* Make sure isatty() has a prototype. */ 146 extern int isatty(int); 147 148 # if !defined(__RTP__) && !defined(_WRS_KERNEL) 149 /* popen and pclose are not C89 functions and so are 150 ** sometimes omitted from the <stdio.h> header */ 151 extern FILE *popen(const char*,const char*); 152 extern int pclose(FILE*); 153 # else 154 # define SQLITE_OMIT_POPEN 1 155 # endif 156 #endif 157 158 #if defined(_WIN32_WCE) 159 /* Windows CE (arm-wince-mingw32ce-gcc) does not provide isatty() 160 * thus we always assume that we have a console. That can be 161 * overridden with the -batch command line option. 162 */ 163 #define isatty(x) 1 164 #endif 165 166 /* ctype macros that work with signed characters */ 167 #define IsSpace(X) isspace((unsigned char)X) 168 #define IsDigit(X) isdigit((unsigned char)X) 169 #define ToLower(X) (char)tolower((unsigned char)X) 170 171 #if defined(_WIN32) || defined(WIN32) 172 #include <windows.h> 173 174 /* string conversion routines only needed on Win32 */ 175 extern char *sqlite3_win32_unicode_to_utf8(LPCWSTR); 176 extern char *sqlite3_win32_mbcs_to_utf8_v2(const char *, int); 177 extern char *sqlite3_win32_utf8_to_mbcs_v2(const char *, int); 178 extern LPWSTR sqlite3_win32_utf8_to_unicode(const char *zText); 179 #endif 180 181 /* On Windows, we normally run with output mode of TEXT so that \n characters 182 ** are automatically translated into \r\n. However, this behavior needs 183 ** to be disabled in some cases (ex: when generating CSV output and when 184 ** rendering quoted strings that contain \n characters). The following 185 ** routines take care of that. 186 */ 187 #if defined(_WIN32) || defined(WIN32) 188 static void setBinaryMode(FILE *file, int isOutput){ 189 if( isOutput ) fflush(file); 190 _setmode(_fileno(file), _O_BINARY); 191 } 192 static void setTextMode(FILE *file, int isOutput){ 193 if( isOutput ) fflush(file); 194 _setmode(_fileno(file), _O_TEXT); 195 } 196 #else 197 # define setBinaryMode(X,Y) 198 # define setTextMode(X,Y) 199 #endif 200 201 202 /* True if the timer is enabled */ 203 static int enableTimer = 0; 204 205 /* Return the current wall-clock time */ 206 static sqlite3_int64 timeOfDay(void){ 207 static sqlite3_vfs *clockVfs = 0; 208 sqlite3_int64 t; 209 if( clockVfs==0 ) clockVfs = sqlite3_vfs_find(0); 210 if( clockVfs->iVersion>=2 && clockVfs->xCurrentTimeInt64!=0 ){ 211 clockVfs->xCurrentTimeInt64(clockVfs, &t); 212 }else{ 213 double r; 214 clockVfs->xCurrentTime(clockVfs, &r); 215 t = (sqlite3_int64)(r*86400000.0); 216 } 217 return t; 218 } 219 220 #if !defined(_WIN32) && !defined(WIN32) && !defined(__minux) 221 #include <sys/time.h> 222 #include <sys/resource.h> 223 224 /* VxWorks does not support getrusage() as far as we can determine */ 225 #if defined(_WRS_KERNEL) || defined(__RTP__) 226 struct rusage { 227 struct timeval ru_utime; /* user CPU time used */ 228 struct timeval ru_stime; /* system CPU time used */ 229 }; 230 #define getrusage(A,B) memset(B,0,sizeof(*B)) 231 #endif 232 233 /* Saved resource information for the beginning of an operation */ 234 static struct rusage sBegin; /* CPU time at start */ 235 static sqlite3_int64 iBegin; /* Wall-clock time at start */ 236 237 /* 238 ** Begin timing an operation 239 */ 240 static void beginTimer(void){ 241 if( enableTimer ){ 242 getrusage(RUSAGE_SELF, &sBegin); 243 iBegin = timeOfDay(); 244 } 245 } 246 247 /* Return the difference of two time_structs in seconds */ 248 static double timeDiff(struct timeval *pStart, struct timeval *pEnd){ 249 return (pEnd->tv_usec - pStart->tv_usec)*0.000001 + 250 (double)(pEnd->tv_sec - pStart->tv_sec); 251 } 252 253 /* 254 ** Print the timing results. 255 */ 256 static void endTimer(void){ 257 if( enableTimer ){ 258 sqlite3_int64 iEnd = timeOfDay(); 259 struct rusage sEnd; 260 getrusage(RUSAGE_SELF, &sEnd); 261 printf("Run Time: real %.3f user %f sys %f\n", 262 (iEnd - iBegin)*0.001, 263 timeDiff(&sBegin.ru_utime, &sEnd.ru_utime), 264 timeDiff(&sBegin.ru_stime, &sEnd.ru_stime)); 265 } 266 } 267 268 #define BEGIN_TIMER beginTimer() 269 #define END_TIMER endTimer() 270 #define HAS_TIMER 1 271 272 #elif (defined(_WIN32) || defined(WIN32)) 273 274 /* Saved resource information for the beginning of an operation */ 275 static HANDLE hProcess; 276 static FILETIME ftKernelBegin; 277 static FILETIME ftUserBegin; 278 static sqlite3_int64 ftWallBegin; 279 typedef BOOL (WINAPI *GETPROCTIMES)(HANDLE, LPFILETIME, LPFILETIME, 280 LPFILETIME, LPFILETIME); 281 static GETPROCTIMES getProcessTimesAddr = NULL; 282 283 /* 284 ** Check to see if we have timer support. Return 1 if necessary 285 ** support found (or found previously). 286 */ 287 static int hasTimer(void){ 288 if( getProcessTimesAddr ){ 289 return 1; 290 } else { 291 /* GetProcessTimes() isn't supported in WIN95 and some other Windows 292 ** versions. See if the version we are running on has it, and if it 293 ** does, save off a pointer to it and the current process handle. 294 */ 295 hProcess = GetCurrentProcess(); 296 if( hProcess ){ 297 HINSTANCE hinstLib = LoadLibrary(TEXT("Kernel32.dll")); 298 if( NULL != hinstLib ){ 299 getProcessTimesAddr = 300 (GETPROCTIMES) GetProcAddress(hinstLib, "GetProcessTimes"); 301 if( NULL != getProcessTimesAddr ){ 302 return 1; 303 } 304 FreeLibrary(hinstLib); 305 } 306 } 307 } 308 return 0; 309 } 310 311 /* 312 ** Begin timing an operation 313 */ 314 static void beginTimer(void){ 315 if( enableTimer && getProcessTimesAddr ){ 316 FILETIME ftCreation, ftExit; 317 getProcessTimesAddr(hProcess,&ftCreation,&ftExit, 318 &ftKernelBegin,&ftUserBegin); 319 ftWallBegin = timeOfDay(); 320 } 321 } 322 323 /* Return the difference of two FILETIME structs in seconds */ 324 static double timeDiff(FILETIME *pStart, FILETIME *pEnd){ 325 sqlite_int64 i64Start = *((sqlite_int64 *) pStart); 326 sqlite_int64 i64End = *((sqlite_int64 *) pEnd); 327 return (double) ((i64End - i64Start) / 10000000.0); 328 } 329 330 /* 331 ** Print the timing results. 332 */ 333 static void endTimer(void){ 334 if( enableTimer && getProcessTimesAddr){ 335 FILETIME ftCreation, ftExit, ftKernelEnd, ftUserEnd; 336 sqlite3_int64 ftWallEnd = timeOfDay(); 337 getProcessTimesAddr(hProcess,&ftCreation,&ftExit,&ftKernelEnd,&ftUserEnd); 338 printf("Run Time: real %.3f user %f sys %f\n", 339 (ftWallEnd - ftWallBegin)*0.001, 340 timeDiff(&ftUserBegin, &ftUserEnd), 341 timeDiff(&ftKernelBegin, &ftKernelEnd)); 342 } 343 } 344 345 #define BEGIN_TIMER beginTimer() 346 #define END_TIMER endTimer() 347 #define HAS_TIMER hasTimer() 348 349 #else 350 #define BEGIN_TIMER 351 #define END_TIMER 352 #define HAS_TIMER 0 353 #endif 354 355 /* 356 ** Used to prevent warnings about unused parameters 357 */ 358 #define UNUSED_PARAMETER(x) (void)(x) 359 360 /* 361 ** If the following flag is set, then command execution stops 362 ** at an error if we are not interactive. 363 */ 364 static int bail_on_error = 0; 365 366 /* 367 ** Threat stdin as an interactive input if the following variable 368 ** is true. Otherwise, assume stdin is connected to a file or pipe. 369 */ 370 static int stdin_is_interactive = 1; 371 372 /* 373 ** On Windows systems we have to know if standard output is a console 374 ** in order to translate UTF-8 into MBCS. The following variable is 375 ** true if translation is required. 376 */ 377 static int stdout_is_console = 1; 378 379 /* 380 ** The following is the open SQLite database. We make a pointer 381 ** to this database a static variable so that it can be accessed 382 ** by the SIGINT handler to interrupt database processing. 383 */ 384 static sqlite3 *globalDb = 0; 385 386 /* 387 ** True if an interrupt (Control-C) has been received. 388 */ 389 static volatile int seenInterrupt = 0; 390 391 /* 392 ** This is the name of our program. It is set in main(), used 393 ** in a number of other places, mostly for error messages. 394 */ 395 static char *Argv0; 396 397 /* 398 ** Prompt strings. Initialized in main. Settable with 399 ** .prompt main continue 400 */ 401 static char mainPrompt[20]; /* First line prompt. default: "sqlite> "*/ 402 static char continuePrompt[20]; /* Continuation prompt. default: " ...> " */ 403 404 /* 405 ** Render output like fprintf(). Except, if the output is going to the 406 ** console and if this is running on a Windows machine, translate the 407 ** output from UTF-8 into MBCS. 408 */ 409 #if defined(_WIN32) || defined(WIN32) 410 void utf8_printf(FILE *out, const char *zFormat, ...){ 411 va_list ap; 412 va_start(ap, zFormat); 413 if( stdout_is_console && (out==stdout || out==stderr) ){ 414 char *z1 = sqlite3_vmprintf(zFormat, ap); 415 char *z2 = sqlite3_win32_utf8_to_mbcs_v2(z1, 0); 416 sqlite3_free(z1); 417 fputs(z2, out); 418 sqlite3_free(z2); 419 }else{ 420 vfprintf(out, zFormat, ap); 421 } 422 va_end(ap); 423 } 424 #elif !defined(utf8_printf) 425 # define utf8_printf fprintf 426 #endif 427 428 /* 429 ** Render output like fprintf(). This should not be used on anything that 430 ** includes string formatting (e.g. "%s"). 431 */ 432 #if !defined(raw_printf) 433 # define raw_printf fprintf 434 #endif 435 436 /* 437 ** Write I/O traces to the following stream. 438 */ 439 #ifdef SQLITE_ENABLE_IOTRACE 440 static FILE *iotrace = 0; 441 #endif 442 443 /* 444 ** This routine works like printf in that its first argument is a 445 ** format string and subsequent arguments are values to be substituted 446 ** in place of % fields. The result of formatting this string 447 ** is written to iotrace. 448 */ 449 #ifdef SQLITE_ENABLE_IOTRACE 450 static void SQLITE_CDECL iotracePrintf(const char *zFormat, ...){ 451 va_list ap; 452 char *z; 453 if( iotrace==0 ) return; 454 va_start(ap, zFormat); 455 z = sqlite3_vmprintf(zFormat, ap); 456 va_end(ap); 457 utf8_printf(iotrace, "%s", z); 458 sqlite3_free(z); 459 } 460 #endif 461 462 /* 463 ** Output string zUtf to stream pOut as w characters. If w is negative, 464 ** then right-justify the text. W is the width in UTF-8 characters, not 465 ** in bytes. This is different from the %*.*s specification in printf 466 ** since with %*.*s the width is measured in bytes, not characters. 467 */ 468 static void utf8_width_print(FILE *pOut, int w, const char *zUtf){ 469 int i; 470 int n; 471 int aw = w<0 ? -w : w; 472 char zBuf[1000]; 473 if( aw>(int)sizeof(zBuf)/3 ) aw = (int)sizeof(zBuf)/3; 474 for(i=n=0; zUtf[i]; i++){ 475 if( (zUtf[i]&0xc0)!=0x80 ){ 476 n++; 477 if( n==aw ){ 478 do{ i++; }while( (zUtf[i]&0xc0)==0x80 ); 479 break; 480 } 481 } 482 } 483 if( n>=aw ){ 484 utf8_printf(pOut, "%.*s", i, zUtf); 485 }else if( w<0 ){ 486 utf8_printf(pOut, "%*s%s", aw-n, "", zUtf); 487 }else{ 488 utf8_printf(pOut, "%s%*s", zUtf, aw-n, ""); 489 } 490 } 491 492 493 /* 494 ** Determines if a string is a number of not. 495 */ 496 static int isNumber(const char *z, int *realnum){ 497 if( *z=='-' || *z=='+' ) z++; 498 if( !IsDigit(*z) ){ 499 return 0; 500 } 501 z++; 502 if( realnum ) *realnum = 0; 503 while( IsDigit(*z) ){ z++; } 504 if( *z=='.' ){ 505 z++; 506 if( !IsDigit(*z) ) return 0; 507 while( IsDigit(*z) ){ z++; } 508 if( realnum ) *realnum = 1; 509 } 510 if( *z=='e' || *z=='E' ){ 511 z++; 512 if( *z=='+' || *z=='-' ) z++; 513 if( !IsDigit(*z) ) return 0; 514 while( IsDigit(*z) ){ z++; } 515 if( realnum ) *realnum = 1; 516 } 517 return *z==0; 518 } 519 520 /* 521 ** Compute a string length that is limited to what can be stored in 522 ** lower 30 bits of a 32-bit signed integer. 523 */ 524 static int strlen30(const char *z){ 525 const char *z2 = z; 526 while( *z2 ){ z2++; } 527 return 0x3fffffff & (int)(z2 - z); 528 } 529 530 /* 531 ** Return the length of a string in characters. Multibyte UTF8 characters 532 ** count as a single character. 533 */ 534 static int strlenChar(const char *z){ 535 int n = 0; 536 while( *z ){ 537 if( (0xc0&*(z++))!=0x80 ) n++; 538 } 539 return n; 540 } 541 542 /* 543 ** This routine reads a line of text from FILE in, stores 544 ** the text in memory obtained from malloc() and returns a pointer 545 ** to the text. NULL is returned at end of file, or if malloc() 546 ** fails. 547 ** 548 ** If zLine is not NULL then it is a malloced buffer returned from 549 ** a previous call to this routine that may be reused. 550 */ 551 static char *local_getline(char *zLine, FILE *in){ 552 int nLine = zLine==0 ? 0 : 100; 553 int n = 0; 554 555 while( 1 ){ 556 if( n+100>nLine ){ 557 nLine = nLine*2 + 100; 558 zLine = realloc(zLine, nLine); 559 if( zLine==0 ) return 0; 560 } 561 if( fgets(&zLine[n], nLine - n, in)==0 ){ 562 if( n==0 ){ 563 free(zLine); 564 return 0; 565 } 566 zLine[n] = 0; 567 break; 568 } 569 while( zLine[n] ) n++; 570 if( n>0 && zLine[n-1]=='\n' ){ 571 n--; 572 if( n>0 && zLine[n-1]=='\r' ) n--; 573 zLine[n] = 0; 574 break; 575 } 576 } 577 #if defined(_WIN32) || defined(WIN32) 578 /* For interactive input on Windows systems, translate the 579 ** multi-byte characterset characters into UTF-8. */ 580 if( stdin_is_interactive && in==stdin ){ 581 char *zTrans = sqlite3_win32_mbcs_to_utf8_v2(zLine, 0); 582 if( zTrans ){ 583 int nTrans = strlen30(zTrans)+1; 584 if( nTrans>nLine ){ 585 zLine = realloc(zLine, nTrans); 586 if( zLine==0 ){ 587 sqlite3_free(zTrans); 588 return 0; 589 } 590 } 591 memcpy(zLine, zTrans, nTrans); 592 sqlite3_free(zTrans); 593 } 594 } 595 #endif /* defined(_WIN32) || defined(WIN32) */ 596 return zLine; 597 } 598 599 /* 600 ** Retrieve a single line of input text. 601 ** 602 ** If in==0 then read from standard input and prompt before each line. 603 ** If isContinuation is true, then a continuation prompt is appropriate. 604 ** If isContinuation is zero, then the main prompt should be used. 605 ** 606 ** If zPrior is not NULL then it is a buffer from a prior call to this 607 ** routine that can be reused. 608 ** 609 ** The result is stored in space obtained from malloc() and must either 610 ** be freed by the caller or else passed back into this routine via the 611 ** zPrior argument for reuse. 612 */ 613 static char *one_input_line(FILE *in, char *zPrior, int isContinuation){ 614 char *zPrompt; 615 char *zResult; 616 if( in!=0 ){ 617 zResult = local_getline(zPrior, in); 618 }else{ 619 zPrompt = isContinuation ? continuePrompt : mainPrompt; 620 #if SHELL_USE_LOCAL_GETLINE 621 printf("%s", zPrompt); 622 fflush(stdout); 623 zResult = local_getline(zPrior, stdin); 624 #else 625 free(zPrior); 626 zResult = shell_readline(zPrompt); 627 if( zResult && *zResult ) shell_add_history(zResult); 628 #endif 629 } 630 return zResult; 631 } 632 /* 633 ** A variable length string to which one can append text. 634 */ 635 typedef struct ShellText ShellText; 636 struct ShellText { 637 char *z; 638 int n; 639 int nAlloc; 640 }; 641 642 /* 643 ** Initialize and destroy a ShellText object 644 */ 645 static void initText(ShellText *p){ 646 memset(p, 0, sizeof(*p)); 647 } 648 static void freeText(ShellText *p){ 649 free(p->z); 650 initText(p); 651 } 652 653 /* zIn is either a pointer to a NULL-terminated string in memory obtained 654 ** from malloc(), or a NULL pointer. The string pointed to by zAppend is 655 ** added to zIn, and the result returned in memory obtained from malloc(). 656 ** zIn, if it was not NULL, is freed. 657 ** 658 ** If the third argument, quote, is not '\0', then it is used as a 659 ** quote character for zAppend. 660 */ 661 static void appendText(ShellText *p, char const *zAppend, char quote){ 662 int len; 663 int i; 664 int nAppend = strlen30(zAppend); 665 666 len = nAppend+p->n+1; 667 if( quote ){ 668 len += 2; 669 for(i=0; i<nAppend; i++){ 670 if( zAppend[i]==quote ) len++; 671 } 672 } 673 674 if( p->n+len>=p->nAlloc ){ 675 p->nAlloc = p->nAlloc*2 + len + 20; 676 p->z = realloc(p->z, p->nAlloc); 677 if( p->z==0 ){ 678 memset(p, 0, sizeof(*p)); 679 return; 680 } 681 } 682 683 if( quote ){ 684 char *zCsr = p->z+p->n; 685 *zCsr++ = quote; 686 for(i=0; i<nAppend; i++){ 687 *zCsr++ = zAppend[i]; 688 if( zAppend[i]==quote ) *zCsr++ = quote; 689 } 690 *zCsr++ = quote; 691 p->n = (int)(zCsr - p->z); 692 *zCsr = '\0'; 693 }else{ 694 memcpy(p->z+p->n, zAppend, nAppend); 695 p->n += nAppend; 696 p->z[p->n] = '\0'; 697 } 698 } 699 700 /* 701 ** Attempt to determine if identifier zName needs to be quoted, either 702 ** because it contains non-alphanumeric characters, or because it is an 703 ** SQLite keyword. Be conservative in this estimate: When in doubt assume 704 ** that quoting is required. 705 ** 706 ** Return '"' if quoting is required. Return 0 if no quoting is required. 707 */ 708 static char quoteChar(const char *zName){ 709 /* All SQLite keywords, in alphabetical order */ 710 static const char *azKeywords[] = { 711 "ABORT", "ACTION", "ADD", "AFTER", "ALL", "ALTER", "ANALYZE", "AND", "AS", 712 "ASC", "ATTACH", "AUTOINCREMENT", "BEFORE", "BEGIN", "BETWEEN", "BY", 713 "CASCADE", "CASE", "CAST", "CHECK", "COLLATE", "COLUMN", "COMMIT", 714 "CONFLICT", "CONSTRAINT", "CREATE", "CROSS", "CURRENT_DATE", 715 "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATABASE", "DEFAULT", "DEFERRABLE", 716 "DEFERRED", "DELETE", "DESC", "DETACH", "DISTINCT", "DROP", "EACH", 717 "ELSE", "END", "ESCAPE", "EXCEPT", "EXCLUSIVE", "EXISTS", "EXPLAIN", 718 "FAIL", "FOR", "FOREIGN", "FROM", "FULL", "GLOB", "GROUP", "HAVING", "IF", 719 "IGNORE", "IMMEDIATE", "IN", "INDEX", "INDEXED", "INITIALLY", "INNER", 720 "INSERT", "INSTEAD", "INTERSECT", "INTO", "IS", "ISNULL", "JOIN", "KEY", 721 "LEFT", "LIKE", "LIMIT", "MATCH", "NATURAL", "NO", "NOT", "NOTNULL", 722 "NULL", "OF", "OFFSET", "ON", "OR", "ORDER", "OUTER", "PLAN", "PRAGMA", 723 "PRIMARY", "QUERY", "RAISE", "RECURSIVE", "REFERENCES", "REGEXP", 724 "REINDEX", "RELEASE", "RENAME", "REPLACE", "RESTRICT", "RIGHT", 725 "ROLLBACK", "ROW", "SAVEPOINT", "SELECT", "SET", "TABLE", "TEMP", 726 "TEMPORARY", "THEN", "TO", "TRANSACTION", "TRIGGER", "UNION", "UNIQUE", 727 "UPDATE", "USING", "VACUUM", "VALUES", "VIEW", "VIRTUAL", "WHEN", "WHERE", 728 "WITH", "WITHOUT", 729 }; 730 int i, lwr, upr, mid, c; 731 if( !isalpha((unsigned char)zName[0]) && zName[0]!='_' ) return '"'; 732 for(i=0; zName[i]; i++){ 733 if( !isalnum((unsigned char)zName[i]) && zName[i]!='_' ) return '"'; 734 } 735 lwr = 0; 736 upr = sizeof(azKeywords)/sizeof(azKeywords[0]) - 1; 737 while( lwr<=upr ){ 738 mid = (lwr+upr)/2; 739 c = sqlite3_stricmp(azKeywords[mid], zName); 740 if( c==0 ) return '"'; 741 if( c<0 ){ 742 lwr = mid+1; 743 }else{ 744 upr = mid-1; 745 } 746 } 747 return 0; 748 } 749 750 /* 751 ** SQL function: shell_add_schema(S,X) 752 ** 753 ** Add the schema name X to the CREATE statement in S and return the result. 754 ** Examples: 755 ** 756 ** CREATE TABLE t1(x) -> CREATE TABLE xyz.t1(x); 757 ** 758 ** Also works on 759 ** 760 ** CREATE INDEX 761 ** CREATE UNIQUE INDEX 762 ** CREATE VIEW 763 ** CREATE TRIGGER 764 ** CREATE VIRTUAL TABLE 765 ** 766 ** This UDF is used by the .schema command to insert the schema name of 767 ** attached databases into the middle of the sqlite_master.sql field. 768 */ 769 static void shellAddSchemaName( 770 sqlite3_context *pCtx, 771 int nVal, 772 sqlite3_value **apVal 773 ){ 774 static const char *aPrefix[] = { 775 "TABLE", 776 "INDEX", 777 "UNIQUE INDEX", 778 "VIEW", 779 "TRIGGER", 780 "VIRTUAL TABLE" 781 }; 782 int i = 0; 783 const char *zIn = (const char*)sqlite3_value_text(apVal[0]); 784 const char *zSchema = (const char*)sqlite3_value_text(apVal[1]); 785 assert( nVal==2 ); 786 if( zIn!=0 && strncmp(zIn, "CREATE ", 7)==0 ){ 787 for(i=0; i<(int)(sizeof(aPrefix)/sizeof(aPrefix[0])); i++){ 788 int n = strlen30(aPrefix[i]); 789 if( strncmp(zIn+7, aPrefix[i], n)==0 && zIn[n+7]==' ' ){ 790 char cQuote = quoteChar(zSchema); 791 char *z; 792 if( cQuote ){ 793 z = sqlite3_mprintf("%.*s \"%w\".%s", n+7, zIn, zSchema, zIn+n+8); 794 }else{ 795 z = sqlite3_mprintf("%.*s %s.%s", n+7, zIn, zSchema, zIn+n+8); 796 } 797 sqlite3_result_text(pCtx, z, -1, sqlite3_free); 798 return; 799 } 800 } 801 } 802 sqlite3_result_value(pCtx, apVal[0]); 803 } 804 805 /* 806 ** The source code for several run-time loadable extensions is inserted 807 ** below by the ../tool/mkshellc.tcl script. Before processing that included 808 ** code, we need to override some macros to make the included program code 809 ** work here in the middle of this regular program. 810 */ 811 #define SQLITE_EXTENSION_INIT1 812 #define SQLITE_EXTENSION_INIT2(X) (void)(X) 813 814 /************************* Begin ../ext/misc/shathree.c ******************/ 815 /* 816 ** 2017-03-08 817 ** 818 ** The author disclaims copyright to this source code. In place of 819 ** a legal notice, here is a blessing: 820 ** 821 ** May you do good and not evil. 822 ** May you find forgiveness for yourself and forgive others. 823 ** May you share freely, never taking more than you give. 824 ** 825 ****************************************************************************** 826 ** 827 ** This SQLite extension implements a functions that compute SHA1 hashes. 828 ** Two SQL functions are implemented: 829 ** 830 ** sha3(X,SIZE) 831 ** sha3_query(Y,SIZE) 832 ** 833 ** The sha3(X) function computes the SHA3 hash of the input X, or NULL if 834 ** X is NULL. 835 ** 836 ** The sha3_query(Y) function evalutes all queries in the SQL statements of Y 837 ** and returns a hash of their results. 838 ** 839 ** The SIZE argument is optional. If omitted, the SHA3-256 hash algorithm 840 ** is used. If SIZE is included it must be one of the integers 224, 256, 841 ** 384, or 512, to determine SHA3 hash variant that is computed. 842 */ 843 SQLITE_EXTENSION_INIT1 844 #include <assert.h> 845 #include <string.h> 846 #include <stdarg.h> 847 typedef sqlite3_uint64 u64; 848 849 /****************************************************************************** 850 ** The Hash Engine 851 */ 852 /* 853 ** Macros to determine whether the machine is big or little endian, 854 ** and whether or not that determination is run-time or compile-time. 855 ** 856 ** For best performance, an attempt is made to guess at the byte-order 857 ** using C-preprocessor macros. If that is unsuccessful, or if 858 ** -DSHA3_BYTEORDER=0 is set, then byte-order is determined 859 ** at run-time. 860 */ 861 #ifndef SHA3_BYTEORDER 862 # if defined(i386) || defined(__i386__) || defined(_M_IX86) || \ 863 defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \ 864 defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \ 865 defined(__arm__) 866 # define SHA3_BYTEORDER 1234 867 # elif defined(sparc) || defined(__ppc__) 868 # define SHA3_BYTEORDER 4321 869 # else 870 # define SHA3_BYTEORDER 0 871 # endif 872 #endif 873 874 875 /* 876 ** State structure for a SHA3 hash in progress 877 */ 878 typedef struct SHA3Context SHA3Context; 879 struct SHA3Context { 880 union { 881 u64 s[25]; /* Keccak state. 5x5 lines of 64 bits each */ 882 unsigned char x[1600]; /* ... or 1600 bytes */ 883 } u; 884 unsigned nRate; /* Bytes of input accepted per Keccak iteration */ 885 unsigned nLoaded; /* Input bytes loaded into u.x[] so far this cycle */ 886 unsigned ixMask; /* Insert next input into u.x[nLoaded^ixMask]. */ 887 }; 888 889 /* 890 ** A single step of the Keccak mixing function for a 1600-bit state 891 */ 892 static void KeccakF1600Step(SHA3Context *p){ 893 int i; 894 u64 B0, B1, B2, B3, B4; 895 u64 C0, C1, C2, C3, C4; 896 u64 D0, D1, D2, D3, D4; 897 static const u64 RC[] = { 898 0x0000000000000001ULL, 0x0000000000008082ULL, 899 0x800000000000808aULL, 0x8000000080008000ULL, 900 0x000000000000808bULL, 0x0000000080000001ULL, 901 0x8000000080008081ULL, 0x8000000000008009ULL, 902 0x000000000000008aULL, 0x0000000000000088ULL, 903 0x0000000080008009ULL, 0x000000008000000aULL, 904 0x000000008000808bULL, 0x800000000000008bULL, 905 0x8000000000008089ULL, 0x8000000000008003ULL, 906 0x8000000000008002ULL, 0x8000000000000080ULL, 907 0x000000000000800aULL, 0x800000008000000aULL, 908 0x8000000080008081ULL, 0x8000000000008080ULL, 909 0x0000000080000001ULL, 0x8000000080008008ULL 910 }; 911 # define A00 (p->u.s[0]) 912 # define A01 (p->u.s[1]) 913 # define A02 (p->u.s[2]) 914 # define A03 (p->u.s[3]) 915 # define A04 (p->u.s[4]) 916 # define A10 (p->u.s[5]) 917 # define A11 (p->u.s[6]) 918 # define A12 (p->u.s[7]) 919 # define A13 (p->u.s[8]) 920 # define A14 (p->u.s[9]) 921 # define A20 (p->u.s[10]) 922 # define A21 (p->u.s[11]) 923 # define A22 (p->u.s[12]) 924 # define A23 (p->u.s[13]) 925 # define A24 (p->u.s[14]) 926 # define A30 (p->u.s[15]) 927 # define A31 (p->u.s[16]) 928 # define A32 (p->u.s[17]) 929 # define A33 (p->u.s[18]) 930 # define A34 (p->u.s[19]) 931 # define A40 (p->u.s[20]) 932 # define A41 (p->u.s[21]) 933 # define A42 (p->u.s[22]) 934 # define A43 (p->u.s[23]) 935 # define A44 (p->u.s[24]) 936 # define ROL64(a,x) ((a<<x)|(a>>(64-x))) 937 938 for(i=0; i<24; i+=4){ 939 C0 = A00^A10^A20^A30^A40; 940 C1 = A01^A11^A21^A31^A41; 941 C2 = A02^A12^A22^A32^A42; 942 C3 = A03^A13^A23^A33^A43; 943 C4 = A04^A14^A24^A34^A44; 944 D0 = C4^ROL64(C1, 1); 945 D1 = C0^ROL64(C2, 1); 946 D2 = C1^ROL64(C3, 1); 947 D3 = C2^ROL64(C4, 1); 948 D4 = C3^ROL64(C0, 1); 949 950 B0 = (A00^D0); 951 B1 = ROL64((A11^D1), 44); 952 B2 = ROL64((A22^D2), 43); 953 B3 = ROL64((A33^D3), 21); 954 B4 = ROL64((A44^D4), 14); 955 A00 = B0 ^((~B1)& B2 ); 956 A00 ^= RC[i]; 957 A11 = B1 ^((~B2)& B3 ); 958 A22 = B2 ^((~B3)& B4 ); 959 A33 = B3 ^((~B4)& B0 ); 960 A44 = B4 ^((~B0)& B1 ); 961 962 B2 = ROL64((A20^D0), 3); 963 B3 = ROL64((A31^D1), 45); 964 B4 = ROL64((A42^D2), 61); 965 B0 = ROL64((A03^D3), 28); 966 B1 = ROL64((A14^D4), 20); 967 A20 = B0 ^((~B1)& B2 ); 968 A31 = B1 ^((~B2)& B3 ); 969 A42 = B2 ^((~B3)& B4 ); 970 A03 = B3 ^((~B4)& B0 ); 971 A14 = B4 ^((~B0)& B1 ); 972 973 B4 = ROL64((A40^D0), 18); 974 B0 = ROL64((A01^D1), 1); 975 B1 = ROL64((A12^D2), 6); 976 B2 = ROL64((A23^D3), 25); 977 B3 = ROL64((A34^D4), 8); 978 A40 = B0 ^((~B1)& B2 ); 979 A01 = B1 ^((~B2)& B3 ); 980 A12 = B2 ^((~B3)& B4 ); 981 A23 = B3 ^((~B4)& B0 ); 982 A34 = B4 ^((~B0)& B1 ); 983 984 B1 = ROL64((A10^D0), 36); 985 B2 = ROL64((A21^D1), 10); 986 B3 = ROL64((A32^D2), 15); 987 B4 = ROL64((A43^D3), 56); 988 B0 = ROL64((A04^D4), 27); 989 A10 = B0 ^((~B1)& B2 ); 990 A21 = B1 ^((~B2)& B3 ); 991 A32 = B2 ^((~B3)& B4 ); 992 A43 = B3 ^((~B4)& B0 ); 993 A04 = B4 ^((~B0)& B1 ); 994 995 B3 = ROL64((A30^D0), 41); 996 B4 = ROL64((A41^D1), 2); 997 B0 = ROL64((A02^D2), 62); 998 B1 = ROL64((A13^D3), 55); 999 B2 = ROL64((A24^D4), 39); 1000 A30 = B0 ^((~B1)& B2 ); 1001 A41 = B1 ^((~B2)& B3 ); 1002 A02 = B2 ^((~B3)& B4 ); 1003 A13 = B3 ^((~B4)& B0 ); 1004 A24 = B4 ^((~B0)& B1 ); 1005 1006 C0 = A00^A20^A40^A10^A30; 1007 C1 = A11^A31^A01^A21^A41; 1008 C2 = A22^A42^A12^A32^A02; 1009 C3 = A33^A03^A23^A43^A13; 1010 C4 = A44^A14^A34^A04^A24; 1011 D0 = C4^ROL64(C1, 1); 1012 D1 = C0^ROL64(C2, 1); 1013 D2 = C1^ROL64(C3, 1); 1014 D3 = C2^ROL64(C4, 1); 1015 D4 = C3^ROL64(C0, 1); 1016 1017 B0 = (A00^D0); 1018 B1 = ROL64((A31^D1), 44); 1019 B2 = ROL64((A12^D2), 43); 1020 B3 = ROL64((A43^D3), 21); 1021 B4 = ROL64((A24^D4), 14); 1022 A00 = B0 ^((~B1)& B2 ); 1023 A00 ^= RC[i+1]; 1024 A31 = B1 ^((~B2)& B3 ); 1025 A12 = B2 ^((~B3)& B4 ); 1026 A43 = B3 ^((~B4)& B0 ); 1027 A24 = B4 ^((~B0)& B1 ); 1028 1029 B2 = ROL64((A40^D0), 3); 1030 B3 = ROL64((A21^D1), 45); 1031 B4 = ROL64((A02^D2), 61); 1032 B0 = ROL64((A33^D3), 28); 1033 B1 = ROL64((A14^D4), 20); 1034 A40 = B0 ^((~B1)& B2 ); 1035 A21 = B1 ^((~B2)& B3 ); 1036 A02 = B2 ^((~B3)& B4 ); 1037 A33 = B3 ^((~B4)& B0 ); 1038 A14 = B4 ^((~B0)& B1 ); 1039 1040 B4 = ROL64((A30^D0), 18); 1041 B0 = ROL64((A11^D1), 1); 1042 B1 = ROL64((A42^D2), 6); 1043 B2 = ROL64((A23^D3), 25); 1044 B3 = ROL64((A04^D4), 8); 1045 A30 = B0 ^((~B1)& B2 ); 1046 A11 = B1 ^((~B2)& B3 ); 1047 A42 = B2 ^((~B3)& B4 ); 1048 A23 = B3 ^((~B4)& B0 ); 1049 A04 = B4 ^((~B0)& B1 ); 1050 1051 B1 = ROL64((A20^D0), 36); 1052 B2 = ROL64((A01^D1), 10); 1053 B3 = ROL64((A32^D2), 15); 1054 B4 = ROL64((A13^D3), 56); 1055 B0 = ROL64((A44^D4), 27); 1056 A20 = B0 ^((~B1)& B2 ); 1057 A01 = B1 ^((~B2)& B3 ); 1058 A32 = B2 ^((~B3)& B4 ); 1059 A13 = B3 ^((~B4)& B0 ); 1060 A44 = B4 ^((~B0)& B1 ); 1061 1062 B3 = ROL64((A10^D0), 41); 1063 B4 = ROL64((A41^D1), 2); 1064 B0 = ROL64((A22^D2), 62); 1065 B1 = ROL64((A03^D3), 55); 1066 B2 = ROL64((A34^D4), 39); 1067 A10 = B0 ^((~B1)& B2 ); 1068 A41 = B1 ^((~B2)& B3 ); 1069 A22 = B2 ^((~B3)& B4 ); 1070 A03 = B3 ^((~B4)& B0 ); 1071 A34 = B4 ^((~B0)& B1 ); 1072 1073 C0 = A00^A40^A30^A20^A10; 1074 C1 = A31^A21^A11^A01^A41; 1075 C2 = A12^A02^A42^A32^A22; 1076 C3 = A43^A33^A23^A13^A03; 1077 C4 = A24^A14^A04^A44^A34; 1078 D0 = C4^ROL64(C1, 1); 1079 D1 = C0^ROL64(C2, 1); 1080 D2 = C1^ROL64(C3, 1); 1081 D3 = C2^ROL64(C4, 1); 1082 D4 = C3^ROL64(C0, 1); 1083 1084 B0 = (A00^D0); 1085 B1 = ROL64((A21^D1), 44); 1086 B2 = ROL64((A42^D2), 43); 1087 B3 = ROL64((A13^D3), 21); 1088 B4 = ROL64((A34^D4), 14); 1089 A00 = B0 ^((~B1)& B2 ); 1090 A00 ^= RC[i+2]; 1091 A21 = B1 ^((~B2)& B3 ); 1092 A42 = B2 ^((~B3)& B4 ); 1093 A13 = B3 ^((~B4)& B0 ); 1094 A34 = B4 ^((~B0)& B1 ); 1095 1096 B2 = ROL64((A30^D0), 3); 1097 B3 = ROL64((A01^D1), 45); 1098 B4 = ROL64((A22^D2), 61); 1099 B0 = ROL64((A43^D3), 28); 1100 B1 = ROL64((A14^D4), 20); 1101 A30 = B0 ^((~B1)& B2 ); 1102 A01 = B1 ^((~B2)& B3 ); 1103 A22 = B2 ^((~B3)& B4 ); 1104 A43 = B3 ^((~B4)& B0 ); 1105 A14 = B4 ^((~B0)& B1 ); 1106 1107 B4 = ROL64((A10^D0), 18); 1108 B0 = ROL64((A31^D1), 1); 1109 B1 = ROL64((A02^D2), 6); 1110 B2 = ROL64((A23^D3), 25); 1111 B3 = ROL64((A44^D4), 8); 1112 A10 = B0 ^((~B1)& B2 ); 1113 A31 = B1 ^((~B2)& B3 ); 1114 A02 = B2 ^((~B3)& B4 ); 1115 A23 = B3 ^((~B4)& B0 ); 1116 A44 = B4 ^((~B0)& B1 ); 1117 1118 B1 = ROL64((A40^D0), 36); 1119 B2 = ROL64((A11^D1), 10); 1120 B3 = ROL64((A32^D2), 15); 1121 B4 = ROL64((A03^D3), 56); 1122 B0 = ROL64((A24^D4), 27); 1123 A40 = B0 ^((~B1)& B2 ); 1124 A11 = B1 ^((~B2)& B3 ); 1125 A32 = B2 ^((~B3)& B4 ); 1126 A03 = B3 ^((~B4)& B0 ); 1127 A24 = B4 ^((~B0)& B1 ); 1128 1129 B3 = ROL64((A20^D0), 41); 1130 B4 = ROL64((A41^D1), 2); 1131 B0 = ROL64((A12^D2), 62); 1132 B1 = ROL64((A33^D3), 55); 1133 B2 = ROL64((A04^D4), 39); 1134 A20 = B0 ^((~B1)& B2 ); 1135 A41 = B1 ^((~B2)& B3 ); 1136 A12 = B2 ^((~B3)& B4 ); 1137 A33 = B3 ^((~B4)& B0 ); 1138 A04 = B4 ^((~B0)& B1 ); 1139 1140 C0 = A00^A30^A10^A40^A20; 1141 C1 = A21^A01^A31^A11^A41; 1142 C2 = A42^A22^A02^A32^A12; 1143 C3 = A13^A43^A23^A03^A33; 1144 C4 = A34^A14^A44^A24^A04; 1145 D0 = C4^ROL64(C1, 1); 1146 D1 = C0^ROL64(C2, 1); 1147 D2 = C1^ROL64(C3, 1); 1148 D3 = C2^ROL64(C4, 1); 1149 D4 = C3^ROL64(C0, 1); 1150 1151 B0 = (A00^D0); 1152 B1 = ROL64((A01^D1), 44); 1153 B2 = ROL64((A02^D2), 43); 1154 B3 = ROL64((A03^D3), 21); 1155 B4 = ROL64((A04^D4), 14); 1156 A00 = B0 ^((~B1)& B2 ); 1157 A00 ^= RC[i+3]; 1158 A01 = B1 ^((~B2)& B3 ); 1159 A02 = B2 ^((~B3)& B4 ); 1160 A03 = B3 ^((~B4)& B0 ); 1161 A04 = B4 ^((~B0)& B1 ); 1162 1163 B2 = ROL64((A10^D0), 3); 1164 B3 = ROL64((A11^D1), 45); 1165 B4 = ROL64((A12^D2), 61); 1166 B0 = ROL64((A13^D3), 28); 1167 B1 = ROL64((A14^D4), 20); 1168 A10 = B0 ^((~B1)& B2 ); 1169 A11 = B1 ^((~B2)& B3 ); 1170 A12 = B2 ^((~B3)& B4 ); 1171 A13 = B3 ^((~B4)& B0 ); 1172 A14 = B4 ^((~B0)& B1 ); 1173 1174 B4 = ROL64((A20^D0), 18); 1175 B0 = ROL64((A21^D1), 1); 1176 B1 = ROL64((A22^D2), 6); 1177 B2 = ROL64((A23^D3), 25); 1178 B3 = ROL64((A24^D4), 8); 1179 A20 = B0 ^((~B1)& B2 ); 1180 A21 = B1 ^((~B2)& B3 ); 1181 A22 = B2 ^((~B3)& B4 ); 1182 A23 = B3 ^((~B4)& B0 ); 1183 A24 = B4 ^((~B0)& B1 ); 1184 1185 B1 = ROL64((A30^D0), 36); 1186 B2 = ROL64((A31^D1), 10); 1187 B3 = ROL64((A32^D2), 15); 1188 B4 = ROL64((A33^D3), 56); 1189 B0 = ROL64((A34^D4), 27); 1190 A30 = B0 ^((~B1)& B2 ); 1191 A31 = B1 ^((~B2)& B3 ); 1192 A32 = B2 ^((~B3)& B4 ); 1193 A33 = B3 ^((~B4)& B0 ); 1194 A34 = B4 ^((~B0)& B1 ); 1195 1196 B3 = ROL64((A40^D0), 41); 1197 B4 = ROL64((A41^D1), 2); 1198 B0 = ROL64((A42^D2), 62); 1199 B1 = ROL64((A43^D3), 55); 1200 B2 = ROL64((A44^D4), 39); 1201 A40 = B0 ^((~B1)& B2 ); 1202 A41 = B1 ^((~B2)& B3 ); 1203 A42 = B2 ^((~B3)& B4 ); 1204 A43 = B3 ^((~B4)& B0 ); 1205 A44 = B4 ^((~B0)& B1 ); 1206 } 1207 } 1208 1209 /* 1210 ** Initialize a new hash. iSize determines the size of the hash 1211 ** in bits and should be one of 224, 256, 384, or 512. Or iSize 1212 ** can be zero to use the default hash size of 256 bits. 1213 */ 1214 static void SHA3Init(SHA3Context *p, int iSize){ 1215 memset(p, 0, sizeof(*p)); 1216 if( iSize>=128 && iSize<=512 ){ 1217 p->nRate = (1600 - ((iSize + 31)&~31)*2)/8; 1218 }else{ 1219 p->nRate = (1600 - 2*256)/8; 1220 } 1221 #if SHA3_BYTEORDER==1234 1222 /* Known to be little-endian at compile-time. No-op */ 1223 #elif SHA3_BYTEORDER==4321 1224 p->ixMask = 7; /* Big-endian */ 1225 #else 1226 { 1227 static unsigned int one = 1; 1228 if( 1==*(unsigned char*)&one ){ 1229 /* Little endian. No byte swapping. */ 1230 p->ixMask = 0; 1231 }else{ 1232 /* Big endian. Byte swap. */ 1233 p->ixMask = 7; 1234 } 1235 } 1236 #endif 1237 } 1238 1239 /* 1240 ** Make consecutive calls to the SHA3Update function to add new content 1241 ** to the hash 1242 */ 1243 static void SHA3Update( 1244 SHA3Context *p, 1245 const unsigned char *aData, 1246 unsigned int nData 1247 ){ 1248 unsigned int i = 0; 1249 #if SHA3_BYTEORDER==1234 1250 if( (p->nLoaded % 8)==0 && ((aData - (const unsigned char*)0)&7)==0 ){ 1251 for(; i+7<nData; i+=8){ 1252 p->u.s[p->nLoaded/8] ^= *(u64*)&aData[i]; 1253 p->nLoaded += 8; 1254 if( p->nLoaded>=p->nRate ){ 1255 KeccakF1600Step(p); 1256 p->nLoaded = 0; 1257 } 1258 } 1259 } 1260 #endif 1261 for(; i<nData; i++){ 1262 #if SHA3_BYTEORDER==1234 1263 p->u.x[p->nLoaded] ^= aData[i]; 1264 #elif SHA3_BYTEORDER==4321 1265 p->u.x[p->nLoaded^0x07] ^= aData[i]; 1266 #else 1267 p->u.x[p->nLoaded^p->ixMask] ^= aData[i]; 1268 #endif 1269 p->nLoaded++; 1270 if( p->nLoaded==p->nRate ){ 1271 KeccakF1600Step(p); 1272 p->nLoaded = 0; 1273 } 1274 } 1275 } 1276 1277 /* 1278 ** After all content has been added, invoke SHA3Final() to compute 1279 ** the final hash. The function returns a pointer to the binary 1280 ** hash value. 1281 */ 1282 static unsigned char *SHA3Final(SHA3Context *p){ 1283 unsigned int i; 1284 if( p->nLoaded==p->nRate-1 ){ 1285 const unsigned char c1 = 0x86; 1286 SHA3Update(p, &c1, 1); 1287 }else{ 1288 const unsigned char c2 = 0x06; 1289 const unsigned char c3 = 0x80; 1290 SHA3Update(p, &c2, 1); 1291 p->nLoaded = p->nRate - 1; 1292 SHA3Update(p, &c3, 1); 1293 } 1294 for(i=0; i<p->nRate; i++){ 1295 p->u.x[i+p->nRate] = p->u.x[i^p->ixMask]; 1296 } 1297 return &p->u.x[p->nRate]; 1298 } 1299 /* End of the hashing logic 1300 *****************************************************************************/ 1301 1302 /* 1303 ** Implementation of the sha3(X,SIZE) function. 1304 ** 1305 ** Return a BLOB which is the SIZE-bit SHA3 hash of X. The default 1306 ** size is 256. If X is a BLOB, it is hashed as is. 1307 ** For all other non-NULL types of input, X is converted into a UTF-8 string 1308 ** and the string is hashed without the trailing 0x00 terminator. The hash 1309 ** of a NULL value is NULL. 1310 */ 1311 static void sha3Func( 1312 sqlite3_context *context, 1313 int argc, 1314 sqlite3_value **argv 1315 ){ 1316 SHA3Context cx; 1317 int eType = sqlite3_value_type(argv[0]); 1318 int nByte = sqlite3_value_bytes(argv[0]); 1319 int iSize; 1320 if( argc==1 ){ 1321 iSize = 256; 1322 }else{ 1323 iSize = sqlite3_value_int(argv[1]); 1324 if( iSize!=224 && iSize!=256 && iSize!=384 && iSize!=512 ){ 1325 sqlite3_result_error(context, "SHA3 size should be one of: 224 256 " 1326 "384 512", -1); 1327 return; 1328 } 1329 } 1330 if( eType==SQLITE_NULL ) return; 1331 SHA3Init(&cx, iSize); 1332 if( eType==SQLITE_BLOB ){ 1333 SHA3Update(&cx, sqlite3_value_blob(argv[0]), nByte); 1334 }else{ 1335 SHA3Update(&cx, sqlite3_value_text(argv[0]), nByte); 1336 } 1337 sqlite3_result_blob(context, SHA3Final(&cx), iSize/8, SQLITE_TRANSIENT); 1338 } 1339 1340 /* Compute a string using sqlite3_vsnprintf() with a maximum length 1341 ** of 50 bytes and add it to the hash. 1342 */ 1343 static void hash_step_vformat( 1344 SHA3Context *p, /* Add content to this context */ 1345 const char *zFormat, 1346 ... 1347 ){ 1348 va_list ap; 1349 int n; 1350 char zBuf[50]; 1351 va_start(ap, zFormat); 1352 sqlite3_vsnprintf(sizeof(zBuf),zBuf,zFormat,ap); 1353 va_end(ap); 1354 n = (int)strlen(zBuf); 1355 SHA3Update(p, (unsigned char*)zBuf, n); 1356 } 1357 1358 /* 1359 ** Implementation of the sha3_query(SQL,SIZE) function. 1360 ** 1361 ** This function compiles and runs the SQL statement(s) given in the 1362 ** argument. The results are hashed using a SIZE-bit SHA3. The default 1363 ** size is 256. 1364 ** 1365 ** The format of the byte stream that is hashed is summarized as follows: 1366 ** 1367 ** S<n>:<sql> 1368 ** R 1369 ** N 1370 ** I<int> 1371 ** F<ieee-float> 1372 ** B<size>:<bytes> 1373 ** T<size>:<text> 1374 ** 1375 ** <sql> is the original SQL text for each statement run and <n> is 1376 ** the size of that text. The SQL text is UTF-8. A single R character 1377 ** occurs before the start of each row. N means a NULL value. 1378 ** I mean an 8-byte little-endian integer <int>. F is a floating point 1379 ** number with an 8-byte little-endian IEEE floating point value <ieee-float>. 1380 ** B means blobs of <size> bytes. T means text rendered as <size> 1381 ** bytes of UTF-8. The <n> and <size> values are expressed as an ASCII 1382 ** text integers. 1383 ** 1384 ** For each SQL statement in the X input, there is one S segment. Each 1385 ** S segment is followed by zero or more R segments, one for each row in the 1386 ** result set. After each R, there are one or more N, I, F, B, or T segments, 1387 ** one for each column in the result set. Segments are concatentated directly 1388 ** with no delimiters of any kind. 1389 */ 1390 static void sha3QueryFunc( 1391 sqlite3_context *context, 1392 int argc, 1393 sqlite3_value **argv 1394 ){ 1395 sqlite3 *db = sqlite3_context_db_handle(context); 1396 const char *zSql = (const char*)sqlite3_value_text(argv[0]); 1397 sqlite3_stmt *pStmt = 0; 1398 int nCol; /* Number of columns in the result set */ 1399 int i; /* Loop counter */ 1400 int rc; 1401 int n; 1402 const char *z; 1403 SHA3Context cx; 1404 int iSize; 1405 1406 if( argc==1 ){ 1407 iSize = 256; 1408 }else{ 1409 iSize = sqlite3_value_int(argv[1]); 1410 if( iSize!=224 && iSize!=256 && iSize!=384 && iSize!=512 ){ 1411 sqlite3_result_error(context, "SHA3 size should be one of: 224 256 " 1412 "384 512", -1); 1413 return; 1414 } 1415 } 1416 if( zSql==0 ) return; 1417 SHA3Init(&cx, iSize); 1418 while( zSql[0] ){ 1419 rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, &zSql); 1420 if( rc ){ 1421 char *zMsg = sqlite3_mprintf("error SQL statement [%s]: %s", 1422 zSql, sqlite3_errmsg(db)); 1423 sqlite3_finalize(pStmt); 1424 sqlite3_result_error(context, zMsg, -1); 1425 sqlite3_free(zMsg); 1426 return; 1427 } 1428 if( !sqlite3_stmt_readonly(pStmt) ){ 1429 char *zMsg = sqlite3_mprintf("non-query: [%s]", sqlite3_sql(pStmt)); 1430 sqlite3_finalize(pStmt); 1431 sqlite3_result_error(context, zMsg, -1); 1432 sqlite3_free(zMsg); 1433 return; 1434 } 1435 nCol = sqlite3_column_count(pStmt); 1436 z = sqlite3_sql(pStmt); 1437 n = (int)strlen(z); 1438 hash_step_vformat(&cx,"S%d:",n); 1439 SHA3Update(&cx,(unsigned char*)z,n); 1440 1441 /* Compute a hash over the result of the query */ 1442 while( SQLITE_ROW==sqlite3_step(pStmt) ){ 1443 SHA3Update(&cx,(const unsigned char*)"R",1); 1444 for(i=0; i<nCol; i++){ 1445 switch( sqlite3_column_type(pStmt,i) ){ 1446 case SQLITE_NULL: { 1447 SHA3Update(&cx, (const unsigned char*)"N",1); 1448 break; 1449 } 1450 case SQLITE_INTEGER: { 1451 sqlite3_uint64 u; 1452 int j; 1453 unsigned char x[9]; 1454 sqlite3_int64 v = sqlite3_column_int64(pStmt,i); 1455 memcpy(&u, &v, 8); 1456 for(j=8; j>=1; j--){ 1457 x[j] = u & 0xff; 1458 u >>= 8; 1459 } 1460 x[0] = 'I'; 1461 SHA3Update(&cx, x, 9); 1462 break; 1463 } 1464 case SQLITE_FLOAT: { 1465 sqlite3_uint64 u; 1466 int j; 1467 unsigned char x[9]; 1468 double r = sqlite3_column_double(pStmt,i); 1469 memcpy(&u, &r, 8); 1470 for(j=8; j>=1; j--){ 1471 x[j] = u & 0xff; 1472 u >>= 8; 1473 } 1474 x[0] = 'F'; 1475 SHA3Update(&cx,x,9); 1476 break; 1477 } 1478 case SQLITE_TEXT: { 1479 int n2 = sqlite3_column_bytes(pStmt, i); 1480 const unsigned char *z2 = sqlite3_column_text(pStmt, i); 1481 hash_step_vformat(&cx,"T%d:",n2); 1482 SHA3Update(&cx, z2, n2); 1483 break; 1484 } 1485 case SQLITE_BLOB: { 1486 int n2 = sqlite3_column_bytes(pStmt, i); 1487 const unsigned char *z2 = sqlite3_column_blob(pStmt, i); 1488 hash_step_vformat(&cx,"B%d:",n2); 1489 SHA3Update(&cx, z2, n2); 1490 break; 1491 } 1492 } 1493 } 1494 } 1495 sqlite3_finalize(pStmt); 1496 } 1497 sqlite3_result_blob(context, SHA3Final(&cx), iSize/8, SQLITE_TRANSIENT); 1498 } 1499 1500 1501 #ifdef _WIN32 1502 1503 #endif 1504 int sqlite3_shathree_init( 1505 sqlite3 *db, 1506 char **pzErrMsg, 1507 const sqlite3_api_routines *pApi 1508 ){ 1509 int rc = SQLITE_OK; 1510 SQLITE_EXTENSION_INIT2(pApi); 1511 (void)pzErrMsg; /* Unused parameter */ 1512 rc = sqlite3_create_function(db, "sha3", 1, SQLITE_UTF8, 0, 1513 sha3Func, 0, 0); 1514 if( rc==SQLITE_OK ){ 1515 rc = sqlite3_create_function(db, "sha3", 2, SQLITE_UTF8, 0, 1516 sha3Func, 0, 0); 1517 } 1518 if( rc==SQLITE_OK ){ 1519 rc = sqlite3_create_function(db, "sha3_query", 1, SQLITE_UTF8, 0, 1520 sha3QueryFunc, 0, 0); 1521 } 1522 if( rc==SQLITE_OK ){ 1523 rc = sqlite3_create_function(db, "sha3_query", 2, SQLITE_UTF8, 0, 1524 sha3QueryFunc, 0, 0); 1525 } 1526 return rc; 1527 } 1528 1529 /************************* End ../ext/misc/shathree.c ********************/ 1530 /************************* Begin ../ext/misc/fileio.c ******************/ 1531 /* 1532 ** 2014-06-13 1533 ** 1534 ** The author disclaims copyright to this source code. In place of 1535 ** a legal notice, here is a blessing: 1536 ** 1537 ** May you do good and not evil. 1538 ** May you find forgiveness for yourself and forgive others. 1539 ** May you share freely, never taking more than you give. 1540 ** 1541 ****************************************************************************** 1542 ** 1543 ** This SQLite extension implements SQL functions readfile() and 1544 ** writefile(). 1545 */ 1546 SQLITE_EXTENSION_INIT1 1547 #include <stdio.h> 1548 1549 /* 1550 ** Implementation of the "readfile(X)" SQL function. The entire content 1551 ** of the file named X is read and returned as a BLOB. NULL is returned 1552 ** if the file does not exist or is unreadable. 1553 */ 1554 static void readfileFunc( 1555 sqlite3_context *context, 1556 int argc, 1557 sqlite3_value **argv 1558 ){ 1559 const char *zName; 1560 FILE *in; 1561 long nIn; 1562 void *pBuf; 1563 1564 (void)(argc); /* Unused parameter */ 1565 zName = (const char*)sqlite3_value_text(argv[0]); 1566 if( zName==0 ) return; 1567 in = fopen(zName, "rb"); 1568 if( in==0 ) return; 1569 fseek(in, 0, SEEK_END); 1570 nIn = ftell(in); 1571 rewind(in); 1572 pBuf = sqlite3_malloc( nIn ); 1573 if( pBuf && 1==fread(pBuf, nIn, 1, in) ){ 1574 sqlite3_result_blob(context, pBuf, nIn, sqlite3_free); 1575 }else{ 1576 sqlite3_free(pBuf); 1577 } 1578 fclose(in); 1579 } 1580 1581 /* 1582 ** Implementation of the "writefile(X,Y)" SQL function. The argument Y 1583 ** is written into file X. The number of bytes written is returned. Or 1584 ** NULL is returned if something goes wrong, such as being unable to open 1585 ** file X for writing. 1586 */ 1587 static void writefileFunc( 1588 sqlite3_context *context, 1589 int argc, 1590 sqlite3_value **argv 1591 ){ 1592 FILE *out; 1593 const char *z; 1594 sqlite3_int64 rc; 1595 const char *zFile; 1596 1597 (void)(argc); /* Unused parameter */ 1598 zFile = (const char*)sqlite3_value_text(argv[0]); 1599 if( zFile==0 ) return; 1600 out = fopen(zFile, "wb"); 1601 if( out==0 ) return; 1602 z = (const char*)sqlite3_value_blob(argv[1]); 1603 if( z==0 ){ 1604 rc = 0; 1605 }else{ 1606 rc = fwrite(z, 1, sqlite3_value_bytes(argv[1]), out); 1607 } 1608 fclose(out); 1609 sqlite3_result_int64(context, rc); 1610 } 1611 1612 1613 #ifdef _WIN32 1614 1615 #endif 1616 int sqlite3_fileio_init( 1617 sqlite3 *db, 1618 char **pzErrMsg, 1619 const sqlite3_api_routines *pApi 1620 ){ 1621 int rc = SQLITE_OK; 1622 SQLITE_EXTENSION_INIT2(pApi); 1623 (void)pzErrMsg; /* Unused parameter */ 1624 rc = sqlite3_create_function(db, "readfile", 1, SQLITE_UTF8, 0, 1625 readfileFunc, 0, 0); 1626 if( rc==SQLITE_OK ){ 1627 rc = sqlite3_create_function(db, "writefile", 2, SQLITE_UTF8, 0, 1628 writefileFunc, 0, 0); 1629 } 1630 return rc; 1631 } 1632 1633 /************************* End ../ext/misc/fileio.c ********************/ 1634 /************************* Begin ../ext/misc/completion.c ******************/ 1635 /* 1636 ** 2017-07-10 1637 ** 1638 ** The author disclaims copyright to this source code. In place of 1639 ** a legal notice, here is a blessing: 1640 ** 1641 ** May you do good and not evil. 1642 ** May you find forgiveness for yourself and forgive others. 1643 ** May you share freely, never taking more than you give. 1644 ** 1645 ************************************************************************* 1646 ** 1647 ** This file implements an eponymous virtual table that returns suggested 1648 ** completions for a partial SQL input. 1649 ** 1650 ** Suggested usage: 1651 ** 1652 ** SELECT DISTINCT candidate COLLATE nocase 1653 ** FROM completion($prefix,$wholeline) 1654 ** ORDER BY 1; 1655 ** 1656 ** The two query parameters are optional. $prefix is the text of the 1657 ** current word being typed and that is to be completed. $wholeline is 1658 ** the complete input line, used for context. 1659 ** 1660 ** The raw completion() table might return the same candidate multiple 1661 ** times, for example if the same column name is used to two or more 1662 ** tables. And the candidates are returned in an arbitrary order. Hence, 1663 ** the DISTINCT and ORDER BY are recommended. 1664 ** 1665 ** This virtual table operates at the speed of human typing, and so there 1666 ** is no attempt to make it fast. Even a slow implementation will be much 1667 ** faster than any human can type. 1668 ** 1669 */ 1670 SQLITE_EXTENSION_INIT1 1671 #include <assert.h> 1672 #include <string.h> 1673 #include <ctype.h> 1674 1675 #ifndef SQLITE_OMIT_VIRTUALTABLE 1676 1677 /* completion_vtab is a subclass of sqlite3_vtab which will 1678 ** serve as the underlying representation of a completion virtual table 1679 */ 1680 typedef struct completion_vtab completion_vtab; 1681 struct completion_vtab { 1682 sqlite3_vtab base; /* Base class - must be first */ 1683 sqlite3 *db; /* Database connection for this completion vtab */ 1684 }; 1685 1686 /* completion_cursor is a subclass of sqlite3_vtab_cursor which will 1687 ** serve as the underlying representation of a cursor that scans 1688 ** over rows of the result 1689 */ 1690 typedef struct completion_cursor completion_cursor; 1691 struct completion_cursor { 1692 sqlite3_vtab_cursor base; /* Base class - must be first */ 1693 sqlite3 *db; /* Database connection for this cursor */ 1694 int nPrefix, nLine; /* Number of bytes in zPrefix and zLine */ 1695 char *zPrefix; /* The prefix for the word we want to complete */ 1696 char *zLine; /* The whole that we want to complete */ 1697 const char *zCurrentRow; /* Current output row */ 1698 sqlite3_stmt *pStmt; /* Current statement */ 1699 sqlite3_int64 iRowid; /* The rowid */ 1700 int ePhase; /* Current phase */ 1701 int j; /* inter-phase counter */ 1702 }; 1703 1704 /* Values for ePhase: 1705 */ 1706 #define COMPLETION_FIRST_PHASE 1 1707 #define COMPLETION_KEYWORDS 1 1708 #define COMPLETION_PRAGMAS 2 1709 #define COMPLETION_FUNCTIONS 3 1710 #define COMPLETION_COLLATIONS 4 1711 #define COMPLETION_INDEXES 5 1712 #define COMPLETION_TRIGGERS 6 1713 #define COMPLETION_DATABASES 7 1714 #define COMPLETION_TABLES 8 1715 #define COMPLETION_COLUMNS 9 1716 #define COMPLETION_MODULES 10 1717 #define COMPLETION_EOF 11 1718 1719 /* 1720 ** The completionConnect() method is invoked to create a new 1721 ** completion_vtab that describes the completion virtual table. 1722 ** 1723 ** Think of this routine as the constructor for completion_vtab objects. 1724 ** 1725 ** All this routine needs to do is: 1726 ** 1727 ** (1) Allocate the completion_vtab object and initialize all fields. 1728 ** 1729 ** (2) Tell SQLite (via the sqlite3_declare_vtab() interface) what the 1730 ** result set of queries against completion will look like. 1731 */ 1732 static int completionConnect( 1733 sqlite3 *db, 1734 void *pAux, 1735 int argc, const char *const*argv, 1736 sqlite3_vtab **ppVtab, 1737 char **pzErr 1738 ){ 1739 completion_vtab *pNew; 1740 int rc; 1741 1742 (void)(pAux); /* Unused parameter */ 1743 (void)(argc); /* Unused parameter */ 1744 (void)(argv); /* Unused parameter */ 1745 (void)(pzErr); /* Unused parameter */ 1746 1747 /* Column numbers */ 1748 #define COMPLETION_COLUMN_CANDIDATE 0 /* Suggested completion of the input */ 1749 #define COMPLETION_COLUMN_PREFIX 1 /* Prefix of the word to be completed */ 1750 #define COMPLETION_COLUMN_WHOLELINE 2 /* Entire line seen so far */ 1751 #define COMPLETION_COLUMN_PHASE 3 /* ePhase - used for debugging only */ 1752 1753 rc = sqlite3_declare_vtab(db, 1754 "CREATE TABLE x(" 1755 " candidate TEXT," 1756 " prefix TEXT HIDDEN," 1757 " wholeline TEXT HIDDEN," 1758 " phase INT HIDDEN" /* Used for debugging only */ 1759 ")"); 1760 if( rc==SQLITE_OK ){ 1761 pNew = sqlite3_malloc( sizeof(*pNew) ); 1762 *ppVtab = (sqlite3_vtab*)pNew; 1763 if( pNew==0 ) return SQLITE_NOMEM; 1764 memset(pNew, 0, sizeof(*pNew)); 1765 pNew->db = db; 1766 } 1767 return rc; 1768 } 1769 1770 /* 1771 ** This method is the destructor for completion_cursor objects. 1772 */ 1773 static int completionDisconnect(sqlite3_vtab *pVtab){ 1774 sqlite3_free(pVtab); 1775 return SQLITE_OK; 1776 } 1777 1778 /* 1779 ** Constructor for a new completion_cursor object. 1780 */ 1781 static int completionOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ 1782 completion_cursor *pCur; 1783 pCur = sqlite3_malloc( sizeof(*pCur) ); 1784 if( pCur==0 ) return SQLITE_NOMEM; 1785 memset(pCur, 0, sizeof(*pCur)); 1786 pCur->db = ((completion_vtab*)p)->db; 1787 *ppCursor = &pCur->base; 1788 return SQLITE_OK; 1789 } 1790 1791 /* 1792 ** Reset the completion_cursor. 1793 */ 1794 static void completionCursorReset(completion_cursor *pCur){ 1795 sqlite3_free(pCur->zPrefix); pCur->zPrefix = 0; pCur->nPrefix = 0; 1796 sqlite3_free(pCur->zLine); pCur->zLine = 0; pCur->nLine = 0; 1797 sqlite3_finalize(pCur->pStmt); pCur->pStmt = 0; 1798 pCur->j = 0; 1799 } 1800 1801 /* 1802 ** Destructor for a completion_cursor. 1803 */ 1804 static int completionClose(sqlite3_vtab_cursor *cur){ 1805 completionCursorReset((completion_cursor*)cur); 1806 sqlite3_free(cur); 1807 return SQLITE_OK; 1808 } 1809 1810 /* 1811 ** All SQL keywords understood by SQLite 1812 */ 1813 static const char *completionKwrds[] = { 1814 "ABORT", "ACTION", "ADD", "AFTER", "ALL", "ALTER", "ANALYZE", "AND", "AS", 1815 "ASC", "ATTACH", "AUTOINCREMENT", "BEFORE", "BEGIN", "BETWEEN", "BY", 1816 "CASCADE", "CASE", "CAST", "CHECK", "COLLATE", "COLUMN", "COMMIT", 1817 "CONFLICT", "CONSTRAINT", "CREATE", "CROSS", "CURRENT_DATE", 1818 "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATABASE", "DEFAULT", "DEFERRABLE", 1819 "DEFERRED", "DELETE", "DESC", "DETACH", "DISTINCT", "DROP", "EACH", 1820 "ELSE", "END", "ESCAPE", "EXCEPT", "EXCLUSIVE", "EXISTS", "EXPLAIN", 1821 "FAIL", "FOR", "FOREIGN", "FROM", "FULL", "GLOB", "GROUP", "HAVING", "IF", 1822 "IGNORE", "IMMEDIATE", "IN", "INDEX", "INDEXED", "INITIALLY", "INNER", 1823 "INSERT", "INSTEAD", "INTERSECT", "INTO", "IS", "ISNULL", "JOIN", "KEY", 1824 "LEFT", "LIKE", "LIMIT", "MATCH", "NATURAL", "NO", "NOT", "NOTNULL", 1825 "NULL", "OF", "OFFSET", "ON", "OR", "ORDER", "OUTER", "PLAN", "PRAGMA", 1826 "PRIMARY", "QUERY", "RAISE", "RECURSIVE", "REFERENCES", "REGEXP", 1827 "REINDEX", "RELEASE", "RENAME", "REPLACE", "RESTRICT", "RIGHT", 1828 "ROLLBACK", "ROW", "SAVEPOINT", "SELECT", "SET", "TABLE", "TEMP", 1829 "TEMPORARY", "THEN", "TO", "TRANSACTION", "TRIGGER", "UNION", "UNIQUE", 1830 "UPDATE", "USING", "VACUUM", "VALUES", "VIEW", "VIRTUAL", "WHEN", "WHERE", 1831 "WITH", "WITHOUT", 1832 }; 1833 #define completionKwCount \ 1834 (int)(sizeof(completionKwrds)/sizeof(completionKwrds[0])) 1835 1836 /* 1837 ** Advance a completion_cursor to its next row of output. 1838 ** 1839 ** The ->ePhase, ->j, and ->pStmt fields of the completion_cursor object 1840 ** record the current state of the scan. This routine sets ->zCurrentRow 1841 ** to the current row of output and then returns. If no more rows remain, 1842 ** then ->ePhase is set to COMPLETION_EOF which will signal the virtual 1843 ** table that has reached the end of its scan. 1844 ** 1845 ** The current implementation just lists potential identifiers and 1846 ** keywords and filters them by zPrefix. Future enhancements should 1847 ** take zLine into account to try to restrict the set of identifiers and 1848 ** keywords based on what would be legal at the current point of input. 1849 */ 1850 static int completionNext(sqlite3_vtab_cursor *cur){ 1851 completion_cursor *pCur = (completion_cursor*)cur; 1852 int eNextPhase = 0; /* Next phase to try if current phase reaches end */ 1853 int iCol = -1; /* If >=0, step pCur->pStmt and use the i-th column */ 1854 pCur->iRowid++; 1855 while( pCur->ePhase!=COMPLETION_EOF ){ 1856 switch( pCur->ePhase ){ 1857 case COMPLETION_KEYWORDS: { 1858 if( pCur->j >= completionKwCount ){ 1859 pCur->zCurrentRow = 0; 1860 pCur->ePhase = COMPLETION_DATABASES; 1861 }else{ 1862 pCur->zCurrentRow = completionKwrds[pCur->j++]; 1863 } 1864 iCol = -1; 1865 break; 1866 } 1867 case COMPLETION_DATABASES: { 1868 if( pCur->pStmt==0 ){ 1869 sqlite3_prepare_v2(pCur->db, "PRAGMA database_list", -1, 1870 &pCur->pStmt, 0); 1871 } 1872 iCol = 1; 1873 eNextPhase = COMPLETION_TABLES; 1874 break; 1875 } 1876 case COMPLETION_TABLES: { 1877 if( pCur->pStmt==0 ){ 1878 sqlite3_stmt *pS2; 1879 char *zSql = 0; 1880 const char *zSep = ""; 1881 sqlite3_prepare_v2(pCur->db, "PRAGMA database_list", -1, &pS2, 0); 1882 while( sqlite3_step(pS2)==SQLITE_ROW ){ 1883 const char *zDb = (const char*)sqlite3_column_text(pS2, 1); 1884 zSql = sqlite3_mprintf( 1885 "%z%s" 1886 "SELECT name FROM \"%w\".sqlite_master" 1887 " WHERE type='table'", 1888 zSql, zSep, zDb 1889 ); 1890 if( zSql==0 ) return SQLITE_NOMEM; 1891 zSep = " UNION "; 1892 } 1893 sqlite3_finalize(pS2); 1894 sqlite3_prepare_v2(pCur->db, zSql, -1, &pCur->pStmt, 0); 1895 sqlite3_free(zSql); 1896 } 1897 iCol = 0; 1898 eNextPhase = COMPLETION_COLUMNS; 1899 break; 1900 } 1901 case COMPLETION_COLUMNS: { 1902 if( pCur->pStmt==0 ){ 1903 sqlite3_stmt *pS2; 1904 char *zSql = 0; 1905 const char *zSep = ""; 1906 sqlite3_prepare_v2(pCur->db, "PRAGMA database_list", -1, &pS2, 0); 1907 while( sqlite3_step(pS2)==SQLITE_ROW ){ 1908 const char *zDb = (const char*)sqlite3_column_text(pS2, 1); 1909 zSql = sqlite3_mprintf( 1910 "%z%s" 1911 "SELECT pti.name FROM \"%w\".sqlite_master AS sm" 1912 " JOIN pragma_table_info(sm.name,%Q) AS pti" 1913 " WHERE sm.type='table'", 1914 zSql, zSep, zDb, zDb 1915 ); 1916 if( zSql==0 ) return SQLITE_NOMEM; 1917 zSep = " UNION "; 1918 } 1919 sqlite3_finalize(pS2); 1920 sqlite3_prepare_v2(pCur->db, zSql, -1, &pCur->pStmt, 0); 1921 sqlite3_free(zSql); 1922 } 1923 iCol = 0; 1924 eNextPhase = COMPLETION_EOF; 1925 break; 1926 } 1927 } 1928 if( iCol<0 ){ 1929 /* This case is when the phase presets zCurrentRow */ 1930 if( pCur->zCurrentRow==0 ) continue; 1931 }else{ 1932 if( sqlite3_step(pCur->pStmt)==SQLITE_ROW ){ 1933 /* Extract the next row of content */ 1934 pCur->zCurrentRow = (const char*)sqlite3_column_text(pCur->pStmt, iCol); 1935 }else{ 1936 /* When all rows are finished, advance to the next phase */ 1937 sqlite3_finalize(pCur->pStmt); 1938 pCur->pStmt = 0; 1939 pCur->ePhase = eNextPhase; 1940 continue; 1941 } 1942 } 1943 if( pCur->nPrefix==0 ) break; 1944 if( sqlite3_strnicmp(pCur->zPrefix, pCur->zCurrentRow, pCur->nPrefix)==0 ){ 1945 break; 1946 } 1947 } 1948 1949 return SQLITE_OK; 1950 } 1951 1952 /* 1953 ** Return values of columns for the row at which the completion_cursor 1954 ** is currently pointing. 1955 */ 1956 static int completionColumn( 1957 sqlite3_vtab_cursor *cur, /* The cursor */ 1958 sqlite3_context *ctx, /* First argument to sqlite3_result_...() */ 1959 int i /* Which column to return */ 1960 ){ 1961 completion_cursor *pCur = (completion_cursor*)cur; 1962 switch( i ){ 1963 case COMPLETION_COLUMN_CANDIDATE: { 1964 sqlite3_result_text(ctx, pCur->zCurrentRow, -1, SQLITE_TRANSIENT); 1965 break; 1966 } 1967 case COMPLETION_COLUMN_PREFIX: { 1968 sqlite3_result_text(ctx, pCur->zPrefix, -1, SQLITE_TRANSIENT); 1969 break; 1970 } 1971 case COMPLETION_COLUMN_WHOLELINE: { 1972 sqlite3_result_text(ctx, pCur->zLine, -1, SQLITE_TRANSIENT); 1973 break; 1974 } 1975 case COMPLETION_COLUMN_PHASE: { 1976 sqlite3_result_int(ctx, pCur->ePhase); 1977 break; 1978 } 1979 } 1980 return SQLITE_OK; 1981 } 1982 1983 /* 1984 ** Return the rowid for the current row. In this implementation, the 1985 ** rowid is the same as the output value. 1986 */ 1987 static int completionRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){ 1988 completion_cursor *pCur = (completion_cursor*)cur; 1989 *pRowid = pCur->iRowid; 1990 return SQLITE_OK; 1991 } 1992 1993 /* 1994 ** Return TRUE if the cursor has been moved off of the last 1995 ** row of output. 1996 */ 1997 static int completionEof(sqlite3_vtab_cursor *cur){ 1998 completion_cursor *pCur = (completion_cursor*)cur; 1999 return pCur->ePhase >= COMPLETION_EOF; 2000 } 2001 2002 /* 2003 ** This method is called to "rewind" the completion_cursor object back 2004 ** to the first row of output. This method is always called at least 2005 ** once prior to any call to completionColumn() or completionRowid() or 2006 ** completionEof(). 2007 */ 2008 static int completionFilter( 2009 sqlite3_vtab_cursor *pVtabCursor, 2010 int idxNum, const char *idxStr, 2011 int argc, sqlite3_value **argv 2012 ){ 2013 completion_cursor *pCur = (completion_cursor *)pVtabCursor; 2014 int iArg = 0; 2015 (void)(idxStr); /* Unused parameter */ 2016 (void)(argc); /* Unused parameter */ 2017 completionCursorReset(pCur); 2018 if( idxNum & 1 ){ 2019 pCur->nPrefix = sqlite3_value_bytes(argv[iArg]); 2020 if( pCur->nPrefix>0 ){ 2021 pCur->zPrefix = sqlite3_mprintf("%s", sqlite3_value_text(argv[iArg])); 2022 if( pCur->zPrefix==0 ) return SQLITE_NOMEM; 2023 } 2024 iArg++; 2025 } 2026 if( idxNum & 2 ){ 2027 pCur->nLine = sqlite3_value_bytes(argv[iArg]); 2028 if( pCur->nLine>0 ){ 2029 pCur->zLine = sqlite3_mprintf("%s", sqlite3_value_text(argv[iArg])); 2030 if( pCur->zLine==0 ) return SQLITE_NOMEM; 2031 } 2032 iArg++; 2033 } 2034 if( pCur->zLine!=0 && pCur->zPrefix==0 ){ 2035 int i = pCur->nLine; 2036 while( i>0 && (isalnum(pCur->zLine[i-1]) || pCur->zLine[i-1]=='_') ){ 2037 i--; 2038 } 2039 pCur->nPrefix = pCur->nLine - i; 2040 if( pCur->nPrefix>0 ){ 2041 pCur->zPrefix = sqlite3_mprintf("%.*s", pCur->nPrefix, pCur->zLine + i); 2042 if( pCur->zPrefix==0 ) return SQLITE_NOMEM; 2043 } 2044 } 2045 pCur->iRowid = 0; 2046 pCur->ePhase = COMPLETION_FIRST_PHASE; 2047 return completionNext(pVtabCursor); 2048 } 2049 2050 /* 2051 ** SQLite will invoke this method one or more times while planning a query 2052 ** that uses the completion virtual table. This routine needs to create 2053 ** a query plan for each invocation and compute an estimated cost for that 2054 ** plan. 2055 ** 2056 ** There are two hidden parameters that act as arguments to the table-valued 2057 ** function: "prefix" and "wholeline". Bit 0 of idxNum is set if "prefix" 2058 ** is available and bit 1 is set if "wholeline" is available. 2059 */ 2060 static int completionBestIndex( 2061 sqlite3_vtab *tab, 2062 sqlite3_index_info *pIdxInfo 2063 ){ 2064 int i; /* Loop over constraints */ 2065 int idxNum = 0; /* The query plan bitmask */ 2066 int prefixIdx = -1; /* Index of the start= constraint, or -1 if none */ 2067 int wholelineIdx = -1; /* Index of the stop= constraint, or -1 if none */ 2068 int nArg = 0; /* Number of arguments that completeFilter() expects */ 2069 const struct sqlite3_index_constraint *pConstraint; 2070 2071 (void)(tab); /* Unused parameter */ 2072 pConstraint = pIdxInfo->aConstraint; 2073 for(i=0; i<pIdxInfo->nConstraint; i++, pConstraint++){ 2074 if( pConstraint->usable==0 ) continue; 2075 if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue; 2076 switch( pConstraint->iColumn ){ 2077 case COMPLETION_COLUMN_PREFIX: 2078 prefixIdx = i; 2079 idxNum |= 1; 2080 break; 2081 case COMPLETION_COLUMN_WHOLELINE: 2082 wholelineIdx = i; 2083 idxNum |= 2; 2084 break; 2085 } 2086 } 2087 if( prefixIdx>=0 ){ 2088 pIdxInfo->aConstraintUsage[prefixIdx].argvIndex = ++nArg; 2089 pIdxInfo->aConstraintUsage[prefixIdx].omit = 1; 2090 } 2091 if( wholelineIdx>=0 ){ 2092 pIdxInfo->aConstraintUsage[wholelineIdx].argvIndex = ++nArg; 2093 pIdxInfo->aConstraintUsage[wholelineIdx].omit = 1; 2094 } 2095 pIdxInfo->idxNum = idxNum; 2096 pIdxInfo->estimatedCost = (double)5000 - 1000*nArg; 2097 pIdxInfo->estimatedRows = 500 - 100*nArg; 2098 return SQLITE_OK; 2099 } 2100 2101 /* 2102 ** This following structure defines all the methods for the 2103 ** completion virtual table. 2104 */ 2105 static sqlite3_module completionModule = { 2106 0, /* iVersion */ 2107 0, /* xCreate */ 2108 completionConnect, /* xConnect */ 2109 completionBestIndex, /* xBestIndex */ 2110 completionDisconnect, /* xDisconnect */ 2111 0, /* xDestroy */ 2112 completionOpen, /* xOpen - open a cursor */ 2113 completionClose, /* xClose - close a cursor */ 2114 completionFilter, /* xFilter - configure scan constraints */ 2115 completionNext, /* xNext - advance a cursor */ 2116 completionEof, /* xEof - check for end of scan */ 2117 completionColumn, /* xColumn - read data */ 2118 completionRowid, /* xRowid - read data */ 2119 0, /* xUpdate */ 2120 0, /* xBegin */ 2121 0, /* xSync */ 2122 0, /* xCommit */ 2123 0, /* xRollback */ 2124 0, /* xFindMethod */ 2125 0, /* xRename */ 2126 0, /* xSavepoint */ 2127 0, /* xRelease */ 2128 0 /* xRollbackTo */ 2129 }; 2130 2131 #endif /* SQLITE_OMIT_VIRTUALTABLE */ 2132 2133 int sqlite3CompletionVtabInit(sqlite3 *db){ 2134 int rc = SQLITE_OK; 2135 #ifndef SQLITE_OMIT_VIRTUALTABLE 2136 rc = sqlite3_create_module(db, "completion", &completionModule, 0); 2137 #endif 2138 return rc; 2139 } 2140 2141 #ifdef _WIN32 2142 2143 #endif 2144 int sqlite3_completion_init( 2145 sqlite3 *db, 2146 char **pzErrMsg, 2147 const sqlite3_api_routines *pApi 2148 ){ 2149 int rc = SQLITE_OK; 2150 SQLITE_EXTENSION_INIT2(pApi); 2151 (void)(pzErrMsg); /* Unused parameter */ 2152 #ifndef SQLITE_OMIT_VIRTUALTABLE 2153 rc = sqlite3CompletionVtabInit(db); 2154 #endif 2155 return rc; 2156 } 2157 2158 /************************* End ../ext/misc/completion.c ********************/ 2159 2160 #if defined(SQLITE_ENABLE_SESSION) 2161 /* 2162 ** State information for a single open session 2163 */ 2164 typedef struct OpenSession OpenSession; 2165 struct OpenSession { 2166 char *zName; /* Symbolic name for this session */ 2167 int nFilter; /* Number of xFilter rejection GLOB patterns */ 2168 char **azFilter; /* Array of xFilter rejection GLOB patterns */ 2169 sqlite3_session *p; /* The open session */ 2170 }; 2171 #endif 2172 2173 /* 2174 ** Shell output mode information from before ".explain on", 2175 ** saved so that it can be restored by ".explain off" 2176 */ 2177 typedef struct SavedModeInfo SavedModeInfo; 2178 struct SavedModeInfo { 2179 int valid; /* Is there legit data in here? */ 2180 int mode; /* Mode prior to ".explain on" */ 2181 int showHeader; /* The ".header" setting prior to ".explain on" */ 2182 int colWidth[100]; /* Column widths prior to ".explain on" */ 2183 }; 2184 2185 /* 2186 ** State information about the database connection is contained in an 2187 ** instance of the following structure. 2188 */ 2189 typedef struct ShellState ShellState; 2190 struct ShellState { 2191 sqlite3 *db; /* The database */ 2192 int autoExplain; /* Automatically turn on .explain mode */ 2193 int autoEQP; /* Run EXPLAIN QUERY PLAN prior to seach SQL stmt */ 2194 int statsOn; /* True to display memory stats before each finalize */ 2195 int scanstatsOn; /* True to display scan stats before each finalize */ 2196 int outCount; /* Revert to stdout when reaching zero */ 2197 int cnt; /* Number of records displayed so far */ 2198 FILE *out; /* Write results here */ 2199 FILE *traceOut; /* Output for sqlite3_trace() */ 2200 int nErr; /* Number of errors seen */ 2201 int mode; /* An output mode setting */ 2202 int cMode; /* temporary output mode for the current query */ 2203 int normalMode; /* Output mode before ".explain on" */ 2204 int writableSchema; /* True if PRAGMA writable_schema=ON */ 2205 int showHeader; /* True to show column names in List or Column mode */ 2206 int nCheck; /* Number of ".check" commands run */ 2207 unsigned shellFlgs; /* Various flags */ 2208 char *zDestTable; /* Name of destination table when MODE_Insert */ 2209 char zTestcase[30]; /* Name of current test case */ 2210 char colSeparator[20]; /* Column separator character for several modes */ 2211 char rowSeparator[20]; /* Row separator character for MODE_Ascii */ 2212 int colWidth[100]; /* Requested width of each column when in column mode*/ 2213 int actualWidth[100]; /* Actual width of each column */ 2214 char nullValue[20]; /* The text to print when a NULL comes back from 2215 ** the database */ 2216 char outfile[FILENAME_MAX]; /* Filename for *out */ 2217 const char *zDbFilename; /* name of the database file */ 2218 char *zFreeOnClose; /* Filename to free when closing */ 2219 const char *zVfs; /* Name of VFS to use */ 2220 sqlite3_stmt *pStmt; /* Current statement if any. */ 2221 FILE *pLog; /* Write log output here */ 2222 int *aiIndent; /* Array of indents used in MODE_Explain */ 2223 int nIndent; /* Size of array aiIndent[] */ 2224 int iIndent; /* Index of current op in aiIndent[] */ 2225 #if defined(SQLITE_ENABLE_SESSION) 2226 int nSession; /* Number of active sessions */ 2227 OpenSession aSession[4]; /* Array of sessions. [0] is in focus. */ 2228 #endif 2229 }; 2230 2231 /* 2232 ** These are the allowed shellFlgs values 2233 */ 2234 #define SHFLG_Pagecache 0x00000001 /* The --pagecache option is used */ 2235 #define SHFLG_Lookaside 0x00000002 /* Lookaside memory is used */ 2236 #define SHFLG_Backslash 0x00000004 /* The --backslash option is used */ 2237 #define SHFLG_PreserveRowid 0x00000008 /* .dump preserves rowid values */ 2238 #define SHFLG_Newlines 0x00000010 /* .dump --newline flag */ 2239 #define SHFLG_CountChanges 0x00000020 /* .changes setting */ 2240 #define SHFLG_Echo 0x00000040 /* .echo or --echo setting */ 2241 2242 /* 2243 ** Macros for testing and setting shellFlgs 2244 */ 2245 #define ShellHasFlag(P,X) (((P)->shellFlgs & (X))!=0) 2246 #define ShellSetFlag(P,X) ((P)->shellFlgs|=(X)) 2247 #define ShellClearFlag(P,X) ((P)->shellFlgs&=(~(X))) 2248 2249 /* 2250 ** These are the allowed modes. 2251 */ 2252 #define MODE_Line 0 /* One column per line. Blank line between records */ 2253 #define MODE_Column 1 /* One record per line in neat columns */ 2254 #define MODE_List 2 /* One record per line with a separator */ 2255 #define MODE_Semi 3 /* Same as MODE_List but append ";" to each line */ 2256 #define MODE_Html 4 /* Generate an XHTML table */ 2257 #define MODE_Insert 5 /* Generate SQL "insert" statements */ 2258 #define MODE_Quote 6 /* Quote values as for SQL */ 2259 #define MODE_Tcl 7 /* Generate ANSI-C or TCL quoted elements */ 2260 #define MODE_Csv 8 /* Quote strings, numbers are plain */ 2261 #define MODE_Explain 9 /* Like MODE_Column, but do not truncate data */ 2262 #define MODE_Ascii 10 /* Use ASCII unit and record separators (0x1F/0x1E) */ 2263 #define MODE_Pretty 11 /* Pretty-print schemas */ 2264 2265 static const char *modeDescr[] = { 2266 "line", 2267 "column", 2268 "list", 2269 "semi", 2270 "html", 2271 "insert", 2272 "quote", 2273 "tcl", 2274 "csv", 2275 "explain", 2276 "ascii", 2277 "prettyprint", 2278 }; 2279 2280 /* 2281 ** These are the column/row/line separators used by the various 2282 ** import/export modes. 2283 */ 2284 #define SEP_Column "|" 2285 #define SEP_Row "\n" 2286 #define SEP_Tab "\t" 2287 #define SEP_Space " " 2288 #define SEP_Comma "," 2289 #define SEP_CrLf "\r\n" 2290 #define SEP_Unit "\x1F" 2291 #define SEP_Record "\x1E" 2292 2293 /* 2294 ** Number of elements in an array 2295 */ 2296 #define ArraySize(X) (int)(sizeof(X)/sizeof(X[0])) 2297 2298 /* 2299 ** A callback for the sqlite3_log() interface. 2300 */ 2301 static void shellLog(void *pArg, int iErrCode, const char *zMsg){ 2302 ShellState *p = (ShellState*)pArg; 2303 if( p->pLog==0 ) return; 2304 utf8_printf(p->pLog, "(%d) %s\n", iErrCode, zMsg); 2305 fflush(p->pLog); 2306 } 2307 2308 /* 2309 ** Output the given string as a hex-encoded blob (eg. X'1234' ) 2310 */ 2311 static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){ 2312 int i; 2313 char *zBlob = (char *)pBlob; 2314 raw_printf(out,"X'"); 2315 for(i=0; i<nBlob; i++){ raw_printf(out,"%02x",zBlob[i]&0xff); } 2316 raw_printf(out,"'"); 2317 } 2318 2319 /* 2320 ** Find a string that is not found anywhere in z[]. Return a pointer 2321 ** to that string. 2322 ** 2323 ** Try to use zA and zB first. If both of those are already found in z[] 2324 ** then make up some string and store it in the buffer zBuf. 2325 */ 2326 static const char *unused_string( 2327 const char *z, /* Result must not appear anywhere in z */ 2328 const char *zA, const char *zB, /* Try these first */ 2329 char *zBuf /* Space to store a generated string */ 2330 ){ 2331 unsigned i = 0; 2332 if( strstr(z, zA)==0 ) return zA; 2333 if( strstr(z, zB)==0 ) return zB; 2334 do{ 2335 sqlite3_snprintf(20,zBuf,"(%s%u)", zA, i++); 2336 }while( strstr(z,zBuf)!=0 ); 2337 return zBuf; 2338 } 2339 2340 /* 2341 ** Output the given string as a quoted string using SQL quoting conventions. 2342 ** 2343 ** See also: output_quoted_escaped_string() 2344 */ 2345 static void output_quoted_string(FILE *out, const char *z){ 2346 int i; 2347 char c; 2348 setBinaryMode(out, 1); 2349 for(i=0; (c = z[i])!=0 && c!='\''; i++){} 2350 if( c==0 ){ 2351 utf8_printf(out,"'%s'",z); 2352 }else{ 2353 raw_printf(out, "'"); 2354 while( *z ){ 2355 for(i=0; (c = z[i])!=0 && c!='\''; i++){} 2356 if( c=='\'' ) i++; 2357 if( i ){ 2358 utf8_printf(out, "%.*s", i, z); 2359 z += i; 2360 } 2361 if( c=='\'' ){ 2362 raw_printf(out, "'"); 2363 continue; 2364 } 2365 if( c==0 ){ 2366 break; 2367 } 2368 z++; 2369 } 2370 raw_printf(out, "'"); 2371 } 2372 setTextMode(out, 1); 2373 } 2374 2375 /* 2376 ** Output the given string as a quoted string using SQL quoting conventions. 2377 ** Additionallly , escape the "\n" and "\r" characters so that they do not 2378 ** get corrupted by end-of-line translation facilities in some operating 2379 ** systems. 2380 ** 2381 ** This is like output_quoted_string() but with the addition of the \r\n 2382 ** escape mechanism. 2383 */ 2384 static void output_quoted_escaped_string(FILE *out, const char *z){ 2385 int i; 2386 char c; 2387 setBinaryMode(out, 1); 2388 for(i=0; (c = z[i])!=0 && c!='\'' && c!='\n' && c!='\r'; i++){} 2389 if( c==0 ){ 2390 utf8_printf(out,"'%s'",z); 2391 }else{ 2392 const char *zNL = 0; 2393 const char *zCR = 0; 2394 int nNL = 0; 2395 int nCR = 0; 2396 char zBuf1[20], zBuf2[20]; 2397 for(i=0; z[i]; i++){ 2398 if( z[i]=='\n' ) nNL++; 2399 if( z[i]=='\r' ) nCR++; 2400 } 2401 if( nNL ){ 2402 raw_printf(out, "replace("); 2403 zNL = unused_string(z, "\\n", "\\012", zBuf1); 2404 } 2405 if( nCR ){ 2406 raw_printf(out, "replace("); 2407 zCR = unused_string(z, "\\r", "\\015", zBuf2); 2408 } 2409 raw_printf(out, "'"); 2410 while( *z ){ 2411 for(i=0; (c = z[i])!=0 && c!='\n' && c!='\r' && c!='\''; i++){} 2412 if( c=='\'' ) i++; 2413 if( i ){ 2414 utf8_printf(out, "%.*s", i, z); 2415 z += i; 2416 } 2417 if( c=='\'' ){ 2418 raw_printf(out, "'"); 2419 continue; 2420 } 2421 if( c==0 ){ 2422 break; 2423 } 2424 z++; 2425 if( c=='\n' ){ 2426 raw_printf(out, "%s", zNL); 2427 continue; 2428 } 2429 raw_printf(out, "%s", zCR); 2430 } 2431 raw_printf(out, "'"); 2432 if( nCR ){ 2433 raw_printf(out, ",'%s',char(13))", zCR); 2434 } 2435 if( nNL ){ 2436 raw_printf(out, ",'%s',char(10))", zNL); 2437 } 2438 } 2439 setTextMode(out, 1); 2440 } 2441 2442 /* 2443 ** Output the given string as a quoted according to C or TCL quoting rules. 2444 */ 2445 static void output_c_string(FILE *out, const char *z){ 2446 unsigned int c; 2447 fputc('"', out); 2448 while( (c = *(z++))!=0 ){ 2449 if( c=='\\' ){ 2450 fputc(c, out); 2451 fputc(c, out); 2452 }else if( c=='"' ){ 2453 fputc('\\', out); 2454 fputc('"', out); 2455 }else if( c=='\t' ){ 2456 fputc('\\', out); 2457 fputc('t', out); 2458 }else if( c=='\n' ){ 2459 fputc('\\', out); 2460 fputc('n', out); 2461 }else if( c=='\r' ){ 2462 fputc('\\', out); 2463 fputc('r', out); 2464 }else if( !isprint(c&0xff) ){ 2465 raw_printf(out, "\\%03o", c&0xff); 2466 }else{ 2467 fputc(c, out); 2468 } 2469 } 2470 fputc('"', out); 2471 } 2472 2473 /* 2474 ** Output the given string with characters that are special to 2475 ** HTML escaped. 2476 */ 2477 static void output_html_string(FILE *out, const char *z){ 2478 int i; 2479 if( z==0 ) z = ""; 2480 while( *z ){ 2481 for(i=0; z[i] 2482 && z[i]!='<' 2483 && z[i]!='&' 2484 && z[i]!='>' 2485 && z[i]!='\"' 2486 && z[i]!='\''; 2487 i++){} 2488 if( i>0 ){ 2489 utf8_printf(out,"%.*s",i,z); 2490 } 2491 if( z[i]=='<' ){ 2492 raw_printf(out,"<"); 2493 }else if( z[i]=='&' ){ 2494 raw_printf(out,"&"); 2495 }else if( z[i]=='>' ){ 2496 raw_printf(out,">"); 2497 }else if( z[i]=='\"' ){ 2498 raw_printf(out,"""); 2499 }else if( z[i]=='\'' ){ 2500 raw_printf(out,"'"); 2501 }else{ 2502 break; 2503 } 2504 z += i + 1; 2505 } 2506 } 2507 2508 /* 2509 ** If a field contains any character identified by a 1 in the following 2510 ** array, then the string must be quoted for CSV. 2511 */ 2512 static const char needCsvQuote[] = { 2513 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2514 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2515 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2516 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2517 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2518 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2519 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2520 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2521 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2522 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2523 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2524 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2525 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2526 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2527 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2528 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2529 }; 2530 2531 /* 2532 ** Output a single term of CSV. Actually, p->colSeparator is used for 2533 ** the separator, which may or may not be a comma. p->nullValue is 2534 ** the null value. Strings are quoted if necessary. The separator 2535 ** is only issued if bSep is true. 2536 */ 2537 static void output_csv(ShellState *p, const char *z, int bSep){ 2538 FILE *out = p->out; 2539 if( z==0 ){ 2540 utf8_printf(out,"%s",p->nullValue); 2541 }else{ 2542 int i; 2543 int nSep = strlen30(p->colSeparator); 2544 for(i=0; z[i]; i++){ 2545 if( needCsvQuote[((unsigned char*)z)[i]] 2546 || (z[i]==p->colSeparator[0] && 2547 (nSep==1 || memcmp(z, p->colSeparator, nSep)==0)) ){ 2548 i = 0; 2549 break; 2550 } 2551 } 2552 if( i==0 ){ 2553 putc('"', out); 2554 for(i=0; z[i]; i++){ 2555 if( z[i]=='"' ) putc('"', out); 2556 putc(z[i], out); 2557 } 2558 putc('"', out); 2559 }else{ 2560 utf8_printf(out, "%s", z); 2561 } 2562 } 2563 if( bSep ){ 2564 utf8_printf(p->out, "%s", p->colSeparator); 2565 } 2566 } 2567 2568 #ifdef SIGINT 2569 /* 2570 ** This routine runs when the user presses Ctrl-C 2571 */ 2572 static void interrupt_handler(int NotUsed){ 2573 UNUSED_PARAMETER(NotUsed); 2574 seenInterrupt++; 2575 if( seenInterrupt>2 ) exit(1); 2576 if( globalDb ) sqlite3_interrupt(globalDb); 2577 } 2578 #endif 2579 2580 #ifndef SQLITE_OMIT_AUTHORIZATION 2581 /* 2582 ** When the ".auth ON" is set, the following authorizer callback is 2583 ** invoked. It always returns SQLITE_OK. 2584 */ 2585 static int shellAuth( 2586 void *pClientData, 2587 int op, 2588 const char *zA1, 2589 const char *zA2, 2590 const char *zA3, 2591 const char *zA4 2592 ){ 2593 ShellState *p = (ShellState*)pClientData; 2594 static const char *azAction[] = { 0, 2595 "CREATE_INDEX", "CREATE_TABLE", "CREATE_TEMP_INDEX", 2596 "CREATE_TEMP_TABLE", "CREATE_TEMP_TRIGGER", "CREATE_TEMP_VIEW", 2597 "CREATE_TRIGGER", "CREATE_VIEW", "DELETE", 2598 "DROP_INDEX", "DROP_TABLE", "DROP_TEMP_INDEX", 2599 "DROP_TEMP_TABLE", "DROP_TEMP_TRIGGER", "DROP_TEMP_VIEW", 2600 "DROP_TRIGGER", "DROP_VIEW", "INSERT", 2601 "PRAGMA", "READ", "SELECT", 2602 "TRANSACTION", "UPDATE", "ATTACH", 2603 "DETACH", "ALTER_TABLE", "REINDEX", 2604 "ANALYZE", "CREATE_VTABLE", "DROP_VTABLE", 2605 "FUNCTION", "SAVEPOINT", "RECURSIVE" 2606 }; 2607 int i; 2608 const char *az[4]; 2609 az[0] = zA1; 2610 az[1] = zA2; 2611 az[2] = zA3; 2612 az[3] = zA4; 2613 utf8_printf(p->out, "authorizer: %s", azAction[op]); 2614 for(i=0; i<4; i++){ 2615 raw_printf(p->out, " "); 2616 if( az[i] ){ 2617 output_c_string(p->out, az[i]); 2618 }else{ 2619 raw_printf(p->out, "NULL"); 2620 } 2621 } 2622 raw_printf(p->out, "\n"); 2623 return SQLITE_OK; 2624 } 2625 #endif 2626 2627 /* 2628 ** Print a schema statement. Part of MODE_Semi and MODE_Pretty output. 2629 ** 2630 ** This routine converts some CREATE TABLE statements for shadow tables 2631 ** in FTS3/4/5 into CREATE TABLE IF NOT EXISTS statements. 2632 */ 2633 static void printSchemaLine(FILE *out, const char *z, const char *zTail){ 2634 if( sqlite3_strglob("CREATE TABLE ['\"]*", z)==0 ){ 2635 utf8_printf(out, "CREATE TABLE IF NOT EXISTS %s%s", z+13, zTail); 2636 }else{ 2637 utf8_printf(out, "%s%s", z, zTail); 2638 } 2639 } 2640 static void printSchemaLineN(FILE *out, char *z, int n, const char *zTail){ 2641 char c = z[n]; 2642 z[n] = 0; 2643 printSchemaLine(out, z, zTail); 2644 z[n] = c; 2645 } 2646 2647 /* 2648 ** This is the callback routine that the shell 2649 ** invokes for each row of a query result. 2650 */ 2651 static int shell_callback( 2652 void *pArg, 2653 int nArg, /* Number of result columns */ 2654 char **azArg, /* Text of each result column */ 2655 char **azCol, /* Column names */ 2656 int *aiType /* Column types */ 2657 ){ 2658 int i; 2659 ShellState *p = (ShellState*)pArg; 2660 2661 if( azArg==0 ) return 0; 2662 switch( p->cMode ){ 2663 case MODE_Line: { 2664 int w = 5; 2665 if( azArg==0 ) break; 2666 for(i=0; i<nArg; i++){ 2667 int len = strlen30(azCol[i] ? azCol[i] : ""); 2668 if( len>w ) w = len; 2669 } 2670 if( p->cnt++>0 ) utf8_printf(p->out, "%s", p->rowSeparator); 2671 for(i=0; i<nArg; i++){ 2672 utf8_printf(p->out,"%*s = %s%s", w, azCol[i], 2673 azArg[i] ? azArg[i] : p->nullValue, p->rowSeparator); 2674 } 2675 break; 2676 } 2677 case MODE_Explain: 2678 case MODE_Column: { 2679 static const int aExplainWidths[] = {4, 13, 4, 4, 4, 13, 2, 13}; 2680 const int *colWidth; 2681 int showHdr; 2682 char *rowSep; 2683 if( p->cMode==MODE_Column ){ 2684 colWidth = p->colWidth; 2685 showHdr = p->showHeader; 2686 rowSep = p->rowSeparator; 2687 }else{ 2688 colWidth = aExplainWidths; 2689 showHdr = 1; 2690 rowSep = SEP_Row; 2691 } 2692 if( p->cnt++==0 ){ 2693 for(i=0; i<nArg; i++){ 2694 int w, n; 2695 if( i<ArraySize(p->colWidth) ){ 2696 w = colWidth[i]; 2697 }else{ 2698 w = 0; 2699 } 2700 if( w==0 ){ 2701 w = strlenChar(azCol[i] ? azCol[i] : ""); 2702 if( w<10 ) w = 10; 2703 n = strlenChar(azArg && azArg[i] ? azArg[i] : p->nullValue); 2704 if( w<n ) w = n; 2705 } 2706 if( i<ArraySize(p->actualWidth) ){ 2707 p->actualWidth[i] = w; 2708 } 2709 if( showHdr ){ 2710 utf8_width_print(p->out, w, azCol[i]); 2711 utf8_printf(p->out, "%s", i==nArg-1 ? rowSep : " "); 2712 } 2713 } 2714 if( showHdr ){ 2715 for(i=0; i<nArg; i++){ 2716 int w; 2717 if( i<ArraySize(p->actualWidth) ){ 2718 w = p->actualWidth[i]; 2719 if( w<0 ) w = -w; 2720 }else{ 2721 w = 10; 2722 } 2723 utf8_printf(p->out,"%-*.*s%s",w,w, 2724 "----------------------------------------------------------" 2725 "----------------------------------------------------------", 2726 i==nArg-1 ? rowSep : " "); 2727 } 2728 } 2729 } 2730 if( azArg==0 ) break; 2731 for(i=0; i<nArg; i++){ 2732 int w; 2733 if( i<ArraySize(p->actualWidth) ){ 2734 w = p->actualWidth[i]; 2735 }else{ 2736 w = 10; 2737 } 2738 if( p->cMode==MODE_Explain && azArg[i] && strlenChar(azArg[i])>w ){ 2739 w = strlenChar(azArg[i]); 2740 } 2741 if( i==1 && p->aiIndent && p->pStmt ){ 2742 if( p->iIndent<p->nIndent ){ 2743 utf8_printf(p->out, "%*.s", p->aiIndent[p->iIndent], ""); 2744 } 2745 p->iIndent++; 2746 } 2747 utf8_width_print(p->out, w, azArg[i] ? azArg[i] : p->nullValue); 2748 utf8_printf(p->out, "%s", i==nArg-1 ? rowSep : " "); 2749 } 2750 break; 2751 } 2752 case MODE_Semi: { /* .schema and .fullschema output */ 2753 printSchemaLine(p->out, azArg[0], ";\n"); 2754 break; 2755 } 2756 case MODE_Pretty: { /* .schema and .fullschema with --indent */ 2757 char *z; 2758 int j; 2759 int nParen = 0; 2760 char cEnd = 0; 2761 char c; 2762 int nLine = 0; 2763 assert( nArg==1 ); 2764 if( azArg[0]==0 ) break; 2765 if( sqlite3_strlike("CREATE VIEW%", azArg[0], 0)==0 2766 || sqlite3_strlike("CREATE TRIG%", azArg[0], 0)==0 2767 ){ 2768 utf8_printf(p->out, "%s;\n", azArg[0]); 2769 break; 2770 } 2771 z = sqlite3_mprintf("%s", azArg[0]); 2772 j = 0; 2773 for(i=0; IsSpace(z[i]); i++){} 2774 for(; (c = z[i])!=0; i++){ 2775 if( IsSpace(c) ){ 2776 if( z[j-1]=='\r' ) z[j-1] = '\n'; 2777 if( IsSpace(z[j-1]) || z[j-1]=='(' ) continue; 2778 }else if( (c=='(' || c==')') && j>0 && IsSpace(z[j-1]) ){ 2779 j--; 2780 } 2781 z[j++] = c; 2782 } 2783 while( j>0 && IsSpace(z[j-1]) ){ j--; } 2784 z[j] = 0; 2785 if( strlen30(z)>=79 ){ 2786 for(i=j=0; (c = z[i])!=0; i++){ 2787 if( c==cEnd ){ 2788 cEnd = 0; 2789 }else if( c=='"' || c=='\'' || c=='`' ){ 2790 cEnd = c; 2791 }else if( c=='[' ){ 2792 cEnd = ']'; 2793 }else if( c=='(' ){ 2794 nParen++; 2795 }else if( c==')' ){ 2796 nParen--; 2797 if( nLine>0 && nParen==0 && j>0 ){ 2798 printSchemaLineN(p->out, z, j, "\n"); 2799 j = 0; 2800 } 2801 } 2802 z[j++] = c; 2803 if( nParen==1 && (c=='(' || c==',' || c=='\n') ){ 2804 if( c=='\n' ) j--; 2805 printSchemaLineN(p->out, z, j, "\n "); 2806 j = 0; 2807 nLine++; 2808 while( IsSpace(z[i+1]) ){ i++; } 2809 } 2810 } 2811 z[j] = 0; 2812 } 2813 printSchemaLine(p->out, z, ";\n"); 2814 sqlite3_free(z); 2815 break; 2816 } 2817 case MODE_List: { 2818 if( p->cnt++==0 && p->showHeader ){ 2819 for(i=0; i<nArg; i++){ 2820 utf8_printf(p->out,"%s%s",azCol[i], 2821 i==nArg-1 ? p->rowSeparator : p->colSeparator); 2822 } 2823 } 2824 if( azArg==0 ) break; 2825 for(i=0; i<nArg; i++){ 2826 char *z = azArg[i]; 2827 if( z==0 ) z = p->nullValue; 2828 utf8_printf(p->out, "%s", z); 2829 if( i<nArg-1 ){ 2830 utf8_printf(p->out, "%s", p->colSeparator); 2831 }else{ 2832 utf8_printf(p->out, "%s", p->rowSeparator); 2833 } 2834 } 2835 break; 2836 } 2837 case MODE_Html: { 2838 if( p->cnt++==0 && p->showHeader ){ 2839 raw_printf(p->out,"<TR>"); 2840 for(i=0; i<nArg; i++){ 2841 raw_printf(p->out,"<TH>"); 2842 output_html_string(p->out, azCol[i]); 2843 raw_printf(p->out,"</TH>\n"); 2844 } 2845 raw_printf(p->out,"</TR>\n"); 2846 } 2847 if( azArg==0 ) break; 2848 raw_printf(p->out,"<TR>"); 2849 for(i=0; i<nArg; i++){ 2850 raw_printf(p->out,"<TD>"); 2851 output_html_string(p->out, azArg[i] ? azArg[i] : p->nullValue); 2852 raw_printf(p->out,"</TD>\n"); 2853 } 2854 raw_printf(p->out,"</TR>\n"); 2855 break; 2856 } 2857 case MODE_Tcl: { 2858 if( p->cnt++==0 && p->showHeader ){ 2859 for(i=0; i<nArg; i++){ 2860 output_c_string(p->out,azCol[i] ? azCol[i] : ""); 2861 if(i<nArg-1) utf8_printf(p->out, "%s", p->colSeparator); 2862 } 2863 utf8_printf(p->out, "%s", p->rowSeparator); 2864 } 2865 if( azArg==0 ) break; 2866 for(i=0; i<nArg; i++){ 2867 output_c_string(p->out, azArg[i] ? azArg[i] : p->nullValue); 2868 if(i<nArg-1) utf8_printf(p->out, "%s", p->colSeparator); 2869 } 2870 utf8_printf(p->out, "%s", p->rowSeparator); 2871 break; 2872 } 2873 case MODE_Csv: { 2874 setBinaryMode(p->out, 1); 2875 if( p->cnt++==0 && p->showHeader ){ 2876 for(i=0; i<nArg; i++){ 2877 output_csv(p, azCol[i] ? azCol[i] : "", i<nArg-1); 2878 } 2879 utf8_printf(p->out, "%s", p->rowSeparator); 2880 } 2881 if( nArg>0 ){ 2882 for(i=0; i<nArg; i++){ 2883 output_csv(p, azArg[i], i<nArg-1); 2884 } 2885 utf8_printf(p->out, "%s", p->rowSeparator); 2886 } 2887 setTextMode(p->out, 1); 2888 break; 2889 } 2890 case MODE_Insert: { 2891 if( azArg==0 ) break; 2892 utf8_printf(p->out,"INSERT INTO %s",p->zDestTable); 2893 if( p->showHeader ){ 2894 raw_printf(p->out,"("); 2895 for(i=0; i<nArg; i++){ 2896 if( i>0 ) raw_printf(p->out, ","); 2897 if( quoteChar(azCol[i]) ){ 2898 char *z = sqlite3_mprintf("\"%w\"", azCol[i]); 2899 utf8_printf(p->out, "%s", z); 2900 sqlite3_free(z); 2901 }else{ 2902 raw_printf(p->out, "%s", azCol[i]); 2903 } 2904 } 2905 raw_printf(p->out,")"); 2906 } 2907 p->cnt++; 2908 for(i=0; i<nArg; i++){ 2909 raw_printf(p->out, i>0 ? "," : " VALUES("); 2910 if( (azArg[i]==0) || (aiType && aiType[i]==SQLITE_NULL) ){ 2911 utf8_printf(p->out,"NULL"); 2912 }else if( aiType && aiType[i]==SQLITE_TEXT ){ 2913 if( ShellHasFlag(p, SHFLG_Newlines) ){ 2914 output_quoted_string(p->out, azArg[i]); 2915 }else{ 2916 output_quoted_escaped_string(p->out, azArg[i]); 2917 } 2918 }else if( aiType && aiType[i]==SQLITE_INTEGER ){ 2919 utf8_printf(p->out,"%s", azArg[i]); 2920 }else if( aiType && aiType[i]==SQLITE_FLOAT ){ 2921 char z[50]; 2922 double r = sqlite3_column_double(p->pStmt, i); 2923 sqlite3_snprintf(50,z,"%!.20g", r); 2924 raw_printf(p->out, "%s", z); 2925 }else if( aiType && aiType[i]==SQLITE_BLOB && p->pStmt ){ 2926 const void *pBlob = sqlite3_column_blob(p->pStmt, i); 2927 int nBlob = sqlite3_column_bytes(p->pStmt, i); 2928 output_hex_blob(p->out, pBlob, nBlob); 2929 }else if( isNumber(azArg[i], 0) ){ 2930 utf8_printf(p->out,"%s", azArg[i]); 2931 }else if( ShellHasFlag(p, SHFLG_Newlines) ){ 2932 output_quoted_string(p->out, azArg[i]); 2933 }else{ 2934 output_quoted_escaped_string(p->out, azArg[i]); 2935 } 2936 } 2937 raw_printf(p->out,");\n"); 2938 break; 2939 } 2940 case MODE_Quote: { 2941 if( azArg==0 ) break; 2942 if( p->cnt==0 && p->showHeader ){ 2943 for(i=0; i<nArg; i++){ 2944 if( i>0 ) raw_printf(p->out, ","); 2945 output_quoted_string(p->out, azCol[i]); 2946 } 2947 raw_printf(p->out,"\n"); 2948 } 2949 p->cnt++; 2950 for(i=0; i<nArg; i++){ 2951 if( i>0 ) raw_printf(p->out, ","); 2952 if( (azArg[i]==0) || (aiType && aiType[i]==SQLITE_NULL) ){ 2953 utf8_printf(p->out,"NULL"); 2954 }else if( aiType && aiType[i]==SQLITE_TEXT ){ 2955 output_quoted_string(p->out, azArg[i]); 2956 }else if( aiType && aiType[i]==SQLITE_INTEGER ){ 2957 utf8_printf(p->out,"%s", azArg[i]); 2958 }else if( aiType && aiType[i]==SQLITE_FLOAT ){ 2959 char z[50]; 2960 double r = sqlite3_column_double(p->pStmt, i); 2961 sqlite3_snprintf(50,z,"%!.20g", r); 2962 raw_printf(p->out, "%s", z); 2963 }else if( aiType && aiType[i]==SQLITE_BLOB && p->pStmt ){ 2964 const void *pBlob = sqlite3_column_blob(p->pStmt, i); 2965 int nBlob = sqlite3_column_bytes(p->pStmt, i); 2966 output_hex_blob(p->out, pBlob, nBlob); 2967 }else if( isNumber(azArg[i], 0) ){ 2968 utf8_printf(p->out,"%s", azArg[i]); 2969 }else{ 2970 output_quoted_string(p->out, azArg[i]); 2971 } 2972 } 2973 raw_printf(p->out,"\n"); 2974 break; 2975 } 2976 case MODE_Ascii: { 2977 if( p->cnt++==0 && p->showHeader ){ 2978 for(i=0; i<nArg; i++){ 2979 if( i>0 ) utf8_printf(p->out, "%s", p->colSeparator); 2980 utf8_printf(p->out,"%s",azCol[i] ? azCol[i] : ""); 2981 } 2982 utf8_printf(p->out, "%s", p->rowSeparator); 2983 } 2984 if( azArg==0 ) break; 2985 for(i=0; i<nArg; i++){ 2986 if( i>0 ) utf8_printf(p->out, "%s", p->colSeparator); 2987 utf8_printf(p->out,"%s",azArg[i] ? azArg[i] : p->nullValue); 2988 } 2989 utf8_printf(p->out, "%s", p->rowSeparator); 2990 break; 2991 } 2992 } 2993 return 0; 2994 } 2995 2996 /* 2997 ** This is the callback routine that the SQLite library 2998 ** invokes for each row of a query result. 2999 */ 3000 static int callback(void *pArg, int nArg, char **azArg, char **azCol){ 3001 /* since we don't have type info, call the shell_callback with a NULL value */ 3002 return shell_callback(pArg, nArg, azArg, azCol, NULL); 3003 } 3004 3005 /* 3006 ** This is the callback routine from sqlite3_exec() that appends all 3007 ** output onto the end of a ShellText object. 3008 */ 3009 static int captureOutputCallback(void *pArg, int nArg, char **azArg, char **az){ 3010 ShellText *p = (ShellText*)pArg; 3011 int i; 3012 UNUSED_PARAMETER(az); 3013 if( azArg==0 ) return 0; 3014 if( p->n ) appendText(p, "|", 0); 3015 for(i=0; i<nArg; i++){ 3016 if( i ) appendText(p, ",", 0); 3017 if( azArg[i] ) appendText(p, azArg[i], 0); 3018 } 3019 return 0; 3020 } 3021 3022 /* 3023 ** Generate an appropriate SELFTEST table in the main database. 3024 */ 3025 static void createSelftestTable(ShellState *p){ 3026 char *zErrMsg = 0; 3027 sqlite3_exec(p->db, 3028 "SAVEPOINT selftest_init;\n" 3029 "CREATE TABLE IF NOT EXISTS selftest(\n" 3030 " tno INTEGER PRIMARY KEY,\n" /* Test number */ 3031 " op TEXT,\n" /* Operator: memo run */ 3032 " cmd TEXT,\n" /* Command text */ 3033 " ans TEXT\n" /* Desired answer */ 3034 ");" 3035 "CREATE TEMP TABLE [_shell$self](op,cmd,ans);\n" 3036 "INSERT INTO [_shell$self](rowid,op,cmd)\n" 3037 " VALUES(coalesce((SELECT (max(tno)+100)/10 FROM selftest),10),\n" 3038 " 'memo','Tests generated by --init');\n" 3039 "INSERT INTO [_shell$self]\n" 3040 " SELECT 'run',\n" 3041 " 'SELECT hex(sha3_query(''SELECT type,name,tbl_name,sql " 3042 "FROM sqlite_master ORDER BY 2'',224))',\n" 3043 " hex(sha3_query('SELECT type,name,tbl_name,sql " 3044 "FROM sqlite_master ORDER BY 2',224));\n" 3045 "INSERT INTO [_shell$self]\n" 3046 " SELECT 'run'," 3047 " 'SELECT hex(sha3_query(''SELECT * FROM \"' ||" 3048 " printf('%w',name) || '\" NOT INDEXED'',224))',\n" 3049 " hex(sha3_query(printf('SELECT * FROM \"%w\" NOT INDEXED',name),224))\n" 3050 " FROM (\n" 3051 " SELECT name FROM sqlite_master\n" 3052 " WHERE type='table'\n" 3053 " AND name<>'selftest'\n" 3054 " AND coalesce(rootpage,0)>0\n" 3055 " )\n" 3056 " ORDER BY name;\n" 3057 "INSERT INTO [_shell$self]\n" 3058 " VALUES('run','PRAGMA integrity_check','ok');\n" 3059 "INSERT INTO selftest(tno,op,cmd,ans)" 3060 " SELECT rowid*10,op,cmd,ans FROM [_shell$self];\n" 3061 "DROP TABLE [_shell$self];" 3062 ,0,0,&zErrMsg); 3063 if( zErrMsg ){ 3064 utf8_printf(stderr, "SELFTEST initialization failure: %s\n", zErrMsg); 3065 sqlite3_free(zErrMsg); 3066 } 3067 sqlite3_exec(p->db, "RELEASE selftest_init",0,0,0); 3068 } 3069 3070 3071 /* 3072 ** Set the destination table field of the ShellState structure to 3073 ** the name of the table given. Escape any quote characters in the 3074 ** table name. 3075 */ 3076 static void set_table_name(ShellState *p, const char *zName){ 3077 int i, n; 3078 char cQuote; 3079 char *z; 3080 3081 if( p->zDestTable ){ 3082 free(p->zDestTable); 3083 p->zDestTable = 0; 3084 } 3085 if( zName==0 ) return; 3086 cQuote = quoteChar(zName); 3087 n = strlen30(zName); 3088 if( cQuote ) n += n+2; 3089 z = p->zDestTable = malloc( n+1 ); 3090 if( z==0 ){ 3091 raw_printf(stderr,"Error: out of memory\n"); 3092 exit(1); 3093 } 3094 n = 0; 3095 if( cQuote ) z[n++] = cQuote; 3096 for(i=0; zName[i]; i++){ 3097 z[n++] = zName[i]; 3098 if( zName[i]==cQuote ) z[n++] = cQuote; 3099 } 3100 if( cQuote ) z[n++] = cQuote; 3101 z[n] = 0; 3102 } 3103 3104 3105 /* 3106 ** Execute a query statement that will generate SQL output. Print 3107 ** the result columns, comma-separated, on a line and then add a 3108 ** semicolon terminator to the end of that line. 3109 ** 3110 ** If the number of columns is 1 and that column contains text "--" 3111 ** then write the semicolon on a separate line. That way, if a 3112 ** "--" comment occurs at the end of the statement, the comment 3113 ** won't consume the semicolon terminator. 3114 */ 3115 static int run_table_dump_query( 3116 ShellState *p, /* Query context */ 3117 const char *zSelect, /* SELECT statement to extract content */ 3118 const char *zFirstRow /* Print before first row, if not NULL */ 3119 ){ 3120 sqlite3_stmt *pSelect; 3121 int rc; 3122 int nResult; 3123 int i; 3124 const char *z; 3125 rc = sqlite3_prepare_v2(p->db, zSelect, -1, &pSelect, 0); 3126 if( rc!=SQLITE_OK || !pSelect ){ 3127 utf8_printf(p->out, "/**** ERROR: (%d) %s *****/\n", rc, 3128 sqlite3_errmsg(p->db)); 3129 if( (rc&0xff)!=SQLITE_CORRUPT ) p->nErr++; 3130 return rc; 3131 } 3132 rc = sqlite3_step(pSelect); 3133 nResult = sqlite3_column_count(pSelect); 3134 while( rc==SQLITE_ROW ){ 3135 if( zFirstRow ){ 3136 utf8_printf(p->out, "%s", zFirstRow); 3137 zFirstRow = 0; 3138 } 3139 z = (const char*)sqlite3_column_text(pSelect, 0); 3140 utf8_printf(p->out, "%s", z); 3141 for(i=1; i<nResult; i++){ 3142 utf8_printf(p->out, ",%s", sqlite3_column_text(pSelect, i)); 3143 } 3144 if( z==0 ) z = ""; 3145 while( z[0] && (z[0]!='-' || z[1]!='-') ) z++; 3146 if( z[0] ){ 3147 raw_printf(p->out, "\n;\n"); 3148 }else{ 3149 raw_printf(p->out, ";\n"); 3150 } 3151 rc = sqlite3_step(pSelect); 3152 } 3153 rc = sqlite3_finalize(pSelect); 3154 if( rc!=SQLITE_OK ){ 3155 utf8_printf(p->out, "/**** ERROR: (%d) %s *****/\n", rc, 3156 sqlite3_errmsg(p->db)); 3157 if( (rc&0xff)!=SQLITE_CORRUPT ) p->nErr++; 3158 } 3159 return rc; 3160 } 3161 3162 /* 3163 ** Allocate space and save off current error string. 3164 */ 3165 static char *save_err_msg( 3166 sqlite3 *db /* Database to query */ 3167 ){ 3168 int nErrMsg = 1+strlen30(sqlite3_errmsg(db)); 3169 char *zErrMsg = sqlite3_malloc64(nErrMsg); 3170 if( zErrMsg ){ 3171 memcpy(zErrMsg, sqlite3_errmsg(db), nErrMsg); 3172 } 3173 return zErrMsg; 3174 } 3175 3176 #ifdef __linux__ 3177 /* 3178 ** Attempt to display I/O stats on Linux using /proc/PID/io 3179 */ 3180 static void displayLinuxIoStats(FILE *out){ 3181 FILE *in; 3182 char z[200]; 3183 sqlite3_snprintf(sizeof(z), z, "/proc/%d/io", getpid()); 3184 in = fopen(z, "rb"); 3185 if( in==0 ) return; 3186 while( fgets(z, sizeof(z), in)!=0 ){ 3187 static const struct { 3188 const char *zPattern; 3189 const char *zDesc; 3190 } aTrans[] = { 3191 { "rchar: ", "Bytes received by read():" }, 3192 { "wchar: ", "Bytes sent to write():" }, 3193 { "syscr: ", "Read() system calls:" }, 3194 { "syscw: ", "Write() system calls:" }, 3195 { "read_bytes: ", "Bytes read from storage:" }, 3196 { "write_bytes: ", "Bytes written to storage:" }, 3197 { "cancelled_write_bytes: ", "Cancelled write bytes:" }, 3198 }; 3199 int i; 3200 for(i=0; i<ArraySize(aTrans); i++){ 3201 int n = (int)strlen(aTrans[i].zPattern); 3202 if( strncmp(aTrans[i].zPattern, z, n)==0 ){ 3203 utf8_printf(out, "%-36s %s", aTrans[i].zDesc, &z[n]); 3204 break; 3205 } 3206 } 3207 } 3208 fclose(in); 3209 } 3210 #endif 3211 3212 /* 3213 ** Display a single line of status using 64-bit values. 3214 */ 3215 static void displayStatLine( 3216 ShellState *p, /* The shell context */ 3217 char *zLabel, /* Label for this one line */ 3218 char *zFormat, /* Format for the result */ 3219 int iStatusCtrl, /* Which status to display */ 3220 int bReset /* True to reset the stats */ 3221 ){ 3222 sqlite3_int64 iCur = -1; 3223 sqlite3_int64 iHiwtr = -1; 3224 int i, nPercent; 3225 char zLine[200]; 3226 sqlite3_status64(iStatusCtrl, &iCur, &iHiwtr, bReset); 3227 for(i=0, nPercent=0; zFormat[i]; i++){ 3228 if( zFormat[i]=='%' ) nPercent++; 3229 } 3230 if( nPercent>1 ){ 3231 sqlite3_snprintf(sizeof(zLine), zLine, zFormat, iCur, iHiwtr); 3232 }else{ 3233 sqlite3_snprintf(sizeof(zLine), zLine, zFormat, iHiwtr); 3234 } 3235 raw_printf(p->out, "%-36s %s\n", zLabel, zLine); 3236 } 3237 3238 /* 3239 ** Display memory stats. 3240 */ 3241 static int display_stats( 3242 sqlite3 *db, /* Database to query */ 3243 ShellState *pArg, /* Pointer to ShellState */ 3244 int bReset /* True to reset the stats */ 3245 ){ 3246 int iCur; 3247 int iHiwtr; 3248 3249 if( pArg && pArg->out ){ 3250 displayStatLine(pArg, "Memory Used:", 3251 "%lld (max %lld) bytes", SQLITE_STATUS_MEMORY_USED, bReset); 3252 displayStatLine(pArg, "Number of Outstanding Allocations:", 3253 "%lld (max %lld)", SQLITE_STATUS_MALLOC_COUNT, bReset); 3254 if( pArg->shellFlgs & SHFLG_Pagecache ){ 3255 displayStatLine(pArg, "Number of Pcache Pages Used:", 3256 "%lld (max %lld) pages", SQLITE_STATUS_PAGECACHE_USED, bReset); 3257 } 3258 displayStatLine(pArg, "Number of Pcache Overflow Bytes:", 3259 "%lld (max %lld) bytes", SQLITE_STATUS_PAGECACHE_OVERFLOW, bReset); 3260 displayStatLine(pArg, "Largest Allocation:", 3261 "%lld bytes", SQLITE_STATUS_MALLOC_SIZE, bReset); 3262 displayStatLine(pArg, "Largest Pcache Allocation:", 3263 "%lld bytes", SQLITE_STATUS_PAGECACHE_SIZE, bReset); 3264 #ifdef YYTRACKMAXSTACKDEPTH 3265 displayStatLine(pArg, "Deepest Parser Stack:", 3266 "%lld (max %lld)", SQLITE_STATUS_PARSER_STACK, bReset); 3267 #endif 3268 } 3269 3270 if( pArg && pArg->out && db ){ 3271 if( pArg->shellFlgs & SHFLG_Lookaside ){ 3272 iHiwtr = iCur = -1; 3273 sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_USED, 3274 &iCur, &iHiwtr, bReset); 3275 raw_printf(pArg->out, 3276 "Lookaside Slots Used: %d (max %d)\n", 3277 iCur, iHiwtr); 3278 sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_HIT, 3279 &iCur, &iHiwtr, bReset); 3280 raw_printf(pArg->out, "Successful lookaside attempts: %d\n", 3281 iHiwtr); 3282 sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE, 3283 &iCur, &iHiwtr, bReset); 3284 raw_printf(pArg->out, "Lookaside failures due to size: %d\n", 3285 iHiwtr); 3286 sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL, 3287 &iCur, &iHiwtr, bReset); 3288 raw_printf(pArg->out, "Lookaside failures due to OOM: %d\n", 3289 iHiwtr); 3290 } 3291 iHiwtr = iCur = -1; 3292 sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_USED, &iCur, &iHiwtr, bReset); 3293 raw_printf(pArg->out, "Pager Heap Usage: %d bytes\n", 3294 iCur); 3295 iHiwtr = iCur = -1; 3296 sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_HIT, &iCur, &iHiwtr, 1); 3297 raw_printf(pArg->out, "Page cache hits: %d\n", iCur); 3298 iHiwtr = iCur = -1; 3299 sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_MISS, &iCur, &iHiwtr, 1); 3300 raw_printf(pArg->out, "Page cache misses: %d\n", iCur); 3301 iHiwtr = iCur = -1; 3302 sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_WRITE, &iCur, &iHiwtr, 1); 3303 raw_printf(pArg->out, "Page cache writes: %d\n", iCur); 3304 iHiwtr = iCur = -1; 3305 sqlite3_db_status(db, SQLITE_DBSTATUS_SCHEMA_USED, &iCur, &iHiwtr, bReset); 3306 raw_printf(pArg->out, "Schema Heap Usage: %d bytes\n", 3307 iCur); 3308 iHiwtr = iCur = -1; 3309 sqlite3_db_status(db, SQLITE_DBSTATUS_STMT_USED, &iCur, &iHiwtr, bReset); 3310 raw_printf(pArg->out, "Statement Heap/Lookaside Usage: %d bytes\n", 3311 iCur); 3312 } 3313 3314 if( pArg && pArg->out && db && pArg->pStmt ){ 3315 iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, 3316 bReset); 3317 raw_printf(pArg->out, "Fullscan Steps: %d\n", iCur); 3318 iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_SORT, bReset); 3319 raw_printf(pArg->out, "Sort Operations: %d\n", iCur); 3320 iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_AUTOINDEX,bReset); 3321 raw_printf(pArg->out, "Autoindex Inserts: %d\n", iCur); 3322 iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_VM_STEP, bReset); 3323 raw_printf(pArg->out, "Virtual Machine Steps: %d\n", iCur); 3324 } 3325 3326 #ifdef __linux__ 3327 displayLinuxIoStats(pArg->out); 3328 #endif 3329 3330 /* Do not remove this machine readable comment: extra-stats-output-here */ 3331 3332 return 0; 3333 } 3334 3335 /* 3336 ** Display scan stats. 3337 */ 3338 static void display_scanstats( 3339 sqlite3 *db, /* Database to query */ 3340 ShellState *pArg /* Pointer to ShellState */ 3341 ){ 3342 #ifndef SQLITE_ENABLE_STMT_SCANSTATUS 3343 UNUSED_PARAMETER(db); 3344 UNUSED_PARAMETER(pArg); 3345 #else 3346 int i, k, n, mx; 3347 raw_printf(pArg->out, "-------- scanstats --------\n"); 3348 mx = 0; 3349 for(k=0; k<=mx; k++){ 3350 double rEstLoop = 1.0; 3351 for(i=n=0; 1; i++){ 3352 sqlite3_stmt *p = pArg->pStmt; 3353 sqlite3_int64 nLoop, nVisit; 3354 double rEst; 3355 int iSid; 3356 const char *zExplain; 3357 if( sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NLOOP, (void*)&nLoop) ){ 3358 break; 3359 } 3360 sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_SELECTID, (void*)&iSid); 3361 if( iSid>mx ) mx = iSid; 3362 if( iSid!=k ) continue; 3363 if( n==0 ){ 3364 rEstLoop = (double)nLoop; 3365 if( k>0 ) raw_printf(pArg->out, "-------- subquery %d -------\n", k); 3366 } 3367 n++; 3368 sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NVISIT, (void*)&nVisit); 3369 sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EST, (void*)&rEst); 3370 sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EXPLAIN, (void*)&zExplain); 3371 utf8_printf(pArg->out, "Loop %2d: %s\n", n, zExplain); 3372 rEstLoop *= rEst; 3373 raw_printf(pArg->out, 3374 " nLoop=%-8lld nRow=%-8lld estRow=%-8lld estRow/Loop=%-8g\n", 3375 nLoop, nVisit, (sqlite3_int64)(rEstLoop+0.5), rEst 3376 ); 3377 } 3378 } 3379 raw_printf(pArg->out, "---------------------------\n"); 3380 #endif 3381 } 3382 3383 /* 3384 ** Parameter azArray points to a zero-terminated array of strings. zStr 3385 ** points to a single nul-terminated string. Return non-zero if zStr 3386 ** is equal, according to strcmp(), to any of the strings in the array. 3387 ** Otherwise, return zero. 3388 */ 3389 static int str_in_array(const char *zStr, const char **azArray){ 3390 int i; 3391 for(i=0; azArray[i]; i++){ 3392 if( 0==strcmp(zStr, azArray[i]) ) return 1; 3393 } 3394 return 0; 3395 } 3396 3397 /* 3398 ** If compiled statement pSql appears to be an EXPLAIN statement, allocate 3399 ** and populate the ShellState.aiIndent[] array with the number of 3400 ** spaces each opcode should be indented before it is output. 3401 ** 3402 ** The indenting rules are: 3403 ** 3404 ** * For each "Next", "Prev", "VNext" or "VPrev" instruction, indent 3405 ** all opcodes that occur between the p2 jump destination and the opcode 3406 ** itself by 2 spaces. 3407 ** 3408 ** * For each "Goto", if the jump destination is earlier in the program 3409 ** and ends on one of: 3410 ** Yield SeekGt SeekLt RowSetRead Rewind 3411 ** or if the P1 parameter is one instead of zero, 3412 ** then indent all opcodes between the earlier instruction 3413 ** and "Goto" by 2 spaces. 3414 */ 3415 static void explain_data_prepare(ShellState *p, sqlite3_stmt *pSql){ 3416 const char *zSql; /* The text of the SQL statement */ 3417 const char *z; /* Used to check if this is an EXPLAIN */ 3418 int *abYield = 0; /* True if op is an OP_Yield */ 3419 int nAlloc = 0; /* Allocated size of p->aiIndent[], abYield */ 3420 int iOp; /* Index of operation in p->aiIndent[] */ 3421 3422 const char *azNext[] = { "Next", "Prev", "VPrev", "VNext", "SorterNext", 3423 "NextIfOpen", "PrevIfOpen", 0 }; 3424 const char *azYield[] = { "Yield", "SeekLT", "SeekGT", "RowSetRead", 3425 "Rewind", 0 }; 3426 const char *azGoto[] = { "Goto", 0 }; 3427 3428 /* Try to figure out if this is really an EXPLAIN statement. If this 3429 ** cannot be verified, return early. */ 3430 if( sqlite3_column_count(pSql)!=8 ){ 3431 p->cMode = p->mode; 3432 return; 3433 } 3434 zSql = sqlite3_sql(pSql); 3435 if( zSql==0 ) return; 3436 for(z=zSql; *z==' ' || *z=='\t' || *z=='\n' || *z=='\f' || *z=='\r'; z++); 3437 if( sqlite3_strnicmp(z, "explain", 7) ){ 3438 p->cMode = p->mode; 3439 return; 3440 } 3441 3442 for(iOp=0; SQLITE_ROW==sqlite3_step(pSql); iOp++){ 3443 int i; 3444 int iAddr = sqlite3_column_int(pSql, 0); 3445 const char *zOp = (const char*)sqlite3_column_text(pSql, 1); 3446 3447 /* Set p2 to the P2 field of the current opcode. Then, assuming that 3448 ** p2 is an instruction address, set variable p2op to the index of that 3449 ** instruction in the aiIndent[] array. p2 and p2op may be different if 3450 ** the current instruction is part of a sub-program generated by an 3451 ** SQL trigger or foreign key. */ 3452 int p2 = sqlite3_column_int(pSql, 3); 3453 int p2op = (p2 + (iOp-iAddr)); 3454 3455 /* Grow the p->aiIndent array as required */ 3456 if( iOp>=nAlloc ){ 3457 if( iOp==0 ){ 3458 /* Do further verfication that this is explain output. Abort if 3459 ** it is not */ 3460 static const char *explainCols[] = { 3461 "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment" }; 3462 int jj; 3463 for(jj=0; jj<ArraySize(explainCols); jj++){ 3464 if( strcmp(sqlite3_column_name(pSql,jj),explainCols[jj])!=0 ){ 3465 p->cMode = p->mode; 3466 sqlite3_reset(pSql); 3467 return; 3468 } 3469 } 3470 } 3471 nAlloc += 100; 3472 p->aiIndent = (int*)sqlite3_realloc64(p->aiIndent, nAlloc*sizeof(int)); 3473 abYield = (int*)sqlite3_realloc64(abYield, nAlloc*sizeof(int)); 3474 } 3475 abYield[iOp] = str_in_array(zOp, azYield); 3476 p->aiIndent[iOp] = 0; 3477 p->nIndent = iOp+1; 3478 3479 if( str_in_array(zOp, azNext) ){ 3480 for(i=p2op; i<iOp; i++) p->aiIndent[i] += 2; 3481 } 3482 if( str_in_array(zOp, azGoto) && p2op<p->nIndent 3483 && (abYield[p2op] || sqlite3_column_int(pSql, 2)) 3484 ){ 3485 for(i=p2op; i<iOp; i++) p->aiIndent[i] += 2; 3486 } 3487 } 3488 3489 p->iIndent = 0; 3490 sqlite3_free(abYield); 3491 sqlite3_reset(pSql); 3492 } 3493 3494 /* 3495 ** Free the array allocated by explain_data_prepare(). 3496 */ 3497 static void explain_data_delete(ShellState *p){ 3498 sqlite3_free(p->aiIndent); 3499 p->aiIndent = 0; 3500 p->nIndent = 0; 3501 p->iIndent = 0; 3502 } 3503 3504 /* 3505 ** Disable and restore .wheretrace and .selecttrace settings. 3506 */ 3507 #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_SELECTTRACE) 3508 extern int sqlite3SelectTrace; 3509 static int savedSelectTrace; 3510 #endif 3511 #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_WHERETRACE) 3512 extern int sqlite3WhereTrace; 3513 static int savedWhereTrace; 3514 #endif 3515 static void disable_debug_trace_modes(void){ 3516 #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_SELECTTRACE) 3517 savedSelectTrace = sqlite3SelectTrace; 3518 sqlite3SelectTrace = 0; 3519 #endif 3520 #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_WHERETRACE) 3521 savedWhereTrace = sqlite3WhereTrace; 3522 sqlite3WhereTrace = 0; 3523 #endif 3524 } 3525 static void restore_debug_trace_modes(void){ 3526 #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_SELECTTRACE) 3527 sqlite3SelectTrace = savedSelectTrace; 3528 #endif 3529 #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_WHERETRACE) 3530 sqlite3WhereTrace = savedWhereTrace; 3531 #endif 3532 } 3533 3534 /* 3535 ** Run a prepared statement 3536 */ 3537 static void exec_prepared_stmt( 3538 ShellState *pArg, /* Pointer to ShellState */ 3539 sqlite3_stmt *pStmt, /* Statment to run */ 3540 int (*xCallback)(void*,int,char**,char**,int*) /* Callback function */ 3541 ){ 3542 int rc; 3543 3544 /* perform the first step. this will tell us if we 3545 ** have a result set or not and how wide it is. 3546 */ 3547 rc = sqlite3_step(pStmt); 3548 /* if we have a result set... */ 3549 if( SQLITE_ROW == rc ){ 3550 /* if we have a callback... */ 3551 if( xCallback ){ 3552 /* allocate space for col name ptr, value ptr, and type */ 3553 int nCol = sqlite3_column_count(pStmt); 3554 void *pData = sqlite3_malloc64(3*nCol*sizeof(const char*) + 1); 3555 if( !pData ){ 3556 rc = SQLITE_NOMEM; 3557 }else{ 3558 char **azCols = (char **)pData; /* Names of result columns */ 3559 char **azVals = &azCols[nCol]; /* Results */ 3560 int *aiTypes = (int *)&azVals[nCol]; /* Result types */ 3561 int i, x; 3562 assert(sizeof(int) <= sizeof(char *)); 3563 /* save off ptrs to column names */ 3564 for(i=0; i<nCol; i++){ 3565 azCols[i] = (char *)sqlite3_column_name(pStmt, i); 3566 } 3567 do{ 3568 /* extract the data and data types */ 3569 for(i=0; i<nCol; i++){ 3570 aiTypes[i] = x = sqlite3_column_type(pStmt, i); 3571 if( x==SQLITE_BLOB && pArg && pArg->cMode==MODE_Insert ){ 3572 azVals[i] = ""; 3573 }else{ 3574 azVals[i] = (char*)sqlite3_column_text(pStmt, i); 3575 } 3576 if( !azVals[i] && (aiTypes[i]!=SQLITE_NULL) ){ 3577 rc = SQLITE_NOMEM; 3578 break; /* from for */ 3579 } 3580 } /* end for */ 3581 3582 /* if data and types extracted successfully... */ 3583 if( SQLITE_ROW == rc ){ 3584 /* call the supplied callback with the result row data */ 3585 if( xCallback(pArg, nCol, azVals, azCols, aiTypes) ){ 3586 rc = SQLITE_ABORT; 3587 }else{ 3588 rc = sqlite3_step(pStmt); 3589 } 3590 } 3591 } while( SQLITE_ROW == rc ); 3592 sqlite3_free(pData); 3593 } 3594 }else{ 3595 do{ 3596 rc = sqlite3_step(pStmt); 3597 } while( rc == SQLITE_ROW ); 3598 } 3599 } 3600 } 3601 3602 /* 3603 ** Execute a statement or set of statements. Print 3604 ** any result rows/columns depending on the current mode 3605 ** set via the supplied callback. 3606 ** 3607 ** This is very similar to SQLite's built-in sqlite3_exec() 3608 ** function except it takes a slightly different callback 3609 ** and callback data argument. 3610 */ 3611 static int shell_exec( 3612 sqlite3 *db, /* An open database */ 3613 const char *zSql, /* SQL to be evaluated */ 3614 int (*xCallback)(void*,int,char**,char**,int*), /* Callback function */ 3615 /* (not the same as sqlite3_exec) */ 3616 ShellState *pArg, /* Pointer to ShellState */ 3617 char **pzErrMsg /* Error msg written here */ 3618 ){ 3619 sqlite3_stmt *pStmt = NULL; /* Statement to execute. */ 3620 int rc = SQLITE_OK; /* Return Code */ 3621 int rc2; 3622 const char *zLeftover; /* Tail of unprocessed SQL */ 3623 3624 if( pzErrMsg ){ 3625 *pzErrMsg = NULL; 3626 } 3627 3628 while( zSql[0] && (SQLITE_OK == rc) ){ 3629 static const char *zStmtSql; 3630 rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, &zLeftover); 3631 if( SQLITE_OK != rc ){ 3632 if( pzErrMsg ){ 3633 *pzErrMsg = save_err_msg(db); 3634 } 3635 }else{ 3636 if( !pStmt ){ 3637 /* this happens for a comment or white-space */ 3638 zSql = zLeftover; 3639 while( IsSpace(zSql[0]) ) zSql++; 3640 continue; 3641 } 3642 zStmtSql = sqlite3_sql(pStmt); 3643 if( zStmtSql==0 ) zStmtSql = ""; 3644 while( IsSpace(zStmtSql[0]) ) zStmtSql++; 3645 3646 /* save off the prepared statment handle and reset row count */ 3647 if( pArg ){ 3648 pArg->pStmt = pStmt; 3649 pArg->cnt = 0; 3650 } 3651 3652 /* echo the sql statement if echo on */ 3653 if( pArg && ShellHasFlag(pArg, SHFLG_Echo) ){ 3654 utf8_printf(pArg->out, "%s\n", zStmtSql ? zStmtSql : zSql); 3655 } 3656 3657 /* Show the EXPLAIN QUERY PLAN if .eqp is on */ 3658 if( pArg && pArg->autoEQP && sqlite3_strlike("EXPLAIN%",zStmtSql,0)!=0 ){ 3659 sqlite3_stmt *pExplain; 3660 char *zEQP; 3661 disable_debug_trace_modes(); 3662 zEQP = sqlite3_mprintf("EXPLAIN QUERY PLAN %s", zStmtSql); 3663 rc = sqlite3_prepare_v2(db, zEQP, -1, &pExplain, 0); 3664 if( rc==SQLITE_OK ){ 3665 while( sqlite3_step(pExplain)==SQLITE_ROW ){ 3666 raw_printf(pArg->out,"--EQP-- %d,",sqlite3_column_int(pExplain, 0)); 3667 raw_printf(pArg->out,"%d,", sqlite3_column_int(pExplain, 1)); 3668 raw_printf(pArg->out,"%d,", sqlite3_column_int(pExplain, 2)); 3669 utf8_printf(pArg->out,"%s\n", sqlite3_column_text(pExplain, 3)); 3670 } 3671 } 3672 sqlite3_finalize(pExplain); 3673 sqlite3_free(zEQP); 3674 if( pArg->autoEQP>=2 ){ 3675 /* Also do an EXPLAIN for ".eqp full" mode */ 3676 zEQP = sqlite3_mprintf("EXPLAIN %s", zStmtSql); 3677 rc = sqlite3_prepare_v2(db, zEQP, -1, &pExplain, 0); 3678 if( rc==SQLITE_OK ){ 3679 pArg->cMode = MODE_Explain; 3680 explain_data_prepare(pArg, pExplain); 3681 exec_prepared_stmt(pArg, pExplain, xCallback); 3682 explain_data_delete(pArg); 3683 } 3684 sqlite3_finalize(pExplain); 3685 sqlite3_free(zEQP); 3686 } 3687 restore_debug_trace_modes(); 3688 } 3689 3690 if( pArg ){ 3691 pArg->cMode = pArg->mode; 3692 if( pArg->autoExplain 3693 && sqlite3_column_count(pStmt)==8 3694 && sqlite3_strlike("EXPLAIN%", zStmtSql,0)==0 3695 ){ 3696 pArg->cMode = MODE_Explain; 3697 } 3698 3699 /* If the shell is currently in ".explain" mode, gather the extra 3700 ** data required to add indents to the output.*/ 3701 if( pArg->cMode==MODE_Explain ){ 3702 explain_data_prepare(pArg, pStmt); 3703 } 3704 } 3705 3706 exec_prepared_stmt(pArg, pStmt, xCallback); 3707 explain_data_delete(pArg); 3708 3709 /* print usage stats if stats on */ 3710 if( pArg && pArg->statsOn ){ 3711 display_stats(db, pArg, 0); 3712 } 3713 3714 /* print loop-counters if required */ 3715 if( pArg && pArg->scanstatsOn ){ 3716 display_scanstats(db, pArg); 3717 } 3718 3719 /* Finalize the statement just executed. If this fails, save a 3720 ** copy of the error message. Otherwise, set zSql to point to the 3721 ** next statement to execute. */ 3722 rc2 = sqlite3_finalize(pStmt); 3723 if( rc!=SQLITE_NOMEM ) rc = rc2; 3724 if( rc==SQLITE_OK ){ 3725 zSql = zLeftover; 3726 while( IsSpace(zSql[0]) ) zSql++; 3727 }else if( pzErrMsg ){ 3728 *pzErrMsg = save_err_msg(db); 3729 } 3730 3731 /* clear saved stmt handle */ 3732 if( pArg ){ 3733 pArg->pStmt = NULL; 3734 } 3735 } 3736 } /* end while */ 3737 3738 return rc; 3739 } 3740 3741 /* 3742 ** Release memory previously allocated by tableColumnList(). 3743 */ 3744 static void freeColumnList(char **azCol){ 3745 int i; 3746 for(i=1; azCol[i]; i++){ 3747 sqlite3_free(azCol[i]); 3748 } 3749 /* azCol[0] is a static string */ 3750 sqlite3_free(azCol); 3751 } 3752 3753 /* 3754 ** Return a list of pointers to strings which are the names of all 3755 ** columns in table zTab. The memory to hold the names is dynamically 3756 ** allocated and must be released by the caller using a subsequent call 3757 ** to freeColumnList(). 3758 ** 3759 ** The azCol[0] entry is usually NULL. However, if zTab contains a rowid 3760 ** value that needs to be preserved, then azCol[0] is filled in with the 3761 ** name of the rowid column. 3762 ** 3763 ** The first regular column in the table is azCol[1]. The list is terminated 3764 ** by an entry with azCol[i]==0. 3765 */ 3766 static char **tableColumnList(ShellState *p, const char *zTab){ 3767 char **azCol = 0; 3768 sqlite3_stmt *pStmt; 3769 char *zSql; 3770 int nCol = 0; 3771 int nAlloc = 0; 3772 int nPK = 0; /* Number of PRIMARY KEY columns seen */ 3773 int isIPK = 0; /* True if one PRIMARY KEY column of type INTEGER */ 3774 int preserveRowid = ShellHasFlag(p, SHFLG_PreserveRowid); 3775 int rc; 3776 3777 zSql = sqlite3_mprintf("PRAGMA table_info=%Q", zTab); 3778 rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); 3779 sqlite3_free(zSql); 3780 if( rc ) return 0; 3781 while( sqlite3_step(pStmt)==SQLITE_ROW ){ 3782 if( nCol>=nAlloc-2 ){ 3783 nAlloc = nAlloc*2 + nCol + 10; 3784 azCol = sqlite3_realloc(azCol, nAlloc*sizeof(azCol[0])); 3785 if( azCol==0 ){ 3786 raw_printf(stderr, "Error: out of memory\n"); 3787 exit(1); 3788 } 3789 } 3790 azCol[++nCol] = sqlite3_mprintf("%s", sqlite3_column_text(pStmt, 1)); 3791 if( sqlite3_column_int(pStmt, 5) ){ 3792 nPK++; 3793 if( nPK==1 3794 && sqlite3_stricmp((const char*)sqlite3_column_text(pStmt,2), 3795 "INTEGER")==0 3796 ){ 3797 isIPK = 1; 3798 }else{ 3799 isIPK = 0; 3800 } 3801 } 3802 } 3803 sqlite3_finalize(pStmt); 3804 if( azCol==0 ) return 0; 3805 azCol[0] = 0; 3806 azCol[nCol+1] = 0; 3807 3808 /* The decision of whether or not a rowid really needs to be preserved 3809 ** is tricky. We never need to preserve a rowid for a WITHOUT ROWID table 3810 ** or a table with an INTEGER PRIMARY KEY. We are unable to preserve 3811 ** rowids on tables where the rowid is inaccessible because there are other 3812 ** columns in the table named "rowid", "_rowid_", and "oid". 3813 */ 3814 if( preserveRowid && isIPK ){ 3815 /* If a single PRIMARY KEY column with type INTEGER was seen, then it 3816 ** might be an alise for the ROWID. But it might also be a WITHOUT ROWID 3817 ** table or a INTEGER PRIMARY KEY DESC column, neither of which are 3818 ** ROWID aliases. To distinguish these cases, check to see if 3819 ** there is a "pk" entry in "PRAGMA index_list". There will be 3820 ** no "pk" index if the PRIMARY KEY really is an alias for the ROWID. 3821 */ 3822 zSql = sqlite3_mprintf("SELECT 1 FROM pragma_index_list(%Q)" 3823 " WHERE origin='pk'", zTab); 3824 rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); 3825 sqlite3_free(zSql); 3826 if( rc ){ 3827 freeColumnList(azCol); 3828 return 0; 3829 } 3830 rc = sqlite3_step(pStmt); 3831 sqlite3_finalize(pStmt); 3832 preserveRowid = rc==SQLITE_ROW; 3833 } 3834 if( preserveRowid ){ 3835 /* Only preserve the rowid if we can find a name to use for the 3836 ** rowid */ 3837 static char *azRowid[] = { "rowid", "_rowid_", "oid" }; 3838 int i, j; 3839 for(j=0; j<3; j++){ 3840 for(i=1; i<=nCol; i++){ 3841 if( sqlite3_stricmp(azRowid[j],azCol[i])==0 ) break; 3842 } 3843 if( i>nCol ){ 3844 /* At this point, we know that azRowid[j] is not the name of any 3845 ** ordinary column in the table. Verify that azRowid[j] is a valid 3846 ** name for the rowid before adding it to azCol[0]. WITHOUT ROWID 3847 ** tables will fail this last check */ 3848 rc = sqlite3_table_column_metadata(p->db,0,zTab,azRowid[j],0,0,0,0,0); 3849 if( rc==SQLITE_OK ) azCol[0] = azRowid[j]; 3850 break; 3851 } 3852 } 3853 } 3854 return azCol; 3855 } 3856 3857 /* 3858 ** Toggle the reverse_unordered_selects setting. 3859 */ 3860 static void toggleSelectOrder(sqlite3 *db){ 3861 sqlite3_stmt *pStmt = 0; 3862 int iSetting = 0; 3863 char zStmt[100]; 3864 sqlite3_prepare_v2(db, "PRAGMA reverse_unordered_selects", -1, &pStmt, 0); 3865 if( sqlite3_step(pStmt)==SQLITE_ROW ){ 3866 iSetting = sqlite3_column_int(pStmt, 0); 3867 } 3868 sqlite3_finalize(pStmt); 3869 sqlite3_snprintf(sizeof(zStmt), zStmt, 3870 "PRAGMA reverse_unordered_selects(%d)", !iSetting); 3871 sqlite3_exec(db, zStmt, 0, 0, 0); 3872 } 3873 3874 /* 3875 ** This is a different callback routine used for dumping the database. 3876 ** Each row received by this callback consists of a table name, 3877 ** the table type ("index" or "table") and SQL to create the table. 3878 ** This routine should print text sufficient to recreate the table. 3879 */ 3880 static int dump_callback(void *pArg, int nArg, char **azArg, char **azNotUsed){ 3881 int rc; 3882 const char *zTable; 3883 const char *zType; 3884 const char *zSql; 3885 ShellState *p = (ShellState *)pArg; 3886 3887 UNUSED_PARAMETER(azNotUsed); 3888 if( nArg!=3 || azArg==0 ) return 0; 3889 zTable = azArg[0]; 3890 zType = azArg[1]; 3891 zSql = azArg[2]; 3892 3893 if( strcmp(zTable, "sqlite_sequence")==0 ){ 3894 raw_printf(p->out, "DELETE FROM sqlite_sequence;\n"); 3895 }else if( sqlite3_strglob("sqlite_stat?", zTable)==0 ){ 3896 raw_printf(p->out, "ANALYZE sqlite_master;\n"); 3897 }else if( strncmp(zTable, "sqlite_", 7)==0 ){ 3898 return 0; 3899 }else if( strncmp(zSql, "CREATE VIRTUAL TABLE", 20)==0 ){ 3900 char *zIns; 3901 if( !p->writableSchema ){ 3902 raw_printf(p->out, "PRAGMA writable_schema=ON;\n"); 3903 p->writableSchema = 1; 3904 } 3905 zIns = sqlite3_mprintf( 3906 "INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)" 3907 "VALUES('table','%q','%q',0,'%q');", 3908 zTable, zTable, zSql); 3909 utf8_printf(p->out, "%s\n", zIns); 3910 sqlite3_free(zIns); 3911 return 0; 3912 }else{ 3913 printSchemaLine(p->out, zSql, ";\n"); 3914 } 3915 3916 if( strcmp(zType, "table")==0 ){ 3917 ShellText sSelect; 3918 ShellText sTable; 3919 char **azCol; 3920 int i; 3921 char *savedDestTable; 3922 int savedMode; 3923 3924 azCol = tableColumnList(p, zTable); 3925 if( azCol==0 ){ 3926 p->nErr++; 3927 return 0; 3928 } 3929 3930 /* Always quote the table name, even if it appears to be pure ascii, 3931 ** in case it is a keyword. Ex: INSERT INTO "table" ... */ 3932 initText(&sTable); 3933 appendText(&sTable, zTable, quoteChar(zTable)); 3934 /* If preserving the rowid, add a column list after the table name. 3935 ** In other words: "INSERT INTO tab(rowid,a,b,c,...) VALUES(...)" 3936 ** instead of the usual "INSERT INTO tab VALUES(...)". 3937 */ 3938 if( azCol[0] ){ 3939 appendText(&sTable, "(", 0); 3940 appendText(&sTable, azCol[0], 0); 3941 for(i=1; azCol[i]; i++){ 3942 appendText(&sTable, ",", 0); 3943 appendText(&sTable, azCol[i], quoteChar(azCol[i])); 3944 } 3945 appendText(&sTable, ")", 0); 3946 } 3947 3948 /* Build an appropriate SELECT statement */ 3949 initText(&sSelect); 3950 appendText(&sSelect, "SELECT ", 0); 3951 if( azCol[0] ){ 3952 appendText(&sSelect, azCol[0], 0); 3953 appendText(&sSelect, ",", 0); 3954 } 3955 for(i=1; azCol[i]; i++){ 3956 appendText(&sSelect, azCol[i], quoteChar(azCol[i])); 3957 if( azCol[i+1] ){ 3958 appendText(&sSelect, ",", 0); 3959 } 3960 } 3961 freeColumnList(azCol); 3962 appendText(&sSelect, " FROM ", 0); 3963 appendText(&sSelect, zTable, quoteChar(zTable)); 3964 3965 savedDestTable = p->zDestTable; 3966 savedMode = p->mode; 3967 p->zDestTable = sTable.z; 3968 p->mode = p->cMode = MODE_Insert; 3969 rc = shell_exec(p->db, sSelect.z, shell_callback, p, 0); 3970 if( (rc&0xff)==SQLITE_CORRUPT ){ 3971 raw_printf(p->out, "/****** CORRUPTION ERROR *******/\n"); 3972 toggleSelectOrder(p->db); 3973 shell_exec(p->db, sSelect.z, shell_callback, p, 0); 3974 toggleSelectOrder(p->db); 3975 } 3976 p->zDestTable = savedDestTable; 3977 p->mode = savedMode; 3978 freeText(&sTable); 3979 freeText(&sSelect); 3980 if( rc ) p->nErr++; 3981 } 3982 return 0; 3983 } 3984 3985 /* 3986 ** Run zQuery. Use dump_callback() as the callback routine so that 3987 ** the contents of the query are output as SQL statements. 3988 ** 3989 ** If we get a SQLITE_CORRUPT error, rerun the query after appending 3990 ** "ORDER BY rowid DESC" to the end. 3991 */ 3992 static int run_schema_dump_query( 3993 ShellState *p, 3994 const char *zQuery 3995 ){ 3996 int rc; 3997 char *zErr = 0; 3998 rc = sqlite3_exec(p->db, zQuery, dump_callback, p, &zErr); 3999 if( rc==SQLITE_CORRUPT ){ 4000 char *zQ2; 4001 int len = strlen30(zQuery); 4002 raw_printf(p->out, "/****** CORRUPTION ERROR *******/\n"); 4003 if( zErr ){ 4004 utf8_printf(p->out, "/****** %s ******/\n", zErr); 4005 sqlite3_free(zErr); 4006 zErr = 0; 4007 } 4008 zQ2 = malloc( len+100 ); 4009 if( zQ2==0 ) return rc; 4010 sqlite3_snprintf(len+100, zQ2, "%s ORDER BY rowid DESC", zQuery); 4011 rc = sqlite3_exec(p->db, zQ2, dump_callback, p, &zErr); 4012 if( rc ){ 4013 utf8_printf(p->out, "/****** ERROR: %s ******/\n", zErr); 4014 }else{ 4015 rc = SQLITE_CORRUPT; 4016 } 4017 sqlite3_free(zErr); 4018 free(zQ2); 4019 } 4020 return rc; 4021 } 4022 4023 /* 4024 ** Text of a help message 4025 */ 4026 static char zHelp[] = 4027 #ifndef SQLITE_OMIT_AUTHORIZATION 4028 ".auth ON|OFF Show authorizer callbacks\n" 4029 #endif 4030 ".backup ?DB? FILE Backup DB (default \"main\") to FILE\n" 4031 ".bail on|off Stop after hitting an error. Default OFF\n" 4032 ".binary on|off Turn binary output on or off. Default OFF\n" 4033 ".cd DIRECTORY Change the working directory to DIRECTORY\n" 4034 ".changes on|off Show number of rows changed by SQL\n" 4035 ".check GLOB Fail if output since .testcase does not match\n" 4036 ".clone NEWDB Clone data into NEWDB from the existing database\n" 4037 ".databases List names and files of attached databases\n" 4038 ".dbinfo ?DB? Show status information about the database\n" 4039 ".dump ?TABLE? ... Dump the database in an SQL text format\n" 4040 " If TABLE specified, only dump tables matching\n" 4041 " LIKE pattern TABLE.\n" 4042 ".echo on|off Turn command echo on or off\n" 4043 ".eqp on|off|full Enable or disable automatic EXPLAIN QUERY PLAN\n" 4044 ".exit Exit this program\n" 4045 /* Because explain mode comes on automatically now, the ".explain" mode 4046 ** is removed from the help screen. It is still supported for legacy, however */ 4047 /*".explain ?on|off|auto? Turn EXPLAIN output mode on or off or to automatic\n"*/ 4048 ".fullschema ?--indent? Show schema and the content of sqlite_stat tables\n" 4049 ".headers on|off Turn display of headers on or off\n" 4050 ".help Show this message\n" 4051 ".import FILE TABLE Import data from FILE into TABLE\n" 4052 #ifndef SQLITE_OMIT_TEST_CONTROL 4053 ".imposter INDEX TABLE Create imposter table TABLE on index INDEX\n" 4054 #endif 4055 ".indexes ?TABLE? Show names of all indexes\n" 4056 " If TABLE specified, only show indexes for tables\n" 4057 " matching LIKE pattern TABLE.\n" 4058 #ifdef SQLITE_ENABLE_IOTRACE 4059 ".iotrace FILE Enable I/O diagnostic logging to FILE\n" 4060 #endif 4061 ".limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT\n" 4062 ".lint OPTIONS Report potential schema issues. Options:\n" 4063 " fkey-indexes Find missing foreign key indexes\n" 4064 #ifndef SQLITE_OMIT_LOAD_EXTENSION 4065 ".load FILE ?ENTRY? Load an extension library\n" 4066 #endif 4067 ".log FILE|off Turn logging on or off. FILE can be stderr/stdout\n" 4068 ".mode MODE ?TABLE? Set output mode where MODE is one of:\n" 4069 " ascii Columns/rows delimited by 0x1F and 0x1E\n" 4070 " csv Comma-separated values\n" 4071 " column Left-aligned columns. (See .width)\n" 4072 " html HTML <table> code\n" 4073 " insert SQL insert statements for TABLE\n" 4074 " line One value per line\n" 4075 " list Values delimited by \"|\"\n" 4076 " quote Escape answers as for SQL\n" 4077 " tabs Tab-separated values\n" 4078 " tcl TCL list elements\n" 4079 ".nullvalue STRING Use STRING in place of NULL values\n" 4080 ".once FILENAME Output for the next SQL command only to FILENAME\n" 4081 ".open ?OPTIONS? ?FILE? Close existing database and reopen FILE\n" 4082 " The --new option starts with an empty file\n" 4083 ".output ?FILENAME? Send output to FILENAME or stdout\n" 4084 ".print STRING... Print literal STRING\n" 4085 ".prompt MAIN CONTINUE Replace the standard prompts\n" 4086 ".quit Exit this program\n" 4087 ".read FILENAME Execute SQL in FILENAME\n" 4088 ".restore ?DB? FILE Restore content of DB (default \"main\") from FILE\n" 4089 ".save FILE Write in-memory database into FILE\n" 4090 ".scanstats on|off Turn sqlite3_stmt_scanstatus() metrics on or off\n" 4091 ".schema ?PATTERN? Show the CREATE statements matching PATTERN\n" 4092 " Add --indent for pretty-printing\n" 4093 ".selftest ?--init? Run tests defined in the SELFTEST table\n" 4094 ".separator COL ?ROW? Change the column separator and optionally the row\n" 4095 " separator for both the output mode and .import\n" 4096 #if defined(SQLITE_ENABLE_SESSION) 4097 ".session CMD ... Create or control sessions\n" 4098 #endif 4099 ".sha3sum ?OPTIONS...? Compute a SHA3 hash of database content\n" 4100 ".shell CMD ARGS... Run CMD ARGS... in a system shell\n" 4101 ".show Show the current values for various settings\n" 4102 ".stats ?on|off? Show stats or turn stats on or off\n" 4103 ".system CMD ARGS... Run CMD ARGS... in a system shell\n" 4104 ".tables ?TABLE? List names of tables\n" 4105 " If TABLE specified, only list tables matching\n" 4106 " LIKE pattern TABLE.\n" 4107 ".testcase NAME Begin redirecting output to 'testcase-out.txt'\n" 4108 ".timeout MS Try opening locked tables for MS milliseconds\n" 4109 ".timer on|off Turn SQL timer on or off\n" 4110 ".trace FILE|off Output each SQL statement as it is run\n" 4111 ".vfsinfo ?AUX? Information about the top-level VFS\n" 4112 ".vfslist List all available VFSes\n" 4113 ".vfsname ?AUX? Print the name of the VFS stack\n" 4114 ".width NUM1 NUM2 ... Set column widths for \"column\" mode\n" 4115 " Negative values right-justify\n" 4116 ; 4117 4118 #if defined(SQLITE_ENABLE_SESSION) 4119 /* 4120 ** Print help information for the ".sessions" command 4121 */ 4122 void session_help(ShellState *p){ 4123 raw_printf(p->out, 4124 ".session ?NAME? SUBCOMMAND ?ARGS...?\n" 4125 "If ?NAME? is omitted, the first defined session is used.\n" 4126 "Subcommands:\n" 4127 " attach TABLE Attach TABLE\n" 4128 " changeset FILE Write a changeset into FILE\n" 4129 " close Close one session\n" 4130 " enable ?BOOLEAN? Set or query the enable bit\n" 4131 " filter GLOB... Reject tables matching GLOBs\n" 4132 " indirect ?BOOLEAN? Mark or query the indirect status\n" 4133 " isempty Query whether the session is empty\n" 4134 " list List currently open session names\n" 4135 " open DB NAME Open a new session on DB\n" 4136 " patchset FILE Write a patchset into FILE\n" 4137 ); 4138 } 4139 #endif 4140 4141 4142 /* Forward reference */ 4143 static int process_input(ShellState *p, FILE *in); 4144 4145 /* 4146 ** Read the content of file zName into memory obtained from sqlite3_malloc64() 4147 ** and return a pointer to the buffer. The caller is responsible for freeing 4148 ** the memory. 4149 ** 4150 ** If parameter pnByte is not NULL, (*pnByte) is set to the number of bytes 4151 ** read. 4152 ** 4153 ** For convenience, a nul-terminator byte is always appended to the data read 4154 ** from the file before the buffer is returned. This byte is not included in 4155 ** the final value of (*pnByte), if applicable. 4156 ** 4157 ** NULL is returned if any error is encountered. The final value of *pnByte 4158 ** is undefined in this case. 4159 */ 4160 static char *readFile(const char *zName, int *pnByte){ 4161 FILE *in = fopen(zName, "rb"); 4162 long nIn; 4163 size_t nRead; 4164 char *pBuf; 4165 if( in==0 ) return 0; 4166 fseek(in, 0, SEEK_END); 4167 nIn = ftell(in); 4168 rewind(in); 4169 pBuf = sqlite3_malloc64( nIn+1 ); 4170 if( pBuf==0 ) return 0; 4171 nRead = fread(pBuf, nIn, 1, in); 4172 fclose(in); 4173 if( nRead!=1 ){ 4174 sqlite3_free(pBuf); 4175 return 0; 4176 } 4177 pBuf[nIn] = 0; 4178 if( pnByte ) *pnByte = nIn; 4179 return pBuf; 4180 } 4181 4182 #if defined(SQLITE_ENABLE_SESSION) 4183 /* 4184 ** Close a single OpenSession object and release all of its associated 4185 ** resources. 4186 */ 4187 static void session_close(OpenSession *pSession){ 4188 int i; 4189 sqlite3session_delete(pSession->p); 4190 sqlite3_free(pSession->zName); 4191 for(i=0; i<pSession->nFilter; i++){ 4192 sqlite3_free(pSession->azFilter[i]); 4193 } 4194 sqlite3_free(pSession->azFilter); 4195 memset(pSession, 0, sizeof(OpenSession)); 4196 } 4197 #endif 4198 4199 /* 4200 ** Close all OpenSession objects and release all associated resources. 4201 */ 4202 #if defined(SQLITE_ENABLE_SESSION) 4203 static void session_close_all(ShellState *p){ 4204 int i; 4205 for(i=0; i<p->nSession; i++){ 4206 session_close(&p->aSession[i]); 4207 } 4208 p->nSession = 0; 4209 } 4210 #else 4211 # define session_close_all(X) 4212 #endif 4213 4214 /* 4215 ** Implementation of the xFilter function for an open session. Omit 4216 ** any tables named by ".session filter" but let all other table through. 4217 */ 4218 #if defined(SQLITE_ENABLE_SESSION) 4219 static int session_filter(void *pCtx, const char *zTab){ 4220 OpenSession *pSession = (OpenSession*)pCtx; 4221 int i; 4222 for(i=0; i<pSession->nFilter; i++){ 4223 if( sqlite3_strglob(pSession->azFilter[i], zTab)==0 ) return 0; 4224 } 4225 return 1; 4226 } 4227 #endif 4228 4229 /* 4230 ** Make sure the database is open. If it is not, then open it. If 4231 ** the database fails to open, print an error message and exit. 4232 */ 4233 static void open_db(ShellState *p, int keepAlive){ 4234 if( p->db==0 ){ 4235 sqlite3_initialize(); 4236 sqlite3_open(p->zDbFilename, &p->db); 4237 globalDb = p->db; 4238 if( p->db==0 || SQLITE_OK!=sqlite3_errcode(p->db) ){ 4239 utf8_printf(stderr,"Error: unable to open database \"%s\": %s\n", 4240 p->zDbFilename, sqlite3_errmsg(p->db)); 4241 if( keepAlive ) return; 4242 exit(1); 4243 } 4244 #ifndef SQLITE_OMIT_LOAD_EXTENSION 4245 sqlite3_enable_load_extension(p->db, 1); 4246 #endif 4247 sqlite3_fileio_init(p->db, 0, 0); 4248 sqlite3_shathree_init(p->db, 0, 0); 4249 sqlite3_completion_init(p->db, 0, 0); 4250 sqlite3_create_function(p->db, "shell_add_schema", 2, SQLITE_UTF8, 0, 4251 shellAddSchemaName, 0, 0); 4252 } 4253 } 4254 4255 #if HAVE_READLINE || HAVE_EDITLINE 4256 /* 4257 ** Readline completion callbacks 4258 */ 4259 static char *readline_completion_generator(const char *text, int state){ 4260 static sqlite3_stmt *pStmt = 0; 4261 char *zRet; 4262 if( state==0 ){ 4263 char *zSql; 4264 sqlite3_finalize(pStmt); 4265 zSql = sqlite3_mprintf("SELECT DISTINCT candidate COLLATE nocase" 4266 " FROM completion(%Q) ORDER BY 1", text); 4267 sqlite3_prepare_v2(globalDb, zSql, -1, &pStmt, 0); 4268 sqlite3_free(zSql); 4269 } 4270 if( sqlite3_step(pStmt)==SQLITE_ROW ){ 4271 zRet = strdup((const char*)sqlite3_column_text(pStmt, 0)); 4272 }else{ 4273 sqlite3_finalize(pStmt); 4274 pStmt = 0; 4275 zRet = 0; 4276 } 4277 return zRet; 4278 } 4279 static char **readline_completion(const char *zText, int iStart, int iEnd){ 4280 rl_attempted_completion_over = 1; 4281 return rl_completion_matches(zText, readline_completion_generator); 4282 } 4283 4284 #elif HAVE_LINENOISE 4285 /* 4286 ** Linenoise completion callback 4287 */ 4288 static void linenoise_completion(const char *zLine, linenoiseCompletions *lc){ 4289 int nLine = (int)strlen(zLine); 4290 int i, iStart; 4291 sqlite3_stmt *pStmt = 0; 4292 char *zSql; 4293 char zBuf[1000]; 4294 4295 if( nLine>sizeof(zBuf)-30 ) return; 4296 if( zLine[0]=='.' ) return; 4297 for(i=nLine-1; i>=0 && (isalnum(zLine[i]) || zLine[i]=='_'); i--){} 4298 if( i==nLine-1 ) return; 4299 iStart = i+1; 4300 memcpy(zBuf, zLine, iStart); 4301 zSql = sqlite3_mprintf("SELECT DISTINCT candidate COLLATE nocase" 4302 " FROM completion(%Q,%Q) ORDER BY 1", 4303 &zLine[iStart], zLine); 4304 sqlite3_prepare_v2(globalDb, zSql, -1, &pStmt, 0); 4305 sqlite3_free(zSql); 4306 sqlite3_exec(globalDb, "PRAGMA page_count", 0, 0, 0); /* Load the schema */ 4307 while( sqlite3_step(pStmt)==SQLITE_ROW ){ 4308 const char *zCompletion = (const char*)sqlite3_column_text(pStmt, 0); 4309 int nCompletion = sqlite3_column_bytes(pStmt, 0); 4310 if( iStart+nCompletion < sizeof(zBuf)-1 ){ 4311 memcpy(zBuf+iStart, zCompletion, nCompletion+1); 4312 linenoiseAddCompletion(lc, zBuf); 4313 } 4314 } 4315 sqlite3_finalize(pStmt); 4316 } 4317 #endif 4318 4319 /* 4320 ** Do C-language style dequoting. 4321 ** 4322 ** \a -> alarm 4323 ** \b -> backspace 4324 ** \t -> tab 4325 ** \n -> newline 4326 ** \v -> vertical tab 4327 ** \f -> form feed 4328 ** \r -> carriage return 4329 ** \s -> space 4330 ** \" -> " 4331 ** \' -> ' 4332 ** \\ -> backslash 4333 ** \NNN -> ascii character NNN in octal 4334 */ 4335 static void resolve_backslashes(char *z){ 4336 int i, j; 4337 char c; 4338 while( *z && *z!='\\' ) z++; 4339 for(i=j=0; (c = z[i])!=0; i++, j++){ 4340 if( c=='\\' && z[i+1]!=0 ){ 4341 c = z[++i]; 4342 if( c=='a' ){ 4343 c = '\a'; 4344 }else if( c=='b' ){ 4345 c = '\b'; 4346 }else if( c=='t' ){ 4347 c = '\t'; 4348 }else if( c=='n' ){ 4349 c = '\n'; 4350 }else if( c=='v' ){ 4351 c = '\v'; 4352 }else if( c=='f' ){ 4353 c = '\f'; 4354 }else if( c=='r' ){ 4355 c = '\r'; 4356 }else if( c=='"' ){ 4357 c = '"'; 4358 }else if( c=='\'' ){ 4359 c = '\''; 4360 }else if( c=='\\' ){ 4361 c = '\\'; 4362 }else if( c>='0' && c<='7' ){ 4363 c -= '0'; 4364 if( z[i+1]>='0' && z[i+1]<='7' ){ 4365 i++; 4366 c = (c<<3) + z[i] - '0'; 4367 if( z[i+1]>='0' && z[i+1]<='7' ){ 4368 i++; 4369 c = (c<<3) + z[i] - '0'; 4370 } 4371 } 4372 } 4373 } 4374 z[j] = c; 4375 } 4376 if( j<i ) z[j] = 0; 4377 } 4378 4379 /* 4380 ** Return the value of a hexadecimal digit. Return -1 if the input 4381 ** is not a hex digit. 4382 */ 4383 static int hexDigitValue(char c){ 4384 if( c>='0' && c<='9' ) return c - '0'; 4385 if( c>='a' && c<='f' ) return c - 'a' + 10; 4386 if( c>='A' && c<='F' ) return c - 'A' + 10; 4387 return -1; 4388 } 4389 4390 /* 4391 ** Interpret zArg as an integer value, possibly with suffixes. 4392 */ 4393 static sqlite3_int64 integerValue(const char *zArg){ 4394 sqlite3_int64 v = 0; 4395 static const struct { char *zSuffix; int iMult; } aMult[] = { 4396 { "KiB", 1024 }, 4397 { "MiB", 1024*1024 }, 4398 { "GiB", 1024*1024*1024 }, 4399 { "KB", 1000 }, 4400 { "MB", 1000000 }, 4401 { "GB", 1000000000 }, 4402 { "K", 1000 }, 4403 { "M", 1000000 }, 4404 { "G", 1000000000 }, 4405 }; 4406 int i; 4407 int isNeg = 0; 4408 if( zArg[0]=='-' ){ 4409 isNeg = 1; 4410 zArg++; 4411 }else if( zArg[0]=='+' ){ 4412 zArg++; 4413 } 4414 if( zArg[0]=='0' && zArg[1]=='x' ){ 4415 int x; 4416 zArg += 2; 4417 while( (x = hexDigitValue(zArg[0]))>=0 ){ 4418 v = (v<<4) + x; 4419 zArg++; 4420 } 4421 }else{ 4422 while( IsDigit(zArg[0]) ){ 4423 v = v*10 + zArg[0] - '0'; 4424 zArg++; 4425 } 4426 } 4427 for(i=0; i<ArraySize(aMult); i++){ 4428 if( sqlite3_stricmp(aMult[i].zSuffix, zArg)==0 ){ 4429 v *= aMult[i].iMult; 4430 break; 4431 } 4432 } 4433 return isNeg? -v : v; 4434 } 4435 4436 /* 4437 ** Interpret zArg as either an integer or a boolean value. Return 1 or 0 4438 ** for TRUE and FALSE. Return the integer value if appropriate. 4439 */ 4440 static int booleanValue(const char *zArg){ 4441 int i; 4442 if( zArg[0]=='0' && zArg[1]=='x' ){ 4443 for(i=2; hexDigitValue(zArg[i])>=0; i++){} 4444 }else{ 4445 for(i=0; zArg[i]>='0' && zArg[i]<='9'; i++){} 4446 } 4447 if( i>0 && zArg[i]==0 ) return (int)(integerValue(zArg) & 0xffffffff); 4448 if( sqlite3_stricmp(zArg, "on")==0 || sqlite3_stricmp(zArg,"yes")==0 ){ 4449 return 1; 4450 } 4451 if( sqlite3_stricmp(zArg, "off")==0 || sqlite3_stricmp(zArg,"no")==0 ){ 4452 return 0; 4453 } 4454 utf8_printf(stderr, "ERROR: Not a boolean value: \"%s\". Assuming \"no\".\n", 4455 zArg); 4456 return 0; 4457 } 4458 4459 /* 4460 ** Set or clear a shell flag according to a boolean value. 4461 */ 4462 static void setOrClearFlag(ShellState *p, unsigned mFlag, const char *zArg){ 4463 if( booleanValue(zArg) ){ 4464 ShellSetFlag(p, mFlag); 4465 }else{ 4466 ShellClearFlag(p, mFlag); 4467 } 4468 } 4469 4470 /* 4471 ** Close an output file, assuming it is not stderr or stdout 4472 */ 4473 static void output_file_close(FILE *f){ 4474 if( f && f!=stdout && f!=stderr ) fclose(f); 4475 } 4476 4477 /* 4478 ** Try to open an output file. The names "stdout" and "stderr" are 4479 ** recognized and do the right thing. NULL is returned if the output 4480 ** filename is "off". 4481 */ 4482 static FILE *output_file_open(const char *zFile){ 4483 FILE *f; 4484 if( strcmp(zFile,"stdout")==0 ){ 4485 f = stdout; 4486 }else if( strcmp(zFile, "stderr")==0 ){ 4487 f = stderr; 4488 }else if( strcmp(zFile, "off")==0 ){ 4489 f = 0; 4490 }else{ 4491 f = fopen(zFile, "wb"); 4492 if( f==0 ){ 4493 utf8_printf(stderr, "Error: cannot open \"%s\"\n", zFile); 4494 } 4495 } 4496 return f; 4497 } 4498 4499 #if !defined(SQLITE_UNTESTABLE) 4500 #if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT) 4501 /* 4502 ** A routine for handling output from sqlite3_trace(). 4503 */ 4504 static int sql_trace_callback( 4505 unsigned mType, 4506 void *pArg, 4507 void *pP, 4508 void *pX 4509 ){ 4510 FILE *f = (FILE*)pArg; 4511 UNUSED_PARAMETER(mType); 4512 UNUSED_PARAMETER(pP); 4513 if( f ){ 4514 const char *z = (const char*)pX; 4515 int i = (int)strlen(z); 4516 while( i>0 && z[i-1]==';' ){ i--; } 4517 utf8_printf(f, "%.*s;\n", i, z); 4518 } 4519 return 0; 4520 } 4521 #endif 4522 #endif 4523 4524 /* 4525 ** A no-op routine that runs with the ".breakpoint" doc-command. This is 4526 ** a useful spot to set a debugger breakpoint. 4527 */ 4528 static void test_breakpoint(void){ 4529 static int nCall = 0; 4530 nCall++; 4531 } 4532 4533 /* 4534 ** An object used to read a CSV and other files for import. 4535 */ 4536 typedef struct ImportCtx ImportCtx; 4537 struct ImportCtx { 4538 const char *zFile; /* Name of the input file */ 4539 FILE *in; /* Read the CSV text from this input stream */ 4540 char *z; /* Accumulated text for a field */ 4541 int n; /* Number of bytes in z */ 4542 int nAlloc; /* Space allocated for z[] */ 4543 int nLine; /* Current line number */ 4544 int bNotFirst; /* True if one or more bytes already read */ 4545 int cTerm; /* Character that terminated the most recent field */ 4546 int cColSep; /* The column separator character. (Usually ",") */ 4547 int cRowSep; /* The row separator character. (Usually "\n") */ 4548 }; 4549 4550 /* Append a single byte to z[] */ 4551 static void import_append_char(ImportCtx *p, int c){ 4552 if( p->n+1>=p->nAlloc ){ 4553 p->nAlloc += p->nAlloc + 100; 4554 p->z = sqlite3_realloc64(p->z, p->nAlloc); 4555 if( p->z==0 ){ 4556 raw_printf(stderr, "out of memory\n"); 4557 exit(1); 4558 } 4559 } 4560 p->z[p->n++] = (char)c; 4561 } 4562 4563 /* Read a single field of CSV text. Compatible with rfc4180 and extended 4564 ** with the option of having a separator other than ",". 4565 ** 4566 ** + Input comes from p->in. 4567 ** + Store results in p->z of length p->n. Space to hold p->z comes 4568 ** from sqlite3_malloc64(). 4569 ** + Use p->cSep as the column separator. The default is ",". 4570 ** + Use p->rSep as the row separator. The default is "\n". 4571 ** + Keep track of the line number in p->nLine. 4572 ** + Store the character that terminates the field in p->cTerm. Store 4573 ** EOF on end-of-file. 4574 ** + Report syntax errors on stderr 4575 */ 4576 static char *SQLITE_CDECL csv_read_one_field(ImportCtx *p){ 4577 int c; 4578 int cSep = p->cColSep; 4579 int rSep = p->cRowSep; 4580 p->n = 0; 4581 c = fgetc(p->in); 4582 if( c==EOF || seenInterrupt ){ 4583 p->cTerm = EOF; 4584 return 0; 4585 } 4586 if( c=='"' ){ 4587 int pc, ppc; 4588 int startLine = p->nLine; 4589 int cQuote = c; 4590 pc = ppc = 0; 4591 while( 1 ){ 4592 c = fgetc(p->in); 4593 if( c==rSep ) p->nLine++; 4594 if( c==cQuote ){ 4595 if( pc==cQuote ){ 4596 pc = 0; 4597 continue; 4598 } 4599 } 4600 if( (c==cSep && pc==cQuote) 4601 || (c==rSep && pc==cQuote) 4602 || (c==rSep && pc=='\r' && ppc==cQuote) 4603 || (c==EOF && pc==cQuote) 4604 ){ 4605 do{ p->n--; }while( p->z[p->n]!=cQuote ); 4606 p->cTerm = c; 4607 break; 4608 } 4609 if( pc==cQuote && c!='\r' ){ 4610 utf8_printf(stderr, "%s:%d: unescaped %c character\n", 4611 p->zFile, p->nLine, cQuote); 4612 } 4613 if( c==EOF ){ 4614 utf8_printf(stderr, "%s:%d: unterminated %c-quoted field\n", 4615 p->zFile, startLine, cQuote); 4616 p->cTerm = c; 4617 break; 4618 } 4619 import_append_char(p, c); 4620 ppc = pc; 4621 pc = c; 4622 } 4623 }else{ 4624 /* If this is the first field being parsed and it begins with the 4625 ** UTF-8 BOM (0xEF BB BF) then skip the BOM */ 4626 if( (c&0xff)==0xef && p->bNotFirst==0 ){ 4627 import_append_char(p, c); 4628 c = fgetc(p->in); 4629 if( (c&0xff)==0xbb ){ 4630 import_append_char(p, c); 4631 c = fgetc(p->in); 4632 if( (c&0xff)==0xbf ){ 4633 p->bNotFirst = 1; 4634 p->n = 0; 4635 return csv_read_one_field(p); 4636 } 4637 } 4638 } 4639 while( c!=EOF && c!=cSep && c!=rSep ){ 4640 import_append_char(p, c); 4641 c = fgetc(p->in); 4642 } 4643 if( c==rSep ){ 4644 p->nLine++; 4645 if( p->n>0 && p->z[p->n-1]=='\r' ) p->n--; 4646 } 4647 p->cTerm = c; 4648 } 4649 if( p->z ) p->z[p->n] = 0; 4650 p->bNotFirst = 1; 4651 return p->z; 4652 } 4653 4654 /* Read a single field of ASCII delimited text. 4655 ** 4656 ** + Input comes from p->in. 4657 ** + Store results in p->z of length p->n. Space to hold p->z comes 4658 ** from sqlite3_malloc64(). 4659 ** + Use p->cSep as the column separator. The default is "\x1F". 4660 ** + Use p->rSep as the row separator. The default is "\x1E". 4661 ** + Keep track of the row number in p->nLine. 4662 ** + Store the character that terminates the field in p->cTerm. Store 4663 ** EOF on end-of-file. 4664 ** + Report syntax errors on stderr 4665 */ 4666 static char *SQLITE_CDECL ascii_read_one_field(ImportCtx *p){ 4667 int c; 4668 int cSep = p->cColSep; 4669 int rSep = p->cRowSep; 4670 p->n = 0; 4671 c = fgetc(p->in); 4672 if( c==EOF || seenInterrupt ){ 4673 p->cTerm = EOF; 4674 return 0; 4675 } 4676 while( c!=EOF && c!=cSep && c!=rSep ){ 4677 import_append_char(p, c); 4678 c = fgetc(p->in); 4679 } 4680 if( c==rSep ){ 4681 p->nLine++; 4682 } 4683 p->cTerm = c; 4684 if( p->z ) p->z[p->n] = 0; 4685 return p->z; 4686 } 4687 4688 /* 4689 ** Try to transfer data for table zTable. If an error is seen while 4690 ** moving forward, try to go backwards. The backwards movement won't 4691 ** work for WITHOUT ROWID tables. 4692 */ 4693 static void tryToCloneData( 4694 ShellState *p, 4695 sqlite3 *newDb, 4696 const char *zTable 4697 ){ 4698 sqlite3_stmt *pQuery = 0; 4699 sqlite3_stmt *pInsert = 0; 4700 char *zQuery = 0; 4701 char *zInsert = 0; 4702 int rc; 4703 int i, j, n; 4704 int nTable = (int)strlen(zTable); 4705 int k = 0; 4706 int cnt = 0; 4707 const int spinRate = 10000; 4708 4709 zQuery = sqlite3_mprintf("SELECT * FROM \"%w\"", zTable); 4710 rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0); 4711 if( rc ){ 4712 utf8_printf(stderr, "Error %d: %s on [%s]\n", 4713 sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db), 4714 zQuery); 4715 goto end_data_xfer; 4716 } 4717 n = sqlite3_column_count(pQuery); 4718 zInsert = sqlite3_malloc64(200 + nTable + n*3); 4719 if( zInsert==0 ){ 4720 raw_printf(stderr, "out of memory\n"); 4721 goto end_data_xfer; 4722 } 4723 sqlite3_snprintf(200+nTable,zInsert, 4724 "INSERT OR IGNORE INTO \"%s\" VALUES(?", zTable); 4725 i = (int)strlen(zInsert); 4726 for(j=1; j<n; j++){ 4727 memcpy(zInsert+i, ",?", 2); 4728 i += 2; 4729 } 4730 memcpy(zInsert+i, ");", 3); 4731 rc = sqlite3_prepare_v2(newDb, zInsert, -1, &pInsert, 0); 4732 if( rc ){ 4733 utf8_printf(stderr, "Error %d: %s on [%s]\n", 4734 sqlite3_extended_errcode(newDb), sqlite3_errmsg(newDb), 4735 zQuery); 4736 goto end_data_xfer; 4737 } 4738 for(k=0; k<2; k++){ 4739 while( (rc = sqlite3_step(pQuery))==SQLITE_ROW ){ 4740 for(i=0; i<n; i++){ 4741 switch( sqlite3_column_type(pQuery, i) ){ 4742 case SQLITE_NULL: { 4743 sqlite3_bind_null(pInsert, i+1); 4744 break; 4745 } 4746 case SQLITE_INTEGER: { 4747 sqlite3_bind_int64(pInsert, i+1, sqlite3_column_int64(pQuery,i)); 4748 break; 4749 } 4750 case SQLITE_FLOAT: { 4751 sqlite3_bind_double(pInsert, i+1, sqlite3_column_double(pQuery,i)); 4752 break; 4753 } 4754 case SQLITE_TEXT: { 4755 sqlite3_bind_text(pInsert, i+1, 4756 (const char*)sqlite3_column_text(pQuery,i), 4757 -1, SQLITE_STATIC); 4758 break; 4759 } 4760 case SQLITE_BLOB: { 4761 sqlite3_bind_blob(pInsert, i+1, sqlite3_column_blob(pQuery,i), 4762 sqlite3_column_bytes(pQuery,i), 4763 SQLITE_STATIC); 4764 break; 4765 } 4766 } 4767 } /* End for */ 4768 rc = sqlite3_step(pInsert); 4769 if( rc!=SQLITE_OK && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){ 4770 utf8_printf(stderr, "Error %d: %s\n", sqlite3_extended_errcode(newDb), 4771 sqlite3_errmsg(newDb)); 4772 } 4773 sqlite3_reset(pInsert); 4774 cnt++; 4775 if( (cnt%spinRate)==0 ){ 4776 printf("%c\b", "|/-\\"[(cnt/spinRate)%4]); 4777 fflush(stdout); 4778 } 4779 } /* End while */ 4780 if( rc==SQLITE_DONE ) break; 4781 sqlite3_finalize(pQuery); 4782 sqlite3_free(zQuery); 4783 zQuery = sqlite3_mprintf("SELECT * FROM \"%w\" ORDER BY rowid DESC;", 4784 zTable); 4785 rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0); 4786 if( rc ){ 4787 utf8_printf(stderr, "Warning: cannot step \"%s\" backwards", zTable); 4788 break; 4789 } 4790 } /* End for(k=0...) */ 4791 4792 end_data_xfer: 4793 sqlite3_finalize(pQuery); 4794 sqlite3_finalize(pInsert); 4795 sqlite3_free(zQuery); 4796 sqlite3_free(zInsert); 4797 } 4798 4799 4800 /* 4801 ** Try to transfer all rows of the schema that match zWhere. For 4802 ** each row, invoke xForEach() on the object defined by that row. 4803 ** If an error is encountered while moving forward through the 4804 ** sqlite_master table, try again moving backwards. 4805 */ 4806 static void tryToCloneSchema( 4807 ShellState *p, 4808 sqlite3 *newDb, 4809 const char *zWhere, 4810 void (*xForEach)(ShellState*,sqlite3*,const char*) 4811 ){ 4812 sqlite3_stmt *pQuery = 0; 4813 char *zQuery = 0; 4814 int rc; 4815 const unsigned char *zName; 4816 const unsigned char *zSql; 4817 char *zErrMsg = 0; 4818 4819 zQuery = sqlite3_mprintf("SELECT name, sql FROM sqlite_master" 4820 " WHERE %s", zWhere); 4821 rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0); 4822 if( rc ){ 4823 utf8_printf(stderr, "Error: (%d) %s on [%s]\n", 4824 sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db), 4825 zQuery); 4826 goto end_schema_xfer; 4827 } 4828 while( (rc = sqlite3_step(pQuery))==SQLITE_ROW ){ 4829 zName = sqlite3_column_text(pQuery, 0); 4830 zSql = sqlite3_column_text(pQuery, 1); 4831 printf("%s... ", zName); fflush(stdout); 4832 sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg); 4833 if( zErrMsg ){ 4834 utf8_printf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql); 4835 sqlite3_free(zErrMsg); 4836 zErrMsg = 0; 4837 } 4838 if( xForEach ){ 4839 xForEach(p, newDb, (const char*)zName); 4840 } 4841 printf("done\n"); 4842 } 4843 if( rc!=SQLITE_DONE ){ 4844 sqlite3_finalize(pQuery); 4845 sqlite3_free(zQuery); 4846 zQuery = sqlite3_mprintf("SELECT name, sql FROM sqlite_master" 4847 " WHERE %s ORDER BY rowid DESC", zWhere); 4848 rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0); 4849 if( rc ){ 4850 utf8_printf(stderr, "Error: (%d) %s on [%s]\n", 4851 sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db), 4852 zQuery); 4853 goto end_schema_xfer; 4854 } 4855 while( (rc = sqlite3_step(pQuery))==SQLITE_ROW ){ 4856 zName = sqlite3_column_text(pQuery, 0); 4857 zSql = sqlite3_column_text(pQuery, 1); 4858 printf("%s... ", zName); fflush(stdout); 4859 sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg); 4860 if( zErrMsg ){ 4861 utf8_printf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql); 4862 sqlite3_free(zErrMsg); 4863 zErrMsg = 0; 4864 } 4865 if( xForEach ){ 4866 xForEach(p, newDb, (const char*)zName); 4867 } 4868 printf("done\n"); 4869 } 4870 } 4871 end_schema_xfer: 4872 sqlite3_finalize(pQuery); 4873 sqlite3_free(zQuery); 4874 } 4875 4876 /* 4877 ** Open a new database file named "zNewDb". Try to recover as much information 4878 ** as possible out of the main database (which might be corrupt) and write it 4879 ** into zNewDb. 4880 */ 4881 static void tryToClone(ShellState *p, const char *zNewDb){ 4882 int rc; 4883 sqlite3 *newDb = 0; 4884 if( access(zNewDb,0)==0 ){ 4885 utf8_printf(stderr, "File \"%s\" already exists.\n", zNewDb); 4886 return; 4887 } 4888 rc = sqlite3_open(zNewDb, &newDb); 4889 if( rc ){ 4890 utf8_printf(stderr, "Cannot create output database: %s\n", 4891 sqlite3_errmsg(newDb)); 4892 }else{ 4893 sqlite3_exec(p->db, "PRAGMA writable_schema=ON;", 0, 0, 0); 4894 sqlite3_exec(newDb, "BEGIN EXCLUSIVE;", 0, 0, 0); 4895 tryToCloneSchema(p, newDb, "type='table'", tryToCloneData); 4896 tryToCloneSchema(p, newDb, "type!='table'", 0); 4897 sqlite3_exec(newDb, "COMMIT;", 0, 0, 0); 4898 sqlite3_exec(p->db, "PRAGMA writable_schema=OFF;", 0, 0, 0); 4899 } 4900 sqlite3_close(newDb); 4901 } 4902 4903 /* 4904 ** Change the output file back to stdout 4905 */ 4906 static void output_reset(ShellState *p){ 4907 if( p->outfile[0]=='|' ){ 4908 #ifndef SQLITE_OMIT_POPEN 4909 pclose(p->out); 4910 #endif 4911 }else{ 4912 output_file_close(p->out); 4913 } 4914 p->outfile[0] = 0; 4915 p->out = stdout; 4916 } 4917 4918 /* 4919 ** Run an SQL command and return the single integer result. 4920 */ 4921 static int db_int(ShellState *p, const char *zSql){ 4922 sqlite3_stmt *pStmt; 4923 int res = 0; 4924 sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); 4925 if( pStmt && sqlite3_step(pStmt)==SQLITE_ROW ){ 4926 res = sqlite3_column_int(pStmt,0); 4927 } 4928 sqlite3_finalize(pStmt); 4929 return res; 4930 } 4931 4932 /* 4933 ** Convert a 2-byte or 4-byte big-endian integer into a native integer 4934 */ 4935 static unsigned int get2byteInt(unsigned char *a){ 4936 return (a[0]<<8) + a[1]; 4937 } 4938 static unsigned int get4byteInt(unsigned char *a){ 4939 return (a[0]<<24) + (a[1]<<16) + (a[2]<<8) + a[3]; 4940 } 4941 4942 /* 4943 ** Implementation of the ".info" command. 4944 ** 4945 ** Return 1 on error, 2 to exit, and 0 otherwise. 4946 */ 4947 static int shell_dbinfo_command(ShellState *p, int nArg, char **azArg){ 4948 static const struct { const char *zName; int ofst; } aField[] = { 4949 { "file change counter:", 24 }, 4950 { "database page count:", 28 }, 4951 { "freelist page count:", 36 }, 4952 { "schema cookie:", 40 }, 4953 { "schema format:", 44 }, 4954 { "default cache size:", 48 }, 4955 { "autovacuum top root:", 52 }, 4956 { "incremental vacuum:", 64 }, 4957 { "text encoding:", 56 }, 4958 { "user version:", 60 }, 4959 { "application id:", 68 }, 4960 { "software version:", 96 }, 4961 }; 4962 static const struct { const char *zName; const char *zSql; } aQuery[] = { 4963 { "number of tables:", 4964 "SELECT count(*) FROM %s WHERE type='table'" }, 4965 { "number of indexes:", 4966 "SELECT count(*) FROM %s WHERE type='index'" }, 4967 { "number of triggers:", 4968 "SELECT count(*) FROM %s WHERE type='trigger'" }, 4969 { "number of views:", 4970 "SELECT count(*) FROM %s WHERE type='view'" }, 4971 { "schema size:", 4972 "SELECT total(length(sql)) FROM %s" }, 4973 }; 4974 int i; 4975 char *zSchemaTab; 4976 char *zDb = nArg>=2 ? azArg[1] : "main"; 4977 sqlite3_stmt *pStmt = 0; 4978 unsigned char aHdr[100]; 4979 open_db(p, 0); 4980 if( p->db==0 ) return 1; 4981 sqlite3_prepare_v2(p->db,"SELECT data FROM sqlite_dbpage(?1) WHERE pgno=1", 4982 -1, &pStmt, 0); 4983 sqlite3_bind_text(pStmt, 1, zDb, -1, SQLITE_STATIC); 4984 if( sqlite3_step(pStmt)==SQLITE_ROW 4985 && sqlite3_column_bytes(pStmt,0)>100 4986 ){ 4987 memcpy(aHdr, sqlite3_column_blob(pStmt,0), 100); 4988 sqlite3_finalize(pStmt); 4989 }else{ 4990 raw_printf(stderr, "unable to read database header\n"); 4991 sqlite3_finalize(pStmt); 4992 return 1; 4993 } 4994 i = get2byteInt(aHdr+16); 4995 if( i==1 ) i = 65536; 4996 utf8_printf(p->out, "%-20s %d\n", "database page size:", i); 4997 utf8_printf(p->out, "%-20s %d\n", "write format:", aHdr[18]); 4998 utf8_printf(p->out, "%-20s %d\n", "read format:", aHdr[19]); 4999 utf8_printf(p->out, "%-20s %d\n", "reserved bytes:", aHdr[20]); 5000 for(i=0; i<ArraySize(aField); i++){ 5001 int ofst = aField[i].ofst; 5002 unsigned int val = get4byteInt(aHdr + ofst); 5003 utf8_printf(p->out, "%-20s %u", aField[i].zName, val); 5004 switch( ofst ){ 5005 case 56: { 5006 if( val==1 ) raw_printf(p->out, " (utf8)"); 5007 if( val==2 ) raw_printf(p->out, " (utf16le)"); 5008 if( val==3 ) raw_printf(p->out, " (utf16be)"); 5009 } 5010 } 5011 raw_printf(p->out, "\n"); 5012 } 5013 if( zDb==0 ){ 5014 zSchemaTab = sqlite3_mprintf("main.sqlite_master"); 5015 }else if( strcmp(zDb,"temp")==0 ){ 5016 zSchemaTab = sqlite3_mprintf("%s", "sqlite_temp_master"); 5017 }else{ 5018 zSchemaTab = sqlite3_mprintf("\"%w\".sqlite_master", zDb); 5019 } 5020 for(i=0; i<ArraySize(aQuery); i++){ 5021 char *zSql = sqlite3_mprintf(aQuery[i].zSql, zSchemaTab); 5022 int val = db_int(p, zSql); 5023 sqlite3_free(zSql); 5024 utf8_printf(p->out, "%-20s %d\n", aQuery[i].zName, val); 5025 } 5026 sqlite3_free(zSchemaTab); 5027 return 0; 5028 } 5029 5030 /* 5031 ** Print the current sqlite3_errmsg() value to stderr and return 1. 5032 */ 5033 static int shellDatabaseError(sqlite3 *db){ 5034 const char *zErr = sqlite3_errmsg(db); 5035 utf8_printf(stderr, "Error: %s\n", zErr); 5036 return 1; 5037 } 5038 5039 /* 5040 ** Print an out-of-memory message to stderr and return 1. 5041 */ 5042 static int shellNomemError(void){ 5043 raw_printf(stderr, "Error: out of memory\n"); 5044 return 1; 5045 } 5046 5047 /* 5048 ** Compare the pattern in zGlob[] against the text in z[]. Return TRUE 5049 ** if they match and FALSE (0) if they do not match. 5050 ** 5051 ** Globbing rules: 5052 ** 5053 ** '*' Matches any sequence of zero or more characters. 5054 ** 5055 ** '?' Matches exactly one character. 5056 ** 5057 ** [...] Matches one character from the enclosed list of 5058 ** characters. 5059 ** 5060 ** [^...] Matches one character not in the enclosed list. 5061 ** 5062 ** '#' Matches any sequence of one or more digits with an 5063 ** optional + or - sign in front 5064 ** 5065 ** ' ' Any span of whitespace matches any other span of 5066 ** whitespace. 5067 ** 5068 ** Extra whitespace at the end of z[] is ignored. 5069 */ 5070 static int testcase_glob(const char *zGlob, const char *z){ 5071 int c, c2; 5072 int invert; 5073 int seen; 5074 5075 while( (c = (*(zGlob++)))!=0 ){ 5076 if( IsSpace(c) ){ 5077 if( !IsSpace(*z) ) return 0; 5078 while( IsSpace(*zGlob) ) zGlob++; 5079 while( IsSpace(*z) ) z++; 5080 }else if( c=='*' ){ 5081 while( (c=(*(zGlob++))) == '*' || c=='?' ){ 5082 if( c=='?' && (*(z++))==0 ) return 0; 5083 } 5084 if( c==0 ){ 5085 return 1; 5086 }else if( c=='[' ){ 5087 while( *z && testcase_glob(zGlob-1,z)==0 ){ 5088 z++; 5089 } 5090 return (*z)!=0; 5091 } 5092 while( (c2 = (*(z++)))!=0 ){ 5093 while( c2!=c ){ 5094 c2 = *(z++); 5095 if( c2==0 ) return 0; 5096 } 5097 if( testcase_glob(zGlob,z) ) return 1; 5098 } 5099 return 0; 5100 }else if( c=='?' ){ 5101 if( (*(z++))==0 ) return 0; 5102 }else if( c=='[' ){ 5103 int prior_c = 0; 5104 seen = 0; 5105 invert = 0; 5106 c = *(z++); 5107 if( c==0 ) return 0; 5108 c2 = *(zGlob++); 5109 if( c2=='^' ){ 5110 invert = 1; 5111 c2 = *(zGlob++); 5112 } 5113 if( c2==']' ){ 5114 if( c==']' ) seen = 1; 5115 c2 = *(zGlob++); 5116 } 5117 while( c2 && c2!=']' ){ 5118 if( c2=='-' && zGlob[0]!=']' && zGlob[0]!=0 && prior_c>0 ){ 5119 c2 = *(zGlob++); 5120 if( c>=prior_c && c<=c2 ) seen = 1; 5121 prior_c = 0; 5122 }else{ 5123 if( c==c2 ){ 5124 seen = 1; 5125 } 5126 prior_c = c2; 5127 } 5128 c2 = *(zGlob++); 5129 } 5130 if( c2==0 || (seen ^ invert)==0 ) return 0; 5131 }else if( c=='#' ){ 5132 if( (z[0]=='-' || z[0]=='+') && IsDigit(z[1]) ) z++; 5133 if( !IsDigit(z[0]) ) return 0; 5134 z++; 5135 while( IsDigit(z[0]) ){ z++; } 5136 }else{ 5137 if( c!=(*(z++)) ) return 0; 5138 } 5139 } 5140 while( IsSpace(*z) ){ z++; } 5141 return *z==0; 5142 } 5143 5144 5145 /* 5146 ** Compare the string as a command-line option with either one or two 5147 ** initial "-" characters. 5148 */ 5149 static int optionMatch(const char *zStr, const char *zOpt){ 5150 if( zStr[0]!='-' ) return 0; 5151 zStr++; 5152 if( zStr[0]=='-' ) zStr++; 5153 return strcmp(zStr, zOpt)==0; 5154 } 5155 5156 /* 5157 ** Delete a file. 5158 */ 5159 int shellDeleteFile(const char *zFilename){ 5160 int rc; 5161 #ifdef _WIN32 5162 wchar_t *z = sqlite3_win32_utf8_to_unicode(zFilename); 5163 rc = _wunlink(z); 5164 sqlite3_free(z); 5165 #else 5166 rc = unlink(zFilename); 5167 #endif 5168 return rc; 5169 } 5170 5171 5172 /* 5173 ** The implementation of SQL scalar function fkey_collate_clause(), used 5174 ** by the ".lint fkey-indexes" command. This scalar function is always 5175 ** called with four arguments - the parent table name, the parent column name, 5176 ** the child table name and the child column name. 5177 ** 5178 ** fkey_collate_clause('parent-tab', 'parent-col', 'child-tab', 'child-col') 5179 ** 5180 ** If either of the named tables or columns do not exist, this function 5181 ** returns an empty string. An empty string is also returned if both tables 5182 ** and columns exist but have the same default collation sequence. Or, 5183 ** if both exist but the default collation sequences are different, this 5184 ** function returns the string " COLLATE <parent-collation>", where 5185 ** <parent-collation> is the default collation sequence of the parent column. 5186 */ 5187 static void shellFkeyCollateClause( 5188 sqlite3_context *pCtx, 5189 int nVal, 5190 sqlite3_value **apVal 5191 ){ 5192 sqlite3 *db = sqlite3_context_db_handle(pCtx); 5193 const char *zParent; 5194 const char *zParentCol; 5195 const char *zParentSeq; 5196 const char *zChild; 5197 const char *zChildCol; 5198 const char *zChildSeq = 0; /* Initialize to avoid false-positive warning */ 5199 int rc; 5200 5201 assert( nVal==4 ); 5202 zParent = (const char*)sqlite3_value_text(apVal[0]); 5203 zParentCol = (const char*)sqlite3_value_text(apVal[1]); 5204 zChild = (const char*)sqlite3_value_text(apVal[2]); 5205 zChildCol = (const char*)sqlite3_value_text(apVal[3]); 5206 5207 sqlite3_result_text(pCtx, "", -1, SQLITE_STATIC); 5208 rc = sqlite3_table_column_metadata( 5209 db, "main", zParent, zParentCol, 0, &zParentSeq, 0, 0, 0 5210 ); 5211 if( rc==SQLITE_OK ){ 5212 rc = sqlite3_table_column_metadata( 5213 db, "main", zChild, zChildCol, 0, &zChildSeq, 0, 0, 0 5214 ); 5215 } 5216 5217 if( rc==SQLITE_OK && sqlite3_stricmp(zParentSeq, zChildSeq) ){ 5218 char *z = sqlite3_mprintf(" COLLATE %s", zParentSeq); 5219 sqlite3_result_text(pCtx, z, -1, SQLITE_TRANSIENT); 5220 sqlite3_free(z); 5221 } 5222 } 5223 5224 5225 /* 5226 ** The implementation of dot-command ".lint fkey-indexes". 5227 */ 5228 static int lintFkeyIndexes( 5229 ShellState *pState, /* Current shell tool state */ 5230 char **azArg, /* Array of arguments passed to dot command */ 5231 int nArg /* Number of entries in azArg[] */ 5232 ){ 5233 sqlite3 *db = pState->db; /* Database handle to query "main" db of */ 5234 FILE *out = pState->out; /* Stream to write non-error output to */ 5235 int bVerbose = 0; /* If -verbose is present */ 5236 int bGroupByParent = 0; /* If -groupbyparent is present */ 5237 int i; /* To iterate through azArg[] */ 5238 const char *zIndent = ""; /* How much to indent CREATE INDEX by */ 5239 int rc; /* Return code */ 5240 sqlite3_stmt *pSql = 0; /* Compiled version of SQL statement below */ 5241 5242 /* 5243 ** This SELECT statement returns one row for each foreign key constraint 5244 ** in the schema of the main database. The column values are: 5245 ** 5246 ** 0. The text of an SQL statement similar to: 5247 ** 5248 ** "EXPLAIN QUERY PLAN SELECT rowid FROM child_table WHERE child_key=?" 5249 ** 5250 ** This is the same SELECT that the foreign keys implementation needs 5251 ** to run internally on child tables. If there is an index that can 5252 ** be used to optimize this query, then it can also be used by the FK 5253 ** implementation to optimize DELETE or UPDATE statements on the parent 5254 ** table. 5255 ** 5256 ** 1. A GLOB pattern suitable for sqlite3_strglob(). If the plan output by 5257 ** the EXPLAIN QUERY PLAN command matches this pattern, then the schema 5258 ** contains an index that can be used to optimize the query. 5259 ** 5260 ** 2. Human readable text that describes the child table and columns. e.g. 5261 ** 5262 ** "child_table(child_key1, child_key2)" 5263 ** 5264 ** 3. Human readable text that describes the parent table and columns. e.g. 5265 ** 5266 ** "parent_table(parent_key1, parent_key2)" 5267 ** 5268 ** 4. A full CREATE INDEX statement for an index that could be used to 5269 ** optimize DELETE or UPDATE statements on the parent table. e.g. 5270 ** 5271 ** "CREATE INDEX child_table_child_key ON child_table(child_key)" 5272 ** 5273 ** 5. The name of the parent table. 5274 ** 5275 ** These six values are used by the C logic below to generate the report. 5276 */ 5277 const char *zSql = 5278 "SELECT " 5279 " 'EXPLAIN QUERY PLAN SELECT rowid FROM ' || quote(s.name) || ' WHERE '" 5280 " || group_concat(quote(s.name) || '.' || quote(f.[from]) || '=?' " 5281 " || fkey_collate_clause(" 5282 " f.[table], COALESCE(f.[to], p.[name]), s.name, f.[from]),' AND ')" 5283 ", " 5284 " 'SEARCH TABLE ' || s.name || ' USING COVERING INDEX*('" 5285 " || group_concat('*=?', ' AND ') || ')'" 5286 ", " 5287 " s.name || '(' || group_concat(f.[from], ', ') || ')'" 5288 ", " 5289 " f.[table] || '(' || group_concat(COALESCE(f.[to], p.[name])) || ')'" 5290 ", " 5291 " 'CREATE INDEX ' || quote(s.name ||'_'|| group_concat(f.[from], '_'))" 5292 " || ' ON ' || quote(s.name) || '('" 5293 " || group_concat(quote(f.[from]) ||" 5294 " fkey_collate_clause(" 5295 " f.[table], COALESCE(f.[to], p.[name]), s.name, f.[from]), ', ')" 5296 " || ');'" 5297 ", " 5298 " f.[table] " 5299 "FROM sqlite_master AS s, pragma_foreign_key_list(s.name) AS f " 5300 "LEFT JOIN pragma_table_info AS p ON (pk-1=seq AND p.arg=f.[table]) " 5301 "GROUP BY s.name, f.id " 5302 "ORDER BY (CASE WHEN ? THEN f.[table] ELSE s.name END)" 5303 ; 5304 const char *zGlobIPK = "SEARCH TABLE * USING INTEGER PRIMARY KEY (rowid=?)"; 5305 5306 for(i=2; i<nArg; i++){ 5307 int n = (int)strlen(azArg[i]); 5308 if( n>1 && sqlite3_strnicmp("-verbose", azArg[i], n)==0 ){ 5309 bVerbose = 1; 5310 } 5311 else if( n>1 && sqlite3_strnicmp("-groupbyparent", azArg[i], n)==0 ){ 5312 bGroupByParent = 1; 5313 zIndent = " "; 5314 } 5315 else{ 5316 raw_printf(stderr, "Usage: %s %s ?-verbose? ?-groupbyparent?\n", 5317 azArg[0], azArg[1] 5318 ); 5319 return SQLITE_ERROR; 5320 } 5321 } 5322 5323 /* Register the fkey_collate_clause() SQL function */ 5324 rc = sqlite3_create_function(db, "fkey_collate_clause", 4, SQLITE_UTF8, 5325 0, shellFkeyCollateClause, 0, 0 5326 ); 5327 5328 5329 if( rc==SQLITE_OK ){ 5330 rc = sqlite3_prepare_v2(db, zSql, -1, &pSql, 0); 5331 } 5332 if( rc==SQLITE_OK ){ 5333 sqlite3_bind_int(pSql, 1, bGroupByParent); 5334 } 5335 5336 if( rc==SQLITE_OK ){ 5337 int rc2; 5338 char *zPrev = 0; 5339 while( SQLITE_ROW==sqlite3_step(pSql) ){ 5340 int res = -1; 5341 sqlite3_stmt *pExplain = 0; 5342 const char *zEQP = (const char*)sqlite3_column_text(pSql, 0); 5343 const char *zGlob = (const char*)sqlite3_column_text(pSql, 1); 5344 const char *zFrom = (const char*)sqlite3_column_text(pSql, 2); 5345 const char *zTarget = (const char*)sqlite3_column_text(pSql, 3); 5346 const char *zCI = (const char*)sqlite3_column_text(pSql, 4); 5347 const char *zParent = (const char*)sqlite3_column_text(pSql, 5); 5348 5349 rc = sqlite3_prepare_v2(db, zEQP, -1, &pExplain, 0); 5350 if( rc!=SQLITE_OK ) break; 5351 if( SQLITE_ROW==sqlite3_step(pExplain) ){ 5352 const char *zPlan = (const char*)sqlite3_column_text(pExplain, 3); 5353 res = ( 5354 0==sqlite3_strglob(zGlob, zPlan) 5355 || 0==sqlite3_strglob(zGlobIPK, zPlan) 5356 ); 5357 } 5358 rc = sqlite3_finalize(pExplain); 5359 if( rc!=SQLITE_OK ) break; 5360 5361 if( res<0 ){ 5362 raw_printf(stderr, "Error: internal error"); 5363 break; 5364 }else{ 5365 if( bGroupByParent 5366 && (bVerbose || res==0) 5367 && (zPrev==0 || sqlite3_stricmp(zParent, zPrev)) 5368 ){ 5369 raw_printf(out, "-- Parent table %s\n", zParent); 5370 sqlite3_free(zPrev); 5371 zPrev = sqlite3_mprintf("%s", zParent); 5372 } 5373 5374 if( res==0 ){ 5375 raw_printf(out, "%s%s --> %s\n", zIndent, zCI, zTarget); 5376 }else if( bVerbose ){ 5377 raw_printf(out, "%s/* no extra indexes required for %s -> %s */\n", 5378 zIndent, zFrom, zTarget 5379 ); 5380 } 5381 } 5382 } 5383 sqlite3_free(zPrev); 5384 5385 if( rc!=SQLITE_OK ){ 5386 raw_printf(stderr, "%s\n", sqlite3_errmsg(db)); 5387 } 5388 5389 rc2 = sqlite3_finalize(pSql); 5390 if( rc==SQLITE_OK && rc2!=SQLITE_OK ){ 5391 rc = rc2; 5392 raw_printf(stderr, "%s\n", sqlite3_errmsg(db)); 5393 } 5394 }else{ 5395 raw_printf(stderr, "%s\n", sqlite3_errmsg(db)); 5396 } 5397 5398 return rc; 5399 } 5400 5401 /* 5402 ** Implementation of ".lint" dot command. 5403 */ 5404 static int lintDotCommand( 5405 ShellState *pState, /* Current shell tool state */ 5406 char **azArg, /* Array of arguments passed to dot command */ 5407 int nArg /* Number of entries in azArg[] */ 5408 ){ 5409 int n; 5410 n = (nArg>=2 ? (int)strlen(azArg[1]) : 0); 5411 if( n<1 || sqlite3_strnicmp(azArg[1], "fkey-indexes", n) ) goto usage; 5412 return lintFkeyIndexes(pState, azArg, nArg); 5413 5414 usage: 5415 raw_printf(stderr, "Usage %s sub-command ?switches...?\n", azArg[0]); 5416 raw_printf(stderr, "Where sub-commands are:\n"); 5417 raw_printf(stderr, " fkey-indexes\n"); 5418 return SQLITE_ERROR; 5419 } 5420 5421 5422 /* 5423 ** If an input line begins with "." then invoke this routine to 5424 ** process that line. 5425 ** 5426 ** Return 1 on error, 2 to exit, and 0 otherwise. 5427 */ 5428 static int do_meta_command(char *zLine, ShellState *p){ 5429 int h = 1; 5430 int nArg = 0; 5431 int n, c; 5432 int rc = 0; 5433 char *azArg[50]; 5434 5435 /* Parse the input line into tokens. 5436 */ 5437 while( zLine[h] && nArg<ArraySize(azArg) ){ 5438 while( IsSpace(zLine[h]) ){ h++; } 5439 if( zLine[h]==0 ) break; 5440 if( zLine[h]=='\'' || zLine[h]=='"' ){ 5441 int delim = zLine[h++]; 5442 azArg[nArg++] = &zLine[h]; 5443 while( zLine[h] && zLine[h]!=delim ){ 5444 if( zLine[h]=='\\' && delim=='"' && zLine[h+1]!=0 ) h++; 5445 h++; 5446 } 5447 if( zLine[h]==delim ){ 5448 zLine[h++] = 0; 5449 } 5450 if( delim=='"' ) resolve_backslashes(azArg[nArg-1]); 5451 }else{ 5452 azArg[nArg++] = &zLine[h]; 5453 while( zLine[h] && !IsSpace(zLine[h]) ){ h++; } 5454 if( zLine[h] ) zLine[h++] = 0; 5455 resolve_backslashes(azArg[nArg-1]); 5456 } 5457 } 5458 5459 /* Process the input line. 5460 */ 5461 if( nArg==0 ) return 0; /* no tokens, no error */ 5462 n = strlen30(azArg[0]); 5463 c = azArg[0][0]; 5464 5465 #ifndef SQLITE_OMIT_AUTHORIZATION 5466 if( c=='a' && strncmp(azArg[0], "auth", n)==0 ){ 5467 if( nArg!=2 ){ 5468 raw_printf(stderr, "Usage: .auth ON|OFF\n"); 5469 rc = 1; 5470 goto meta_command_exit; 5471 } 5472 open_db(p, 0); 5473 if( booleanValue(azArg[1]) ){ 5474 sqlite3_set_authorizer(p->db, shellAuth, p); 5475 }else{ 5476 sqlite3_set_authorizer(p->db, 0, 0); 5477 } 5478 }else 5479 #endif 5480 5481 if( (c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0) 5482 || (c=='s' && n>=3 && strncmp(azArg[0], "save", n)==0) 5483 ){ 5484 const char *zDestFile = 0; 5485 const char *zDb = 0; 5486 sqlite3 *pDest; 5487 sqlite3_backup *pBackup; 5488 int j; 5489 for(j=1; j<nArg; j++){ 5490 const char *z = azArg[j]; 5491 if( z[0]=='-' ){ 5492 while( z[0]=='-' ) z++; 5493 /* No options to process at this time */ 5494 { 5495 utf8_printf(stderr, "unknown option: %s\n", azArg[j]); 5496 return 1; 5497 } 5498 }else if( zDestFile==0 ){ 5499 zDestFile = azArg[j]; 5500 }else if( zDb==0 ){ 5501 zDb = zDestFile; 5502 zDestFile = azArg[j]; 5503 }else{ 5504 raw_printf(stderr, "too many arguments to .backup\n"); 5505 return 1; 5506 } 5507 } 5508 if( zDestFile==0 ){ 5509 raw_printf(stderr, "missing FILENAME argument on .backup\n"); 5510 return 1; 5511 } 5512 if( zDb==0 ) zDb = "main"; 5513 rc = sqlite3_open(zDestFile, &pDest); 5514 if( rc!=SQLITE_OK ){ 5515 utf8_printf(stderr, "Error: cannot open \"%s\"\n", zDestFile); 5516 sqlite3_close(pDest); 5517 return 1; 5518 } 5519 open_db(p, 0); 5520 pBackup = sqlite3_backup_init(pDest, "main", p->db, zDb); 5521 if( pBackup==0 ){ 5522 utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); 5523 sqlite3_close(pDest); 5524 return 1; 5525 } 5526 while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK ){} 5527 sqlite3_backup_finish(pBackup); 5528 if( rc==SQLITE_DONE ){ 5529 rc = 0; 5530 }else{ 5531 utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); 5532 rc = 1; 5533 } 5534 sqlite3_close(pDest); 5535 }else 5536 5537 if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 ){ 5538 if( nArg==2 ){ 5539 bail_on_error = booleanValue(azArg[1]); 5540 }else{ 5541 raw_printf(stderr, "Usage: .bail on|off\n"); 5542 rc = 1; 5543 } 5544 }else 5545 5546 if( c=='b' && n>=3 && strncmp(azArg[0], "binary", n)==0 ){ 5547 if( nArg==2 ){ 5548 if( booleanValue(azArg[1]) ){ 5549 setBinaryMode(p->out, 1); 5550 }else{ 5551 setTextMode(p->out, 1); 5552 } 5553 }else{ 5554 raw_printf(stderr, "Usage: .binary on|off\n"); 5555 rc = 1; 5556 } 5557 }else 5558 5559 if( c=='c' && strcmp(azArg[0],"cd")==0 ){ 5560 if( nArg==2 ){ 5561 #if defined(_WIN32) || defined(WIN32) 5562 wchar_t *z = sqlite3_win32_utf8_to_unicode(azArg[1]); 5563 rc = !SetCurrentDirectoryW(z); 5564 sqlite3_free(z); 5565 #else 5566 rc = chdir(azArg[1]); 5567 #endif 5568 if( rc ){ 5569 utf8_printf(stderr, "Cannot change to directory \"%s\"\n", azArg[1]); 5570 rc = 1; 5571 } 5572 }else{ 5573 raw_printf(stderr, "Usage: .cd DIRECTORY\n"); 5574 rc = 1; 5575 } 5576 }else 5577 5578 /* The undocumented ".breakpoint" command causes a call to the no-op 5579 ** routine named test_breakpoint(). 5580 */ 5581 if( c=='b' && n>=3 && strncmp(azArg[0], "breakpoint", n)==0 ){ 5582 test_breakpoint(); 5583 }else 5584 5585 if( c=='c' && n>=3 && strncmp(azArg[0], "changes", n)==0 ){ 5586 if( nArg==2 ){ 5587 setOrClearFlag(p, SHFLG_CountChanges, azArg[1]); 5588 }else{ 5589 raw_printf(stderr, "Usage: .changes on|off\n"); 5590 rc = 1; 5591 } 5592 }else 5593 5594 /* Cancel output redirection, if it is currently set (by .testcase) 5595 ** Then read the content of the testcase-out.txt file and compare against 5596 ** azArg[1]. If there are differences, report an error and exit. 5597 */ 5598 if( c=='c' && n>=3 && strncmp(azArg[0], "check", n)==0 ){ 5599 char *zRes = 0; 5600 output_reset(p); 5601 if( nArg!=2 ){ 5602 raw_printf(stderr, "Usage: .check GLOB-PATTERN\n"); 5603 rc = 2; 5604 }else if( (zRes = readFile("testcase-out.txt", 0))==0 ){ 5605 raw_printf(stderr, "Error: cannot read 'testcase-out.txt'\n"); 5606 rc = 2; 5607 }else if( testcase_glob(azArg[1],zRes)==0 ){ 5608 utf8_printf(stderr, 5609 "testcase-%s FAILED\n Expected: [%s]\n Got: [%s]\n", 5610 p->zTestcase, azArg[1], zRes); 5611 rc = 1; 5612 }else{ 5613 utf8_printf(stdout, "testcase-%s ok\n", p->zTestcase); 5614 p->nCheck++; 5615 } 5616 sqlite3_free(zRes); 5617 }else 5618 5619 if( c=='c' && strncmp(azArg[0], "clone", n)==0 ){ 5620 if( nArg==2 ){ 5621 tryToClone(p, azArg[1]); 5622 }else{ 5623 raw_printf(stderr, "Usage: .clone FILENAME\n"); 5624 rc = 1; 5625 } 5626 }else 5627 5628 if( c=='d' && n>1 && strncmp(azArg[0], "databases", n)==0 ){ 5629 ShellState data; 5630 char *zErrMsg = 0; 5631 open_db(p, 0); 5632 memcpy(&data, p, sizeof(data)); 5633 data.showHeader = 0; 5634 data.cMode = data.mode = MODE_List; 5635 sqlite3_snprintf(sizeof(data.colSeparator),data.colSeparator,": "); 5636 data.cnt = 0; 5637 sqlite3_exec(p->db, "SELECT name, file FROM pragma_database_list", 5638 callback, &data, &zErrMsg); 5639 if( zErrMsg ){ 5640 utf8_printf(stderr,"Error: %s\n", zErrMsg); 5641 sqlite3_free(zErrMsg); 5642 rc = 1; 5643 } 5644 }else 5645 5646 if( c=='d' && strncmp(azArg[0], "dbinfo", n)==0 ){ 5647 rc = shell_dbinfo_command(p, nArg, azArg); 5648 }else 5649 5650 if( c=='d' && strncmp(azArg[0], "dump", n)==0 ){ 5651 const char *zLike = 0; 5652 int i; 5653 int savedShowHeader = p->showHeader; 5654 ShellClearFlag(p, SHFLG_PreserveRowid|SHFLG_Newlines); 5655 for(i=1; i<nArg; i++){ 5656 if( azArg[i][0]=='-' ){ 5657 const char *z = azArg[i]+1; 5658 if( z[0]=='-' ) z++; 5659 if( strcmp(z,"preserve-rowids")==0 ){ 5660 #ifdef SQLITE_OMIT_VIRTUALTABLE 5661 raw_printf(stderr, "The --preserve-rowids option is not compatible" 5662 " with SQLITE_OMIT_VIRTUALTABLE\n"); 5663 rc = 1; 5664 goto meta_command_exit; 5665 #else 5666 ShellSetFlag(p, SHFLG_PreserveRowid); 5667 #endif 5668 }else 5669 if( strcmp(z,"newlines")==0 ){ 5670 ShellSetFlag(p, SHFLG_Newlines); 5671 }else 5672 { 5673 raw_printf(stderr, "Unknown option \"%s\" on \".dump\"\n", azArg[i]); 5674 rc = 1; 5675 goto meta_command_exit; 5676 } 5677 }else if( zLike ){ 5678 raw_printf(stderr, "Usage: .dump ?--preserve-rowids? " 5679 "?--newlines? ?LIKE-PATTERN?\n"); 5680 rc = 1; 5681 goto meta_command_exit; 5682 }else{ 5683 zLike = azArg[i]; 5684 } 5685 } 5686 open_db(p, 0); 5687 /* When playing back a "dump", the content might appear in an order 5688 ** which causes immediate foreign key constraints to be violated. 5689 ** So disable foreign-key constraint enforcement to prevent problems. */ 5690 raw_printf(p->out, "PRAGMA foreign_keys=OFF;\n"); 5691 raw_printf(p->out, "BEGIN TRANSACTION;\n"); 5692 p->writableSchema = 0; 5693 p->showHeader = 0; 5694 /* Set writable_schema=ON since doing so forces SQLite to initialize 5695 ** as much of the schema as it can even if the sqlite_master table is 5696 ** corrupt. */ 5697 sqlite3_exec(p->db, "SAVEPOINT dump; PRAGMA writable_schema=ON", 0, 0, 0); 5698 p->nErr = 0; 5699 if( zLike==0 ){ 5700 run_schema_dump_query(p, 5701 "SELECT name, type, sql FROM sqlite_master " 5702 "WHERE sql NOT NULL AND type=='table' AND name!='sqlite_sequence'" 5703 ); 5704 run_schema_dump_query(p, 5705 "SELECT name, type, sql FROM sqlite_master " 5706 "WHERE name=='sqlite_sequence'" 5707 ); 5708 run_table_dump_query(p, 5709 "SELECT sql FROM sqlite_master " 5710 "WHERE sql NOT NULL AND type IN ('index','trigger','view')", 0 5711 ); 5712 }else{ 5713 char *zSql; 5714 zSql = sqlite3_mprintf( 5715 "SELECT name, type, sql FROM sqlite_master " 5716 "WHERE tbl_name LIKE %Q AND type=='table'" 5717 " AND sql NOT NULL", zLike); 5718 run_schema_dump_query(p,zSql); 5719 sqlite3_free(zSql); 5720 zSql = sqlite3_mprintf( 5721 "SELECT sql FROM sqlite_master " 5722 "WHERE sql NOT NULL" 5723 " AND type IN ('index','trigger','view')" 5724 " AND tbl_name LIKE %Q", zLike); 5725 run_table_dump_query(p, zSql, 0); 5726 sqlite3_free(zSql); 5727 } 5728 if( p->writableSchema ){ 5729 raw_printf(p->out, "PRAGMA writable_schema=OFF;\n"); 5730 p->writableSchema = 0; 5731 } 5732 sqlite3_exec(p->db, "PRAGMA writable_schema=OFF;", 0, 0, 0); 5733 sqlite3_exec(p->db, "RELEASE dump;", 0, 0, 0); 5734 raw_printf(p->out, p->nErr ? "ROLLBACK; -- due to errors\n" : "COMMIT;\n"); 5735 p->showHeader = savedShowHeader; 5736 }else 5737 5738 if( c=='e' && strncmp(azArg[0], "echo", n)==0 ){ 5739 if( nArg==2 ){ 5740 setOrClearFlag(p, SHFLG_Echo, azArg[1]); 5741 }else{ 5742 raw_printf(stderr, "Usage: .echo on|off\n"); 5743 rc = 1; 5744 } 5745 }else 5746 5747 if( c=='e' && strncmp(azArg[0], "eqp", n)==0 ){ 5748 if( nArg==2 ){ 5749 if( strcmp(azArg[1],"full")==0 ){ 5750 p->autoEQP = 2; 5751 }else{ 5752 p->autoEQP = booleanValue(azArg[1]); 5753 } 5754 }else{ 5755 raw_printf(stderr, "Usage: .eqp on|off|full\n"); 5756 rc = 1; 5757 } 5758 }else 5759 5760 if( c=='e' && strncmp(azArg[0], "exit", n)==0 ){ 5761 if( nArg>1 && (rc = (int)integerValue(azArg[1]))!=0 ) exit(rc); 5762 rc = 2; 5763 }else 5764 5765 /* The ".explain" command is automatic now. It is largely pointless. It 5766 ** retained purely for backwards compatibility */ 5767 if( c=='e' && strncmp(azArg[0], "explain", n)==0 ){ 5768 int val = 1; 5769 if( nArg>=2 ){ 5770 if( strcmp(azArg[1],"auto")==0 ){ 5771 val = 99; 5772 }else{ 5773 val = booleanValue(azArg[1]); 5774 } 5775 } 5776 if( val==1 && p->mode!=MODE_Explain ){ 5777 p->normalMode = p->mode; 5778 p->mode = MODE_Explain; 5779 p->autoExplain = 0; 5780 }else if( val==0 ){ 5781 if( p->mode==MODE_Explain ) p->mode = p->normalMode; 5782 p->autoExplain = 0; 5783 }else if( val==99 ){ 5784 if( p->mode==MODE_Explain ) p->mode = p->normalMode; 5785 p->autoExplain = 1; 5786 } 5787 }else 5788 5789 if( c=='f' && strncmp(azArg[0], "fullschema", n)==0 ){ 5790 ShellState data; 5791 char *zErrMsg = 0; 5792 int doStats = 0; 5793 memcpy(&data, p, sizeof(data)); 5794 data.showHeader = 0; 5795 data.cMode = data.mode = MODE_Semi; 5796 if( nArg==2 && optionMatch(azArg[1], "indent") ){ 5797 data.cMode = data.mode = MODE_Pretty; 5798 nArg = 1; 5799 } 5800 if( nArg!=1 ){ 5801 raw_printf(stderr, "Usage: .fullschema ?--indent?\n"); 5802 rc = 1; 5803 goto meta_command_exit; 5804 } 5805 open_db(p, 0); 5806 rc = sqlite3_exec(p->db, 5807 "SELECT sql FROM" 5808 " (SELECT sql sql, type type, tbl_name tbl_name, name name, rowid x" 5809 " FROM sqlite_master UNION ALL" 5810 " SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) " 5811 "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%' " 5812 "ORDER BY rowid", 5813 callback, &data, &zErrMsg 5814 ); 5815 if( rc==SQLITE_OK ){ 5816 sqlite3_stmt *pStmt; 5817 rc = sqlite3_prepare_v2(p->db, 5818 "SELECT rowid FROM sqlite_master" 5819 " WHERE name GLOB 'sqlite_stat[134]'", 5820 -1, &pStmt, 0); 5821 doStats = sqlite3_step(pStmt)==SQLITE_ROW; 5822 sqlite3_finalize(pStmt); 5823 } 5824 if( doStats==0 ){ 5825 raw_printf(p->out, "/* No STAT tables available */\n"); 5826 }else{ 5827 raw_printf(p->out, "ANALYZE sqlite_master;\n"); 5828 sqlite3_exec(p->db, "SELECT 'ANALYZE sqlite_master'", 5829 callback, &data, &zErrMsg); 5830 data.cMode = data.mode = MODE_Insert; 5831 data.zDestTable = "sqlite_stat1"; 5832 shell_exec(p->db, "SELECT * FROM sqlite_stat1", 5833 shell_callback, &data,&zErrMsg); 5834 data.zDestTable = "sqlite_stat3"; 5835 shell_exec(p->db, "SELECT * FROM sqlite_stat3", 5836 shell_callback, &data,&zErrMsg); 5837 data.zDestTable = "sqlite_stat4"; 5838 shell_exec(p->db, "SELECT * FROM sqlite_stat4", 5839 shell_callback, &data, &zErrMsg); 5840 raw_printf(p->out, "ANALYZE sqlite_master;\n"); 5841 } 5842 }else 5843 5844 if( c=='h' && strncmp(azArg[0], "headers", n)==0 ){ 5845 if( nArg==2 ){ 5846 p->showHeader = booleanValue(azArg[1]); 5847 }else{ 5848 raw_printf(stderr, "Usage: .headers on|off\n"); 5849 rc = 1; 5850 } 5851 }else 5852 5853 if( c=='h' && strncmp(azArg[0], "help", n)==0 ){ 5854 utf8_printf(p->out, "%s", zHelp); 5855 }else 5856 5857 if( c=='i' && strncmp(azArg[0], "import", n)==0 ){ 5858 char *zTable; /* Insert data into this table */ 5859 char *zFile; /* Name of file to extra content from */ 5860 sqlite3_stmt *pStmt = NULL; /* A statement */ 5861 int nCol; /* Number of columns in the table */ 5862 int nByte; /* Number of bytes in an SQL string */ 5863 int i, j; /* Loop counters */ 5864 int needCommit; /* True to COMMIT or ROLLBACK at end */ 5865 int nSep; /* Number of bytes in p->colSeparator[] */ 5866 char *zSql; /* An SQL statement */ 5867 ImportCtx sCtx; /* Reader context */ 5868 char *(SQLITE_CDECL *xRead)(ImportCtx*); /* Func to read one value */ 5869 int (SQLITE_CDECL *xCloser)(FILE*); /* Func to close file */ 5870 5871 if( nArg!=3 ){ 5872 raw_printf(stderr, "Usage: .import FILE TABLE\n"); 5873 goto meta_command_exit; 5874 } 5875 zFile = azArg[1]; 5876 zTable = azArg[2]; 5877 seenInterrupt = 0; 5878 memset(&sCtx, 0, sizeof(sCtx)); 5879 open_db(p, 0); 5880 nSep = strlen30(p->colSeparator); 5881 if( nSep==0 ){ 5882 raw_printf(stderr, 5883 "Error: non-null column separator required for import\n"); 5884 return 1; 5885 } 5886 if( nSep>1 ){ 5887 raw_printf(stderr, "Error: multi-character column separators not allowed" 5888 " for import\n"); 5889 return 1; 5890 } 5891 nSep = strlen30(p->rowSeparator); 5892 if( nSep==0 ){ 5893 raw_printf(stderr, "Error: non-null row separator required for import\n"); 5894 return 1; 5895 } 5896 if( nSep==2 && p->mode==MODE_Csv && strcmp(p->rowSeparator, SEP_CrLf)==0 ){ 5897 /* When importing CSV (only), if the row separator is set to the 5898 ** default output row separator, change it to the default input 5899 ** row separator. This avoids having to maintain different input 5900 ** and output row separators. */ 5901 sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Row); 5902 nSep = strlen30(p->rowSeparator); 5903 } 5904 if( nSep>1 ){ 5905 raw_printf(stderr, "Error: multi-character row separators not allowed" 5906 " for import\n"); 5907 return 1; 5908 } 5909 sCtx.zFile = zFile; 5910 sCtx.nLine = 1; 5911 if( sCtx.zFile[0]=='|' ){ 5912 #ifdef SQLITE_OMIT_POPEN 5913 raw_printf(stderr, "Error: pipes are not supported in this OS\n"); 5914 return 1; 5915 #else 5916 sCtx.in = popen(sCtx.zFile+1, "r"); 5917 sCtx.zFile = "<pipe>"; 5918 xCloser = pclose; 5919 #endif 5920 }else{ 5921 sCtx.in = fopen(sCtx.zFile, "rb"); 5922 xCloser = fclose; 5923 } 5924 if( p->mode==MODE_Ascii ){ 5925 xRead = ascii_read_one_field; 5926 }else{ 5927 xRead = csv_read_one_field; 5928 } 5929 if( sCtx.in==0 ){ 5930 utf8_printf(stderr, "Error: cannot open \"%s\"\n", zFile); 5931 return 1; 5932 } 5933 sCtx.cColSep = p->colSeparator[0]; 5934 sCtx.cRowSep = p->rowSeparator[0]; 5935 zSql = sqlite3_mprintf("SELECT * FROM %s", zTable); 5936 if( zSql==0 ){ 5937 raw_printf(stderr, "Error: out of memory\n"); 5938 xCloser(sCtx.in); 5939 return 1; 5940 } 5941 nByte = strlen30(zSql); 5942 rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); 5943 import_append_char(&sCtx, 0); /* To ensure sCtx.z is allocated */ 5944 if( rc && sqlite3_strglob("no such table: *", sqlite3_errmsg(p->db))==0 ){ 5945 char *zCreate = sqlite3_mprintf("CREATE TABLE %s", zTable); 5946 char cSep = '('; 5947 while( xRead(&sCtx) ){ 5948 zCreate = sqlite3_mprintf("%z%c\n \"%w\" TEXT", zCreate, cSep, sCtx.z); 5949 cSep = ','; 5950 if( sCtx.cTerm!=sCtx.cColSep ) break; 5951 } 5952 if( cSep=='(' ){ 5953 sqlite3_free(zCreate); 5954 sqlite3_free(sCtx.z); 5955 xCloser(sCtx.in); 5956 utf8_printf(stderr,"%s: empty file\n", sCtx.zFile); 5957 return 1; 5958 } 5959 zCreate = sqlite3_mprintf("%z\n)", zCreate); 5960 rc = sqlite3_exec(p->db, zCreate, 0, 0, 0); 5961 sqlite3_free(zCreate); 5962 if( rc ){ 5963 utf8_printf(stderr, "CREATE TABLE %s(...) failed: %s\n", zTable, 5964 sqlite3_errmsg(p->db)); 5965 sqlite3_free(sCtx.z); 5966 xCloser(sCtx.in); 5967 return 1; 5968 } 5969 rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); 5970 } 5971 sqlite3_free(zSql); 5972 if( rc ){ 5973 if (pStmt) sqlite3_finalize(pStmt); 5974 utf8_printf(stderr,"Error: %s\n", sqlite3_errmsg(p->db)); 5975 xCloser(sCtx.in); 5976 return 1; 5977 } 5978 nCol = sqlite3_column_count(pStmt); 5979 sqlite3_finalize(pStmt); 5980 pStmt = 0; 5981 if( nCol==0 ) return 0; /* no columns, no error */ 5982 zSql = sqlite3_malloc64( nByte*2 + 20 + nCol*2 ); 5983 if( zSql==0 ){ 5984 raw_printf(stderr, "Error: out of memory\n"); 5985 xCloser(sCtx.in); 5986 return 1; 5987 } 5988 sqlite3_snprintf(nByte+20, zSql, "INSERT INTO \"%w\" VALUES(?", zTable); 5989 j = strlen30(zSql); 5990 for(i=1; i<nCol; i++){ 5991 zSql[j++] = ','; 5992 zSql[j++] = '?'; 5993 } 5994 zSql[j++] = ')'; 5995 zSql[j] = 0; 5996 rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); 5997 sqlite3_free(zSql); 5998 if( rc ){ 5999 utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); 6000 if (pStmt) sqlite3_finalize(pStmt); 6001 xCloser(sCtx.in); 6002 return 1; 6003 } 6004 needCommit = sqlite3_get_autocommit(p->db); 6005 if( needCommit ) sqlite3_exec(p->db, "BEGIN", 0, 0, 0); 6006 do{ 6007 int startLine = sCtx.nLine; 6008 for(i=0; i<nCol; i++){ 6009 char *z = xRead(&sCtx); 6010 /* 6011 ** Did we reach end-of-file before finding any columns? 6012 ** If so, stop instead of NULL filling the remaining columns. 6013 */ 6014 if( z==0 && i==0 ) break; 6015 /* 6016 ** Did we reach end-of-file OR end-of-line before finding any 6017 ** columns in ASCII mode? If so, stop instead of NULL filling 6018 ** the remaining columns. 6019 */ 6020 if( p->mode==MODE_Ascii && (z==0 || z[0]==0) && i==0 ) break; 6021 sqlite3_bind_text(pStmt, i+1, z, -1, SQLITE_TRANSIENT); 6022 if( i<nCol-1 && sCtx.cTerm!=sCtx.cColSep ){ 6023 utf8_printf(stderr, "%s:%d: expected %d columns but found %d - " 6024 "filling the rest with NULL\n", 6025 sCtx.zFile, startLine, nCol, i+1); 6026 i += 2; 6027 while( i<=nCol ){ sqlite3_bind_null(pStmt, i); i++; } 6028 } 6029 } 6030 if( sCtx.cTerm==sCtx.cColSep ){ 6031 do{ 6032 xRead(&sCtx); 6033 i++; 6034 }while( sCtx.cTerm==sCtx.cColSep ); 6035 utf8_printf(stderr, "%s:%d: expected %d columns but found %d - " 6036 "extras ignored\n", 6037 sCtx.zFile, startLine, nCol, i); 6038 } 6039 if( i>=nCol ){ 6040 sqlite3_step(pStmt); 6041 rc = sqlite3_reset(pStmt); 6042 if( rc!=SQLITE_OK ){ 6043 utf8_printf(stderr, "%s:%d: INSERT failed: %s\n", sCtx.zFile, 6044 startLine, sqlite3_errmsg(p->db)); 6045 } 6046 } 6047 }while( sCtx.cTerm!=EOF ); 6048 6049 xCloser(sCtx.in); 6050 sqlite3_free(sCtx.z); 6051 sqlite3_finalize(pStmt); 6052 if( needCommit ) sqlite3_exec(p->db, "COMMIT", 0, 0, 0); 6053 }else 6054 6055 #ifndef SQLITE_UNTESTABLE 6056 if( c=='i' && strncmp(azArg[0], "imposter", n)==0 ){ 6057 char *zSql; 6058 char *zCollist = 0; 6059 sqlite3_stmt *pStmt; 6060 int tnum = 0; 6061 int i; 6062 if( nArg!=3 ){ 6063 utf8_printf(stderr, "Usage: .imposter INDEX IMPOSTER\n"); 6064 rc = 1; 6065 goto meta_command_exit; 6066 } 6067 open_db(p, 0); 6068 zSql = sqlite3_mprintf("SELECT rootpage FROM sqlite_master" 6069 " WHERE name='%q' AND type='index'", azArg[1]); 6070 sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); 6071 sqlite3_free(zSql); 6072 if( sqlite3_step(pStmt)==SQLITE_ROW ){ 6073 tnum = sqlite3_column_int(pStmt, 0); 6074 } 6075 sqlite3_finalize(pStmt); 6076 if( tnum==0 ){ 6077 utf8_printf(stderr, "no such index: \"%s\"\n", azArg[1]); 6078 rc = 1; 6079 goto meta_command_exit; 6080 } 6081 zSql = sqlite3_mprintf("PRAGMA index_xinfo='%q'", azArg[1]); 6082 rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); 6083 sqlite3_free(zSql); 6084 i = 0; 6085 while( sqlite3_step(pStmt)==SQLITE_ROW ){ 6086 char zLabel[20]; 6087 const char *zCol = (const char*)sqlite3_column_text(pStmt,2); 6088 i++; 6089 if( zCol==0 ){ 6090 if( sqlite3_column_int(pStmt,1)==-1 ){ 6091 zCol = "_ROWID_"; 6092 }else{ 6093 sqlite3_snprintf(sizeof(zLabel),zLabel,"expr%d",i); 6094 zCol = zLabel; 6095 } 6096 } 6097 if( zCollist==0 ){ 6098 zCollist = sqlite3_mprintf("\"%w\"", zCol); 6099 }else{ 6100 zCollist = sqlite3_mprintf("%z,\"%w\"", zCollist, zCol); 6101 } 6102 } 6103 sqlite3_finalize(pStmt); 6104 zSql = sqlite3_mprintf( 6105 "CREATE TABLE \"%w\"(%s,PRIMARY KEY(%s))WITHOUT ROWID", 6106 azArg[2], zCollist, zCollist); 6107 sqlite3_free(zCollist); 6108 rc = sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->db, "main", 1, tnum); 6109 if( rc==SQLITE_OK ){ 6110 rc = sqlite3_exec(p->db, zSql, 0, 0, 0); 6111 sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->db, "main", 0, 0); 6112 if( rc ){ 6113 utf8_printf(stderr, "Error in [%s]: %s\n", zSql, sqlite3_errmsg(p->db)); 6114 }else{ 6115 utf8_printf(stdout, "%s;\n", zSql); 6116 raw_printf(stdout, 6117 "WARNING: writing to an imposter table will corrupt the index!\n" 6118 ); 6119 } 6120 }else{ 6121 raw_printf(stderr, "SQLITE_TESTCTRL_IMPOSTER returns %d\n", rc); 6122 rc = 1; 6123 } 6124 sqlite3_free(zSql); 6125 }else 6126 #endif /* !defined(SQLITE_OMIT_TEST_CONTROL) */ 6127 6128 #ifdef SQLITE_ENABLE_IOTRACE 6129 if( c=='i' && strncmp(azArg[0], "iotrace", n)==0 ){ 6130 SQLITE_API extern void (SQLITE_CDECL *sqlite3IoTrace)(const char*, ...); 6131 if( iotrace && iotrace!=stdout ) fclose(iotrace); 6132 iotrace = 0; 6133 if( nArg<2 ){ 6134 sqlite3IoTrace = 0; 6135 }else if( strcmp(azArg[1], "-")==0 ){ 6136 sqlite3IoTrace = iotracePrintf; 6137 iotrace = stdout; 6138 }else{ 6139 iotrace = fopen(azArg[1], "w"); 6140 if( iotrace==0 ){ 6141 utf8_printf(stderr, "Error: cannot open \"%s\"\n", azArg[1]); 6142 sqlite3IoTrace = 0; 6143 rc = 1; 6144 }else{ 6145 sqlite3IoTrace = iotracePrintf; 6146 } 6147 } 6148 }else 6149 #endif 6150 6151 if( c=='l' && n>=5 && strncmp(azArg[0], "limits", n)==0 ){ 6152 static const struct { 6153 const char *zLimitName; /* Name of a limit */ 6154 int limitCode; /* Integer code for that limit */ 6155 } aLimit[] = { 6156 { "length", SQLITE_LIMIT_LENGTH }, 6157 { "sql_length", SQLITE_LIMIT_SQL_LENGTH }, 6158 { "column", SQLITE_LIMIT_COLUMN }, 6159 { "expr_depth", SQLITE_LIMIT_EXPR_DEPTH }, 6160 { "compound_select", SQLITE_LIMIT_COMPOUND_SELECT }, 6161 { "vdbe_op", SQLITE_LIMIT_VDBE_OP }, 6162 { "function_arg", SQLITE_LIMIT_FUNCTION_ARG }, 6163 { "attached", SQLITE_LIMIT_ATTACHED }, 6164 { "like_pattern_length", SQLITE_LIMIT_LIKE_PATTERN_LENGTH }, 6165 { "variable_number", SQLITE_LIMIT_VARIABLE_NUMBER }, 6166 { "trigger_depth", SQLITE_LIMIT_TRIGGER_DEPTH }, 6167 { "worker_threads", SQLITE_LIMIT_WORKER_THREADS }, 6168 }; 6169 int i, n2; 6170 open_db(p, 0); 6171 if( nArg==1 ){ 6172 for(i=0; i<ArraySize(aLimit); i++){ 6173 printf("%20s %d\n", aLimit[i].zLimitName, 6174 sqlite3_limit(p->db, aLimit[i].limitCode, -1)); 6175 } 6176 }else if( nArg>3 ){ 6177 raw_printf(stderr, "Usage: .limit NAME ?NEW-VALUE?\n"); 6178 rc = 1; 6179 goto meta_command_exit; 6180 }else{ 6181 int iLimit = -1; 6182 n2 = strlen30(azArg[1]); 6183 for(i=0; i<ArraySize(aLimit); i++){ 6184 if( sqlite3_strnicmp(aLimit[i].zLimitName, azArg[1], n2)==0 ){ 6185 if( iLimit<0 ){ 6186 iLimit = i; 6187 }else{ 6188 utf8_printf(stderr, "ambiguous limit: \"%s\"\n", azArg[1]); 6189 rc = 1; 6190 goto meta_command_exit; 6191 } 6192 } 6193 } 6194 if( iLimit<0 ){ 6195 utf8_printf(stderr, "unknown limit: \"%s\"\n" 6196 "enter \".limits\" with no arguments for a list.\n", 6197 azArg[1]); 6198 rc = 1; 6199 goto meta_command_exit; 6200 } 6201 if( nArg==3 ){ 6202 sqlite3_limit(p->db, aLimit[iLimit].limitCode, 6203 (int)integerValue(azArg[2])); 6204 } 6205 printf("%20s %d\n", aLimit[iLimit].zLimitName, 6206 sqlite3_limit(p->db, aLimit[iLimit].limitCode, -1)); 6207 } 6208 }else 6209 6210 if( c=='l' && n>2 && strncmp(azArg[0], "lint", n)==0 ){ 6211 open_db(p, 0); 6212 lintDotCommand(p, azArg, nArg); 6213 }else 6214 6215 #ifndef SQLITE_OMIT_LOAD_EXTENSION 6216 if( c=='l' && strncmp(azArg[0], "load", n)==0 ){ 6217 const char *zFile, *zProc; 6218 char *zErrMsg = 0; 6219 if( nArg<2 ){ 6220 raw_printf(stderr, "Usage: .load FILE ?ENTRYPOINT?\n"); 6221 rc = 1; 6222 goto meta_command_exit; 6223 } 6224 zFile = azArg[1]; 6225 zProc = nArg>=3 ? azArg[2] : 0; 6226 open_db(p, 0); 6227 rc = sqlite3_load_extension(p->db, zFile, zProc, &zErrMsg); 6228 if( rc!=SQLITE_OK ){ 6229 utf8_printf(stderr, "Error: %s\n", zErrMsg); 6230 sqlite3_free(zErrMsg); 6231 rc = 1; 6232 } 6233 }else 6234 #endif 6235 6236 if( c=='l' && strncmp(azArg[0], "log", n)==0 ){ 6237 if( nArg!=2 ){ 6238 raw_printf(stderr, "Usage: .log FILENAME\n"); 6239 rc = 1; 6240 }else{ 6241 const char *zFile = azArg[1]; 6242 output_file_close(p->pLog); 6243 p->pLog = output_file_open(zFile); 6244 } 6245 }else 6246 6247 if( c=='m' && strncmp(azArg[0], "mode", n)==0 ){ 6248 const char *zMode = nArg>=2 ? azArg[1] : ""; 6249 int n2 = (int)strlen(zMode); 6250 int c2 = zMode[0]; 6251 if( c2=='l' && n2>2 && strncmp(azArg[1],"lines",n2)==0 ){ 6252 p->mode = MODE_Line; 6253 sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Row); 6254 }else if( c2=='c' && strncmp(azArg[1],"columns",n2)==0 ){ 6255 p->mode = MODE_Column; 6256 sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Row); 6257 }else if( c2=='l' && n2>2 && strncmp(azArg[1],"list",n2)==0 ){ 6258 p->mode = MODE_List; 6259 sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Column); 6260 sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Row); 6261 }else if( c2=='h' && strncmp(azArg[1],"html",n2)==0 ){ 6262 p->mode = MODE_Html; 6263 }else if( c2=='t' && strncmp(azArg[1],"tcl",n2)==0 ){ 6264 p->mode = MODE_Tcl; 6265 sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Space); 6266 sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Row); 6267 }else if( c2=='c' && strncmp(azArg[1],"csv",n2)==0 ){ 6268 p->mode = MODE_Csv; 6269 sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Comma); 6270 sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_CrLf); 6271 }else if( c2=='t' && strncmp(azArg[1],"tabs",n2)==0 ){ 6272 p->mode = MODE_List; 6273 sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Tab); 6274 }else if( c2=='i' && strncmp(azArg[1],"insert",n2)==0 ){ 6275 p->mode = MODE_Insert; 6276 set_table_name(p, nArg>=3 ? azArg[2] : "table"); 6277 }else if( c2=='q' && strncmp(azArg[1],"quote",n2)==0 ){ 6278 p->mode = MODE_Quote; 6279 }else if( c2=='a' && strncmp(azArg[1],"ascii",n2)==0 ){ 6280 p->mode = MODE_Ascii; 6281 sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Unit); 6282 sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Record); 6283 }else if( nArg==1 ){ 6284 raw_printf(p->out, "current output mode: %s\n", modeDescr[p->mode]); 6285 }else{ 6286 raw_printf(stderr, "Error: mode should be one of: " 6287 "ascii column csv html insert line list quote tabs tcl\n"); 6288 rc = 1; 6289 } 6290 p->cMode = p->mode; 6291 }else 6292 6293 if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 ){ 6294 if( nArg==2 ){ 6295 sqlite3_snprintf(sizeof(p->nullValue), p->nullValue, 6296 "%.*s", (int)ArraySize(p->nullValue)-1, azArg[1]); 6297 }else{ 6298 raw_printf(stderr, "Usage: .nullvalue STRING\n"); 6299 rc = 1; 6300 } 6301 }else 6302 6303 if( c=='o' && strncmp(azArg[0], "open", n)==0 && n>=2 ){ 6304 char *zNewFilename; /* Name of the database file to open */ 6305 int iName = 1; /* Index in azArg[] of the filename */ 6306 int newFlag = 0; /* True to delete file before opening */ 6307 /* Close the existing database */ 6308 session_close_all(p); 6309 sqlite3_close(p->db); 6310 p->db = 0; 6311 p->zDbFilename = 0; 6312 sqlite3_free(p->zFreeOnClose); 6313 p->zFreeOnClose = 0; 6314 /* Check for command-line arguments */ 6315 for(iName=1; iName<nArg && azArg[iName][0]=='-'; iName++){ 6316 const char *z = azArg[iName]; 6317 if( optionMatch(z,"new") ){ 6318 newFlag = 1; 6319 }else if( z[0]=='-' ){ 6320 utf8_printf(stderr, "unknown option: %s\n", z); 6321 rc = 1; 6322 goto meta_command_exit; 6323 } 6324 } 6325 /* If a filename is specified, try to open it first */ 6326 zNewFilename = nArg>iName ? sqlite3_mprintf("%s", azArg[iName]) : 0; 6327 if( zNewFilename ){ 6328 if( newFlag ) shellDeleteFile(zNewFilename); 6329 p->zDbFilename = zNewFilename; 6330 open_db(p, 1); 6331 if( p->db==0 ){ 6332 utf8_printf(stderr, "Error: cannot open '%s'\n", zNewFilename); 6333 sqlite3_free(zNewFilename); 6334 }else{ 6335 p->zFreeOnClose = zNewFilename; 6336 } 6337 } 6338 if( p->db==0 ){ 6339 /* As a fall-back open a TEMP database */ 6340 p->zDbFilename = 0; 6341 open_db(p, 0); 6342 } 6343 }else 6344 6345 if( c=='o' 6346 && (strncmp(azArg[0], "output", n)==0 || strncmp(azArg[0], "once", n)==0) 6347 ){ 6348 const char *zFile = nArg>=2 ? azArg[1] : "stdout"; 6349 if( nArg>2 ){ 6350 utf8_printf(stderr, "Usage: .%s FILE\n", azArg[0]); 6351 rc = 1; 6352 goto meta_command_exit; 6353 } 6354 if( n>1 && strncmp(azArg[0], "once", n)==0 ){ 6355 if( nArg<2 ){ 6356 raw_printf(stderr, "Usage: .once FILE\n"); 6357 rc = 1; 6358 goto meta_command_exit; 6359 } 6360 p->outCount = 2; 6361 }else{ 6362 p->outCount = 0; 6363 } 6364 output_reset(p); 6365 if( zFile[0]=='|' ){ 6366 #ifdef SQLITE_OMIT_POPEN 6367 raw_printf(stderr, "Error: pipes are not supported in this OS\n"); 6368 rc = 1; 6369 p->out = stdout; 6370 #else 6371 p->out = popen(zFile + 1, "w"); 6372 if( p->out==0 ){ 6373 utf8_printf(stderr,"Error: cannot open pipe \"%s\"\n", zFile + 1); 6374 p->out = stdout; 6375 rc = 1; 6376 }else{ 6377 sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile); 6378 } 6379 #endif 6380 }else{ 6381 p->out = output_file_open(zFile); 6382 if( p->out==0 ){ 6383 if( strcmp(zFile,"off")!=0 ){ 6384 utf8_printf(stderr,"Error: cannot write to \"%s\"\n", zFile); 6385 } 6386 p->out = stdout; 6387 rc = 1; 6388 } else { 6389 sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile); 6390 } 6391 } 6392 }else 6393 6394 if( c=='p' && n>=3 && strncmp(azArg[0], "print", n)==0 ){ 6395 int i; 6396 for(i=1; i<nArg; i++){ 6397 if( i>1 ) raw_printf(p->out, " "); 6398 utf8_printf(p->out, "%s", azArg[i]); 6399 } 6400 raw_printf(p->out, "\n"); 6401 }else 6402 6403 if( c=='p' && strncmp(azArg[0], "prompt", n)==0 ){ 6404 if( nArg >= 2) { 6405 strncpy(mainPrompt,azArg[1],(int)ArraySize(mainPrompt)-1); 6406 } 6407 if( nArg >= 3) { 6408 strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1); 6409 } 6410 }else 6411 6412 if( c=='q' && strncmp(azArg[0], "quit", n)==0 ){ 6413 rc = 2; 6414 }else 6415 6416 if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 ){ 6417 FILE *alt; 6418 if( nArg!=2 ){ 6419 raw_printf(stderr, "Usage: .read FILE\n"); 6420 rc = 1; 6421 goto meta_command_exit; 6422 } 6423 alt = fopen(azArg[1], "rb"); 6424 if( alt==0 ){ 6425 utf8_printf(stderr,"Error: cannot open \"%s\"\n", azArg[1]); 6426 rc = 1; 6427 }else{ 6428 rc = process_input(p, alt); 6429 fclose(alt); 6430 } 6431 }else 6432 6433 if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 ){ 6434 const char *zSrcFile; 6435 const char *zDb; 6436 sqlite3 *pSrc; 6437 sqlite3_backup *pBackup; 6438 int nTimeout = 0; 6439 6440 if( nArg==2 ){ 6441 zSrcFile = azArg[1]; 6442 zDb = "main"; 6443 }else if( nArg==3 ){ 6444 zSrcFile = azArg[2]; 6445 zDb = azArg[1]; 6446 }else{ 6447 raw_printf(stderr, "Usage: .restore ?DB? FILE\n"); 6448 rc = 1; 6449 goto meta_command_exit; 6450 } 6451 rc = sqlite3_open(zSrcFile, &pSrc); 6452 if( rc!=SQLITE_OK ){ 6453 utf8_printf(stderr, "Error: cannot open \"%s\"\n", zSrcFile); 6454 sqlite3_close(pSrc); 6455 return 1; 6456 } 6457 open_db(p, 0); 6458 pBackup = sqlite3_backup_init(p->db, zDb, pSrc, "main"); 6459 if( pBackup==0 ){ 6460 utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); 6461 sqlite3_close(pSrc); 6462 return 1; 6463 } 6464 while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK 6465 || rc==SQLITE_BUSY ){ 6466 if( rc==SQLITE_BUSY ){ 6467 if( nTimeout++ >= 3 ) break; 6468 sqlite3_sleep(100); 6469 } 6470 } 6471 sqlite3_backup_finish(pBackup); 6472 if( rc==SQLITE_DONE ){ 6473 rc = 0; 6474 }else if( rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){ 6475 raw_printf(stderr, "Error: source database is busy\n"); 6476 rc = 1; 6477 }else{ 6478 utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); 6479 rc = 1; 6480 } 6481 sqlite3_close(pSrc); 6482 }else 6483 6484 6485 if( c=='s' && strncmp(azArg[0], "scanstats", n)==0 ){ 6486 if( nArg==2 ){ 6487 p->scanstatsOn = booleanValue(azArg[1]); 6488 #ifndef SQLITE_ENABLE_STMT_SCANSTATUS 6489 raw_printf(stderr, "Warning: .scanstats not available in this build.\n"); 6490 #endif 6491 }else{ 6492 raw_printf(stderr, "Usage: .scanstats on|off\n"); 6493 rc = 1; 6494 } 6495 }else 6496 6497 if( c=='s' && strncmp(azArg[0], "schema", n)==0 ){ 6498 ShellText sSelect; 6499 ShellState data; 6500 char *zErrMsg = 0; 6501 const char *zDiv = 0; 6502 int iSchema = 0; 6503 6504 open_db(p, 0); 6505 memcpy(&data, p, sizeof(data)); 6506 data.showHeader = 0; 6507 data.cMode = data.mode = MODE_Semi; 6508 initText(&sSelect); 6509 if( nArg>=2 && optionMatch(azArg[1], "indent") ){ 6510 data.cMode = data.mode = MODE_Pretty; 6511 nArg--; 6512 if( nArg==2 ) azArg[1] = azArg[2]; 6513 } 6514 if( nArg==2 && azArg[1][0]!='-' ){ 6515 int i; 6516 for(i=0; azArg[1][i]; i++) azArg[1][i] = ToLower(azArg[1][i]); 6517 if( strcmp(azArg[1],"sqlite_master")==0 ){ 6518 char *new_argv[2], *new_colv[2]; 6519 new_argv[0] = "CREATE TABLE sqlite_master (\n" 6520 " type text,\n" 6521 " name text,\n" 6522 " tbl_name text,\n" 6523 " rootpage integer,\n" 6524 " sql text\n" 6525 ")"; 6526 new_argv[1] = 0; 6527 new_colv[0] = "sql"; 6528 new_colv[1] = 0; 6529 callback(&data, 1, new_argv, new_colv); 6530 rc = SQLITE_OK; 6531 }else if( strcmp(azArg[1],"sqlite_temp_master")==0 ){ 6532 char *new_argv[2], *new_colv[2]; 6533 new_argv[0] = "CREATE TEMP TABLE sqlite_temp_master (\n" 6534 " type text,\n" 6535 " name text,\n" 6536 " tbl_name text,\n" 6537 " rootpage integer,\n" 6538 " sql text\n" 6539 ")"; 6540 new_argv[1] = 0; 6541 new_colv[0] = "sql"; 6542 new_colv[1] = 0; 6543 callback(&data, 1, new_argv, new_colv); 6544 rc = SQLITE_OK; 6545 }else{ 6546 zDiv = "("; 6547 } 6548 }else if( nArg==1 ){ 6549 zDiv = "("; 6550 }else{ 6551 raw_printf(stderr, "Usage: .schema ?--indent? ?LIKE-PATTERN?\n"); 6552 rc = 1; 6553 goto meta_command_exit; 6554 } 6555 if( zDiv ){ 6556 sqlite3_stmt *pStmt = 0; 6557 rc = sqlite3_prepare_v2(p->db, "SELECT name FROM pragma_database_list", 6558 -1, &pStmt, 0); 6559 if( rc ){ 6560 utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); 6561 sqlite3_finalize(pStmt); 6562 rc = 1; 6563 goto meta_command_exit; 6564 } 6565 appendText(&sSelect, "SELECT sql FROM", 0); 6566 iSchema = 0; 6567 while( sqlite3_step(pStmt)==SQLITE_ROW ){ 6568 const char *zDb = (const char*)sqlite3_column_text(pStmt, 0); 6569 char zScNum[30]; 6570 sqlite3_snprintf(sizeof(zScNum), zScNum, "%d", ++iSchema); 6571 appendText(&sSelect, zDiv, 0); 6572 zDiv = " UNION ALL "; 6573 if( strcmp(zDb, "main")!=0 ){ 6574 appendText(&sSelect, "SELECT shell_add_schema(sql,", 0); 6575 appendText(&sSelect, zDb, '"'); 6576 appendText(&sSelect, ") AS sql, type, tbl_name, name, rowid,", 0); 6577 appendText(&sSelect, zScNum, 0); 6578 appendText(&sSelect, " AS snum, ", 0); 6579 appendText(&sSelect, zDb, '\''); 6580 appendText(&sSelect, " AS sname FROM ", 0); 6581 appendText(&sSelect, zDb, '"'); 6582 appendText(&sSelect, ".sqlite_master", 0); 6583 }else{ 6584 appendText(&sSelect, "SELECT sql, type, tbl_name, name, rowid, ", 0); 6585 appendText(&sSelect, zScNum, 0); 6586 appendText(&sSelect, " AS snum, 'main' AS sname FROM sqlite_master",0); 6587 } 6588 } 6589 sqlite3_finalize(pStmt); 6590 appendText(&sSelect, ") WHERE ", 0); 6591 if( nArg>1 ){ 6592 char *zQarg = sqlite3_mprintf("%Q", azArg[1]); 6593 if( strchr(azArg[1], '.') ){ 6594 appendText(&sSelect, "lower(printf('%s.%s',sname,tbl_name))", 0); 6595 }else{ 6596 appendText(&sSelect, "lower(tbl_name)", 0); 6597 } 6598 appendText(&sSelect, strchr(azArg[1], '*') ? " GLOB " : " LIKE ", 0); 6599 appendText(&sSelect, zQarg, 0); 6600 appendText(&sSelect, " AND ", 0); 6601 sqlite3_free(zQarg); 6602 } 6603 appendText(&sSelect, "type!='meta' AND sql IS NOT NULL" 6604 " ORDER BY snum, rowid", 0); 6605 rc = sqlite3_exec(p->db, sSelect.z, callback, &data, &zErrMsg); 6606 freeText(&sSelect); 6607 } 6608 if( zErrMsg ){ 6609 utf8_printf(stderr,"Error: %s\n", zErrMsg); 6610 sqlite3_free(zErrMsg); 6611 rc = 1; 6612 }else if( rc != SQLITE_OK ){ 6613 raw_printf(stderr,"Error: querying schema information\n"); 6614 rc = 1; 6615 }else{ 6616 rc = 0; 6617 } 6618 }else 6619 6620 #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_SELECTTRACE) 6621 if( c=='s' && n==11 && strncmp(azArg[0], "selecttrace", n)==0 ){ 6622 sqlite3SelectTrace = (int)integerValue(azArg[1]); 6623 }else 6624 #endif 6625 6626 #if defined(SQLITE_ENABLE_SESSION) 6627 if( c=='s' && strncmp(azArg[0],"session",n)==0 && n>=3 ){ 6628 OpenSession *pSession = &p->aSession[0]; 6629 char **azCmd = &azArg[1]; 6630 int iSes = 0; 6631 int nCmd = nArg - 1; 6632 int i; 6633 if( nArg<=1 ) goto session_syntax_error; 6634 open_db(p, 0); 6635 if( nArg>=3 ){ 6636 for(iSes=0; iSes<p->nSession; iSes++){ 6637 if( strcmp(p->aSession[iSes].zName, azArg[1])==0 ) break; 6638 } 6639 if( iSes<p->nSession ){ 6640 pSession = &p->aSession[iSes]; 6641 azCmd++; 6642 nCmd--; 6643 }else{ 6644 pSession = &p->aSession[0]; 6645 iSes = 0; 6646 } 6647 } 6648 6649 /* .session attach TABLE 6650 ** Invoke the sqlite3session_attach() interface to attach a particular 6651 ** table so that it is never filtered. 6652 */ 6653 if( strcmp(azCmd[0],"attach")==0 ){ 6654 if( nCmd!=2 ) goto session_syntax_error; 6655 if( pSession->p==0 ){ 6656 session_not_open: 6657 raw_printf(stderr, "ERROR: No sessions are open\n"); 6658 }else{ 6659 rc = sqlite3session_attach(pSession->p, azCmd[1]); 6660 if( rc ){ 6661 raw_printf(stderr, "ERROR: sqlite3session_attach() returns %d\n", rc); 6662 rc = 0; 6663 } 6664 } 6665 }else 6666 6667 /* .session changeset FILE 6668 ** .session patchset FILE 6669 ** Write a changeset or patchset into a file. The file is overwritten. 6670 */ 6671 if( strcmp(azCmd[0],"changeset")==0 || strcmp(azCmd[0],"patchset")==0 ){ 6672 FILE *out = 0; 6673 if( nCmd!=2 ) goto session_syntax_error; 6674 if( pSession->p==0 ) goto session_not_open; 6675 out = fopen(azCmd[1], "wb"); 6676 if( out==0 ){ 6677 utf8_printf(stderr, "ERROR: cannot open \"%s\" for writing\n", azCmd[1]); 6678 }else{ 6679 int szChng; 6680 void *pChng; 6681 if( azCmd[0][0]=='c' ){ 6682 rc = sqlite3session_changeset(pSession->p, &szChng, &pChng); 6683 }else{ 6684 rc = sqlite3session_patchset(pSession->p, &szChng, &pChng); 6685 } 6686 if( rc ){ 6687 printf("Error: error code %d\n", rc); 6688 rc = 0; 6689 } 6690 if( pChng 6691 && fwrite(pChng, szChng, 1, out)!=1 ){ 6692 raw_printf(stderr, "ERROR: Failed to write entire %d-byte output\n", 6693 szChng); 6694 } 6695 sqlite3_free(pChng); 6696 fclose(out); 6697 } 6698 }else 6699 6700 /* .session close 6701 ** Close the identified session 6702 */ 6703 if( strcmp(azCmd[0], "close")==0 ){ 6704 if( nCmd!=1 ) goto session_syntax_error; 6705 if( p->nSession ){ 6706 session_close(pSession); 6707 p->aSession[iSes] = p->aSession[--p->nSession]; 6708 } 6709 }else 6710 6711 /* .session enable ?BOOLEAN? 6712 ** Query or set the enable flag 6713 */ 6714 if( strcmp(azCmd[0], "enable")==0 ){ 6715 int ii; 6716 if( nCmd>2 ) goto session_syntax_error; 6717 ii = nCmd==1 ? -1 : booleanValue(azCmd[1]); 6718 if( p->nSession ){ 6719 ii = sqlite3session_enable(pSession->p, ii); 6720 utf8_printf(p->out, "session %s enable flag = %d\n", 6721 pSession->zName, ii); 6722 } 6723 }else 6724 6725 /* .session filter GLOB .... 6726 ** Set a list of GLOB patterns of table names to be excluded. 6727 */ 6728 if( strcmp(azCmd[0], "filter")==0 ){ 6729 int ii, nByte; 6730 if( nCmd<2 ) goto session_syntax_error; 6731 if( p->nSession ){ 6732 for(ii=0; ii<pSession->nFilter; ii++){ 6733 sqlite3_free(pSession->azFilter[ii]); 6734 } 6735 sqlite3_free(pSession->azFilter); 6736 nByte = sizeof(pSession->azFilter[0])*(nCmd-1); 6737 pSession->azFilter = sqlite3_malloc( nByte ); 6738 if( pSession->azFilter==0 ){ 6739 raw_printf(stderr, "Error: out or memory\n"); 6740 exit(1); 6741 } 6742 for(ii=1; ii<nCmd; ii++){ 6743 pSession->azFilter[ii-1] = sqlite3_mprintf("%s", azCmd[ii]); 6744 } 6745 pSession->nFilter = ii-1; 6746 } 6747 }else 6748 6749 /* .session indirect ?BOOLEAN? 6750 ** Query or set the indirect flag 6751 */ 6752 if( strcmp(azCmd[0], "indirect")==0 ){ 6753 int ii; 6754 if( nCmd>2 ) goto session_syntax_error; 6755 ii = nCmd==1 ? -1 : booleanValue(azCmd[1]); 6756 if( p->nSession ){ 6757 ii = sqlite3session_indirect(pSession->p, ii); 6758 utf8_printf(p->out, "session %s indirect flag = %d\n", 6759 pSession->zName, ii); 6760 } 6761 }else 6762 6763 /* .session isempty 6764 ** Determine if the session is empty 6765 */ 6766 if( strcmp(azCmd[0], "isempty")==0 ){ 6767 int ii; 6768 if( nCmd!=1 ) goto session_syntax_error; 6769 if( p->nSession ){ 6770 ii = sqlite3session_isempty(pSession->p); 6771 utf8_printf(p->out, "session %s isempty flag = %d\n", 6772 pSession->zName, ii); 6773 } 6774 }else 6775 6776 /* .session list 6777 ** List all currently open sessions 6778 */ 6779 if( strcmp(azCmd[0],"list")==0 ){ 6780 for(i=0; i<p->nSession; i++){ 6781 utf8_printf(p->out, "%d %s\n", i, p->aSession[i].zName); 6782 } 6783 }else 6784 6785 /* .session open DB NAME 6786 ** Open a new session called NAME on the attached database DB. 6787 ** DB is normally "main". 6788 */ 6789 if( strcmp(azCmd[0],"open")==0 ){ 6790 char *zName; 6791 if( nCmd!=3 ) goto session_syntax_error; 6792 zName = azCmd[2]; 6793 if( zName[0]==0 ) goto session_syntax_error; 6794 for(i=0; i<p->nSession; i++){ 6795 if( strcmp(p->aSession[i].zName,zName)==0 ){ 6796 utf8_printf(stderr, "Session \"%s\" already exists\n", zName); 6797 goto meta_command_exit; 6798 } 6799 } 6800 if( p->nSession>=ArraySize(p->aSession) ){ 6801 raw_printf(stderr, "Maximum of %d sessions\n", ArraySize(p->aSession)); 6802 goto meta_command_exit; 6803 } 6804 pSession = &p->aSession[p->nSession]; 6805 rc = sqlite3session_create(p->db, azCmd[1], &pSession->p); 6806 if( rc ){ 6807 raw_printf(stderr, "Cannot open session: error code=%d\n", rc); 6808 rc = 0; 6809 goto meta_command_exit; 6810 } 6811 pSession->nFilter = 0; 6812 sqlite3session_table_filter(pSession->p, session_filter, pSession); 6813 p->nSession++; 6814 pSession->zName = sqlite3_mprintf("%s", zName); 6815 }else 6816 /* If no command name matches, show a syntax error */ 6817 session_syntax_error: 6818 session_help(p); 6819 }else 6820 #endif 6821 6822 #ifdef SQLITE_DEBUG 6823 /* Undocumented commands for internal testing. Subject to change 6824 ** without notice. */ 6825 if( c=='s' && n>=10 && strncmp(azArg[0], "selftest-", 9)==0 ){ 6826 if( strncmp(azArg[0]+9, "boolean", n-9)==0 ){ 6827 int i, v; 6828 for(i=1; i<nArg; i++){ 6829 v = booleanValue(azArg[i]); 6830 utf8_printf(p->out, "%s: %d 0x%x\n", azArg[i], v, v); 6831 } 6832 } 6833 if( strncmp(azArg[0]+9, "integer", n-9)==0 ){ 6834 int i; sqlite3_int64 v; 6835 for(i=1; i<nArg; i++){ 6836 char zBuf[200]; 6837 v = integerValue(azArg[i]); 6838 sqlite3_snprintf(sizeof(zBuf),zBuf,"%s: %lld 0x%llx\n", azArg[i],v,v); 6839 utf8_printf(p->out, "%s", zBuf); 6840 } 6841 } 6842 }else 6843 #endif 6844 6845 if( c=='s' && n>=4 && strncmp(azArg[0],"selftest",n)==0 ){ 6846 int bIsInit = 0; /* True to initialize the SELFTEST table */ 6847 int bVerbose = 0; /* Verbose output */ 6848 int bSelftestExists; /* True if SELFTEST already exists */ 6849 int i, k; /* Loop counters */ 6850 int nTest = 0; /* Number of tests runs */ 6851 int nErr = 0; /* Number of errors seen */ 6852 ShellText str; /* Answer for a query */ 6853 sqlite3_stmt *pStmt = 0; /* Query against the SELFTEST table */ 6854 6855 open_db(p,0); 6856 for(i=1; i<nArg; i++){ 6857 const char *z = azArg[i]; 6858 if( z[0]=='-' && z[1]=='-' ) z++; 6859 if( strcmp(z,"-init")==0 ){ 6860 bIsInit = 1; 6861 }else 6862 if( strcmp(z,"-v")==0 ){ 6863 bVerbose++; 6864 }else 6865 { 6866 utf8_printf(stderr, "Unknown option \"%s\" on \"%s\"\n", 6867 azArg[i], azArg[0]); 6868 raw_printf(stderr, "Should be one of: --init -v\n"); 6869 rc = 1; 6870 goto meta_command_exit; 6871 } 6872 } 6873 if( sqlite3_table_column_metadata(p->db,"main","selftest",0,0,0,0,0,0) 6874 != SQLITE_OK ){ 6875 bSelftestExists = 0; 6876 }else{ 6877 bSelftestExists = 1; 6878 } 6879 if( bIsInit ){ 6880 createSelftestTable(p); 6881 bSelftestExists = 1; 6882 } 6883 initText(&str); 6884 appendText(&str, "x", 0); 6885 for(k=bSelftestExists; k>=0; k--){ 6886 if( k==1 ){ 6887 rc = sqlite3_prepare_v2(p->db, 6888 "SELECT tno,op,cmd,ans FROM selftest ORDER BY tno", 6889 -1, &pStmt, 0); 6890 }else{ 6891 rc = sqlite3_prepare_v2(p->db, 6892 "VALUES(0,'memo','Missing SELFTEST table - default checks only','')," 6893 " (1,'run','PRAGMA integrity_check','ok')", 6894 -1, &pStmt, 0); 6895 } 6896 if( rc ){ 6897 raw_printf(stderr, "Error querying the selftest table\n"); 6898 rc = 1; 6899 sqlite3_finalize(pStmt); 6900 goto meta_command_exit; 6901 } 6902 for(i=1; sqlite3_step(pStmt)==SQLITE_ROW; i++){ 6903 int tno = sqlite3_column_int(pStmt, 0); 6904 const char *zOp = (const char*)sqlite3_column_text(pStmt, 1); 6905 const char *zSql = (const char*)sqlite3_column_text(pStmt, 2); 6906 const char *zAns = (const char*)sqlite3_column_text(pStmt, 3); 6907 6908 k = 0; 6909 if( bVerbose>0 ){ 6910 char *zQuote = sqlite3_mprintf("%q", zSql); 6911 printf("%d: %s %s\n", tno, zOp, zSql); 6912 sqlite3_free(zQuote); 6913 } 6914 if( strcmp(zOp,"memo")==0 ){ 6915 utf8_printf(p->out, "%s\n", zSql); 6916 }else 6917 if( strcmp(zOp,"run")==0 ){ 6918 char *zErrMsg = 0; 6919 str.n = 0; 6920 str.z[0] = 0; 6921 rc = sqlite3_exec(p->db, zSql, captureOutputCallback, &str, &zErrMsg); 6922 nTest++; 6923 if( bVerbose ){ 6924 utf8_printf(p->out, "Result: %s\n", str.z); 6925 } 6926 if( rc || zErrMsg ){ 6927 nErr++; 6928 rc = 1; 6929 utf8_printf(p->out, "%d: error-code-%d: %s\n", tno, rc, zErrMsg); 6930 sqlite3_free(zErrMsg); 6931 }else if( strcmp(zAns,str.z)!=0 ){ 6932 nErr++; 6933 rc = 1; 6934 utf8_printf(p->out, "%d: Expected: [%s]\n", tno, zAns); 6935 utf8_printf(p->out, "%d: Got: [%s]\n", tno, str.z); 6936 } 6937 }else 6938 { 6939 utf8_printf(stderr, 6940 "Unknown operation \"%s\" on selftest line %d\n", zOp, tno); 6941 rc = 1; 6942 break; 6943 } 6944 } /* End loop over rows of content from SELFTEST */ 6945 sqlite3_finalize(pStmt); 6946 } /* End loop over k */ 6947 freeText(&str); 6948 utf8_printf(p->out, "%d errors out of %d tests\n", nErr, nTest); 6949 }else 6950 6951 if( c=='s' && strncmp(azArg[0], "separator", n)==0 ){ 6952 if( nArg<2 || nArg>3 ){ 6953 raw_printf(stderr, "Usage: .separator COL ?ROW?\n"); 6954 rc = 1; 6955 } 6956 if( nArg>=2 ){ 6957 sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, 6958 "%.*s", (int)ArraySize(p->colSeparator)-1, azArg[1]); 6959 } 6960 if( nArg>=3 ){ 6961 sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, 6962 "%.*s", (int)ArraySize(p->rowSeparator)-1, azArg[2]); 6963 } 6964 }else 6965 6966 if( c=='s' && n>=4 && strncmp(azArg[0],"sha3sum",n)==0 ){ 6967 const char *zLike = 0; /* Which table to checksum. 0 means everything */ 6968 int i; /* Loop counter */ 6969 int bSchema = 0; /* Also hash the schema */ 6970 int bSeparate = 0; /* Hash each table separately */ 6971 int iSize = 224; /* Hash algorithm to use */ 6972 int bDebug = 0; /* Only show the query that would have run */ 6973 sqlite3_stmt *pStmt; /* For querying tables names */ 6974 char *zSql; /* SQL to be run */ 6975 char *zSep; /* Separator */ 6976 ShellText sSql; /* Complete SQL for the query to run the hash */ 6977 ShellText sQuery; /* Set of queries used to read all content */ 6978 open_db(p, 0); 6979 for(i=1; i<nArg; i++){ 6980 const char *z = azArg[i]; 6981 if( z[0]=='-' ){ 6982 z++; 6983 if( z[0]=='-' ) z++; 6984 if( strcmp(z,"schema")==0 ){ 6985 bSchema = 1; 6986 }else 6987 if( strcmp(z,"sha3-224")==0 || strcmp(z,"sha3-256")==0 6988 || strcmp(z,"sha3-384")==0 || strcmp(z,"sha3-512")==0 6989 ){ 6990 iSize = atoi(&z[5]); 6991 }else 6992 if( strcmp(z,"debug")==0 ){ 6993 bDebug = 1; 6994 }else 6995 { 6996 utf8_printf(stderr, "Unknown option \"%s\" on \"%s\"\n", 6997 azArg[i], azArg[0]); 6998 raw_printf(stderr, "Should be one of: --schema" 6999 " --sha3-224 --sha3-255 --sha3-384 --sha3-512\n"); 7000 rc = 1; 7001 goto meta_command_exit; 7002 } 7003 }else if( zLike ){ 7004 raw_printf(stderr, "Usage: .sha3sum ?OPTIONS? ?LIKE-PATTERN?\n"); 7005 rc = 1; 7006 goto meta_command_exit; 7007 }else{ 7008 zLike = z; 7009 bSeparate = 1; 7010 if( sqlite3_strlike("sqlite_%", zLike, 0)==0 ) bSchema = 1; 7011 } 7012 } 7013 if( bSchema ){ 7014 zSql = "SELECT lower(name) FROM sqlite_master" 7015 " WHERE type='table' AND coalesce(rootpage,0)>1" 7016 " UNION ALL SELECT 'sqlite_master'" 7017 " ORDER BY 1 collate nocase"; 7018 }else{ 7019 zSql = "SELECT lower(name) FROM sqlite_master" 7020 " WHERE type='table' AND coalesce(rootpage,0)>1" 7021 " AND name NOT LIKE 'sqlite_%'" 7022 " ORDER BY 1 collate nocase"; 7023 } 7024 sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); 7025 initText(&sQuery); 7026 initText(&sSql); 7027 appendText(&sSql, "WITH [sha3sum$query](a,b) AS(",0); 7028 zSep = "VALUES("; 7029 while( SQLITE_ROW==sqlite3_step(pStmt) ){ 7030 const char *zTab = (const char*)sqlite3_column_text(pStmt,0); 7031 if( zLike && sqlite3_strlike(zLike, zTab, 0)!=0 ) continue; 7032 if( strncmp(zTab, "sqlite_",7)!=0 ){ 7033 appendText(&sQuery,"SELECT * FROM ", 0); 7034 appendText(&sQuery,zTab,'"'); 7035 appendText(&sQuery," NOT INDEXED;", 0); 7036 }else if( strcmp(zTab, "sqlite_master")==0 ){ 7037 appendText(&sQuery,"SELECT type,name,tbl_name,sql FROM sqlite_master" 7038 " ORDER BY name;", 0); 7039 }else if( strcmp(zTab, "sqlite_sequence")==0 ){ 7040 appendText(&sQuery,"SELECT name,seq FROM sqlite_sequence" 7041 " ORDER BY name;", 0); 7042 }else if( strcmp(zTab, "sqlite_stat1")==0 ){ 7043 appendText(&sQuery,"SELECT tbl,idx,stat FROM sqlite_stat1" 7044 " ORDER BY tbl,idx;", 0); 7045 }else if( strcmp(zTab, "sqlite_stat3")==0 7046 || strcmp(zTab, "sqlite_stat4")==0 ){ 7047 appendText(&sQuery, "SELECT * FROM ", 0); 7048 appendText(&sQuery, zTab, 0); 7049 appendText(&sQuery, " ORDER BY tbl, idx, rowid;\n", 0); 7050 } 7051 appendText(&sSql, zSep, 0); 7052 appendText(&sSql, sQuery.z, '\''); 7053 sQuery.n = 0; 7054 appendText(&sSql, ",", 0); 7055 appendText(&sSql, zTab, '\''); 7056 zSep = "),("; 7057 } 7058 sqlite3_finalize(pStmt); 7059 if( bSeparate ){ 7060 zSql = sqlite3_mprintf( 7061 "%s))" 7062 " SELECT lower(hex(sha3_query(a,%d))) AS hash, b AS label" 7063 " FROM [sha3sum$query]", 7064 sSql.z, iSize); 7065 }else{ 7066 zSql = sqlite3_mprintf( 7067 "%s))" 7068 " SELECT lower(hex(sha3_query(group_concat(a,''),%d))) AS hash" 7069 " FROM [sha3sum$query]", 7070 sSql.z, iSize); 7071 } 7072 freeText(&sQuery); 7073 freeText(&sSql); 7074 if( bDebug ){ 7075 utf8_printf(p->out, "%s\n", zSql); 7076 }else{ 7077 shell_exec(p->db, zSql, shell_callback, p, 0); 7078 } 7079 sqlite3_free(zSql); 7080 }else 7081 7082 if( c=='s' 7083 && (strncmp(azArg[0], "shell", n)==0 || strncmp(azArg[0],"system",n)==0) 7084 ){ 7085 char *zCmd; 7086 int i, x; 7087 if( nArg<2 ){ 7088 raw_printf(stderr, "Usage: .system COMMAND\n"); 7089 rc = 1; 7090 goto meta_command_exit; 7091 } 7092 zCmd = sqlite3_mprintf(strchr(azArg[1],' ')==0?"%s":"\"%s\"", azArg[1]); 7093 for(i=2; i<nArg; i++){ 7094 zCmd = sqlite3_mprintf(strchr(azArg[i],' ')==0?"%z %s":"%z \"%s\"", 7095 zCmd, azArg[i]); 7096 } 7097 x = system(zCmd); 7098 sqlite3_free(zCmd); 7099 if( x ) raw_printf(stderr, "System command returns %d\n", x); 7100 }else 7101 7102 if( c=='s' && strncmp(azArg[0], "show", n)==0 ){ 7103 static const char *azBool[] = { "off", "on", "full", "unk" }; 7104 int i; 7105 if( nArg!=1 ){ 7106 raw_printf(stderr, "Usage: .show\n"); 7107 rc = 1; 7108 goto meta_command_exit; 7109 } 7110 utf8_printf(p->out, "%12.12s: %s\n","echo", 7111 azBool[ShellHasFlag(p, SHFLG_Echo)]); 7112 utf8_printf(p->out, "%12.12s: %s\n","eqp", azBool[p->autoEQP&3]); 7113 utf8_printf(p->out, "%12.12s: %s\n","explain", 7114 p->mode==MODE_Explain ? "on" : p->autoExplain ? "auto" : "off"); 7115 utf8_printf(p->out,"%12.12s: %s\n","headers", azBool[p->showHeader!=0]); 7116 utf8_printf(p->out, "%12.12s: %s\n","mode", modeDescr[p->mode]); 7117 utf8_printf(p->out, "%12.12s: ", "nullvalue"); 7118 output_c_string(p->out, p->nullValue); 7119 raw_printf(p->out, "\n"); 7120 utf8_printf(p->out,"%12.12s: %s\n","output", 7121 strlen30(p->outfile) ? p->outfile : "stdout"); 7122 utf8_printf(p->out,"%12.12s: ", "colseparator"); 7123 output_c_string(p->out, p->colSeparator); 7124 raw_printf(p->out, "\n"); 7125 utf8_printf(p->out,"%12.12s: ", "rowseparator"); 7126 output_c_string(p->out, p->rowSeparator); 7127 raw_printf(p->out, "\n"); 7128 utf8_printf(p->out, "%12.12s: %s\n","stats", azBool[p->statsOn!=0]); 7129 utf8_printf(p->out, "%12.12s: ", "width"); 7130 for (i=0;i<(int)ArraySize(p->colWidth) && p->colWidth[i] != 0;i++) { 7131 raw_printf(p->out, "%d ", p->colWidth[i]); 7132 } 7133 raw_printf(p->out, "\n"); 7134 utf8_printf(p->out, "%12.12s: %s\n", "filename", 7135 p->zDbFilename ? p->zDbFilename : ""); 7136 }else 7137 7138 if( c=='s' && strncmp(azArg[0], "stats", n)==0 ){ 7139 if( nArg==2 ){ 7140 p->statsOn = booleanValue(azArg[1]); 7141 }else if( nArg==1 ){ 7142 display_stats(p->db, p, 0); 7143 }else{ 7144 raw_printf(stderr, "Usage: .stats ?on|off?\n"); 7145 rc = 1; 7146 } 7147 }else 7148 7149 if( (c=='t' && n>1 && strncmp(azArg[0], "tables", n)==0) 7150 || (c=='i' && (strncmp(azArg[0], "indices", n)==0 7151 || strncmp(azArg[0], "indexes", n)==0) ) 7152 ){ 7153 sqlite3_stmt *pStmt; 7154 char **azResult; 7155 int nRow, nAlloc; 7156 int ii; 7157 ShellText s; 7158 initText(&s); 7159 open_db(p, 0); 7160 rc = sqlite3_prepare_v2(p->db, "PRAGMA database_list", -1, &pStmt, 0); 7161 if( rc ) return shellDatabaseError(p->db); 7162 7163 if( nArg>2 && c=='i' ){ 7164 /* It is an historical accident that the .indexes command shows an error 7165 ** when called with the wrong number of arguments whereas the .tables 7166 ** command does not. */ 7167 raw_printf(stderr, "Usage: .indexes ?LIKE-PATTERN?\n"); 7168 rc = 1; 7169 goto meta_command_exit; 7170 } 7171 for(ii=0; sqlite3_step(pStmt)==SQLITE_ROW; ii++){ 7172 const char *zDbName = (const char*)sqlite3_column_text(pStmt, 1); 7173 if( zDbName==0 ) continue; 7174 if( s.z && s.z[0] ) appendText(&s, " UNION ALL ", 0); 7175 if( sqlite3_stricmp(zDbName, "main")==0 ){ 7176 appendText(&s, "SELECT name FROM ", 0); 7177 }else{ 7178 appendText(&s, "SELECT ", 0); 7179 appendText(&s, zDbName, '\''); 7180 appendText(&s, "||'.'||name FROM ", 0); 7181 } 7182 appendText(&s, zDbName, '"'); 7183 appendText(&s, ".sqlite_master ", 0); 7184 if( c=='t' ){ 7185 appendText(&s," WHERE type IN ('table','view')" 7186 " AND name NOT LIKE 'sqlite_%'" 7187 " AND name LIKE ?1", 0); 7188 }else{ 7189 appendText(&s," WHERE type='index'" 7190 " AND tbl_name LIKE ?1", 0); 7191 } 7192 } 7193 rc = sqlite3_finalize(pStmt); 7194 appendText(&s, " ORDER BY 1", 0); 7195 rc = sqlite3_prepare_v2(p->db, s.z, -1, &pStmt, 0); 7196 freeText(&s); 7197 if( rc ) return shellDatabaseError(p->db); 7198 7199 /* Run the SQL statement prepared by the above block. Store the results 7200 ** as an array of nul-terminated strings in azResult[]. */ 7201 nRow = nAlloc = 0; 7202 azResult = 0; 7203 if( nArg>1 ){ 7204 sqlite3_bind_text(pStmt, 1, azArg[1], -1, SQLITE_TRANSIENT); 7205 }else{ 7206 sqlite3_bind_text(pStmt, 1, "%", -1, SQLITE_STATIC); 7207 } 7208 while( sqlite3_step(pStmt)==SQLITE_ROW ){ 7209 if( nRow>=nAlloc ){ 7210 char **azNew; 7211 int n2 = nAlloc*2 + 10; 7212 azNew = sqlite3_realloc64(azResult, sizeof(azResult[0])*n2); 7213 if( azNew==0 ){ 7214 rc = shellNomemError(); 7215 break; 7216 } 7217 nAlloc = n2; 7218 azResult = azNew; 7219 } 7220 azResult[nRow] = sqlite3_mprintf("%s", sqlite3_column_text(pStmt, 0)); 7221 if( 0==azResult[nRow] ){ 7222 rc = shellNomemError(); 7223 break; 7224 } 7225 nRow++; 7226 } 7227 if( sqlite3_finalize(pStmt)!=SQLITE_OK ){ 7228 rc = shellDatabaseError(p->db); 7229 } 7230 7231 /* Pretty-print the contents of array azResult[] to the output */ 7232 if( rc==0 && nRow>0 ){ 7233 int len, maxlen = 0; 7234 int i, j; 7235 int nPrintCol, nPrintRow; 7236 for(i=0; i<nRow; i++){ 7237 len = strlen30(azResult[i]); 7238 if( len>maxlen ) maxlen = len; 7239 } 7240 nPrintCol = 80/(maxlen+2); 7241 if( nPrintCol<1 ) nPrintCol = 1; 7242 nPrintRow = (nRow + nPrintCol - 1)/nPrintCol; 7243 for(i=0; i<nPrintRow; i++){ 7244 for(j=i; j<nRow; j+=nPrintRow){ 7245 char *zSp = j<nPrintRow ? "" : " "; 7246 utf8_printf(p->out, "%s%-*s", zSp, maxlen, 7247 azResult[j] ? azResult[j]:""); 7248 } 7249 raw_printf(p->out, "\n"); 7250 } 7251 } 7252 7253 for(ii=0; ii<nRow; ii++) sqlite3_free(azResult[ii]); 7254 sqlite3_free(azResult); 7255 }else 7256 7257 /* Begin redirecting output to the file "testcase-out.txt" */ 7258 if( c=='t' && strcmp(azArg[0],"testcase")==0 ){ 7259 output_reset(p); 7260 p->out = output_file_open("testcase-out.txt"); 7261 if( p->out==0 ){ 7262 raw_printf(stderr, "Error: cannot open 'testcase-out.txt'\n"); 7263 } 7264 if( nArg>=2 ){ 7265 sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "%s", azArg[1]); 7266 }else{ 7267 sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "?"); 7268 } 7269 }else 7270 7271 #ifndef SQLITE_UNTESTABLE 7272 if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 && nArg>=2 ){ 7273 static const struct { 7274 const char *zCtrlName; /* Name of a test-control option */ 7275 int ctrlCode; /* Integer code for that option */ 7276 } aCtrl[] = { 7277 { "prng_save", SQLITE_TESTCTRL_PRNG_SAVE }, 7278 { "prng_restore", SQLITE_TESTCTRL_PRNG_RESTORE }, 7279 { "prng_reset", SQLITE_TESTCTRL_PRNG_RESET }, 7280 { "bitvec_test", SQLITE_TESTCTRL_BITVEC_TEST }, 7281 { "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL }, 7282 { "benign_malloc_hooks", SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS }, 7283 { "pending_byte", SQLITE_TESTCTRL_PENDING_BYTE }, 7284 { "assert", SQLITE_TESTCTRL_ASSERT }, 7285 { "always", SQLITE_TESTCTRL_ALWAYS }, 7286 { "reserve", SQLITE_TESTCTRL_RESERVE }, 7287 { "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS }, 7288 { "iskeyword", SQLITE_TESTCTRL_ISKEYWORD }, 7289 { "byteorder", SQLITE_TESTCTRL_BYTEORDER }, 7290 { "never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT }, 7291 { "imposter", SQLITE_TESTCTRL_IMPOSTER }, 7292 }; 7293 int testctrl = -1; 7294 int rc2 = 0; 7295 int i, n2; 7296 open_db(p, 0); 7297 7298 /* convert testctrl text option to value. allow any unique prefix 7299 ** of the option name, or a numerical value. */ 7300 n2 = strlen30(azArg[1]); 7301 for(i=0; i<ArraySize(aCtrl); i++){ 7302 if( strncmp(azArg[1], aCtrl[i].zCtrlName, n2)==0 ){ 7303 if( testctrl<0 ){ 7304 testctrl = aCtrl[i].ctrlCode; 7305 }else{ 7306 utf8_printf(stderr, "ambiguous option name: \"%s\"\n", azArg[1]); 7307 testctrl = -1; 7308 break; 7309 } 7310 } 7311 } 7312 if( testctrl<0 ) testctrl = (int)integerValue(azArg[1]); 7313 if( (testctrl<SQLITE_TESTCTRL_FIRST) || (testctrl>SQLITE_TESTCTRL_LAST) ){ 7314 utf8_printf(stderr,"Error: invalid testctrl option: %s\n", azArg[1]); 7315 }else{ 7316 switch(testctrl){ 7317 7318 /* sqlite3_test_control(int, db, int) */ 7319 case SQLITE_TESTCTRL_OPTIMIZATIONS: 7320 case SQLITE_TESTCTRL_RESERVE: 7321 if( nArg==3 ){ 7322 int opt = (int)strtol(azArg[2], 0, 0); 7323 rc2 = sqlite3_test_control(testctrl, p->db, opt); 7324 raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); 7325 } else { 7326 utf8_printf(stderr,"Error: testctrl %s takes a single int option\n", 7327 azArg[1]); 7328 } 7329 break; 7330 7331 /* sqlite3_test_control(int) */ 7332 case SQLITE_TESTCTRL_PRNG_SAVE: 7333 case SQLITE_TESTCTRL_PRNG_RESTORE: 7334 case SQLITE_TESTCTRL_PRNG_RESET: 7335 case SQLITE_TESTCTRL_BYTEORDER: 7336 if( nArg==2 ){ 7337 rc2 = sqlite3_test_control(testctrl); 7338 raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); 7339 } else { 7340 utf8_printf(stderr,"Error: testctrl %s takes no options\n", 7341 azArg[1]); 7342 } 7343 break; 7344 7345 /* sqlite3_test_control(int, uint) */ 7346 case SQLITE_TESTCTRL_PENDING_BYTE: 7347 if( nArg==3 ){ 7348 unsigned int opt = (unsigned int)integerValue(azArg[2]); 7349 rc2 = sqlite3_test_control(testctrl, opt); 7350 raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); 7351 } else { 7352 utf8_printf(stderr,"Error: testctrl %s takes a single unsigned" 7353 " int option\n", azArg[1]); 7354 } 7355 break; 7356 7357 /* sqlite3_test_control(int, int) */ 7358 case SQLITE_TESTCTRL_ASSERT: 7359 case SQLITE_TESTCTRL_ALWAYS: 7360 case SQLITE_TESTCTRL_NEVER_CORRUPT: 7361 if( nArg==3 ){ 7362 int opt = booleanValue(azArg[2]); 7363 rc2 = sqlite3_test_control(testctrl, opt); 7364 raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); 7365 } else { 7366 utf8_printf(stderr,"Error: testctrl %s takes a single int option\n", 7367 azArg[1]); 7368 } 7369 break; 7370 7371 /* sqlite3_test_control(int, char *) */ 7372 #ifdef SQLITE_N_KEYWORD 7373 case SQLITE_TESTCTRL_ISKEYWORD: 7374 if( nArg==3 ){ 7375 const char *opt = azArg[2]; 7376 rc2 = sqlite3_test_control(testctrl, opt); 7377 raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); 7378 } else { 7379 utf8_printf(stderr, 7380 "Error: testctrl %s takes a single char * option\n", 7381 azArg[1]); 7382 } 7383 break; 7384 #endif 7385 7386 case SQLITE_TESTCTRL_IMPOSTER: 7387 if( nArg==5 ){ 7388 rc2 = sqlite3_test_control(testctrl, p->db, 7389 azArg[2], 7390 integerValue(azArg[3]), 7391 integerValue(azArg[4])); 7392 raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); 7393 }else{ 7394 raw_printf(stderr,"Usage: .testctrl imposter dbName onoff tnum\n"); 7395 } 7396 break; 7397 7398 case SQLITE_TESTCTRL_BITVEC_TEST: 7399 case SQLITE_TESTCTRL_FAULT_INSTALL: 7400 case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: 7401 default: 7402 utf8_printf(stderr, 7403 "Error: CLI support for testctrl %s not implemented\n", 7404 azArg[1]); 7405 break; 7406 } 7407 } 7408 }else 7409 #endif /* !defined(SQLITE_UNTESTABLE) */ 7410 7411 if( c=='t' && n>4 && strncmp(azArg[0], "timeout", n)==0 ){ 7412 open_db(p, 0); 7413 sqlite3_busy_timeout(p->db, nArg>=2 ? (int)integerValue(azArg[1]) : 0); 7414 }else 7415 7416 if( c=='t' && n>=5 && strncmp(azArg[0], "timer", n)==0 ){ 7417 if( nArg==2 ){ 7418 enableTimer = booleanValue(azArg[1]); 7419 if( enableTimer && !HAS_TIMER ){ 7420 raw_printf(stderr, "Error: timer not available on this system.\n"); 7421 enableTimer = 0; 7422 } 7423 }else{ 7424 raw_printf(stderr, "Usage: .timer on|off\n"); 7425 rc = 1; 7426 } 7427 }else 7428 7429 if( c=='t' && strncmp(azArg[0], "trace", n)==0 ){ 7430 open_db(p, 0); 7431 if( nArg!=2 ){ 7432 raw_printf(stderr, "Usage: .trace FILE|off\n"); 7433 rc = 1; 7434 goto meta_command_exit; 7435 } 7436 output_file_close(p->traceOut); 7437 p->traceOut = output_file_open(azArg[1]); 7438 #if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT) 7439 if( p->traceOut==0 ){ 7440 sqlite3_trace_v2(p->db, 0, 0, 0); 7441 }else{ 7442 sqlite3_trace_v2(p->db, SQLITE_TRACE_STMT, sql_trace_callback,p->traceOut); 7443 } 7444 #endif 7445 }else 7446 7447 #if SQLITE_USER_AUTHENTICATION 7448 if( c=='u' && strncmp(azArg[0], "user", n)==0 ){ 7449 if( nArg<2 ){ 7450 raw_printf(stderr, "Usage: .user SUBCOMMAND ...\n"); 7451 rc = 1; 7452 goto meta_command_exit; 7453 } 7454 open_db(p, 0); 7455 if( strcmp(azArg[1],"login")==0 ){ 7456 if( nArg!=4 ){ 7457 raw_printf(stderr, "Usage: .user login USER PASSWORD\n"); 7458 rc = 1; 7459 goto meta_command_exit; 7460 } 7461 rc = sqlite3_user_authenticate(p->db, azArg[2], azArg[3], 7462 (int)strlen(azArg[3])); 7463 if( rc ){ 7464 utf8_printf(stderr, "Authentication failed for user %s\n", azArg[2]); 7465 rc = 1; 7466 } 7467 }else if( strcmp(azArg[1],"add")==0 ){ 7468 if( nArg!=5 ){ 7469 raw_printf(stderr, "Usage: .user add USER PASSWORD ISADMIN\n"); 7470 rc = 1; 7471 goto meta_command_exit; 7472 } 7473 rc = sqlite3_user_add(p->db, azArg[2], 7474 azArg[3], (int)strlen(azArg[3]), 7475 booleanValue(azArg[4])); 7476 if( rc ){ 7477 raw_printf(stderr, "User-Add failed: %d\n", rc); 7478 rc = 1; 7479 } 7480 }else if( strcmp(azArg[1],"edit")==0 ){ 7481 if( nArg!=5 ){ 7482 raw_printf(stderr, "Usage: .user edit USER PASSWORD ISADMIN\n"); 7483 rc = 1; 7484 goto meta_command_exit; 7485 } 7486 rc = sqlite3_user_change(p->db, azArg[2], 7487 azArg[3], (int)strlen(azArg[3]), 7488 booleanValue(azArg[4])); 7489 if( rc ){ 7490 raw_printf(stderr, "User-Edit failed: %d\n", rc); 7491 rc = 1; 7492 } 7493 }else if( strcmp(azArg[1],"delete")==0 ){ 7494 if( nArg!=3 ){ 7495 raw_printf(stderr, "Usage: .user delete USER\n"); 7496 rc = 1; 7497 goto meta_command_exit; 7498 } 7499 rc = sqlite3_user_delete(p->db, azArg[2]); 7500 if( rc ){ 7501 raw_printf(stderr, "User-Delete failed: %d\n", rc); 7502 rc = 1; 7503 } 7504 }else{ 7505 raw_printf(stderr, "Usage: .user login|add|edit|delete ...\n"); 7506 rc = 1; 7507 goto meta_command_exit; 7508 } 7509 }else 7510 #endif /* SQLITE_USER_AUTHENTICATION */ 7511 7512 if( c=='v' && strncmp(azArg[0], "version", n)==0 ){ 7513 utf8_printf(p->out, "SQLite %s %s\n" /*extra-version-info*/, 7514 sqlite3_libversion(), sqlite3_sourceid()); 7515 }else 7516 7517 if( c=='v' && strncmp(azArg[0], "vfsinfo", n)==0 ){ 7518 const char *zDbName = nArg==2 ? azArg[1] : "main"; 7519 sqlite3_vfs *pVfs = 0; 7520 if( p->db ){ 7521 sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFS_POINTER, &pVfs); 7522 if( pVfs ){ 7523 utf8_printf(p->out, "vfs.zName = \"%s\"\n", pVfs->zName); 7524 raw_printf(p->out, "vfs.iVersion = %d\n", pVfs->iVersion); 7525 raw_printf(p->out, "vfs.szOsFile = %d\n", pVfs->szOsFile); 7526 raw_printf(p->out, "vfs.mxPathname = %d\n", pVfs->mxPathname); 7527 } 7528 } 7529 }else 7530 7531 if( c=='v' && strncmp(azArg[0], "vfslist", n)==0 ){ 7532 sqlite3_vfs *pVfs; 7533 sqlite3_vfs *pCurrent = 0; 7534 if( p->db ){ 7535 sqlite3_file_control(p->db, "main", SQLITE_FCNTL_VFS_POINTER, &pCurrent); 7536 } 7537 for(pVfs=sqlite3_vfs_find(0); pVfs; pVfs=pVfs->pNext){ 7538 utf8_printf(p->out, "vfs.zName = \"%s\"%s\n", pVfs->zName, 7539 pVfs==pCurrent ? " <--- CURRENT" : ""); 7540 raw_printf(p->out, "vfs.iVersion = %d\n", pVfs->iVersion); 7541 raw_printf(p->out, "vfs.szOsFile = %d\n", pVfs->szOsFile); 7542 raw_printf(p->out, "vfs.mxPathname = %d\n", pVfs->mxPathname); 7543 if( pVfs->pNext ){ 7544 raw_printf(p->out, "-----------------------------------\n"); 7545 } 7546 } 7547 }else 7548 7549 if( c=='v' && strncmp(azArg[0], "vfsname", n)==0 ){ 7550 const char *zDbName = nArg==2 ? azArg[1] : "main"; 7551 char *zVfsName = 0; 7552 if( p->db ){ 7553 sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFSNAME, &zVfsName); 7554 if( zVfsName ){ 7555 utf8_printf(p->out, "%s\n", zVfsName); 7556 sqlite3_free(zVfsName); 7557 } 7558 } 7559 }else 7560 7561 #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_WHERETRACE) 7562 if( c=='w' && strncmp(azArg[0], "wheretrace", n)==0 ){ 7563 sqlite3WhereTrace = nArg>=2 ? booleanValue(azArg[1]) : 0xff; 7564 }else 7565 #endif 7566 7567 if( c=='w' && strncmp(azArg[0], "width", n)==0 ){ 7568 int j; 7569 assert( nArg<=ArraySize(azArg) ); 7570 for(j=1; j<nArg && j<ArraySize(p->colWidth); j++){ 7571 p->colWidth[j-1] = (int)integerValue(azArg[j]); 7572 } 7573 }else 7574 7575 { 7576 utf8_printf(stderr, "Error: unknown command or invalid arguments: " 7577 " \"%s\". Enter \".help\" for help\n", azArg[0]); 7578 rc = 1; 7579 } 7580 7581 meta_command_exit: 7582 if( p->outCount ){ 7583 p->outCount--; 7584 if( p->outCount==0 ) output_reset(p); 7585 } 7586 return rc; 7587 } 7588 7589 /* 7590 ** Return TRUE if a semicolon occurs anywhere in the first N characters 7591 ** of string z[]. 7592 */ 7593 static int line_contains_semicolon(const char *z, int N){ 7594 int i; 7595 for(i=0; i<N; i++){ if( z[i]==';' ) return 1; } 7596 return 0; 7597 } 7598 7599 /* 7600 ** Test to see if a line consists entirely of whitespace. 7601 */ 7602 static int _all_whitespace(const char *z){ 7603 for(; *z; z++){ 7604 if( IsSpace(z[0]) ) continue; 7605 if( *z=='/' && z[1]=='*' ){ 7606 z += 2; 7607 while( *z && (*z!='*' || z[1]!='/') ){ z++; } 7608 if( *z==0 ) return 0; 7609 z++; 7610 continue; 7611 } 7612 if( *z=='-' && z[1]=='-' ){ 7613 z += 2; 7614 while( *z && *z!='\n' ){ z++; } 7615 if( *z==0 ) return 1; 7616 continue; 7617 } 7618 return 0; 7619 } 7620 return 1; 7621 } 7622 7623 /* 7624 ** Return TRUE if the line typed in is an SQL command terminator other 7625 ** than a semi-colon. The SQL Server style "go" command is understood 7626 ** as is the Oracle "/". 7627 */ 7628 static int line_is_command_terminator(const char *zLine){ 7629 while( IsSpace(zLine[0]) ){ zLine++; }; 7630 if( zLine[0]=='/' && _all_whitespace(&zLine[1]) ){ 7631 return 1; /* Oracle */ 7632 } 7633 if( ToLower(zLine[0])=='g' && ToLower(zLine[1])=='o' 7634 && _all_whitespace(&zLine[2]) ){ 7635 return 1; /* SQL Server */ 7636 } 7637 return 0; 7638 } 7639 7640 /* 7641 ** Return true if zSql is a complete SQL statement. Return false if it 7642 ** ends in the middle of a string literal or C-style comment. 7643 */ 7644 static int line_is_complete(char *zSql, int nSql){ 7645 int rc; 7646 if( zSql==0 ) return 1; 7647 zSql[nSql] = ';'; 7648 zSql[nSql+1] = 0; 7649 rc = sqlite3_complete(zSql); 7650 zSql[nSql] = 0; 7651 return rc; 7652 } 7653 7654 /* 7655 ** Run a single line of SQL 7656 */ 7657 static int runOneSqlLine(ShellState *p, char *zSql, FILE *in, int startline){ 7658 int rc; 7659 char *zErrMsg = 0; 7660 7661 open_db(p, 0); 7662 if( ShellHasFlag(p,SHFLG_Backslash) ) resolve_backslashes(zSql); 7663 BEGIN_TIMER; 7664 rc = shell_exec(p->db, zSql, shell_callback, p, &zErrMsg); 7665 END_TIMER; 7666 if( rc || zErrMsg ){ 7667 char zPrefix[100]; 7668 if( in!=0 || !stdin_is_interactive ){ 7669 sqlite3_snprintf(sizeof(zPrefix), zPrefix, 7670 "Error: near line %d:", startline); 7671 }else{ 7672 sqlite3_snprintf(sizeof(zPrefix), zPrefix, "Error:"); 7673 } 7674 if( zErrMsg!=0 ){ 7675 utf8_printf(stderr, "%s %s\n", zPrefix, zErrMsg); 7676 sqlite3_free(zErrMsg); 7677 zErrMsg = 0; 7678 }else{ 7679 utf8_printf(stderr, "%s %s\n", zPrefix, sqlite3_errmsg(p->db)); 7680 } 7681 return 1; 7682 }else if( ShellHasFlag(p, SHFLG_CountChanges) ){ 7683 raw_printf(p->out, "changes: %3d total_changes: %d\n", 7684 sqlite3_changes(p->db), sqlite3_total_changes(p->db)); 7685 } 7686 return 0; 7687 } 7688 7689 7690 /* 7691 ** Read input from *in and process it. If *in==0 then input 7692 ** is interactive - the user is typing it it. Otherwise, input 7693 ** is coming from a file or device. A prompt is issued and history 7694 ** is saved only if input is interactive. An interrupt signal will 7695 ** cause this routine to exit immediately, unless input is interactive. 7696 ** 7697 ** Return the number of errors. 7698 */ 7699 static int process_input(ShellState *p, FILE *in){ 7700 char *zLine = 0; /* A single input line */ 7701 char *zSql = 0; /* Accumulated SQL text */ 7702 int nLine; /* Length of current line */ 7703 int nSql = 0; /* Bytes of zSql[] used */ 7704 int nAlloc = 0; /* Allocated zSql[] space */ 7705 int nSqlPrior = 0; /* Bytes of zSql[] used by prior line */ 7706 int rc; /* Error code */ 7707 int errCnt = 0; /* Number of errors seen */ 7708 int lineno = 0; /* Current line number */ 7709 int startline = 0; /* Line number for start of current input */ 7710 7711 while( errCnt==0 || !bail_on_error || (in==0 && stdin_is_interactive) ){ 7712 fflush(p->out); 7713 zLine = one_input_line(in, zLine, nSql>0); 7714 if( zLine==0 ){ 7715 /* End of input */ 7716 if( in==0 && stdin_is_interactive ) printf("\n"); 7717 break; 7718 } 7719 if( seenInterrupt ){ 7720 if( in!=0 ) break; 7721 seenInterrupt = 0; 7722 } 7723 lineno++; 7724 if( nSql==0 && _all_whitespace(zLine) ){ 7725 if( ShellHasFlag(p, SHFLG_Echo) ) printf("%s\n", zLine); 7726 continue; 7727 } 7728 if( zLine && zLine[0]=='.' && nSql==0 ){ 7729 if( ShellHasFlag(p, SHFLG_Echo) ) printf("%s\n", zLine); 7730 rc = do_meta_command(zLine, p); 7731 if( rc==2 ){ /* exit requested */ 7732 break; 7733 }else if( rc ){ 7734 errCnt++; 7735 } 7736 continue; 7737 } 7738 if( line_is_command_terminator(zLine) && line_is_complete(zSql, nSql) ){ 7739 memcpy(zLine,";",2); 7740 } 7741 nLine = strlen30(zLine); 7742 if( nSql+nLine+2>=nAlloc ){ 7743 nAlloc = nSql+nLine+100; 7744 zSql = realloc(zSql, nAlloc); 7745 if( zSql==0 ){ 7746 raw_printf(stderr, "Error: out of memory\n"); 7747 exit(1); 7748 } 7749 } 7750 nSqlPrior = nSql; 7751 if( nSql==0 ){ 7752 int i; 7753 for(i=0; zLine[i] && IsSpace(zLine[i]); i++){} 7754 assert( nAlloc>0 && zSql!=0 ); 7755 memcpy(zSql, zLine+i, nLine+1-i); 7756 startline = lineno; 7757 nSql = nLine-i; 7758 }else{ 7759 zSql[nSql++] = '\n'; 7760 memcpy(zSql+nSql, zLine, nLine+1); 7761 nSql += nLine; 7762 } 7763 if( nSql && line_contains_semicolon(&zSql[nSqlPrior], nSql-nSqlPrior) 7764 && sqlite3_complete(zSql) ){ 7765 errCnt += runOneSqlLine(p, zSql, in, startline); 7766 nSql = 0; 7767 if( p->outCount ){ 7768 output_reset(p); 7769 p->outCount = 0; 7770 } 7771 }else if( nSql && _all_whitespace(zSql) ){ 7772 if( ShellHasFlag(p, SHFLG_Echo) ) printf("%s\n", zSql); 7773 nSql = 0; 7774 } 7775 } 7776 if( nSql && !_all_whitespace(zSql) ){ 7777 runOneSqlLine(p, zSql, in, startline); 7778 } 7779 free(zSql); 7780 free(zLine); 7781 return errCnt>0; 7782 } 7783 7784 /* 7785 ** Return a pathname which is the user's home directory. A 7786 ** 0 return indicates an error of some kind. 7787 */ 7788 static char *find_home_dir(int clearFlag){ 7789 static char *home_dir = NULL; 7790 if( clearFlag ){ 7791 free(home_dir); 7792 home_dir = 0; 7793 return 0; 7794 } 7795 if( home_dir ) return home_dir; 7796 7797 #if !defined(_WIN32) && !defined(WIN32) && !defined(_WIN32_WCE) \ 7798 && !defined(__RTP__) && !defined(_WRS_KERNEL) 7799 { 7800 struct passwd *pwent; 7801 uid_t uid = getuid(); 7802 if( (pwent=getpwuid(uid)) != NULL) { 7803 home_dir = pwent->pw_dir; 7804 } 7805 } 7806 #endif 7807 7808 #if defined(_WIN32_WCE) 7809 /* Windows CE (arm-wince-mingw32ce-gcc) does not provide getenv() 7810 */ 7811 home_dir = "/"; 7812 #else 7813 7814 #if defined(_WIN32) || defined(WIN32) 7815 if (!home_dir) { 7816 home_dir = getenv("USERPROFILE"); 7817 } 7818 #endif 7819 7820 if (!home_dir) { 7821 home_dir = getenv("HOME"); 7822 } 7823 7824 #if defined(_WIN32) || defined(WIN32) 7825 if (!home_dir) { 7826 char *zDrive, *zPath; 7827 int n; 7828 zDrive = getenv("HOMEDRIVE"); 7829 zPath = getenv("HOMEPATH"); 7830 if( zDrive && zPath ){ 7831 n = strlen30(zDrive) + strlen30(zPath) + 1; 7832 home_dir = malloc( n ); 7833 if( home_dir==0 ) return 0; 7834 sqlite3_snprintf(n, home_dir, "%s%s", zDrive, zPath); 7835 return home_dir; 7836 } 7837 home_dir = "c:\\"; 7838 } 7839 #endif 7840 7841 #endif /* !_WIN32_WCE */ 7842 7843 if( home_dir ){ 7844 int n = strlen30(home_dir) + 1; 7845 char *z = malloc( n ); 7846 if( z ) memcpy(z, home_dir, n); 7847 home_dir = z; 7848 } 7849 7850 return home_dir; 7851 } 7852 7853 /* 7854 ** Read input from the file given by sqliterc_override. Or if that 7855 ** parameter is NULL, take input from ~/.sqliterc 7856 ** 7857 ** Returns the number of errors. 7858 */ 7859 static void process_sqliterc( 7860 ShellState *p, /* Configuration data */ 7861 const char *sqliterc_override /* Name of config file. NULL to use default */ 7862 ){ 7863 char *home_dir = NULL; 7864 const char *sqliterc = sqliterc_override; 7865 char *zBuf = 0; 7866 FILE *in = NULL; 7867 7868 if (sqliterc == NULL) { 7869 home_dir = find_home_dir(0); 7870 if( home_dir==0 ){ 7871 raw_printf(stderr, "-- warning: cannot find home directory;" 7872 " cannot read ~/.sqliterc\n"); 7873 return; 7874 } 7875 sqlite3_initialize(); 7876 zBuf = sqlite3_mprintf("%s/.sqliterc",home_dir); 7877 sqliterc = zBuf; 7878 } 7879 in = fopen(sqliterc,"rb"); 7880 if( in ){ 7881 if( stdin_is_interactive ){ 7882 utf8_printf(stderr,"-- Loading resources from %s\n",sqliterc); 7883 } 7884 process_input(p,in); 7885 fclose(in); 7886 } 7887 sqlite3_free(zBuf); 7888 } 7889 7890 /* 7891 ** Show available command line options 7892 */ 7893 static const char zOptions[] = 7894 " -ascii set output mode to 'ascii'\n" 7895 " -bail stop after hitting an error\n" 7896 " -batch force batch I/O\n" 7897 " -column set output mode to 'column'\n" 7898 " -cmd COMMAND run \"COMMAND\" before reading stdin\n" 7899 " -csv set output mode to 'csv'\n" 7900 " -echo print commands before execution\n" 7901 " -init FILENAME read/process named file\n" 7902 " -[no]header turn headers on or off\n" 7903 #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5) 7904 " -heap SIZE Size of heap for memsys3 or memsys5\n" 7905 #endif 7906 " -help show this message\n" 7907 " -html set output mode to HTML\n" 7908 " -interactive force interactive I/O\n" 7909 " -line set output mode to 'line'\n" 7910 " -list set output mode to 'list'\n" 7911 " -lookaside SIZE N use N entries of SZ bytes for lookaside memory\n" 7912 " -mmap N default mmap size set to N\n" 7913 #ifdef SQLITE_ENABLE_MULTIPLEX 7914 " -multiplex enable the multiplexor VFS\n" 7915 #endif 7916 " -newline SEP set output row separator. Default: '\\n'\n" 7917 " -nullvalue TEXT set text string for NULL values. Default ''\n" 7918 " -pagecache SIZE N use N slots of SZ bytes each for page cache memory\n" 7919 " -quote set output mode to 'quote'\n" 7920 " -separator SEP set output column separator. Default: '|'\n" 7921 " -stats print memory stats before each finalize\n" 7922 " -version show SQLite version\n" 7923 " -vfs NAME use NAME as the default VFS\n" 7924 #ifdef SQLITE_ENABLE_VFSTRACE 7925 " -vfstrace enable tracing of all VFS calls\n" 7926 #endif 7927 ; 7928 static void usage(int showDetail){ 7929 utf8_printf(stderr, 7930 "Usage: %s [OPTIONS] FILENAME [SQL]\n" 7931 "FILENAME is the name of an SQLite database. A new database is created\n" 7932 "if the file does not previously exist.\n", Argv0); 7933 if( showDetail ){ 7934 utf8_printf(stderr, "OPTIONS include:\n%s", zOptions); 7935 }else{ 7936 raw_printf(stderr, "Use the -help option for additional information\n"); 7937 } 7938 exit(1); 7939 } 7940 7941 /* 7942 ** Initialize the state information in data 7943 */ 7944 static void main_init(ShellState *data) { 7945 memset(data, 0, sizeof(*data)); 7946 data->normalMode = data->cMode = data->mode = MODE_List; 7947 data->autoExplain = 1; 7948 memcpy(data->colSeparator,SEP_Column, 2); 7949 memcpy(data->rowSeparator,SEP_Row, 2); 7950 data->showHeader = 0; 7951 data->shellFlgs = SHFLG_Lookaside; 7952 sqlite3_config(SQLITE_CONFIG_URI, 1); 7953 sqlite3_config(SQLITE_CONFIG_LOG, shellLog, data); 7954 sqlite3_config(SQLITE_CONFIG_MULTITHREAD); 7955 sqlite3_snprintf(sizeof(mainPrompt), mainPrompt,"sqlite> "); 7956 sqlite3_snprintf(sizeof(continuePrompt), continuePrompt," ...> "); 7957 } 7958 7959 /* 7960 ** Output text to the console in a font that attracts extra attention. 7961 */ 7962 #ifdef _WIN32 7963 static void printBold(const char *zText){ 7964 HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE); 7965 CONSOLE_SCREEN_BUFFER_INFO defaultScreenInfo; 7966 GetConsoleScreenBufferInfo(out, &defaultScreenInfo); 7967 SetConsoleTextAttribute(out, 7968 FOREGROUND_RED|FOREGROUND_INTENSITY 7969 ); 7970 printf("%s", zText); 7971 SetConsoleTextAttribute(out, defaultScreenInfo.wAttributes); 7972 } 7973 #else 7974 static void printBold(const char *zText){ 7975 printf("\033[1m%s\033[0m", zText); 7976 } 7977 #endif 7978 7979 /* 7980 ** Get the argument to an --option. Throw an error and die if no argument 7981 ** is available. 7982 */ 7983 static char *cmdline_option_value(int argc, char **argv, int i){ 7984 if( i==argc ){ 7985 utf8_printf(stderr, "%s: Error: missing argument to %s\n", 7986 argv[0], argv[argc-1]); 7987 exit(1); 7988 } 7989 return argv[i]; 7990 } 7991 7992 #ifndef SQLITE_SHELL_IS_UTF8 7993 # if (defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER) 7994 # define SQLITE_SHELL_IS_UTF8 (0) 7995 # else 7996 # define SQLITE_SHELL_IS_UTF8 (1) 7997 # endif 7998 #endif 7999 8000 #if SQLITE_SHELL_IS_UTF8 8001 int SQLITE_CDECL main(int argc, char **argv){ 8002 #else 8003 int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ 8004 char **argv; 8005 #endif 8006 char *zErrMsg = 0; 8007 ShellState data; 8008 const char *zInitFile = 0; 8009 int i; 8010 int rc = 0; 8011 int warnInmemoryDb = 0; 8012 int readStdin = 1; 8013 int nCmd = 0; 8014 char **azCmd = 0; 8015 8016 setBinaryMode(stdin, 0); 8017 setvbuf(stderr, 0, _IONBF, 0); /* Make sure stderr is unbuffered */ 8018 stdin_is_interactive = isatty(0); 8019 stdout_is_console = isatty(1); 8020 8021 #if USE_SYSTEM_SQLITE+0!=1 8022 if( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,60)!=0 ){ 8023 utf8_printf(stderr, "SQLite header and source version mismatch\n%s\n%s\n", 8024 sqlite3_sourceid(), SQLITE_SOURCE_ID); 8025 exit(1); 8026 } 8027 #endif 8028 main_init(&data); 8029 #if !SQLITE_SHELL_IS_UTF8 8030 sqlite3_initialize(); 8031 argv = sqlite3_malloc64(sizeof(argv[0])*argc); 8032 if( argv==0 ){ 8033 raw_printf(stderr, "out of memory\n"); 8034 exit(1); 8035 } 8036 for(i=0; i<argc; i++){ 8037 argv[i] = sqlite3_win32_unicode_to_utf8(wargv[i]); 8038 if( argv[i]==0 ){ 8039 raw_printf(stderr, "out of memory\n"); 8040 exit(1); 8041 } 8042 } 8043 #endif 8044 assert( argc>=1 && argv && argv[0] ); 8045 Argv0 = argv[0]; 8046 8047 /* Make sure we have a valid signal handler early, before anything 8048 ** else is done. 8049 */ 8050 #ifdef SIGINT 8051 signal(SIGINT, interrupt_handler); 8052 #endif 8053 8054 #ifdef SQLITE_SHELL_DBNAME_PROC 8055 { 8056 /* If the SQLITE_SHELL_DBNAME_PROC macro is defined, then it is the name 8057 ** of a C-function that will provide the name of the database file. Use 8058 ** this compile-time option to embed this shell program in larger 8059 ** applications. */ 8060 extern void SQLITE_SHELL_DBNAME_PROC(const char**); 8061 SQLITE_SHELL_DBNAME_PROC(&data.zDbFilename); 8062 warnInmemoryDb = 0; 8063 } 8064 #endif 8065 8066 /* Do an initial pass through the command-line argument to locate 8067 ** the name of the database file, the name of the initialization file, 8068 ** the size of the alternative malloc heap, 8069 ** and the first command to execute. 8070 */ 8071 for(i=1; i<argc; i++){ 8072 char *z; 8073 z = argv[i]; 8074 if( z[0]!='-' ){ 8075 if( data.zDbFilename==0 ){ 8076 data.zDbFilename = z; 8077 }else{ 8078 /* Excesss arguments are interpreted as SQL (or dot-commands) and 8079 ** mean that nothing is read from stdin */ 8080 readStdin = 0; 8081 nCmd++; 8082 azCmd = realloc(azCmd, sizeof(azCmd[0])*nCmd); 8083 if( azCmd==0 ){ 8084 raw_printf(stderr, "out of memory\n"); 8085 exit(1); 8086 } 8087 azCmd[nCmd-1] = z; 8088 } 8089 } 8090 if( z[1]=='-' ) z++; 8091 if( strcmp(z,"-separator")==0 8092 || strcmp(z,"-nullvalue")==0 8093 || strcmp(z,"-newline")==0 8094 || strcmp(z,"-cmd")==0 8095 ){ 8096 (void)cmdline_option_value(argc, argv, ++i); 8097 }else if( strcmp(z,"-init")==0 ){ 8098 zInitFile = cmdline_option_value(argc, argv, ++i); 8099 }else if( strcmp(z,"-batch")==0 ){ 8100 /* Need to check for batch mode here to so we can avoid printing 8101 ** informational messages (like from process_sqliterc) before 8102 ** we do the actual processing of arguments later in a second pass. 8103 */ 8104 stdin_is_interactive = 0; 8105 }else if( strcmp(z,"-heap")==0 ){ 8106 #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5) 8107 const char *zSize; 8108 sqlite3_int64 szHeap; 8109 8110 zSize = cmdline_option_value(argc, argv, ++i); 8111 szHeap = integerValue(zSize); 8112 if( szHeap>0x7fff0000 ) szHeap = 0x7fff0000; 8113 sqlite3_config(SQLITE_CONFIG_HEAP, malloc((int)szHeap), (int)szHeap, 64); 8114 #else 8115 (void)cmdline_option_value(argc, argv, ++i); 8116 #endif 8117 }else if( strcmp(z,"-pagecache")==0 ){ 8118 int n, sz; 8119 sz = (int)integerValue(cmdline_option_value(argc,argv,++i)); 8120 if( sz>70000 ) sz = 70000; 8121 if( sz<0 ) sz = 0; 8122 n = (int)integerValue(cmdline_option_value(argc,argv,++i)); 8123 sqlite3_config(SQLITE_CONFIG_PAGECACHE, 8124 (n>0 && sz>0) ? malloc(n*sz) : 0, sz, n); 8125 data.shellFlgs |= SHFLG_Pagecache; 8126 }else if( strcmp(z,"-lookaside")==0 ){ 8127 int n, sz; 8128 sz = (int)integerValue(cmdline_option_value(argc,argv,++i)); 8129 if( sz<0 ) sz = 0; 8130 n = (int)integerValue(cmdline_option_value(argc,argv,++i)); 8131 if( n<0 ) n = 0; 8132 sqlite3_config(SQLITE_CONFIG_LOOKASIDE, sz, n); 8133 if( sz*n==0 ) data.shellFlgs &= ~SHFLG_Lookaside; 8134 #ifdef SQLITE_ENABLE_VFSTRACE 8135 }else if( strcmp(z,"-vfstrace")==0 ){ 8136 extern int vfstrace_register( 8137 const char *zTraceName, 8138 const char *zOldVfsName, 8139 int (*xOut)(const char*,void*), 8140 void *pOutArg, 8141 int makeDefault 8142 ); 8143 vfstrace_register("trace",0,(int(*)(const char*,void*))fputs,stderr,1); 8144 #endif 8145 #ifdef SQLITE_ENABLE_MULTIPLEX 8146 }else if( strcmp(z,"-multiplex")==0 ){ 8147 extern int sqlite3_multiple_initialize(const char*,int); 8148 sqlite3_multiplex_initialize(0, 1); 8149 #endif 8150 }else if( strcmp(z,"-mmap")==0 ){ 8151 sqlite3_int64 sz = integerValue(cmdline_option_value(argc,argv,++i)); 8152 sqlite3_config(SQLITE_CONFIG_MMAP_SIZE, sz, sz); 8153 }else if( strcmp(z,"-vfs")==0 ){ 8154 sqlite3_vfs *pVfs = sqlite3_vfs_find(cmdline_option_value(argc,argv,++i)); 8155 if( pVfs ){ 8156 sqlite3_vfs_register(pVfs, 1); 8157 }else{ 8158 utf8_printf(stderr, "no such VFS: \"%s\"\n", argv[i]); 8159 exit(1); 8160 } 8161 } 8162 } 8163 if( data.zDbFilename==0 ){ 8164 #ifndef SQLITE_OMIT_MEMORYDB 8165 data.zDbFilename = ":memory:"; 8166 warnInmemoryDb = argc==1; 8167 #else 8168 utf8_printf(stderr,"%s: Error: no database filename specified\n", Argv0); 8169 return 1; 8170 #endif 8171 } 8172 data.out = stdout; 8173 8174 /* Go ahead and open the database file if it already exists. If the 8175 ** file does not exist, delay opening it. This prevents empty database 8176 ** files from being created if a user mistypes the database name argument 8177 ** to the sqlite command-line tool. 8178 */ 8179 if( access(data.zDbFilename, 0)==0 ){ 8180 open_db(&data, 0); 8181 } 8182 8183 /* Process the initialization file if there is one. If no -init option 8184 ** is given on the command line, look for a file named ~/.sqliterc and 8185 ** try to process it. 8186 */ 8187 process_sqliterc(&data,zInitFile); 8188 8189 /* Make a second pass through the command-line argument and set 8190 ** options. This second pass is delayed until after the initialization 8191 ** file is processed so that the command-line arguments will override 8192 ** settings in the initialization file. 8193 */ 8194 for(i=1; i<argc; i++){ 8195 char *z = argv[i]; 8196 if( z[0]!='-' ) continue; 8197 if( z[1]=='-' ){ z++; } 8198 if( strcmp(z,"-init")==0 ){ 8199 i++; 8200 }else if( strcmp(z,"-html")==0 ){ 8201 data.mode = MODE_Html; 8202 }else if( strcmp(z,"-list")==0 ){ 8203 data.mode = MODE_List; 8204 }else if( strcmp(z,"-quote")==0 ){ 8205 data.mode = MODE_Quote; 8206 }else if( strcmp(z,"-line")==0 ){ 8207 data.mode = MODE_Line; 8208 }else if( strcmp(z,"-column")==0 ){ 8209 data.mode = MODE_Column; 8210 }else if( strcmp(z,"-csv")==0 ){ 8211 data.mode = MODE_Csv; 8212 memcpy(data.colSeparator,",",2); 8213 }else if( strcmp(z,"-ascii")==0 ){ 8214 data.mode = MODE_Ascii; 8215 sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator, 8216 SEP_Unit); 8217 sqlite3_snprintf(sizeof(data.rowSeparator), data.rowSeparator, 8218 SEP_Record); 8219 }else if( strcmp(z,"-separator")==0 ){ 8220 sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator, 8221 "%s",cmdline_option_value(argc,argv,++i)); 8222 }else if( strcmp(z,"-newline")==0 ){ 8223 sqlite3_snprintf(sizeof(data.rowSeparator), data.rowSeparator, 8224 "%s",cmdline_option_value(argc,argv,++i)); 8225 }else if( strcmp(z,"-nullvalue")==0 ){ 8226 sqlite3_snprintf(sizeof(data.nullValue), data.nullValue, 8227 "%s",cmdline_option_value(argc,argv,++i)); 8228 }else if( strcmp(z,"-header")==0 ){ 8229 data.showHeader = 1; 8230 }else if( strcmp(z,"-noheader")==0 ){ 8231 data.showHeader = 0; 8232 }else if( strcmp(z,"-echo")==0 ){ 8233 ShellSetFlag(&data, SHFLG_Echo); 8234 }else if( strcmp(z,"-eqp")==0 ){ 8235 data.autoEQP = 1; 8236 }else if( strcmp(z,"-eqpfull")==0 ){ 8237 data.autoEQP = 2; 8238 }else if( strcmp(z,"-stats")==0 ){ 8239 data.statsOn = 1; 8240 }else if( strcmp(z,"-scanstats")==0 ){ 8241 data.scanstatsOn = 1; 8242 }else if( strcmp(z,"-backslash")==0 ){ 8243 /* Undocumented command-line option: -backslash 8244 ** Causes C-style backslash escapes to be evaluated in SQL statements 8245 ** prior to sending the SQL into SQLite. Useful for injecting 8246 ** crazy bytes in the middle of SQL statements for testing and debugging. 8247 */ 8248 ShellSetFlag(&data, SHFLG_Backslash); 8249 }else if( strcmp(z,"-bail")==0 ){ 8250 bail_on_error = 1; 8251 }else if( strcmp(z,"-version")==0 ){ 8252 printf("%s %s\n", sqlite3_libversion(), sqlite3_sourceid()); 8253 return 0; 8254 }else if( strcmp(z,"-interactive")==0 ){ 8255 stdin_is_interactive = 1; 8256 }else if( strcmp(z,"-batch")==0 ){ 8257 stdin_is_interactive = 0; 8258 }else if( strcmp(z,"-heap")==0 ){ 8259 i++; 8260 }else if( strcmp(z,"-pagecache")==0 ){ 8261 i+=2; 8262 }else if( strcmp(z,"-lookaside")==0 ){ 8263 i+=2; 8264 }else if( strcmp(z,"-mmap")==0 ){ 8265 i++; 8266 }else if( strcmp(z,"-vfs")==0 ){ 8267 i++; 8268 #ifdef SQLITE_ENABLE_VFSTRACE 8269 }else if( strcmp(z,"-vfstrace")==0 ){ 8270 i++; 8271 #endif 8272 #ifdef SQLITE_ENABLE_MULTIPLEX 8273 }else if( strcmp(z,"-multiplex")==0 ){ 8274 i++; 8275 #endif 8276 }else if( strcmp(z,"-help")==0 ){ 8277 usage(1); 8278 }else if( strcmp(z,"-cmd")==0 ){ 8279 /* Run commands that follow -cmd first and separately from commands 8280 ** that simply appear on the command-line. This seems goofy. It would 8281 ** be better if all commands ran in the order that they appear. But 8282 ** we retain the goofy behavior for historical compatibility. */ 8283 if( i==argc-1 ) break; 8284 z = cmdline_option_value(argc,argv,++i); 8285 if( z[0]=='.' ){ 8286 rc = do_meta_command(z, &data); 8287 if( rc && bail_on_error ) return rc==2 ? 0 : rc; 8288 }else{ 8289 open_db(&data, 0); 8290 rc = shell_exec(data.db, z, shell_callback, &data, &zErrMsg); 8291 if( zErrMsg!=0 ){ 8292 utf8_printf(stderr,"Error: %s\n", zErrMsg); 8293 if( bail_on_error ) return rc!=0 ? rc : 1; 8294 }else if( rc!=0 ){ 8295 utf8_printf(stderr,"Error: unable to process SQL \"%s\"\n", z); 8296 if( bail_on_error ) return rc; 8297 } 8298 } 8299 }else{ 8300 utf8_printf(stderr,"%s: Error: unknown option: %s\n", Argv0, z); 8301 raw_printf(stderr,"Use -help for a list of options.\n"); 8302 return 1; 8303 } 8304 data.cMode = data.mode; 8305 } 8306 8307 if( !readStdin ){ 8308 /* Run all arguments that do not begin with '-' as if they were separate 8309 ** command-line inputs, except for the argToSkip argument which contains 8310 ** the database filename. 8311 */ 8312 for(i=0; i<nCmd; i++){ 8313 if( azCmd[i][0]=='.' ){ 8314 rc = do_meta_command(azCmd[i], &data); 8315 if( rc ) return rc==2 ? 0 : rc; 8316 }else{ 8317 open_db(&data, 0); 8318 rc = shell_exec(data.db, azCmd[i], shell_callback, &data, &zErrMsg); 8319 if( zErrMsg!=0 ){ 8320 utf8_printf(stderr,"Error: %s\n", zErrMsg); 8321 return rc!=0 ? rc : 1; 8322 }else if( rc!=0 ){ 8323 utf8_printf(stderr,"Error: unable to process SQL: %s\n", azCmd[i]); 8324 return rc; 8325 } 8326 } 8327 } 8328 free(azCmd); 8329 }else{ 8330 /* Run commands received from standard input 8331 */ 8332 if( stdin_is_interactive ){ 8333 char *zHome; 8334 char *zHistory = 0; 8335 int nHistory; 8336 printf( 8337 "SQLite version %s %.19s\n" /*extra-version-info*/ 8338 "Enter \".help\" for usage hints.\n", 8339 sqlite3_libversion(), sqlite3_sourceid() 8340 ); 8341 if( warnInmemoryDb ){ 8342 printf("Connected to a "); 8343 printBold("transient in-memory database"); 8344 printf(".\nUse \".open FILENAME\" to reopen on a " 8345 "persistent database.\n"); 8346 } 8347 zHome = find_home_dir(0); 8348 if( zHome ){ 8349 nHistory = strlen30(zHome) + 20; 8350 if( (zHistory = malloc(nHistory))!=0 ){ 8351 sqlite3_snprintf(nHistory, zHistory,"%s/.sqlite_history", zHome); 8352 } 8353 } 8354 if( zHistory ){ shell_read_history(zHistory); } 8355 #if HAVE_READLINE || HAVE_EDITLINE 8356 rl_attempted_completion_function = readline_completion; 8357 #elif HAVE_LINENOISE 8358 linenoiseSetCompletionCallback(linenoise_completion); 8359 #endif 8360 rc = process_input(&data, 0); 8361 if( zHistory ){ 8362 shell_stifle_history(2000); 8363 shell_write_history(zHistory); 8364 free(zHistory); 8365 } 8366 }else{ 8367 rc = process_input(&data, stdin); 8368 } 8369 } 8370 set_table_name(&data, 0); 8371 if( data.db ){ 8372 session_close_all(&data); 8373 sqlite3_close(data.db); 8374 } 8375 sqlite3_free(data.zFreeOnClose); 8376 find_home_dir(1); 8377 #if !SQLITE_SHELL_IS_UTF8 8378 for(i=0; i<argc; i++) sqlite3_free(argv[i]); 8379 sqlite3_free(argv); 8380 #endif 8381 return rc; 8382 }