I'd recommend the first of these. The most valuable result of this is that you can see the results as a string, which will make it ridiculously fast to improve and debug your code. I've done this to translate a GUI interface into a SQL SELECT, and it was easy and fun. It also has the advantage that if you ever move to another SQL engine you can see exactly what's going on and won't have to change much code. There's no way to perform SQL functions by calling SQLite functions directly. For instance, there's no SQLite function which performs an UPDATE which doesn't involve you constructing the whole SQL command and executing it. (Unless you get hacky and call undocumented functions inside the SQLite library.) You could use some other SQL engine, but SQLite's parser is ridiculously fast and efficient, because it uses lemon which is also written by the SQLite team. You're not really losing much time over trying to construct your own bytecoded program.