我们可以在cftransaction中编写数字查询/语句是否有任何限制?

Dee*_*dhy 7 coldfusion cfquery coldfusion-9

今天在修复一些现有代码中的错误时,我发现了一个奇怪的错误.

分支目标偏移量太大

搜索后我发现它与Java字节码转换有关.以下是我发现的链接:

在我的情况下,cftransaction包含大约870个语句,它工作正常.但我需要在此事务中再添加2个查询.现在,当我在cftransaction中添加一行代码时,我收到此错误.目前我无法将任何现有的cfquery移出cftransaction.

以下是代码的整体结构:

<cftransaction action="begin">

   <cfif URL.action eq 'add'>
         Around 200 lines of queries/statements
   <cfelseif URL.action eq 'edit'>
        Around 200 lines of queries/statements
   </cfif>

    <cfif URL.action eq 'add' or URL.action 'edit'>
          Around 450 lines of queries/statements
    </cfif>

</cftransaction>
Run Code Online (Sandbox Code Playgroud)

有没有解决此问题的解决方法?

Anu*_*rag 3

分支偏移量与模块/函数的大小有关。它也可能是由于cfif/cfelseor的较大条件代码块引起的cfswitch

从技术上讲,我不确定数量是否有上限。您可以将查询放入cftransaciton块内。它与从 CF8 到 CF9 的代码迁移无关,而是与条件块内代码的长度有关。

我想拆分函数并尝试将每个大尺寸的条件块作为单独的函数放入 cfc 中:

 <cffunction name="myFunc1">
    <cftransaction action="begin">
      <cfif URL.action eq 'add'>
        <!--- function call with your xxx lines of queries/statements --->
        <cfinvoke component="MyCfc" method="firstQueryBlock" result="result1">
      <cfelseif URL.action eq 'edit'>
        <!--- second function call with your yyy lines of queries/statements --->
        <cfinvoke component="MyCfc" method="secondQueryBlock" result="result2">
      </cfif>

       <cfif URL.action eq 'add' or URL.action 'edit'>
            <!--- third function call with your zzz lines of queries/statements --->
            <cfinvoke component="MyCfc" method="thirdQueryBlock" result="result3">
       </cfif>
    </cftransaction>
 </cffunction>
Run Code Online (Sandbox Code Playgroud)