Skip to content

Commit 010cf85

Browse files
committed
Fix odbc tests
1 parent c50939f commit 010cf85

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

src/NHibernate.Test/Async/Linq/ParameterTests.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using System.Text.RegularExpressions;
1717
using NHibernate.Dialect;
1818
using NHibernate.DomainModel.Northwind.Entities;
19+
using NHibernate.Driver;
1920
using NHibernate.Engine.Query;
2021
using NHibernate.Linq;
2122
using NHibernate.Util;
@@ -318,6 +319,7 @@ public async Task CompareFloatingPointParameterWithIntegralAndFloatingPointColum
318319
{db.NumericEntities.Where(o => o.NullableDouble == doubleParam || o.Integer != doubleParam), "Double"},
319320
{db.NumericEntities.Where(o => o.NullableDouble == doubleParam || o.NullableInteger == doubleParam), "Double"}
320321
};
322+
var odbcDriver = Sfi.ConnectionProvider.Driver is OdbcDriver;
321323

322324
foreach (var pair in queriables)
323325
{
@@ -329,7 +331,7 @@ public async Task CompareFloatingPointParameterWithIntegralAndFloatingPointColum
329331
{
330332
var matches = Regex.Matches(sql, @"cast\([\w\d]+\..+\)");
331333
Assert.That(matches.Count, Is.EqualTo(1));
332-
Assert.That(GetTotalOccurrences(sql, $"Type: {pair.Value}"), Is.EqualTo(1));
334+
Assert.That(GetTotalOccurrences(sql, $"Type: {pair.Value}"), Is.EqualTo(odbcDriver ? 2 : 1));
333335
}));
334336
}
335337
}
@@ -361,6 +363,7 @@ public async Task CompareFloatingPointParameterWithDifferentFloatingPointColumns
361363
var sameType = Sfi.Dialect.TryGetCastTypeName(NHibernateUtil.Single.SqlType, out var singleCast) &&
362364
Sfi.Dialect.TryGetCastTypeName(NHibernateUtil.Double.SqlType, out var doubleCast) &&
363365
singleCast == doubleCast;
366+
var odbcDriver = Sfi.ConnectionProvider.Driver is OdbcDriver;
364367

365368
foreach (var pair in queriables)
366369
{
@@ -375,7 +378,7 @@ public async Task CompareFloatingPointParameterWithDifferentFloatingPointColumns
375378
: Regex.Matches(sql, @"cast\(((@|\?|:)p\d+|\?)\s+as.*\)");
376379
// SQLiteDialect uses sql cast for transparentcast method
377380
Assert.That(matches.Count, Is.EqualTo(sameType && !(Sfi.Dialect is SQLiteDialect) ? 0 : 1));
378-
Assert.That(GetTotalOccurrences(sql, $"Type: {pair.Value}"), Is.EqualTo(1));
381+
Assert.That(GetTotalOccurrences(sql, $"Type: {pair.Value}"), Is.EqualTo(odbcDriver ? 2 : 1));
379382
}));
380383
}
381384
}
@@ -408,6 +411,7 @@ public async Task CompareIntegralParameterWithIntegralAndFloatingPointColumnsAsy
408411
{db.NumericEntities.Where(o => o.NullableLong == longParam || o.Decimal != longParam), "Int64"},
409412
{db.NumericEntities.Where(o => o.NullableLong == longParam || o.NullableSingle > longParam), "Int64"}
410413
};
414+
var odbcDriver = Sfi.ConnectionProvider.Driver is OdbcDriver;
411415

412416
foreach (var pair in queriables)
413417
{
@@ -419,7 +423,7 @@ public async Task CompareIntegralParameterWithIntegralAndFloatingPointColumnsAsy
419423
{
420424
var matches = Regex.Matches(sql, @"cast\(((@|\?|:)p\d+|\?)\s+as.*\)");
421425
Assert.That(matches.Count, Is.EqualTo(1));
422-
Assert.That(GetTotalOccurrences(sql, $"Type: {pair.Value}"), Is.EqualTo(1));
426+
Assert.That(GetTotalOccurrences(sql, $"Type: {pair.Value}"), Is.EqualTo(odbcDriver ? 2 : 1));
423427
}));
424428
}
425429
}

