Release 0.8
===========

- Thanks to a bug found by Ashima Atul. Added demux conservative. Now a
  demux blocks until all its outputs are unblocked so that it cannot
  drop tuples. Fixed netplanner to place wraparound tuples into the
  receive queue. Added regression test showing that locally recursive
  rules don't block.

- Full use example for chord on PlanetLab.

- Removed pong and ping elements

- Modified chord.olg to account for empty-set aggregates in lookup
  rules.

- Adding support for user-defined external stages (elements)

- Removed Pel redundant type-specific operations with polymorphic
  counterparts.

- Moved all checks for TypeError exceptions in one place within pel_vm.

- Added f_typeOf function to obtain the name of the type of a value.

- Added f_totalComp function to compare two values according to the
  total order of the type system. No implicit casts are done for this
  comparison. 

- Fixed non-pointer static initializers in reporting.[hC] (from Tyson
  Condie).

- Added support for external stages.

- Re-added catching of group-by fields from non-event functors in
  event-table aggregates.

- Added more reporting for lexer errors.





Release 0.7.8
=============

- Removed python from the default build process.

- Removed unit test convenience library to simplify dependencies.


- Fixed Lookup2 to always return an empty tuple upon completion of a
  lookup. Abolished END_OF_STREAM tags. Fixed Aggwrap to use the simpler
  lookup result discipline. (Thanks to Igor Ganichev for finding the
  bug).

- Migrated to new Aggwrap (aggwrap2.C) and removed old version of the
  element. 

- Fixed aggwrap join completion order bug and adapted to the new Lookup
  completion logic to match new stream punctuation in Lookup2.

- Fixed AggWrap's handling of completion callback state logic (must be
  BUSY when receiving a completion callback).

- Fixed planning for aggwraps to avoid including "*" as one of the
  tracked names.  Also fixed the choice of group-by fields to be
  determined from the incoming event, as opposed to from the outgoing
  tuple, which was the previous buggy version.

- Now Aggwrap is explicitly handling aggregates that have a don't care
  aggregate expression.


- In Chord, now preventing predecessor stabilization from installing a
  self-referential predecessor.

- In Chord, now initializing the PINGPERIOD.


- More logging migration in elements, planner, and event loop.


- Added modifiers for watch facts.  Now there exists the old watch fact,
  for backward compatibility, and the new watchmod fact with
  modifiers. Explanations for the modifiers can be found in the
  "Watches" section of the overlog_primer.

- Added more (optional) print elements right after the final projection
  for a rule head. Those are controlled by the 'h' watch modifier.


- Fixed bug with OperNull class inheritance, via which equality was
  thought unsupported.


- Moved unsupported operator exception handling in the Pel VM's
  execution method, as opposed to individual Pel operators.


- overlog and runOverLog now exit when a parse error is found.


- Fixed tuple field access methods to check bounds (by using .at() as
  opposed to []).


- Removed v1 planner from the repository.


- Fixed static initializers for CommonTable, Reporting, and aggregates
  to use the construct at first use pattern, and also to allow
  dynamically loaded aggregate objects.






Release 0.7.7

Modification of chord.olg to deal with connectivity management better
(from Boon Loo).

Added wrap-around in the net planner of the new planner (from Boon Loo).

Removed naming component from localization rewrite to avoid @ signs in functor names.

Now moving locspec during localization rewrites.

Changed toString in Parse_Functor to show locspec.

Added pred(.., NIL, NIL) as a fact into Chord.olg

Fixed rule head name setting in localization rewrites that now allow
inclusion of locspec (without the @ character).

Replaced debugRule with PLANNER_WORDY macros in Planner files.

Replaced all PrintWatch elements with Print elements that are placed
conditionally when the tuple flow they see is a watched tuple name.

Replaced string delimiter in element names from | to ! to avoid conflict
with graphviz language.

Started migration in some elements from log(...) to ELEM_*

Added TABLE_* logging macros for table functionalities

Fixed BIG BUG in commonTable in which lookup would not only return
matching elements but all elements past the match to the end of the
index (bug found by Igor Ganichev).

Added unit test to catch such iterator tail bugs.

Added bit-wise operators into OverLog

Removed runOverLog2 from executables to discourage its use.

Added bitwise operators for IDs (originally due to Ashima Atul).



Release 0.7.6

- Fixed bug in initialization of IDs via strings (4 bytes per word as
  opposed to 2 bytes).

- Added ID right-shift operation.

- Migrated tests/overlog to use getopt

- Added -lcrypto in compilation machinery for OPENSSL (required on OSX)

- Added -force in libtoolize to deal with cross-platform setups

- Added time subtraction in pel and OverLog

- Added OPENSSL_LIB in all tests programs

- Fixed unit test library dependencies



Release 0.7.5

- changed tests/runOverLog2, tests/overlog, and tests/runOverLog to use getopt
command line options (run them with -h to see the command line option
descriptions).

- removed p2stub.py, which has been obsolete for a few months now and has been
subsumed by runOverLog2.

- removed explicit use of c-style file descriptors from PrintWatch. Watches
can be taken from the standard output.

- Fixed some leaks with old buffer manipulation in runOverLog2

- fixed the chord.olg files to contain node and landmark facts (which used to
be set up by special programs before). Added running instructions in the
comments. Tested for correctness.

- Fixed the materialize keyword to allow multisets (i.e., to take empty keys()
clauses).

- Fixed an uninitialized locspec wreaking havoc in parse_util




Release 0.7.4

- Broke out elements dependent on Python into pythonElements

- Reorganized automake files to remove deprecated variables such as
INCLUDES, to remove duplicate PYTHON macros, to remove any variable
definitions for user-specified variables (e.g., CXXFLAGS and LDFLAGS),
to remove user-specifiable parameters (e.g., -Wall)

- Added support for .dylib libraries in acinclude.m4

- Added support for alternate OpenSSL locations in automake/autoconf

- Added an automake dependency on Automake version 1.9.2 and above.

- Replaced most direct uses of std::cout/cerr etc. for the TELL_*
macros, which allow overriding via the new Reporting static class.
Removed most functionality from LoggerI.  Reporting state is now set
directly via Reporting, not through the plumber, elements, etc.

- Reimplemented aggwrap (called Aggwrap2) to use modular aggregate
functions, to implement correctly empty-set aggregates, and to handle
group-by values and interspersed aggregate fields correctly. This will
soon replace the old Aggwrap in planner-generated dataflow graphs.

- Removed toDot specialization into the elements themselves to remove
cyclical dependence.

- Fixed bug in aggCount whereby _current was used uninitialized.

- Added AggFactory exception for not-found aggregates. Now the AggWrap
constructor and the aggregate function throw that exception, which is
properly caught.

- Now min/max aggregates return Val_Null on empty sets.

- Fixed table aggregates to deal correctly with empty-set groups.

- Added machinery into tables that flushes any empty-set aggregate
updates at the beginning of time (e.g., for any aggregate COUNT views
that should contain a correct tuple at the beginning).

- Added f_match in OverLog (from JMH).

- Removed many legacy tests/ programs.

- Added machinery for casting values in test scripts for tables and
aggregates (in unitTests)

- Added a tester for AggWrap2 in unitTests.


