diff options
author | Thomas Bushnell, BSG <tb@debian.org> | 2005-11-02 14:55:21 -0800 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2017-02-20 00:05:32 -0800 |
commit | 34c54a22ff7818bb8b38ef4d9c87dbbcb221ba73 (patch) | |
tree | 1189d06a81277bcf8539b0260a69a19f6038effb /dbsyn.scm | |
parent | 611b3db17894e5fdc0db3d49eaf6743d27b44233 (diff) | |
parent | 5145dd3aa0c02c9fc496d1432fc4410674206e1d (diff) | |
download | slib-34c54a22ff7818bb8b38ef4d9c87dbbcb221ba73.tar.gz slib-34c54a22ff7818bb8b38ef4d9c87dbbcb221ba73.zip |
Import Debian changes 3a2-1debian/3a2-1
slib (3a2-1) unstable; urgency=low
* New upstream release.
* Acknowledge NMU. (Closes: #281809)
* Makefile: Don't hack Makefile; use rules instead.
* debian/rules: Set on make invocations: prefix, htmldir, TEXI2HTML.
* debian/rules (clean): Clean more stuff here.
* Makefile: Comment out old rule for $(htmldir)slib_toc.html. Instead,
specify directly that the texi2html invocation produces that file.
* debian/rules (binary-indep): Find web files in slib subdir.
* debian/control (Build-Depends-Indep): Go back to using scm.
Diffstat (limited to 'dbsyn.scm')
-rw-r--r-- | dbsyn.scm | 68 |
1 files changed, 57 insertions, 11 deletions
@@ -1,5 +1,7 @@ -;;;; "dbsyn.scm" -- Syntactic extensions for RDMS (within-database) -;;; Copyright (C) 2002 Ivan Shmakov <ivan@theory.dcn-asu.ru> +;;; "dbsyn.scm" -- Syntactic extensions for RDMS -*- scheme -*- +;; Features: within-database + +;;; Copyright (C) 2002, 2003 Ivan Shmakov <ivan@theory.dcn-asu.ru> ;; ;; Permission to copy this software, to modify it, to redistribute it, ;; to distribute modified versions, and to use it for any purpose is @@ -31,24 +33,68 @@ ;; ... and get TAGS table with all of my database commands and tables. -(require 'relational-database) +;;; Code: (require 'database-commands) (require 'databases) +(require 'relational-database) + ;@ (define-syntax within-database - (syntax-rules (define-table define-command) - + (syntax-rules (define-table define-command define-macro) + ; ((within-database database) database) - + ; define-table ((within-database database - (define-table (name primary columns) row ...) - rest ...) + (define-table (name primary columns) row ...) + rest ...) (begin (define-tables database '(name primary columns (row ...))) (within-database database rest ...))) - + ; define-command ((within-database database - (define-command template arg-1 arg-2 ...) - rest ...) + (define-command template arg-1 arg-2 ...) + rest ...) (begin (define-*commands* database '(template arg-1 arg-2 ...)) + (within-database database rest ...))) + ; + ((within-database database + (command arg-1 ...) + rest ...) + (begin (cond ((let ((p (database '*macro*))) + (and p (slib:eval (p 'command)))) + => (lambda (proc) + (slib:eval + (apply proc database '(arg-1 ...))))) + (else + ((database 'command) arg-1 ...))) (within-database database rest ...))))) + +(define (define-*macros* rdb . specs) + (define defmac + (((rdb 'open-table) '*macros* #t) 'row:update)) + (for-each (lambda (spec) + (let* ((procname (caar spec)) + (args (cdar spec)) + (body-1 (cdr spec)) + (comment (and (string? (car body-1)) + (car body-1))) + (body (if comment (cdr body-1) body-1))) + (defmac (list procname + `(lambda ,args . ,body) + (or comment ""))))) + specs)) + +;@ +(define (add-macro-support rdb) + (define-tables rdb + '(*macros* + ((name symbol)) + ((procedure expression) + (documentation string)) + ((define-macro (lambda (db . args) + (define-*macros* db args) + #t) "")))) + (define-*commands* rdb + '((*macro* rdb) + (((rdb 'open-table) '*macros* #f) 'get 'procedure))) + rdb) |