Releases for RepoDb.MariaDb.BulkOperations
View the NuGet package here or download it directly here.
RepoDb.MariaDb.BulkOperations (v1.0.0)
Released: September 8, 2026
First general availability (non-preview) release of the MariaDB Bulk Operations package, promoting the v0.0.1-alpha1 preview below to stable. No functional changes since v0.0.1-alpha1 — see that entry for the full feature set and known limitations.
RepoDb.MariaDb.BulkOperations (v0.0.1-alpha1) - Preview
Released: TBA
New
First release of the bulk operations extension for RepoDb.MariaDb (MySql.Data-based), providing BulkInsert, BulkMerge, BulkUpdate, BulkDelete, and BulkDeleteByKey, each with an Async overload, callable against a MariaDbConnection, a table name, or a DataTable. #1271
Verification status: this package has been implemented and reviewed, but not yet exercised against a live MariaDB instance. Verify the
LOAD DATA LOCAL INFILEbulk-load path, the identity pre-assignment/read-back, and the staging-table strategy end-to-end before relying on this package in production.
What’s included
- BulkInsert, BulkMerge, BulkUpdate, BulkDelete, and BulkDeleteByKey — matched by qualifiers or primary key; see Operations (MariaDb) for the full SQL generated by each.
- An internal
MariaDbBulkCopyclass, built onRepoDb.Connector.MariaDb’sMariaDbBulkLoader, that serializes rows to a tab-delimited temp file and loads them viaLOAD DATA LOCAL INFILE—MySql.Dataships no genuine streaming bulk-copy API of its own. - MariaDbBulkImportIdentityBehavior (
KeepIdentitydefault,ReturnIdentity) — controls whether identity values are sent as-is or pre-assigned and read back via a session user variable seeded from a liveMAX(identity) + 1read. - MariaDbBulkImportPseudoTableType (
Auto,Memory,Physical) — selects the staging-table strategy backingBulkMerge/BulkUpdate/BulkDelete/BulkDeleteByKey, andBulkInsertwhenReturnIdentityis used. MariaDbBulkInsertMapItem— explicit source-to-destination column mapping forBulkInsert, with an optionalMariaDbTypeoverride.- Referenced the
RepoDbpackagev1.16.0. - Referenced the
RepoDb.MariaDbpackagev0.0.1-alpha1. - Referenced the
RepoDb.Connector.MariaDbpackagev0.0.1-alpha2.
Known limitations (v1)
- MariaDbBulkImportPseudoTableType.Auto and
Memoryboth currently resolve toPhysicalregardless of row count — the internal resolution logic returnsPhysicalon every outcome, so there is no session-privateTEMPORARY TABLEstaging path exercised yet despite the enum advertising one. - The
LOAD DATA LOCAL INFILEbulk-load step is issued directly against the connection rather than through a command enlisted in your transaction — a rolled-back transaction is not confirmed to undo an already-loaded row. The surrounding staging-table DDL and the final cascading statement do participate in the caller-supplied transaction. See The Transaction Boundary. - Requires
AllowLoadLocalInfile=True;AllowUserVariables=True;on the connection string, and the server’slocal_infileglobal variable turned on — both off by default. - Every bulk call creates its own physical staging table (
DROP TABLE IF EXISTS+CREATE TABLE ... AS SELECT ... WHERE (1 = 0)) and drops it once the call completes, rather than reusing one across calls. SinceCREATE TABLE/DROP TABLEare DDL, this happens on every single call, not just the first. BulkMergewithReturnIdentityis not a single atomic statement: matched rows have their identity copied from the real table first, then unmatched rows are pre-assigned a fresh one, then the real table is updated and inserted into, then a finalSELECTreads every row’s identity back — five statements in total, not one round trip.