Merge [TRAFODION-3202] PR 1713 Fix bug with CASE in paging function
diff --git a/core/sql/optimizer/RelSequence.cpp b/core/sql/optimizer/RelSequence.cpp
index f0ce941..b611b94 100644
--- a/core/sql/optimizer/RelSequence.cpp
+++ b/core/sql/optimizer/RelSequence.cpp
@@ -605,6 +605,41 @@
 
 } // RelSequence::rewriteNode()
 
+RelExpr * RelSequence::normalizeNode(NormWA & normWARef)
+{
+  RelExpr *result = RelExpr::normalizeNode(normWARef);
+
+  // See RelRoot::normalizeNode(), which has a code segment for a case
+  // 10-010321-1842 (details of the case are now lost to history).
+  // Since the RelSequence has an order by expression similar to that
+  // of the RelRoot, we have to apply an equivalent fix here, so that
+  // an OVER(ORDER BY x) will work, even if the expression x refers
+  // to something like a parameter or to current_timestamp.
+  // For this case we need to
+  // enforce that Sort operator can sort on this expression by keeping
+  // parameter ?p in RelRoot child's group requiredInput.
+  // NOTE. This solution will force the Sort operator to be done
+  // directly below the RelSequence node.
+  if (requiredOrder_.entries() > 0)
+  {
+    ValueIdSet orderBySet(requiredOrder_), 
+               coveredOrderBySet,
+               inputsNeededForOrderBy;
+
+    GroupAttributes * childGAPtr = child(0).getPtr()->getGroupAttr();
+
+    childGAPtr->coverTest(orderBySet,
+                          getGroupAttr()->getCharacteristicInputs(),
+                          coveredOrderBySet,
+                          inputsNeededForOrderBy);
+
+    childGAPtr->addCharacteristicInputs(inputsNeededForOrderBy);
+  }
+
+  return result;
+}
+
+
 // RelSequence::pullUpPreds() --------------------------------------------
 // is redefined to disallow the pullup of most predicates from the
 // operator's child.  RelSequence can not pull up any predicates from
diff --git a/core/sql/optimizer/RelSequence.h b/core/sql/optimizer/RelSequence.h
index 189fdbe..7733932 100644
--- a/core/sql/optimizer/RelSequence.h
+++ b/core/sql/optimizer/RelSequence.h
@@ -122,8 +122,7 @@
   // predicate pushdown and computing a "minimal" set of
   // characteristic input and characteristic output values.
   //
-  // The default implementation is adequate for RelSequence
-  // virtual RelExpr * normalizeNode(NormWA & normWARef);
+  virtual RelExpr * normalizeNode(NormWA & normWARef);
 
   // Method to push down predicates from a RelSequence node into the
   // children