Revision history for XML::Comma modules:

-------------------------
1.00  2002/01/28 03:46:15
-------------------------
  - boolean macro bugfix

  - new features in HTTP_Transfer

  - faster $index->count() SQL
 
  - added iterator_select_returnval() method to Index Iterator class

  - new boolean- (and grouping-) capable collection and sort
    specs. implemented using Parse::RecDescent -- core code now
    requires Parse::RecDescent to be available

  - added validate() method to Element, NestedElement and BlobElement
    classes. validate_structure() is now DEPRECATED. storage write
    methods all call validate() and refuse to store Docs that fail to
    pass all validity checks. it's now possible to define
    validate_hooks for blob elements.

-------------------------
1.01  2002/04/10 12:05:32
-------------------------

  - Changed Comma_Standard_Image.def to use hex (rather than b64)
    digests, to eliminate the +/= characters that could cause problems
    in urls.

  - Added doc_id() method to Storage::Iterator. Returns the doc_id of
    the currently-pointed-at doc.

  - Improved $index->rebuild() code. Fixed bug in stop_rebuild_hook
    handler, added parallelization ('workers=>n' arg). Added sig
    handler to catch Ctrl-C and try to clean up, so as to not leave db
    tables in a "marked" state.

  - Added Methodable::method_names() method so that Def and Index
    objects can return the names of the methods they define.
  
  - Added $def->index_names() and $def->store_names() methods.

  - Fixed Index::Iterator bug found by TIB that was triggered by
    trying to access columns from an empty iterator.

  - Rewrote Index plurals code. Added a new type of storage
    ('bcollection table'), and integrated 'sort' and 'collection'
    types together. Rewrote SQL code generation and all t/indexing.t
    tests. Added more boolean/notting and partial match capabilities
    into the new collections framework.

  - Added some cleanup code to Index->DESTROY to resolve circular
    references that were causing occasional problems with global
    destruction.

