void AbstractPlanNode::loadSortListFromJSONObject(PlannerDomValue obj, std::vector<AbstractExpression*> *sortExprs, std::vector<SortDirectionType> *sortDirs) { PlannerDomValue sortColumnsArray = obj.valueForKey("SORT_COLUMNS"); for (int i = 0; i < sortColumnsArray.arrayLen(); i++) { PlannerDomValue sortColumn = sortColumnsArray.valueAtIndex(i); bool hasDirection = (sortDirs == NULL), hasExpression = (sortExprs == NULL); if (sortDirs && sortColumn.hasNonNullKey("SORT_DIRECTION")) { hasDirection = true; std::string sortDirectionStr = sortColumn.valueForKey("SORT_DIRECTION").asStr(); sortDirs->push_back(stringToSortDirection(sortDirectionStr)); } if (sortExprs && sortColumn.hasNonNullKey("SORT_EXPRESSION")) { hasExpression = true; PlannerDomValue exprDom = sortColumn.valueForKey("SORT_EXPRESSION"); sortExprs->push_back(AbstractExpression::buildExpressionTree(exprDom)); } if (!(hasExpression && hasDirection)) { throw SerializableEEException(VOLT_EE_EXCEPTION_TYPE_EEEXCEPTION, "OrderByPlanNode::loadFromJSONObject:" " Does not have expression and direction."); } } }
void PartitionByPlanNode::loadFromJSONObject(PlannerDomValue obj) { // Start with the base class. AggregatePlanNode::loadFromJSONObject(obj); // Read the sort expressions and directions. PlannerDomValue sortByColumnArray = obj.valueForKey("SORT_COLUMNS"); for (int idx = 0; idx < sortByColumnArray.arrayLen(); idx += 1) { PlannerDomValue sortColumnValue = sortByColumnArray.valueAtIndex(idx); if (sortColumnValue.hasNonNullKey("SORT_EXPRESSION")) { PlannerDomValue exprDom = sortColumnValue.valueForKey("SORT_EXPRESSION"); m_sortExpressions.push_back(AbstractExpression::buildExpressionTree(exprDom)); } else { throw SerializableEEException(VOLT_EE_EXCEPTION_TYPE_EEEXCEPTION, "PartitionByPlanNode::loadFromJSONObject:" " Missing sort expression."); } if (sortColumnValue.hasNonNullKey("SORT_DIRECTION")) { std::string dirStr = sortColumnValue.valueForKey("SORT_DIRECTION").asStr(); m_sortDirections.push_back(stringToSortDirection(dirStr)); } else { throw SerializableEEException(VOLT_EE_EXCEPTION_TYPE_EEEXCEPTION, "PartitionByPlanNode::loadFromJSONObject:" " Missing sort direction."); } } }