EasySqlParserを作った動機 その2

前回の続き

4. 開発者全員がラムダ式を使えるわけではない

これもEntityFrameworkに限った話です1

var query = DbContext.Employees.Single(e => e.EmployeeId == 1);

このような記述を見てSQLしか知らないおじさんがいきなり理解できるのか?
と言われると厳しいものがある

知らんけど

個人的な見解では.NET 3.5でLINQが登場してから10年以上たっているのにラムダ式使えないとかありえなくね?という気はします

現実は非常である(ポルナレフ風に)

よろしい、ならば素直にSQL文を書こう
からのEasySqlParserです

交換可能な技術があって、生産性などの面から見ても問題なければ
できるものでやればよい
それが自由というものだ()

5. 分かりやすいログを見たい

これもEntityFrameworkに限(ry)

SELECT TOP(@__p_0) [e].[BusinessEntityID], [e].[ModifiedDate], [e].[rowguid], [e.Person].[BusinessEntityID], [e.Person].[AdditionalContactInfo], [e.Person].[Demographics], [e.Person].[EmailPromotion], [e.Person].[FirstName], [e.Person].[LastName], [e.Person].[MiddleName], [e.Person].[ModifiedDate], [e.Person].[NameStyle], [e.Person].[PersonType], [e.Person].[rowguid], [e.Person].[Suffix], [e.Person].[Title], [e.Person.Employee].[BusinessEntityID], [e.Person.Employee].[BirthDate], [e.Person.Employee].[CurrentFlag], [e.Person.Employee].[Gender], [e.Person.Employee].[HireDate], [e.Person.Employee].[JobTitle], [e.Person.Employee].[LoginID], [e.Person.Employee].[MaritalStatus], [e.Person.Employee].[ModifiedDate], [e.Person.Employee].[NationalIDNumber], [e.Person.Employee].[OrganizationLevel], [e.Person.Employee].[rowguid], [e.Person.Employee].[SalariedFlag], [e.Person.Employee].[SickLeaveHours], [e.Person.Employee].[VacationHours]
FROM [Person].[BusinessEntity] AS [e]
LEFT JOIN [Person].[Person] AS [e.Person] ON [e].[BusinessEntityID] = [e.Person].[BusinessEntityID]
LEFT JOIN [HumanResources].[Employee] AS [e.Person.Employee] ON [e.Person].[BusinessEntityID] = [e.Person.Employee].[BusinessEntityID]
WHERE [e.Person].[MiddleName] = N'J'

これはEasySqlParserのサンプルアプリと同じようなデータを取得した場合に出力される、EntityFrameworkのログです

いや、かなり厳しいw
特に 2-way-sql が出力するログに見慣れているとw

不要なカラムは見たくないし、項目ごとに改行して欲しいのが人情というもの

まぁA5:SQL Mk-2に張り付けて整形すれが言い訳ですが

SELECT
    t0.BusinessEntityID
  , t1.FirstName
  , t1.MiddleName
  , t1.LastName
  , t0.BirthDate
  , t0.MaritalStatus
  , t0.Gender
  , t0.HireDate
FROM HumanResources.Employee t0
INNER JOIN Person.Person t1
  ON t0.BusinessEntityID = t1.BusinessEntityID
WHERE



   t0.BirthDate BETWEEN '1980/01/01 0:00:00' AND '1990/01/01 0:00:00'



ORDER BY
  t0.BusinessEntityID

これはドキュメントにも書いているEasySqlParserが出すログです
SQLファイルに書いてある通りに改行され、書いた通りの項目が出力されます

どちらが見やすいかは一目瞭然かと思います

6. OSSへの貢献

エンジニアの端くれである以上、OSSというエコシステムに少しでも貢献したいという思いがあります

また、日ごろからOSSを利用しているのに何の恩返しもできないのはどこか後ろめたいものが少なからずありました

かといって他のOSSにPRを送るほど私にはスキルがありません

ということでOSSを作って貢献しよう(ありそうでない+自分が欲しい .NET向け 2-way-sql パーサーを書いてしまおう)
と思い立ったわけです


  1. Dapperでも結果セット取ってきて後からクエリ書く場合もあるかな?
    最近まともに触ってないのでよくわかりませんw