Exemple #1
0
/*
 * If the object expression is query local, that is, if it is a simple variable
 * referring to a name declared in a query clause, or itself a query local
 * object expression, then if keep this expression as is. If not, then
 * rewrite this expression into a query parameter reference.
 */
ExpressionPtr CaptureExtractor::rewriteObjectProperty(
  ObjectPropertyExpressionPtr ope) {
  assert(ope != nullptr);
  auto obj = ope->getObject();
  if (this->dependsOnQueryOnlyState(obj)) {
    auto prop = ope->getProperty();
    if (prop->getKindOf() == Expression::KindOfScalarExpression) {
      auto scalar = static_pointer_cast<ScalarExpression>(prop);
      const string &propName = scalar->getLiteralString();
      if (!propName.empty()) {
        return ope;
      }
    }
  }
  return newQueryParamRef(ope);
}
Exemple #2
0
void Parser::appendMethodParams(Token &params) {
  if (params.num == 1) {
    ObjectPropertyExpressionPtr prop = (m_objects.back())->
      cast<ObjectPropertyExpression>();
    if (prop) {
      ObjectMethodExpressionPtr method =
        NEW_EXP(ObjectMethod,
                prop->getObject(), prop->getProperty(), params->exprs());
      m_objects.back() = method;
    } else {
      m_objects.back() = NEW_EXP(SimpleFunctionCall,
                                 Name::fromExp(this, m_objects.back()),
                                 params->exprs());
    }
  }
}
Exemple #3
0
void Parser::appendMethodParams(Token &params) {
  if (params.num() == 1) {
    ExpressionPtr &out = m_objects.back();
    ObjectPropertyExpressionPtr prop =
      out->unsafe_cast<ObjectPropertyExpression>();
    TempExpressionListPtr texp = out->unsafe_cast<TempExpressionList>();
    if (!prop && texp) {
      prop = texp->getLast()->unsafe_cast<ObjectPropertyExpression>();
    }
    if (prop) {
      out = NEW_EXP(ObjectMethod,
                    prop->getObject(), prop->getProperty(), params->exprs());
      if (texp) {
        texp->setLast(out);
        out = texp;
      }
    } else {
      out = NEW_EXP(SimpleFunctionCall, Name::fromExp(this, out),
                    params->exprs());
    }
  }
}
Exemple #4
0
void Parser::appendMethodParams(Token *params) {
  ExpressionListPtr paramsExp;
  if (params) {
    if (params->exp) {
      paramsExp = dynamic_pointer_cast<ExpressionList>(params->exp);
    } else if (params->num == 1) {
      paramsExp = NEW_EXP0(ExpressionList);
    }
  }
  if (paramsExp) {
    ObjectPropertyExpressionPtr prop =
      dynamic_pointer_cast<ObjectPropertyExpression>(m_objects.back());
    if (prop) {
      ObjectMethodExpressionPtr method =
        NEW_EXP(ObjectMethodExpression,
                prop->getObject(), prop->getProperty(), paramsExp);
      m_objects.back() = method;
    } else {
      m_objects.back() = NEW_EXP(DynamicFunctionCall, m_objects.back(),
                                 paramsExp, NULL);
    }
  }
}