Skip to content

Commit 326db16

Browse files
committed
Changes for v4.3.0
1 parent 0df4313 commit 326db16

16 files changed

+169
-48
lines changed

Build/linq2db.Default.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
22
<PropertyGroup>
3-
<Version>4.2.0</Version>
3+
<Version>4.3.0</Version>
44

55
<Description>LINQ to DB is a data access technology that provides a run-time infrastructure for managing relational data as objects. This package is a provider for DB2 on the IBM iSeries.</Description>
66
<Authors>Roy Chase, Nikos Sarris</Authors>

Directory.Packages.props

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
-->
88
<ItemGroup>
99
<!--as stated in issue 1 - packages in this item group shouldn't be duplicated in other groups-->
10-
<PackageVersion Include="linq2db" Version="4.2.0" />
11-
<PackageVersion Include="linq2db.Tools" Version="4.2.0" />
12-
<PackageVersion Include="linq2db.AspNet" Version="4.2.0" />
13-
<PackageVersion Include="linq2db.Remote.Grpc" Version="4.2.0" />
14-
<PackageVersion Include="linq2db.Remote.Wcf" Version="4.2.0" />
10+
<PackageVersion Include="linq2db" Version="4.3.0" />
11+
<PackageVersion Include="linq2db.Tools" Version="4.3.0" />
12+
<PackageVersion Include="linq2db.AspNet" Version="4.3.0" />
13+
<PackageVersion Include="linq2db.Remote.Grpc" Version="4.3.0" />
14+
<PackageVersion Include="linq2db.Remote.Wcf" Version="4.3.0" />
1515
<PackageVersion Include="JetBrains.Annotations" Version="2022.1.0" />
1616
<!--generic packages for source projects-->
1717
<!--generic packages for source projects-->

Source/ISeriesProvider/DB2iSeriesMetadataReader.cs

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace LinqToDB.DataProvider.DB2iSeries
66
{
7+
using LinqToDB.DataProvider.DB2;
8+
using LinqToDB.SqlProvider;
79
using SqlQuery;
810
using System.CodeDom;
911
using System.Collections.Concurrent;
@@ -94,8 +96,8 @@ private T[] GetExpressionAttributes<T>(Type type, MemberInfo memberInfo, bool in
9496
case "StringAggregate" when memberInfo is MethodInfo stringAggregateMethod:
9597
var firstParameter = stringAggregateMethod.GetParameters().Any(x => x.Name == "selector") ? "selector" : "source";
9698
return GetExtension<T>(() => new Sql.ExtensionAttribute(providerName, "LISTAGG({" + firstParameter + "}, {separator}){_}{aggregation_ordering?}") { IsAggregate = true, ChainPrecedence = 10 });
97-
//case "Decimal":
98-
// break;
99+
//case "Decimal":
100+
// break;
99101
}
100102

101103
return EmptyArray<T>.Value;
@@ -240,7 +242,7 @@ public class TrimBuilderDB2i : Sql.IExtensionCallBuilder
240242
{
241243
public void Build(Sql.ISqExtensionBuilder builder)
242244
{
243-
var text = builder.GetExpression(0);
245+
var stringExpression = builder.GetExpression(0);
244246
var charExpression = builder.GetExpression(1);
245247

246248
char[] chars;
@@ -270,17 +272,29 @@ public void Build(Sql.ISqExtensionBuilder builder)
270272

271273
var direction = builder.Member.Name switch
272274
{
273-
nameof(Linq.Expressions.TrimLeft) => 'L',
274-
nameof(Linq.Expressions.TrimRight) => 'T',
275-
_ => 'B',
275+
nameof(Linq.Expressions.TrimLeft) => "LTRIM",
276+
nameof(Linq.Expressions.TrimRight) => "RTRIM",
277+
_ => "TRIM",
276278
};
277279

278-
var sqlExpression =
279-
chars.Length == 0 ?
280-
$"Strip({{0}}, {direction})" :
281-
chars.Skip(1).Aggregate($"Strip({{0}}, {direction}, '{chars[0]}')", (acc, cur) => $"Strip({acc}, {direction} , '{cur}')");
280+
if (chars == null || chars.Length == 0)
281+
{
282+
builder.ResultExpression = new SqlFunction(
283+
typeof(string),
284+
direction,
285+
stringExpression);
286+
return;
287+
}
288+
289+
if (!builder.DataContext.SqlProviderFlags.CustomFlags.Contains(Constants.ProviderFlags.SupportsTrimCharacters))
290+
throw new LinqToDBException("TrimLeft/TrimRight with multiple characters not supported on i series version 7.1");
282291

283-
builder.ResultExpression = new SqlExpression(sqlExpression, text);
292+
builder.ResultExpression = new SqlExpression(
293+
typeof(string),
294+
direction + "({0}, {1})",
295+
Precedence.Primary,
296+
stringExpression,
297+
new SqlExpression(typeof(string), "{0}", new SqlValue(new string(chars))));
284298
}
285299
}
286300
}

