Add support for nullable cursor keys#8431
Conversation
|
@glen-84 Can I submit a documentation PR with a workaround for users of HC versions before your PR or #8230 merges? // Ordering by UpdatedUtc or CreatedUtc will fail with
// Message=The key type `System.Nullable`1[[System.DateTime, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]` is not supported.
[InterfaceType("Auditable")]
public class AuditableGqlModel
{
// Audit properties
public DateTime? UpdatedUtc { get; set; }
public string? CreatedBy { get; set; }
public DateTime? CreatedUtc { get; set; }
public string? UpdatedBy { get; set; }
}
// Workaround: ordering works as expected
[InterfaceType("Auditable")]
public class AuditableGqlModel
{
// Audit properties
[GraphQLNonNullType(nullable: true)]
public DateTime UpdatedUtc { get; set; }
public string? CreatedBy { get; set; }
[GraphQLNonNullType(nullable: true)]
public DateTime CreatedUtc { get; set; }
public string? UpdatedBy { get; set; }
} |
|
Thanks for the offer, but I don't think that there is a workaround for this issue. I'm assuming that your code is bypassing the error, but the paging will likely still be incorrect if the data includes null values, since the implementation doesn't currently (or at least, correctly) handle null cursor keys. |
|
Thanks for the info @glen-84. It's great to know that the workaround is not great before we pushed it to prod. We are a bit of a strange case where the fields we want to filter by are not actually allowed to be null within the context of a single microservices DB. But we use fusion to aggregate data across several microservices, with lookups and all that. With eventual consistency and other issues unique to distributed system, lookups could return null for an id and not be able to fill in a property that otherwise would have been specified as not-null. We end up marking almost every field as nullable because of this. But maybe there's a better way. |
There was a problem hiding this comment.
Pull request overview
Adds support for nullable cursor keys across GreenDonut cursor paging and HotChocolate paging integration by introducing a configurable NullOrdering and plumbing it through paging options/arguments, plus updating query slicing expression generation and snapshots.
Changes:
- Introduces
NullOrdering(GreenDonut primitives) and adds it toPagingArgumentsand HotChocolatePagingOptions. - Wires HotChocolate paging options into resolver
PagingArgumentsand analyzer-generated code, and updates EF paging handlers to call updated slicing helpers. - Adds/updates EF paging tests and regenerates many SQL/expression/schematic snapshots.
Reviewed changes
Copilot reviewed 139 out of 139 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| src/HotChocolate/Data/test/Data.Tests/snapshots/PagingHelperIntegrationTests.Paging_First_5_Before_Id_96_NET10_0.md | Updated paging snapshot output |
| src/HotChocolate/Data/test/Data.Tests/snapshots/PagingHelperIntegrationTests.Paging_First_5_Before_Id_96.md | Updated paging snapshot output |
| src/HotChocolate/Data/test/Data.Tests/snapshots/PagingHelperIntegrationTests.Paging_First_5_After_Id_13_NET10_0.md | Updated paging snapshot output |
| src/HotChocolate/Data/test/Data.Tests/snapshots/PagingHelperIntegrationTests.Paging_First_5_After_Id_13.md | Updated paging snapshot output |
| src/HotChocolate/Data/test/Data.Tests/snapshots/PagingHelperIntegrationTests.GetSecondPage_With_2_Items_NET10_0.md | Updated paging snapshot output |
| src/HotChocolate/Data/test/Data.Tests/snapshots/PagingHelperIntegrationTests.GetSecondPage_With_2_Items.md | Updated paging snapshot output |
| src/HotChocolate/Data/test/Data.Tests/snapshots/PagingHelperIntegrationTests.GetDefaultPage_With_Nullable_SecondPage_NET10_0.md | Updated nullable-key paging snapshot output |
| src/HotChocolate/Data/test/Data.Tests/snapshots/PagingHelperIntegrationTests.GetDefaultPage_With_Nullable_SecondPage.md | Updated nullable-key paging snapshot output |
| src/HotChocolate/Data/test/Data.Tests/snapshots/PagingHelperIntegrationTests.GetDefaultPage_With_Nullable_Fallback_SecondPage_NET10_0.md | Updated nullable-key paging snapshot output |
| src/HotChocolate/Data/test/Data.Tests/snapshots/PagingHelperIntegrationTests.GetDefaultPage_With_Nullable_Fallback_SecondPage.md | Updated nullable-key paging snapshot output |
| src/HotChocolate/Data/test/Data.Tests/snapshots/PagingHelperIntegrationTests.GetDefaultPage_With_Deep_SecondPage_NET10_0.md | Updated paging snapshot output |
| src/HotChocolate/Data/test/Data.Tests/snapshots/PagingHelperIntegrationTests.GetDefaultPage_With_Deep_SecondPage.md | Updated paging snapshot output |
| src/HotChocolate/Data/test/Data.Tests/PagingHelperIntegrationTests.cs | Configures NullOrdering in tests; contains temporary overrides/FIXMEs |
| src/HotChocolate/Data/test/Data.Tests/Pagination/PagingArgumentsParameterExpressionBuilderTests.cs | Adds (currently skipped) test for options→arguments mapping |
| src/HotChocolate/Data/src/EntityFramework/Pagination/EfQueryableCursorPagingHandler.cs | Updates slicing expression call site to accept NullOrdering |
| src/HotChocolate/Data/src/Data/PagingArgumentsParameterExpressionBuilder.cs | Maps HotChocolate paging options into PagingArguments.NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/QueryContextProjectionAnalyzerTests.QueryContext_WithoutUseProjection_NoError.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/QueryContextProjectionAnalyzerTests.QueryContext_WithUseProjections_RaisesError.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/QueryContextProjectionAnalyzerTests.QueryContext_WithUseProjection_RaisesError.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/QueryContextProjectionAnalyzerTests.QueryContext_MultipleAttributes_OnlyUseProjectionFlagged.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/QueryContextConnectionAnalyzerTests.TypeMismatch_WithSubscriptionType_RaisesError.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/QueryContextConnectionAnalyzerTests.TypeMismatch_WithQueryType_RaisesError.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/QueryContextConnectionAnalyzerTests.TypeMismatch_WithObjectType_RaisesError.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/QueryContextConnectionAnalyzerTests.TypeMismatch_WithMutationType_RaisesError.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/QueryContextConnectionAnalyzerTests.TypeMismatch_WithInterfaceType_RaisesError.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/QueryContextConnectionAnalyzerTests.TypeMismatch_WithConnection_RaisesError.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/QueryContextConnectionAnalyzerTests.NoQueryContextParameter_NoError.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/QueryContextConnectionAnalyzerTests.CorrectGenericTypeMatch_WithConnection_NoError.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/QueryContextConnectionAnalyzerTests.CorrectGenericTypeMatch_NoError.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Shareable_On_PageConnection_Scoped.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Shareable_On_PageConnection.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Shareable_On_Edge_Field.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Shareable_On_Edge_Class_Scoped.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Shareable_On_Edge_Class.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Shareable_On_Connection_Field.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Shareable_On_Connection_Class_Scoped.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Shareable_On_Connection_Class.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Inaccessible_On_PageConnection_Scoped.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Inaccessible_On_PageConnection.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Inaccessible_On_Edge_Field.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Inaccessible_On_Edge_Class_Scoped.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Inaccessible_On_Edge_Class.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Inaccessible_On_Connection_Field.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Inaccessible_On_Connection_Class_Scoped.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.Inaccessible_On_Connection_Class.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.GenerateSource_Inherit_From_PageConnection.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.GenerateSource_Inherit_From_ConnectionBase_Reuse_PageEdge_Generic.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.GenerateSource_Inherit_From_ConnectionBase_Reuse_PageEdge.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.GenerateSource_Inherit_From_ConnectionBase_Inherit_PageEdge.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.GenerateSource_GenericCustomConnection_WithConnectionName_MatchesSnapshot.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.GenerateSource_GenericCustomConnection_MatchesSnapshot.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.GenerateSource_CustomConnection_UseConnection_IncludeTotalCount_MatchesSnapshot.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.GenerateSource_CustomConnection_UseConnection_ConnectionName_MatchesSnapshot.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.GenerateSource_CustomConnection_No_Duplicates_MatchesSnapshot.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.GenerateSource_CustomConnection_MatchesSnapshot.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.GenerateSource_ConnectionT_MatchesSnapshot.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Tests/snapshots/PagingTests.GenerateSource_ConnectionFlags.md | Updates analyzer snapshot to include NullOrdering |
| src/HotChocolate/Core/test/Types.Analyzers.Integration.Tests/snapshots/IntegrationTests.Schema_Snapshot.snap | Updates schema snapshot for new paging test field |
| src/HotChocolate/Core/test/Types.Analyzers.Integration.Tests/Product.cs | Adds ints paging field for integration coverage |
| src/HotChocolate/Core/test/Types.Analyzers.Integration.Tests/InterfaceTests.cs | Registers paging arguments for integration test types |
| src/HotChocolate/Core/test/Types.Analyzers.Integration.Tests/IntegrationTests.cs | Adds integration schema snapshot + (skipped) option-mapping test |
| src/HotChocolate/Core/src/Types/Types/Pagination/PagingOptions.cs | Adds PagingOptions.NullOrdering |
| src/HotChocolate/Core/src/Types/HotChocolate.Types.csproj | Adds reference to GreenDonut.Data.Primitives |
| src/HotChocolate/Core/src/Types.Analyzers/FileBuilders/TypeFileBuilderBase.cs | Emits NullOrdering into generated paging argument objects |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_Nullable_Descending_Cursor_Value_Null_NET9_0.md | Adds SqlServer nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_Nullable_Descending_Cursor_Value_Null_NET8_0.md | Adds SqlServer nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_Nullable_Descending_Cursor_Value_Null_NET10_0.md | Adds SqlServer nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_Nullable_Descending_Cursor_Value_NonNull_NET9_0.md | Adds SqlServer nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_Nullable_Descending_Cursor_Value_NonNull_NET8_0.md | Adds SqlServer nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_Nullable_Descending_Cursor_Value_NonNull_NET10_0.md | Adds SqlServer nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_Nullable_Ascending_Cursor_Value_Null_NET9_0.md | Adds SqlServer nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_Nullable_Ascending_Cursor_Value_Null_NET8_0.md | Adds SqlServer nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_Nullable_Ascending_Cursor_Value_Null_NET10_0.md | Adds SqlServer nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_Nullable_Ascending_Cursor_Value_NonNull_NET9_0.md | Adds SqlServer nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_Nullable_Ascending_Cursor_Value_NonNull_NET8_0.md | Adds SqlServer nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_Nullable_Ascending_Cursor_Value_NonNull_NET10_0.md | Adds SqlServer nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_NullableReference_Descending_Cursor_Value_Null_NET9_0.md | Adds SqlServer nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_NullableReference_Descending_Cursor_Value_Null_NET8_0.md | Adds SqlServer nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_NullableReference_Descending_Cursor_Value_Null_NET10_0.md | Adds SqlServer nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_NullableReference_Descending_Cursor_Value_NonNull_NET9_0.md | Adds SqlServer nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_NullableReference_Descending_Cursor_Value_NonNull_NET8_0.md | Adds SqlServer nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_NullableReference_Descending_Cursor_Value_NonNull_NET10_0.md | Adds SqlServer nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_NullableReference_Ascending_Cursor_Value_Null_NET9_0.md | Adds SqlServer nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_NullableReference_Ascending_Cursor_Value_Null_NET8_0.md | Adds SqlServer nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_NullableReference_Ascending_Cursor_Value_Null_NET10_0.md | Adds SqlServer nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_NullableReference_Ascending_Cursor_Value_NonNull_NET9_0.md | Adds SqlServer nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_NullableReference_Ascending_Cursor_Value_NonNull_NET8_0.md | Adds SqlServer nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperSqlServerNullableTests.Paging_NullableReference_Ascending_Cursor_Value_NonNull_NET10_0.md | Adds SqlServer nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_Nullable_Descending_Cursor_Value_Null_NET10_0.md | Adds PostgreSQL nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_Nullable_Descending_Cursor_Value_Null.md | Adds PostgreSQL nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_Nullable_Descending_Cursor_Value_NonNull_NET10_0.md | Adds PostgreSQL nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_Nullable_Descending_Cursor_Value_NonNull.md | Adds PostgreSQL nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_Nullable_Ascending_Cursor_Value_Null_NET9_0.md | Adds PostgreSQL nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_Nullable_Ascending_Cursor_Value_Null_NET8_0.md | Adds PostgreSQL nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_Nullable_Ascending_Cursor_Value_Null_NET10_0.md | Adds PostgreSQL nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_Nullable_Ascending_Cursor_Value_NonNull_NET9_0.md | Adds PostgreSQL nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_Nullable_Ascending_Cursor_Value_NonNull_NET8_0.md | Adds PostgreSQL nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_Nullable_Ascending_Cursor_Value_NonNull_NET10_0.md | Adds PostgreSQL nullable paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_NullableReference_Descending_Cursor_Value_Null_NET10_0.md | Adds PostgreSQL nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_NullableReference_Descending_Cursor_Value_Null.md | Adds PostgreSQL nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_NullableReference_Descending_Cursor_Value_NonNull_NET10_0.md | Adds PostgreSQL nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_NullableReference_Descending_Cursor_Value_NonNull.md | Adds PostgreSQL nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_NullableReference_Ascending_Cursor_Value_Null_NET9_0.md | Adds PostgreSQL nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_NullableReference_Ascending_Cursor_Value_Null_NET8_0.md | Adds PostgreSQL nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_NullableReference_Ascending_Cursor_Value_Null_NET10_0.md | Adds PostgreSQL nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_NullableReference_Ascending_Cursor_Value_NonNull_NET9_0.md | Adds PostgreSQL nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_NullableReference_Ascending_Cursor_Value_NonNull_NET8_0.md | Adds PostgreSQL nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperPostgreSqlNullableTests.Paging_NullableReference_Ascending_Cursor_Value_NonNull_NET10_0.md | Adds PostgreSQL nullable-reference paging SQL snapshot |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperIntegrationTests.Paging_First_5_Before_Id_96_NET9_0.md | Updates integration snapshot output |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperIntegrationTests.Paging_First_5_Before_Id_96_NET8_0.md | Updates integration snapshot output |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperIntegrationTests.Paging_First_5_Before_Id_96_NET10_0.md | Updates integration snapshot output |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperIntegrationTests.Paging_First_5_After_Id_13_NET9_0.md | Updates integration snapshot output |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperIntegrationTests.Paging_First_5_After_Id_13_NET8_0.md | Updates integration snapshot output |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/snapshots/PagingHelperIntegrationTests.Paging_First_5_After_Id_13_NET10_0.md | Updates integration snapshot output |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/TestContext/NullableTestsContext.cs | Adds EF test context/entities for nullable-key scenarios |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/SqlServerCacheCollectionFixture.cs | Adds SqlServer Squadron fixture wiring |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/PagingHelperSqlServerNullableTests.cs | Adds SqlServer nullable paging integration tests |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/PagingHelperPostgreSqlNullableTests.cs | Adds PostgreSQL nullable paging integration tests |
| src/GreenDonut/test/GreenDonut.Data.EntityFramework.Tests/GreenDonut.Data.EntityFramework.Tests.csproj | Adds SqlServer EF provider + Squadron dependency |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/UShortCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/ULongCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/UIntCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/TimeOnlyCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/ShortCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/LongCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/IntCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/GuidCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/FloatCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/DoubleCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/DecimalCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/DateTimeOffsetCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/DateTimeCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/DateOnlyCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data/Cursors/Serializers/BoolCursorKeySerializer.cs | Allows nullable cursor key type resolution |
| src/GreenDonut/src/GreenDonut.Data.Primitives/PagingArguments.cs | Adds NullOrdering to paging arguments |
| src/GreenDonut/src/GreenDonut.Data.Primitives/NullOrdering.cs | Introduces NullOrdering enum |
| src/GreenDonut/src/GreenDonut.Data.EntityFramework/Extensions/PagingQueryableExtensions.cs | Passes NullOrdering into slicing expression generation |
| src/GreenDonut/src/GreenDonut.Data.EntityFramework/Expressions/ExpressionHelpers.cs | Implements nullable-key slicing logic + NullOrdering |
| src/Directory.Packages.props | Adds EF SqlServer + Squadron.SqlServer package versions |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
66da6d7 to
a8a0382
Compare
Summary of the changes (Less than 80 chars)
To-do:
HotChocolate/Data/test/Data.Tests/Pagination/PagingArgumentsParameterExpressionBuilderTests.cs#X.HotChocolate/Core/test/Types.Analyzers.Integration.Tests/IntegrationTests.cs#X.src/HotChocolate/Data/test/Data.Tests/PagingHelperIntegrationTests.cs.NullabilityInfoContextinExpressionHelpers–[ThreadStatic]or lock?EfQueryableCursorPagingHandleris breaking – will throw for nullable cursor keys.