sqlite CLI scripts using ".echo on" with ".once" or ".output"

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

sqlite CLI scripts using ".echo on" with ".once" or ".output"

Donald Griggs
I imagine this is expected behavior but wanted to be sure.

In an sqlite commandline utility (CLI) script, if one enables

.echo on
  for debugging, and redirects output either by

.once filename
   or
.output filename

then the sql commands themselves are included in the output file.

I've taken to putting a defensive ".echo off" just before any .output or
.once
commands to guard against my own absent-mindedness.

Notes:

   1. I've included a simple cut-paste  script below followed by its output.
   2. I tested with
      - Win 7,  and SQLite version 3.20.0
      - Win 10 and SQLite versions 3.20.1 and  3.17.0
      - Ubuntu 15.10 and sqlite 3.8.11.1
   3. I used .mode csv below, but the mode does not appear to matter.
   4. I used ".output stdout" and an in-memory db for illustration, but
   sending the output to a true file or using persistent db doesn't appear to
   matter.
   5. Using a batch file and a file containing the sql (vs cut-paste
   commands) does not appear to matter.
   6. An explicit ".trace off" does not appear to matter.
   7. Interestingly, dot commands entered while .output is in effect are
    NOT echoed to the output file as actual sql commands are.


Thanks for a great product,
    Donald Griggs
    Columbia SC USA

===============Paste following to console
sqlite3 :memory:

CREATE TABLE fruits( name TEXT, cnt INTEGER);
INSERT INTO fruits VALUES ('apple', 1), ('pear',2 ), ('mango', 4),
('grape', 3);

SELECT * FROM fruits;

.mode csv

.echo on
.once stdout
SELECT * FROM fruits;

.echo off
.once stdout
SELECT * FROM fruits;
.quit
==================================

Result (Win 7, with notation added)
==================================
SQLite version 3.20.0 2017-08-01 13:24:15
Enter ".help" for usage hints.
sqlite>
sqlite> CREATE TABLE fruits( name TEXT, cnt INTEGER);
sqlite> INSERT INTO fruits VALUES ('apple', 1), ('pear',2 ), ('mango', 4),
('grape', 3);
sqlite>
sqlite> SELECT * FROM fruits;
apple|1
pear|2
mango|4
grape|3
sqlite>
sqlite> .mode csv
sqlite>
sqlite> .echo on
sqlite> .once stdout
.once stdout
sqlite> SELECT * FROM fruits;
SELECT * FROM fruits;    <<<<**************The select is included in the
output file************
apple,1
pear,2
mango,4
grape,3
sqlite>

sqlite> .echo off
.echo off
sqlite> .once stdout
sqlite> SELECT * FROM fruits;
apple,1
pear,2
mango,4
grape,3
sqlite> .quit
==================================
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users