v1.0.0b50
Pre-releaseFixed
-
release_request_connectionnow issues an explicitconn.rollback()before returning the connection to the pool. Otherwise an implicit transaction opened by a priorSELECTon the pool fallback path stays alive, holding avirtualxidthat blocksCREATE INDEX CONCURRENTLY. Companion fix to bluedynamics/zodb-pgjsonb#58 (the storage-conn path). Closes #118. -
Suggested Indexes UI detects already-applied suggestions with mixed-case field names (e.g.
Language) by matching index names case-insensitively — PostgreSQL folds unquoted identifiers to lowercase. Also strengthens expression normalization (whitespace around->>, iterative paren collapse, WHERE-anchored extraction) so generated and PG-storedindexdefforms compare equal.apply_indexis now idempotent when a valid index with the same name already exists — returns success no-op instead of propagating theDuplicateTableerror. Closes #119. -
Tika enqueue: resolve Dexterity
NamedBlobFile/NamedBlobImagewrapper OIDs via a second-hop lookup throughobject_state, so the queue receives jobs for modern Dexterity File/Image content. Previously_enqueue_tika_jobs()only looked up the OIDs it found in the content's state — which are the wrapper OIDs, not the innerZODB.blob.BlobOIDs. The direct lookup returned zero rows and the enqueue silently skipped. Flat-state content (legacy/Archetypes-style, where the content state carries a directZODB.blob.Blob@ref) is unchanged. Closes #115. -
_handle_uuidnow accepts list/tuple queries (uses= ANY(...)), matching_handle_fieldsemantics. Previously a list query such ascatalog.searchResults(UID=['f852...'])was stringified asstr(['f852...'])→"['f852...']"and the JSONB->>comparison never matched, so@@getVocabulary?name=plone.app.vocabularies.Catalogwith aplone.app.querystring.operation.list.containscriterion on UID returned an empty vocabulary. -
catalog._catalog.getIndex(name)now returns aPGIndexwrapper with PG-backed_indexanduniqueValues(), same ascatalog.Indexes[name]. Previously it returned the raw ZCatalog index with empty BTrees, which broke:plone.app.vocabularies.KeywordsVocabulary(empty Subject/Tags dropdowns).Products.CMFPlone.browser.search.Search.types_list()(empty "Item type" filter in@@search).plone.app.event.setuphandlers(DateIndex detection).- Other Plone code paths that bypass
catalog.Indexes[name].
Special indexes registered with
idx_key=None(SearchableText, path, effectiveRange) are returned unwrapped so dedicated columns are used for them.