- (set-macro-character *sql-macro-open-char* *original-reader-enter*)
- (set-macro-character *sql-macro-close-char* *original-reader-exit*)
+ (when *original-readtable*
+ (setf *readtable* *original-readtable*
+ *original-readtable* nil))
- (unless (eq (get-macro-character *sql-macro-open-char*) #'sql-reader-open)
- (setf *original-reader-enter* (get-macro-character *sql-macro-open-char*))
- (set-macro-character *sql-macro-open-char* #'sql-reader-open))
- (unless (eq (get-macro-character *sql-macro-close-char*)
- (get-macro-character #\)))
- (setf *original-reader-exit* (get-macro-character *sql-macro-close-char*))
+ (unless *original-readtable*
+ (setf *original-readtable* *readtable*
+ *readtable* (copy-readtable))
+ (set-macro-character *sql-macro-open-char* #'sql-reader-open)
- (cond ((string= (write-to-string (car sqllist)) "||")
- (cons (sql-operator 'concat-op) (cdr sqllist)))
- ((and (= (length sqllist) 1) (eql (car sqllist) '*))
- (apply #'generate-sql-reference sqllist))
- ((sql-operator (car sqllist))
- (cons (sql-operator (car sqllist)) (cdr sqllist)))
- (t (apply #'generate-sql-reference sqllist)))
- (sql-user-error (c)
- (error 'sql-user-error
- :message (format nil "Error ~A occured while attempting to parse '~A' at file position ~A"
- (sql-user-error-message c) sqllist (file-position stream))))))))
+ (cond ((string= (write-to-string (car sqllist)) "||")
+ (cons (sql-operator 'concat-op) (cdr sqllist)))
+ ((and (= (length sqllist) 1) (eql (car sqllist) '*))
+ (apply #'generate-sql-reference sqllist))
+ ((sql-operator (car sqllist))
+ (cons (sql-operator (car sqllist)) (cdr sqllist)))
+ (t (apply #'generate-sql-reference sqllist)))
+ (sql-user-error (c)
+ (error 'sql-user-error
+ :message (format nil "Error ~A occured while attempting to parse '~A' at file position ~A"
+ (sql-user-error-message c) sqllist (file-position stream))))))))
- (cond ((= (length arglist) 1) ; string, table or attribute
- (if (stringp (car arglist))
- (sql-expression :string (car arglist))
+ (cond ((= (length arglist) 1) ; string, table or attribute
+ (if (stringp (car arglist))
+ (sql-expression :string (car arglist))
- (sql-expression :table (car arglist)
- :alias (cadr arglist)
- :type sqltype))
- ((keywordp (cadr arglist))
- (sql-expression :attribute (car arglist)
- :type (cadr arglist)))
- (t
- (sql-expression :attribute (cadr arglist)
- :table (car arglist)
- :type sqltype)))))
- (t
- (error 'sql-user-error :message "bad expression syntax"))))
-
-
-;; Exported functions for dealing with SQL syntax
+ (sql-expression :table (car arglist)
+ :alias (cadr arglist)
+ :type sqltype))
+ ((keywordp (cadr arglist))
+ (sql-expression :attribute (car arglist)
+ :type (cadr arglist)))
+ (t
+ (sql-expression :attribute (cadr arglist)
+ :table (car arglist)
+ :type sqltype)))))
+ (t
+ (error 'sql-user-error :message "bad expression syntax"))))
+
+
+;; Exported functions for dealing with SQL syntax