Update of /project/elephant/cvsroot/elephant/src In directory common-lisp.net:/tmp/cvs-serv13660/src
Modified Files: sleepycat.lisp Log Message: license
Date: Fri Aug 27 10:32:56 2004 Author: blee
Index: elephant/src/sleepycat.lisp diff -u elephant/src/sleepycat.lisp:1.2 elephant/src/sleepycat.lisp:1.3 --- elephant/src/sleepycat.lisp:1.2 Thu Aug 26 19:54:38 2004 +++ elephant/src/sleepycat.lisp Fri Aug 27 10:32:56 2004 @@ -1,13 +1,40 @@ -;; UFFI -;(asdf:operate 'asdf:load-op :uffi) - -;; DSO loading -;(defconstant +path-to-libsleepycat+ -; "/path/to/libsleepycat.so") -;(defconstant +path-to-sleepycat+ -; "/usr/local/lib/db42/libdb.so") -;(uffi:load-foreign-library +path-to-sleepycat+ :module "sleepycat") -;(uffi:load-foreign-library +path-to-libsleepycat+ :module "libsleepycat") +;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*- +;;; +;;; sleepycat.lisp -- FFI interface to Berkeley DB +;;; +;;; Initial version 8/26/2004 by Ben Lee +;;; blee@common-lisp.net +;;; +;;; part of +;;; +;;; Elephant: an object-oriented database for Common Lisp +;;; +;;; Copyright (c) 2004 by Andrew Blumberg and Ben Lee +;;; ablumberg@common-lisp.net blee@common-lisp.net +;;; +;;; This program is free software; you can redistribute it +;;; and/or modify it under the terms of the GNU General +;;; Public License as published by the Free Software +;;; Foundation; either version 2 of the License, or (at +;;; your option) any later version. +;;; +;;; This program is distributed in the hope that it will be +;;; useful, but WITHOUT ANY WARRANTY; without even the +;;; implied warranty of MERCHANTABILITY or FITNESS FOR A +;;; PARTICULAR PURPOSE. See the GNU General Public License +;;; for more details. +;;; +;;; The GNU General Public License can be found in the file +;;; LICENSE which should have been distributed with this +;;; code. It can also be found at +;;; +;;; http://www.opensource.org/licenses/gpl-license.php +;;; +;;; You should have received a copy of the GNU General +;;; Public License along with this program; if not, write +;;; to the Free Software Foundation, Inc., 59 Temple Place, +;;; Suite 330, Boston, MA 02111-1307 USA +;;;
(defpackage sleepycat @@ -17,8 +44,8 @@ offset-char-pointer copy-str-to-buf copy-bufs byte-length pointer-int pointer-void array-or-pointer-char db-env-create db-env-close db-env-open db-env-dbremove - db-env-dbrename db-env-remove db-env-set-flags - db-env-get-flags + db-env-dbrename db-env-remove + db-env-set-flags db-env-get-flags db-create db-close db-open db-remove db-rename db-sync db-truncate db-get-key-buffered db-get-buffered db-get db-put-buffered db-put @@ -37,7 +64,71 @@
(in-package "SLEEPYCAT")
+;; Constants and Flags +;; eventually write a macro which generates a custom flag function. + +;I don't like the UFFI syntax for enumerations +(defconstant DB-BTREE 1) +(defconstant DB-HASH 2) +(defconstant DB-QUEUE 3) +(defconstant DB-RECNO 4) +(defconstant DB-UNKNOWN 5) + +(defconstant DB_AUTO_COMMIT #x1000000) +(defconstant DB_JOINENV #x0040000) +(defconstant DB_INIT_CDB #x0001000) +(defconstant DB_INIT_LOCK #x0002000) +(defconstant DB_INIT_LOG #x0004000) +(defconstant DB_INIT_MPOOL #x0008000) +(defconstant DB_INIT_REP #x0010000) +(defconstant DB_INIT_TXN #x0020000) +(defconstant DB_RECOVER #x0000020) +(defconstant DB_RECOVER_FATAL #x0200000) +(defconstant DB_LOCKDOWN #x0080000) +(defconstant DB_PRIVATE #x0100000) +(defconstant DB_SYSTEM_MEM #x0400000) +(defconstant DB_THREAD #x0000040) +(defconstant DB_FORCE #x0000004) +(defconstant DB_DIRTY_READ #x2000000) +(defconstant DB_CREATE #x0000001) +(defconstant DB_EXCL #x0001000) +(defconstant DB_NOMMAP #x0000008) +(defconstant DB_RDONLY #x0000010) +(defconstant DB_TRUNCATE #x0000080) +(defconstant DB_TXN_NOSYNC #x0000100) +(defconstant DB_TXN_NOWAIT #x0001000) +(defconstant DB_TXN_SYNC #x0002000) + +(defconstant DB_GET_BOTH 10) +(defconstant DB_SET_LOCK_TIMEOUT 29) +(defconstant DB_SET_TXN_TIMEOUT 33) + +(def-enum lockop ((:DUMP 0) :GET :GET-TIMEOUT :INHERIT + :PUT :PUT-ALL :PUT-OBJ :PUT-READ + :TIMEOUT :TRADE :UPGRADE-WRITE)) + +(def-enum lockmode ((:NG 0) :READ :WRITE :WAIT + :IWRITE :IREAD :IWR :DIRTY :WWRITE)) + +(def-struct db-lockreq + (op lockop) + (mode lockmode) + (timeout :unsigned-int) + (obj (:array :char)) + (lock :pointer-void)) + (eval-when (:compile-toplevel :load-toplevel) + ;; UFFI + ;;(asdf:operate 'asdf:load-op :uffi) + + ;; DSO loading + (defconstant +path-to-libsleepycat+ + "/home/ben/lisp/elephant/libsleepycat.so") + (defconstant +path-to-sleepycat+ + "/usr/local/lib/db42/libdb.so") + (uffi:load-foreign-library +path-to-sleepycat+ :module "sleepycat") + (uffi:load-foreign-library +path-to-libsleepycat+ :module "libsleepycat") + (def-type pointer-int (* :int)) (def-type pointer-void :pointer-void) (def-foreign-type array-or-pointer-char @@ -775,20 +866,6 @@
;; Locks and timeouts
-(def-enum lockop ((:DUMP 0) :GET :GET-TIMEOUT :INHERIT - :PUT :PUT-ALL :PUT-OBJ :PUT-READ - :TIMEOUT :TRADE :UPGRADE-WRITE)) - -(def-enum lockmode ((:NG 0) :READ :WRITE :WAIT - :IWRITE :IREAD :IWR :DIRTY :WWRITE)) - -(def-struct db-lockreq - (op lockop) - (mode lockmode) - (timeout :unsigned-int) - (obj (:array :char)) - (lock :pointer-void)) -
(def-function ("db_txn_id" db-transaction-id) ((transaction :pointer-void)) @@ -859,45 +936,6 @@ :returning :int)
(wrap-errno db-env-lock-detect (env flags atype) :outs 2) - -;; Constants and Flags -;; eventually write a macro which generates a custom flag function. - -;I don't like the UFFI syntax for enumerations -(defconstant DB-BTREE 1) -(defconstant DB-HASH 2) -(defconstant DB-QUEUE 3) -(defconstant DB-RECNO 4) -(defconstant DB-UNKNOWN 5) - -(defconstant DB_AUTO_COMMIT #x1000000) -(defconstant DB_JOINENV #x0040000) -(defconstant DB_INIT_CDB #x0001000) -(defconstant DB_INIT_LOCK #x0002000) -(defconstant DB_INIT_LOG #x0004000) -(defconstant DB_INIT_MPOOL #x0008000) -(defconstant DB_INIT_REP #x0010000) -(defconstant DB_INIT_TXN #x0020000) -(defconstant DB_RECOVER #x0000020) -(defconstant DB_RECOVER_FATAL #x0200000) -(defconstant DB_LOCKDOWN #x0080000) -(defconstant DB_PRIVATE #x0100000) -(defconstant DB_SYSTEM_MEM #x0400000) -(defconstant DB_THREAD #x0000040) -(defconstant DB_FORCE #x0000004) -(defconstant DB_DIRTY_READ #x2000000) -(defconstant DB_CREATE #x0000001) -(defconstant DB_EXCL #x0001000) -(defconstant DB_NOMMAP #x0000008) -(defconstant DB_RDONLY #x0000010) -(defconstant DB_TRUNCATE #x0000080) -(defconstant DB_TXN_NOSYNC #x0000100) -(defconstant DB_TXN_NOWAIT #x0001000) -(defconstant DB_TXN_SYNC #x0002000) - -(defconstant DB_GET_BOTH 10) -(defconstant DB_SET_LOCK_TIMEOUT 29) -(defconstant DB_SET_TXN_TIMEOUT 33)
(defun flags (&key auto-commit