Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > media > main-release > by-pkgid > 0bd96f9f4c9747e72719d0f70d644baf > files > 106

lib64mysql-devel-5.0.51a-7mdv2008.1.x86_64.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>NdbBlob Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.5 -->
<div class="contents">
<h1>NdbBlob Class Reference</h1><!-- doxytag: class="NdbBlob" --><code>#include &lt;NdbBlob.hpp&gt;</code>
<p>

<p>
<a href="classNdbBlob-members.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2>
Blob handle. 
<p>
Blob data is stored in 2 places:<p>
<ul>
<li>"header" and "inline bytes" stored in the blob attribute</li><li>"blob parts" stored in a separate table NDB$BLOB_&lt;tid&gt;_&lt;cid&gt;</li></ul>
<p>
Inline and part sizes can be set via <a class="el" href="classNdbDictionary_1_1Column.html" title="Represents a column in an NDB Cluster table.">NdbDictionary::Column</a> methods when the table is created.<p>
<a class="el" href="classNdbBlob.html" title="Blob handle.">NdbBlob</a> is a blob handle. To access blob data, the handle must be created using <a class="el" href="classNdbOperation.html#3b6aa22db7ef8923f75c6b83fefa8c2a">NdbOperation::getBlobHandle</a> in operation prepare phase. The handle has following states:<p>
<ul>
<li>prepared: before the operation is executed</li><li>active: after execute or next result but before transaction commit</li><li>closed: after transaction commit</li><li>invalid: after rollback or transaction close</li></ul>
<p>
<a class="el" href="classNdbBlob.html" title="Blob handle.">NdbBlob</a> supports 3 styles of data access:<p>
<ul>
<li>in prepare phase, <a class="el" href="classNdbBlob.html" title="Blob handle.">NdbBlob</a> methods getValue and setValue are used to prepare a read or write of a blob value of known size</li></ul>
<p>
<ul>
<li>in prepare phase, setActiveHook is used to define a routine which is invoked as soon as the handle becomes active</li></ul>
<p>
<ul>
<li>in active phase, readData and writeData are used to read or write blob data of arbitrary size</li></ul>
<p>
The styles can be applied in combination (in above order).<p>
Blob operations take effect at next transaction execute. In some cases <a class="el" href="classNdbBlob.html" title="Blob handle.">NdbBlob</a> is forced to do implicit executes. To avoid this, operate on complete blob parts.<p>
Use NdbTransaction::executePendingBlobOps to flush your reads and writes. It avoids execute penalty if nothing is pending. It is not needed after execute (obviously) or after next scan result.<p>
<a class="el" href="classNdbBlob.html" title="Blob handle.">NdbBlob</a> methods return -1 on error and 0 on success, and use output parameters when necessary.<p>
Usage notes for different operation types:<p>
<ul>
<li>insertTuple must use setValue if blob attribute is non-nullable</li></ul>
<p>
<ul>
<li>readTuple or scan readTuples with lock mode LM_CommittedRead is automatically upgraded to lock mode LM_Read if any blob attributes are accessed (to guarantee consistent view)</li></ul>
<p>
<ul>
<li>readTuple (with any lock mode) can only read blob value</li></ul>
<p>
<ul>
<li>updateTuple can either overwrite existing value with setValue or update it in active phase</li></ul>
<p>
<ul>
<li>writeTuple always overwrites blob value and must use setValue if blob attribute is non-nullable</li></ul>
<p>
<ul>
<li>deleteTuple creates implicit non-accessible blob handles</li></ul>
<p>
<ul>
<li>scan readTuples (any lock mode) can use its blob handles only to read blob value</li></ul>
<p>
<ul>
<li>scan readTuples with lock mode LM_Exclusive can update row and blob value using updateCurrentTuple, where the operation returned must create its own blob handles explicitly</li></ul>
<p>
<ul>
<li>scan readTuples with lock mode LM_Exclusive can delete row (and therefore blob values) using deleteCurrentTuple, which creates implicit non-accessible blob handles</li></ul>
<p>
<ul>
<li>the operation returned by lockCurrentTuple cannot update blob value</li></ul>
<p>
Bugs / limitations:<p>
<ul>
<li>too many pending blob ops can blow up i/o buffers</li></ul>
<p>
<ul>
<li>table and its blob part tables are not created atomically </li></ul>
<h2>Public Types</h2>
<ul>
<li>enum <a class="el" href="classNdbBlob.html#3247c7ab70ed3101709029c94db0c2ec">State</a> { <br>
&nbsp;&nbsp;<b>Idle</b> =  0, 
<b>Prepared</b> =  1, 
<b>Active</b> =  2, 
<b>Closed</b> =  3, 
<br>
&nbsp;&nbsp;<b>Invalid</b> =  9
<br>
 }
