public function visitFunctionCall(O\FunctionCallExpression $expression) { $nameExpression = $expression->getName(); $this->walk($nameExpression); $this->walkAll($expression->getArguments()); if ($nameExpression instanceof O\ValueExpression) { $function = $this->typeSystem->getFunction($nameExpression->getValue()); $this->metadata[$expression] = $function; $this->analysis[$expression] = $function->getReturnType(); } else { throw new TypeException('Invalid function expression: dynamic function calls are not allowed'); } }
protected function visitFunctionCall(O\FunctionCallExpression $expression) { $functionName = $expression->getName()->getValue(); if (!isset($this->functions[$functionName])) { throw new PinqDemoSqlException("Function not supported: {$functionName}"); } $arguments = []; foreach ($expression->getArguments() as $argument) { $arguments[] = $this->compileInContext($argument); } $this->sql .= $this->functions[$functionName] . '(' . implode(', ', $arguments) . ')'; }