Permalink
Switch branches/tags
Commits on Mar 11, 2009
Commits on Mar 6, 2009
Commits on Mar 5, 2009
  1. Request from Jon Jensen and Randy Moore (interchange-users message

    msjohns1 committed Mar 5, 2009
    from 2/28/2009) to apply Josh Lavin's patch for new USPS
    international services.
Commits on Jan 8, 2009
  1. Severs the shared database connection between parent and child when f…

    msjohns1 committed Jan 8, 2009
    …orking an
    
    IC server mid-process to run background ITL. DBI database connections otherwise
    continue to share the same database server and the connection is left unusable
    for both processes once either one disconnects.
Commits on May 26, 2008
  1. * Making set_slice() reliably accept the field/value pairs as simple …

    msjohns1 committed May 26, 2008
    …args
    
      across all polymorphs, consistent with regression fix from RT#200.
Commits on May 6, 2008
  1. * Added commented-out description and pragma usage for new dml pragma

    msjohns1 committed May 6, 2008
      in catalog.cfg from Mike.
    
    * Removed the option available in some polymorphs of set_slice that allowed
      key/value pairs to be passed in as a simple array.
Commits on May 5, 2008
  1. Extend set_slice() to allow control of upsert behavior.

    msjohns1 committed May 5, 2008
    Calls to set_slice() are forced to use the upsert model of data
    manipulation.  This can be a highly desirable editing model, but it also
    has disadvantages, particularly in the context of the 'set' and 'autoset'
    form actions, which imply--but don't enforce--a distinction between
    insert and update at the data-storage level.
    
    The effects on insert can be particularly insidious, where one faces
    having the assumed behavior on duplicate primary keys thwarted by a
    surreptitious conversion to a SQL update. In such an instance, instead of
    existing data being protected by a duplicate PK error, the extant record
    is replaced by the data from the insert. Detecting this condition,
    particularly on a large table, is virtually impossible.
    
    While the results of an update-to-insert adjustment are more benign, it
    still presents a nuisance if a strict update is intended. To correct it,
    one merely needs to delete the newly created, unanticipated row, and such
    behavior does not destroy existing data.
    
    To enforce update or insert, set_slice()'s $key arg can be optionally
    passed as an array ref, essentially replacing the existing call:
    
      set_slice($key,$fary,$vary)
    
    with
    
      set_slice([$opt, $key],$fary,$vary)
    
    where $opt->{dml} is set to the desired value. $opt as a hash ref is
    used so that any possible future opt-style params can simply be loaded
    into the existing calling structure.
    
    Change details:
    
    * Default behavior for set_slice() is 'upsert'. If you do nothing to
      your code or catalog, the behavior remains unchanged.
    
    * $opt->{dml} can be 'insert', 'update', or anything else. If it's
      anything else, it has no specific behavior currently. It defaults the
      value 'upsert' just to be somewhat self-documenting and open up the
      possibility of behaviors based on that value in the future.
    
    * Despite the decision to key it off of 'dml', this has no effect on
      deletes. Deletes have no ambiguous behavior, reflected in the fact that
      deletes have their own dedicated method.
    
    * Change only has core impact when processing requests through
      Vend::Data::update_data(). However, any direct calls to set_slice() may
      avail themselves of the new feature simply by overloading the $key arg
      in the same fashion.
    
    * Behavior of Vend::Data::update_data() can be in three modes,
      controllable by the new 'dml' pragma.
    
      + No pragma setting works in current mode, with upsert behavior.
    
      + Pragma 'dml=preserve' restricts inserts to insert-only, but allows
        the fall-through behavior from update to insert. As the name preserve
        implies, it means no existing data can be clobbered.
    
        The advantage to preserve is the easy use of set_slice() as a
        record-cloning operation. In the table editor, one can clone a
        record by simply changing the PK. Without this behavior, one must
        completely re-enter existing data to the new key's name to clone.
    
      + Pragma 'dml=strict' forces update or insert to only perform the
        requested action.
Commits on Feb 26, 2008
  1. * Keep warnings and errors separated out. String eval handles $@ as the

    msjohns1 committed Feb 26, 2008
      the followup code clearly intends, separating out errors+warnings, warnings
      only, and valid perl not resolving to a sub ref.
Commits on Dec 4, 2007
  1. * Unlinking the existing session file before re-writing it causes a race

    msjohns1 committed Dec 4, 2007
      condition in the FETCH method, where if it checks with a concurrent request
      on the same session while the file is missing, the failure causes Interchange
      to create a new session for the user. As long as the file exists continuously,
      the lock kicks in and concurrent requests serialize appropriately.
Commits on Nov 7, 2007
  1. * Making explicit the various implicit dependencies between PreFork,

    msjohns1 committed Nov 7, 2007
      PreForkSingleFork, and StartServers.
    
      + PreForkSingleFork should only ever affect behavior in conjunction with
        PreFork true, ensuring the prefork code path is entirely controllable by
        the value of PreFork.
    
      + Fixed condition on StartServers where a positive value for that parameter
        when not in PreFork mode spawned a StartServers number of superfluous
        daemons that were never used. Now, StartServers is effectively ignored
        unless PreFork is also true.
    
      Conditions were discovered by Brian Miller and Jon Jensen while combining
      atypical combinations of the settings involved.
Commits on May 24, 2007