Jelajahi Sumber

Merge branch 'candidate-6.4.0'

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 8 tahun lalu
induk
melakukan
25a1c1061d
34 mengubah file dengan 218 tambahan dan 78 penghapusan
  1. 1 1
      dali/daliadmin/daliadmin.cpp
  2. 93 38
      docs/ECLLanguageReference/ECLR_mods/BltInFunc-BUILD.xml
  3. 5 3
      docs/ECLStandardLibraryReference/SLR-Mods/AdjustCalendar.xml
  4. 3 1
      docs/ECLStandardLibraryReference/SLR-Mods/AdjustDate.xml
  5. 2 2
      docs/ECLStandardLibraryReference/SLR-Mods/BLAS.xml
  6. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/CleanAccents.xml
  7. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/CountWords.xml
  8. 6 0
      docs/ECLStandardLibraryReference/SLR-Mods/DateDataTypes.xml
  9. 5 1
      docs/ECLStandardLibraryReference/SLR-Mods/DateFromParts.xml
  10. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/Day.xml
  11. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/FromGregorianYMD.xml
  12. 12 15
      docs/ECLStandardLibraryReference/SLR-Mods/GetNthWord.xml
  13. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/Hour.xml
  14. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/IsDateLeapYear.xml
  15. 5 2
      docs/ECLStandardLibraryReference/SLR-Mods/IsLeapYear.xml
  16. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/IsValidDate.xml
  17. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/IsValidGregorianDate.xml
  18. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/IsValidTime.xml
  19. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/Minute.xml
  20. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/Month.xml
  21. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/Second.xml
  22. 4 2
      docs/ECLStandardLibraryReference/SLR-Mods/SplitWords.xml
  23. 5 1
      docs/ECLStandardLibraryReference/SLR-Mods/TimeDataTypes.xml
  24. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/TimeFromParts.xml
  25. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/ToGregorianYMD.xml
  26. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/WordCount.xml
  27. 12 4
      docs/ECLStandardLibraryReference/SLR-Mods/WorkunitExists.xml
  28. 2 0
      docs/ECLStandardLibraryReference/SLR-Mods/Year.xml
  29. 1 0
      initfiles/componentfiles/configxml/esp.xsd.in
  30. 1 1
      initfiles/etc/DIR_NAME/genenvrules.conf
  31. 4 6
      roxie/ccd/ccdprotocol.cpp
  32. 4 0
      system/jlib/jstatcodes.h
  33. 21 1
      system/jlib/jstats.cpp
  34. 2 0
      system/jlib/jstats.h

+ 1 - 1
dali/daliadmin/daliadmin.cpp

@@ -2985,7 +2985,7 @@ static void migrateFiles(const char *srcGroup, const char *tgtGroup, const char
                                 if (NotFound == groupOffset)
                                 if (NotFound == groupOffset)
                                     groupOffset = srcRelPos;
                                     groupOffset = srcRelPos;
                                 unsigned dstRelPos = srcRelPos % tgtClusterSize;
                                 unsigned dstRelPos = srcRelPos % tgtClusterSize;
-                                dstPositions.append(dstRelPos);
+                                dstPositions.append(dstRelPos+1);
                             }
                             }
                             StringBuffer rangeText;
                             StringBuffer rangeText;
                             encodeChildGroupRange(dstPositions, rangeText);
                             encodeChildGroupRange(dstPositions, rangeText);

+ 93 - 38
docs/ECLLanguageReference/ECLR_mods/BltInFunc-BUILD.xml

@@ -134,7 +134,7 @@
   <para>The first four forms of the <emphasis role="bold">BUILD
   <para>The first four forms of the <emphasis role="bold">BUILD
   </emphasis>action create index files. Indexes are automatically compressed,
   </emphasis>action create index files. Indexes are automatically compressed,
   minimizing overhead associated with using indexed record access. The keyword
   minimizing overhead associated with using indexed record access. The keyword
-  BUILDINDEX may be used in place of BUILD in these forms. </para>
+  BUILDINDEX may be used in place of BUILD in these forms.</para>
 
 
   <para>The fifth form creates an external query library<indexterm>
   <para>The fifth form creates an external query library<indexterm>
       <primary>query library</primary>
       <primary>query library</primary>
@@ -204,7 +204,13 @@
     ] ] <emphasis role="bold">[, MAXLENGTH<indexterm>
     ] ] <emphasis role="bold">[, MAXLENGTH<indexterm>
         <primary>MAXLENGTH</primary>
         <primary>MAXLENGTH</primary>
       </indexterm>[(</emphasis><emphasis>value</emphasis><emphasis
       </indexterm>[(</emphasis><emphasis>value</emphasis><emphasis
-    role="bold">)] ] ]</emphasis></emphasis></emphasis><emphasis role="bold">[, UNORDERED | ORDERED(</emphasis> <emphasis>bool </emphasis><emphasis role="bold">) ] [, STABLE | UNSTABLE ] [, PARALLEL [ (</emphasis> <emphasis>numthreads </emphasis><emphasis role="bold">) ] ] [, ALGORITHM(</emphasis> <emphasis>name </emphasis><emphasis role="bold">) ]</emphasis></para>
+    role="bold">)] ] ]</emphasis></emphasis></emphasis><emphasis
+    role="bold">[, UNORDERED | ORDERED(</emphasis> <emphasis>bool
+    </emphasis><emphasis role="bold">) ] [, STABLE | UNSTABLE ] [, PARALLEL [
+    (</emphasis> <emphasis>numthreads </emphasis><emphasis role="bold">) ] ]
+    [, ALGORITHM(</emphasis> <emphasis>name </emphasis><emphasis role="bold">)
+    ][, SET (</emphasis> <emphasis>option, value </emphasis><emphasis
+    role="bold">) ]</emphasis></para>
 
 
     <para><informaltable colsep="1" frame="all" rowsep="1">
     <para><informaltable colsep="1" frame="all" rowsep="1">
         <tgroup cols="2">
         <tgroup cols="2">
