Link Search Menu Expand Document

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 INFILE bulk-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 MariaDbBulkCopy class, built on RepoDb.Connector.MariaDb’s MariaDbBulkLoader, that serializes rows to a tab-delimited temp file and loads them via LOAD DATA LOCAL INFILEMySql.Data ships no genuine streaming bulk-copy API of its own.
  • MariaDbBulkImportIdentityBehavior (KeepIdentity default, ReturnIdentity) — controls whether identity values are sent as-is or pre-assigned and read back via a session user variable seeded from a live MAX(identity) + 1 read.
  • MariaDbBulkImportPseudoTableType (Auto, Memory, Physical) — selects the staging-table strategy backing BulkMerge/BulkUpdate/BulkDelete/BulkDeleteByKey, and BulkInsert when ReturnIdentity is used.
  • MariaDbBulkInsertMapItem — explicit source-to-destination column mapping for BulkInsert, with an optional MariaDbType override.
  • Referenced the RepoDb package v1.16.0.
  • Referenced the RepoDb.MariaDb package v0.0.1-alpha1.
  • Referenced the RepoDb.Connector.MariaDb package v0.0.1-alpha2.

Known limitations (v1)

  • MariaDbBulkImportPseudoTableType.Auto and Memory both currently resolve to Physical regardless of row count — the internal resolution logic returns Physical on every outcome, so there is no session-private TEMPORARY TABLE staging path exercised yet despite the enum advertising one.
  • The LOAD DATA LOCAL INFILE bulk-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’s local_infile global 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. Since CREATE TABLE/DROP TABLE are DDL, this happens on every single call, not just the first.
  • BulkMerge with ReturnIdentity is 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 final SELECT reads every row’s identity back — five statements in total, not one round trip.