Work around ghc 9.10's extra newline in error output. https://gitlab.haskell.org/ghc/ghc/-/issues/25116
161 lines
5.1 KiB
Plaintext
161 lines
5.1 KiB
Plaintext
# * expr: (boolean) queries
|
|
|
|
<
|
|
2022-01-01 Transaction 1 ; transactiontag:A
|
|
assets:bank:main -1 ; A comment
|
|
expenses:food
|
|
|
|
2022-01-01 Transaction 2 ; transactiontag:A
|
|
assets:bank:main -1
|
|
assets:bank:secondary -1 ; atag:a
|
|
expenses:food
|
|
|
|
2022-01-01 Transaction 3 ; transactiontag:B
|
|
assets:bank:main -1 ; A comment
|
|
expenses:drink
|
|
|
|
2022-01-01 Transaction 4 ; transactiontag:B
|
|
assets:bank:main -1 ; A comment
|
|
expenses:food 2
|
|
expenses:drink
|
|
|
|
# ** 1. Simple queries can be directly embedded in expression queries
|
|
$ hledger -f - print expr:"tag:transactiontag=B"
|
|
2022-01-01 Transaction 3 ; transactiontag:B
|
|
assets:bank:main -1 ; A comment
|
|
expenses:drink
|
|
|
|
2022-01-01 Transaction 4 ; transactiontag:B
|
|
assets:bank:main -1 ; A comment
|
|
expenses:food 2
|
|
expenses:drink
|
|
|
|
>=
|
|
|
|
# ** 2. Simple queries can be encased in an arbitrary number of parentheses
|
|
$ hledger -f - print "expr:(((tag:transactiontag=B)))"
|
|
2022-01-01 Transaction 3 ; transactiontag:B
|
|
assets:bank:main -1 ; A comment
|
|
expenses:drink
|
|
|
|
2022-01-01 Transaction 4 ; transactiontag:B
|
|
assets:bank:main -1 ; A comment
|
|
expenses:food 2
|
|
expenses:drink
|
|
|
|
>=
|
|
|
|
# ** 3. Simple boolean AND query works
|
|
$ hledger -f - print expr:"tag:'transactiontag=B' AND desc:3"
|
|
2022-01-01 Transaction 3 ; transactiontag:B
|
|
assets:bank:main -1 ; A comment
|
|
expenses:drink
|
|
|
|
>=
|
|
|
|
# ** 4. AND + OR works without parentheses
|
|
$ hledger -f - print expr:"tag:'transactiontag=B' AND desc:3 OR desc:1"
|
|
2022-01-01 Transaction 1 ; transactiontag:A
|
|
assets:bank:main -1 ; A comment
|
|
expenses:food
|
|
|
|
2022-01-01 Transaction 3 ; transactiontag:B
|
|
assets:bank:main -1 ; A comment
|
|
expenses:drink
|
|
|
|
>=
|
|
|
|
# ** 5. Unnecessary NOT + OR works without parentheses
|
|
$ hledger -f - print expr:"NOT tag:'transactiontag=B' OR desc:1"
|
|
2022-01-01 Transaction 1 ; transactiontag:A
|
|
assets:bank:main -1 ; A comment
|
|
expenses:food
|
|
|
|
2022-01-01 Transaction 2 ; transactiontag:A
|
|
assets:bank:main -1
|
|
assets:bank:secondary -1 ; atag:a
|
|
expenses:food
|
|
|
|
>=
|
|
|
|
# ** 6. Necessary NOT + OR works without parentheses
|
|
$ hledger -f - print expr:"NOT tag:'transactiontag=B' OR desc:4"
|
|
2022-01-01 Transaction 1 ; transactiontag:A
|
|
assets:bank:main -1 ; A comment
|
|
expenses:food
|
|
|
|
2022-01-01 Transaction 2 ; transactiontag:A
|
|
assets:bank:main -1
|
|
assets:bank:secondary -1 ; atag:a
|
|
expenses:food
|
|
|
|
2022-01-01 Transaction 4 ; transactiontag:B
|
|
assets:bank:main -1 ; A comment
|
|
expenses:food 2
|
|
expenses:drink
|
|
|
|
>=
|
|
|
|
# ** 7. Boolean expression query keywords are case insensitive
|
|
$ hledger -f - print expr:"NoT tag:'transactiontag=B' OR desc:4"
|
|
2022-01-01 Transaction 1 ; transactiontag:A
|
|
assets:bank:main -1 ; A comment
|
|
expenses:food
|
|
|
|
2022-01-01 Transaction 2 ; transactiontag:A
|
|
assets:bank:main -1
|
|
assets:bank:secondary -1 ; atag:a
|
|
expenses:food
|
|
|
|
2022-01-01 Transaction 4 ; transactiontag:B
|
|
assets:bank:main -1 ; A comment
|
|
expenses:food 2
|
|
expenses:drink
|
|
|
|
>=
|
|
|
|
# ** 8. Lower case not is not confused with existing not: queries
|
|
$ hledger -f - print expr:"not tag:transactiontag=B"
|
|
2022-01-01 Transaction 1 ; transactiontag:A
|
|
assets:bank:main -1 ; A comment
|
|
expenses:food
|
|
|
|
2022-01-01 Transaction 2 ; transactiontag:A
|
|
assets:bank:main -1
|
|
assets:bank:secondary -1 ; atag:a
|
|
expenses:food
|
|
|
|
>=
|
|
|
|
# ** 9. Having parentheses directly follow 'not' sees 'not' as part of a query.
|
|
$ hledger -f - print expr:"not(tag:transactiontag=B)"
|
|
>2 /hledger: Error: This regular expression is invalid or unsupported, please correct it:
|
|
not\(tag:transactiontag=B
|
|
/
|
|
>=1
|
|
# XXX regex needed for error tests with ghc 9.10, https://gitlab.haskell.org/ghc/ghc/-/issues/25116
|
|
|
|
# ** 10. ... whereas parentheses with a space between 'not' and '(' is fine.
|
|
$ hledger -f - print expr:"not (tag:transactiontag=B)"
|
|
2022-01-01 Transaction 1 ; transactiontag:A
|
|
assets:bank:main -1 ; A comment
|
|
expenses:food
|
|
|
|
2022-01-01 Transaction 2 ; transactiontag:A
|
|
assets:bank:main -1
|
|
assets:bank:secondary -1 ; atag:a
|
|
expenses:food
|
|
|
|
>=
|
|
|
|
# ** 11. With expr:, it's possible for a query (with OR) to specify multiple different date periods.
|
|
# This is problematic for report semantics in several ways. For example,
|
|
# expr:'(date:2023 AND drinks) OR (date:2024 AND food)' produces two disjoint result sets, and
|
|
# expr:'date:feb or date:may or date:nov' produces three disjoint report periods with holes between them.
|
|
# Can all of our reports handle holes properly, calculate historical starting balances properly, etc ?
|
|
# For now the answer is no and therefore OR-ing of date periods must be disallowed. (#2178)
|
|
$ hledger -f- reg expr:'date:2023 OR date:2024'
|
|
>2 /using date: in OR expressions is not supported/
|
|
>=1
|
|
|