1: <?php
2:
3: declare(strict_types=1);
4:
5: namespace Atk4\Data\Persistence\Sql\Sqlite;
6:
7: trait ExpressionTrait
8: {
9: #[\Override]
10: protected function updateRenderBeforeExecute(array $render): array
11: {
12: [$sql, $params] = $render;
13:
14: $sql = preg_replace_callback(
15: '~' . self::QUOTED_TOKEN_REGEX . '\K|:\w+~',
16: static function ($matches) use ($params) {
17: if ($matches[0] === '') {
18: return '';
19: }
20:
21: $sql = $matches[0];
22: $value = $params[$sql];
23:
24: // emulate bind param support for float type
25: // TODO open php-src feature request
26: if (is_int($value)) {
27: $sql = 'cast(' . $sql . ' as INTEGER)';
28: } elseif (is_float($value)) {
29: $sql = 'cast(' . $sql . ' as DOUBLE PRECISION)';
30: }
31:
32: return $sql;
33: },
34: $sql
35: );
36:
37: return parent::updateRenderBeforeExecute([$sql, $params]);
38: }
39: }
40: