Skip to content

Commit f2ab772

Browse files
authored
Merge pull request #379 from servicetitan/mergeUpstream
Merge upstream
2 parents 132e13f + d743cb4 commit f2ab772

File tree

193 files changed

+4306
-803
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

193 files changed

+4306
-803
lines changed

ChangeLog/7.2.0-Beta-2-dev.txt

Lines changed: 0 additions & 6 deletions
This file was deleted.

ChangeLog/7.2.0-Beta-2.txt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
[main] Upgrade hints change names of constructors' string parameters for better understanding of what suppose to be in them.
2+
[main] Improved string operations Trim/TrimStart/TrimEnd support
3+
[main] Obsolete DomainConfiguration.DefauktForeignKeyMode const removed, the correctly named constant still exists
4+
[main] Obsolete SqlPersistTask constructors removed
5+
[main] Obsolete AggregateProvider constructor removed
6+
[main] Obsolete CalculateProvider constructor removed
7+
[main] Updated BitFaster.Caching to version 2.5.3
8+
[firebird] Updated client library to version 10.3.2
9+
[mysql] SqlDml.NullIf function now correctly translated
10+
[mysql] Improved support for string.PadLeft/PadRight opertaions
11+
[mysql] Updated client library to version 8.4.0
12+
[postgresql] Updated client library to version 9.0.3
13+
[postgresql] Improved .Milliseconds part translation for types that have the part
14+
[postgresql] Improved TimeSpan.TotalMilliseconds translation
15+
[postgresql] AppContext switch "Npgsql.EnableLegacyTimestampBehavior" is turned off if user hasn't set it before Domain build
16+
[postgresql] Both states of "Npgsql.EnableLegacyTimestampBehavior" AppContext switch are supported
17+
[postgresql] AppContext switch "Npgsql.DisableDateTimeInfinityConversions" is turned on if user hasn't set it before Domain build
18+
[postgresql] Supported both states of "Npgsql.DisableDateTimeInfinityConversions" AppContext switch, though "true" is recommended
19+
[postgresql] When infinity conversions are enabled, extra statements will be applied to certain operations to return expected results
20+
[postgresql] DateTime values '0001.01.01 00:00:00.00000' and '9999.12.31 23:59:59.99999' will be read as MinValue and MaxValue accordingly
21+
[postgresql] DateTimeOffset values '0001.01.01 00:00:00.00000+00:00' and '9999.12.31 23:59:59.99999+00:00' will be read as MinValue and MaxValue accordingly
22+
[postgresql] When legacy timestamp behavior is disabled, connection time zone is applied to DateTimeOffset values if possible, otherwise, to local one
23+
[postgresql] TimeSpans based on values lower than -9223372036854775800L and higher 92233720368547758xxL will be read as MinValue and MaxValue accordingly
24+
[postgresql] For PostgreSQL 13+ apply 'trim_scale' function to results of aggregation to improve compatibility with .NET decimal
25+
[oracle] Updated client library to version 23.7.0
26+
[sqlite] Fixed string.Lenght translation
27+
[sqlite] Added support for string.PadLeft/PadRight operations
28+
[sqlserver] Updated client library to version 5.2.2

ChangeLog/7.2.0-RC-dev.txt

Whitespace-only changes.

