Database code

Andrew Tridgell tridge at linuxcare.com
Wed Dec 29 22:06:29 GMT 1999


> ok, what i should have explicitly stated is:
> 
> - is it possible to have two (or more) unique primary keys
> 
> - is it possible to do fast lookups on all those keys

yes, thats what I described. It is slightly slower (a few
microseconds) looking up on the 2nd key, but that certainly won't
matter in this case.

> can that be abstracted to another level?

sure, just write a fn. 

void my_store(TDB_CONTEXT *tdb, TDB_DATA key1, TDB_DATA key2, TDB_DATA data)
{
	tdb_writelock(tdb);
	tdb_store(tdb, key2, key1, TDB_REPLACE);
	tdb_store(tdb, key1, data, TDB_REPLACE);
	tdb_writeunlock(tdb);
}

TDB_DATA my_fetch1(TDB_CONTEXT *tdb, TDB_DATA key1)
{
	return tdb_fetch(tdb, key1);
}

TDB_DATA my_fetch2(TDB_CONTEXT *tdb, TDB_DATA key2)
{
	TDB_DATA key1;
	key1 = tdb_fetch(tdb, key2);

	if (key1.dptr == NULL) return key1;

	return tdb_fetch(tdb, key1);
}


ok? just add error checking to the above, stir and simmer over a hot
debugger for 10 minutes. Voila, database-al-la-2key.

Cheers, Tridge


More information about the samba-technical mailing list