Releases: bluedynamics/plone-pgcatalog
v1.0.0b4
What's Changed
Added
-
Language-aware full-text search: SearchableText now uses per-object
language for stemming. Thepgcatalog_lang_to_regconfig()PL/pgSQL function
maps Plone language codes (ISO 639-1, 30 languages) to PostgreSQL text search
configurations (e.g."de"→german). Falls back to'simple'for
unmapped or missing languages. Non-multilingual sites are unaffected.Python mirror:
columns.language_to_regconfig()for testing/validation. -
Title/Description text search: Title and Description queries now use
tsvector word-level matching instead of exact JSONB containment.
catalog(Title="Hello")now correctly matches"Hello World".
Backed by GIN expression indexes with'simple'config (no stemming). -
Automatic addon ZCTextIndex support: Addon-registered ZCTextIndex fields
are automatically discovered at startup. GIN expression indexes are created
dynamically by_ensure_text_indexes(), and queries use tsvector matching --
zero addon code needed.
Fixed
- Title/Description query broken: Previously, querying Title or Description
as ZCTextIndex used JSONB exact containment (idx @> '{"Title":"Hello"}'),
which only matched exact values, not words within text. Now uses
to_tsvector/plainto_tsqueryfor proper word-level matching.
Full Changelog: v1.0.0b3...v1.0.0b4
v1.0.0b3
-
Snapshot consistency: Catalog read queries now route through the ZODB
storage instance's PG connection, sharing the same REPEATABLE READ snapshot
asload()calls. Previously, catalog queries used a separate autocommit
connection that could see a different database state than ZODB object loads
within the same request.New internal API:
config.get_storage_connection(context)— retrieves the PG connection
fromcontext._p_jar._storage.pg_connection.PlonePGCatalogTool._get_pg_read_connection()— prefers storage
connection, falls back to pool for non-ZODB contexts (tests, scripts).
CatalogSearchResultsnow accepts aconnparameter (waspool) for
lazy idx batch loading, using the same connection directly.
Full Changelog: v1.0.0b2...v1.0.0b3
v1.0.0b2
What's Changed
Security
-
SQL identifier validation: Added
validate_identifier()incolumns.py
to reject unsafe SQL identifiers. Allidx_keyvalues inIndexRegistry
anddate_attrinDateRecurringIndexTranslatorare now validated. -
Access control declarations: Added
declareProtectedfor management
methods (refreshCatalog,reindexIndex,clearFindAndRebuild) and
declarePrivateforunrestrictedSearchResultsonPlonePGCatalogTool. -
API safety: Renamed
execute_query()to_execute_query()to mark as
internal API. Capped path query list size to 100 (DoS prevention).
Documented security contract forIPGIndexTranslatorimplementations.
Fixed
- Savepoint-aware pending store: The thread-local pending catalog data
now participates in ZODB's transaction lifecycle viaISavepointDataManager.
Fixes two bugs: pending data not reverting on savepoint rollback, and
stale pending data leaking across transactions after abort.
Full Changelog: 1.0.0b1...v1.0.0b2
1.0.0b1 - Initial release
Initial release
Full Changelog: https://github.com/bluedynamics/plone-pgcatalog/commits/1.0.0b1