Directory.Packages.props

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,16 @@
2525
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
2626
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.0.0" />
2727
<PackageVersion Include="BitFaster.Caching" Version="2.5.3" />
28-
<PackageVersion Include="FirebirdSql.Data.FirebirdClient" Version="8.5.3" />
28+
<PackageVersion Include="FirebirdSql.Data.FirebirdClient" Version="10.3.2" />
2929
<PackageVersion Include="FSharp.Core" Version="4.7.0" />
3030
<PackageVersion Include="Google.Protobuf" Version="3.29.3" />
31-
<PackageVersion Include="log4net" Version="2.0.10" />
31+
<PackageVersion Include="log4net" Version="3.0.3" />
3232
<PackageVersion Include="Mono.Cecil" Version="0.11.6" />
33-
<PackageVersion Include="MySql.Data" Version="8.0.31" />
34-
<PackageVersion Include="NLog" Version="4.5.0" />
35-
<PackageVersion Include="Npgsql" Version="8.0.3" />
33+
<PackageVersion Include="MySql.Data" Version="8.4.0" />
34+
<PackageVersion Include="NLog" Version="5.3.4" />
35+
<PackageVersion Include="Npgsql" Version="9.0.3" />
3636
<PackageVersion Include="NUnit" Version="3.14.0" />
3737
<PackageVersion Include="NUnit3TestAdapter" Version="4.5.0" />
38-
<PackageVersion Include="Oracle.ManagedDataAccess.Core" Version="2.18.151" />
38+
<PackageVersion Include="Oracle.ManagedDataAccess.Core" Version="23.7.0" />
3939
</ItemGroup>
4040
</Project>

