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]上記のストアドプロシージャに対応するF#のレコードと呼び出し例は次の通りです。
@Param1 int,
@Param2 int OUTPUT,
@Param3 int OUTPUT
AS
BEGIN
SET @Param2 = @Param2 + @Param1;
SET @Param3 = @Param1;END
GO
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 でも同等の機能が使えます。