AmberDB

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN


        - [PARTIAL RECORD UPDATES & GRANULAR FIELD OPERATIONS] Direct Field Mutation:
          * update_field($table, $id, ...): Updates a single block value or repeating child item without full record rewrite:
            - Fixed schema blocks: accepts symbolic block name (e.g. "price") or numeric block index (e.g. 2).
            - Repeating items: supports updating child items via id => $id, $item or pos => $idx, $item.
            - Validates and normalizes field types via enc_field.
            - Diff no-op guard: returns immediately if field value is unchanged.
            - Clearing/reset: accepts undef or "" to reset field values according to schema type (e.g. 0 for numeric).
            - Safety guard: prevents modification of primary key ID (block 0).
            - Full transactional consistency, Strict 2PL locking, L1 cache invalidation, and index update (search, match, facet, unique, sort, slug).
          * insert_field($table, $id, $item, %opts): Inserts a child item into repeating blocks (repeat_start):
            - Default append to end or positional insertion via pos => $idx (e.g. pos => 0 to prepend).
            - Duplicate child item ID protection: prevents duplicate entries if child ID already exists.
            - Automatically synchronizes summary repeat_ids fields.
          * delete_field($table, $id, %opts): Safely removes a child item from repeat blocks:
            - Mandatory explicit targeting: strictly requires id => $item_id or pos => $idx (eliminating ambiguity and collision between child IDs and block/item position indexes; bare numbers and arbitrary keys are rejected).
            - Guard against deleting fixed schema blocks (< repeat_start).
            - Automatically synchronizes summary repeat_ids fields.
          * Low-level binary primitives: Added bin_mod and bin_del for granular manipulation of 8-byte packed binary buffers.

        - [3-STREAM DUAL-TIER JUNK INDEXING ARCHITECTURE]
          * Separated indexing into three distinct streams: Base (all records without prefix), Tier A (A: prefix, active records), and Tier B (B: prefix, junk/passive records).
          * Replaced legacy asymmetric j: prefix with clean, symmetric A: and B: tiers.
          * Supports query modes A, B, AB, BA, and ALL/none, with query-level jnktype override and dynamic table_attr toggle.
          * Hardened transaction engine (WAL) rollback to maintain full 3-stream parity across Base, Tier A, and Tier B streams on insert, modify, and delete rollbacks.
          * Unified indexing methods (records_add/del, match_*, search_*, sort_*) with a direct $tier parameter, eliminating separate duplicate methods without extra helpers or aliases.
          * Renamed re-indexing script from bin/convert_dbstore.pl to bin/dbstore_reindex.pl for clarity.
          * NOTE: Upgrading to this architecture requires re-indexing existing tables via bin/dbstore_reindex.pl or AmberDB::Tools->set_index.

        - [BUG FIXES] Index Read Order & Direction:
          * Fixed read order regression in read_all, field_fetch, and table_keys: restored default descending order (N..1, newest records first) to fix pagination drift.
          * Added explicit dir => 'asc'|'desc' (alias order) option across read_all and field_fetch.

        - [STORAGE MIGRATION & UPGRADE INSTRUCTIONS FOR EXISTING DEPLOYMENTS]
          * Upgrading Existing Installations (< 5.25.0):
            - Existing deployments upgrading from prior AmberDB releases must migrate their database storage layout and formats using the unified amberdb_setup.pl utility:
                perl bin/amberdb_setup.pl --action=update-storage --dbase_dir=<path_to_dbase> --all
              Or check and apply full engine + storage updates:
                perl bin/amberdb_setup.pl --action=update --dbase_dir=<path_to_dbase>
            - Automated Migration Stages in v5.25.0:
              * Directory Migration (tables/ -> table/): Automatically merges files into standard 'table/' layout. If 'table/' already exists, files are merged safely; any name collisions are preserved and renamed with a date stamp (<basename>_<YYYY-...
              * Binary Record Format (ABR v5): Upgrades all legacy table formats (TSV, FlatDB, HTML entities) to native 5-byte magic packed binary records.
              * Secondary Index Rebuilding: Reconstructs and repacks all secondary indexes (.inx, .fld, .unq, .fac, .slg, .srt) for the dual-tier 3-stream indexing architecture.
              * Standard Directory Layout: Synchronizes and verifies all required runtime directories (table, schema, journal, lock, session, config, ramdisk) and stamps config/storage_version.json with 5.25.0.

        - [TEST SUITE & COMPATIBILITY]
          * Added dedicated test suite t/amberdb_migrate_5_25_conflict.t covering tables/ to table/ migration, date-stamped conflict resolution, and amberdb_setup.pl update-storage execution.
          * Added dedicated test suite t/amberdb_junk_tiered.t covering 3-stream dual-tier indexing (CRUD, transitions, hybrid modes, Tools rebuild).
          * Added dedicated test suite t/amberdb_read_order.t verifying default descending (N..1) read order and explicit direction flags.
          * Added dedicated test suite t/amberdb_inflate_deflate.t covering single/batch inflate, deflate, RDBM resolution, and repeat blocks.
          * Added dedicated test suite t/amberdb_field_ops.t covering update_field, insert_field, delete_field, and constraint guards.
          * Added dedicated test suite xt/amberdb_ramdisk.t covering physical RAM-disk operations, isolated under author tests (xt/) to ensure standard installation tests pass without pre-mounted RAM-disk filesystems.
          * Added dedicated test suite t/amberdb_schema_types.t covering all 9 schema types and type conversions.
          * Refactored t/amberdb_cache.t to comprehensively test L1 in-memory caching and persistent staging buffers.
          * Added default language ('gb') verification tests in t/amberdb_encapsulation.t and t/amberdb-locale_09_gb.t.
          * 100% test pass rate across all 57 standard installation test files (534 assertions) and extended author test suite (xt/).

5.24.1  2026-09-05
        - Standardized 'offset' pagination parameter with backward-compatible 'start' alias (read_all, field_fetch, search_table, field_filter, bin_decode, bin_crop, facet_menu).
        - Added 'update_id' and 'update_list' method aliases for modify_id and modify_list.
        - Fixed CPAN POD parsing error by adding =encoding utf8 to AmberDB::Locale.
        - Globalized POD documentation: converted code examples in non-locale modules to standard English ASCII.
        - Fixed POD list syntax in AmberDB::Base and eliminated whitespace warning in AmberDB.pm.
        - Added t/amberdb_offset_update_alias.t unit test suite.

5.24.0  2026-09-05
        - [BINARY RECORD SERIALIZATION ARCHITECTURE (ABR v5)] Native Pure Perl Binary Serialization:
          * Introduced high-performance native pure Perl binary record serialization format (ABR v5 / Format 5) replacing legacy delimiter and regex text serialization (db_encode / db_decode), aligning format versioning with historical eras (v1: 2003...
          * Zero CPAN Dependencies: Built strictly on core built-in Perl primitives (pack, unpack, substr, vec), completely eliminating version brittleness and security vulnerabilities associated with external serializers like Storable.
          * Magic Header Architecture: Prefixes binary records with a 5-byte magic sequence (\x00ABR\x05); null-byte prefix guarantees zero collision with legacy plain text or data strings.
          * Schema Type Coverage: Transparently maps all 9 AmberDB schema types into 1-byte typed nodes: UNDEF (0x00), SCALAR_RAW (0x01), SCALAR_UTF8 (0x02, via lossless utf8::encode/decode), ARRAY (0x03, 16-bit Big-Endian count), and HASH (0x04, 16-...
          * Nested Data Structures: Fully supports arbitrarily nested arrays, hashes, and repeat blocks with strict recursion depth guarding ($depth <= 32) to prevent stack overflow or circular reference hangs.
          * Transparent Legacy Fallback: db_decode automatically falls back to _db_decode_legacy for non-ABR records, allowing mixed-version legacy tables to operate without downtime.
          * Benchmarks: Achieves ~130,000 encodes/sec (+150% faster) and ~69,000 decodes/sec (+64% faster) on flat records; achieves ~4,300 decodes/sec (+35% faster) on complex deeply nested multi-level records.

        - [BINARY INDEX ARCHITECTURE REFACTORING] Complete Migration of All Indexes to 8-Byte Packed Binary Buffers:
          * Migrated all secondary index subsystems (.inx, .fld, .src, .fac, .slg, and Tier B Junk .jinx, .jfld, .jsrc) to pure 8-byte fixed-width packed binary buffers (pack "Q>", unpack "(Q>)*").
          * Core Binary Primitives in AmberDB::Base: Implemented bin_add, bin_punch, bin_sort, bin_find, and bin_count operating directly on raw byte buffers via substr() and memory-aligned index(), achieving C-level execution speed.
          * High-Level Cleanup: Completely eradicated high-level Perl array/hash manipulations (array_nodup, array_punch) from the core engine indexing path.
          * Consolidated Pre-Sorted Indexing: Standalone .srt files are formally deprecated and eliminated; sort indexes are directly maintained inside .inx.
          * Direct 64-bit Uint Indexing: Non-foreign key numeric fields in .fld bypass synthetic dictionary ID generation, indexing pure 64-bit unsigned integers directly into binary keys.
          * Batch Foreign Key Pre-Fetching: Integrated batch RDBM ID pre-fetching in search and junk indexing pipelines, reducing disk I/O overhead to zero during keyword tokenization.

        - [LEGACY TABLE MIGRATION & RECONSTRUCTION ENGINE] Automated update_table & update_all in AmberDB::Tools:
          * Multi-Era Format Detection: Implemented _detect_record_format and decode_legacy_record recognizing and decoding all historical formats across AmberDB history: 2003 FlatDB (v1), 2004-2006 \T arrays (v2), 2019-2025 <TAB0>..<TAB3> hierarchic...
          * Automated Timestamped Backups: Automatically backs up migrating tables as <table_name>-v<detected_ver>-<YYYY-MMDD>.db prior to rewriting.
          * Authoritative Data Preservation:
            - .unq (Unique & Synonym Dictionary): Identified as non-reconstructible authoritative master data; strictly exempted from derived index cleanup, preserved live, and snapshot-copied to <table_name>-v<ver>-<date>.unq.
            - .del (Soft-Deleted Records Archive): Detected via exist_table($table, 'del'), backed up, and all archived records migrated to ABR v5.
            - .aut (Audit Trail Log): Detected via exist_table($table, 'aut'), backed up, and user modification history migrated to ABR v5.
            - .cnt (Read Counter): Detected via exist_table($table, 'cnt'), backed up, and live counter state preserved.
          * Clean Re-indexing via insert_list: Cleans up all derived and legacy indexes (qw(inx src fld fac slg srt jinx jfld jsrc)) and rebuilds table data and indexes atomically through $adb->insert_list.

        - [COMMAND LINE UTILITY] Automated Migration Script (bin/update_tables.pl):
          * Added CLI migration script bin/update_tables.pl supporting --all, --table=<names>, --dbase=<dir>, --force, and --help options.
          * Provides granular per-table progress reporting and comprehensive post-migration summary (tables processed, upgraded, already up-to-date, record counts, and companion file backups).

        - [TRANSACTION SAFETY, SEARCH & CSV COMPATIBILITY]
          * Transact Journal Escaping: Escaped \n, \r, \x1e, and \\ in binary record payloads logged to .txn journals, preventing binary length bytes from splitting WAL records or corrupting field boundaries.
          * CSV Line Preservation: In tie2csv and vacuum, exported CSV records using _db_encode_legacy so exported files remain clean single-line human-readable text.
          * Unindexed Search Word Extraction: Fixed search_table in unindexed mode to decode record fields before passing them to get_words, preventing binary length bytes from corrupting search tokens.

        - [QUERY ENGINE & INDEX PERFORMANCE OPTIMIZATIONS] Adaptive Binary Intersect & Pure-Index Candidate Filtering:
          * Adaptive Binary Search Pruning (bin_crop): Introduced dynamic thresholding between XS unpack probing and 8-byte aligned O(log N) binary search (substr). For massive posting lists (e.g. 600K records), eliminates huge Perl scalar allocation...
          * Pure-Index Candidate Probing (search_table): Refactored multi-value/range filtering (e.g. 27-year date intervals) to evaluate candidate IDs directly against sorted 8-byte aligned index buffers via binary search, completely eliminating slo...
          * Batch Unindexed Fallback: Replaced iterative table_readid loops in unindexed search fallbacks with single-pass read_list batching, eliminating repetitive open/close file descriptor syscalls.

        - [TEST COVERAGE & PACKAGING]
          * Added comprehensive test suite t/amberdb_update_table.t covering multi-era format decoding, update_table migration, backup naming, .del/.aut/.cnt/.unq handling, and update_all batch discovery.
          * Updated MANIFEST to include bin/update_tables.pl and new test suites.
          * All 47 test files (440 assertions) passing with 100% success rate.

5.23.2  2026-09-03
        - [LOCALE ENGINE & MULTILINGUAL ARCHITECTURE] 10th Language - Global Base (gb) and Default Locale:
          * Introduced Global Base (gb) as the 10th supported language and new universal default/fallback locale (replacing en).
          * Implemented comprehensive multilingual Latin character preservation in alphabet_chars across European, Turkish, Nordic, French, German, Spanish, and Slavic-Latin alphabets.
          * Added cross-lingual, accent-tolerant search regex mapping (regex_map) matching accented and unaccented variations (e.g. cafe matches café, munchen matches münchen, seker matches şeker).
          * Implemented canonical accent folding in accent_map for high-recall inverted search indexing (.src).
          * Added lossless Unicode ligature conversion in ascii_map (ß->ss, æ->ae, œ->oe, ı->i, ø->o, ł->l, đ->d, ð->d, þ->th, ə->e) for clean URL slug and ASCII ID generation.
          * Configured international English numbering, date formatting, and ISO standard decimal/group separators.
          * Added language aliases: 'gb', 'global', 'gl', 'universal', 'uni', 'gb_base'.
          * Added dedicated test coverage in t/amberdb-locale_09_gb.t.
        - [TRANSACTION ARCHITECTURE & API REFINEMENT] Pure File-Path Error Model and Operational Rollback:
          * Refactored transact_error($file_path, $message) to exclusively accept physical file paths; eliminated artificial "transaction" and "system" string contexts.
          * Simplified table identification via single exact regex /([^\/\\:]+)\.$db_ext$/: directly extracts table ID and inspects schema no_transact attribute; non-db extensions (.inx, .src, .fld, .fac, .slg, .aut, .del, .txn) never trigger rollbac...
          * Added immediate early return in transact_error if $file_path is undefined or empty.
          * Established strict API role separation: application code directly invokes transact_rollback() for business logic cancellations (insufficient stock, credit limits, validation aborts) and unexpected eval exceptions; transact_error is reserv...
          * Unified legacy is_index and is_no_transact flags into single no_rollback attribute.
          * Restructured insert_id to strictly validate mandatory $tableid at entry prior to resolving table paths, with proper ref guard for $rid.

5.23.1  2026-09-02



( run in 0.555 second using v1.01-cache-2.11-cpan-364913b4093 )