Previous: Within-database, Up: Database Macros


6.1.5.2 Within-database Example

Here is an example of within-database macros:

     (require 'within-database)
     
     (define my-rdb
       (add-command-tables
        (create-database "foo.db" 'alist-table)))
     
     (within-database my-rdb
       (define-command (*initialize* rdb)
         "Print Welcome"
         (display "Welcome")
         (newline)
         rdb)
       (define-command (without-documentation rdb)
         (display "without-documentation called")
         (newline))
       (define-table (processor-family
                      ((family   atom))
                      ((also-ran processor-family)))
         (m68000  #f)
         (m68030  m68000)
         (i386    i8086)
         (i8086   #f)
         (powerpc #f))
       (define-table (platform
                      ((name symbol))
                      ((processor processor-family)
                       (os        symbol)
                       (compiler  symbol)))
         (aix              powerpc aix     -)
         ;; ...
         (amiga-aztec      m68000  amiga   aztec)
         (amiga-sas/c-5.10 m68000  amiga   sas/c)
         (atari-st-gcc     m68000  atari   gcc)
         ;; ...
         (watcom-9.0       i386    ms-dos  watcom))
       (define-command (get-processor rdb)
         "Get processor for given platform."
         (((rdb 'open-table) 'platform #f) 'get 'processor)))
     
     (close-database my-rdb)
     
     (set! my-rdb (open-command-database! "foo.db"))
     -|
     Welcome
     
     (my-rdb 'without-documentation)
     -|
     without-documentation called
     
     ((my-rdb 'get-processor) 'amiga-sas/c-5.10)
     ⇒ m68000
     
     (close-database my-rdb)