File: simplesql.scm

package info (click to toggle)
guile-simplesql 2.3.2-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 1,672 kB
  • ctags: 97
  • sloc: sh: 8,413; ansic: 834; lisp: 42; makefile: 23
file content (77 lines) | stat: -rw-r--r-- 2,591 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
;;;; Copyright (C) 2001, 2004 Dave Lambert
;;;; 
;;;; 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, 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.
;;;; 
;;;; You should have received a copy of the GNU General Public License
;;;; along with this software; see the file COPYING.  If not, write to
;;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
;;;; Boston, MA 02111-1307 USA
;;;; 

(define-module (database simplesql)
  #:use-module (ice-9 optargs))

(load-extension "libguile-database-simplesql" "simplesql_extension_init")


;; Declare the exported functions.

(export	simplesql-open simplesql-query simplesql-close 
	simplesql-database? simplesql-escape)

(define (simplesql-open . args)
  (let* ((original-slots '(#:api #:database #:host #:user #:password))
	 (all-slots (cons* #:port original-slots)))
    (letrec ((pass-one (lambda (done raw slots)
			 (cond ((null? raw) done)
			       ((keyword? (car raw)) (pass-two done raw))
			       (else (pass-one (cons* (car slots) (car raw) done)
					       (cdr raw)
					       (cdr slots))))))
	     (pass-two (lambda (done raw)
			 (cond ((null? raw)
				done)
			       ((member (car raw) done) 
				(throw 'duplicate-argument (car raw)))
			       ((not (member (car raw) all-slots))
				(throw 'unrecognized-keyword (car raw)))
			       ((or (null? (cdr raw))
				    (keyword? (cadr raw)))
				(throw 'malformed-keyword-list raw))
			       (else (pass-two (cons* (car raw) (cadr raw) done)
					       (cddr raw))))))
	     (caller (lambda* (#:key api database host port user password)
			      (cond ((not api)
				     (throw 'missing-argument #:api))
				    ((not database)
				     (throw 'missing-argument #:database))
				    (else
				     (%simplesql-open api database host port user password))))))
      (apply caller (pass-one '() args original-slots)))))


;; Provide deprecated aliases.

(export simplesql-db?)

(export	sql-open sql-query sql-close sql-db? sql-escape)

(define simplesql-db? simplesql-database?)

(define sql-open simplesql-open)

(define sql-query simplesql-query)

(define sql-close simplesql-close)

(define sql-db? simplesql-db?)

(define sql-escape simplesql-escape)