Hey NIco, Now this is great.....in fact I was playing with an "update hook" the other day....and was going to put the deletion logic under the SQLITE_INSERT below....
But your code looks better ;-) Thanks ! void update_callback( void* udp, int type, const char* db_name, const char* tbl_name, sqlite3_int64 rowid ){ switch(type){ case(SQLITE_INSERT): //Do deletion logic break; case(SQLITE_DELETE): //Do something break; }; } On 10/05/2011 15:36, Nico Williams wrote: > Or just a function to return the size of the current DB. Mind you, > automatically deleting rows from a log table isn't enough: you may > have to periodically VACUUM the DB, or you may have to setup > auto_vacuum (and incremental_vacuum). > > I have code like this in one DB: > > CREATE TABLE IF NOT EXISTS LogConfig > (opt TEXT PRIMARY KEY NOT NULL UNIQUE, > val); > INSERT OR IGNORE INTO LogConfig (opt, val) > VALUES ('replication_retain_time', '7 days'); > INSERT OR IGNORE INTO LogConfig (opt, val) > VALUES ('replication_retain_count', '10000'); > INSERT OR IGNORE INTO LogConfig (opt, val) > VALUES ('history_retain_time', '7 days'); > INSERT OR IGNORE INTO LogConfig (opt, val) > VALUES ('history_retain_count', '10000'); > ... > DROP TRIGGER IF EXISTS EntryLog_prune; > CREATE TRIGGER EntryLog_prune > AFTER INSERT ON EntryLog > FOR EACH ROW BEGIN > DELETE FROM EntryLog > WHERE mtime< strftime('%s', 'now', '-' || ( > SELECT lc.val > FROM LogConfig lc > WHERE lc.opt = 'history_retain_time')) AND > tx< ((SELECT t.tx FROM TX t ORDER by t.tx DESC LIMIT 1) - ( > SELECT val FROM LogConfig WHERE opt = 'history_retain_count')); > END; > > It'd be simple to change the above to use a max DB size, if there was > a function to return the current DB size. See above note regarding > vacuum. Something like this: > > CREATE TRIGGER EntryLog_prune > AFTER INSERT ON EntryLog > FOR EACH ROW BEGIN > DELETE FROM EntryLog > WHERE tx< (SELECT min(el.tx) FROM EntryLog el) - ( > SELECT lc.val FROM LogConfig lc WHERE lc.opt = 'delete_at_once') > AND db_size()> (SELECT lc.val FROM LogConfig lc WHERE lc.opt = > 'max_db_size'); > END; > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users