(define-module (xxx mmr) #:export (->sql2)) (define-syntax -> (syntax-rules (end) ((_ end fmt args ...) (format #f "address@hidden;" fmt args ...)) ((_ fmt args ...) (format #f fmt args ...)))) (define-syntax-rule (->end name arg) (-> end "~a ~a" name arg)) (define-syntax sql-alter (syntax-rules (table rename to add modify drop column as select primary key) ((_ table name drop primary key) (-> "table ~a drop primary key" name)) ((_ table old-name rename to new-name) (-> "table ~a rename to ~a" old-name new-name)) ((_ table name add cname ctype) ;; e.g: (->sql alter table 'mmr add 'cname 'varchar(50)) (-> "table ~a add ~a ~a" cname ctype)) ((_ table name mofify pairs) (-> "table ~a modify (~{~a~^,~})" name (->lst pairs))) ((_ table name drop column cname) (-> "table ~a drop column ~a" name cname)) ((_ table name add primary key keys) (-> "table ~a add primary key (~{~a~^,~})" name keys)) ((_ table name rename column old-name to new-name) (-> "table ~a rename column ~a to ~a" name old-name new-name)))) (define-syntax ->sql2 (syntax-rules (select insert alter create update delete use) ((_ alter rest ...) (->end 'alter (sql-alter rest ...)))))