dbcli / litecli

CLI for SQLite Databases with auto-completion and syntax highlighting
https://litecli.com
BSD 3-Clause "New" or "Revised" License
2.06k stars 67 forks source link

When using .once -o, only last line remains #148

Closed mjpieters closed 9 months ago

mjpieters commented 1 year ago

When using .once -o ..., only the last line of the next output remains in the file once that command has completed.

That's because the write_once() function is executed for each individual output line, and each time the output file is opened with a new open(**once_file) call. Because the -o sets the file mode to "w", the output file is truncated for each line, and so all preceding output is lost.

Either the write_once() should execute once_file["mode"] = "a" so further lines are appended instead of replacing the file, or the code should be refactored to work like the tee() command and keep a reference to the opened file for re-use until unset_once_if_written() is called (which would then close the file). With that second option, you could then also drop the written_to_once_file flag variable, because the opened file object would only exist if there had been output to write.

amjith commented 1 year ago

Good catch. I'll check the implementation to see if I can refactor it. Thanks for reporting the bug.

mjpieters commented 10 months ago

Ping, is this still on your radar?