Exemplo n.º 1
0
ASTNode *FunctionDocAvailable::staticTypingImpl(StaticContext *context)
{
  _src.clearExceptType();
  _src.availableDocumentsUsed(true);
  calculateSRCForArguments(context);
  return this;
}
Exemplo n.º 2
0
ASTNode *FunctionDayFromDate::staticTypingImpl(StaticContext *context)
{
  _src.clear();

  _src.getStaticType() = StaticType(StaticType::DECIMAL_TYPE, 0, 1);
  return calculateSRCForArguments(context, /*checkTimezone*/true);
}
Exemplo n.º 3
0
ASTNode *FunctionCurrentTime::staticTypingImpl(StaticContext *context)
{
  _src.clear();

  _src.getStaticType() = StaticType::TIME_TYPE;
  _src.currentTimeUsed(true);
  return calculateSRCForArguments(context);
}
Exemplo n.º 4
0
ASTNode *FunctionDocAvailable::staticTypingImpl(StaticContext *context)
{
  _src.clear();

  _src.getStaticType() = StaticType::BOOLEAN_TYPE;
  _src.availableDocumentsUsed(true);
  return calculateSRCForArguments(context);
}
Exemplo n.º 5
0
ASTNode *FunctionLocalname::staticTypingImpl(StaticContext *context)
{
  _src.clear();

  _src.getStaticType() = StaticType::STRING_TYPE;
  if(_args.empty()) {
    _src.contextItemUsed(true);
  }
  return calculateSRCForArguments(context);
}
Exemplo n.º 6
0
ASTNode *FunctionAdjustTimeToTimezone::staticTypingImpl(StaticContext *context)
{
  _src.clear();

  _src.getStaticType() = StaticType(StaticType::TIME_TYPE, 0, 1);
  if(getNumArgs() == 1) {
    _src.implicitTimezoneUsed(true);
  }
  return calculateSRCForArguments(context);
}
Exemplo n.º 7
0
ASTNode *NumericFunction::staticTypingImpl(StaticContext *context)
{
  ASTNode *result = calculateSRCForArguments(context, /*checkTimezone*/false, /*numericfunction*/true);
  if(result == this) {
    if(!_args[0]->getStaticAnalysis().getStaticType().containsType(StaticType::NUMERIC_TYPE) &&
       _args[0]->getStaticAnalysis().getStaticType().getMin() > 0)
      XQThrow(FunctionException,X("NumericFunction::staticTyping"), X("Non-numeric argument in numeric function [err:XPTY0004]"));
  }
  return result;
}
Exemplo n.º 8
0
ASTNode *FunctionDistinctValues::staticTypingImpl(StaticContext *context)
{
  _src.clear();

  ASTNode *result = calculateSRCForArguments(context);
  if(result == this) {
    _src.getStaticType() = _args.front()->getStaticAnalysis().getStaticType();
    _src.getStaticType().setCardinality(_src.getStaticType().getMin() == 0 ? 0 : 1, _src.getStaticType().getMax());
  }
  return result;
}
Exemplo n.º 9
0
ASTNode *FunctionParseXML::staticTypingImpl(StaticContext *context)
{
  _src.clear();

  _src.setProperties(StaticAnalysis::DOCORDER | StaticAnalysis::GROUPED |
                     StaticAnalysis::PEER | StaticAnalysis::SUBTREE | StaticAnalysis::ONENODE);
  _src.getStaticType() = StaticType(StaticType::DOCUMENT_TYPE, 0, 1);
  _src.creative(true);

  return calculateSRCForArguments(context);
}
Exemplo n.º 10
0
ASTNode *FunctionInsertBefore::staticTypingImpl(StaticContext *context)
{
  _src.clear();

  ASTNode *result = calculateSRCForArguments(context);
  if(result == this) {
    _src.getStaticType() = _args[0]->getStaticAnalysis().getStaticType();
    _src.getStaticType().typeConcat(_args[2]->getStaticAnalysis().getStaticType());
  }
  return result;
}
Exemplo n.º 11
0
ASTNode *FunctionTrace::staticTypingImpl(StaticContext *context)
{
  _src.clearExceptType();
  calculateSRCForArguments(context);

  _src.getStaticType() = _args.front()->getStaticAnalysis().getStaticType();
  _src.setProperties(_args.front()->getStaticAnalysis().getProperties());
  _src.forceNoFolding(true);

  return this;
}
Exemplo n.º 12
0
ASTNode *FunctionLast::staticTypingImpl(StaticContext *context)
{
  _src.clearExceptType();

  if(context && !context->getContextItemType().containsType(StaticType::ITEM_TYPE)) {
    XQThrow(DynamicErrorException,X("XQContextItem::staticTyping"),
            X("It is an error for the context item to be undefined when using it [err:XPDY0002]"));
  }

  _src.contextSizeUsed(true);
  calculateSRCForArguments(context);
  return this;
}
Exemplo n.º 13
0
ASTNode *FunctionDocument::staticTypingImpl(StaticContext *context)
{
  _src.clear();

  _src.setProperties(StaticAnalysis::DOCORDER | StaticAnalysis::GROUPED |
                     StaticAnalysis::PEER | StaticAnalysis::SUBTREE | StaticAnalysis::ONENODE);

  // TBD Change if we support fragment identifiers - jpcs
  _src.getStaticType() = StaticType(StaticType::DOCUMENT_TYPE, 0, StaticType::UNLIMITED);
  _src.availableDocumentsUsed(true);

  return calculateSRCForArguments(context);
}
Exemplo n.º 14
0
ASTNode *FunctionDoc::staticTypingImpl(StaticContext *context)
{
  _src.clear();

  if(_args[0]->getStaticAnalysis().getStaticType().getMin() == 0)
	  _src.getStaticType() = StaticType(StaticType::DOCUMENT_TYPE, 0, 1);
  else _src.getStaticType() = StaticType(StaticType::DOCUMENT_TYPE, 1, 1);

  _src.setProperties(StaticAnalysis::DOCORDER | StaticAnalysis::GROUPED |
                     StaticAnalysis::PEER | StaticAnalysis::SUBTREE | StaticAnalysis::ONENODE);
  _src.availableDocumentsUsed(true);

  return calculateSRCForArguments(context);
}
Exemplo n.º 15
0
ASTNode *FunctionEmpty::staticTypingImpl(StaticContext *context)
{
  _src.clearExceptType();
  calculateSRCForArguments(context);

  if(context) {
    const StaticAnalysis &sa = _args[0]->getStaticAnalysis();
    const StaticType &sType = sa.getStaticType();
    if((sType.getMin() > 0 || sType.getMax() == 0) && !sa.areDocsOrCollectionsUsed() && !sa.isNoFoldingForced()) {
      XPath2MemoryManager* mm = context->getMemoryManager();
      return XQLiteral::create(sType.getMax() == 0, mm, this);
    }
  }

  return this;
}
Exemplo n.º 16
0
ASTNode *FunctionCount::staticTypingImpl(StaticContext *context)
{
  _src.clearExceptType();
  calculateSRCForArguments(context);

  if(context) {
    const StaticAnalysis &sa = _args[0]->getStaticAnalysis();
    const StaticType &sType = sa.getStaticType();
    if(sType.getMin() == sType.getMax() && !sa.areDocsOrCollectionsUsed() && !sa.isNoFoldingForced()) {
      XPath2MemoryManager* mm = context->getMemoryManager();

      try {
        AutoDelete<DynamicContext> dContext(context->createDynamicContext());
        dContext->setMemoryManager(mm);
        return XQLiteral::create(mm->createInteger(sType.getMin()), dContext, mm, this);
      }
      catch(XQException &ex) {
        // Constant folding failed
      }
    }
  }

  return this;
}
ASTNode *FunctionMinutesFromDateTime::staticTypingImpl(StaticContext *context)
{
  _src.clearExceptType();
  calculateSRCForArguments(context, /*checkTimezone*/true);
  return this;
}
Exemplo n.º 18
0
ASTNode *FunctionName::staticTypingImpl(StaticContext *context)
{
  _src.clear();
  _src.getStaticType() = StaticType::STRING_TYPE;
  return calculateSRCForArguments(context);
}