diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index b0c42ff..65dff82 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -80,6 +80,7 @@ jobs:
with:
dotnet-version: |
8.0.x
+ 9.0.x
- uses: dotnet/nbgv@master
id: nbgv
diff --git a/Directory.Build.props b/Directory.Build.props
index 30b95cb..ae087fd 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -16,8 +16,6 @@
True
true
- $(DefineConstants);EF_CORE_8
-
$(NoWarn);SA1633
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index dd51557..946f4c7 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -35,6 +35,7 @@
+
diff --git a/src/Zomp.EFCore.BinaryFunctions.Npgsql/Query/Internal/NpgsqlBinaryTranslator.cs b/src/Zomp.EFCore.BinaryFunctions.Npgsql/Query/Internal/NpgsqlBinaryTranslator.cs
index d6ef9d8..521f797 100644
--- a/src/Zomp.EFCore.BinaryFunctions.Npgsql/Query/Internal/NpgsqlBinaryTranslator.cs
+++ b/src/Zomp.EFCore.BinaryFunctions.Npgsql/Query/Internal/NpgsqlBinaryTranslator.cs
@@ -50,9 +50,15 @@ protected override SqlExpression GetBytes(SqlExpression sqlExpression)
}
// Every byte is two characters in hex, thus multiply by 2
+#if !EF_CORE_8
+ var byteSize = new SqlConstantExpression(sizeOfType * 2, null);
+ var zero = new SqlConstantExpression("0", null);
+ var hex = new SqlConstantExpression("hex", null);
+#else
var byteSize = new SqlConstantExpression(Expression.Constant(sizeOfType * 2), null);
var zero = new SqlConstantExpression(Expression.Constant("0"), null);
var hex = new SqlConstantExpression(Expression.Constant("hex"), null);
+#endif
var lPad = sqlExpressionFactory.Function("LPAD", [toHex, byteSize, zero], true, LPadArgumentsPropagateNullability, typeof(string));
var decode = sqlExpressionFactory.Function("decode", [lPad, hex], true, DecodeArgumentsPropagateNullabilityArray, typeof(string), byteArrayTypeMapping);
return new SqlUnaryExpression(ExpressionType.Convert, decode, typeof(byte[]), byteArrayTypeMapping);
diff --git a/src/Zomp.EFCore.BinaryFunctions.SqlServer/Infrastructure/Internal/SqlServerBinaryTranslator.cs b/src/Zomp.EFCore.BinaryFunctions.SqlServer/Infrastructure/Internal/SqlServerBinaryTranslator.cs
index 19486ea..5ec7e1d 100644
--- a/src/Zomp.EFCore.BinaryFunctions.SqlServer/Infrastructure/Internal/SqlServerBinaryTranslator.cs
+++ b/src/Zomp.EFCore.BinaryFunctions.SqlServer/Infrastructure/Internal/SqlServerBinaryTranslator.cs
@@ -15,9 +15,16 @@ public class SqlServerBinaryTranslator(ISqlExpressionFactory sqlExpressionFactor
// Constants
private static readonly double TwoToThePowerOfMinus52 = Math.Pow(2d, -52);
+
+#if !EF_CORE_8
+ private static readonly SqlExpression TwoToThePowerOfMinus52Sql = new SqlConstantExpression(TwoToThePowerOfMinus52, null);
+ private static readonly SqlExpression OneFloat = new SqlConstantExpression(1d, null);
+ private static readonly SqlExpression TwoFloat = new SqlConstantExpression(2d, null);
+#else
private static readonly SqlExpression TwoToThePowerOfMinus52Sql = new SqlConstantExpression(Expression.Constant(TwoToThePowerOfMinus52), null);
private static readonly SqlExpression OneFloat = new SqlConstantExpression(Expression.Constant(1d), null);
private static readonly SqlExpression TwoFloat = new SqlConstantExpression(Expression.Constant(2d), null);
+#endif
// Must be varbinary.
private static readonly SqlExpression X000FFFFFFFFFFFFF = new SqlFragmentExpression("0x000FFFFFFFFFFFFF");
@@ -51,7 +58,11 @@ private SqlBinaryExpression ToDouble(SqlExpression sqlExpression)
{
var colNameBigInt = new SqlUnaryExpression(ExpressionType.Convert, sqlExpression, typeof(long), null);
+#if !EF_CORE_8
+ var sql1023 = new SqlConstantExpression(1023, null);
+#else
var sql1023 = new SqlConstantExpression(Expression.Constant(1023), null);
+#endif
// Line 1
var l1 = sqlExpressionFactory.Function("SIGN", [colNameBigInt], true, SignArgumentsPropagateNullability, colNameBigInt.Type);
diff --git a/src/Zomp.EFCore.BinaryFunctions.Sqlite/Query/Internal/SqliteBinaryTranslator.cs b/src/Zomp.EFCore.BinaryFunctions.Sqlite/Query/Internal/SqliteBinaryTranslator.cs
index 97af780..ecfb17a 100644
--- a/src/Zomp.EFCore.BinaryFunctions.Sqlite/Query/Internal/SqliteBinaryTranslator.cs
+++ b/src/Zomp.EFCore.BinaryFunctions.Sqlite/Query/Internal/SqliteBinaryTranslator.cs
@@ -26,8 +26,13 @@ protected override SqlExpression BinaryCast(SqlExpression sqlExpression, Type to
var maxValue = 1L << (sizeInBytes * 8);
var maxValueSigned = 1L << ((sizeInBytes * 8) - 1);
+#if !EF_CORE_8
+ var maxValueSql = new SqlConstantExpression(maxValue, null);
+ var maxValueSignedSql = new SqlConstantExpression(maxValueSigned, null);
+#else
var maxValueSql = new SqlConstantExpression(Expression.Constant(maxValue), null);
var maxValueSignedSql = new SqlConstantExpression(Expression.Constant(maxValueSigned), null);
+#endif
// Equivalent of substring on binary data
var modResult = new SqlBinaryExpression(ExpressionType.Modulo, sqlExpression, maxValueSql, fromType, null);
diff --git a/src/Zomp.EFCore.BinaryFunctions/Query/Internal/BinaryTranslator.cs b/src/Zomp.EFCore.BinaryFunctions/Query/Internal/BinaryTranslator.cs
index c9a3feb..318eb32 100644
--- a/src/Zomp.EFCore.BinaryFunctions/Query/Internal/BinaryTranslator.cs
+++ b/src/Zomp.EFCore.BinaryFunctions/Query/Internal/BinaryTranslator.cs
@@ -83,10 +83,23 @@ private static SqlBinaryExpression Concat(IReadOnlyList arguments
private SqlExpression ToValue(SqlExpression sqlExpression, SqlExpression offset, Type type)
=> ToValue(
- Substring(sqlExpression, offset, new SqlConstantExpression(Expression.Constant(Marshal.SizeOf(type)), null)),
+ Substring(
+ sqlExpression,
+ offset,
+#if !EF_CORE_8
+ new SqlConstantExpression(Marshal.SizeOf(type), null)),
+#else
+ new SqlConstantExpression(Expression.Constant(Marshal.SizeOf(type)), null)),
+#endif
type);
- private SqlFunctionExpression Substring(SqlExpression bytearray, SqlExpression start, SqlExpression length) => sqlExpressionFactory.Function(
+ private
+#if !EF_CORE_8
+ SqlExpression
+#else
+ SqlFunctionExpression
+#endif
+ Substring(SqlExpression bytearray, SqlExpression start, SqlExpression length) => sqlExpressionFactory.Function(
"SUBSTRING",
[
bytearray,
diff --git a/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlParameterBasedSqlProcessor.cs b/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlParameterBasedSqlProcessor.cs
index bdecf53..443a7f8 100644
--- a/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlParameterBasedSqlProcessor.cs
+++ b/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlParameterBasedSqlProcessor.cs
@@ -6,14 +6,41 @@
///
/// Initializes a new instance of the class.
///
-/// Service dependencies.
-/// A bool value indicating if relational nulls should be used.
-public class WindowFunctionsNpgsqlParameterBasedSqlProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, bool useRelationalNulls)
- : NpgsqlParameterBasedSqlProcessor(dependencies, useRelationalNulls)
+public class WindowFunctionsNpgsqlParameterBasedSqlProcessor : NpgsqlParameterBasedSqlProcessor
{
+#if !EF_CORE_8
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Service dependencies.
+ /// Processor parameters.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsNpgsqlParameterBasedSqlProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, RelationalParameterBasedSqlProcessorParameters parameters)
+ : base(dependencies, parameters)
+ {
+ }
+#else
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Service dependencies.
+ /// A bool value indicating if relational nulls should be used.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsNpgsqlParameterBasedSqlProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, bool useRelationalNulls)
+ : base(dependencies, useRelationalNulls)
+ {
+ }
+#endif
+
+#if !EF_CORE_8
+ ///
+ protected override Expression ProcessSqlNullability(Expression selectExpression, IReadOnlyDictionary parametersValues, out bool canCache)
+ => new WindowFunctionsNpgsqlSqlNullabilityProcessor(Dependencies, Parameters)
+ .Process(selectExpression, parametersValues, out canCache);
+#else
///
protected override Expression ProcessSqlNullability(Expression selectExpression, IReadOnlyDictionary parametersValues, out bool canCache)
=> new WindowFunctionsNpgsqlSqlNullabilityProcessor(Dependencies, UseRelationalNulls).Process(selectExpression, parametersValues, out canCache);
- ////protected override Expression ProcessSqlNullability(Expression queryExpression, IReadOnlyDictionary parametersValues, out bool canCache)
- //// => new WindowFunctionsNpgsqlSqlNullabilityProcessor(Dependencies, UseRelationalNulls).Process(queryExpression, parametersValues, out canCache);
-}
\ No newline at end of file
+#endif
+
+}
diff --git a/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlParameterBasedSqlProcessorFactory.cs b/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlParameterBasedSqlProcessorFactory.cs
index 21e938c..bf9a3ac 100644
--- a/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlParameterBasedSqlProcessorFactory.cs
+++ b/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlParameterBasedSqlProcessorFactory.cs
@@ -6,13 +6,45 @@
///
/// Initializes a new instance of the class.
///
-/// Relational Parameter Based Sql ProcessorDependencies.
-public class WindowFunctionsNpgsqlParameterBasedSqlProcessorFactory(RelationalParameterBasedSqlProcessorDependencies dependencies)
- : NpgsqlParameterBasedSqlProcessorFactory(dependencies)
+public class WindowFunctionsNpgsqlParameterBasedSqlProcessorFactory : NpgsqlParameterBasedSqlProcessorFactory
{
- private readonly RelationalParameterBasedSqlProcessorDependencies dependencies = dependencies;
+ private readonly RelationalParameterBasedSqlProcessorDependencies dependencies;
+#if !EF_CORE_8
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Relational Parameter Based Sql ProcessorDependencies.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsNpgsqlParameterBasedSqlProcessorFactory(RelationalParameterBasedSqlProcessorDependencies dependencies)
+ : base(dependencies)
+ {
+ this.dependencies = dependencies;
+ }
+#else
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Relational Parameter Based Sql ProcessorDependencies.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsNpgsqlParameterBasedSqlProcessorFactory(RelationalParameterBasedSqlProcessorDependencies dependencies)
+ : base(dependencies)
+ {
+ this.dependencies = dependencies;
+ }
+#endif
+
+#if !EF_CORE_8
+ ///
+ /// This will be removed.
+ ///
+ /// Processor parameters.
+ /// This will be removed soon.
+ public new RelationalParameterBasedSqlProcessor Create(RelationalParameterBasedSqlProcessorParameters parameters)
+ => new WindowFunctionsNpgsqlParameterBasedSqlProcessor(dependencies, parameters);
+#else
///
public override RelationalParameterBasedSqlProcessor Create(bool useRelationalNulls)
=> new WindowFunctionsNpgsqlParameterBasedSqlProcessor(dependencies, useRelationalNulls);
+#endif
}
\ No newline at end of file
diff --git a/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitor.cs b/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitor.cs
index 75367db..d272af2 100644
--- a/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitor.cs
+++ b/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitor.cs
@@ -3,11 +3,39 @@
///
/// The WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitor.
///
-/// Type mapping source dependencies.
-/// Relational type mapping source dependencies.
-/// The query compilation context object to use.
-public class WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitor(QueryableMethodTranslatingExpressionVisitorDependencies dependencies, RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies, QueryCompilationContext queryCompilationContext) : NpgsqlQueryableMethodTranslatingExpressionVisitor(dependencies, relationalDependencies, queryCompilationContext)
+public class WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitor : NpgsqlQueryableMethodTranslatingExpressionVisitor
{
+#if !EF_CORE_8
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Type mapping source dependencies.
+ /// Relational type mapping source dependencies.
+ /// The query compilation context object to use.
+ /// NpgSql Singleton Options.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitor(
+ QueryableMethodTranslatingExpressionVisitorDependencies dependencies,
+ RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies,
+ RelationalQueryCompilationContext queryCompilationContext,
+ INpgsqlSingletonOptions npgsqlSingletonOptions)
+ : base(dependencies, relationalDependencies, queryCompilationContext, npgsqlSingletonOptions)
+ {
+ }
+#else
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Type mapping source dependencies.
+ /// Relational type mapping source dependencies.
+ /// The query compilation context object to use.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitor(QueryableMethodTranslatingExpressionVisitorDependencies dependencies, RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies, QueryCompilationContext queryCompilationContext)
+ : base(dependencies, relationalDependencies, queryCompilationContext)
+ {
+ }
+#endif
+
///
protected override Expression VisitMethodCall(MethodCallExpression methodCallExpression) => SubQueryProcessor.ProcessSubQuery(this, methodCallExpression)
?? base.VisitMethodCall(methodCallExpression);
diff --git a/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitorFactory.cs b/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitorFactory.cs
index c819955..788eba0 100644
--- a/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitorFactory.cs
+++ b/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitorFactory.cs
@@ -3,15 +3,54 @@
///
/// The WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitorFactory.
///
-/// Type mapping source dependencies.
-/// Relational type mapping source dependencies.
-public class WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitorFactory(QueryableMethodTranslatingExpressionVisitorDependencies dependencies, RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies)
- : NpgsqlQueryableMethodTranslatingExpressionVisitorFactory(dependencies, relationalDependencies)
+public class WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitorFactory : NpgsqlQueryableMethodTranslatingExpressionVisitorFactory
{
- private readonly QueryableMethodTranslatingExpressionVisitorDependencies dependencies = dependencies;
- private readonly RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies = relationalDependencies;
+ private readonly QueryableMethodTranslatingExpressionVisitorDependencies dependencies;
+ private readonly RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies;
+#if !EF_CORE_8
+ private readonly INpgsqlSingletonOptions npgsqlSingletonOptions;
+#endif
+#if !EF_CORE_8
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Type mapping source dependencies.
+ /// Relational type mapping source dependencies.
+ /// NpgSql Singleton Options.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitorFactory(
+ QueryableMethodTranslatingExpressionVisitorDependencies dependencies,
+ RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies,
+ INpgsqlSingletonOptions npgsqlSingletonOptions)
+ : base(dependencies, relationalDependencies, npgsqlSingletonOptions)
+ {
+ this.dependencies = dependencies;
+ this.relationalDependencies = relationalDependencies;
+ this.npgsqlSingletonOptions = npgsqlSingletonOptions;
+ }
+#else
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Type mapping source dependencies.
+ /// Relational type mapping source dependencies.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitorFactory(QueryableMethodTranslatingExpressionVisitorDependencies dependencies, RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies)
+ : base(dependencies, relationalDependencies)
+ {
+ this.dependencies = dependencies;
+ this.relationalDependencies = relationalDependencies;
+ }
+#endif
+
+#if !EF_CORE_8
+ ///
+ public override QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext)
+ => new WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitor(dependencies, relationalDependencies, (RelationalQueryCompilationContext)queryCompilationContext, npgsqlSingletonOptions);
+#else
///
public override QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext)
=> new WindowFunctionsNpgsqlQueryableMethodTranslatingExpressionVisitor(dependencies, relationalDependencies, queryCompilationContext);
+#endif
}
\ No newline at end of file
diff --git a/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlSqlNullabilityProcessor.cs b/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlSqlNullabilityProcessor.cs
index 00fb5dc..c98cb1f 100644
--- a/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlSqlNullabilityProcessor.cs
+++ b/src/Zomp.EFCore.WindowFunctions.Npgsql/Query/Internal/WindowFunctionsNpgsqlSqlNullabilityProcessor.cs
@@ -6,11 +6,32 @@
///
/// Initializes a new instance of the class.
///
-/// Relational Parameter Based Sql Processor Dependencies.
-/// A bool value indicating if relational nulls should be used.
-public class WindowFunctionsNpgsqlSqlNullabilityProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, bool useRelationalNulls)
- : NpgsqlSqlNullabilityProcessor(dependencies, useRelationalNulls)
+public class WindowFunctionsNpgsqlSqlNullabilityProcessor : NpgsqlSqlNullabilityProcessor
{
+#if !EF_CORE_8
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Relational Parameter Based Sql Processor Dependencies.
+ /// Processor parameters.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsNpgsqlSqlNullabilityProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, RelationalParameterBasedSqlProcessorParameters parameters)
+ : base(dependencies, parameters)
+ {
+ }
+#else
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Relational Parameter Based Sql Processor Dependencies.
+ /// A bool value indicating if relational nulls should be used.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsNpgsqlSqlNullabilityProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, bool useRelationalNulls)
+ : base(dependencies, useRelationalNulls)
+ {
+ }
+#endif
+
///
protected override SqlExpression VisitCustomSqlExpression(SqlExpression sqlExpression, bool allowOptimizedExpansion, out bool nullable)
{
diff --git a/src/Zomp.EFCore.WindowFunctions.SqlServer/Query/Internal/WindowFunctionsSqlServerParameterBasedSqlProcessor.cs b/src/Zomp.EFCore.WindowFunctions.SqlServer/Query/Internal/WindowFunctionsSqlServerParameterBasedSqlProcessor.cs
index 928c738..84bc128 100644
--- a/src/Zomp.EFCore.WindowFunctions.SqlServer/Query/Internal/WindowFunctionsSqlServerParameterBasedSqlProcessor.cs
+++ b/src/Zomp.EFCore.WindowFunctions.SqlServer/Query/Internal/WindowFunctionsSqlServerParameterBasedSqlProcessor.cs
@@ -6,6 +6,17 @@
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "Multiple versions")]
public class WindowFunctionsSqlServerParameterBasedSqlProcessor : SqlServerParameterBasedSqlProcessor
{
+#if !EF_CORE_8
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Service dependencies.
+ /// Processor parameters.
+ public WindowFunctionsSqlServerParameterBasedSqlProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, RelationalParameterBasedSqlProcessorParameters parameters)
+ : base(dependencies, parameters)
+ {
+ }
+#else
///
/// Initializes a new instance of the class.
///
@@ -15,9 +26,17 @@ public WindowFunctionsSqlServerParameterBasedSqlProcessor(RelationalParameterBas
: base(dependencies, useRelationalNulls)
{
}
+#endif
+#if !EF_CORE_8
+ ///
+ protected override Expression ProcessSqlNullability(Expression selectExpression, IReadOnlyDictionary parametersValues, out bool canCache)
+ => new WindowFunctionsSqlServerSqlNullabilityProcessor(Dependencies, Parameters).Process(
+ selectExpression, parametersValues, out canCache);
+#else
///
protected override Expression ProcessSqlNullability(Expression selectExpression, IReadOnlyDictionary parametersValues, out bool canCache)
=> new WindowFunctionsSqlServerSqlNullabilityProcessor(Dependencies, UseRelationalNulls).Process(
selectExpression, parametersValues, out canCache);
+#endif
}
\ No newline at end of file
diff --git a/src/Zomp.EFCore.WindowFunctions.SqlServer/Query/Internal/WindowFunctionsSqlServerParameterBasedSqlProcessorFactory.cs b/src/Zomp.EFCore.WindowFunctions.SqlServer/Query/Internal/WindowFunctionsSqlServerParameterBasedSqlProcessorFactory.cs
index 4acf526..6d9678f 100644
--- a/src/Zomp.EFCore.WindowFunctions.SqlServer/Query/Internal/WindowFunctionsSqlServerParameterBasedSqlProcessorFactory.cs
+++ b/src/Zomp.EFCore.WindowFunctions.SqlServer/Query/Internal/WindowFunctionsSqlServerParameterBasedSqlProcessorFactory.cs
@@ -10,7 +10,13 @@
public class WindowFunctionsSqlServerParameterBasedSqlProcessorFactory(RelationalParameterBasedSqlProcessorDependencies dependencies)
: SqlServerParameterBasedSqlProcessorFactory(dependencies)
{
+#if !EF_CORE_8
+ ///
+ public override RelationalParameterBasedSqlProcessor Create(RelationalParameterBasedSqlProcessorParameters parameters)
+ => new WindowFunctionsSqlServerParameterBasedSqlProcessor(Dependencies, parameters);
+#else
///
public override RelationalParameterBasedSqlProcessor Create(bool useRelationalNulls)
=> new WindowFunctionsSqlServerParameterBasedSqlProcessor(Dependencies, useRelationalNulls);
+#endif
}
\ No newline at end of file
diff --git a/src/Zomp.EFCore.WindowFunctions.SqlServer/Query/Internal/WindowFunctionsSqlServerSqlNullabilityProcessor.cs b/src/Zomp.EFCore.WindowFunctions.SqlServer/Query/Internal/WindowFunctionsSqlServerSqlNullabilityProcessor.cs
index cb14c6d..aae8af5 100644
--- a/src/Zomp.EFCore.WindowFunctions.SqlServer/Query/Internal/WindowFunctionsSqlServerSqlNullabilityProcessor.cs
+++ b/src/Zomp.EFCore.WindowFunctions.SqlServer/Query/Internal/WindowFunctionsSqlServerSqlNullabilityProcessor.cs
@@ -6,11 +6,32 @@
///
/// Initializes a new instance of the class.
///
-/// Relational Parameter Based Sql Processor Dependencies.
-/// A bool value indicating if relational nulls should be used.
-public class WindowFunctionsSqlServerSqlNullabilityProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, bool useRelationalNulls)
- : SqlServerSqlNullabilityProcessor(dependencies, useRelationalNulls)
+public class WindowFunctionsSqlServerSqlNullabilityProcessor : SqlServerSqlNullabilityProcessor
{
+#if !EF_CORE_8
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Relational Parameter Based Sql Processor Dependencies.
+ /// Processor parameters.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsSqlServerSqlNullabilityProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, RelationalParameterBasedSqlProcessorParameters parameters)
+ : base(dependencies, parameters)
+ {
+ }
+#else
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Relational Parameter Based Sql Processor Dependencies.
+ /// A bool value indicating if relational nulls should be used.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsSqlServerSqlNullabilityProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, bool useRelationalNulls)
+ : base(dependencies, useRelationalNulls)
+ {
+ }
+#endif
+
///
protected override SqlExpression VisitCustomSqlExpression(SqlExpression sqlExpression, bool allowOptimizedExpansion, out bool nullable)
{
diff --git a/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteParameterBasedSqlProcessor.cs b/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteParameterBasedSqlProcessor.cs
index c107ab8..cff2d2c 100644
--- a/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteParameterBasedSqlProcessor.cs
+++ b/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteParameterBasedSqlProcessor.cs
@@ -6,12 +6,40 @@
///
/// Initializes a new instance of the class.
///
-/// Service dependencies.
-/// A bool value indicating if relational nulls should be used.
-public class WindowFunctionsSqliteParameterBasedSqlProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, bool useRelationalNulls)
- : SqliteParameterBasedSqlProcessor(dependencies, useRelationalNulls)
+public class WindowFunctionsSqliteParameterBasedSqlProcessor : SqliteParameterBasedSqlProcessor
{
+#if !EF_CORE_8
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Service dependencies.
+ /// Processor parameters.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsSqliteParameterBasedSqlProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, RelationalParameterBasedSqlProcessorParameters parameters)
+ : base(dependencies, parameters)
+ {
+ }
+#else
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Service dependencies.
+ /// A bool value indicating if relational nulls should be used.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsSqliteParameterBasedSqlProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, bool useRelationalNulls)
+ : base(dependencies, useRelationalNulls)
+ {
+ }
+#endif
+
+#if !EF_CORE_8
+ ///
+ protected override Expression ProcessSqlNullability(Expression queryExpression, IReadOnlyDictionary parametersValues, out bool canCache)
+ => new WindowFunctionsSqliteSqlNullabilityProcessor(Dependencies, Parameters)
+ .Process(queryExpression, parametersValues, out canCache);
+#else
///
protected override Expression ProcessSqlNullability(Expression queryExpression, IReadOnlyDictionary parametersValues, out bool canCache)
=> new WindowFunctionsSqliteSqlNullabilityProcessor(Dependencies, UseRelationalNulls).Process(queryExpression, parametersValues, out canCache);
+#endif
}
diff --git a/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteParameterBasedSqlProcessorFactory.cs b/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteParameterBasedSqlProcessorFactory.cs
index 61dee40..3c91ad2 100644
--- a/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteParameterBasedSqlProcessorFactory.cs
+++ b/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteParameterBasedSqlProcessorFactory.cs
@@ -12,7 +12,13 @@ public class WindowFunctionsSqliteParameterBasedSqlProcessorFactory(RelationalPa
{
private readonly RelationalParameterBasedSqlProcessorDependencies dependencies = dependencies;
+#if !EF_CORE_8
+ ///
+ public override RelationalParameterBasedSqlProcessor Create(RelationalParameterBasedSqlProcessorParameters parameters)
+ => new WindowFunctionsSqliteParameterBasedSqlProcessor(dependencies, parameters);
+#else
///
public override RelationalParameterBasedSqlProcessor Create(bool useRelationalNulls)
=> new WindowFunctionsSqliteParameterBasedSqlProcessor(dependencies, useRelationalNulls);
+#endif
}
diff --git a/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteQueryableMethodTranslatingExpressionVisitor.cs b/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteQueryableMethodTranslatingExpressionVisitor.cs
index 1346d6c..90ea6d6 100644
--- a/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteQueryableMethodTranslatingExpressionVisitor.cs
+++ b/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteQueryableMethodTranslatingExpressionVisitor.cs
@@ -6,7 +6,15 @@
/// Type mapping source dependencies.
/// Relational type mapping source dependencies.
/// The query compilation context object to use.
-public class WindowFunctionsSqliteQueryableMethodTranslatingExpressionVisitor(QueryableMethodTranslatingExpressionVisitorDependencies dependencies, RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies, QueryCompilationContext queryCompilationContext) : SqliteQueryableMethodTranslatingExpressionVisitor(dependencies, relationalDependencies, queryCompilationContext)
+public class WindowFunctionsSqliteQueryableMethodTranslatingExpressionVisitor
+ (QueryableMethodTranslatingExpressionVisitorDependencies dependencies,
+ RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies,
+#if !EF_CORE_8
+ RelationalQueryCompilationContext queryCompilationContext)
+#else
+ QueryCompilationContext queryCompilationContext)
+#endif
+ : SqliteQueryableMethodTranslatingExpressionVisitor(dependencies, relationalDependencies, queryCompilationContext)
{
///
protected override Expression VisitMethodCall(MethodCallExpression methodCallExpression) => SubQueryProcessor.ProcessSubQuery(this, methodCallExpression)
diff --git a/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteQueryableMethodTranslatingExpressionVisitorFactory.cs b/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteQueryableMethodTranslatingExpressionVisitorFactory.cs
index a4802c8..41fb7bf 100644
--- a/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteQueryableMethodTranslatingExpressionVisitorFactory.cs
+++ b/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteQueryableMethodTranslatingExpressionVisitorFactory.cs
@@ -13,5 +13,10 @@ public class WindowFunctionsSqliteQueryableMethodTranslatingExpressionVisitorFac
///
public override QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext)
+
+#if !EF_CORE_8
+ => new WindowFunctionsSqliteQueryableMethodTranslatingExpressionVisitor(dependencies, relationalDependencies, (RelationalQueryCompilationContext)queryCompilationContext);
+#else
=> new WindowFunctionsSqliteQueryableMethodTranslatingExpressionVisitor(dependencies, relationalDependencies, queryCompilationContext);
+#endif
}
\ No newline at end of file
diff --git a/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteSqlNullabilityProcessor.cs b/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteSqlNullabilityProcessor.cs
index dc626ee..9f12f45 100644
--- a/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteSqlNullabilityProcessor.cs
+++ b/src/Zomp.EFCore.WindowFunctions.Sqlite/Query/Internal/WindowFunctionsSqliteSqlNullabilityProcessor.cs
@@ -6,11 +6,32 @@
///
/// Initializes a new instance of the class.
///
-/// Relational Parameter Based Sql Processor Dependencies.
-/// A bool value indicating if relational nulls should be used.
-public class WindowFunctionsSqliteSqlNullabilityProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, bool useRelationalNulls)
- : SqliteSqlNullabilityProcessor(dependencies, useRelationalNulls)
+public class WindowFunctionsSqliteSqlNullabilityProcessor : SqliteSqlNullabilityProcessor
{
+#if !EF_CORE_8
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Relational Parameter Based Sql Processor Dependencies.
+ /// Processor Parameters.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsSqliteSqlNullabilityProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, RelationalParameterBasedSqlProcessorParameters parameters)
+ : base(dependencies, parameters)
+ {
+ }
+#else
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Relational Parameter Based Sql Processor Dependencies.
+ /// A bool value indicating if relational nulls should be used.
+ [SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "EF Core 8")]
+ public WindowFunctionsSqliteSqlNullabilityProcessor(RelationalParameterBasedSqlProcessorDependencies dependencies, bool useRelationalNulls)
+ : base(dependencies, useRelationalNulls)
+ {
+ }
+#endif
+
///
protected override SqlExpression VisitCustomSqlExpression(SqlExpression sqlExpression, bool allowOptimizedExpansion, out bool nullable)
{
diff --git a/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/OrderingSqlExpression.cs b/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/OrderingSqlExpression.cs
index d625f64..aafda9b 100644
--- a/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/OrderingSqlExpression.cs
+++ b/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/OrderingSqlExpression.cs
@@ -1,6 +1,16 @@
namespace Zomp.EFCore.WindowFunctions.Query.SqlExpressions;
-internal sealed class OrderingSqlExpression(OrderingExpression ordering) : ChainedSqlExpression(ordering)
+internal sealed class OrderingSqlExpression(OrderingExpression ordering)
+ : ChainedSqlExpression(ordering)
{
+#if !EF_CORE_8
+ private static ConstructorInfo? quotingConstructor;
+#endif
+
public RowOrRangeExpression? RowOrRangeClause { get; set; }
+
+#if !EF_CORE_8
+ public override Expression Quote()
+ => New(quotingConstructor ??= typeof(OrderingSqlExpression).GetConstructor([typeof(OrderingExpression)])!, List[0].Quote());
+#endif
}
\ No newline at end of file
diff --git a/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/OverExpression.cs b/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/OverExpression.cs
index be7a050..3268e48 100644
--- a/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/OverExpression.cs
+++ b/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/OverExpression.cs
@@ -6,6 +6,10 @@
internal sealed class OverExpression(OrderingSqlExpression? orderingExpression, PartitionByExpression? partitionByExpression, bool isLatestPartitionBy)
: SqlExpression(typeof(OverExpression), null)
{
+#if !EF_CORE_8
+ private static ConstructorInfo? quotingConstructor;
+#endif
+
///
/// Gets the partition by clause.
///
@@ -21,5 +25,10 @@ internal sealed class OverExpression(OrderingSqlExpression? orderingExpression,
///
public OrderingSqlExpression? OrderingExpression { get; } = orderingExpression;
+#if !EF_CORE_8
+ public override Expression Quote()
+ => New(quotingConstructor ??= typeof(OverExpression).GetConstructor([typeof(OrderingExpression), typeof(PartitionByExpression), typeof(bool)])!, OrderingExpression?.Quote() ?? Constant(null, typeof(OrderingSqlExpression)), PartitionByExpression?.Quote() ?? Constant(null, typeof(PartitionByExpression)), Constant(IsLatestPartitionBy, typeof(bool)));
+#endif
+
protected override void Print(ExpressionPrinter expressionPrinter) => throw new NotImplementedException();
}
diff --git a/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/PartitionByExpression.cs b/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/PartitionByExpression.cs
index 4248c2b..45fec74 100644
--- a/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/PartitionByExpression.cs
+++ b/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/PartitionByExpression.cs
@@ -2,4 +2,7 @@
internal sealed class PartitionByExpression(SqlExpression partition) : ChainedSqlExpression(partition)
{
+#if !EF_CORE_8
+ public override Expression Quote() => throw new NotImplementedException();
+#endif
}
\ No newline at end of file
diff --git a/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/RowOrRangeExpression.cs b/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/RowOrRangeExpression.cs
index 09f10d4..371fcfd 100644
--- a/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/RowOrRangeExpression.cs
+++ b/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/RowOrRangeExpression.cs
@@ -45,6 +45,11 @@ public override int GetHashCode()
return hash.ToHashCode();
}
+#if !EF_CORE_8
+ ///
+ public override Expression Quote() => throw new NotImplementedException();
+#endif
+
///
protected override void Print(ExpressionPrinter expressionPrinter)
{
diff --git a/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/WindowFunctionExpression.cs b/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/WindowFunctionExpression.cs
index 0dfa3a2..3e087c5 100644
--- a/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/WindowFunctionExpression.cs
+++ b/src/Zomp.EFCore.WindowFunctions/Query/SqlExpressions/WindowFunctionExpression.cs
@@ -105,6 +105,11 @@ public override int GetHashCode()
return hash.ToHashCode();
}
+#if !EF_CORE_8
+ ///
+ public override Expression Quote() => throw new NotImplementedException();
+#endif
+
///
protected override Expression VisitChildren(ExpressionVisitor visitor)
{