0.000026 2026-06-29 17:41:35-07:00 America/Los_Angeles Security: - Quote all SQL identifiers so caller-supplied names (order_by, where keys, field/returning lists, upsert columns, and join aliases) can no longer break out into SQL injection (CVE-2026-13766). INCOMPATIBLE CHANGES (from the CVE-2026-13766 fix): - SQL identifiers are now quoted, changing two caller-facing behaviors: - order_by/field bare strings must be column names, not raw SQL. - A bare "name DESC" or "COUNT(*)" no longer works; use \'...' or {-desc => 'name'}. - LiteralSource croaks on a non-identifier 'subquery' alias. 0.000025 2026-06-28 10:59:16-07:00 America/Los_Angeles Internal / cleanup: - Backfill the missing changelog entries for the 0.000023 and 0.000024 releases. 0.000024 2026-06-28 09:48:16-07:00 America/Los_Angeles Features: - Add compare-and-set via cas() on handles and rows: a guarded single-row update that reports a lost race instead of throwing (GitHub #29). Documentation: - Document compare-and-set and batch schema introspection in the Manual. Internal / cleanup: - Refactor schema introspection to run in a fixed number of queries per database across all dialects. 0.000023 2026-06-13 22:20:26-07:00 America/Los_Angeles Features: - Add OFFSET and DISTINCT support to handles. - Support link-less CROSS joins with validated join arguments. - Add a primary_key override option to the DSL builder. - Add the async contract to the base Dialect class. Documentation: - Record the connection/transaction and row/schema/handle audit changes as ARCHITECTURE.md addenda. Internal / cleanup: - Audit and harden the connection, transaction, handle, dialect, and row-state subsystems. - Harden the forked-query pipe protocol, process ownership, and parent row cache. - Fast-destroy ephemeral test databases to quiet teardown under prove -j. Fixes: - Fix savepoint frame merges leapfrogging rolled-back transactions. - Make a refused transaction finalize recoverable and croak on double-finalize. - Fix count() on handles with omit, joins, or distinct. - Treat LIMIT 0 as a real limit instead of dropping it. - Allow order_by/limit on a handle without a WHERE clause. - Quote primary-key identifiers in upserts and quote join field aliases. - Scope PostgreSQL introspection to the search_path and fix identifier quoting. - Fix SQLite recording plain indexes as unique constraints. - Mark SQLite rowid-alias columns as identity and fix AUTOINCREMENT false positives. - Croak on conflicting primary keys in Table::merge unless overridden. - Croak when saving desynced rows or vivifying an already-loaded row. - Restore find-or-create with a data-loss warning. - Emit database= in MySQL-family DSNs. - Fix the row cache key escaping, undef primary-key handling, and dead-entry cleanup. - Harden Connection reconnect and rebuild the dialect on reconnect. 0.000022 2026-05-28 13:26:49-07:00 America/Los_Angeles Bug fixes: - SQLite dialect now queries sqlite_master/sqlite_temp_master instead of the modern sqlite_schema/sqlite_temp_schema aliases (which require SQLite 3.33+, 2020). Bump DBD::SQLite minimum to 1.64, which embeds SQLite 3.31.1 and is the first version with pragma_table_xinfo's `hidden` flag for GENERATED columns (relied on by generated-column detection added in 0.000021). Internal / cleanup: - Audit dist.ini prereq minimums against actual feature usage. Bump pinned versions where the code uses features that require a specific minimum (List::Util zip/mesh -> 1.56, Sub::Util set_subname -> 1.40, Data::Dumper Trailingcomma -> 2.171, Role::Tiny -> 2.000003, Cpanel::JSON::XS -> 3.0224, etc.). Core / basic-usage modules left at 0. 0.000021 2026-05-27 20:30:06-07:00 America/Los_Angeles Features: - Detect database-generated columns (stored or virtual GENERATED ALWAYS AS) at autofill time across SQLite, PostgreSQL, MySQL/MariaDB, and DuckDB. Generated columns are readable on fetch but excluded from INSERT/UPDATE: handle-level insert/upsert/update silently drop them, row->field and row->update croak. Documentation: - Add Manual::SQLBuilder, documenting the SQL builder contract and how to write a custom builder. 0.000020 2026-05-25 22:18:44-07:00 America/Los_Angeles Features: - Add DBIx::QuickORM->quick(), a DSL-free interface returning a ready ORM/connection. - quick() gains autorow, row_manager, and auto_types options. - Add a DuckDB dialect (DBIx::QuickORM::Dialect::DuckDB), auto-selected for DBD::DuckDB. - Add Type::DateTime, a lazy DateTime type with database-string stringification. - Add Util::Mask, a lazy object-hiding wrapper that keeps values out of stack traces. - Add a subquery option to LiteralSource to wrap a full statement as a derived table. - Use Atomic::Pipe with zstd compression for forked-query IPC. Documentation: - Rebuild the Manual: hub plus QuickStart, Concepts, guides, recipes, features, and a DBIx::Class concept-map page. - Document the DateTime type and value masking in Manual::Types. - Complete and annotate the DSL export reference; move examples into the Manual. - Add inline POD across nearly all modules. Internal / cleanup: - Drop the inlined HashBase and use Object::HashBase directly. - Make transaction state authoritative from the result; add an exception attribute. - Resolve links by keyword (table/alias/columns) and drop the broken scalar-ref spec. - Remove the vestigial, never-implemented schema->DDL generation scaffolding from Dialect. - Align declared prereqs with actual usage. - Default do_for_all_dbs test concurrency to 4. - Exclude dev-only files (old*/, agent_scripts/, AI_DOCS/, *.md) from the build tarball. - Add [PruneCruft] to dist.ini so build artifacts no longer leak into release tarballs. Fixes: - Fix compare_affinity_values: boolean comparison was inverted; handle both-undef without warnings. - Fix Link::merge clobbering the created note and aliases of the merged link. - Fix Row field-hash accessors passing the wrong view method. - Fix Connection::state_cache_lookup to honor its documented arguments. - Fix LiteralSource::new: copy the SQL instead of blessing the caller's scalar ref. - Fix UUID and JSON types to use defined checks instead of truthiness for values. - Fix Autofill define_autorow to use the saved error instead of $@ directly. - Quote savepoint names in MySQL and SQLite transaction statements. - Fix the forked-query child to exit non-zero on error and reap it to avoid zombies. - Fix STH::Fork::cancel to handle an already-exited child gracefully. - Fix STH::next to finalize before throwing on too-many-rows. - Fix STH::Async/STH::Fork result() to use exists instead of truthiness. - Fix Transaction DESTROY to roll back (not commit) when falling out of scope. - Fix creds() to validate the builder context before invoking the credential callback. - Fix Connection update_or_insert and find_or_insert delegating to nonexistent methods. - Fix Cached::uncache to extract values from the primary-key hashref. - Fix Cached::uncache and _merge_state to read existing state from the target row. - Fix PostgreSQL build_tables_from_db to use the current table name after hooks. - Fix MySQL build_table_keys_from_db and build_indexes_from_db argument handling. - Fix Table::merge to fall back to the other side's primary key when missing. - Fix Column affinity() to return after the scalar-ref-type branch. - Fix not_null to default nullable to 0 when called with no arguments. - Fix Row::Async::can() and check_sync after the row swaps itself out. - Fix Iterator to use the READY() constant for its hash key. - Fix Handle -unknown flag comparison and fork child error exit. - Fix transaction stack mismatch precedence and undef-safe state comparisons. - Fix merge_hash_of_objs default params and value dereference. - Fix _normalize_omit to build a hashref instead of a scalar-context map count. - Fix Join::Row missing List::Util import; JSON qorm_sql_type reachable die. - Fix unimport_from to remove exported subs; typo in a Dialect error message. 0.000019 2025-08-22 16:17:34-07:00 America/Los_Angeles - Add report test 0.000018 2025-08-22 15:08:58-07:00 America/Los_Angeles - Fix improper use of roles 0.000017 2025-08-22 14:40:01-07:00 America/Los_Angeles - Add more context for conflation methods 0.000016 2025-08-22 12:01:33-07:00 America/Los_Angeles - Fix #25, add Carp::Always to test and develop deps - Fix #26, Add Parallel::Runner to deps, fix interface.t when db is missing - Fix #27, Fix upsert with multiple fields 0.000015 2025-06-13 17:37:50-07:00 America/Los_Angeles - Make it possible to add DB info after prepaing the orm/schema 0.000014 2025-06-10 14:46:48-07:00 America/Los_Angeles - Doc updates 0.000013 2025-06-08 21:54:10-07:00 America/Los_Angeles - Doc updates 0.000012 2025-06-08 14:47:28-07:00 America/Los_Angeles - Add versions to all modules - Add upsert support 0.000011 2025-06-07 15:36:38-07:00 America/Los_Angeles - Rename select to query - Rename sqla-source to query-source - Work on eliminating the assumption that SQLAbstract will always do the work 0.000010 2025-05-07 06:36:38-07:00 America/Los_Angeles (TRIAL RELEASE) - Still felshing out functionality after the rewrite - Add 'forked' async emulation - Add 'aside' async functionality - Add more txn callbacks 0.000009 2025-05-06 08:17:08-07:00 America/Los_Angeles (TRIAL RELEASE) 0.000008 2025-05-02 01:20:14-07:00 America/Los_Angeles (TRIAL RELEASE) 0.000007 2025-05-02 01:04:21-07:00 America/Los_Angeles (TRIAL RELEASE) 0.000006 2025-05-02 01:02:32-07:00 America/Los_Angeles 0.000005 2025-05-02 00:19:35-07:00 America/Los_Angeles (TRIAL RELEASE) 0.000004 2024-10-27 23:40:03-07:00 America/Los_Angeles - Fix some DB specific tests - Add report on module and database versions 0.000003 2024-10-27 09:33:28-07:00 America/Los_Angeles - Add missing deps - Include minimum versions for some deps 0.000002 2024-10-26 21:01:35-07:00 America/Los_Angeles - Fix #3 - Some doc fixes - Fix some tests 0.000001 2024-10-26 00:33:57-07:00 America/Los_Angeles - Initial upload of incomplete project to cpan