« CF Frameworks Explorer ってなんぞ? | メイン | 今さら »

Transfer で発行されるクエリ

Transfer では、データベースクエリを発行する場所は、transfer.com.sql.QueryExecution の executeQuery() に集約されているので、どんなクエリが発行されているのかを把握することが簡単である。

実際に、80行目に以下のコードを入れてみた。

バイナリデータは、無視してある。

<cfset eLen = ArrayLen(evaluation) />
<cfobject type="Java" class="java.lang.StringBuffer" name="stringBuffer" action="create" />
<cfset sBuffer = stringBuffer.init() />
<cfloop from="1" to="#eLen#" index="eCounter">
 <cfset block = evaluation[eCounter] />

 <cfset sBuffer.append(#PreserveSingleQuotes(block.preSQL)#) />
 <cfif StructKeyExists(block, "mapParam")>
  <cfset param = getMappedParam(block.mapparam.name) />
  <cfif StructKeyExists(param, "operator")>
   <cfset sBuffer.append(#param.operator#) />
  </cfif>
  <cfif StructKeyExists(param, "mapValueReplace")>
   <cfset sBuffer.append(#param.mapValueReplace#) />
  <cfelse>
   <cfset value = 0/>
   <cfif StructKeyExists(param, "value")>
    <cfset value = param.value />
   </cfif>
   <cfif block.mapparam.type eq "date">
    <cfset sBuffer.append("'#value#'") />
   <cfelseif block.mapparam.type eq "numeric">
    <cfset sBuffer.append(#value#) />
   <cfelseif block.mapparam.type eq "boolean">
    <cfset sBuffer.append(#value#) />
   <cfelseif block.mapparam.type eq "binary">
   <cfelse>
    <cfset sBuffer.append("'#value#'") />
   </cfif>
  </cfif>
 </cfif>
</cfloop>
<cfset buffer = sBuffer.toString() />
<cflog application="yes" text="#buffer#" type="information" file="querylog" />

おおおお、出る出る。こんなクエリが発行されているのかと。
しかもこれは、実際に発行される前にクエリを拾うので、エラーになったときに、どんなクエリを発行してエラーになったのかがわかる。
自分なりには、便利だ。

ただし、当然、テスト環境のみで利用することがお勧め。

トラックバック

このエントリーのトラックバックURL:
http://www.schwarzmond.info/mt/mt-tb.cgi/106

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年11月10日 11:04に投稿されたエントリーのページです。

ひとつ前の投稿は「CF Frameworks Explorer ってなんぞ?」です。

次の投稿は「今さら」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。