Releases for RepoDb.ClickHouse.BulkOperations
View the NuGet package here or download it directly here.
RepoDb.ClickHouse.BulkOperations (v1.0.0)
Released: September 8, 2026
First general availability (non-preview) release of the ClickHouse Bulk Operations package, promoting the preview below to stable v1.0.0. No functional changes since the preview — see that entry for the full feature set and known limitations.
RepoDb.ClickHouse.BulkOperations - Preview
Released: 2026-08-30
New
First release of the bulk operations extension for RepoDb.ClickHouse, providing BulkInsert, BulkMerge, BulkUpdate, BulkDelete, and BulkDeleteByKey, each with an Async overload, callable against a ClickHouseConnection, a table name, or a DataTable. #1242
What’s included
- BulkInsert, BulkMerge, BulkUpdate, BulkDelete, and BulkDeleteByKey — matched by qualifiers or primary key; see Operations (ClickHouse) for the full SQL generated by each.
- An internal
ClickHouseBulkCopyclass, adapting ClickHouse.Driver’s own nativeCopy.ClickHouseBulkCopyto theColumnMappings-based API the rest of the library expects. - ClickHouseBulkImportIdentityBehavior (
KeepIdentitydefault;ReturnIdentityalways throwsNotSupportedException, since ClickHouse has no identity/scope-identity mechanism). - ClickHouseBulkImportPseudoTableType (
Auto,Memory,Physical) — selects the staging-table strategy backingBulkMerge/BulkUpdate/BulkDelete/BulkDeleteByKey.BulkInsertnever uses a pseudo table. ClickHouseBulkInsertMapItem— explicit source-to-destination column mapping forBulkInsert/BulkMerge/BulkUpdate, with an optional explicit ClickHouse type name override.- ClickHouseBulkDbSetting and IClickHouseBulkDbSetting — a
ClickHouseDbSettingsubclass (and its interface) addingIsWaitForMutationsEnabled, whichBulkMerge/BulkUpdate/BulkDeleteconsult to decide whether to block until theirALTER TABLEmutation completes. Not registered by default — pass an instance toUseClickHouse()or register it via DbSettingMapper to opt in. - Referenced the
RepoDbpackage. - Referenced the
RepoDb.ClickHousepackage. - Referenced the
ClickHouse.Driverpackagev1.3.0.
Known limitations (v1)
- ClickHouseBulkImportPseudoTableType.Auto and
Memoryboth currently resolve toPhysicalregardless of row count — the internal resolution logic returnsPhysicalon every outcome, so the session-privateMemory-engine staging path is implemented but not yet exercised. BulkMerge,BulkUpdate,BulkDeleteandBulkDeleteByKeyreport the number of rows staged into the pseudo table, not a confirmed post-mutation count —ALTER TABLE ... UPDATE/DELETEare asynchronous mutations, and neither they nor a plainINSERTreport a reliable affected-row figure throughClickHouse.Driver.- Every bulk call against
BulkMerge/BulkUpdate/BulkDelete/BulkDeleteByKeycreates its own physical staging table (DROP TABLE IF EXISTS+CREATE TABLE ... ENGINE = MergeTree ORDER BY tuple() AS SELECT ... WHERE (1 = 0)) and drops it once the call completes, rather than reusing one across calls. BulkInsert/BulkMergenever return generated identity values —identityBehavior: ReturnIdentityalways throwsNotSupportedException.