$Id: Changes,v 1.72 2009-04-03 22:43:07 mike Exp $

Revision history for Perl extension Net::Z3950::DBIServer.
See the bottom of this file for a list of things still to do.

1.06  Sat Sep 19 11:40:10 BST 2020
	- Escape open-curly-brackets in regular expressions. This is
	  necessary in order to run on recent version of Perl due to
	  the idiotic decision to make a backwards-incompatible change
	  in Perl5.26. Thanks to Wayne Schneider for the patch.

1.05  Sat Jun 14 03:01:44 BST 2014
	- Revert to using implicit join unless explicitly requested to
	  do so.  New per-database configuration-file directive
	  join="outer" will cause left outer joins to be used, as was
	  the default in 1.03.
	- Access-point specifiers may take an "uppercase" modifier as
	  well as or instead of "fulltext".  When present, terms used
	  in searches against that access point are mapped to
	  upper-case.  This can be used to simulate case-blind
	  searching in dumb RDBMSs such as Oracle that don't support
	  it out of the box, so long as that database schema includes
	  an all-uppercase version of the field to be searched.
	- Better quoting of search terms in the generated SQL, so that
	  embedded apostrophes don't break things.
	- Only apply defaultattrs when no attributes are explicitly
	  provided.
	- Add "-n" command-line option (and corresponding DBIServer
	  constructor) to invoke no-op mode, in which the backend
	  database is never connected to, and dummy responses are
	  provided.
	- Hashes in the configuration file do not introduce comments
	  if immediately preceded by a backslash, but become simple
	  slashes.  This provides a means of embedded hashes in
	  strings.
	- Add fulltext support for Oracle, using CONTAINS.
	- NOTE INCOMPATIBLE CHANGE: fulltext searching is now used
	  only when attribute 3=3 (position=any position in field) is
	  supplied.
	- Add make-pdf.sh to generate zSQLgate-manual.pdf
	- New configuraton-file directive: "option NAME = VALUE", can
	  be used so set for example "option "mysql_enable_utf8" = 1"

1.04  [UNKOWN DATE]
	- Unknown features -- probably a subset of those listed for
	  v1.05.

1.03  Fri May 16 17:44:49 BST 2008
	- Books example expanded to use three-level inner join, using
	  correct configuration syntax with each auxiliary table
	  specified separately.
	- Restructure directories.

1.02  Fri May  2 17:23:49 BST 2008
	- Use left joins for auxiliary tables, so that missing values
	  in the auxiliary tables don't prevent data in the main table
	  from being visible.
	- Example database in examples/books/book.data extended to
	  include books with unknown authors.

1.01  Tue Oct  9 11:23:21 EDT 2007
	- Include sample script for System-V init, in examples/init-script
	- Add Oracle version of books example, and notes on working
	  against an Oracle back-end.

1.00  Fri Mar 16 15:39:44 GMT 2007
	- Support for SRU and SRW, largely due to changes in the
	  underlying YAZ and SimpleServer code.
	- XML record-specifications may now indicate what schema they
	  conform to, and this information is returned in SRU/SRW
	  responses.
	- Requests to present records from a non-existent result-set
	  no longer cause a null indirection.
	- Use correct diagnostic (114) for unsupported Use attribute.
	- Support for new attribute-set names "USMARC", "BIB-2" and
	  "ZeeRex".
	- Recognise the name "XD-1" for the cross-domain attribute
	  set, as YAZ does.  (Also still recognises "XD", which is
	  probably more correct.)
	- More work on the tutorial, DBIServer/Tutorial.pm
	- Changes to "examples/books/books.nzd" to illustrate the new
	  tutorial material.
	- Slightly less noisy logging.
	- Note that MARC::Record is now a prerequisite.
	- Require version 1.03 of SimpleServer, which in turn requires
	  version 2.1.24 of YAZ, which correctly propagates SRU/W
	  error addinfo.
	- Change colour-scheme of generated documentation.

0.11  Mon Apr 11 19:50:31 BST 2005
	- Fix a bug in release 0.10 that prevented repeated fields
	  from working: each such field would occur the specified
	  number of times in each generated record, but the value
	  would be the same for each instance.
	- Many documentation improvements.
	- The example configuration "examples/books/books.nzd" now
	  exercises nearly all the server functionality.

0.10  Mon Apr 11 11:03:18 BST 2005
	- Support for full-text searching, using MySQL syntax.  (This
	  WILL NOT WORK on most other back-end databases).  It is
	  configured by access-point specifications of the form:
		access <number> = fulltext "field,field..."
	- Fields in generated records now appear in the order that
	  they are specified in the configuration file rather than
	  alphabetically sorted.
	- Repeated fields may now be included.
	- When generating MARC records, a repeated subfield within an
	  already created field now causes a new (repeated) field to
	  be started.
	- Presentation of SUTRS records may now by configured by means
	  of a "format sutrs" section in the data section of a
	  database's configuration, similar to the "format xml"
	  section.  If this is absent, then the server falls back to
	  presenting the old-style default SUTRS record containing all
	  fields in alphabetical order.
	- Compound field-specifications no longer need _begin_ with
	  "%" in order to be recognised: merely _containing_ "%" is
	  sufficient.
	- Compound fields now behave properly if they consist of
	  multiple lines (i.e. contain embedded newlines).
	  Previously, the embedded text-constants came out in the
	  wrong order.
	- Fields (both simple, and embedded within a compound field
	  specification) may now be prefixed with a "?", meaning that
	  they are not required to be non-null; if they are null, then
	  they are omitted, (along with the immediately preceding
	  constant string in the case of embedded fields).
	- Tab characters (represented by "\t") are now supported in
	  strings, as well as newlines ("\n").
	- Strings in the configuration file may be concatenated using
	  "+", which allows long strings to be broken across lines.
	- The configuration file is now automatically reloaded if it
	  has changed, just before any search or retrieve request is
	  handled.