-------------------------
1.08  2002/07/26 12:40:45
-------------------------

  - Bug fixes or code cleanup in: method_names, _make_collection_spec,
    Index->DESTROY, Element->method() and friends, boolean macro,
    various tests, date_8 (code contributed by Chuck), macro section
    in Bootstrap Def, bcollection tables, Index/Clean circular
    references, Doc->store(), set(), decl_pos in various Location
    modules, FileUtile make_directory permissions setting.

  - DEPRECATED HTTP_Upload. The plan is to support HTTP_Transfer,
    which is a cleaner architecture, instead. Be that as it may, fixed
    some headers in HTTP_Upload_mod_perl module. Tests for
    HTTP_Transfer are in t/transfer.manual.

  - New date_8 macro methods "today" and "diff_today"

  - Makefile.PL now respects existing Comma.pm installs -- prints out
    message saying that it's not overwriting your Comma.pm if that's
    the case. Also, moved VERSION into Bootstrap.pm, so that upgrades
    show the right version even if Comma.pm doesn't change.

  - Changed enum_choices() in enum macro to guarantee a specific
    return order.

  - Added integer macro.

  - DEPRECATED the XML::Comma->lock_singlet() interface. It's close to
    impossible to use this as intended, across differing database
    architectures. Better to rip it out (advisorily, anyway, by
    deprecating) and replace it with something better in the
    future. In the meantime, added a MySQL-specific "disposable locks"
    module in XML::Comma::Pkg::MySQL_Simple_Lock.

  - Beefed up SQL::DBH_User _connect() routine (which is inherited by
    all core code that needs db access). Sherrard wrote code to retry
    and log failed attempts.

  - TIB contributed new Location module SequentialCheck_file

  - Fixed Blob class such that element_delete() deletes the backing
    file.

  - Big fixes to doc-level locking code. Old code was not
    multi-machine safe. New code is, as long as the two (or more)
    machines share a single database server. It is possible (though
    unlikely -- requires bad perl interpreter exit) for a lock record
    to hang around after process goes away. There is no probable fix
    for this, but some utility scripts to print out info about comma
    locks are on the todo list.

  - Added a third passed argument to pre_ and post_store_hook code: a
    hashref pointing to the original store() args. This allows hooks
    to do arbritrarily complex iff'ing based on user-level args (which
    are unconstrained, so this is a very open-ended mechanism).

  - NON-BACKWARDS-COMPATIBLE CHANGE: Added a check for defined-ness
    for the element names passed into $el->elements(). This might
    break sloppy (or buggy) old code, but seemed like very much the
    right thing to do. There's no good reason to be able to pass
    non-existent element names to the elements() method.

  - NON-BACKWARDS-COMPATIBLE CHANGE: Changed the third argument passed
    to set_hook and set_from_file_hook to be a hash_ref, rather than
    passing the whole hash. This might break some existing code
    (although I don't think much code uses this feature, yet), but
    it's the Right Thing (tm).

  - NON-BACKWARDS-COMPATIBLE CHANGE: Changed the
    Comma::Util::XML_basic_escape() method. This method used to try to
    identify '&' characters that were part of an entity tag, and NOT
    escape them. Because the logic was not symmetrical with
    XML_basic_unescape(), confusing results resulted. New escape
    method escapes all occurrences of '<', '>', and '&' in a string --
    making it entirely symmetrical with the unescape code. Two new
    methods were added, in case folks need the old functionality:
    XML_smart_escape() and XML_bare_amp_escape().

  - Added French Textsearch Preprocessor. Algorithm based on snowball
    code from http://snowball.tartarus.org/french/stemmer.html

  - Added 'erase_where_clause' capabilities to collection table
    cleans.

  - Error reporting on errors passed through DBI is much improved. All
    do() statements in SQL/Base.pm where changed to prepare(), etc.

  - Partial rewrite of Preprocessor code structure. Most importantly,
    maximum word length is now tied to a global defined in the
    Preprocessor abstract/template class, and the multi-preproc
    switching code accomodates an "attribute" argument so the Iterator
    can stem keyword arguments correctly. UPGRADE INFORMATION: if you
    are upgrading from an earlier version of Comma, it is best to drop
    all indexes that include <textsearch> fields, and rebuild them
    after the upgrade.

-------------------------
1.09  2002/11/27 12:36:38
-------------------------

  - Upgraded Pg-specific code for Postgres 7.3. Comma now REQUIRES Pg
    7.3 -- which is fine, because Comma made poor assumptions pre-7.3
    that didn't work so good. QUESTION: why is postgres so chatty, and
    what can be done to keep it from printing out warnings when
    indexes are created, and to stop errors that are caught with eval
    from going to the log.

-------------------------
1.10  
-------------------------

  - Fixed bug in textsearch code that prevented processes that hadn't
    already "indexed" to "retrieve" based on textsearch stuff

  - Added 'digits' argument to Sequential_file and
    Sequential_dir. Modified FileUtil::current_sequential_id to use
    the lockfile rather than listing the files in the directory (which
    fixes the odd behavior Sherrard was complaining about that arises
    if you drop unexpected stuff into directories). New dependency:
    Math::BaseCalc.

  - Made some changes to the core to support the new Index_Only
    storage location module. This is the first location module that is
    truly decoupled from the filesystem. There are some performance
    and feature improvements still to be made, but it seems quite
    usable.

  - Added new <escapes> syntax to allow Def-defined escape/unescape
    behavior

  - Moved Configuration stuff into Comma/Configuration.pm -- a
    separate file. This makes more sense from an architectural point
    of view, and could make it easier to run more than one Comma
    instance on a given machine, in the future.

  - Added a "sys_directory" configuration variable; changed the
    SimpleC parser to do its build in the sys directory. Changed
    Comma.pm to create the comma_root, document_root, sys_directory
    and tmp_directory dirs on startup, if they don't already exist.

  - Rewrote BlobElement framework so that BlobElements act like other
    elements: they are not written to permanent storage until a
    store() is called, and there is no extra store() fanciness
    required to make sure that the pointers are in sync. Under the
    covers, blob elements are saved in files under the tmp_directory
    until the doc they belong to is store()d.

  - The content of an <erase_where_clause> now gets eval'ed before
    being passed to the database *if* it begins with a '{'
    character. This is useful for doing perl-ish calculations before
    having to drop down into SQL.

  - NON-BACKWARDS-COMPATIBLE CHANGE -- XML::Comma::Configuration.pm
    now uses a much simpler syntax and a future-flexible approach,
    inheriting from XML::Comma::Pkg::ModuleConfiguration.pm

  - Added #include foo and #include {foo} <args list> to parsers

  - Added PAR resolving functionality to DefManager

-------------------------
1.17
-------------------------