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)