Source/ISeriesProvider/DB2iSeriesProviderOptions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public DB2iSeriesProviderOptions(string providerName, DB2iSeriesProviderType pro
2626
SupportsNCharTypes = version >= DB2iSeriesVersion.V7_1;
2727
SupportsDropIfExists = version >= DB2iSeriesVersion.V7_4;
2828
SupportsArbitraryTimeStampPrecision = version >= DB2iSeriesVersion.V7_2;
29+
SupportsTrimCharacters = version >= DB2iSeriesVersion.V7_2;
2930
}
3031

3132
public DB2iSeriesProviderOptions()
@@ -46,6 +47,7 @@ public DB2iSeriesProviderOptions()
4647
public bool SupportsNCharTypes { get; set; }
4748
public bool SupportsDropIfExists { get; set; }
4849
public bool SupportsArbitraryTimeStampPrecision { get; set; }
50+
public bool SupportsTrimCharacters { get; set; }
4951
public bool MapGuidAsString { get; set; }
5052
}
5153
}

Source/ISeriesProvider/DB2iSeriesSqlProviderFlags.cs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
namespace LinqToDB.DataProvider.DB2iSeries
22
{
3-
using LinqToDB.Tools;
43
using SqlProvider;
54

65
public class DB2iSeriesSqlProviderFlags
@@ -12,7 +11,8 @@ public DB2iSeriesSqlProviderFlags(
1211
bool supportsMergeStatement,
1312
bool supportsNCharTypes,
1413
bool supportsDropTableIfExists,
15-
bool supportsArbitraryTimeStampPrecision)
14+
bool supportsArbitraryTimeStampPrecision,
15+
bool suppotsTrimCharacters)
1616
{
1717
SupportsOffsetClause = supportsOffsetClause;
1818
SupportsTruncateTable = supportsTruncateTable;
@@ -21,6 +21,7 @@ public DB2iSeriesSqlProviderFlags(
2121
SupportsNCharTypes = supportsNCharTypes;
2222
SupportsDropTableIfExists = supportsDropTableIfExists;
2323
SupportsArbitraryTimeStampPrecision = supportsArbitraryTimeStampPrecision;
24+
SupportsTrimCharacters = suppotsTrimCharacters;
2425
}
2526

2627
public DB2iSeriesSqlProviderFlags(SqlProviderFlags sqlProviderFlags)
@@ -31,7 +32,8 @@ public DB2iSeriesSqlProviderFlags(SqlProviderFlags sqlProviderFlags)
3132
supportsMergeStatement: sqlProviderFlags.CustomFlags.Contains(Constants.ProviderFlags.SupportsMergeStatement),
3233
supportsNCharTypes: sqlProviderFlags.CustomFlags.Contains(Constants.ProviderFlags.SupportsNCharTypes),
3334
supportsDropTableIfExists: sqlProviderFlags.CustomFlags.Contains(Constants.ProviderFlags.SupportsDropTableIfExists),
34-
supportsArbitraryTimeStampPrecision: sqlProviderFlags.CustomFlags.Contains(Constants.ProviderFlags.SupportsArbitraryTimeStampPrecision))
35+
supportsArbitraryTimeStampPrecision: sqlProviderFlags.CustomFlags.Contains(Constants.ProviderFlags.SupportsArbitraryTimeStampPrecision),
36+
suppotsTrimCharacters: sqlProviderFlags.CustomFlags.Contains(Constants.ProviderFlags.SupportsTrimCharacters))
3537
{
3638

3739
}
@@ -44,7 +46,8 @@ public DB2iSeriesSqlProviderFlags(DB2iSeriesProviderOptions options)
4446
supportsMergeStatement: options.SupportsMergeStatement,
4547
supportsNCharTypes: options.SupportsNCharTypes,
4648
supportsDropTableIfExists: options.SupportsDropIfExists,
47-
supportsArbitraryTimeStampPrecision: options.SupportsArbitraryTimeStampPrecision)
49+
supportsArbitraryTimeStampPrecision: options.SupportsArbitraryTimeStampPrecision,
50+
suppotsTrimCharacters: options.SupportsTrimCharacters)
4851
{
4952

5053
}
@@ -59,7 +62,8 @@ public DB2iSeriesSqlProviderFlags(
5962
supportsMergeStatement: version >= DB2iSeriesVersion.V7_1,
6063
supportsNCharTypes: version >= DB2iSeriesVersion.V7_1,
6164
supportsDropTableIfExists: version >= DB2iSeriesVersion.V7_4,
62-
supportsArbitraryTimeStampPrecision: version >= DB2iSeriesVersion.V7_2
65+
supportsArbitraryTimeStampPrecision: version >= DB2iSeriesVersion.V7_2,
66+
suppotsTrimCharacters: version >= DB2iSeriesVersion.V7_2
6367
)
6468
{
6569

@@ -72,6 +76,7 @@ public DB2iSeriesSqlProviderFlags(
7276
public bool SupportsNCharTypes { get; }
7377
public bool SupportsDropTableIfExists { get; }
7478
public bool SupportsArbitraryTimeStampPrecision { get; }
79+
public bool SupportsTrimCharacters { get; }
7580

7681
public void SetCustomFlags(SqlProviderFlags sqlProviderFlags)
7782
{
@@ -82,6 +87,7 @@ public void SetCustomFlags(SqlProviderFlags sqlProviderFlags)
8287
sqlProviderFlags.SetFlag(Constants.ProviderFlags.SupportsNCharTypes, SupportsNCharTypes);
8388
sqlProviderFlags.SetFlag(Constants.ProviderFlags.SupportsDropTableIfExists, SupportsDropTableIfExists);
8489
sqlProviderFlags.SetFlag(Constants.ProviderFlags.SupportsArbitraryTimeStampPrecision, SupportsArbitraryTimeStampPrecision);
90+
sqlProviderFlags.SetFlag(Constants.ProviderFlags.SupportsTrimCharacters, SupportsTrimCharacters);
8591
}
8692
}
8793
}

