RS> 3) How do I implement something to do efficient (i.e. not O(n)) LIMIT RS> and OFFSET queries?
this probably depends on what you're trying to do.. if you do paging, you need query like "next 15 entries starting from this one". it's quite easy to achieve either using cursor API, or passing special kind of enumartion function into map-index to do control transfer to stop iteration when desired amount is retrieved. RS> I was thinking of maintaining a counter i don't see how counter will help you to do LIMIT and OFFSET queries, but it might be useful for paging -- to display count of pages. if you really _have_ to display it, indeed persistent counter will do that. RS> (my intuition would be to use a class allocated slot, but I think that RS> class objects are not serialized---am I right?) yep, it's not, but you can make persistent class counter that is essentially a pair <class_name, count>, or just a btree.. RS> 4) What is the intended use of `add-class-derived-index'? I must say RS> that the documentation isn't very clear about it (specially figuring RS> out what is a valid `derived-defun' wasn't trivial). Tight now I think RS> I am supposed to run it once (it complains about a duplicate index if RS> run a second time). This isn't exactly handy, because I would prefer RS> that defining a derived index to left a clear trace in my code. Right RS> now I am calling it wrapped with `handler-case'. yes, this API pretty much sucks, so in my application i've made a more handy inteface: (defvar *derived-indices* (make-hash-table :test 'equal)) (defmacro def-derived-index (class index (arg) &body code) (let ((fn (intern (format nil "IDX-FN-~a-~a" class index) :app))) `(progn (defun ,fn (,arg) ,@code) (setf (gethash (cons ',class ',index) *derived-indices*) ',fn)))) (defun initialize-derived-indices () (loop for (class . index) being each hash-key of *derived-indices* using (hash-value code) unless (ele:find-inverted-index class index :null-on-fail t) do (ele:add-class-derived-index class index code))) in new version derived indicices are part of class definition, so stuff like this isn't needed _______________________________________________ elephant-devel site list elephant-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/elephant-devel