Soma 0.5.0.0 リリース

F#で作ったO/RマッパーSoma 0.5.0.0をリリースしました(C#VB.NETでも使えます)。

今回リリースのメインの機能は2つです。

  • Enumのサポート
  • ストアドプロシージャ呼び出しのサポート

Enumサポートの機能は以前書いたとおり。


ストアドプロシージャ呼び出しのサポートについて以下に簡単に紹介します。使い方は簡単でストアドプロシージャとレコード型をマッピングしてDb.callを呼びます。ストアドプロシージャの定義はこんなのだとします。

DDL

CREATE PROCEDURE [dbo].[ProcMultiParams]
@Param1 int,
@Param2 int OUTPUT,
@Param3 int OUTPUT
AS
BEGIN
SET
@Param2 = @Param2 + @Param1;
SET @Param3 = @Param1;END
GO
上記のストアドプロシージャに対応するF#のレコードと呼び出し例は次の通りです。

F#

type ProcMultiParams =
{ Param1 : int
[<ProcedureParam(Direction = Direction.InputOutput)>]
Param2 : int
[<ProcedureParam(Direction = Direction.Output)>]
Param3 : int }

[<Test>]
let ``call : PorcMultiParams``() =
let result = Db.call<ProcMultiParams> config { Param1 = 1; Param2 = 2; Param3 = 0 }
assert_equal 1 result.Param1
assert_equal 3 result.Param2
assert_equal 1 result.Param3



SELECTで結果セットを返す場合にも対応。ストアドプロシージャの定義はこのようなもの。

DDL

CREATE PROCEDURE [dbo].[ProcResult]
@EmployeeId int
AS
BEGIN
SELECT
EmployeeId, EmployeeName, DepartmentId, VersionNo FROM Employee WHERE EmployeeId > @EmployeeId ORDER BY EmployeeId;END
GO

上記のストアドプロシージャに対応するF#のレコードと呼び出し例は次の通りです。

F#

type Employee =
{ EmployeeId : int option
EmployeeName : string option
DepartmentId : int option
VersionNo : int option }

[<Procedure(Name = "ProcResult")>]
type ProcEntityResult =
{ EmployeeId : int
[<ProcedureParam(Direction = Direction.Result)>]
EmpList : Employee list }

[<Test>]
let ``call : ProcEntityResult``() =
let result = Db.call<ProcEntityResult> config { EmployeeId = 1; EmpList = [] }
assert_equal 1 result.EmployeeId
assert_equal 3 result.EmpList.Length

SQL Server 2008 はもちろん、MySQL 5.x でも同等の機能が使えます。