</ul>
<h2>Public Member Functions</h2>
<ul>
<li><a class="el" href="classNdbBlob.html#3247c7ab70ed3101709029c94db0c2ec">State</a> <a class="el" href="classNdbBlob.html#a92b53fbc43bb71d748db609c83ab944">getState</a> ()
<li>int <a class="el" href="classNdbBlob.html#89d04a6af3f27b3c1d211683c2bab72b">getValue</a> (void *data, Uint32 bytes)
<li>int <a class="el" href="classNdbBlob.html#1ef861f5eab8da6484b7ab6e8c6f54b5">setValue</a> (const void *data, Uint32 bytes)
<li>typedef int <a class="el" href="classNdbBlob.html#e964f8f71ef7b54f1565b5fee77a1f37">ActiveHook</a> (<a class="el" href="classNdbBlob.html">NdbBlob</a> *me, void *arg)
<li>int <a class="el" href="classNdbBlob.html#78f6cb0fb26371dcc4ae733c74a7a4b9">setActiveHook</a> (ActiveHook *activeHook, void *arg)
<li>int <a class="el" href="classNdbBlob.html#9a953bc3b76fccfa13065fc626036aaa">getNull</a> (bool &amp;isNull)
<li>int <a class="el" href="classNdbBlob.html#fead5645b2370c595e6244ed438023fd">setNull</a> ()
<li>int <a class="el" href="classNdbBlob.html#20cc7a46f3e93a3131d35567c5438e04">getLength</a> (Uint64 &amp;length)
<li>int <a class="el" href="classNdbBlob.html#a4b16852f149cdd6ed8e2af9f0d2a714">truncate</a> (Uint64 length=0)
<li>int <a class="el" href="classNdbBlob.html#4a19304eadceabe7c70b011e830b1326">getPos</a> (Uint64 &amp;pos)
<li>int <a class="el" href="classNdbBlob.html#f2403dea4cfa1215109a3b8261718e0c">setPos</a> (Uint64 pos)
<li>int <a class="el" href="classNdbBlob.html#c6d0fcad4b732f8e249a45d6e3342a27">readData</a> (void *data, Uint32 &amp;bytes)
<li>int <a class="el" href="classNdbBlob.html#4d084a753548b783de941848ed47a044">writeData</a> (const void *data, Uint32 bytes)
<li>const <a class="el" href="classNdbDictionary_1_1Column.html">NdbDictionary::Column</a> * <a class="el" href="classNdbBlob.html#1a3743e6d796ba102efebec03a91991a">getColumn</a> ()
<li>const <a class="el" href="structNdbError.html">NdbError</a> &amp; <a class="el" href="classNdbBlob.html#88bcb7fcc0f49784a399c0a7902f884e">getNdbError</a> () const 
<li><a class="el" href="classNdbBlob.html">NdbBlob</a> * <a class="el" href="classNdbBlob.html#9d1536afb1b31a5a59a1ce3f03243db4">blobsFirstBlob</a> ()
<li><a class="el" href="classNdbBlob.html">NdbBlob</a> * <a class="el" href="classNdbBlob.html#5f24d9548fff78bf0c9cf9028dd41180">blobsNextBlob</a> ()
</ul>
<h2>Static Public Member Functions</h2>
<ul>
<li>static int <a class="el" href="classNdbBlob.html#dfb0562352b0b8f747555f2af7c2cea8">getBlobTableName</a> (char *btname, <a class="el" href="classNdb.html">Ndb</a> *anNdb, const char *tableName, const char *columnName)
</ul>
<h2>Classes</h2>
<ul>
<li>struct <b>Buf</b>
<li>struct <a class="el" href="structNdbBlob_1_1Head.html">Head</a>
</ul>
<hr><h2>Member Enumeration Documentation</h2>
<a class="anchor" name="3247c7ab70ed3101709029c94db0c2ec"></a><!-- doxytag: member="NdbBlob::State" ref="3247c7ab70ed3101709029c94db0c2ec" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="classNdbBlob.html#3247c7ab70ed3101709029c94db0c2ec">NdbBlob::State</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
State. 
</div>
</div><p>
<hr><h2>Member Function Documentation</h2>
<a class="anchor" name="a92b53fbc43bb71d748db609c83ab944"></a><!-- doxytag: member="NdbBlob::getState" ref="a92b53fbc43bb71d748db609c83ab944" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classNdbBlob.html#3247c7ab70ed3101709029c94db0c2ec">State</a> NdbBlob::getState           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Get the state of a <a class="el" href="classNdbBlob.html" title="Blob handle.">NdbBlob</a> object. 
</div>
</div><p>
<a class="anchor" name="89d04a6af3f27b3c1d211683c2bab72b"></a><!-- doxytag: member="NdbBlob::getValue" ref="89d04a6af3f27b3c1d211683c2bab72b" args="(void *data, Uint32 bytes)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int NdbBlob::getValue           </td>
          <td>(</td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Uint32&nbsp;</td>
          <td class="paramname"> <em>bytes</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Prepare to read blob value. The value is available after execute. Use <a class="el" href="classNdbBlob.html#9a953bc3b76fccfa13065fc626036aaa">getNull()</a> to check for NULL and <a class="el" href="classNdbBlob.html#20cc7a46f3e93a3131d35567c5438e04">getLength()</a> to get the real length and to check for truncation. Sets current read/write position to after the data read. 
</div>
</div><p>
<a class="anchor" name="1ef861f5eab8da6484b7ab6e8c6f54b5"></a><!-- doxytag: member="NdbBlob::setValue" ref="1ef861f5eab8da6484b7ab6e8c6f54b5" args="(const void *data, Uint32 bytes)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int NdbBlob::setValue           </td>
          <td>(</td>
          <td class="paramtype">const void *&nbsp;</td>
          <td class="paramname"> <em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Uint32&nbsp;</td>
          <td class="paramname"> <em>bytes</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Prepare to insert or update blob value. An existing longer blob value will be truncated. The data buffer must remain valid until execute. Sets current read/write position to after the data. Set data to null pointer (0) to create a NULL value. 
</div>
</div><p>
<a class="anchor" name="e964f8f71ef7b54f1565b5fee77a1f37"></a><!-- doxytag: member="NdbBlob::ActiveHook" ref="e964f8f71ef7b54f1565b5fee77a1f37" args="(NdbBlob *me, void *arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef int NdbBlob::ActiveHook           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classNdbBlob.html">NdbBlob</a> *&nbsp;</td>
          <td class="paramname"> <em>me</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>arg</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Callback for <a class="el" href="classNdbBlob.html#78f6cb0fb26371dcc4ae733c74a7a4b9">setActiveHook()</a>. Invoked immediately when the prepared operation has been executed (but not committed). Any <a class="el" href="classNdbBlob.html#89d04a6af3f27b3c1d211683c2bab72b">getValue()</a> or <a class="el" href="classNdbBlob.html#1ef861f5eab8da6484b7ab6e8c6f54b5">setValue()</a> is done first. The blob handle is active so readData or <a class="el" href="classNdbBlob.html#4d084a753548b783de941848ed47a044">writeData()</a> etc can be used to manipulate blob value. A user-defined argument is passed along. Returns non-zero on error. 
</div>
</div><p>
<a class="anchor" name="78f6cb0fb26371dcc4ae733c74a7a4b9"></a><!-- doxytag: member="NdbBlob::setActiveHook" ref="78f6cb0fb26371dcc4ae733c74a7a4b9" args="(ActiveHook *activeHook, void *arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int NdbBlob::setActiveHook           </td>
          <td>(</td>
          <td class="paramtype">ActiveHook *&nbsp;</td>
          <td class="paramname"> <em>activeHook</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>arg</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Define callback for blob handle activation. The queue of prepared operations will be executed in no commit mode up to this point and then the callback is invoked. 
</div>
</div><p>
<a class="anchor" name="9a953bc3b76fccfa13065fc626036aaa"></a><!-- doxytag: member="NdbBlob::getNull" ref="9a953bc3b76fccfa13065fc626036aaa" args="(bool &amp;isNull)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int NdbBlob::getNull           </td>
          <td>(</td>
          <td class="paramtype">bool &amp;&nbsp;</td>
          <td class="paramname"> <em>isNull</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Check if blob is null. 
</div>
</div><p>
<a class="anchor" name="fead5645b2370c595e6244ed438023fd"></a><!-- doxytag: member="NdbBlob::setNull" ref="fead5645b2370c595e6244ed438023fd" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int NdbBlob::setNull           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Set blob to NULL. 
</div>
</div><p>
<a class="anchor" name="20cc7a46f3e93a3131d35567c5438e04"></a><!-- doxytag: member="NdbBlob::getLength" ref="20cc7a46f3e93a3131d35567c5438e04" args="(Uint64 &amp;length)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int NdbBlob::getLength           </td>
          <td>(</td>
          <td class="paramtype">Uint64 &amp;&nbsp;</td>
          <td class="paramname"> <em>length</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Get current length in bytes. Use getNull to distinguish between length 0 blob and NULL blob. 
</div>
</div><p>
<a class="anchor" name="a4b16852f149cdd6ed8e2af9f0d2a714"></a><!-- doxytag: member="NdbBlob::truncate" ref="a4b16852f149cdd6ed8e2af9f0d2a714" args="(Uint64 length=0)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int NdbBlob::truncate           </td>
          <td>(</td>
          <td class="paramtype">Uint64&nbsp;</td>
          <td class="paramname"> <em>length</em> = <code>0</code>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Truncate blob to given length. Has no effect if the length is larger than current length. 
</div>
</div><p>
<a class="anchor" name="4a19304eadceabe7c70b011e830b1326"></a><!-- doxytag: member="NdbBlob::getPos" ref="4a19304eadceabe7c70b011e830b1326" args="(Uint64 &amp;pos)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int NdbBlob::getPos           </td>
          <td>(</td>
          <td class="paramtype">Uint64 &amp;&nbsp;</td>
          <td class="paramname"> <em>pos</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Get current read/write position. 
</div>
</div><p>
<a class="anchor" name="f2403dea4cfa1215109a3b8261718e0c"></a><!-- doxytag: member="NdbBlob::setPos" ref="f2403dea4cfa1215109a3b8261718e0c" args="(Uint64 pos)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int NdbBlob::setPos           </td>
          <td>(</td>
          <td class="paramtype">Uint64&nbsp;</td>
          <td class="paramname"> <em>pos</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Set read/write position. Must be between 0 and current length. "Sparse blobs" are not supported. 
</div>
</div><p>
<a class="anchor" name="c6d0fcad4b732f8e249a45d6e3342a27"></a><!-- doxytag: member="NdbBlob::readData" ref="c6d0fcad4b732f8e249a45d6e3342a27" args="(void *data, Uint32 &amp;bytes)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int NdbBlob::readData           </td>
          <td>(</td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Uint32 &amp;&nbsp;</td>
          <td class="paramname"> <em>bytes</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Read at current position and set new position to first byte after the data read. A read past blob end returns actual number of bytes read in the in/out bytes parameter. 
</div>
</div><p>
<a class="anchor" name="4d084a753548b783de941848ed47a044"></a><!-- doxytag: member="NdbBlob::writeData" ref="4d084a753548b783de941848ed47a044" args="(const void *data, Uint32 bytes)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int NdbBlob::writeData           </td>
          <td>(</td>
          <td class="paramtype">const void *&nbsp;</td>
          <td class="paramname"> <em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Uint32&nbsp;</td>
          <td class="paramname"> <em>bytes</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Write at current position and set new position to first byte after the data written. A write past blob end extends the blob value. 
</div>
</div><p>
<a class="anchor" name="1a3743e6d796ba102efebec03a91991a"></a><!-- doxytag: member="NdbBlob::getColumn" ref="1a3743e6d796ba102efebec03a91991a" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="classNdbDictionary_1_1Column.html">NdbDictionary::Column</a>* NdbBlob::getColumn           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Return the blob column. 
</div>
</div><p>
<a class="anchor" name="dfb0562352b0b8f747555f2af7c2cea8"></a><!-- doxytag: member="NdbBlob::getBlobTableName" ref="dfb0562352b0b8f747555f2af7c2cea8" args="(char *btname, Ndb *anNdb, const char *tableName, const char *columnName)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int NdbBlob::getBlobTableName           </td>
          <td>(</td>
          <td class="paramtype">char *&nbsp;</td>
          <td class="paramname"> <em>btname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classNdb.html">Ndb</a> *&nbsp;</td>
          <td class="paramname"> <em>anNdb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>tableName</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>columnName</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td width="100%"><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Get blob parts table name. Useful only to test programs. 
</div>
</div><p>
<a class="anchor" name="88bcb7fcc0f49784a399c0a7902f884e"></a><!-- doxytag: member="NdbBlob::getNdbError" ref="88bcb7fcc0f49784a399c0a7902f884e" args="() const " -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="structNdbError.html">NdbError</a>&amp; NdbBlob::getNdbError           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"> const</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Return error object. The error may be blob specific (below) or may be copied from a failed implicit operation.<p>
The error code is copied back to the operation unless the operation already has a non-zero error code. 
</div>
</div><p>
<a class="anchor" name="9d1536afb1b31a5a59a1ce3f03243db4"></a><!-- doxytag: member="NdbBlob::blobsFirstBlob" ref="9d1536afb1b31a5a59a1ce3f03243db4" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classNdbBlob.html">NdbBlob</a>* NdbBlob::blobsFirstBlob           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Return info about all blobs in this operation.<p>
Get first blob in list. 
</div>
</div><p>
<a class="anchor" name="5f24d9548fff78bf0c9cf9028dd41180"></a><!-- doxytag: member="NdbBlob::blobsNextBlob" ref="5f24d9548fff78bf0c9cf9028dd41180" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classNdbBlob.html">NdbBlob</a>* NdbBlob::blobsNextBlob           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td width="100%"></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Return info about all blobs in this operation.<p>
Get next blob in list. Initialize with <a class="el" href="classNdbBlob.html#9d1536afb1b31a5a59a1ce3f03243db4">blobsFirstBlob()</a>. 
</div>
</div><p>
</div>
<hr>
<address>
<small>
<center>
Documentation generated Tue Apr  1 13:45:44 2008 from mysql source files.<br>
&copy; 2003-2004 
<a href="http://www.mysql.com">MySQL AB</a>
<br>
</center>
</small></address>
</body>
</html>