Skip to content

Conversation

@roji
Copy link
Member

@roji roji commented Jan 26, 2026

This is important for AI to be able to better understand test failures (well, humans too ;)).

This replaces our a previous mechanism (RelationalQueryAsserter) we had, which:

  • Required explicit opt-in in each and every test suite - most new test suites created in the last years did not do this.
  • Involved lots of code duplication, and was relational-specific

@roji roji requested a review from a team as a code owner January 26, 2026 16:42
Copilot AI review requested due to automatic review settings January 26, 2026 16:42
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates query test infrastructure so that when a query test fails, relevant SQL is emitted to the test output without requiring relational-specific opt-in.

Changes:

  • Remove the relational-specific RelationalQueryAsserter opt-in mechanism and standardize on QueryAsserter creation.
  • Enhance TestSqlLoggerFactory to record and print SQL statements associated with database command errors when test output is flushed on failure.
  • Minor robustness refactor in relational SQL generation (QuerySqlGenerator) via explicit state handling and unreachable guards.

Reviewed changes

Copilot reviewed 29 out of 29 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
test/EFCore.SqlServer.FunctionalTests/Query/FunkyDataQuerySqlServerBaseTest.cs Stops overriding asserter creation (removes relational opt-in).
test/EFCore.Specification.Tests/TestUtilities/QueryAsserter.cs Removes entry-count opt-in plumbing from QueryAsserter.
test/EFCore.Specification.Tests/Query/QueryTestBase.cs Simplifies default asserter creation to the new QueryAsserter ctor signature.
test/EFCore.Specification.Tests/Query/NorthwindIncludeNoTrackingQueryTestBase.cs Removes IgnoreEntryCount override (no longer supported).
test/EFCore.Specification.Tests/Query/ManyToManyNoTrackingQueryTestBase.cs Removes IgnoreEntryCount override (no longer supported).
test/EFCore.Relational.Specification.Tests/TestUtilities/TestSqlLoggerFactory.cs Tracks failed SQL statements (CommandError) and outputs them during WriteTestOutput().
test/EFCore.Relational.Specification.Tests/TestUtilities/RelationalQueryAsserter.cs Deletes the old relational-specific asserter wrapper.
test/EFCore.Relational.Specification.Tests/Query/SpatialQueryRelationalTestBase.cs Removes relational-specific asserter override (now relies on base behavior).
test/EFCore.Relational.Specification.Tests/Query/RelationalNorthwindDbFunctionsQueryTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/OwnedQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/NorthwindWhereQueryRelationalTestBase.cs Switches to standard QueryAsserter construction.
test/EFCore.Relational.Specification.Tests/Query/NorthwindSetOperationsQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/NorthwindSelectQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/NorthwindNavigationsQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/NorthwindMiscellaneousQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/NorthwindKeylessEntitiesQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/NorthwindJoinQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/NorthwindIncludeQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/NorthwindGroupByQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/NorthwindFunctionsQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/NorthwindAggregateOperatorsQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/ManyToManyQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/ManyToManyNoTrackingQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/GearsOfWarQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/CompositeKeysSplitQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/CompositeKeysQueryRelationalTestBase.cs Removes relational-specific asserter override.
test/EFCore.Relational.Specification.Tests/Query/ComplexNavigationsSharedTypeQueryRelationalTestBase.cs Switches to standard QueryAsserter construction.
test/EFCore.Relational.Specification.Tests/Query/ComplexNavigationsQueryRelationalTestBase.cs Switches to standard QueryAsserter construction.
src/EFCore.Relational/Query/QuerySqlGenerator.cs Refactors IN/VALUES SQL generation to use explicit shape handling and unreachable guards.

@roji roji force-pushed the OutputSqlOnError branch from a594b9c to bca9594 Compare January 27, 2026 00:05
@roji roji enabled auto-merge (squash) January 27, 2026 00:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant