ささいなことですが。

Windowsアプリテスト自動化ライブラリFriendly開発者の日記です。

LambdicSql - DBごとにパッケージを分けました

今までのLambdicSqlは、使いそうな句や関数を LambdicSql.Symbol ってことろに区別なく定義していました。なのでDBの種類によってはインテリセンスに出てくるけど使えない句とか結構あったんですよね・・・。まあSQLってそんなもんだし良いかなーって思ってたんですが、最近の方針転換で句や関数は可能な限り(できれば全部)定義しようということにしました。そうすると流石に全DB分同じところに定義するとカオスになってくるんですよね。

DBごとにパッケージを分けました。

で、素直に句と関数はDBごとに定義することにしました。共通で使えるものは共通化したいなーとも思ったんですが、逆にややこしくなるのでやめました。Selectとか一般的なやつも各DBごとにそれぞれ定義されています。

・基本部分。Expressionの解析とか。
LambdicSql

・DBごとの句や関数を定義。
LambdicSql.SqlServer
LambdicSql.Oracle
LambdicSql.MySql
LambdicSql.Npgsql
LambdicSql.SQLite
LambdicSql.DB2

例えば、SqlServerを使うときはこんな感じ

using LambdicSql;
using LambdicSql.SqlServer;
using static LambdicSql.SqlServer.Symbol;

....

//Top句はSqlServerのみ使える
static Sql<SelectData> Sample
  =>Db<DB>.Sql(db =>
        Select(Top(10), new SelectData
        {
            PaymentDate = db.tbl_remuneration.payment_date,
            Money = db.tbl_remuneration.money,
        }).
        From(db.tbl_remuneration));

書きやすさの向上

それぞれのDBで使えるものしかインテリセンスに出てこないので使いやすくなったと思います。うろ覚えの句とか書くときは特に。

すべてのSQLC#で表現する

分けることで、作る側としてもやりやすくなりました。後は、句と関数を追加していくだけです(多分
すべては言い過ぎですが可能な限り定義していきます。これ使うときってEFとかで書けないようなSQLを使いたいときだと思うので、マニアックなものでも対応していく方針です。