Browse Source

HPCC-10489 Fix problem when dataset param is projected to base record

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 11 years ago
parent
commit
7d744755a9
2 changed files with 40 additions and 2 deletions
  1. 3 2
      ecl/hql/hqlexpr.cpp
  2. 37 0
      ecl/regress/issue10489.ecl

+ 3 - 2
ecl/hql/hqlexpr.cpp

@@ -11249,8 +11249,9 @@ static void normalizeCallParameters(HqlExprArray & resolvedActuals, IHqlExpressi
                 else
                 {
                     OwnedHqlExpr actualRecord = getUnadornedRecordOrField(actual->queryRecord());
-                    OwnedHqlExpr formalRecord = getUnadornedRecordOrField(::queryOriginalRecord(type));
-                    if (actualRecord && formalRecord && formalRecord->numChildren() && (formalRecord->queryBody() != actualRecord->queryBody()))
+                    IHqlExpression * formalRecord = ::queryOriginalRecord(type);
+                    OwnedHqlExpr normalFormalRecord = getUnadornedRecordOrField(formalRecord);
+                    if (actualRecord && normalFormalRecord && normalFormalRecord->numChildren() && (normalFormalRecord->queryBody() != actualRecord->queryBody()))
                     {
                         //If the actual dataset is derived from the input dataset, then insert a project so types remain correct
                         //otherwise x+y will change meaning.

+ 37 - 0
ecl/regress/issue10489.ecl

@@ -0,0 +1,37 @@
+/*##############################################################################
+
+    HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+############################################################################## */
+
+LayoutScoredFetch := RECORD
+  UNSIGNED8 F1;
+END;
+
+ OutputLayout_Base := RECORD
+  BOOLEAN Resolved := FALSE;
+  DATASET(LayoutScoredFetch) Results;
+END;
+
+OutputLayout_Batch := RECORD(OutputLayout_Base)
+  UNSIGNED8 Reference;
+END;
+
+ds := DATASET('x',OutputLayout_Batch,thor);
+
+ScoreSummary(DATASET(OutputLayout_Base) ds0) :=
+        PROJECT(ds0(EXISTS(Results)),TRANSFORM(LayoutScoredFetch,SELF := LEFT.Results[1]));
+
+Stats := ScoreSummary(ds);
+Stats;