mirror of https://github.com/usememos/memos.git
Fixes #5612, #5611 Root cause: PostgreSQL's jsonb_array_elements() throws errors when the 'tokens' key is missing or malformed, while SQLite/MySQL return NULL gracefully. This caused: - 502 errors when creating admin after v0.25.3 → v0.26.0 upgrade - Settings not persisting and users unable to stay logged in Changes to store/db/postgres/user_setting.go: - Remove strict JSONB operations from GetUserByPATHash query - Fetch all PERSONAL_ACCESS_TOKENS rows and filter in Go - Skip malformed/invalid JSON rows with continue (error recovery) - Match SQLite/MySQL's forgiving error handling New integration tests (store/test/user_setting_test.go): - TestUserSettingGetUserByPATHashNoTokensKey - TestUserSettingGetUserByPATHashEmptyTokensArray - TestUserSettingGetUserByPATHashWithOtherUsers New PostgreSQL-specific tests (store/db/postgres/user_setting_test.go): - TestGetUserByPATHashWithMissingData (comprehensive edge cases) - TestGetUserByPATHashPerformance (100+ users) - TestUpsertUserSetting (basic upsert) Test coverage: ✅ Missing PERSONAL_ACCESS_TOKENS key ✅ Empty/malformed JSON data ✅ Multiple users with mixed valid/invalid data ✅ Performance with 100+ users ✅ Error recovery without crashes Benefits: - No database migration required (TEXT column works fine) - Backward compatible with v0.25.3 upgrades - Handles missing/corrupt data gracefully - Consistent behavior across all database drivers |
||
|---|---|---|
| .. | ||
| README.md | ||
| activity_test.go | ||
| attachment_filter_test.go | ||
| attachment_test.go | ||
| containers.go | ||
| filter_helpers_test.go | ||
| idp_test.go | ||
| inbox_test.go | ||
| instance_setting_test.go | ||
| main_test.go | ||
| memo_filter_test.go | ||
| memo_relation_test.go | ||
| memo_test.go | ||
| migrator_test.go | ||
| reaction_test.go | ||
| store.go | ||
| user_setting_test.go | ||
| user_test.go | ||
README.md
Store tests
How to test store with MySQL?
- Create a database in your MySQL server.
- Run the following command with two environment variables set:
DRIVER=mysql DSN=root@/memos_test go test -v ./test/store/...
DRIVERshould be set tomysql.DSNshould be set to the DSN of your MySQL server.