@@ -480,51 +486,100 @@
               structure. Variable-length records that do not specify MAXLENGTH
               structure. Variable-length records that do not specify MAXLENGTH
               may be slightly inefficient</entry>
               may be slightly inefficient</entry>
             </row>
             </row>
-          <row>
-            <entry><emphasis role="bold">UNORDERED</emphasis></entry>
 
 
-            <entry>Optional. Specifies the output record order is not significant.</entry>
-          </row>
-          <row>
-            <entry><emphasis role="bold">ORDERED</emphasis></entry>
+            <row>
+              <entry><emphasis role="bold">UNORDERED</emphasis></entry>
 
 
-            <entry>Specifies the significance of the output record order.</entry>
-          </row>
-          <row>
-            <entry><emphasis>bool</emphasis></entry>
+              <entry>Optional. Specifies the output record order is not
+              significant.</entry>
+            </row>
 
 
-            <entry>When False, specifies the output record order is not significant. When True, specifies the default output record order.</entry>
-          </row>
-          <row>
-            <entry><emphasis role="bold">STABLE</emphasis></entry>
+            <row>
+              <entry><emphasis role="bold">ORDERED</emphasis></entry>
 
 
-            <entry>Optional. Specifies the input record order is significant.</entry>
-          </row>
-          <row>
-            <entry><emphasis role="bold">UNSTABLE</emphasis></entry>
+              <entry>Specifies the significance of the output record
+              order.</entry>
+            </row>
 
 
-            <entry>Optional. Specifies the input record order is not significant.</entry>
-          </row>
-          <row>
-            <entry><emphasis role="bold">PARALLEL</emphasis></entry>
+            <row>
+              <entry><emphasis>bool</emphasis></entry>
 
 
-            <entry>Optional. Try to evaluate this activity in parallel.</entry>
-          </row>
-          <row>
-            <entry><emphasis>numthreads</emphasis></entry>
+              <entry>When False, specifies the output record order is not
+              significant. When True, specifies the default output record
+              order.</entry>
+            </row>
 
 
-            <entry>Optional. Try to evaluate this activity using <emphasis>numthreads</emphasis> threads.</entry>
-          </row>
-          <row>
-            <entry><emphasis role="bold">ALGORITHM</emphasis></entry>
+            <row>
+              <entry><emphasis role="bold">STABLE</emphasis></entry>
 
 
-            <entry>Optional. Override the algorithm used for this activity.</entry>
-          </row>
-          <row>
-            <entry><emphasis>name</emphasis></entry>
+              <entry>Optional. Specifies the input record order is
+              significant.</entry>
+            </row>
 
 
-            <entry>The algorithm to use for this activity. Must be from the list of supported algorithms for the SORT function's STABLE and UNSTABLE options.</entry>
-          </row>
+            <row>
+              <entry><emphasis role="bold">UNSTABLE</emphasis></entry>
+
+              <entry>Optional. Specifies the input record order is not
+              significant.</entry>
+            </row>
+
+            <row>
+              <entry><emphasis role="bold">PARALLEL</emphasis></entry>
+
+              <entry>Optional. Try to evaluate this activity in
+              parallel.</entry>
+            </row>
+
+            <row>
+              <entry><emphasis>numthreads</emphasis></entry>
+
+              <entry>Optional. Try to evaluate this activity using
+              <emphasis>numthreads</emphasis> threads.</entry>
+            </row>
+
+            <row>
+              <entry><emphasis role="bold">ALGORITHM</emphasis></entry>
+
+              <entry>Optional. Override the algorithm used for this
+              activity.</entry>
+            </row>
+
+            <row>
+              <entry><emphasis>name</emphasis></entry>
+
+              <entry>The algorithm to use for this activity. Must be from the
+              list of supported algorithms for the SORT function's STABLE and
+              UNSTABLE options.</entry>
+            </row>
+
+            <row>
+              <entry><emphasis role="bold">SET</emphasis></entry>
+
+              <entry>Optional. SET is used to set a value to a named metadata
+              option. This allows you to set user metadata whose use and
+              purpose is up to the developer. Currently
+              <emphasis>_nodeSize</emphasis> is the only system-defined
+              metadata, though other names starting with an underscore (_)
+              should be considered reserved for system use. You may want to
+              use SET(‘_nodeSize’, ‘32768’) if your hardware and usage pattern
+              work better with larger page sizes. The default (8192) may not
+              be optimal for all scenarios on modern hardware. We recommend
+              using a power of 2 and not smaller than 8k.</entry>
+            </row>
+
+            <row>
+              <entry><emphasis>option</emphasis></entry>
+
+              <entry>A case sensitive string constant containing the name of
+              the option to set.</entry>
+            </row>
+
+            <row>
+              <entry><emphasis>value</emphasis></entry>
+
+              <entry>The value to set the option to. This may be any type of
+              value, dependent on what the option expects to be.</entry>
+            </row>
           </tbody>
           </tbody>
         </tgroup>
         </tgroup>
       </informaltable></para>
       </informaltable></para>

+ 5 - 3
docs/ECLStandardLibraryReference/SLR-Mods/AdjustCalendar.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.AdjustCalendar</primary>
       <primary>STD.Date.AdjustCalendar</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.AdjustCalendar</primary>
       <primary>Date.AdjustCalendar</primary>
