Unexpected composed query behavior
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 35/100
Rechercherichtung
Beginne damit, die zusammengesetzten Abfragebeispiele mit DataContext, in Anführungszeichen gesetzten Ausdrücken und dem im Issue gezeigten join zu reproduzieren. Vergleiche die generierten oder zurückgegebenen Werte für die verbundene Abfrage mit den Varianten ohne join und mit Tupelrückgabe; als erledigt gilt dies, wenn die zusammengesetzte Abfrage mit join dieselben ParameterId- und ParameterName-Werte wie die direkte Abfrage zurückgibt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Describe the bug
When using composed queries an unexpected behavior occurs when a join is involved in a query. This results in a select with wrong values. See code examples below.
To Reproduce
let ctx = DataContext.getDataContextWithLog()
// === normal query with expected result
query {
for p in ctx.Dbo.Parameters do
join c in ctx.Dbo.ParametersCategories on
(p.CategoryId = c.CategoryId)
select p
}
|> Seq.toList
|> List.take 3
|> List.map (fun p -> p.ParameterId, p.ParameterName)
// Result:
// val it : (int16 * string) list =
// [(3743s, "Allerg (T1) IgE-totaal"); (3744s, "Allerg (T1) Tryptase");
// (3745s, "Allerg (T1) Huisstofmijt")]
// === composed query with unexpected result
let get (ctx : DataContext.sql.dataContext) =
<@ fun _ ->
query {
for p in ctx.Dbo.Parameters do
join c in ctx.Dbo.ParametersCategories on
(p.CategoryId = c.CategoryId)
select (p)
} @>
query {
for (p) in ((%get ctx) ()) do
select (p.ParameterId, p.ParameterName)
}
|> Seq.toList
|> List.take 3
// Result:
// val get :
// ctx:FSharp.Data.Sql.SqlDataProvider<...>.dataContext ->
// Quotations.Expr<('a ->
// Linq.IQueryable<FSharp.Data.Sql.SqlDataProvider<...>.dataContext.dbo.ParametersEntity>)>
// val it : (int16 * string) list = [(0s, ""); (0s, ""); (0s, "")]
// == composed query without join with expected result
let get (ctx : DataContext.sql.dataContext) =
<@ fun _ ->
query {
for p in ctx.Dbo.Parameters do
// join c in ctx.Dbo.ParametersCategories on
// (p.CategoryId = c.CategoryId)
select (p)
} @>
query {
for (p) in ((%get ctx) ()) do
select (p.ParameterId, p.ParameterName)
}
|> Seq.toList
|> List.take 3
// Result:
// val get :
// ctx:FSharp.Data.Sql.SqlDataProvider<...>.dataContext ->
// Quotations.Expr<('a ->
// Linq.IQueryable<FSharp.Data.Sql.SqlDataProvider<...>.dataContext.dbo.ParametersEntity>)>
// val it : (int16 * string) list =
// [(3743s, "Allerg (T1) IgE-totaal"); (3744s, "Allerg (T1) Tryptase");
// (3745s, "Allerg (T1) Huisstofmijt")]
// == composed query with a tuple return with a 'dummy' unit value returns expected result!?
let get (ctx : DataContext.sql.dataContext) =
<@ fun _ ->
query {
for p in ctx.Dbo.Parameters do
join c in ctx.Dbo.ParametersCategories on
(p.CategoryId = c.CategoryId)
select (p, ())
} @>
query {
for (p, _) in ((%get ctx) ()) do
select (p.ParameterId, p.ParameterName)
}
|> Seq.toList
|> List.take 3
// Result:
// val it : (int16 * string) list =
// [(3743s, "Allerg (T1) IgE-totaal"); (3744s, "Allerg (T1) Tryptase");
// (3745s, "Allerg (T1) Huisstofmijt")]
Expected behavior
Clearly the second query result is inconsistent with the other queries.
Desktop (please complete the following information):
.NET SDK (reflecting any global.json):
Version: 5.0.202
Commit: db7cc87d51
Runtime Environment:
OS Name: Windows
OS Version: 10.0.17763
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\5.0.202\
Host (useful for support):
Version: 5.0.5
Commit: 2f740adc14
.NET SDKs installed:
5.0.200-preview.21077.7 [C:\Program Files\dotnet\sdk]
5.0.201 [C:\Program Files\dotnet\sdk]
5.0.202 [C:\Program Files\dotnet\sdk]
- 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
-
[BUG] LazyStackedTensorDictStore zeroes the last byte of a new key set on the last elementEvtl. vergeben @peterdsharpe hat das heute übernommen. Offenbug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
pytorch/tensordict#2307 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area:connection bug effort:S priority:P2
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
eclipse-score/persistency#493 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Arekkazu/sgpmp-backend#549 ·
Maintainer antworten meist innerhalb von 1 Tag
-
priority: medium tech-debt
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
LeeAdcock/robocodeJs.com#411 ·
Maintainer antworten meist innerhalb von 1 Tag