Revision history for DBIO-MSSQL
0.900001 2026-07-12
* Diff
- Fix DROP INDEX / DROP TABLE collision in full-schema sync (karr #15,
from core #77 / dbio-postgresql #32). When diff reconciled a live
schema containing a table absent from the target (removed from the
app's DBIO classes, or an unmanaged leftover), it emitted both
DROP TABLE <t> and a later standalone DROP INDEX <idx> ON <t>; since
MSSQL's DROP TABLE already removes the table's own indexes, the
standalone DROP INDEX failed once the table was gone ("Invalid object
name") and aborted apply()/upgrade(). DBIO::MSSQL::Diff::Index now
receives the tables sections (threaded in by DBIO::MSSQL::Diff) and
suppresses a standalone DROP INDEX for any index whose owning table is
itself being dropped in the same pass. Indexes of surviving tables are
still dropped as before; the two-argument diff() call stays backward
compatible (absent table sections suppress nothing).
* Tests
- Add t/51-diff-drop-table-index-cascade.t and extend t/50-diff.t:
full-diff regression for the DROP INDEX / DROP TABLE collision
(karr #15) plus Diff::Index unit cases for the tables-aware drop
suppression and its over-suppression guard.
* Storage
- new DBIO::MSSQL::Storage::ODBC (DBD::ODBC transport on top of the
transport-neutral DBIO::MSSQL::Storage base). ODBC connections are now
reblessed into this class instead of DBIO::MSSQL::Storage::Sybase, so
the ODBC path no longer pulls in DBIO::Sybase. The Sybase class stays
for the DBD::Sybase path. Needs DBIO core with the matching connector
mapping.
* Tests
- skip the optional-dependency tests instead of failing when
DBIO::Sybase (DBD::Sybase path) or DBIO::SQLite (SQL-comparison
test helper) is not installed (Codeberg #1)
- t/10-mssql.t and t/20-mssql-core.t: port leftover DBIx::Class names
to the DBIO storage classes (DBIO::MSSQL::Storage::Sybase /
::NoBindVars) and the surviving PK::Auto compat shim, so the
DBD::Sybase path reblesses and runs against a live server; skip the
multiple-active-statements sections (need dynamic-cursor/MARS support
not ported to DBIO) consistently instead of dying mid-file; and
replace the removed-API "RNO detection" block (sql_limit_dialect /
sql_maker->{limit_dialect}) with an assertion that the storage is
wired to DBIO::MSSQL::SQLMaker (apply_limit). Both files now run
green to exit 0 over a named-server dbi:Sybase: DSN.
* Fixes
- DBIO::MSSQL::Storage::Sybase::_init compared the FreeTDS version
with a numeric '>', but modern versions like "1.3.17" aren't valid
numbers, warning "Argument ... isn't numeric" on every connect over
the Sybase/FreeTDS transport. Now compared via version->parse
(dotted-version, matching the ASE sibling); behaviour unchanged
(1.3.17 > 0.82 still disables statement caching, the ||999
sentinel for an undeterminable version is preserved). MARS
(multiple-active-statements) support was investigated and
confirmed infeasible on this transport -- documented as a
permanent limitation, not a gap to close. karr #13, #14.
* Dependencies
- Requires core DBIO >= 0.900001 (family-wide version alignment)
* Project
- Added SECURITY.md (CPAN Security Group guidelines v1.5.0)
0.900000 2026-06-23
First release. Microsoft SQL Server driver for DBIO.
* Storage
- SCOPE_IDENTITY() identity retrieval, MONEY column casting,
ordered-subselect safety, SAVE TRANSACTION savepoints, deferred
FK checks via sp_msforeachtable, and NEWID() GUID/random support
- DBD::ODBC and DBD::MSSQL connection paths
- DBD::Sybase/FreeTDS path with placeholder detection (NoBindVars
rebless) and statement-cache workarounds
* SQL generation
- MSSQL SQLMaker with LIMIT/OFFSET via ROW_NUMBER() OVER() (with a
(SELECT(1)) default order) and the TOP dialect for older servers
- [ ] identifier quoting and SQLServer SQL::Translator type
* Schema management
- Native DDL generation, including CREATE VIEW for non-virtual
views from view_definition
- Native introspection via INFORMATION_SCHEMA and the sys.* catalog
- Native diff of tables, columns, indexes, and foreign keys
- test-deploy-and-compare install and upgrade via Deploy
* Integration
- DBIO::MSSQL schema component and the `use DBIO -ms` shortcut
- Result component for MSSQL-specific indexes
- base->native type Adapter
- datetime parsing for the MSSQL and Sybase paths