. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\ORM\Query\Part\Expression; use Espo\ORM\Query\Part\Expression; class Util { /** * Compose an expression by a function name and arguments. * * @param Expression|bool|int|float|string|null ...$arguments Arguments */ public static function composeFunction( string $function, Expression|bool|int|float|string|null ...$arguments ): Expression { $stringifiedItems = array_map( function ($item) { return self::stringifyArgument($item); }, $arguments ); $expression = $function . ':(' . implode(', ', $stringifiedItems) . ')'; return Expression::create($expression); } /** * Stringify an argument. * * @param Expression|bool|int|float|string|null $argument */ public static function stringifyArgument(Expression|bool|int|float|string|null $argument): string { if ($argument instanceof Expression) { return $argument->getValue(); } if (is_null($argument)) { return 'NULL'; } if (is_bool($argument)) { return $argument ? 'TRUE': 'FALSE'; } if (is_int($argument)) { return strval($argument); } if (is_float($argument)) { return strval($argument); } return '\'' . str_replace('\'', '\\\'', $argument) . '\''; } }