fsprojects / fsprojects/FSharp.Data.SqlClient

SqlProgrammabilityProvider generates wrong `Execute` method if SP has default to null output parameter

Aperta
#246 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug
Lingua principale
F#
Stelle
206
Fork
66
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

create procedure sh.SGet
	@STable  dbo.SmallIntTable readonly,
	@ToDate       datetime = null output,
	@no_resultset bit      = 0
as
begin
	set transaction isolation level read uncommitted

	if @no_resultset = 1
		select top 1 @ToDate = s.ToDate
		from dbo.xxx s
			join @STable t
			on t.[value] = s.ID
	else
		select 
  		  s.ID
		, s.ID1
		, s.[Address]
		, s.UpdatePeriod
		, ... 
		from dbo.S s
			join @STable t
			on t.[value] = s.ID
end
use cmd = DB.sh.SGet (connStr, TimeSpan.FromMinutes 1.)
let idTable = ids |> Seq.map WL.dbo.``User-Defined Table Types``.SmallIntTable
let records = cmd.Execute (idTable)

Several issues here:

  1. ExecuteAsync is not generated at all
  2. It does not compile:

Error The type provider 'FSharp.Data.SqlProgrammabilityProvider' reported an error in the context of provided type 'FSharp.Data.SqlProgrammabilityProvider,ConnectionStringOrName="Data Source=test_server; Initial Catalog=TEST; Integrated Security=True"+sh+SGet', member 'Execute'. The error: Type mismatch when building 'args': invalid parameter for a method or indexer property. Expected 'System.DateTime&', but received type 'Microsoft.FSharp.Core.FSharpOption`1[System.DateTime]'.
Parameter name: receivedType

Execute has the following signature:
image

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci il problema con la procedura SQL mostrata e la chiamata F# tramite SqlProgrammabilityProvider. Esamina il modo in cui il provider genera Execute e ExecuteAsync per il nullable output parameter. Il lavoro è completato quando Execute accetta i tipi degli argomenti generati, compila e ExecuteAsync viene generato per questa procedura.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
sql
Ambito
databases
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.