src/NHibernate.Test/Linq/ParameterTests.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Text.RegularExpressions;
77
using NHibernate.Dialect;
88
using NHibernate.DomainModel.Northwind.Entities;
9+
using NHibernate.Driver;
910
using NHibernate.Engine.Query;
1011
using NHibernate.Linq;
1112
using NHibernate.Util;
@@ -306,6 +307,7 @@ public void CompareFloatingPointParameterWithIntegralAndFloatingPointColumns()
306307
{db.NumericEntities.Where(o => o.NullableDouble == doubleParam || o.Integer != doubleParam), "Double"},
307308
{db.NumericEntities.Where(o => o.NullableDouble == doubleParam || o.NullableInteger == doubleParam), "Double"}
308309
};
310+
var odbcDriver = Sfi.ConnectionProvider.Driver is OdbcDriver;
309311

310312
foreach (var pair in queriables)
311313
{
@@ -317,7 +319,7 @@ public void CompareFloatingPointParameterWithIntegralAndFloatingPointColumns()
317319
{
318320
var matches = Regex.Matches(sql, @"cast\([\w\d]+\..+\)");
319321
Assert.That(matches.Count, Is.EqualTo(1));
320-
Assert.That(GetTotalOccurrences(sql, $"Type: {pair.Value}"), Is.EqualTo(1));
322+
Assert.That(GetTotalOccurrences(sql, $"Type: {pair.Value}"), Is.EqualTo(odbcDriver ? 2 : 1));
321323
});
322324
}
323325
}
@@ -349,6 +351,7 @@ public void CompareFloatingPointParameterWithDifferentFloatingPointColumns()
349351
var sameType = Sfi.Dialect.TryGetCastTypeName(NHibernateUtil.Single.SqlType, out var singleCast) &&
350352
Sfi.Dialect.TryGetCastTypeName(NHibernateUtil.Double.SqlType, out var doubleCast) &&
351353
singleCast == doubleCast;
354+
var odbcDriver = Sfi.ConnectionProvider.Driver is OdbcDriver;
352355

353356
foreach (var pair in queriables)
354357
{
@@ -363,7 +366,7 @@ public void CompareFloatingPointParameterWithDifferentFloatingPointColumns()
363366
: Regex.Matches(sql, @"cast\(((@|\?|:)p\d+|\?)\s+as.*\)");
364367
// SQLiteDialect uses sql cast for transparentcast method
365368
Assert.That(matches.Count, Is.EqualTo(sameType && !(Sfi.Dialect is SQLiteDialect) ? 0 : 1));
366-
Assert.That(GetTotalOccurrences(sql, $"Type: {pair.Value}"), Is.EqualTo(1));
369+
Assert.That(GetTotalOccurrences(sql, $"Type: {pair.Value}"), Is.EqualTo(odbcDriver ? 2 : 1));
367370
});
368371
}
369372
}
@@ -396,6 +399,7 @@ public void CompareIntegralParameterWithIntegralAndFloatingPointColumns()
396399
{db.NumericEntities.Where(o => o.NullableLong == longParam || o.Decimal != longParam), "Int64"},
397400
{db.NumericEntities.Where(o => o.NullableLong == longParam || o.NullableSingle > longParam), "Int64"}
398401
};
402+
var odbcDriver = Sfi.ConnectionProvider.Driver is OdbcDriver;
399403

400404
foreach (var pair in queriables)
401405
{
@@ -407,7 +411,7 @@ public void CompareIntegralParameterWithIntegralAndFloatingPointColumns()
407411
{
408412
var matches = Regex.Matches(sql, @"cast\(((@|\?|:)p\d+|\?)\s+as.*\)");
409413
Assert.That(matches.Count, Is.EqualTo(1));
410-
Assert.That(GetTotalOccurrences(sql, $"Type: {pair.Value}"), Is.EqualTo(1));
414+
Assert.That(GetTotalOccurrences(sql, $"Type: {pair.Value}"), Is.EqualTo(odbcDriver ? 2 : 1));
411415
});
412416
}
413417
}

src/NHibernate/Linq/Visitors/ParameterTypeLocator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ internal static void SetParameterTypes(
141141
}
142142
}
143143

144-
constantExpressions.Select(o => o.Type.UnwrapIfNullable()).Distinct().Single();
145-
var constantExpression = constantExpressions.First(); // TODO: check when types are different
144+
// All constant expressions have the same type/value
145+
var constantExpression = constantExpressions.First();
146146
var constantType = constantExpression.Type.UnwrapIfNullable();
147147
IType type = null;
148148
if (

0 commit comments

Comments
 (0)