Regexp queries do not work with `libicu` extension
- Dominant language
- Python
- Stars
- 15.7k
- Forks
- 2.1k
- Avg merge
- 4d 21h
- Merged PRs (30d)
- 31
Description
I have an item/track with `grouping` set to `Daydreaming` in my SQLite database.
```sh
$ beet ls 'grouping:Daydreaming'
/Users/agross/The track.mp3
```
If I use a simple regex to query the same field value, I expect beet to return the same track.
```sh
$ beet ls 'grouping::Daydreaming'
# no output
$ beet ls 'grouping::Daydreamin.'
# no output
```
I then tried a query from the docs.
```sh
beet list ':^$'
Traceback (most recent call last):
File "/opt/homebrew/bin/beet", line 8, in
sys.exit(main())
~~~~^^
File "/opt/homebrew/lib/python3.13/site-packages/beets/ui/__init__.py", line 1865, in main
_raw_main(args)
~~~~~~~~~^^^^^^
File "/opt/homebrew/lib/python3.13/site-packages/beets/ui/__init__.py", line 1852, in _raw_main
subcommand.func(lib, suboptions, subargs)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.13/site-packages/beets/ui/commands.py", line 1599, in list_func
list_items(lib, decargs(args), opts.album)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.13/site-packages/beets/ui/commands.py", line 1594, in list_items
for item in lib.items(query):
~~~~~~~~~^^^^^^^
File "/opt/homebrew/lib/python3.13/site-packages/beets/library.py", line 1661, in items
return self._fetch(Item, query, sort or self.get_default_item_sort())
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.13/site-packages/beets/library.py", line 1639, in _fetch
return super()._fetch(model_cls, query, sort)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.13/site-packages/beets/dbcore/db.py", line 1246, in _fetch
rows = tx.query(sql, subvals)
File "/opt/homebrew/lib/python3.13/site-packages/beets/dbcore/db.py", line 954, in query
cursor = self.db._connection().execute(statement, subvals)
sqlite3.OperationalError: ICU error: uregex_open(): U_REGEX_MISMATCHED_PAREN
```
### Problem
Running this command in verbose (`-vv`) mode:
```sh
$ beet -vv list 'grouping::Daydreamin.'
user configuration: /Users/agross/.config/beets/config.yaml
data directory: /Users/agross/.config/beets
plugin paths:
artresizer: method is ImageMagick
fetchart: google: Disabling art source due to missing key
fetchart: lastfm: Disabling art source due to missing key
inline: adding item field albumartist_no_va
inline: adding item field maybe_disc
inline: adding item field maybe_soundtrack
Sending event: pluginload
SELECT * FROM items WHERE id = ?
[0]
library database: /Users/agross/.config/beets/library.db
library directory: /Users/agross/Nextcloud/Music
Sending event: library_opened
loadext: loading extension /Users/agross/.config/beets/libicu
Parsed query: AndQuery([RegexpQuery('grouping', re.compile('Daydreamin.'), fast=True)])
Parsed sort: NullSort()
Sending event: cli_exit
```
### Setup
* OS: macOS
* beets version 2.0.0
* Python version 3.13.5
* Turning off plugins made problem go away (yes/no): yes
I usually use these plugins: badfiles, discogs, embedart, fetchart, hook, importadded, info, inline, loadext, play, scrub, zero
With `loadext` disabled, the query works. I need the extension because I have tracks with non-ASCII characters.
```yaml
loadext:
- libicu
```
Contributor guide
Assessment
This issue has not been assessed yet.