Highlights of this release:
Enum.HasFlagtranslationstring.Concat/string.Join/TrimStart/TrimEndtranslation improvements (with many translator-bug fixes uncovered along the way)AsCtebuilder overload for explicit CTE materialization configuration (PostgreSQL, ClickHouse, DuckDB, SQLite, DuckDB)AsQueryable(db, ...)overload with per-column parameterization control forVALUESclauses- Improved
Now/UtcNowtranslation with timezone awareness across providers; providers without TZ gracefully downgrade IgnoreConflictsoption forMultipleRowsmodeBulkCopyon MySql / MariaDB / PostgreSQL / SQLite / DuckDB (thanks @darko1979)- Many other fixes: PostgreSQL array-parameter query cache misses,
SqlQueryDependentParamsissues, association discovery on interfaces, subquery null-aggregate SQL generation,UPDATE FROMregressions,ValueConverternull handling, CTE column removal, set-operator flattening,Sql.Rowconverters, predicate null-check optimization,FromSqlcaching,DropTable(throwExceptionIfNotExists: false)behavior,EXISTSover set queries
Provider-specific highlights:
- DuckDB — brand-new first-class provider (thanks @stdray, #5451), schema introspection, scaffolding via
linq2db.cli, LINQPad support - Oracle —
COALESCEparameter type inference,DateTimeOffset.Nowno longer corruptsTIMESTAMP WITH TIME ZONEwrites, drop of global temp tables with data now works - SQL Server 2025 — vector type fixes
- SQL Server + Firebird — date conversion fix for
DbType="..."mappings - ClickHouse — table-hint whitespace fix
- Access — non-EN locale compatibility re-fixes
- SAP HANA + DB2 + Firebird — proper SQL escaping in
EXECUTEblocks for create/drop tables - SAP HANA —
DROP TABLE IF NOT EXISTShandled on SQL level - EF.Core / SQL Server —
UseSequence-defined fields now detected as identity (#5439) - F# support — compatibility with
FSharp.Core10.1.x; record mapping fixes for case-only-distinct member names
linq2db.cli:
- Per-RID tool packaging.
linq2db.clinow ships as per-RID tool packages (win-x64/win-x86/win-arm64/linux-x64/linux-arm64/osx-arm64/osx-x64).dotnet tool install -g linq2db.cliauto-picks the variant for your SDK; add--arch x86when you need 32-bit (Jet OLE DB; or to match a 32-bit ACE / SqlCe / SAP HANA driver). - Breaking:
--architecturescaffold option removed — bitness is now fixed at install time. Jet connection strings on a 64-bit process now fail fast with a clear x86-variant hint. See #5539.
What's Changed
- Release 6.2.1 by @MaceWindu in #5426
- Fix compatibility with FSharp.Core 10.1.x by @MaceWindu in #5430
- Fixed a StackOverflowException when using chained AsQueryable() calls. by @sdanyliv in #5433
- IgnoreConflicts option in BulkCopyOptions for MySql/MariaDB, PostgreSQL and SQLite by @darko1979 in #5395
- Relaxed restriction for Sql.Row and fields with conversion. by @sdanyliv in #5438
- Add JetBrains support section to README by @sdanyliv in #5448
- Initial setup for Claude code by @MaceWindu in #5452
- Wrapped key in LINQ Query by @sdanyliv in #5456
- Disabled Clickhouse.Octonica provider tests. by @sdanyliv in #5460
- Fix null checks optimization for parameterized predicates (#5445) by @sdanyliv in #5464
- Fix CTE columns incorrectly removed by optimizer by @sdanyliv in #5462
- Fix WHERE clause lost during nested UNION ALL flattening by @sdanyliv in #5465
- Fix UnionAll + string member access (.Length, IsNullOrEmpty) by @jogibear9988 in #5459
- Fix PostgreSQL array parameter query cache misses by @sdanyliv in #5470
- Fix type construction (post-merge quic fix) by @MaceWindu in #5471
- Bump versions for 6.3.0 release by @MaceWindu in #5474
- Fix build issues by @viceroypenguin in #5472
- Claude Code configuration and tuning by @MaceWindu in #5473
- Improved UPDATE transformation for providers that do not support UPDATE FROM. by @jods4 in #5414
- Add MATERIALIZED CTE hint via AsCte builder (#5323) by @sdanyliv in #5478
- [EFCore] Add SQL Server UseSequence mapping detection by @MaceWindu in #5439
- Fix
nullhandling by value converter by @MaceWindu in #5437 - Review tooling: further improvements by @MaceWindu in #5479
- Oracle: use NVL for 2 arguments COALESCE by @jods4 in #5443
- Correct DropTable throwExceptionIfNotExists behavior by @xamtam54 in #5463
- Fix build errors by @igor-tkachev in #5491
- Rename DML types to follow library abbreviation conventions by @igor-tkachev in #5492
- Revert coalesce to nvl conversion by @jods4 in #5490
- Fix PostgreSQL cache misses in Unnest/GenerateSeries/GenerateSubscripts and core FromSqlScalar by @sdanyliv in #5484
- Fix invalid SQL from UPDATE with row-subquery values by @jods4 in #5486
- More relaxed converter check on rows by @jods4 in #5498
- [Claude Code] Split /test skill: extract /test-providers for env management by @sdanyliv in #5499
- Fix #5413: don't fall through to EXISTS when validator over-rejects column-position scalar subqueries on Oracle by @jods4 in #5500
- Add regression test for CTE + let pattern (#5359) by @sdanyliv in #5509
- [ClickHouse] Fix missing space before table hint when using TableHint by @igor-tkachev in #5449
- Fix interface member access by @igor-tkachev in #5510
- Gate IDE analyzers, ReportAnalyzer, xml-doc to Release builds by @MaceWindu in #5516
- Translate Enum.HasFlag by @sdanyliv in #5503
- Add AsQueryable parameterization API by @sdanyliv in #5495
- Improve "now" translation to support TZ and UTC variations by @jods4 in #5467
- Add DuckDB data provider by @stdray in #5451
- Fix DuckDB date translation after PR #5467/#5451 merge race by @MaceWindu in #5518
- Fix DateTime.Date truncation cast preserving column DbType by @MaceWindu in #5517
- Fix #5355: Resolve association via realized concrete type for interface/abstract-base member access by @sdanyliv in #5511
- [Claude Code] Refinements + KB build infrastructure + azp-run helper by @MaceWindu in #5487
- Fix #5413: correlated row-setter UPDATE on Oracle 12+ by @jods4 in #5507
- Fix #5505: skip ValueConverter wrap when SET value uses a field by @sdanyliv in #5506
- Fix #5519: Access read-side string parsers should be FromDatabase by @MaceWindu in #5520
- Fix IN-to-EXISTS conversion for set-based subqueries by @igor-tkachev in #5522
- Fix #5404: wrap non-nullable subquery aggregates with COALESCE by @sdanyliv in #5502
- Translate string.TrimStart/TrimEnd via StringMemberTranslator by @sdanyliv in #5515
- Fix #5154: remove [SqlQueryDependentParams] from Sql.Expr params by @sdanyliv in #5526
- Wire string.Concat translation across all providers by @MaceWindu in #5504
- Release prep 6.3.0 by @MaceWindu in #5533
- Fix build. by @igor-tkachev in #5537
- Release 6.3.0 by @MaceWindu in #5534
New Contributors
- @darko1979 made their first contribution in #5395
- @xamtam54 made their first contribution in #5463
- @stdray made their first contribution in #5451
Full Changelog: v6.2.1...v6.3.0