Check a filter spec against the category's filter columns (filterColumns()) and return
it with every FilterName in the register's spelling, or throw a MastrValidationError.
The register silently ignores what it doesn't know, so these would otherwise give a wrong
count with exit 0:
a FilterName that is not a column of the category: the unfiltered set (live 2026-10-05:
energieträger~eq~'2495' gave all 9 562 366 units, Energieträger on gasverbrauch
all 937). A name that differs from a column only in case is written the register's way
(the register's names don't collide in case); any other unknown name — __proto__
included — is rejected with up to three close names;
for eq/neq on a dropdown column, a value that is not one of its codes: an unknown
code gives 0 rows, a label ('Wind') or junk in a comma list {"Error":true}. A label
is named with its code;
null/nn on a number, dropdown or boolean column, which the register answers with
{"Error":true} (they work on text columns).
spec must already pass filterProblem (the client normalises and checks it first).
Check a filter spec against the category's filter columns (
filterColumns()) and return it with every FilterName in the register's spelling, or throw a MastrValidationError. The register silently ignores what it doesn't know, so these would otherwise give a wrong count with exit 0:energieträger~eq~'2495'gave all 9 562 366 units,Energieträgerongasverbrauchall 937). A name that differs from a column only in case is written the register's way (the register's names don't collide in case); any other unknown name —__proto__included — is rejected with up to three close names;eq/neqon a dropdown column, a value that is not one of its codes: an unknown code gives 0 rows, a label ('Wind') or junk in a comma list{"Error":true}. A label is named with its code;null/nnon a number, dropdown or boolean column, which the register answers with{"Error":true}(they work on text columns).specmust already pass filterProblem (the client normalises and checks it first).