# Release Notes

## Release 2.1.0

- Added the fast ordered index: OrderedIndexType in the &Cpp; API and

      IndexType::newOrdered

  in Perl.
- Added the methods for comparison of simple values in the &Cpp; API.
- Added the methods for reading the unaligned values in the &Cpp; API.
- Added the method

      IndexType::getKeyExpr()

  .

-     StringType::getSize()

  now returns 0 instead of 1.
- Moved the method

      getSize()

  from SimpleType to Type in the &Cpp; API.
- Added the methods

      RowType::fieldTypeSize()

  ,

      RowType::getArrayField()

  ,

      RowType::getArraySize()

  in the &Cpp; API.
- The

      X::ThreadedClient

  now returns all the received data when the wait for the expected pattern times out.
- Adapted to the new versions of &Cpp; and Perl:

  -     TrieadOwner::nextXtray()

    now uses a pointer to absolute time instead of a reference, since the newer compilers seem unhappy about the NULL references.
  - Moved the

        Errors

    methods that accepted the calls on NULL pointers to

        Erref

    , since the newer &Cpp; standard forbids such calls. Renamed the original methods to avoid confusion.
  - Changed the

        IndexType

    and

        TableType

    methods

        findSubIndex()

    and

        findSubIndexById()

    to return a special value

        NO_INDEX_TYPE

    instead of NULL, since the new &Cpp; standard does not allow to calll the methods on a NULL pointer, and thus would break the chaining of the

        find

    methods.
  - Added the methods

        eq()

    and

        ne()

    to

        Autoref

    for an easier comparison to pointers.
  - The

        HoldRowTypes

    argument of

        deepCopy()

    in the table-related types cannot be NULL any more, it must be

        NO_HOLD_ROW_TYPES

    instead.
- Enabled the optimization for the build of the releases.
- In the docs build, replaced Ghostscript with Inkscape for the EPS-to-SVG conversion.

## Release 2.0.1

- Fixed the version information that was left incorrect (at 0.99).
- Used a more generic pattern in tests for Perl error messages that have changed in the more recent versions of Perl (per CPAN report #99268).
- Added the more convenient way to wrap the error reports in Perl,

      Triceps::nestfess()

  and

      Triceps::wrapfess()

  .
- Added functions for the nicer printing of auto-generated code,

      Triceps::alignsrc()

  and

      Triceps::numalign()

  .
- In the doc chapter on the templates, fixed the output of the examples: properly interleaved the inputs and outputs.

## Release 2.0.0

Major:

- Documentation for the &Cpp; API.
- Streaming functions.
- Multithreading.
- TQL.

Minor:

- No more copy trays in the tables, they've got replaced by treating the table as a streaming function (the automatically generated FnReturn in a Table).
- When a hashed index type is initialized, its

      match()

  method takes the field name-to-index translation into account, and matches even if the key field names are different but translating to the same indexes.
- The recusrion is now permitted, and the limits on it can be adjusted per-unit (the defaults still forbid it). The labels can be marked non-re-entrant to forbid the recursion on them.
- The execution of rowops enqueued by

      fork()

  and

      loopAt()

  has changed: now they reuse the parent's stack frame. This changed the looping logic: the marks are now set on the current, not parent's frame, and the

      makeLoop*

  calls don't need, don't create and don't return the begin label.
- The change in the execution of forked rowops led to the different trace sequence, and a modified set of TraceWhen states. The before and after states now always come in pairs, and there are methods to generally differentiate between them.
- The Labels are marked as cleared before their subclass clearing function is called, not after it. The repeated calls to clear them are ignored.
- In Table added

      clear()

  , sticky error methods, fixed the handling of errors in the index comparators to produce the sticky errors.
- The Unit ignores the attempts to remember, forget or clear labels while it's already clearing labels.
- In Unit added

      isFrameEmpty

  ,

      isInOuterFrame()

  .
- In Rowop added an optional argument to

      printP()

  .
- Added handling of the broken Perl versions that return spurious errors on the command execution.
- Better &Cpp; NameSet constructors.
- The &Cpp; API always throws Exceptions instead of direct

      abort()

  .
- In the &Cpp; API AggregatorType accept the NULL result row type until the initialization is completed.
- In the &Cpp; API AggregatorGadget added the

      typeAs()

  template, the version of

      sendDelayed()

  that constructs the row from the fields, and

      getIndexType()

  .
- In &Cpp; added a Rhref constructor directly from a FdataVec argument.
- In &Cpp; added the method

      Label::adopt()

  , making it easier to remember.
- The

      Label::adopt()

  in Perl now allows the cross-unit adoption.
- Out-of-the-box compilation with a wider range of GCC compiler versions.
- The default constructor of Fdata sets the value to NULL.
- In &Cpp; addded the convenience

      get*

  methods on Rowref.
- In &Cpp; addded the

      initializeOrThrow()

  ,

      checkOrThrow()

  templates.
- The tables no longer have an enqueuing mode associated with them.
- The potentially reusable examples have been exported in the packages under Triceps::X.
- The

      Triceps::X::SimpleServer::outBuf()

  now checks for the client disconnection before sending data to it.
- The dump label added to the tables.
- The

      chainFront()

  method added in the Label in the Perl API and an extra argument with the same meaning added to

      chain

  in the &Cpp; API.
- The

      *Safe()

  methods added to the Perl API.
- Finiding an index by its keys with

      TableType::findIndexPathForKeys()

  .
- Passing through of arbitrary options, and manipulation of the option lists.
- A fast way to check whether a row is empty.

## Release 1.0.1

- Fixed the version information that was left incorrect, as 0.99.
- Added the scripts to check the version and Perl MANIFEST before doing a release, script to set the version (ckversion, setversion), explicit version option -v to mkrelease.
- Added the Release Notes.

## Release 1.0.0

- The first official release with full documentation.
- Many additional examples, code clean-ups and small features resulting from the experience of writing the documentation.

## Release 0.99

- The first published pre-release. Basic functionality, no documentation.