Browse Source

HPCC-10311 Skip casts when deducing the names of implicit fields in records

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 11 years ago
parent
commit
ab5a69d182

+ 4 - 2
ecl/hql/hqlgram2.cpp

@@ -7974,9 +7974,9 @@ void HqlGram::expandPayload(HqlExprArray & fields, IHqlExpression * payload, IHq
                     IHqlExpression * matchValue = match->queryChild(0);
                     IHqlExpression * curValue = cur->queryChild(0);
                     if (matchValue)
-                        matchValue = matchValue->queryNormalizedSelector();
+                        matchValue = queryStripCasts(matchValue->queryNormalizedSelector());
                     if (curValue)
-                        curValue = curValue->queryNormalizedSelector();
+                        curValue = queryStripCasts(curValue->queryNormalizedSelector());
                     if (matchValue != curValue)
                         reportError(ERR_REC_DUPFIELD, errpos, "Field %s is already defined in the key portion", cur->queryName()->str());
                 }
@@ -9963,6 +9963,8 @@ IIdAtom * HqlGram::createFieldNameFromExpr(IHqlExpression * expr)
         case no_select:
             return createFieldNameFromExpr(expr->queryChild(1));
         case no_indirect:
+        case no_cast:
+        case no_implicitcast:
             return createFieldNameFromExpr(expr->queryChild(0));
         case no_countgroup:
             name = createUnnamedFieldId("_unnamed_cnt_");

+ 10 - 0
ecl/hql/hqlutil.cpp

@@ -439,6 +439,16 @@ IHqlExpression * createRawIndex(IHqlExpression * index)
 
 //---------------------------------------------------------------------------------------------
 
+IHqlExpression * queryStripCasts(IHqlExpression * expr)
+{
+    while (isCast(expr))
+        expr = expr->queryChild(0);
+    return expr;
+}
+
+
+//---------------------------------------------------------------------------------------------
+
 IHqlExpression * createRecord(IHqlExpression * field)
 {
     HqlExprArray fields;

+ 1 - 0
ecl/hql/hqlutil.hpp

@@ -101,6 +101,7 @@ extern HQL_API unsigned countTotalFields(IHqlExpression * record, bool includeVi
 extern HQL_API bool transformContainsSkip(IHqlExpression * transform);
 extern HQL_API bool transformListContainsSkip(IHqlExpression * transforms);
 extern HQL_API bool recordContainsNestedRecord(IHqlExpression * record);
+extern HQL_API IHqlExpression * queryStripCasts(IHqlExpression * expr);
 
 extern HQL_API IHqlExpression * queryInvalidCsvRecordField(IHqlExpression * expr);
 extern HQL_API bool isValidCsvRecord(IHqlExpression * expr);

+ 0 - 8
ecl/hqlcpp/hqlcpp.cpp

@@ -515,14 +515,6 @@ bool isProjectedInRecord(IHqlExpression * record, IHqlExpression * expr)
     return false;
 }
 
-IHqlExpression * queryStripCasts(IHqlExpression * expr)
-{
-    while ((expr->getOperator() == no_cast) || (expr->getOperator() == no_implicitcast))
-        expr = expr->queryChild(0);
-    return expr;
-}
-
-
 // Format the list is stored in doesn't matter, so allow constant strings to be stored by reference
 IHqlExpression * getOptimialListFormat(IHqlExpression * table)
 {

+ 0 - 1
ecl/hqlcpp/hqlcpp.hpp

@@ -143,7 +143,6 @@ extern HQLCPP_API IHqlExpression * ensureIndexable(IHqlExpression * expr);
 
 extern HQLCPP_API bool isChildOf(IHqlExpression * parent, IHqlExpression * child);
 extern HQLCPP_API bool isProjectedInRecord(IHqlExpression * record, IHqlExpression * child);
-extern HQLCPP_API IHqlExpression * queryStripCasts(IHqlExpression * expr);
 
 extern HQLCPP_API IHqlExpression * adjustValue(IHqlExpression * value, __int64 delta);
 extern HQLCPP_API bool matchesConstValue(IHqlExpression * expr, __int64 matchValue);

+ 1 - 1
testing/regress/ecl/key/aggds1.xml

@@ -1,5 +1,5 @@
 <Dataset name='Result 1'>
- <Row><_unnamed_sum_1>600</_unnamed_sum_1><_unnamed_exists_2>true</_unnamed_exists_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>false</_unnamed_exists_4><_unnamed_cnt_5>9</_unnamed_cnt_5></Row>
+ <Row><_unnamed_sum_aage1>600</_unnamed_sum_aage1><_unnamed_exists_2>true</_unnamed_exists_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>false</_unnamed_exists_4><_unnamed_cnt_5>9</_unnamed_cnt_5></Row>
 </Dataset>
 <Dataset name='Result 2'>
  <Row><_unnamed_max_aage1>99</_unnamed_max_aage1></Row>

+ 1 - 1
testing/regress/ecl/key/aggds1seq.xml

@@ -1,5 +1,5 @@
 <Dataset name='Result 1'>
- <Row><_unnamed_sum_1>600</_unnamed_sum_1><_unnamed_exists_2>true</_unnamed_exists_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>false</_unnamed_exists_4><_unnamed_cnt_5>9</_unnamed_cnt_5></Row>
+ <Row><_unnamed_sum_aage1>600</_unnamed_sum_aage1><_unnamed_exists_2>true</_unnamed_exists_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>false</_unnamed_exists_4><_unnamed_cnt_5>9</_unnamed_cnt_5></Row>
 </Dataset>
 <Dataset name='Result 2'>
  <Row><_unnamed_max_aage1>99</_unnamed_max_aage1></Row>

+ 1 - 1
testing/regress/ecl/key/aggidx1.xml

@@ -1,5 +1,5 @@
 <Dataset name='Result 1'>
- <Row><_unnamed_sum_1>600</_unnamed_sum_1><_unnamed_exists_2>true</_unnamed_exists_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>false</_unnamed_exists_4><_unnamed_cnt_5>9</_unnamed_cnt_5></Row>
+ <Row><_unnamed_sum_aage1>600</_unnamed_sum_aage1><_unnamed_exists_2>true</_unnamed_exists_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>false</_unnamed_exists_4><_unnamed_cnt_5>9</_unnamed_cnt_5></Row>
 </Dataset>
 <Dataset name='Result 2'>
  <Row><_unnamed_max_aage1>99</_unnamed_max_aage1></Row>

+ 1 - 1
testing/regress/ecl/key/aggidx1seq.xml

@@ -1,5 +1,5 @@
 <Dataset name='Result 1'>
- <Row><_unnamed_sum_1>600</_unnamed_sum_1><_unnamed_exists_2>true</_unnamed_exists_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>false</_unnamed_exists_4><_unnamed_cnt_5>9</_unnamed_cnt_5></Row>
+ <Row><_unnamed_sum_aage1>600</_unnamed_sum_aage1><_unnamed_exists_2>true</_unnamed_exists_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>false</_unnamed_exists_4><_unnamed_cnt_5>9</_unnamed_cnt_5></Row>
 </Dataset>
 <Dataset name='Result 2'>
  <Row><_unnamed_max_aage1>99</_unnamed_max_aage1></Row>

+ 5 - 5
testing/regress/ecl/key/aggidx3.xml

@@ -1,9 +1,9 @@
 <Dataset name='Result 1'>
- <Row><surname>Flintstone</surname><_unnamed_sum_2>198</_unnamed_sum_2></Row>
- <Row><surname>Grabdale</surname><_unnamed_sum_2>68</_unnamed_sum_2></Row>
- <Row><surname>Halliday</surname><_unnamed_sum_2>74</_unnamed_sum_2></Row>
- <Row><surname>Jones</surname><_unnamed_sum_2>99</_unnamed_sum_2></Row>
- <Row><surname>Windsor</surname><_unnamed_sum_2>161</_unnamed_sum_2></Row>
+ <Row><surname>Flintstone</surname><_unnamed_sum_aage2>198</_unnamed_sum_aage2></Row>
+ <Row><surname>Grabdale</surname><_unnamed_sum_aage2>68</_unnamed_sum_aage2></Row>
+ <Row><surname>Halliday</surname><_unnamed_sum_aage2>74</_unnamed_sum_aage2></Row>
+ <Row><surname>Jones</surname><_unnamed_sum_aage2>99</_unnamed_sum_aage2></Row>
+ <Row><surname>Windsor</surname><_unnamed_sum_aage2>161</_unnamed_sum_aage2></Row>
 </Dataset>
 <Dataset name='Result 2'>
  <Row><_unnamed_max_aage1>99</_unnamed_max_aage1><surname>Flintstone          </surname></Row>

+ 5 - 5
testing/regress/ecl/key/aggidx3seq.xml

@@ -1,9 +1,9 @@
 <Dataset name='Result 1'>
- <Row><surname>Flintstone</surname><_unnamed_sum_2>198</_unnamed_sum_2></Row>
- <Row><surname>Grabdale</surname><_unnamed_sum_2>68</_unnamed_sum_2></Row>
- <Row><surname>Halliday</surname><_unnamed_sum_2>74</_unnamed_sum_2></Row>
- <Row><surname>Jones</surname><_unnamed_sum_2>99</_unnamed_sum_2></Row>
- <Row><surname>Windsor</surname><_unnamed_sum_2>161</_unnamed_sum_2></Row>
+ <Row><surname>Flintstone</surname><_unnamed_sum_aage2>198</_unnamed_sum_aage2></Row>
+ <Row><surname>Grabdale</surname><_unnamed_sum_aage2>68</_unnamed_sum_aage2></Row>
+ <Row><surname>Halliday</surname><_unnamed_sum_aage2>74</_unnamed_sum_aage2></Row>
+ <Row><surname>Jones</surname><_unnamed_sum_aage2>99</_unnamed_sum_aage2></Row>
+ <Row><surname>Windsor</surname><_unnamed_sum_aage2>161</_unnamed_sum_aage2></Row>
 </Dataset>
 <Dataset name='Result 2'>
  <Row><_unnamed_max_aage1>99</_unnamed_max_aage1><surname>Flintstone          </surname></Row>

+ 5 - 5
testing/regress/ecl/key/aggsqx1.xml

@@ -1,9 +1,9 @@
 <Dataset name='Result 1'>
- <Row><_unnamed_1><firstforename>Gavin               </firstforename><_unnamed_sum_2>74</_unnamed_sum_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
- <Row><_unnamed_1><firstforename>Elizabeth           </firstforename><_unnamed_sum_2>161</_unnamed_sum_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
- <Row><_unnamed_1><firstforename>Fred                </firstforename><_unnamed_sum_2>198</_unnamed_sum_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
- <Row><_unnamed_1><firstforename>John                </firstforename><_unnamed_sum_2>68</_unnamed_sum_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>1</_unnamed_cnt_6></_unnamed_1></Row>
- <Row><_unnamed_1><firstforename>Brian               </firstforename><_unnamed_sum_2>99</_unnamed_sum_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
+ <Row><_unnamed_1><firstforename>Gavin               </firstforename><_unnamed_sum_aage2>74</_unnamed_sum_aage2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
+ <Row><_unnamed_1><firstforename>Elizabeth           </firstforename><_unnamed_sum_aage2>161</_unnamed_sum_aage2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
+ <Row><_unnamed_1><firstforename>Fred                </firstforename><_unnamed_sum_aage2>198</_unnamed_sum_aage2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
+ <Row><_unnamed_1><firstforename>John                </firstforename><_unnamed_sum_aage2>68</_unnamed_sum_aage2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>1</_unnamed_cnt_6></_unnamed_1></Row>
+ <Row><_unnamed_1><firstforename>Brian               </firstforename><_unnamed_sum_aage2>99</_unnamed_sum_aage2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
 </Dataset>
 <Dataset name='Result 2'>
  <Row><_unnamed_1><_unnamed_max_aage1>0</_unnamed_max_aage1></_unnamed_1></Row>

+ 5 - 5
testing/regress/ecl/key/aggsqx1b.xml

@@ -1,7 +1,7 @@
 <Dataset name='Result 1'>
- <Row><_unnamed_1><firstforename>Gavin               </firstforename><_unnamed_sum_2>74</_unnamed_sum_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
- <Row><_unnamed_1><firstforename>Elizabeth           </firstforename><_unnamed_sum_2>161</_unnamed_sum_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
- <Row><_unnamed_1><firstforename>Fred                </firstforename><_unnamed_sum_2>198</_unnamed_sum_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
- <Row><_unnamed_1><firstforename>John                </firstforename><_unnamed_sum_2>68</_unnamed_sum_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>1</_unnamed_cnt_6></_unnamed_1></Row>
- <Row><_unnamed_1><firstforename>Brian               </firstforename><_unnamed_sum_2>99</_unnamed_sum_2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
+ <Row><_unnamed_1><firstforename>Gavin               </firstforename><_unnamed_sum_aage2>74</_unnamed_sum_aage2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
+ <Row><_unnamed_1><firstforename>Elizabeth           </firstforename><_unnamed_sum_aage2>161</_unnamed_sum_aage2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
+ <Row><_unnamed_1><firstforename>Fred                </firstforename><_unnamed_sum_aage2>198</_unnamed_sum_aage2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
+ <Row><_unnamed_1><firstforename>John                </firstforename><_unnamed_sum_aage2>68</_unnamed_sum_aage2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>1</_unnamed_cnt_6></_unnamed_1></Row>
+ <Row><_unnamed_1><firstforename>Brian               </firstforename><_unnamed_sum_aage2>99</_unnamed_sum_aage2><_unnamed_exists_3>true</_unnamed_exists_3><_unnamed_exists_4>true</_unnamed_exists_4><_unnamed_exists_5>false</_unnamed_exists_5><_unnamed_cnt_6>2</_unnamed_cnt_6></_unnamed_1></Row>
 </Dataset>

+ 5 - 5
testing/regress/ecl/key/aggsqx3.xml

@@ -1,9 +1,9 @@
 <Dataset name='Result 1'>
- <Row><people><Row><surname>Halliday</surname><_unnamed_sum_2>74</_unnamed_sum_2></Row></people></Row>
- <Row><people><Row><surname>Windsor</surname><_unnamed_sum_2>161</_unnamed_sum_2></Row></people></Row>
- <Row><people><Row><surname>Flintstone</surname><_unnamed_sum_2>198</_unnamed_sum_2></Row></people></Row>
- <Row><people><Row><surname>Grabdale</surname><_unnamed_sum_2>68</_unnamed_sum_2></Row></people></Row>
- <Row><people><Row><surname>Jones</surname><_unnamed_sum_2>99</_unnamed_sum_2></Row></people></Row>
+ <Row><people><Row><surname>Halliday</surname><_unnamed_sum_aage2>74</_unnamed_sum_aage2></Row></people></Row>
+ <Row><people><Row><surname>Windsor</surname><_unnamed_sum_aage2>161</_unnamed_sum_aage2></Row></people></Row>
+ <Row><people><Row><surname>Flintstone</surname><_unnamed_sum_aage2>198</_unnamed_sum_aage2></Row></people></Row>
+ <Row><people><Row><surname>Grabdale</surname><_unnamed_sum_aage2>68</_unnamed_sum_aage2></Row></people></Row>
+ <Row><people><Row><surname>Jones</surname><_unnamed_sum_aage2>99</_unnamed_sum_aage2></Row></people></Row>
 </Dataset>
 <Dataset name='Result 2'>
  <Row><people></people></Row>