Skip to content

Releases: bluedynamics/plone-pgcatalog

v1.0.0b4

16 Feb 13:32
152bdf8

Choose a tag to compare

v1.0.0b4 Pre-release
Pre-release

What's Changed

Added

  • Language-aware full-text search: SearchableText now uses per-object
    language for stemming. The pgcatalog_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_tsquery for proper word-level matching.

Full Changelog: v1.0.0b3...v1.0.0b4

v1.0.0b3

14 Feb 11:51
6eb5180

Choose a tag to compare

v1.0.0b3 Pre-release
Pre-release
  • Snapshot consistency: Catalog read queries now route through the ZODB
    storage instance's PG connection, sharing the same REPEATABLE READ snapshot
    as load() 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
      from context._p_jar._storage.pg_connection.
    • PlonePGCatalogTool._get_pg_read_connection() — prefers storage
      connection, falls back to pool for non-ZODB contexts (tests, scripts).

    CatalogSearchResults now accepts a conn parameter (was pool) for
    lazy idx batch loading, using the same connection directly.

Full Changelog: v1.0.0b2...v1.0.0b3

v1.0.0b2

14 Feb 01:33
d2a5440

Choose a tag to compare

v1.0.0b2 Pre-release
Pre-release

What's Changed

Security

  • SQL identifier validation: Added validate_identifier() in columns.py
    to reject unsafe SQL identifiers. All idx_key values in IndexRegistry
    and date_attr in DateRecurringIndexTranslator are now validated.

  • Access control declarations: Added declareProtected for management
    methods (refreshCatalog, reindexIndex, clearFindAndRebuild) and
    declarePrivate for unrestrictedSearchResults on PlonePGCatalogTool.

  • 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 for IPGIndexTranslator implementations.

Fixed

  • Savepoint-aware pending store: The thread-local pending catalog data
    now participates in ZODB's transaction lifecycle via ISavepointDataManager.
    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

10 Feb 16:34
77840ff

Choose a tag to compare

Pre-release