doc/api/classes/OCI8AutoRecover.html

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>Class: OCI8AutoRecover</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
  <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
  <script type="text/javascript">
  // <![CDATA[

  function popupCode( url ) {
    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
  }

  function toggleCode( id ) {
    if ( document.getElementById )
      elem = document.getElementById( id );
    else if ( document.all )
      elem = eval( "document.all." + id );
    else
      return false;

    elemStyle = elem.style;
    
    if ( elemStyle.display != "block" ) {
      elemStyle.display = "block"
    } else {
      elemStyle.display = "none"
    }

    return true;
  }
  
  // Make codeblocks hidden by default
  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
  
  // ]]>
  </script>

</head>
<body>



    <div id="classHeader">
        <table class="header-table">
        <tr class="top-aligned-row">
          <td><strong>Class</strong></td>
          <td class="class-name-in-header">OCI8AutoRecover</td>
        </tr>
        <tr class="top-aligned-row">
            <td><strong>In:</strong></td>
            <td>
                <a href="../files/vendor/rails/activerecord/lib/active_record/connection_adapters/oracle_adapter_rb.html">
                vendor/rails/activerecord/lib/active_record/connection_adapters/oracle_adapter.rb
                </a>
        <br />
            </td>
        </tr>

        <tr class="top-aligned-row">
            <td><strong>Parent:</strong></td>
            <td>
                DelegateClass(OCI8)
            </td>
        </tr>
        </table>
    </div>
  <!-- banner header -->

  <div id="bodyContent">



  <div id="contextContent">

    <div id="description">
      <p>