0.09  Mon Feb 14 16:34:46 2005
	- Database-names are now recognised case-insensitively, as
	  specified in section 3.2.2.1.2 of the Z39.50 standard.

0.08  Wed Dec 15 22:54:30 GMT 2004
	- Support for MARC record syntax.
	- Now tested with MySQL.  Support for MySQL in examples/books.
	- Slightly clearer implementationVersion returned to server.
	- Add new "defaultattrs" clause to the "search" part of the
	  per-database configuration, allowing (for example) a default
	  access-point to be specified.
	- Finish "Z39.50 CAPABILITIES" documentation in DBIServer/Intro.pm

0.07  Tue Dec 10 17:07:53 2002
	- Support for XSLT transformation of returned XML records:
	  this allows the relatively simple records that are generated
	  by "vanilla zSQLgate" to be translated into complex formats
	  such as OAI.
	- Make exception handlers robust against non-object
	  exceptions.  (They were supposed to be like that already,
	  but a typo defeated that robustness.)

0.06  Thu Nov 28 10:46:00 2002
	- Add a new per-database clause to the configuration-file
	  grammar, RESTRICTION = STRING, where the string contains an
	  SQL condition restricting the records that may be found: for
	  example --
		restriction = "id != 3 and id != 42"
	- Bring examples/results in line with the real RESULTs
	  database: this involves renaming databases, tables and
	  fields, and consequently a few files, but no radical
	  changes.

0.05  Fri Nov 15 14:59:10 2002
	- Massage the SELECT-statement generator not to prepend
	  ``<table>.'' to column names in simple configuration where
	  there are no auxiliary tables.  This is because DBD::CSV's
	  SQL parser doesn't recognise ``<table>.<column>'', which
	  was preventing examples/csv from working.
	- Add a new XML record-format directive, ``attrs = "string"''
	  to the .nzd file format: it specifies a set of attributes
	  (e.g. namespaces) to be attached to the opening tag of the
	  record.
	- Add a new example database and configuration, "results",
	  based on the RESULTs project and having broadly similar
	  data structures.  (See http://www.results.ac.uk/)
	- An XML data specification which begins with an asterisk is
	  now used as constant data, included in every generated
	  record (with the asterisk stripped!):
		data format xml {
		    field "rights" = "*All rights reserved"
		}
	- Add support for "any" access points: the columnName string
	  on the right hand side of an accessSpec may now be a
	  comma-separated list of columns in which searches are to be
	  performed:
		search attrset bib1 {
		    access 1016 = "author,rtitle"
		}

0.04  Fri Nov  8 16:11:13 2002
	- Add support for GRS-1 (NOT FULLY WORKING)
	- Add new configuration-file syntax at the top level:
		userName = "<name>"
		passWord = "<pw>"
	  to specify a username and password to use with
	  DBI->connect().

0.03  Tue Apr 23 16:28:35 2002
	- Added new config-file syntax
		field "fieldName" = "columnName"
	  equivalent to the old (and now deprecated)
		column "columnName" = "fieldName"
	  The new form is preferred since it is amenable to other,
	  more complex RHSs enabling us to specify link-fields etc.
	- Change XML record generation to be driven by the list of
	  fieldnames, not that of columnnames.
	- Add ability to search across multiple tables: this allows
	  "link fields" to be resolved, as in fetching the name of
	  book's author by following the book record's "author_id"
	  record to a separate author record carrying the name.
	- Create new "examples" subdirectory.
	- Replace old "music" example with similar examples/books.
	- Move "reading" example to examples/csv.
	- Various tweaks to documentation.

0.02  Fri Mar  8 12:43:46 2002
	- Enable configuration files to specify attribute sets by name
	  (e.g. BIB1) as well as by OID (1.2.840.10003.3.1)
	- Improve diagnostics from configuration-file parser: filename
	  and line number are now specified on all errors.
	- Modify the ResultSet module to notice when its using the CSV
	  driver and count records by hand rather than trying SELECT
	  COUNT(), which is not supported by that driver.
	- Tweaked the configuration file lexer to recognise "\n" in
	  strings as a literal newline (entirely so that we can
	  specify a rational end-of-line protocol in our DBD::CSV
	  invocation.)
	- Fix the XML record renderer to use the specified tag-names:
	  was previously using the table names!
	- Added the zSQLgate Installation Guide (the POD documentation
	  from the Net::Z3950::DBIServer::Install module.
	- Added the "music" example directory, using DBD::CSV.
	- Various tweaks to documentation.

0.01  Tue Mar  5 17:11:51 2002
	- original version; created by h2xs 1.19

--

### Still to do (see also DBIServer/Spec.pm, "FUTURE DIRECTIONS")
	- ### document compound fields
	- Finish tutorial in DBIServer/Tutorial.pm
	- Fix GRS-1 record-syntax support to return an actual GRS-1
	  record rather than an ASCII rendering of one.  (This
	  requires changing SimpleServer to handle such records.)
	- Allow XML field names to be unquoted in config file.
	- Support for CCL query syntax.
	- Support case-insensitive searching.
	- Fix so that multiple link-field values don't generate excess
	  records.
	- Fix so that fetch doesn't keep reading past the end of the
	  searchlist if for some reason it's shorter than we thought
	  it was going to be, and notices if there are spares.
	- Support X-to-many linking (that is, repeated output fields).

