Composed query with groupBy clause in subquery fails
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 45/100
Rechercherichtung
Beginne damit, die Übersetzung zusammengesetzter F#-Abfragen durch SQLProvider mit einer groupBy-Klausel nachzuverfolgen, und untersuche die für die Reproduktion generierte Unterabfrage. Als erledigt gilt die Aufgabe, wenn die IN-Unterabfrage nur die angeforderte Aggregatspalte auswählt, während die explizite Auswahl des Gruppenschlüssels diesen weiterhin einschließt; füge einen Regressionstest hinzu oder führe einen aus, der beide Fälle abdeckt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Describe the bug
SqlException "Only one expression can be specified in the select list when the subquery is not introduced with EXISTS." returned when using a composed query when the subquery has a groupBy clause. This is because SQLProvider includes the groupBy key in the select clause even if you haven't asked for it.
To Reproduce
Steps to reproduce the behavior:
- Take a query that uses a subquery with a groupBy clause, e.g.:
let test =
let lastAddresses =
query {
for a in dbContext.Address do
where (a.Deleted.IsNone)
groupBy a.UserId into g
select (g.Max(fun a -> a.Id))
}
let result =
query {
for a in dbContext.Address do
where (lastAddresses.Contains(a.Id))
select a
}
result
- Run the query, and you get the SqlException described above.
- Inspecting the SQL produced, you can see the problem:
SELECT *
FROM [address] as [a]
WHERE (([a].[Id] IN (
SELECT [a].[UserId] as '[a].[UserId]', MAX([a].[Id]) as '[a].[MAX_Id]'
FROM [address] as [a]
WHERE (([a].[Deleted] IS NOT NULL))
GROUP BY [a].[UserId]))
)
- Basically SQLProvider is including
[a].[UserId] as '[a].[UserId]'in the select clause of the subquery. TheINclause is only expecting a single column in the subquery so fails.
Expected behavior
SQLProvider should only return the columns requested in the query. The SQL produced should be:
SELECT *
FROM [address] as [a]
WHERE (([a].[Id] IN (
SELECT MAX([a].[Id]) as '[a].[MAX_Id]'
FROM [address] as [a]
WHERE (([a].[Deleted] IS NOT NULL))
GROUP BY [a].[UserId]))
)
Additional context
If we wanted the groupBy key included in the select statement, we could do so by requesting it explicitly, so there is no reason why SQLProvider should do this for us unsolicitedly:
let test =
let lastAddresses =
query {
for a in dbContext.Address do
where (a.Deleted.IsNone)
groupBy a.UserId into g
select (g.Key, g.Max(fun a -> a.Id))
}
let result =
query {
for a in dbContext.Address do
where (lastAddresses.Contains(a.Id))
select a
}
result
- Vorherrschende Sprache
- F#
- Sterne
- 627
- Forks
- 148
- Ø Merge
- 2 Std. 2 Min.
- Gemergte PRs (30 T.)
- 1
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Kein Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus fsprojects/SQLProvider
-
enhancement
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 55/100
fsprojects/SQLProvider#872 · 2 Kommentare ·
-
Repo Assist?Offenenhancement
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 10/100
fsprojects/SQLProvider#870 · 1 Kommentar ·
-
postgresql
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 58/100
fsprojects/SQLProvider#869 · 2 Kommentare ·
-
documentation
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 42/100
fsprojects/SQLProvider#868 · 2 Kommentare ·
-
sql server
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
fsprojects/SQLProvider#851 · 1 Kommentar ·
Alle Issues in fsprojects/SQLProvider
Ähnliche Issues
-
clawsweeper:fix-shape-clear clawsweeper:queueable-fix clawsweeper:source-repro impact:other issue-rating: 🦞 diamond lobster no-stale P2
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
openclaw/openclaw#168089 · 2 Kommentare · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag
-
area:core area:runtime type:security
Schwierigkeit 2/5 Ein halber Tag Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
openimsdk/openim-sdk-core#1127 ·
-
good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
zmo2s/agent-toolbox#3 ·
-
Database: Person property settings, open Limit / Default / Notify as flyouts (NavigableMenuItem)Offendatabase enhancement good first issue low small
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag