new syntax macro (FILE-ENABLE-SQL-READER-SYNTAX)
authorNathan Bird <nathan@acceleration.net>
Mon, 20 Apr 2009 14:15:25 +0000 (10:15 -0400)
committerNathan Bird <nathan@acceleration.net>
Tue, 2 Mar 2010 23:16:45 +0000 (18:16 -0500)
Turns on the SQL reader syntax for the rest of the file.
The CL spec says that when finished loading a file the original
*readtable* is restored.  clhs COMPILE-FILE

This is because we kept having problems with the read syntax
not being disabled. When clsql goes to enable the syntax it first
checks that it hasn't already done so. Clsql believed it had, but
the lisp had correctly disabled it and so we are left without the
syntax being enabled.

sql/package.lisp
sql/syntax.lisp

index 135d0f69cb7c3e11622c1969f40cf7e57fd3e2e1..9e9dcb6b76f3bc110b516429424ed2d8d2318af9 100644 (file)
          #:locally-disable-sql-reader-syntax
          #:locally-enable-sql-reader-syntax
          #:restore-sql-reader-syntax-state
+        #:file-enable-sql-reader-syntax
 
          ;; SQL operations (operations.lisp)
          #:sql-query
index 1aec1caa8fc55f3f23025b3848b1a88bc038dd68..7e1906b9e4d22055a497c54ac546f5335f3803e9 100644 (file)
@@ -64,6 +64,15 @@ the current syntax state."
   '(eval-when (:compile-toplevel :load-toplevel :execute)
     (%enable-sql-reader-syntax)))
 
+(defmacro file-enable-sql-reader-syntax ()
+  "Turns on the SQL reader syntax for the rest of the file.
+The CL spec says that when finished loading a file the original
+*readtable* is restored.  clhs COMPILE-FILE"
+  '(eval-when (:compile-toplevel :load-toplevel :execute)
+    (setf *readtable* (copy-readtable))
+    (set-macro-character *sql-macro-open-char* #'sql-reader-open)
+    (set-macro-character *sql-macro-close-char* (get-macro-character #\)))))
+
 (defun %enable-sql-reader-syntax ()
   (unless *original-readtable*
     (setf *original-readtable* *readtable*