From 975b54b21846944cdd2ba82169519e44ae245957 Mon Sep 17 00:00:00 2001 From: Russ Tyndall Date: Wed, 28 Mar 2012 14:11:22 -0400 Subject: [PATCH] Bug in sequence names was reported by Jan Tolenaar. We changed the naming scheme inadvertently. Added a flag *old-sequence-names* to force use of the old naming scheme. Hopefully this will not break for anyone relying on the new naming scheme --- ChangeLog | 18 ++++++++++++++++++ sql/package.lisp | 1 + sql/sequences.lisp | 17 ++++++++++++++--- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 37b7154..97264eb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2012-03-28 Russ Tyndall + + * sql/sequences.lisp: [A Patch FROM 2011-07-28 changed sequences. + They were previously prefixed with _CLSQL_SEQ_ but are now + suffixed with _CLSQL_SEQ. This is likely to break existing + implementations using the default sequence names + + setting *old-sequence-names* to T, should force using the older + naming scheme + 2012-03-27 Ryan Davis * sql/expressions.lisp: Fixed bug with subqueries in the where @@ -119,6 +129,14 @@ * test/: Better, more tests, better type coercion in tests and throughout (%get-int) + [edit 2012-03-28 - RT] + * sql/sequences.lisp: Sequences were previously prefixed with + _CLSQL_SEQ_ but are now suffixed with _CLSQL_SEQ. This is likely + to break existing implementations using the default sequence names + + setting *old-sequence-names* to T, should force using the older + naming scheme + 2011-07-16 Kevin Rosenberg * Version 5.4.0 release diff --git a/sql/package.lisp b/sql/package.lisp index f922b18..eb5b0ed 100644 --- a/sql/package.lisp +++ b/sql/package.lisp @@ -329,6 +329,7 @@ #:sequence-next #:sequence-last #:set-sequence-position + #:*old-sequence-names* ;; FDML (fdml.lisp) #:select diff --git a/sql/sequences.lisp b/sql/sequences.lisp index 3e9a2e4..1b32f29 100644 --- a/sql/sequences.lisp +++ b/sql/sequences.lisp @@ -20,10 +20,16 @@ ;;; Sequence functions +(defvar *old-sequence-names* nil + "Should CLSQL use its old sequence naming scheme _CLSQL_SEQ_{table} instead + of the current scheme {table}_CLSQL_SEQ") + (defun %sequence-name-to-table (sequence-name database) (escaped (combine-database-identifiers - (list sequence-name 'CLSQL_SEQ) + (if *old-sequence-names* + (list '_CLSQL_SEQ sequence-name) + (list sequence-name 'CLSQL_SEQ)) database))) (defmethod database-create-sequence (sequence-name database) @@ -42,16 +48,21 @@ (concatenate 'string "DROP TABLE " (%sequence-name-to-table sequence-name database)) database)) +(defun %seq-name-key () + (if *old-sequence-names* + "_CLSQL_SEQ_" + "_CLSQL_SEQ")) + (defun %table-name-to-sequence-name (table-name) ;; if this was escaped it still should be, ;; if it wasnt it still shouldnt-be (check-type table-name string) - (replace-all table-name "_CLSQL_SEQ" "")) + (replace-all table-name (%seq-name-key) "")) (defmethod database-list-sequences (database &key (owner nil)) (declare (ignore owner)) (mapcan #'(lambda (s) - (and (search "_CLSQL_SEQ" s :test #'string-equal) + (and (search (%seq-name-key) s :test #'string-equal) (list (%table-name-to-sequence-name s)))) (database-list-tables-and-sequences database))) -- 2.34.1