Orm/Xtensive.Orm.PostgreSql/Orm.Providers.PostgreSql/DomainHandler.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2008-2020 Xtensive LLC.
1+
// Copyright (C) 2008-2025 Xtensive LLC.
22
// This code is distributed under MIT license terms.
33
// See the License.txt file in the project root for more information.
44
// Created by: Alexey Gamzov
@@ -18,15 +18,24 @@ namespace Xtensive.Orm.Providers.PostgreSql
1818
/// </summary>
1919
public class DomainHandler : Providers.DomainHandler
2020
{
21+
/// <summary>
22+
/// <see langword="true"/> if storage can trim insignificant zeros in numeric values
23+
/// </summary>
24+
protected bool HasNativeTrimOfInsignificantZerosInDecimals =>
25+
Handlers.ProviderInfo.StorageVersion.Major >= 13;
26+
2127
/// <inheritdoc/>
2228
protected override ICompiler CreateCompiler(CompilerConfiguration configuration) =>
2329
new SqlCompiler(Handlers, configuration);
2430

2531
/// <inheritdoc/>
2632
protected override IPreCompiler CreatePreCompiler(CompilerConfiguration configuration)
2733
{
28-
var decimalAggregateCorrector = new AggregateOverDecimalColumnCorrector(Handlers.Domain.Model);
29-
return new CompositePreCompiler(decimalAggregateCorrector, base.CreatePreCompiler(configuration));
34+
if (!HasNativeTrimOfInsignificantZerosInDecimals) {
35+
var decimalAggregateCorrector = new AggregateOverDecimalColumnCorrector(Handlers.Domain.Model);
36+
return new CompositePreCompiler(decimalAggregateCorrector, base.CreatePreCompiler(configuration));
37+
}
38+
return base.CreatePreCompiler(configuration);
3039
}
3140

3241
/// <inheritdoc/>

Orm/Xtensive.Orm.PostgreSql/Orm.Providers.PostgreSql/PostgresqlSqlDml.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
// Copyright (C) 2014-2020 Xtensive LLC.
1+
// Copyright (C) 2014-2025 Xtensive LLC.
22
// This code is distributed under MIT license terms.
33
// See the License.txt file in the project root for more information.
44
// Created by: Alena Mikshina
55
// Created: 2014.05.06;
66

77
using System;
88
using Xtensive.Core;
9+
using Xtensive.Sql;
910
using Xtensive.Sql.Dml;
1011

1112
namespace Xtensive.Orm.Providers.PostgreSql
@@ -17,6 +18,15 @@ namespace Xtensive.Orm.Providers.PostgreSql
1718
/// </summary>
1819
public class PostgresqlSqlDml
1920
{
21+
/// <summary>
22+
/// Creates an expression for native "trim_scale" function call. The function is supported starting from PostgreSQL 13
23+
/// </summary>
24+
public static SqlExpression DecimalTrimScale(SqlExpression operand)
25+
{
26+
ArgumentNullException.ThrowIfNull(operand);
27+
return SqlDml.FunctionCall("TRIM_SCALE", operand);
28+
}
29+
2030
#region Spatial types
2131

2232
/// <summary>

Orm/Xtensive.Orm.PostgreSql/Orm.Providers.PostgreSql/SqlCompiler.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2009-2021 Xtensive LLC.
1+
// Copyright (C) 2009-2025 Xtensive LLC.
22
// This code is distributed under MIT license terms.
33
// See the License.txt file in the project root for more information.
44
// Created by: Denis Krjuchkov
@@ -21,6 +21,8 @@ internal class SqlCompiler : Providers.SqlCompiler
2121
{
2222
private const int MaxDotnetDecimalPrecision = 28;
2323

24+
private readonly bool canRemoveInsignificantZerosInDecimals;
25+
2426
protected override SqlProvider VisitFreeText(FreeTextProvider provider)
2527
{
2628
var rankColumnName = provider.Header.Columns[provider.Header.Columns.Count - 1].Name;
@@ -61,6 +63,11 @@ protected override SqlExpression ProcessAggregate(SqlProvider source, IReadOnlyL
6163
var aggregateType = aggregateColumn.AggregateType;
6264
var originCalculateColumn = source.Origin.Header.Columns[aggregateColumn.SourceIndex];
6365
if (AggregateRequiresDecimalAdjustments(aggregateColumn)) {
66+
if (canRemoveInsignificantZerosInDecimals) {
67+
return (IsCalculatedColumn(originCalculateColumn))
68+
? PostgresqlSqlDml.DecimalTrimScale(SqlDml.Cast(result, Driver.MapValueType(aggregateColumn.Type)))
69+
: PostgresqlSqlDml.DecimalTrimScale(result);
70+
}
6471
if (!IsCalculatedColumn(originCalculateColumn)) {
6572
// this is aggregate by one column, result will be defined by the precision and scale of the column
6673
return result;
@@ -138,6 +145,7 @@ AggregateType.Min or
138145
public SqlCompiler(HandlerAccessor handlers, in CompilerConfiguration configuration)
139146
: base(handlers, configuration)
140147
{
148+
canRemoveInsignificantZerosInDecimals = handlers.ProviderInfo.StorageVersion.Major >= 13;
141149
}
142150
}
143151
}

Orm/Xtensive.Orm.PostgreSql/Sql.Drivers.PostgreSql/Connection.cs

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2009-2021 Xtensive LLC.
1+
// Copyright (C) 2009-2025 Xtensive LLC.
22
// This code is distributed under MIT license terms.
33
// See the License.txt file in the project root for more information.
44
// Created by: Denis Krjuchkov
@@ -8,6 +8,7 @@
88
using Npgsql;
99
using System.Data;
1010
using System.Data.Common;
11+
using System.Reflection;
1112
using System.Threading;
1213
using System.Threading.Tasks;
1314
using Xtensive.Core;
@@ -54,10 +55,9 @@ public override void Commit(bool rollbackOnFail = false)
5455
{
5556
EnsureIsNotDisposed();
5657
EnsureTransactionIsActive();
57-
5858
try {
59-
if (!IsTransactionCompleted()) {
60-
ActiveTransaction.Commit();
59+
if(!IsTransactionCompleted()) {
60+
activeTransaction.Commit();
6161
}
6262
activeTransactionIsCompleted = true;
6363
}
@@ -66,7 +66,7 @@ public override void Commit(bool rollbackOnFail = false)
6666
throw;
6767
}
6868
finally {
69-
ActiveTransaction.Dispose();
69+
activeTransaction.Dispose();
7070
ClearActiveTransaction();
7171
}
7272
}
@@ -77,7 +77,7 @@ public override async Task CommitAsync(bool rollbackOnFail = false, Cancellation
7777
EnsureTransactionIsActive();
7878
try {
7979
if (!IsTransactionCompleted()) {
80-
await ActiveTransaction.CommitAsync(token).ConfigureAwait(false);
80+
await activeTransaction.CommitAsync(token).ConfigureAwait(false);
8181
}
8282
activeTransactionIsCompleted = true;
8383
}
@@ -86,7 +86,7 @@ public override async Task CommitAsync(bool rollbackOnFail = false, Cancellation
8686
throw;
8787
}
8888
finally {
89-
await ActiveTransaction.DisposeAsync().ConfigureAwait(false);
89+
await activeTransaction.DisposeAsync().ConfigureAwait(false);
9090
ClearActiveTransaction();
9191
}
9292
}
@@ -95,14 +95,13 @@ public override void Rollback()
9595
{
9696
EnsureIsNotDisposed();
9797
EnsureTransactionIsActive();
98-
9998
try {
10099
if (!IsTransactionCompleted()) {
101-
ActiveTransaction.Rollback();
100+
activeTransaction.Rollback();
102101
}
103102
}
104103
finally {
105-
ActiveTransaction.Dispose();
104+
activeTransaction.Dispose();
106105
ClearActiveTransaction();
107106
}
108107
}
@@ -113,11 +112,11 @@ public override async Task RollbackAsync(CancellationToken token = default)
113112
EnsureTransactionIsActive();
114113
try {
115114
if (!IsTransactionCompleted()) {
116-
await ActiveTransaction.RollbackAsync(token).ConfigureAwait(false);
115+
await activeTransaction.RollbackAsync(token).ConfigureAwait(false);
117116
}
118117
}
119118
finally {
120-
await ActiveTransaction.DisposeAsync().ConfigureAwait(false);
119+
await activeTransaction.DisposeAsync().ConfigureAwait(false);
121120
ClearActiveTransaction();
122121
}
123122
}
@@ -183,7 +182,7 @@ private void ExecuteNonQuery(string commandText)
183182
EnsureTransactionIsActive();
184183

185184
using var command = CreateCommand(commandText);
186-
command.ExecuteNonQuery();
185+
_ = command.ExecuteNonQuery();
187186
}
188187

189188
private async Task ExecuteNonQueryAsync(string commandText, CancellationToken token)
@@ -193,14 +192,11 @@ private async Task ExecuteNonQueryAsync(string commandText, CancellationToken to
193192

194193
var command = CreateCommand(commandText);
195194
await using (command.ConfigureAwait(false)) {
196-
await command.ExecuteNonQueryAsync(token).ConfigureAwait(false);
195+
_ = await command.ExecuteNonQueryAsync(token).ConfigureAwait(false);
197196
}
198197
}
199198

200-
private bool IsTransactionCompleted()
201-
{
202-
return activeTransaction != null && activeTransactionIsCompleted;
203-
}
199+
private bool IsTransactionCompleted() => activeTransaction.Connection == null;
204200

205201
// Constructors
206202

Orm/Xtensive.Orm.PostgreSql/Sql.Drivers.PostgreSql/Driver.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ namespace Xtensive.Sql.Drivers.PostgreSql
1313
{
1414
internal abstract class Driver : SqlDriver
1515
{
16+
/// <summary>
17+
/// PosgreSQL-specific information about server.
18+
/// </summary>
19+
internal PostgreServerInfo PostgreServerInfo { get; }
20+
1621
[SecuritySafeCritical]
1722
protected override SqlConnection DoCreateConnection()
1823
{
@@ -95,14 +100,18 @@ private SqlExceptionType ProcessClientSideException(NpgsqlException clientSideEx
95100
}
96101
}
97102
}
103+
if (innerException is TimeoutException timeoutException) {
104+
return SqlExceptionType.OperationTimeout;
105+
}
98106
return SqlExceptionType.Unknown;
99107
}
100108

101109
// Constructors
102110

103-
protected Driver(CoreServerInfo coreServerInfo)
111+
protected Driver(CoreServerInfo coreServerInfo, PostgreServerInfo pgServerInfo)
104112
: base(coreServerInfo)
105113
{
114+
PostgreServerInfo = pgServerInfo;
106115
}
107116
}
108117
}

0 commit comments

Comments
 (0)