beetbox / beetbox/beets

Regexp queries do not work with `libicu` extension

Open
#5,923 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.