VB.NETでヒアドキュメントをlogる
<TestClass()> _ Public Class HereDocumentTest <TestMethod()> _ Public Sub Test1() Dim sql As String = <sql> SELECT C1, C2, C3 FROM T1 </sql>.Value Debug.Print(sql) End Sub End Class
うnix Shell + RDBMS、(よくあるパターンはLinux + Oracle)でShellを
さんざん書いたことがあるヒトなら、コンパイラ言語でヒアドキュメントが
使えないことはとっても不便に思うハズ。
VB.NETで、間接的に使えることが分かったのでlogろうw
間接的にというのは、こういうこと。
System.Xml.Linq.XElement を使うのだ。
XElementは、直接コード中に埋め込むことができるのでbodyを持った1つの要素として、ベタに記述することができる。
面白いw
前述の例はコレを端折って書いていています。
<TestMethod()> _ Public Sub Test2() Dim xe As XElement = <sql> SELECT C1, C2, C3 FROM T1 </sql> Debug.Print(xe.Value) End Sub
大概のイケてないプロジェクトではこんな状況になっているでしょう...
<TestMethod()> _ Public Sub Test3() Dim sb As New StringBuilder sb.Append("SELECT") _ .Append(" C1,") _ .Append(" C2,") _ .Append(" C3") _ .Append(" FROM") _ .Append(" T1") Debug.Print(sb.ToString) End Sub
このパターンは10年前の実装です。
読めない、書けない、書きたくない...
ORMの導入を検討してあきらめることもあるでしょう...
外だしSQL(ファイル)を検討してあきらめることもあるでしょう...
そんな場合の選択肢の一つかもしれないです。
ちなみに、スクリプトレットを埋め込むことができるで、動的SQLの編集もイケそうです。
<TestMethod()> _ Public Sub Test4() Dim c1 As Integer = 100 Dim sql As String = <sql> SELECT C1, C2, C3 FROM T1 WHERE C1 = <%= c1 %> </sql>.Value Debug.Print(sql) End Sub
Work! Enjoy it!