1 # 2009 Nov 11 2 # 3 # The author disclaims copyright to this source code. In place of 4 # a legal notice, here is a blessing: 5 # 6 # May you do good and not evil. 7 # May you find forgiveness for yourself and forgive others. 8 # May you share freely, never taking more than you give. 9 # 10 #*********************************************************************** 11 # 12 # The focus of this file is testing the CLI shell tool. 13 # 14 # $Id: shell1.test,v 1.7 2009/07/17 16:54:48 shaneh Exp $ 15 # 16 17 # Test plan: 18 # 19 # shell1-1.*: Basic command line option handling. 20 # shell1-2.*: Basic "dot" command token parsing. 21 # shell1-3.*: Basic test that "dot" command can be called. 22 # 23 24 package require sqlite3 25 26 set CLI "./sqlite3" 27 28 proc do_test {name cmd expected} { 29 puts -nonewline "$name ..." 30 set res [uplevel $cmd] 31 if {$res eq $expected} { 32 puts Ok 33 } else { 34 puts Error 35 puts " Got: $res" 36 puts " Expected: $expected" 37 exit 38 } 39 } 40 41 proc execsql {sql} { 42 uplevel [list db eval $sql] 43 } 44 45 proc catchsql {sql} { 46 set rc [catch {uplevel [list db eval $sql]} msg] 47 list $rc $msg 48 } 49 50 proc catchcmd {db {cmd ""}} { 51 global CLI 52 set out [open cmds.txt w] 53 puts $out $cmd 54 close $out 55 set line "exec $CLI $db < cmds.txt" 56 set rc [catch { eval $line } msg] 57 list $rc $msg 58 } 59 60 file delete -force test.db test.db.journal 61 sqlite3 db test.db 62 63 #---------------------------------------------------------------------------- 64 # Test cases shell1-1.*: Basic command line option handling. 65 # 66 67 # invalid option 68 do_test shell1-1.1.1 { 69 set res [catchcmd "-bad test.db" ""] 70 set rc [lindex $res 0] 71 list $rc \ 72 [regexp {Error: unknown option: -bad} $res] 73 } {1 1} 74 # error on extra options 75 do_test shell1-1.1.2 { 76 set res [catchcmd "-bad test.db \"select 3\" \"select 4\"" ""] 77 set rc [lindex $res 0] 78 list $rc \ 79 [regexp {Error: too many options: "select 4"} $res] 80 } {1 1} 81 # error on extra options 82 do_test shell1-1.1.3 { 83 set res [catchcmd "-bad FOO test.db BAD" ".quit"] 84 set rc [lindex $res 0] 85 list $rc \ 86 [regexp {Error: too many options: "BAD"} $res] 87 } {1 1} 88 89 # -help 90 do_test shell1-1.2.1 { 91 set res [catchcmd "-help test.db" ""] 92 set rc [lindex $res 0] 93 list $rc \ 94 [regexp {Usage} $res] \ 95 [regexp {\-init} $res] \ 96 [regexp {\-version} $res] 97 } {1 1 1 1} 98 99 # -init filename read/process named file 100 do_test shell1-1.3.1 { 101 catchcmd "-init FOO test.db" "" 102 } {0 {}} 103 do_test shell1-1.3.2 { 104 set res [catchcmd "-init FOO test.db .quit BAD" ""] 105 set rc [lindex $res 0] 106 list $rc \ 107 [regexp {Error: too many options: "BAD"} $res] 108 } {1 1} 109 110 # -echo print commands before execution 111 do_test shell1-1.4.1 { 112 catchcmd "-echo test.db" "" 113 } {0 {}} 114 115 # -[no]header turn headers on or off 116 do_test shell1-1.5.1 { 117 catchcmd "-header test.db" "" 118 } {0 {}} 119 do_test shell1-1.5.2 { 120 catchcmd "-noheader test.db" "" 121 } {0 {}} 122 123 # -bail stop after hitting an error 124 do_test shell1-1.6.1 { 125 catchcmd "-bail test.db" "" 126 } {0 {}} 127 128 # -interactive force interactive I/O 129 do_test shell1-1.7.1 { 130 set res [catchcmd "-interactive test.db" ".quit"] 131 set rc [lindex $res 0] 132 list $rc \ 133 [regexp {SQLite version} $res] \ 134 [regexp {Enter SQL statements} $res] 135 } {0 1 1} 136 137 # -batch force batch I/O 138 do_test shell1-1.8.1 { 139 catchcmd "-batch test.db" "" 140 } {0 {}} 141 142 # -column set output mode to 'column' 143 do_test shell1-1.9.1 { 144 catchcmd "-column test.db" "" 145 } {0 {}} 146 147 # -csv set output mode to 'csv' 148 do_test shell1-1.10.1 { 149 catchcmd "-csv test.db" "" 150 } {0 {}} 151 152 # -html set output mode to HTML 153 do_test shell1-1.11.1 { 154 catchcmd "-html test.db" "" 155 } {0 {}} 156 157 # -line set output mode to 'line' 158 do_test shell1-1.12.1 { 159 catchcmd "-line test.db" "" 160 } {0 {}} 161 162 # -list set output mode to 'list' 163 do_test shell1-1.13.1 { 164 catchcmd "-list test.db" "" 165 } {0 {}} 166 167 # -separator 'x' set output field separator (|) 168 do_test shell1-1.14.1 { 169 catchcmd "-separator 'x' test.db" "" 170 } {0 {}} 171 do_test shell1-1.14.2 { 172 catchcmd "-separator x test.db" "" 173 } {0 {}} 174 do_test shell1-1.14.3 { 175 set res [catchcmd "-separator" ""] 176 set rc [lindex $res 0] 177 list $rc \ 178 [regexp {Error: missing argument for option: -separator} $res] 179 } {1 1} 180 181 # -stats print memory stats before each finalize 182 do_test shell1-1.14b.1 { 183 catchcmd "-stats test.db" "" 184 } {0 {}} 185 186 # -nullvalue 'text' set text string for NULL values 187 do_test shell1-1.15.1 { 188 catchcmd "-nullvalue 'x' test.db" "" 189 } {0 {}} 190 do_test shell1-1.15.2 { 191 catchcmd "-nullvalue x test.db" "" 192 } {0 {}} 193 do_test shell1-1.15.3 { 194 set res [catchcmd "-nullvalue" ""] 195 set rc [lindex $res 0] 196 list $rc \ 197 [regexp {Error: missing argument for option: -nullvalue} $res] 198 } {1 1} 199 200 # -version show SQLite version 201 do_test shell1-1.16.1 { 202 catchcmd "-version test.db" "" 203 } {0 3.7.6.3} 204 205 #---------------------------------------------------------------------------- 206 # Test cases shell1-2.*: Basic "dot" command token parsing. 207 # 208 209 # check first token handling 210 do_test shell1-2.1.1 { 211 catchcmd "test.db" ".foo" 212 } {1 {Error: unknown command or invalid arguments: "foo". Enter ".help" for help}} 213 do_test shell1-2.1.2 { 214 catchcmd "test.db" ".\"foo OFF\"" 215 } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for help}} 216 do_test shell1-2.1.3 { 217 catchcmd "test.db" ".\'foo OFF\'" 218 } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for help}} 219 220 # unbalanced quotes 221 do_test shell1-2.2.1 { 222 catchcmd "test.db" ".\"foo OFF" 223 } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for help}} 224 do_test shell1-2.2.2 { 225 catchcmd "test.db" ".\'foo OFF" 226 } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for help}} 227 do_test shell1-2.2.3 { 228 catchcmd "test.db" ".explain \"OFF" 229 } {0 {}} 230 do_test shell1-2.2.4 { 231 catchcmd "test.db" ".explain \'OFF" 232 } {0 {}} 233 do_test shell1-2.2.5 { 234 catchcmd "test.db" ".mode \"insert FOO" 235 } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}} 236 do_test shell1-2.2.6 { 237 catchcmd "test.db" ".mode \'insert FOO" 238 } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}} 239 240 # check multiple tokens, and quoted tokens 241 do_test shell1-2.3.1 { 242 catchcmd "test.db" ".explain 1" 243 } {0 {}} 244 do_test shell1-2.3.2 { 245 catchcmd "test.db" ".explain on" 246 } {0 {}} 247 do_test shell1-2.3.3 { 248 catchcmd "test.db" ".explain \"1 2 3\"" 249 } {0 {}} 250 do_test shell1-2.3.4 { 251 catchcmd "test.db" ".explain \"OFF\"" 252 } {0 {}} 253 do_test shell1-2.3.5 { 254 catchcmd "test.db" ".\'explain\' \'OFF\'" 255 } {0 {}} 256 do_test shell1-2.3.6 { 257 catchcmd "test.db" ".explain \'OFF\'" 258 } {0 {}} 259 do_test shell1-2.3.7 { 260 catchcmd "test.db" ".\'explain\' \'OFF\'" 261 } {0 {}} 262 263 # check quoted args are unquoted 264 do_test shell1-2.4.1 { 265 catchcmd "test.db" ".mode FOO" 266 } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}} 267 do_test shell1-2.4.2 { 268 catchcmd "test.db" ".mode csv" 269 } {0 {}} 270 do_test shell1-2.4.2 { 271 catchcmd "test.db" ".mode \"csv\"" 272 } {0 {}} 273 274 275 #---------------------------------------------------------------------------- 276 # Test cases shell1-3.*: Basic test that "dot" command can be called. 277 # 278 279 # .backup ?DB? FILE Backup DB (default "main") to FILE 280 do_test shell1-3.1.1 { 281 catchcmd "test.db" ".backup" 282 } {1 {Error: unknown command or invalid arguments: "backup". Enter ".help" for help}} 283 do_test shell1-3.1.2 { 284 catchcmd "test.db" ".backup FOO" 285 } {0 {}} 286 do_test shell1-3.1.3 { 287 catchcmd "test.db" ".backup FOO BAR" 288 } {1 {Error: unknown database FOO}} 289 do_test shell1-3.1.4 { 290 # too many arguments 291 catchcmd "test.db" ".backup FOO BAR BAD" 292 } {1 {Error: unknown command or invalid arguments: "backup". Enter ".help" for help}} 293 294 # .bail ON|OFF Stop after hitting an error. Default OFF 295 do_test shell1-3.2.1 { 296 catchcmd "test.db" ".bail" 297 } {1 {Error: unknown command or invalid arguments: "bail". Enter ".help" for help}} 298 do_test shell1-3.2.2 { 299 catchcmd "test.db" ".bail ON" 300 } {0 {}} 301 do_test shell1-3.2.3 { 302 catchcmd "test.db" ".bail OFF" 303 } {0 {}} 304 do_test shell1-3.2.4 { 305 # too many arguments 306 catchcmd "test.db" ".bail OFF BAD" 307 } {1 {Error: unknown command or invalid arguments: "bail". Enter ".help" for help}} 308 309 # .databases List names and files of attached databases 310 do_test shell1-3.3.1 { 311 set res [catchcmd "test.db" ".databases"] 312 regexp {0.*main.*test\.db} $res 313 } {1} 314 do_test shell1-3.3.2 { 315 # too many arguments 316 catchcmd "test.db" ".databases BAD" 317 } {1 {Error: unknown command or invalid arguments: "databases". Enter ".help" for help}} 318 319 # .dump ?TABLE? ... Dump the database in an SQL text format 320 # If TABLE specified, only dump tables matching 321 # LIKE pattern TABLE. 322 do_test shell1-3.4.1 { 323 set res [catchcmd "test.db" ".dump"] 324 list [regexp {BEGIN TRANSACTION;} $res] \ 325 [regexp {COMMIT;} $res] 326 } {1 1} 327 do_test shell1-3.4.2 { 328 set res [catchcmd "test.db" ".dump FOO"] 329 list [regexp {BEGIN TRANSACTION;} $res] \ 330 [regexp {COMMIT;} $res] 331 } {1 1} 332 do_test shell1-3.4.3 { 333 # too many arguments 334 catchcmd "test.db" ".dump FOO BAD" 335 } {1 {Error: unknown command or invalid arguments: "dump". Enter ".help" for help}} 336 337 # .echo ON|OFF Turn command echo on or off 338 do_test shell1-3.5.1 { 339 catchcmd "test.db" ".echo" 340 } {1 {Error: unknown command or invalid arguments: "echo". Enter ".help" for help}} 341 do_test shell1-3.5.2 { 342 catchcmd "test.db" ".echo ON" 343 } {0 {}} 344 do_test shell1-3.5.3 { 345 catchcmd "test.db" ".echo OFF" 346 } {0 {}} 347 do_test shell1-3.5.4 { 348 # too many arguments 349 catchcmd "test.db" ".echo OFF BAD" 350 } {1 {Error: unknown command or invalid arguments: "echo". Enter ".help" for help}} 351 352 # .exit Exit this program 353 do_test shell1-3.6.1 { 354 catchcmd "test.db" ".exit" 355 } {0 {}} 356 do_test shell1-3.6.2 { 357 # too many arguments 358 catchcmd "test.db" ".exit BAD" 359 } {1 {Error: unknown command or invalid arguments: "exit". Enter ".help" for help}} 360 361 # .explain ON|OFF Turn output mode suitable for EXPLAIN on or off. 362 do_test shell1-3.7.1 { 363 catchcmd "test.db" ".explain" 364 # explain is the exception to the booleans. without an option, it turns it on. 365 } {0 {}} 366 do_test shell1-3.7.2 { 367 catchcmd "test.db" ".explain ON" 368 } {0 {}} 369 do_test shell1-3.7.3 { 370 catchcmd "test.db" ".explain OFF" 371 } {0 {}} 372 do_test shell1-3.7.4 { 373 # too many arguments 374 catchcmd "test.db" ".explain OFF BAD" 375 } {1 {Error: unknown command or invalid arguments: "explain". Enter ".help" for help}} 376 377 378 # .header(s) ON|OFF Turn display of headers on or off 379 do_test shell1-3.9.1 { 380 catchcmd "test.db" ".header" 381 } {1 {Error: unknown command or invalid arguments: "header". Enter ".help" for help}} 382 do_test shell1-3.9.2 { 383 catchcmd "test.db" ".header ON" 384 } {0 {}} 385 do_test shell1-3.9.3 { 386 catchcmd "test.db" ".header OFF" 387 } {0 {}} 388 do_test shell1-3.9.4 { 389 # too many arguments 390 catchcmd "test.db" ".header OFF BAD" 391 } {1 {Error: unknown command or invalid arguments: "header". Enter ".help" for help}} 392 393 do_test shell1-3.9.5 { 394 catchcmd "test.db" ".headers" 395 } {1 {Error: unknown command or invalid arguments: "headers". Enter ".help" for help}} 396 do_test shell1-3.9.6 { 397 catchcmd "test.db" ".headers ON" 398 } {0 {}} 399 do_test shell1-3.9.7 { 400 catchcmd "test.db" ".headers OFF" 401 } {0 {}} 402 do_test shell1-3.9.8 { 403 # too many arguments 404 catchcmd "test.db" ".headers OFF BAD" 405 } {1 {Error: unknown command or invalid arguments: "headers". Enter ".help" for help}} 406 407 # .help Show this message 408 do_test shell1-3.10.1 { 409 set res [catchcmd "test.db" ".help"] 410 # look for a few of the possible help commands 411 list [regexp {.help} $res] \ 412 [regexp {.quit} $res] \ 413 [regexp {.show} $res] 414 } {1 1 1} 415 do_test shell1-3.10.2 { 416 # we allow .help to take extra args (it is help after all) 417 set res [catchcmd "test.db" ".help BAD"] 418 # look for a few of the possible help commands 419 list [regexp {.help} $res] \ 420 [regexp {.quit} $res] \ 421 [regexp {.show} $res] 422 } {1 1 1} 423 424 # .import FILE TABLE Import data from FILE into TABLE 425 do_test shell1-3.11.1 { 426 catchcmd "test.db" ".import" 427 } {1 {Error: unknown command or invalid arguments: "import". Enter ".help" for help}} 428 do_test shell1-3.11.2 { 429 catchcmd "test.db" ".import FOO" 430 } {1 {Error: unknown command or invalid arguments: "import". Enter ".help" for help}} 431 do_test shell1-3.11.2 { 432 catchcmd "test.db" ".import FOO BAR" 433 } {1 {Error: no such table: BAR}} 434 do_test shell1-3.11.3 { 435 # too many arguments 436 catchcmd "test.db" ".import FOO BAR BAD" 437 } {1 {Error: unknown command or invalid arguments: "import". Enter ".help" for help}} 438 439 # .indices ?TABLE? Show names of all indices 440 # If TABLE specified, only show indices for tables 441 # matching LIKE pattern TABLE. 442 do_test shell1-3.12.1 { 443 catchcmd "test.db" ".indices" 444 } {0 {}} 445 do_test shell1-3.12.2 { 446 catchcmd "test.db" ".indices FOO" 447 } {0 {}} 448 do_test shell1-3.12.3 { 449 # too many arguments 450 catchcmd "test.db" ".indices FOO BAD" 451 } {1 {Error: unknown command or invalid arguments: "indices". Enter ".help" for help}} 452 453 # .mode MODE ?TABLE? Set output mode where MODE is one of: 454 # csv Comma-separated values 455 # column Left-aligned columns. (See .width) 456 # html HTML <table> code 457 # insert SQL insert statements for TABLE 458 # line One value per line 459 # list Values delimited by .separator string 460 # tabs Tab-separated values 461 # tcl TCL list elements 462 do_test shell1-3.13.1 { 463 catchcmd "test.db" ".mode" 464 } {1 {Error: unknown command or invalid arguments: "mode". Enter ".help" for help}} 465 do_test shell1-3.13.2 { 466 catchcmd "test.db" ".mode FOO" 467 } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}} 468 do_test shell1-3.13.3 { 469 catchcmd "test.db" ".mode csv" 470 } {0 {}} 471 do_test shell1-3.13.4 { 472 catchcmd "test.db" ".mode column" 473 } {0 {}} 474 do_test shell1-3.13.5 { 475 catchcmd "test.db" ".mode html" 476 } {0 {}} 477 do_test shell1-3.13.6 { 478 catchcmd "test.db" ".mode insert" 479 } {0 {}} 480 do_test shell1-3.13.7 { 481 catchcmd "test.db" ".mode line" 482 } {0 {}} 483 do_test shell1-3.13.8 { 484 catchcmd "test.db" ".mode list" 485 } {0 {}} 486 do_test shell1-3.13.9 { 487 catchcmd "test.db" ".mode tabs" 488 } {0 {}} 489 do_test shell1-3.13.10 { 490 catchcmd "test.db" ".mode tcl" 491 } {0 {}} 492 do_test shell1-3.13.11 { 493 # too many arguments 494 catchcmd "test.db" ".mode tcl BAD" 495 } {1 {Error: invalid arguments: "BAD". Enter ".help" for help}} 496 497 # don't allow partial mode type matches 498 do_test shell1-3.13.12 { 499 catchcmd "test.db" ".mode l" 500 } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}} 501 do_test shell1-3.13.13 { 502 catchcmd "test.db" ".mode li" 503 } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}} 504 do_test shell1-3.13.14 { 505 catchcmd "test.db" ".mode lin" 506 } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}} 507 508 # .nullvalue STRING Print STRING in place of NULL values 509 do_test shell1-3.14.1 { 510 catchcmd "test.db" ".nullvalue" 511 } {1 {Error: unknown command or invalid arguments: "nullvalue". Enter ".help" for help}} 512 do_test shell1-3.14.2 { 513 catchcmd "test.db" ".nullvalue FOO" 514 } {0 {}} 515 do_test shell1-3.14.3 { 516 # too many arguments 517 catchcmd "test.db" ".nullvalue FOO BAD" 518 } {1 {Error: unknown command or invalid arguments: "nullvalue". Enter ".help" for help}} 519 520 # .output FILENAME Send output to FILENAME 521 do_test shell1-3.15.1 { 522 catchcmd "test.db" ".output" 523 } {1 {Error: unknown command or invalid arguments: "output". Enter ".help" for help}} 524 do_test shell1-3.15.2 { 525 catchcmd "test.db" ".output FOO" 526 } {0 {}} 527 do_test shell1-3.15.3 { 528 # too many arguments 529 catchcmd "test.db" ".output FOO BAD" 530 } {1 {Error: unknown command or invalid arguments: "output". Enter ".help" for help}} 531 532 # .output stdout Send output to the screen 533 do_test shell1-3.16.1 { 534 catchcmd "test.db" ".output stdout" 535 } {0 {}} 536 do_test shell1-3.16.2 { 537 # too many arguments 538 catchcmd "test.db" ".output stdout BAD" 539 } {1 {Error: unknown command or invalid arguments: "output". Enter ".help" for help}} 540 541 # .prompt MAIN CONTINUE Replace the standard prompts 542 do_test shell1-3.17.1 { 543 catchcmd "test.db" ".prompt" 544 } {1 {Error: unknown command or invalid arguments: "prompt". Enter ".help" for help}} 545 do_test shell1-3.17.2 { 546 catchcmd "test.db" ".prompt FOO" 547 } {0 {}} 548 do_test shell1-3.17.3 { 549 catchcmd "test.db" ".prompt FOO BAR" 550 } {0 {}} 551 do_test shell1-3.17.4 { 552 # too many arguments 553 catchcmd "test.db" ".prompt FOO BAR BAD" 554 } {1 {Error: unknown command or invalid arguments: "prompt". Enter ".help" for help}} 555 556 # .quit Exit this program 557 do_test shell1-3.18.1 { 558 catchcmd "test.db" ".quit" 559 } {0 {}} 560 do_test shell1-3.18.2 { 561 # too many arguments 562 catchcmd "test.db" ".quit BAD" 563 } {1 {Error: unknown command or invalid arguments: "quit". Enter ".help" for help}} 564 565 # .read FILENAME Execute SQL in FILENAME 566 do_test shell1-3.19.1 { 567 catchcmd "test.db" ".read" 568 } {1 {Error: unknown command or invalid arguments: "read". Enter ".help" for help}} 569 do_test shell1-3.19.2 { 570 file delete -force FOO 571 catchcmd "test.db" ".read FOO" 572 } {1 {Error: cannot open "FOO"}} 573 do_test shell1-3.19.3 { 574 # too many arguments 575 catchcmd "test.db" ".read FOO BAD" 576 } {1 {Error: unknown command or invalid arguments: "read". Enter ".help" for help}} 577 578 # .restore ?DB? FILE Restore content of DB (default "main") from FILE 579 do_test shell1-3.20.1 { 580 catchcmd "test.db" ".restore" 581 } {1 {Error: unknown command or invalid arguments: "restore". Enter ".help" for help}} 582 do_test shell1-3.20.2 { 583 catchcmd "test.db" ".restore FOO" 584 } {0 {}} 585 do_test shell1-3.20.3 { 586 catchcmd "test.db" ".restore FOO BAR" 587 } {1 {Error: unknown database FOO}} 588 do_test shell1-3.20.4 { 589 # too many arguments 590 catchcmd "test.db" ".restore FOO BAR BAD" 591 } {1 {Error: unknown command or invalid arguments: "restore". Enter ".help" for help}} 592 593 # .schema ?TABLE? Show the CREATE statements 594 # If TABLE specified, only show tables matching 595 # LIKE pattern TABLE. 596 do_test shell1-3.21.1 { 597 catchcmd "test.db" ".schema" 598 } {0 {}} 599 do_test shell1-3.21.2 { 600 catchcmd "test.db" ".schema FOO" 601 } {0 {}} 602 do_test shell1-3.21.3 { 603 # too many arguments 604 catchcmd "test.db" ".schema FOO BAD" 605 } {1 {Error: unknown command or invalid arguments: "schema". Enter ".help" for help}} 606 607 # .separator STRING Change separator used by output mode and .import 608 do_test shell1-3.22.1 { 609 catchcmd "test.db" ".separator" 610 } {1 {Error: unknown command or invalid arguments: "separator". Enter ".help" for help}} 611 do_test shell1-3.22.2 { 612 catchcmd "test.db" ".separator FOO" 613 } {0 {}} 614 do_test shell1-3.22.3 { 615 # too many arguments 616 catchcmd "test.db" ".separator FOO BAD" 617 } {1 {Error: unknown command or invalid arguments: "separator". Enter ".help" for help}} 618 619 # .show Show the current values for various settings 620 do_test shell1-3.23.1 { 621 set res [catchcmd "test.db" ".show"] 622 list [regexp {echo:} $res] \ 623 [regexp {explain:} $res] \ 624 [regexp {headers:} $res] \ 625 [regexp {mode:} $res] \ 626 [regexp {nullvalue:} $res] \ 627 [regexp {output:} $res] \ 628 [regexp {separator:} $res] \ 629 [regexp {stats:} $res] \ 630 [regexp {width:} $res] 631 } {1 1 1 1 1 1 1 1 1} 632 do_test shell1-3.23.2 { 633 # too many arguments 634 catchcmd "test.db" ".show BAD" 635 } {1 {Error: unknown command or invalid arguments: "show". Enter ".help" for help}} 636 637 # .stats ON|OFF Turn stats on or off 638 do_test shell1-3.23b.1 { 639 catchcmd "test.db" ".stats" 640 } {1 {Error: unknown command or invalid arguments: "stats". Enter ".help" for help}} 641 do_test shell1-3.23b.2 { 642 catchcmd "test.db" ".stats ON" 643 } {0 {}} 644 do_test shell1-3.23b.3 { 645 catchcmd "test.db" ".stats OFF" 646 } {0 {}} 647 do_test shell1-3.23b.4 { 648 # too many arguments 649 catchcmd "test.db" ".stats OFF BAD" 650 } {1 {Error: unknown command or invalid arguments: "stats". Enter ".help" for help}} 651 652 # .tables ?TABLE? List names of tables 653 # If TABLE specified, only list tables matching 654 # LIKE pattern TABLE. 655 do_test shell1-3.24.1 { 656 catchcmd "test.db" ".tables" 657 } {0 {}} 658 do_test shell1-3.24.2 { 659 catchcmd "test.db" ".tables FOO" 660 } {0 {}} 661 do_test shell1-3.24.3 { 662 # too many arguments 663 catchcmd "test.db" ".tables FOO BAD" 664 } {1 {Error: unknown command or invalid arguments: "tables". Enter ".help" for help}} 665 666 # .timeout MS Try opening locked tables for MS milliseconds 667 do_test shell1-3.25.1 { 668 catchcmd "test.db" ".timeout" 669 } {1 {Error: unknown command or invalid arguments: "timeout". Enter ".help" for help}} 670 do_test shell1-3.25.2 { 671 catchcmd "test.db" ".timeout zzz" 672 # this should be treated the same as a '0' timeout 673 } {0 {}} 674 do_test shell1-3.25.3 { 675 catchcmd "test.db" ".timeout 1" 676 } {0 {}} 677 do_test shell1-3.25.4 { 678 # too many arguments 679 catchcmd "test.db" ".timeout 1 BAD" 680 } {1 {Error: unknown command or invalid arguments: "timeout". Enter ".help" for help}} 681 682 # .width NUM NUM ... Set column widths for "column" mode 683 do_test shell1-3.26.1 { 684 catchcmd "test.db" ".width" 685 } {1 {Error: unknown command or invalid arguments: "width". Enter ".help" for help}} 686 do_test shell1-3.26.2 { 687 catchcmd "test.db" ".width xxx" 688 # this should be treated the same as a '0' width for col 1 689 } {0 {}} 690 do_test shell1-3.26.3 { 691 catchcmd "test.db" ".width xxx yyy" 692 # this should be treated the same as a '0' width for col 1 and 2 693 } {0 {}} 694 do_test shell1-3.26.4 { 695 catchcmd "test.db" ".width 1 1" 696 # this should be treated the same as a '1' width for col 1 and 2 697 } {0 {}} 698 699 # .timer ON|OFF Turn the CPU timer measurement on or off 700 do_test shell1-3.27.1 { 701 catchcmd "test.db" ".timer" 702 } {1 {Error: unknown command or invalid arguments: "timer". Enter ".help" for help}} 703 do_test shell1-3.27.2 { 704 catchcmd "test.db" ".timer ON" 705 } {0 {}} 706 do_test shell1-3.27.3 { 707 catchcmd "test.db" ".timer OFF" 708 } {0 {}} 709 do_test shell1-3.27.4 { 710 # too many arguments 711 catchcmd "test.db" ".timer OFF BAD" 712 } {1 {Error: unknown command or invalid arguments: "timer". Enter ".help" for help}} 713 714 puts "CLI tests completed successfully" 715