Update of /project/elephant/cvsroot/elephant/src In directory common-lisp.net:/tmp/cvs-serv5168/src
Modified Files: sleepycat.lisp Log Message: db-delete-* returns T on success, Nil if it couldn't find the record
Date: Mon Aug 30 23:36:55 2004 Author: blee
Index: elephant/src/sleepycat.lisp diff -u elephant/src/sleepycat.lisp:1.6 elephant/src/sleepycat.lisp:1.7 --- elephant/src/sleepycat.lisp:1.6 Sun Aug 29 22:41:30 2004 +++ elephant/src/sleepycat.lisp Mon Aug 30 23:36:54 2004 @@ -760,15 +760,23 @@ (flags :unsigned-int)) :returning :int)
-(wrap-errno db-delete-buffered (db transaction key key-length flags) - :flags (auto-commit) - :keys ((transaction *current-transaction*)) - :declarations (declare (optimize (speed 3) (safety 0) (space 0)) - (type pointer-void db transaction) - (type array-or-pointer-char key) - (type fixnum key-length) - (type boolean auto-commit)) - :transaction transaction) +(defun db-delete-buffered (db key key-length &key auto-commit + (transaction *current-transaction*)) + (declare (optimize (speed 3) (safety 0) (space 0)) + (type pointer-void db transaction) (type array-or-pointer-char key) + (type fixnum key-length) (type boolean auto-commit)) + (let ((errno (%db-delete-buffered db transaction + key key-length + (flags :auto-commit auto-commit)))) + (declare (type fixnum errno)) + (cond ((= errno 0) t) + ((or (= errno DB_NOTFOUND) + (= errno DB_KEYEMPTY)) + nil) + ((or (= errno DB_LOCK_DEADLOCK) + (= errno DB_LOCK_NOTGRANTED)) + (throw transaction transaction)) + (t (error 'db-error :errno errno)))))
(def-function ("db_del" %db-delete) ((db :pointer-void) @@ -778,17 +786,24 @@ (flags :unsigned-int)) :returning :int)
-(wrap-errno db-delete (db transaction key key-length flags) - :flags (auto-commit) - :keys ((key-length (length key)) - (transaction *current-transaction*)) - :cstrings (key) - :declarations (declare (optimize (speed 3) (safety 0) (space 0)) - (type pointer-void db transaction) - (type string key) - (type fixnum key-length) - (type boolean auto-commit)) - :transaction transaction) +(defun db-delete (db key &key auto-commit (key-length (length key)) + (transaction *current-transaction*)) + (declare (optimize (speed 3) (safety 0) (space 0)) + (type pointer-void db transaction) (type string key) + (type fixnum key-length) (type boolean auto-commit)) + (with-cstrings ((key key)) + (let ((errno + (%db-delete db transaction key + key-length (flags :auto-commit auto-commit)))) + (declare (type fixnum errno)) + (cond ((= errno 0) nil) + ((or (= errno DB_NOTFOUND) + (= errno DB_KEYEMPTY)) + nil) + ((or (= errno DB_LOCK_DEADLOCK) + (= errno DB_LOCK_NOTGRANTED)) + (throw transaction transaction)) + (t (error 'db-error :errno errno))))))
;; Transactions