Commit478d4a31Recorded25 Feb 2026Repositorysigil-sqlite

Add procedure specs to sqlite and socket modules

Message

sigil-sqlite: 20 specs (16 native, 4 Scheme high-level API) sigil-socket: 30 specs (23 native, 7 Scheme utilities)

Changed
 src/sigil/sqlite.sgl | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)
Diff
src/sigil/sqlite.sglmodified
@@ -61,6 +61,27 @@
61
62
(begin
63
+64
;; ========== Native Procedure Specs ==========
+65
+66
(%set-spec! sqlite-db? '(any? -> boolean?))
+67
(%set-spec! sqlite-stmt? '(any? -> boolean?))
+68
(%set-spec! sqlite-open '(string? -> (maybe sqlite-db?)))
+69
(%set-spec! sqlite-close '(sqlite-db? -> void?))
+70
(%set-spec! sqlite-exec '(sqlite-db? string? -> boolean?))
+71
(%set-spec! sqlite-prepare '(sqlite-db? string? -> (maybe sqlite-stmt?)))
+72
(%set-spec! sqlite-bind '(sqlite-stmt? integer? any? -> boolean?))
+73
(%set-spec! sqlite-step '(sqlite-stmt? -> any?))
+74
(%set-spec! sqlite-reset '(sqlite-stmt? -> void?))
+75
(%set-spec! sqlite-finalize '(sqlite-stmt? -> void?))
+76
(%set-spec! sqlite-column-count '(sqlite-stmt? -> integer?))
+77
(%set-spec! sqlite-column-name '(sqlite-stmt? integer? -> string?))
+78
(%set-spec! sqlite-column '(sqlite-stmt? integer? -> any?))
+79
(%set-spec! sqlite-last-insert-rowid '(sqlite-db? -> integer?))
+80
(%set-spec! sqlite-changes '(sqlite-db? -> integer?))
+81
(%set-spec! sqlite-errmsg '(sqlite-db? -> string?))
+82
+83
;; ========== High-Level API ==========
+84
85
;;; Execute a SQL query with optional parameters and return all rows.
86
;;; Each row is returned as an alist mapping column names to values.
87
;;;
@@ -71,6 +92,7 @@
92
;;; (sqlite-query db "SELECT * FROM users WHERE name = ? AND age > ?" "Alice" 21)
93
;;; ```
94
(define (sqlite-query db sql . params)
+95
(: sqlite-db? string? any? ... -> list?)
96
(let ((stmt (sqlite-prepare db sql)))
97
(if (not stmt)
98
'()
@@ -115,6 +137,7 @@
137
;;; ; => ((id . 1) (name . "Alice") (email . "[email protected]"))
138
;;; ```
139
(define (sqlite-query-row db sql . params)
+140
(: sqlite-db? string? any? ... -> any?)
141
(let ((rows (apply sqlite-query db sql params)))
142
(if (null? rows)
143
#f
@@ -130,6 +153,7 @@
153
;;; (sqlite-run db "UPDATE users SET name = ? WHERE id = ?" "Robert" 1)
154
;;; ```
155
(define (sqlite-run db sql . params)
+156
(: sqlite-db? string? any? ... -> boolean?)
157
(let ((stmt (sqlite-prepare db sql)))
158
(if (not stmt)
159
#f
@@ -155,6 +179,7 @@
179
;;; (sqlite-query db "SELECT * FROM users")))
180
;;; ```
181
(define (call-with-database path proc)
+182
(: string? procedure? -> any?)
183
(let ((db (sqlite-open path)))
184
(if (not db)
185
(error "Failed to open database" path)