Fixed define-foreign-library declaration to work on Mac OS X
[cl-sqlite.git] / sqlite-ffi.lisp
blob9a73fb10c863151bf1b1cb7bc66b0b3eda65ae4c
1 (defpackage :sqlite-ffi
2 (:use :cl :cffi)
3 (:export :error-code
4 :p-sqlite3
5 :sqlite3-open
6 :sqlite3-close
7 :sqlite3-errmsg
8 :p-sqlite3-stmt
9 :sqlite3-prepare
10 :sqlite3-finalize
11 :sqlite3-step
12 :sqlite3-reset
13 :sqlite3-clear-bindings
14 :sqlite3-column-count
15 :sqlite3-column-type
16 :sqlite3-column-text
17 :sqlite3-column-int64
18 :sqlite3-column-double
19 :sqlite3-column-bytes
20 :sqlite3-column-blob
21 :sqlite3-column-name
22 :sqlite3-bind-parameter-count
23 :sqlite3-bind-parameter-name
24 :sqlite3-bind-parameter-index
25 :sqlite3-bind-double
26 :sqlite3-bind-int64
27 :sqlite3-bind-null
28 :sqlite3-bind-text
29 :sqlite3-bind-blob
30 :destructor-transient
31 :destructor-static
32 :sqlite3-last-insert-rowid))
34 (in-package :sqlite-ffi)
36 (define-foreign-library sqlite3-lib
37 (:darwin (:default "libsqlite3"))
38 (:unix (:or "libsqlite3.so.0" "libsqlite3.so"))
39 (t (:default "libsqlite3")))
41 (use-foreign-library sqlite3-lib)
43 (defcenum error-code
44 (:OK 0)
45 (:ERROR 1)
46 (:INTERNAL 2)
47 (:PERM 3)
48 (:ABORT 4)
49 (:BUSY 5)
50 (:LOCKED 6)
51 (:NOMEM 7)
52 (:READONLY 8)
53 (:INTERRUPT 9)
54 (:IOERR 10)
55 (:CORRUPT 11)
56 (:NOTFOUND 12)
57 (:FULL 13)
58 (:CANTOPEN 14)
59 (:PROTOCOL 15)
60 (:EMPTY 16)
61 (:SCHEMA 17)
62 (:TOOBIG 18)
63 (:CONSTRAINT 19)
64 (:MISMATCH 20)
65 (:MISUSE 21)
66 (:NOLFS 22)
67 (:AUTH 23)
68 (:FORMAT 24)
69 (:RANGE 25)
70 (:NOTADB 26)
71 (:ROW 100)
72 (:DONE 101))
74 (defcstruct sqlite3)
76 (defctype p-sqlite3 (:pointer sqlite3))
78 (defcfun sqlite3-open error-code
79 (filename :string)
80 (db (:pointer p-sqlite3)))
82 (defcfun sqlite3-close error-code
83 (db p-sqlite3))
85 (defcfun sqlite3-errmsg :string
86 (db p-sqlite3))
88 (defcstruct sqlite3-stmt)
90 (defctype p-sqlite3-stmt (:pointer sqlite3-stmt))
92 (defcfun (sqlite3-prepare "sqlite3_prepare_v2") error-code
93 (db p-sqlite3)
94 (sql :string)
95 (sql-length-bytes :int)
96 (stmt (:pointer p-sqlite3-stmt))
97 (tail (:pointer (:pointer :char))))
99 (defcfun sqlite3-finalize error-code
100 (statement p-sqlite3-stmt))
102 (defcfun sqlite3-step error-code
103 (statement p-sqlite3-stmt))
105 (defcfun sqlite3-reset error-code
106 (statement p-sqlite3-stmt))
108 (defcfun sqlite3-clear-bindings error-code
109 (statement p-sqlite3-stmt))
111 (defcfun sqlite3-column-count :int
112 (statement p-sqlite3-stmt))
114 (defcenum type-code
115 (:integer 1)
116 (:float 2)
117 (:text 3)
118 (:blob 4)
119 (:null 5))
121 (defcfun sqlite3-column-type type-code
122 (statement p-sqlite3-stmt)
123 (column-number :int))
125 (defcfun sqlite3-column-text :string
126 (statement p-sqlite3-stmt)
127 (column-number :int))
129 (defcfun sqlite3-column-int64 :int64
130 (statement p-sqlite3-stmt)
131 (column-number :int))
133 (defcfun sqlite3-column-double :double
134 (statement p-sqlite3-stmt)
135 (column-number :int))
137 (defcfun sqlite3-column-bytes :int
138 (statement p-sqlite3-stmt)
139 (column-number :int))
141 (defcfun sqlite3-column-blob :pointer
142 (statement p-sqlite3-stmt)
143 (column-number :int))
145 (defcfun sqlite3-column-name :string
146 (statement p-sqlite3-stmt)
147 (column-number :int))
149 (defcfun sqlite3-bind-parameter-count :int
150 (statement p-sqlite3-stmt))
152 (defcfun sqlite3-bind-parameter-name :string
153 (statement p-sqlite3-stmt)
154 (column-number :int))
156 (defcfun sqlite3-bind-parameter-index :int
157 (statement p-sqlite3-stmt)
158 (name :string))
160 (defcfun sqlite3-bind-double error-code
161 (statement p-sqlite3-stmt)
162 (parameter-index :int)
163 (value :double))
165 (defcfun sqlite3-bind-int64 error-code
166 (statement p-sqlite3-stmt)
167 (parameter-index :int)
168 (value :int64))
170 (defcfun sqlite3-bind-null error-code
171 (statement p-sqlite3-stmt)
172 (parameter-index :int))
174 (defcfun sqlite3-bind-text error-code
175 (statement p-sqlite3-stmt)
176 (parameter-index :int)
177 (value :string)
178 (octets-count :int)
179 (destructor :pointer))
181 (defcfun sqlite3-bind-blob error-code
182 (statement p-sqlite3-stmt)
183 (parameter-index :int)
184 (value :pointer)
185 (bytes-count :int)
186 (destructor :pointer))
188 (defconstant destructor-transient-address (mod -1 (expt 2 (* 8 (cffi:foreign-type-size :pointer)))))
190 (defun destructor-transient () (cffi:make-pointer destructor-transient-address))
192 (defun destructor-static () (cffi:make-pointer 0))
194 (defcfun sqlite3-last-insert-rowid :int64
195 (db p-sqlite3))