RELATION-FIELDS pairing probes  --  refs #4514, #11747
======================================================

These are the 4GL programs that established the RELATION-FIELDS rules recorded on
the ProDataSet_Tests wiki page.  They are NOT ABLUnit tests and cannot be: three
of the cases are deliberately expected to FAIL TO COMPILE, so putting them in the
testcases project would break its conversion.  They are archived here so the
measurements stay reproducible.

Everything is self contained -- temp-tables only, no database required.

All captured results were produced on OpenEdge 11.6, 64-bit, Windows.


probes/  --  the probe suite
----------------------------

Driver: pr_drv.p
  Compiles every probe with NO-ERROR and dumps the full COMPILER message list, so
  a compile-time rejection is distinguished from a run-time failure, then RUNs the
  ones that compiled.

To run, from the directory holding the probes:

  _progres.exe -b -p pr_drv.p -T %TEMP%

Output:
  results/pr_compile.out    compile and run verdict for every probe
  results/pr_<name>.out     per-probe observations

  pr_odd_nested.p     9-field odd list, NESTED
  pr_odd_flat.p       9-field odd list, NOT nested       -- is pairing NESTED-dependent?
  pr_even_nested.p    10-field even list                 -- control
  pr_deg1.p           relation-fields(f1)                -- expected: does not compile
  pr_deg3.p           relation-fields(f1,f1,f2)          -- shortest accepted odd list
  pr_trail.p          relation-fields(f1,f1,)            -- expected: does not compile
  pr_types.p          9-field odd list, mixed data types -- run-time failure
  pr_kw_field.p       relation-field(...)                -- abbreviation
  pr_kw_fiel.p        relation-fiel(...)                 -- abbreviation
  pr_kw_fi.p          relation-fi(...)                   -- shortest accepted
  pr_kw_f.p           relation-f(...)                    -- expected: does not compile
  pr_dynamic.p        dynamic ADD-RELATION, four join lists

Three probes have no .out file because they do not compile, which is the result
being recorded: pr_deg1.p, pr_trail.p and pr_kw_f.p.  Their compiler messages are
in results/pr_compile.out.

How the pairing is observed.  The RELATION-FIELDS attribute only echoes the raw
list, so it cannot say how the fields were paired.  Each probe instead FILLs the
dataset from data sources holding two candidate child rows:

    parent   (f1..f5) = (1,2,3,4,5)
    child A  (1,2,3,4,5)   matches pairing each field with its namesake
    child B  (1,9,2,3,4)   matches pairing shifted by one, leftover dropped

Whichever child rows survive the FILL identify the pairing.  FILL is used rather
than WRITE-XML because it exercises the relation query whether or not the relation
is NESTED, so one mechanism covers every case.

PHASE0_RESULTS.md summarises the answers.


reproducer/  --  the original standalone reproducer
---------------------------------------------------

Driver: rf_drv.p, same compile-then-run shape as pr_drv.p.

  rf_odd.p     9-field odd list, NESTED, observed via WRITE-XML
  rf_even.p    10-field even list -- control
  rf_typed.p   9-field odd list across mixed data types; captures the run-time
               failure both via NO-ERROR and via a CATCH block, so the
               Progress.Lang.Error subtype is visible

results/rf_odd_ds.xml and results/rf_even_ds.xml show the difference directly:
the odd list nests child B, the even list nests child A.
