;;;; "dbsyn.scm" -- Syntactic extensions for RDMS (within-database) ;;; Copyright (C) 2002 Ivan Shmakov ;; ;; Permission to copy this software, to modify it, to redistribute it, ;; to distribute modified versions, and to use it for any purpose is ;; granted, subject to the following restrictions and understandings. ;; ;; 1. Any copy made of this software must include this copyright notice ;; in full. ;; ;; 2. I have made no warranty or representation that the operation of ;; this software will be error-free, and I am under no obligation to ;; provide any services, by way of maintenance, update, or otherwise. ;; ;; 3. In conjunction with products arising from the use of this ;; material, there shall be no use of my name in any advertising, ;; promotional, or sales literature without prior written consent in ;; each case. ;;; History: ;; 2002-08-01: I've tired of tracking database description elements ;; (such as `(define-tables ...)'); so I decided to use `etags'. But ;; its hard (if possible) to create regexp to match against RDMS' table ;; specs. So I wrote `within-database' syntax extension and now I can ;; simply use something like: ;; $ etags -l scheme \ ;; -r '/ *(define-\(command\|table\) (\([^; \t]+\)/\2/' \ ;; source1.scm ... ;; ... and get TAGS table with all of my database commands and tables. (require 'relational-database) (require 'database-commands) (require 'databases) ;@ (define-syntax within-database (syntax-rules (define-table define-command) ((within-database database) database) ((within-database database (define-table (name primary columns) row ...) rest ...) (begin (define-tables database '(name primary columns (row ...))) (within-database database rest ...))) ((within-database database (define-command template arg-1 arg-2 ...) rest ...) (begin (define-*commands* database '(template arg-1 arg-2 ...)) (within-database database rest ...)))))