+    </indexterm><indexterm>
+      <primary>AdjustCalendar</primary>
     </indexterm>(</emphasis> <emphasis>date</emphasis> ,
     </indexterm>(</emphasis> <emphasis>date</emphasis> ,
   [<emphasis>year_delta</emphasis>],[<emphasis>month_delta</emphasis>]
   [<emphasis>year_delta</emphasis>],[<emphasis>month_delta</emphasis>]
   ,[<emphasis>day_delta</emphasis>] <emphasis role="bold">)</emphasis></para>
   ,[<emphasis>day_delta</emphasis>] <emphasis role="bold">)</emphasis></para>
@@ -58,7 +60,7 @@
 
 
   <para>The AdjustCalendar function adjusts a date by incrementing or
   <para>The AdjustCalendar function adjusts a date by incrementing or
   decrementing months and/or years. The date must be in the Gregorian calendar
   decrementing months and/or years. The date must be in the Gregorian calendar
-  after the year 1600. </para>
+  after the year 1600.</para>
 
 
   <para>This uses the rule outlined in McGinn v. State, 46 Neb. 427, 65 N.W.
   <para>This uses the rule outlined in McGinn v. State, 46 Neb. 427, 65 N.W.
   46 (1895):</para>
   46 (1895):</para>
@@ -68,11 +70,11 @@
     and not appearing to have been used in a different sense, denotes a period
     and not appearing to have been used in a different sense, denotes a period
     terminating with the day of the succeeding month numerically corresponding
     terminating with the day of the succeeding month numerically corresponding
     to the day of its beginning, less one. If there be no corresponding day of
     to the day of its beginning, less one. If there be no corresponding day of
-    the succeeding month, it terminates with the last day thereof." </para>
+    the succeeding month, it terminates with the last day thereof."</para>
   </blockquote>
   </blockquote>
 
 
   <para>Note that day adjustments are performed after year and month
   <para>Note that day adjustments are performed after year and month
-  adjustments using the preceding rules. </para>
+  adjustments using the preceding rules.</para>
 
 
   <para>As an example, Jan. 31, 2014 + 1 month results in Feb. 28, 2014; Jan.
   <para>As an example, Jan. 31, 2014 + 1 month results in Feb. 28, 2014; Jan.
   31, 2014 + 1 month + 1 day results in Mar. 1, 2014.</para>
   31, 2014 + 1 month + 1 day results in Mar. 1, 2014.</para>

+ 3 - 1
docs/ECLStandardLibraryReference/SLR-Mods/AdjustDate.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.AdjustDate</primary>
       <primary>STD.Date.AdjustDate</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.AdjustDate</primary>
       <primary>Date.AdjustDate</primary>
+    </indexterm><indexterm>
+      <primary>AdjustDate</primary>
     </indexterm>(</emphasis> <emphasis>date</emphasis> ,
     </indexterm>(</emphasis> <emphasis>date</emphasis> ,
   [<emphasis>year_delta</emphasis>],[<emphasis>month_delta</emphasis>]
   [<emphasis>year_delta</emphasis>],[<emphasis>month_delta</emphasis>]
   ,[<emphasis>day_delta</emphasis>] <emphasis role="bold">)</emphasis></para>
   ,[<emphasis>day_delta</emphasis>] <emphasis role="bold">)</emphasis></para>
@@ -58,7 +60,7 @@
 
 
   <para>The <emphasis role="bold">AdjustDate</emphasis> function adjusts a
   <para>The <emphasis role="bold">AdjustDate</emphasis> function adjusts a
   date by incrementing or decrementing year, month, and/or day values. The
   date by incrementing or decrementing year, month, and/or day values. The
-  date must be in the Gregorian calendar after the year 1600. </para>
+  date must be in the Gregorian calendar after the year 1600.</para>
 
 
   <para>If the new calculated date is invalid then it is normalized according
   <para>If the new calculated date is invalid then it is normalized according
   to mktime() rules. For example, 20140130 plus 1 month would be
   to mktime() rules. For example, 20140130 plus 1 month would be

+ 2 - 2
docs/ECLStandardLibraryReference/SLR-Mods/BLAS.xml

@@ -283,9 +283,9 @@ STD.BLAS.dasum(9, test_data, 1); //sums the absolute values of the matrix, and r
     <para><emphasis role="bold">STD.BLAS.daxpy<indexterm>
     <para><emphasis role="bold">STD.BLAS.daxpy<indexterm>
         <primary>STD.BLAS.daxpy</primary>
         <primary>STD.BLAS.daxpy</primary>
       </indexterm><indexterm>
       </indexterm><indexterm>
-        <primary>BLAS.dasum</primary>
+        <primary>BLAS.daxpy</primary>
       </indexterm><indexterm>
       </indexterm><indexterm>
-        <primary>dasum</primary>
+        <primary>daxpy</primary>
       </indexterm>(</emphasis> <emphasis>N, alpha, X, incX, Y, incY,
       </indexterm>(</emphasis> <emphasis>N, alpha, X, incX, Y, incY,
     x_skipped,y_skipped);</emphasis> <emphasis></emphasis></para>
     x_skipped,y_skipped);</emphasis> <emphasis></emphasis></para>
 
 

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/CleanAccents.xml

@@ -8,6 +8,8 @@
       <primary>STD.Uni.CleanAccents</primary>
       <primary>STD.Uni.CleanAccents</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Uni.CleanAccents</primary>
       <primary>Uni.CleanAccents</primary>
