I did research deeper for SQLite Studio. It uses a separate (perhaps one at all) thread for SQLite. When an user run multiply queries then Studio push all of them to an own executable stack and execute them consequentially i.e. Studio doesn't run queries immediately. Studio waits for a running query to complete and then pops the next one off the stack and runs it. So when user press "Interrupt"-button for a not-running-yet query there is no call `sqlite3_interrupt`, only removal from the stack. Very simple and works for most cases. But there are also side effects: openning of data editor for table during a long time query freezes GUI. .