LambdicSql - α 0.0.14リリース - Nullable 対応
Nullableに対応しました。www.nuget.orgpublicclass RemunerationNullable { publicint id { get; set; } publicint? staff_id { get; set; } public DateTime? payment_date { get; set; } publicdecimal? money { get; set;...
View ArticleLambdicSql - 速度はまだまだでした・・・ -
※この書き方は最新のLambdicSqlとは異なります。速度計測の記録なので以前のままにしております。※@yone64さんと@neueccさんにご指摘いただき、タイトルを含め修正しました。結果から書くと、負け負けのようですね。これはパフォーマンス改善を先にやるかなー。テーブル対象はこんなテーブルで1万件データが入っています。IntValFloatValDoubleValDecimalValStrin...
View ArticlelambdicSql - パフォーマンス改善せねば -
※この書き方は最新のLambdicSqlとは異なります。速度計測の記録なので以前のままにしております。前回ので、Dapperに完敗を喫したわけですが、ここで勝負を投げるわけにはいかないですね。改善策を考えてみました。遅いのは、コンパイル他にも要因はあるかもしれませんが、まずは分かりやすいところからつぶしていきましょう。マッピングする型の生成これは素直にキャッシュすることにしました。一回はコンパイルし...
View ArticlelambdicSql - パフォーマンス改善せねば② -
※この書き方は最新のLambdicSqlとは異なります。速度計測の記録なので以前のままにしております。やっぱ、昨日の仕様なし前回コンパイルを減らすためにパラメータを渡すという仕様にしたのですが、やめます。www.nuget.org変数から値を取得するラムダを一回コンパイルしてキャッシュすることにしました。これもキャッシュできました。こんな感じ。ここではメンバ取得処理をインターフェイスでキャッシュして...
View ArticlelambdicSql - パフォーマンス改善せねば ③計測 -
※この書き方は最新のLambdicSqlとは異なります。速度計測の記録なので以前のままにしております。もう少し詳しく計測してみることにします。 VisualStudioのパフォーマンスプロファイラが便利ですね。 VSTestではイマイチやりにくいのでコンソールアプリでやります。using System; namespace Performance { class Program {...
View ArticlelambdicSql - パフォーマンス改善せねば④ SQLite -
プロファイラで見てわかりやすかったところを対応しました。www.nuget.orgこっから先は難しいですね。で、もう少しノイズを減らすためにDBをSQLサーバーからSQLiteに変えました。ファイルアクセスなんで余計なブレはすくないでしょう。ちなみに計測はSurfacePro4のCorei5でやってます。SQLiteはDBアプリとか必要なくて、Nugetから落としてくるだけで使えます。あれ?EF入る...
View ArticleLambdicSql -DistinctとAll
α0.0.36をリリースしました。www.nuget.orgDistinctとAllenumで指定できるように変更しました。Select文[TestMethod] publicvoid Distinct() { var query = Sql<DB>.Create(db => Select(AggregatePredicate.Distinct, new { id =...
View ArticlelambdicSql - CASE式に対応しました -
LabdicSql_α0.0.39をリリースしました。CASEに対応しています。www.nuget.org迷いましたがWHENとTHENはC#上ではWhenThenで書くようにしました。それからENDは書かなくても良いようにしました。 SELECT句への合成はサブクエリと同じ書き方で書くようにしました。検索ケース式[TestMethod] publicvoid Case1() { var query...
View ArticlelambdicSql - Queryの自由な組み立て -
LambdicSqlα_0.0.40 をリリースしました。 Queryの組み立てに関して仕様追加と、既存の仕様を変更しました。α版なんで、破壊的な変更もバンバンいれます。www.nuget.orgQueryは組み合わせることが重要以前、おださんからこのような資料を紹介してもらいました。SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か? from...
View ArticlelambdicSql - Queryの自由な組み立て - ①句単位 -
Queryの組み立てシリーズです。まずは、クエリ単位で分割、構築する方法です。Concatでクエリを連結できるようにしました。Concatは型に関してわざと緩くしました。使っているDBの型が違っても結合できます。最終的にSQL文字列になったときに意味が通っていたらOKです。(ダメならSQL実行で例外が発生します。)publicvoid QueryConcat() { //句単位で別々に記述 var...
View ArticlelambdicSql - Queryの自由な組み立て - ②Expression単位 -
LambdicSqlではExpression単位で分解、構築できるようにしました。 Castっていうキーワードがポイントです。Sql.Query().ExpressionはISqlExpressionという型を返します。これを文中に埋め込むとその文字列になります。でもISqlExpressionではコンパイル通らないので、それがコンパイルできる型にキャストするわけです。publicvoid...
View ArticlelambdicSql - Queryの自由な組み立て - ③サブクエリ -
サブクエリは前からある機能ですが、おさらいで。これも、クエリを先に作っておいて、Castで文中に入れ込みます。入れたところで展開されます。Select句publicvoid SelectSubQuery() { //moneyの全合計 var sub = Sql<DB>.Create(db=> Select(new { total =...
View ArticleLambdicSql - 生まれ変わりました -
※注) 以前のブログもβ版に合わせてコードを修正しているので、前のブログ記事と比べても変化は感じられません。LambdicSql_α0.0.51...
View ArticleLambdicSql - 断捨離 O/Rマッパー機能 捨てました。-
LambdicSqlもSQLを実行して、その結果をオブジェクトにマッピングする機能がありました。Dapperよりも便利なところもあって、匿名クラスにマッピングすることもできてました。ではなぜやめたか。※Dapperでも匿名クラスにマッピングでる場合もあります。でも、失敗するケースもあり。DateTimeが入っていると大抵失敗する。詳細は追っていません。//便利なとこもあるけど、この機能は捨てたpub...
View ArticleLambdicSql - 文字列連携、そして2WaySQL -
LambdicSqlはLambdaでSQLを表現することを目的にしています。でも、やっぱり文字列も使えた方が安心感がありますよね。てわけで文字列を埋め込める機能を追加しました。文字列を式に変換こんな感じで文字列を途中に埋めれます。ただ文字列を入れるだけではなく、そこにラムダで表現した情報を入れれるのです。publicvoid TestFormatText() { var query =...
View ArticleLambdicSql - α51 その他
パラメータ名称@p_0って感じで連番にしていました。折角変数名を使っているのだから、それを変数名に使った方が良いとの意見をいただそのようにしました。publicvoid ParamName() { var min = 3000; var max = 4000; var query = Sql<Data>.Create(db => Select(new { money =...
View ArticleLambdicSql - TableAttributeとColumnAttributeに対応しました。
LambdicSql_α0.0.53をリリースしました。www.nuget.orgテーブル名とカラム名のルールLambdicSqlのテーブル名とカラム名は、通常は変数名で表します。publicclass Staff { //変数名がカラム名になるpublicint id { get; set; } publicstring name { get; set; } } publicclass...
View ArticleLambdicSql - EntityFrameworkと仲良くなりました。
EntityFrameworkを使っているときでも、たまにSQLを直に書きたくなる場合がありますよね。そんな時はLambdicSqlを使うと便利です。そして、EntityFrameworkを使っている環境からLambdicSqlを使いやすい工夫を入れました。しかもそれでいてLambdicSql自体はDLL的にEntityFrameworkに依存したりはしていません。DataContextクラスを指定...
View ArticleLambdicSql -主要DBゆるふわ対応-
LambdicSql_α0.0.63をリリースしました。β版間近です!www.nuget.orgマルチDB対応なんと主要6DBで動作確認しています。Surfaceに全部インストールしましたが、意外と入るものですね。(SQLiteはインストール不要)DataBase type動作確認SQL...
View ArticleSQLWorld★大阪#38 に参加してきました。
SQL力を高めるべく、SqlWorld :: SQLWorld★大阪#38に参加してきました!簡単なものから高度すぎるものまで、レンジの広い問題が出題されました。で、その中でこんな問題がありました。友達の人数を抽出するというものです。で、私はこんなSQLを書きました。SELECT人.名前, isnull(友達人数.人数, 0) AS人数 FROM人 LEFT OUTER JOIN...
View Article