Merge [TRAFODION 3091] Unnamed Dynamic parameter doesn't work in WITH stateā€¦ PR-1585
diff --git a/core/sql/optimizer/BindItemExpr.cpp b/core/sql/optimizer/BindItemExpr.cpp
index 9e84ac4..67c7471 100644
--- a/core/sql/optimizer/BindItemExpr.cpp
+++ b/core/sql/optimizer/BindItemExpr.cpp
@@ -8622,7 +8622,12 @@
 ItemExpr *Parameter::bindNode(BindWA *bindWA)
 {
   if (nodeIsBound())
+  {
+    OperatorTypeEnum opTyp = getOperatorType();
+    // All user inputs are treated as outer references in the current scope.
+    bindWA->getCurrentScope()->addOuterRef(getValueId());
     return getValueId().getItemExpr();
+  }
   if (bindWA->getCurrentScope()->context()->inTDFunction())
   {
     //Paramaters and outer references are not supported with rank function.
diff --git a/core/sql/optimizer/ItemExpr.cpp b/core/sql/optimizer/ItemExpr.cpp
index 920d2f4..ace5a84 100644
--- a/core/sql/optimizer/ItemExpr.cpp
+++ b/core/sql/optimizer/ItemExpr.cpp
@@ -3886,23 +3886,7 @@
 
 ItemExpr * DynamicParam::copyTopNode(ItemExpr *derivedNode, CollHeap* outHeap)
 {
-  ItemExpr *result;
-
-  if (derivedNode == NULL) {
-    result = new (outHeap) DynamicParam(paramName_, indicatorName_, outHeap);
-    ((DynamicParam *) result)->setRowsetSize(rowsetSize_);
-    ((DynamicParam *) result)->setRowsetInfo(rowsetInfo_);
-    ((DynamicParam *) result)->setParamHeading(heading_);
-    ((DynamicParam *) result)->setParamTablename(tablename_);
-    // we remember our original dynamic parameter because we
-    // must use their valueid at dynamicparam::codegen time
-    ((DynamicParam *) result)->setOriginal(this);
-  }
-
-  else
-    result = derivedNode;
-
-  return Parameter::copyTopNode(result, outHeap);
+  return this;
 }
 
 const NAType * DynamicParam::pushDownType(NAType& desiredType,