The <a href="OCI8AutoRecover.html">OCI8AutoRecover</a> class enhances the
OCI8 driver with auto-recover and reset functionality. If a call to <a
href="OCI8AutoRecover.html#M000006">exec</a> fails, and autocommit is
turned on (ie., we&#8216;re not in the middle of a longer transaction), it
will automatically reconnect and try again. If autocommit is turned off,
this would be dangerous (as the earlier part of the implied transaction may
have failed silently if the connection died) &#8212; so instead the
connection is marked as dead, to be reconnected on it&#8216;s next use.
</p>

    </div>


   </div>

    <div id="method-list">
      <h3 class="section-bar">Methods</h3>

      <div class="name-list">
      <a href="#M000006">exec</a>&nbsp;&nbsp;
      <a href="#M000003">new</a>&nbsp;&nbsp;
      <a href="#M000004">ping</a>&nbsp;&nbsp;
      <a href="#M000005">reset!</a>&nbsp;&nbsp;
      </div>
    </div>

  </div>


    <!-- if includes -->

    <div id="section">


    <div id="constants-list">
      <h3 class="section-bar">Constants</h3>

      <div class="name-list">
        <table summary="Constants">
        <tr class="top-aligned-row context-row">
          <td class="context-item-name">LOST_CONNECTION_ERROR_CODES</td>
          <td>=</td>
          <td class="context-item-value">[ 28, 1012, 3113, 3114 ]</td>
          <td width="3em">&nbsp;</td>
          <td class="context-item-desc">
ORA-00028: your session has been killed ORA-01012: not logged on ORA-03113:
end-of-file on communication channel ORA-03114: not connected to ORACLE

</td>
        </tr>
        </table>
      </div>
    </div>

    <div id="aliases-list">
      <h3 class="section-bar">External Aliases</h3>

      <div class="name-list">
                        <table summary="aliases">
        <tr class="top-aligned-row context-row">
          <td class="context-item-name">active</td>
          <td>-&gt;</td>
          <td class="context-item-value">active?</td>
        </tr>
        <tr class="top-aligned-row context-row">
          <td class="context-item-name">auto_retry</td>
          <td>-&gt;</td>
          <td class="context-item-value">auto_retry?</td>
        </tr>
                        </table>
      </div>
    </div>


    <div id="attribute-list">
      <h3 class="section-bar">Attributes</h3>

      <div class="name-list">
        <table>
        <tr class="top-aligned-row context-row">
          <td class="context-item-name">active</td>
          <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
          <td class="context-item-desc"></td>
        </tr>
        </table>
      </div>
    </div>
      


    <!-- if method_list -->
    <div id="methods">
      <h3 class="section-bar">Public Class methods</h3>

      <div id="method-M000003" class="method-detail">
        <a name="M000003"></a>

        <div class="method-heading">
          <a href="#M000003" class="method-signature">
          <span class="method-name">new</span><span class="method-args">(config, factory = OracleConnectionFactory.new)</span>
          </a>
        </div>
      
        <div class="method-description">
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000003-source">
<pre>
     <span class="ruby-comment cmt"># File vendor/rails/activerecord/lib/active_record/connection_adapters/oracle_adapter.rb, line 617</span>
617:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">config</span>, <span class="ruby-identifier">factory</span> = <span class="ruby-constant">OracleConnectionFactory</span>.<span class="ruby-identifier">new</span>)
618:       <span class="ruby-ivar">@active</span> = <span class="ruby-keyword kw">true</span>
619:       <span class="ruby-ivar">@username</span>, <span class="ruby-ivar">@password</span>, <span class="ruby-ivar">@database</span>, = <span class="ruby-identifier">config</span>[<span class="ruby-identifier">:username</span>], <span class="ruby-identifier">config</span>[<span class="ruby-identifier">:password</span>], <span class="ruby-identifier">config</span>[<span class="ruby-identifier">:database</span>]
620:       <span class="ruby-ivar">@async</span> = <span class="ruby-identifier">config</span>[<span class="ruby-identifier">:allow_concurrency</span>]
621:       <span class="ruby-ivar">@prefetch_rows</span> = <span class="ruby-identifier">config</span>[<span class="ruby-identifier">:prefetch_rows</span>] <span class="ruby-operator">||</span> <span class="ruby-value">100</span>
622:       <span class="ruby-ivar">@cursor_sharing</span> = <span class="ruby-identifier">config</span>[<span class="ruby-identifier">:cursor_sharing</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">'similar'</span>
623:       <span class="ruby-ivar">@factory</span> = <span class="ruby-identifier">factory</span>
624:       <span class="ruby-ivar">@connection</span>  = <span class="ruby-ivar">@factory</span>.<span class="ruby-identifier">new_connection</span> <span class="ruby-ivar">@username</span>, <span class="ruby-ivar">@password</span>, <span class="ruby-ivar">@database</span>, <span class="ruby-ivar">@async</span>, <span class="ruby-ivar">@prefetch_rows</span>, <span class="ruby-ivar">@cursor_sharing</span>
625:       <span class="ruby-keyword kw">super</span> <span class="ruby-ivar">@connection</span>
626:     <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <h3 class="section-bar">Public Instance methods</h3>

      <div id="method-M000006" class="method-detail">
        <a name="M000006"></a>

        <div class="method-heading">
          <a href="#M000006" class="method-signature">
          <span class="method-name">exec</span><span class="method-args">(sql, *bindvars, &amp;block)</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Adds auto-recovery functionality.
</p>
<p>
See: <a
href="http://www.jiubao.org/ruby-oci8/api.en.html#label-11">www.jiubao.org/ruby-oci8/api.en.html#label-11</a>
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000006-source">
<pre>
     <span class="ruby-comment cmt"># File vendor/rails/activerecord/lib/active_record/connection_adapters/oracle_adapter.rb, line 661</span>
661:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">exec</span>(<span class="ruby-identifier">sql</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">bindvars</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
662:       <span class="ruby-identifier">should_retry</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">auto_retry?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">autocommit?</span>
663: 
664:       <span class="ruby-keyword kw">begin</span>
665:         <span class="ruby-ivar">@connection</span>.<span class="ruby-identifier">exec</span>(<span class="ruby-identifier">sql</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">bindvars</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
666:       <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">OCIException</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
667:         <span class="ruby-identifier">raise</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">LOST_CONNECTION_ERROR_CODES</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">e</span>.<span class="ruby-identifier">code</span>)
668:         <span class="ruby-ivar">@active</span> = <span class="ruby-keyword kw">false</span>
669:         <span class="ruby-identifier">raise</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">should_retry</span>
670:         <span class="ruby-identifier">should_retry</span> = <span class="ruby-keyword kw">false</span>
671:         <span class="ruby-identifier">reset!</span> <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>
672:         <span class="ruby-keyword kw">retry</span>
673:       <span class="ruby-keyword kw">end</span>
674:     <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000004" class="method-detail">
        <a name="M000004"></a>

        <div class="method-heading">
          <a href="#M000004" class="method-signature">
          <span class="method-name">ping</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Checks connection, returns true if active. Note that <a
href="OCI8AutoRecover.html#M000004">ping</a> actively checks the
connection, while active? simply returns the last known state.
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000004-source">
<pre>
     <span class="ruby-comment cmt"># File vendor/rails/activerecord/lib/active_record/connection_adapters/oracle_adapter.rb, line 631</span>
631:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ping</span>
632:       <span class="ruby-ivar">@connection</span>.<span class="ruby-identifier">exec</span>(<span class="ruby-value str">&quot;select 1 from dual&quot;</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span> <span class="ruby-keyword kw">nil</span> }
633:       <span class="ruby-ivar">@active</span> = <span class="ruby-keyword kw">true</span>
634:     <span class="ruby-keyword kw">rescue</span>
635:       <span class="ruby-ivar">@active</span> = <span class="ruby-keyword kw">false</span>
636:       <span class="ruby-identifier">raise</span>
637:     <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000005" class="method-detail">
        <a name="M000005"></a>

        <div class="method-heading">
          <a href="#M000005" class="method-signature">
          <span class="method-name">reset!</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Resets connection, by logging off and creating a <a
href="OCI8AutoRecover.html#M000003">new</a> connection.
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000005-source">
<pre>
     <span class="ruby-comment cmt"># File vendor/rails/activerecord/lib/active_record/connection_adapters/oracle_adapter.rb, line 640</span>
640:     <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reset!</span>
641:       <span class="ruby-identifier">logoff</span> <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>
642:       <span class="ruby-keyword kw">begin</span>
643:         <span class="ruby-ivar">@connection</span> = <span class="ruby-ivar">@factory</span>.<span class="ruby-identifier">new_connection</span> <span class="ruby-ivar">@username</span>, <span class="ruby-ivar">@password</span>, <span class="ruby-ivar">@database</span>, <span class="ruby-ivar">@async</span>, <span class="ruby-ivar">@prefetch_rows</span>, <span class="ruby-ivar">@cursor_sharing</span>
644:         <span class="ruby-identifier">__setobj__</span> <span class="ruby-ivar">@connection</span>
645:         <span class="ruby-ivar">@active</span> = <span class="ruby-keyword kw">true</span>
646:       <span class="ruby-keyword kw">rescue</span>
647:         <span class="ruby-ivar">@active</span> = <span class="ruby-keyword kw">false</span>
648:         <span class="ruby-identifier">raise</span>
649:       <span class="ruby-keyword kw">end</span>
650:     <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>


    </div>


  </div>


<div id="validator-badges">
  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
</div>

</body>
</html>