#include "../../config/pathan_config.h" /* * Copyright (c) 2001, DecisionSoft Limited All rights reserved. * Please see LICENSE.TXT for more information. */ #include #include #include "../../utils/DateUtils.hpp" #include #include const XMLCh FunctionSubtractDateTimesYieldingYearMonthDuration::name[] = { XERCES_CPP_NAMESPACE_QUALIFIER chLatin_s, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_u, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_b, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_t, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_r, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_a, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_c, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_t, XERCES_CPP_NAMESPACE_QUALIFIER chDash, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_d, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_a, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_t, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_e, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_T, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_i, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_m, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_e, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_s, XERCES_CPP_NAMESPACE_QUALIFIER chDash, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_y, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_i, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_e, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_l, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_d, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_i, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_n, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_g, XERCES_CPP_NAMESPACE_QUALIFIER chDash, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_y, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_e, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_a, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_r, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_M, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_o, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_n, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_t, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_h, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_D, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_u, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_r, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_a, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_t, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_i, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_o, XERCES_CPP_NAMESPACE_QUALIFIER chLatin_n, XERCES_CPP_NAMESPACE_QUALIFIER chNull }; /* * fn:subtract-dateTimes-yielding-yearMonthDuration($arg1 as xs:dateTime?, $arg2 as xs:dateTime?) as xdt:yearMonthDuration? */ FunctionSubtractDateTimesYieldingYearMonthDuration::FunctionSubtractDateTimesYieldingYearMonthDuration(const VectorOfDataItems &args, XPath2MemoryManager* memMgr) : DataItemFunction(name,2, 2, "dateTime?, dateTime?", args, memMgr) { } DataItem* FunctionSubtractDateTimesYieldingYearMonthDuration::staticResolution(StaticContext *context, StaticResolutionContext *src) { return resolveDataItemsForDateOrTime(_args, context, src, true); } Sequence FunctionSubtractDateTimesYieldingYearMonthDuration::collapseTreeInternal(DynamicContext* context, int flags) const { XPath2MemoryManager* memMgr = context->getMemoryManager(); Sequence op1 = getParamNumber(1, context); if(op1.isEmpty()) { return Sequence(memMgr); } Sequence op2 = getParamNumber(2, context); if (op2.isEmpty()) { return Sequence(memMgr); } const ATDateTimeOrDerived* dateTime1 = (const ATDateTimeOrDerived*)op1.first(); const ATDateTimeOrDerived* dateTime2 = (const ATDateTimeOrDerived*)op2.first(); // If one or both arguments do not have a timezone they are assigned an implicit timezone if (dateTime1->hasTimezone() == false) { dateTime1 = dateTime1->addTimezone(context->getImplicitTimezone(), context); } if (dateTime2->hasTimezone() == false) { dateTime2 = dateTime2->addTimezone(context->getImplicitTimezone(), context); } return Sequence( dateTime1->subtractDateTimeAsYearMonthDuration(dateTime2, context), memMgr); }