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
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users