+2013-06-18 Russ Tyndall <russ@acceleration.net>
+ * sql/oodml.lisp, sql/mysql-objects.lisp
+ refactored database-output-sql-as-type in a similar fashion to
+ the previous refactor of database-get-type-specifier (fewer
+ methods using case instead of eql specifiers)
+
+ * removed very strange definition of outputing floats as strings
+ for something sane (it was previously doing silly work like
+ setting the default read float type (which AFAICT doesnt affect
+ printing))
+
+ * half of the cases nil returned "" other times it returned nil,
+ now if we get a null value we return nil always
+
+ * removed odd-logic (seemingly untouched since the initial import),
+ that removed null characters from printed lists. If we have #\null
+ in a printed list, we had probably better figure out what went wrong
+ there rather than destructively modifying the list output on the way
+ to the DB ;; removed (substitute-char-string escaped #\Null " ")
+
+2013-06-18 Russ Tyndall <russ@acceleration.net>
+ * sql/generic-odbc.lisp, sql/generic-postgresql.lisp, sql/oodml.lisp
+ tests/test-fddl.lisp
+
+ refactored database-get-type-specifier for postgres and mssql
+
+ Single methods with a case on the symbol arg (similar to the recent
+ refactoring in oodml.lisp)
+
+ This reduces line count and generally makes it easier to find and
+ read all the backend-specific types
+
+2013-06-10 Russ Tyndall <russ@acceleration.net>
+ * sql/oodml.lisp, sql/generic-postgresql.lisp, doc/ref-fddl.xml,
+ sql/packages.lisp
+
+ Updated get-database-type-specifier to handle text/longchar type
+ and refactored
+
+ * added a warning above defaulting to VARCHAR (since its probably
+ NOT what is expected on a bad type specifier).
+
+ * added a case where the specified type being a string, passes
+ that string directly (to better/more easily allow db-specific
+ data-types).
+
+ * added cases where longchar or text converts to text, and
+ exported those symbols (as this seemed type seemed to be missing
+ from fddl/oddl anyway).
+
+ * reorganized these default methods into a single method with a
+ case statement rather than many eql specified methods (about half
+ the code)
+
+ * updated the docs to use text instead of longchar since text is
+ a more standard db-type (pg,my,and ms all use text)
+
+2013-04-17 Kevin Rosenberg <kevin@rosenberg.net>
+ * Version 6.4.1
+ * sql/utils.lisp: Patch from Ben Hyde to add weak hash table
+ support for CCL.
+
+2013-03-07 Ryan Davis <ryan@acceleration.net>
+ * db-postgresql-socket/postgresql-socket-api.lisp - bugfix to
+ adapt to changes in md5:md5sum-sequence. CLSQL now requires a
+ version of MD5 released on or after 2012-11-25 (the latest version
+ currenty in quicklisp). Thanks to Nicolas Neuss for the bug
+ report.
+ * db-odbc/odbc-sql.lisp - keep a reference to the original
+ connection spec used to create `odbc-database` connections
+
+2013-01-09 Russ Tyndall <russ@acceleration.net>
+ sql/oodml.lisp - changed view-classes-and-storable-slots to a
+ method (as it was intended to be all along)
+
+2012-12-19 Kevin Rosenberg <kevin@rosenberg.net>
+ * Version 6.4
+
+2012-11-20 Russ Tyndall <russ@acceleration.net>
+ ## Large refactoring of sql/oodml.lisp and surrounding code
+ * cleaned up update-records-from-* to utilize a single codepath
+ previously there was much duplicate code
+ * tried to further unify direct/effective slot-defs
+ * cleaned up much of the normalized classes code to be more
+ consistent in how it operated, and the code it used (less
+ copy/paste more functions)
+ * tried to standardize iteration a bit, previously almost all
+ of the iteration constructs in CL were used. Tried to
+ standardize on loop for readability / cohesiveness
+ * made functions to more easily look up particular slots, since
+ this was being done differently in each function
+ * added more doc-strings and updated documentation about
+ normalized classes
+ * inner-joins that are referenced in where clauses are no longer
+ added to the select table list (since they are also referenced
+ in the join position and this led to sql errors)
+ * collect-table-references methods added for sql-ident-table and
+ list
+
+ ## Semantic changes
+ * disallow where-less updates from objects (ie cannot call
+ update-records-from* with a keyless object)
+ * ordered-class-direct-slots now returns direct-slot-definitions
+ instead of effective-slot-definitions (as per name)
+ * direct-slot-definitions now contain the db-info hash table (same
+ as effective slots)
+ * removed this-class arg from update-instance-from-records - used to
+ be used for normalized code, no longer needed for that.
+ * find-all - bug fixes in table references, previously where clauses
+ surrounded by a list would have none of their references added to
+ the select. This was being exploited by certain code paths. Now
+ all where clauses are searched
+ - No longer includes order-by and distinct as columns in the select
+ list. The values seemed to be ignored in every code path and distinct
+ seemed to be intended to be used as a boolean anyway
+
+
+2012-11-20 Nathan Bird <nathan@acceleration.net>
+
+ * update-objects-joins - changed the default of slot from t (which
+ used to mean :deferred) to :immediate (to match the default
+ behavior of other parts of the system). It also seemed like a bad
+ default to pull all the slots that were explicitly specified to be
+ not pulled by default. This function now accepts more special
+ values (:immediate, :deferred, :all, or a list of slots). To get
+ the old behavior call with :slots :deferred.
+
+
+2012-10-30 Russ Tyndall <russ@acceleration.net>
+ * sql/command-object.lisp - added dates/times to the parameter value
+ coersion and pulled this into a new generic prepare-sql-parameter
+
+2012-09-04 Kevin Rosenberg <kevin@rosenberg.net>
+ * Version 6.3 released
+
+2012-09-04 Russ Tyndall <russ@acceleration.net>
+ * sql/expressions.lisp - Try to respect the casing of symbols
+ where it seems intentional (ie: is not default). This should fix
+ a failing test case, and I think behaves more understandibly.
+
+ If you specify a casing '|Foo Bar| lets treat that a string "Foo Bar"
+ and output it escaped
+
+2012-08-28 Ryan Davis <ryan@acceleration.net>
+ * db-sqlite3/sqlite3-api.lisp - allow pathnames in the connection
+ settings, so '("/db/my.sqlite") and '(#P"/db/my.sqlite") are
+ equivalent. Updated the docs to match.
+
+2012-08-17 Russ Tyndall <russ@acceleration.net>
+ * db-postgresql-socket3/package.lisp - shadow
+ postgresql-notification for compatibility with new
+ cl-postgres (Thanks Zach)
+
+2012-07-09 Russ Tyndall <russ@acceleration.net>
+ * sql/oodml.lisp - fixed a bug where the order by was being
+ destructively modified, causing odd caching issues when the
+ selected object was not statically known (eg unreferenced tables
+ could show up in the query if they were cached by a previous call
+ through this function. I replaced this code with a
+ non-destructive variant which should solve this.
+
+ Thanks to Philipp Marek for the bug report
+
+2012-06-25 Russ Tyndall <russ@acceleration.net>
+ * sql/util.lisp, sql/metaclasses.lisp
+ Dequote database-identifiers if needed (passed a quoted symbol)
+ Metaclass args come through unquoted, so this eases interactions
+ with them
+
+2012-06-22 Russ Tyndall <russ@acceleration.net>
+ * sql/metaclasses.lisp: Changed compute-effective-slot-definition
+ to correctly copy the autoincrement-sequence slot to the ESD
+ previously it was being skipped (seemingly by accident). Thanks
+ to flip214 on #lisp for the bug report
+
+2012-04-26 Kevin Rosenberg <kevin@rosenberg.net>
+ * Version 6.2 released: thanks to all the contributors!
+
+2012-04-25 Nathan Bird <nathan@acceleration.net>
+
+ * doc/threading-warnings.txt: Adding some notes from J.T.Klein
+ about the current state of thread-safety in clsql. This should be
+ incorporated into the main docs at some point.
+
+2012-04-25 Russ Tyndall <russ@acceleration.net>
+ * sql/expressions.lisp (output-sql): on rendering update/insert
+ expression values, ensure that *in-subselect* is bound to T
+ so that the values will be correctly paren delimited
+
+2012-04-24 Nathan Bird <nathan@acceleration.net>
+
+ * sql/expressions.lisp (output-sql): on mysql CREATE TABLE
+ statements use 'ENGINE=innodb' instead of 'Type=InnoDB'. This has
+ apparently been preferred since mysql 4.1 and mysql 5.5 removed
+ type as a valid keyword.
+
+2012-03-28 Russ Tyndall <russ@acceleration.net>
+
+ * 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 <ryan@acceleration.net>
+
+ * sql/expressions.lisp: Fixed bug with subqueries in the where
+ clause of update-records and delete-records generating invalid
+ SQL. Previously subselects in where clauses would not have enough
+ parentheses, for example: "WHERE Id IN SELECT foo_id FROM bar"
+ vs. "WHERE Id IN (SELECT foo_id FROM bar)"
+ * tests/test-syntax.lisp: Added tests for using subqueries in the
+ where clause in update-records and delete-records. Moved asserts
+ in the test-output-sql/sql-ident-table function into the standard
+ test framework.
+ * doc/appendix.xml: added :connection-string to the information on
+ ODBC connection specs, and added example code connecting to ODBC
+ databases.
+
+2012-01-05 Nathan Bird <nathan@acceleration.net>
+
+ * db-odbc/odbc-dbi.lisp: handle sql decimal type in the same way
+ as numeric type-- read into a double float.
+
+2011-01-04 Russ Tyndall <russ@acceleration.net>
+ * sql/operations.lisp
+
+ Fixed bug reported by JTK related to the not-null sql-expression
+ especially as used in conjunction with the is operator.
+
+ Made null called with more than one argument throw an exception
+ instead of silently discarding all arguments past the first
+
+2012-01-04 Nathan Bird <nathan@acceleration.net>
+
+ * db-odbc/odbc-api.lisp (%sql-driver-connect): in the call to
+ odbc's SQLDriverConnect default the WindowHandle argument to a null ptr so
+ that connecting with :connection-string will work in the default
+ case of SQL_DRIVER_NOPROMPT.
+
+ I.e. you can now do things like:
+ (clsql:connect '("DsnName" "UserName" "" :connection-string
+ "DRIVER={FreeTDS};SERVER=...;DATABASE=...;UID=...;PWD=...;PORT=1433;TDS_Version=8.0;APP=clsql")
+ :database-type :odbc)
+
+ I believe the DsnName and Username at that point are only used when
+ printing the connection information.
+
+2011-12-20 Kevin Rosenberg <kevin@rosenberg.net>
+ * Version 6.1.1
+ * db-oracle/oracle.lisp: Typo correction (Elias Martenson)
+
+2011-12-19 Kevin Rosenberg <kevin@rosenberg.net>
+ * Version 6.1.0
+ * db-oracle/oracle.lisp: Change length function to
+ uffi:foreign-string-length to handle foreign encodings.
+ Thanks to Elias Martenson.
+
+2011-11-28 Russ Tyndall <russ@acceleration.net>
+ * db-odbc/odbc-api.lisp, tests/test-time.lisp
+
+ In ODBC backend, avoid going through the common lisp
+ universal-time type (because it lacks support for historic dates)
+
+ *time-conversion-function* renamed to *time-format*
+
+ Patch from: Francisco Vides Fernandez
+
+2011-10-18 Russ Tyndall <russ@acceleration.net>
+ * db-odbc/odbc-api.lisp
+
+ Added type specifier so MSSQL nvarchar fields can make it through
+
+2011-09-12 Russ Tyndall <russ@acceleration.net>
+ * sql/fddl.lisp sql/generic-postgres.lisp db-mysql/mysql-sql.lisp
+ sql/generic-odbc.lisp sql/odbc-api.lisp sql/odbc-dbi.lisp
+
+ Fix bugs in list-attribute(s|-types) where passing an escaped,
+ instead of unescaped column name, caused these functions to return
+ less data than they should have.
+
+2011-08-03 Kevin Rosenberg <kevin@rosenberg.net>
+ * CLSQL 6.0.0 released
+
+2011-07-28 Russ Tyndall <russ@acceleration.net>
+
+ * db-postgresql-socket3/: Added a backend that utilized postgres
+ socket api version 3. Uses the cl-postgres project (from
+ postmodern) to handle this. Allows use of parameterized /
+ prepared queries using clsql:command-object
+
+ * sql/{expressions,fddl, generic-postgresql, ooddl}.lisp:
+ Change how database identifiers are emitted to hopefully make this
+ less brittle, and more easily intuitable.
+
+ Previously every code path that wanted to emit a
+ database identifier was responsible for coercing what was provided
+ into a correctly escaped string. Sometimes two or three functions
+ in a row were trying to correctly quote and output that string. I
+ have tried to centralize this type coercion and logic into a
+ single code path.
+
+ everything should now call (escaped-database-identifier thing)
+ immediately before splicing a database identifier into string being
+ sent to the database
+
+ * sql/oodml.lisp: added method choose-database-for-instance, which
+ allows overriding which database connections are used based on
+ object type. Can be used to prevent connection conflicts in
+ multi-threaded environments
+
+ * sql/syntax.lisp: [foo bar] and [foo.bar] read into the same
+ clsql expression now (they used to be output the same, but after
+ the above database-identifier change, they were output separately
+
+ * 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 <kevin@rosenberg.net>
+ * Version 5.4.0 release
+
+2011-06-27 Nathan Bird <nathan@acceleration.net>
+ * db-odbc/: memory management improvements: leak slower
+ * MSSQL: TOP + DISTINCT work together
+
+2011-06-20 Nathan Bird <nathan@acceleration.net>
+
+ * sql/time.lisp: Handle parsing already parsed objects.
+ * sql/oodml.lisp: raise exception if we generate an update with no
+ where clause; incorporate Ryszard Szopa's patch for functional
+ expressions in :order-by
+ * sql/expressions.lisp: (listify nil) => nil instead of (nil).
+ * db-odbc/: bugfixes for working with older versions of FreeTDS;
+ support for bigints that works on mssql and postgres
+ * MSSQL improvements: use top instead of limit, IDENTITY can be a
+ column constraint, clsql:date becomes 'smalldatetime'
+
+2011-06-20 Nathan Bird <nathan@acceleration.net>
+
+ * Version 5.3.4
+ * db-postgresql-socket/postgresql-socket-api.lisp: Addendum
+ to Otto Diesenbacher's patch that had a spurious write a 0
+ byte (to terminate string) that should have been just CCL.
+
+2011-06-12 Kevin Rosenberg <kevin@rosenberg.net>
+ * Version 5.3.3
+ * db-postgresql-socket/postgresql-socket-api.lisp:
+ Patch from Otto Diesenbacher for UTF8 encoded strings
+ for CCL. FIXME: The best patch would be to use the
+ user-set encoding from the database object and use
+ UFFI's encoding strings to/from octet vectors rather
+ than SB-UNICODE and CCL specific code in this file.
+
+2011-04-21 Kevin Rosenberg <kevin@rosenberg.net>
+ * sql/generics.lisp: Add defgeneric for new
+ database-last-auto-increment-id
+
+2011-04-01 Kevin Rosenberg <kevin@rosenberg.net>
+ * Version 5.3.2
+ * db-mysql/mysql-client-info.lisp: Add recognition of
+ version 6 of MySQL client library.
+ * sql/metaclass.lisp: Fix the fix in the reader conditional
+
+2011-03-30 Kevin Rosenberg <kevin@rosenberg.net>
+ * Version 5.3.1
+ * sql/metaclasses.lisp: Fix previous patch to work
+ on non-SBCL systems
+
2011-03-29 Kevin Rosenberg <kevin@rosenberg.net>
* Version 5.3.0
* sql/metaclasses.lisp: Apply one-line patch to fix