Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[release/8.0] Make Contains work again over hierarchyid #31930

Merged
merged 1 commit into from
Oct 3, 2023

Conversation

roji
Copy link
Member

@roji roji commented Oct 2, 2023

Fixes #31912

Description

The primitive collection improvements to 8.0 changed the translation of Contains to use OPENJSON with WITH, but that's incompatible with hierarchyid (SQL Server CLR type).

Customer impact

Queries which apply Contains to a parameter list of HierarchyId no longer work in 8.0.

How found

Customer reported.

Regression

Yes (when the community hierarchyid package was used)

Testing

Added.

Risk

Very low, the mechanism to transform the incompatible OPENJSON with WITH to OPENJSON without WITH already existed for other purposes; this change only extends its usage for hierarchyid.

@ajcvickers ajcvickers added this to the 8.0.0 milestone Oct 2, 2023
@roji roji changed the title Make Contains work again over hierarchyid [release/8.0] Make Contains work again over hierarchyid Oct 2, 2023
@ajcvickers
Copy link
Member

@roji This is approved by Tactics.

@roji roji merged commit ff1feb3 into dotnet:release/8.0 Oct 3, 2023
7 checks passed
@roji roji deleted the ContainsWithClrTypes branch October 3, 2023 09:49
@IT-CASADO
Copy link

This is still broken in some use cases. In my case with some .Includes and .AsSplitQuery().

var result = await query
   .Include()
   .AsSplitQuery()       
   .ToListAsync(cancellationToken);

This results to follwoing two queries.

exec sp_executesql N'SELECT [i].[Id], [i].[NodeId]
FROM [Initiative] AS [i]

WHERE [i].[NodeId] IN (
    SELECT CAST([q].[value] AS hierarchyid) AS [value]
    FROM OPENJSON(@__qFiltered_1) AS [q]
)'

,N'@__qFiltered_1 nvarchar(4000)',@__qFiltered_1=N'["/3/1/1/"]'


exec sp_executesql N'SELECT [i].[Id], [i].[NodeId]
FROM [Initiative] AS [i]
INNER JOIN [InitiativeDimensionValue] AS [t] ON [i].[Id] = [t].[InitiativeId]

WHERE [i].[NodeId] IN (
    SELECT [q].[value]
    FROM OPENJSON(@__qFiltered_4) WITH ([value] hierarchyid ''$'') AS [q]         --> this is wrong
)'

,N'@__qFiltered_1 nvarchar(4000)',@__qFiltered_1=N'["/3/1/1/"]'

Unfortunately the second query is still using the WITH syntax.

@roji
Copy link
Member Author

roji commented Jan 31, 2024

@IT-CASADO can you please open a new issue for this, including a minimal, runnable code sample? Then I can look at fixing that case as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Hierarchyid in a parameter collection does not work in 8.0-rc1 with MSSQL
4 participants