Sfoglia il codice sorgente

Merge pull request #11063 from shamser/issue19518

HPCC-19518 Move ATMOST(0) check from parser to semantic check stage

Reviewed-by: Gavin Halliday <ghalliday@hpccsystems.com>
Gavin Halliday 7 anni fa
parent
commit
3edbf5ee44
2 ha cambiato i file con 7 aggiunte e 8 eliminazioni
  1. 0 8
      ecl/hql/hqlgram.y
  2. 7 0
      ecl/hqlcpp/hqlttcpp.cpp

+ 0 - 8
ecl/hql/hqlgram.y

@@ -10754,8 +10754,6 @@ JoinFlag
     | ATMOST '(' expression ')'
                         {
                             parser->normalizeExpression($3, type_numeric, false);
-                            if ($3.isZero())
-                                parser->reportError(ERR_BAD_JOINFLAG, $3, "ATMOST(0) doesn't make any sense");
                             $$.setExpr(createExprAttribute(atmostAtom, $3.getExpr()));
                             $$.setPosition($1);
                         }
@@ -10763,8 +10761,6 @@ JoinFlag
                         {
                             parser->normalizeExpression($3, type_boolean, false);
                             parser->normalizeExpression($5, type_numeric, false);
-                            if ($5.isZero())
-                                parser->reportError(ERR_BAD_JOINFLAG, $5, "ATMOST(0) doesn't make any sense");
                             $$.setExpr(createExprAttribute(atmostAtom, $3.getExpr(), $5.getExpr()));
                             $$.setPosition($1);
                         }
@@ -10772,16 +10768,12 @@ JoinFlag
                         {
                             parser->normalizeExpression($3, type_boolean, false);
                             parser->normalizeExpression($7, type_numeric, false);
-                            if ($7.isZero())
-                                parser->reportError(ERR_BAD_JOINFLAG, $7, "ATMOST(0) doesn't make any sense");
                             $$.setExpr(createExprAttribute(atmostAtom, $3.getExpr(), $5.getExpr(), $7.getExpr()));
                             $$.setPosition($1);
                         }
     | ATMOST '(' sortListExpr ',' expression ')'
                         {
                             parser->normalizeExpression($5, type_numeric, false);
-                            if ($5.isZero())
-                                parser->reportError(ERR_BAD_JOINFLAG, $5, "ATMOST(0) doesn't make any sense");
                             $$.setExpr(createExprAttribute(atmostAtom, $3.getExpr(), $5.getExpr()));
                             $$.setPosition($1);
                         }

+ 7 - 0
ecl/hqlcpp/hqlttcpp.cpp

@@ -14009,6 +14009,13 @@ void SemanticErrorChecker::checkBloom(IHqlExpression * bloom)
 
 void SemanticErrorChecker::checkJoin(IHqlExpression * join)
 {
+    IHqlExpression * atmost = join->queryAttribute(atmostAtom);
+    if (atmost)
+    {
+        IHqlExpression * val = atmost->queryChild(0);
+        if (matchesConstantValue(val, 0))
+            reportError(ERR_BAD_JOINFLAG, "ATMOST(0) doesn't make any sense");
+    }
     IHqlExpression * group = join->queryAttribute(groupAtom);
     if (group)
     {