<?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> <head> <title>Class: SQLite3::ResultSet</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" /> <script language="JavaScript" type="text/javascript"> // <![CDATA[ function toggleSource( id ) { var elem var link if( document.getElementById ) { elem = document.getElementById( id ) link = document.getElementById( "l_" + id ) } else if ( document.all ) { elem = eval( "document.all." + id ) link = eval( "document.all.l_" + id ) } else return false; if( elem.style.display == "block" ) { elem.style.display = "none" link.innerHTML = "show source" } else { elem.style.display = "block" link.innerHTML = "hide source" } } function openCode( url ) { window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" ) } // ]]> </script> </head> <body> <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr> <td class="file-title"><span class="file-title-prefix">Class</span><br />SQLite3::ResultSet</td> <td align="right"> <table cellspacing=0 cellpadding=2> <tr valign="top"> <td>In:</td> <td> <a href="../../files/lib/sqlite3/resultset_rb.html">lib/sqlite3/resultset.rb</a> </td> </tr> <tr> <td>Parent:</td> <td> Object </td> </tr> </table> </td> </tr> </table> <!-- banner header --> <div id="bodyContent"> <div id="content"> <div class="description"><p> The <a href="ResultSet.html">ResultSet</a> object encapsulates the enumerability of a query‘s output. It is a simple cursor over the data that the query returns. It will very rarely (if ever) be instantiated directly. Instead, client‘s should obtain a <a href="ResultSet.html">ResultSet</a> instance via <a href="Statement.html#M000079">Statement#execute</a>. </p> </div> <div class="sectiontitle">Methods</div> <ul> <li><a href="#M000090">close</a></li> <li><a href="#M000091">closed?</a></li> <li><a href="#M000093">columns</a></li> <li><a href="#M000089">each</a></li> <li><a href="#M000087">eof?</a></li> <li><a href="#M000085">new</a></li> <li><a href="#M000088">next</a></li> <li><a href="#M000086">reset</a></li> <li><a href="#M000092">types</a></li> </ul> <div class="sectiontitle">Included Modules</div> <ul> <li>Enumerable</li> </ul> <div class="sectiontitle">Classes and Modules</div> Module <a href="ResultSet/FieldsContainer.html" class="link">SQLite3::ResultSet::FieldsContainer</a><br /> Module <a href="ResultSet/TypesContainer.html" class="link">SQLite3::ResultSet::TypesContainer</a><br /> <div class="sectiontitle">Public Class methods</div> <div class="method"> <div class="title"> <a name="M000085"></a><b>new</b>( db, stmt ) </div> <div class="description"> <p> Create a <a href="ResultSet.html#M000085">new</a> <a href="ResultSet.html">ResultSet</a> attached to the given database, using the given sql text. </p> </div> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000085_source')" id="l_M000085_source">show source</a> ]</p> <div id="M000085_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/sqlite3/resultset.rb, line 25</span> 25: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>( <span class="ruby-identifier">db</span>, <span class="ruby-identifier">stmt</span> ) 26: <span class="ruby-ivar">@db</span> = <span class="ruby-identifier">db</span> 27: <span class="ruby-ivar">@driver</span> = <span class="ruby-ivar">@db</span>.<span class="ruby-identifier">driver</span> 28: <span class="ruby-ivar">@stmt</span> = <span class="ruby-identifier">stmt</span> 29: <span class="ruby-identifier">commence</span> 30: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div class="sectiontitle">Public Instance methods</div> <div class="method"> <div class="title"> <a name="M000090"></a><b>close</b>() </div> <div class="description"> <p> Closes the statement that spawned this result set. <em>Use with caution!</em> Closing a result set will automatically <a href="ResultSet.html#M000090">close</a> any other result sets that were spawned from the same statement. </p> </div> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000090_source')" id="l_M000090_source">show source</a> ]</p> <div id="M000090_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/sqlite3/resultset.rb, line 143</span> 143: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">close</span> 144: <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">close</span> 145: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div class="method"> <div class="title"> <a name="M000091"></a><b>closed?</b>() </div> <div class="description"> <p> Queries whether the underlying statement has been closed or not. </p> </div> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000091_source')" id="l_M000091_source">show source</a> ]</p> <div id="M000091_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/sqlite3/resultset.rb, line 148</span> 148: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">closed?</span> 149: <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">closed?</span> 150: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div class="method"> <div class="title"> <a name="M000093"></a><b>columns</b>() </div> <div class="description"> <p> Returns the names of the <a href="ResultSet.html#M000093">columns</a> returned by this result set. </p> </div> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000093_source')" id="l_M000093_source">show source</a> ]</p> <div id="M000093_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/sqlite3/resultset.rb, line 158</span> 158: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">columns</span> 159: <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">columns</span> 160: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div class="method"> <div class="title"> <a name="M000089"></a><b>each</b>() {|row| ...} </div> <div class="description"> <p> Required by the Enumerable mixin. Provides an internal iterator over the rows of the result set. </p> </div> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000089_source')" id="l_M000089_source">show source</a> ]</p> <div id="M000089_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/sqlite3/resultset.rb, line 134</span> 134: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">each</span> 135: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">row</span>=<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">next</span> 136: <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">row</span> 137: <span class="ruby-keyword kw">end</span> 138: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div class="method"> <div class="title"> <a name="M000087"></a><b>eof?</b>() </div> <div class="description"> <p> Query whether the cursor has reached the end of the result set or not. </p> </div> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000087_source')" id="l_M000087_source">show source</a> ]</p> <div id="M000087_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/sqlite3/resultset.rb, line 63</span> 63: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">eof?</span> 64: <span class="ruby-ivar">@eof</span> 65: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div class="method"> <div class="title"> <a name="M000088"></a><b>next</b>() </div> <div class="description"> <p> Obtain the <a href="ResultSet.html#M000088">next</a> row from the cursor. If there are no more rows to be had, this will return <tt>nil</tt>. If type translation is active on the corresponding database, the values in the row will be translated according to their <a href="ResultSet.html#M000092">types</a>. </p> <p> The returned value will be an array, unless Database#results_as_hash has been set to <tt>true</tt>, in which case the returned value will be a hash. </p> <p> For arrays, the column names are accessible via the <tt>fields</tt> property, and the column <a href="ResultSet.html#M000092">types</a> are accessible via the <tt><a href="ResultSet.html#M000092">types</a></tt> property. </p> <p> For hashes, the column names are the keys of the hash, and the column <a href="ResultSet.html#M000092">types</a> are accessible via the <tt><a href="ResultSet.html#M000092">types</a></tt> property. </p> </div> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000088_source')" id="l_M000088_source">show source</a> ]</p> <div id="M000088_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/sqlite3/resultset.rb, line 80</span> 80: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">next</span> 81: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@eof</span> 82: 83: <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">must_be_open!</span> 84: 85: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@first_row</span> 86: <span class="ruby-identifier">result</span> = <span class="ruby-ivar">@driver</span>.<span class="ruby-identifier">step</span>( <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">handle</span> ) 87: <span class="ruby-identifier">check</span> <span class="ruby-identifier">result</span> 88: <span class="ruby-keyword kw">end</span> 89: 90: <span class="ruby-ivar">@first_row</span> = <span class="ruby-keyword kw">false</span> 91: 92: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@eof</span> 93: <span class="ruby-identifier">row</span> = [] 94: <span class="ruby-ivar">@driver</span>.<span class="ruby-identifier">data_count</span>( <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">handle</span> ).<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">column</span><span class="ruby-operator">|</span> 95: <span class="ruby-identifier">type</span> = <span class="ruby-ivar">@driver</span>.<span class="ruby-identifier">column_type</span>( <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">handle</span>, <span class="ruby-identifier">column</span> ) 96: 97: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Constants</span><span class="ruby-operator">::</span><span class="ruby-constant">ColumnType</span><span class="ruby-operator">::</span><span class="ruby-constant">TEXT</span> 98: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@driver</span>.<span class="ruby-identifier">column_text</span>( <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">handle</span>, <span class="ruby-identifier">column</span> ) 99: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Constants</span><span class="ruby-operator">::</span><span class="ruby-constant">ColumnType</span><span class="ruby-operator">::</span><span class="ruby-constant">NULL</span> 100: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-keyword kw">nil</span> 101: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Constants</span><span class="ruby-operator">::</span><span class="ruby-constant">ColumnType</span><span class="ruby-operator">::</span><span class="ruby-constant">BLOB</span> 102: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@driver</span>.<span class="ruby-identifier">column_blob</span>( <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">handle</span>, <span class="ruby-identifier">column</span> ) 103: <span class="ruby-keyword kw">else</span> 104: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@driver</span>.<span class="ruby-identifier">column_text</span>( <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">handle</span>, <span class="ruby-identifier">column</span> ) 105: <span class="ruby-keyword kw">end</span> 106: <span class="ruby-keyword kw">end</span> 107: 108: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@db</span>.<span class="ruby-identifier">type_translation</span> 109: <span class="ruby-identifier">row</span> = <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">types</span>.<span class="ruby-identifier">zip</span>( <span class="ruby-identifier">row</span> ).<span class="ruby-identifier">map</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">type</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span> 110: <span class="ruby-ivar">@db</span>.<span class="ruby-identifier">translator</span>.<span class="ruby-identifier">translate</span>( <span class="ruby-identifier">type</span>, <span class="ruby-identifier">value</span> ) 111: <span class="ruby-keyword kw">end</span> 112: <span class="ruby-keyword kw">end</span> 113: 114: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@db</span>.<span class="ruby-identifier">results_as_hash</span> 115: <span class="ruby-identifier">new_row</span> = <span class="ruby-constant">Hash</span>[ <span class="ruby-operator">*</span>( <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">columns</span>.<span class="ruby-identifier">zip</span>( <span class="ruby-identifier">row</span> ).<span class="ruby-identifier">flatten</span> ) ] 116: <span class="ruby-identifier">row</span>.<span class="ruby-identifier">each_with_index</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">value</span>,<span class="ruby-identifier">idx</span><span class="ruby-operator">|</span> <span class="ruby-identifier">new_row</span>[<span class="ruby-identifier">idx</span>] = <span class="ruby-identifier">value</span> } 117: <span class="ruby-identifier">row</span> = <span class="ruby-identifier">new_row</span> 118: <span class="ruby-keyword kw">else</span> 119: <span class="ruby-identifier">row</span>.<span class="ruby-identifier">extend</span> <span class="ruby-constant">FieldsContainer</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">row</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">:fields</span>) 120: <span class="ruby-identifier">row</span>.<span class="ruby-identifier">fields</span> = <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">columns</span> 121: <span class="ruby-keyword kw">end</span> 122: 123: <span class="ruby-identifier">row</span>.<span class="ruby-identifier">extend</span> <span class="ruby-constant">TypesContainer</span> 124: <span class="ruby-identifier">row</span>.<span class="ruby-identifier">types</span> = <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">types</span> 125: 126: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">row</span> 127: <span class="ruby-keyword kw">end</span> 128: 129: <span class="ruby-keyword kw">nil</span> 130: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div class="method"> <div class="title"> <a name="M000086"></a><b>reset</b>( *bind_params ) </div> <div class="description"> <p> Reset the cursor, so that a result set which has reached end-of-file can be rewound and reiterated. </p> </div> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000086_source')" id="l_M000086_source">show source</a> ]</p> <div id="M000086_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/sqlite3/resultset.rb, line 53</span> 53: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reset</span>( <span class="ruby-operator">*</span><span class="ruby-identifier">bind_params</span> ) 54: <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">must_be_open!</span> 55: <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">reset!</span>(<span class="ruby-keyword kw">false</span>) 56: <span class="ruby-ivar">@driver</span>.<span class="ruby-identifier">reset</span>( <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">handle</span> ) 57: <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">bind_params</span>( <span class="ruby-operator">*</span><span class="ruby-identifier">bind_params</span> ) 58: <span class="ruby-ivar">@eof</span> = <span class="ruby-keyword kw">false</span> 59: <span class="ruby-identifier">commence</span> 60: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div class="method"> <div class="title"> <a name="M000092"></a><b>types</b>() </div> <div class="description"> <p> Returns the <a href="ResultSet.html#M000092">types</a> of the <a href="ResultSet.html#M000093">columns</a> returned by this result set. </p> </div> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000092_source')" id="l_M000092_source">show source</a> ]</p> <div id="M000092_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/sqlite3/resultset.rb, line 153</span> 153: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">types</span> 154: <span class="ruby-ivar">@stmt</span>.<span class="ruby-identifier">types</span> 155: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> </div> </div> </body> </html>