+    </indexterm><indexterm>
+      <primary>CleanAccents</primary>
     </indexterm>(</emphasis> <emphasis>source</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>source</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/CountWords.xml

@@ -8,6 +8,8 @@
       <primary>STD.Str.CountWords</primary>
       <primary>STD.Str.CountWords</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Str.CountWords</primary>
       <primary>Str.CountWords</primary>
+    </indexterm><indexterm>
+      <primary>CountWords</primary>
     </indexterm>(</emphasis> <emphasis>source, separator </emphasis><emphasis
     </indexterm>(</emphasis> <emphasis>source, separator </emphasis><emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 

+ 6 - 0
docs/ECLStandardLibraryReference/SLR-Mods/DateDataTypes.xml

@@ -8,18 +8,24 @@
       <primary>STD.Date.Date_rec</primary>
       <primary>STD.Date.Date_rec</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.Date_rec</primary>
       <primary>Date.Date_rec</primary>
+    </indexterm><indexterm>
+      <primary>Date_rec</primary>
     </indexterm></emphasis></para>
     </indexterm></emphasis></para>
 
 
   <para><emphasis role="bold">STD.Date.Date_t<indexterm>
   <para><emphasis role="bold">STD.Date.Date_t<indexterm>
       <primary>STD.Date.Date_t</primary>
       <primary>STD.Date.Date_t</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.Date_t</primary>
       <primary>Date.Date_t</primary>
+    </indexterm><indexterm>
+      <primary>Date_t</primary>
     </indexterm></emphasis></para>
     </indexterm></emphasis></para>
 
 
   <para><emphasis role="bold">STD.Date.Days_t<indexterm>
   <para><emphasis role="bold">STD.Date.Days_t<indexterm>
       <primary>STD.Date.Days_t</primary>
       <primary>STD.Date.Days_t</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.Days_t</primary>
       <primary>Date.Days_t</primary>
+    </indexterm><indexterm>
+      <primary>Days_t</primary>
     </indexterm></emphasis></para>
     </indexterm></emphasis></para>
 
 
   <informaltable colsep="1" frame="all" rowsep="1">
   <informaltable colsep="1" frame="all" rowsep="1">

+ 5 - 1
docs/ECLStandardLibraryReference/SLR-Mods/DateFromParts.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.DateFromParts</primary>
       <primary>STD.Date.DateFromParts</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.DateFromParts</primary>
       <primary>Date.DateFromParts</primary>
+    </indexterm><indexterm>
+      <primary>DateFromParts</primary>
     </indexterm>(</emphasis> <emphasis>year, month, day</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>year, month, day</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 
@@ -45,7 +47,9 @@
     </tgroup>
     </tgroup>
   </informaltable>
   </informaltable>
 
 
-  <para>The <emphasis role="bold">DateFromParts</emphasis> function returns a Date_t value from the <emphasis>year</emphasis>, <emphasis>month</emphasis>, and <emphasis>day</emphasis> parameters.</para>
+  <para>The <emphasis role="bold">DateFromParts</emphasis> function returns a
+  Date_t value from the <emphasis>year</emphasis>, <emphasis>month</emphasis>,
+  and <emphasis>day</emphasis> parameters.</para>
 
 
   <para>Example:</para>
   <para>Example:</para>
 
 

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/Day.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.Day</primary>
       <primary>STD.Date.Day</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.Day</primary>
       <primary>Date.Day</primary>
+    </indexterm><indexterm>
+      <primary>Day</primary>
     </indexterm>(</emphasis> <emphasis>date</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>date</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/FromGregorianYMD.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.FromGregorianYMD</primary>
       <primary>STD.Date.FromGregorianYMD</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.FromGregorianYMD</primary>
       <primary>Date.FromGregorianYMD</primary>
+    </indexterm><indexterm>
+      <primary>FromGregorianYMD</primary>
     </indexterm>(</emphasis> <emphasis>year, month, day</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>year, month, day</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 

+ 12 - 15
docs/ECLStandardLibraryReference/SLR-Mods/GetNthWord.xml

@@ -8,22 +8,18 @@
       <primary>STD.Str.GetNthWord</primary>
       <primary>STD.Str.GetNthWord</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Str.GetNthWord</primary>
       <primary>Str.GetNthWord</primary>
+    </indexterm><indexterm>
+      <primary>GetNthWord</primary>
     </indexterm>(</emphasis> <emphasis>source, instance </emphasis><emphasis
     </indexterm>(</emphasis> <emphasis>source, instance </emphasis><emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 
-  <para>
-  <emphasis role="bold">STD.Uni.GetNthWord
-    <indexterm>
+  <para><emphasis role="bold">STD.Uni.GetNthWord <indexterm>
       <primary>STD.Uni.GetNthWord</primary>
       <primary>STD.Uni.GetNthWord</primary>
-    </indexterm>
-    <indexterm>
+    </indexterm> <indexterm>
       <primary>Uni.GetNthWord</primary>
       <primary>Uni.GetNthWord</primary>
-    </indexterm>
-    (</emphasis> 
-    <emphasis>source, instance </emphasis>
-    <emphasis role="bold">[</emphasis>
-    <emphasis>, locale</emphasis><emphasis role="bold"> ] )</emphasis>
-  </para>
+    </indexterm> (</emphasis> <emphasis>source, instance </emphasis> <emphasis
+  role="bold">[</emphasis> <emphasis>, locale</emphasis><emphasis role="bold">
+  ] )</emphasis></para>
 
 
   <informaltable colsep="1" frame="all" rowsep="1">
   <informaltable colsep="1" frame="all" rowsep="1">
     <tgroup cols="2">
     <tgroup cols="2">
@@ -47,8 +43,9 @@
         <row>
         <row>
           <entry><emphasis>locale</emphasis></entry>
           <entry><emphasis>locale</emphasis></entry>
 
 
-          <entry>A null-terminated string containing the language and country code to use to
-determine correct sort order and other operations.</entry>
+          <entry>A null-terminated string containing the language and country
+          code to use to determine correct sort order and other
+          operations.</entry>
         </row>
         </row>
 
 
         <row>
         <row>
@@ -61,7 +58,8 @@ determine correct sort order and other operations.</entry>
   </informaltable>
   </informaltable>
 
 
   <para>The <emphasis role="bold">GetNthWord </emphasis>function returns the
   <para>The <emphasis role="bold">GetNthWord </emphasis>function returns the
-  word in the <emphasis>instance</emphasis> position in the <emphasis>source</emphasis>string.</para>
+  word in the <emphasis>instance</emphasis> position in the
+  <emphasis>source</emphasis>string.</para>
 
 
   <para>Example:</para>
   <para>Example:</para>
 
 
@@ -71,5 +69,4 @@ str1 := 'a word a day keeps the doctor away';
 
 
 STD.STr.GetNthWord(str1,2);    //returns "word"
 STD.STr.GetNthWord(str1,2);    //returns "word"
 </programlisting>
 </programlisting>
-
 </sect1>
 </sect1>

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/Hour.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.Hour</primary>
       <primary>STD.Date.Hour</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.Hour</primary>
       <primary>Date.Hour</primary>
+    </indexterm><indexterm>
+      <primary>Hour</primary>
     </indexterm>(</emphasis> <emphasis>time</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>time</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/IsDateLeapYear.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.IsDateLeapYear</primary>
       <primary>STD.Date.IsDateLeapYear</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.IsDateLeapYear</primary>
       <primary>Date.IsDateLeapYear</primary>
+    </indexterm><indexterm>
+      <primary>IsDateLeapYear</primary>
     </indexterm>(</emphasis> <emphasis>date</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>date</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 

+ 5 - 2
docs/ECLStandardLibraryReference/SLR-Mods/IsLeapYear.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.IsLeapYear</primary>
       <primary>STD.Date.IsLeapYear</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.IsLeapYear</primary>
       <primary>Date.IsLeapYear</primary>
+    </indexterm><indexterm>
+      <primary>IsLeapYear</primary>
     </indexterm>(</emphasis> <emphasis>year</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>year</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 
@@ -33,8 +35,9 @@
     </tgroup>
     </tgroup>
   </informaltable>
   </informaltable>
 
 
-  <para>The <emphasis role="bold">IsLeapYear</emphasis> function returns TRUE if the <emphasis>year</emphasis> is 
-  a leap year in the Gregorian (or proleptic Gregorian) calendar.</para>
+  <para>The <emphasis role="bold">IsLeapYear</emphasis> function returns TRUE
+  if the <emphasis>year</emphasis> is a leap year in the Gregorian (or
+  proleptic Gregorian) calendar.</para>
 
 
   <para>Example:</para>
   <para>Example:</para>
 
 

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/IsValidDate.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.IsValidDate</primary>
       <primary>STD.Date.IsValidDate</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.IsValidDate</primary>
       <primary>Date.IsValidDate</primary>
+    </indexterm><indexterm>
+      <primary>IsValidDate</primary>
     </indexterm>(</emphasis> <emphasis>date</emphasis> ,
     </indexterm>(</emphasis> <emphasis>date</emphasis> ,
   [<emphasis>yearLowerBound</emphasis>],[<emphasis>yearUpperBound</emphasis>]
   [<emphasis>yearLowerBound</emphasis>],[<emphasis>yearUpperBound</emphasis>]
   <emphasis role="bold">)</emphasis></para>
   <emphasis role="bold">)</emphasis></para>

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/IsValidGregorianDate.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.IsValidGregorianDate</primary>
       <primary>STD.Date.IsValidGregorianDate</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.IsValidGregorianDate</primary>
       <primary>Date.IsValidGregorianDate</primary>
+    </indexterm><indexterm>
+      <primary>IsValidGregorianDate</primary>
     </indexterm>(</emphasis> <emphasis>date</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>date</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/IsValidTime.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.IsValidTime</primary>
       <primary>STD.Date.IsValidTime</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.IsValidTime</primary>
       <primary>Date.IsValidTime</primary>
+    </indexterm><indexterm>
+      <primary>IsValidTime</primary>
     </indexterm>(</emphasis> <emphasis>time</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>time</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/Minute.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.Minute</primary>
       <primary>STD.Date.Minute</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.Minute</primary>
       <primary>Date.Minute</primary>
+    </indexterm><indexterm>
+      <primary>Minute</primary>
     </indexterm>(</emphasis> <emphasis>time</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>time</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/Month.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.Month</primary>
       <primary>STD.Date.Month</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.Month</primary>
       <primary>Date.Month</primary>
+    </indexterm><indexterm>
+      <primary>Month</primary>
     </indexterm>(</emphasis> <emphasis>date</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>date</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/Second.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.Second</primary>
       <primary>STD.Date.Second</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.Second</primary>
       <primary>Date.Second</primary>
+    </indexterm><indexterm>
+      <primary>Second</primary>
     </indexterm>(</emphasis> <emphasis>time</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>time</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 

+ 4 - 2
docs/ECLStandardLibraryReference/SLR-Mods/SplitWords.xml

@@ -8,6 +8,8 @@
       <primary>STD.Str.SplitWords</primary>
       <primary>STD.Str.SplitWords</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Str.SplitWords</primary>
       <primary>Str.SplitWords</primary>
+    </indexterm><indexterm>
+      <primary>SplitWords</primary>
     </indexterm>(</emphasis> <emphasis>source, separator </emphasis><emphasis
     </indexterm>(</emphasis> <emphasis>source, separator </emphasis><emphasis
   role="bold">[ </emphasis><emphasis>, allowblank</emphasis><emphasis
   role="bold">[ </emphasis><emphasis>, allowblank</emphasis><emphasis
   role="bold"> ] )</emphasis></para>
   role="bold"> ] )</emphasis></para>
@@ -34,8 +36,8 @@
         <row>
         <row>
           <entry><emphasis>allowblank</emphasis></entry>
           <entry><emphasis>allowblank</emphasis></entry>
 
 
-          <entry>Optional. If TRUE, specifies allowing blank items in the result. 
-          If omitted, the default is FALSE.</entry>
+          <entry>Optional. If TRUE, specifies allowing blank items in the
+          result. If omitted, the default is FALSE.</entry>
         </row>
         </row>
 
 
         <row>
         <row>

+ 5 - 1
docs/ECLStandardLibraryReference/SLR-Mods/TimeDataTypes.xml

@@ -8,12 +8,16 @@
       <primary>STD.Date.Time_rec</primary>
       <primary>STD.Date.Time_rec</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.Time_rec</primary>
       <primary>Date.Time_rec</primary>
+    </indexterm><indexterm>
+      <primary>Time_rec</primary>
     </indexterm></emphasis></para>
     </indexterm></emphasis></para>
 
 
   <para><emphasis role="bold">STD.Date.Time_t<indexterm>
   <para><emphasis role="bold">STD.Date.Time_t<indexterm>
       <primary>STD.Date.Time_t</primary>
       <primary>STD.Date.Time_t</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.Time_t</primary>
       <primary>Date.Time_t</primary>
+    </indexterm><indexterm>
+      <primary>Time_t</primary>
     </indexterm></emphasis></para>
     </indexterm></emphasis></para>
 
 
   <para><emphasis role="bold">STD.DateTime_rec <indexterm>
   <para><emphasis role="bold">STD.DateTime_rec <indexterm>
@@ -54,7 +58,7 @@
 
 
           <entry>An INTEGER8 holding holding a number of seconds. Can be used
           <entry>An INTEGER8 holding holding a number of seconds. Can be used
           to represent either a duration or the number of seconds since epoch
           to represent either a duration or the number of seconds since epoch
-          (Jan 1, 1970). </entry>
+          (Jan 1, 1970).</entry>
         </row>
         </row>
 
 
         <row>
         <row>

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/TimeFromParts.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.TimeFromParts</primary>
       <primary>STD.Date.TimeFromParts</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.TimeFromParts</primary>
       <primary>Date.TimeFromParts</primary>
+    </indexterm><indexterm>
+      <primary>TimeFromParts</primary>
     </indexterm>(</emphasis> <emphasis>hour, minute, second</emphasis>
     </indexterm>(</emphasis> <emphasis>hour, minute, second</emphasis>
   <emphasis role="bold">)</emphasis></para>
   <emphasis role="bold">)</emphasis></para>
 
 

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/ToGregorianYMD.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.ToGregorianYMD</primary>
       <primary>STD.Date.ToGregorianYMD</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.ToGregorianYMD</primary>
       <primary>Date.ToGregorianYMD</primary>
+    </indexterm><indexterm>
+      <primary>ToGregorianYMD</primary>
     </indexterm>(</emphasis> <emphasis>days</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>days</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/WordCount.xml

@@ -8,6 +8,8 @@
       <primary>STD.Str.WordCount</primary>
       <primary>STD.Str.WordCount</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Str.WordCount</primary>
       <primary>Str.WordCount</primary>
+    </indexterm><indexterm>
+      <primary>WordCount</primary>
     </indexterm>(</emphasis> <emphasis>source</emphasis><emphasis role="bold">
     </indexterm>(</emphasis> <emphasis>source</emphasis><emphasis role="bold">
   )</emphasis></para>
   )</emphasis></para>
 
 

+ 12 - 4
docs/ECLStandardLibraryReference/SLR-Mods/WorkunitExists.xml

@@ -4,10 +4,18 @@
 <sect1 id="WorkunitExists">
 <sect1 id="WorkunitExists">
   <title>WorkunitExists</title>
   <title>WorkunitExists</title>
 
 
-  <para><emphasis role="bold">STD.System.Workunit.WorkunitExists(</emphasis>
-  <emphasis> wuid </emphasis> <emphasis role="bold">[</emphasis> <emphasis>,
-  online </emphasis> <emphasis role="bold">] [</emphasis> <emphasis>, archived
-  </emphasis> <emphasis role="bold">] )</emphasis></para>
+  <para><emphasis role="bold">STD.System.Workunit.WorkunitExists(<indexterm>
+      <primary>STD.System.Workunit.WorkunitExists</primary>
+    </indexterm><indexterm>
+      <primary>System.Workunit.WorkunitExists</primary>
+    </indexterm><indexterm>
+      <primary>Workunit.WorkunitExists</primary>
+    </indexterm><indexterm>
+      <primary>WorkunitExists</primary>
+    </indexterm></emphasis> <emphasis> wuid </emphasis> <emphasis
+  role="bold">[</emphasis> <emphasis>, online </emphasis> <emphasis
+  role="bold">] [</emphasis> <emphasis>, archived </emphasis> <emphasis
+  role="bold">] )</emphasis></para>
 
 
   <informaltable colsep="1" frame="all" rowsep="1">
   <informaltable colsep="1" frame="all" rowsep="1">
     <tgroup cols="2">
     <tgroup cols="2">

+ 2 - 0
docs/ECLStandardLibraryReference/SLR-Mods/Year.xml

@@ -8,6 +8,8 @@
       <primary>STD.Date.Year</primary>
       <primary>STD.Date.Year</primary>
     </indexterm><indexterm>
     </indexterm><indexterm>
       <primary>Date.Year</primary>
       <primary>Date.Year</primary>
+    </indexterm><indexterm>
+      <primary>Year</primary>
     </indexterm>(</emphasis> <emphasis>date</emphasis> <emphasis
     </indexterm>(</emphasis> <emphasis>date</emphasis> <emphasis
   role="bold">)</emphasis></para>
   role="bold">)</emphasis></para>
 
 

+ 1 - 0
initfiles/componentfiles/configxml/esp.xsd.in

@@ -452,6 +452,7 @@
                             <xs:annotation>
                             <xs:annotation>
                                 <xs:appinfo>
                                 <xs:appinfo>
                                     <viewType>password</viewType>
                                     <viewType>password</viewType>
+                                    <tooltip>The passphrase used to generate the private key.</tooltip>
                                 </xs:appinfo>
                                 </xs:appinfo>
                             </xs:annotation>
                             </xs:annotation>
                         </xs:attribute>
                         </xs:attribute>

+ 1 - 1
initfiles/etc/DIR_NAME/genenvrules.conf

@@ -1,7 +1,7 @@
 
 
 [Algorithm]
 [Algorithm]
 max_comps_per_node=4
 max_comps_per_node=4
-do_not_generate=SiteCertificate,dfuplus,soapplus,eclplus,ldapServer,ws_account,eclserver,ecldirect,DynamicESDL,cassandraloggingagent,esploggingagent,loggingmanager,wslogging,daliplugin
+do_not_generate=SiteCertificate,dfuplus,soapplus,eclplus,ldapServer,ws_account,eclserver,ecldirect,DynamicESDL,cassandraloggingagent,esploggingagent,loggingmanager,wslogging,daliplugin,backupnode
 avoid_combo=dali-eclagent,dali-sasha
 avoid_combo=dali-eclagent,dali-sasha
 comps_on_all_nodes=dafilesrv,ftslave
 comps_on_all_nodes=dafilesrv,ftslave
 exclude_from_comps_on_all_nodes=ldapServer
 exclude_from_comps_on_all_nodes=ldapServer

+ 4 - 6
roxie/ccd/ccdprotocol.cpp

@@ -1138,10 +1138,8 @@ public:
         Owned<IXmlWriter> xmlwriter = createIXmlWriterExt(XWFnoindent, 1, content, WTJSON);
         Owned<IXmlWriter> xmlwriter = createIXmlWriterExt(XWFnoindent, 1, content, WTJSON);
         return xmlwriter.getClear();
         return xmlwriter.getClear();
     }
     }
-    virtual void outputContent()
+    void outputContent()
     {
     {
-        CriticalBlock b1(client->queryCrit());
-
         bool needDelimiter = false;
         bool needDelimiter = false;
         ForEachItemIn(seq, contentsMap)
         ForEachItemIn(seq, contentsMap)
         {
         {
@@ -1177,6 +1175,7 @@ public:
         }
         }
 
 
         CriticalBlock b(contentsCrit);
         CriticalBlock b(contentsCrit);
+        CriticalBlock b1(client->queryCrit());
 
 
         StringBuffer responseHead, responseTail;
         StringBuffer responseHead, responseTail;
         if (!resultFilter.ordinality() && !(protocolFlags & HPCC_PROTOCOL_CONTROL))
         if (!resultFilter.ordinality() && !(protocolFlags & HPCC_PROTOCOL_CONTROL))
@@ -1255,10 +1254,8 @@ public:
         Owned<IXmlWriter> xmlwriter = createIXmlWriterExt(0, 1, content, WTStandard);
         Owned<IXmlWriter> xmlwriter = createIXmlWriterExt(0, 1, content, WTStandard);
         return xmlwriter.getClear();
         return xmlwriter.getClear();
     }
     }
-    virtual void outputContent()
+    void outputContent()
     {
     {
-        CriticalBlock b1(client->queryCrit());
-
         bool needDelimiter = false;
         bool needDelimiter = false;
         ForEachItemIn(seq, contentsMap)
         ForEachItemIn(seq, contentsMap)
         {
         {
@@ -1287,6 +1284,7 @@ public:
             return;
             return;
         }
         }
         CriticalBlock b(contentsCrit);
         CriticalBlock b(contentsCrit);
+        CriticalBlock b1(client->queryCrit());
 
 
         StringBuffer responseHead, responseTail;
         StringBuffer responseHead, responseTail;
         if (!resultFilter.ordinality() && !(protocolFlags & HPCC_PROTOCOL_CONTROL))
         if (!resultFilter.ordinality() && !(protocolFlags & HPCC_PROTOCOL_CONTROL))

+ 4 - 0
system/jlib/jstatcodes.h

@@ -24,6 +24,8 @@
 #define SubGraphScopePrefix "sg"
 #define SubGraphScopePrefix "sg"
 #define GraphScopePrefix "graph"
 #define GraphScopePrefix "graph"
 #define FunctionScopePrefix "f"
 #define FunctionScopePrefix "f"
+#define WorkflowScopePrefix "w"
+#define ChildGraphScopePrefix "c"
 
 
 #define CONST_STRLEN(x) (sizeof(x)-1)       // sizeof(const-string) = strlen(const-string) + 1 byte for the \0 terminator
 #define CONST_STRLEN(x) (sizeof(x)-1)       // sizeof(const-string) = strlen(const-string) + 1 byte for the \0 terminator
 #define MATCHES_CONST_PREFIX(search, prefix) (strncmp(search, prefix, CONST_STRLEN(prefix)) == 0)
 #define MATCHES_CONST_PREFIX(search, prefix) (strncmp(search, prefix, CONST_STRLEN(prefix)) == 0)
@@ -66,6 +68,8 @@ enum StatisticScopeType
     SSTdfuworkunit,                     // a reference to an executing dfu workunit
     SSTdfuworkunit,                     // a reference to an executing dfu workunit
     SSTedge,
     SSTedge,
     SSTfunction,                        // a function call
     SSTfunction,                        // a function call
+    SSTworkflow,
+    SSTchildgraph,
     SSTmax
     SSTmax
 };
 };
 
 

+ 21 - 1
system/jlib/jstats.cpp

@@ -67,7 +67,7 @@ void setStatisticsComponentName(StatisticCreatorType processType, const char * p
 // Textual forms of the different enumerations, first items are for none and all.
 // Textual forms of the different enumerations, first items are for none and all.
 static const char * const measureNames[] = { "", "all", "ns", "ts", "cnt", "sz", "cpu", "skw", "node", "ppm", "ip", "cy", NULL };
 static const char * const measureNames[] = { "", "all", "ns", "ts", "cnt", "sz", "cpu", "skw", "node", "ppm", "ip", "cy", NULL };
 static const char * const creatorTypeNames[]= { "", "all", "unknown", "hthor", "roxie", "roxie:s", "thor", "thor:m", "thor:s", "eclcc", "esp", "summary", NULL };
 static const char * const creatorTypeNames[]= { "", "all", "unknown", "hthor", "roxie", "roxie:s", "thor", "thor:m", "thor:s", "eclcc", "esp", "summary", NULL };
-static const char * const scopeTypeNames[] = { "", "all", "global", "graph", "subgraph", "activity", "allocator", "section", "compile", "dfu", "edge", "function", NULL };
+static const char * const scopeTypeNames[] = { "", "all", "global", "graph", "subgraph", "activity", "allocator", "section", "compile", "dfu", "edge", "function", "workflow", "child", nullptr };
 
 
 static unsigned matchString(const char * const * names, const char * search)
 static unsigned matchString(const char * const * names, const char * search)
 {
 {
@@ -1014,6 +1014,10 @@ StringBuffer & StatsScopeId::getScopeText(StringBuffer & out) const
         return out.append(EdgeScopePrefix).append(id).append("_").append(extra);
         return out.append(EdgeScopePrefix).append(id).append("_").append(extra);
     case SSTfunction:
     case SSTfunction:
         return out.append(FunctionScopePrefix).append(name);
         return out.append(FunctionScopePrefix).append(name);
+    case SSTworkflow:
+        return out.append(WorkflowScopePrefix).append(id);
+    case SSTchildgraph:
+        return out.append(ChildGraphScopePrefix).append(id);
     default:
     default:
 #ifdef _DEBUG
 #ifdef _DEBUG
         throwUnexpected();
         throwUnexpected();
@@ -1060,6 +1064,8 @@ void StatsScopeId::deserialize(MemoryBuffer & in, unsigned version)
     case SSTgraph:
     case SSTgraph:
     case SSTsubgraph:
     case SSTsubgraph:
     case SSTactivity:
     case SSTactivity:
+    case SSTworkflow:
+    case SSTchildgraph:
         in.read(id);
         in.read(id);
         break;
         break;
     case SSTedge:
     case SSTedge:
@@ -1083,6 +1089,8 @@ void StatsScopeId::serialize(MemoryBuffer & out) const
     case SSTgraph:
     case SSTgraph:
     case SSTsubgraph:
     case SSTsubgraph:
     case SSTactivity:
     case SSTactivity:
+    case SSTworkflow:
+    case SSTchildgraph:
         out.append(id);
         out.append(id);
         break;
         break;
     case SSTedge:
     case SSTedge:
@@ -1122,6 +1130,10 @@ bool StatsScopeId::setScopeText(const char * text)
     }
     }
     else if (MATCHES_CONST_PREFIX(text, FunctionScopePrefix))
     else if (MATCHES_CONST_PREFIX(text, FunctionScopePrefix))
         setFunctionId(text+CONST_STRLEN(FunctionScopePrefix));
         setFunctionId(text+CONST_STRLEN(FunctionScopePrefix));
+    else if (MATCHES_CONST_PREFIX(text, WorkflowScopePrefix))
+        setWorkflowId(atoi(text+CONST_STRLEN(WorkflowScopePrefix)));
+    else if (MATCHES_CONST_PREFIX(text, ChildGraphScopePrefix))
+        setChildGraphId(atoi(text+CONST_STRLEN(ChildGraphScopePrefix)));
     else
     else
         return false;
         return false;
 
 
@@ -1145,6 +1157,14 @@ void StatsScopeId::setFunctionId(const char * _name)
     scopeType = SSTfunction;
     scopeType = SSTfunction;
     name.set(_name);
     name.set(_name);
 }
 }
+void StatsScopeId::setWorkflowId(unsigned _id)
+{
+    setId(SSTworkflow, _id);
+}
+void StatsScopeId::setChildGraphId(unsigned _id)
+{
+    setId(SSTchildgraph, _id);
+}
 
 
 //--------------------------------------------------------------------------------------------------------------------
 //--------------------------------------------------------------------------------------------------------------------
 
 

+ 2 - 0
system/jlib/jstats.h

@@ -60,6 +60,8 @@ public:
     void setEdgeId(unsigned _id, unsigned _output);
     void setEdgeId(unsigned _id, unsigned _output);
     void setFunctionId(const char * _name);
     void setFunctionId(const char * _name);
     void setSubgraphId(unsigned _id);
     void setSubgraphId(unsigned _id);
+    void setWorkflowId(unsigned _id);
+    void setChildGraphId(unsigned _id);
 
 
     bool operator == (const StatsScopeId & other) const { return matches(other); }
     bool operator == (const StatsScopeId & other) const { return matches(other); }