Jeff Duntemann's Contrapositive Diary Rotating Header Image

May 2nd, 2013:

Where’s the rest of SQLite?

Wait. Oh. That’s all there is.


I had this problem once before, with the Atlantis word processor. It’s 5MB installed. 5. The first time I installed it I suspected I had downloaded a corrupt file, but no: However they did it, the wizards over at Atlantis implemented a damned fine Word 2000 clone in 5MB. It doesn’t have the collaboration features, but for solo work it’s a very big win, and exports extremely clean epubs as a side benefit.

For a fair number of years now, my non-Delphi database work has all been in MySQL. (With Delphi I use a VCL product called DBISAM, which is linked into the compiled .exe and doesn’t have to be installed separately.) Because SQLite is available for the Raspbian OS and MySQL isn’t (as best I know; Percona runs on Arch Linux) I’m going to be using SQLite as a database teaching tool. So when I installed it the other day, I stared at the 600K .dll and wondered, Is that all there is?

Yes, that’s all there is, my friend–so let’s keep dancing. Let’s break out the tools and have a ball. ‘Cause that’s all there is!

Wow. I verified it by searching for the sqlite3.dll file on my system. The Calibre ebook manager uses an older version (as do a few other things) and the file was not only that same unbelievable size, but smaller. Can you implement a relational database engine in only 372K? I guess you can.

One reason SQLite’s .dll is so small is that it contains no UI at all. There’s a bare-bones command-line management utility available as a separate download. As some of you may know (or suspect) I dislike command lines intensely. So it wasn’t long before I had two free GUI management apps for SQLite databases. One was recommended by Chris Newman’s book on SQLite, SQLite Database Browser, and the other is SQLiteMan. Both are free and installed without drama. So far I prefer SQLiteMan, but it’s really too early to tell. SQLiteMan is supposedly compilable on the RPi. I intend to try that. I’ll let you know how it goes.

One other reason may be that SQLite is “typeless,” which means that the engine does not do type-checking on reads and writes. You can put anything you want in any field (apart from key fields, which are treated specially) and if it makes no sense, it’s your screwup on your conscience. I’m a strongly typed guy and this would rankle, if it didn’t allow a database engine to come in at half a megabyte.

There are wrappers for most common languages, including Lua and Lazarus/FreePascal, both of which I have here and have been fooling with in recent months. I’ve been very spoiled by DBISAM, and I’m interested to see how well SQLite works in non-server applications. More as it happens.