I said you could use that, not should.
The other way would be to experiment with other backends. In this case,
an actual sqlite proof of concept (that is, working code) would help.
Hey.
I
got interested in this last week, and started breaking libalpm apart
and try to fit in an sqliteish implementation. The code was new to me
and I didn't have any other consideration but to get something working
as fast as possible, so the result is nasty.
Basically, I first commented treename from struct
__pmdb_t so the compiler would tell me all(or most of) the places where
the old db is used, and either disabled those functions or did the same
with sqlite. Mainly the additions are in be_sqlite.c (renamed
be_files.c), where _alpm_db_open opens the sqlite db, and db.c:
_alpm_db_search, which executes a simple SELECT * FROM packages WHERE
name LIKE "%foo%" and populates the return list.
So, I implemented about 40% of pacman -Ss. If someone
cares about timings (and you probably shouldn't, since my version
doesn't do quite the same thing), here they are:
(running pacman -Ss g three times after a reboot)
pacman-3.1: 41.866s, 0.765s, 0.762s
mutilated-pacman-with-sqlite: 1.036s, 0.131s, 0.133s
pacman-3.1
shows probably rather worse performance in the worst run than it
usually would, since my /var/ was 99% full at the time :)
Anyway. The timing is not the most important issue, I think.
libalpm has a lot of code that is merely there because C sucks for
things like string and directory manipulation. And we need to do a lot
of that. My humble guess is that a proper implementation of libalpm
done with sqlite could be at least 50% smaller with a more
understandable codebase.
If we want to do this, then how? Some options from the top of my head:
1)
for the parts that deal with the db, start from scratch. With the
talent you guys have, shouldn't be a problem? Libalpm isn't very
large...
2) for the development phase, consider sqlite to be a cache for the
filedb, and gradually move each piece of code to the other side. This
way, the legacy code would weigh us down a bit, but the change might be
more sustainable.
3) Just hack in the functionality somehow, anyhow.
4) Refactor alpm to support different backends and implement whatever backend de jour.
Ideas, praise, flames welcome. Code available by request.
--vk