<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl.xml"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>Changes in AbstractCollection.php</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2025</copyright>
    <generator>Java</generator><item>
        <title>9369b4a991666bc911474806b106d8958e79f4c1 - SearchIndex: rector, phpcs, type hint fixes</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/Search/Collection/AbstractCollection.php#9369b4a991666bc911474806b106d8958e79f4c1</link>
        <description>SearchIndex: rector, phpcs, type hint fixes

            List of files:
            /dokuwiki/inc/Search/Collection/AbstractCollection.php</description>
        <pubDate>Wed, 08 Apr 2026 18:30:08 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>21fbd01b3c3eea88b767376b7b158f31f0f63127 - SearchIndex: add integrity checking to Collection architecture</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/Search/Collection/AbstractCollection.php#21fbd01b3c3eea88b767376b7b158f31f0f63127</link>
        <description>SearchIndex: add integrity checking to Collection architectureAdd checkIntegrity() to AbstractCollection and DirectCollection thatverifies paired indexes have matching line counts (token==frequency,entity==reverse, entity==token for direct collections). ThrowsIndexIntegrityException on the first inconsistency found.Add Countable interface to AbstractIndex with count() implementationsin MemoryIndex and FileIndex. Add Indexer::checkIntegrity() andIndexer::isIndexEmpty() to orchestrate checks across all collections.Update infoutils.php to use the new Indexer API instead of the oldFulltextIndex/MetadataIndex classes.Fix range(1, 0) bug in three places that produced [1, 0] instead ofan empty array when split-by-length indexes were empty.

            List of files:
            /dokuwiki/inc/Search/Collection/AbstractCollection.php</description>
        <pubDate>Tue, 07 Apr 2026 16:09:22 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>6734bb8cef71e8b4af23e627d4db5430304d55a2 - SearchIndex: rewrite MetadataSearch to use Collection classes</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/Search/Collection/AbstractCollection.php#6734bb8cef71e8b4af23e627d4db5430304d55a2</link>
        <description>SearchIndex: rewrite MetadataSearch to use Collection classesReplace MetadataIndex usage in MetadataSearch with the new Collection/Indexarchitecture. This completes the read-path migration so data written by theCollection-based Indexer is read back correctly using TupleOps tuple format.Generalize FrequencyCollectionSearch into CollectionSearch that works with anyAbstractCollection type (Frequency, Lookup, Direct) and handles bothsplit-by-length and non-split index layouts transparently. DirectCollectionparticipates via resolveTokenFrequencies() which maps token RID = entity RID.Key changes:- AbstractCollection gains isSplitByLength(), resolveTokenFrequencies(),  getEntitiesWithData(), and groupToSuffix() with validation- Index groups are now int (0 = non-split, positive = token length)- CollectionSearch provides both addTerm()/execute() for fulltext and  lookup() for metadata-style search (exact/wildcard/callback)- MetadataSearch delegates entirely to collection APIs- Shared filterPages() replaces duplicated page filtering logic- All callers updated from MetadataIndex to MetadataSearch- Tests moved to Search namespace with full coverage for new APIs

            List of files:
            /dokuwiki/inc/Search/Collection/AbstractCollection.php</description>
        <pubDate>Tue, 07 Apr 2026 13:33:54 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>83b3acccb42578eaa33f84e6b13612436320090b - SearchIndex: rewrite Indexer to use Collection classes</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/Search/Collection/AbstractCollection.php#83b3acccb42578eaa33f84e6b13612436320090b</link>
        <description>SearchIndex: rewrite Indexer to use Collection classesReplace the intermediate #2943 classes (FulltextIndex, MetadataIndex)with the new Collection-based architecture. The Indexer is now a thinstateless orchestrator that delegates all index work to collections.Key changes:- Indexer no longer extends AbstractIndex; page name passed to methods- addPage/deletePage/clear use PageTitleCollection,  PageFulltextCollection, and PageMetaCollection- New PageMetaCollection replaces separate ReferencesCollection and  MediaCollection with a single class that handles arbitrary metadata  keys dynamically- Shared writable FileIndex(&apos;page&apos;) passed to all collections- Logger callback replaces verbose parameter- Methods return void instead of bool- Index classes implement IteratorAggregate for clean data access- Indexer tests consolidated into namespaced IndexerTest.php- All callers updated to new stateless API

            List of files:
            /dokuwiki/inc/Search/Collection/AbstractCollection.php</description>
        <pubDate>Mon, 06 Apr 2026 10:31:11 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>95b16223691931fa8086866a2b318bc319b06a8f - SearchIndex: accept pre-instantiated entity and token indexes in collections</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/Search/Collection/AbstractCollection.php#95b16223691931fa8086866a2b318bc319b06a8f</link>
        <description>SearchIndex: accept pre-instantiated entity and token indexes in collectionsAllow passing AbstractIndex objects for the entity and tokenparameters instead of string names. This enables sharing indexinstances between collections for efficiency.

            List of files:
            /dokuwiki/inc/Search/Collection/AbstractCollection.php</description>
        <pubDate>Sun, 05 Apr 2026 19:20:29 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>c66b5ec65fd5aa2f1037d2be542b49297f3aac0e - SearchIndex: rewrite Lock as static registry with reference counting</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/Search/Collection/AbstractCollection.php#c66b5ec65fd5aa2f1037d2be542b49297f3aac0e</link>
        <description>SearchIndex: rewrite Lock as static registry with reference countingReplace the instance-based Lock class with a static registry thattracks held locks per-process with reference counting. This solvesthree problems:- Split indexes (w3, w4, ...) share a single lock name and now  coordinate naturally via the registry- Multiple callers can acquire the same lock without conflict- Indexes enforce their own writability through lock()/unlock()  methods on AbstractIndexThe Lock registry manages both the filesystem lock (mkdir) and thein-process tracking. The first acquire creates the directory, subsequentacquires increment the refcount. Release decrements, and only removesthe directory when the count reaches zero.Note: I am not sure if implementing this as a static object is a greatidea or if we should pass an instance through the collection to theindexes...

            List of files:
            /dokuwiki/inc/Search/Collection/AbstractCollection.php</description>
        <pubDate>Sun, 05 Apr 2026 17:42:37 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>0a9fafedcd557e5d92cb85946a8e9a1dadb8d639 - SearchIndex: fix lock() releasing foreign locks on partial failure</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/Search/Collection/AbstractCollection.php#0a9fafedcd557e5d92cb85946a8e9a1dadb8d639</link>
        <description>SearchIndex: fix lock() releasing foreign locks on partial failureTrack successfully acquired locks in $lockedIndexes so thatunlock() only releases locks this collection actually holds.Previously, a failed lock acquisition would call unlock() whichreleased all index locks including ones never acquired, potentiallyreleasing locks held by other processes.

            List of files:
            /dokuwiki/inc/Search/Collection/AbstractCollection.php</description>
        <pubDate>Sun, 05 Apr 2026 14:09:16 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>d92c078c66fe0feb3beeeb1a383e15ca031fb4f8 - SearchIndex: add DirectCollection for 1:1 entity-token mappings</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/Search/Collection/AbstractCollection.php#d92c078c66fe0feb3beeeb1a383e15ca031fb4f8</link>
        <description>SearchIndex: add DirectCollection for 1:1 entity-token mappingsIntroduce DirectCollection as a third collection type alongsideFrequencyCollection and LookupCollection. Direct collections storeexactly one token per entity at the entity&apos;s position in the tokenindex (entity.RID === token.RID), with no frequency or reverse indexes.AbstractCollection now accepts optional frequency/reverse index names(default to &apos;&apos;) and skips locking empty index names.Adds PageTitleCollection as the first concrete direct collectionfor the page -&gt; title mapping.

            List of files:
            /dokuwiki/inc/Search/Collection/AbstractCollection.php</description>
        <pubDate>Sun, 05 Apr 2026 14:00:34 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>f2bbffb509f37291c31c023167b8aeb383079d6d - SearchIndex: extract Collection base class hierarchy</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/Search/Collection/AbstractCollection.php#f2bbffb509f37291c31c023167b8aeb383079d6d</link>
        <description>SearchIndex: extract Collection base class hierarchyIntroduce AbstractCollection as the shared base for all indexcollections, with FrequencyCollection and LookupCollection asthe two abstract subclasses differing only in how tokens arecounted (frequency vs dedup).Key design decisions:- splitByLength is a constructor parameter on AbstractCollection  controlling whether token/frequency indexes use length-based  file splitting. This is independent of the collection type.- The reverse index format is self-describing: entries with *  have a group prefix (split), entries without don&apos;t (non-split).  No branching needed in parse/format methods.- addEntity, resolveTokens, updateIndexes, and reverse index  handling all live in AbstractCollection. Subclasses only  implement countTokens().Concrete collections: PageFulltextCollection (frequency, split),MediaCollection and ReferencesCollection (lookup, non-split).Renames FulltextCollection -&gt; PageFulltextCollection andFulltextCollectionSearch -&gt; FrequencyCollectionSearch.

            List of files:
            /dokuwiki/inc/Search/Collection/AbstractCollection.php</description>
        <pubDate>Sun, 05 Apr 2026 13:35:39 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
</channel>
</rss>
