Changes for version 2.1109 - 2026-10-11
- oEdtk::DBAdmin: distribution tables (create_table_DISTRIB) now also create ix_<table>_job (ed_idjob) and ix_<table>_dtlot (ed_dtlot). The composite index leads with ed_idldoc, so the by-job predicate (agrege_idJob, _acheck_db_rotate) and the by-batch-date predicate (rotation) could not use it and fell back to a sequential scan; with the new indexes PostgreSQL chooses a bitmap index scan (EXPLAIN cost 1135 -> 684). Created through _db_do_ddl so "create index if not exists" stays portable across the five engines.
- oEdtk::DBAdmin: the MySQL bulk load (_load_csv_mysql_local_infile) now runs ANALYZE TABLE after LOAD DATA LOCAL INFILE, in parity with the PostgreSQL COPY path, so the planner keeps fresh statistics after a large import.
- oEdtk::DBAdmin: admin_optimize_db opens a single connection for the whole operation instead of reconnecting twice per table (24 connections for 12 tables), detects the driver once on the live handle, and declares its per-engine repair/optimize templates in one place (_db_maintenance_commands). PostgreSQL now uses VACUUM ANALYZE instead of VACUUM FULL (which took an exclusive lock and rewrote the table in the routine path); SQLite runs ANALYZE (it has no per-table VACUUM); MySQL keeps REPAIR/OPTIMIZE TABLE and Oracle is a no-op.
- oEdtk::DBAdmin: db_backup_agent is no longer flagged deprecated (it is not a copy_table alias: it snapshots three tables and purges the rows older than EDTK_ENTIRE_YEARS_KEPT). Its three copy-pasted blocks are collapsed into a declarative loop; an already-existing archive (same-day re-run) is now kept as is instead of making CREATE TABLE ... AS SELECT fail; the routine accepts an optional CFG, so it is testable.
- oEdtk::DBAdmin: SQLite can now be used as the main database and generate lot identifiers. create_lot_sequence creates the edtk_idlot_seq counter table on SQLite (0..999, wrapping) and Outmngr::_get_seqlot reads it back, building the "ISO week + day-of-week + 3-digit sequence" prefix in Perl (SQLite has neither SEQUENCE nor to_char). The Oracle and PostgreSQL paths are unchanged. The backup database remains a write-only buffer and does not generate identifiers.
- oEdtk::DBAdmin: new public db_invalidate_meta_cache drops the column-metadata cache used by csv_import; schema_Create and schema_Upgrade call it so a later import re-reads the columns after a schema change. db_check_privileges now also probes INDEX, ALTER and SEQUENCE (in addition to CREATE and DROP), with no extra query per backend, and still never dies. Leftover French comments and clean_val messages in DBAdmin.pm were translated to English.
- tests: new t/35_dbadmin_optimize.t (per-engine maintenance templates and an end-to-end run on SQLite), t/36_outmngr_seqlot.t (SQLite lot-id generation), t/37_dbadmin_backup_agent.t (archive-and-purge, same-day re-run), t/38_dbadmin_meta_cache.t (cache invalidation); t/33_dbadmin_privileges.t extended to the five rights; t/30_dbadmin_pure.t gained MariaDB and INSERT _sql_fixup cases. The suite is 415 tests over 18 files.
- oEdtk::DBAdmin: $VERSION 2.1108 -> 2.1109.
- oEdtk.pm: $VERSION 2.1108 -> 2.1109.
Documentation
Modules
A module for industrial printing processing
Helper module for parsing printer spool files
Provides
in lib/oEdtk/AddrField.pm
in lib/oEdtk/C7Doc.pm
in lib/oEdtk/C7Tag.pm
in lib/oEdtk/Config.pm
in lib/oEdtk/DBAdmin.pm
in lib/oEdtk/DateField.pm
in lib/oEdtk/Dict.pm
in lib/oEdtk/Doc.pm
in lib/oEdtk/EDMS.pm
in lib/oEdtk/FPField.pm
in lib/oEdtk/Field.pm
in lib/oEdtk/Main.pm
in lib/oEdtk/Messenger.pm
in lib/oEdtk/OmgrIdxDoc.pm
in lib/oEdtk/Outmngr.pm
in lib/oEdtk/Record.pm
in lib/oEdtk/RecordParser.pm
in lib/oEdtk/Run.pm
in lib/oEdtk/SignedField.pm
in lib/oEdtk/TexDoc.pm
in lib/oEdtk/TexTag.pm
in lib/oEdtk/Tracking.pm
in lib/oEdtk/Util.pm
in lib/oEdtk/XPath.pm
in lib/oEdtk/libC7.pm
in lib/oEdtk/libDev.pm
in lib/oEdtk/libXls.pm
in lib/oEdtk/logger.pm
in lib/oEdtk/logger2.pm
in lib/oEdtk/trackEdtk.pm
in lib/oEdtk/tuiEdtk.pm