merging in master from kpe.io
[clsql.git] / ChangeLog
index c4d9559ef903aa3eb1edbfd9902fbc9d50c40e58..ccc8afcf33a6ca829802594f80b17fab9bb2e79e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,555 @@
+
+2015-08-12 Kevin Rosenberg <kevin@rosenberg.net>
+       * Version 6.6.3 release
+       * db-oracle/oracle-sql.lisp: Patch for PostgreSQL socket interface
+       for unicode characters. Thanks to Jason Melbye.
+       
+2015-06-02 Daniel KochmaƄski <dkochmanski@turtle-solutions.eu>
+       * clsql.asd, sql/package.lisp: Add ECL compatibility fixes
+       * sql/db-interface.lisp: Fix declaration typo
+
+2015-04-06 Russ Tyndall <russ@acceleration.net>
+       * sql/operations, sql/expressions: add postgresql E-string
+       operator / expression.  Needed for correct regex handling
+       EG: [E "some string"]=> E'some string'
+
+2015-03-30 Kevin Rosenberg <kevin@rosenberg.net>
+       * Version 6.6.2 release
+       * db-oracle/oracle-sql.lisp: Remove extra hyphen, thanks to
+       Thomas Vossen
+       
+2015-03-24 Russ Tyndall <russ@acceleration.net>
+       * sql/oodml.lisp: fixed call-next-method in the base of
+       read-sql-value and replaced with a continuable
+       sql-value-conversion-error
+       * default read-sql-value for list
+       * tests for sql-value-conversion-errors and list
+
+2015-03-18 Russ Tyndall <russ@acceleration.net>
+       * {uffi,db-mysql}/Makefile: remove -pie build hardening for
+       which caused load issues for Linux Mint
+
+2015-03-18 Kevin Rosenberg <kevin@rosenberg.net>
+       * Version 6.6.1 release
+       * {uffi,db-mysql}/Makefile: Remove pie from build
+       hardening options for Debian/Ubuntu systems. Thanks to
+       DJ <jakep@arqux.com> and Russ Tyndall <russ@acceleration.net>
+
+2015-02-26 Kevin Rosenberg <kevin@rosenberg.net>
+       * Version 6.6.0 release
+       * {uffi,db-mysql}/Makefile: Add build hardening for Debian
+
+2015-02-24 Russ Tyndall <russ@acceleration.net>
+       * mysql-sql.lisp
+       an error in type declarations generating a compilation warning
+       was being treated as an error in recent SBCLs, fixed the type
+       warning by correcting the type (still a ton of compliation
+       notes)
+
+2015-02-23 Russ Tyndall <russ@acceleration.net>
+       * sql/metaclasses.lisp
+       made reinitialize-instance return the instance passed to it as
+       SBCL now expected (mentioned on the SBCL-devel mailing list by
+       Stas
+
+2014-12-03 Russ Tyndall <russ@acceleration.net>
+       * sqlite-sql.lisp
+       Added database arg to `canonicalize-result-types` so that it could
+       correctly call `sqlite-aref` with the required number of arguments
+       Thanks Zach Beane for the bug report.
+
+2014-07-29 Russ Tyndall <russ@acceleration.net>
+       * mysql-api.lisp, mysql-sql.lisp, test-connection.lisp
+       Added code to the mysql backend to pull all result sets as
+       multiple args.  This fixes a bug in the mysql backend where trying
+       to query after executing a stored procedure (even on a pooled
+       connection) would raise an error about the connection being out of
+       sync.  The second result set for the stored procedure seems to be
+       empty, so not sure why we need to iterate past it.
+
+       patch / bugreport provided by: Ilya Khaprov deadtrickster@github
+
+2014-06-11 Russ Tyndall <russ@acceleration.net>
+       * databases.lisp, sqlite3-sql.lisp
+       Similar to and overriding the patch 2014-01-30 937a3d, adds a
+       default-encoding variable uses that in places where a nil encoding
+       was being passed. Defaults to :utf-8.  This is mostly in place so
+       that uffi and cffi both work similarly (by moving the default into
+       clsql instead of clsql-uffi).  This allows my automated build
+       environment to do its job
+
+2014-06-10 Russ Tyndall <russ@acceleration.net>
+
+       * db-mysql/Makefile - the results of dpkg-buildflags --get LDFLAGS
+       seem to have changed on my system and and sed was returning
+       invalid command line arguments to ld.  To resolve this I changed
+       sed to emit valid args, which seems to have resolved the issue.
+
+2014-04-24 Russ Tyndall <russ@acceleration.net>
+       * oodml.lisp, test-oodml.lisp Better handling of view-slots of
+       type symbol/keyword.  Better handling of printing and reading
+       bindings (per mailing list request, always read and write in base
+       10)
+
+2014-03-04  Kevin Rosenberg <kevin@rosenberg.net>
+       * Version 6.5.0: New release
+       * makefile.common: Check for /usr/bin/dpkg-buildflags
+       * {db-mysql,uffi}/Makefile: Use debian buildflags
+
+2014-02-24 Russ Tyndall <russ@acceleration.net>
+       * oodml.lisp bind *print-length* to nil before printing
+       lists/arrays to the database.
+
+2014-01-30 Russ Tyndall <russ@acceleration.net>
+       * sqlite3-sql.lisp specify :utf-8 as the default encoding if there
+       is not one (allows :clsql-cffi to be closer to working for this
+       backend).
+
+       I ran the test suite successfully once with :clsql-cffi, but there
+       after I got spurious errors and especially unrecoverable errors
+       while connecting about the database being locked
+
+2014-01-30 Russ Tyndall <russ@acceleration.net>
+       * sqlite3-sql.lisp, fddl.lisp Dont compare database-identifiers
+       with invalid comparison operators
+
+2014-01-30 Russ Tyndall <russ@acceleration.net>
+       * generic-odbc.lisp, ooddl.lisp, generic-postgresql.lisp,
+       test-init.lisp, ds-nodes.lisp, generic-odbc.lisp, odbc-sql.lisp
+
+       auto-increment-column support improvement (mssql esp, now will
+       auto-fill after insert). Use +auto-increment-names+ to determine
+       auto-increment-column-p.
+
+       This triggered much test failing as regards normalized classes /
+       autoincrement primary key stuff.
+
+       New odbc-postgresql-database sub-type
+
+       POSSIBLY BREAKING CHANGES:
+       1 ) Previously all classes in a normalized heirachy had their p-key
+       marked as "auto-increment".  Usually auto-increment means a key
+       supplied by the database system, so this was decidedly
+       non-standard usage (clsql is explicitly providing the key for all
+       normalized subclasses of any given parent see ds-nodes.lisp). Some
+       RDMS will not allow insertion/updates of autoincrement columns
+       without hoop jumping and, as it doesnt really make much sense, I
+       removed the "auto-increment" aspects of normalized sub-classes.
+       Now the primary keys are chained regardless. The parent-most key
+       can be autoincrement or not.
+
+       2 ) ODBC Postgresql connections are now both GENERIC-ODBC-DATABASE
+       and GENERIC-POSTGRESQL-DATABASE.  Probably not a widely used path,
+       but this change allows most of the previously failing tests to
+       pass on this backend (we now format stuff correctly for postgres).
+       I anticipate this probably is not perfect yet (IE: I probably
+       missed something)
+
+2014-01-29 Russ Tyndall <russ@acceleration.net>
+       * oodml.lisp, generics.lisp - added
+       clsql-sys::view-classes-and-storable-slots generic (added method
+       previously).  Also added to-database-p keyword to allow overrides
+       to distinguish between the two situations. Mostly so that
+       clsql-helper:dirty-slots-mixin can filter slots when writing
+       values to the database but still allow all slots to be read from
+       the database
+
+2014-01-17 Russ Tyndall <russ@acceleration.net>
+       * oodml.lisp, generics.lisp - added filter-select-list generic
+         to allow fine grained control of generated query/object mappings
+       
+2014-01-07 Russ Tyndall <russ@acceleration.net>
+       * clsql-uffi.lisp, sqlite3 auto-increment support
+       * clsql-uffi.lisp, test-basic.lisp, fixes related to unsigned vs
+          signed ints (thanks Aaron Burrow)
+       * cleaning and testing
+
+2013-09-27 Russ Tyndall <russ@acceleration.net>
+       * fixed bug converting to boolean in db-mysql/mysql-sql.lisp
+       from github user Sectoid https://github.com/UnwashedMeme/clsql/pull/1
+
+2013-06-19 Russ Tyndall <russ@acceleration.net>
+        * sql/oodml.lisp, db-postgresql-socket3/sql.lisp,
+          db-mysql/mysql-objects.lisp, sql/generic-odbc.lisp
+        Refactored read-sql-value similar to the other recent refactorings
+
+        * the symbol case now uses intern instead of read-from-string
+          (which may not return a symbol and could have security issues
+          since read-eval was not being unset)
+
+        * read-eval is now off for all cases
+
+        * centralized logic into a single case statement, hopefully making
+          this more readable and debuggable
+
+        * TODO: make these refactorings to the oracle backend (I cannot
+          test against oracle and am loathe to change without testing
+
+2013-06-19 Russ Tyndall <russ@acceleration.net>
+        * sql/mysql-objects.lisp
+        Found and refactored a way some more eql specified methods of
+        database-get-type-specifier in mysql
+
+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-11-23 Kiss Kalman <kami@zalaszam.hu>
+       * utils/sql.lisp: Commit patch adding ccl getenv support
+
+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