Source/ISeriesProvider/Internal/Constants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public static class ProviderFlags
1212
public const string SupportsNCharTypes = "SupportsNCharTypes";
1313
public const string SupportsDropTableIfExists = "SupportsDropTableIfExists";
1414
public const string SupportsArbitraryTimeStampPrecision = "SupportsArbitraryTimeStampPrecision";
15+
public const string SupportsTrimCharacters = "SupportsTrimCharacters";
1516
}
1617

1718
public static class DbTypes

Tests How-to.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77

88
- How to maintain the tests from upstream
99

10-
The test have been set up in a way that tests from upstream can be simply copied over. You have to copy only the source code files and not the project files as follows:
10+
The tests have been set up in a way that tests from upstream can be simply copied over. You have to copy only the source code files and not the project files as follows:
1111

1212
- Copy all code (e.g. exlude \bin, \obj and .csproj file) from :
1313
Tests\Base (except CustomizationSupport folder)
14-
Tests\Linq (apply customization changes to the TestsInitialization.cs make class partial and InitCustom() invocation in Initialize())
14+
Tests\Linq
1515
Tests\FSharp
1616
Tests\VisualBasic
1717
Tests\Model

Tests/Base/CustomizationSupport/CustomizationSupport.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,10 @@ public static class CustomizationSupport
44
{
55
//Replace this instance with a custom implementation to override default behaviour
66
public static readonly CustomizationSupportInterceptor Interceptor = new Db2iInterceptor();
7+
8+
public static void Init()
9+
{
10+
LinqToDB.DataProvider.DB2iSeries.DB2iSeriesTools.RegisterProviderDetector();
11+
}
712
}
813
}

Tests/Linq/Custom/TestsInitialization.cs

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

Tests/Linq/DataProvider/SybaseTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ public static IEnumerable<StringTestCase> StringTestCases
356356
{
357357
get
358358
{
359-
yield return new StringTestCase("'\u2000\u2001\u2002\u2003\uabab\u03bctесt", "u&'''\\2000\\2001\\2002\\2003\\abab\\03bctесt'", "Test case 1");
359+
yield return new StringTestCase("'\u2000\u2001\u2002\u2003\uabab\u03bctest тест", "u&'''\\2000\\2001\\2002\\2003\\abab\\03bctest тест'", "Test case 1");
360360
// this case fails for parameters, because driver terminates parameter value at \0 character
361361
//yield return Tuple.Create("\0test", "char(0) + 'test'");
362362
}

0 commit comments

Comments
 (0)