今までの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; usingstatic 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で使えるものしかインテリセンスに出てこないので使いやすくなったと思います。うろ覚えの句とか書くときは特に。