Vertica
This page contains the latest information of the releases of RepoDb.Vertica library.
View the NuGet package here or download it directly here.
RepoDb.Vertica (v1.17.0-alpha3)
Released: October 10, 2026
- Referenced the
RepoDbpackagev1.17.0-beta2.
RepoDb.Vertica (v1.17.0-alpha2)
Released: October 9, 2026
- Enhancement: Made the package NativeAOT and trimming compatible (
IsAotCompatible), replacing the reflection-based anddynamiccode paths with AOT-safe equivalents. - Referenced the
RepoDbpackagev1.17.0-beta1.
RepoDb.Vertica (v1.17.0-alpha1)
Released: October 1, 2026
- Adopted the Roslyn and Meziantou static code analyzers across the codebase and applied the resulting fixes — including
ConfigureAwait(false)on async calls,ArgumentNullExceptionoverNullReferenceException, and other code-quality corrections. #1328 #1331 - Updated the NuGet package icon to the new logo and refreshed the
READMEwith a consistent header, description and a link to the get started tutorial. - Referenced the
RepoDbpackagev1.17.0-alpha3. - Unsealed
VerticaDbSettingand added aUseVertica(GlobalConfiguration, VerticaDbSetting)overload that accepts any subclass, always applying the given setting even if already initialized — this lets VerticaBulkOperationsDbSetting (shipped by RepoDb.Vertica.BulkOperations) be registered the same way. #1360 - Fixed Insert returning no key value at all — it now appends a trailing
SELECTthat echoes the supplied parameter (non-identity key) or fetchesLAST_INSERT_ID()(identity key), honoring KeyColumnReturnBehavior. #1364 - Fixed InsertAll’s multi-row path the same way for the non-identity key case, via a unioned per-row
SELECT. #1364 - Fixed Merge/MergeAll hardcoding identity-only return logic regardless of what KeyColumnReturnBehavior resolved to — it now branches on whether the resolved key column is actually the identity column. #1364
RepoDb.Vertica (v1.16.0)
Released: September 9, 2026
Version bump only, aligning with the RepoDB ecosystem-wide v1.16.0 release — no functional changes since v1.0.0.
- Referenced the
RepoDbpackagev1.16.0.
RepoDb.Vertica (v1.0.0)
Released: September 8, 2026
First general availability (non-preview) release of the Vertica provider, 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.Vertica (v0.0.1-alpha) - Preview
Released: 2026-08-31
New
First (alpha) release of the Vertica provider for RepoDB, built on top of Vertica.Data. Targets netstandard2.0, .NET 8, .NET 9, and .NET 10.
Verification status: this package has been implemented and reviewed, but not yet exercised against a live Vertica instance. Verify the Merge/MergeAll compound-statement behavior in particular (see Known limitations below) before relying on this package in production.
What’s included
- VerticaBootstrap / VerticaConfiguration
.UseVertica(useInvariantCulture: false)— initializes RepoDB for use withVerticaConnection(GlobalConfiguration.Setup().UseVertica()), mapping the VerticaDbSetting, VerticaDbHelper, and VerticaStatementBuilder to everyVerticaConnection. PassuseInvariantCulture: trueto work aroundVertica.Dataformatting date-like values using the ambient thread culture (see Known limitations below). - VerticaDbSetting — Vertica-specific behavior:
"for opening/closing identifier quotes,@parameter prefix, no table hints, no multi-statement command text support (IsMultiStatementExecutable = false) except for InsertAll (IsInsertAllBatchable = true), a lowerMaxParameterCountof1500, and bothRequiresDbTypeBeforeValueandSkipsUnreferencedParametersset totrue(see the Core release notes for what those two control). - VerticaStatementBuilder — generates Vertica-flavored SQL for every operation:
LIMIT/LIMIT ... OFFSETpaging, a genuine multi-rowVALUESlist for InsertAll, and anUPDATE ...; INSERT ... WHERE NOT EXISTS (...)pair (with a follow-upSELECT LAST_INSERT_ID()when a key is needed) for Merge/MergeAll — never a nativeMERGE, since Vertica rejects that statement outright against any table with anIDENTITY/AUTO_INCREMENTcolumn. Truncate compiles to a plainDELETE FROM t, since Vertica has noTRUNCATE TABLEstatement. - VerticaDbHelper — schema/type discovery (
GetFields/GetFieldsAsync) sourced fromv_catalog.columns/v_catalog.primary_keys.GetScopeIdentity/GetScopeIdentityAsyncrunSELECT LAST_INSERT_ID(). - Resolvers — VerticaConvertFieldResolver (casts a field to its Vertica type when a conversion is needed, e.g. typed ExecuteQuery results), VerticaDbTypeNameToClientTypeResolver (maps the type names returned by
v_catalog.columnsto .NET CLR types — widened tolong/doublesince Vertica has no distinct integer/float storage widths), DbTypeToVerticaStringNameResolver (mapsSystem.Data.DbTypeto Vertica SQL type names, e.g.DbType.Guid→UUID), and DbTypeNameToColumnNameResolver (maps a Vertica database type name to its base column type keyword; used internally by RepoDb.Vertica.BulkOperations to generate pseudo-table column definitions). - TimeToDateTimePropertyHandler — re-bases the date component of a value read back from a
TIMEcolumn ontoDateTime’s default date, since Vertica’s driver returns aTIMEvalue combined with today’s date rather than a fixed placeholder. - Parameter attributes mirroring
VerticaParametermembers, settable per entity property: VerticaType, SourceColumn, SourceColumnNullMapping, and SourceVersion.
Known limitations (v1)
- Merge/MergeAll compile a compound
UPDATE ...; INSERT ...command text — both halves carrying parameters — joined by;into a single string submitted throughVerticaCommand.CommandText. This has not been verified against a live Vertica instance, and appears to conflict with the very restrictionIsInsertAllBatchable’s own remarks describe elsewhere: “a compound ("stmt1; stmt2") statement, whichVerticaCommandrefuses to execute once it carries a parameter.” Verify this specifically before relying on Merge/MergeAll in production. GetScopeIdentity/GetScopeIdentityAsyncrunSELECT LAST_INSERT_ID()— unverified against a live instance.- MergeAll/UpdateAll issue a separate round trip per row rather than a single batched statement, since
IsMultiStatementExecutableisfalseand neither has anIsInsertAllBatchable-style override. Passing an explicitbatchSizegreater than1to either throws aNotSupportedException. InsertAll is the exception — seeIsInsertAllBatchableabove. - InsertAll does not hydrate the identity-mapped key property back onto each entity when
batchSizeis greater than1and KeyColumnReturnBehavior resolves to the identity column — the non-identity (primary-key) case is echoed back correctly via a per-rowSELECT, but the multi-row identity case is deliberately left unwired, since there is no verified way to map Vertica’s generated identity values back to the correct row. #1364 useInvariantCulture: trueonUseVertica()forcesCultureInfo.CurrentCulturetoCultureInfo.InvariantCultureprocess-wide, not just for the current connection — enabling it affects every other culture-sensitive code path running in the same process.- No table hints of any kind —
AreTableHintsSupportedisfalse; passing a non-nullhintsargument to any operation throws aNotSupportedException. - No
TRUNCATE TABLEstatement (as of Vertica 5.0) — Truncate compiles toDELETE FROM twithout aWHEREclause, which does not reset anIDENTITYcolumn’s next value. MaxParameterCountdefaults to1500.- No native GUID property handler —
DbType.Guidmaps to Vertica’s ownUUIDtype, but there is no dedicated property handler for drivers that need an explicit conversion. - A second, near-duplicate property handler class (
RepoDb.PropertyHandlers.VerticaTimeToDateTimePropertyHandler, as opposed to the documentedRepoDb.PropertyHandlers.Vertica.TimeToDateTimePropertyHandler) exists in the source but is not referenced anywhere in the library or its tests — apparent leftover code from a refactor, not two intentionally-separate handlers. -
Only a standard Vertica server accessed via
Vertica.Datais tested against. - Referenced the
RepoDbpackagev1.16.0. - Referenced the
Vertica.Datapackagev24.3.0.