• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

heimrichhannot / contao-utils-bundle / 38577605491

14 Oct 2026 02:06PM UTC coverage: 84.066% (+4.2%) from 79.825%
38577605491

push

github

web-flow
Add search vector field (#108)

* add search vector field

* remove build in stemmer, add preparation for snowball stemmer

* enhance tokenizer, info about default locate

* adjust comments

* update language loading

* add normalizer

* fix issues with contao 5.3

* drop 4.13 support

* make indexing async

* update test data

* apply rector

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* address review comments

- Declare an explicit ESCAPE '!' for the LIKE patterns, so escaped wildcards
  match literally on every platform, and test it against stored rows
- Add the missing imports to the README configuration example
- Complete the locale description of BuildSearchVectorEvent
- Replace Contao's internal LegacyLocaleSwitcher in the indexer test with a
  test double

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* move search vector field documentation to docs

Keep a short example in the README like for the other fields and move the
full documentation to docs/dca_fields/search_vector_field.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* add createCondition method

* reject several search vector fields per table

A second registration for the same table silently replaced the first one.
Now loading the DCA throws an exception that names the conflicting fields.
Loading a DCA several times in one process, each time registering the field
once, is still allowed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* address review comments on indexing

- Lock the record while its vector is rebuilt (SELECT ... FOR UPDATE in a
  transaction), so concurrent rebuilds cannot overwrite a newer vector;
  requires Doctrine DBAL 3.8
- Expand Contao 5.7 virtual fields before resolving the configured fields
- Reject invalid --id values in the rebuild command instead of rebuilding
  the whole table
- Replace the deprecated Connection::quoteIdentifier() with the platform's
  quoteSingleIdentifier() and report Doctrine deprecat... (continued)

392 of 407 new or added lines in 16 files covered. (96.31%)

1588 of 1889 relevant lines covered (84.07%)

8.9 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

75.0
/src/Event/BuildSearchVectorEvent.php
1
<?php
2

3
namespace HeimrichHannot\UtilsBundle\Event;
4

5
use Symfony\Contracts\EventDispatcher\Event;
6

7
/**
8
 * Dispatched before a search vector is tokenized and stored.
9
 *
10
 * Use it to add values that are not stored in a column of the record, for example tags or other relations kept in a
11
 * separate table, or to remove values that should not be searchable.
12
 */
13
class BuildSearchVectorEvent extends Event
14
{
15
    /**
16
     * @param array<string, mixed> $row    The raw database row
17
     * @param list<string>         $values The formatted, not yet tokenized values. Each value stays a separate
18
     *                                     section of the vector, so a quoted phrase never matches across two values.
19
     * @param string               $locale The language of the record. The values have been resolved in this language,
20
     *                                     and the values of the vector are normalized and stemmed in it as well.
21
     */
22
    public function __construct(
23
        public readonly string $table,
24
        public readonly array $row,
25
        private array $values,
26
        public readonly string $locale,
27
    ) {}
16 ✔
28

29
    /**
30
     * @return list<string>
31
     */
32
    public function getValues(): array
33
    {
34
        return $this->values;
16 ✔
35
    }
36

37
    /**
38
     * @param list<string> $values
39
     */
40
    public function setValues(array $values): void
41
    {
NEW
42
        $this->values = \array_values($values);
×
43
    }
44

45
    public function addValue(string $value): void
46
    {
47
        $this->values[] = $value;
1 ✔
48
    }
49
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc