memos/store/test
Johnny cbf46a2988 feat(filter): add CEL list comprehension support for tag filtering
Add support for CEL exists() comprehension with startsWith, endsWith, and
contains predicates to enable powerful tag filtering patterns.

Features:
- tags.exists(t, t.startsWith("prefix")) - Match tags by prefix
- tags.exists(t, t.endsWith("suffix")) - Match tags by suffix
- tags.exists(t, t.contains("substring")) - Match tags by substring
- Negation: !tags.exists(...) to exclude matching tags
- Works with all operators (AND, OR, NOT) and other filters

Implementation:
- Added ListComprehensionCondition IR type for comprehension expressions
- Parser detects exists() macro and extracts predicates
- Renderer generates optimized SQL for SQLite, MySQL, PostgreSQL
- Proper NULL/empty array handling across all database dialects
- Helper functions reduce code duplication

Design decisions:
- Only exists() supported (all() rejected at parse time with clear error)
- Only simple predicates (matches() excluded to avoid regex complexity)
- Fail-fast validation with helpful error messages

Tests:
- Comprehensive test suite covering all predicates and edge cases
- Tests for NULL/empty arrays, combined filters, negation
- Real-world use case test for Issue #5480 (archive workflow)
- All tests pass on SQLite, MySQL, PostgreSQL

Closes #5480
2026-01-17 12:36:39 +08:00
..
Dockerfile test: improve migration tests stability and maintainability 2026-01-07 23:04:12 +08:00
README.md chore: move store test 2025-03-17 21:51:02 +08:00
activity_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
attachment_filter_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
attachment_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
containers.go fix: resolve data races in store tests with atomic operations 2026-01-14 23:37:12 +08:00
filter_helpers_test.go chore: add store tests (#5397) 2025-12-31 21:26:35 +08:00
idp_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
inbox_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
instance_setting_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
main_test.go fix: resolve linter warning and cache race condition 2026-01-14 23:50:37 +08:00
memo_filter_comprehension_test.go feat(filter): add CEL list comprehension support for tag filtering 2026-01-17 12:36:39 +08:00
memo_filter_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
memo_relation_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
memo_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
migrator_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
reaction_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
store.go chore: add store tests (#5397) 2025-12-31 21:26:35 +08:00
user_setting_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00
user_test.go perf: enable parallel execution for all store tests 2026-01-14 22:44:19 +08:00

README.md

Store tests

How to test store with MySQL?

  1. Create a database in your MySQL server.
  2. Run the following command with two environment variables set:
DRIVER=mysql DSN=root@/memos_test go test -v ./test/store/...
  • DRIVER should be set to mysql.
  • DSN should be set to the DSN of your MySQL server.