A interface sqlite3
usa a biblioteca ReadLine para edição da linha de comando. Você pode apagar uma linha completa com Ctrl + U mas depois de pressionar Enter , a linha foi aceita e não é mais editável (bem, é, mas não como parte da declaração atual).
Como você notou, enviar o fim do arquivo com Ctrl + D solicitará ao cliente que saia, o que não é o que você deseja.
Sua melhor aposta é para
- feche qualquer string e, em seguida,
- antes de emitir um% final
;
, gere um erro de sintaxe.
No seu exemplo:
sqlite> select * from todos'
...> '
...> *** I made a mistake
...> ;
Error: near "*": syntax error
sqlite>
Isso garantirá que nada seja executado e deixará você na sessão do SQLite com tabelas temporárias intactas.