Fixed length binary columns in user defined table types fail when constructed

Offen
#413 9 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
55/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
fsharp, sql
Bereich
databases

Rechercherichtung

Beginnen Sie damit, src/SqlClient.DesignTime/DesignTime.fs um Zeile 544 herum zu lesen, und reproduzieren Sie den bereitgestellten benutzerdefinierten Tabellentyp mithilfe einer binary(16)-Spalte. Fügen Sie einen Regressionseinheitstest für die Erstellung des generierten Tabellentypwerts hinzu und überprüfen Sie anschließend, dass er ohne die gemeldete SqlMetaData-Konstruktor-Ausnahme abgeschlossen wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bug
Issue Summary

When using a user defined table type with a fixed length binary column the wrong constructor for SqlMetaData is used resulting in the following exception.

System.ArgumentException: 'The dbType Binary is invalid for this constructor.'

This line looks like it's causing the issue, which incorrectly assumes if it is a fixed length that it can safely use the two parameter constructor:

https://github.com/fsprojects/FSharp.Data.SqlClient/blob/0bc5129586512316570da1f27e588287d7e8be35/src/SqlClient.DesignTime/DesignTime.fs#L544

To Reproduce
  1. Create a custom table type
CREATE TYPE [dbo].[CustomTableType] AS TABLE(
	[Value] [binary](16)
)
  1. Use the type in a query
type StaticProvider =
    SqlCommandProvider<"
        Declare @Updates as CustomTableType = @Inputs;
    " , staticConnectionString>

use cmd = new StaticProvider(context.connection, transaction = context.transaction)
cmd.AsyncExecute(
    data.inputs
    |> List.map(fun x ->
        StaticProvider.CustomTableType( // <--- Error in constructor
            Value = x.value
        )
    )
Error
System.ArgumentException: 'The dbType Binary is invalid for this constructor.'
Expected behavior

There should not be an error in this case.

What you can do
  • I am willing to contribute a PR with a unit test showcasing the issue
  • I am willing to test the bug fix before next release
Vorherrschende Sprache
F#
Sterne
206
Forks
65
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus fsprojects/FSharp.Data.SqlClient

Alle Issues in fsprojects/FSharp.Data.SqlClient

Ähnliche Issues

Weitere Issues zu Databases

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.