ZoppaDSql 1.1.1

dotnet add package ZoppaDSql --version 1.1.1
                    
NuGet\Install-Package ZoppaDSql -Version 1.1.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ZoppaDSql" Version="1.1.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ZoppaDSql" Version="1.1.1" />
                    
Directory.Packages.props
<PackageReference Include="ZoppaDSql" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ZoppaDSql --version 1.1.1
                    
#r "nuget: ZoppaDSql, 1.1.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package ZoppaDSql@1.1.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=ZoppaDSql&version=1.1.1
                    
Install as a Cake Addin
#tool nuget:?package=ZoppaDSql&version=1.1.1
                    
Install as a Cake Tool

説明

動的SQLはコードからSQL文を自動生成する方法が一般的と思っています。
しかし、コードから自動生成されるSQL文は細かな調整が難しいというイメージがあり、また、データベース操作が埋め込まれるので処理の検索がちょっと難しいと思います。

そのため、MybatisのXMLの動的SQLを参考にライブラリを作成しました。
以下の例をご覧ください。

Dim answer = "" &
"select * from employees 
{trim}
where
    {if empNo}emp_no < 20000{end if} and
    ({if first_name}first_name like 'A%'{end if} or 
     {if gender}gender = 'F'{end if})
{end trim}
limit 10".Compile(New With {.empNo = False, .first_name = False, .gender = False})

SQLを記述した文字列内に {} で囲まれた文が制御文になります。
拡張メソッド Compile にパラメータとなるクラスを引き渡して実行するとクラスのプロパティを読み込み、SQLを動的に構築します。
パラメータは全て False なので、実行結果は以下のようになります。

select * from employees 
limit 10

動的に生成したSQL文をDapperやEntity Frameworkで利用することができます。
また、簡単に利用するために IDbConnectionの拡張メソッド、および、シンプルなマッピング処理を用意しています。

以下の例は、パラメータのseachIdNULL以外ならば、ArtistIdseachIdと等しいことという動的SQLを query変数に格納しました。

Dim query = "" &
"select
  albumid, title, name
from
  albums
inner join artists on
  albums.ArtistId = artists.ArtistId
where
  {if seachId <> NULL }albums.ArtistId = @seachId{end if}"

次に、SQLiteのIDbConnectionの実装であるSQLiteConnectionをOpenした後、ExecuteRecordsSync拡張メソッドを実行するとSQLの実行結果がAlbumInfoクラスのリストで取得できます。

Dim answer As List(Of AlbumInfo)
Using sqlite As New SQLiteConnection("Data Source=chinook.db")
    sqlite.Open()

    answer = Await sqlite.ExecuteRecordsSync(Of AlbumInfo)(query, New With {.seachId = 11})
    ' answerにSQLの実行結果が格納されます
End Using

AlbumInfoクラスの実装は以下のとおりです。
マッピングは一般的にはプロパティ、フィールドをマッピングしますが、ZoppaDSqlはSQLの実行結果の各カラムの型と一致するコンストラクタを検索してインスタンスを生成します。

Public Class AlbumInfo
    Public ReadOnly Property AlbumId As Integer
    Public ReadOnly Property AlbumTitle As String
    Public ReadOnly Property ArtistName As String

    Public Sub New(id As Long, title As String, nm As String)
        Me.AlbumId = id
        Me.AlbumTitle = title
        Me.ArtistName = nm
    End Sub
End Class

以上、簡単な説明となります。ライブラリの詳細はGithubのページを参照してください。

更新について

  • 1.1.1 大量ログ出力に対応するためログ出力機能を修正
    where句のtrimで論理和/論理積が消えなかったためロジック修正
  • 1.1.0 Selectクエリの結果をObject配列リストで返すExecuteArraysメソッドを追加
    一列の結果を指定の型で取得するExecuteDatasを追加
  • 1.0.9 PrimaryKeyListにSearchValueを追加して、インスタンスの関連付け処理コードを読みやすく修正
    Microsoft Accessのパラメータが位置指定のため、SetOrderNameでパラメータ位置を設定できるようにしました
  • 1.0.8 実行結果をDataTable(ZoppaDSqlManager.ExecuteTable)、DynamicObject(ZoppaDSqlManager.ExecuteObject)で取得するメソッドを追加、および、Mapper機能でDBNullをnullに変更する機能を追加
  • 1.0.7 マッパー機能について、Oracle ODP.NET, Managed Driver の仕様から期待通りの動作がされない恐れがあるため ZoppaDSqlSetting.SetParameterChecker を追加
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.1 258 4/28/2023
1.1.0 308 2/26/2023
1.0.9 355 1/14/2023
1.0.8 374 11/24/2022
1.0.7 456 10/22/2022
1.0.6 491 9/25/2022
1.0.5 463 9/24/2022
1.0.4 475 9/20/2022